From 797301291d43afa24e9fa43a47affcdd595abf4b Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Tue, 27 Jun 2023 04:38:13 -0500 Subject: [PATCH 01/12] start of new armor system --- .../api/items/armoritem/IArmorBehavior.java | 56 +++++++ .../items/armoritem/IGTArmorDefinition.java | 36 +++++ .../api/items/armoritem/ItemGTArmor.java | 148 ++++++++++++++++++ .../items/armoritem/ItemGTElectricArmor.java | 33 ++++ .../api/items/armoritem/package-info.java | 12 ++ .../gregtech/common/ArmorEventHandlers.java | 35 +++++ 6 files changed, 320 insertions(+) create mode 100644 src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java create mode 100644 src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java create mode 100644 src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java create mode 100644 src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java create mode 100644 src/main/java/gregtech/api/items/armoritem/package-info.java create mode 100644 src/main/java/gregtech/common/ArmorEventHandlers.java diff --git a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java new file mode 100644 index 00000000000..c80944c6d26 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java @@ -0,0 +1,56 @@ +package gregtech.api.items.armoritem; + +import gregtech.api.util.GTUtility; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public interface IArmorBehavior { + + /** + * Called every tick that this behavior's armor item is equipped. + * + * @return If something was done this tick that needs durability loss or energy drain to be applied. + */ + default boolean onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + return false; + } + + /** Called when this behavior's armor item is unequipped. */ + default void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + } + + /** Called when this behavior's armor item is equipped, as well as when the player logs into the world or is cloned. */ + default void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + } + + /** Add to this behavior's armor item tooltip. */ + default void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + } + + /** Get the equipment slot for this behavior's armor item. Provided since the method call is somewhat obscure. */ + default EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { + return EntityLiving.getSlotForItemStack(stack); + } + + // todo try to remove/refactor this + default NBTTagCompound getBehaviorTag(@NotNull ItemStack stack, @NotNull String key) { + NBTTagCompound tag = GTUtility.getOrCreateNbtCompound(stack); + NBTTagCompound subTag; + if (tag.hasKey(key)) { + subTag = tag.getCompoundTag(key); + } else { + subTag = new NBTTagCompound(); + tag.setTag(key, subTag); + } + return subTag; + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java new file mode 100644 index 00000000000..cc328075dac --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java @@ -0,0 +1,36 @@ +package gregtech.api.items.armoritem; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraftforge.common.IRarity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +// TODO A lot of these do not need to be in the "definition" class, but in the Item class +public interface IGTArmorDefinition { + + List getBehaviors(); + + /* ArmorProperties */ + double getDamageAbsorption(EntityEquipmentSlot slot, @Nullable DamageSource damageSource); + + List handledUnblockableSources(); + + String getArmorTexture(); + + // meaning, does this item ever break or does it just use power or something + boolean canBreakWithDamage(); + + boolean isEnchantable(); + + int getEnchantability(); + + IRarity getRarity(); +} diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java new file mode 100644 index 00000000000..2aa9335cd19 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java @@ -0,0 +1,148 @@ +package gregtech.api.items.armoritem; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnumEnchantmentType; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraftforge.common.IRarity; +import net.minecraftforge.common.ISpecialArmor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ItemGTArmor extends ItemArmor implements ISpecialArmor { + + protected final EntityEquipmentSlot equipmentSlot; + protected final IGTArmorDefinition armorDefinition; + + public ItemGTArmor(IGTArmorDefinition armorDefinition, EntityEquipmentSlot equipmentSlot) { + super(ArmorMaterial.DIAMOND, 0, equipmentSlot); + this.armorDefinition = armorDefinition; + this.equipmentSlot = equipmentSlot; + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { + // todo this is gonna be a huge mess to unravel + return new ArmorProperties(0, 0, 0); + } + + @Override + public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { + return (int) Math.round(20.0F * getDamageModifier() * armorDefinition.getDamageAbsorption(equipmentSlot, null)); + } + + @Override + public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { + if (armorDefinition.canBreakWithDamage()) { + // todo need to do actual damage and save to NBT here, as "default" armor can break + // todo then override in ItemGTElectricArmor can do it as energy instead (or in addition to) + } + } + + @Override + public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { + return armorDefinition.handledUnblockableSources().contains(source); + } + + @Override + public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + int numEffects = 0; + for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + if (behavior.onArmorTick(world, player, stack)) { + numEffects++; + } + } + if (numEffects > 0 && !world.isRemote) { + // todo passing a null DamageSource into here may cause problems + damageArmor(player, stack, null, numEffects, equipmentSlot.getIndex()); + } + } + + public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + behavior.onArmorUnequip(world, player, stack); + } + } + + public void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + behavior.onArmorEquip(world, player, stack); + } + } + + // todo make sure this works with how we end up doing the builder class + @Override + public @Nullable String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, @NotNull EntityEquipmentSlot slot, @NotNull String type) { + return armorDefinition.getArmorTexture(); + } + + @Override + public @NotNull IRarity getForgeRarity(@NotNull ItemStack stack) { + return armorDefinition.getRarity(); + } + + @Override + public int getItemEnchantability() { + return armorDefinition.getEnchantability(); + } + + @Override + public boolean isEnchantable(@NotNull ItemStack stack) { + return armorDefinition.isEnchantable(); + } + + @Override + public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Enchantment enchantment) { + if (enchantment.type == null) return false; + + if (!armorDefinition.canBreakWithDamage() && enchantment.type == EnumEnchantmentType.BREAKABLE) { + return false; + } + + // todo this should be good enough, but the below might be needed + return super.canApplyAtEnchantingTable(stack, enchantment); + + //return switch (equipmentSlot) { + // case HEAD -> enchantment.type.canEnchantItem(Items.DIAMOND_HELMET); + // case CHEST -> enchantment.type.canEnchantItem(Items.DIAMOND_CHESTPLATE); + // case LEGS -> enchantment.type.canEnchantItem(Items.DIAMOND_LEGGINGS); + // case FEET -> enchantment.type.canEnchantItem(Items.DIAMOND_BOOTS); + // default -> enchantment.isAllowedOnBooks(); + //}; + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + // todo armor toughness tooltip + for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + behavior.addInformation(stack, world, tooltip, flag); + } + } + + protected float getDamageModifier() { + return switch (equipmentSlot) { + case HEAD, FEET -> 0.15f; + case CHEST -> 0.4f; + case LEGS -> 0.3f; + default -> 0.0f; + }; + } + + private static EntityEquipmentSlot getSlotByIndex(int index) { + return switch (index) { + case 0 -> EntityEquipmentSlot.FEET; + case 1 -> EntityEquipmentSlot.LEGS; + case 2 -> EntityEquipmentSlot.CHEST; + default -> EntityEquipmentSlot.HEAD; + }; + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java new file mode 100644 index 00000000000..b0b08496c38 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java @@ -0,0 +1,33 @@ +package gregtech.api.items.armoritem; + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +public class ItemGTElectricArmor extends ItemGTArmor { + + protected final int energyPerUse; // todo better name + + public ItemGTElectricArmor(IGTArmorDefinition armorDefinition, EntityEquipmentSlot equipmentSlot) { + // todo + super(armorDefinition, equipmentSlot); + this.energyPerUse = 0; + } + + protected IElectricItem getElectricItem(ItemStack armor) { + return armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + } + + @Override + public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { + IElectricItem electricItem = getElectricItem(armor); + if (electricItem == null) return 0; + if (electricItem.getCharge() < energyPerUse) { + return (int) Math.round(4.0f * getDamageModifier() * armorDefinition.getDamageAbsorption(equipmentSlot, null)); + } + return super.getArmorDisplay(player, armor, slot); + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/package-info.java b/src/main/java/gregtech/api/items/armoritem/package-info.java new file mode 100644 index 00000000000..bddb1531fd6 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/package-info.java @@ -0,0 +1,12 @@ +/** + * Package for the new Armor implementation for GTCEu. + * Old armor implementation can be found in {@link gregtech.api.items.armor}, + * which is slated for removal in v... TODO + * + * TODO Old armor logic should be removed immediately, items should exist + * TODO with the purpose of recipes to convert them to the new items. + * + * @since v... TODO + * @author serenibyss + */ +package gregtech.api.items.armoritem; diff --git a/src/main/java/gregtech/common/ArmorEventHandlers.java b/src/main/java/gregtech/common/ArmorEventHandlers.java new file mode 100644 index 00000000000..5cbe50e8ab0 --- /dev/null +++ b/src/main/java/gregtech/common/ArmorEventHandlers.java @@ -0,0 +1,35 @@ +package gregtech.common; + +import gregtech.api.GTValues; +import gregtech.api.items.armoritem.ItemGTArmor; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod.EventBusSubscriber(modid = GTValues.MODID) +public class ArmorEventHandlers { + + @SubscribeEvent + public static void onLivingEquipmentChange(LivingEquipmentChangeEvent event) { + EntityEquipmentSlot slot = event.getSlot(); + if (slot == EntityEquipmentSlot.MAINHAND || slot == EntityEquipmentSlot.OFFHAND) { + return; + } + if (!(event.getEntityLiving() instanceof EntityPlayer player)) { + return; + } + // maybe unnecessary sanity check to make sure this same item wasn't immediately re-equipped + if (event.getFrom().isItemEqual(event.getTo())) { + return; + } + + if (event.getFrom().getItem() instanceof ItemGTArmor armor) { + armor.onArmorUnequip(player.getEntityWorld(), player, event.getFrom()); + } + if (event.getTo().getItem() instanceof ItemGTArmor armor) { + armor.onArmorEquip(player.getEntityWorld(), player, event.getTo()); + } + } +} From 220fbe8c2619535859cb741db9f3ebfbb6c9c428 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Tue, 27 Jun 2023 15:23:44 -0500 Subject: [PATCH 02/12] initial keybind listener work --- .../api/util/input/IKeyPressedListener.java | 8 ++++++++ .../java/gregtech/api/util/input/KeyBind.java | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/java/gregtech/api/util/input/IKeyPressedListener.java diff --git a/src/main/java/gregtech/api/util/input/IKeyPressedListener.java b/src/main/java/gregtech/api/util/input/IKeyPressedListener.java new file mode 100644 index 00000000000..a6a5616379f --- /dev/null +++ b/src/main/java/gregtech/api/util/input/IKeyPressedListener.java @@ -0,0 +1,8 @@ +package gregtech.api.util.input; + +import net.minecraft.entity.player.EntityPlayerMP; + +public interface IKeyPressedListener { + + void onKeyPressed(EntityPlayerMP player); +} diff --git a/src/main/java/gregtech/api/util/input/KeyBind.java b/src/main/java/gregtech/api/util/input/KeyBind.java index 74ec9442afb..194f5aa13a6 100644 --- a/src/main/java/gregtech/api/util/input/KeyBind.java +++ b/src/main/java/gregtech/api/util/input/KeyBind.java @@ -89,6 +89,7 @@ public static boolean scrollingDown() { private boolean isPressed, isKeyDown; private final WeakHashMap> mapping = new WeakHashMap<>(); + private final WeakHashMap> listeners = new WeakHashMap<>(); // For Vanilla/Other Mod keybinds // Double Supplier to keep client classes from loading @@ -134,6 +135,12 @@ public void update(boolean pressed, boolean keyDown, EntityPlayerMP player) { } else { pair.left = pressed; pair.right = keyDown; + if (pressed) { + Set listenerSet = listeners.get(player); + if (listenerSet != null && !listenerSet.isEmpty()) { + for (var listener : listenerSet) listener.onKeyPressed(player); + } + } } } @@ -154,4 +161,17 @@ public boolean isKeyDown(EntityPlayer player) { return pair != null && pair.right; } } + + public void registerListener(EntityPlayerMP player, IKeyPressedListener listener) { + Set listenerSet = listeners.computeIfAbsent(player, k -> new HashSet<>()); + listenerSet.add(listener); + } + + public void removeListener(EntityPlayerMP player, IKeyPressedListener listener) { + Set listenerSet = listeners.get(player); + if (listenerSet != null) { + listenerSet.remove(listener); + } + } + } From 5b0fa17255cda012bba73e3fb8ff64052bb81a4f Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Tue, 27 Jun 2023 18:33:38 -0500 Subject: [PATCH 03/12] functioning IArmorBehaviors --- .../api/damagesources/DamageSources.java | 5 + .../api/items/armor/ArmorMetaItem.java | 59 ++++----- .../gregtech/api/items/armor/IArmorItem.java | 8 -- .../gregtech/api/items/armor/IArmorLogic.java | 22 ---- .../api/items/armoritem/ArmorBuilder.java | 108 +++++++++++++++ .../api/items/armoritem/IArmorBehavior.java | 22 ++++ .../api/items/armoritem/IGTArmor.java | 20 +++ .../items/armoritem/IGTArmorDefinition.java | 8 +- .../api/items/armoritem/ItemGTArmor.java | 124 +++++++++++++++--- .../items/armoritem/ItemGTElectricArmor.java | 115 ++++++++++++++-- .../api/util/input/IKeyPressedListener.java | 2 +- .../java/gregtech/api/util/input/KeyBind.java | 69 +++++----- .../gregtech/asm/hooks/ArmorRenderHooks.java | 25 ++-- .../java/gregtech/common/CommonProxy.java | 6 + .../gregtech/common/items/ArmorItems.java | 91 +++++++++++++ .../java/gregtech/common/items/MetaItems.java | 2 - .../common/items/armor/MetaArmor.java | 71 ---------- .../items/armor/NightvisionBehavior.java | 78 +++++++++++ src/main/java/gregtech/core/CoreModule.java | 6 +- .../network/packets/PacketKeyPressed.java | 45 +++++++ ...etKeysPressed.java => PacketKeysDown.java} | 20 ++- 21 files changed, 669 insertions(+), 237 deletions(-) create mode 100644 src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java create mode 100644 src/main/java/gregtech/api/items/armoritem/IGTArmor.java create mode 100644 src/main/java/gregtech/common/items/ArmorItems.java create mode 100644 src/main/java/gregtech/common/items/armor/NightvisionBehavior.java create mode 100644 src/main/java/gregtech/core/network/packets/PacketKeyPressed.java rename src/main/java/gregtech/core/network/packets/{PacketKeysPressed.java => PacketKeysDown.java} (60%) diff --git a/src/main/java/gregtech/api/damagesources/DamageSources.java b/src/main/java/gregtech/api/damagesources/DamageSources.java index 423b0417b63..2396a04f41f 100644 --- a/src/main/java/gregtech/api/damagesources/DamageSources.java +++ b/src/main/java/gregtech/api/damagesources/DamageSources.java @@ -20,6 +20,7 @@ public class DamageSources { private static final DamageSource ELECTRIC = new DamageSource("electric"); private static final DamageSource RADIATION = new DamageSource("radiation").setDamageBypassesArmor(); private static final DamageSource TURBINE = new DamageSource("turbine"); + private static final DamageSource USE_ARMOR_DURABILITY = new DamageSource("armor_durability"); public static DamageSource getExplodingDamage() { return EXPLOSION; @@ -49,6 +50,10 @@ public static DamageSource getTurbineDamage() { return TURBINE; } + public static DamageSource getArmorDurabilityDamage() { + return USE_ARMOR_DURABILITY; + } + public static DamageSource getPlayerDamage(@Nullable EntityPlayer source) { ItemStack stack = source != null ? source.getHeldItemMainhand() : ItemStack.EMPTY; if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index a972b669c95..889491551fb 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -1,17 +1,16 @@ package gregtech.api.items.armor; +import com.google.common.base.Preconditions; +import gregtech.api.GregTechAPI; import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.stats.IEnchantabilityHelper; import gregtech.api.items.metaitem.stats.IItemComponent; import gregtech.common.creativetab.GTCreativeTabs; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.model.ModelBiped; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnumEnchantmentType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.EntityEquipmentSlot; @@ -20,8 +19,6 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import com.google.common.base.Preconditions; import com.google.common.collect.Multimap; @@ -48,6 +45,7 @@ private IArmorLogic getArmorLogic(ItemStack itemStack) { return metaValueItem == null ? new DummyArmorLogic() : metaValueItem.getArmorLogic(); } + @NotNull @Override public Multimap getAttributeModifiers(@NotNull EntityEquipmentSlot slot, @@ -58,6 +56,10 @@ public Multimap getAttributeModifiers(@NotNull Entity return multimap; } + // todo + // todo Definition: done + // todo Item: todo + // todo @Override public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { @@ -68,6 +70,10 @@ public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack return new ArmorProperties(0, 0, Integer.MAX_VALUE); } + // todo + // todo Definition: done + // todo Item: todo + // todo @Override public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { IArmorLogic armorLogic = getArmorLogic(armor); @@ -77,6 +83,10 @@ public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int sl return 0; } + // todo + // todo Definition: nothing needed? + // todo Item: todo + // todo @Override public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, DamageSource source, int damage, int slot) { @@ -84,6 +94,10 @@ public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, Damag armorLogic.damageArmor(entity, stack, source, damage, getSlotByIndex(slot)); } + // todo + // todo Definition: done + // todo Item: done + // todo @Override public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { @@ -95,12 +109,17 @@ public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemSta return false; } + // todo + // todo Definition: done + // todo Item: done + // todo @Override public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack itemStack) { IArmorLogic armorLogic = getArmorLogic(itemStack); armorLogic.onArmorTick(world, player, itemStack); } + // todo not needed since we now extend ItemArmor @Override public boolean isValidArmor(@NotNull ItemStack stack, @NotNull EntityEquipmentSlot armorType, @NotNull Entity entity) { @@ -109,6 +128,7 @@ public boolean isValidArmor(@NotNull ItemStack stack, @NotNull EntityEquipmentSl armorLogic.isValidArmor(stack, entity, armorType); } + // todo not needed since we now extend ItemArmor @Nullable @Override public EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { @@ -116,6 +136,7 @@ public EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { return armorLogic.getEquipmentSlot(stack); } + // todo Need to get this onto the Definition somehow @Nullable @Override public String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, @NotNull EntityEquipmentSlot slot, @@ -124,34 +145,6 @@ public String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, return armorLogic.getArmorTexture(stack, entity, slot, type); } - @Nullable - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getArmorModel(@NotNull EntityLivingBase entityLiving, @NotNull ItemStack itemStack, - @NotNull EntityEquipmentSlot armorSlot, @NotNull ModelBiped _default) { - IArmorLogic armorLogic = getArmorLogic(itemStack); - return armorLogic.getArmorModel(entityLiving, itemStack, armorSlot, _default); - } - - @Override - public int getArmorLayersAmount(ItemStack itemStack) { - IArmorLogic armorLogic = getArmorLogic(itemStack); - return armorLogic.getArmorLayersAmount(itemStack); - } - - @Override - public int getArmorLayerColor(ItemStack itemStack, int layerIndex) { - IArmorLogic armorLogic = getArmorLogic(itemStack); - return armorLogic.getArmorLayerColor(itemStack, layerIndex); - } - - @Override - public void renderHelmetOverlay(@NotNull ItemStack stack, @NotNull EntityPlayer player, - @NotNull ScaledResolution resolution, float partialTicks) { - IArmorLogic armorLogic = getArmorLogic(stack); - armorLogic.renderHelmetOverlay(stack, player, resolution, partialTicks); - } - private static EntityEquipmentSlot getSlotByIndex(int index) { switch (index) { case 0: diff --git a/src/main/java/gregtech/api/items/armor/IArmorItem.java b/src/main/java/gregtech/api/items/armor/IArmorItem.java index 41fb9b4eaf5..ce477b9b60a 100644 --- a/src/main/java/gregtech/api/items/armor/IArmorItem.java +++ b/src/main/java/gregtech/api/items/armor/IArmorItem.java @@ -6,13 +6,5 @@ public interface IArmorItem { - default int getArmorLayersAmount(ItemStack itemStack) { - return 1; - } - - default int getArmorLayerColor(ItemStack itemStack, int layerIndex) { - return 0xFFFFFF; - } - void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, int slot); } diff --git a/src/main/java/gregtech/api/items/armor/IArmorLogic.java b/src/main/java/gregtech/api/items/armor/IArmorLogic.java index b8c906d4388..8f318e35490 100644 --- a/src/main/java/gregtech/api/items/armor/IArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/IArmorLogic.java @@ -42,36 +42,14 @@ default boolean canBreakWithDamage(ItemStack stack) { default void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) {} - default Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - return ImmutableMultimap.of(); - } - default boolean isValidArmor(ItemStack itemStack, Entity entity, EntityEquipmentSlot equipmentSlot) { return getEquipmentSlot(itemStack) == equipmentSlot; } default void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {} - @SideOnly(Side.CLIENT) - default void renderHelmetOverlay(ItemStack itemStack, EntityPlayer player, ScaledResolution resolution, - float partialTicks) {} - - default int getArmorLayersAmount(ItemStack itemStack) { - return 1; - } - - default int getArmorLayerColor(ItemStack itemStack, int layerIndex) { - return 0xFFFFFF; - } - String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type); - @Nullable - default ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, EntityEquipmentSlot armorSlot, - ModelBiped defaultModel) { - return null; - } - /** * * @return the value to multiply heat damage by diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java new file mode 100644 index 00000000000..bb015e078a9 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java @@ -0,0 +1,108 @@ +package gregtech.api.items.armoritem; + +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumRarity; +import net.minecraft.util.DamageSource; +import net.minecraftforge.common.IRarity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +public abstract class ArmorBuilder> { + + protected final String domain, id; + + /* IGTToolDefinition held values, extended builders do not need to access these */ + private final EntityEquipmentSlot slot; + private final List behaviors = new ArrayList<>(); + private double damageAbsorption; + private final List handledUnblockableSources = new ArrayList<>(); + private String armorTexture; + private boolean canBreakWithDamage; // todo + private boolean isEnchantable; + private int enchantability; + private IRarity rarity = EnumRarity.COMMON; + + protected ArmorBuilder(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + this.domain = domain; + this.id = id; + this.slot = slot; + } + + public U behaviors(IArmorBehavior... behaviors) { + Collections.addAll(this.behaviors, behaviors); + return cast(this); + } + + public U texture(String armorTexture) { + this.armorTexture = armorTexture; + return cast(this); + } + + public U rarity(IRarity rarity) { + this.rarity = rarity; + return cast(this); + } + + public abstract Supplier supply(IGTArmorDefinition definition); + + public abstract U cast(ArmorBuilder builder); + + public final T build() { + // todo more here? + return supply(buildDefinition()).get(); + } + + protected final IGTArmorDefinition buildDefinition() { + return new IGTArmorDefinition() { + @Override + public EntityEquipmentSlot getEquippedSlot() { + return slot; + } + + @Override + public List getBehaviors() { + return behaviors; + } + + @Override + public double getDamageAbsorption(EntityEquipmentSlot slot, @Nullable DamageSource damageSource) { + return damageAbsorption; + } + + @Override + public List handledUnblockableSources() { + return handledUnblockableSources; + } + + @Override + public String getArmorTexture() { + return armorTexture; + } + + @Override + public boolean canBreakWithDamage() { + return canBreakWithDamage; + } + + @Override + public boolean isEnchantable() { + return isEnchantable; + } + + @Override + public int getEnchantability() { + return enchantability; + } + + @Override + public IRarity getRarity() { + return rarity; + } + }; + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java index c80944c6d26..fc0e5456474 100644 --- a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java @@ -1,6 +1,7 @@ package gregtech.api.items.armoritem; import gregtech.api.util.GTUtility; +import gregtech.api.util.input.KeyBind; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; @@ -8,10 +9,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.ICapabilityProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; +import java.util.Set; public interface IArmorBehavior { @@ -36,6 +40,24 @@ default void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @N default void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { } + default Set getListenedKeys() { + return Collections.emptySet(); + } + + default void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) { + } + + /** + * Add a capability to this behavior's armor. + * Recommended to only use this if no other options exist. + * + * @param stack the armor + * @param tag the capability nbt of the item + */ + default ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + return null; + } + /** Get the equipment slot for this behavior's armor item. Provided since the method call is somewhat obscure. */ default EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { return EntityLiving.getSlotForItemStack(stack); diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmor.java b/src/main/java/gregtech/api/items/armoritem/IGTArmor.java new file mode 100644 index 00000000000..23aeb7a2329 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmor.java @@ -0,0 +1,20 @@ +package gregtech.api.items.armoritem; + +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public interface IGTArmor { + + @NotNull IGTArmorDefinition getDefinition(); + + @NotNull List getBehaviors(); + + @NotNull EntityEquipmentSlot getEquipmentSlot(); + + default @NotNull Item get() { + return (Item) this; + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java index cc328075dac..92cdbe013ee 100644 --- a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java @@ -1,14 +1,8 @@ package gregtech.api.items.armoritem; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; -import net.minecraft.world.World; import net.minecraftforge.common.IRarity; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -16,6 +10,8 @@ // TODO A lot of these do not need to be in the "definition" class, but in the Item class public interface IGTArmorDefinition { + EntityEquipmentSlot getEquippedSlot(); + List getBehaviors(); /* ArmorProperties */ diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java index 2aa9335cd19..3baee2f2b1e 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java @@ -1,32 +1,58 @@ package gregtech.api.items.armoritem; +import gregtech.api.GregTechAPI; +import gregtech.api.capability.impl.CombinedCapabilityProvider; +import gregtech.api.damagesources.DamageSources; +import gregtech.api.util.input.IKeyPressedListener; +import gregtech.api.util.input.KeyBind; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnumEnchantmentType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.common.IRarity; import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.common.capabilities.ICapabilityProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; -public class ItemGTArmor extends ItemArmor implements ISpecialArmor { +public class ItemGTArmor extends ItemArmor implements IGTArmor, ISpecialArmor, IKeyPressedListener { - protected final EntityEquipmentSlot equipmentSlot; - protected final IGTArmorDefinition armorDefinition; + private final IGTArmorDefinition armorDefinition; - public ItemGTArmor(IGTArmorDefinition armorDefinition, EntityEquipmentSlot equipmentSlot) { - super(ArmorMaterial.DIAMOND, 0, equipmentSlot); + public ItemGTArmor(String domain, String id, IGTArmorDefinition armorDefinition) { + super(ArmorMaterial.DIAMOND, 0, armorDefinition.getEquippedSlot()); this.armorDefinition = armorDefinition; - this.equipmentSlot = equipmentSlot; + setMaxStackSize(1); + setCreativeTab(GregTechAPI.TAB_GREGTECH_TOOLS); + setTranslationKey("gt.armor." + id); + setRegistryName(domain, id); + } + + public @NotNull IGTArmorDefinition getDefinition() { + return armorDefinition; + } + + @Override + public @NotNull List getBehaviors() { + return getDefinition().getBehaviors(); + } + + @Override + public @NotNull EntityEquipmentSlot getEquipmentSlot() { + return getDefinition().getEquippedSlot(); } @Override @@ -37,12 +63,12 @@ public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack @Override public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { - return (int) Math.round(20.0F * getDamageModifier() * armorDefinition.getDamageAbsorption(equipmentSlot, null)); + return (int) Math.round(20.0F * getDamageModifier() * getDefinition().getDamageAbsorption(getEquipmentSlot(), null)); } @Override public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { - if (armorDefinition.canBreakWithDamage()) { + if (getDefinition().canBreakWithDamage()) { // todo need to do actual damage and save to NBT here, as "default" armor can break // todo then override in ItemGTElectricArmor can do it as energy instead (or in addition to) } @@ -56,55 +82,73 @@ public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemSta @Override public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { int numEffects = 0; - for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { if (behavior.onArmorTick(world, player, stack)) { numEffects++; } } if (numEffects > 0 && !world.isRemote) { - // todo passing a null DamageSource into here may cause problems - damageArmor(player, stack, null, numEffects, equipmentSlot.getIndex()); + damageArmor(player, stack, DamageSources.getArmorDurabilityDamage(), numEffects, getEquipmentSlot().getIndex()); } } public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { + if (player instanceof EntityPlayerMP playerMP) { + for (KeyBind keyBind : behavior.getListenedKeys()) { + keyBind.removeListener(playerMP, this); + } + } behavior.onArmorUnequip(world, player, stack); } } public void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { + if (player instanceof EntityPlayerMP playerMP) { + for (KeyBind keyBind : behavior.getListenedKeys()) { + keyBind.registerListener(playerMP, this); + } + } behavior.onArmorEquip(world, player, stack); } } + @Override + public void onKeyPressed(EntityPlayerMP player, KeyBind keyPressed) { + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { + if (behavior.getListenedKeys().contains(keyPressed)) { + behavior.onKeyPressed(player.getItemStackFromSlot(getEquipmentSlot()), player, keyPressed); + } + } + } + // todo make sure this works with how we end up doing the builder class @Override public @Nullable String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, @NotNull EntityEquipmentSlot slot, @NotNull String type) { - return armorDefinition.getArmorTexture(); + return getDefinition().getArmorTexture(); } @Override public @NotNull IRarity getForgeRarity(@NotNull ItemStack stack) { - return armorDefinition.getRarity(); + return getDefinition().getRarity(); } @Override public int getItemEnchantability() { - return armorDefinition.getEnchantability(); + return getDefinition().getEnchantability(); } @Override public boolean isEnchantable(@NotNull ItemStack stack) { - return armorDefinition.isEnchantable(); + return getDefinition().isEnchantable(); } @Override public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Enchantment enchantment) { if (enchantment.type == null) return false; - if (!armorDefinition.canBreakWithDamage() && enchantment.type == EnumEnchantmentType.BREAKABLE) { + if (!getDefinition().canBreakWithDamage() && enchantment.type == EnumEnchantmentType.BREAKABLE) { return false; } @@ -123,13 +167,32 @@ public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Ench @Override public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { // todo armor toughness tooltip - for (IArmorBehavior behavior : armorDefinition.getBehaviors()) { + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { behavior.addInformation(stack, world, tooltip, flag); } } + @Override + public final @Nullable ICapabilityProvider initCapabilities(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + List providers = getCapabilityProviders(stack, tag); + if (providers.isEmpty()) return null; + if (providers.size() == 1) return providers.get(0); + return new CombinedCapabilityProvider(providers); + } + + protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + List providers = new ArrayList<>(); + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { + ICapabilityProvider provider = behavior.createProvider(stack, tag); + if (provider != null) { + providers.add(provider); + } + } + return providers; + } + protected float getDamageModifier() { - return switch (equipmentSlot) { + return switch (getEquipmentSlot()) { case HEAD, FEET -> 0.15f; case CHEST -> 0.4f; case LEGS -> 0.3f; @@ -145,4 +208,25 @@ private static EntityEquipmentSlot getSlotByIndex(int index) { default -> EntityEquipmentSlot.HEAD; }; } + + public static class Builder extends ArmorBuilder { + + public static @NotNull Builder of(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + return new Builder(domain, id, slot); + } + + private Builder(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + super(domain, id, slot); + } + + @Override + public Supplier supply(IGTArmorDefinition definition) { + return () -> new ItemGTArmor(domain, id, definition); + } + + @Override + public Builder cast(ArmorBuilder builder) { + return (Builder) builder; + } + } } diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java index b0b08496c38..2bb34925dd9 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java @@ -2,32 +2,129 @@ import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; +import gregtech.api.capability.impl.ElectricItem; +import gregtech.api.damagesources.DamageSources; +import gregtech.api.items.metaitem.ElectricStats; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraftforge.common.capabilities.ICapabilityProvider; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.function.Supplier; public class ItemGTElectricArmor extends ItemGTArmor { - protected final int energyPerUse; // todo better name + private static final IElectricItem EMPTY_STATS = new ElectricItem(ItemStack.EMPTY, 0, 0, false, false); + + protected final int tier; + protected final long maxCharge; + protected final long energyPerUse; // todo better name + protected final int energyScaleFactor; // todo better name + protected final boolean canChargeExternally; + + public ItemGTElectricArmor(String domain, String id, + IGTArmorDefinition armorDefinition, + int tier, + long maxCharge, + long energyPerUse, + int energyScaleFactor, + boolean canChargeExternally) { + super(domain, id, armorDefinition); + this.tier = tier; + this.maxCharge = maxCharge; + this.energyPerUse = energyPerUse; + this.energyScaleFactor = energyScaleFactor; // was originally 10 for nano, 100 for quantum + this.canChargeExternally = canChargeExternally; + } - public ItemGTElectricArmor(IGTArmorDefinition armorDefinition, EntityEquipmentSlot equipmentSlot) { - // todo - super(armorDefinition, equipmentSlot); - this.energyPerUse = 0; + protected @NotNull IElectricItem getElectricItem(ItemStack armor) { + IElectricItem electricItem = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + return electricItem != null ? electricItem : EMPTY_STATS; } - protected IElectricItem getElectricItem(ItemStack armor) { - return armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + @Override + public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { + IElectricItem electricItem = getElectricItem(stack); + long amountDrawn, amountToDraw = energyPerUse * damage; + if (source != DamageSources.getArmorDurabilityDamage()) { + // armor durability damage is an internal source. if it is that source, draw the full amount instead of scaling + amountToDraw /= energyScaleFactor; + } + amountDrawn = electricItem.discharge(amountToDraw, electricItem.getTier(), true, false, false); + if (amountDrawn < amountToDraw) { + // send remaining damage to durability (will be tested in super if it should be checked) + super.damageArmor(entity, stack, source, (int) Math.max(1, damage * (amountToDraw - amountDrawn) / amountToDraw), slot); + } } @Override public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { IElectricItem electricItem = getElectricItem(armor); - if (electricItem == null) return 0; if (electricItem.getCharge() < energyPerUse) { - return (int) Math.round(4.0f * getDamageModifier() * armorDefinition.getDamageAbsorption(equipmentSlot, null)); + return (int) Math.round(4.0f * getDamageModifier() * getDefinition().getDamageAbsorption(getEquipmentSlot(), null)); } return super.getArmorDisplay(player, armor, slot); } + + @Override + protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + List providers = super.getCapabilityProviders(stack, tag); + ElectricStats stats = new ElectricStats(maxCharge, tier, true, canChargeExternally); + providers.add(stats.createProvider(stack)); + return providers; + } + + public static class Builder extends ArmorBuilder { + + protected int tier; + protected long maxCharge; + protected long energyPerUse; + protected int energyScaleFactor; + protected boolean canChargeExternally; + + public static @NotNull Builder of(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + return new Builder(domain, id, slot); + } + + private Builder(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + super(domain, id, slot); + } + + public Builder electric(int tier, long maxCharge) { + this.tier = tier; + this.maxCharge = maxCharge; + return this; + } + + public Builder electricCost(long energyPerUse) { + return electricCost(energyPerUse, 0); + } + + public Builder electricCost(long energyPerUse, int energyScaleFactor) { + this.energyPerUse = energyPerUse; + this.energyScaleFactor = energyScaleFactor; + return this; + } + + public Builder chargeOtherItems() { + this.canChargeExternally = true; + return this; + } + + @Override + public Supplier supply(IGTArmorDefinition definition) { + return () -> new ItemGTElectricArmor(domain, id, definition, tier, maxCharge, energyPerUse, energyScaleFactor, canChargeExternally); + } + + @Override + public Builder cast(ArmorBuilder builder) { + return (Builder) builder; + } + } } diff --git a/src/main/java/gregtech/api/util/input/IKeyPressedListener.java b/src/main/java/gregtech/api/util/input/IKeyPressedListener.java index a6a5616379f..1ff03f8ff1b 100644 --- a/src/main/java/gregtech/api/util/input/IKeyPressedListener.java +++ b/src/main/java/gregtech/api/util/input/IKeyPressedListener.java @@ -4,5 +4,5 @@ public interface IKeyPressedListener { - void onKeyPressed(EntityPlayerMP player); + void onKeyPressed(EntityPlayerMP player, KeyBind keyPressed); } diff --git a/src/main/java/gregtech/api/util/input/KeyBind.java b/src/main/java/gregtech/api/util/input/KeyBind.java index 194f5aa13a6..0e73270d142 100644 --- a/src/main/java/gregtech/api/util/input/KeyBind.java +++ b/src/main/java/gregtech/api/util/input/KeyBind.java @@ -2,9 +2,13 @@ import gregtech.api.GTValues; import gregtech.api.GregTechAPI; +import gregtech.core.network.packets.PacketKeyPressed; +import gregtech.core.network.packets.PacketKeysDown; import gregtech.api.util.GTLog; import gregtech.core.network.packets.PacketKeysPressed; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.EntityPlayer; @@ -53,18 +57,27 @@ public static void init() { @SubscribeEvent @SideOnly(Side.CLIENT) public static void onInputEvent(InputEvent.KeyInputEvent event) { - List updating = new ArrayList<>(); + List updatingKeyDown = new ArrayList<>(); + IntList updatingPressed = new IntArrayList(); for (KeyBind keybind : VALUES) { - boolean previousPressed = keybind.isPressed; + // handle isKeyDown todo this can be removed after full armor rewrite + boolean previousKeyDown = keybind.isKeyDown; - keybind.isPressed = keybind.isPressed(); keybind.isKeyDown = keybind.isKeyDown(); - if (previousPressed != keybind.isPressed || previousKeyDown != keybind.isKeyDown) { - updating.add(keybind); + if (previousKeyDown != keybind.isKeyDown) { + updatingKeyDown.add(keybind); + } + + // handle isPressed + if (keybind.isPressed()) { + updatingPressed.add(keybind.ordinal()); } } - if (!updating.isEmpty()) { - GregTechAPI.networkHandler.sendToServer(new PacketKeysPressed(updating)); + if (!updatingKeyDown.isEmpty()) { + GregTechAPI.networkHandler.sendToServer(new PacketKeysDown(updatingKeyDown)); + } + if (!updatingPressed.isEmpty()) { + GregTechAPI.networkHandler.sendToServer(new PacketKeyPressed(updatingPressed)); } } @@ -86,9 +99,9 @@ public static boolean scrollingDown() { @SideOnly(Side.CLIENT) private KeyBinding keybinding; @SideOnly(Side.CLIENT) - private boolean isPressed, isKeyDown; + private boolean isKeyDown; - private final WeakHashMap> mapping = new WeakHashMap<>(); + private final WeakHashMap mapping = new WeakHashMap<>(); private final WeakHashMap> listeners = new WeakHashMap<>(); // For Vanilla/Other Mod keybinds @@ -128,46 +141,32 @@ public boolean isKeyDown() { return this.keybinding.isKeyDown(); } - public void update(boolean pressed, boolean keyDown, EntityPlayerMP player) { - MutablePair pair = this.mapping.get(player); - if (pair == null) { - this.mapping.put(player, MutablePair.of(pressed, keyDown)); - } else { - pair.left = pressed; - pair.right = keyDown; - if (pressed) { - Set listenerSet = listeners.get(player); - if (listenerSet != null && !listenerSet.isEmpty()) { - for (var listener : listenerSet) listener.onKeyPressed(player); - } - } - } + public void updateKeyDown(boolean keyDown, EntityPlayerMP player) { + this.mapping.put(player, keyDown); } - public boolean isPressed(EntityPlayer player) { - if (player.world.isRemote) { - return isPressed(); - } else { - MutablePair pair = this.mapping.get((EntityPlayerMP) player); - return pair != null && pair.left; + public void onKeyPressed(EntityPlayerMP player) { + Set listenerSet = listeners.get(player); + if (listenerSet != null && !listenerSet.isEmpty()) { + for (var listener : listenerSet) { + listener.onKeyPressed(player, this); + } } } public boolean isKeyDown(EntityPlayer player) { - if (player.world.isRemote) { - return isKeyDown(); - } else { - MutablePair pair = this.mapping.get((EntityPlayerMP) player); - return pair != null && pair.right; - } + if (player.world.isRemote) return isKeyDown(); + return mapping.get((EntityPlayerMP) player); } public void registerListener(EntityPlayerMP player, IKeyPressedListener listener) { + System.out.println("Listener registered"); Set listenerSet = listeners.computeIfAbsent(player, k -> new HashSet<>()); listenerSet.add(listener); } public void removeListener(EntityPlayerMP player, IKeyPressedListener listener) { + System.out.println("Listener removed"); Set listenerSet = listeners.get(player); if (listenerSet != null) { listenerSet.remove(listener); diff --git a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java index 57b6728fc31..8885a920245 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java @@ -47,17 +47,10 @@ public static void renderArmorLayer(LayerArmorBase layer, EntityLivin GlStateManager.enableBlend(); GlStateManager.blendFunc(SourceFactor.ONE, DestFactor.ONE_MINUS_SRC_ALPHA); - int layers = armorItem.getArmorLayersAmount(itemStack); - for (int layerIndex = 0; layerIndex < layers; layerIndex++) { - int i = armorItem.getArmorLayerColor(itemStack, layerIndex); - float f = (float) (i >> 16 & 255) / 255.0F; - float f1 = (float) (i >> 8 & 255) / 255.0F; - float f2 = (float) (i & 255) / 255.0F; - GlStateManager.color(f, f1, f2, 1.0f); - String type = layerIndex == 0 ? null : "layer_" + layerIndex; - layer.renderer.bindTexture(getArmorTexture(entity, itemStack, slotIn, type)); - armorModel.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); - } + GlStateManager.color(1, 1, 1, 1); + layer.renderer.bindTexture(getArmorTexture(entity, itemStack, slotIn)); + armorModel.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + if (itemStack.hasEffect()) { LayerArmorBase.renderEnchantedGlint(layer.renderer, entity, armorModel, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); @@ -69,17 +62,15 @@ private static boolean isLegSlot(EntityEquipmentSlot equipmentSlot) { return equipmentSlot == EntityEquipmentSlot.LEGS; } - private static ResourceLocation getArmorTexture(EntityLivingBase entity, ItemStack itemStack, - EntityEquipmentSlot slot, String type) { + private static ResourceLocation getArmorTexture(EntityLivingBase entity, ItemStack itemStack, EntityEquipmentSlot slot) { ResourceLocation registryName = itemStack.getItem().getRegistryName(); if (registryName == null) { throw new IllegalArgumentException( "ItemStack " + itemStack.getTranslationKey() + "has a null registry name"); } - String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", registryName.getNamespace(), - registryName.getPath(), - (isLegSlot(slot) ? 2 : 1), type == null ? "" : String.format("_%s", type)); - return new ResourceLocation(ForgeHooksClient.getArmorTexture(entity, itemStack, s1, slot, type)); + String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", registryName.getNamespace(), registryName.getPath(), + (isLegSlot(slot) ? 2 : 1), ""); + return new ResourceLocation(ForgeHooksClient.getArmorTexture(entity, itemStack, s1, slot, null)); } } diff --git a/src/main/java/gregtech/common/CommonProxy.java b/src/main/java/gregtech/common/CommonProxy.java index 59055bb74e1..a8ad601d57a 100644 --- a/src/main/java/gregtech/common/CommonProxy.java +++ b/src/main/java/gregtech/common/CommonProxy.java @@ -4,6 +4,7 @@ import gregtech.api.GregTechAPI; import gregtech.api.block.VariantItemBlock; import gregtech.api.block.machines.MachineItemBlock; +import gregtech.api.items.armoritem.IGTArmor; import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.toolitem.IGTTool; import gregtech.api.metatileentity.registry.MTERegistry; @@ -31,6 +32,7 @@ import gregtech.common.blocks.MetaBlocks; import gregtech.common.blocks.OreItemBlock; import gregtech.common.blocks.StoneVariantBlock; +import gregtech.common.items.ArmorItems; import gregtech.common.items.MetaItems; import gregtech.common.items.ToolItems; import gregtech.common.pipelike.cable.BlockCable; @@ -231,6 +233,9 @@ public static void registerItems(RegistryEvent.Register event) { for (IGTTool tool : ToolItems.getAllTools()) { registry.register(tool.get()); } + for (IGTArmor armor : ArmorItems.getAllArmors()) { + registry.register(armor.get()); + } GTRecipeManager.preLoad(); @@ -332,6 +337,7 @@ public static void registerRecipes(RegistryEvent.Register event) { MetaBlocks.registerOreDict(); OreDictionaryLoader.init(); MaterialInfoLoader.init(); + ArmorItems.registerLegacyConversionRecipes(); // post an event for addons to modify unification data before base GT registers recycling recipes MinecraftForge.EVENT_BUS.post(new GregTechAPI.RegisterEvent<>(null, ItemMaterialInfo.class)); diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java new file mode 100644 index 00000000000..5f01d76ecf2 --- /dev/null +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -0,0 +1,91 @@ +package gregtech.common.items; + +import gregtech.api.GTValues; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armoritem.*; +import gregtech.common.ConfigHolder; +import gregtech.common.items.armor.*; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumRarity; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class ArmorItems { + + private static final List ARMORS = new ArrayList<>(); + + public static ItemGTElectricArmor NIGHTVISION_GOGGLES; + + private ArmorItems() {/**/} + + public static List getAllArmors() { + return ARMORS; + } + + public static void init() { + // todo clean up this config... "stuff" + NIGHTVISION_GOGGLES = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nightvision_goggles", EntityEquipmentSlot.HEAD) + .electric(ConfigHolder.tools.voltageTierNightVision, 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1))) + .electricCost(2) + .behaviors(NightvisionBehavior.INSTANCE) + .texture("gregtech:textures/armor/nightvision_goggles.png")); + } + + public static > T register(@NotNull ArmorBuilder builder) { + T armor = builder.build(); + ARMORS.add(armor); + return armor; + } + + public static ItemGTArmor register(@NotNull ItemGTArmor armor) { + ARMORS.add(armor); + return armor; + } + + public static void registerModels() { + } + + // TODO Remove in v... + @Deprecated + public static void initLegacyArmor() { + ArmorMetaItem.ArmorMetaValueItem> legacyArmor = new ArmorMetaItem<>() { + @Override + public void registerSubItems() { + // todo strip all of this of as much functionality as possible before merge + // todo hide these items from jei as well + MetaItems.NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(new NightvisionGoggles(2, 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1)), ConfigHolder.tools.voltageTierNightVision, EntityEquipmentSlot.HEAD)); + + MetaItems.SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); + MetaItems.ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(new Jetpack(30, 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2)), ConfigHolder.tools.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); + MetaItems.ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack").setArmorLogic(new AdvancedJetpack(512, 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4)), ConfigHolder.tools.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); + + int energyPerUse = 512; + int tier = ConfigHolder.tools.voltageTierNanoSuit; + long maxCapacity = 6_400_000L * (long) Math.max(1, Math.pow(4, tier - 3)); + MetaItems.NANO_HELMET = addItem(20, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_BOOTS = addItem(23, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_CHESTPLATE_ADVANCED = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(energyPerUse, 12_800_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvNanoSuit - 3)), ConfigHolder.tools.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); + + energyPerUse = 8192; + tier = ConfigHolder.tools.voltageTierQuarkTech; + maxCapacity = 100_000_000L * (long) Math.max(1, Math.pow(4, tier - 5)); + MetaItems.QUANTUM_HELMET = addItem(40, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_CHESTPLATE = addItem(41, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_LEGGINGS = addItem(42, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_BOOTS = addItem(43, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_CHESTPLATE_ADVANCED = addItem(50, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(energyPerUse, 1_000_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvQuarkTech - 6)), ConfigHolder.tools.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); + } + }; + legacyArmor.setRegistryName("gt_armor"); + } + + // TODO Remove in v... + @Deprecated + public static void registerLegacyConversionRecipes() { + // todo + } +} diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 303588e6dc8..97f5ee41221 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -611,8 +611,6 @@ private MetaItems() {} public static void init() { MetaItem1 first = new MetaItem1(); first.setRegistryName("meta_item_1"); - MetaArmor armor = new MetaArmor(); - armor.setRegistryName("gt_armor"); for (OrePrefix prefix : orePrefixes) { for (MaterialRegistry registry : GregTechAPI.materialManager.getRegistries()) { String regName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, prefix.name()); diff --git a/src/main/java/gregtech/common/items/armor/MetaArmor.java b/src/main/java/gregtech/common/items/armor/MetaArmor.java index 1d53bbca1c9..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/armor/MetaArmor.java @@ -1,71 +0,0 @@ -package gregtech.common.items.armor; - -import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.common.ConfigHolder; -import gregtech.common.items.MetaItems; - -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.EnumRarity; - -public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem> { - - @Override - public void registerSubItems() { - MetaItems.NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(new NightvisionGoggles(2, - 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1)), - ConfigHolder.tools.voltageTierNightVision, EntityEquipmentSlot.HEAD)); - - MetaItems.SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); - MetaItems.ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(new Jetpack(30, - 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2)), - ConfigHolder.tools.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); - MetaItems.ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack") - .setArmorLogic(new AdvancedJetpack(512, - 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4)), - ConfigHolder.tools.voltageTierAdvImpeller)) - .setRarity(EnumRarity.RARE); - - int energyPerUse = 512; - int tier = ConfigHolder.tools.voltageTierNanoSuit; - long maxCapacity = 6_400_000L * (long) Math.max(1, Math.pow(4, tier - 3)); - MetaItems.NANO_HELMET = addItem(20, "nms.helmet") - .setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_CHESTPLATE = addItem(21, "nms.chestplate") - .setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_LEGGINGS = addItem(22, "nms.leggings") - .setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_BOOTS = addItem(23, "nms.boots") - .setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_CHESTPLATE_ADVANCED = addItem(30, "nms.advanced_chestplate") - .setArmorLogic(new AdvancedNanoMuscleSuite(energyPerUse, - 12_800_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvNanoSuit - 3)), - ConfigHolder.tools.voltageTierAdvNanoSuit)) - .setRarity(EnumRarity.RARE); - - energyPerUse = 8192; - tier = ConfigHolder.tools.voltageTierQuarkTech; - maxCapacity = 100_000_000L * (long) Math.max(1, Math.pow(4, tier - 5)); - MetaItems.QUANTUM_HELMET = addItem(40, "qts.helmet") - .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_CHESTPLATE = addItem(41, "qts.chestplate") - .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_LEGGINGS = addItem(42, "qts.leggings") - .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_BOOTS = addItem(43, "qts.boots") - .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)) - .setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_CHESTPLATE_ADVANCED = addItem(50, "qts.advanced_chestplate") - .setArmorLogic(new AdvancedQuarkTechSuite(energyPerUse, - 1_000_000_000L * - (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvQuarkTech - 6)), - ConfigHolder.tools.voltageTierAdvQuarkTech)) - .setRarity(EnumRarity.EPIC); - } -} diff --git a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java new file mode 100644 index 00000000000..3fc67fc1a3a --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java @@ -0,0 +1,78 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.IArmorBehavior; +import gregtech.api.util.input.KeyBind; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +// All MobEffects warn that they "might be null" for some reason, so suppress it +@SuppressWarnings("ConstantConditions") +public class NightvisionBehavior implements IArmorBehavior { + + public static final NightvisionBehavior INSTANCE = new NightvisionBehavior(); + + private static final String NBT_NIGHTVISION = "NightVision"; + + protected NightvisionBehavior() {/**/} + + @Override + public Set getListenedKeys() { + return Collections.singleton(KeyBind.ARMOR_MODE_SWITCH); + } + + @Override + public void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) { + if (keyPressed == KeyBind.ARMOR_MODE_SWITCH) { + NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); + boolean wasEnabled = tag.getBoolean("Enabled"); + tag.setBoolean("Enabled", !wasEnabled); + if (wasEnabled) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.disabled"), true); + } else { + player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.enabled"), true); + } + player.inventoryContainer.detectAndSendChanges(); + } + } + + @Override + public boolean onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + if (world.isRemote) return false; + NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); + boolean enabled = tag.getBoolean("Enabled"); + if (enabled) { + player.removePotionEffect(MobEffects.BLINDNESS); + player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, false)); + } + return enabled; + } + + @Override + public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); + if (tag.getBoolean("Enabled")) { + tooltip.add(I18n.format("metaarmor.message.nightvision.enabled")); + } else { + tooltip.add(I18n.format("metaarmor.message.nightvision.disabled")); + } + } +} diff --git a/src/main/java/gregtech/core/CoreModule.java b/src/main/java/gregtech/core/CoreModule.java index aecbe907d48..934d48d1278 100644 --- a/src/main/java/gregtech/core/CoreModule.java +++ b/src/main/java/gregtech/core/CoreModule.java @@ -48,6 +48,7 @@ import gregtech.common.command.worldgen.CommandWorldgen; import gregtech.common.covers.CoverBehaviors; import gregtech.common.covers.filter.oreglob.impl.OreGlobParser; +import gregtech.common.items.ArmorItems; import gregtech.common.items.MetaItems; import gregtech.common.items.ToolItems; import gregtech.common.metatileentities.MetaTileEntities; @@ -201,6 +202,8 @@ public void preInit(FMLPreInitializationEvent event) { MetaBlocks.init(); MetaItems.init(); ToolItems.init(); + ArmorItems.init(); + ArmorItems.initLegacyArmor(); GTFluidRegistration.INSTANCE.register(); /* Start CEu MetaTileEntity Registration */ @@ -240,7 +243,8 @@ public void registerPackets() { GregTechAPI.networkHandler.registerPacket(PacketClipboardUIWidgetUpdate.class); GregTechAPI.networkHandler.registerPacket(PacketPluginSynced.class); GregTechAPI.networkHandler.registerPacket(PacketRecoverMTE.class); - GregTechAPI.networkHandler.registerPacket(PacketKeysPressed.class); + GregTechAPI.networkHandler.registerPacket(PacketKeysDown.class); + GregTechAPI.networkHandler.registerPacket(PacketKeyPressed.class); GregTechAPI.networkHandler.registerPacket(PacketFluidVeinList.class); GregTechAPI.networkHandler.registerPacket(PacketNotifyCapeChange.class); GregTechAPI.networkHandler.registerPacket(PacketReloadShaders.class); diff --git a/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java b/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java new file mode 100644 index 00000000000..3d400178870 --- /dev/null +++ b/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java @@ -0,0 +1,45 @@ +package gregtech.core.network.packets; + +import gregtech.api.network.IPacket; +import gregtech.api.network.IServerExecutor; +import gregtech.api.util.input.KeyBind; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.PacketBuffer; + +public class PacketKeyPressed implements IPacket, IServerExecutor { + + private IntList pressedKeys; + + public PacketKeyPressed() {/**/} + + public PacketKeyPressed(IntList pressedKeys) { + this.pressedKeys = pressedKeys; + } + + @Override + public void encode(PacketBuffer buf) { + buf.writeVarInt(pressedKeys.size()); + for (int key : pressedKeys) { + buf.writeVarInt(key); + } + } + + @Override + public void decode(PacketBuffer buf) { + pressedKeys = new IntArrayList(); + int size = buf.readVarInt(); + for (int i = 0; i < size; i++) { + pressedKeys.add(buf.readVarInt()); + } + } + + @Override + public void executeServer(NetHandlerPlayServer handler) { + KeyBind[] keyBinds = KeyBind.VALUES; + for (int index : pressedKeys) { + keyBinds[index].onKeyPressed(handler.player); + } + } +} diff --git a/src/main/java/gregtech/core/network/packets/PacketKeysPressed.java b/src/main/java/gregtech/core/network/packets/PacketKeysDown.java similarity index 60% rename from src/main/java/gregtech/core/network/packets/PacketKeysPressed.java rename to src/main/java/gregtech/core/network/packets/PacketKeysDown.java index 8b5d4198f91..11365d7ad9b 100644 --- a/src/main/java/gregtech/core/network/packets/PacketKeysPressed.java +++ b/src/main/java/gregtech/core/network/packets/PacketKeysDown.java @@ -11,14 +11,14 @@ import java.util.List; -public class PacketKeysPressed implements IPacket, IServerExecutor { +public class PacketKeysDown implements IPacket, IServerExecutor { private Object updateKeys; @SuppressWarnings("unused") - public PacketKeysPressed() {} + public PacketKeysDown() {} - public PacketKeysPressed(List updateKeys) { + public PacketKeysDown(List updateKeys) { this.updateKeys = updateKeys; } @@ -28,30 +28,26 @@ public void encode(PacketBuffer buf) { buf.writeVarInt(updateKeys.size()); for (KeyBind keyBind : updateKeys) { buf.writeVarInt(keyBind.ordinal()); - buf.writeBoolean(keyBind.isPressed()); buf.writeBoolean(keyBind.isKeyDown()); } } @Override public void decode(PacketBuffer buf) { - this.updateKeys = new Pair[KeyBind.VALUES.length]; - Pair[] updateKeys = (Pair[]) this.updateKeys; + this.updateKeys = new boolean[KeyBind.VALUES.length]; + boolean[] updateKeys = (boolean[]) this.updateKeys; int size = buf.readVarInt(); for (int i = 0; i < size; i++) { - updateKeys[buf.readVarInt()] = Pair.of(buf.readBoolean(), buf.readBoolean()); + updateKeys[buf.readVarInt()] = buf.readBoolean(); } } @Override public void executeServer(NetHandlerPlayServer handler) { KeyBind[] keybinds = KeyBind.VALUES; - Pair[] updateKeys = (Pair[]) this.updateKeys; + boolean[] updateKeys = (boolean[]) this.updateKeys; for (int i = 0; i < updateKeys.length; i++) { - Pair pair = updateKeys[i]; - if (pair != null) { - keybinds[i].update(pair.getLeft(), pair.getRight(), handler.player); - } + keybinds[i].updateKeyDown(updateKeys[i], handler.player); } } } From 506030ac3d70843da86955833ad72669653dd0b9 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Wed, 28 Jun 2023 02:59:47 -0500 Subject: [PATCH 04/12] nano armor (basically) done --- .../api/damagesources/DamageSources.java | 5 - .../api/items/armor/ArmorLogicSuite.java | 1 + .../api/items/armor/ArmorMetaItem.java | 154 +++++----------- .../gregtech/api/items/armor/ArmorUtils.java | 38 +--- .../api/items/armor/DummyArmorLogic.java | 22 --- .../gregtech/api/items/armor/IArmorItem.java | 7 +- .../gregtech/api/items/armor/IArmorLogic.java | 42 +---- .../api/items/armor/ISpecialArmorLogic.java | 1 + .../api/items/armoritem/ArmorBuilder.java | 66 ++++--- .../api/items/armoritem/ArmorHelper.java | 52 ++++++ .../api/items/armoritem/IArmorBehavior.java | 8 +- .../armoritem/IElectricArmorBehavior.java | 21 +++ .../api/items/armoritem/IGTArmor.java | 45 ++++- .../items/armoritem/IGTArmorDefinition.java | 23 ++- .../api/items/armoritem/ItemGTArmor.java | 87 +++++++-- .../items/armoritem/ItemGTElectricArmor.java | 19 +- .../items/armoritem/ItemGTFueledArmor.java | 5 + .../items/armoritem/armorset/IArmorSet.java | 15 ++ .../items/armoritem/armorset/ISetBonus.java | 4 + .../armoritem/jetpack/IJetpackStats.java | 25 +++ .../armoritem/jetpack/JetpackBehavior.java | 6 + .../armoritem/jetpack/JetpackBuilder.java | 20 ++ .../items/materialitem/MetaPrefixItem.java | 19 +- .../gregtech/api/items/toolitem/IGTTool.java | 2 - .../api/items/toolitem/ToolHelper.java | 3 + .../java/gregtech/api/util/input/KeyBind.java | 50 +++-- .../java/gregtech/asm/hooks/ArmorHooks.java | 26 --- .../gregtech/asm/hooks/ArmorRenderHooks.java | 1 - .../visitors/SpecialArmorApplyVisitor.java | 57 ------ .../java/gregtech/client/ClientProxy.java | 3 + .../gregtech/common/ArmorEventHandlers.java | 95 +++++++++- .../java/gregtech/common/EventHandlers.java | 174 +----------------- .../gregtech/common/items/ArmorItems.java | 131 +++++++++++-- .../java/gregtech/common/items/MetaItems.java | 7 - .../common/items/armor/AdvancedJetpack.java | 1 + .../items/armor/AdvancedNanoMuscleSuite.java | 1 + .../items/armor/AdvancedQuarkTechSuite.java | 1 + .../gregtech/common/items/armor/ArmorSet.java | 17 ++ .../items/armor/ElectricJetpackBehavior.java | 4 + .../items/armor/FallDamageCancelBehavior.java | 30 +++ .../items/armor/FireImmunityBehavior.java | 35 ++++ .../items/armor/FueledJetpackBehavior.java | 4 + .../items/armor/HeatReductionBehavior.java | 22 +++ .../gregtech/common/items/armor/IJetpack.java | 1 + .../common/items/armor/IStepAssist.java | 24 --- .../gregtech/common/items/armor/Jetpack.java | 1 + .../common/items/armor/JetpackStats.java | 83 +++++++++ .../common/items/armor/NanoMuscleSuite.java | 10 +- .../items/armor/NightvisionBehavior.java | 27 ++- .../items/armor/NightvisionGoggles.java | 104 ----------- .../common/items/armor/PowerlessJetpack.java | 1 + .../common/items/armor/QuarkTechSuite.java | 9 +- .../items/armor/StepAssistBehavior.java | 30 +++ .../core/network/packets/PacketKeysDown.java | 26 ++- .../loaders/recipe/CraftingRecipeLoader.java | 15 +- .../models/item/armors/nano_boots.json | 6 + .../models/item/armors/nano_chestplate.json | 6 + .../models/item/armors/nano_helmet.json | 6 + .../models/item/armors/nano_leggings.json | 6 + .../item/armors/nightvision_goggles.json | 6 + .../textures/armor/nano_muscule_suite_1.png | Bin 10199 -> 0 bytes .../textures/items/armors/nano_boots.png | Bin 0 -> 4204 bytes .../textures/items/armors/nano_boots_item.png | Bin 0 -> 3120 bytes .../textures/items/armors/nano_chestplate.png | Bin 0 -> 5127 bytes .../items/armors/nano_chestplate_item.png | Bin 0 -> 3189 bytes .../textures/items/armors/nano_helmet.png | Bin 0 -> 5385 bytes .../items/armors/nano_helmet_item.png | Bin 0 -> 3231 bytes .../textures/items/armors/nano_leggings.png | Bin 0 -> 4487 bytes .../items/armors/nano_leggings_item.png | Bin 0 -> 3137 bytes .../items/armors/nightvision_goggles.png | Bin 0 -> 432 bytes .../items/armors/nightvision_goggles_item.png | Bin 0 -> 247 bytes 71 files changed, 947 insertions(+), 763 deletions(-) create mode 100644 src/main/java/gregtech/api/items/armoritem/ArmorHelper.java create mode 100644 src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java create mode 100644 src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java create mode 100644 src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java create mode 100644 src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java create mode 100644 src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java create mode 100644 src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java create mode 100644 src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java create mode 100644 src/main/java/gregtech/common/items/armor/ArmorSet.java create mode 100644 src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java create mode 100644 src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java create mode 100644 src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java create mode 100644 src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java create mode 100644 src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java create mode 100644 src/main/java/gregtech/common/items/armor/JetpackStats.java create mode 100644 src/main/java/gregtech/common/items/armor/StepAssistBehavior.java create mode 100644 src/main/resources/assets/gregtech/models/item/armors/nano_boots.json create mode 100644 src/main/resources/assets/gregtech/models/item/armors/nano_chestplate.json create mode 100644 src/main/resources/assets/gregtech/models/item/armors/nano_helmet.json create mode 100644 src/main/resources/assets/gregtech/models/item/armors/nano_leggings.json create mode 100644 src/main/resources/assets/gregtech/models/item/armors/nightvision_goggles.json delete mode 100644 src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_1.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_boots.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_boots_item.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_chestplate.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_chestplate_item.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_helmet.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_helmet_item.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_leggings.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nano_leggings_item.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nightvision_goggles.png create mode 100644 src/main/resources/assets/gregtech/textures/items/armors/nightvision_goggles_item.png diff --git a/src/main/java/gregtech/api/damagesources/DamageSources.java b/src/main/java/gregtech/api/damagesources/DamageSources.java index 2396a04f41f..423b0417b63 100644 --- a/src/main/java/gregtech/api/damagesources/DamageSources.java +++ b/src/main/java/gregtech/api/damagesources/DamageSources.java @@ -20,7 +20,6 @@ public class DamageSources { private static final DamageSource ELECTRIC = new DamageSource("electric"); private static final DamageSource RADIATION = new DamageSource("radiation").setDamageBypassesArmor(); private static final DamageSource TURBINE = new DamageSource("turbine"); - private static final DamageSource USE_ARMOR_DURABILITY = new DamageSource("armor_durability"); public static DamageSource getExplodingDamage() { return EXPLOSION; @@ -50,10 +49,6 @@ public static DamageSource getTurbineDamage() { return TURBINE; } - public static DamageSource getArmorDurabilityDamage() { - return USE_ARMOR_DURABILITY; - } - public static DamageSource getPlayerDamage(@Nullable EntityPlayer source) { ItemStack stack = source != null ? source.getHeldItemMainhand() : ItemStack.EMPTY; if (!stack.isEmpty() && stack.getItem() instanceof IGTTool tool) { diff --git a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java index e4e6c67da6a..c383833de3c 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java +++ b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java @@ -22,6 +22,7 @@ import java.util.List; +@Deprecated public abstract class ArmorLogicSuite implements ISpecialArmorLogic, IItemHUDProvider { protected final int energyPerUse; diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index 889491551fb..9f5e72e459a 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -3,8 +3,9 @@ import com.google.common.base.Preconditions; import gregtech.api.GregTechAPI; import gregtech.api.items.metaitem.MetaItem; -import gregtech.api.items.metaitem.stats.IEnchantabilityHelper; import gregtech.api.items.metaitem.stats.IItemComponent; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; import gregtech.common.creativetab.GTCreativeTabs; import net.minecraft.enchantment.Enchantment; @@ -12,11 +13,11 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.ISpecialArmor; @@ -25,6 +26,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + +@Deprecated public class ArmorMetaItem.ArmorMetaValueItem> extends MetaItem implements IArmorItem, ISpecialArmor, IEnchantabilityHelper { @@ -42,93 +46,30 @@ protected T constructMetaValueItem(short metaValue, String unlocalizedName) { @NotNull private IArmorLogic getArmorLogic(ItemStack itemStack) { T metaValueItem = getItem(itemStack); - return metaValueItem == null ? new DummyArmorLogic() : metaValueItem.getArmorLogic(); - } - - - @NotNull - @Override - public Multimap getAttributeModifiers(@NotNull EntityEquipmentSlot slot, - @NotNull ItemStack stack) { - Multimap multimap = super.getAttributeModifiers(slot, stack); - IArmorLogic armorLogic = getArmorLogic(stack); - multimap.putAll(armorLogic.getAttributeModifiers(slot, stack)); - return multimap; + return metaValueItem == null ? new DummyArmorLogic(EntityEquipmentSlot.HEAD, "") : metaValueItem.getArmorLogic(); } - // todo - // todo Definition: done - // todo Item: todo - // todo @Override - public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, - double damage, int slot) { - IArmorLogic armorLogic = getArmorLogic(armor); - if (armorLogic instanceof ISpecialArmorLogic) { - return ((ISpecialArmorLogic) armorLogic).getProperties(player, armor, source, damage, getSlotByIndex(slot)); - } + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, int slot) { return new ArmorProperties(0, 0, Integer.MAX_VALUE); } - // todo - // todo Definition: done - // todo Item: todo - // todo @Override - public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { - IArmorLogic armorLogic = getArmorLogic(armor); - if (armorLogic instanceof ISpecialArmorLogic) { - return ((ISpecialArmorLogic) armorLogic).getArmorDisplay(player, armor, slot); - } + public int getArmorDisplay(EntityPlayer player, @Nonnull ItemStack armor, int slot) { return 0; } - // todo - // todo Definition: nothing needed? - // todo Item: todo - // todo - @Override - public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, DamageSource source, int damage, - int slot) { - IArmorLogic armorLogic = getArmorLogic(stack); - armorLogic.damageArmor(entity, stack, source, damage, getSlotByIndex(slot)); - } - - // todo - // todo Definition: done - // todo Item: done - // todo - @Override - public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemStack armor, DamageSource source, - double damage, int slot) { - IArmorLogic armorLogic = getArmorLogic(armor); - if (armorLogic instanceof ISpecialArmorLogic) { - return ((ISpecialArmorLogic) armorLogic).handleUnblockableDamage(entity, armor, source, damage, - getSlotByIndex(slot)); - } - return false; - } - - // todo - // todo Definition: done - // todo Item: done - // todo @Override - public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack itemStack) { - IArmorLogic armorLogic = getArmorLogic(itemStack); - armorLogic.onArmorTick(world, player, itemStack); + public void damageArmor(EntityLivingBase entity, @Nonnull ItemStack stack, DamageSource source, int damage, int slot) { } - // todo not needed since we now extend ItemArmor @Override public boolean isValidArmor(@NotNull ItemStack stack, @NotNull EntityEquipmentSlot armorType, @NotNull Entity entity) { IArmorLogic armorLogic = getArmorLogic(stack); - return super.isValidArmor(stack, armorType, entity) && - armorLogic.isValidArmor(stack, entity, armorType); + return super.isValidArmor(stack, armorType, entity) && armorLogic.getEquipmentSlot(stack) == armorType; } - // todo not needed since we now extend ItemArmor @Nullable @Override public EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { @@ -136,7 +77,6 @@ public EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { return armorLogic.getEquipmentSlot(stack); } - // todo Need to get this onto the Definition somehow @Nullable @Override public String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, @NotNull EntityEquipmentSlot slot, @@ -145,22 +85,19 @@ public String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, return armorLogic.getArmorTexture(stack, entity, slot, type); } - private static EntityEquipmentSlot getSlotByIndex(int index) { - switch (index) { - case 0: - return EntityEquipmentSlot.FEET; - case 1: - return EntityEquipmentSlot.LEGS; - case 2: - return EntityEquipmentSlot.CHEST; - default: - return EntityEquipmentSlot.HEAD; - } + @Override + public void addInformation(@Nonnull ItemStack itemStack, @Nullable World worldIn, @Nonnull List lines, @Nonnull ITooltipFlag tooltipFlag) { + lines.add(TextFormatting.RED + "Deprecated Item! Convert in an Assembler to get the new version"); // todo lang + } + + @Override + public boolean isEnchantable(@Nonnull ItemStack stack) { + return false; } public class ArmorMetaValueItem extends MetaValueItem { - private IArmorLogic armorLogic = new DummyArmorLogic(); + private IArmorLogic armorLogic; protected ArmorMetaValueItem(int metaValue, String unlocalizedName) { super(metaValue, unlocalizedName); @@ -172,10 +109,14 @@ public IArmorLogic getArmorLogic() { return armorLogic; } + public ArmorMetaValueItem setArmorLogic(EntityEquipmentSlot slot, String armorTextureName) { + this.armorLogic = new DummyArmorLogic(slot, armorTextureName); + return this; + } + public ArmorMetaValueItem setArmorLogic(IArmorLogic armorLogic) { Preconditions.checkNotNull(armorLogic, "Cannot set ArmorLogic to null"); this.armorLogic = armorLogic; - this.armorLogic.addToolComponents(this); return this; } @@ -194,41 +135,32 @@ public ArmorMetaValueItem setModelAmount(int modelAmount) { public ArmorMetaValueItem setRarity(EnumRarity rarity) { return (ArmorMetaValueItem) super.setRarity(rarity); } - } - @Override - public boolean isEnchantable(@NotNull ItemStack stack) { - return true; + @Override + public ArmorMetaValueItem setInvisible() { + super.setInvisible(); + return this; + } } - @Override - public int getItemEnchantability(@NotNull ItemStack stack) { - return 50; - } + private static class DummyArmorLogic implements IArmorLogic { - @Override - public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Enchantment enchantment) { - EntityEquipmentSlot slot = this.getEquipmentSlot(stack); - if (slot == null || enchantment.type == null) { - return false; + private final EntityEquipmentSlot slot; + private final String armorTextureName; + + public DummyArmorLogic(EntityEquipmentSlot slot, String armorTextureName) { + this.slot = slot; + this.armorTextureName = armorTextureName; } - IArmorLogic armorLogic = getArmorLogic(stack); - if (!armorLogic.canBreakWithDamage(stack) && enchantment.type == EnumEnchantmentType.BREAKABLE) { - return false; + @Override + public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { + return slot; } - switch (slot) { - case HEAD: - return enchantment.type.canEnchantItem(Items.DIAMOND_HELMET); - case CHEST: - return enchantment.type.canEnchantItem(Items.DIAMOND_CHESTPLATE); - case LEGS: - return enchantment.type.canEnchantItem(Items.DIAMOND_LEGGINGS); - case FEET: - return enchantment.type.canEnchantItem(Items.DIAMOND_BOOTS); - default: - return enchantment.isAllowedOnBooks(); + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return String.format("gregtech:textures/items/armors/%s.png", armorTextureName); } } } diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java index 2729c46fa38..210d4c4a037 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorUtils.java +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -2,7 +2,6 @@ import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; -import gregtech.api.util.ItemStackHashStrategy; import gregtech.common.ConfigHolder; import net.minecraft.client.Minecraft; @@ -31,6 +30,7 @@ import java.util.Collections; import java.util.List; +@Deprecated public class ArmorUtils { public static final Side SIDE = FMLCommonHandler.instance().getSide(); @@ -133,7 +133,6 @@ public static void playJetpackSound(@NotNull EntityPlayer player) { /** * Resets private field, amount of ticks player in the sky */ - @SuppressWarnings("deprecation") public static void resetPlayerFloatingTime(EntityPlayer player) { if (player instanceof EntityPlayerMP) { ObfuscationReflectionHelper.setPrivateValue(NetHandlerPlayServer.class, @@ -178,41 +177,6 @@ public static ActionResult canEat(EntityPlayer player, ItemStack food } } - /** - * Format itemstacks list from [1xitem@1, 1xitem@1, 1xitem@2] to - * [2xitem@1, 1xitem@2] - * - * @return Formated list - */ - public static List format(List input) { - Object2IntMap items = new Object2IntOpenCustomHashMap<>( - ItemStackHashStrategy.comparingAllButCount()); - List output = new ArrayList<>(); - for (ItemStack itemStack : input) { - if (items.containsKey(itemStack)) { - int amount = items.get(itemStack); - items.replace(itemStack, ++amount); - } else { - items.put(itemStack, 1); - } - } - for (Object2IntMap.Entry entry : items.object2IntEntrySet()) { - ItemStack stack = entry.getKey().copy(); - stack.setCount(entry.getIntValue()); - output.add(stack); - } - return output; - } - - @NotNull - public static String format(long value) { - return new DecimalFormat("###,###.##").format(value); - } - - public static String format(double value) { - return new DecimalFormat("###,###.##").format(value); - } - /** * Modular HUD class for armor * now available only string rendering, if will be needed, diff --git a/src/main/java/gregtech/api/items/armor/DummyArmorLogic.java b/src/main/java/gregtech/api/items/armor/DummyArmorLogic.java index 91c18351856..8b137891791 100644 --- a/src/main/java/gregtech/api/items/armor/DummyArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/DummyArmorLogic.java @@ -1,23 +1 @@ -package gregtech.api.items.armor; -import net.minecraft.entity.Entity; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; - -class DummyArmorLogic implements IArmorLogic { - - @Override - public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { - return EntityEquipmentSlot.HEAD; - } - - @Override - public boolean isValidArmor(ItemStack itemStack, Entity entity, EntityEquipmentSlot equipmentSlot) { - return false; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "minecraft:textures/models/armor/diamond_layer_0.png"; - } -} diff --git a/src/main/java/gregtech/api/items/armor/IArmorItem.java b/src/main/java/gregtech/api/items/armor/IArmorItem.java index ce477b9b60a..7362523a62d 100644 --- a/src/main/java/gregtech/api/items/armor/IArmorItem.java +++ b/src/main/java/gregtech/api/items/armor/IArmorItem.java @@ -1,10 +1,5 @@ package gregtech.api.items.armor; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; - +@Deprecated public interface IArmorItem { - - void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, int slot); } diff --git a/src/main/java/gregtech/api/items/armor/IArmorLogic.java b/src/main/java/gregtech/api/items/armor/IArmorLogic.java index 8f318e35490..be4f139032c 100644 --- a/src/main/java/gregtech/api/items/armor/IArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/IArmorLogic.java @@ -1,60 +1,26 @@ package gregtech.api.items.armor; import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; - -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; -/** - * Defines abstract armor logic that can be added to ArmorMetaItem to control it - * It can implement {@link net.minecraftforge.common.ISpecialArmor} for extended damage calculations - * supported instead of using vanilla attributes - */ +@Deprecated public interface IArmorLogic { - UUID ATTACK_DAMAGE_MODIFIER = UUID.fromString("CB3F55D3-645C-4F38-A144-9C13A33DB5CF"); - UUID ATTACK_SPEED_MODIFIER = UUID.fromString("FA233E1C-4180-4288-B05C-BCCE9785ACA3"); - - default void addToolComponents(ArmorMetaValueItem metaValueItem) {} - - EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack); - - default boolean canBreakWithDamage(ItemStack stack) { - return false; + default void addToolComponents(ArmorMetaValueItem metaValueItem) { } - default void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, - EntityEquipmentSlot equipmentSlot) {} + EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack); - default boolean isValidArmor(ItemStack itemStack, Entity entity, EntityEquipmentSlot equipmentSlot) { - return getEquipmentSlot(itemStack) == equipmentSlot; + default void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { } default void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {} String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type); - - /** - * - * @return the value to multiply heat damage by - */ - default float getHeatResistance() { - return 1.0f; - } } diff --git a/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java b/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java index dda46689d2f..89e263b5b1a 100644 --- a/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java @@ -13,6 +13,7 @@ * Armor logic that wraps {@link net.minecraftforge.common.ISpecialArmor} methods * to allow full control over damage absorption additionally to vanilla attribute values */ +@Deprecated public interface ISpecialArmorLogic extends IArmorLogic { /** diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java index bb015e078a9..e8f83fa1509 100644 --- a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java +++ b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java @@ -1,5 +1,7 @@ package gregtech.api.items.armoritem; +import gregtech.api.items.armoritem.armorset.IArmorSet; +import gregtech.api.items.armoritem.jetpack.JetpackBuilder; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.util.DamageSource; @@ -19,13 +21,13 @@ public abstract class ArmorBuilder behaviors = new ArrayList<>(); + private IArmorSet armorSet; private double damageAbsorption; private final List handledUnblockableSources = new ArrayList<>(); - private String armorTexture; - private boolean canBreakWithDamage; // todo - private boolean isEnchantable; - private int enchantability; + private boolean isEnchantable = true; + private int enchantability = 10; // default to vanilla diamond armor enchantability private IRarity rarity = EnumRarity.COMMON; + private int durability; protected ArmorBuilder(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { this.domain = domain; @@ -38,55 +40,68 @@ public U behaviors(IArmorBehavior... behaviors) { return cast(this); } - public U texture(String armorTexture) { - this.armorTexture = armorTexture; + public U rarity(IRarity rarity) { + this.rarity = rarity; return cast(this); } - public U rarity(IRarity rarity) { - this.rarity = rarity; + public U durability(int durability) { + this.durability = durability; + return cast(this); + } + + public U enchantability(int enchantability) { + this.enchantability = enchantability; return cast(this); } + public U allowBlocking(DamageSource... sources) { + Collections.addAll(handledUnblockableSources, sources); + return cast(this); + } + + public U armorSet(IArmorSet armorSet) { + this.armorSet = armorSet; + return cast(this); + } + + public > U jetpack(JetpackBuilder b) { + return behaviors(b.build()); + } + public abstract Supplier supply(IGTArmorDefinition definition); public abstract U cast(ArmorBuilder builder); public final T build() { - // todo more here? return supply(buildDefinition()).get(); } protected final IGTArmorDefinition buildDefinition() { return new IGTArmorDefinition() { @Override - public EntityEquipmentSlot getEquippedSlot() { + public @NotNull EntityEquipmentSlot getEquippedSlot() { return slot; } @Override - public List getBehaviors() { + public @NotNull List getBehaviors() { return behaviors; } @Override - public double getDamageAbsorption(EntityEquipmentSlot slot, @Nullable DamageSource damageSource) { - return damageAbsorption; - } - - @Override - public List handledUnblockableSources() { - return handledUnblockableSources; + public @Nullable IArmorSet getArmorSet() { + return armorSet; } @Override - public String getArmorTexture() { - return armorTexture; + public double getDamageAbsorption(EntityEquipmentSlot slot, @Nullable DamageSource damageSource) { + return damageAbsorption; } @Override - public boolean canBreakWithDamage() { - return canBreakWithDamage; + public @NotNull List handledUnblockableSources() { + return handledUnblockableSources; } @Override @@ -100,9 +115,14 @@ public int getEnchantability() { } @Override - public IRarity getRarity() { + public @NotNull IRarity getRarity() { return rarity; } + + @Override + public int getMaxDurability() { + return durability; + } }; } } diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java new file mode 100644 index 00000000000..b44cad9e038 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java @@ -0,0 +1,52 @@ +package gregtech.api.items.armoritem; + +import gregtech.api.items.armoritem.armorset.IArmorSet; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static net.minecraft.inventory.EntityEquipmentSlot.*; +import static net.minecraft.inventory.EntityEquipmentSlot.HEAD; + +public class ArmorHelper { + + public static final String BEHAVIORS_TAG_KEY = "GT.Behaviors"; + + public static final String NIGHT_VISION_KEY = "NightVision"; + public static final String FALL_DAMAGE_KEY = "FallDamageCancel"; + public static final String STEP_ASSIST_KEY = "StepAssist"; + public static final String HEAT_REDUCTION_KEY = "HeatReduction"; + + /* Jetpack Keys */ + public static final String JETPACK_KEY = "Jetpack"; + public static final String HOVER_KEY = "Hover"; + + + private static final EntityEquipmentSlot[] ARMOR_SLOTS = {FEET, LEGS, CHEST, HEAD}; + + public static NBTTagCompound getBehaviorsTag(@NotNull ItemStack stack) { + return stack.getOrCreateSubCompound(BEHAVIORS_TAG_KEY); + } + + public static EntityEquipmentSlot[] getArmorSlots() { + return ARMOR_SLOTS; + } + + public static boolean hasFullSet(@NotNull EntityPlayer player, @Nullable IArmorSet armorSet) { + if (armorSet == null) { + return false; + } + for (EntityEquipmentSlot slot : getArmorSlots()) { + ItemStack armorStack = player.getItemStackFromSlot(slot); + if (armorStack.isEmpty() + || !(armorStack.getItem() instanceof IGTArmor gtArmor) + || gtArmor.getArmorSet() != armorSet) { + return false; + } + } + return true; + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java index fc0e5456474..dabe12b27a5 100644 --- a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java @@ -21,11 +21,8 @@ public interface IArmorBehavior { /** * Called every tick that this behavior's armor item is equipped. - * - * @return If something was done this tick that needs durability loss or energy drain to be applied. */ - default boolean onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - return false; + default void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { } /** Called when this behavior's armor item is unequipped. */ @@ -47,6 +44,9 @@ default Set getListenedKeys() { default void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) { } + default void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) { + } + /** * Add a capability to this behavior's armor. * Recommended to only use this if no other options exist. diff --git a/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java new file mode 100644 index 00000000000..b4dffa72070 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java @@ -0,0 +1,21 @@ +package gregtech.api.items.armoritem; + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; + +public interface IElectricArmorBehavior extends IArmorBehavior { + + @Override + default void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + IElectricItem electricItem = stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (electricItem != null) { + onArmorTick(world, player, stack, electricItem); + } + } + + void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, @NotNull IElectricItem electricItem); +} diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmor.java b/src/main/java/gregtech/api/items/armoritem/IGTArmor.java index 23aeb7a2329..b86facb2a64 100644 --- a/src/main/java/gregtech/api/items/armoritem/IGTArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmor.java @@ -1,12 +1,25 @@ package gregtech.api.items.armoritem; +import gregtech.api.items.armoritem.armorset.IArmorSet; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; -public interface IGTArmor { +public interface IGTArmor extends ISpecialArmor { + + String getDomain(); + + String getId(); @NotNull IGTArmorDefinition getDefinition(); @@ -14,7 +27,37 @@ public interface IGTArmor { @NotNull EntityEquipmentSlot getEquipmentSlot(); + @Nullable IArmorSet getArmorSet(); + + /** + * If behavior logic can be run at all. Most commonly used for energy checks on electric armors. + * Typically used externally for behaviors which require event listeners to function properly. + */ + boolean areBehaviorsActive(@NotNull ItemStack stack); + + void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack); + + void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack); + default @NotNull Item get() { return (Item) this; } + + @NotNull ItemStack getStack(); + + @SideOnly(Side.CLIENT) + default String getModelPath() { + return getDomain() + ":" + "armors/" + getId(); + } + + @SideOnly(Side.CLIENT) + default ModelResourceLocation getModelLocation() { + return new ModelResourceLocation(getModelPath(), "inventory"); + } + + // todo material-based armors + @SideOnly(Side.CLIENT) + default int getColor(ItemStack stack, int tintIndex) { + return 0xFFFFFF; + } } diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java index 92cdbe013ee..8ecf25ff66e 100644 --- a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java @@ -1,8 +1,10 @@ package gregtech.api.items.armoritem; +import gregtech.api.items.armoritem.armorset.IArmorSet; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.util.DamageSource; import net.minecraftforge.common.IRarity; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -10,23 +12,26 @@ // TODO A lot of these do not need to be in the "definition" class, but in the Item class public interface IGTArmorDefinition { - EntityEquipmentSlot getEquippedSlot(); + @NotNull EntityEquipmentSlot getEquippedSlot(); - List getBehaviors(); + @NotNull List getBehaviors(); + + @Nullable IArmorSet getArmorSet(); /* ArmorProperties */ double getDamageAbsorption(EntityEquipmentSlot slot, @Nullable DamageSource damageSource); - List handledUnblockableSources(); - - String getArmorTexture(); - - // meaning, does this item ever break or does it just use power or something - boolean canBreakWithDamage(); + @NotNull List handledUnblockableSources(); boolean isEnchantable(); int getEnchantability(); - IRarity getRarity(); + @NotNull IRarity getRarity(); + + int getMaxDurability(); + + default boolean hasDurability() { + return getMaxDurability() > 0; + } } diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java index 3baee2f2b1e..e8db9eb68ff 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java @@ -2,10 +2,11 @@ import gregtech.api.GregTechAPI; import gregtech.api.capability.impl.CombinedCapabilityProvider; -import gregtech.api.damagesources.DamageSources; +import gregtech.api.items.armoritem.armorset.IArmorSet; import gregtech.api.util.input.IKeyPressedListener; import gregtech.api.util.input.KeyBind; import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnumEnchantmentType; import net.minecraft.entity.Entity; @@ -13,13 +14,14 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; +import net.minecraft.util.NonNullList; import net.minecraft.world.World; import net.minecraftforge.common.IRarity; -import net.minecraftforge.common.ISpecialArmor; import net.minecraftforge.common.capabilities.ICapabilityProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,17 +30,44 @@ import java.util.List; import java.util.function.Supplier; -public class ItemGTArmor extends ItemArmor implements IGTArmor, ISpecialArmor, IKeyPressedListener { +/** For armors which use durability or have infinite durability. */ +public class ItemGTArmor extends ItemArmor implements IGTArmor, IKeyPressedListener { + private final String domain, id; private final IGTArmorDefinition armorDefinition; public ItemGTArmor(String domain, String id, IGTArmorDefinition armorDefinition) { super(ArmorMaterial.DIAMOND, 0, armorDefinition.getEquippedSlot()); + this.domain = domain; + this.id = id; this.armorDefinition = armorDefinition; setMaxStackSize(1); setCreativeTab(GregTechAPI.TAB_GREGTECH_TOOLS); setTranslationKey("gt.armor." + id); setRegistryName(domain, id); + if (armorDefinition.hasDurability()) { + setMaxDamage(armorDefinition.getMaxDurability(), true); + } + } + + @Override + public String getDomain() { + return domain; + } + + @Override + public String getId() { + return id; + } + + @Override + public @NotNull ItemStack getStack() { + ItemStack stack = new ItemStack(get()); + + // Set behaviors + NBTTagCompound behaviorTag = ArmorHelper.getBehaviorsTag(stack); + getBehaviors().forEach(behavior -> behavior.addBehaviorNBT(stack, behaviorTag)); + return stack; } public @NotNull IGTArmorDefinition getDefinition() { @@ -55,6 +84,16 @@ public ItemGTArmor(String domain, String id, IGTArmorDefinition armorDefinition) return getDefinition().getEquippedSlot(); } + @Override + public @Nullable IArmorSet getArmorSet() { + return getDefinition().getArmorSet(); + } + + @Override + public boolean areBehaviorsActive(@NotNull ItemStack stack) { + return true; + } + @Override public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { // todo this is gonna be a huge mess to unravel @@ -68,12 +107,28 @@ public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int sl @Override public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { - if (getDefinition().canBreakWithDamage()) { + if (getDefinition().hasDurability()) { // todo need to do actual damage and save to NBT here, as "default" armor can break // todo then override in ItemGTElectricArmor can do it as energy instead (or in addition to) } } + @Override + public final @NotNull Item setMaxDamage(int maxDamageIn) { + // block this call from going through because we need additional information + // not yet available to us when MC calls this method initially. + return this; + } + + public void setMaxDamage(int maxDamageIn, @SuppressWarnings("unused") boolean forced) { + super.setMaxDamage(maxDamageIn); + } + + @Override + public boolean getIsRepairable(@NotNull ItemStack toRepair, @NotNull ItemStack repair) { + return false; + } + @Override public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { return armorDefinition.handledUnblockableSources().contains(source); @@ -81,17 +136,14 @@ public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemSta @Override public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - int numEffects = 0; - for (IArmorBehavior behavior : getDefinition().getBehaviors()) { - if (behavior.onArmorTick(world, player, stack)) { - numEffects++; + if (areBehaviorsActive(stack)) { + for (IArmorBehavior behavior : getDefinition().getBehaviors()) { + behavior.onArmorTick(world, player, stack); } } - if (numEffects > 0 && !world.isRemote) { - damageArmor(player, stack, DamageSources.getArmorDurabilityDamage(), numEffects, getEquipmentSlot().getIndex()); - } } + @Override public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { for (IArmorBehavior behavior : getDefinition().getBehaviors()) { if (player instanceof EntityPlayerMP playerMP) { @@ -103,6 +155,7 @@ public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @ } } + @Override public void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { for (IArmorBehavior behavior : getDefinition().getBehaviors()) { if (player instanceof EntityPlayerMP playerMP) { @@ -123,10 +176,9 @@ public void onKeyPressed(EntityPlayerMP player, KeyBind keyPressed) { } } - // todo make sure this works with how we end up doing the builder class @Override public @Nullable String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, @NotNull EntityEquipmentSlot slot, @NotNull String type) { - return getDefinition().getArmorTexture(); + return String.format("%s:textures/items/armors/%s.png", getDomain(), getId()); } @Override @@ -148,7 +200,7 @@ public boolean isEnchantable(@NotNull ItemStack stack) { public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Enchantment enchantment) { if (enchantment.type == null) return false; - if (!getDefinition().canBreakWithDamage() && enchantment.type == EnumEnchantmentType.BREAKABLE) { + if (!getDefinition().hasDurability() && enchantment.type == EnumEnchantmentType.BREAKABLE) { return false; } @@ -172,6 +224,13 @@ public void addInformation(@NotNull ItemStack stack, @Nullable World world, @Not } } + @Override + public void getSubItems(@NotNull CreativeTabs tab, @NotNull NonNullList items) { + if (this.isInCreativeTab(tab)) { + items.add(getStack()); + } + } + @Override public final @Nullable ICapabilityProvider initCapabilities(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { List providers = getCapabilityProviders(stack, tag); diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java index 2bb34925dd9..8dde709b1e8 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java @@ -3,7 +3,6 @@ import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.capability.impl.ElectricItem; -import gregtech.api.damagesources.DamageSources; import gregtech.api.items.metaitem.ElectricStats; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -18,6 +17,7 @@ import java.util.List; import java.util.function.Supplier; +/** For armors which use power, either instead of or in addition to durability. */ public class ItemGTElectricArmor extends ItemGTArmor { private static final IElectricItem EMPTY_STATS = new ElectricItem(ItemStack.EMPTY, 0, 0, false, false); @@ -51,11 +51,7 @@ public ItemGTElectricArmor(String domain, String id, @Override public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { IElectricItem electricItem = getElectricItem(stack); - long amountDrawn, amountToDraw = energyPerUse * damage; - if (source != DamageSources.getArmorDurabilityDamage()) { - // armor durability damage is an internal source. if it is that source, draw the full amount instead of scaling - amountToDraw /= energyScaleFactor; - } + long amountDrawn, amountToDraw = energyPerUse * damage / energyScaleFactor; amountDrawn = electricItem.discharge(amountToDraw, electricItem.getTier(), true, false, false); if (amountDrawn < amountToDraw) { // send remaining damage to durability (will be tested in super if it should be checked) @@ -72,6 +68,12 @@ public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int sl return super.getArmorDisplay(player, armor, slot); } + @Override + public boolean areBehaviorsActive(@NotNull ItemStack stack) { + // all behaviors for electric armors need power to work, even if they don't have their own cost + return getElectricItem(stack).getCharge() > 0; + } + @Override protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { List providers = super.getCapabilityProviders(stack, tag); @@ -85,7 +87,7 @@ public static class Builder extends ArmorBuilder { protected int tier; protected long maxCharge; protected long energyPerUse; - protected int energyScaleFactor; + protected int energyScaleFactor = 1; // todo, just setting this because of div by 0 protected boolean canChargeExternally; public static @NotNull Builder of(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { @@ -103,7 +105,8 @@ public Builder electric(int tier, long maxCharge) { } public Builder electricCost(long energyPerUse) { - return electricCost(energyPerUse, 0); + this.energyPerUse = energyPerUse; + return this; } public Builder electricCost(long energyPerUse, int energyScaleFactor) { diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java new file mode 100644 index 00000000000..2eec9127c9e --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java @@ -0,0 +1,5 @@ +package gregtech.api.items.armoritem; + +/** For armors which use a liquid fuel, either instead of or in addition to durability. */ +public class ItemGTFueledArmor { +} diff --git a/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java b/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java new file mode 100644 index 00000000000..5d0e88a539d --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java @@ -0,0 +1,15 @@ +package gregtech.api.items.armoritem.armorset; + +import gregtech.api.items.armoritem.ArmorHelper; +import net.minecraft.entity.player.EntityPlayer; + +import java.util.Set; + +public interface IArmorSet { + + Set getSetBonuses(); + + default boolean hasFullSet(EntityPlayer player) { + return ArmorHelper.hasFullSet(player, this); + } +} diff --git a/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java b/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java new file mode 100644 index 00000000000..52829b897b4 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java @@ -0,0 +1,4 @@ +package gregtech.api.items.armoritem.armorset; + +public interface ISetBonus { +} diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java b/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java new file mode 100644 index 00000000000..c3e8abf9703 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java @@ -0,0 +1,25 @@ +package gregtech.api.items.armoritem.jetpack; + +import net.minecraft.util.EnumParticleTypes; +import org.jetbrains.annotations.Nullable; + +public interface IJetpackStats { + + double getSprintEnergyModifier(); + + double getSprintSpeedModifier(); + + double getVerticalHoverSpeed(); + + double getVerticalHoverSlowSpeed(); + + double getVerticalAcceleration(); + + double getVerticalSpeed(); + + double getSidewaysSpeed(); + + float getFallDamageReduction(); + + @Nullable EnumParticleTypes getParticle(); +} diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java new file mode 100644 index 00000000000..ce87d2389ef --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java @@ -0,0 +1,6 @@ +package gregtech.api.items.armoritem.jetpack; + +import gregtech.api.items.armoritem.IArmorBehavior; + +public abstract class JetpackBehavior implements IArmorBehavior { +} diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java new file mode 100644 index 00000000000..cf9506643e4 --- /dev/null +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java @@ -0,0 +1,20 @@ +package gregtech.api.items.armoritem.jetpack; + +import java.util.function.Supplier; + +public abstract class JetpackBuilder> { + + private IJetpackStats stats; + + protected JetpackBuilder() { + + } + + public abstract Supplier supply(IJetpackStats stats); + + public abstract T cast(JetpackBuilder builder); + + public final JetpackBehavior build() { + return supply(stats).get(); + } +} diff --git a/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java b/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java index f84e0264ad2..7d77c914187 100644 --- a/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java +++ b/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java @@ -2,7 +2,8 @@ import gregtech.api.GTValues; import gregtech.api.damagesources.DamageSources; -import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armoritem.ArmorHelper; +import gregtech.api.items.armoritem.IGTArmor; import gregtech.api.items.metaitem.StandardMetaItem; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.Material; @@ -26,6 +27,7 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -159,11 +161,16 @@ public void onUpdate(@NotNull ItemStack itemStack, @NotNull World worldIn, @NotN if (material == null || !material.hasProperty(PropertyKey.BLAST)) return; float heatDamage = prefix.heatDamageFunction.apply(material.getBlastTemperature()); - ItemStack armor = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - if (!armor.isEmpty() && armor.getItem() instanceof ArmorMetaItem) { - ArmorMetaItem.ArmorMetaValueItem metaValueItem = ((ArmorMetaItem) armor.getItem()) - .getItem(armor); - if (metaValueItem != null) heatDamage *= metaValueItem.getArmorLogic().getHeatResistance(); + for (EntityEquipmentSlot slot : ArmorHelper.getArmorSlots()) { + ItemStack armor = entity.getItemStackFromSlot(slot); + if (!armor.isEmpty() && armor.getItem() instanceof IGTArmor gtArmor) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(armor); + if (tag.hasKey(ArmorHelper.HEAT_REDUCTION_KEY) && gtArmor.areBehaviorsActive(armor)) { + float reductionFactor = tag.getFloat(ArmorHelper.HEAT_REDUCTION_KEY); + if (reductionFactor == 0) return; + heatDamage *= reductionFactor; + } + } } if (heatDamage > 0.0) { diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index 94ae45effb9..884454e3838 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -82,8 +82,6 @@ import java.util.function.Supplier; import java.util.stream.Collectors; -import static gregtech.api.items.armor.IArmorLogic.ATTACK_DAMAGE_MODIFIER; -import static gregtech.api.items.armor.IArmorLogic.ATTACK_SPEED_MODIFIER; import static gregtech.api.items.toolitem.ToolHelper.*; /** diff --git a/src/main/java/gregtech/api/items/toolitem/ToolHelper.java b/src/main/java/gregtech/api/items/toolitem/ToolHelper.java index 8b1a8ef147a..d30a620a8a9 100644 --- a/src/main/java/gregtech/api/items/toolitem/ToolHelper.java +++ b/src/main/java/gregtech/api/items/toolitem/ToolHelper.java @@ -152,6 +152,9 @@ public final class ToolHelper { public static final Supplier SUPPLY_POWER_UNIT_EV = () -> MetaItems.POWER_UNIT_EV.getStackForm(); public static final Supplier SUPPLY_POWER_UNIT_IV = () -> MetaItems.POWER_UNIT_IV.getStackForm(); + public static final UUID ATTACK_DAMAGE_MODIFIER = UUID.fromString("CB3F55D3-645C-4F38-A144-9C13A33DB5CF"); + public static final UUID ATTACK_SPEED_MODIFIER = UUID.fromString("FA233E1C-4180-4288-B05C-BCCE9785ACA3"); + // for retrieving the silk touch drop from a block. Cannot be Access-Transformed because it is a Forge method. private static final MethodHandle GET_SILK_TOUCH_DROP; diff --git a/src/main/java/gregtech/api/util/input/KeyBind.java b/src/main/java/gregtech/api/util/input/KeyBind.java index 0e73270d142..c73c1db1000 100644 --- a/src/main/java/gregtech/api/util/input/KeyBind.java +++ b/src/main/java/gregtech/api/util/input/KeyBind.java @@ -5,8 +5,8 @@ import gregtech.core.network.packets.PacketKeyPressed; import gregtech.core.network.packets.PacketKeysDown; import gregtech.api.util.GTLog; -import gregtech.core.network.packets.PacketKeysPressed; - +import it.unimi.dsi.fastutil.ints.Int2BooleanMap; +import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.client.Minecraft; @@ -20,6 +20,7 @@ import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.InputEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -34,12 +35,15 @@ public enum KeyBind { + /* Held keys */ VANILLA_JUMP(() -> () -> Minecraft.getMinecraft().gameSettings.keyBindJump), VANILLA_SNEAK(() -> () -> Minecraft.getMinecraft().gameSettings.keyBindSneak), VANILLA_FORWARD(() -> () -> Minecraft.getMinecraft().gameSettings.keyBindForward), VANILLA_BACKWARD(() -> () -> Minecraft.getMinecraft().gameSettings.keyBindBack), VANILLA_LEFT(() -> () -> Minecraft.getMinecraft().gameSettings.keyBindLeft), VANILLA_RIGHT(() -> () -> Minecraft.getMinecraft().gameSettings.keyBindRight), + + /* Pressed keys */ ARMOR_MODE_SWITCH("gregtech.key.armor_mode_switch", KeyConflictContext.IN_GAME, Keyboard.KEY_M), ARMOR_HOVER("gregtech.key.armor_hover", KeyConflictContext.IN_GAME, Keyboard.KEY_H), ARMOR_CHARGING("gregtech.key.armor_charging", KeyConflictContext.IN_GAME, Keyboard.KEY_N), @@ -54,28 +58,41 @@ public static void init() { } } + /** + * Handle Keys which we track for "holds" on the server, meaning if a key is being pressed + * down for a prolonged period of time. This is a state which gets saved on the server. + */ + @SubscribeEvent + @SideOnly(Side.CLIENT) + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.START) { + Int2BooleanMap updatingKeyDown = new Int2BooleanOpenHashMap(); + for (KeyBind keybind : VALUES) { + boolean previousKeyDown = keybind.isKeyDown; + keybind.isKeyDown = keybind.isKeyDown(); + if (previousKeyDown != keybind.isKeyDown) { + updatingKeyDown.put(keybind.ordinal(), keybind.isKeyDown); + } + } + if (!updatingKeyDown.isEmpty()) { + GregTechAPI.networkHandler.sendToServer(new PacketKeysDown(updatingKeyDown)); + } + } + } + + /** + * Handle Keys which we track for "presses" on the server, meaning a single input which + * sends a packet to the server which informs all listeners. + */ @SubscribeEvent @SideOnly(Side.CLIENT) public static void onInputEvent(InputEvent.KeyInputEvent event) { - List updatingKeyDown = new ArrayList<>(); IntList updatingPressed = new IntArrayList(); for (KeyBind keybind : VALUES) { - // handle isKeyDown todo this can be removed after full armor rewrite - - boolean previousKeyDown = keybind.isKeyDown; - keybind.isKeyDown = keybind.isKeyDown(); - if (previousKeyDown != keybind.isKeyDown) { - updatingKeyDown.add(keybind); - } - - // handle isPressed if (keybind.isPressed()) { updatingPressed.add(keybind.ordinal()); } } - if (!updatingKeyDown.isEmpty()) { - GregTechAPI.networkHandler.sendToServer(new PacketKeysDown(updatingKeyDown)); - } if (!updatingPressed.isEmpty()) { GregTechAPI.networkHandler.sendToServer(new PacketKeyPressed(updatingPressed)); } @@ -160,17 +177,14 @@ public boolean isKeyDown(EntityPlayer player) { } public void registerListener(EntityPlayerMP player, IKeyPressedListener listener) { - System.out.println("Listener registered"); Set listenerSet = listeners.computeIfAbsent(player, k -> new HashSet<>()); listenerSet.add(listener); } public void removeListener(EntityPlayerMP player, IKeyPressedListener listener) { - System.out.println("Listener removed"); Set listenerSet = listeners.get(player); if (listenerSet != null) { listenerSet.remove(listener); } } - } diff --git a/src/main/java/gregtech/asm/hooks/ArmorHooks.java b/src/main/java/gregtech/asm/hooks/ArmorHooks.java index 5eec5ddeff6..e69de29bb2d 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorHooks.java @@ -1,26 +0,0 @@ -package gregtech.asm.hooks; - -import gregtech.api.items.armor.IArmorItem; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.NonNullList; - -@SuppressWarnings("unused") -public class ArmorHooks { - - public static void damageArmor(float damage, EntityLivingBase entity, NonNullList inventory, - DamageSource damageSource) { - double armorDamage = Math.max(1.0F, damage / 4.0F); - for (int i = 0; i < inventory.size(); i++) { - ItemStack itemStack = inventory.get(i); - if (itemStack.getItem() instanceof IArmorItem) { - ((IArmorItem) itemStack.getItem()).damageArmor(entity, itemStack, damageSource, (int) armorDamage, i); - if (inventory.get(i).getCount() == 0) { - inventory.set(i, ItemStack.EMPTY); - } - } - } - } -} diff --git a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java index 8885a920245..61223b8d1c8 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java @@ -35,7 +35,6 @@ public static void renderArmorLayer(LayerArmorBase layer, EntityLivin ItemStack itemStack = entity.getItemStackFromSlot(slotIn); if (isArmorItem(itemStack, slotIn)) { - IArmorItem armorItem = (IArmorItem) itemStack.getItem(); ModelBase armorModel = layer.getModelFromSlot(slotIn); if (armorModel instanceof ModelBiped) { armorModel = ForgeHooksClient.getArmorModel(entity, itemStack, slotIn, (ModelBiped) armorModel); diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java index 4be3efac79d..e69de29bb2d 100644 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java +++ b/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java @@ -1,57 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; -import gregtech.asm.util.SafeMethodVisitor; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class SpecialArmorApplyVisitor extends SafeMethodVisitor { - - public static final String TARGET_CLASS_NAME = "net/minecraftforge/common/ISpecialArmor$ArmorProperties"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "applyArmor", - "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/util/NonNullList;Lnet/minecraft/util/DamageSource;D)F"); - - private static final ObfMapping METHOD_MAPPING = new ObfMapping("net/minecraft/util/CombatRules", "func_189427_a", - "(FFF)F").toRuntime(); - - private static final String ARMOR_HOOKS_OWNER = "gregtech/asm/hooks/ArmorHooks"; - private static final String ARMOR_HOOKS_SIGNATURE = "(FLnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/util/NonNullList;Lnet/minecraft/util/DamageSource;)V"; - private static final String ARMOR_HOOKS_METHOD_NAME = "damageArmor"; - - public SpecialArmorApplyVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - private static boolean checkTargetInsn(int opcode, String owner, String name, String desc) { - return opcode == Opcodes.INVOKESTATIC && METHOD_MAPPING.s_owner.equals(owner) && - METHOD_MAPPING.matches(name, desc); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (checkTargetInsn(opcode, owner, name, desc)) { - markPatchedSuccessfully(); - super.visitFieldInsn(Opcodes.PUTSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOUGHNESS_FIELD_NAME, "F"); // store armorToughness - super.visitFieldInsn(Opcodes.PUTSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOTAL_ARMOR_FIELD_NAME, "F"); // store totalArmor - super.visitInsn(Opcodes.DUP); // duplicate damage - super.visitVarInsn(Opcodes.ALOAD, 0); // load entity - super.visitVarInsn(Opcodes.ALOAD, 1); // load inventory - super.visitVarInsn(Opcodes.ALOAD, 2); // load damageSource - super.visitMethodInsn(Opcodes.INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, - ARMOR_HOOKS_SIGNATURE, false); // call ArmorHooks - super.visitFieldInsn(Opcodes.GETSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOTAL_ARMOR_FIELD_NAME, "F"); // load totalArmor back - super.visitFieldInsn(Opcodes.GETSTATIC, TARGET_CLASS_NAME, - SpecialArmorClassVisitor.CACHED_TOUGHNESS_FIELD_NAME, "F"); // load armorToughness back - } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - - @Override - protected String getInjectTargetString() { - return String.format("Patch target: %s; injection point: %s; (point not found)", TARGET_METHOD, METHOD_MAPPING); - } -} diff --git a/src/main/java/gregtech/client/ClientProxy.java b/src/main/java/gregtech/client/ClientProxy.java index 35969198260..ba98c8b9792 100644 --- a/src/main/java/gregtech/client/ClientProxy.java +++ b/src/main/java/gregtech/client/ClientProxy.java @@ -29,6 +29,7 @@ import gregtech.common.blocks.BlockCompressed; import gregtech.common.blocks.BlockFrame; import gregtech.common.blocks.MetaBlocks; +import gregtech.common.items.ArmorItems; import gregtech.common.items.MetaItems; import gregtech.common.items.ToolItems; @@ -112,6 +113,7 @@ public static void registerColors() { MetaBlocks.registerColors(); MetaItems.registerColors(); ToolItems.registerColors(); + ArmorItems.registerColors(); } @SubscribeEvent @@ -133,6 +135,7 @@ public static void registerModels(ModelRegistryEvent event) { MetaBlocks.registerItemModels(); MetaItems.registerModels(); ToolItems.registerModels(); + ArmorItems.registerModels(); } @SubscribeEvent diff --git a/src/main/java/gregtech/common/ArmorEventHandlers.java b/src/main/java/gregtech/common/ArmorEventHandlers.java index 5cbe50e8ab0..83364e91183 100644 --- a/src/main/java/gregtech/common/ArmorEventHandlers.java +++ b/src/main/java/gregtech/common/ArmorEventHandlers.java @@ -1,12 +1,26 @@ package gregtech.common; import gregtech.api.GTValues; -import gregtech.api.items.armoritem.ItemGTArmor; +import gregtech.api.items.armoritem.ArmorHelper; +import gregtech.api.items.armoritem.IGTArmor; +import net.minecraft.client.entity.EntityOtherPlayerMP; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent; +import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import static net.minecraft.inventory.EntityEquipmentSlot.*; @Mod.EventBusSubscriber(modid = GTValues.MODID) public class ArmorEventHandlers { @@ -14,7 +28,7 @@ public class ArmorEventHandlers { @SubscribeEvent public static void onLivingEquipmentChange(LivingEquipmentChangeEvent event) { EntityEquipmentSlot slot = event.getSlot(); - if (slot == EntityEquipmentSlot.MAINHAND || slot == EntityEquipmentSlot.OFFHAND) { + if (slot == MAINHAND || slot == OFFHAND) { return; } if (!(event.getEntityLiving() instanceof EntityPlayer player)) { @@ -25,11 +39,84 @@ public static void onLivingEquipmentChange(LivingEquipmentChangeEvent event) { return; } - if (event.getFrom().getItem() instanceof ItemGTArmor armor) { + if (event.getFrom().getItem() instanceof IGTArmor armor) { armor.onArmorUnequip(player.getEntityWorld(), player, event.getFrom()); } - if (event.getTo().getItem() instanceof ItemGTArmor armor) { + if (event.getTo().getItem() instanceof IGTArmor armor) { armor.onArmorEquip(player.getEntityWorld(), player, event.getTo()); } } + + @SubscribeEvent(priority = EventPriority.LOW) + public static void onLivingFall(LivingFallEvent event) { + if (event.getEntity() instanceof EntityPlayerMP player) { + if (player.fallDistance < 3.2f) { + return; + } + + for (EntityEquipmentSlot slot : ArmorHelper.getArmorSlots()) { + ItemStack armorStack = player.getItemStackFromSlot(slot); + if (armorStack.isEmpty() || !(armorStack.getItem() instanceof IGTArmor gtArmor)) { + continue; + } + // todo make sure jetpack sets this fall damage key when needed ("flyMode" nbt key previously?) + NBTTagCompound behaviorTag = ArmorHelper.getBehaviorsTag(armorStack); + if (behaviorTag.getBoolean(ArmorHelper.FALL_DAMAGE_KEY)) { + if (gtArmor.areBehaviorsActive(armorStack)) { + gtArmor.damageArmor(player, armorStack, DamageSource.FALL, (int) (player.fallDistance - 1.2f), slot.getIndex()); + player.fallDistance = 0; + event.setCanceled(true); + return; + } + } + } + } + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public static void onClientPlayerTick(TickEvent.PlayerTickEvent event) { + if (event.phase == TickEvent.Phase.START + && !event.player.isSpectator() + && !(event.player instanceof EntityOtherPlayerMP) + && !(event.player instanceof FakePlayer)) { + onPlayerTick(event); + } + } + + @SubscribeEvent + @SideOnly(Side.SERVER) + public static void onServerPlayerTick(TickEvent.PlayerTickEvent event) { + if (event.phase == TickEvent.Phase.START + && !event.player.isSpectator() + && !(event.player instanceof FakePlayer)) { + onPlayerTick(event); + } + } + + private static final float MAGIC_STEP_HEIGHT = 1.0023f; + + private static void onPlayerTick(TickEvent.PlayerTickEvent event) { + EntityPlayer player = event.player; + + // Step Assist + // for some reason, doing this in ticking and on unequip is not sufficient, this value is somewhat sticky + if (!player.isSneaking()) { + for (EntityEquipmentSlot slot : ArmorHelper.getArmorSlots()) { + ItemStack armorStack = player.getItemStackFromSlot(slot); + if (armorStack.getItem() instanceof IGTArmor gtArmor) { + NBTTagCompound behaviorTag = ArmorHelper.getBehaviorsTag(armorStack); + if (behaviorTag.getBoolean(ArmorHelper.STEP_ASSIST_KEY) && gtArmor.areBehaviorsActive(armorStack)) { + if (player.stepHeight < MAGIC_STEP_HEIGHT) { + player.stepHeight = MAGIC_STEP_HEIGHT; + return; + } + } + } + } + } + if (player.stepHeight == MAGIC_STEP_HEIGHT) { + player.stepHeight = 0.6f; + } + } } diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index ecbe6b16097..44d09843a97 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -1,8 +1,6 @@ package gregtech.common; import gregtech.api.GTValues; -import gregtech.api.block.IWalkingSpeedBonus; -import gregtech.api.items.armor.ArmorMetaItem; import gregtech.api.items.toolitem.ToolClasses; import gregtech.api.items.toolitem.ToolHelper; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; @@ -17,8 +15,6 @@ import gregtech.api.worldgen.bedrockFluids.BedrockFluidVeinSaveData; import gregtech.common.entities.EntityGTExplosive; import gregtech.common.items.MetaItems; -import gregtech.common.items.armor.IStepAssist; -import gregtech.common.items.armor.PowerlessJetpack; import gregtech.common.items.behaviors.ToggleEnergyConsumerBehavior; import gregtech.common.metatileentities.multi.electric.centralmonitor.MetaTileEntityCentralMonitor; @@ -33,7 +29,6 @@ import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; import net.minecraft.inventory.EntityEquipmentSlot; @@ -46,8 +41,6 @@ import net.minecraftforge.client.event.FOVUpdateEvent; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent; -import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingSpawnEvent; import net.minecraftforge.event.entity.player.AdvancementEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -60,9 +53,6 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.ItemHandlerHelper; import appeng.entity.EntitySingularity; @@ -71,7 +61,6 @@ public class EventHandlers { private static final String HAS_TERMINAL = GTValues.MODID + ".terminal"; - private static ItemStack lastFeetEquip = ItemStack.EMPTY; @SubscribeEvent public static void onEndermanTeleportEvent(EnderTeleportEvent event) { @@ -161,169 +150,10 @@ public static void onDestroySpeed(net.minecraftforge.event.entity.player.PlayerE } } - @SubscribeEvent(priority = EventPriority.LOW) - public static void onEntityLivingFallEvent(LivingFallEvent event) { - if (event.getEntity() instanceof EntityPlayerMP player) { - ItemStack armor = player.getItemStackFromSlot(EntityEquipmentSlot.FEET); - ItemStack jet = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - - if (player.fallDistance < 3.2f) - return; - - if (!armor.isEmpty() && armor.getItem() instanceof ArmorMetaItem) { - ArmorMetaItem.ArmorMetaValueItem valueItem = ((ArmorMetaItem) armor.getItem()).getItem(armor); - if (valueItem != null) { - valueItem.getArmorLogic().damageArmor(player, armor, DamageSource.FALL, - (int) (player.fallDistance - 1.2f), EntityEquipmentSlot.FEET); - player.fallDistance = 0; - event.setCanceled(true); - } - } else if (!jet.isEmpty() && jet.getItem() instanceof ArmorMetaItem && - GTUtility.getOrCreateNbtCompound(jet).hasKey("flyMode")) { - ArmorMetaItem.ArmorMetaValueItem valueItem = ((ArmorMetaItem) jet.getItem()).getItem(jet); - if (valueItem != null) { - valueItem.getArmorLogic().damageArmor(player, jet, DamageSource.FALL, - (int) (player.fallDistance - 1.2f), EntityEquipmentSlot.FEET); - player.fallDistance = 0; - event.setCanceled(true); - } - } - } - } - - @SubscribeEvent - public static void onLivingEquipmentChangeEvent(LivingEquipmentChangeEvent event) { - EntityEquipmentSlot slot = event.getSlot(); - if (event.getFrom().isEmpty() || slot == EntityEquipmentSlot.MAINHAND || slot == EntityEquipmentSlot.OFFHAND) - return; - - ItemStack stack = event.getFrom(); - if (!(stack.getItem() instanceof ArmorMetaItem) || stack.getItem().equals(event.getTo().getItem())) - return; - - ArmorMetaItem.ArmorMetaValueItem valueItem = ((ArmorMetaItem) stack.getItem()).getItem(stack); - if (valueItem == null) return; - if (valueItem.isItemEqual(MetaItems.NIGHTVISION_GOGGLES.getStackForm()) || - valueItem.isItemEqual(MetaItems.NANO_HELMET.getStackForm()) || - valueItem.isItemEqual(MetaItems.QUANTUM_HELMET.getStackForm())) { - event.getEntityLiving().removePotionEffect(MobEffects.NIGHT_VISION); - } - if (valueItem.isItemEqual(MetaItems.QUANTUM_CHESTPLATE.getStackForm()) || - valueItem.isItemEqual(MetaItems.QUANTUM_CHESTPLATE_ADVANCED.getStackForm())) { - event.getEntity().isImmuneToFire = false; - } - - // Workaround to recipe caching issue with fluid jetpack - // TODO, rewrite logic and remove in armor rewrite - if (valueItem.isItemEqual(MetaItems.SEMIFLUID_JETPACK.getStackForm())) { - ((PowerlessJetpack) valueItem.getArmorLogic()).resetRecipe(); - } - } - - @SuppressWarnings({ "ConstantValue", "deprecation" }) - @SubscribeEvent - public static void onPlayerTick(TickEvent.PlayerTickEvent event) { - EntityPlayer player = event.player; - if (event.phase == TickEvent.Phase.START && !player.world.isRemote) { - IAttributeInstance movementSpeed = player.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); - if (movementSpeed == null) return; - AttributeModifier modifier = movementSpeed.getModifier(BlockUtility.WALKING_SPEED_UUID); - - double speedBonus; - if (!player.onGround || player.isInWater() || player.isSneaking()) { - speedBonus = 0; - } else { - IBlockState state = player.world.getBlockState(new BlockPos( - player.posX, player.getEntityBoundingBox().minY - 1, player.posZ)); - speedBonus = BlockUtility.WALKING_SPEED_BONUS.getDouble(state); - // { remove this bit while removing IWalkingSpeedBonus - if (speedBonus == 0 && - state.getBlock() instanceof IWalkingSpeedBonus walkingSpeedBonus && - walkingSpeedBonus.getWalkingSpeedBonus() != 1 && - walkingSpeedBonus.bonusSpeedCondition(player) && - walkingSpeedBonus.checkApplicableBlocks(state)) { - speedBonus = walkingSpeedBonus.getWalkingSpeedBonus() - 1; - } - // } - } - if (modifier != null) { - if (speedBonus == modifier.getAmount()) return; - else movementSpeed.removeModifier(BlockUtility.WALKING_SPEED_UUID); - } else { - if (speedBonus == 0) return; - } - if (speedBonus != 0) { - movementSpeed.applyModifier(new AttributeModifier(BlockUtility.WALKING_SPEED_UUID, - "Walking Speed Bonus", speedBonus, 2)); - } - } + public static boolean canMineWithPick(String tool) { + return ToolClasses.WRENCH.equals(tool) || ToolClasses.WIRE_CUTTER.equals(tool); } - @SuppressWarnings({ "lossy-conversions", "ConstantValue" }) - @SubscribeEvent - @SideOnly(Side.CLIENT) - public static void onFOVUpdate(FOVUpdateEvent event) { // this event SUCKS - EntityPlayer player = event.getEntity(); - IAttributeInstance movementSpeed = player.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); - if (movementSpeed == null || movementSpeed.getModifier(BlockUtility.WALKING_SPEED_UUID) == null) return; - - float originalFov = player.capabilities.isFlying ? 1.1f : 1.0f; - originalFov *= (movementSpeed.getAttributeValue() / player.capabilities.getWalkSpeed() + 1) / 2; - - if (player.capabilities.getWalkSpeed() == 0 || Float.isNaN(originalFov) || Float.isInfinite(originalFov)) { - return; - } - - float newFov = player.capabilities.isFlying ? 1.1f : 1.0f; - newFov *= (computeValueWithoutWalkingSpeed(movementSpeed) / player.capabilities.getWalkSpeed() + 1) / 2; - - event.setNewfov(newFov / originalFov * event.getNewfov()); - } - - /** - * Computes walking speed without boost from {@link BlockUtility#WALKING_SPEED_BONUS}. Skipping parent check stuff - * because movement speed attribute does not have any parent modifier. - */ - private static double computeValueWithoutWalkingSpeed(IAttributeInstance attrib) { - double base = attrib.getBaseValue(); - - for (AttributeModifier m : attrib.getModifiersByOperation(0)) { - base += m.getAmount(); - } - - double applied = base; - - for (AttributeModifier m : attrib.getModifiersByOperation(1)) { - applied += base * m.getAmount(); - } - - for (AttributeModifier m : attrib.getModifiersByOperation(2)) { - if (m.getID() == BlockUtility.WALKING_SPEED_UUID) continue; - applied *= 1 + m.getAmount(); - } - - return attrib.getAttribute().clampValue(applied); - } - - @SubscribeEvent - @SideOnly(Side.CLIENT) - public static void onPlayerTickClient(TickEvent.PlayerTickEvent event) { - if (event.phase == TickEvent.Phase.START && !event.player.isSpectator() && - !(event.player instanceof EntityOtherPlayerMP) && !(event.player instanceof FakePlayer)) { - ItemStack feetEquip = event.player.getItemStackFromSlot(EntityEquipmentSlot.FEET); - if (!lastFeetEquip.getItem().equals(feetEquip.getItem())) { - if (lastFeetEquip.getItem() instanceof ArmorMetaItem) { - ArmorMetaItem.ArmorMetaValueItem valueItem = ((ArmorMetaItem) lastFeetEquip.getItem()) - .getItem(lastFeetEquip); - if (valueItem != null && valueItem.getArmorLogic() instanceof IStepAssist) { - event.player.stepHeight = 0.6f; - } - } - - lastFeetEquip = feetEquip.copy(); - } - } - } @SubscribeEvent public static void onWorldLoadEvent(WorldEvent.Load event) { diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java index 5f01d76ecf2..cfc8ef8c0bf 100644 --- a/src/main/java/gregtech/common/items/ArmorItems.java +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -3,10 +3,18 @@ import gregtech.api.GTValues; import gregtech.api.items.armor.ArmorMetaItem; import gregtech.api.items.armoritem.*; +import gregtech.api.items.metaitem.MetaItem; +import gregtech.api.recipes.RecipeMaps; +import gregtech.api.recipes.ingredients.nbtmatch.NBTCondition; +import gregtech.api.recipes.ingredients.nbtmatch.NBTMatcher; import gregtech.common.ConfigHolder; import gregtech.common.items.armor.*; +import net.minecraft.client.Minecraft; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraftforge.client.model.ModelLoader; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -18,6 +26,22 @@ public class ArmorItems { public static ItemGTElectricArmor NIGHTVISION_GOGGLES; + public static ItemGTArmor SEMI_FLUID_JETPACK; + public static ItemGTElectricArmor ELECTRIC_JETPACK; + public static ItemGTElectricArmor ADVANCED_ELECTRIC_JETPACK; + + public static ItemGTElectricArmor NANO_HELMET; + public static ItemGTElectricArmor NANO_CHESTPLATE; + public static ItemGTElectricArmor NANO_LEGGINGS; + public static ItemGTElectricArmor NANO_BOOTS; + public static ItemGTElectricArmor ADVANCED_NANO_CHESTPLATE; + + public static ItemGTElectricArmor QUANTUM_HELMET; + public static ItemGTElectricArmor QUANTUM_CHESTPLATE; + public static ItemGTElectricArmor QUANTUM_LEGGINGS; + public static ItemGTElectricArmor QUANTUM_BOOTS; + public static ItemGTElectricArmor ADVANCED_QUANTUM_CHESTPLATE; + private ArmorItems() {/**/} public static List getAllArmors() { @@ -29,8 +53,39 @@ public static void init() { NIGHTVISION_GOGGLES = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nightvision_goggles", EntityEquipmentSlot.HEAD) .electric(ConfigHolder.tools.voltageTierNightVision, 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1))) .electricCost(2) + .behaviors(NightvisionBehavior.INSTANCE)); + + int energyPerUse = 512; + int tier = ConfigHolder.tools.voltageTierNanoSuit; + long maxCapacity = 6_400_000L * (long) Math.max(1, Math.pow(4, tier - 3)); + + NANO_HELMET = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_helmet", EntityEquipmentSlot.HEAD) + .electric(tier, maxCapacity) + .electricCost(energyPerUse) .behaviors(NightvisionBehavior.INSTANCE) - .texture("gregtech:textures/armor/nightvision_goggles.png")); + .rarity(EnumRarity.UNCOMMON) + .armorSet(ArmorSet.NANO)); + + NANO_CHESTPLATE = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_chestplate", EntityEquipmentSlot.CHEST) + .electric(tier, maxCapacity) + .electricCost(energyPerUse) + .rarity(EnumRarity.UNCOMMON) + .armorSet(ArmorSet.NANO)); + + NANO_LEGGINGS = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_leggings", EntityEquipmentSlot.LEGS) + .electric(tier, maxCapacity) + .electricCost(energyPerUse) + .allowBlocking(DamageSource.FALL) + .rarity(EnumRarity.UNCOMMON) + .armorSet(ArmorSet.NANO)); + + NANO_BOOTS = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_boots", EntityEquipmentSlot.FEET) + .electric(tier, maxCapacity) + .electricCost(energyPerUse) + .behaviors(StepAssistBehavior.INSTANCE, FallDamageCancelBehavior.INSTANCE) + .allowBlocking(DamageSource.FALL) + .rarity(EnumRarity.UNCOMMON) + .armorSet(ArmorSet.NANO)); } public static > T register(@NotNull ArmorBuilder builder) { @@ -39,40 +94,57 @@ public static > T register(@Not return armor; } - public static ItemGTArmor register(@NotNull ItemGTArmor armor) { + public static T register(@NotNull T armor) { ARMORS.add(armor); return armor; } public static void registerModels() { + ARMORS.forEach(armor -> ModelLoader.setCustomModelResourceLocation(armor.get(), 0, armor.getModelLocation())); } - // TODO Remove in v... + public static void registerColors() { + ARMORS.forEach(armor -> Minecraft.getMinecraft().getItemColors().registerItemColorHandler(armor::getColor, armor.get())); + } + + // TODO Remove everything below here in v... + + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NIGHTVISION_GOGGLES; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_LEGGINGS; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_BOOTS; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_HELMET; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_LEGGINGS; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_BOOTS; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_HELMET; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_SEMIFLUID_JETPACK; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_ELECTRIC_JETPACK; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_ELECTRIC_JETPACK_ADVANCED; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE_ADVANCED; + @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE_ADVANCED; + @Deprecated public static void initLegacyArmor() { ArmorMetaItem.ArmorMetaValueItem> legacyArmor = new ArmorMetaItem<>() { @Override public void registerSubItems() { - // todo strip all of this of as much functionality as possible before merge - // todo hide these items from jei as well - MetaItems.NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(new NightvisionGoggles(2, 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1)), ConfigHolder.tools.voltageTierNightVision, EntityEquipmentSlot.HEAD)); + // todo call setInvisible() on all of these + OLD_NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(EntityEquipmentSlot.HEAD, "nightvision_goggles"); MetaItems.SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); MetaItems.ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(new Jetpack(30, 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2)), ConfigHolder.tools.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); MetaItems.ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack").setArmorLogic(new AdvancedJetpack(512, 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4)), ConfigHolder.tools.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); - int energyPerUse = 512; - int tier = ConfigHolder.tools.voltageTierNanoSuit; - long maxCapacity = 6_400_000L * (long) Math.max(1, Math.pow(4, tier - 3)); - MetaItems.NANO_HELMET = addItem(20, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_BOOTS = addItem(23, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_CHESTPLATE_ADVANCED = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(energyPerUse, 12_800_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvNanoSuit - 3)), ConfigHolder.tools.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); - - energyPerUse = 8192; - tier = ConfigHolder.tools.voltageTierQuarkTech; - maxCapacity = 100_000_000L * (long) Math.max(1, Math.pow(4, tier - 5)); + OLD_NANO_HELMET = addItem(20, "nms.helmet").setArmorLogic(EntityEquipmentSlot.HEAD, "nano_helmet"); + OLD_NANO_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(EntityEquipmentSlot.CHEST, "nano_chestplate"); + OLD_NANO_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(EntityEquipmentSlot.LEGS, "nano_leggings"); + OLD_NANO_BOOTS = addItem(23, "nms.boots").setArmorLogic(EntityEquipmentSlot.FEET, "nano_boots"); + MetaItems.NANO_CHESTPLATE_ADVANCED = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(512, 12_800_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvNanoSuit - 3)), ConfigHolder.tools.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); + + int energyPerUse = 8192; + int tier = ConfigHolder.tools.voltageTierQuarkTech; + long maxCapacity = 100_000_000L * (long) Math.max(1, Math.pow(4, tier - 5)); MetaItems.QUANTUM_HELMET = addItem(40, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); MetaItems.QUANTUM_CHESTPLATE = addItem(41, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); MetaItems.QUANTUM_LEGGINGS = addItem(42, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); @@ -87,5 +159,28 @@ public void registerSubItems() { @Deprecated public static void registerLegacyConversionRecipes() { // todo + addConversion(OLD_NIGHTVISION_GOGGLES, NIGHTVISION_GOGGLES.getStack()); + addConversion(OLD_NANO_HELMET, NANO_HELMET.getStack()); + addConversion(OLD_NANO_CHESTPLATE, NANO_CHESTPLATE.getStack()); + addConversion(OLD_NANO_LEGGINGS, NANO_LEGGINGS.getStack()); + addConversion(OLD_NANO_BOOTS, NANO_BOOTS.getStack()); + //addConversion(OLD_QUANTUM_HELMET, QUANTUM_HELMET.getStack()); + //addConversion(OLD_QUANTUM_CHESTPLATE, QUANTUM_CHESTPLATE.getStack()); + //addConversion(OLD_QUANTUM_LEGGINGS, QUANTUM_LEGGINGS.getStack()); + //addConversion(OLD_QUANTUM_BOOTS, QUANTUM_BOOTS.getStack()); + //addConversion(OLD_SEMIFLUID_JETPACK, SEMI_FLUID_JETPACK.getStack()); + //addConversion(OLD_ELECTRIC_JETPACK, ELECTRIC_JETPACK.getStack()); + //addConversion(OLD_ELECTRIC_JETPACK_ADVANCED, ADVANCED_ELECTRIC_JETPACK.getStack()); + //addConversion(OLD_NANO_CHESTPLATE_ADVANCED, ADVANCED_NANO_CHESTPLATE.getStack()); + //addConversion(OLD_QUANTUM_CHESTPLATE_ADVANCED, ADVANCED_QUANTUM_CHESTPLATE.getStack()); + } + + @Deprecated + private static void addConversion(MetaItem.MetaValueItem oldArmor, ItemStack newArmor) { + RecipeMaps.ASSEMBLER_RECIPES.recipeBuilder() + .inputNBT(oldArmor, NBTMatcher.ANY, NBTCondition.ANY) + .circuitMeta(20) + .outputs(newArmor) + .duration(100).EUt(7).buildAndRegister(); } } diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 97f5ee41221..41a16d13b72 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -531,13 +531,6 @@ private MetaItems() {} public static MetaItem.MetaValueItem CLIPBOARD; - public static ArmorMetaItem.ArmorMetaValueItem NIGHTVISION_GOGGLES; - - public static ArmorMetaItem.ArmorMetaValueItem NANO_CHESTPLATE; - public static ArmorMetaItem.ArmorMetaValueItem NANO_LEGGINGS; - public static ArmorMetaItem.ArmorMetaValueItem NANO_BOOTS; - public static ArmorMetaItem.ArmorMetaValueItem NANO_HELMET; - public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_CHESTPLATE; public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_LEGGINGS; public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_BOOTS; diff --git a/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java index 2b54aa3f9b3..74c271e243b 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java @@ -16,6 +16,7 @@ import org.jetbrains.annotations.NotNull; +@Deprecated public class AdvancedJetpack extends Jetpack { public AdvancedJetpack(int energyPerUse, long capacity, int tier) { diff --git a/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java index 74c256262e8..1472d332512 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; +@Deprecated public class AdvancedNanoMuscleSuite extends NanoMuscleSuite implements IJetpack { // A replacement for checking the current world time, to get around the gamerule that stops it diff --git a/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java index a0607a6e825..4a9c0f63ff9 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java @@ -27,6 +27,7 @@ import java.util.Iterator; import java.util.List; +@Deprecated public class AdvancedQuarkTechSuite extends QuarkTechSuite implements IJetpack { // A replacement for checking the current world time, to get around the gamerule that stops it diff --git a/src/main/java/gregtech/common/items/armor/ArmorSet.java b/src/main/java/gregtech/common/items/armor/ArmorSet.java new file mode 100644 index 00000000000..429f338f95d --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/ArmorSet.java @@ -0,0 +1,17 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.armorset.IArmorSet; +import gregtech.api.items.armoritem.armorset.ISetBonus; + +import java.util.Set; + +public class ArmorSet implements IArmorSet { + + public static final ArmorSet NANO = new ArmorSet(); + public static final ArmorSet QUANTUM = new ArmorSet(); + + @Override + public Set getSetBonuses() { + return null; + } +} diff --git a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java new file mode 100644 index 00000000000..94976f5d050 --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java @@ -0,0 +1,4 @@ +package gregtech.common.items.armor; + +public class ElectricJetpackBehavior { +} diff --git a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java b/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java new file mode 100644 index 00000000000..9cb2a5f4730 --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java @@ -0,0 +1,30 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.ArmorHelper; +import gregtech.api.items.armoritem.IArmorBehavior; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class FallDamageCancelBehavior implements IArmorBehavior { + + public static final FallDamageCancelBehavior INSTANCE = new FallDamageCancelBehavior(); + + protected FallDamageCancelBehavior() {/**/} + + @Override + public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) { + tag.setBoolean(ArmorHelper.FALL_DAMAGE_KEY, true); + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + tooltip.add(I18n.format("metaarmor.tooltip.falldamage")); + } +} diff --git a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java b/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java new file mode 100644 index 00000000000..a6ac1117776 --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java @@ -0,0 +1,35 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.IArmorBehavior; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class FireImmunityBehavior implements IArmorBehavior { + + public static FireImmunityBehavior INSTANCE = new FireImmunityBehavior(); + + @Override + public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + player.isImmuneToFire = true; + if (player.isBurning()) { + player.extinguish(); + } + } + + @Override + public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + player.isImmuneToFire = false; + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + tooltip.add(I18n.format("metaarmor.tooltip.burning")); + } +} diff --git a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java new file mode 100644 index 00000000000..ff2337cbe53 --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java @@ -0,0 +1,4 @@ +package gregtech.common.items.armor; + +public class FueledJetpackBehavior { +} diff --git a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java b/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java new file mode 100644 index 00000000000..0e7e1fd9497 --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java @@ -0,0 +1,22 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.ArmorHelper; +import gregtech.api.items.armoritem.IArmorBehavior; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import org.jetbrains.annotations.NotNull; + +// todo Nano was 0.75, quantum was 0.5 +public class HeatReductionBehavior implements IArmorBehavior { + + private final float reductionFactor; + + public HeatReductionBehavior(float reductionFactor) { + this.reductionFactor = reductionFactor; + } + + @Override + public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) { + tag.setFloat(ArmorHelper.HEAT_REDUCTION_KEY, reductionFactor); + } +} diff --git a/src/main/java/gregtech/common/items/armor/IJetpack.java b/src/main/java/gregtech/common/items/armor/IJetpack.java index 1043a159db7..926847a7bc4 100644 --- a/src/main/java/gregtech/common/items/armor/IJetpack.java +++ b/src/main/java/gregtech/common/items/armor/IJetpack.java @@ -13,6 +13,7 @@ * Logic from SimplyJetpacks2: * https://github.com/Tomson124/SimplyJetpacks2/blob/1.12/src/main/java/tonius/simplyjetpacks/item/ItemJetpack.java */ +@Deprecated public interface IJetpack { default double getSprintEnergyModifier() { diff --git a/src/main/java/gregtech/common/items/armor/IStepAssist.java b/src/main/java/gregtech/common/items/armor/IStepAssist.java index 944c125737e..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/IStepAssist.java +++ b/src/main/java/gregtech/common/items/armor/IStepAssist.java @@ -1,24 +0,0 @@ -package gregtech.common.items.armor; - -import net.minecraft.entity.player.EntityPlayer; - -import org.jetbrains.annotations.NotNull; - -/** - * Logic from EnderIO: - * https://github.com/SleepyTrousers/EnderIO/blob/d6dfb9d3964946ceb9fd72a66a3cff197a51a1fe/enderio-base/src/main/java/crazypants/enderio/base/handler/darksteel/DarkSteelController.java - */ -public interface IStepAssist { - - float MAGIC_STEP_HEIGHT = 1.0023f; - - default void updateStepHeight(@NotNull EntityPlayer player) { - if (!player.isSneaking()) { - if (player.stepHeight < MAGIC_STEP_HEIGHT) { - player.stepHeight = MAGIC_STEP_HEIGHT; - } - } else if (player.stepHeight == MAGIC_STEP_HEIGHT) { - player.stepHeight = 0.6F; - } - } -} diff --git a/src/main/java/gregtech/common/items/armor/Jetpack.java b/src/main/java/gregtech/common/items/armor/Jetpack.java index ec15c14df85..d72b975b316 100644 --- a/src/main/java/gregtech/common/items/armor/Jetpack.java +++ b/src/main/java/gregtech/common/items/armor/Jetpack.java @@ -26,6 +26,7 @@ import java.util.List; +@Deprecated public class Jetpack extends ArmorLogicSuite implements IJetpack { @SideOnly(Side.CLIENT) diff --git a/src/main/java/gregtech/common/items/armor/JetpackStats.java b/src/main/java/gregtech/common/items/armor/JetpackStats.java new file mode 100644 index 00000000000..f027f475ba8 --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/JetpackStats.java @@ -0,0 +1,83 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.jetpack.IJetpackStats; +import net.minecraft.util.EnumParticleTypes; +import org.jetbrains.annotations.Nullable; + +public enum JetpackStats implements IJetpackStats { + + SEMI_FLUID_FUELED (1.0f, 1.0f, 0.18f, 0.14f , 0.1f , 0.22f, 0.0f , 0.0f, EnumParticleTypes.SMOKE_LARGE), + ELECTRIC (1.0f, 1.0f, 0.18f, 0.1f , 0.12f, 0.3f , 0.08f, 0.0f, EnumParticleTypes.SMOKE_NORMAL), + ADVANCED_ELECTRIC (2.5f, 1.3f, 0.34f, 0.03f , 0.13f, 0.48f, 0.14f, 2.0f, EnumParticleTypes.CLOUD), + ADVANCED_NANO_CHESTPLATE (4.0f, 1.8f, 0.4f , 0.005f, 0.14f, 0.8f , 0.19f, 3.5f, null), + ADVANCED_QUANTUM_CHESTPLATE(6.0f, 2.4f, 0.45f, 0.0f , 0.15f, 0.9f , 0.21f, 8.0f, null); + + private final float sprintEnergyMod; + private final float sprintSpeedMod; + private final float hoverSpeed; + private final float hoverSlowSpeed; + private final float acceleration; + private final float verticalSpeed; + private final float horizontalSpeed; + private final float fallDamageReduction; + private final EnumParticleTypes particle; + + JetpackStats(float sprintEnergyMod, float sprintSpeedMod, float hoverSpeed, + float hoverSlowSpeed, float acceleration, float verticalSpeed, + float horizontalSpeed, float fallDamageReduction, EnumParticleTypes particle) { + this.sprintEnergyMod = sprintEnergyMod; + this.sprintSpeedMod = sprintSpeedMod; + this.hoverSpeed = hoverSpeed; + this.hoverSlowSpeed = hoverSlowSpeed; + this.acceleration = acceleration; + this.verticalSpeed = verticalSpeed; + this.horizontalSpeed = horizontalSpeed; + this.fallDamageReduction = fallDamageReduction; + this.particle = particle; + } + + @Override + public double getSprintEnergyModifier() { + return sprintEnergyMod; + } + + @Override + public double getSprintSpeedModifier() { + return sprintSpeedMod; + } + + @Override + public double getVerticalHoverSpeed() { + return hoverSpeed; + } + + @Override + public double getVerticalHoverSlowSpeed() { + return hoverSlowSpeed; + } + + @Override + public double getVerticalAcceleration() { + return acceleration; + } + + @Override + public double getVerticalSpeed() { + return verticalSpeed; + } + + @Override + public double getSidewaysSpeed() { + return horizontalSpeed; + } + + @Override + public float getFallDamageReduction() { + return fallDamageReduction; + } + + @Override + public @Nullable EnumParticleTypes getParticle() { + return particle; + } +} diff --git a/src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java b/src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java index 57be7d1acd4..87ef58586a5 100644 --- a/src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java @@ -29,7 +29,8 @@ import java.util.List; -public class NanoMuscleSuite extends ArmorLogicSuite implements IStepAssist { +@Deprecated +public class NanoMuscleSuite extends ArmorLogicSuite { @SideOnly(Side.CLIENT) protected ArmorUtils.ModularHUD HUD; @@ -83,8 +84,6 @@ public void onArmorTick(World world, EntityPlayer player, @NotNull ItemStack ite --toggleTimer; nbtData.setByte("toggleTimer", toggleTimer); } - } else if (SLOT == EntityEquipmentSlot.FEET) { - updateStepHeight(player); } player.inventoryContainer.detectAndSendChanges(); } @@ -147,11 +146,6 @@ public double getDamageAbsorption() { return 1.0D; } - @Override - public float getHeatResistance() { - return 0.75f; - } - @SideOnly(Side.CLIENT) @Override public void drawHUD(ItemStack item) { diff --git a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java index 3fc67fc1a3a..e4298e86418 100644 --- a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java @@ -1,6 +1,8 @@ package gregtech.common.items.armor; -import gregtech.api.items.armoritem.IArmorBehavior; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armoritem.ArmorHelper; +import gregtech.api.items.armoritem.IElectricArmorBehavior; import gregtech.api.util.input.KeyBind; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; @@ -20,7 +22,7 @@ // All MobEffects warn that they "might be null" for some reason, so suppress it @SuppressWarnings("ConstantConditions") -public class NightvisionBehavior implements IArmorBehavior { +public class NightvisionBehavior implements IElectricArmorBehavior { public static final NightvisionBehavior INSTANCE = new NightvisionBehavior(); @@ -36,29 +38,29 @@ public Set getListenedKeys() { @Override public void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) { if (keyPressed == KeyBind.ARMOR_MODE_SWITCH) { - NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); - boolean wasEnabled = tag.getBoolean("Enabled"); - tag.setBoolean("Enabled", !wasEnabled); + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + boolean wasEnabled = tag.getBoolean(ArmorHelper.NIGHT_VISION_KEY); + tag.setBoolean(ArmorHelper.NIGHT_VISION_KEY, !wasEnabled); + if (wasEnabled) { player.removePotionEffect(MobEffects.NIGHT_VISION); player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.disabled"), true); } else { player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.enabled"), true); } - player.inventoryContainer.detectAndSendChanges(); } } @Override - public boolean onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - if (world.isRemote) return false; + public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, @NotNull IElectricItem electricItem) { + if (world.isRemote) return; NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); boolean enabled = tag.getBoolean("Enabled"); - if (enabled) { + if (enabled && electricItem.canUse(2)) { + electricItem.discharge(2, Integer.MAX_VALUE, true, false, false); player.removePotionEffect(MobEffects.BLINDNESS); player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, false)); } - return enabled; } @Override @@ -66,6 +68,11 @@ public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @ player.removePotionEffect(MobEffects.NIGHT_VISION); } + @Override + public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) { + tag.setBoolean(ArmorHelper.NIGHT_VISION_KEY, false); // disabled by default + } + @Override public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); diff --git a/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java index d32d2b0c663..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java +++ b/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java @@ -1,104 +0,0 @@ -package gregtech.common.items.armor; - -import gregtech.api.capability.GregtechCapabilities; -import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorLogicSuite; -import gregtech.api.util.GTUtility; -import gregtech.api.util.input.KeyBind; - -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public class NightvisionGoggles extends ArmorLogicSuite { - - public NightvisionGoggles(int energyPerUse, long capacity, int voltageTier, EntityEquipmentSlot slot) { - super(energyPerUse, capacity, voltageTier, slot); - } - - @Override - public void onArmorTick(World world, @NotNull EntityPlayer player, @NotNull ItemStack itemStack) { - IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (item == null) { - return; - } - NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); - byte toggleTimer = nbtData.getByte("toggleTimer"); - if (!player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isItemEqual(itemStack)) { - disableNightVision(world, player, false); - } - if (SLOT == EntityEquipmentSlot.HEAD) { - boolean nightvision = nbtData.getBoolean("Nightvision"); - if (toggleTimer == 0 && KeyBind.ARMOR_MODE_SWITCH.isKeyDown(player)) { - toggleTimer = 5; - if (!nightvision && item.getCharge() >= energyPerUse) { - nightvision = true; - if (!world.isRemote) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.enabled"), - true); - } else if (nightvision) { - nightvision = false; - disableNightVision(world, player, true); - } else { - if (!world.isRemote) { - player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.error"), - true); - } - } - - if (!world.isRemote) { - nbtData.setBoolean("Nightvision", nightvision); - } - } - - if (nightvision && !world.isRemote && item.getCharge() >= energyPerUse) { - player.removePotionEffect(MobEffects.BLINDNESS); - player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, false)); - item.discharge((energyPerUse), this.tier, true, false, false); - } - - if (toggleTimer > 0) --toggleTimer; - - nbtData.setByte("toggleTimer", toggleTimer); - } - player.inventoryContainer.detectAndSendChanges(); - } - - public static void disableNightVision(@NotNull World world, EntityPlayer player, boolean sendMsg) { - if (!world.isRemote) { - player.removePotionEffect(MobEffects.NIGHT_VISION); - if (sendMsg) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.message.nightvision.disabled"), true); - } - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/nightvision_goggles.png"; - } - - @Override - public void addInfo(ItemStack itemStack, List lines) { - super.addInfo(itemStack, lines); - if (SLOT == EntityEquipmentSlot.HEAD) { - NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); - boolean nv = nbtData.getBoolean("Nightvision"); - if (nv) { - lines.add(I18n.format("metaarmor.message.nightvision.enabled")); - } else { - lines.add(I18n.format("metaarmor.message.nightvision.disabled")); - } - } - } -} diff --git a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java index 0f9e2867193..ef7c55c71ea 100644 --- a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java +++ b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java @@ -43,6 +43,7 @@ import java.util.List; import java.util.Objects; +@Deprecated public class PowerlessJetpack implements ISpecialArmorLogic, IJetpack, IItemHUDProvider { public static final int tankCapacity = 16000; diff --git a/src/main/java/gregtech/common/items/armor/QuarkTechSuite.java b/src/main/java/gregtech/common/items/armor/QuarkTechSuite.java index c485f9b3e00..7c28a6ece5e 100644 --- a/src/main/java/gregtech/common/items/armor/QuarkTechSuite.java +++ b/src/main/java/gregtech/common/items/armor/QuarkTechSuite.java @@ -36,7 +36,8 @@ import java.util.List; import java.util.Map; -public class QuarkTechSuite extends ArmorLogicSuite implements IStepAssist { +@Deprecated +public class QuarkTechSuite extends ArmorLogicSuite { protected static final Map potionRemovalCost = new IdentityHashMap<>(); private float charge = 0.0F; @@ -220,7 +221,6 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { } } } - updateStepHeight(player); } if (ret) { @@ -294,11 +294,6 @@ public double getDamageAbsorption() { return SLOT == EntityEquipmentSlot.CHEST ? 1.2D : 1.0D; } - @Override - public float getHeatResistance() { - return 0.5f; - } - @SideOnly(Side.CLIENT) @Override public void drawHUD(ItemStack item) { diff --git a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java b/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java new file mode 100644 index 00000000000..934cbc3090d --- /dev/null +++ b/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java @@ -0,0 +1,30 @@ +package gregtech.common.items.armor; + +import gregtech.api.items.armoritem.ArmorHelper; +import gregtech.api.items.armoritem.IArmorBehavior; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class StepAssistBehavior implements IArmorBehavior { + + public static final StepAssistBehavior INSTANCE = new StepAssistBehavior(); + + protected StepAssistBehavior() {/**/} + + @Override + public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) { + tag.setBoolean(ArmorHelper.STEP_ASSIST_KEY, true); + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + tooltip.add(I18n.format("metaarmor.tooltip.stepassist")); + } +} diff --git a/src/main/java/gregtech/core/network/packets/PacketKeysDown.java b/src/main/java/gregtech/core/network/packets/PacketKeysDown.java index 11365d7ad9b..d09b0ca9412 100644 --- a/src/main/java/gregtech/core/network/packets/PacketKeysDown.java +++ b/src/main/java/gregtech/core/network/packets/PacketKeysDown.java @@ -3,7 +3,8 @@ import gregtech.api.network.IPacket; import gregtech.api.network.IServerExecutor; import gregtech.api.util.input.KeyBind; - +import it.unimi.dsi.fastutil.ints.Int2BooleanMap; +import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.PacketBuffer; @@ -13,41 +14,38 @@ public class PacketKeysDown implements IPacket, IServerExecutor { - private Object updateKeys; + private Int2BooleanMap updateKeys; @SuppressWarnings("unused") - public PacketKeysDown() {} + public PacketKeysDown() {/**/} - public PacketKeysDown(List updateKeys) { + public PacketKeysDown(Int2BooleanMap updateKeys) { this.updateKeys = updateKeys; } @Override public void encode(PacketBuffer buf) { - List updateKeys = (List) this.updateKeys; buf.writeVarInt(updateKeys.size()); - for (KeyBind keyBind : updateKeys) { - buf.writeVarInt(keyBind.ordinal()); - buf.writeBoolean(keyBind.isKeyDown()); + for (var entry : updateKeys.int2BooleanEntrySet()) { + buf.writeVarInt(entry.getIntKey()); + buf.writeBoolean(entry.getBooleanValue()); } } @Override public void decode(PacketBuffer buf) { - this.updateKeys = new boolean[KeyBind.VALUES.length]; - boolean[] updateKeys = (boolean[]) this.updateKeys; + this.updateKeys = new Int2BooleanOpenHashMap(); int size = buf.readVarInt(); for (int i = 0; i < size; i++) { - updateKeys[buf.readVarInt()] = buf.readBoolean(); + updateKeys.put(buf.readVarInt(), buf.readBoolean()); } } @Override public void executeServer(NetHandlerPlayServer handler) { KeyBind[] keybinds = KeyBind.VALUES; - boolean[] updateKeys = (boolean[]) this.updateKeys; - for (int i = 0; i < updateKeys.length; i++) { - keybinds[i].updateKeyDown(updateKeys[i], handler.player); + for (var entry : updateKeys.int2BooleanEntrySet()) { + keybinds[entry.getIntKey()].updateKeyDown(entry.getBooleanValue(), handler.player); } } } diff --git a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java index 8b18ba7a811..b172854aa9f 100644 --- a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java @@ -14,6 +14,7 @@ import gregtech.common.blocks.BlockGlassCasing; import gregtech.common.blocks.MetaBlocks; import gregtech.common.crafting.FacadeRecipe; +import gregtech.common.items.ArmorItems; import gregtech.common.items.MetaItems; import gregtech.loaders.recipe.handlers.ToolRecipeHandler; @@ -299,7 +300,7 @@ private static void loadCraftingRecipes() { /////////////////////////////////////////////////// // Armors // /////////////////////////////////////////////////// - ModHandler.addShapedRecipe("nightvision_goggles", MetaItems.NIGHTVISION_GOGGLES.getStackForm(), "CSC", "RBR", + ModHandler.addShapedRecipe("nightvision_goggles", ArmorItems.NIGHTVISION_GOGGLES.getStack(), "CSC", "RBR", "LdL", 'C', new UnificationEntry(OrePrefix.circuit, Tier.ULV), 'S', new UnificationEntry(OrePrefix.screw, Steel), 'R', new UnificationEntry(OrePrefix.ring, Rubber), 'B', MetaItems.BATTERY_LV_SODIUM, 'L', new UnificationEntry(OrePrefix.lens, Glass)); @@ -317,18 +318,18 @@ private static void loadCraftingRecipes() { MetaItems.POWER_THRUSTER_ADVANCED.getStackForm(), 'B', ENERGIUM_CRYSTAL.getStackForm(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Gold), 'C', new UnificationEntry(OrePrefix.circuit, Tier.HV)); - ModHandler.addShapedRecipe("nano_helmet", MetaItems.NANO_HELMET.getStackForm(), "PPP", "PNP", "xEd", 'P', - MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', MetaItems.NIGHTVISION_GOGGLES.getStackForm(), 'E', + ModHandler.addShapedRecipe("nano_helmet", ArmorItems.NANO_HELMET.getStack(), "PPP", "PNP", "xEd", 'P', + MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', ArmorItems.NIGHTVISION_GOGGLES.getStack(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_chestplate", MetaItems.NANO_CHESTPLATE.getStackForm(), "PEP", "PPP", "PPP", + ModHandler.addShapedRecipe("nano_chestplate", ArmorItems.NANO_CHESTPLATE.getStack(), "PEP", "PPP", "PPP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_leggings", MetaItems.NANO_LEGGINGS.getStackForm(), "PPP", "PEP", "PxP", 'P', + ModHandler.addShapedRecipe("nano_leggings", ArmorItems.NANO_LEGGINGS.getStack(), "PPP", "PEP", "PxP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_boots", MetaItems.NANO_BOOTS.getStackForm(), "PxP", "PEP", 'P', + ModHandler.addShapedRecipe("nano_boots", ArmorItems.NANO_BOOTS.getStack(), "PxP", "PEP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); ModHandler.addShapedRecipe("nano_chestplate_advanced", MetaItems.NANO_CHESTPLATE_ADVANCED.getStackForm(), "xJd", "PNP", "WCW", 'J', MetaItems.ELECTRIC_JETPACK_ADVANCED.getStackForm(), 'P', - MetaItems.LOW_POWER_INTEGRATED_CIRCUIT.getStackForm(), 'N', MetaItems.NANO_CHESTPLATE.getStackForm(), + MetaItems.LOW_POWER_INTEGRATED_CIRCUIT.getStackForm(), 'N', ArmorItems.NANO_CHESTPLATE.getStackForm(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Platinum), 'C', new UnificationEntry(OrePrefix.circuit, Tier.IV)); ModHandler.addShapedRecipe("gravitation_engine", MetaItems.GRAVITATION_ENGINE.getStackForm(), "ESE", "POP", diff --git a/src/main/resources/assets/gregtech/models/item/armors/nano_boots.json b/src/main/resources/assets/gregtech/models/item/armors/nano_boots.json new file mode 100644 index 00000000000..78082b982b9 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/nano_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/nano_boots_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/armors/nano_chestplate.json b/src/main/resources/assets/gregtech/models/item/armors/nano_chestplate.json new file mode 100644 index 00000000000..b0e51acccbf --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/nano_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/nano_chestplate_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/armors/nano_helmet.json b/src/main/resources/assets/gregtech/models/item/armors/nano_helmet.json new file mode 100644 index 00000000000..09ed3ac9c14 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/nano_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/nano_helmet_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/armors/nano_leggings.json b/src/main/resources/assets/gregtech/models/item/armors/nano_leggings.json new file mode 100644 index 00000000000..e4e47de8747 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/nano_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/nano_leggings_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/armors/nightvision_goggles.json b/src/main/resources/assets/gregtech/models/item/armors/nightvision_goggles.json new file mode 100644 index 00000000000..22ed5f71345 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/nightvision_goggles.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/nightvision_goggles_item" + } +} diff --git a/src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_1.png b/src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_1.png deleted file mode 100644 index 283b916f81c66ac68093fba18c5ac92387dee34b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10199 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 E0WiRrE&u=k diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nano_boots.png b/src/main/resources/assets/gregtech/textures/items/armors/nano_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..13f1c5d1b77f3b2ef1581cc62bd053239892e633 GIT binary patch literal 4204 zcmcgv32+nF8D3d7zOig$8`1!48B=4j*6vCxX}7kqEgS5{c3fKo3@Pzy_et6yX~k-7 z3lam)!8H^-9>!pxDa;TuISLp8ZJ^;u3n5_cmVpEcnFa`xFqu*s(gWPLx=^UWo;IyU z((eB6fB*Hq_x*2|H`Gr{O?n~;L6Fp%>dHoVT?~I^32OL%En#&Xyu>=n>&g+N?{&7e z{4RV(x#~tJU#dZnl^Fh$ZJ#c~X+p-neYp%Ep!{rw$%D*pG}@{_)|sRVq~}+BRq5 zoI>@8Z`*#>nO^z)`MBQ0WlvoFaZy2`>g=M$7Yg!sn|nJu&mc!n7U?D-EA%H-JFB{P z9{MU3ZTm@em%ghb_UQGem+siU_(F~5n@r8Vgf9}&eR3}Sde*F2h32iF|L~2%*csVtw_MMj?7yCWBPZ+gocx|GTaiChT#6s@ zvgWl-nsdkt@15p1k;q~7tAC|6Pwro7b7*V{UC+(3jsPS%Ci8k;|GKT$vtKc;zCPt-F#l^+N z$H%MH>e$%Ww6wJJ^z@Mr^?;CcTt8~m zsO;?Q%*;&98Co^qK<>i2{bLJw{i>Sax|}}Q|_H;`G> z?{;~7jK4%1FwDSvMXb}J0Tp>}iMCwvh|a8QKrNyKP^!p?afE?FO>_}q)Ej8}DU`$s zvko`w2t7s^83WFcBpUi?p*s{UmUuhUSUEN14nCD=owDp@bh`HT_M&!uktjKI1WnUA zoYavd1~o9>e2>ifF^?}VXe4B&68Jbt@XCVdK^3#CO>C7*v@qgeDsFGYw#OH$7p$Dl z&w6!45w4^bP~^FYp0`zU1tQ=%9dH3R@W?)>OGI?NPEi(pPVo_@Bg5Zu083m~7x6J@ zEN*wig-@<(gK31SGN`uCI^PR)jld_iN*t(agJI@{v+>D|;6YJ`F&(N$Cd-2T5p$K1 z?<58M!Xs3bk%+37u}FZGMae3Pt}uog!c{~eWkJl)Xu%A@!;9^{NlF@_IiQl2L5Wrw z#|RQ5a4T+N^m+y-CgUW7<3ZIrkr(XqA5t|~ae^TY3`u`S6#|-PWp+qqo@4ByoB;n2j=0n2jX#W}fBjHryV_7S68}xmE?2%KYF~rvFE0$=9kZ`5~P*-bEXd-d=(Gkjj zXuNrd@dv}xJpx<`Qj03k3Rb@f(j6?nk)rfeNZug$foo=^0ITB*211&nhnk~?jD|3k zKr(qyx^NlF;R5*}Xng_F3Nl!Lx++*llqf_*E}=ABGgJ9giq=~!xPB^05LHA)h1qN= zH`C=7%2+{^$aE}Fo+C{ZL(G{7zl z%LP}3Q}!l+s~8jugJE-6CD44fbc+XaY)Z1V&RN3-3%kpg9guR0LTMA>-fq`Tv_6HzZbufQN#h2%Lsj zPaa4@6k4Lu83_js;Pm_VJtR(t*MS~|(}#NP|7IMFvN_N!Gcd!wtnDL z#0t-3xh<_nZC*Uc_n(W9L-Hpd zuI;>>&-AWjH+&{_ob5b!#j)gg>)J17f9tt9-XEJ=d@;5-pqh% zt6b0CKey)|yzOXyXCOb`izr`zaanEGX4IN;W}zD0UE8HE^YnpBZ;HJ!Z`}BWZu@ha zk_q1g`oPbxOuM-IcGZg;_JgEbw{L&>w|23NS>ny>=$LXK)iwQ&RZLXUh{U}_!Z8vH;+X)YW`#WroT*MHyl}W{#4nn zi@W0bPw(rV_+Ii`6R)N8FJ0NUFd4V6NIyPDyZeI+NuT6zOy0_mpZEMr=|A1R2>EE< XxVwM;Xgqx1N06GT`pRt;EieBIw&`s{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nano_boots_item.png b/src/main/resources/assets/gregtech/textures/items/armors/nano_boots_item.png new file mode 100644 index 0000000000000000000000000000000000000000..b3af1aa68c9f3efe82adc04ef961a0f8461673d8 GIT binary patch literal 3120 zcmc&$d2rNJ7*DBaDTfu5Q)~z*sAO|&vdKnPD7%Gjhb^V7QbY&dCNFL1ZW5F96sJ|W z4;>H`91u`+M2zaOeobC?3VL>Nta_W7X>D$Y_1pi^@>IYuuS^l9%uNeZTK} zZ&`WS)c*Oy^DzwTA1(=1pnHLPyaACjRE82hD)b79bc+QitwoQv?Ebgq_QTO)h-KUPeKSW*M ztEFuHQ*}FPv4XL89~#=;k=N1|Y5kTva;BLre7ZDu^t{#)aMaTLH}{>`emQg5u`QeD z7hKu0z3c*zn+S@7}^C%Ss2m`__yhuXp6mV+!NK$i25ezw_0fntu;m)z%61 z%~SIxjSmc&UDUAE(|p^|TOR&8_L@0tKnG}wDy@R~Vou)|i(j~7(GPpRH3a$TiTx zW3Woo14KvbJ_6U205OY?&=E5TtF@9Q3(jmRi^@$kvR@%4-il9XkdT1{bO7Fvi0ii0 z5FnCvCG_krQv{wAacTlYs-TsTay)2Q5a&HUQf4?F7yKT^=jHtV@iL>50qvlPpcNP@H*bq6$% zx;;8$Ap~vN(o9D)blkNFVn(eKAW)>K6cT3EtZt`aLV!^Xz@!)t?WU9zROGCjS!>0U z&J~%0ahQO*Vk0U zAyolwqt=pPaUBYCbS4|yseotkyaaV5o>Vrapap?rSW&}>XR2JD$rld>-KzTWakDgC zG3xCbU59BM7y=Fq5bk%9VM&IL(t_mmN;Gpb%}O+#5{(#&rZ%1<>W$K(L~|13{gWu7 zoB|whQDH@vRKrRD1elfpRgg0EDgw`zK?)ji!$OWxbl&dkVKkU5L)GHw!?^=08EqsY zg>~Bjx(vgi0D)5VXqqA^fD?JY93ue_SyB)VXA|st|UW>RgD2RFCl+dL6X7Wncme zplJpzJ3y$Gk-)Q@!5sq!rWw~{;O0)%=}LNHWUEE==*I?i7e-0t1=+`_0xB#NNm=GN z(jQ|O63BpMX`f2_#4O6^pp@wkTFmsv-$W^01i2dMRS<0l)IZ2a<^_%celN-SV}SH> z93({s&?GIWDo69GAo@@jqyp_BpR@h`-{&J=lm{0ny~~a)ReHuvftJ>d3EkP24FON` z?%(luQQlqJwE92lM7bMwYV=U&PNmd)C<*A*;@wUznI&`_av!tjF!Yi=$w3|UtA);KC9~}1=!~}|94d;6s}9d>9dHmY zcy7nb+-eN#OLD?}oMKZW(jzWa6tIuj%#kU|hTBiEX2N zJ6pEJRxV}gHuUqXk?)(kvu5jBcFg0Swe|gC^EWb<=M`(VEe7WdR%8{Ro=c-KuI>$}?W)o;2s bpYA<;;QS@+U#^hc18KOpEVO&_y!-zEPjDH{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nano_chestplate.png b/src/main/resources/assets/gregtech/textures/items/armors/nano_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..516d04a10bddd567cc53c0988c06cd194587eaea GIT binary patch literal 5127 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 xY*Ahw$`0EI$8h# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nano_helmet.png b/src/main/resources/assets/gregtech/textures/items/armors/nano_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..ec965ca315ae87a6747181a063fc1cb9ec033c7c GIT binary patch literal 5385 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 U-gn?XO$Zv7I6=QTA$#6G0dTOCK>z>% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nano_helmet_item.png b/src/main/resources/assets/gregtech/textures/items/armors/nano_helmet_item.png new file mode 100644 index 0000000000000000000000000000000000000000..5b937243a252c6906e26bf010d554073f01ad262 GIT binary patch literal 3231 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nightvision_goggles.png b/src/main/resources/assets/gregtech/textures/items/armors/nightvision_goggles.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a8e12ffd0278643e68644c4946c327f3779ba4 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQfx`y?k)`TfN<_Rw+LRK2xoyu zWHAGSo-znCRxGtI0}8U2c>21sKV=pdw$@Atj+X)oNtU=qlsM<-=BDPAFgO>bCYGe8 zD3oWGWGJ|M`UZqI@`*DrFiLp3IEGZ*dV71L*WmyWwg>jP?S6fa9$ipnbw7A9w1(Y1 z{bS^j^be{oF;=^}p9vmuoFlWUaMhCQUhFGHe%A(Dm|L1Z{4+u4WQNJ9Ww)NBvjgpg zfPd4oLVI8D%1b})dwETX{xubby9?D%UOZcystXg&IyB+N#?iNcb-|5#-49Yyx6dNYvg{{?9?Bp ze(Sf#U)yaf-g-{^LHRBDU)$@yzGY-!(0Tm50On{Y-SG7rCyQOnj)%(@O#}&fy85}S Ib4q9e0JFES;Q#;t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/armors/nightvision_goggles_item.png b/src/main/resources/assets/gregtech/textures/items/armors/nightvision_goggles_item.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a18ff3749b6f5acfc8401aee964398b26955fd GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|+7Ag!jR#?Q|$DJhxrDDVIO|H;Y8PUqZ`wIrg|#elNij<(7`in}Dp zFBm8b1q@#PjGutQoCO|{#S9F5he4R}c>anMprD7Ri(`mJ@ZK|ld Date: Mon, 3 Jul 2023 01:26:24 -0500 Subject: [PATCH 05/12] JetpackBehavior --- .../gregtech/api/items/armor/ArmorUtils.java | 15 +- .../api/items/armoritem/ArmorBuilder.java | 7 +- .../api/items/armoritem/ArmorHelper.java | 3 +- .../api/items/armoritem/IArmorBehavior.java | 25 +-- .../api/items/armoritem/ItemGTArmor.java | 2 +- .../armoritem/jetpack/JetpackBehavior.java | 138 +++++++++++++++ .../armoritem/jetpack/JetpackBuilder.java | 20 --- .../java/gregtech/api/util/input/KeyBind.java | 108 ++++-------- .../gregtech/asm/hooks/ArmorRenderHooks.java | 1 + .../asm/visitors/LayerArmorBaseVisitor.java | 1 + .../asm/visitors/LayerCustomHeadVisitor.java | 1 + .../visitors/SpecialArmorClassVisitor.java | 28 --- .../gregtech/common/items/ArmorItems.java | 25 ++- .../java/gregtech/common/items/MetaItems.java | 2 - .../common/items/armor/AdvancedJetpack.java | 106 ----------- .../items/armor/ElectricJetpackBehavior.java | 45 ++++- .../items/armor/FallDamageCancelBehavior.java | 3 +- .../items/armor/FireImmunityBehavior.java | 3 +- .../items/armor/FueledJetpackBehavior.java | 49 +++++- .../items/armor/HeatReductionBehavior.java | 1 + .../gregtech/common/items/armor/IJetpack.java | 2 +- .../gregtech/common/items/armor/Jetpack.java | 166 ------------------ .../items/armor/NightvisionBehavior.java | 14 +- .../items/armor/StepAssistBehavior.java | 3 +- .../loaders/recipe/CraftingRecipeLoader.java | 48 ++--- .../armors/advanced_electric_jetpack.json | 6 + .../models/item/armors/electric_jetpack.json | 6 + .../metaitems/advanced_electric_jetpack.json | 2 +- .../item/metaitems/electric_jetpack.json | 6 + .../item/metaitems/electric_jetpack/1.json | 6 - .../item/metaitems/electric_jetpack/2.json | 6 - .../item/metaitems/electric_jetpack/3.json | 6 - .../item/metaitems/electric_jetpack/4.json | 6 - .../item/metaitems/electric_jetpack/5.json | 6 - .../item/metaitems/electric_jetpack/6.json | 6 - .../item/metaitems/electric_jetpack/7.json | 6 - .../item/metaitems/electric_jetpack/8.json | 6 - .../armors/advanced_electric_jetpack.png} | Bin .../advanced_electric_jetpack_item.png} | Bin .../armors/electric_jetpack.png} | Bin .../electric_jetpack_item.png} | Bin .../items/metaitems/electric_jetpack/1.png | Bin 4429 -> 0 bytes .../items/metaitems/electric_jetpack/2.png | Bin 4594 -> 0 bytes .../items/metaitems/electric_jetpack/3.png | Bin 4588 -> 0 bytes .../items/metaitems/electric_jetpack/4.png | Bin 4592 -> 0 bytes .../items/metaitems/electric_jetpack/5.png | Bin 4597 -> 0 bytes .../items/metaitems/electric_jetpack/6.png | Bin 4605 -> 0 bytes .../items/metaitems/electric_jetpack/7.png | Bin 4607 -> 0 bytes 48 files changed, 344 insertions(+), 540 deletions(-) delete mode 100644 src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java create mode 100644 src/main/resources/assets/gregtech/models/item/armors/advanced_electric_jetpack.json create mode 100644 src/main/resources/assets/gregtech/models/item/armors/electric_jetpack.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/1.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/2.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/3.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/4.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/5.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/6.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/7.json delete mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/8.json rename src/main/resources/assets/gregtech/textures/{armor/advanced_jetpack.png => items/armors/advanced_electric_jetpack.png} (100%) rename src/main/resources/assets/gregtech/textures/items/{metaitems/advanced_electric_jetpack.png => armors/advanced_electric_jetpack_item.png} (100%) rename src/main/resources/assets/gregtech/textures/{armor/jetpack.png => items/armors/electric_jetpack.png} (100%) rename src/main/resources/assets/gregtech/textures/items/{metaitems/electric_jetpack/8.png => armors/electric_jetpack_item.png} (100%) delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/1.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/2.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/3.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/4.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/5.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/6.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/7.png diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java index 210d4c4a037..77630215354 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorUtils.java +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -13,8 +13,6 @@ import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.util.*; import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.relauncher.Side; @@ -102,18 +100,7 @@ public static List, List>> getChargeableIte return inventorySlotMap; } - /** - * Spawn particle behind player with speedY speed - */ - public static void spawnParticle(World world, EntityPlayer player, EnumParticleTypes type, double speedY) { - if (type != null && SIDE.isClient()) { - Vec3d forward = player.getForward(); - world.spawnParticle(type, player.posX - forward.x, player.posY + 0.5D, player.posZ - forward.z, 0.0D, - speedY, 0.0D); - } - } - - public static void playJetpackSound(@NotNull EntityPlayer player) { + public static void playJetpackSound(@Nonnull EntityPlayer player) { if (player.world.isRemote) { float cons = (float) player.motionY + player.moveForward; cons = MathHelper.clamp(cons, 0.6F, 1.0F); diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java index e8f83fa1509..54ee5484053 100644 --- a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java +++ b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java @@ -1,7 +1,7 @@ package gregtech.api.items.armoritem; import gregtech.api.items.armoritem.armorset.IArmorSet; -import gregtech.api.items.armoritem.jetpack.JetpackBuilder; +import gregtech.api.items.armoritem.jetpack.IJetpackStats; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.util.DamageSource; @@ -22,6 +22,7 @@ public abstract class ArmorBuilder behaviors = new ArrayList<>(); private IArmorSet armorSet; + private IJetpackStats jetpackStats; private double damageAbsorption; private final List handledUnblockableSources = new ArrayList<>(); private boolean isEnchantable = true; @@ -65,10 +66,6 @@ public U armorSet(IArmorSet armorSet) { return cast(this); } - public > U jetpack(JetpackBuilder b) { - return behaviors(b.build()); - } - public abstract Supplier supply(IGTArmorDefinition definition); public abstract U cast(ArmorBuilder builder); diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java index b44cad9e038..a0267ecacd2 100644 --- a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java +++ b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java @@ -21,8 +21,7 @@ public class ArmorHelper { public static final String HEAT_REDUCTION_KEY = "HeatReduction"; /* Jetpack Keys */ - public static final String JETPACK_KEY = "Jetpack"; - public static final String HOVER_KEY = "Hover"; + public static final String JETPACK_HOVER_KEY = "JetpackHover"; private static final EntityEquipmentSlot[] ARMOR_SLOTS = {FEET, LEGS, CHEST, HEAD}; diff --git a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java index dabe12b27a5..f7a94d1f6e0 100644 --- a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java @@ -1,8 +1,6 @@ package gregtech.api.items.armoritem; -import gregtech.api.util.GTUtility; import gregtech.api.util.input.KeyBind; -import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -10,6 +8,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,7 +34,7 @@ default void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @N } /** Add to this behavior's armor item tooltip. */ - default void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + default void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { } default Set getListenedKeys() { @@ -58,21 +58,14 @@ default ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable N return null; } + // TODO implement HUD + /** Add to the Armor HUD text. */ + @SideOnly(Side.CLIENT) + default void addHudInformation(@NotNull ItemStack stack, @NotNull List hudText) { + } + /** Get the equipment slot for this behavior's armor item. Provided since the method call is somewhat obscure. */ default EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { return EntityLiving.getSlotForItemStack(stack); } - - // todo try to remove/refactor this - default NBTTagCompound getBehaviorTag(@NotNull ItemStack stack, @NotNull String key) { - NBTTagCompound tag = GTUtility.getOrCreateNbtCompound(stack); - NBTTagCompound subTag; - if (tag.hasKey(key)) { - subTag = tag.getCompoundTag(key); - } else { - subTag = new NBTTagCompound(); - tag.setTag(key, subTag); - } - return subTag; - } } diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java index e8db9eb68ff..54facaf0dac 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java @@ -220,7 +220,7 @@ public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Ench public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { // todo armor toughness tooltip for (IArmorBehavior behavior : getDefinition().getBehaviors()) { - behavior.addInformation(stack, world, tooltip, flag); + behavior.addInformation(stack, world, tooltip); } } diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java index ce87d2389ef..c0926a98934 100644 --- a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java @@ -1,6 +1,144 @@ package gregtech.api.items.armoritem.jetpack; +import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; +import gregtech.api.util.input.KeyBind; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.List; +import java.util.Set; public abstract class JetpackBehavior implements IArmorBehavior { + + private final IJetpackStats jetpackStats; + + public JetpackBehavior(IJetpackStats jetpackStats) { + this.jetpackStats = jetpackStats; + } + + /** How much Fuel (or Energy) to use per tick while flying. Can be modified by stats in {@link IJetpackStats}. */ + protected abstract int getFuelPerUse(); + + /** Check for if this Jetpack has at least the specified amount of Fuel (or Energy). */ + protected abstract boolean hasEnoughFuel(@NotNull ItemStack stack, int amount); + + /** Drain the specified amount of Fuel (or Energy) from this Jetpack. */ + protected abstract void drainFuel(@NotNull ItemStack stack, int amount); + + /** Check for if this Jetpack has any Fuel (or Energy). */ + protected abstract boolean hasFuel(@NotNull ItemStack stack); + + @Override + public Set getListenedKeys() { + return Collections.singleton(KeyBind.ARMOR_HOVER); + } + + @Override + public void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) { + if (keyPressed == KeyBind.ARMOR_HOVER) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + boolean wasHover = tag.getBoolean(ArmorHelper.JETPACK_HOVER_KEY); + tag.setBoolean(ArmorHelper.JETPACK_HOVER_KEY, !wasHover); + + if (wasHover) { + player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable"), true); + } else { + player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable"), true); + } + } + } + + @Override + public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + boolean hover = tag.getBoolean(ArmorHelper.JETPACK_HOVER_KEY); + performFlying(player, stack, hover); + } + + /* + * Called every tick, performs flying if the correct keys are pressed. + * Logic from SimplyJetpacks2: https://github.com/Tomson124/SimplyJetpacks2/blob/1.12/src/main/java/tonius/simplyjetpacks/item/ItemJetpack.java + */ + private void performFlying(@NotNull EntityPlayer player, @NotNull ItemStack stack, boolean hover) { + double currentAccel = jetpackStats.getVerticalAcceleration() * (player.motionY < 0.3D ? 2.5D : 1.0D); + double currentSpeedVertical = jetpackStats.getVerticalSpeed() * (player.isInWater() ? 0.4D : 1.0D); + boolean flyKeyDown = KeyBind.VANILLA_JUMP.isKeyDown(player); + boolean descendKeyDown = KeyBind.VANILLA_SNEAK.isKeyDown(player); + + if (!player.isInWater() && !player.isInLava() && hasEnoughFuel(stack, getFuelPerUse())) { + if (flyKeyDown || hover && !player.onGround) { + drainFuel(stack, (int) (player.isSprinting() ? Math.round(getFuelPerUse() * jetpackStats.getSprintEnergyModifier()) : getFuelPerUse())); + + if (hasFuel(stack)) { + if (flyKeyDown) { + if (!hover) { + player.motionY = Math.min(player.motionY + currentAccel, currentSpeedVertical); + } else { + if (descendKeyDown) player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSlowSpeed()); + else player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSpeed()); + } + } else if (descendKeyDown) { + player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSpeed()); + } else { + player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSlowSpeed()); + } + float speedSideways = (float) (player.isSneaking() ? jetpackStats.getSidewaysSpeed() * 0.5f : jetpackStats.getSidewaysSpeed()); + float speedForward = (float) (player.isSprinting() ? speedSideways * jetpackStats.getSprintSpeedModifier() : speedSideways); + + if (KeyBind.VANILLA_FORWARD.isKeyDown(player)) + player.moveRelative(0, 0, speedForward, speedForward); + if (KeyBind.VANILLA_BACKWARD.isKeyDown(player)) + player.moveRelative(0, 0, -speedSideways, speedSideways * 0.8f); + if (KeyBind.VANILLA_LEFT.isKeyDown(player)) + player.moveRelative(speedSideways, 0, 0, speedSideways); + if (KeyBind.VANILLA_RIGHT.isKeyDown(player)) + player.moveRelative(-speedSideways, 0, 0, speedSideways); + if (!player.getEntityWorld().isRemote) { + player.fallDistance = 0; + } + + } + spawnParticle(player.getEntityWorld(), player, jetpackStats.getParticle()); + } + } + } + + /* Spawn particle behind player with speedY speed */ + private static void spawnParticle(@NotNull World world, EntityPlayer player, EnumParticleTypes type) { + if (type != null && world.isRemote) { + Vec3d forward = player.getForward(); + world.spawnParticle(type, player.posX - forward.x, player.posY + 0.5D, player.posZ - forward.z, 0.0D, -0.6D, 0.0D); + } + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { + addInformation(stack, tooltip); + } + + @Override + public void addHudInformation(@NotNull ItemStack stack, @NotNull List hudText) { + addInformation(stack, hudText); + } + + private void addInformation(ItemStack stack, List tooltip) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + String status; + if (tag.getBoolean(ArmorHelper.JETPACK_HOVER_KEY)) { + status = I18n.format("metaarmor.hud.status.enabled"); + } else { + status = I18n.format("metaarmor.hud.status.disabled"); + } + tooltip.add(I18n.format("metaarmor.hud.hover_mode", status)); + } } diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java deleted file mode 100644 index cf9506643e4..00000000000 --- a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBuilder.java +++ /dev/null @@ -1,20 +0,0 @@ -package gregtech.api.items.armoritem.jetpack; - -import java.util.function.Supplier; - -public abstract class JetpackBuilder> { - - private IJetpackStats stats; - - protected JetpackBuilder() { - - } - - public abstract Supplier supply(IJetpackStats stats); - - public abstract T cast(JetpackBuilder builder); - - public final JetpackBehavior build() { - return supply(stats).get(); - } -} diff --git a/src/main/java/gregtech/api/util/input/KeyBind.java b/src/main/java/gregtech/api/util/input/KeyBind.java index c73c1db1000..31075a41138 100644 --- a/src/main/java/gregtech/api/util/input/KeyBind.java +++ b/src/main/java/gregtech/api/util/input/KeyBind.java @@ -26,7 +26,6 @@ import org.apache.commons.lang3.tuple.MutablePair; import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; import java.util.ArrayList; import java.util.List; @@ -51,6 +50,29 @@ public enum KeyBind { public static final KeyBind[] VALUES = values(); + @SideOnly(Side.CLIENT) + private KeyBinding keybinding; + @SideOnly(Side.CLIENT) + private boolean isKeyDown; + + private final WeakHashMap mapping = new WeakHashMap<>(); + private final WeakHashMap> listeners = new WeakHashMap<>(); + + // For Vanilla/Other Mod keybinds + // Double Supplier to keep client classes from loading + KeyBind(Supplier> keybindingGetter) { + if (FMLCommonHandler.instance().getSide().isClient()) { + this.keybinding = keybindingGetter.get().get(); + } + } + + KeyBind(String langKey, IKeyConflictContext ctx, int button) { + if (FMLCommonHandler.instance().getSide().isClient()) { + this.keybinding = new KeyBinding(langKey, ctx, button, "GregTech"); + ClientRegistry.registerKeyBinding(this.keybinding); + } + } + public static void init() { GTLog.logger.info("Registering KeyBinds"); if (FMLCommonHandler.instance().getSide().isClient()) { @@ -69,7 +91,7 @@ public static void onClientTick(TickEvent.ClientTickEvent event) { Int2BooleanMap updatingKeyDown = new Int2BooleanOpenHashMap(); for (KeyBind keybind : VALUES) { boolean previousKeyDown = keybind.isKeyDown; - keybind.isKeyDown = keybind.isKeyDown(); + keybind.isKeyDown = keybind.keybinding.isKeyDown(); if (previousKeyDown != keybind.isKeyDown) { updatingKeyDown.put(keybind.ordinal(), keybind.isKeyDown); } @@ -80,6 +102,17 @@ public static void onClientTick(TickEvent.ClientTickEvent event) { } } + public void updateKeyDown(boolean keyDown, EntityPlayerMP player) { + this.mapping.put(player, keyDown); + } + + public boolean isKeyDown(EntityPlayer player) { + if (player.world.isRemote) return keybinding.isKeyDown(); + // potential NPE here on unboxing if it is returned directly + Boolean isKeyDown = mapping.get((EntityPlayerMP) player); + return isKeyDown != null ? isKeyDown : false; + } + /** * Handle Keys which we track for "presses" on the server, meaning a single input which * sends a packet to the server which informs all listeners. @@ -89,7 +122,7 @@ public static void onClientTick(TickEvent.ClientTickEvent event) { public static void onInputEvent(InputEvent.KeyInputEvent event) { IntList updatingPressed = new IntArrayList(); for (KeyBind keybind : VALUES) { - if (keybind.isPressed()) { + if (keybind.keybinding.isPressed()) { updatingPressed.add(keybind.ordinal()); } } @@ -98,70 +131,6 @@ public static void onInputEvent(InputEvent.KeyInputEvent event) { } } - @SideOnly(Side.CLIENT) - public static boolean scrollingUp() { - return Mouse.getEventDWheel() > 0; - } - - @SideOnly(Side.CLIENT) - public static boolean notScrolling() { - return Mouse.getEventDWheel() == 0; - } - - @SideOnly(Side.CLIENT) - public static boolean scrollingDown() { - return Mouse.getEventDWheel() < 0; - } - - @SideOnly(Side.CLIENT) - private KeyBinding keybinding; - @SideOnly(Side.CLIENT) - private boolean isKeyDown; - - private final WeakHashMap mapping = new WeakHashMap<>(); - private final WeakHashMap> listeners = new WeakHashMap<>(); - - // For Vanilla/Other Mod keybinds - // Double Supplier to keep client classes from loading - KeyBind(Supplier> keybindingGetter) { - if (FMLCommonHandler.instance().getSide().isClient()) { - this.keybinding = keybindingGetter.get().get(); - } - } - - KeyBind(String langKey, int button) { - if (FMLCommonHandler.instance().getSide().isClient()) { - this.keybinding = new KeyBinding(langKey, button, GTValues.MOD_NAME); - ClientRegistry.registerKeyBinding(this.keybinding); - } - } - - KeyBind(String langKey, IKeyConflictContext ctx, int button) { - if (FMLCommonHandler.instance().getSide().isClient()) { - this.keybinding = new KeyBinding(langKey, ctx, button, GTValues.MOD_NAME); - ClientRegistry.registerKeyBinding(this.keybinding); - } - } - - @SideOnly(Side.CLIENT) - public KeyBinding toMinecraft() { - return this.keybinding; - } - - @SideOnly(Side.CLIENT) - public boolean isPressed() { - return this.keybinding.isPressed(); - } - - @SideOnly(Side.CLIENT) - public boolean isKeyDown() { - return this.keybinding.isKeyDown(); - } - - public void updateKeyDown(boolean keyDown, EntityPlayerMP player) { - this.mapping.put(player, keyDown); - } - public void onKeyPressed(EntityPlayerMP player) { Set listenerSet = listeners.get(player); if (listenerSet != null && !listenerSet.isEmpty()) { @@ -171,11 +140,6 @@ public void onKeyPressed(EntityPlayerMP player) { } } - public boolean isKeyDown(EntityPlayer player) { - if (player.world.isRemote) return isKeyDown(); - return mapping.get((EntityPlayerMP) player); - } - public void registerListener(EntityPlayerMP player, IKeyPressedListener listener) { Set listenerSet = listeners.computeIfAbsent(player, k -> new HashSet<>()); listenerSet.add(listener); diff --git a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java index 61223b8d1c8..c31c12aa7df 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java @@ -18,6 +18,7 @@ @SuppressWarnings("unused") @SideOnly(Side.CLIENT) +@Deprecated public class ArmorRenderHooks { public static boolean shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) { diff --git a/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java b/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java index aef7ff3395e..1e09a9c0446 100644 --- a/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java +++ b/src/main/java/gregtech/asm/visitors/LayerArmorBaseVisitor.java @@ -5,6 +5,7 @@ import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +@Deprecated public class LayerArmorBaseVisitor extends MethodVisitor implements Opcodes { public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerArmorBase"; diff --git a/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java b/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java index ce253343216..11613c0cb7c 100644 --- a/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java +++ b/src/main/java/gregtech/asm/visitors/LayerCustomHeadVisitor.java @@ -7,6 +7,7 @@ import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +@Deprecated public class LayerCustomHeadVisitor extends SafeMethodVisitor { public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerCustomHead"; diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java index fbc66c71ab1..e69de29bb2d 100644 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java +++ b/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java @@ -1,28 +0,0 @@ -package gregtech.asm.visitors; - -import gregtech.asm.util.ObfMapping; -import gregtech.asm.util.TargetClassVisitor; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import java.util.function.Function; - -public class SpecialArmorClassVisitor extends TargetClassVisitor { - - public static final String CACHED_TOUGHNESS_FIELD_NAME = "gregtech__cachedToughness"; - public static final String CACHED_TOTAL_ARMOR_FIELD_NAME = "gregtech__cachedTotalArmor"; - - public SpecialArmorClassVisitor(ClassVisitor cv, ObfMapping methodKey, - Function visitorCreator) { - super(cv, methodKey, visitorCreator); - } - - @Override - public void visitEnd() { - visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PRIVATE, CACHED_TOUGHNESS_FIELD_NAME, "F", null, null); - visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PRIVATE, CACHED_TOTAL_ARMOR_FIELD_NAME, "F", null, null); - super.visitEnd(); - } -} diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java index cfc8ef8c0bf..928d64e7773 100644 --- a/src/main/java/gregtech/common/items/ArmorItems.java +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -48,13 +48,27 @@ public static List getAllArmors() { return ARMORS; } + // TODO ArmorProperties values not set here (and their original code was already deleted): + // Electric Jetpack: 0, 0, 0 + // Advanced Electric Jetpack: 0, 0, 0 + public static void init() { - // todo clean up this config... "stuff" + // todo get rid of this config... "stuff" NIGHTVISION_GOGGLES = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nightvision_goggles", EntityEquipmentSlot.HEAD) .electric(ConfigHolder.tools.voltageTierNightVision, 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1))) .electricCost(2) .behaviors(NightvisionBehavior.INSTANCE)); + ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "electric_jetpack", EntityEquipmentSlot.CHEST) + .electric(ConfigHolder.tools.voltageTierImpeller, 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2))) + .behaviors(new ElectricJetpackBehavior(JetpackStats.ELECTRIC, 30)) + .rarity(EnumRarity.UNCOMMON)); + + ADVANCED_ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "advanced_electric_jetpack", EntityEquipmentSlot.CHEST) + .electric(ConfigHolder.tools.voltageTierAdvImpeller, 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4))) + .behaviors(new ElectricJetpackBehavior(JetpackStats.ADVANCED_ELECTRIC, 480)) + .rarity(EnumRarity.RARE)); + int energyPerUse = 512; int tier = ConfigHolder.tools.voltageTierNanoSuit; long maxCapacity = 6_400_000L * (long) Math.max(1, Math.pow(4, tier - 3)); @@ -124,6 +138,9 @@ public static void registerColors() { @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE_ADVANCED; @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE_ADVANCED; + // TODO Remove all old armor texture files, change old models to point to new texture location until full removal. + // TODO Rename old armor lang keys (other than names), and move names to a separated section for easy removal. + @Deprecated public static void initLegacyArmor() { ArmorMetaItem.ArmorMetaValueItem> legacyArmor = new ArmorMetaItem<>() { @@ -133,8 +150,8 @@ public void registerSubItems() { OLD_NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(EntityEquipmentSlot.HEAD, "nightvision_goggles"); MetaItems.SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); - MetaItems.ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(new Jetpack(30, 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2)), ConfigHolder.tools.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); - MetaItems.ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack").setArmorLogic(new AdvancedJetpack(512, 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4)), ConfigHolder.tools.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); + OLD_ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "electric_jetpack"); + OLD_ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "advanced_electric_jetpack"); OLD_NANO_HELMET = addItem(20, "nms.helmet").setArmorLogic(EntityEquipmentSlot.HEAD, "nano_helmet"); OLD_NANO_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(EntityEquipmentSlot.CHEST, "nano_chestplate"); @@ -169,7 +186,7 @@ public static void registerLegacyConversionRecipes() { //addConversion(OLD_QUANTUM_LEGGINGS, QUANTUM_LEGGINGS.getStack()); //addConversion(OLD_QUANTUM_BOOTS, QUANTUM_BOOTS.getStack()); //addConversion(OLD_SEMIFLUID_JETPACK, SEMI_FLUID_JETPACK.getStack()); - //addConversion(OLD_ELECTRIC_JETPACK, ELECTRIC_JETPACK.getStack()); + addConversion(OLD_ELECTRIC_JETPACK, ELECTRIC_JETPACK.getStack()); //addConversion(OLD_ELECTRIC_JETPACK_ADVANCED, ADVANCED_ELECTRIC_JETPACK.getStack()); //addConversion(OLD_NANO_CHESTPLATE_ADVANCED, ADVANCED_NANO_CHESTPLATE.getStack()); //addConversion(OLD_QUANTUM_CHESTPLATE_ADVANCED, ADVANCED_QUANTUM_CHESTPLATE.getStack()); diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 41a16d13b72..a28908aa79f 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -537,9 +537,7 @@ private MetaItems() {} public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_HELMET; public static ArmorMetaItem.ArmorMetaValueItem SEMIFLUID_JETPACK; - public static ArmorMetaItem.ArmorMetaValueItem ELECTRIC_JETPACK; - public static ArmorMetaItem.ArmorMetaValueItem ELECTRIC_JETPACK_ADVANCED; public static ArmorMetaItem.ArmorMetaValueItem NANO_CHESTPLATE_ADVANCED; public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_CHESTPLATE_ADVANCED; diff --git a/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java index 74c271e243b..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java @@ -1,106 +0,0 @@ -package gregtech.common.items.armor; - -import gregtech.api.capability.GregtechCapabilities; -import gregtech.api.capability.IElectricItem; -import gregtech.api.util.GTUtility; -import gregtech.api.util.input.KeyBind; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import org.jetbrains.annotations.NotNull; - -@Deprecated -public class AdvancedJetpack extends Jetpack { - - public AdvancedJetpack(int energyPerUse, long capacity, int tier) { - super(energyPerUse, capacity, tier); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, @NotNull ItemStack item) { - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (cont == null) { - return; - } - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("hover") && data.getBoolean("hover"); - byte toggleTimer = data.hasKey("toggleTimer") ? data.getByte("toggleTimer") : 0; - - if (toggleTimer == 0 && KeyBind.ARMOR_HOVER.isKeyDown(player)) { - hoverMode = !hoverMode; - toggleTimer = 5; - data.setBoolean("hover", hoverMode); - if (!world.isRemote) { - if (hoverMode) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable"), true); - else - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable"), true); - } - } - - performFlying(player, hoverMode, item); - - if (toggleTimer > 0) toggleTimer--; - - data.setBoolean("hover", hoverMode); - data.setByte("toggleTimer", toggleTimer); - player.inventoryContainer.detectAndSendChanges(); - } - - @Override - public double getSprintEnergyModifier() { - return 2.5D; - } - - @Override - public double getSprintSpeedModifier() { - return 1.3D; - } - - @Override - public double getVerticalHoverSpeed() { - return 0.34D; - } - - @Override - public double getVerticalHoverSlowSpeed() { - return 0.03D; - } - - @Override - public double getVerticalAcceleration() { - return 0.13D; - } - - @Override - public double getVerticalSpeed() { - return 0.48D; - } - - @Override - public double getSidewaysSpeed() { - return 0.14D; - } - - @Override - public EnumParticleTypes getParticle() { - return EnumParticleTypes.CLOUD; - } - - @Override - public float getFallDamageReduction() { - return 2.0f; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/advanced_jetpack.png"; - } -} diff --git a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java index 94976f5d050..15c41ff0ab8 100644 --- a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java @@ -1,4 +1,47 @@ package gregtech.common.items.armor; -public class ElectricJetpackBehavior { +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armoritem.jetpack.IJetpackStats; +import gregtech.api.items.armoritem.jetpack.JetpackBehavior; +import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +public class ElectricJetpackBehavior extends JetpackBehavior { + + private final int energyPerUse; + + public ElectricJetpackBehavior(IJetpackStats jetpackStats, int energyPerUse) { + super(jetpackStats); + this.energyPerUse = energyPerUse; + } + + @Override + protected int getFuelPerUse() { + return energyPerUse; + } + + @Override + protected boolean hasEnoughFuel(@NotNull ItemStack stack, int amount) { + IElectricItem electricItem = getElectricItem(stack); + return electricItem != null && electricItem.canUse(amount); + } + + @Override + protected void drainFuel(@NotNull ItemStack stack, int amount) { + IElectricItem electricItem = getElectricItem(stack); + if (electricItem != null) { + electricItem.discharge(amount, Integer.MAX_VALUE, true, false, false); + } + } + + @Override + protected boolean hasFuel(@NotNull ItemStack stack) { + IElectricItem electricItem = getElectricItem(stack); + return electricItem != null && electricItem.getCharge() > 0; + } + + private static IElectricItem getElectricItem(@NotNull ItemStack stack) { + return stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + } } diff --git a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java b/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java index 9cb2a5f4730..a9be53962ff 100644 --- a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java @@ -3,7 +3,6 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; import net.minecraft.client.resources.I18n; -import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -24,7 +23,7 @@ public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag } @Override - public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { tooltip.add(I18n.format("metaarmor.tooltip.falldamage")); } } diff --git a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java b/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java index a6ac1117776..4b2822bdc4b 100644 --- a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java @@ -2,7 +2,6 @@ import gregtech.api.items.armoritem.IArmorBehavior; import net.minecraft.client.resources.I18n; -import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -29,7 +28,7 @@ public void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @ } @Override - public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { tooltip.add(I18n.format("metaarmor.tooltip.burning")); } } diff --git a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java index ff2337cbe53..c94fa79d709 100644 --- a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java @@ -1,4 +1,51 @@ package gregtech.common.items.armor; -public class FueledJetpackBehavior { +import gregtech.api.capability.impl.GTFluidHandlerItemStack; +import gregtech.api.items.armoritem.jetpack.IJetpackStats; +import gregtech.api.items.armoritem.jetpack.JetpackBehavior; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class FueledJetpackBehavior extends JetpackBehavior { + + //private final int maxCapacity; + + public FueledJetpackBehavior(IJetpackStats jetpackStats) { + + super(jetpackStats); + } + + @Override + protected int getFuelPerUse() { + + return 0; + } + + @Override + protected boolean hasEnoughFuel(@NotNull ItemStack stack, int amount) { + + return false; + } + + @Override + protected void drainFuel(@NotNull ItemStack stack, int amount) { + + } + + @Override + protected boolean hasFuel(@NotNull ItemStack stack) { + + return false; + } + + @Override + public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + //return new GTFluidHandlerItemStack(stack, maxCapacity) + // .setFilter() + // .setCanDrain(false); + return null; + } } diff --git a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java b/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java index 0e7e1fd9497..8f2a0d4a46e 100644 --- a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java @@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull; // todo Nano was 0.75, quantum was 0.5 +// todo tooltip? public class HeatReductionBehavior implements IArmorBehavior { private final float reductionFactor; diff --git a/src/main/java/gregtech/common/items/armor/IJetpack.java b/src/main/java/gregtech/common/items/armor/IJetpack.java index 926847a7bc4..c68ca3441fb 100644 --- a/src/main/java/gregtech/common/items/armor/IJetpack.java +++ b/src/main/java/gregtech/common/items/armor/IJetpack.java @@ -103,7 +103,7 @@ default void performFlying(@NotNull EntityPlayer player, boolean hover, ItemStac } } - ArmorUtils.spawnParticle(player.getEntityWorld(), player, getParticle(), -0.6D); + //ArmorUtils.spawnParticle(player.getEntityWorld(), player, getParticle(), -0.6D); } } } diff --git a/src/main/java/gregtech/common/items/armor/Jetpack.java b/src/main/java/gregtech/common/items/armor/Jetpack.java index d72b975b316..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/Jetpack.java +++ b/src/main/java/gregtech/common/items/armor/Jetpack.java @@ -1,166 +0,0 @@ -package gregtech.common.items.armor; - -import gregtech.api.capability.GregtechCapabilities; -import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorLogicSuite; -import gregtech.api.items.armor.ArmorUtils; -import gregtech.api.util.GTUtility; -import gregtech.api.util.input.KeyBind; - -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor.ArmorProperties; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -@Deprecated -public class Jetpack extends ArmorLogicSuite implements IJetpack { - - @SideOnly(Side.CLIENT) - protected ArmorUtils.ModularHUD HUD; - - public Jetpack(int energyPerUse, long capacity, int tier) { - super(energyPerUse, capacity, tier, EntityEquipmentSlot.CHEST); - if (ArmorUtils.SIDE.isClient() && this.shouldDrawHUD()) { - // noinspection NewExpressionSideOnly - HUD = new ArmorUtils.ModularHUD(); - } - } - - @Override - public void onArmorTick(World world, EntityPlayer player, @NotNull ItemStack stack) { - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(stack); - byte toggleTimer = 0; - boolean hover = false; - if (data.hasKey("toggleTimer")) toggleTimer = data.getByte("toggleTimer"); - if (data.hasKey("hover")) hover = data.getBoolean("hover"); - - if (toggleTimer == 0 && KeyBind.ARMOR_HOVER.isKeyDown(player)) { - hover = !hover; - toggleTimer = 5; - data.setBoolean("hover", hover); - if (!world.isRemote) { - if (hover) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable"), true); - else - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable"), true); - } - } - - performFlying(player, hover, stack); - - if (toggleTimer > 0) toggleTimer--; - - data.setBoolean("hover", hover); - data.setByte("toggleTimer", toggleTimer); - player.inventoryContainer.detectAndSendChanges(); - } - - @Override - public boolean canUseEnergy(@NotNull ItemStack stack, int amount) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return false; - return container.canUse(amount); - } - - @Override - public void drainEnergy(@NotNull ItemStack stack, int amount) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return; - container.discharge(amount, tier, true, false, false); - } - - @Override - public boolean hasEnergy(@NotNull ItemStack stack) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return false; - return container.getCharge() > 0; - } - - private static IElectricItem getIElectricItem(@NotNull ItemStack stack) { - return stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/jetpack.png"; - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, - double damage, EntityEquipmentSlot equipmentSlot) { - return new ArmorProperties(0, 0, 0); - } - - @SideOnly(Side.CLIENT) - @Override - public void drawHUD(ItemStack item) { - addCapacityHUD(item, this.HUD); - NBTTagCompound data = item.getTagCompound(); - if (data != null) { - if (data.hasKey("hover")) { - String status = (data.getBoolean("hover") ? I18n.format("metaarmor.hud.status.enabled") : - I18n.format("metaarmor.hud.status.disabled")); - String result = I18n.format("metaarmor.hud.hover_mode", status); - this.HUD.newString(result); - } - } - this.HUD.draw(); - this.HUD.reset(); - } - - @Override - public void addInfo(ItemStack itemStack, List lines) { - super.addInfo(itemStack, lines); - NBTTagCompound data = itemStack.getTagCompound(); - if (data != null) { - String status = I18n.format("metaarmor.hud.status.disabled"); - if (data.hasKey("hover")) { - if (data.getBoolean("hover")) - status = I18n.format("metaarmor.hud.status.enabled"); - } - lines.add(I18n.format("metaarmor.hud.hover_mode", status)); - } - } - - @Override - public double getVerticalHoverSlowSpeed() { - return 0.1D; - } - - @Override - public double getVerticalAcceleration() { - return 0.12D; - } - - @Override - public double getVerticalSpeed() { - return 0.3D; - } - - @Override - public double getSidewaysSpeed() { - return 0.08D; - } - - @Override - public EnumParticleTypes getParticle() { - return EnumParticleTypes.SMOKE_NORMAL; - } -} diff --git a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java index e4298e86418..1ac5b4bca71 100644 --- a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java @@ -5,7 +5,6 @@ import gregtech.api.items.armoritem.IElectricArmorBehavior; import gregtech.api.util.input.KeyBind; import net.minecraft.client.resources.I18n; -import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; @@ -26,8 +25,6 @@ public class NightvisionBehavior implements IElectricArmorBehavior { public static final NightvisionBehavior INSTANCE = new NightvisionBehavior(); - private static final String NBT_NIGHTVISION = "NightVision"; - protected NightvisionBehavior() {/**/} @Override @@ -54,9 +51,8 @@ public void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, @Override public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, @NotNull IElectricItem electricItem) { if (world.isRemote) return; - NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); - boolean enabled = tag.getBoolean("Enabled"); - if (enabled && electricItem.canUse(2)) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + if (tag.getBoolean(ArmorHelper.NIGHT_VISION_KEY) && electricItem.canUse(2)) { electricItem.discharge(2, Integer.MAX_VALUE, true, false, false); player.removePotionEffect(MobEffects.BLINDNESS); player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, false)); @@ -74,9 +70,9 @@ public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag } @Override - public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { - NBTTagCompound tag = getBehaviorTag(stack, NBT_NIGHTVISION); - if (tag.getBoolean("Enabled")) { + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + if (tag.getBoolean(ArmorHelper.NIGHT_VISION_KEY)) { tooltip.add(I18n.format("metaarmor.message.nightvision.enabled")); } else { tooltip.add(I18n.format("metaarmor.message.nightvision.disabled")); diff --git a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java b/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java index 934cbc3090d..e89ad8a7348 100644 --- a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java +++ b/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java @@ -3,7 +3,6 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; import net.minecraft.client.resources.I18n; -import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -24,7 +23,7 @@ public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag } @Override - public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { tooltip.add(I18n.format("metaarmor.tooltip.stepassist")); } } diff --git a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java index b172854aa9f..d1e4056b265 100644 --- a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java @@ -300,48 +300,22 @@ private static void loadCraftingRecipes() { /////////////////////////////////////////////////// // Armors // /////////////////////////////////////////////////// - ModHandler.addShapedRecipe("nightvision_goggles", ArmorItems.NIGHTVISION_GOGGLES.getStack(), "CSC", "RBR", - "LdL", 'C', new UnificationEntry(OrePrefix.circuit, Tier.ULV), 'S', - new UnificationEntry(OrePrefix.screw, Steel), 'R', new UnificationEntry(OrePrefix.ring, Rubber), 'B', - MetaItems.BATTERY_LV_SODIUM, 'L', new UnificationEntry(OrePrefix.lens, Glass)); - ModHandler.addShapedRecipe("fluid_jetpack", MetaItems.SEMIFLUID_JETPACK.getStackForm(), "xCw", "SUS", "RIR", - 'C', new UnificationEntry(OrePrefix.circuit, Tier.LV), 'S', - MetaItems.FLUID_CELL_LARGE_STEEL.getStackForm(), 'U', MetaItems.ELECTRIC_PUMP_LV.getStackForm(), 'R', - new UnificationEntry(OrePrefix.rotor, Lead), 'I', - new UnificationEntry(OrePrefix.pipeSmallFluid, Potin)); - ModHandler.addShapedRecipe("electric_jetpack", MetaItems.ELECTRIC_JETPACK.getStackForm(), "xCd", "TBT", "I I", - 'C', new UnificationEntry(OrePrefix.circuit, Tier.MV), 'T', MetaItems.POWER_THRUSTER.getStackForm(), - 'B', MetaItems.BATTERY_MV_LITHIUM.getStackForm(), 'I', - new UnificationEntry(OrePrefix.wireGtDouble, AnnealedCopper)); - ModHandler.addShapedRecipe("electric_jetpack_advanced", MetaItems.ELECTRIC_JETPACK_ADVANCED.getStackForm(), - "xJd", "TBT", "WCW", 'J', MetaItems.ELECTRIC_JETPACK.getStackForm(), 'T', - MetaItems.POWER_THRUSTER_ADVANCED.getStackForm(), 'B', ENERGIUM_CRYSTAL.getStackForm(), 'W', - new UnificationEntry(OrePrefix.wireGtQuadruple, Gold), 'C', - new UnificationEntry(OrePrefix.circuit, Tier.HV)); - ModHandler.addShapedRecipe("nano_helmet", ArmorItems.NANO_HELMET.getStack(), "PPP", "PNP", "xEd", 'P', - MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', ArmorItems.NIGHTVISION_GOGGLES.getStack(), 'E', - MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_chestplate", ArmorItems.NANO_CHESTPLATE.getStack(), "PEP", "PPP", "PPP", - 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_leggings", ArmorItems.NANO_LEGGINGS.getStack(), "PPP", "PEP", "PxP", 'P', - MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_boots", ArmorItems.NANO_BOOTS.getStack(), "PxP", "PEP", 'P', - MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_chestplate_advanced", MetaItems.NANO_CHESTPLATE_ADVANCED.getStackForm(), "xJd", - "PNP", "WCW", 'J', MetaItems.ELECTRIC_JETPACK_ADVANCED.getStackForm(), 'P', - MetaItems.LOW_POWER_INTEGRATED_CIRCUIT.getStackForm(), 'N', ArmorItems.NANO_CHESTPLATE.getStackForm(), - 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Platinum), 'C', - new UnificationEntry(OrePrefix.circuit, Tier.IV)); - ModHandler.addShapedRecipe("gravitation_engine", MetaItems.GRAVITATION_ENGINE.getStackForm(), "ESE", "POP", - "ESE", 'E', MetaItems.EMITTER_LuV.getStackForm(), 'S', - new UnificationEntry(OrePrefix.wireGtQuadruple, Osmium), 'P', - new UnificationEntry(OrePrefix.plateDouble, Iridium), 'O', - MetaItems.ENERGY_LAPOTRONIC_ORB.getStackForm()); ModHandler.addShapedRecipe("powderbarrel", new ItemStack(MetaBlocks.POWDERBARREL), "PSP", "GGG", "PGP", 'P', new UnificationEntry(OrePrefix.plate, Wood), 'S', new ItemStack(Items.STRING), 'G', new UnificationEntry(OrePrefix.dust, Gunpowder)); + + ModHandler.addShapedRecipe("nightvision_goggles", ArmorItems.NIGHTVISION_GOGGLES.getStack(), "CSC", "RBR", "LdL", 'C', new UnificationEntry(OrePrefix.circuit, Tier.ULV), 'S', new UnificationEntry(OrePrefix.screw, Steel), 'R', new UnificationEntry(OrePrefix.ring, Rubber), 'B', MetaItems.BATTERY_LV_SODIUM, 'L', new UnificationEntry(OrePrefix.lens, Glass)); + ModHandler.addShapedRecipe("fluid_jetpack", MetaItems.SEMIFLUID_JETPACK.getStackForm(), "xCw", "SUS", "RIR", 'C', new UnificationEntry(OrePrefix.circuit, Tier.LV), 'S', MetaItems.FLUID_CELL_LARGE_STEEL.getStackForm(), 'U', MetaItems.ELECTRIC_PUMP_LV.getStackForm(), 'R', new UnificationEntry(OrePrefix.rotor, Lead), 'I', new UnificationEntry(OrePrefix.pipeSmallFluid, Potin)); + ModHandler.addShapedRecipe("electric_jetpack", ArmorItems.ELECTRIC_JETPACK.getStack(), "xCd", "TBT", "I I", 'C', new UnificationEntry(OrePrefix.circuit, Tier.MV), 'T', MetaItems.POWER_THRUSTER.getStackForm(), 'B', MetaItems.BATTERY_MV_LITHIUM.getStackForm(), 'I', new UnificationEntry(OrePrefix.wireGtDouble, AnnealedCopper)); + ModHandler.addShapedRecipe("electric_jetpack_advanced", ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), "xJd", "TBT", "WCW", 'J', ArmorItems.ELECTRIC_JETPACK.getStack(), 'T', MetaItems.POWER_THRUSTER_ADVANCED.getStackForm(), 'B', ENERGIUM_CRYSTAL.getStackForm(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Gold), 'C', new UnificationEntry(OrePrefix.circuit, Tier.HV)); + ModHandler.addShapedRecipe("nano_helmet", ArmorItems.NANO_HELMET.getStack(), "PPP", "PNP", "xEd", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', ArmorItems.NIGHTVISION_GOGGLES.getStack(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_chestplate", ArmorItems.NANO_CHESTPLATE.getStack(), "PEP", "PPP", "PPP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_leggings", ArmorItems.NANO_LEGGINGS.getStack(), "PPP", "PEP", "PxP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_boots", ArmorItems.NANO_BOOTS.getStack(), "PxP", "PEP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_chestplate_advanced", MetaItems.NANO_CHESTPLATE_ADVANCED.getStackForm(), "xJd", "PNP", "WCW", 'J', ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), 'P', MetaItems.LOW_POWER_INTEGRATED_CIRCUIT.getStackForm(), 'N', ArmorItems.NANO_CHESTPLATE.getStack(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Platinum), 'C', new UnificationEntry(OrePrefix.circuit, Tier.IV)); + ModHandler.addShapedRecipe("gravitation_engine", MetaItems.GRAVITATION_ENGINE.getStackForm(), "ESE", "POP", "ESE", 'E', MetaItems.EMITTER_LuV.getStackForm(), 'S', new UnificationEntry(OrePrefix.wireGtQuadruple, Osmium), 'P', new UnificationEntry(OrePrefix.plateDouble, Iridium), 'O', MetaItems.ENERGY_LAPOTRONIC_ORB.getStackForm()); } private static void registerFacadeRecipe(Material material, int facadeAmount) { diff --git a/src/main/resources/assets/gregtech/models/item/armors/advanced_electric_jetpack.json b/src/main/resources/assets/gregtech/models/item/armors/advanced_electric_jetpack.json new file mode 100644 index 00000000000..a958e2a4d2d --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/advanced_electric_jetpack.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/advanced_electric_jetpack_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/armors/electric_jetpack.json b/src/main/resources/assets/gregtech/models/item/armors/electric_jetpack.json new file mode 100644 index 00000000000..db09ceba20e --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/armors/electric_jetpack.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/electric_jetpack_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/advanced_electric_jetpack.json b/src/main/resources/assets/gregtech/models/item/metaitems/advanced_electric_jetpack.json index 678e92893c0..a958e2a4d2d 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/advanced_electric_jetpack.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/advanced_electric_jetpack.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/advanced_electric_jetpack" + "layer0": "gregtech:items/armors/advanced_electric_jetpack_item" } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack.json new file mode 100644 index 00000000000..db09ceba20e --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/armors/electric_jetpack_item" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/1.json deleted file mode 100644 index 6ba004805e3..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/1" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/2.json deleted file mode 100644 index 04e088f4000..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/2" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/3.json deleted file mode 100644 index a48465c33aa..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/3" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/4.json deleted file mode 100644 index c648761a6ed..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/4" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/5.json deleted file mode 100644 index 3ee3aa36fa8..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/5.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/5" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/6.json deleted file mode 100644 index 68d683ba1bc..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/6.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/6" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/7.json deleted file mode 100644 index 783351abf76..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/7.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/7" - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/8.json deleted file mode 100644 index 580429a9fc5..00000000000 --- a/src/main/resources/assets/gregtech/models/item/metaitems/electric_jetpack/8.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/electric_jetpack/8" - } -} diff --git a/src/main/resources/assets/gregtech/textures/armor/advanced_jetpack.png b/src/main/resources/assets/gregtech/textures/items/armors/advanced_electric_jetpack.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/armor/advanced_jetpack.png rename to src/main/resources/assets/gregtech/textures/items/armors/advanced_electric_jetpack.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/advanced_electric_jetpack.png b/src/main/resources/assets/gregtech/textures/items/armors/advanced_electric_jetpack_item.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/items/metaitems/advanced_electric_jetpack.png rename to src/main/resources/assets/gregtech/textures/items/armors/advanced_electric_jetpack_item.png diff --git a/src/main/resources/assets/gregtech/textures/armor/jetpack.png b/src/main/resources/assets/gregtech/textures/items/armors/electric_jetpack.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/armor/jetpack.png rename to src/main/resources/assets/gregtech/textures/items/armors/electric_jetpack.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/8.png b/src/main/resources/assets/gregtech/textures/items/armors/electric_jetpack_item.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/8.png rename to src/main/resources/assets/gregtech/textures/items/armors/electric_jetpack_item.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/1.png b/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/1.png deleted file mode 100644 index 463f9c28f56b8c5f68899f55c2192d63ae4ec6a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4429 zcmcgv3vd(H6_pJkh5#{;f?G;imQJu!ulJ*sw7WqCBN?#4#@G&)O%iy!`_|rC(u&=+ zEYq}hfX4iP34{^|VKQXm0H!IWlra3JfN4mXLJACNQYbW~Gfv{PDlGvDeQSL%)Ywc) z(Tt?sckjF3bMJj`QE}0v0sX$!&t|g?$e-*jLI3I2H?0r)9T~j^Y_=4a>hTok%9;qV zl1US=Oq%DpESoKJ)tVIt3VvPuMAL!cc}F(SNV|9;G-i6S|Ma1y`7;+|zOA0s+w(nZ z#KFOqhHL4|gCm~(_(!Q@CLPNCTi+LY9ciBLSXyFZ7f>1CA_uPmOf_A;f(X`X^m$K_kO`1z23l#e5;_>=-GRR!%++S z{qDf2=00@q58l}HgY?H6n~Oejq)!{){Oa}L#r^bKwu1MsypTSt@tolvxs*THU!RpS zb;NTujg_kh{=TBU?D#vd;?x&U=6-j@qd#4K!oFu@)1rbQr%z5FcC5YEY6hEY*3dTxwu8B4@?KYHcgkbC^L|YLy_zonp|PnY>y4GzA3i#8!}M5zf{Y7rmt|SAZdXdV8u5l z5(pt~n{Dj4NC-$Z(8NSor3T%2``!aMrpj)-+)+pshCHxZojg~ErE`nQq`5T`FXQ9B zkByB8NI(FZ0E-0tK|_eR@ea8HdbXBH9P3~)YutD&p}xXm%%kZLbL2P)iDn&`i_f8* zc9!R}F@~Z!lHy3(PS8$)r38k-;vXDo(`7{{@lK5ELT_%o+B8D~N!HcX<kqJH?48Vjho$6&}khSA()vXJlD!#P>iiFrgc_=mgCW zl&g%f3zS1(?BAmpfudrpg_^7?^>?xIWfUtgw7{@;up%JKzyv)q%aWjIdH|p_r~yy~ z$xyHg$CAkvJeptAkz!<>z4LlLYInM(sD4DayX|#YTUaRM2MrShC7ADZCk z9i=D$DdvJ?0U08fW6Nq6iM+p%#rD@#LlmrT&>dqlG{vj~I?Sy?5l+CWy8!!bNZASgO11&A(@krLkDWj$9$ai}B(hD#LO*R(z!T&Wra zt00wgNv5QVfGZIa(PLUxTcGf{~JcFtMiY#YGc;-O&{&0f*A^Ia}!7$W2AuI%R zfQB#B4L7dnS^!HnBh1t=5DNKKsiWq|a8Qm9xMUl+cid#CtDTV0SxeFc>;dZQ5qA{B zQVOTAgv?4ZLD8%Wr3kQuLq?FJSz2_`Y`3_3xOwW)AC7YWqjE9P|J+3yn!=J_y`B7=1nFiKkg0ioj0r zvIq&DMS0?7&P7NfLo=L2QHmWTV$xN=d&qg}(VzP}MszuS{`b2Jsy;tE*8iv!H5hbD2Wvbq<|(Qg>nEzbjnVb zV&&hGrv0x6C2NdzgrU>5C9#C=Le^vQ5{6!q*EkqNQ&2~jw9VtQQ_-FJV7@oEj9a#4 z^|&BTXB=tRIqKE4_X}1PSFUWdhZgx4Z@|^RmU^kY!@1R`CM~v&T2Q?fFB!_sZ@snu z-O}DuCyK8kE8qkb>k~YPrO-mdtdZo0^*XzY#9TTCnm=dMd2AxUaQx$->#&w+k5q zo8JAy=TGiRPt`Qd-22J4>?v=3sQPzRE}Xpn_@}E|TU)pF!SHYFnt!pat!C_oVRp@nXd>JE6e+CFsipVpWZ+BomUF-@Oj4ai^E%%q+b4b)xnJUC5xlcDEY{i zl9PYh|6b*j9mse!X`)t;y zmoAMy(^fkn&A)r*(MxmIrUf-kdh_IkA0E1X{poQex%21QU+p}1_}Y;?eaMTS1Y3_E zpR#s+^)HH!WYwP-^w0Cp|5>gaa;W{vwYPsZ?NT&qx9xj=#cvhksVlADxzTpD_W*uP Ui?k%)XWiEG^NPGJ6K2o*4_c-BKmY&$ diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/2.png b/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/2.png deleted file mode 100644 index cbc900c6451aa9a7e8e3888079780bd8f5e51e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4594 zcmcgw3se->8D78#J_AWBM6r&mi4YxjW_D)h5jG0DMBxMkBnqg3J2Q7+!tTzpvph>8 zwl$hGfkux)ebji2IYGrfto2xHh2t}g2W!;WBpQr1$Mz(K(^zYb$J#sl5)FbUweC5) z%-sLK|MR>5|6g9s%bh)DZ{hn}VetoFJ()hWW%$pVyRCaBEq^upvC}8=6OQ)Al#!EM?8H6ucWvKy zb;*D1@n^0;&&JuYvu4;6iqq>hr7n3s@#$4xh)2ASkL?8wh4Nn3yE|&s?#$nnEc<#~ z+Snzg&ckzWUYR%ZD2n6=@0?=YWE%CD@r^RAU7u(&jcry7i~L17&k2&|P6bAMQ|sJb z#BDOA&8+hRsS^4z5tgeSySaDoelw=ZcJl%zhsg0dV1+uT!3XCxvlQw}S1d75!A2ZVClNF)B`D{oRdb67={C=-svDDVqrq)_hHD9>} zfrYmal!c;j#DVMe9zUqVJ^GZe1SixbpX&9ing=r^0#U2>+s(+*pbKtqM65>-g$V`B zQU|;iGL;a|M*kk_Eb;8+!aY;w2-z-U`jH=@r^NL`TSXC_tgj$%*Lb z*A}-sqC)p))*v@R0qK`pFRb@MO99liYM%r%Ymk{!!rtiq0(d)~_pu$ZM>hLaXEftJ;iV%v_#A%iWI44sC&a*5HZL$annhfuEYErd3PhRUA;X8I&Go6MN&r`1sfJZDlE^BG)yB&b4rnXD6^@p0 zjjqlb`pf zC>4|$GoTfW{ybFWP?T*9V`W0?d1@VW6**ND9X)7>tuLkcP6{eRw?h_oKOH4TM_|=M zMJfZ7hn`&OGyO-K6(y3S2^uE=MdB2oXL}fdb7@Jcr97Z6g#QvLYpgy}!$P zu8`nR!4N1eTn@gY^`YQO6~I#tQBSp)zq>zH(FRFMLg(EkQaEF!8Jy!OgdQl;oE4om z4h-xMCs-e%Ka%FDfxbQn^8z10qXG2kcC+Hs+*qVkVtx$+Uaw1)0u{khz{H-h+k z$4!PlwGR^dYKfSDJwSbf;*OwbLg5q|muX4H36f?}iU5r>GJ+gQlcJ5J2gKdO&C{U% za2%rm%0}WWZ9|hAftn5A(TO4$$tLrtbjgq%$R7p`bde7H|362Oq=#+li--UY27#J^ z#t1YY1nwS;zCrWElQa-TV8wYf0N^~0^2Ey=i%TL!Qk+B(iWP)o(qFxM$axynpZgnf z`t3g79_Jn??gHI8*jg=jcirH-Ggy?KHOgFIz!v)JulIYh(8MjEp>2>cjumZa5R_@0 z5-Eri5-s9L0f|cr!2m_H$u?Fo@^47f{?{?iXk&pe^tn`pm(Wekc#K>T(M#l#2|cI_ z`p^~f>gBYB=*E8}%b8xty|JZW-`4TziS{Wg|8QXSgt&wAyUsoJNZGoC70X(F_GHnP zENSxZmn}VYE#CFz(ERxLb*{;6r_0-JY2}`(b0>yst45E0dT03`_3lQ!?b;7+S)aPL zZfaKJ%Bj6n^ATz0_&2h-=}A+wE^JPYHo0~$bmkv?&GG3Ex6hy6^LPLG^#_!lU1da> zDetAX|GIuu>7}Hv)0XcVS5g@l|Jx7Y@Kx^}JW`c(YQ0{R+PdOm+voMoR~s&Wa@n>b z`Pj{uTR!t1-D;ZUd}3Ed)vt^GePMrGv~x(M`@PKXo3`&F4xhhqyl1TG<;EK&CrUP- zesSrFUwv}9lRxsy);%#zpSB)f{pivU#}{P3_07MMGh!<`y7=Mo=_y0Iu8(Q`&6k~t zF)2^{W%=%y^;hzoPU7&av!4~jCQ6iMjTMA%w$JNv3>BVVD zV>j(7Xm6_AQr3YFZ|~{7q3j%C&RF}-yJxF0jodP&EyOG(|Atjf;EM-AEc z!f|%|n6n8o$s?%SgeO|C!Ox%kYQzk!mN zu8s7*ltm}G4Y^UKbDo6aHTLYA9m8)4FGOuGZEZeOUacDcQpn28b?(S0`_X>^P?#m` diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/3.png b/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/3.png deleted file mode 100644 index 0228c230ac5dddc729917ec776d1fc06064481ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4588 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 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/4.png b/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/4.png deleted file mode 100644 index 6fc7edd974a1e74be28cf9f9b0870b2d09e3c2c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4592 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 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/5.png b/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/5.png deleted file mode 100644 index c5462c966bca785a4398bb18563cd8a810481430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4597 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 MEz`MkTEX-G0re0)`~Uy| diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/7.png b/src/main/resources/assets/gregtech/textures/items/metaitems/electric_jetpack/7.png deleted file mode 100644 index e398fdd93735d2f3e8326942c23a687d0492210d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4607 zcmcgw4Nw%<9Y546!H-~dB8^ctXC|7d%kA#%-tDfO2zQ8BK?F2_T70|v7FOH}TqCU^2zn6{j;NRZ<0r zQj^b)|QIx<)-+t3l1i8BXi=kyQZmsy8dc>am^Xsk+_W8KS(Q% znKo)}SxwQZAtwtv@{ewVg(oh*nEJxX0qa(@TK6W_E}1&))bSZ3j&$^$M<%-MqxR0) zv*V-d)!#UVp1uaXn=)c2jdzSFObyg0RnJVA@XLP+hkZX7(g7CcOO1Bl2QdRbNPoZR zwX4r052-foKQ#T$wY-!g2+5~>QwnvHY2Yy98)I7k>jaZ&$O<1vaLSqs5hNGnd-c$(lT3JZVC$eJd}e6DM9*cN(om`nYBA8)Z#R#qleT9Z_* z#Dd7eSqREPQ8<#o^(wC)1aPlDCZfRwbx~7%ens_ShDIQ$<$i}5c^V4AS34= zV3q*zS;!>92q`EiiBUOUx#kWUmqZJ6Ll5-&btFqhWqqZpU)4+1hp3KD-)8_po0S!{ z(XB5YPt=6&Pp?2>gaPSRTF7%|tExM~oty}YnA2%+g~P_Ztav50Qh&(^BfJK>fFC-{ z#yn0^IAPDHtUST+l=X)M#S=tGG)t8fx#|H?E}x)z%ElA+`$Q3uCEy3W3QHm{tC|O( zG$3j2LdVKvP43XWr2;ML)am2rfUkS62RS6tKpS|G}>j^YU3mk2ecL7 zGE0j%OWQ=8hB8EN6l8#8#tdQ@YLH97*oqD_86GS!2Ukkrttn5REF+B770HUB}PYN z)x$+94U~kR+{(o6(Y6aBNzw$36M!Od3eYqz$RdK=MpKNPWgwurWQ$RskP0mH6jE#H z*?zEU@KY4SpQ^AId2m70A1qiXcp!!V7L9ENQ9?q)N;fonw1kG%SC&GQ${zM!NK98{ ze4ZB@msd7V~$H$12z$Nr@y*+XM<{tTcnO9EI2e1)8;@ z-Nu5R<6(L06O2bxy%kXF!Z07u0BQ}OraR2Crh2ewsl@y$27ErZA_gmhrNS$PkKZWc zAC8*@HKhv^x>||4fIUWgz4DHrXhLRX8kcBM!U>YLqZ9!eXCy>9k|qTkN%zRRC!42U z<6&7w29%A&?X(SbZUhZ*z@Z&QFrrQ3Q0bB&I&8YF0>OR6poT7b0{{Q_Q8eihpSm(4 z$b(*}X0S0z&BwvJ$78S8JaHrq1OZraP7)x_(I`)x#M*IDph$`p2|~7l2qxXtyC4|th@`J&Y`2#^5Cf(dUu72(qyB|1siO>yYux?cNXfndDOJ^(#F{Z zo1F#{jZ*>zaY95*Au>SXqD(MA7HpEuE*tqbw5k7V8)qD2K^VGRsv<+^re-`wuZZX+ zddY-dbP8(d3faH2I1SzSPiDGO^V#KFR(&*oc53`<%^O&3hkdti(!92!bK6V48o7D6 z>)0;E0 zyv?g`Zo2a2_4;kw@@JkZ9(wp63-}2W$__4FzG&OF+`_e{wzFqvtcAa;TAh3T)-8Ti zV&X9I!i^hikC*0~{^b_mAirb|O__UoalEhfc{6))eO&9YV|mT($K2%PhK7bqoww8H zo^ESv+x+8QwRIP`4WF_O2VP-vZEkrVG&MC%+wjUx#+(*gUoQ;67T0vXJ-xU(=Bs}@ zM_zm`BO{|OwzIQy+?JbHJtG1~4__@Awx6pd`?nXJYS?p#tIdrY+ETQ1R$Tl1o#zkH zF-@Hb;_k*iHMzF2OJYBNR<~wuSh)PNOBDq%1%L17 zYpq{%V9)2w3#}KgwapQ6Z)N(qpUzH;%^EYf_G5n_P*=CRVEmt+fFz7@}OU$leqeqVpG&dKYEdO-n7gYI;8}F^}mz?nur}|*>%%QEXRSpbG-VUA3gm|`F~=5*75F4CF#Q^DjJ^w0VpE3pU(4LjV8( From 5cd83505f4fe8971fc4359e0636ca99a5a0809e8 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Mon, 3 Jul 2023 02:46:30 -0500 Subject: [PATCH 06/12] partially working fueled jetpack --- .../api/items/armoritem/ArmorHelper.java | 1 + .../armoritem/jetpack/JetpackBehavior.java | 65 +++++----- .../gregtech/common/items/ArmorItems.java | 12 +- .../java/gregtech/common/items/MetaItems.java | 2 - .../items/armor/AdvancedNanoMuscleSuite.java | 106 +--------------- .../items/armor/AdvancedQuarkTechSuite.java | 106 +--------------- .../items/armor/ElectricJetpackBehavior.java | 17 +-- .../items/armor/FueledJetpackBehavior.java | 110 +++++++++++++--- .../common/items/armor/JetpackStats.java | 10 +- .../common/items/armor/PowerlessJetpack.java | 119 +----------------- .../loaders/recipe/CraftingRecipeLoader.java | 2 +- .../loaders/recipe/MachineRecipeLoader.java | 5 + .../blockstates/metaitems/fueled_jetpack.json | 14 +++ .../metaitems/liquid_fuel_jetpack.json | 28 ++--- .../textures/armor/nano_muscule_suite_2.png | Bin 4487 -> 0 bytes .../textures/armor/nightvision_goggles.png | Bin 432 -> 0 bytes .../armors/fueled_jetpack.png} | Bin .../fueled_jetpack_item_base.png} | Bin .../fueled_jetpack_item_overlay.png} | Bin 19 files changed, 182 insertions(+), 415 deletions(-) create mode 100644 src/main/resources/assets/gregtech/blockstates/metaitems/fueled_jetpack.json delete mode 100644 src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_2.png delete mode 100644 src/main/resources/assets/gregtech/textures/armor/nightvision_goggles.png rename src/main/resources/assets/gregtech/textures/{armor/liquid_fuel_jetpack.png => items/armors/fueled_jetpack.png} (100%) rename src/main/resources/assets/gregtech/textures/items/{metaitems/liquid_fuel_jetpack/base.png => armors/fueled_jetpack_item_base.png} (100%) rename src/main/resources/assets/gregtech/textures/items/{metaitems/liquid_fuel_jetpack/overlay.png => armors/fueled_jetpack_item_overlay.png} (100%) diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java index a0267ecacd2..b4f02685d40 100644 --- a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java +++ b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java @@ -22,6 +22,7 @@ public class ArmorHelper { /* Jetpack Keys */ public static final String JETPACK_HOVER_KEY = "JetpackHover"; + public static final String FUELED_JETPACK_BURN_TIMER = "FuelBurnTime"; private static final EntityEquipmentSlot[] ARMOR_SLOTS = {FEET, LEGS, CHEST, HEAD}; diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java index c0926a98934..a61204dba24 100644 --- a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java @@ -29,14 +29,8 @@ public JetpackBehavior(IJetpackStats jetpackStats) { /** How much Fuel (or Energy) to use per tick while flying. Can be modified by stats in {@link IJetpackStats}. */ protected abstract int getFuelPerUse(); - /** Check for if this Jetpack has at least the specified amount of Fuel (or Energy). */ - protected abstract boolean hasEnoughFuel(@NotNull ItemStack stack, int amount); - /** Drain the specified amount of Fuel (or Energy) from this Jetpack. */ - protected abstract void drainFuel(@NotNull ItemStack stack, int amount); - - /** Check for if this Jetpack has any Fuel (or Energy). */ - protected abstract boolean hasFuel(@NotNull ItemStack stack); + protected abstract boolean drainFuel(@NotNull ItemStack stack, int amount, boolean simulate); @Override public Set getListenedKeys() { @@ -75,38 +69,35 @@ private void performFlying(@NotNull EntityPlayer player, @NotNull ItemStack stac boolean flyKeyDown = KeyBind.VANILLA_JUMP.isKeyDown(player); boolean descendKeyDown = KeyBind.VANILLA_SNEAK.isKeyDown(player); - if (!player.isInWater() && !player.isInLava() && hasEnoughFuel(stack, getFuelPerUse())) { - if (flyKeyDown || hover && !player.onGround) { - drainFuel(stack, (int) (player.isSprinting() ? Math.round(getFuelPerUse() * jetpackStats.getSprintEnergyModifier()) : getFuelPerUse())); - - if (hasFuel(stack)) { - if (flyKeyDown) { - if (!hover) { - player.motionY = Math.min(player.motionY + currentAccel, currentSpeedVertical); - } else { - if (descendKeyDown) player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSlowSpeed()); - else player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSpeed()); - } - } else if (descendKeyDown) { - player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSpeed()); + if (flyKeyDown || hover && !player.onGround) { + if (!player.isInWater() && !player.isInLava() && drainFuel(stack, getFuelPerUse(), true)) { + drainFuel(stack, (int) (player.isSprinting() ? Math.round(getFuelPerUse() * jetpackStats.getSprintEnergyModifier()) : getFuelPerUse()), false); + + if (flyKeyDown) { + if (!hover) { + player.motionY = Math.min(player.motionY + currentAccel, currentSpeedVertical); } else { - player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSlowSpeed()); + if (descendKeyDown) player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSlowSpeed()); + else player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSpeed()); } - float speedSideways = (float) (player.isSneaking() ? jetpackStats.getSidewaysSpeed() * 0.5f : jetpackStats.getSidewaysSpeed()); - float speedForward = (float) (player.isSprinting() ? speedSideways * jetpackStats.getSprintSpeedModifier() : speedSideways); - - if (KeyBind.VANILLA_FORWARD.isKeyDown(player)) - player.moveRelative(0, 0, speedForward, speedForward); - if (KeyBind.VANILLA_BACKWARD.isKeyDown(player)) - player.moveRelative(0, 0, -speedSideways, speedSideways * 0.8f); - if (KeyBind.VANILLA_LEFT.isKeyDown(player)) - player.moveRelative(speedSideways, 0, 0, speedSideways); - if (KeyBind.VANILLA_RIGHT.isKeyDown(player)) - player.moveRelative(-speedSideways, 0, 0, speedSideways); - if (!player.getEntityWorld().isRemote) { - player.fallDistance = 0; - } - + } else if (descendKeyDown) { + player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSpeed()); + } else { + player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSlowSpeed()); + } + float speedSideways = (float) (player.isSneaking() ? jetpackStats.getSidewaysSpeed() * 0.5f : jetpackStats.getSidewaysSpeed()); + float speedForward = (float) (player.isSprinting() ? speedSideways * jetpackStats.getSprintSpeedModifier() : speedSideways); + + if (KeyBind.VANILLA_FORWARD.isKeyDown(player)) + player.moveRelative(0, 0, speedForward, speedForward); + if (KeyBind.VANILLA_BACKWARD.isKeyDown(player)) + player.moveRelative(0, 0, -speedSideways, speedSideways * 0.8f); + if (KeyBind.VANILLA_LEFT.isKeyDown(player)) + player.moveRelative(speedSideways, 0, 0, speedSideways); + if (KeyBind.VANILLA_RIGHT.isKeyDown(player)) + player.moveRelative(-speedSideways, 0, 0, speedSideways); + if (!player.getEntityWorld().isRemote) { + player.fallDistance = 0; } spawnParticle(player.getEntityWorld(), player, jetpackStats.getParticle()); } diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java index 928d64e7773..ff061937b0c 100644 --- a/src/main/java/gregtech/common/items/ArmorItems.java +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -26,7 +26,7 @@ public class ArmorItems { public static ItemGTElectricArmor NIGHTVISION_GOGGLES; - public static ItemGTArmor SEMI_FLUID_JETPACK; + public static ItemGTArmor FUELED_JETPACK; public static ItemGTElectricArmor ELECTRIC_JETPACK; public static ItemGTElectricArmor ADVANCED_ELECTRIC_JETPACK; @@ -51,6 +51,7 @@ public static List getAllArmors() { // TODO ArmorProperties values not set here (and their original code was already deleted): // Electric Jetpack: 0, 0, 0 // Advanced Electric Jetpack: 0, 0, 0 + // Fueled Jetpack: 0, 0, 0 public static void init() { // todo get rid of this config... "stuff" @@ -59,6 +60,9 @@ public static void init() { .electricCost(2) .behaviors(NightvisionBehavior.INSTANCE)); + FUELED_JETPACK = register(ItemGTArmor.Builder.of(GTValues.MODID, "fueled_jetpack", EntityEquipmentSlot.CHEST) + .behaviors(new FueledJetpackBehavior(JetpackStats.FUELED, 16000, RecipeMaps.COMBUSTION_GENERATOR_FUELS))); + ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "electric_jetpack", EntityEquipmentSlot.CHEST) .electric(ConfigHolder.tools.voltageTierImpeller, 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2))) .behaviors(new ElectricJetpackBehavior(JetpackStats.ELECTRIC, 30)) @@ -66,7 +70,7 @@ public static void init() { ADVANCED_ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "advanced_electric_jetpack", EntityEquipmentSlot.CHEST) .electric(ConfigHolder.tools.voltageTierAdvImpeller, 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4))) - .behaviors(new ElectricJetpackBehavior(JetpackStats.ADVANCED_ELECTRIC, 480)) + .behaviors(new ElectricJetpackBehavior(JetpackStats.ADVANCED, 480)) .rarity(EnumRarity.RARE)); int energyPerUse = 512; @@ -149,7 +153,7 @@ public void registerSubItems() { // todo call setInvisible() on all of these OLD_NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(EntityEquipmentSlot.HEAD, "nightvision_goggles"); - MetaItems.SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); + OLD_SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "fueled_jetpack"); OLD_ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "electric_jetpack"); OLD_ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "advanced_electric_jetpack"); @@ -185,7 +189,7 @@ public static void registerLegacyConversionRecipes() { //addConversion(OLD_QUANTUM_CHESTPLATE, QUANTUM_CHESTPLATE.getStack()); //addConversion(OLD_QUANTUM_LEGGINGS, QUANTUM_LEGGINGS.getStack()); //addConversion(OLD_QUANTUM_BOOTS, QUANTUM_BOOTS.getStack()); - //addConversion(OLD_SEMIFLUID_JETPACK, SEMI_FLUID_JETPACK.getStack()); + addConversion(OLD_SEMIFLUID_JETPACK, FUELED_JETPACK.getStack()); addConversion(OLD_ELECTRIC_JETPACK, ELECTRIC_JETPACK.getStack()); //addConversion(OLD_ELECTRIC_JETPACK_ADVANCED, ADVANCED_ELECTRIC_JETPACK.getStack()); //addConversion(OLD_NANO_CHESTPLATE_ADVANCED, ADVANCED_NANO_CHESTPLATE.getStack()); diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index a28908aa79f..9007de73532 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -536,8 +536,6 @@ private MetaItems() {} public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_BOOTS; public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_HELMET; - public static ArmorMetaItem.ArmorMetaValueItem SEMIFLUID_JETPACK; - public static ArmorMetaItem.ArmorMetaValueItem NANO_CHESTPLATE_ADVANCED; public static ArmorMetaItem.ArmorMetaValueItem QUANTUM_CHESTPLATE_ADVANCED; diff --git a/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java index 1472d332512..ca3cf539964 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java @@ -26,9 +26,8 @@ import java.util.List; @Deprecated -public class AdvancedNanoMuscleSuite extends NanoMuscleSuite implements IJetpack { - - // A replacement for checking the current world time, to get around the gamerule that stops it +public class AdvancedNanoMuscleSuite extends NanoMuscleSuite { + //A replacement for checking the current world time, to get around the gamerule that stops it private long timer = 0L; private List, List>> inventoryIndexMap; @@ -44,22 +43,9 @@ public void onArmorTick(World world, EntityPlayer player, @NotNull ItemStack ite } NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("hover") && data.getBoolean("hover"); byte toggleTimer = data.hasKey("toggleTimer") ? data.getByte("toggleTimer") : 0; boolean canShare = data.hasKey("canShare") && data.getBoolean("canShare"); - if (toggleTimer == 0 && KeyBind.ARMOR_HOVER.isKeyDown(player)) { - hoverMode = !hoverMode; - toggleTimer = 5; - data.setBoolean("hover", hoverMode); - if (!world.isRemote) { - if (hoverMode) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable"), true); - else - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable"), true); - } - } - if (toggleTimer == 0 && KeyBind.ARMOR_CHARGING.isKeyDown(player)) { canShare = !canShare; toggleTimer = 5; @@ -77,8 +63,6 @@ else if (canShare) data.setBoolean("canShare", canShare); } - performFlying(player, hoverMode, item); - // Charging mechanics if (canShare && !world.isRemote) { // Check for new things to charge every 5 seconds @@ -126,7 +110,6 @@ else if (canShare) if (toggleTimer > 0) toggleTimer--; data.setBoolean("canShare", canShare); - data.setBoolean("hover", hoverMode); data.setByte("toggleTimer", toggleTimer); player.inventoryContainer.detectAndSendChanges(); @@ -148,12 +131,6 @@ public void addInfo(ItemStack itemStack, List lines) { lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); - String status = I18n.format("metaarmor.hud.status.disabled"); - if (data.hasKey("hover")) { - if (data.getBoolean("hover")) - status = I18n.format("metaarmor.hud.status.enabled"); - } - lines.add(I18n.format("metaarmor.hud.hover_mode", status)); super.addInfo(itemStack, lines); } @@ -203,12 +180,6 @@ public void drawHUD(ItemStack item) { "metaarmor.hud.status.disabled"; this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); } - - if (data.hasKey("hover")) { - String status = data.getBoolean("hover") ? "metaarmor.hud.status.enabled" : - "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("metaarmor.hud.hover_mode", I18n.format(status))); - } } this.HUD.draw(); this.HUD.reset(); @@ -218,77 +189,4 @@ public void drawHUD(ItemStack item) { public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { return "gregtech:textures/armor/advanced_nano_muscle_suite_1.png"; } - - @Override - public boolean canUseEnergy(@NotNull ItemStack stack, int amount) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return false; - return container.canUse(amount); - } - - @Override - public void drainEnergy(@NotNull ItemStack stack, int amount) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return; - container.discharge(amount, tier, true, false, false); - } - - @Override - public boolean hasEnergy(@NotNull ItemStack stack) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return false; - return container.getCharge() > 0; - } - - private static IElectricItem getIElectricItem(@NotNull ItemStack stack) { - return stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - } - - @Override - public double getSprintEnergyModifier() { - return 4.0D; - } - - @Override - public double getSprintSpeedModifier() { - return 1.8D; - } - - @Override - public double getVerticalHoverSpeed() { - return 0.4D; - } - - @Override - public double getVerticalHoverSlowSpeed() { - return 0.005D; - } - - @Override - public double getVerticalAcceleration() { - return 0.14D; - } - - @Override - public double getVerticalSpeed() { - return 0.8D; - } - - @Override - public double getSidewaysSpeed() { - return 0.19D; - } - - @Override - public EnumParticleTypes getParticle() { - return null; - } - - @Override - public float getFallDamageReduction() { - return 3.5f; - } } diff --git a/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java index 4a9c0f63ff9..c616ff5579c 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java @@ -28,9 +28,8 @@ import java.util.List; @Deprecated -public class AdvancedQuarkTechSuite extends QuarkTechSuite implements IJetpack { - - // A replacement for checking the current world time, to get around the gamerule that stops it +public class AdvancedQuarkTechSuite extends QuarkTechSuite { + //A replacement for checking the current world time, to get around the gamerule that stops it private long timer = 0L; private List, List>> inventoryIndexMap; @@ -46,22 +45,9 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack item) { } NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("hover") && data.getBoolean("hover"); byte toggleTimer = data.hasKey("toggleTimer") ? data.getByte("toggleTimer") : 0; boolean canShare = data.hasKey("canShare") && data.getBoolean("canShare"); - if (toggleTimer == 0 && KeyBind.ARMOR_HOVER.isKeyDown(player)) { - hoverMode = !hoverMode; - toggleTimer = 5; - data.setBoolean("hover", hoverMode); - if (!world.isRemote) { - if (hoverMode) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable"), true); - else - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable"), true); - } - } - if (toggleTimer == 0 && KeyBind.ARMOR_CHARGING.isKeyDown(player)) { canShare = !canShare; toggleTimer = 5; @@ -79,8 +65,6 @@ else if (canShare) data.setBoolean("canShare", canShare); } - performFlying(player, hoverMode, item); - if (player.isBurning()) player.extinguish(); @@ -131,7 +115,6 @@ else if (canShare) if (toggleTimer > 0) toggleTimer--; data.setBoolean("canShare", canShare); - data.setBoolean("hover", hoverMode); data.setByte("toggleTimer", toggleTimer); player.inventoryContainer.detectAndSendChanges(); @@ -152,12 +135,6 @@ public void addInfo(ItemStack itemStack, List lines) { } lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); - String status = I18n.format("metaarmor.hud.status.disabled"); - if (data.hasKey("hover")) { - if (data.getBoolean("hover")) - status = I18n.format("metaarmor.hud.status.enabled"); - } - lines.add(I18n.format("metaarmor.hud.hover_mode", status)); super.addInfo(itemStack, lines); } @@ -205,12 +182,6 @@ public void drawHUD(ItemStack item) { "metaarmor.hud.status.disabled"; this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); } - - if (data.hasKey("hover")) { - String status = data.getBoolean("hover") ? "metaarmor.hud.status.enabled" : - "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("metaarmor.hud.hover_mode", I18n.format(status))); - } } this.HUD.draw(); this.HUD.reset(); @@ -245,77 +216,4 @@ public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlo public double getDamageAbsorption() { return 1.5D; } - - @Override - public boolean canUseEnergy(@NotNull ItemStack stack, int amount) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return false; - return container.canUse(amount); - } - - @Override - public void drainEnergy(@NotNull ItemStack stack, int amount) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return; - container.discharge(amount, tier, true, false, false); - } - - @Override - public boolean hasEnergy(@NotNull ItemStack stack) { - IElectricItem container = getIElectricItem(stack); - if (container == null) - return false; - return container.getCharge() > 0; - } - - private static IElectricItem getIElectricItem(@NotNull ItemStack stack) { - return stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - } - - @Override - public double getSprintEnergyModifier() { - return 6.0D; - } - - @Override - public double getSprintSpeedModifier() { - return 2.4D; - } - - @Override - public double getVerticalHoverSpeed() { - return 0.45D; - } - - @Override - public double getVerticalHoverSlowSpeed() { - return 0.0D; - } - - @Override - public double getVerticalAcceleration() { - return 0.15D; - } - - @Override - public double getVerticalSpeed() { - return 0.9D; - } - - @Override - public double getSidewaysSpeed() { - return 0.21D; - } - - @Override - public EnumParticleTypes getParticle() { - return null; - } - - @Override - public float getFallDamageReduction() { - return 8f; - } } diff --git a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java index 15c41ff0ab8..5f333674346 100644 --- a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java @@ -22,23 +22,12 @@ protected int getFuelPerUse() { } @Override - protected boolean hasEnoughFuel(@NotNull ItemStack stack, int amount) { - IElectricItem electricItem = getElectricItem(stack); - return electricItem != null && electricItem.canUse(amount); - } - - @Override - protected void drainFuel(@NotNull ItemStack stack, int amount) { + protected boolean drainFuel(@NotNull ItemStack stack, int amount, boolean simulate) { IElectricItem electricItem = getElectricItem(stack); if (electricItem != null) { - electricItem.discharge(amount, Integer.MAX_VALUE, true, false, false); + return electricItem.discharge(amount, Integer.MAX_VALUE, true, false, simulate) >= amount; } - } - - @Override - protected boolean hasFuel(@NotNull ItemStack stack) { - IElectricItem electricItem = getElectricItem(stack); - return electricItem != null && electricItem.getCharge() > 0; + return false; } private static IElectricItem getElectricItem(@NotNull ItemStack stack) { diff --git a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java index c94fa79d709..34682dbff0f 100644 --- a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java @@ -1,51 +1,131 @@ package gregtech.common.items.armor; +import gregtech.api.capability.IFilter; import gregtech.api.capability.impl.GTFluidHandlerItemStack; +import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.jetpack.IJetpackStats; import gregtech.api.items.armoritem.jetpack.JetpackBehavior; +import gregtech.api.recipes.Recipe; +import gregtech.api.recipes.RecipeMap; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.Nonnull; +import java.util.Collections; +import java.util.Objects; + +/** + * Creates a Jetpack which runs on any Fuel in a provided fuel RecipeMap. + */ public class FueledJetpackBehavior extends JetpackBehavior { - //private final int maxCapacity; + private final int maxCapacity; + private final RecipeMap fuelMap; - public FueledJetpackBehavior(IJetpackStats jetpackStats) { + private Recipe recipe; + public FueledJetpackBehavior(IJetpackStats jetpackStats, int maxCapacity, RecipeMap fuelMap) { super(jetpackStats); + this.maxCapacity = maxCapacity; + this.fuelMap = fuelMap; } @Override protected int getFuelPerUse() { - - return 0; + return 1; } @Override - protected boolean hasEnoughFuel(@NotNull ItemStack stack, int amount) { + protected boolean drainFuel(@NotNull ItemStack stack, int amount, boolean simulate) { + IFluidHandlerItem fluidHandler = getFluidHandler(stack); + if (fluidHandler != null) { + // check that we have some amount of fuel here. + FluidStack currentFuel = fluidHandler.drain(amount, false); + if (currentFuel == null) return false; + // grab the recipe if we haven't already. + // don't need to worry about resetting as our fluid handler does this for us. + if (recipe == null) { + recipe = getRecipe(currentFuel); + } + + // do the "drain" if we are not simulating. + // either decrementing our timer, or draining new fuel and restarting the timer + if (!simulate) { + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + short burnTimer = tag.getShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER); + if (burnTimer == 0) { + // timer is zero, drain some fuel and restart it + fluidHandler.drain(amount, true); + burnTimer = (short) recipe.getDuration(); + } else { + // timer is non-zero, just decrement the timer + burnTimer--; + } + tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, burnTimer); + } + return true; + } return false; } - @Override - protected void drainFuel(@NotNull ItemStack stack, int amount) { + private IFluidHandlerItem getFluidHandler(ItemStack stack) { + return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + } + private Recipe getRecipe(@NotNull FluidStack fuel) { + return fuelMap.find(Collections.emptyList(), Collections.singletonList(fuel), Objects::nonNull); } @Override - protected boolean hasFuel(@NotNull ItemStack stack) { + public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + return new FueledJetpackItemStack(stack, maxCapacity) + .setFilter(new FueledJetpackFilter()) + .setCanDrain(false); + } - return false; + private final class FueledJetpackFilter implements IFilter { + + @Override + public boolean test(@Nonnull FluidStack fluidStack) { + return getRecipe(fluidStack) != null; + } + + @Override + public int getPriority() { + return IFilter.whitelistLikePriority(); + } } - @Override - public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { - //return new GTFluidHandlerItemStack(stack, maxCapacity) - // .setFilter() - // .setCanDrain(false); - return null; + /* Override class to automatically clear our cached state when the tank is fully emptied. */ + private final class FueledJetpackItemStack extends GTFluidHandlerItemStack { + + public FueledJetpackItemStack(@Nonnull ItemStack container, int capacity) { + super(container, capacity); + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) { + FluidStack drained = super.drain(resource, doDrain); + if (doDrain && this.getFluid() == null) { + recipe = null; + } + return drained; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + FluidStack drained = super.drain(maxDrain, doDrain); + if (doDrain && this.getFluid() == null) { + recipe = null; + } + return drained; + } } } diff --git a/src/main/java/gregtech/common/items/armor/JetpackStats.java b/src/main/java/gregtech/common/items/armor/JetpackStats.java index f027f475ba8..9f070ad02f3 100644 --- a/src/main/java/gregtech/common/items/armor/JetpackStats.java +++ b/src/main/java/gregtech/common/items/armor/JetpackStats.java @@ -6,11 +6,11 @@ public enum JetpackStats implements IJetpackStats { - SEMI_FLUID_FUELED (1.0f, 1.0f, 0.18f, 0.14f , 0.1f , 0.22f, 0.0f , 0.0f, EnumParticleTypes.SMOKE_LARGE), - ELECTRIC (1.0f, 1.0f, 0.18f, 0.1f , 0.12f, 0.3f , 0.08f, 0.0f, EnumParticleTypes.SMOKE_NORMAL), - ADVANCED_ELECTRIC (2.5f, 1.3f, 0.34f, 0.03f , 0.13f, 0.48f, 0.14f, 2.0f, EnumParticleTypes.CLOUD), - ADVANCED_NANO_CHESTPLATE (4.0f, 1.8f, 0.4f , 0.005f, 0.14f, 0.8f , 0.19f, 3.5f, null), - ADVANCED_QUANTUM_CHESTPLATE(6.0f, 2.4f, 0.45f, 0.0f , 0.15f, 0.9f , 0.21f, 8.0f, null); + FUELED (1.0f, 1.0f, 0.18f, 0.14f , 0.1f , 0.22f, 0.0f , 0.0f, EnumParticleTypes.SMOKE_LARGE), + ELECTRIC (1.0f, 1.0f, 0.18f, 0.1f , 0.12f, 0.3f , 0.08f, 0.0f, EnumParticleTypes.SMOKE_NORMAL), + ADVANCED (2.5f, 1.3f, 0.34f, 0.03f , 0.13f, 0.48f, 0.14f, 2.0f, EnumParticleTypes.CLOUD), + NANO (4.0f, 1.8f, 0.4f , 0.005f, 0.14f, 0.8f , 0.19f, 3.5f, null), + QUANTUM (6.0f, 2.4f, 0.45f, 0.0f , 0.15f, 0.9f , 0.21f, 8.0f, null); private final float sprintEnergyMod; private final float sprintSpeedMod; diff --git a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java index ef7c55c71ea..7f6710878a9 100644 --- a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java +++ b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java @@ -44,7 +44,7 @@ import java.util.Objects; @Deprecated -public class PowerlessJetpack implements ISpecialArmorLogic, IJetpack, IItemHUDProvider { +public class PowerlessJetpack { public static final int tankCapacity = 16000; @@ -61,66 +61,25 @@ public PowerlessJetpack() { HUD = new ArmorUtils.ModularHUD(); } - @Override public void onArmorTick(World world, EntityPlayer player, @NotNull ItemStack stack) { - IFluidHandlerItem internalTank = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, - null); + IFluidHandlerItem internalTank = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); if (internalTank == null) return; NBTTagCompound data = GTUtility.getOrCreateNbtCompound(stack); - byte toggleTimer = 0; - boolean hover = false; if (data.hasKey("burnTimer")) burnTimer = data.getShort("burnTimer"); - if (data.hasKey("toggleTimer")) toggleTimer = data.getByte("toggleTimer"); - if (data.hasKey("hover")) hover = data.getBoolean("hover"); - - if (toggleTimer == 0 && KeyBind.ARMOR_HOVER.isKeyDown(player)) { - hover = !hover; - toggleTimer = 5; - data.setBoolean("hover", hover); - if (!world.isRemote) { - if (hover) - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable"), true); - else - player.sendStatusMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable"), true); - } - } // This causes a caching issue. currentRecipe is only set to null in findNewRecipe, so the fuel is never updated // Rewrite in Armor Rework if (currentRecipe == null) findNewRecipe(stack); - performFlying(player, hover, stack); - if (toggleTimer > 0) - toggleTimer--; - - data.setBoolean("hover", hover); data.setShort("burnTimer", (short) burnTimer); - data.setByte("toggleTimer", toggleTimer); - player.inventoryContainer.detectAndSendChanges(); - } - - @Override - public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { - return EntityEquipmentSlot.CHEST; - } - - @Override - public void addToolComponents(@NotNull ArmorMetaValueItem mvi) { - mvi.addComponents(new Behaviour(tankCapacity)); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/liquid_fuel_jetpack.png"; } @SideOnly(Side.CLIENT) - @Override public void drawHUD(@NotNull ItemStack item) { IFluidHandlerItem tank = item.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); if (tank != null) { @@ -148,12 +107,6 @@ public void drawHUD(@NotNull ItemStack item) { this.HUD.reset(); } - @Override - public int getEnergyPerUse() { - return 1; - } - - @Override public boolean canUseEnergy(ItemStack stack, int amount) { FluidStack fuel = getFuel(); if (fuel == null) { @@ -171,7 +124,6 @@ public boolean canUseEnergy(ItemStack stack, int amount) { return fluidStack.amount >= fuel.amount; } - @Override public void drainEnergy(ItemStack stack, int amount) { if (this.burnTimer == 0) { FluidStack fuel = getFuel(); @@ -182,7 +134,6 @@ public void drainEnergy(ItemStack stack, int amount) { this.burnTimer--; } - @Override public boolean hasEnergy(ItemStack stack) { return burnTimer > 0 || currentRecipe != null; } @@ -226,37 +177,7 @@ public FluidStack getFuel() { return null; } - public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { - if (player.getHeldItem(hand).getItem() instanceof ArmorMetaItem) { - ItemStack armor = player.getHeldItem(hand); - if (armor.getItem() instanceof ArmorMetaItem && player.inventory.armorInventory - .get(getEquipmentSlot(player.getHeldItem(hand)).getIndex()).isEmpty() && !player.isSneaking()) { - player.inventory.armorInventory.set(getEquipmentSlot(player.getHeldItem(hand)).getIndex(), - armor.copy()); - player.setHeldItem(hand, ItemStack.EMPTY); - player.playSound(new SoundEvent(new ResourceLocation("item.armor.equip_generic")), 1.0F, 1.0F); - return ActionResult.newResult(EnumActionResult.SUCCESS, armor); - } - } - - return ActionResult.newResult(EnumActionResult.PASS, player.getHeldItem(hand)); - } - - @Override - public ISpecialArmor.ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, - @NotNull DamageSource source, double damage, - EntityEquipmentSlot equipmentSlot) { - int damageLimit = (int) Math.min(Integer.MAX_VALUE, burnTimer * 1.0 / 32 * 25.0); - if (source.isUnblockable()) return new ISpecialArmor.ArmorProperties(0, 0.0, 0); - return new ISpecialArmor.ArmorProperties(0, 0, damageLimit); - } - - @Override - public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { - return 0; - } - - public class Behaviour implements IItemDurabilityManager, IItemCapabilityProvider, IItemBehaviour, ISubItemHandler { + public class Behaviour { private static final IFilter JETPACK_FUEL_FILTER = new IFilter<>() { @@ -280,10 +201,8 @@ public Behaviour(int internalCapacity) { this.durabilityBarColors = GradientUtil.getGradient(0xB7AF08, 10); } - @Override public double getDurabilityForDisplay(@NotNull ItemStack itemStack) { - IFluidHandlerItem fluidHandlerItem = itemStack - .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + IFluidHandlerItem fluidHandlerItem = itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); if (fluidHandlerItem == null) return 0; IFluidTankProperties fluidTankProperties = fluidHandlerItem.getTankProperties()[0]; FluidStack fluidStack = fluidTankProperties.getContents(); @@ -291,40 +210,10 @@ public double getDurabilityForDisplay(@NotNull ItemStack itemStack) { } @Nullable - @Override public Pair getDurabilityColorsForDisplay(ItemStack itemStack) { return durabilityBarColors; } - @Override - public ICapabilityProvider createProvider(ItemStack itemStack) { - return new GTFluidHandlerItemStack(itemStack, maxCapacity) - .setFilter(JETPACK_FUEL_FILTER); - } - - @Override - public void addInformation(ItemStack itemStack, List lines) { - IItemBehaviour.super.addInformation(itemStack, lines); - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); - String status = I18n.format("metaarmor.hud.status.disabled"); - if (data.hasKey("hover")) { - if (data.getBoolean("hover")) - status = I18n.format("metaarmor.hud.status.enabled"); - } - lines.add(I18n.format("metaarmor.hud.hover_mode", status)); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - return onRightClick(world, player, hand); - } - - @Override - public String getItemSubType(ItemStack itemStack) { - return ""; - } - - @Override public void getSubItems(ItemStack itemStack, CreativeTabs creativeTab, NonNullList subItems) { ItemStack copy = itemStack.copy(); IFluidHandlerItem fluidHandlerItem = copy diff --git a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java index d1e4056b265..0d9cc533ea7 100644 --- a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java @@ -307,7 +307,7 @@ private static void loadCraftingRecipes() { 'G', new UnificationEntry(OrePrefix.dust, Gunpowder)); ModHandler.addShapedRecipe("nightvision_goggles", ArmorItems.NIGHTVISION_GOGGLES.getStack(), "CSC", "RBR", "LdL", 'C', new UnificationEntry(OrePrefix.circuit, Tier.ULV), 'S', new UnificationEntry(OrePrefix.screw, Steel), 'R', new UnificationEntry(OrePrefix.ring, Rubber), 'B', MetaItems.BATTERY_LV_SODIUM, 'L', new UnificationEntry(OrePrefix.lens, Glass)); - ModHandler.addShapedRecipe("fluid_jetpack", MetaItems.SEMIFLUID_JETPACK.getStackForm(), "xCw", "SUS", "RIR", 'C', new UnificationEntry(OrePrefix.circuit, Tier.LV), 'S', MetaItems.FLUID_CELL_LARGE_STEEL.getStackForm(), 'U', MetaItems.ELECTRIC_PUMP_LV.getStackForm(), 'R', new UnificationEntry(OrePrefix.rotor, Lead), 'I', new UnificationEntry(OrePrefix.pipeSmallFluid, Potin)); + ModHandler.addShapedRecipe("fueled_jetpack", ArmorItems.FUELED_JETPACK.getStack(), "xCw", "SUS", "RIR", 'C', new UnificationEntry(OrePrefix.circuit, Tier.LV), 'S', MetaItems.FLUID_CELL_LARGE_STEEL.getStackForm(), 'U', MetaItems.ELECTRIC_PUMP_LV.getStackForm(), 'R', new UnificationEntry(OrePrefix.rotor, Lead), 'I', new UnificationEntry(OrePrefix.pipeSmallFluid, Potin)); ModHandler.addShapedRecipe("electric_jetpack", ArmorItems.ELECTRIC_JETPACK.getStack(), "xCd", "TBT", "I I", 'C', new UnificationEntry(OrePrefix.circuit, Tier.MV), 'T', MetaItems.POWER_THRUSTER.getStackForm(), 'B', MetaItems.BATTERY_MV_LITHIUM.getStackForm(), 'I', new UnificationEntry(OrePrefix.wireGtDouble, AnnealedCopper)); ModHandler.addShapedRecipe("electric_jetpack_advanced", ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), "xJd", "TBT", "WCW", 'J', ArmorItems.ELECTRIC_JETPACK.getStack(), 'T', MetaItems.POWER_THRUSTER_ADVANCED.getStackForm(), 'B', ENERGIUM_CRYSTAL.getStackForm(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Gold), 'C', new UnificationEntry(OrePrefix.circuit, Tier.HV)); ModHandler.addShapedRecipe("nano_helmet", ArmorItems.NANO_HELMET.getStack(), "PPP", "PNP", "xEd", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', ArmorItems.NIGHTVISION_GOGGLES.getStack(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); diff --git a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java index 13606711c42..8307464712c 100644 --- a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java @@ -23,6 +23,7 @@ import gregtech.common.blocks.BlockTurbineCasing.TurbineCasingType; import gregtech.common.blocks.BlockWireCoil.CoilType; import gregtech.common.blocks.StoneVariantBlock.StoneVariant; +import gregtech.common.items.ArmorItems; import gregtech.common.items.MetaItems; import gregtech.common.metatileentities.MetaTileEntities; import gregtech.common.metatileentities.storage.MetaTileEntityQuantumChest; @@ -1397,11 +1398,15 @@ private static void registerNBTRemoval() { ORE_DICTIONARY_FILTER.getStackForm(), ORE_DICTIONARY_FILTER); // Jetpacks + //Jetpacks + ModHandler.addShapelessRecipe("fueled_jetpack_nbt", ArmorItems.FUELED_JETPACK.getStack(), ArmorItems.FUELED_JETPACK.getStack()); + ModHandler.addShapelessRecipe("fluid_jetpack_clear", SEMIFLUID_JETPACK.getStackForm(), SEMIFLUID_JETPACK.getStackForm()); // ClipBoard ModHandler.addShapelessNBTClearingRecipe("clipboard_nbt", CLIPBOARD.getStackForm(), CLIPBOARD.getStackForm()); + } private static void ConvertHatchToHatch() { diff --git a/src/main/resources/assets/gregtech/blockstates/metaitems/fueled_jetpack.json b/src/main/resources/assets/gregtech/blockstates/metaitems/fueled_jetpack.json new file mode 100644 index 00000000000..3734aa63b1f --- /dev/null +++ b/src/main/resources/assets/gregtech/blockstates/metaitems/fueled_jetpack.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": { + "model": "forge:forgebucket", + "textures": { + "base": "gregtech:items/armors/fueled_jetpack_item_base", + "fluid": "gregtech:items/armors/fueled_jetpack_item_overlay", + "cover": "gregtech:items/armors/fueled_jetpack_item_base" + }, + "transform": "forge:default-item" + } + } +} diff --git a/src/main/resources/assets/gregtech/blockstates/metaitems/liquid_fuel_jetpack.json b/src/main/resources/assets/gregtech/blockstates/metaitems/liquid_fuel_jetpack.json index 0bb8886d305..3734aa63b1f 100644 --- a/src/main/resources/assets/gregtech/blockstates/metaitems/liquid_fuel_jetpack.json +++ b/src/main/resources/assets/gregtech/blockstates/metaitems/liquid_fuel_jetpack.json @@ -1,14 +1,14 @@ -{ - "forge_marker": 1, - "variants": { - "inventory": { - "model": "forge:forgebucket", - "textures": { - "base": "gregtech:items/metaitems/liquid_fuel_jetpack/base", - "fluid": "gregtech:items/metaitems/liquid_fuel_jetpack/overlay", - "cover": "gregtech:items/metaitems/liquid_fuel_jetpack/base" - }, - "transform": "forge:default-item" - } - } -} \ No newline at end of file +{ + "forge_marker": 1, + "variants": { + "inventory": { + "model": "forge:forgebucket", + "textures": { + "base": "gregtech:items/armors/fueled_jetpack_item_base", + "fluid": "gregtech:items/armors/fueled_jetpack_item_overlay", + "cover": "gregtech:items/armors/fueled_jetpack_item_base" + }, + "transform": "forge:default-item" + } + } +} diff --git a/src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_2.png b/src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_2.png deleted file mode 100644 index 7229db8b102981b5e5300c5c4193e38b33c6b960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4487 zcmc&%c{r5o-+yeS38{n@8KaG2W*FOKvW}%1V;O6tF*7pE*38HfSt5lfMZ&QZBTIB7 zm55RlhmagN$#r`h z>=okbHew&;xk$erVr_S@r*+*=v^@|Hbt|z*xn^sT>a&JX7BMTI#8B~k87{uv`o7ut ziZF>sMJFs`WTX-Xr+ynW+SDd?#i!@DlMW{*-AayjoGatEyioE@7mu_{FF0Bf2*__g z@=$qDARXC*yE}$z6h-K$^7cxoAG*7dqIL?>UiZ9c8B+3(+#G-TRgpz@eR}eE)1r%_ zjrI`s0`GSK{O*E>PVS9`1SMdsn^hlBGbQcg>iYe~T$F`YmNnU;_sZIBe zYTW6)YrCE~C_NTP973wn3{>v8+$^mXM$BVY_e@e4Io8sqyD&=bX2E&d5zflH&yV;t zvDV88h@k}XT?5uFv6Z*5RUWYuipFvgKz$>AZqmu*G05Z!mW?|H09LMD9AZF5mNEcH z6;cUqTsPc)G>J*qCNA=;9ZY9|XaF!a31$&V0TeFOhjN(8z`z7|>tIkS83S|G!y#}i z3yL4rCX`Ka3biAULIX%fWSGewsBthF6hNnNiO^s=jln?&V_@IqqQUv%G8_i|4&er1 zU_S!thO>uSFxeESp0>Ug35n8!8W?FK^>tB3M!TRo2&5q#VF*X+Y9aN}CPOOJ#?Xc-#m zBDM5Uz9@L3kuQ3zctBoc{5n(0^=VD-)P3=Iv9^ej*)WB6jtfCr#I zWy1hm#P18G=7K;@}q!4 z{~<+xz&K1_ZV-`8F*^)K?pJR7Qx(8}aqzb?{P z*mBumZ(aGeA`k!|7PgjVgy5`Cp8bse-gREaHK$Sv8sS#J_7IKu%ZS-N{D=I%{$HYpFg!^T8v zFxGi<>8e~5j!tw>8)g}%+xsLwt|d`RE)InidbiB@B-*~iLhk{p+imdqvF{hH? zVQe;H(gf3lLZB@b*#*aTcFlKHhnvhBt(OfZ19b+4(*dUpUsJsluH73!qj01&CDKDs zT7MN!8L)%29>{mik~e?aCp7x(7hY)?9>4+ zFFUcfFsxD5SV{M4>MeSJxJ`!w)}hz9wx9&4jp&YaO11HdKVHtjHQ5&&MY1yagG%-IXYI-8wnq8vx^(f$%(fCbQswBeok#Xw1qRSyGzd+hLCkq}* zs5SaUZIaNO-RmFWpit#kEhT#|gJ+h(^UGM~?3_1(zCfYUot=j#CZ5B-boo=}#KIGL zdM&gF;k(W5v&R$=sTao2EaSYAx_UQH?Yg%~8h&k@cG%Fdt!KptY5Kl5J!xr_Dq^L7 z>pMN1_~wBon!bfsPc6*OtEW-!r7=+~i)TeU#rGAx>~$?ah|v!lBv&uj`evVt>zH!1 zYLrzd&ej5wN6+%_+#Fw3=it9ADFOBBwKFTj(eX}X;ZU2?ZM?V8i|)Ght*24{Q?_A>ed4{Gx;@-x%B@vnZu1VQJAr^^q zc2>leyOg}0o>l~QwX~nN754wBXg5QREgugEV9>D*xYrE$_{B;D|U@Y z9ZF0z$ds+>zb0jwSe429=-k^}F`7!EBFU@oH5_X0S?Gd&40^#66g~ePmtgm*8l&!q z`1o|Wv|vM+6#K)2<&m`C-O}-8#gLHfFOui@M*5ku+Vk^D50xF}KINo8+=KJGh!;R8N8#Nt%9lgmSkLwJlg%;{osNXwP03@r?^|5ydS-A}(@IfjX*v>Qgpy z3PJr~LxB2=Q8OBy6!W_C4G*uFmy4P{$I~b)FTcXz@mT1wfdLg@sMTaX{(bV+_?(>& zGq=7@4gl{HIn%v!dm17b#{r-wTvWwZ3@(fkD_vz;^s?Bv^u%Wwi}i_4I+Q0|H4x#E!EImDV-xux|kgZ=cp#d^>Vx z8oyG(#3VIcII*H6Sw`mL2A{-U!53bBpx2jP^K0342Dpy9Y8bBD!v-mxvkAy;8|G$f zGP-Tma?s{o3W;-~`gn+|b1FU5LE-91-|W5=$#ULcB zG)QP`Yya^;Z>(LkDoYhe2)`{?(Fnd%-?Ua(83noS(KGh-pcOHSNmIAoRt0{5#b5rgF3P5kAX6L7 z18@`Zm`fHG4 zBG_<*g$s^xkbI-sY`4(vXZuf>Cn5Vx{GVM&8EpuC;Cti#+#Kf5>M`f7A2;6%n~5G^ z1fizS9w99M9Q4|FN0{o1fa5q5yDSm}a8W$COR<|z)7Ks83>ojAJ3hEmo4W1F%ss0S z&mM49@tND9TmA0dH3Rw7*S21sKV=pdw$@Atj+X)oNtU=qlsM<-=BDPAFgO>bCYGe8 zD3oWGWGJ|M`UZqI@`*DrFiLp3IEGZ*dV71L*WmyWwg>jP?S6fa9$ipnbw7A9w1(Y1 z{bS^j^be{oF;=^}p9vmuoFlWUaMhCQUhFGHe%A(Dm|L1Z{4+u4WQNJ9Ww)NBvjgpg zfPd4oLVI8D%1b})dwETX{xubby9?D%UOZcystXg&IyB+N#?iNcb-|5#-49Yyx6dNYvg{{?9?Bp ze(Sf#U)yaf-g-{^LHRBDU)$@yzGY-!(0Tm50On{Y-SG7rCyQOnj)%(@O#}&fy85}S Ib4q9e0JFES;Q#;t diff --git a/src/main/resources/assets/gregtech/textures/armor/liquid_fuel_jetpack.png b/src/main/resources/assets/gregtech/textures/items/armors/fueled_jetpack.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/armor/liquid_fuel_jetpack.png rename to src/main/resources/assets/gregtech/textures/items/armors/fueled_jetpack.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/liquid_fuel_jetpack/base.png b/src/main/resources/assets/gregtech/textures/items/armors/fueled_jetpack_item_base.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/items/metaitems/liquid_fuel_jetpack/base.png rename to src/main/resources/assets/gregtech/textures/items/armors/fueled_jetpack_item_base.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/liquid_fuel_jetpack/overlay.png b/src/main/resources/assets/gregtech/textures/items/armors/fueled_jetpack_item_overlay.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/items/metaitems/liquid_fuel_jetpack/overlay.png rename to src/main/resources/assets/gregtech/textures/items/armors/fueled_jetpack_item_overlay.png From b51296358160c48fd7f1692ec0414d923e3324c2 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Mon, 3 Jul 2023 03:02:00 -0500 Subject: [PATCH 07/12] clean out more old armor code --- .../api/items/armor/ArmorLogicSuite.java | 22 -- .../api/items/armor/ArmorMetaItem.java | 16 +- .../gregtech/api/items/armor/ArmorUtils.java | 32 --- .../gregtech/api/items/armor/IArmorItem.java | 5 - .../gregtech/api/items/armor/IArmorLogic.java | 3 - .../armoritem/jetpack/JetpackBehavior.java | 3 + .../gregtech/asm/hooks/ArmorRenderHooks.java | 5 +- .../gregtech/common/items/ArmorItems.java | 5 + .../items/armor/FueledJetpackBehavior.java | 21 ++ .../gregtech/common/items/armor/IJetpack.java | 110 --------- .../common/items/armor/PowerlessJetpack.java | 229 ------------------ .../item/metaitems/nightvision_goggles.json | 2 +- .../models/item/metaitems/nms.boots.json | 2 +- .../models/item/metaitems/nms.chestplate.json | 2 +- .../models/item/metaitems/nms.helmet.json | 2 +- .../models/item/metaitems/nms.leggings.json | 2 +- .../items/metaitems/nightvision_goggles.png | Bin 247 -> 0 bytes .../textures/items/metaitems/nms.boots.png | Bin 3120 -> 0 bytes .../items/metaitems/nms.chestplate.png | Bin 3189 -> 0 bytes .../textures/items/metaitems/nms.helmet.png | Bin 3231 -> 0 bytes .../textures/items/metaitems/nms.leggings.png | Bin 3137 -> 0 bytes 21 files changed, 37 insertions(+), 424 deletions(-) delete mode 100644 src/main/java/gregtech/api/items/armor/IArmorItem.java delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nightvision_goggles.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.boots.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.chestplate.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.helmet.png delete mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.leggings.png diff --git a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java index c383833de3c..8c8ba7fdcfd 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java +++ b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java @@ -2,8 +2,6 @@ import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; -import gregtech.api.items.metaitem.ElectricStats; import gregtech.api.items.metaitem.stats.IItemHUDProvider; import net.minecraft.client.resources.I18n; @@ -64,22 +62,6 @@ public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { } } - @Override - public void addToolComponents(ArmorMetaValueItem mvi) { - mvi.addComponents(new ElectricStats(maxCapacity, tier, true, false) { - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - return onRightClick(world, player, hand); - } - - @Override - public void addInformation(ItemStack itemStack, List lines) { - addInfo(itemStack, lines); - } - }); - } - public void addInfo(ItemStack itemStack, List lines) { int armor = (int) Math.round(20.0F * this.getAbsorption(itemStack) * this.getDamageAbsorption()); if (armor > 0) @@ -130,10 +112,6 @@ public boolean shouldDrawHUD() { return this.SLOT == EntityEquipmentSlot.CHEST; } - public int getEnergyPerUse() { - return this.energyPerUse; - } - protected float getAbsorption(ItemStack itemStack) { switch (this.getEquipmentSlot(itemStack)) { case HEAD: diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index 9f5e72e459a..ebd489daee8 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -3,8 +3,6 @@ import com.google.common.base.Preconditions; import gregtech.api.GregTechAPI; import gregtech.api.items.metaitem.MetaItem; -import gregtech.api.items.metaitem.stats.IItemComponent; -import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import gregtech.common.creativetab.GTCreativeTabs; @@ -29,8 +27,7 @@ import java.util.List; @Deprecated -public class ArmorMetaItem.ArmorMetaValueItem> extends MetaItem - implements IArmorItem, ISpecialArmor, IEnchantabilityHelper { +public class ArmorMetaItem.ArmorMetaValueItem> extends MetaItem implements ISpecialArmor { public ArmorMetaItem() { super((short) 0); @@ -120,17 +117,6 @@ public ArmorMetaValueItem setArmorLogic(IArmorLogic armorLogic) { return this; } - @Override - public ArmorMetaValueItem addComponents(IItemComponent... stats) { - super.addComponents(stats); - return this; - } - - @Override - public ArmorMetaValueItem setModelAmount(int modelAmount) { - return (ArmorMetaValueItem) super.setModelAmount(modelAmount); - } - @Override public ArmorMetaValueItem setRarity(EnumRarity rarity) { return (ArmorMetaValueItem) super.setRarity(rarity); diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java index 77630215354..256f615cba2 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorUtils.java +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -7,14 +7,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; -import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.util.*; -import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -32,7 +28,6 @@ public class ArmorUtils { public static final Side SIDE = FMLCommonHandler.instance().getSide(); - public static final SoundEvent JET_ENGINE = new SoundEvent(new ResourceLocation("gregtech:jet_engine")); /** * Check is possible to charge item @@ -100,33 +95,6 @@ public static List, List>> getChargeableIte return inventorySlotMap; } - public static void playJetpackSound(@Nonnull EntityPlayer player) { - if (player.world.isRemote) { - float cons = (float) player.motionY + player.moveForward; - cons = MathHelper.clamp(cons, 0.6F, 1.0F); - - if (player.motionY > 0.05F) { - cons += 0.1F; - } - - if (player.motionY < -0.05F) { - cons -= 0.4F; - } - - player.playSound(JET_ENGINE, 0.3F, cons); - } - } - - /** - * Resets private field, amount of ticks player in the sky - */ - public static void resetPlayerFloatingTime(EntityPlayer player) { - if (player instanceof EntityPlayerMP) { - ObfuscationReflectionHelper.setPrivateValue(NetHandlerPlayServer.class, - ((EntityPlayerMP) player).connection, 0, "field_147365_f", "floatingTickCount"); - } - } - /** * This method feeds player with food, if food heal amount more than * empty food gaps, then reminder adds to saturation diff --git a/src/main/java/gregtech/api/items/armor/IArmorItem.java b/src/main/java/gregtech/api/items/armor/IArmorItem.java deleted file mode 100644 index 7362523a62d..00000000000 --- a/src/main/java/gregtech/api/items/armor/IArmorItem.java +++ /dev/null @@ -1,5 +0,0 @@ -package gregtech.api.items.armor; - -@Deprecated -public interface IArmorItem { -} diff --git a/src/main/java/gregtech/api/items/armor/IArmorLogic.java b/src/main/java/gregtech/api/items/armor/IArmorLogic.java index be4f139032c..c6c2c934659 100644 --- a/src/main/java/gregtech/api/items/armor/IArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/IArmorLogic.java @@ -12,9 +12,6 @@ @Deprecated public interface IArmorLogic { - default void addToolComponents(ArmorMetaValueItem metaValueItem) { - } - EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack); default void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java index a61204dba24..db18ca02d3f 100644 --- a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java @@ -102,6 +102,9 @@ private void performFlying(@NotNull EntityPlayer player, @NotNull ItemStack stac spawnParticle(player.getEntityWorld(), player, jetpackStats.getParticle()); } } + // TODO Reset player floating time? + // TODO Emergency hover? + // TODO Jetpack sfx? } /* Spawn particle behind player with speedY speed */ diff --git a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java index c31c12aa7df..5443c1b1170 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java @@ -1,7 +1,6 @@ package gregtech.asm.hooks; -import gregtech.api.items.armor.IArmorItem; - +import gregtech.api.items.armor.ArmorMetaItem; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.GlStateManager; @@ -27,7 +26,7 @@ public static boolean shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) } public static boolean isArmorItem(ItemStack itemStack, EntityEquipmentSlot slot) { - return (itemStack.getItem() instanceof IArmorItem && itemStack.getItem().getEquipmentSlot(itemStack) == slot); + return (itemStack.getItem() instanceof ArmorMetaItem && itemStack.getItem().getEquipmentSlot(itemStack) == slot); } public static void renderArmorLayer(LayerArmorBase layer, EntityLivingBase entity, float limbSwing, diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java index ff061937b0c..c0580ce294e 100644 --- a/src/main/java/gregtech/common/items/ArmorItems.java +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -53,6 +53,11 @@ public static List getAllArmors() { // Advanced Electric Jetpack: 0, 0, 0 // Fueled Jetpack: 0, 0, 0 + // TODO Other information from deleted files: + // Fueled Jetpack: + // - Default subitem is filled with Diesel + // - Durability bar colors: GradientUtil.getGradient(0xB7AF08, 10) + public static void init() { // todo get rid of this config... "stuff" NIGHTVISION_GOGGLES = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nightvision_goggles", EntityEquipmentSlot.HEAD) diff --git a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java index 34682dbff0f..afb585ae83e 100644 --- a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java @@ -7,17 +7,20 @@ import gregtech.api.items.armoritem.jetpack.JetpackBehavior; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; import java.util.Collections; +import java.util.List; import java.util.Objects; /** @@ -83,6 +86,24 @@ private Recipe getRecipe(@NotNull FluidStack fuel) { return fuelMap.find(Collections.emptyList(), Collections.singletonList(fuel), Objects::nonNull); } + @Override + public void addHudInformation(@NotNull ItemStack stack, @NotNull List hudText) { + IFluidHandlerItem fluidHandler = getFluidHandler(stack); + if (fluidHandler != null) { + IFluidTankProperties[] properties = fluidHandler.getTankProperties(); + if (properties[0] != null) { + FluidStack fuel = properties[0].getContents(); + int capacity = properties[0].getCapacity(); + if (fuel != null && fuel.amount != 0) { + String formatted = String.format("%.1f", fuel.amount * 100.0F / capacity); + hudText.add(I18n.format("metaarmor.hud.fuel_lvl", formatted + "%")); + } + } + } + // call super last so that fuel HUD info is in the same spot that energy would be + super.addHudInformation(stack, hudText); + } + @Override public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { return new FueledJetpackItemStack(stack, maxCapacity) diff --git a/src/main/java/gregtech/common/items/armor/IJetpack.java b/src/main/java/gregtech/common/items/armor/IJetpack.java index c68ca3441fb..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/IJetpack.java +++ b/src/main/java/gregtech/common/items/armor/IJetpack.java @@ -1,110 +0,0 @@ -package gregtech.common.items.armor; - -import gregtech.api.items.armor.ArmorUtils; -import gregtech.api.util.input.KeyBind; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumParticleTypes; - -import org.jetbrains.annotations.NotNull; - -/** - * Logic from SimplyJetpacks2: - * https://github.com/Tomson124/SimplyJetpacks2/blob/1.12/src/main/java/tonius/simplyjetpacks/item/ItemJetpack.java - */ -@Deprecated -public interface IJetpack { - - default double getSprintEnergyModifier() { - return 1.0D; - } - - default double getSprintSpeedModifier() { - return 1.0D; - } - - default double getVerticalHoverSpeed() { - return 0.18D; - } - - default double getVerticalHoverSlowSpeed() { - return 0.14D; - } - - default double getVerticalAcceleration() { - return 0.1D; - } - - default double getVerticalSpeed() { - return 0.22D; - } - - default double getSidewaysSpeed() { - return 0.0D; - } - - default EnumParticleTypes getParticle() { - return EnumParticleTypes.SMOKE_LARGE; - } - - default float getFallDamageReduction() { - return 0.0f; - } - - int getEnergyPerUse(); - - boolean canUseEnergy(ItemStack stack, int amount); - - void drainEnergy(ItemStack stack, int amount); - - boolean hasEnergy(ItemStack stack); - - default void performFlying(@NotNull EntityPlayer player, boolean hover, ItemStack stack) { - double currentAccel = getVerticalAcceleration() * (player.motionY < 0.3D ? 2.5D : 1.0D); - double currentSpeedVertical = getVerticalSpeed() * (player.isInWater() ? 0.4D : 1.0D); - boolean flyKeyDown = KeyBind.VANILLA_JUMP.isKeyDown(player); - boolean descendKeyDown = KeyBind.VANILLA_SNEAK.isKeyDown(player); - - if (!player.isInWater() && !player.isInLava() && canUseEnergy(stack, getEnergyPerUse())) { - if (flyKeyDown || hover && !player.onGround) { - drainEnergy(stack, (int) (player.isSprinting() ? - Math.round(getEnergyPerUse() * getSprintEnergyModifier()) : getEnergyPerUse())); - - if (hasEnergy(stack)) { - if (flyKeyDown) { - if (!hover) { - player.motionY = Math.min(player.motionY + currentAccel, currentSpeedVertical); - } else { - if (descendKeyDown) - player.motionY = Math.min(player.motionY + currentAccel, getVerticalHoverSlowSpeed()); - else player.motionY = Math.min(player.motionY + currentAccel, getVerticalHoverSpeed()); - } - } else if (descendKeyDown) { - player.motionY = Math.min(player.motionY + currentAccel, -getVerticalHoverSpeed()); - } else { - player.motionY = Math.min(player.motionY + currentAccel, -getVerticalHoverSlowSpeed()); - } - float speedSideways = (float) (player.isSneaking() ? getSidewaysSpeed() * 0.5f : - getSidewaysSpeed()); - float speedForward = (float) (player.isSprinting() ? speedSideways * getSprintSpeedModifier() : - speedSideways); - - if (KeyBind.VANILLA_FORWARD.isKeyDown(player)) - player.moveRelative(0, 0, speedForward, speedForward); - if (KeyBind.VANILLA_BACKWARD.isKeyDown(player)) - player.moveRelative(0, 0, -speedSideways, speedSideways * 0.8f); - if (KeyBind.VANILLA_LEFT.isKeyDown(player)) - player.moveRelative(speedSideways, 0, 0, speedSideways); - if (KeyBind.VANILLA_RIGHT.isKeyDown(player)) - player.moveRelative(-speedSideways, 0, 0, speedSideways); - if (!player.getEntityWorld().isRemote) { - player.fallDistance = 0; - } - - } - //ArmorUtils.spawnParticle(player.getEntityWorld(), player, getParticle(), -0.6D); - } - } - } -} diff --git a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java index 7f6710878a9..e69de29bb2d 100644 --- a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java +++ b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java @@ -1,229 +0,0 @@ -package gregtech.common.items.armor; - -import gregtech.api.capability.IFilter; -import gregtech.api.capability.impl.GTFluidHandlerItemStack; -import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; -import gregtech.api.items.armor.ArmorUtils; -import gregtech.api.items.armor.ISpecialArmorLogic; -import gregtech.api.items.metaitem.stats.*; -import gregtech.api.recipes.Recipe; -import gregtech.api.recipes.RecipeMaps; -import gregtech.api.unification.material.Materials; -import gregtech.api.util.GTUtility; -import gregtech.api.util.GradientUtil; -import gregtech.api.util.input.KeyBind; - -import net.minecraft.client.resources.I18n; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.*; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; -import net.minecraftforge.fluids.capability.IFluidTankProperties; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.awt.*; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -@Deprecated -public class PowerlessJetpack { - - public static final int tankCapacity = 16000; - - private Recipe previousRecipe = null; - private Recipe currentRecipe = null; - private int burnTimer = 0; - - @SideOnly(Side.CLIENT) - private ArmorUtils.ModularHUD HUD; - - public PowerlessJetpack() { - if (ArmorUtils.SIDE.isClient()) - // noinspection NewExpressionSideOnly - HUD = new ArmorUtils.ModularHUD(); - } - - public void onArmorTick(World world, EntityPlayer player, @NotNull ItemStack stack) { - IFluidHandlerItem internalTank = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if (internalTank == null) - return; - - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(stack); - - if (data.hasKey("burnTimer")) burnTimer = data.getShort("burnTimer"); - - // This causes a caching issue. currentRecipe is only set to null in findNewRecipe, so the fuel is never updated - // Rewrite in Armor Rework - if (currentRecipe == null) - findNewRecipe(stack); - - - data.setShort("burnTimer", (short) burnTimer); - } - - @SideOnly(Side.CLIENT) - public void drawHUD(@NotNull ItemStack item) { - IFluidHandlerItem tank = item.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if (tank != null) { - IFluidTankProperties[] prop = tank.getTankProperties(); - if (prop[0] != null) { - if (prop[0].getContents() != null) { - if (prop[0].getContents().amount == 0) return; - String formated = String.format("%.1f", - (prop[0].getContents().amount * 100.0F / prop[0].getCapacity())); - this.HUD.newString(I18n.format("metaarmor.hud.fuel_lvl", formated + "%")); - NBTTagCompound data = item.getTagCompound(); - - if (data != null) { - if (data.hasKey("hover")) { - String status = (data.getBoolean("hover") ? I18n.format("metaarmor.hud.status.enabled") : - I18n.format("metaarmor.hud.status.disabled")); - String result = I18n.format("metaarmor.hud.hover_mode", status); - this.HUD.newString(result); - } - } - } - } - } - this.HUD.draw(); - this.HUD.reset(); - } - - public boolean canUseEnergy(ItemStack stack, int amount) { - FluidStack fuel = getFuel(); - if (fuel == null) { - return false; - } - - IFluidHandlerItem fluidHandlerItem = getIFluidHandlerItem(stack); - if (fluidHandlerItem == null) - return false; - - FluidStack fluidStack = fluidHandlerItem.drain(fuel, false); - if (fluidStack == null) - return false; - - return fluidStack.amount >= fuel.amount; - } - - public void drainEnergy(ItemStack stack, int amount) { - if (this.burnTimer == 0) { - FluidStack fuel = getFuel(); - if (fuel == null) return; - getIFluidHandlerItem(stack).drain(fuel, true); - burnTimer = currentRecipe.getDuration(); - } - this.burnTimer--; - } - - public boolean hasEnergy(ItemStack stack) { - return burnTimer > 0 || currentRecipe != null; - } - - private static IFluidHandlerItem getIFluidHandlerItem(@NotNull ItemStack stack) { - return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - } - - public void findNewRecipe(@NotNull ItemStack stack) { - IFluidHandlerItem internalTank = getIFluidHandlerItem(stack); - if (internalTank != null) { - FluidStack fluidStack = internalTank.drain(1, false); - if (previousRecipe != null && fluidStack != null && - fluidStack.isFluidEqual(previousRecipe.getFluidInputs().get(0).getInputFluidStack()) && - fluidStack.amount > 0) { - currentRecipe = previousRecipe; - return; - } else if (fluidStack != null) { - Recipe recipe = RecipeMaps.COMBUSTION_GENERATOR_FUELS.find(Collections.emptyList(), - Collections.singletonList(fluidStack), (Objects::nonNull)); - if (recipe != null) { - previousRecipe = recipe; - currentRecipe = previousRecipe; - return; - } - } - } - currentRecipe = null; - } - - public void resetRecipe() { - currentRecipe = null; - previousRecipe = null; - } - - public FluidStack getFuel() { - if (currentRecipe != null) { - return currentRecipe.getFluidInputs().get(0).getInputFluidStack(); - } - - return null; - } - - public class Behaviour { - - private static final IFilter JETPACK_FUEL_FILTER = new IFilter<>() { - - @Override - public boolean test(@NotNull FluidStack fluidStack) { - return RecipeMaps.COMBUSTION_GENERATOR_FUELS.find(Collections.emptyList(), - Collections.singletonList(fluidStack), (Objects::nonNull)) != null; - } - - @Override - public int getPriority() { - return IFilter.whitelistLikePriority(); - } - }; - - public final int maxCapacity; - private final Pair durabilityBarColors; - - public Behaviour(int internalCapacity) { - this.maxCapacity = internalCapacity; - this.durabilityBarColors = GradientUtil.getGradient(0xB7AF08, 10); - } - - public double getDurabilityForDisplay(@NotNull ItemStack itemStack) { - IFluidHandlerItem fluidHandlerItem = itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if (fluidHandlerItem == null) return 0; - IFluidTankProperties fluidTankProperties = fluidHandlerItem.getTankProperties()[0]; - FluidStack fluidStack = fluidTankProperties.getContents(); - return fluidStack == null ? 0 : (double) fluidStack.amount / (double) fluidTankProperties.getCapacity(); - } - - @Nullable - public Pair getDurabilityColorsForDisplay(ItemStack itemStack) { - return durabilityBarColors; - } - - public void getSubItems(ItemStack itemStack, CreativeTabs creativeTab, NonNullList subItems) { - ItemStack copy = itemStack.copy(); - IFluidHandlerItem fluidHandlerItem = copy - .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if (fluidHandlerItem != null) { - fluidHandlerItem.fill(Materials.Diesel.getFluid(tankCapacity), true); - subItems.add(copy); - } else { - subItems.add(itemStack); - } - } - } -} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nightvision_goggles.json b/src/main/resources/assets/gregtech/models/item/metaitems/nightvision_goggles.json index 9a0f438eb6e..22ed5f71345 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nightvision_goggles.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nightvision_goggles.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/nightvision_goggles" + "layer0": "gregtech:items/armors/nightvision_goggles_item" } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.boots.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.boots.json index 13ce1fd00a5..78082b982b9 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.boots.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.boots.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/nms.boots" + "layer0": "gregtech:items/armors/nano_boots_item" } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.chestplate.json index b1df3c537c3..b0e51acccbf 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.chestplate.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.chestplate.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/nms.chestplate" + "layer0": "gregtech:items/armors/nano_chestplate_item" } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.helmet.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.helmet.json index 68dc953dc08..09ed3ac9c14 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.helmet.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.helmet.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/nms.helmet" + "layer0": "gregtech:items/armors/nano_helmet_item" } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggings.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggings.json index fc796d867f9..e4e47de8747 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggings.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggings.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/nms.leggings" + "layer0": "gregtech:items/armors/nano_leggings_item" } } diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/nightvision_goggles.png b/src/main/resources/assets/gregtech/textures/items/metaitems/nightvision_goggles.png deleted file mode 100644 index d2a18ff3749b6f5acfc8401aee964398b26955fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|+7Ag!jR#?Q|$DJhxrDDVIO|H;Y8PUqZ`wIrg|#elNij<(7`in}Dp zFBm8b1q@#PjGutQoCO|{#S9F5he4R}c>anMprD7Ri(`mJ@ZK|ldH`91u`+M2zaOeobC?3VL>Nta_W7X>D$Y_1pi^@>IYuuS^l9%uNeZTK} zZ&`WS)c*Oy^DzwTA1(=1pnHLPyaACjRE82hD)b79bc+QitwoQv?Ebgq_QTO)h-KUPeKSW*M ztEFuHQ*}FPv4XL89~#=;k=N1|Y5kTva;BLre7ZDu^t{#)aMaTLH}{>`emQg5u`QeD z7hKu0z3c*zn+S@7}^C%Ss2m`__yhuXp6mV+!NK$i25ezw_0fntu;m)z%61 z%~SIxjSmc&UDUAE(|p^|TOR&8_L@0tKnG}wDy@R~Vou)|i(j~7(GPpRH3a$TiTx zW3Woo14KvbJ_6U205OY?&=E5TtF@9Q3(jmRi^@$kvR@%4-il9XkdT1{bO7Fvi0ii0 z5FnCvCG_krQv{wAacTlYs-TsTay)2Q5a&HUQf4?F7yKT^=jHtV@iL>50qvlPpcNP@H*bq6$% zx;;8$Ap~vN(o9D)blkNFVn(eKAW)>K6cT3EtZt`aLV!^Xz@!)t?WU9zROGCjS!>0U z&J~%0ahQO*Vk0U zAyolwqt=pPaUBYCbS4|yseotkyaaV5o>Vrapap?rSW&}>XR2JD$rld>-KzTWakDgC zG3xCbU59BM7y=Fq5bk%9VM&IL(t_mmN;Gpb%}O+#5{(#&rZ%1<>W$K(L~|13{gWu7 zoB|whQDH@vRKrRD1elfpRgg0EDgw`zK?)ji!$OWxbl&dkVKkU5L)GHw!?^=08EqsY zg>~Bjx(vgi0D)5VXqqA^fD?JY93ue_SyB)VXA|st|UW>RgD2RFCl+dL6X7Wncme zplJpzJ3y$Gk-)Q@!5sq!rWw~{;O0)%=}LNHWUEE==*I?i7e-0t1=+`_0xB#NNm=GN z(jQ|O63BpMX`f2_#4O6^pp@wkTFmsv-$W^01i2dMRS<0l)IZ2a<^_%celN-SV}SH> z93({s&?GIWDo69GAo@@jqyp_BpR@h`-{&J=lm{0ny~~a)ReHuvftJ>d3EkP24FON` z?%(luQQlqJwE92lM7bMwYV=U&PNmd)C<*A*;@wUznI&`_av!tjF!Yi=$w3|UtA);KC9~}1=!~}|94d;6s}9d>9dHmY zcy7nb+-eN#OLD?}oMKZW(jzWa6tIuj%#kU|hTBiEX2N zJ6pEJRxV}gHuUqXk?)(kvu5jBcFg0Swe|gC^EWb<=M`(VEe7WdR%8{Ro=c-KuI>$}?W)o;2s bpYA<;;QS@+U#^hc18KOpEVO&_y!-zEPjDH{ diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/nms.chestplate.png b/src/main/resources/assets/gregtech/textures/items/metaitems/nms.chestplate.png deleted file mode 100644 index a7813215a328ad435f502c45cd16d7e37bed7f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3189 zcmcImd2AF_7@ty9ZYvmDxjGI6YGiiK-Psvgq1`P#!j@7NDB!`HnYZo8?#wVVZMQ_T zjiPcRc!5fg7>s~6#zYZ{wgyE7#gib$Sc7LYQnB)np!jAlE0)7+lii*7=6m1q`+nc| zzLm8#6~l*&9)e-m@T$sC9r`bDzk@DEzs0?00fyxXS}<5!sv0uH>nh6d5=IpL*JD`8 zhKJU7R`0L9`o7LF<*#p>H|Y51=H%J6u_LdpsamuOuiq8i_-s}1A$g?Up8Ta?oj&g7 zPwyNsx#HE*lY{Tbe|^W@!R5m)TiyNhmTqzE;k+m1qg(EseQ$65uI3Lnw10ExSYdS2 zfVP@V+naYaVFi%TEYa%66oME zY|!)o(bLgM;F=mB=6l0**bKr(t#X+K=Pav^Ix(E4yK9yBb7dp$lXr-kzvRs)5|B2qLcK!Vim z30VyxXe*XxI+~&5u0|jmO-_J7o~A>Hn>n?*oq-7fMkRnrF&^3tDJ7^XIXSb*ilvOJ z3I$^@4t2*yvP@3aY&0ChZZyuLI`{fd1`xF2aLz`*zQp4>6Sh;{jKatO(yz1~X*D5L z2W_LtQeb&Aa&tm98r!LZf8cou$B}sIuqg#C2pq$T7)C6c<=Sk#crfT@Rm4l?Yr1N* z*w?!TGiP83I50rC?@5Lw89G7>630n2a|6vvG@TX=8>$vi%B&U zq~j0o7?o$}D5sEu&+8>Ylvj{8jwfkI0~RfTz<{i_S(b+C8N~W(b-hxNMz5C@L>l-> zR;F1};CPu7d5$G{&dYGLUlwFubgL#sM5$7uRQBU;Ju>A0GLJj9F)@a!Af2}TT1^BrA!i(MxZx9bRAItA|Bc&`Z!e;NZJQPQf5&p z_yMYYKlHH-6uly^G8c@eZ@vHj@hBJN!9`N8^W&yMOY6ggzHH06fTwu(-`Kk- z?=G!dr4!IE@BX(uQSODEZavhwT`9c|rNNxxmTBrvlltpFm&!zR$w{dD=KAs9>YN$- z#=q^rZUadL-e+>jZlQ6=eay{aXpx)bppNR*LUY=_-r>v9jQ3Sls5IhVyZwRE>I2h< z-P3vIOovD^v@@qD+<5*?rU-IrenLiCLS-JedhK(J*U6)J(ky% xY*Ahw$`0EI$8h# diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/nms.helmet.png b/src/main/resources/assets/gregtech/textures/items/metaitems/nms.helmet.png deleted file mode 100644 index 5b937243a252c6906e26bf010d554073f01ad262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3231 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 From 46d17e516cbb68c81da855f19851b03ab09d1e9f Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sun, 28 Jan 2024 21:56:32 -0700 Subject: [PATCH 08/12] Compile + Spotless --- .../api/items/armor/ArmorMetaItem.java | 24 ++- .../gregtech/api/items/armor/ArmorUtils.java | 7 +- .../gregtech/api/items/armor/IArmorLogic.java | 5 +- .../api/items/armoritem/ArmorBuilder.java | 3 + .../api/items/armoritem/ArmorHelper.java | 11 +- .../api/items/armoritem/IArmorBehavior.java | 27 ++- .../armoritem/IElectricArmorBehavior.java | 5 +- .../api/items/armoritem/IGTArmor.java | 17 +- .../items/armoritem/IGTArmorDefinition.java | 17 +- .../api/items/armoritem/ItemGTArmor.java | 59 +++--- .../items/armoritem/ItemGTElectricArmor.java | 20 +- .../items/armoritem/ItemGTFueledArmor.java | 3 +- .../items/armoritem/armorset/IArmorSet.java | 1 + .../items/armoritem/armorset/ISetBonus.java | 3 +- .../armoritem/jetpack/IJetpackStats.java | 4 +- .../armoritem/jetpack/JetpackBehavior.java | 25 ++- .../java/gregtech/api/util/input/KeyBind.java | 16 +- .../java/gregtech/asm/hooks/ArmorHooks.java | 1 + .../gregtech/asm/hooks/ArmorRenderHooks.java | 10 +- .../visitors/SpecialArmorApplyVisitor.java | 1 + .../visitors/SpecialArmorClassVisitor.java | 1 + .../gregtech/common/ArmorEventHandlers.java | 18 +- .../java/gregtech/common/EventHandlers.java | 6 - .../gregtech/common/items/ArmorItems.java | 173 ++++++++++++------ .../java/gregtech/common/items/MetaItems.java | 7 +- .../common/items/armor/AdvancedJetpack.java | 0 .../items/armor/AdvancedNanoMuscleSuite.java | 8 +- .../items/armor/AdvancedQuarkTechSuite.java | 9 +- .../items/armor/ElectricJetpackBehavior.java | 2 + .../items/armor/FallDamageCancelBehavior.java | 2 + .../items/armor/FireImmunityBehavior.java | 2 + .../items/armor/FueledJetpackBehavior.java | 7 +- .../items/armor/HeatReductionBehavior.java | 2 + .../gregtech/common/items/armor/IJetpack.java | 0 .../common/items/armor/IStepAssist.java | 0 .../gregtech/common/items/armor/Jetpack.java | 0 .../common/items/armor/JetpackStats.java | 12 +- .../common/items/armor/MetaArmor.java | 0 .../items/armor/NightvisionBehavior.java | 5 +- .../items/armor/NightvisionGoggles.java | 0 .../common/items/armor/PowerlessJetpack.java | 0 .../items/armor/StepAssistBehavior.java | 2 + src/main/java/gregtech/core/CoreModule.java | 3 +- .../network/packets/PacketKeyPressed.java | 6 +- .../core/network/packets/PacketKeysDown.java | 8 +- .../loaders/recipe/CraftingRecipeLoader.java | 47 +++-- .../loaders/recipe/MachineRecipeLoader.java | 13 +- 47 files changed, 379 insertions(+), 213 deletions(-) delete mode 100644 src/main/java/gregtech/common/items/armor/AdvancedJetpack.java delete mode 100644 src/main/java/gregtech/common/items/armor/IJetpack.java delete mode 100644 src/main/java/gregtech/common/items/armor/IStepAssist.java delete mode 100644 src/main/java/gregtech/common/items/armor/Jetpack.java delete mode 100644 src/main/java/gregtech/common/items/armor/MetaArmor.java delete mode 100644 src/main/java/gregtech/common/items/armor/NightvisionGoggles.java delete mode 100644 src/main/java/gregtech/common/items/armor/PowerlessJetpack.java diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index ebd489daee8..a744dd3e31d 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -1,13 +1,9 @@ package gregtech.api.items.armor; -import com.google.common.base.Preconditions; -import gregtech.api.GregTechAPI; import gregtech.api.items.metaitem.MetaItem; -import net.minecraft.client.util.ITooltipFlag; import gregtech.common.creativetab.GTCreativeTabs; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnumEnchantmentType; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -20,7 +16,6 @@ import net.minecraftforge.common.ISpecialArmor; import com.google.common.base.Preconditions; -import com.google.common.collect.Multimap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -43,22 +38,24 @@ protected T constructMetaValueItem(short metaValue, String unlocalizedName) { @NotNull private IArmorLogic getArmorLogic(ItemStack itemStack) { T metaValueItem = getItem(itemStack); - return metaValueItem == null ? new DummyArmorLogic(EntityEquipmentSlot.HEAD, "") : metaValueItem.getArmorLogic(); + return metaValueItem == null ? new DummyArmorLogic(EntityEquipmentSlot.HEAD, "") : + metaValueItem.getArmorLogic(); } @Override - public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, int slot) { + public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, + double damage, int slot) { return new ArmorProperties(0, 0, Integer.MAX_VALUE); } @Override - public int getArmorDisplay(EntityPlayer player, @Nonnull ItemStack armor, int slot) { + public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { return 0; } @Override - public void damageArmor(EntityLivingBase entity, @Nonnull ItemStack stack, DamageSource source, int damage, int slot) { - } + public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, DamageSource source, int damage, + int slot) {} @Override public boolean isValidArmor(@NotNull ItemStack stack, @NotNull EntityEquipmentSlot armorType, @@ -83,12 +80,13 @@ public String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, } @Override - public void addInformation(@Nonnull ItemStack itemStack, @Nullable World worldIn, @Nonnull List lines, @Nonnull ITooltipFlag tooltipFlag) { + public void addInformation(@NotNull ItemStack itemStack, @Nullable World worldIn, @NotNull List lines, + @NotNull ITooltipFlag tooltipFlag) { lines.add(TextFormatting.RED + "Deprecated Item! Convert in an Assembler to get the new version"); // todo lang } @Override - public boolean isEnchantable(@Nonnull ItemStack stack) { + public boolean isEnchantable(@NotNull ItemStack stack) { return false; } diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java index 256f615cba2..651ccd6d566 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorUtils.java +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -9,17 +9,16 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.NonNullList; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/src/main/java/gregtech/api/items/armor/IArmorLogic.java b/src/main/java/gregtech/api/items/armor/IArmorLogic.java index c6c2c934659..6ad18650172 100644 --- a/src/main/java/gregtech/api/items/armor/IArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/IArmorLogic.java @@ -1,6 +1,5 @@ package gregtech.api.items.armor; -import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -14,8 +13,8 @@ public interface IArmorLogic { EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack); - default void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { - } + default void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, + EntityEquipmentSlot equipmentSlot) {} default void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {} diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java index 54ee5484053..722d0e94ffd 100644 --- a/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java +++ b/src/main/java/gregtech/api/items/armoritem/ArmorBuilder.java @@ -2,10 +2,12 @@ import gregtech.api.items.armoritem.armorset.IArmorSet; import gregtech.api.items.armoritem.jetpack.IJetpackStats; + import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.util.DamageSource; import net.minecraftforge.common.IRarity; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -76,6 +78,7 @@ public final T build() { protected final IGTArmorDefinition buildDefinition() { return new IGTArmorDefinition() { + @Override public @NotNull EntityEquipmentSlot getEquippedSlot() { return slot; diff --git a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java index b4f02685d40..41a0876e2d7 100644 --- a/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java +++ b/src/main/java/gregtech/api/items/armoritem/ArmorHelper.java @@ -1,15 +1,16 @@ package gregtech.api.items.armoritem; import gregtech.api.items.armoritem.armorset.IArmorSet; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static net.minecraft.inventory.EntityEquipmentSlot.*; -import static net.minecraft.inventory.EntityEquipmentSlot.HEAD; public class ArmorHelper { @@ -24,8 +25,7 @@ public class ArmorHelper { public static final String JETPACK_HOVER_KEY = "JetpackHover"; public static final String FUELED_JETPACK_BURN_TIMER = "FuelBurnTime"; - - private static final EntityEquipmentSlot[] ARMOR_SLOTS = {FEET, LEGS, CHEST, HEAD}; + private static final EntityEquipmentSlot[] ARMOR_SLOTS = { FEET, LEGS, CHEST, HEAD }; public static NBTTagCompound getBehaviorsTag(@NotNull ItemStack stack) { return stack.getOrCreateSubCompound(BEHAVIORS_TAG_KEY); @@ -41,9 +41,8 @@ public static boolean hasFullSet(@NotNull EntityPlayer player, @Nullable IArmorS } for (EntityEquipmentSlot slot : getArmorSlots()) { ItemStack armorStack = player.getItemStackFromSlot(slot); - if (armorStack.isEmpty() - || !(armorStack.getItem() instanceof IGTArmor gtArmor) - || gtArmor.getArmorSet() != armorSet) { + if (armorStack.isEmpty() || !(armorStack.getItem() instanceof IGTArmor gtArmor) || + gtArmor.getArmorSet() != armorSet) { return false; } } diff --git a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java index f7a94d1f6e0..dcf71b84383 100644 --- a/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/IArmorBehavior.java @@ -1,6 +1,7 @@ package gregtech.api.items.armoritem; import gregtech.api.util.input.KeyBind; + import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -10,6 +11,7 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,30 +24,26 @@ public interface IArmorBehavior { /** * Called every tick that this behavior's armor item is equipped. */ - default void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - } + default void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) {} /** Called when this behavior's armor item is unequipped. */ - default void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - } + default void onArmorUnequip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) {} - /** Called when this behavior's armor item is equipped, as well as when the player logs into the world or is cloned. */ - default void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) { - } + /** + * Called when this behavior's armor item is equipped, as well as when the player logs into the world or is cloned. + */ + default void onArmorEquip(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack) {} /** Add to this behavior's armor item tooltip. */ - default void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { - } + default void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) {} default Set getListenedKeys() { return Collections.emptySet(); } - default void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) { - } + default void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, KeyBind keyPressed) {} - default void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) { - } + default void addBehaviorNBT(@NotNull ItemStack stack, @NotNull NBTTagCompound tag) {} /** * Add a capability to this behavior's armor. @@ -61,8 +59,7 @@ default ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable N // TODO implement HUD /** Add to the Armor HUD text. */ @SideOnly(Side.CLIENT) - default void addHudInformation(@NotNull ItemStack stack, @NotNull List hudText) { - } + default void addHudInformation(@NotNull ItemStack stack, @NotNull List hudText) {} /** Get the equipment slot for this behavior's armor item. Provided since the method call is somewhat obscure. */ default EntityEquipmentSlot getEquipmentSlot(@NotNull ItemStack stack) { diff --git a/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java b/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java index b4dffa72070..3bb2f0840cd 100644 --- a/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/IElectricArmorBehavior.java @@ -2,9 +2,11 @@ import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; + import org.jetbrains.annotations.NotNull; public interface IElectricArmorBehavior extends IArmorBehavior { @@ -17,5 +19,6 @@ default void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @No } } - void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, @NotNull IElectricItem electricItem); + void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, + @NotNull IElectricItem electricItem); } diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmor.java b/src/main/java/gregtech/api/items/armoritem/IGTArmor.java index b86facb2a64..59d11fd08ce 100644 --- a/src/main/java/gregtech/api/items/armoritem/IGTArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmor.java @@ -1,6 +1,7 @@ package gregtech.api.items.armoritem; import gregtech.api.items.armoritem.armorset.IArmorSet; + import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -10,6 +11,7 @@ import net.minecraftforge.common.ISpecialArmor; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -21,13 +23,17 @@ public interface IGTArmor extends ISpecialArmor { String getId(); - @NotNull IGTArmorDefinition getDefinition(); + @NotNull + IGTArmorDefinition getDefinition(); - @NotNull List getBehaviors(); + @NotNull + List getBehaviors(); - @NotNull EntityEquipmentSlot getEquipmentSlot(); + @NotNull + EntityEquipmentSlot getEquipmentSlot(); - @Nullable IArmorSet getArmorSet(); + @Nullable + IArmorSet getArmorSet(); /** * If behavior logic can be run at all. Most commonly used for energy checks on electric armors. @@ -43,7 +49,8 @@ public interface IGTArmor extends ISpecialArmor { return (Item) this; } - @NotNull ItemStack getStack(); + @NotNull + ItemStack getStack(); @SideOnly(Side.CLIENT) default String getModelPath() { diff --git a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java index 8ecf25ff66e..b49c9ef64d7 100644 --- a/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java +++ b/src/main/java/gregtech/api/items/armoritem/IGTArmorDefinition.java @@ -1,9 +1,11 @@ package gregtech.api.items.armoritem; import gregtech.api.items.armoritem.armorset.IArmorSet; + import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.util.DamageSource; import net.minecraftforge.common.IRarity; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,22 +14,27 @@ // TODO A lot of these do not need to be in the "definition" class, but in the Item class public interface IGTArmorDefinition { - @NotNull EntityEquipmentSlot getEquippedSlot(); + @NotNull + EntityEquipmentSlot getEquippedSlot(); - @NotNull List getBehaviors(); + @NotNull + List getBehaviors(); - @Nullable IArmorSet getArmorSet(); + @Nullable + IArmorSet getArmorSet(); /* ArmorProperties */ double getDamageAbsorption(EntityEquipmentSlot slot, @Nullable DamageSource damageSource); - @NotNull List handledUnblockableSources(); + @NotNull + List handledUnblockableSources(); boolean isEnchantable(); int getEnchantability(); - @NotNull IRarity getRarity(); + @NotNull + IRarity getRarity(); int getMaxDurability(); diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java index 54facaf0dac..e8b3cd9e184 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTArmor.java @@ -1,10 +1,11 @@ package gregtech.api.items.armoritem; -import gregtech.api.GregTechAPI; import gregtech.api.capability.impl.CombinedCapabilityProvider; import gregtech.api.items.armoritem.armorset.IArmorSet; import gregtech.api.util.input.IKeyPressedListener; import gregtech.api.util.input.KeyBind; +import gregtech.common.creativetab.GTCreativeTabs; + import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; @@ -23,6 +24,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.IRarity; import net.minecraftforge.common.capabilities.ICapabilityProvider; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -42,7 +44,7 @@ public ItemGTArmor(String domain, String id, IGTArmorDefinition armorDefinition) this.id = id; this.armorDefinition = armorDefinition; setMaxStackSize(1); - setCreativeTab(GregTechAPI.TAB_GREGTECH_TOOLS); + setCreativeTab(GTCreativeTabs.TAB_GREGTECH_TOOLS); setTranslationKey("gt.armor." + id); setRegistryName(domain, id); if (armorDefinition.hasDurability()) { @@ -95,18 +97,21 @@ public boolean areBehaviorsActive(@NotNull ItemStack stack) { } @Override - public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { + public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack armor, DamageSource source, + double damage, int slot) { // todo this is gonna be a huge mess to unravel return new ArmorProperties(0, 0, 0); } @Override public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { - return (int) Math.round(20.0F * getDamageModifier() * getDefinition().getDamageAbsorption(getEquipmentSlot(), null)); + return (int) Math + .round(20.0F * getDamageModifier() * getDefinition().getDamageAbsorption(getEquipmentSlot(), null)); } @Override - public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { + public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, + int damage, int slot) { if (getDefinition().hasDurability()) { // todo need to do actual damage and save to NBT here, as "default" armor can break // todo then override in ItemGTElectricArmor can do it as energy instead (or in addition to) @@ -130,7 +135,8 @@ public boolean getIsRepairable(@NotNull ItemStack toRepair, @NotNull ItemStack r } @Override - public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemStack armor, DamageSource source, double damage, int slot) { + public boolean handleUnblockableDamage(EntityLivingBase entity, @NotNull ItemStack armor, DamageSource source, + double damage, int slot) { return armorDefinition.handledUnblockableSources().contains(source); } @@ -177,7 +183,8 @@ public void onKeyPressed(EntityPlayerMP player, KeyBind keyPressed) { } @Override - public @Nullable String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, @NotNull EntityEquipmentSlot slot, @NotNull String type) { + public @Nullable String getArmorTexture(@NotNull ItemStack stack, @NotNull Entity entity, + @NotNull EntityEquipmentSlot slot, @NotNull String type) { return String.format("%s:textures/items/armors/%s.png", getDomain(), getId()); } @@ -207,17 +214,18 @@ public boolean canApplyAtEnchantingTable(@NotNull ItemStack stack, @NotNull Ench // todo this should be good enough, but the below might be needed return super.canApplyAtEnchantingTable(stack, enchantment); - //return switch (equipmentSlot) { - // case HEAD -> enchantment.type.canEnchantItem(Items.DIAMOND_HELMET); - // case CHEST -> enchantment.type.canEnchantItem(Items.DIAMOND_CHESTPLATE); - // case LEGS -> enchantment.type.canEnchantItem(Items.DIAMOND_LEGGINGS); - // case FEET -> enchantment.type.canEnchantItem(Items.DIAMOND_BOOTS); - // default -> enchantment.isAllowedOnBooks(); - //}; + // return switch (equipmentSlot) { + // case HEAD -> enchantment.type.canEnchantItem(Items.DIAMOND_HELMET); + // case CHEST -> enchantment.type.canEnchantItem(Items.DIAMOND_CHESTPLATE); + // case LEGS -> enchantment.type.canEnchantItem(Items.DIAMOND_LEGGINGS); + // case FEET -> enchantment.type.canEnchantItem(Items.DIAMOND_BOOTS); + // default -> enchantment.isAllowedOnBooks(); + // }; } @Override - public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, @NotNull ITooltipFlag flag) { + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, + @NotNull ITooltipFlag flag) { // todo armor toughness tooltip for (IArmorBehavior behavior : getDefinition().getBehaviors()) { behavior.addInformation(stack, world, tooltip); @@ -232,14 +240,16 @@ public void getSubItems(@NotNull CreativeTabs tab, @NotNull NonNullList providers = getCapabilityProviders(stack, tag); if (providers.isEmpty()) return null; if (providers.size() == 1) return providers.get(0); return new CombinedCapabilityProvider(providers); } - protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, + @Nullable NBTTagCompound tag) { List providers = new ArrayList<>(); for (IArmorBehavior behavior : getDefinition().getBehaviors()) { ICapabilityProvider provider = behavior.createProvider(stack, tag); @@ -253,24 +263,25 @@ public void getSubItems(@NotNull CreativeTabs tab, @NotNull NonNullList 0.15f; - case CHEST -> 0.4f; - case LEGS -> 0.3f; - default -> 0.0f; + case CHEST -> 0.4f; + case LEGS -> 0.3f; + default -> 0.0f; }; } private static EntityEquipmentSlot getSlotByIndex(int index) { return switch (index) { - case 0 -> EntityEquipmentSlot.FEET; - case 1 -> EntityEquipmentSlot.LEGS; - case 2 -> EntityEquipmentSlot.CHEST; + case 0 -> EntityEquipmentSlot.FEET; + case 1 -> EntityEquipmentSlot.LEGS; + case 2 -> EntityEquipmentSlot.CHEST; default -> EntityEquipmentSlot.HEAD; }; } public static class Builder extends ArmorBuilder { - public static @NotNull Builder of(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + public static @NotNull Builder of(@NotNull String domain, @NotNull String id, + @NotNull EntityEquipmentSlot slot) { return new Builder(domain, id, slot); } diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java index 8dde709b1e8..f445cd8a469 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java @@ -4,6 +4,7 @@ import gregtech.api.capability.IElectricItem; import gregtech.api.capability.impl.ElectricItem; import gregtech.api.items.metaitem.ElectricStats; + import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -11,6 +12,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraftforge.common.capabilities.ICapabilityProvider; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -49,13 +51,15 @@ public ItemGTElectricArmor(String domain, String id, } @Override - public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, int damage, int slot) { + public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Nullable DamageSource source, + int damage, int slot) { IElectricItem electricItem = getElectricItem(stack); long amountDrawn, amountToDraw = energyPerUse * damage / energyScaleFactor; amountDrawn = electricItem.discharge(amountToDraw, electricItem.getTier(), true, false, false); if (amountDrawn < amountToDraw) { // send remaining damage to durability (will be tested in super if it should be checked) - super.damageArmor(entity, stack, source, (int) Math.max(1, damage * (amountToDraw - amountDrawn) / amountToDraw), slot); + super.damageArmor(entity, stack, source, + (int) Math.max(1, damage * (amountToDraw - amountDrawn) / amountToDraw), slot); } } @@ -63,7 +67,8 @@ public void damageArmor(EntityLivingBase entity, @NotNull ItemStack stack, @Null public int getArmorDisplay(EntityPlayer player, @NotNull ItemStack armor, int slot) { IElectricItem electricItem = getElectricItem(armor); if (electricItem.getCharge() < energyPerUse) { - return (int) Math.round(4.0f * getDamageModifier() * getDefinition().getDamageAbsorption(getEquipmentSlot(), null)); + return (int) Math + .round(4.0f * getDamageModifier() * getDefinition().getDamageAbsorption(getEquipmentSlot(), null)); } return super.getArmorDisplay(player, armor, slot); } @@ -75,7 +80,8 @@ public boolean areBehaviorsActive(@NotNull ItemStack stack) { } @Override - protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { + protected @NotNull List getCapabilityProviders(@NotNull ItemStack stack, + @Nullable NBTTagCompound tag) { List providers = super.getCapabilityProviders(stack, tag); ElectricStats stats = new ElectricStats(maxCharge, tier, true, canChargeExternally); providers.add(stats.createProvider(stack)); @@ -90,7 +96,8 @@ public static class Builder extends ArmorBuilder { protected int energyScaleFactor = 1; // todo, just setting this because of div by 0 protected boolean canChargeExternally; - public static @NotNull Builder of(@NotNull String domain, @NotNull String id, @NotNull EntityEquipmentSlot slot) { + public static @NotNull Builder of(@NotNull String domain, @NotNull String id, + @NotNull EntityEquipmentSlot slot) { return new Builder(domain, id, slot); } @@ -122,7 +129,8 @@ public Builder chargeOtherItems() { @Override public Supplier supply(IGTArmorDefinition definition) { - return () -> new ItemGTElectricArmor(domain, id, definition, tier, maxCharge, energyPerUse, energyScaleFactor, canChargeExternally); + return () -> new ItemGTElectricArmor(domain, id, definition, tier, maxCharge, energyPerUse, + energyScaleFactor, canChargeExternally); } @Override diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java index 2eec9127c9e..93581973168 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTFueledArmor.java @@ -1,5 +1,4 @@ package gregtech.api.items.armoritem; /** For armors which use a liquid fuel, either instead of or in addition to durability. */ -public class ItemGTFueledArmor { -} +public class ItemGTFueledArmor {} diff --git a/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java b/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java index 5d0e88a539d..492865336c9 100644 --- a/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java +++ b/src/main/java/gregtech/api/items/armoritem/armorset/IArmorSet.java @@ -1,6 +1,7 @@ package gregtech.api.items.armoritem.armorset; import gregtech.api.items.armoritem.ArmorHelper; + import net.minecraft.entity.player.EntityPlayer; import java.util.Set; diff --git a/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java b/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java index 52829b897b4..d6cb2251847 100644 --- a/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java +++ b/src/main/java/gregtech/api/items/armoritem/armorset/ISetBonus.java @@ -1,4 +1,3 @@ package gregtech.api.items.armoritem.armorset; -public interface ISetBonus { -} +public interface ISetBonus {} diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java b/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java index c3e8abf9703..136fa96e122 100644 --- a/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/IJetpackStats.java @@ -1,6 +1,7 @@ package gregtech.api.items.armoritem.jetpack; import net.minecraft.util.EnumParticleTypes; + import org.jetbrains.annotations.Nullable; public interface IJetpackStats { @@ -21,5 +22,6 @@ public interface IJetpackStats { float getFallDamageReduction(); - @Nullable EnumParticleTypes getParticle(); + @Nullable + EnumParticleTypes getParticle(); } diff --git a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java index db18ca02d3f..26d09623ecc 100644 --- a/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java +++ b/src/main/java/gregtech/api/items/armoritem/jetpack/JetpackBehavior.java @@ -3,6 +3,7 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; import gregtech.api.util.input.KeyBind; + import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -11,6 +12,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -61,7 +63,8 @@ public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @Not /* * Called every tick, performs flying if the correct keys are pressed. - * Logic from SimplyJetpacks2: https://github.com/Tomson124/SimplyJetpacks2/blob/1.12/src/main/java/tonius/simplyjetpacks/item/ItemJetpack.java + * Logic from SimplyJetpacks2: + * https://github.com/Tomson124/SimplyJetpacks2/blob/1.12/src/main/java/tonius/simplyjetpacks/item/ItemJetpack.java */ private void performFlying(@NotNull EntityPlayer player, @NotNull ItemStack stack, boolean hover) { double currentAccel = jetpackStats.getVerticalAcceleration() * (player.motionY < 0.3D ? 2.5D : 1.0D); @@ -71,22 +74,29 @@ private void performFlying(@NotNull EntityPlayer player, @NotNull ItemStack stac if (flyKeyDown || hover && !player.onGround) { if (!player.isInWater() && !player.isInLava() && drainFuel(stack, getFuelPerUse(), true)) { - drainFuel(stack, (int) (player.isSprinting() ? Math.round(getFuelPerUse() * jetpackStats.getSprintEnergyModifier()) : getFuelPerUse()), false); + drainFuel(stack, + (int) (player.isSprinting() ? + Math.round(getFuelPerUse() * jetpackStats.getSprintEnergyModifier()) : getFuelPerUse()), + false); if (flyKeyDown) { if (!hover) { player.motionY = Math.min(player.motionY + currentAccel, currentSpeedVertical); } else { - if (descendKeyDown) player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSlowSpeed()); - else player.motionY = Math.min(player.motionY + currentAccel, jetpackStats.getVerticalHoverSpeed()); + if (descendKeyDown) player.motionY = Math.min(player.motionY + currentAccel, + jetpackStats.getVerticalHoverSlowSpeed()); + else player.motionY = Math.min(player.motionY + currentAccel, + jetpackStats.getVerticalHoverSpeed()); } } else if (descendKeyDown) { player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSpeed()); } else { player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSlowSpeed()); } - float speedSideways = (float) (player.isSneaking() ? jetpackStats.getSidewaysSpeed() * 0.5f : jetpackStats.getSidewaysSpeed()); - float speedForward = (float) (player.isSprinting() ? speedSideways * jetpackStats.getSprintSpeedModifier() : speedSideways); + float speedSideways = (float) (player.isSneaking() ? jetpackStats.getSidewaysSpeed() * 0.5f : + jetpackStats.getSidewaysSpeed()); + float speedForward = (float) (player.isSprinting() ? + speedSideways * jetpackStats.getSprintSpeedModifier() : speedSideways); if (KeyBind.VANILLA_FORWARD.isKeyDown(player)) player.moveRelative(0, 0, speedForward, speedForward); @@ -111,7 +121,8 @@ private void performFlying(@NotNull EntityPlayer player, @NotNull ItemStack stac private static void spawnParticle(@NotNull World world, EntityPlayer player, EnumParticleTypes type) { if (type != null && world.isRemote) { Vec3d forward = player.getForward(); - world.spawnParticle(type, player.posX - forward.x, player.posY + 0.5D, player.posZ - forward.z, 0.0D, -0.6D, 0.0D); + world.spawnParticle(type, player.posX - forward.x, player.posY + 0.5D, player.posZ - forward.z, 0.0D, -0.6D, + 0.0D); } } diff --git a/src/main/java/gregtech/api/util/input/KeyBind.java b/src/main/java/gregtech/api/util/input/KeyBind.java index 31075a41138..5b060fe9fd6 100644 --- a/src/main/java/gregtech/api/util/input/KeyBind.java +++ b/src/main/java/gregtech/api/util/input/KeyBind.java @@ -2,13 +2,10 @@ import gregtech.api.GTValues; import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLog; import gregtech.core.network.packets.PacketKeyPressed; import gregtech.core.network.packets.PacketKeysDown; -import gregtech.api.util.GTLog; -import it.unimi.dsi.fastutil.ints.Int2BooleanMap; -import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; -import it.unimi.dsi.fastutil.ints.IntArrayList; -import it.unimi.dsi.fastutil.ints.IntList; + import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.EntityPlayer; @@ -24,11 +21,14 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.tuple.MutablePair; +import it.unimi.dsi.fastutil.ints.Int2BooleanMap; +import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; import org.lwjgl.input.Keyboard; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.WeakHashMap; import java.util.function.Supplier; diff --git a/src/main/java/gregtech/asm/hooks/ArmorHooks.java b/src/main/java/gregtech/asm/hooks/ArmorHooks.java index e69de29bb2d..8b137891791 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorHooks.java @@ -0,0 +1 @@ + diff --git a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java index 5443c1b1170..67f80aabce3 100644 --- a/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java +++ b/src/main/java/gregtech/asm/hooks/ArmorRenderHooks.java @@ -1,6 +1,7 @@ package gregtech.asm.hooks; import gregtech.api.items.armor.ArmorMetaItem; + import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.GlStateManager; @@ -26,7 +27,8 @@ public static boolean shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) } public static boolean isArmorItem(ItemStack itemStack, EntityEquipmentSlot slot) { - return (itemStack.getItem() instanceof ArmorMetaItem && itemStack.getItem().getEquipmentSlot(itemStack) == slot); + return (itemStack.getItem() instanceof ArmorMetaItem && + itemStack.getItem().getEquipmentSlot(itemStack) == slot); } public static void renderArmorLayer(LayerArmorBase layer, EntityLivingBase entity, float limbSwing, @@ -61,14 +63,16 @@ private static boolean isLegSlot(EntityEquipmentSlot equipmentSlot) { return equipmentSlot == EntityEquipmentSlot.LEGS; } - private static ResourceLocation getArmorTexture(EntityLivingBase entity, ItemStack itemStack, EntityEquipmentSlot slot) { + private static ResourceLocation getArmorTexture(EntityLivingBase entity, ItemStack itemStack, + EntityEquipmentSlot slot) { ResourceLocation registryName = itemStack.getItem().getRegistryName(); if (registryName == null) { throw new IllegalArgumentException( "ItemStack " + itemStack.getTranslationKey() + "has a null registry name"); } - String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", registryName.getNamespace(), registryName.getPath(), + String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", registryName.getNamespace(), + registryName.getPath(), (isLegSlot(slot) ? 2 : 1), ""); return new ResourceLocation(ForgeHooksClient.getArmorTexture(entity, itemStack, s1, slot, null)); } diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java index e69de29bb2d..8b137891791 100644 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java +++ b/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java @@ -0,0 +1 @@ + diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java index e69de29bb2d..8b137891791 100644 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java +++ b/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java @@ -0,0 +1 @@ + diff --git a/src/main/java/gregtech/common/ArmorEventHandlers.java b/src/main/java/gregtech/common/ArmorEventHandlers.java index 83364e91183..ccdee5d171b 100644 --- a/src/main/java/gregtech/common/ArmorEventHandlers.java +++ b/src/main/java/gregtech/common/ArmorEventHandlers.java @@ -3,6 +3,7 @@ import gregtech.api.GTValues; import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IGTArmor; + import net.minecraft.client.entity.EntityOtherPlayerMP; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -20,7 +21,8 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import static net.minecraft.inventory.EntityEquipmentSlot.*; +import static net.minecraft.inventory.EntityEquipmentSlot.MAINHAND; +import static net.minecraft.inventory.EntityEquipmentSlot.OFFHAND; @Mod.EventBusSubscriber(modid = GTValues.MODID) public class ArmorEventHandlers { @@ -63,7 +65,8 @@ public static void onLivingFall(LivingFallEvent event) { NBTTagCompound behaviorTag = ArmorHelper.getBehaviorsTag(armorStack); if (behaviorTag.getBoolean(ArmorHelper.FALL_DAMAGE_KEY)) { if (gtArmor.areBehaviorsActive(armorStack)) { - gtArmor.damageArmor(player, armorStack, DamageSource.FALL, (int) (player.fallDistance - 1.2f), slot.getIndex()); + gtArmor.damageArmor(player, armorStack, DamageSource.FALL, (int) (player.fallDistance - 1.2f), + slot.getIndex()); player.fallDistance = 0; event.setCanceled(true); return; @@ -76,10 +79,8 @@ public static void onLivingFall(LivingFallEvent event) { @SubscribeEvent @SideOnly(Side.CLIENT) public static void onClientPlayerTick(TickEvent.PlayerTickEvent event) { - if (event.phase == TickEvent.Phase.START - && !event.player.isSpectator() - && !(event.player instanceof EntityOtherPlayerMP) - && !(event.player instanceof FakePlayer)) { + if (event.phase == TickEvent.Phase.START && !event.player.isSpectator() && + !(event.player instanceof EntityOtherPlayerMP) && !(event.player instanceof FakePlayer)) { onPlayerTick(event); } } @@ -87,9 +88,8 @@ public static void onClientPlayerTick(TickEvent.PlayerTickEvent event) { @SubscribeEvent @SideOnly(Side.SERVER) public static void onServerPlayerTick(TickEvent.PlayerTickEvent event) { - if (event.phase == TickEvent.Phase.START - && !event.player.isSpectator() - && !(event.player instanceof FakePlayer)) { + if (event.phase == TickEvent.Phase.START && !event.player.isSpectator() && + !(event.player instanceof FakePlayer)) { onPlayerTick(event); } } diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 44d09843a97..219e01c0082 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -7,7 +7,6 @@ import gregtech.api.pipenet.longdist.LongDistanceNetwork; import gregtech.api.pipenet.tile.IPipeTile; import gregtech.api.unification.material.Materials; -import gregtech.api.util.BlockUtility; import gregtech.api.util.CapesRegistry; import gregtech.api.util.GTUtility; import gregtech.api.util.Mods; @@ -35,11 +34,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.EnumDifficulty; -import net.minecraftforge.client.event.FOVUpdateEvent; -import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.event.entity.living.LivingSpawnEvent; import net.minecraftforge.event.entity.player.AdvancementEvent; @@ -154,7 +149,6 @@ public static boolean canMineWithPick(String tool) { return ToolClasses.WRENCH.equals(tool) || ToolClasses.WIRE_CUTTER.equals(tool); } - @SubscribeEvent public static void onWorldLoadEvent(WorldEvent.Load event) { VirtualEnderRegistry.initializeStorage(event.getWorld()); diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java index c0580ce294e..74bb1c31ac4 100644 --- a/src/main/java/gregtech/common/items/ArmorItems.java +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -2,19 +2,33 @@ import gregtech.api.GTValues; import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.api.items.armoritem.*; +import gregtech.api.items.armoritem.ArmorBuilder; +import gregtech.api.items.armoritem.IGTArmor; +import gregtech.api.items.armoritem.ItemGTArmor; +import gregtech.api.items.armoritem.ItemGTElectricArmor; import gregtech.api.items.metaitem.MetaItem; import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.ingredients.nbtmatch.NBTCondition; import gregtech.api.recipes.ingredients.nbtmatch.NBTMatcher; import gregtech.common.ConfigHolder; -import gregtech.common.items.armor.*; +import gregtech.common.items.armor.AdvancedNanoMuscleSuite; +import gregtech.common.items.armor.AdvancedQuarkTechSuite; +import gregtech.common.items.armor.ArmorSet; +import gregtech.common.items.armor.ElectricJetpackBehavior; +import gregtech.common.items.armor.FallDamageCancelBehavior; +import gregtech.common.items.armor.FueledJetpackBehavior; +import gregtech.common.items.armor.JetpackStats; +import gregtech.common.items.armor.NightvisionBehavior; +import gregtech.common.items.armor.QuarkTechSuite; +import gregtech.common.items.armor.StepAssistBehavior; + import net.minecraft.client.Minecraft; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraftforge.client.model.ModelLoader; + import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -60,21 +74,28 @@ public static List getAllArmors() { public static void init() { // todo get rid of this config... "stuff" - NIGHTVISION_GOGGLES = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nightvision_goggles", EntityEquipmentSlot.HEAD) - .electric(ConfigHolder.tools.voltageTierNightVision, 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1))) + NIGHTVISION_GOGGLES = register(ItemGTElectricArmor.Builder + .of(GTValues.MODID, "nightvision_goggles", EntityEquipmentSlot.HEAD) + .electric(ConfigHolder.tools.voltageTierNightVision, + 80_000L * (long) Math.max(1, Math.pow(1, ConfigHolder.tools.voltageTierNightVision - 1))) .electricCost(2) .behaviors(NightvisionBehavior.INSTANCE)); FUELED_JETPACK = register(ItemGTArmor.Builder.of(GTValues.MODID, "fueled_jetpack", EntityEquipmentSlot.CHEST) - .behaviors(new FueledJetpackBehavior(JetpackStats.FUELED, 16000, RecipeMaps.COMBUSTION_GENERATOR_FUELS))); + .behaviors( + new FueledJetpackBehavior(JetpackStats.FUELED, 16000, RecipeMaps.COMBUSTION_GENERATOR_FUELS))); - ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "electric_jetpack", EntityEquipmentSlot.CHEST) - .electric(ConfigHolder.tools.voltageTierImpeller, 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2))) + ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder + .of(GTValues.MODID, "electric_jetpack", EntityEquipmentSlot.CHEST) + .electric(ConfigHolder.tools.voltageTierImpeller, + 1_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierImpeller - 2))) .behaviors(new ElectricJetpackBehavior(JetpackStats.ELECTRIC, 30)) .rarity(EnumRarity.UNCOMMON)); - ADVANCED_ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "advanced_electric_jetpack", EntityEquipmentSlot.CHEST) - .electric(ConfigHolder.tools.voltageTierAdvImpeller, 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4))) + ADVANCED_ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder + .of(GTValues.MODID, "advanced_electric_jetpack", EntityEquipmentSlot.CHEST) + .electric(ConfigHolder.tools.voltageTierAdvImpeller, + 6_400_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvImpeller - 4))) .behaviors(new ElectricJetpackBehavior(JetpackStats.ADVANCED, 480)) .rarity(EnumRarity.RARE)); @@ -89,18 +110,20 @@ public static void init() { .rarity(EnumRarity.UNCOMMON) .armorSet(ArmorSet.NANO)); - NANO_CHESTPLATE = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_chestplate", EntityEquipmentSlot.CHEST) - .electric(tier, maxCapacity) - .electricCost(energyPerUse) - .rarity(EnumRarity.UNCOMMON) - .armorSet(ArmorSet.NANO)); - - NANO_LEGGINGS = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_leggings", EntityEquipmentSlot.LEGS) - .electric(tier, maxCapacity) - .electricCost(energyPerUse) - .allowBlocking(DamageSource.FALL) - .rarity(EnumRarity.UNCOMMON) - .armorSet(ArmorSet.NANO)); + NANO_CHESTPLATE = register( + ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_chestplate", EntityEquipmentSlot.CHEST) + .electric(tier, maxCapacity) + .electricCost(energyPerUse) + .rarity(EnumRarity.UNCOMMON) + .armorSet(ArmorSet.NANO)); + + NANO_LEGGINGS = register( + ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_leggings", EntityEquipmentSlot.LEGS) + .electric(tier, maxCapacity) + .electricCost(energyPerUse) + .allowBlocking(DamageSource.FALL) + .rarity(EnumRarity.UNCOMMON) + .armorSet(ArmorSet.NANO)); NANO_BOOTS = register(ItemGTElectricArmor.Builder.of(GTValues.MODID, "nano_boots", EntityEquipmentSlot.FEET) .electric(tier, maxCapacity) @@ -127,25 +150,40 @@ public static void registerModels() { } public static void registerColors() { - ARMORS.forEach(armor -> Minecraft.getMinecraft().getItemColors().registerItemColorHandler(armor::getColor, armor.get())); + ARMORS.forEach(armor -> Minecraft.getMinecraft().getItemColors().registerItemColorHandler(armor::getColor, + armor.get())); } // TODO Remove everything below here in v... - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NIGHTVISION_GOGGLES; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_LEGGINGS; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_BOOTS; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_HELMET; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_LEGGINGS; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_BOOTS; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_HELMET; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_SEMIFLUID_JETPACK; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_ELECTRIC_JETPACK; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_ELECTRIC_JETPACK_ADVANCED; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE_ADVANCED; - @Deprecated private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE_ADVANCED; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_NIGHTVISION_GOGGLES; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_LEGGINGS; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_BOOTS; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_HELMET; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_LEGGINGS; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_BOOTS; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_HELMET; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_SEMIFLUID_JETPACK; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_ELECTRIC_JETPACK; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_ELECTRIC_JETPACK_ADVANCED; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_NANO_CHESTPLATE_ADVANCED; + @Deprecated + private static ArmorMetaItem.ArmorMetaValueItem OLD_QUANTUM_CHESTPLATE_ADVANCED; // TODO Remove all old armor texture files, change old models to point to new texture location until full removal. // TODO Rename old armor lang keys (other than names), and move names to a separated section for easy removal. @@ -153,29 +191,54 @@ public static void registerColors() { @Deprecated public static void initLegacyArmor() { ArmorMetaItem.ArmorMetaValueItem> legacyArmor = new ArmorMetaItem<>() { + @Override public void registerSubItems() { // todo call setInvisible() on all of these - OLD_NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(EntityEquipmentSlot.HEAD, "nightvision_goggles"); + OLD_NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(EntityEquipmentSlot.HEAD, + "nightvision_goggles"); - OLD_SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "fueled_jetpack"); - OLD_ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "electric_jetpack"); - OLD_ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, "advanced_electric_jetpack"); + OLD_SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, + "fueled_jetpack"); + OLD_ELECTRIC_JETPACK = addItem(3, "electric_jetpack").setArmorLogic(EntityEquipmentSlot.CHEST, + "electric_jetpack"); + OLD_ELECTRIC_JETPACK_ADVANCED = addItem(4, "advanced_electric_jetpack") + .setArmorLogic(EntityEquipmentSlot.CHEST, "advanced_electric_jetpack"); OLD_NANO_HELMET = addItem(20, "nms.helmet").setArmorLogic(EntityEquipmentSlot.HEAD, "nano_helmet"); - OLD_NANO_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(EntityEquipmentSlot.CHEST, "nano_chestplate"); - OLD_NANO_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(EntityEquipmentSlot.LEGS, "nano_leggings"); + OLD_NANO_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(EntityEquipmentSlot.CHEST, + "nano_chestplate"); + OLD_NANO_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(EntityEquipmentSlot.LEGS, + "nano_leggings"); OLD_NANO_BOOTS = addItem(23, "nms.boots").setArmorLogic(EntityEquipmentSlot.FEET, "nano_boots"); - MetaItems.NANO_CHESTPLATE_ADVANCED = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(512, 12_800_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvNanoSuit - 3)), ConfigHolder.tools.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); + MetaItems.NANO_CHESTPLATE_ADVANCED = addItem(30, "nms.advanced_chestplate") + .setArmorLogic(new AdvancedNanoMuscleSuite(512, + 12_800_000L * + (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvNanoSuit - 3)), + ConfigHolder.tools.voltageTierAdvNanoSuit)) + .setRarity(EnumRarity.RARE); int energyPerUse = 8192; int tier = ConfigHolder.tools.voltageTierQuarkTech; long maxCapacity = 100_000_000L * (long) Math.max(1, Math.pow(4, tier - 5)); - MetaItems.QUANTUM_HELMET = addItem(40, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_CHESTPLATE = addItem(41, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_LEGGINGS = addItem(42, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_BOOTS = addItem(43, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUANTUM_CHESTPLATE_ADVANCED = addItem(50, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(energyPerUse, 1_000_000_000L * (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvQuarkTech - 6)), ConfigHolder.tools.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); + MetaItems.QUANTUM_HELMET = addItem(40, "qts.helmet") + .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)) + .setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_CHESTPLATE = addItem(41, "qts.chestplate") + .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)) + .setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_LEGGINGS = addItem(42, "qts.leggings") + .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)) + .setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_BOOTS = addItem(43, "qts.boots") + .setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)) + .setRarity(EnumRarity.RARE); + MetaItems.QUANTUM_CHESTPLATE_ADVANCED = addItem(50, "qts.advanced_chestplate") + .setArmorLogic(new AdvancedQuarkTechSuite(energyPerUse, + 1_000_000_000L * + (long) Math.max(1, Math.pow(4, ConfigHolder.tools.voltageTierAdvQuarkTech - 6)), + ConfigHolder.tools.voltageTierAdvQuarkTech)) + .setRarity(EnumRarity.EPIC); } }; legacyArmor.setRegistryName("gt_armor"); @@ -190,15 +253,15 @@ public static void registerLegacyConversionRecipes() { addConversion(OLD_NANO_CHESTPLATE, NANO_CHESTPLATE.getStack()); addConversion(OLD_NANO_LEGGINGS, NANO_LEGGINGS.getStack()); addConversion(OLD_NANO_BOOTS, NANO_BOOTS.getStack()); - //addConversion(OLD_QUANTUM_HELMET, QUANTUM_HELMET.getStack()); - //addConversion(OLD_QUANTUM_CHESTPLATE, QUANTUM_CHESTPLATE.getStack()); - //addConversion(OLD_QUANTUM_LEGGINGS, QUANTUM_LEGGINGS.getStack()); - //addConversion(OLD_QUANTUM_BOOTS, QUANTUM_BOOTS.getStack()); + // addConversion(OLD_QUANTUM_HELMET, QUANTUM_HELMET.getStack()); + // addConversion(OLD_QUANTUM_CHESTPLATE, QUANTUM_CHESTPLATE.getStack()); + // addConversion(OLD_QUANTUM_LEGGINGS, QUANTUM_LEGGINGS.getStack()); + // addConversion(OLD_QUANTUM_BOOTS, QUANTUM_BOOTS.getStack()); addConversion(OLD_SEMIFLUID_JETPACK, FUELED_JETPACK.getStack()); addConversion(OLD_ELECTRIC_JETPACK, ELECTRIC_JETPACK.getStack()); - //addConversion(OLD_ELECTRIC_JETPACK_ADVANCED, ADVANCED_ELECTRIC_JETPACK.getStack()); - //addConversion(OLD_NANO_CHESTPLATE_ADVANCED, ADVANCED_NANO_CHESTPLATE.getStack()); - //addConversion(OLD_QUANTUM_CHESTPLATE_ADVANCED, ADVANCED_QUANTUM_CHESTPLATE.getStack()); + // addConversion(OLD_ELECTRIC_JETPACK_ADVANCED, ADVANCED_ELECTRIC_JETPACK.getStack()); + // addConversion(OLD_NANO_CHESTPLATE_ADVANCED, ADVANCED_NANO_CHESTPLATE.getStack()); + // addConversion(OLD_QUANTUM_CHESTPLATE_ADVANCED, ADVANCED_QUANTUM_CHESTPLATE.getStack()); } @Deprecated diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 9007de73532..06149582eaf 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -11,7 +11,6 @@ import gregtech.api.unification.ore.OrePrefix; import gregtech.api.util.GTLog; import gregtech.client.renderer.handler.FacadeRenderer; -import gregtech.common.items.armor.MetaArmor; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -25,7 +24,11 @@ import com.google.common.base.CaseFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public final class MetaItems { diff --git a/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java index ca3cf539964..2c3aabe25cb 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java @@ -13,7 +13,10 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -27,7 +30,8 @@ @Deprecated public class AdvancedNanoMuscleSuite extends NanoMuscleSuite { - //A replacement for checking the current world time, to get around the gamerule that stops it + + // A replacement for checking the current world time, to get around the gamerule that stops it private long timer = 0L; private List, List>> inventoryIndexMap; diff --git a/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java index c616ff5579c..7738d04f187 100644 --- a/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java @@ -14,7 +14,11 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.common.ISpecialArmor.ArmorProperties; @@ -29,7 +33,8 @@ @Deprecated public class AdvancedQuarkTechSuite extends QuarkTechSuite { - //A replacement for checking the current world time, to get around the gamerule that stops it + + // A replacement for checking the current world time, to get around the gamerule that stops it private long timer = 0L; private List, List>> inventoryIndexMap; diff --git a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java index 5f333674346..996596f2062 100644 --- a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java @@ -4,7 +4,9 @@ import gregtech.api.capability.IElectricItem; import gregtech.api.items.armoritem.jetpack.IJetpackStats; import gregtech.api.items.armoritem.jetpack.JetpackBehavior; + import net.minecraft.item.ItemStack; + import org.jetbrains.annotations.NotNull; public class ElectricJetpackBehavior extends JetpackBehavior { diff --git a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java b/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java index a9be53962ff..df624e43e4d 100644 --- a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java @@ -2,10 +2,12 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; + import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java b/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java index 4b2822bdc4b..5c80b3e9b4a 100644 --- a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java @@ -1,10 +1,12 @@ package gregtech.common.items.armor; import gregtech.api.items.armoritem.IArmorBehavior; + import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java index afb585ae83e..c2ee7731f8d 100644 --- a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java @@ -7,6 +7,7 @@ import gregtech.api.items.armoritem.jetpack.JetpackBehavior; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; + import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -15,10 +16,10 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; import net.minecraftforge.fluids.capability.IFluidTankProperties; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -114,7 +115,7 @@ public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NB private final class FueledJetpackFilter implements IFilter { @Override - public boolean test(@Nonnull FluidStack fluidStack) { + public boolean test(@NotNull FluidStack fluidStack) { return getRecipe(fluidStack) != null; } @@ -127,7 +128,7 @@ public int getPriority() { /* Override class to automatically clear our cached state when the tank is fully emptied. */ private final class FueledJetpackItemStack extends GTFluidHandlerItemStack { - public FueledJetpackItemStack(@Nonnull ItemStack container, int capacity) { + public FueledJetpackItemStack(@NotNull ItemStack container, int capacity) { super(container, capacity); } diff --git a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java b/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java index 8f2a0d4a46e..ef6a548593f 100644 --- a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java @@ -2,8 +2,10 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; + import org.jetbrains.annotations.NotNull; // todo Nano was 0.75, quantum was 0.5 diff --git a/src/main/java/gregtech/common/items/armor/IJetpack.java b/src/main/java/gregtech/common/items/armor/IJetpack.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/IStepAssist.java b/src/main/java/gregtech/common/items/armor/IStepAssist.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/Jetpack.java b/src/main/java/gregtech/common/items/armor/Jetpack.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/JetpackStats.java b/src/main/java/gregtech/common/items/armor/JetpackStats.java index 9f070ad02f3..3a47915754a 100644 --- a/src/main/java/gregtech/common/items/armor/JetpackStats.java +++ b/src/main/java/gregtech/common/items/armor/JetpackStats.java @@ -1,16 +1,18 @@ package gregtech.common.items.armor; import gregtech.api.items.armoritem.jetpack.IJetpackStats; + import net.minecraft.util.EnumParticleTypes; + import org.jetbrains.annotations.Nullable; public enum JetpackStats implements IJetpackStats { - FUELED (1.0f, 1.0f, 0.18f, 0.14f , 0.1f , 0.22f, 0.0f , 0.0f, EnumParticleTypes.SMOKE_LARGE), - ELECTRIC (1.0f, 1.0f, 0.18f, 0.1f , 0.12f, 0.3f , 0.08f, 0.0f, EnumParticleTypes.SMOKE_NORMAL), - ADVANCED (2.5f, 1.3f, 0.34f, 0.03f , 0.13f, 0.48f, 0.14f, 2.0f, EnumParticleTypes.CLOUD), - NANO (4.0f, 1.8f, 0.4f , 0.005f, 0.14f, 0.8f , 0.19f, 3.5f, null), - QUANTUM (6.0f, 2.4f, 0.45f, 0.0f , 0.15f, 0.9f , 0.21f, 8.0f, null); + FUELED(1.0f, 1.0f, 0.18f, 0.14f, 0.1f, 0.22f, 0.0f, 0.0f, EnumParticleTypes.SMOKE_LARGE), + ELECTRIC(1.0f, 1.0f, 0.18f, 0.1f, 0.12f, 0.3f, 0.08f, 0.0f, EnumParticleTypes.SMOKE_NORMAL), + ADVANCED(2.5f, 1.3f, 0.34f, 0.03f, 0.13f, 0.48f, 0.14f, 2.0f, EnumParticleTypes.CLOUD), + NANO(4.0f, 1.8f, 0.4f, 0.005f, 0.14f, 0.8f, 0.19f, 3.5f, null), + QUANTUM(6.0f, 2.4f, 0.45f, 0.0f, 0.15f, 0.9f, 0.21f, 8.0f, null); private final float sprintEnergyMod; private final float sprintSpeedMod; diff --git a/src/main/java/gregtech/common/items/armor/MetaArmor.java b/src/main/java/gregtech/common/items/armor/MetaArmor.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java index 1ac5b4bca71..beafe9cc1da 100644 --- a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java @@ -4,6 +4,7 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IElectricArmorBehavior; import gregtech.api.util.input.KeyBind; + import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; @@ -12,6 +13,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -49,7 +51,8 @@ public void onKeyPressed(@NotNull ItemStack stack, @NotNull EntityPlayer player, } @Override - public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, @NotNull IElectricItem electricItem) { + public void onArmorTick(@NotNull World world, @NotNull EntityPlayer player, @NotNull ItemStack stack, + @NotNull IElectricItem electricItem) { if (world.isRemote) return; NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); if (tag.getBoolean(ArmorHelper.NIGHT_VISION_KEY) && electricItem.canUse(2)) { diff --git a/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java b/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java index e89ad8a7348..1884568c328 100644 --- a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java +++ b/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java @@ -2,10 +2,12 @@ import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; + import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/gregtech/core/CoreModule.java b/src/main/java/gregtech/core/CoreModule.java index 934d48d1278..726a8f37388 100644 --- a/src/main/java/gregtech/core/CoreModule.java +++ b/src/main/java/gregtech/core/CoreModule.java @@ -62,7 +62,8 @@ import gregtech.core.network.packets.PacketClipboardNBTUpdate; import gregtech.core.network.packets.PacketClipboardUIWidgetUpdate; import gregtech.core.network.packets.PacketFluidVeinList; -import gregtech.core.network.packets.PacketKeysPressed; +import gregtech.core.network.packets.PacketKeyPressed; +import gregtech.core.network.packets.PacketKeysDown; import gregtech.core.network.packets.PacketNotifyCapeChange; import gregtech.core.network.packets.PacketPluginSynced; import gregtech.core.network.packets.PacketRecoverMTE; diff --git a/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java b/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java index 3d400178870..eadd5350cef 100644 --- a/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java +++ b/src/main/java/gregtech/core/network/packets/PacketKeyPressed.java @@ -3,11 +3,13 @@ import gregtech.api.network.IPacket; import gregtech.api.network.IServerExecutor; import gregtech.api.util.input.KeyBind; -import it.unimi.dsi.fastutil.ints.IntArrayList; -import it.unimi.dsi.fastutil.ints.IntList; + import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.PacketBuffer; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; + public class PacketKeyPressed implements IPacket, IServerExecutor { private IntList pressedKeys; diff --git a/src/main/java/gregtech/core/network/packets/PacketKeysDown.java b/src/main/java/gregtech/core/network/packets/PacketKeysDown.java index d09b0ca9412..9e6c72a9bc0 100644 --- a/src/main/java/gregtech/core/network/packets/PacketKeysDown.java +++ b/src/main/java/gregtech/core/network/packets/PacketKeysDown.java @@ -3,14 +3,12 @@ import gregtech.api.network.IPacket; import gregtech.api.network.IServerExecutor; import gregtech.api.util.input.KeyBind; -import it.unimi.dsi.fastutil.ints.Int2BooleanMap; -import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; + import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.PacketBuffer; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.List; +import it.unimi.dsi.fastutil.ints.Int2BooleanMap; +import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; public class PacketKeysDown implements IPacket, IServerExecutor { diff --git a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java index 0d9cc533ea7..a21df46ec48 100644 --- a/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/CraftingRecipeLoader.java @@ -300,22 +300,47 @@ private static void loadCraftingRecipes() { /////////////////////////////////////////////////// // Armors // /////////////////////////////////////////////////// - ModHandler.addShapedRecipe("powderbarrel", new ItemStack(MetaBlocks.POWDERBARREL), "PSP", "GGG", "PGP", 'P', new UnificationEntry(OrePrefix.plate, Wood), 'S', new ItemStack(Items.STRING), 'G', new UnificationEntry(OrePrefix.dust, Gunpowder)); - ModHandler.addShapedRecipe("nightvision_goggles", ArmorItems.NIGHTVISION_GOGGLES.getStack(), "CSC", "RBR", "LdL", 'C', new UnificationEntry(OrePrefix.circuit, Tier.ULV), 'S', new UnificationEntry(OrePrefix.screw, Steel), 'R', new UnificationEntry(OrePrefix.ring, Rubber), 'B', MetaItems.BATTERY_LV_SODIUM, 'L', new UnificationEntry(OrePrefix.lens, Glass)); - ModHandler.addShapedRecipe("fueled_jetpack", ArmorItems.FUELED_JETPACK.getStack(), "xCw", "SUS", "RIR", 'C', new UnificationEntry(OrePrefix.circuit, Tier.LV), 'S', MetaItems.FLUID_CELL_LARGE_STEEL.getStackForm(), 'U', MetaItems.ELECTRIC_PUMP_LV.getStackForm(), 'R', new UnificationEntry(OrePrefix.rotor, Lead), 'I', new UnificationEntry(OrePrefix.pipeSmallFluid, Potin)); - ModHandler.addShapedRecipe("electric_jetpack", ArmorItems.ELECTRIC_JETPACK.getStack(), "xCd", "TBT", "I I", 'C', new UnificationEntry(OrePrefix.circuit, Tier.MV), 'T', MetaItems.POWER_THRUSTER.getStackForm(), 'B', MetaItems.BATTERY_MV_LITHIUM.getStackForm(), 'I', new UnificationEntry(OrePrefix.wireGtDouble, AnnealedCopper)); - ModHandler.addShapedRecipe("electric_jetpack_advanced", ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), "xJd", "TBT", "WCW", 'J', ArmorItems.ELECTRIC_JETPACK.getStack(), 'T', MetaItems.POWER_THRUSTER_ADVANCED.getStackForm(), 'B', ENERGIUM_CRYSTAL.getStackForm(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Gold), 'C', new UnificationEntry(OrePrefix.circuit, Tier.HV)); - ModHandler.addShapedRecipe("nano_helmet", ArmorItems.NANO_HELMET.getStack(), "PPP", "PNP", "xEd", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', ArmorItems.NIGHTVISION_GOGGLES.getStack(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_chestplate", ArmorItems.NANO_CHESTPLATE.getStack(), "PEP", "PPP", "PPP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_leggings", ArmorItems.NANO_LEGGINGS.getStack(), "PPP", "PEP", "PxP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_boots", ArmorItems.NANO_BOOTS.getStack(), "PxP", "PEP", 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); - ModHandler.addShapedRecipe("nano_chestplate_advanced", MetaItems.NANO_CHESTPLATE_ADVANCED.getStackForm(), "xJd", "PNP", "WCW", 'J', ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), 'P', MetaItems.LOW_POWER_INTEGRATED_CIRCUIT.getStackForm(), 'N', ArmorItems.NANO_CHESTPLATE.getStack(), 'W', new UnificationEntry(OrePrefix.wireGtQuadruple, Platinum), 'C', new UnificationEntry(OrePrefix.circuit, Tier.IV)); - ModHandler.addShapedRecipe("gravitation_engine", MetaItems.GRAVITATION_ENGINE.getStackForm(), "ESE", "POP", "ESE", 'E', MetaItems.EMITTER_LuV.getStackForm(), 'S', new UnificationEntry(OrePrefix.wireGtQuadruple, Osmium), 'P', new UnificationEntry(OrePrefix.plateDouble, Iridium), 'O', MetaItems.ENERGY_LAPOTRONIC_ORB.getStackForm()); + ModHandler.addShapedRecipe("nightvision_goggles", ArmorItems.NIGHTVISION_GOGGLES.getStack(), "CSC", "RBR", + "LdL", 'C', new UnificationEntry(OrePrefix.circuit, Tier.ULV), 'S', + new UnificationEntry(OrePrefix.screw, Steel), 'R', new UnificationEntry(OrePrefix.ring, Rubber), 'B', + MetaItems.BATTERY_LV_SODIUM, 'L', new UnificationEntry(OrePrefix.lens, Glass)); + ModHandler.addShapedRecipe("fueled_jetpack", ArmorItems.FUELED_JETPACK.getStack(), "xCw", "SUS", "RIR", 'C', + new UnificationEntry(OrePrefix.circuit, Tier.LV), 'S', MetaItems.FLUID_CELL_LARGE_STEEL.getStackForm(), + 'U', MetaItems.ELECTRIC_PUMP_LV.getStackForm(), 'R', new UnificationEntry(OrePrefix.rotor, Lead), 'I', + new UnificationEntry(OrePrefix.pipeSmallFluid, Potin)); + ModHandler.addShapedRecipe("electric_jetpack", ArmorItems.ELECTRIC_JETPACK.getStack(), "xCd", "TBT", "I I", 'C', + new UnificationEntry(OrePrefix.circuit, Tier.MV), 'T', MetaItems.POWER_THRUSTER.getStackForm(), 'B', + MetaItems.BATTERY_MV_LITHIUM.getStackForm(), 'I', + new UnificationEntry(OrePrefix.wireGtDouble, AnnealedCopper)); + ModHandler.addShapedRecipe("electric_jetpack_advanced", ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), "xJd", + "TBT", "WCW", 'J', ArmorItems.ELECTRIC_JETPACK.getStack(), 'T', + MetaItems.POWER_THRUSTER_ADVANCED.getStackForm(), 'B', ENERGIUM_CRYSTAL.getStackForm(), 'W', + new UnificationEntry(OrePrefix.wireGtQuadruple, Gold), 'C', + new UnificationEntry(OrePrefix.circuit, Tier.HV)); + ModHandler.addShapedRecipe("nano_helmet", ArmorItems.NANO_HELMET.getStack(), "PPP", "PNP", "xEd", 'P', + MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'N', ArmorItems.NIGHTVISION_GOGGLES.getStack(), 'E', + MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_chestplate", ArmorItems.NANO_CHESTPLATE.getStack(), "PEP", "PPP", "PPP", 'P', + MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_leggings", ArmorItems.NANO_LEGGINGS.getStack(), "PPP", "PEP", "PxP", 'P', + MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_boots", ArmorItems.NANO_BOOTS.getStack(), "PxP", "PEP", 'P', + MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); + ModHandler.addShapedRecipe("nano_chestplate_advanced", MetaItems.NANO_CHESTPLATE_ADVANCED.getStackForm(), "xJd", + "PNP", "WCW", 'J', ArmorItems.ADVANCED_ELECTRIC_JETPACK.getStack(), 'P', + MetaItems.LOW_POWER_INTEGRATED_CIRCUIT.getStackForm(), 'N', ArmorItems.NANO_CHESTPLATE.getStack(), 'W', + new UnificationEntry(OrePrefix.wireGtQuadruple, Platinum), 'C', + new UnificationEntry(OrePrefix.circuit, Tier.IV)); + ModHandler.addShapedRecipe("gravitation_engine", MetaItems.GRAVITATION_ENGINE.getStackForm(), "ESE", "POP", + "ESE", 'E', MetaItems.EMITTER_LuV.getStackForm(), 'S', + new UnificationEntry(OrePrefix.wireGtQuadruple, Osmium), 'P', + new UnificationEntry(OrePrefix.plateDouble, Iridium), 'O', + MetaItems.ENERGY_LAPOTRONIC_ORB.getStackForm()); } private static void registerFacadeRecipe(Material material, int facadeAmount) { diff --git a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java index 8307464712c..7445045c8f1 100644 --- a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java @@ -17,11 +17,17 @@ import gregtech.api.unification.stack.UnificationEntry; import gregtech.api.util.Mods; import gregtech.common.ConfigHolder; -import gregtech.common.blocks.*; +import gregtech.common.blocks.BlockAsphalt; +import gregtech.common.blocks.BlockCleanroomCasing; +import gregtech.common.blocks.BlockFusionCasing; +import gregtech.common.blocks.BlockGlassCasing; +import gregtech.common.blocks.BlockLamp; import gregtech.common.blocks.BlockMachineCasing.MachineCasingType; import gregtech.common.blocks.BlockMetalCasing.MetalCasingType; import gregtech.common.blocks.BlockTurbineCasing.TurbineCasingType; import gregtech.common.blocks.BlockWireCoil.CoilType; +import gregtech.common.blocks.MetaBlocks; +import gregtech.common.blocks.StoneVariantBlock; import gregtech.common.blocks.StoneVariantBlock.StoneVariant; import gregtech.common.items.ArmorItems; import gregtech.common.items.MetaItems; @@ -1398,15 +1404,14 @@ private static void registerNBTRemoval() { ORE_DICTIONARY_FILTER.getStackForm(), ORE_DICTIONARY_FILTER); // Jetpacks - //Jetpacks - ModHandler.addShapelessRecipe("fueled_jetpack_nbt", ArmorItems.FUELED_JETPACK.getStack(), ArmorItems.FUELED_JETPACK.getStack()); + ModHandler.addShapelessRecipe("fueled_jetpack_nbt", ArmorItems.FUELED_JETPACK.getStack(), + ArmorItems.FUELED_JETPACK.getStack()); ModHandler.addShapelessRecipe("fluid_jetpack_clear", SEMIFLUID_JETPACK.getStackForm(), SEMIFLUID_JETPACK.getStackForm()); // ClipBoard ModHandler.addShapelessNBTClearingRecipe("clipboard_nbt", CLIPBOARD.getStackForm(), CLIPBOARD.getStackForm()); - } private static void ConvertHatchToHatch() { From ad5b6e1a51105ac832d02a977f9cb67ad6d08aae Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Sat, 10 Feb 2024 20:13:14 -0700 Subject: [PATCH 09/12] Rebase file deletions --- .../java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java | 1 - .../java/gregtech/asm/visitors/SpecialArmorClassVisitor.java | 1 - 2 files changed, 2 deletions(-) delete mode 100644 src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java delete mode 100644 src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java deleted file mode 100644 index 8b137891791..00000000000 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorApplyVisitor.java +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java b/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java deleted file mode 100644 index 8b137891791..00000000000 --- a/src/main/java/gregtech/asm/visitors/SpecialArmorClassVisitor.java +++ /dev/null @@ -1 +0,0 @@ - From 6ec645eef400a620c38cd40fdcdfaa4fbbf364df Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:04:09 -0600 Subject: [PATCH 10/12] slotpess --- src/main/java/gregtech/common/EventHandlers.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 219e01c0082..c09c5e951db 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -21,9 +21,6 @@ import net.minecraft.client.entity.EntityOtherPlayerMP; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.entity.monster.EntityZombie; From 3a11f98dc69134df9742493a1bae2eeb894784c9 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:48:36 -0600 Subject: [PATCH 11/12] fix fueled jetpack, add energy/fuel tooltips --- .../items/armoritem/ItemGTElectricArmor.java | 15 +++ .../gregtech/common/items/ArmorItems.java | 14 +-- .../ElectricJetpackBehavior.java | 2 +- .../FallDamageCancelBehavior.java | 2 +- .../{ => behavior}/FireImmunityBehavior.java | 2 +- .../{ => behavior}/FueledJetpackBehavior.java | 119 ++++++++---------- .../{ => behavior}/HeatReductionBehavior.java | 2 +- .../{ => behavior}/NightvisionBehavior.java | 2 +- .../{ => behavior}/StepAssistBehavior.java | 2 +- 9 files changed, 79 insertions(+), 81 deletions(-) rename src/main/java/gregtech/common/items/armor/{ => behavior}/ElectricJetpackBehavior.java (96%) rename src/main/java/gregtech/common/items/armor/{ => behavior}/FallDamageCancelBehavior.java (95%) rename src/main/java/gregtech/common/items/armor/{ => behavior}/FireImmunityBehavior.java (95%) rename src/main/java/gregtech/common/items/armor/{ => behavior}/FueledJetpackBehavior.java (54%) rename src/main/java/gregtech/common/items/armor/{ => behavior}/HeatReductionBehavior.java (93%) rename src/main/java/gregtech/common/items/armor/{ => behavior}/NightvisionBehavior.java (98%) rename src/main/java/gregtech/common/items/armor/{ => behavior}/StepAssistBehavior.java (95%) diff --git a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java index f445cd8a469..c395b87fa70 100644 --- a/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java +++ b/src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java @@ -1,16 +1,20 @@ package gregtech.api.items.armoritem; +import gregtech.api.GTValues; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.capability.impl.ElectricItem; import gregtech.api.items.metaitem.ElectricStats; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; +import net.minecraft.world.World; import net.minecraftforge.common.capabilities.ICapabilityProvider; import org.jetbrains.annotations.NotNull; @@ -88,6 +92,17 @@ public boolean areBehaviorsActive(@NotNull ItemStack stack) { return providers; } + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip, + @NotNull ITooltipFlag flag) { + IElectricItem electricItem = getElectricItem(stack); + tooltip.add(I18n.format("metaitem.generic.electric_item.tooltip", + electricItem.getCharge(), + electricItem.getMaxCharge(), + GTValues.VNF[electricItem.getTier()])); + super.addInformation(stack, world, tooltip, flag); + } + public static class Builder extends ArmorBuilder { protected int tier; diff --git a/src/main/java/gregtech/common/items/ArmorItems.java b/src/main/java/gregtech/common/items/ArmorItems.java index 74bb1c31ac4..118df03436a 100644 --- a/src/main/java/gregtech/common/items/ArmorItems.java +++ b/src/main/java/gregtech/common/items/ArmorItems.java @@ -14,13 +14,13 @@ import gregtech.common.items.armor.AdvancedNanoMuscleSuite; import gregtech.common.items.armor.AdvancedQuarkTechSuite; import gregtech.common.items.armor.ArmorSet; -import gregtech.common.items.armor.ElectricJetpackBehavior; -import gregtech.common.items.armor.FallDamageCancelBehavior; -import gregtech.common.items.armor.FueledJetpackBehavior; import gregtech.common.items.armor.JetpackStats; -import gregtech.common.items.armor.NightvisionBehavior; import gregtech.common.items.armor.QuarkTechSuite; -import gregtech.common.items.armor.StepAssistBehavior; +import gregtech.common.items.armor.behavior.ElectricJetpackBehavior; +import gregtech.common.items.armor.behavior.FallDamageCancelBehavior; +import gregtech.common.items.armor.behavior.FueledJetpackBehavior; +import gregtech.common.items.armor.behavior.NightvisionBehavior; +import gregtech.common.items.armor.behavior.StepAssistBehavior; import net.minecraft.client.Minecraft; import net.minecraft.inventory.EntityEquipmentSlot; @@ -82,8 +82,8 @@ public static void init() { .behaviors(NightvisionBehavior.INSTANCE)); FUELED_JETPACK = register(ItemGTArmor.Builder.of(GTValues.MODID, "fueled_jetpack", EntityEquipmentSlot.CHEST) - .behaviors( - new FueledJetpackBehavior(JetpackStats.FUELED, 16000, RecipeMaps.COMBUSTION_GENERATOR_FUELS))); + .behaviors(new FueledJetpackBehavior(JetpackStats.FUELED, 16000, + FueledJetpackBehavior.COMBUSTION_FUEL_BURN_TIME))); ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder .of(GTValues.MODID, "electric_jetpack", EntityEquipmentSlot.CHEST) diff --git a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/ElectricJetpackBehavior.java similarity index 96% rename from src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/ElectricJetpackBehavior.java index 996596f2062..de33bc395b2 100644 --- a/src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/ElectricJetpackBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; diff --git a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/FallDamageCancelBehavior.java similarity index 95% rename from src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/FallDamageCancelBehavior.java index df624e43e4d..597084a4f24 100644 --- a/src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/FallDamageCancelBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; diff --git a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/FireImmunityBehavior.java similarity index 95% rename from src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/FireImmunityBehavior.java index 5c80b3e9b4a..a56db595e95 100644 --- a/src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/FireImmunityBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.items.armoritem.IArmorBehavior; diff --git a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/FueledJetpackBehavior.java similarity index 54% rename from src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/FueledJetpackBehavior.java index c2ee7731f8d..d50d4bba833 100644 --- a/src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/FueledJetpackBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.capability.IFilter; import gregtech.api.capability.impl.GTFluidHandlerItemStack; @@ -6,11 +6,12 @@ import gregtech.api.items.armoritem.jetpack.IJetpackStats; import gregtech.api.items.armoritem.jetpack.JetpackBehavior; import gregtech.api.recipes.Recipe; -import gregtech.api.recipes.RecipeMap; +import gregtech.api.recipes.RecipeMaps; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; @@ -22,22 +23,29 @@ import java.util.Collections; import java.util.List; -import java.util.Objects; +import java.util.function.Function; /** * Creates a Jetpack which runs on any Fuel in a provided fuel RecipeMap. */ public class FueledJetpackBehavior extends JetpackBehavior { - private final int maxCapacity; - private final RecipeMap fuelMap; + public static final Function COMBUSTION_FUEL_BURN_TIME = fluidStack -> { + Recipe recipe = RecipeMaps.COMBUSTION_GENERATOR_FUELS.findRecipe( + Integer.MAX_VALUE, + Collections.emptyList(), + Collections.singletonList(fluidStack)); + return recipe != null ? recipe.getDuration() : 0; + }; - private Recipe recipe; + private final int maxCapacity; + private final Function fuelBurnTimeFunc; - public FueledJetpackBehavior(IJetpackStats jetpackStats, int maxCapacity, RecipeMap fuelMap) { + public FueledJetpackBehavior(IJetpackStats jetpackStats, int maxCapacity, + Function fuelBurnTimeFunc) { super(jetpackStats); this.maxCapacity = maxCapacity; - this.fuelMap = fuelMap; + this.fuelBurnTimeFunc = fuelBurnTimeFunc; } @Override @@ -47,46 +55,34 @@ protected int getFuelPerUse() { @Override protected boolean drainFuel(@NotNull ItemStack stack, int amount, boolean simulate) { - IFluidHandlerItem fluidHandler = getFluidHandler(stack); - if (fluidHandler != null) { - // check that we have some amount of fuel here. - FluidStack currentFuel = fluidHandler.drain(amount, false); - if (currentFuel == null) return false; - - // grab the recipe if we haven't already. - // don't need to worry about resetting as our fluid handler does this for us. - if (recipe == null) { - recipe = getRecipe(currentFuel); - } - - // do the "drain" if we are not simulating. - // either decrementing our timer, or draining new fuel and restarting the timer + NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); + short burnTimer = tag.getShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER); + if (burnTimer > 0) { if (!simulate) { - NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack); - short burnTimer = tag.getShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER); - if (burnTimer == 0) { - // timer is zero, drain some fuel and restart it - fluidHandler.drain(amount, true); - burnTimer = (short) recipe.getDuration(); - } else { - // timer is non-zero, just decrement the timer - burnTimer--; - } - tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, burnTimer); + tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, (short) (burnTimer - 1)); } return true; } - return false; + + IFluidHandlerItem fluidHandler = getFluidHandler(stack); + if (fluidHandler == null) return false; + FluidStack fuelStack = fluidHandler.drain(amount, false); + if (fuelStack == null) return false; + + int burnTime = fuelBurnTimeFunc.apply(fuelStack); + if (burnTime <= 0) return false; + + if (!simulate) { + tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, (short) burnTime); + fluidHandler.drain(amount, true); + } + return true; } private IFluidHandlerItem getFluidHandler(ItemStack stack) { return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); } - private Recipe getRecipe(@NotNull FluidStack fuel) { - return fuelMap.find(Collections.emptyList(), Collections.singletonList(fuel), Objects::nonNull); - } - @Override public void addHudInformation(@NotNull ItemStack stack, @NotNull List hudText) { IFluidHandlerItem fluidHandler = getFluidHandler(stack); @@ -105,18 +101,31 @@ public void addHudInformation(@NotNull ItemStack stack, @NotNull List hu super.addHudInformation(stack, hudText); } + // todo move this to ItemGTFueledArmor if that ends up staying around + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List tooltip) { + IFluidHandlerItem fluidHandler = getFluidHandler(stack); + if (fluidHandler != null) { + IFluidTankProperties prop = fluidHandler.getTankProperties()[0]; + FluidStack fuel = prop.getContents(); + tooltip.add(I18n.format("metaitem.generic.fluid_container.tooltip", + fuel != null ? fuel.amount : 0, + prop.getCapacity(), + fuel != null ? fuel.getLocalizedName() : "")); + } + super.addInformation(stack, world, tooltip); + } + @Override public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) { - return new FueledJetpackItemStack(stack, maxCapacity) - .setFilter(new FueledJetpackFilter()) - .setCanDrain(false); + return new GTFluidHandlerItemStack(stack, maxCapacity).setFilter(new FueledJetpackFilter()); } private final class FueledJetpackFilter implements IFilter { @Override public boolean test(@NotNull FluidStack fluidStack) { - return getRecipe(fluidStack) != null; + return fuelBurnTimeFunc.apply(fluidStack) > 0; } @Override @@ -124,30 +133,4 @@ public int getPriority() { return IFilter.whitelistLikePriority(); } } - - /* Override class to automatically clear our cached state when the tank is fully emptied. */ - private final class FueledJetpackItemStack extends GTFluidHandlerItemStack { - - public FueledJetpackItemStack(@NotNull ItemStack container, int capacity) { - super(container, capacity); - } - - @Override - public FluidStack drain(FluidStack resource, boolean doDrain) { - FluidStack drained = super.drain(resource, doDrain); - if (doDrain && this.getFluid() == null) { - recipe = null; - } - return drained; - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) { - FluidStack drained = super.drain(maxDrain, doDrain); - if (doDrain && this.getFluid() == null) { - recipe = null; - } - return drained; - } - } } diff --git a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/HeatReductionBehavior.java similarity index 93% rename from src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/HeatReductionBehavior.java index ef6a548593f..3c4d5cf261a 100644 --- a/src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/HeatReductionBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; diff --git a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/NightvisionBehavior.java similarity index 98% rename from src/main/java/gregtech/common/items/armor/NightvisionBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/NightvisionBehavior.java index beafe9cc1da..db6e7a06ed9 100644 --- a/src/main/java/gregtech/common/items/armor/NightvisionBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/NightvisionBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.capability.IElectricItem; import gregtech.api.items.armoritem.ArmorHelper; diff --git a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java b/src/main/java/gregtech/common/items/armor/behavior/StepAssistBehavior.java similarity index 95% rename from src/main/java/gregtech/common/items/armor/StepAssistBehavior.java rename to src/main/java/gregtech/common/items/armor/behavior/StepAssistBehavior.java index 1884568c328..00fa06708cc 100644 --- a/src/main/java/gregtech/common/items/armor/StepAssistBehavior.java +++ b/src/main/java/gregtech/common/items/armor/behavior/StepAssistBehavior.java @@ -1,4 +1,4 @@ -package gregtech.common.items.armor; +package gregtech.common.items.armor.behavior; import gregtech.api.items.armoritem.ArmorHelper; import gregtech.api.items.armoritem.IArmorBehavior; From 9a025e9583166bdf6a680770969d43ae5a0ed731 Mon Sep 17 00:00:00 2001 From: alongstringofnumbers Date: Wed, 7 Aug 2024 17:25:29 -0700 Subject: [PATCH 12/12] Compile + Spotless --- .../java/gregtech/api/util/input/KeyBind.java | 1 - .../java/gregtech/asm/hooks/ArmorHooks.java | 1 - .../java/gregtech/common/EventHandlers.java | 3 -- .../loaders/recipe/MachineRecipeLoader.java | 3 -- .../forge/SpecialArmorPropertiesMixin.java | 38 ------------------- .../mixins/minecraft/LayerArmorBaseMixin.java | 32 +++++++++------- .../minecraft/LayerCustomHeadMixin.java | 5 ++- src/main/resources/mixins.gregtech.forge.json | 3 +- 8 files changed, 22 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/gregtech/asm/hooks/ArmorHooks.java delete mode 100644 src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java diff --git a/src/main/java/gregtech/api/util/input/KeyBind.java b/src/main/java/gregtech/api/util/input/KeyBind.java index 5b060fe9fd6..d3db93788d1 100644 --- a/src/main/java/gregtech/api/util/input/KeyBind.java +++ b/src/main/java/gregtech/api/util/input/KeyBind.java @@ -1,6 +1,5 @@ package gregtech.api.util.input; -import gregtech.api.GTValues; import gregtech.api.GregTechAPI; import gregtech.api.util.GTLog; import gregtech.core.network.packets.PacketKeyPressed; diff --git a/src/main/java/gregtech/asm/hooks/ArmorHooks.java b/src/main/java/gregtech/asm/hooks/ArmorHooks.java deleted file mode 100644 index 8b137891791..00000000000 --- a/src/main/java/gregtech/asm/hooks/ArmorHooks.java +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index c09c5e951db..963f4ad504a 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -8,7 +8,6 @@ import gregtech.api.pipenet.tile.IPipeTile; import gregtech.api.unification.material.Materials; import gregtech.api.util.CapesRegistry; -import gregtech.api.util.GTUtility; import gregtech.api.util.Mods; import gregtech.api.util.virtualregistry.VirtualEnderRegistry; import gregtech.api.worldgen.bedrockFluids.BedrockFluidVeinSaveData; @@ -17,8 +16,6 @@ import gregtech.common.items.behaviors.ToggleEnergyConsumerBehavior; import gregtech.common.metatileentities.multi.electric.centralmonitor.MetaTileEntityCentralMonitor; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.EntityOtherPlayerMP; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java index 7445045c8f1..37326354113 100644 --- a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java @@ -1407,9 +1407,6 @@ private static void registerNBTRemoval() { ModHandler.addShapelessRecipe("fueled_jetpack_nbt", ArmorItems.FUELED_JETPACK.getStack(), ArmorItems.FUELED_JETPACK.getStack()); - ModHandler.addShapelessRecipe("fluid_jetpack_clear", SEMIFLUID_JETPACK.getStackForm(), - SEMIFLUID_JETPACK.getStackForm()); - // ClipBoard ModHandler.addShapelessNBTClearingRecipe("clipboard_nbt", CLIPBOARD.getStackForm(), CLIPBOARD.getStackForm()); } diff --git a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java b/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java deleted file mode 100644 index 668335c9b4c..00000000000 --- a/src/main/java/gregtech/mixins/forge/SpecialArmorPropertiesMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package gregtech.mixins.forge; - -import gregtech.api.items.armor.IArmorItem; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.NonNullList; -import net.minecraftforge.common.ISpecialArmor; - -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ISpecialArmor.ArmorProperties.class) -public class SpecialArmorPropertiesMixin { - - @ModifyExpressionValue(method = "applyArmor", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/util/CombatRules;getDamageAfterAbsorb(FFF)F"), - remap = false) - private static float adjustArmorAbsorption(float originalDamage, EntityLivingBase entity, - NonNullList inventory, - DamageSource damageSource, double damage) { - double armorDamage = Math.max(1.0F, damage / 4.0F); - for (int i = 0; i < inventory.size(); i++) { - ItemStack itemStack = inventory.get(i); - if (itemStack.getItem() instanceof IArmorItem) { - ((IArmorItem) itemStack.getItem()).damageArmor(entity, itemStack, damageSource, (int) armorDamage, i); - if (inventory.get(i).getCount() == 0) { - inventory.set(i, ItemStack.EMPTY); - } - } - } - - return originalDamage; - } -} diff --git a/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java index 7363d82d575..42832a53ad0 100644 --- a/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/LayerArmorBaseMixin.java @@ -1,6 +1,6 @@ package gregtech.mixins.minecraft; -import gregtech.api.items.armor.IArmorItem; +import gregtech.api.items.armoritem.IGTArmor; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; @@ -19,6 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LayerArmorBase.class) +@Deprecated public class LayerArmorBaseMixin { @Inject(method = "renderArmorLayer", at = @At("TAIL")) @@ -27,7 +28,7 @@ public void renderGTArmor(EntityLivingBase entityLivingBaseIn, float limbSwing, EntityEquipmentSlot slotIn, CallbackInfo ci) { ItemStack itemStack = entityLivingBaseIn.getItemStackFromSlot(slotIn); - if ((itemStack.getItem() instanceof IArmorItem armorItem && + if ((itemStack.getItem() instanceof IGTArmor armorItem && itemStack.getItem().getEquipmentSlot(itemStack) == slotIn)) { @SuppressWarnings("unchecked") LayerArmorBase layer = (LayerArmorBase) (Object) this; @@ -43,18 +44,21 @@ public void renderGTArmor(EntityLivingBase entityLivingBaseIn, float limbSwing, GlStateManager.enableBlend(); GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - int layers = armorItem.getArmorLayersAmount(itemStack); - for (int layerIndex = 0; layerIndex < layers; layerIndex++) { - int i = armorItem.getArmorLayerColor(itemStack, layerIndex); - float f = (float) (i >> 16 & 255) / 255.0F; - float f1 = (float) (i >> 8 & 255) / 255.0F; - float f2 = (float) (i & 255) / 255.0F; - GlStateManager.color(f, f1, f2, 1.0f); - String type = layerIndex == 0 ? null : "layer_" + layerIndex; - layer.renderer.bindTexture(gregTechCEu$getArmorTexture(entityLivingBaseIn, itemStack, slotIn, type)); - armorModel.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, - scale); - } + // TODO, old implementation, still needed with new system? + /* + * int layers = armorItem.getArmorLayersAmount(itemStack); + * for (int layerIndex = 0; layerIndex < layers; layerIndex++) { + * int i = armorItem.getArmorLayerColor(itemStack, layerIndex); + * float f = (float) (i >> 16 & 255) / 255.0F; + * float f1 = (float) (i >> 8 & 255) / 255.0F; + * float f2 = (float) (i & 255) / 255.0F; + * GlStateManager.color(f, f1, f2, 1.0f); + * String type = layerIndex == 0 ? null : "layer_" + layerIndex; + * layer.renderer.bindTexture(gregTechCEu$getArmorTexture(entityLivingBaseIn, itemStack, slotIn, type)); + * armorModel.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, + * scale); + * } + */ if (itemStack.hasEffect()) { LayerArmorBase.renderEnchantedGlint(layer.renderer, entityLivingBaseIn, armorModel, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); diff --git a/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java index d6f69a7d3bb..29f6bf69fc0 100644 --- a/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/LayerCustomHeadMixin.java @@ -1,6 +1,6 @@ package gregtech.mixins.minecraft; -import gregtech.api.items.armor.IArmorItem; +import gregtech.api.items.armoritem.IGTArmor; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; @@ -16,6 +16,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(LayerCustomHead.class) +@Deprecated public class LayerCustomHeadMixin { @WrapOperation(method = "doRenderLayer", @@ -32,7 +33,7 @@ public void shouldNotRenderHead(ItemRenderer instance, EntityLivingBase entityli @Unique private static boolean gregTechCEu$shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) { ItemStack itemStack = entityLivingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - return (itemStack.getItem() instanceof IArmorItem && + return (itemStack.getItem() instanceof IGTArmor && itemStack.getItem().getEquipmentSlot(itemStack) == EntityEquipmentSlot.HEAD); } } diff --git a/src/main/resources/mixins.gregtech.forge.json b/src/main/resources/mixins.gregtech.forge.json index 81605c0c9dc..545bb5d5ce1 100644 --- a/src/main/resources/mixins.gregtech.forge.json +++ b/src/main/resources/mixins.gregtech.forge.json @@ -5,8 +5,7 @@ "minVersion": "0.8", "compatibilityLevel": "JAVA_8", "mixins" : [ - "ModelLoaderRegistryMixin", - "SpecialArmorPropertiesMixin" + "ModelLoaderRegistryMixin" ], "client": [], "server": []