From 0b08bf829bc906a6461d94a6a4e6bc2c13344d34 Mon Sep 17 00:00:00 2001 From: mrquentin <32539717+mrquentin@users.noreply.github.com> Date: Mon, 20 May 2024 06:11:14 -0400 Subject: [PATCH] Add Space Suite base on GTArmors (#19) --- build.gradle | 11 +-- .../armor/AdvancedNanoMuscleSpaceSuite.java | 28 ++++++ .../armor/AdvancedQuarkTechSpaceSuite.java | 28 ++++++ .../api/item/armor/ISpaceSuite.java | 68 +++++++++++++ .../api/item/armor/NanoMuscleSpaceSuite.java | 34 +++++++ .../api/item/armor/QuarkTechSpaceSuite.java | 29 ++++++ .../item/armor/SpaceArmorComponentItem.java | 93 ++++++++++++++++++ .../api/item/component/FluidStats.java | 9 ++ .../common/data/CosmicCoreDatagen.java | 13 ++- .../cosmiccore/common/data/CosmicItems.java | 40 ++++++++ .../common/data/tag/CosmicTagsHandler.java | 23 +++++ .../common/data/tag/item/CosmicItemTags.java | 12 +++ .../data/tag/item/CosmicItemTagsLoader.java | 22 +++++ .../space_advanced_nanomuscle_chestplate.png | Bin 0 -> 5773 bytes .../space_advanced_quarktech_chestplate.png | Bin 0 -> 6654 bytes .../item/space_nanomuscle_chestplate.png | Bin 0 -> 5773 bytes .../item/space_quarktech_chestplate.png | Bin 0 -> 6478 bytes 17 files changed, 397 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedNanoMuscleSpaceSuite.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedQuarkTechSpaceSuite.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/armor/ISpaceSuite.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/armor/NanoMuscleSpaceSuite.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/armor/QuarkTechSpaceSuite.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/armor/SpaceArmorComponentItem.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/api/item/component/FluidStats.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/common/data/tag/CosmicTagsHandler.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTags.java create mode 100644 src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTagsLoader.java create mode 100644 src/main/resources/assets/cosmiccore/textures/item/space_advanced_nanomuscle_chestplate.png create mode 100644 src/main/resources/assets/cosmiccore/textures/item/space_advanced_quarktech_chestplate.png create mode 100644 src/main/resources/assets/cosmiccore/textures/item/space_nanomuscle_chestplate.png create mode 100644 src/main/resources/assets/cosmiccore/textures/item/space_quarktech_chestplate.png diff --git a/build.gradle b/build.gradle index 45a4a74..ee59b95 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,6 @@ loom { // this will be added to the jar manifest as well! mixinConfigs = [ "cosmiccore.mixins.json" - ] // missing access transformers? @@ -47,12 +46,7 @@ loom { runConfigs.named("data").configure { programArg("--existing=" + file("src/main/resources").absolutePath) programArgs("--client", "--server") - - - } - - } repositories { @@ -165,10 +159,11 @@ dependencies { // Mixin Extras implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:${project.mixinextras_version}")) implementation(include("io.github.llamalad7:mixinextras-forge:${project.mixinextras_version}")) + annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' // lombok - compileOnly 'org.projectlombok:lombok:1.18.24' - annotationProcessor 'org.projectlombok:lombok:1.18.24' + compileOnly 'org.projectlombok:lombok:1.18.32' + annotationProcessor 'org.projectlombok:lombok:1.18.32' } processResources { diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedNanoMuscleSpaceSuite.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedNanoMuscleSpaceSuite.java new file mode 100644 index 0000000..cd5f985 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedNanoMuscleSpaceSuite.java @@ -0,0 +1,28 @@ +package com.ghostipedia.cosmiccore.api.item.armor; + +import com.gregtechceu.gtceu.common.item.armor.AdvancedNanoMuscleSuite; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class AdvancedNanoMuscleSpaceSuite extends AdvancedNanoMuscleSuite implements ISpaceSuite { + + public AdvancedNanoMuscleSpaceSuite(int energyPerUse, long capacity, int tier) { + super(energyPerUse, capacity, tier); + } + + @Override + public void onArmorTick(Level world, Player player, ItemStack itemStack) { + super.onArmorTick(world, player, itemStack); + onArmorTick(world, player, itemStack, type); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + super.addInfo(itemStack, lines); + addInfo(itemStack, lines, type); + } +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedQuarkTechSpaceSuite.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedQuarkTechSpaceSuite.java new file mode 100644 index 0000000..021649d --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/AdvancedQuarkTechSpaceSuite.java @@ -0,0 +1,28 @@ +package com.ghostipedia.cosmiccore.api.item.armor; + +import com.gregtechceu.gtceu.common.item.armor.AdvancedQuarkTechSuite; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class AdvancedQuarkTechSpaceSuite extends AdvancedQuarkTechSuite implements ISpaceSuite { + + public AdvancedQuarkTechSpaceSuite(int energyPerUse, long capacity, int tier) { + super(energyPerUse, capacity, tier); + } + + @Override + public void onArmorTick(Level world, Player player, ItemStack itemStack) { + super.onArmorTick(world, player, itemStack); + onArmorTick(world, player, itemStack, type); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + super.addInfo(itemStack, lines); + addInfo(itemStack, lines, type); + } +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/ISpaceSuite.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/ISpaceSuite.java new file mode 100644 index 0000000..a51c263 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/ISpaceSuite.java @@ -0,0 +1,68 @@ +package com.ghostipedia.cosmiccore.api.item.armor; + +import com.ghostipedia.cosmiccore.common.data.tag.item.CosmicItemTags; +import earth.terrarium.adastra.api.systems.OxygenApi; +import earth.terrarium.adastra.common.constants.ConstantComponents; +import earth.terrarium.adastra.common.registry.ModFluids; +import earth.terrarium.adastra.common.utils.FluidUtils; +import earth.terrarium.adastra.common.utils.TooltipUtils; +import earth.terrarium.botarium.common.fluid.FluidConstants; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import java.util.List; +import java.util.stream.StreamSupport; + +public interface ISpaceSuite { + + default void tickOxygen(Level Level, Player player, ItemStack itemStack) { + if (Level.isClientSide) return; + if (player.isCreative() || player.isSpectator()) return; + if (!(itemStack.getItem() instanceof SpaceArmorComponentItem suit)) return; + if (!hasFullNanoSet(player) && !hasFullQuantumSet(player)) return; + player.setTicksFrozen(0); + if (player.tickCount % 12 == 0 && suit.hasOxygen(player)) { + if (!OxygenApi.API.hasOxygen(player)) suit.consumeOxygen(itemStack, 1); + if (player.isEyeInFluid(FluidTags.WATER)) { + suit.consumeOxygen(itemStack, 1); + player.setAirSupply(Math.min(player.getMaxAirSupply(), player.getAirSupply() + 4 * 10)); + } + } + } + + static boolean hasFullNanoSet(LivingEntity entity) { + return hasFullSet(entity, CosmicItemTags.NANOMUSCLE_SPACE_SUITE); + } + + static boolean hasFullQuantumSet(LivingEntity entity) { + return hasFullSet(entity, CosmicItemTags.QUARKTECH_SPACE_SUITE); + } + + static boolean hasFullSet(LivingEntity entity, TagKey tagKey) { + return StreamSupport.stream(entity.getArmorSlots().spliterator(), false) + .allMatch(itemStack -> itemStack.is(tagKey)); + } + + + default void onArmorTick(Level Level, Player player, ItemStack itemStack, ArmorItem.Type type) { + if (type == ArmorItem.Type.CHESTPLATE) this.tickOxygen(Level, player, itemStack); + } + + default void addInfo(ItemStack itemStack, List lines, ArmorItem.Type type) { + if (type == ArmorItem.Type.CHESTPLATE && itemStack.getItem() instanceof SpaceArmorComponentItem suit) { + lines.add(TooltipUtils.getFluidComponent( + FluidUtils.getTank(itemStack), + FluidConstants.fromMillibuckets(suit.getFluidContainer(itemStack).getTankCapacity(0)), + ModFluids.OXYGEN.get())); + TooltipUtils.addDescriptionComponent(lines, ConstantComponents.SPACE_SUIT_INFO); + } + } + +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/NanoMuscleSpaceSuite.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/NanoMuscleSpaceSuite.java new file mode 100644 index 0000000..88b4002 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/NanoMuscleSpaceSuite.java @@ -0,0 +1,34 @@ +package com.ghostipedia.cosmiccore.api.item.armor; + +import com.gregtechceu.gtceu.common.item.armor.NanoMuscleSuite; +import earth.terrarium.adastra.common.constants.ConstantComponents; +import earth.terrarium.adastra.common.registry.ModFluids; +import earth.terrarium.adastra.common.utils.FluidUtils; +import earth.terrarium.adastra.common.utils.TooltipUtils; +import earth.terrarium.botarium.common.fluid.FluidConstants; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class NanoMuscleSpaceSuite extends NanoMuscleSuite implements ISpaceSuite { + + public NanoMuscleSpaceSuite(ArmorItem.Type slot, int energyPerUse, long maxCapacity, int tier) { + super(slot, energyPerUse, maxCapacity, tier); + } + + @Override + public void onArmorTick(Level world, Player player, ItemStack itemStack) { + super.onArmorTick(world, player, itemStack); + onArmorTick(world, player, itemStack, type); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + super.addInfo(itemStack, lines); + addInfo(itemStack, lines, type); + } +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/QuarkTechSpaceSuite.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/QuarkTechSpaceSuite.java new file mode 100644 index 0000000..6a0c546 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/QuarkTechSpaceSuite.java @@ -0,0 +1,29 @@ +package com.ghostipedia.cosmiccore.api.item.armor; + +import com.gregtechceu.gtceu.common.item.armor.QuarkTechSuite; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class QuarkTechSpaceSuite extends QuarkTechSuite implements ISpaceSuite{ + + public QuarkTechSpaceSuite(ArmorItem.Type slot, int energyPerUse, long capacity, int tier) { + super(slot, energyPerUse, capacity, tier); + } + + @Override + public void onArmorTick(Level world, Player player, ItemStack itemStack) { + super.onArmorTick(world, player, itemStack); + onArmorTick(world, player, itemStack, type); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + super.addInfo(itemStack, lines); + addInfo(itemStack, lines, type); + } +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/SpaceArmorComponentItem.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/SpaceArmorComponentItem.java new file mode 100644 index 0000000..150aabd --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/armor/SpaceArmorComponentItem.java @@ -0,0 +1,93 @@ +package com.ghostipedia.cosmiccore.api.item.armor; + +import com.gregtechceu.gtceu.api.item.armor.ArmorComponentItem; +import com.gregtechceu.gtceu.api.item.armor.IArmorLogic; +import com.gregtechceu.gtceu.api.item.component.IDurabilityBar; +import com.gregtechceu.gtceu.api.item.component.IItemComponent; +import earth.terrarium.adastra.common.tags.ModFluidTags; +import earth.terrarium.adastra.common.utils.FluidUtils; +import earth.terrarium.botarium.common.fluid.FluidConstants; +import earth.terrarium.botarium.common.fluid.base.BotariumFluidItem; +import earth.terrarium.botarium.common.fluid.base.FluidContainer; +import earth.terrarium.botarium.common.fluid.base.FluidHolder; +import earth.terrarium.botarium.common.fluid.impl.SimpleFluidContainer; +import earth.terrarium.botarium.common.fluid.impl.WrappedItemFluidContainer; +import earth.terrarium.botarium.common.fluid.utils.ClientFluidHooks; +import earth.terrarium.botarium.common.item.ItemStackHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; + +import java.util.List; + +public class SpaceArmorComponentItem extends ArmorComponentItem implements BotariumFluidItem { + + protected final long tankSize; + + public SpaceArmorComponentItem(ArmorMaterial material, Type type, long size, Properties properties) { + super(material, type, properties); + this.tankSize = size; + } + + @Override + public void attachComponents(IItemComponent... components) { + super.attachComponents(components); + + IDurabilityBar durabilityBar = new IDurabilityBar() { + @Override + public int getBarColor(ItemStack stack) { + return ClientFluidHooks.getFluidColor(FluidUtils.getTank(stack)); + } + + @Override + public int getBarWidth(ItemStack stack) { + var fluidContainer = getFluidContainer(stack); + return (int) (((double) fluidContainer.getFirstFluid().getFluidAmount() / fluidContainer.getTankCapacity(0)) * 13); + } + + @Override + public boolean isBarVisible(ItemStack stack) { + return FluidUtils.hasFluid(stack); + } + + @Override + public boolean showEmptyBar(ItemStack itemStack) { + return false; + } + }; + + this.components.add(durabilityBar); + durabilityBar.onAttached(this); + } + + public SpaceArmorComponentItem setArmorLogic(IArmorLogic armorLogic) { + return (SpaceArmorComponentItem) super.setArmorLogic(armorLogic); + } + + @Override + public WrappedItemFluidContainer getFluidContainer(ItemStack holder) { + return new WrappedItemFluidContainer(holder, + new SimpleFluidContainer(FluidConstants.fromMillibuckets(tankSize), 1, (t, f) -> f.is(ModFluidTags.OXYGEN))); + } + + public long getOxygenAmount(Entity entity) { + if (!(entity instanceof LivingEntity livingEntity)) return 0; + var stack = livingEntity.getItemBySlot(EquipmentSlot.CHEST); + if (!(stack.getItem() instanceof SpaceArmorComponentItem suit)) return 0; + return suit.getFluidContainer(stack).getFirstFluid().getFluidAmount(); + } + + public boolean hasOxygen(Entity entity) { + return getOxygenAmount(entity) > FluidConstants.fromMillibuckets(1); + } + + public void consumeOxygen(ItemStack stack, long amount) { + ItemStackHolder holder = new ItemStackHolder(stack); + var container = FluidContainer.of(holder); + if (container == null) return; + FluidHolder extracted = container.extractFluid(container.getFirstFluid().copyWithAmount(FluidConstants.fromMillibuckets(amount)), false); + if (holder.isDirty() || extracted.getFluidAmount() > 0) stack.setTag(holder.getStack().getTag()); + } +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/api/item/component/FluidStats.java b/src/main/java/com/ghostipedia/cosmiccore/api/item/component/FluidStats.java new file mode 100644 index 0000000..7251a09 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/api/item/component/FluidStats.java @@ -0,0 +1,9 @@ +package com.ghostipedia.cosmiccore.api.item.component; + +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; + +public class FluidStats { + public FluidStats() { + + } +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicCoreDatagen.java b/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicCoreDatagen.java index a5192ca..807bc7d 100644 --- a/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicCoreDatagen.java +++ b/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicCoreDatagen.java @@ -2,16 +2,19 @@ import com.ghostipedia.cosmiccore.api.registries.CosmicRegistration; import com.ghostipedia.cosmiccore.common.data.lang.CosmicLangHandler; +import com.ghostipedia.cosmiccore.common.data.tag.CosmicTagsHandler; import com.gregtechceu.gtceu.common.registry.GTRegistration; +import com.gregtechceu.gtceu.data.tags.TagsHandler; import com.tterrag.registrate.providers.ProviderType; public class CosmicCoreDatagen { + public static void init() { - //TODO: IDK IF I NEED THESE YET, MIGHT BE NEEDED IDK -// CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, TagsHandler::initItem); -// CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, TagsHandler::initBlock); -// CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, TagsHandler::initFluid); -// CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.ENTITY_TAGS, TagsHandler::initEntity); + CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, CosmicTagsHandler::initItem); + CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, CosmicTagsHandler::initBlock); + CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, CosmicTagsHandler::initFluid); + CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.ENTITY_TAGS, CosmicTagsHandler::initEntity); CosmicRegistration.REGISTRATE.addDataGenerator(ProviderType.LANG, CosmicLangHandler::init); } + } diff --git a/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicItems.java b/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicItems.java index c2c74ce..499bfc4 100644 --- a/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicItems.java +++ b/src/main/java/com/ghostipedia/cosmiccore/common/data/CosmicItems.java @@ -1,10 +1,16 @@ package com.ghostipedia.cosmiccore.common.data; +import com.ghostipedia.cosmiccore.api.item.armor.*; import com.ghostipedia.cosmiccore.api.registries.CosmicRegistration; +import com.ghostipedia.cosmiccore.common.data.tag.item.CosmicItemTags; import com.gregtechceu.gtceu.api.item.ComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; +import com.gregtechceu.gtceu.common.item.armor.GTArmorMaterials; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.tterrag.registrate.util.entry.ItemEntry; import com.tterrag.registrate.util.nullness.NonNullConsumer; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.Rarity; import static com.ghostipedia.cosmiccore.api.registries.CosmicRegistration.REGISTRATE; @@ -146,6 +152,40 @@ public class CosmicItems { .defaultModel() .register(); + // Space Suite + public static ItemEntry SPACE_NANO_CHESTPLATE = REGISTRATE.item("space_nanomuscle_chestplate", (p) -> new SpaceArmorComponentItem(GTArmorMaterials.ARMOR, ArmorItem.Type.CHESTPLATE, 5000, p) + .setArmorLogic(new NanoMuscleSpaceSuite(ArmorItem.Type.CHESTPLATE, 512, + 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.INSTANCE.tools.voltageTierNanoSuit - 3)), + ConfigHolder.INSTANCE.tools.voltageTierNanoSuit))) + .tag(CosmicItemTags.NANOMUSCLE_SPACE_SUITE) + .lang("NanoMuscle™ Space Suite Chestplate") + .properties(p -> p.rarity(Rarity.RARE)) + .register(); + public static ItemEntry ADVANCED_SPACE_NANO_CHESTPLATE = REGISTRATE.item("space_advanced_nanomuscle_chestplate", (p) -> new SpaceArmorComponentItem(GTArmorMaterials.ARMOR, ArmorItem.Type.CHESTPLATE, 10000, p) + .setArmorLogic(new AdvancedNanoMuscleSpaceSuite(512, + 12_800_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.INSTANCE.tools.voltageTierAdvNanoSuit - 3)), + ConfigHolder.INSTANCE.tools.voltageTierAdvNanoSuit))) + .tag(CosmicItemTags.NANOMUSCLE_SPACE_SUITE) + .lang("Advanced NanoMuscle™ Space Suite Chestplate") + .properties(p -> p.rarity(Rarity.EPIC)) + .register(); + public static ItemEntry SPACE_QUARK_CHESTPLATE = REGISTRATE.item("space_quarktech_chestplate", (p) -> new SpaceArmorComponentItem(GTArmorMaterials.ARMOR, ArmorItem.Type.CHESTPLATE, 20000, p) + .setArmorLogic(new QuarkTechSpaceSuite(ArmorItem.Type.CHESTPLATE, 8192, + 100_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.INSTANCE.tools.voltageTierQuarkTech - 5)), + ConfigHolder.INSTANCE.tools.voltageTierNanoSuit))) + .tag(CosmicItemTags.QUARKTECH_SPACE_SUITE) + .lang("NanoMuscle™ Space Suite Chestplate") + .properties(p -> p.rarity(Rarity.RARE)) + .register(); + public static ItemEntry ADVANCED_SPACE_QUARK_CHESTPLATE = REGISTRATE.item("space_advanced_quarktech_chestplate", (p) -> new SpaceArmorComponentItem(GTArmorMaterials.ARMOR, ArmorItem.Type.CHESTPLATE, 50000, p) + .setArmorLogic(new AdvancedQuarkTechSpaceSuite(8192, + 1_000_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.INSTANCE.tools.voltageTierAdvQuarkTech - 6)), + ConfigHolder.INSTANCE.tools.voltageTierAdvNanoSuit))) + .tag(CosmicItemTags.QUARKTECH_SPACE_SUITE) + .lang("Advanced NanoMuscle™ Space Suite Chestplate") + .properties(p -> p.rarity(Rarity.EPIC)) + .register(); + public static NonNullConsumer attach(IItemComponent... components) { return item -> item.attachComponents(components); } diff --git a/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/CosmicTagsHandler.java b/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/CosmicTagsHandler.java new file mode 100644 index 0000000..15d79ee --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/CosmicTagsHandler.java @@ -0,0 +1,23 @@ +package com.ghostipedia.cosmiccore.common.data.tag; + +import com.ghostipedia.cosmiccore.common.data.tag.item.CosmicItemTagsLoader; +import com.tterrag.registrate.providers.RegistrateTagsProvider; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.material.Fluid; + +public class CosmicTagsHandler { + + public static void initItem(RegistrateTagsProvider provider) { + CosmicItemTagsLoader.init(provider); + } + + public static void initBlock(RegistrateTagsProvider provider) {} + + public static void initFluid(RegistrateTagsProvider provider) {} + + public static void initEntity(RegistrateTagsProvider> provider) {} + +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTags.java b/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTags.java new file mode 100644 index 0000000..8e20727 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTags.java @@ -0,0 +1,12 @@ +package com.ghostipedia.cosmiccore.common.data.tag.item; + +import com.ghostipedia.cosmiccore.common.data.tag.TagUtil; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; + +public class CosmicItemTags { + + public static final TagKey NANOMUSCLE_SPACE_SUITE = TagUtil.createModItemTag("nano_space_suite"); + public static final TagKey QUARKTECH_SPACE_SUITE = TagUtil.createModItemTag("quantum_space_suite"); + +} diff --git a/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTagsLoader.java b/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTagsLoader.java new file mode 100644 index 0000000..1bae1f0 --- /dev/null +++ b/src/main/java/com/ghostipedia/cosmiccore/common/data/tag/item/CosmicItemTagsLoader.java @@ -0,0 +1,22 @@ +package com.ghostipedia.cosmiccore.common.data.tag.item; + +import com.gregtechceu.gtceu.common.data.GTItems; +import com.tterrag.registrate.providers.RegistrateTagsProvider; +import com.tterrag.registrate.util.entry.ItemEntry; +import net.minecraft.tags.TagEntry; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; + +public class CosmicItemTagsLoader { + + public static void init(RegistrateTagsProvider provider) { + create(provider, CosmicItemTags.NANOMUSCLE_SPACE_SUITE, GTItems.NANO_HELMET, GTItems.NANO_LEGGINGS, GTItems.NANO_BOOTS); + create(provider, CosmicItemTags.QUARKTECH_SPACE_SUITE, GTItems.QUANTUM_HELMET, GTItems.QUANTUM_LEGGINGS, GTItems.QUANTUM_BOOTS); + } + + private static void create(RegistrateTagsProvider provider, TagKey tagKey, ItemEntry... items) { + var builder = provider.addTag(tagKey); + for (ItemEntry itemEntry : items) builder.add(TagEntry.element(itemEntry.getId())); + } + +} diff --git a/src/main/resources/assets/cosmiccore/textures/item/space_advanced_nanomuscle_chestplate.png b/src/main/resources/assets/cosmiccore/textures/item/space_advanced_nanomuscle_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..102e810e1b6deb6ed052ae01355e2d8c30e9e9b8 GIT binary patch literal 5773 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 Z00P3ujnbErlW>;+ET;{QrS_YX{|)(e`!E0i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/cosmiccore/textures/item/space_advanced_quarktech_chestplate.png b/src/main/resources/assets/cosmiccore/textures/item/space_advanced_quarktech_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..87b22413f553f015c982fce82684455bcce410e6 GIT binary patch literal 6654 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/cosmiccore/textures/item/space_nanomuscle_chestplate.png b/src/main/resources/assets/cosmiccore/textures/item/space_nanomuscle_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..b3dba3de17a81c7db5b51d80654db8d6beae6a59 GIT binary patch literal 5773 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 RQ6Sv{_;@UFKkT|TtZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/cosmiccore/textures/item/space_quarktech_chestplate.png b/src/main/resources/assets/cosmiccore/textures/item/space_quarktech_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..fb17a86f4f61d6537e0bf1f2f23387e740ed726e GIT binary patch literal 6478 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 SO#>|q0-52haAigwk^ci?rc?X? literal 0 HcmV?d00001