From 87d6e0dedc7e2c846488f74efbe43349d2479bc6 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:36:22 -0400 Subject: [PATCH 01/56] Add Armor --- .../java/gregtech/common/items/MetaItems.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index d364eff88c6..570ab6b5777 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -1,6 +1,7 @@ package gregtech.common.items; import com.google.common.base.CaseFormat; +import gregtech.api.items.armor.ArmorMetaItem; import gregtech.api.items.materialitem.MetaPrefixItem; import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.MetaItem.MetaValueItem; @@ -8,6 +9,7 @@ import gregtech.api.items.toolitem.ToolMetaItem; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.util.GTLog; +import gregtech.common.items.Armor.MetaArmor; import gregtech.common.render.FacadeItemModel; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -491,6 +493,23 @@ private MetaItems() { public static MetaItem.MetaValueItem CLIPBOARD; + public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_CHESTPLATE; + public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_LEGGINS; + public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_BOOTS; + public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_HELMET; + + public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_CHESTPLATE; + public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_LEGGINS; + public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_BOOTS; + public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_HELMET; + + public static ArmorMetaItem.ArmorMetaValueItem SEMIFLUID_JETPACK; + public static ArmorMetaItem.ArmorMetaValueItem IMPELLER_JETPACK; + + public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_IMPELLER_JETPACK; + public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_NANO_MUSCLE_CHESTPLATE; + public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_QAURK_TECH_SUITE_CHESTPLATE; + private static final List orePrefixes = new ArrayList() {{ add(OrePrefix.dust); add(OrePrefix.dustSmall); @@ -550,6 +569,8 @@ public static void init() { tool.setRegistryName("meta_tool"); MetaOreDictItem oreDictItem = new MetaOreDictItem((short) 0); oreDictItem.setRegistryName("meta_oredict_item"); + MetaArmor armor = new MetaArmor(); + armor.setRegistryName("gt_armor"); for (OrePrefix prefix : orePrefixes) { String regName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, prefix.name()); MetaPrefixItem metaOrePrefix = new MetaPrefixItem(prefix); From 830021d4c4ec2d21b1b6167ed163cd5910639f39 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:36:52 -0400 Subject: [PATCH 02/56] Add Aromor related configs --- .../java/gregtech/common/ConfigHolder.java | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index 81e54cab620..9cf933d3797 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -169,6 +169,11 @@ public static class UnofficialOptions { @Config.Name("GregTech 6 Options") public GT6 GT6 = new GT6(); + @Config.Comment("Config category Armor hud") + @Config.Name("Hud Location") + public static ArmorHud armorHud = new ArmorHud(); + + @Config.Comment("Config category for energy compatibility features") @Config.Name("Energy Compatibility Options") public EnergyCompatibility energyOptions = new EnergyCompatibility(); @@ -278,5 +283,134 @@ public static class ClientConfig { @Config.Comment("Whether or not to enable Emissive Textures for GregTech Machines. Default: true") public boolean emissiveTextures = true; } + + public static class ArmorHud{ + @Config.Comment({"Sets HUD location", "1 - left-upper corner", "2 - right-upper corner", "3 - left-bottom corner", "4 - right-bottom corner"}) + public byte hudLocation = 1; + @Config.Comment("Horizontal offset of HUD [0 ~ 100)") + public byte hudOffsetX = 0; + @Config.Comment("Vertical offset of HUD [0 ~ 100)") + public byte hudOffsetY = 0; + + } + + @Config.Comment({"Configs for Armor and Tools", "Tiers are from ULV-0 to MAX-14"}) + public static Equipment equipment = new Equipment(); + + public static class Equipment { + @Config.Name("Nightvision Goggles") + public NightvisionGoggles nightvisionGoggles = new NightvisionGoggles(); + @Config.Name("NanoMuscle Suit") + public NanoSuit nanoSuit = new NanoSuit(); + @Config.Name("Advanced NanoMuscle Suit") + public AdvNanoSuit advNanoSuit = new AdvNanoSuit(); + @Config.Name("QuarkTech Suit") + public QuarkTechSuit quarkTechSuit = new QuarkTechSuit(); + @Config.Name("Advanced QuarkTech Suit") + public AdvQuarkTechSuit advQuarkTechSuit = new AdvQuarkTechSuit(); + @Config.Name("Impeller Jetpack") + public ImpellerJetpack impellerJetpack = new ImpellerJetpack(); + @Config.Name("Advanced Impeller Jetpack") + public AdvImpellerJetpack advImpellerJetpack = new AdvImpellerJetpack(); + @Config.Name("Semifluid Jetpack") + public SemiFluidJetpack semiFluidJetpack = new SemiFluidJetpack(); + + } + + public static class NightvisionGoggles { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 2; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 400000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 3600; + } + + public static class NanoSuit { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 3; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 1600000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 5000; + } + + public static class AdvNanoSuit { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 6; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 11400000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 5000; + } + + public static class QuarkTechSuit { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 5; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 8000000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 10000; + } + + public static class AdvQuarkTechSuit { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 6; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 100000000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 10000; + } + + public static class ImpellerJetpack { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 3; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 2520000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 125; + } + + public static class AdvImpellerJetpack { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 4; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 11400000; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int energyPerUse = 512; + } + + public static class SemiFluidJetpack { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 2; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 12000; + } + + + } } From b9784debe0c9e65bbc41289c3b5dec610179cd05 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:37:52 -0400 Subject: [PATCH 03/56] Add armor related events --- .../java/gregtech/common/EventHandlers.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 07d075d7ca8..3a44aaad790 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -5,10 +5,25 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorLogicSuite; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.net.KeysPacket; +import gregtech.api.net.NetworkHandler; +import gregtech.api.util.input.Key; +import gregtech.api.util.input.Keybinds; +import gregtech.common.items.Armor.PowerlessJetpack; +import gregtech.common.items.MetaItems; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; +import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.util.MovementInput; import net.minecraft.util.MovementInputFromOptions; @@ -16,9 +31,19 @@ import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.config.Config; +import net.minecraftforge.common.config.ConfigManager; +import net.minecraftforge.event.entity.living.EnderTeleportEvent; +import net.minecraftforge.event.entity.living.LivingFallEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.Mod; 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; @Mod.EventBusSubscriber(modid = GTValues.MODID) public class EventHandlers { @@ -47,4 +72,74 @@ public static void onPlayerInteraction(PlayerInteractEvent.RightClickBlock event } } + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onRender(final TickEvent.RenderTickEvent event) { + final Minecraft mc = Minecraft.getMinecraft(); + if (mc.inGameHasFocus && mc.world != null && !mc.gameSettings.showDebugInfo && Minecraft.isGuiEnabled()) { + final ItemStack item = mc.player.inventory.armorItemInSlot(EntityEquipmentSlot.CHEST.getIndex()); + if (item.getItem() instanceof ArmorMetaItem) { + ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) item.getItem()).getItem(item); + if (armorMetaValue.getArmorLogic() instanceof ArmorLogicSuite) { + ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); + if (armorLogic.isNeedDrawHUD()) { + armorLogic.drawHUD(item); + } + } else if (armorMetaValue.getArmorLogic() instanceof PowerlessJetpack) { + PowerlessJetpack armorLogic = (PowerlessJetpack) armorMetaValue.getArmorLogic(); + if (armorLogic.isNeedDrawHUD()) { + armorLogic.drawHUD(item); + } + } + } + } + } + + @SubscribeEvent(priority = EventPriority.LOW) + public void onKeyInput(InputEvent.KeyInputEvent event) { + if (ArmorUtils.SIDE.isClient()) { + boolean needNewPacket = false; + for (Key key : Keybinds.REGISTERY) { + boolean keyState = key.getBind().isKeyDown(); + if (key.state != keyState) { + key.state = keyState; + needNewPacket = true; + } + } + if (needNewPacket) NetworkHandler.INSTANCE.sendToServer(new KeysPacket(Keybinds.REGISTERY)); + } + } + +//TODO add jetpack + @SubscribeEvent(priority = EventPriority.LOW) + public void onEntityLivingFallEvent(LivingFallEvent event) { + if (!event.getEntity().getEntityWorld().isRemote && event.getEntity() instanceof EntityLivingBase) { + EntityLivingBase entity = (EntityLivingBase) event.getEntity(); + ItemStack armor = entity.getItemStackFromSlot(EntityEquipmentSlot.FEET); + final ItemStack NANO = MetaItems.NANO_MUSCLE_SUITE_BOOTS.getStackForm(); + final ItemStack QUARK = MetaItems.QUARK_TECH_SUITE_BOOTS.getStackForm(); + if (armor != null) { + int fallDamage = 0; + if (armor.isItemEqual(NANO)) { + fallDamage = MathHelper.floor(event.getDistance() - 3.0); + if (fallDamage >= 8) return; + } else if (armor.isItemEqual(QUARK)) { + fallDamage = Math.max((int) event.getDistance() - 10, 0); + } else { + return; + } + ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) armor.getItem()).getItem(armor); + ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) return; + int energyCost = armorLogic.getEnergyPerUse() * fallDamage; + if (item.getCharge() >= energyCost) { + item.discharge(energyCost, item.getTier(), true, false, false); + event.setCanceled(true); + } + } + } + } + + } From 96af6e6368e1c82a5fabdbf383ae21f7e6b37b8d Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:38:31 -0400 Subject: [PATCH 04/56] add Keybind related method calls --- src/main/java/gregtech/GregTechMod.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 925807f0356..79a50cbd14e 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -18,11 +18,9 @@ import gregtech.api.util.AnnotatedMaterialHandlerLoader; import gregtech.api.util.GTLog; import gregtech.api.util.NBTUtil; +import gregtech.api.util.input.Keybinds; import gregtech.api.worldgen.config.WorldGenRegistry; -import gregtech.common.CommonProxy; -import gregtech.common.ConfigHolder; -import gregtech.common.MetaEntities; -import gregtech.common.MetaFluids; +import gregtech.common.*; import gregtech.common.blocks.MetaBlocks; import gregtech.common.blocks.modelfactories.BlockCompressedFactory; import gregtech.common.blocks.modelfactories.BlockFrameFactory; @@ -41,6 +39,7 @@ import net.minecraft.client.resources.SimpleReloadableResourceManager; import gregtech.loaders.recipe.component.AnnotatedComponentHandlerLoader; import net.minecraftforge.classloading.FMLForgePlugin; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.LoaderException; @@ -78,6 +77,9 @@ public class GregTechMod { @Mod.EventHandler public void onPreInit(FMLPreInitializationEvent event) { + NetworkHandler.init(); + Keybinds.register(); + MinecraftForge.EVENT_BUS.register(new EventHandlers()); GTLog.init(event.getModLog()); NetworkHandler.init(); MetaTileEntityUIFactory.INSTANCE.init(); From 8dccf77c78ab58ca00a1bc86e958232f1367267a Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:38:53 -0400 Subject: [PATCH 05/56] Sim --- src/main/java/gregtech/common/ClientProxy.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/gregtech/common/ClientProxy.java b/src/main/java/gregtech/common/ClientProxy.java index afc45f2aaeb..40b0890d740 100644 --- a/src/main/java/gregtech/common/ClientProxy.java +++ b/src/main/java/gregtech/common/ClientProxy.java @@ -14,6 +14,7 @@ import gregtech.api.util.FluidTooltipUtil; import gregtech.api.util.GTLog; import gregtech.api.util.ModCompatibility; +import gregtech.api.util.input.Keybinds; import gregtech.common.blocks.*; import gregtech.common.covers.facade.FacadeRenderer; import gregtech.common.items.MetaItems; @@ -110,6 +111,8 @@ public void onPreLoad() { MetaEntities.initRenderers(); TextureUtils.addIconRegister(MetaFluids::registerSprites); MinecraftForge.EVENT_BUS.register(ToolRenderHandler.INSTANCE); + Keybinds.initBinds(); + Keybinds.registerClient(); } @Override From 993e9c748b8b24ec4503506b16c4e4f910fec2f2 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:39:49 -0400 Subject: [PATCH 06/56] Add armor api files --- .../api/items/armor/ArmorLogicSuite.java | 168 ++++++++++++ .../gregtech/api/items/armor/ArmorUtils.java | 246 +++++++++++++++++ .../api/items/armor/QuarkTechSuite.java | 253 ++++++++++++++++++ 3 files changed, 667 insertions(+) create mode 100644 src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java create mode 100644 src/main/java/gregtech/api/items/armor/ArmorUtils.java create mode 100644 src/main/java/gregtech/api/items/armor/QuarkTechSuite.java diff --git a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java new file mode 100644 index 00000000000..ab778641956 --- /dev/null +++ b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java @@ -0,0 +1,168 @@ +package gregtech.api.items.armor; + + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; +import gregtech.api.items.armor.ISpecialArmorLogic; +import gregtech.api.items.metaitem.ElectricStats; +import net.minecraft.client.resources.I18n; +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.*; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; +import java.util.List; + +public abstract class ArmorLogicSuite implements ISpecialArmorLogic { + + protected final int energyPerUse; + protected final int tier; + protected final int maxCapacity; + protected final EntityEquipmentSlot SLOT; + @SideOnly(Side.CLIENT) + protected ArmorUtils.ModularHUD HUD; + + protected ArmorLogicSuite(int energyPerUse, int maxCapacity, int tier, EntityEquipmentSlot slot) { + this.energyPerUse = energyPerUse; + this.maxCapacity = maxCapacity; + this.tier = tier; + this.SLOT = slot; + if (ArmorUtils.SIDE.isClient() && this.isNeedDrawHUD()) { + HUD = new ArmorUtils.ModularHUD(); + } + } + + @Override + public abstract void onArmorTick(World world, EntityPlayer player, ItemStack itemStack); + + @Override + public int getArmorLayersAmount(ItemStack itemStack) { + return 1; + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + int damageLimit = Integer.MAX_VALUE; + if (source.isUnblockable()) return new ArmorProperties(0, 0.0, 0); + if (energyPerUse > 0) damageLimit = (int) Math.min(damageLimit, item.getCharge() * 1.0 / energyPerUse * 25.0); + return new ArmorProperties(0, getAbsorption(armor) * getDamageAbsorption(), damageLimit); + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) return 0; + if (item.getCharge() >= energyPerUse) { + return (int) Math.round(20.0F * this.getAbsorption(armor) * this.getDamageAbsorption()); + } else { + return (int) Math.round(4.0F * this.getAbsorption(armor) * this.getDamageAbsorption()); + } + } + + @Override + public void addToolComponents(ArmorMetaValueItem mvi) { +// mvi.addStats(ElectricStats.createElectricItem(maxCapacity, tier)); + 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) { + } + + 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(SLOT.getIndex()).isEmpty() && !player.isSneaking()) { + player.inventory.armorInventory.set(SLOT.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 void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { + } + + @Override + public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { + return SLOT; + } + + @Override + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { + return ImmutableMultimap.of(); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return ""; + } + + public abstract double getDamageAbsorption(); + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return false; + } + + @SideOnly(Side.CLIENT) + public void drawHUD(ItemStack stack) { + this.addCapacityHUD(stack); + this.HUD.draw(); + this.HUD.reset(); + } + + @SideOnly(Side.CLIENT) + protected void addCapacityHUD(ItemStack stack) { + IElectricItem cont = stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (cont.getCharge() == 0) return; + float energyMultiplier = cont.getCharge() * 100.0F / cont.getMaxCharge(); + this.HUD.newString(I18n.format("metaarmor.hud.energy_lvl", String.format("%.1f", energyMultiplier) + "%")); + } + + public int getEnergyPerUse() { + return this.energyPerUse; + } + + protected float getAbsorption(ItemStack itemStack) { + switch (this.getEquipmentSlot(itemStack)) { + case HEAD: + return 0.15F; + case CHEST: + return 0.4F; + case LEGS: + return 0.3F; + case FEET: + return 0.15F; + default: + return 0.0F; + } + } +} diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java new file mode 100644 index 00000000000..a240ea16a4b --- /dev/null +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -0,0 +1,246 @@ +package gregtech.api.items.armor; + + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.util.ItemStackKey; +import gregtech.api.util.input.EnumKey; +import gregtech.api.util.input.Key; +import gregtech.api.util.input.Keybinds; +import gregtech.common.ConfigHolder; +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.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; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nonnull; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class ArmorUtils { + + public static final Side SIDE = FMLCommonHandler.instance().getSide(); + public static final SoundEvent JET_ENGINE = new SoundEvent(new ResourceLocation("gtadditions:jet_engine")); + + /** + * Check is possible to charge item + */ + public static boolean isPossibleToCharge(ItemStack chargeable) { + IElectricItem container = chargeable.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (container != null) { + return container.getCharge() < container.getMaxCharge() && (container.getCharge() + container.getTransferLimit()) <= container.getMaxCharge(); + } + return false; + } + + /** + * Searching in player's inventory for tool/armor item, w + * + * @param tier of charger + * @return index of slot, where is item + */ + public static int getChargeableItem(EntityPlayer player, int tier) { + int result = -1; + for (int i = 0; i < player.inventory.mainInventory.size(); i++) { + ItemStack current = player.inventory.mainInventory.get(i); + IElectricItem item = current.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) continue; + + if (isPossibleToCharge(current) && item.getTier() <= tier) { + result = i; + break; + } + } + return result; + } + + /** + * Spawn particle behind player with speedY speed + */ + public static void spawnParticle(World world, EntityPlayer player, EnumParticleTypes type, double speedY) { + if (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(@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 + */ + @SuppressWarnings("deprecation") + 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 + * + * @return result of eating food + */ + public static ActionResult canEat(EntityPlayer player, ItemStack food) { + if (!(food.getItem() instanceof ItemFood)) return new ActionResult<>(EnumActionResult.FAIL, food); + ItemFood foodItem = (ItemFood) food.getItem(); + if (player.getFoodStats().needFood()) { + food.setCount(food.getCount() - 1); + float saturation = foodItem.getSaturationModifier(food); + int hunger = 20 - player.getFoodStats().getFoodLevel(); + saturation += (hunger - foodItem.getHealAmount(food)) < 0 ? foodItem.getHealAmount(food) - hunger : 1.0F; + player.getFoodStats().addStats(foodItem.getHealAmount(food), saturation); + return new ActionResult<>(EnumActionResult.SUCCESS, food); + } else { + return new ActionResult<>(EnumActionResult.FAIL, food); + } + } + + /** + * Check if current key being pressed right now on both sides + * + * @return true if key currently pressed + */ + public static boolean isKeyDown(EntityPlayer player, EnumKey type) { + if (SIDE.isClient()) { + return Keybinds.REGISTERY.get(type.getID()).state; + } else { + if (Keybinds.PLAYER_KEYS.get(player) == null) return false; + List playerKeys = Keybinds.PLAYER_KEYS.get(player); + if (playerKeys.isEmpty()) return false; + return playerKeys.get(type.getID()).state; + } + } + + + /** + * Format itemstacks list from [1xitem@1, 1xitem@1, 1xitem@2] to + * [2xitem@1, 1xitem@2] + * + * @return Formated list + */ + public static List format(List input) { + Map items = new HashMap<>(); + List output = new ArrayList<>(); + for (ItemStack itemStack : input) { + ItemStackKey current = new ItemStackKey(itemStack); + if (items.containsKey(current)) { + int amount = items.get(current); + items.replace(current, ++amount); + } else { + items.put(current, 1); + } + } + for (Entry entry : items.entrySet()) { + ItemStack stack = entry.getKey().getItemStack(); + stack.setCount(entry.getValue()); + output.add(stack); + } + return output; + } + + + 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, + * may be will add some additional functions + */ + @SideOnly(Side.CLIENT) + public static class ModularHUD { + private byte stringAmount = 0; + private final List stringList; + private final static Minecraft mc = Minecraft.getMinecraft(); + + public ModularHUD() { + this.stringList = new ArrayList<>(); + } + + public void newString(String string) { + this.stringAmount++; + this.stringList.add(string); + } + + public void draw() { + for (int i = 0; i < stringAmount; i++) { + Pair coords = this.getStringCoord(i); + mc.ingameGUI.drawString(mc.fontRenderer, stringList.get(i), coords.getLeft(), coords.getRight(), 0xFFFFFF); + } + } + + private Pair getStringCoord(int index) { + int posX; + int posY; + int fontHeight = mc.fontRenderer.FONT_HEIGHT; + int windowHeight = new ScaledResolution(mc).getScaledHeight(); + int windowWidth = new ScaledResolution(mc).getScaledWidth(); + int stringWidth = mc.fontRenderer.getStringWidth(stringList.get(index)); + switch (ConfigHolder.UnofficialOptions.armorHud.hudLocation) { + case 1: + posX = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX; + posY = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetY + (fontHeight * index); + break; + case 2: + posX = windowWidth - (1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX) - stringWidth; + posY = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetY + (fontHeight * index); + break; + case 3: + posX = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX; + posY = windowHeight - fontHeight * (stringAmount - index) - 1 - ConfigHolder.UnofficialOptions.armorHud.hudOffsetY; + break; + case 4: + posX = windowWidth - (1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX) - stringWidth; + posY = windowHeight - fontHeight * (stringAmount - index) - 1 - ConfigHolder.UnofficialOptions.armorHud.hudOffsetY; + break; + default: + throw new IllegalArgumentException(); + } + return Pair.of(posX, posY); + } + + public void reset() { + this.stringAmount = 0; + this.stringList.clear(); + } + + } +} diff --git a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java new file mode 100644 index 00000000000..f48e78ea283 --- /dev/null +++ b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java @@ -0,0 +1,253 @@ +package gregtech.api.items.armor; + + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import gregtech.common.items.MetaItems; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.ActionResult; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; + +import javax.annotation.Nonnull; +import java.util.IdentityHashMap; +import java.util.LinkedList; +import java.util.Map; + +public class QuarkTechSuite extends ArmorLogicSuite { + protected static final Map potionRemovalCost = new IdentityHashMap<>(); + private float charge = 0.0F; + + public QuarkTechSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity, int tier) { + super(energyPerUse, capacity, tier, slot); + potionRemovalCost.put(MobEffects.POISON, 10000); + potionRemovalCost.put(MobEffects.WITHER, 25000); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + byte toggleTimer = data.getByte("toggleTimer"); + boolean ret = false; + switch (SLOT) { + case HEAD: + int air = player.getAir(); + if (item.canUse(energyPerUse / 100) && air < 100) { + player.setAir(air + 200); + item.discharge(energyPerUse / 100, item.getTier(), true, false, false); + ret = true; + } + + if (item.canUse(energyPerUse / 10) && player.getFoodStats().needFood()) { + int slotId = -1; + for (int i = 0; i < player.inventory.mainInventory.size(); i++) { + ItemStack current = player.inventory.mainInventory.get(i); + if (!current.isEmpty() && !current.isItemEqual(ItemStack.EMPTY) && current.getItem() instanceof ItemFood) { + slotId = i; + break; + } + } + + if (slotId > -1) { + ItemStack stack = player.inventory.mainInventory.get(slotId); + ActionResult result = ArmorUtils.canEat(player, stack); + stack = result.getResult(); + if (stack.isEmpty()) { + player.inventory.mainInventory.set(slotId, ItemStack.EMPTY); + } + + if (result.getType() == EnumActionResult.SUCCESS) { + item.discharge(energyPerUse / 10, item.getTier(), true, false, false); + } + + ret = true; + } + } + + for (PotionEffect effect : new LinkedList<>(player.getActivePotionEffects())) { + Potion potion = effect.getPotion(); + Integer cost = potionRemovalCost.get(potion); + if (cost != null) { + cost = cost * (effect.getAmplifier() + 1); + if (item.canUse(cost)) { + item.discharge(cost, item.getTier(), true, false, false); + player.removePotionEffect(potion); + } + } + } + + boolean nightvision = data.getBoolean("Nightvision"); + if (ArmorUtils.isKeyDown(player, EnumKey.MENU) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + toggleTimer = 10; + nightvision = !nightvision; + if (!world.isRemote) { + data.setBoolean("Nightvision", nightvision); + if (nightvision) { + player.sendMessage(new TextComponentTranslation("metaarmor.qts.nightvision.enabled")); + } else { + player.sendMessage(new TextComponentTranslation("metaarmor.qts.nightvision.disabled")); + } + } + } + + if (!world.isRemote && toggleTimer > 0) { + --toggleTimer; + data.setByte("toggleTimer", toggleTimer); + } + + if (nightvision && !world.isRemote && item.canUse(energyPerUse / 100)) { + BlockPos pos = new BlockPos(MathHelper.floor(player.posX), MathHelper.floor(player.posY), MathHelper.floor(player.posZ)); + int skylight = player.getEntityWorld().getLightFromNeighbors(pos); + if (skylight > 8) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 100, 0, true, true)); + } else { + player.removePotionEffect(MobEffects.BLINDNESS); + player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 300, 0, true, true)); + } + item.discharge(energyPerUse / 100, item.getTier(), true, false, false); + ret = true; + } + break; + case CHEST: + player.extinguish(); + break; + case LEGS: + if (item.canUse(energyPerUse / 10) && (player.onGround || player.isInWater()) && ArmorUtils.isKeyDown(player, EnumKey.FORWARD) && (player.isSprinting() || ArmorUtils.isKeyDown(player, EnumKey.BOOST))) { + byte consumerTicks = data.getByte("consumerTicks"); + ++consumerTicks; + if (consumerTicks >= 10) { + consumerTicks = 0; + item.discharge(energyPerUse / 10, item.getTier(), true, false, false); + ret = true; + } + data.setByte("consumerTicks", consumerTicks); + float speed = 0.25F; + if (player.isInWater()) { + speed = 0.1F; + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY += 0.1D; + } + } + player.moveRelative(0.0F, 0.0F, 1.0F, speed); + } else if (item.canUse(energyPerUse / 10) && player.isInWater() && (ArmorUtils.isKeyDown(player, EnumKey.SHIFT) || ArmorUtils.isKeyDown(player, EnumKey.JUMP))) { + byte consumerTicks = data.getByte("consumerTicks"); + ++consumerTicks; + if (consumerTicks >= 10) { + consumerTicks = 0; + item.discharge(energyPerUse / 10, item.getTier(), true, false, false); + ret = true; + } + data.setByte("consumerTicks", consumerTicks); + double acceleration = 0.085D; + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT) && ArmorUtils.isKeyDown(player, EnumKey.BOOST)) + player.motionY -= acceleration; + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.BOOST)) + player.motionY += acceleration; + } + break; + case FEET: + if (!world.isRemote) { + boolean onGround = !data.hasKey("onGround") || data.getBoolean("onGround"); + if (onGround && !player.onGround && ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.BOOST)) { + item.discharge(energyPerUse / 10, item.getTier(), true, false, false); + ret = true; + } + + if (player.onGround != onGround) { + data.setBoolean("onGround", player.onGround); + } + } else { + if (item.canUse(energyPerUse / 10) && player.onGround) { + this.charge = 1.0F; + } + + if (player.motionY >= 0.0D && this.charge > 0.0F && !player.isInWater()) { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.BOOST)) { + if (this.charge == 1.0F) { + player.motionX *= 3.6D; + player.motionZ *= 3.6D; + } + + player.motionY += (double) (this.charge * 0.32F); + this.charge = (float) (this.charge * 0.7D); + } else if (this.charge < 1.0F) { + this.charge = 0.0F; + } + } + } + break; + default: + break; + } + + if (ret) { + player.inventoryContainer.detectAndSendChanges(); + } + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + int damageLimit = Integer.MAX_VALUE; + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (energyPerUse > 0) { + damageLimit = (int) Math.min(damageLimit, 25.0D * item.getCharge() / energyPerUse); + } + + if (source == DamageSource.FALL) { + if (SLOT == EntityEquipmentSlot.FEET) { + return new ArmorProperties(10, 1.0D, damageLimit); + } + + if (SLOT == EntityEquipmentSlot.LEGS) { + return new ArmorProperties(9, 0.8D, damageLimit); + } + } + return new ArmorProperties(8, getDamageAbsorption() * getAbsorption(armor), damageLimit); + } + + @Override + public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + return source != DamageSource.FALL && source != DamageSource.DROWN && source != DamageSource.STARVE && source != DamageSource.OUT_OF_WORLD; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + item.discharge(energyPerUse * damage, item.getTier(), true, false, false); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + ItemStack currentChest = Minecraft.getMinecraft().player.inventory.armorItemInSlot(EntityEquipmentSlot.CHEST.getIndex()); + ItemStack advancedChest = MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm(); + String armorTexture = "quark_tech_suite"; + if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_quark_tech_suite"; + return SLOT != EntityEquipmentSlot.LEGS ? + String.format("gtadditions:textures/armor/%s_1.png", armorTexture) : + String.format("gtadditions:textures/armor/%s_2.png", armorTexture); + } + + @Override + public double getDamageAbsorption() { + return SLOT == EntityEquipmentSlot.CHEST ? 1.2D : 1.0D; + } +} From 0152430f8c7a6f83a5fe3ee5e360fe8cee626784 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:40:42 -0400 Subject: [PATCH 07/56] Add Armor classes --- .../common/items/Armor/AdvancedJetpack.java | 178 +++++++++++ .../items/Armor/AdvancedNanoMuscleSuite.java | 262 ++++++++++++++++ .../items/Armor/AdvancedQurakTechSuite.java | 291 ++++++++++++++++++ .../gregtech/common/items/Armor/Jetpack.java | 160 ++++++++++ .../common/items/Armor/MetaArmor.java | 34 ++ .../common/items/Armor/NanoMuscleSuite.java | 135 ++++++++ .../common/items/Armor/PowerlessJetpack.java | 280 +++++++++++++++++ 7 files changed, 1340 insertions(+) create mode 100644 src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java create mode 100644 src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java create mode 100644 src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java create mode 100644 src/main/java/gregtech/common/items/Armor/Jetpack.java create mode 100644 src/main/java/gregtech/common/items/Armor/MetaArmor.java create mode 100644 src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java create mode 100644 src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java new file mode 100644 index 00000000000..00039941785 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java @@ -0,0 +1,178 @@ +package gregtech.common.items.Armor; + + + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import net.minecraft.client.resources.I18n; +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 net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + + public class AdvancedJetpack extends Jetpack { + + public AdvancedJetpack(int energyPerUse, int capacity, int tier) { + super(energyPerUse, capacity, tier); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack item) { + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); + boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); + boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); + byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; + boolean result = false; + + // Mode toggle + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { + flyEnabled = !flyEnabled; + toggleTimer = 10; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + hoverMode = !hoverMode; + toggleTimer = 10; + if (!world.isRemote) { + String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; + player.sendMessage(new TextComponentTranslation(status)); + } + } + + if (player.onGround) hoverMode = false; + + // Fly mechanics + if (flyEnabled && cont.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { + if (hoverMode) { + if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY > 0.1D) { + player.motionY -= 0.1D; + } + + if (player.motionY < -0.1D) { + player.motionY += 0.1D; + } + + if (player.motionY <= 0.1D && player.motionY >= -0.1D) { + player.motionY = 0.0D; + } + + if (player.motionY > 0.1D || player.motionY < -0.1D) { + if (player.motionY < 0) { + player.motionY += 0.05D; + } else { + player.motionY -= 0.0025D; + } + } else { + player.motionY = 0.0D; + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY = 0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = -0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = 0.0D; + } + + player.fallDistance = 0.0F; + result = true; + } else { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY <= 0.8D) player.motionY += 0.2D; + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.85F, 0.1F); + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + player.fallDistance = 0.0F; + result = true; + } + } + } + + // Fly discharge + if (result) { + cont.discharge(energyPerUse, cont.getTier(), true, false, false); + ArmorUtils.resetPlayerFloatingTime(player); + } + + // Do not spam of server packets + if (toggleTimer > 0) { + toggleTimer--; + } + + data.setBoolean("FlyMode", flyEnabled); + data.setBoolean("Hover", hoverMode); + data.setByte("ToggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + super.addInfo(itemStack, lines); + } + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (!cont.canUse(energyPerUse)) return; + NBTTagCompound data = item.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); + } + + if (data.hasKey("FlyMode")) { + String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("metaarmor.hud.fly_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(); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gtadditions:textures/armor/advanced_jetpack.png"; + } + } + diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java new file mode 100644 index 00000000000..c3480ab6406 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java @@ -0,0 +1,262 @@ +package gregtech.common.items.Armor; + + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import gregtech.common.items.MetaItems; +import net.minecraft.client.resources.I18n; +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.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class AdvancedNanoMuscleSuite extends NanoMuscleSuite { + private int cachedSlotId = -1; + + + public AdvancedNanoMuscleSuite() { + super(EntityEquipmentSlot.CHEST, 5000, 11400000); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack item) { + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); + boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); + boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); + byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; + boolean canShare = data.hasKey("CanShare") && data.getBoolean("CanShare"); + boolean result = false; + + // Mode toggle + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { + flyEnabled = !flyEnabled; + toggleTimer = 10; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + hoverMode = !hoverMode; + toggleTimer = 10; + if (!world.isRemote) { + String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; + player.sendMessage(new TextComponentTranslation(status)); + } + } + + // Backpack mechanics + if (canShare && !world.isRemote) { + // Trying to find item in inventory + if (cachedSlotId < 0) { + // Do not call this method often + if (world.getWorldTime() % 40 == 0) { + cachedSlotId = ArmorUtils.getChargeableItem(player, cont.getTier()); + } + } else { + ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); + if (!ArmorUtils.isPossibleToCharge(cachedItem)) { + cachedSlotId = -1; + } + } + + + // Do neighbor armor charge + for (int i = 0; i < player.inventory.armorInventory.size(); i++) { + IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) continue; + if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) + continue; + if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + + // Do charge + if (cachedSlotId >= 0) { + IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) { + return; + } + if (cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + } + + if (player.onGround) hoverMode = false; + + // Fly mechanics + if (flyEnabled && cont.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { + if (hoverMode) { + if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY > 0.1D) { + player.motionY -= 0.1D; + } + + if (player.motionY < -0.1D) { + player.motionY += 0.1D; + } + + if (player.motionY <= 0.1D && player.motionY >= -0.1D) { + player.motionY = 0.0D; + } + + if (player.motionY > 0.1D || player.motionY < -0.1D) { + if (player.motionY < 0) { + player.motionY += 0.05D; + } else { + player.motionY -= 0.0025D; + } + } else { + player.motionY = 0.0D; + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY = 0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = -0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = 0.0D; + } + + player.fallDistance = 0.0F; + result = true; + } else { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY <= 0.8D) player.motionY += 0.2D; + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.85F, 0.1F); + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + player.fallDistance = 0.0F; + result = true; + } + } + } + + // Fly discharge + if (result) { + cont.discharge(MathHelper.floor(energyPerUse / 2.0), cont.getTier(), true, false, false); + ArmorUtils.resetPlayerFloatingTime(player); + } + + // Do not spam of server packets + if (toggleTimer > 0) { + toggleTimer--; + } + + data.setBoolean("CanShare", canShare); + data.setBoolean("FlyMode", flyEnabled); + data.setBoolean("Hover", hoverMode); + data.setByte("ToggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + String state; + if (data.hasKey("CanShare")) { + state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); + } else { + state = I18n.format("metaarmor.hud.status.disabled"); + } + lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); + lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); + super.addInfo(itemStack, lines); + } + + @Override + public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { + ItemStack armor = player.getHeldItem(hand); + + if (armor.getItem() instanceof ArmorMetaItem && player.isSneaking()) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(armor); + boolean canShareEnergy = data.hasKey("CanShare") && data.getBoolean("CanShare"); + + canShareEnergy = !canShareEnergy; + String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); + if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); + data.setBoolean("CanShare", canShareEnergy); + return ActionResult.newResult(EnumActionResult.SUCCESS, armor); + } + + return super.onRightClick(world, player, hand); + } + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (!cont.canUse(energyPerUse)) return; + NBTTagCompound data = item.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); + } + + if (data.hasKey("FlyMode")) { + String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("metaarmor.hud.fly_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(); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gtadditions:textures/armor/advanced_nano_muscle_suite_1.png"; + } + + @Override + public double getDamageAbsorption() { + return 1.0D; + } + +} diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java new file mode 100644 index 00000000000..080fa1bc57e --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java @@ -0,0 +1,291 @@ +package gregtech.common.items.Armor; + +import gregtech.api.GTValues; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.items.armor.QuarkTechSuite; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import gregtech.common.items.MetaItems; +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.ActionResult; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.MathHelper; +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 javax.annotation.Nonnull; +import java.util.List; + +public class AdvancedQurakTechSuite extends QuarkTechSuite { + private int cachedSlotId = -1; + + public AdvancedQurakTechSuite() { + super(EntityEquipmentSlot.CHEST, 10000, 100000000, GTValues.IV); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack item) { + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); + boolean hoverMode = data.hasKey("Hover") ? data.getBoolean("Hover") : false; + boolean flyEnabled = data.hasKey("FlyMode") ? data.getBoolean("FlyMode") : false; + byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; + boolean canShare = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; + boolean result = false; + float energyUsageMultiplier = 1.0F; + + // Mode toggle + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { + flyEnabled = !flyEnabled; + toggleTimer = 10; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + hoverMode = !hoverMode; + toggleTimer = 10; + if (!world.isRemote) { + String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; + player.sendMessage(new TextComponentTranslation(status)); + } + } + + // Additional features + if (player.onGround) hoverMode = false; + if (cont.getCharge() >= energyPerUse) player.extinguish(); + + // Backpack mechanics + if (canShare && !world.isRemote) { + // Trying to find item in inventory + if (cachedSlotId < 0) { + // Do not call this method often + if (world.getWorldTime() % 40 == 0) { + cachedSlotId = ArmorUtils.getChargeableItem(player, cont.getTier()); + } + } else { + ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); + if (!ArmorUtils.isPossibleToCharge(cachedItem)) { + cachedSlotId = -1; + } + } + + + // Do neighbor armor charge + for (int i = 0; i < player.inventory.armorInventory.size(); i++) { + IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) continue; + if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) + continue; + if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + + // Do charge + if (cachedSlotId >= 0) { + IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) { + return; + } + if (cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + } + + // Fly mechanics + if (flyEnabled && cont.canUse(energyPerUse)) { + if (hoverMode) { + if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY > 0.1D) { + player.motionY -= 0.1D; + } + + if (player.motionY < -0.1D) { + player.motionY += 0.1D; + } + + if (player.motionY <= 0.1D && player.motionY >= -0.1D) { + player.motionY = 0.0D; + } + + if (player.motionY > 0.1D || player.motionY < -0.1D) { + if (player.motionY < 0) { + player.motionY += 0.05D; + } else { + player.motionY -= 0.0025D; + } + } else { + player.motionY = 0.0D; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY = 0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = -0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = 0.0D; + } + + player.fallDistance = 0.0F; + result = true; + } else { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (ArmorUtils.isKeyDown(player, EnumKey.BOOST) && !ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + if (player.motionY <= 1.6D) player.motionY += 0.4D; + energyUsageMultiplier = 1.5F; + } else { + if (player.motionY <= 0.8D) player.motionY += 0.2D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + if (ArmorUtils.isKeyDown(player, EnumKey.BOOST)) { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.20F); + energyUsageMultiplier = 1.5F; + } else { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.1F); + } + } + player.fallDistance = 0.0F; + result = true; + } + } + } + + // Fly discharge + if (result) { + cont.discharge(MathHelper.floor(energyPerUse * energyUsageMultiplier / 4), cont.getTier(), true, false, false); + ArmorUtils.resetPlayerFloatingTime(player); + } + + // Do not spam of server packets + if (toggleTimer > 0) { + toggleTimer--; + } + + data.setBoolean("CanShare", canShare); + data.setBoolean("FlyMode", flyEnabled); + data.setBoolean("Hover", hoverMode); + data.setByte("ToggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + String state = ""; + if (data.hasKey("CanShare")) { + state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); + } else { + state = I18n.format("metaarmor.hud.status.disabled"); + } + lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); + lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); + super.addInfo(itemStack, lines); + } + + @Override + public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { + if (player.getHeldItem(hand).getItem() instanceof ArmorMetaItem && player.isSneaking()) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(player.getHeldItem(hand)); + boolean canShareEnergy = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; + + canShareEnergy = !canShareEnergy; + String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); + if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); + data.setBoolean("CanShare", canShareEnergy); + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } else { + return super.onRightClick(world, player, hand); + } + } + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (!cont.canUse(energyPerUse)) return; + NBTTagCompound data = item.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); + } + + if (data.hasKey("FlyMode")) { + String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("metaarmor.hud.gravi_engine", 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(); + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + int damageLimit = Integer.MAX_VALUE; + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (energyPerUse > 0) { + damageLimit = (int) Math.min(damageLimit, 25.0D * item.getCharge() / energyPerUse); + } + return new ArmorProperties(8, getDamageAbsorption() * getAbsorption(armor), damageLimit); + } + + @Override + public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + if (source == DamageSource.FALL || source == DamageSource.DROWN || source == DamageSource.STARVE) { + return false; + } else { + return true; + } + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gtadditions:textures/armor/advanced_quark_tech_suite_1.png"; + } + + @Override + public double getDamageAbsorption() { + return 1.5D; + } +} diff --git a/src/main/java/gregtech/common/items/Armor/Jetpack.java b/src/main/java/gregtech/common/items/Armor/Jetpack.java new file mode 100644 index 00000000000..a8470289db7 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/Jetpack.java @@ -0,0 +1,160 @@ +package gregtech.common.items.Armor; + + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +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.EnumKey; +import net.minecraft.client.resources.I18n; +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.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 javax.annotation.Nonnull; + +public class Jetpack extends ArmorLogicSuite { + + public Jetpack(int energyPerUse, int capacity, int tier) { + super(energyPerUse, capacity, tier, EntityEquipmentSlot.CHEST); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { + IElectricItem container = stack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (container.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(stack); + byte toggleTimer = 0; + boolean hover = false; + boolean res = false; + if (data.hasKey("toggleTimer")) toggleTimer = data.getByte("toggleTimer"); + if (data.hasKey("hover")) hover = data.getBoolean("hover"); + + if (ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && ArmorUtils.isKeyDown(player, EnumKey.JUMP) && toggleTimer == 0) { + hover = !hover; + toggleTimer = 10; + if (!world.isRemote) { + data.setBoolean("hover", hover); + if (hover) { + player.sendMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable")); + } else { + player.sendMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable")); + } + } + } + + if (!hover) { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY < 0.6D) player.motionY += 0.2D; + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.1F); + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + res = true; + } + } else { + if (!player.onGround) { + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.3D); + ArmorUtils.playJetpackSound(player); + } + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD) && player.motionX < 0.5D && player.motionZ < 0.5D) { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.025F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY < 0.5D) { + player.motionY += 0.125D; + } + } else if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY < -0.5D) player.motionY += 0.1D; + } else if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) && !ArmorUtils.isKeyDown(player, EnumKey.SHIFT) && !player.onGround) { + if (player.motionY < 0 && player.motionY >= -0.03D) player.motionY = -0.025D; + if (player.motionY < -0.025D) { + if (player.motionY + 0.2D > -0.025D) { + player.motionY = -0.025D; + } else { + player.motionY += 0.2D; + } + } + } + player.fallDistance = 0.0F; + res = true; + } + + if (res && !player.onGround) { + container.discharge(energyPerUse, container.getTier(), false, false, false); + } + + if (world.getWorldTime() % 40 == 0 && !player.onGround) { + ArmorUtils.resetPlayerFloatingTime(player); + } + + if (toggleTimer > 0) toggleTimer--; + + data.setByte("toggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { + } + + @Override + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { + return ImmutableMultimap.of(); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gtadditions:textures/armor/jetpack.png"; + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + return new ArmorProperties(0, 0, 0); + } + + @Override + public double getDamageAbsorption() { + return 0; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean isNeedDrawHUD() { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + 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(); + + } +} diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java new file mode 100644 index 00000000000..64303fbe5e5 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -0,0 +1,34 @@ +package gregtech.common.items.Armor; + +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.QuarkTechSuite; +import gregtech.common.ConfigHolder; +import gregtech.common.items.MetaItems; +import net.minecraft.inventory.EntityEquipmentSlot; + +public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem> { + @Override + public void registerSubItems() { + ConfigHolder.UnofficialOptions.Equipment e = ConfigHolder.UnofficialOptions.equipment; + MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); + MetaItems.NANO_MUSCLE_SUITE_LEGGINS = addItem(1, "nms.leggins").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); + MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); + MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(3, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); + + MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); + MetaItems.QUARK_TECH_SUITE_LEGGINS = addItem(5, "qts.leggins").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); + MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); + MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(7, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); + + MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack(e.semiFluidJetpack.capacity, e.semiFluidJetpack.voltageTier)); + MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(e.impellerJetpack.energyPerUse, e.impellerJetpack.capacity, e.impellerJetpack.voltageTier)); + + + MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQurakTechSuite()); + MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite()); + MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(e.advImpellerJetpack.energyPerUse, e.advImpellerJetpack.capacity, e.advImpellerJetpack.voltageTier)); + + MetaItems.IMPELLER_JETPACK.setModelAmount(8); + + } +} diff --git a/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java b/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java new file mode 100644 index 00000000000..eef521edc10 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java @@ -0,0 +1,135 @@ +package gregtech.common.items.Armor; + + +import gregtech.api.GTValues; +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.EnumKey; +import gregtech.common.items.MetaItems; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +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.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; + +import javax.annotation.Nonnull; + +public class NanoMuscleSuite extends ArmorLogicSuite { + + public NanoMuscleSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity) { + super(energyPerUse, capacity, GTValues.HV, slot); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); + byte toggleTimer = nbtData.getByte("toggleTimer"); + boolean ret = false; + if (SLOT == EntityEquipmentSlot.HEAD) { + boolean nightvision = nbtData.getBoolean("Nightvision"); + if (ArmorUtils.isKeyDown(player, EnumKey.MENU) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + toggleTimer = 10; + nightvision = !nightvision; + if (!world.isRemote) { + nbtData.setBoolean("Nightvision", nightvision); + if (nightvision) { + player.sendMessage(new TextComponentTranslation("metaarmor.nms.nightvision.enabled")); + } else { + player.sendMessage(new TextComponentTranslation("metaarmor.nms.nightvision.disabled")); + } + } + } + + if (nightvision && !world.isRemote && item.getCharge() >= (energyPerUse / 100)) { + BlockPos pos = new BlockPos((int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ)); + int skylight = player.getEntityWorld().getLightFromNeighbors(pos); + if (skylight > 8) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 100, 0, true, true)); + } else { + player.removePotionEffect(MobEffects.BLINDNESS); + player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 300, 0, true, true)); + } + ret = true; + item.discharge((energyPerUse / 100), GTValues.HV, true, false, false); + } + + if (!nightvision && !world.isRemote) { + PotionEffect blindness = player.getActivePotionEffect(MobEffects.BLINDNESS); + PotionEffect night_vision = player.getActivePotionEffect(MobEffects.NIGHT_VISION); + if (blindness != null) { + if (blindness.getDuration() < 1) player.removePotionEffect(MobEffects.BLINDNESS); + } + if (night_vision != null) { + if (night_vision.getDuration() < 1) player.removePotionEffect(MobEffects.NIGHT_VISION); + } + } + + if (!world.isRemote && toggleTimer > 0) { + --toggleTimer; + nbtData.setByte("toggleTimer", toggleTimer); + } + } + if (ret) { + player.inventoryContainer.detectAndSendChanges(); + } + } + + public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + if (source == DamageSource.FALL) return true; + return false; + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + IElectricItem container = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + int damageLimit = Integer.MAX_VALUE; + if (source == DamageSource.FALL && this.getEquipmentSlot(armor) == EntityEquipmentSlot.FEET) { + if (energyPerUse > 0) { + damageLimit = (int) Math.min(damageLimit, 25.0 * container.getCharge() / energyPerUse); + } + return new ArmorProperties(10, (damage < 8.0) ? 1.0 : 0.875, damageLimit); + } + return super.getProperties(player, armor, source, damage, equipmentSlot); + } + + @Override + public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { + return SLOT; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + item.discharge(energyPerUse * damage, item.getTier(), true, false, false); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + ItemStack currentChest = Minecraft.getMinecraft().player.inventory.armorItemInSlot(EntityEquipmentSlot.CHEST.getIndex()); + ItemStack advancedChest = MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm(); + String armorTexture = "nano_muscule_suite"; + if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_nano_muscle_suite"; + return SLOT != EntityEquipmentSlot.LEGS ? + String.format("gtadditions:textures/armor/%s_1.png", armorTexture) : + String.format("gtadditions:textures/armor/%s_2.png", armorTexture); + } + + @Override + public double getDamageAbsorption() { + return 0.9D; + } +} diff --git a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java new file mode 100644 index 00000000000..781d4ed315a --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java @@ -0,0 +1,280 @@ +package gregtech.common.items.Armor; + + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import gregtech.api.GTValues; +import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.items.armor.IArmorLogic; +import gregtech.api.items.metaitem.stats.IItemBehaviour; +import gregtech.api.items.metaitem.stats.IItemCapabilityProvider; +import gregtech.api.items.metaitem.stats.IItemDurabilityManager; +import gregtech.api.recipes.RecipeMaps; +import gregtech.api.recipes.recipes.FuelRecipe; +import gregtech.api.unification.material.Materials; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import net.minecraft.client.resources.I18n; +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.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.fluids.capability.templates.FluidHandlerItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Arrays; +import java.util.List; + +public class PowerlessJetpack implements IArmorLogic { + public final int tankCapacity; + public final int burnTier; + public final static List fuels; + public final static List forbiddenFuels; + @SideOnly(Side.CLIENT) + private ArmorUtils.ModularHUD HUD; + + public PowerlessJetpack(int capacity, int burnTier) { + if (ArmorUtils.SIDE.isClient()) HUD = new ArmorUtils.ModularHUD(); + this.tankCapacity = capacity; + this.burnTier = burnTier; + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { + IFluidHandlerItem internalTank = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + FuelRecipe currentRecipe = null; + if (internalTank.drain(1, false) != null && !player.isInWater() && !player.isInLava()) { + for (FuelRecipe current : fuels) { + if (current.getRecipeFluid().isFluidEqual(internalTank.drain(1, false))) { + currentRecipe = current; + break; + } + } + + if (currentRecipe == null) { + return; + } + + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(stack); + int burntime = 0; + byte toggleTimer = 0; + boolean hover = false; + boolean suc = false; + FluidStack fuel = currentRecipe.getRecipeFluid(); + if (data.hasKey("burnTimer")) burntime = data.getShort("burnTimer"); + if (data.hasKey("toggleTimer")) toggleTimer = data.getByte("toggleTimer"); + if (data.hasKey("hover")) hover = data.getBoolean("hover"); + + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && ArmorUtils.isKeyDown(player, EnumKey.JUMP) && toggleTimer == 0) { + hover = !hover; + toggleTimer = 10; + data.setBoolean("hover", hover); + if (hover) { + player.sendMessage(new TextComponentTranslation("metaarmor.jetpack.hover.enable")); + } else { + player.sendMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable")); + } + } + } + + if (player.onGround && !ArmorUtils.isKeyDown(player, EnumKey.JUMP) && hover && !world.isRemote) { + hover = !hover; + data.setBoolean("hover", hover); + player.sendMessage(new TextComponentTranslation("metaarmor.jetpack.hover.disable")); + } + + if (internalTank.drain(fuel, false).amount == fuel.amount || burntime >= GTValues.V[burnTier]) { + if (!hover) { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY < 0.6D) player.motionY += 0.2D; + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.1F); + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.SMOKE_LARGE, -0.6D); + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + suc = true; + } + } else { + if (!player.onGround) { + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.3D); + ArmorUtils.playJetpackSound(player); + } + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD) && player.motionX < 0.5D && player.motionZ < 0.5D) { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.025F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY < 0.5D) { + player.motionY += 0.125D; + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.SMOKE_LARGE, -0.6D); + } + } else if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY < -0.5D) player.motionY += 0.1D; + } else if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) && !ArmorUtils.isKeyDown(player, EnumKey.SHIFT) && !player.onGround) { + if (player.motionY < 0 && player.motionY >= -0.03D) player.motionY = -0.025D; + if (player.motionY < -0.025D) { + if (player.motionY + 0.2D > -0.025D) { + player.motionY = -0.025D; + } else { + player.motionY += 0.2D; + } + } + } + player.fallDistance = 0.0F; + suc = true; + } + + if (suc) { + if (!player.onGround) { + if (burntime < GTValues.V[burnTier]) { + player.fallDistance = 0.0F; + burntime = (int) (currentRecipe.getDuration() * currentRecipe.getMinVoltage()); + internalTank.drain(fuel.amount, true); + } else { + burntime -= GTValues.V[burnTier]; + } + } + } + } + + if (world.getWorldTime() % 40 == 0 && !player.onGround) { + ArmorUtils.resetPlayerFloatingTime(player); + } + + if (toggleTimer > 0) toggleTimer--; + + data.setShort("burnTimer", (short) burntime); + data.setByte("toggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + } + + @Override + public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { + return EntityEquipmentSlot.CHEST; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { + } + + @Override + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { + return ImmutableMultimap.of(); + } + + @Override + public void addToolComponents(@SuppressWarnings("rawtypes") ArmorMetaValueItem mvi) { + mvi.addComponents(new Behaviour(tankCapacity)); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gtadditions:textures/armor/liquid_fuel_jetpack.png"; + } + + @SideOnly(Side.CLIENT) + public void drawHUD(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(); + } + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + + public static class Behaviour implements IItemDurabilityManager, IItemCapabilityProvider, IItemBehaviour { + + public final int maxCapacity; + + public Behaviour(int internalCapacity) { + this.maxCapacity = internalCapacity; + } + + @Override + public boolean showsDurabilityBar(ItemStack itemStack) { + return true; + } + + @Override + public double getDurabilityForDisplay(ItemStack itemStack) { + IFluidHandlerItem fluidHandlerItem = itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + IFluidTankProperties fluidTankProperties = fluidHandlerItem.getTankProperties()[0]; + FluidStack fluidStack = fluidTankProperties.getContents(); + return fluidStack == null ? 1.0 : (1.0 - fluidStack.amount / (fluidTankProperties.getCapacity() * 1.0)); + } + + @Override + public int getRGBDurabilityForDisplay(ItemStack itemStack) { + return MathHelper.hsvToRGB(0.33f, 1.0f, 1.0f); + } + + @Override + public ICapabilityProvider createProvider(ItemStack itemStack) { + return new FluidHandlerItemStack(itemStack, maxCapacity) { + @Override + public boolean canFillFluidType(FluidStack fluidStack) { + for (FuelRecipe recipe : fuels) + if (fluidStack.isFluidEqual(recipe.getRecipeFluid()) && !forbiddenFuels.contains(fluidStack.getFluid())) + return true; + return false; + } + + @Override + public IFluidTankProperties[] getTankProperties() { + return new FluidTankProperties[]{new FluidTankProperties(getFluid(), capacity, true, false)}; + } + }; + } + + @Override + public void addInformation(ItemStack itemStack, List lines) { + } + } + + static { + fuels = RecipeMaps.COMBUSTION_GENERATOR_FUELS.getRecipeList(); + forbiddenFuels = Arrays.asList(Materials.Oil.getFluid(1).getFluid(), + Materials.SulfuricLightFuel.getFluid(1).getFluid()); + } +} From 8c12da9706a4f1d79d16435abb9b03d135466e71 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:41:46 -0400 Subject: [PATCH 08/56] Add packet handler --- src/main/java/gregtech/api/net/NetworkHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/net/NetworkHandler.java b/src/main/java/gregtech/api/net/NetworkHandler.java index 209b55ef4c4..d05f88df290 100755 --- a/src/main/java/gregtech/api/net/NetworkHandler.java +++ b/src/main/java/gregtech/api/net/NetworkHandler.java @@ -34,6 +34,7 @@ import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; +import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -43,6 +44,7 @@ public class NetworkHandler { public interface Packet { + default FMLProxyPacket toFMLPacket() { return packet2proxy(this); } @@ -73,7 +75,7 @@ public PacketCodec(PacketEncoder encoder, PacketDecoder decoder) { this.decoder = decoder; } } - + public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel("Gregtech"); private static final HashMap, PacketCodec> codecMap = new HashMap<>(); @SideOnly(Side.CLIENT) private static HashMap, PacketExecutor> clientExecutors; @@ -92,6 +94,7 @@ private NetworkHandler() { } public static void init() { + INSTANCE.registerMessage(KeysUpdateHandler.class, KeysPacket.class, 0, Side.SERVER); channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(GTValues.MODID); channel.register(new NetworkHandler()); From 562b5fe730dd3809ffe62fdc16271ff476497dc2 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:42:39 -0400 Subject: [PATCH 09/56] Add classes for keybinds --- .../java/gregtech/api/net/KeysPacket.java | 46 +++++++++++++++++++ .../gregtech/api/net/KeysUpdateHandler.java | 27 +++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/main/java/gregtech/api/net/KeysPacket.java create mode 100644 src/main/java/gregtech/api/net/KeysUpdateHandler.java diff --git a/src/main/java/gregtech/api/net/KeysPacket.java b/src/main/java/gregtech/api/net/KeysPacket.java new file mode 100644 index 00000000000..c2b8727ce2a --- /dev/null +++ b/src/main/java/gregtech/api/net/KeysPacket.java @@ -0,0 +1,46 @@ +package gregtech.api.net; + + + +import gregtech.api.util.input.EnumKey; +import gregtech.api.util.input.Key; +import gregtech.api.util.input.Keybinds; +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +import java.util.ArrayList; +import java.util.List; + +public class KeysPacket implements IMessage { + private List keys; + + public KeysPacket() { + } + + public KeysPacket(List keys) { + this.keys = keys; + } + + public List getList() { + return this.keys; + } + + @Override + public void toBytes(ByteBuf buf) { + for (int i = 0; i < keys.size(); i++) { + buf.writeByte(keys.get(i).KEY.getID()); + buf.writeBoolean(keys.get(i).state); + } + } + + @Override + public void fromBytes(ByteBuf buf) { + keys = new ArrayList<>(); + for (int i = 0; i < Keybinds.REGISTERY.size(); i++) { + int id = buf.readByte(); + Key current = new Key(EnumKey.getKeyByID(id)); + current.state = buf.readBoolean(); + keys.add(current); + } + } +} diff --git a/src/main/java/gregtech/api/net/KeysUpdateHandler.java b/src/main/java/gregtech/api/net/KeysUpdateHandler.java new file mode 100644 index 00000000000..3898df1d03a --- /dev/null +++ b/src/main/java/gregtech/api/net/KeysUpdateHandler.java @@ -0,0 +1,27 @@ +package gregtech.api.net; + + +import gregtech.api.util.input.Key; +import gregtech.api.util.input.Keybinds; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +import java.util.List; + +public class KeysUpdateHandler implements IMessageHandler { + + @Override + public IMessage onMessage(KeysPacket message, MessageContext ctx) { + EntityPlayerMP player = ctx.getServerHandler().player; + List keys = message.getList(); + if (keys.isEmpty()) return null; + if (Keybinds.PLAYER_KEYS.containsKey(player)) { + Keybinds.PLAYER_KEYS.replace(player, keys); + } else { + Keybinds.PLAYER_KEYS.put(player, keys); + } + return null; + } +} From 9bcc855afa9057e7b849b988e3722915bb192928 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:45:01 -0400 Subject: [PATCH 10/56] Add keybind related classes --- .../java/gregtech/api/util/input/EnumKey.java | 45 ++++++++++++++++ .../java/gregtech/api/util/input/Key.java | 47 +++++++++++++++++ .../gregtech/api/util/input/Keybinds.java | 52 +++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/main/java/gregtech/api/util/input/EnumKey.java create mode 100644 src/main/java/gregtech/api/util/input/Key.java create mode 100644 src/main/java/gregtech/api/util/input/Keybinds.java diff --git a/src/main/java/gregtech/api/util/input/EnumKey.java b/src/main/java/gregtech/api/util/input/EnumKey.java new file mode 100644 index 00000000000..fc887d8ff0a --- /dev/null +++ b/src/main/java/gregtech/api/util/input/EnumKey.java @@ -0,0 +1,45 @@ +package gregtech.api.util.input; + +import org.lwjgl.input.Keyboard; + +import javax.annotation.Nullable; + +public enum EnumKey { + MENU("ALT Menu", Keyboard.KEY_LMENU, Key.KEYS_CATEGORY), + MODE_SWITCH("Mode Switch", Keyboard.KEY_M, Key.KEYS_CATEGORY), + FORWARD(null, 0, null), + JUMP(null, 0, null), + SHIFT(null, 0, null), + BOOST(null, 0, null), + FLY_KEY("Fly key", Keyboard.KEY_F, Key.KEYS_CATEGORY); + + public final String NAME; + public final String CATEGORY; + public final byte BUTTON_INDEX; + private byte ID; + private static byte idCounter = 0; + + EnumKey(String name, int button_index, String category) { + this.NAME = name; + this.BUTTON_INDEX = (byte) button_index; + this.CATEGORY = category; + setID(); + } + + @Nullable + public static EnumKey getKeyByID(int id) { + for (EnumKey key : EnumKey.values()) { + if (key.ID == id) return key; + } + return null; + } + + private void setID() { + this.ID = idCounter++; + } + + public int getID() { + return this.ID; + } + +} diff --git a/src/main/java/gregtech/api/util/input/Key.java b/src/main/java/gregtech/api/util/input/Key.java new file mode 100644 index 00000000000..333e640d989 --- /dev/null +++ b/src/main/java/gregtech/api/util/input/Key.java @@ -0,0 +1,47 @@ +package gregtech.api.util.input; + +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Key { @SideOnly(Side.CLIENT) +private KeyBinding binding; + public final EnumKey KEY; + public boolean state; + public static final String KEYS_CATEGORY = "gregtech"; + + public Key(EnumKey type) { + this.KEY = type; + this.state = false; + } + + @SideOnly(Side.CLIENT) + public Key(EnumKey type, KeyBinding bind) { + this.KEY = type; + this.state = false; + if (bind != null) { + this.binding = bind; + } else { + this.binding = new KeyBinding(type.NAME, type.BUTTON_INDEX, type.CATEGORY); + } + } + + @SideOnly(Side.CLIENT) + public KeyBinding getBind() { + return this.binding; + } + + @Override + public boolean equals(Object object) { + if (object instanceof Key) { + return this.KEY == ((Key) object).KEY; + } else { + return false; + } + } + + @Override + public String toString() { + return String.format("%s: %s", KEY.toString(), state); + } +} diff --git a/src/main/java/gregtech/api/util/input/Keybinds.java b/src/main/java/gregtech/api/util/input/Keybinds.java new file mode 100644 index 00000000000..adeb1ac38fe --- /dev/null +++ b/src/main/java/gregtech/api/util/input/Keybinds.java @@ -0,0 +1,52 @@ +package gregtech.api.util.input; + +import gregtech.api.items.armor.ArmorUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.ArrayUtils; + +import java.util.*; + + +public class Keybinds { + // Just registery of all used keys + public static final List REGISTERY = new ArrayList<>(); + // Logical server-sided variable, where is state of any keys from players + public static final Map> PLAYER_KEYS = new HashMap<>(); + + @SideOnly(Side.CLIENT) + private static List bindings; + + @SideOnly(Side.CLIENT) + public static void initBinds() { + bindings = Arrays.asList(null, + null, + Minecraft.getMinecraft().gameSettings.keyBindForward, + Minecraft.getMinecraft().gameSettings.keyBindJump, + Minecraft.getMinecraft().gameSettings.keyBindSneak, + Minecraft.getMinecraft().gameSettings.keyBindSprint, + null); + } + + @SideOnly(Side.CLIENT) + public static void registerClient() { + for (Key key : REGISTERY) { + if (!ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, key.getBind())) + ClientRegistry.registerKeyBinding(key.getBind()); + } + } + + public static void register() { + for (EnumKey type : EnumKey.values()) { + if (ArmorUtils.SIDE.isClient()) { + REGISTERY.add(new Key(type, bindings.get(type.getID()))); + } else { + REGISTERY.add(new Key(type)); + } + } + } +} From 19c992b75ea1aeb0f1438de63bec284749b53379 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 21:32:49 -0400 Subject: [PATCH 11/56] Fix NPE --- src/main/java/gregtech/common/ClientProxy.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/ClientProxy.java b/src/main/java/gregtech/common/ClientProxy.java index 40b0890d740..68c612ad08c 100644 --- a/src/main/java/gregtech/common/ClientProxy.java +++ b/src/main/java/gregtech/common/ClientProxy.java @@ -103,6 +103,8 @@ public class ClientProxy extends CommonProxy { public void onPreLoad() { super.onPreLoad(); + Keybinds.initBinds(); + Keybinds.registerClient(); MetaTileEntityRenderer.preInit(); CableRenderer.preInit(); FluidPipeRenderer.preInit(); @@ -111,8 +113,7 @@ public void onPreLoad() { MetaEntities.initRenderers(); TextureUtils.addIconRegister(MetaFluids::registerSprites); MinecraftForge.EVENT_BUS.register(ToolRenderHandler.INSTANCE); - Keybinds.initBinds(); - Keybinds.registerClient(); + } @Override From 0b76912fcaba988d7889fb3b9381dac0009c957a Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Wed, 18 Aug 2021 21:33:10 -0400 Subject: [PATCH 12/56] Sim --- src/main/java/gregtech/GregTechMod.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 79a50cbd14e..50b4604efde 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -78,10 +78,9 @@ public class GregTechMod { @Mod.EventHandler public void onPreInit(FMLPreInitializationEvent event) { NetworkHandler.init(); - Keybinds.register(); + MinecraftForge.EVENT_BUS.register(new EventHandlers()); GTLog.init(event.getModLog()); - NetworkHandler.init(); MetaTileEntityUIFactory.INSTANCE.init(); PlayerInventoryUIFactory.INSTANCE.init(); CoverBehaviorUIFactory.INSTANCE.init(); @@ -114,6 +113,7 @@ public void onPreInit(FMLPreInitializationEvent event) { AnnotatedComponentHandlerLoader.discoverAndLoadAnnotatedComponentHandlers(event.getAsmData()); proxy.onPreLoad(); + Keybinds.register(); } @Mod.EventHandler From c0bd3dcd6e73a81cf35c8d76049988d6a761c362 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 01:33:26 -0400 Subject: [PATCH 13/56] add Batterypack configs --- .../java/gregtech/common/ConfigHolder.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index 9cf933d3797..61f3cdbb2c5 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -284,7 +284,7 @@ public static class ClientConfig { public boolean emissiveTextures = true; } - public static class ArmorHud{ + public static class ArmorHud { @Config.Comment({"Sets HUD location", "1 - left-upper corner", "2 - right-upper corner", "3 - left-bottom corner", "4 - right-bottom corner"}) public byte hudLocation = 1; @Config.Comment("Horizontal offset of HUD [0 ~ 100)") @@ -314,7 +314,12 @@ public static class Equipment { public AdvImpellerJetpack advImpellerJetpack = new AdvImpellerJetpack(); @Config.Name("Semifluid Jetpack") public SemiFluidJetpack semiFluidJetpack = new SemiFluidJetpack(); - + @Config.Name("Batpack LV") + public BatpackLv batpackLv = new BatpackLv(); + @Config.Name("Batpack MV") + public BatpackMv batpackMv = new BatpackMv(); + @Config.Name("Batpack HV") + public BatpackHv batpackHv = new BatpackHv(); } public static class NightvisionGoggles { @@ -410,7 +415,31 @@ public static class SemiFluidJetpack { public int capacity = 12000; } + public static class BatpackLv { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 1; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 600000; + } + public static class BatpackMv { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 2; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 2400000; + } + public static class BatpackHv { + @Config.RangeInt(min = 0, max = 14) + @Config.RequiresMcRestart + public int voltageTier = 3; + @Config.RangeInt(min = 0) + @Config.RequiresMcRestart + public int capacity = 9600000; + } } } From 2e2ca531e64d2eb7f3fcf0d4ba3b9be67c052a2f Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 01:33:59 -0400 Subject: [PATCH 14/56] add BATPACK and NIGHTVISION --- src/main/java/gregtech/common/items/MetaItems.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 570ab6b5777..7a318815c4f 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -493,6 +493,8 @@ private MetaItems() { public static MetaItem.MetaValueItem CLIPBOARD; + public static ArmorMetaItem.ArmorMetaValueItem NIGHTVISION_GOGGLES; + public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_CHESTPLATE; public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_LEGGINS; public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_BOOTS; @@ -506,6 +508,10 @@ private MetaItems() { public static ArmorMetaItem.ArmorMetaValueItem SEMIFLUID_JETPACK; public static ArmorMetaItem.ArmorMetaValueItem IMPELLER_JETPACK; + public static ArmorMetaItem.ArmorMetaValueItem BATPACK_LV; + public static ArmorMetaItem.ArmorMetaValueItem BATPACK_MV; + public static ArmorMetaItem.ArmorMetaValueItem BATPACK_HV; + public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_IMPELLER_JETPACK; public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_NANO_MUSCLE_CHESTPLATE; public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_QAURK_TECH_SUITE_CHESTPLATE; From a134d32b36e5cdfc04fb03ae34d66767e5f68e2c Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 01:34:16 -0400 Subject: [PATCH 15/56] Sim --- .../java/gregtech/common/items/Armor/MetaArmor.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index 64303fbe5e5..1d26c4433f2 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -23,12 +23,21 @@ public void registerSubItems() { MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack(e.semiFluidJetpack.capacity, e.semiFluidJetpack.voltageTier)); MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(e.impellerJetpack.energyPerUse, e.impellerJetpack.capacity, e.impellerJetpack.voltageTier)); - + MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpackLv.capacity, e.batpackLv.voltageTier)); + MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpackMv.capacity, e.batpackMv.voltageTier)); + MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpackHv.capacity, e.batpackHv.voltageTier)); + + MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQurakTechSuite()); MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite()); MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(e.advImpellerJetpack.energyPerUse, e.advImpellerJetpack.capacity, e.advImpellerJetpack.voltageTier)); + MetaItems.NIGHTVISION_GOGGLES = addItem(16, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()); + MetaItems.IMPELLER_JETPACK.setModelAmount(8); - + MetaItems.BATPACK_LV.setModelAmount(8); + MetaItems.BATPACK_MV.setModelAmount(8); + MetaItems.BATPACK_HV.setModelAmount(8); + } } From d73db70b6af47aef27e9afe1e52df825fc1deb3d Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 01:35:10 -0400 Subject: [PATCH 16/56] Add Night and bat classes --- .../common/items/Armor/BatteryPack.java | 142 ++++++++++++++++++ .../items/Armor/NightvisionGoggles.java | 120 +++++++++++++++ 2 files changed, 262 insertions(+) create mode 100644 src/main/java/gregtech/common/items/Armor/BatteryPack.java create mode 100644 src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java diff --git a/src/main/java/gregtech/common/items/Armor/BatteryPack.java b/src/main/java/gregtech/common/items/Armor/BatteryPack.java new file mode 100644 index 00000000000..f2354aabd87 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/BatteryPack.java @@ -0,0 +1,142 @@ +package gregtech.common.items.Armor; + +import gregtech.api.GTValues; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorLogicSuite; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.util.GTUtility; +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.ActionResult; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; +import java.util.List; + +public class BatteryPack extends ArmorLogicSuite { + + private int cachedSlotId = -1; + + public BatteryPack(int energyPerUse, int maxCapacity, int tier) { + super(energyPerUse, maxCapacity, tier, EntityEquipmentSlot.CHEST); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { + IElectricItem container = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + boolean canShare = data.hasKey("CanShare") && data.getBoolean("CanShare"); + if (canShare && !world.isRemote) { + // Trying to find item in inventory + if (cachedSlotId < 0) { + // Do not call this method often + if (world.getWorldTime() % 40 == 0) { + cachedSlotId = ArmorUtils.getChargeableItem(player, container.getTier()); + } + } else { + ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); + if (!ArmorUtils.isPossibleToCharge(cachedItem)) { + cachedSlotId = -1; + } + } + + // Do charge + if (cachedSlotId >= 0) { + IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) { + return; + } + if (container.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) container.discharge(delta, container.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + } + } + + @SideOnly(Side.CLIENT) + @Override + public boolean isNeedDrawHUD() { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public void drawHUD(ItemStack stack) { + super.addCapacityHUD(stack); + NBTTagCompound data = stack.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", status)); + } + } + this.HUD.draw(); + this.HUD.reset(); + } + + @Override + public ISpecialArmor.ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + return new ISpecialArmor.ArmorProperties(0, 0, 0); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + String state = ""; + if (data.hasKey("CanShare")) { + state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); + } else { + state = I18n.format("metaarmor.hud.status.disabled"); + } + lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); + lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); + super.addInfo(itemStack, lines); + } + + @Override + public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { + if (player.getHeldItem(hand).getItem() instanceof ArmorMetaItem && player.isSneaking()) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(player.getHeldItem(hand)); + boolean canShareEnergy = data.hasKey("CanShare") && data.getBoolean("CanShare"); + + canShareEnergy = !canShareEnergy; + String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); + if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); + data.setBoolean("CanShare", canShareEnergy); + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } else { + return super.onRightClick(world, player, hand); + } + } + + @Override + public double getDamageAbsorption() { + return 0; + } + + @Override + public int getArmorLayersAmount(ItemStack itemStack) { + return 2; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return String.format("gtadditions:textures/armor/battery_pack_%s.png", GTValues.VN[tier].toLowerCase()); + } +} diff --git a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java new file mode 100644 index 00000000000..c1ff844f632 --- /dev/null +++ b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java @@ -0,0 +1,120 @@ +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.EnumKey; +import gregtech.common.ConfigHolder; +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.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +import java.util.List; + +public class NightvisionGoggles extends ArmorLogicSuite { + + public NightvisionGoggles() { + super(ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.energyPerUse, ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.capacity, ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.voltageTier, EntityEquipmentSlot.HEAD); + } + + public NightvisionGoggles(int energyPerUse, int capacity, int voltageTier, EntityEquipmentSlot slot) { + super(energyPerUse, capacity, voltageTier, slot); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); + byte toggleTimer = nbtData.getByte("toggleTimer"); + boolean ret = false; + if(!player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem().equals(itemStack.getItem())) { + disableNightVision(world, player, false); + } + if (SLOT == EntityEquipmentSlot.HEAD) { + boolean nightvision = nbtData.getBoolean("Nightvision"); + if (ArmorUtils.isKeyDown(player, EnumKey.MENU) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + toggleTimer = 10; + if(!nightvision && item.getCharge() >= energyPerUse / 100) { + nightvision = true; + player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.enabled")); + } else if(nightvision){ + nightvision = false; + disableNightVision(world, player, true); + } else { + if(!world.isRemote) { + player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.error")); + } + } + + if (!world.isRemote) { + nbtData.setBoolean("Nightvision", nightvision); + } + } + + if (nightvision && !world.isRemote && item.getCharge() >= (energyPerUse / 100)) { + BlockPos pos = new BlockPos((int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ)); + int skylight = player.getEntityWorld().getLightFromNeighbors(pos); + if (skylight > 8) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 999999, 0, true, true)); + } else { + player.removePotionEffect(MobEffects.BLINDNESS); + player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, true)); + } + ret = true; + item.discharge((energyPerUse / 100), ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.voltageTier, true, false, false); + } + + if (!world.isRemote && toggleTimer > 0) { + --toggleTimer; + nbtData.setByte("toggleTimer", toggleTimer); + } + } + if (ret) { + player.inventoryContainer.detectAndSendChanges(); + } + } + + public void disableNightVision(World world, EntityPlayer player, boolean sendMsg) { + if(!world.isRemote) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + player.removePotionEffect(MobEffects.BLINDNESS); + if(sendMsg) player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.disabled")); + } + } + + @Override + public double getDamageAbsorption() { + return 0; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gtadditions: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")); + } + } + } +} From d7b7b5574662f0cce1cae922ebfeb1cdd361c6b9 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 02:02:35 -0400 Subject: [PATCH 17/56] fix error --- src/main/java/gregtech/GregTechMod.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 50b4604efde..913961e01a4 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -95,6 +95,7 @@ public void onPreInit(FMLPreInitializationEvent event) { if (GTValues.isModLoaded(GTValues.MODID_CT)) { GTLog.logger.info("Running early CraftTweaker initialization scripts..."); runEarlyCraftTweakerScripts(); + MinecraftForge.EVENT_BUS.register(this); } //freeze material registry before processing items, blocks and fluids From f2c23a879720950e08d9d655dd46cd498a9e6612 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 02:02:55 -0400 Subject: [PATCH 18/56] Sim --- src/main/java/gregtech/common/ClientProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/ClientProxy.java b/src/main/java/gregtech/common/ClientProxy.java index 68c612ad08c..13769fec8c0 100644 --- a/src/main/java/gregtech/common/ClientProxy.java +++ b/src/main/java/gregtech/common/ClientProxy.java @@ -104,7 +104,6 @@ public class ClientProxy extends CommonProxy { public void onPreLoad() { super.onPreLoad(); Keybinds.initBinds(); - Keybinds.registerClient(); MetaTileEntityRenderer.preInit(); CableRenderer.preInit(); FluidPipeRenderer.preInit(); @@ -118,6 +117,7 @@ public void onPreLoad() { @Override public void onLoad() { + Keybinds.registerClient(); super.onLoad(); registerColors(); } From 696b6ef8ded5cc78e595478634fa8d00aab95285 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 02:13:24 -0400 Subject: [PATCH 19/56] Fix Enchantability list by armor type --- .../gregtech/api/items/armor/ArmorMetaItem.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index f459bc0e620..0a965b104bb 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -184,9 +184,21 @@ public int getItemEnchantability(ItemStack stack) { return 50; } -//TODO add Enchantability list by armor type + @Override public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { - return enchantment.isAllowedOnBooks(); + switch (this.getEquipmentSlot(stack)) { + 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(); + } } + } From c9d3991bc9ce86fdfc0c4f6408d0c1d2110f1d2e Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:05:00 -0400 Subject: [PATCH 20/56] Add needed Json's --- .../assets/gregtech/models/item/metaitems/impeller.hv.json | 7 +++++++ .../assets/gregtech/models/item/metaitems/impeller.mv.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/1.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/2.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/3.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/4.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/5.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/6.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/7.json | 7 +++++++ .../gregtech/models/item/metaitems/impeller_jetpack/8.json | 7 +++++++ .../models/item/metaitems/nightvision_goggles.json | 6 ++++++ .../models/item/metaitems/nms.advanced_chestplate.json | 6 ++++++ .../assets/gregtech/models/item/metaitems/nms.boots.json | 6 ++++++ .../gregtech/models/item/metaitems/nms.chestplate.json | 6 ++++++ .../assets/gregtech/models/item/metaitems/nms.helmet.json | 6 ++++++ .../assets/gregtech/models/item/metaitems/nms.leggins.json | 6 ++++++ .../models/item/metaitems/qts.advanced_chestplate.json | 6 ++++++ .../assets/gregtech/models/item/metaitems/qts.boots.json | 6 ++++++ .../gregtech/models/item/metaitems/qts.chestplate.json | 6 ++++++ .../assets/gregtech/models/item/metaitems/qts.helmet.json | 6 ++++++ .../assets/gregtech/models/item/metaitems/qts.leggins.json | 6 ++++++ 21 files changed, 136 insertions(+) create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/nightvision_goggles.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/nms.boots.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/nms.chestplate.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/nms.helmet.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json new file mode 100644 index 00000000000..146b01ff541 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller.hv" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json new file mode 100644 index 00000000000..cb12d37c8c7 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller.mv" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json new file mode 100644 index 00000000000..88685746ea1 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json new file mode 100644 index 00000000000..b706bee8dea --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json new file mode 100644 index 00000000000..42cfc1163ed --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json new file mode 100644 index 00000000000..09c0e640e3f --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json new file mode 100644 index 00000000000..c14e2d92a8b --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/5" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json new file mode 100644 index 00000000000..a29f7f2f623 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/6" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json new file mode 100644 index 00000000000..70e9ccf03a7 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/7" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json new file mode 100644 index 00000000000..665e2c9445f --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/8" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..8d8f2e26baa --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nightvision_goggles.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nightvision_goggles" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json new file mode 100644 index 00000000000..adf361f20f9 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.advanced_chestplate" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..ef55ec5dca7 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.boots.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.boots" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..9b50a0fe137 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.chestplate" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..65b287a6a92 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.helmet" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json new file mode 100644 index 00000000000..256fcdf4cb4 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.leggins" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json new file mode 100644 index 00000000000..86d1126f1ec --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.advanced_chestplate" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json new file mode 100644 index 00000000000..86bee5d7e21 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.boots" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json new file mode 100644 index 00000000000..d501ab667f4 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.chestplate" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json new file mode 100644 index 00000000000..a8317435192 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.helmet" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json new file mode 100644 index 00000000000..500c3fbe03e --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.leggins" + } +} \ No newline at end of file From 14d4c9e859681419b6842d34e50dd078d8174c01 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:05:35 -0400 Subject: [PATCH 21/56] Sim --- .../blockstates/metaitems/impeller_jetpack.json | 14 ++++++++++++++ .../blockstates/metaitems/liquid_fuel_jetpack.json | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json create mode 100644 src/main/resources/assets/gregtech/blockstates/metaitems/liquid_fuel_jetpack.json diff --git a/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json b/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json new file mode 100644 index 00000000000..403c9c6e826 --- /dev/null +++ b/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": { + "model": "forge:forgebucket", + "textures": { + "base": "gregtech:items/metaitems/impeller_jetpack/base", + "fluid": "gregtech:items/metaitems/impeller_jetpack/overlay", + "cover": "gregtech:items/metaitems/impeller_jetpack/base" + }, + "transform": "forge:default-item" + } + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..0bb8886d305 --- /dev/null +++ b/src/main/resources/assets/gregtech/blockstates/metaitems/liquid_fuel_jetpack.json @@ -0,0 +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 From fa923b1b93b95cacfe80b857301a2d43ba4e4da2 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:09:12 -0400 Subject: [PATCH 22/56] Sim.2 --- .../metaitems/advanced_impeller_jetpack.png | Bin 0 -> 5595 bytes .../items/metaitems/gravitation_engine.png | Bin 0 -> 3204 bytes .../textures/items/metaitems/impeller.hv.png | Bin 0 -> 30036 bytes .../textures/items/metaitems/impeller.mv.png | Bin 0 -> 29887 bytes .../items/metaitems/impeller_jetpack/1.png | Bin 0 -> 4429 bytes .../items/metaitems/impeller_jetpack/2.png | Bin 0 -> 4594 bytes .../items/metaitems/impeller_jetpack/3.png | Bin 0 -> 4588 bytes .../items/metaitems/impeller_jetpack/4.png | Bin 0 -> 4592 bytes .../items/metaitems/impeller_jetpack/5.png | Bin 0 -> 4597 bytes .../items/metaitems/impeller_jetpack/6.png | Bin 0 -> 4605 bytes .../items/metaitems/impeller_jetpack/7.png | Bin 0 -> 4607 bytes .../items/metaitems/impeller_jetpack/8.png | Bin 0 -> 4450 bytes .../metaitems/liquid_fuel_jetpack/base.png | Bin 0 -> 4222 bytes .../metaitems/liquid_fuel_jetpack/overlay.png | Bin 0 -> 2207 bytes .../items/metaitems/nightvision_goggles.png | Bin 0 -> 247 bytes .../items/metaitems/nms.advanced_chestplate.png | Bin 0 -> 3467 bytes .../textures/items/metaitems/nms.boots.png | Bin 0 -> 3120 bytes .../textures/items/metaitems/nms.chestplate.png | Bin 0 -> 3189 bytes .../textures/items/metaitems/nms.helmet.png | Bin 0 -> 3231 bytes .../textures/items/metaitems/nms.leggins.png | Bin 0 -> 3137 bytes .../items/metaitems/qts.advanced_chestplate.png | Bin 0 -> 4876 bytes .../textures/items/metaitems/qts.boots.png | Bin 0 -> 3388 bytes .../textures/items/metaitems/qts.chestplate.png | Bin 0 -> 3485 bytes .../textures/items/metaitems/qts.helmet.png | Bin 0 -> 3309 bytes .../textures/items/metaitems/qts.leggins.png | Bin 0 -> 3255 bytes 25 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/advanced_impeller_jetpack.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/gravitation_engine.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller.hv.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller.mv.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/1.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/2.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/3.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/4.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/5.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/6.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/7.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/8.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/liquid_fuel_jetpack/base.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/liquid_fuel_jetpack/overlay.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nightvision_goggles.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.advanced_chestplate.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.boots.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.chestplate.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.helmet.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/nms.leggins.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/qts.advanced_chestplate.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/qts.boots.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/qts.chestplate.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/qts.helmet.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/qts.leggins.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/advanced_impeller_jetpack.png b/src/main/resources/assets/gregtech/textures/items/metaitems/advanced_impeller_jetpack.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbcaa3a4625c3dd13463d0a1e66b14edd150ee8 GIT binary patch literal 5595 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 G+y4b?iS@Vu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/gravitation_engine.png b/src/main/resources/assets/gregtech/textures/items/metaitems/gravitation_engine.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4dadd87af06dde13bae23e582ee1f94bfb7d23 GIT binary patch literal 3204 zcmc&$3sBT%9uN51`oza6MIBA``1$vHVlW&*E?j|OIT^$r^ zeW8f2v0{%Fy&IjfT8`7UPD>TNDtgspPCd&>@1!HOt!Ixt%PCY;F5$7#8@1kJ=5{8V zd|!Uw@BjaP|3|)()RcK6hDHsAAZSF=d|R4)k5DevVEI3~t&4)7FcWLFrp7az1HftX z65tsaL6~Pk(2O0sx78(onmTS{-NeK*`(IUE|B|1+DAj%CRB6&{o8hcO)}8MqS$8|e zc&m%7+X6@UA=!U1Qh-mtD4K4?qxKi+O8CN+fp%F+1thD96NvJMqo z-ckL{`KuG0<>AFCam}RvS!IVuy|4?_S zYA`nN!oJGo5u=K$Qko1A3+Ghr>71B4ROo_|Kf6;Hv9$QAXo)T*P7W8AhP^U*NnUZz z&XIr24rZJWfb2`H)8b#)He_#EgZ`uFjU~xruUuR-;aqUQGA!C{n*7nL9~?e@r|6+& zbYmOvR?bt+iM33~j`#0Z7iC7iwCk4REdTt-AhjxksWtJ(!iF77{4i(z_v7P67C|TL z7d~i9pM6eN@;QEfwg^GP#wu4B^j1YA1gUnh8Cg=6{S}htJZehOSMB%kG8%&7X8U=H z&I1zc04~;RL4vh)2+T4TWU;}nwewbx%g$dVfb>-<8T6_=nqZLGFT-(uQYP>KiGuwe zw^tfQ^!X1ySCkm=4A844sz5aZ;+HZ{z5EB?FZ8J;lIqw9FBbj&zuvfHInC6fnSm z>KR;%5*TejjTi=SGv#y|fxeGzp}@-ZNV)s7Dqb-%qZz05xWP%FCI(O_rN?oUq6r)& zv+4oG zSlX|(tMx6VV`6uXyP2LHSMFR^Q2>`P+$3e*tmD+i#i|S=Y)lh2M6*^Ko?vcI3o~ z>d$j3MChxE5)46(96c%ygvCLGD?#OUyT83tdu#1cuw~k+;O%SaQ42Qj zI2hpTk-3q+^qp%*jn2GLvt!7#vbizG+rFH#BwYwrDZ zSb@)XV^jDylP=$0cd(l6d_I2nis03v&a!en$iAF1?Qra`wUNWeFOC@f=AJkGN9z_Q z_#fPz-11?JZEBwLQY*ccit~;_;=)x^wCqdj%4Tv#%4Pg?WYw*xpoMUqc<{scjp^p_ z4&hep?@gw#n)=jngN_zlXiEFEspfjtjgA`|w`62~pek?d=m@lYRnoG_c{uWt`<$RZ z&Hi%CshkDL>~DrN5TCSve{tii?+RC!{UxaR`>8<7#chk%p*J#G1f~t-DmpAvY;8#a5lLZ0$b*U8sk@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller.hv.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller.hv.png new file mode 100644 index 0000000000000000000000000000000000000000..ecdd34bf1f3016ef2500ca464cf507c0684e2c2e GIT binary patch literal 30036 zcmcF~1yEewv*+N15IneBAiln+Gq6#=&darQJuOMa*?6uP8Op7^5mm4?WK;$lR@&a+{n)T1Z` zA7-<|HN(&J%G{?CD&WKOWajCpfokbR?qzNOf)`G``z**InLxKLg06w~6Wi+Pu zEmTm3k2vEUlckuv=)dxEtqJf0OVt(x3DjSgrrl9#;5a`5l!q>S2}}d$T_osYL_2Yv zO;O&`7~2FIB;x(nKhhrl2GyTDWR+%)$NC&M%HKp65vfc(J)ueV^9b!dFP*J0O_NUD z_qK}wgaqO28Pq;k0sA$F1ew0H=NGPkcjRJ8dmjcIDe#WK-r8m@!j26nPaEXw4Z==I z#qk0Fo&D+$XIfG}ku&+kQBmIo0C-CL*9QfVkwp#wU=CVo>$&Qwz6C-Y?6|;x%`cay zogiZ?^U>|C%P`gmHU<9l3eAc>Yr9--N2F z|2?Ul-QUzMu5#|kQT`?Gf6CZJ+shHk4T8EjxH&_ha_&%jSEhdtW(N8DT}L-(+ka?k z2H}RYPM ziZlf?uq*gKBNh+^^7H;5#13Xw=3f63QdL!;lD&&7*d78^l9gaY3dLn*Wd`I2i+q6a z^FlZU%^(7tW>5h>PSFoMf}8^Ud_n@k5CJeB6#NglknhVnK-~VC!N1=Br{$VCK#)BC zo+KbYghv1@ASlRbE&>tZ1PcfVbAtK#!JNEc0VqEYpMV)e^uxcosXJRCod<0DzjOUd zDl;TUUWl0x50aKshzAPhgn|V`IYq%xUQQ_A2Od5%Fj!EOpP!N53<5NFaJB;@O~uL% zYystVw6|cS{|{+o9Bdt&RUOQbbB?6`kNZlSxO-&XjKXa8F~MlR<+ZXtvGUzdMp7vz_}^Apq_IaSWc>_dY3`56FUd#EHU zt?ik0@ZeDk9dP>-jreBWm#r>Y;vx(bc4q8CM`dQg)D&H;t=8>D_VN$jGplNetANVW}1*BVFM7gvg zDR%Lv%zPx{EE9IGOb)p|JF)QiDRsbo3}09G5V08JompOOwXW? z9uG)Sh;aff5RoBwX?jy+u!FbWR!LftfZp(7QH{@r{ZC&I{ zfG;lPZmCq+R%JLTTR0k}qBgEt;x3h5~2dkn*4G)m^gmssIYYf2U;R2%M zR^rd-^~!+c;0{^tL$lNX3aAsCfoCp-yOW&ZZIu9Te;_YwG-%4$p~f9N|Et4su$RgY za5ngO)~}+8=^hy-eccc1yzXi7;zl$FjE}^PArN#Z$M;WPG(92=9WL#NzCwQJ!_~Jk zm+wVBKtmdnDt9t{sV?mYV&bT6{Yoq(P#wGLVj`UYwOml1 zYHHbXkEY>(LTzcLsIK9D#s7y#LBz8#LR|6A%-DdnHVGzAv)K-4_(Z1v169m%n$*K0 zmcV!Z;U&zQsLO6zhO}n@_?8($H%S8$Q$qfAz5_rtXJtTEP zOZ!Jy6OjR@oxgB^&0Kj$Yu@ykJ}f(!E^goFp*57~^L>duDFiU#>SMkk51o)*#>?~q zJ$O7KN=VD5ol8KaBVuta>^up{sHJB1xIv?Cd2WeNCtsbCY#2q^kV4>=@Tm&gZ|e)B zL<$t^Yz%x1MM`H&8w>9XJKbms3t|8hpG|qlOe7HDhj)LnFQ49LJLp?98HLL{_rH&T z@yJv9%U3NkNbWeUGu2sf-+0@oMh_4dwFc<|u3zlrN z8~yYt=7pp@lV3GB(;UUIAh;=sFVOS9o$Whjl$d#ikGd41Gd!o)RL)QK7Op;B9?ri0 z&U9h12lXcwiG0S|ap-h={_0b^8^G@otK-0i)}`2Z_LGHteM_@&$2YQibqWV_5P9VB za{+7OEyG7de1_>GEZ{cWYN=oh=E;b-2=LZoYV=>Kwej8g{NnTH^v3x#m?d^6n!M!W zwpPS#+jRjb-GNV@PCheHcJlBdJ=3(%ib>3jVND`*-C9Ge*4nfwZ+&w zo6GP(=)j&X+rqOVWKV?rSvy>V{Z9MU^Oq^0LAU8_Hm6K!L~Q59Xx^#m8AdMV%%4%W z#tEJWk5p;V{AuMrBmTRIfRib}79HaJF{$HXqoAklR+#oSb+zN#! z-uJL3CeGj3r{y|Z>U#aN0-fJsl759$*3P{~VxbsMb4Cagik*NwJVsFYciG|--?W3p zl4D=80>Neb-rE^c-3qRnsw$-t;shu=>#UhU$e^@MEoLu$1!@sV#jDa}iI*uvMLZhQ z)>f|G&i6s`1>4>8HNOT=;>L=1wtpT6iH(VgYXh_Z zi-`H`zE`Gq{SH3fi>eQ3rauV9Pn*Wt*RK%20`3Jme@-{`Iat}(1-!*}YWOsHbaBTx z#vj~SK#lGyW}M%sUS}ZxiC;oe9#R841KbSrIc&N2}y3LN=3^;@kOP+({K z8YS@qdOvv~kC}3Ud9cWCO?`bB0cHrpF- zXeoB0 zi7-iaJehp1mfiIBcYLX?jQf6;Iiz5)f0tGMg(Abx8fkY9Lh{K$t7Dp4`@)rM8;B`O>vdOQM<$P?v01XhlkwB!aM%X$@(f`lnE1I>qQSf z6FRRwG819y$ED9*7%l#|^?<}lmHxfun~cGZ`RRZMPcivpWJ>g1%r(VzTl;;J-DYx+ zrd)b7q3^C}LrlpKRzQ+dwteCK-uZ2g^Wi-U>j33j^>|Qe8hN>DA}c!?m+|J(ygq4~ zuu@`Zf_GR!#MOsF=3%~SW-!8<9K~VMQzzM#cmR@wD?zkj3Bev)`t%UVXX2|MbWp)Yn@27^?)@{?fKPkvMG>B_n69NBH#^oIj@pjOB{2hU`ch`4Tm!`)#ptEJBrhbu zKQ}Zs22W&!L|i7p*-OTVx6U~Z+_Bg( z45)53n!)W)@;~rbz1%yK%?p{!Z$G%>J@SB;X$3KOXGC53=MNn{ zgXNX$$f;i@880F~6xQA~PKctiMW9qLIi<*wM<1AZ1;4arTi|hhOz%cB!;F1~SvSaQ zz|YGoUBElES*AOluq;oISI4R@c%U;>syjMiWD~h~D9-0U+$AHWA?XS)KS-HBLN|BV zTDb4BkQ_c}IP56hyRLuvq~S4t<@c;VRt-GJ@b_m#NfWoPo`+z#mczj_#2?rV)>~C| z)ZbnEzAM z^?KWQGjiEPPm%MUt*v(fz>TvEEP*Ct7 zFx8*p=JJck`HVOaeu&xn)seT@w!?YwEP|IkaPjEs^rmST|62Liwm{F75qh{k$<&_f z6V!MQnEwlxr%zjt?^U#iQLw+xy!yTCX3lNA+5}gxZfzBR3w!;EtZXh%`bmFD|L07@ zZp|o;v7G@4R2a(`e<%y+eQma92qr|gj^nj@x!|;Q*u;e9ZJT8KkzwW6V^;Z0MuMb` zrv5yABa@1_h!<%FR3f&NmfDa0j%f=g!= zK5=pO9h-d-e_RG0I#p9pELdN_&Tkw-QCc@ePVI78R6E*<9C$a5{0^Tkav3+DhAi7Z z`q*6Tu9ohUI+v1sf>P+hNfq;xMdC_-zd8r{6$Tw44%HoZ*1XolWxi##wRrG}HT;a` zZX4QN01my8cITdb|I~Mem>i-wMV@4_p|6$-{a#-Fg+vbXy{V0>rp!dM;+J2?Cju&^ z$;$h%j(C4=#$f^Fm()dyvCHy>l}DYYwgi~erQ=@m+)g{|F9M=PCgPylTggAWUeK|&N5Q|tQ!RIGI*Q%x_~0JG4ypNb%$*(x?I#)?_m>S?ORP!yl9PkceJbf^G`b$2XHHg$1pB^FG}IdOV4KZ{6N5XY z)&)9RO-f3M*euWWQ>&}%qX!Om2xw z^rvUTY%DlyDkl3^fxPajPlI?Vu$6L3`k3EW`Hxk+jj8wQm~h`zw&7VIXRhzfDW+J5 zFfDn&+FXIg`E1?WS>j4cNposIOok1|(;v?u3@m8+=C2F0#NAR23K;BLF6J6;P40z# zml0R3ayb50?y-X>RK)MwS1}#O@O__@!w4<60a%ag0kE zuix|Zh4wqetj9U+{{&ZzjwBURC}j~`-OY6Jyk{mMsG=|t3nG|>PGP#HCISZHbMth{ zF;>4UOGyGHZ!m13C#nh!O^9%^2P(ey%_D@Jr-e4}1x)fx0bjoD`tj@Zx2uEn`NJRO z4pCt@7}T?1@1Zwc7GpUUWp#2t76;xX8vD3cH`fR6d7T$<@h`HTNc0^V-?4|GEUU$r zrE!0uj-b~_R%Uo%A~9C#lD3cjd1>qH4Vjfs+ypASa}1#n!7E2ZtK$IZ$!M;GLMkgR z*|!PoXYz_MqvbT%LA)8vgI}kITJM7Hwl92Kn`x>A3KsV!59(}Z-j5s!MsEpL+Dgw% z^m~U0j9J+Wd9C)rOMiD~x5E+9QN$1QB)`{%DIcgTOoZ(Kxpy05oi7~jmu~xKM*M$W z$h3K{EoJ);-rZ>>5$Dbc32Gg=0@u3x^pk7DwO^%)`rnI`>%@0n9s8wu7ySCO?Blg_ z?WFugfx3uV()nXi-}8DHuUy7vuTppSJv1gzByuj`81OWD*r?SrMIiF2hr^4Ey~}{N z_E(S6nk64ms>K`J{8{FWOqs?&g`usEV?xB^GUA=2!RVS<z7Qn_HNr(5Tu6l zwu!yyfqGj~%avUM_QuHcl07ll0^&5=~71KkvtqKUQJ_!i!lwT5`d zCNVou$jl8s_T!?UXHtz|8I3(qO(m`4>wZf~sHBb(P}0*gU{xZTe4AwPD(SR49_Erp_nY<3vQ5Z) z?AjCZhMheOWYp>yS(4+QlQ4l9>rFG};wVEm;C9f9g)*e6J%n=hH2S>R_)`>3i@V0D zUocPa1@+4mWx{ho-li``mlQO1$CD}ppR;mU)%blFE&`*pd2++3n|;MF*^MQaW{XIY zy8*LqybJUx#&z}B=;T(hI3WahRv93!w8qEftHkXXwHB4hczu17{AKG8r_^9(kRJJb zKUD~z_S%31oX4iv3{-e(^WH0U%HE^N_2OIloRHUSuje|XGr+5bn12a1$LHDskIvS< z;so3DYNMs|fxG>B7k`A4qrGI_Ry|c2>{ZK4TYG2c1$IvbtswpVN4s}M=hb|hi&)Ol zm%`o@BKGHTF9?+hy(N{hD(jk*a%A(2E{_%!$QuhlcnLbch*PvUQRSj~X-k z`dIEkuQLMOF=D-A>!uNIxRzpF%>Yw$BbS!BS`8}I9JokDH~R`W#5iR(Fwb`zqjqrc zj6~|I^TtnxT3!w=Zhqm8pIf_>UX%<)A*7gAm^RtnRP%On*oL}1@`>i|Hm47PC?*MT zN_MR+I9$}jzmQK*@PWOi?)t7(b#ygXmQv)h`ziP1+|X{nDIsWozgDbbMgvbpz>rgC zW(M0g*Sjbfj*%thk?36dtI806wTY`~hK+$EpY^q+qj9E1uBc0fNZhA|NVnzO*96vFQpdLuPe;C%EM=o#17Y7Ra3oX%VEyxfik0Y8TtB>y6 zQ{GuWIIqJEPS4JU9&uu^r6~6_GH|o1zd^axC$2mqG_!g`!eUvJo@r>dv&*6MyU)#T zFYVzS#s>3`SKq9Ic=M>GQ@08=e<5Td$SJ7c8?U&NY+^s*B*DM3f$gmHjdI#NVO?!L zwBL8?U~s!$RG1>#9AYDB46(jB9eb1ligh=zBTd!)1Y(HkdgeO>ehn#9D>7n?VjRtu zh|rFb!E)%j5Mj0fzC7LRJ`tGnmsu;F7l@ShVs z=qz;XBhiij%%?a+(MSi@kG*7f zN?B{NFn#arO?BZt?XPacMj%FYt^bPPO+HpzO8>aEJz*caF1K+ZY;Q$`ixlkpEa<0q zA|q-FYO?dTyI7%qw-4-!z5(V$Rid8FFh$9NgP-uUS{&+T7czgQySvz6_o%%MGzHuu zSxMU7|YR4T}_R=d6 zA)^p}T!HN$E=<)-jLzV$Gt~UTh_3OStGPBC;RCfyzlME?vvctLynfu0_uS#|oAHH( zjh_>3$tnyl)U&`f^X4u!ef4(yu0R@Gc9X7M8rynQa+B~69q)!1L;C{@sLi=Ys+z0i z^>FqPT*`ep<)$@%Fb#v(MQmYpNgQNZ5-xFDGcUnYnL2UzpaQg*7p|9OxyU1g` zH(*JD_Hp;o9dW-e#eq>21%G+#)V;LE*nQFng{jH!y)#l^D3n!Hq8!K)3&_za>xnzy zN6)d~7I62_8miJR6PIBpgL!yuPU|Z1t9DQk+PZxH{F#9xMR6*0KALPkV4L16BaxM& zXdLR=+STNehO`5W(v_2e-1oMv(xoH>EEG*Mh5F&}CR|D%4qTfGmVhm91DPr~4t7uA zl28lYR2^6P~d&N$h7i(Mw3 zt2Yh&H=7D{KDVal1=l~CD|AzpC-)SLvU3$IGMKO~K^4iLF!G9V3zdEq%}3WR(#R|9 z30MpIphP|AE_8d4R}Lk)&KXE4OB;0Q>0T07z^D6S#Kq4m8d<=s?t3%*R$ZO=!kgLY zZQ1ndc6ozFskZ0lCU;GHy&AdaUugmvCbB*L#Ep_2Q^$*|OeoJi7o>N7-$YGUlS1XL%@P@zs_@g48+Ch_Pel~4`;++7pa|I5mUmK0ilFy{hdrMD$KhV2Uf+9qlWImc% z1!Pc;r^{u!&|on(>VV;YYR(G6`=()fzs{W>+WL7h0iGj=$3j3qbzb6`YHCR;kOemmUR_zMm{|C| zqJm#kG>#n+2Hvv^g8bpUA3GKP`kQ3H>=>z&3Oyc zjos<8{rS4=WgibvnXc_)ex;yafgs};XRYDeB#z)3Ba4;JNL^E?7c`;euqB)MK(kUR zO7F`teaMO$cD{hTD8_&ZkL(l9O8#S!aE_XyQ;#+{%3;f+Cu(h~K^7HL5&;n1c{*C$>~=ja+6 zJ0?eU?1d3lCz6C-US$0%tJ%A>^v=4DuLW7RVh=YCfxV!S9Fc5cv~>n4$cl5TVpP9@ zGt}4(m6}D=?N;2!VSZS#Ef@}D8<3-)V5KAC!F(>MU=SBLBSa%-b1Kl|_FT-|9MHl! zXP~i)f-VOgI|bY>r+0E|&4rBMVFr-%V4$%JixLwjwZhx3lJ=6zT%Hy-sT$rn<=X#H z_%T~E^2)L{RR}RI*ZdOQD~DK)x6S0&(tY=G%hewj0?&(bR@ZdQR9Lg2$3TH8Vwd}A zk1;Yad={9hT~N&^$CD-pm1`$}7MfdU6j^w^hK7b1v&%^rrg=aDCg zG592(N8NY3fMZ2n)!sB%K_m8c+9ot;;HPDqo|~v)Hr|6s{^Cxh%@tm;1*_Luq=lZ5 zUat#{q3y)XNvaA%iHXEWPFu_MrNg6$ZpE*uC2N&y)}c6W~1$?BMIE`$v%io2}u~jUf+am1qsRIL{exIJVQb>np|`by$bBJl&#)t zBvwR8ETRu=$nDtf05!PL>kHpyWJEdFUCJFaKQ2ZBaYcDo!K?}v~6B$0hZeMe)p z>7%vp9b3MjwBD~pCl7B5w?qzf-0s7+Yg_1?jTEqPDg&I@)B}*zP*~j(t zkqcEJp@yH;G0d?%3p|1nBkd19NQ7r(ysJUaCtyP+xdwLk94i zuIIqF%d~Iwwke#SO5y1mO7C!q%TmjkDfPBpEk7~q^QjOrKkrxH=8tjfwt zk!=E<5qvi?@GJ3(L(fI}I>Umpa#K#WltTuXUUf^xV zZBXGd$y^LO;FlCtBggE+(ddcJvI!w2D%yuAQ74!^v7%k~isIow)<@kbuXN{Xe1x5- zYpUyqx@54B0r$Z_*PF9Y5(F&kfAVruS(AOH z?{P7?0k(72g)i~*@?g>HwiJ$RzYJr~JSo@7G%t~v*-Pwy(yWNUv|J5r7UB`tToHX^ ziHz)-HhUjxD5S(q_7Gx!%%~ju`~TGLx$l>$OWtu~IF~RPyA~$|MUOr^P$OeuzOcp^ zaI&5Mt%sMXjn_0|Yx{l5s^P>h9>m_O8D+Czi;Gqg>=V6rd)_P|Bs?=eH&A#*fS&h=1I zOpK7{@s}%SsD0cI-yM~h*!U#;g=U;@4YY4+-A`j@I5;?t?>eq1BoPO&9=OyQMK@?i zkhYUtreIJ^kYWUc>{aFl5`86o=#q}c<{ls|K~P#ghNNlNGvB3ko~ni z$7Yp*Tlx;IQ{EEd<)a^$h-XD~w#^h@UESJ0Aax5q^f~gevbS}LjfYf3(^W*j2&GpA z2{j0L9itsFs7~3;zdfPMhO-sT)%%5`97=iO+0xPtJQ=W;7*d49z)eNeN|y7R>eO25 zlw4er)JkMhw>B1VZAj1}%%j4D6s53o24=o;41F$Sf2C5k80zYQy~DU6c+fTL8Myu< zt9_NY)1%gVneIZI0vlyRv^$~K>P<!hSi9i|LyAAlRuqjY$-jfg(g!5)g}c~JL7wo8bbr=t)6N~;Eip!1~Mzu|DxaX zun9h|XIu>hLln=F1(ZxfI2A>=#c2yalhAHvV37mfV8+URa8_-ZF7>!O@$pQeMTM^f zNeFxUp5k{LZwA=L&}wzp5$`pc>8sT=NmCCb554n+)y#Z-hAmjgMS-hNM0~~A?HuXM zUfX4|+FnThojhpNnJ;@inYvn_sIE?~!i7XMMfr0|3d=${-m-nBh;sUTRftFw!)#-Y z3PH22V1wsQQ(6M~ZMKjJfk7e$WuY`2lanuo{F4ZduW3)%Q?l#Q+*^JB?H~6Tk_b+^ zRgZvzo~3(n=@tCgm1f_(bOPxgi}0%ec#WrYsi%?AVtm+pH?I_nT))rsxE$}bI@?k& z&?4fg`!7&Uyb)ftqne;ZxE$4u8}0h-G$+nXm7O7#Zvma)Nw_^E~1@KQK(= za?M?gW@dIKvLGGQ)T`Jg6e?afVVU%dfxkd-<5HnSU%q8ZUfD54rbye|&CAR3V%j@a zx$bSM?Dkt?Ov#32FI+q3juV@X;3Eu-=5(g0ZNEzE&GF}^F0%k-WgXp_M(<6W-1|#) z9zGEKbkpm$t)frh`xqxS)t13fk>J_Wr_^l+aPEvsc_i+MO9>#mcfsj9Erw^O4VS#>&h%+LGHq!mJc2;?RQb#-Ak&-st{@1{%`pULu!RoUF_u z4&$Co=t6wuwC7@0$|Aa8q#k47ICjp&oZn&Fu#A}5BQ2U8xex?q;{jDlg?ANM*k`|8 zn`oR*QcQ}l?kF@?D3Dxy{!<@&Q>Jol@1@r+*hIT_7IK?Y&XXQoHoy}+)4y`ZMK)%- z_V}P45KM_CVaHMJ`QxK1yV^g35aZEu4Z@V=! zYswaw^juLJ+9sgNA~Ex>4GO2G8Olo83#Gan&^`&BG|ZPdp5F~xIpPa zLW6Rl*aUBs`@&BYr{XVE>`eU=dpG(Wk*T7<<4=#um_*RtjZEz?5;B)LpNM5VO!{9J z97Y3fjjmRyxsOezYYK>k_+ts!RrdWPw_ireX5Zc%5S4vo9NS0%^kbHS!fM>{&OF{;Bolv0i;r~5U|-S z`#`JN5weaR6B7q2n`KM0+Y;21RaQ2dg@XNaVlUjpVH8}UIyG9Ollv9I0)akk94)rl#rK2tVG!PRJhDOjmv&M(8%- z0heTYS*EYQp?F)s)#SpySqhDCb}nx{{Zk4WmX)b5nt%;~ zOwWro`Eq%^`ainQ?|i8T zdLKTjwT$%NVtQ#h3t66WFdfR7ko5idyfI7OdAfUg5io|$(ysK99V`2#GH}Cdw7(zI z>34xqDH7&PM}f}Uqk@8%(7jS8qd!p3_PH4s@`U-}Mo#tY(#fG1Q>msFvK4)tl$74) z<>ghY(_tOfLRLO|dwVf)akwvD?`4S{wNZURkChMM7@M#2BRd%36w;l2ZL$c*BKSt} z-S^i@08dN>!x*10te|dsL)ZUe%6A_^w~6(*c6IWq<9_e^caC*WF3=FeJ5Jm;83#gB z{QTOx@5~Y~3ay5&Ezt@UgrjyYy!YKChJ(l{P;7At2MCKmHwFb(np&0(8J6e@am!uH zS4$%~hW65chp+0C7QLDvGmLN!rO2f8=?lSy1H6i|@Q!JKRmM;EA01~E5=lS$8n7^r zH)?*I;L?$WQ_Q-B=S6}@50q=tnN=(shl;_U%kxT6l7u4OZeV|3_&Ot+vzLFycq`mp zEHhUtzh|=&UO=rQq%&_Vq~vW}{Br%RS`4q4Pl~vDg7T!w2bIV~)F9?qqTPamJi&qj zw_DBN*N!XWV3Xa}*CcLHuXlhSXK?9DY*-ehlX-ZOjo`>rTF6Y_fw1Z5y7Gg0oV3C2 zvhNWVQUgo()IodmABD$6JkJS`Kr8!A`#T(7T&LJXy2L{EoS%cw3oCm1w@9559Usv= zG##`>eQr^yY+iX*$dno}C=oA|vraFt;UiPKLL3bmJF;a^G)#%C|_ZtV?yg za$HU~*r_-3ahi@wPn42D8(wiUqRS?k;!_;l9C_%C%4-<3Oa&0?rURkTETB?D-MfwP z*%Xhc>hCX6JEfOR$)p)jowL_lxFUaEAHZ&n5tpz#Udhu0{L`OgbWo^U3R~2CzFZZt>luTR{1IEz7+@p@WVXUD9L8KY6E=oomDddbs-z znNFXe=K3541hyPCMN}p5BBPbQA&g#4t3{(wPG4)U;b)Y8$W}jTw%Py}=}tl2YZ9Yq zW@In9Fp-`_n4sQWXI2RF>P0tw>pSdF9!&P=T2(4wHmws0VK_<-{JB-G+4yrb_c67} zP2B3q3$5$kRHgSxt8ZaZ5FPx|8Ibn@AE*Iuuc<31&pm#fx0z#>V41=K0*epduB zbyoxm4C@&#c0L_yq)jfA9SWtHnqp%Yz1V$Kn`!9ohU3Ml9`Qk}THeWzyR4jHu1(TW z0@(t7ysGKwe9>`1yyWrtAbz`@cCws&cL?ksJs=hVY2x^b&q^bEa4KYHSwvo2&meJ{ z?20uw%l>bWIBy@XkH=W0-vCKX4gaqZZX}*Hn!tpW0CGB<)1Al4D;nP;}Lzqw2*0?0pxfgHoG3gVt9!wO2P#l_20TK z?IE}Lb=J=Zs>;R{tzvuURM-oRkvmJ0T64kg#rjNaL%C>g+vhyXQOwY#UuT(FvhyzR z2mwC~kH+;NvG5B68pHaA-eDRs56081&vyJ9qO}VWF_FCOA-$D;ceq1tdg+-E#3@T6 zTfY;QLJg0A^3&-kMxCY#?)YxvYsohEw8z`Mjy?q`1aE(Tzlgh~@YS*xNhs3wj0Sp~ zBw}V{HMI$(o>sDt4Z1AqG~{4&sG=pJ~w<9ch9t|i4_-1%x#)(+qmV3!YJVix)K6=2S+ zL^rE>?f<%fH_BOpdUo@?l=wO)zRYOxcs_pq@i0UrZlm7N0Sfg?ai*r!wwX9)+19nThFU)IY>k<64Gps;Ka>NTPM+jhdYEwMVa=xUXOkZTQ)A*i2Msi< z^-K*KWvPUU;;;shp!H7{qH10K^`F%UbESWd&${%)Y|rb z0Aj}UktFc?#`J!q2Ybh;%on_=&M%z-B_*WNt^t%{kxfJ~nCa^{F52Q9HeQC}m6z+} zP*4V9#JC3e`NZ|i=;R{ziydUEf^W?0RTKK3uqr9$OTL+p&ajDfX4a?V7nP9KV?Q(X z-<+KbSfP)=KX}0rVQW`6w`7@E#9q{?z#as@PA+>lGc$t>61DX+Rt=dwr#}vQEG+Yi zJ2?tJ^&JHnKtjuPp2B#qm8+}jr3*|jX8X9)lqO?1R8Ai96p7zyYLN86GNBY!)`PiT zIf)ienud7WpJMJ#FS!d3Ji9!ggn*rbYsg3&Jx}=J3chNWZ8R~cGM~}{d{d${3NC1W<}-*j)vc!yWHXqD$~(3Ud~(Ind_Yr{%R05eieC3xLn0+ z(1yg|lKfkgh~!eQMR60Oxr}|l1j_ktaYw-3HrnB6-LBUyCPhZ&T2!BV>3=5T`IiP4 zP%Cc|wZjdu^%i&puyOnKDuPG(CI#vZWxh~mY(3Gp$M~u+`KikKbIW04h&3cjS3L*b z;19<~HhGwbd90MFuas(Vzi0>5DQ?h@5?6N$GXsTF{5zz2o{0pHem)~Z@s*J*PNr7Q z)H{JF{eUq=LwpDN623WdhGi)+6tks-${JG4pnfKLZU3D-aRLo@`7jdou9c(mOeB&J zGg%v(LDc1vI)$g#iN_u7B-H=T!#{q?V)V5AN}^NZ zYH4up8oR7)@4JI-74qP+m_tZcl*Daf9_Wis8Ic>+xsNdtbkm%Cp`sPl-#H6V0*=i~ z^7n68e!jSPJ|2GAj~Pd{(x~g?Cr8k%JuGN6)^{OcG{C}^a@-Ao;YY{Ft~Are6&&AZ zjMNsshLgUm_w7sqhKXJKUx|c-LblTkfa)6r7~2_&ruz? zb$V@pw{tNh>!e()1w0UPl49kjWXH8ioSUo;@-FW^cg-FdVf{A#j8*Mt4Quxx8wM2k z2Xn}U!~X+4whGcMztsWb_U0*r3qHklU!k_r7aEnXid2-VphK05UTSi0)r-OUblY!n zx!bM zSD{LicHQ@vV8hM_db6?B#qA40@H~9~#>G|4CMGWCxa0mp{lvrcnosk0KOvsMbCjlP z!*X`z?hsoPT>aE&j#*)Gk_mRy76`d#X8`>PI{IUE#;428HC~7xF8+kxdqf7^Rsw4Roiy{Abzx+wanM)6GnC&+QnvoUCqG_V2?m3lO?E_7klKNW%)0$MBS33 zgI8q8NwVc^zE|}A8Xa|6>mAI`I^f$z(NHErNAYJb)cm2vp5i1irt|09bNBsuIqDMG z9n7jm$Ny=~Mdh zF^RT)Z|cad+WP|aVn`q^Mk(6G@u9PZOR_`fHRTdj_a9tRXU%{?xAkz$;|9cS$wt8a zjXK?av>qM~Hrg-oVS!ES6y-V)eMmju*B{a8VZ3IMvHK0G>W1k{bKzs+b&95`tR!sX zJY%D$zfhThJ(~6H1T2JB8N_l=mPZ-+wX{6_HM9w_XoN*`h}T5$oN`tgCGRe2^QQKy zn(JkMA3d{qhG|>5nL?N^pIY?&heKt1yQUeJoGK;N@0SXzK+-O45Md}oop%_h$u^|4 zR$aeQWOD0zGSCLSJ&2}=sN%G$>RWFDs)C3}oDG`g0A?d-{=t+ztW3Oc@A-9`G>|Lj zXyRZ2C~s#L?047x8F}WDq;!X0LU6E*j8uupt|>JK0;&3-hROD#XP&(t1N@1vgMob< zC3(+>*wtqy#S*12>iHY`S}wD3mXED^O&G=oREDm^mvqCYHcKAaWSevO>%wDp>jU&3 zf1LxO2-ynDIktjDViV%>7UOr$?;0!OXLjf_djTe;p=6$lp_`)(2Is_?pl9N<1m{9% zH@YhN+-bu-!7Ccn2El`|{;hZ zV+FBZXR&1{8@kQXIPyR9L&Cx^y2mYCe}8kt1CfDon^0!!>UO55-{rIAgV;4Wb)A0K z>AiVwL4*T!Li0&3d+zxQv&4v`F@!0_ZofAVhY;P4uP~v|g6u z%mLfVG$tv7oT*#ZQpkg$tYZiB0R7;|J2r)cVu}j*iZ&87L6$AfZkM=X?nkU6euu4h zw0Ja2D%=-yddZubo6Y|c?jJT~ zp*BTc#?K4v7WSL!$r5jih3ERkZ5Da0&CReD5@67Eeh^Sbp02O+l0hSQ(+C0v@luw% zxK@0Mi{&_5+CBHIF#I0A77`t6?np8O2&uozI=~%GBssWs|G~noJ^np`H@&&j`|@LQe< z$+dW*q-B7AJX6+FTkgb;af|NZe8DaI1)WD!$e=c-Y%N1CnJ3cQl06#7LM;bcKdY(l zMlzu3SwtYrw(2FREXs_LwP@q^as3^#hi2dKzsfqRsHndG@6)XyAT5Y=hcp97OQ&>5 zHv&Va^q21L7!Z+`PU#-f0R{wV7)oI1c+T&C``paMti_t)tl9hQ&pTcxGC9hzM!j=! zC#SM^e2*?DHFC&n+O#V^IX0Mh-a&|xn(pt$-$wx|hJ4Tyzy5CR97nN*%FAXu3T3ut zx{f&ED-`XD@mDa`F{3oZJ4^Cn6C2}p&)LBoJ0S&Dk?YJO!y})>==7mrxsn`XQna|+ z7B)x&Tb`D;po&An2-mg+a1<2~69xv{%pFYSZ=>a(&|F%LFq&T}H&aQEu}pb*(vY7B za!sRh#)86yzJ~?dTxdoz)ZvPeW{^Z|y)FNxl{vfJ@zUPD)%eo?)gF&2L<^rwxPd6( z_e!$-8-C6YyCN?WxBhl;2NP}j_Nc`~z8&XZDd1l7j#KYd$sOEQik+ow{F3B-d_Is?82w@4jvXU%Q$G-pXf^lhs_4ZHRH# zZZQ?|aIY<)zwI2?swCJ=F8Hze9|<3kI+=)eioL|(L;@Qgh}T4m0FQ0h7S)Jw>6+k$ zyb-Sj#kZJupNZL<$f`*nMJlxZ@oLX$ynA^2c8cG_^uy$kw7Qm*r8WC!XXkViHfv&r zwXY!PXaZM@wPDm4UJ9O7hBB5N>I*7Kl!!(%=r$FMkZ6wGONm~Z%>+V0O=o3g6$cIc zi`(;9cFG+bX!iLn-UvRQ!d4`GkFkv3%S4Ypic&^Puv40Mr~CrKc+Qz7{HG0g#9dQ4 z#bL-+d}nSItrBWtYf~eizniX%D!mVwXfcO>9SO^v7h9Tu#KLijNpwBwW`Lw$;Z{ec zef8{34>j(uA!@3=Jvu+ttce|{h;p#1(^lTQ?^$7Jt=JBRgxQ_&vC%641Q|X7mXaj@2Ep^nqkv z&NK(vN?0WfJoY}I5Jl!44L(05`nbE&#ZRJg0pD>{2j{@h0#7!Y^7I>JE%pq`Jet4z zDP{KjK+$P;HRmGmBo2Dk5PdR0h(#~36OLKXsX-;5S;EOUmx7V_ zPB@HJS*a7(o!c#pIFH)J%x{MP;Y3!36PWjkb!78F492LWU9T_Q8H+k4DI8T!=Z-w* zoB|YrYYMC$tgzJe+E2>DiKxuX!zi`t2}wm?T6r{H+UsL!ee+iCua~P{WLADRk&iTq zWyI%jaE#tt;VIY=&6$q9>D?eBQ#CU#u6I?yi%lDsIA6euWrk{vmyl-KH@D9CP2b&7 ziMJfHVo*r~>6tZYWhJ7Uo6zt)Y7mqkyalLDG^>-%)k_Ae(rlqD${(E-lPgJ$3~nhr z62h@|h;C?s6xLC<4NvFw@#f?~Q@%fv6bN;v+BQw?aOjJ8U!sVc(%ohLpc>&bo}ztZ zwFsHu68&Jas6(nHS18VQMX+;>@K)biu%esJwA1L#&b%>oZ31MoF_qYB_l3S{)_xMP7`>J$4YZ zlJv%KLzKMnXt?oAy^0@{ca_v=@@xvx-4RS_Ai@Zpa^G^byx)ty-xK6qp$JF#{WkV& z8J)Y#eOfQ>HEpv`GmiV6+f^KS8ybxeW9&B5nw|6Pbn!@=KSnOKxQH85Q^zMJq%n&o zBIXW|uRcJGnrT_yXOptq5UwM~l$7Svm6gbWaN~5c%-c5so+gDxlOM=1^9~IPWU*h) zP*CqoRs5CG!$Q|FDL6iT)d>ywmEh8F{H)l^z{i635|$A&oOPz;mCi znznnznb1f0pCx>hUszZ%6Y>%AAJ24Zx#;zu5W@AVnxc(=JRy;3b%l&LFGh)SY_B|1 z(cCdRTlWmrX-0k;8EX!bk@jnie?^GhFiBmZA!Q)tuBk>rE!QqogVfIg|wEg(Cy~eT1*>Pjn+oV6l|?scl0#c~9hJvqz+Q-4~^F zLszENbj;WcPluM3`1phrYQ$B!E?^IM{*bO-WSa2c-`QXdeMw;WeN>jPzz!2{Ofz-L z9n;U&Exiv+6UJ-p4`&qjJ}F*wJ|BWU^O^e{RXe-5yvjWEW+J1I-ngg0P17Oy@kOW| z)H*o*W?n@3T}GVrj1m0ZnQ0(Y?-7W($+qj2&<)Xq+>-7=iz?SowYamiYPlkzJe(GV z!Jz@Coq5=F{!%!;$PE2s1w=chPs4`g=lO$g>y>cVv|NHAeA50e0}VgJDKs3DLNNJ3??u1xfP}NaI=$krw?calzn7scl%3h{?Jbj z{6yl&O7LZ!e|Xdkmc}_(ns9?pQwA>Qv-Q>UON?GFHCSOYFfjOg{lI%Act1tOyMfQ{suF9FRw_u!r&;N02)Uav`-I$?L?BB$?ehB?tN&G$OW;e zk!-eUWHQU5I&w_dg^DsU?$fMaz!{J$ky+58-Oex8D9A%iT6Mam*84~xdHd*F(d=o0 zT_zuj$?BLuHKiU0q<5P22EZJ$s((C)T$(j4c>)vZm9;%w>R*0%7faP4h-NH8mCO_* z#dsO0ZG-%WS>L=^F-sxK>fjZG-x`GqyEyRf1Ty2fQ`}-O-$JMGF%v>Tub-7J7&TTA zWtxd`rqt`%Q_E^2BK_PrC;F_18e|+d7E4$M_CAe3m4!(6ZYX$TSgH+>_JZ?8Jf6}rU z&A1SR5&bmcGV?#cbnV^pmV8JdOxdA?f-VRwC=3n@es9MxtB`aSuP|K<|8$E9EUOs2BDslK_mVuONr9aBH>(XD!>cO4l9=@VW!%rPhvuN(_K zy3#=}aDt2-z@~Lyqu%IcW>Quyx-<-U{lY=iLgcKe=wHadPxms%-%bmEXjx&K&n3dPS`GF})He?5je}ufGG>2lBX;8bxgXG12Ey ztF;K_MP%S5%<=(_o~X|i=c0c`@!KkASC_xo^tE)PYl}lj-m6tqCJZg9&DCXmU+KPZ zAo6!NjFmNAM2)6mm`m22EzR#*SHnr$w6;VP1)0Qu*xM?<6?{Q2i;lyQfp`wSD(rL( zddS&J3K3A!`70uX$tRy}j;GQV*#p#=gmyjZF!pw9U5Csc1J*QZ zroNt`ky-JkF8-2OYot3Qd5%7jfjeIcI?FI}Gpg8=vuRLpPfn4vh;fc>pDRnsr28Fp6!aoXy zHg7Q#X0=io8%8QA;ZUg%zeJJP7=Kd}sbV88ddT|-eJ+KKl8AB`qTy%PWc&L)-^+<4 zcjO_BGCN3Li~UnWpfD?)8|43_0ZM@oOM+moLZg<;d%KtYYL{zyqY;y0DcJb?EkSjxO!ogv04V7urn}}6Be+xPq?mOq0R19f)t1AtC35Yuk>5p>`DVHmnG-Ai>(IA+!v-6CzP)%|q ztFFGyF9gTOc5P*qGM!lU&VkiM(UXn~A@zc`JbiP&n9!A2F3;DT+!pQR-klk`-)&5* z(i2a!X#?id2J;#3b7c!IeAYv*p;J7ZAs*l+zrhQ2P{IRWM+GTphtjLI=P=CJd+p#dgD$p*VlHMmGaQUUE1&0R`TeFHeIb*#*rbYyX8c zxLEPP-33YG(($0zsduCMO&UFC<8EQke-a3a&8pW&dAV1E;eVkL7e^}h^Ne7Lb#z9h zTrGBe3WxZ{#txaLWedxGo|Wo2%Vd-)#zJ!92uX+3*%Ku0M1}=T@}6jFn690y0S!#L z<2QuKT{*o1xI;9GSor(rYPYMhOi&c%m%>g{25}P+jV+DiJ+jdv;6oIV(a=S_ znsZZS+bN` zqGh4?L5q!^v9GJa>1E%3SGU!ww8GeYZ@o3>2+9N#Qy0E_CD$)I8f`{529$7)*Uh;* zH|o(erR+sjRXKp5BNRu50ZL)4r0vaommO=HpkG8IS|*^7l*no@MGcU@wgg+ni6px4 z?u*_?e?5h_T$LDQA&k0Yl+qd8Ovp$6xtXZg=#Mv`Xb}ez~YZ>P%u;? zfljxEv0Ga&Sly64Tl?z0vPEbY1-kMkYvs4sR6;PAp|KGYfyx54o|6`y!?Mzl*W`TH z+pMp|v8?Lt`~g6M@E&E0WPZRyOdhv~2!vLw$HgZm)*)b2oljTuiDK2&9;N3C&&&(g zz0-C?%d?kdptIx~T??W?Eg6bT3hFm3306kOWI22T-6U@(Jjy+Ca+Y0_?38rw*0}xj zl4UUTYUOdS?y3#>U1UtLz2ya2SJ$-qA$sbxs_P zvj<$AT3kO#WX2m3@#f1EuOLAtBeJ60bHt2iCgf5CTo&_y%s|eAgBu&pF2O@V)`}+e z+0rsU=MCJz$YArb8mRr)MB$kZ6F}vN4Llo6DDz2p_YZgo)^JhF4zpu>dsgG2!bubZCeVm`kj?5 z{_lb$HV#HouTFB^Up-B~X{EixE<80mQB;yle)CFZmVy%K)B!P-$3I`w?DW4L?>5^# z>2e6tz__|T#4?zsYqrpsuzC_2L0EAZYPUAnp^kgF4oZx`r+iPa^NS+CX}KM|23SNf zG43yq)}v9)#7FI!N zjs}*{lQ$GcW7a*0ch>GpQGEN8{hJ*#M3bu1b8~pugeO~P4RG9kZTB&}Q>S7hHl5mq zxv{E$l~k{D1ld!69V-mPq~5&n#zwiUX{EhICfHVcJ!I%SGskR&2d6~ehe8JzNG~of zfbm6}I})d|jY!6Dx|?@$(z$8e;uy#|WxZuJqy;Vggt%dpq9mMimKoK}JNg`4iE-9( zHU(UpT^+SY3MAwdn?3xs_yEYtcJfdSL;?YFQl|FtkFaB-mmv|m$aV<@ZT4Lo0R?0k-B7=i1t z-$;L^cVe5BA=gw(VPosG4CtnnB7HM>MVC1jHj<6D$QqGE#ZU%V zfc^EVCK%zh2+eB2r4}oe9`en0R15nA2N#=y_jc3&YwKbY9*tj9a(ymArI1}e1o=;O^X2&0DMZ4NdU zCw*x>Hq4f&4H4H8J`~u;$`)zH32mc1V}V14qorp27eh+r1gCrQkMDT2H#wWq&!^O* zSx?ePzvi1dMWxaa`S#=#=8KSEO;_={wLN*u61tIKeKv02$dQe{3OT&Y0Y6vK?f9tB zN6`7Js%xaY=J$}^pSNEKMeSah`#!8N;?TST^cv@mezJa=@J(c&`+#?@G`pas*)YC{ zx8oh@D^am_(Af5KaA}DG@Ke|>@t6{ZS+!af3->MqUS%j}be^=wK{8&1@%H_5ejk5& zi&;Gx)W4!?e(ULztcO*$6e%Wt)%lex|sxzqGI43@mI`;6Dsi^HeQ^_52>bF9J(okGf#ft$+ToJ-((Lc8jWl;6 zY-Bky{`!lW2R*p&)|qj!B2mIT3@rU^-vJPYK!@u#SbI);wD7-RtMsbLs9EQ#XKHx)_~c24fGU?R`|DvA=C`nIF`itF zNUtiHWCt}X>v+z2fmY7)uKKporG3^%vxwi6?$(rjWh7}oIHzBYuw`+ZSX)mHGxzKn zGS`CD8i%Ay)9tEkR+eg{mC@GGDSp4gN_I2g=973Yn_2Pj*G_U^^yZR?iRPY6>g7HHJ`xU;1|&?~|2g+M8)|?n%WjIL~HM+b7+vT|05#n^%ynBtSIs zC^~%$^gC%wm0Gq&&(0Pu^iznFo0|m502iPq#p}dlX0FK2ZJguDqc$#A(*E{eOjw+7 zn_<>L8+V2y1m|2kw?%=qX)wT5+_L;FLdgc&Un@uy^^E!K+mWieWGC1G;j0{pFFyUBJo!e64!B^(SFL0Ks7v zA|5c}qWF}0dLJ@_KsK2;0b9hRsz!<(+XM&4pnDkm^t|*}1S|6hOLl%?>Dpm^OCzex zN*BB#fhD|9C_ba&MOd;#=k-#L7)Dc8UA+^O*0pG-Xk~DH^1Rq{aaF zjVEmgZ+O>%7)4qc4Ltq8k2X=;x3-4czbDC@9sYCn+8qS7#0vhBVfZa(d>{a{xzth#}<>6DW>5#TyQZQz*DgaxHPuJ zEU6)Imf<;>Ke;k6GP8EDNc^owKd|Tb(MB|+XHTbE7ud**d#P@Es|OSmqhFYXbk4ff z!oCHS@$pG|mqpj9cYQfhH22?GEHYWQ4>pEyK8#gSM!2bUKz!t{Gy^-+oM=`{Ib&IgZLnzG;Uz<6I+dko3qgeYNjwUoJ~0W`%T(-meRZ%uIa;FR}CqdK?GB zX#ObeDpiUo0Od7*;Q1|`BSJdH!liAad}V;h#Zk8oW@v6aZ~+238O_R(x^@drUf#!W zm0TOoPOelDhJz7jIN#Lv0tS8@2S%dtKE=}KDUNTeg{PZhFBA3c=_~?BXLA3|@*Og~ zc)CgI?O%SshbxokWgz^8BfNI+Z@XDZv~vt|;vTQW`?0}644{6(GNA*4DO!fht>d48 zVBT8oE$#w1fi0)2p?py)^4I%+2l6nm+^?n^_o0SR}H{n1~} z{{EXVG}uE2;^UTBDs24^vJbo0*7XZJPJS*$NK>V;4qf1L5`arNiAl4Yery&{`|{=u zWfhgx!|l-PhPIzFRiqoYB`+pd)8BG7_&{m7&ALX9b|z>*zS+uEa;X(KnC;Uu3S~cs zNWL$MWjJQ2w@!?&;B|_1`XMjbUebv=>PSHU&ZHRoA#dEjCt&e_uK7>>);n?0v11w= zq8gIxbcweNT+Pk$xj1=QtCIUQUE+BqMSm?;U*tfIdCo&M@394>SCzFUsFnR-F1hoCa3O#@9I9@U3m)Ca| zl--)vY?zXObzrl1Wr|Oda2^tRu2w)LDeyncLU$|8#$2Q@$ZU5?p(EgW+8o{;uy;x; z_3!X+BqW2-1>W+=Ft0Q3Q}^RXqKk90T<$JoVNywW84Wvxc>ewTw>XWV8I?s$s0S8I*r0K3*PLnP7A#00YJ z2;LsGP%i-C_j9e(F)AppqBUkXYJO`tb`0L&lN1WACIuK>rKEQQFdIW5)ms|H*NmFf zykeMN*6~68#d3ufC3XiJzCD;F^@b@-(}wk`WQ_st3)p32Y4NOynsbe*3&pbvv458d z!qfEQh1x&g;W(ulaBFhxe%E`CkaTj+*t&NNt=h=qij zk-7ifWRkpU_);-{%qJ{7GDgDU_l&(hvJor`tE|I%Ff%5<*>W+}DBwGCae} z2v2XJd<{7YCEQ6?q`k!haDu?U-dz1vnEhr;#{HIYyfEmf?8cKanGdU zXK}m#o3lAY=DrR{onv?M%Y4OwA>df1s_t!IVrX+R{@TpBk0v7u51CtUr72WG^;4VnrW+QWb?R2|^4*Sv-Y;M#&*>523l~;6%-Z>? z4cQc*xj+8n+oXz41dvZnVDi?Z_4TT(o8>oY8Ngl4BuIAunmqV~{3i1GZWIOz9^m}E z{uB<(%~y!rM}$J~sf3RN`a`5j7SFoh-BDzS@5w`C(kBjNEP{28acgOo0nqoGx>^(} z=NXc$N`qAm4qsanC=p@FSqz4TW5-;?dx&mNR_XjmNX@Q!vjp!|v zbIP$DffpUUd=+GJ2j7lob_jk$cT;N^unljK6;;#zP@+Yk(ZyvZJR=4K0mwO{v^N@^ zu7wiUf~%`OahS7Vp46GOHQrV9C8Y{0Jbqz+@qqOr2tHfJv+8}hPY8NGpSU(HG`)## zYHFghud?kns+q{iVFRu20kF4zBj7;Pzd6URMLG);HJ&1?-D>P<2MBg>0P|FCRu@jx zb++m5D&d{|uYnIEYa z3O+SaMq!oW&UjkdWG|S>PP}MZHPCOEiP{o?Rr*@?9uw;t@b8_iJ5 zaR5$GQH@?4acyj(-yREtCzQPNr?~nO>9Vq;c}p>Cidw zN(c^RRD-P@lsE1T$Wr6zuz;D%<8TpdZ*>;yS{V90niKE1^bAJ^P<%(cIEnRrQRp!W z>1GbS4?O*^$^|8oW!n_;hq6n)MX)8#CTvA0n7WUcwl?+jj1J!&YNkS8YUvu%b4IT= z`bYr+)QKL)36yrZ_rg8uQBRn*_erI9^sDT{-M=U-l=T_k4Fy?rJ38MD(`SO4m|fe8 zt0_H1o_XNGpaeAn(WE^Y_b2G0TnRfRnDr|GliOIk$X&RKGUpTn{+ANCMqy_QHA}k8bf3j^TFsz-0QT zI{>FY*}rD`V7_t`U?KIRDeTcm24)XL6aG8D;A!mXvDKLn**sc~J6dav6PVifu6Zz_ zNcX*kY?*ZUMruQ>Q5idmC<|I$gc4kVaFS-xZ7O(lNUgTX; zR;PWAl@Nh?XlF2(D%I8qbPvxQ_-G|MCH)=~M4wfkC|STLoH#Lkzk1#GC{p;WJOz8c z-__e29$oX=+Ntb)sDSp`5CFEutJ=xwKSy%G3<`M8tKRV0kp6(?yn^@C<{=b~lXp&uq$Q&Va^XOW6at4o{Rr$OXRS+#C|`!P+R zEQdosYMlAszaQJ-xB#4`*NW55+T8kQXms>(-D}^KE#zkZbByJ$O&*wUV+|A7G2s5X zcgqUnGU|Knmstw>lHK#d5oN_7DtXMqgKf-9oyx|h2!a=F_H z+h;vMD%89qA8GvTyElD6A`Ipmh&~CK-&^;@r-(1;^Z_H!ck*tpdu9hv3Ia~sjwi1F zxWh@-%6k#Q!H8?R!h-I*&?)adSH=HK3)EX1gWy8n7xB!b54*&qpr;|bgzb-4@a)2z zzrc8wK8_0PO*)ZyH7(#C5|By5_j z`kQy$2!tB9c@7JK4A%KxI}wftMS6U(_T1rzkd6%RRd~rb031J zGhMY83VB+{xv(<7J=CEyH#540U#M{S{Qmx$g`MF#Air6zaR$CJ)l= zatdjAB5IDukqHXS>dQNh% za>T~7Kdxgmj1oHBRnn@X4fTt%(`HJU?mM zVzr=fJ6yOeY0TLg4a;?*1Pzr`3Sp8))|a!rEESUHK_x5G*G?IBF>=W=vHSgxIzX&r zR!@4hCHQrBwDxkvGHQ?PE1%EbGRK{Za&|+pPb!7@dcKQIg%~^3J*(OTUPdX?)zNjH z^zKz~SG>1B>dI*dI5p!o@9>uwS=Y;%IC(X@jhs}5v1{FpL z%d3v(qgk|eBUhB(N2}8k*J~4p=Xm(|PTPLNzrq7>!@dG;zpYb~5}9v{4tDHH?{QO_ z^2*iz>W0i zol%~^*m8pvbts+N<{%}vNiI+jCC)I)afA%t*e47!CXbdj$ZvGgQq(#Sl8+3EDwlMn zO00i$a)zCtoHdmChhN}DCW|}gLwyx2nN>TDHNmn%R zhid2I<`_$njrC7;h_0namo%x3Ne^hG$JiTuZK_zcIKjzX%O~90=V6xuz;Sh);x|NN zwb?#&yzKV)upjN)qnPVJq}RqaLh!mzE1cUN|AAon>o7{otd-kGNHqo|b>wD=0^nGD z9;r2D-Dz$Fu62^o;PbCqm$kfZ?!7v*zmqX(!a;9_riM{MjJCFOs<#`MAVLb%D3fM6 zy|XGq6D;cDd(+U9oC4#UUA-n`4CmCTn}m;v({V>)oOYNkI8Luqsae<3%LY(B6CPWS zm}BpO11<^F%h1r&&f7aNqgf3A_3*Y!BO+L*_}VjyT^2afIc$JlI+(O}Z|+nP&>=U( z!uvY111+Kqhdw~1*<%=9C+g}RGF`1VrgaBgX?%TwDCU**mro=U$8sr;>{t)t=J zsn?gSoVcbyHN;h3!hoU=uW7EYG5K)_GrI5NJ}NW_>JxYY?&}RWxLLlYk#fHa7#^k~ zjJB|;AWbg_PJc&3*GtB`@(ti;hRt9|k8W?{1Y8|i8WT4yd~0f0d^e$;srOr{^gqq? zW41T#Z1Mg40gWJREt+p^&iJi^71_0?n(UbI3ll(=gdZUDTY2h6Lp~4eZ~vQpd%Jw^ zDt=DUdVKV}8S;c|eGJda%KUQ`@D$De)qBK$0Fgdru0ch-X=cY3*Uv~p4Lvm1CK#Uu6CSKms1Z7Ntfdt#J-4m#$taQ}LvD2X(MqClt2 z41YYWLPPwEPW?~g=C>KfQ?4njhFMrfx)&D(%c*%=>&J!_;v6Az?KH$#^zY|M2HllA z7wM<8(`@_-D+~)OQbx~LUm1O@(V>C-K&d#@dKm`730p#TC-(ht7?4?TDLOwtVJKtj zk;`MYg8%u))baTH@d)IL5cfX~dB$=}vvLkh2hJe0(*;G{IayA{xLr3hvV>hY58LFu zm)rksiP0gD_fjCi_m3zFSp@Zq>dTI4b?b?K?y5Gr(v_}-^7DV)A6x)2rjctkX+5Fk?Ca`e@ib~n2HSUY^^W{vGt z5_O~+asNpqAkG%IXXn*z^ayWV3%*H73cQg$7{0rkyBqe;XRPuDkt?#XB}ml#FnKBX zxzP9S;LFYF!?sTd;hOq|VA2~A-)t7z+e!Fc{__FBXI|RC=T6|rF)r@s6nydU(V@c@tdJYH?SRu-Oi#hC7LvD}4Iy57DJFpry^IA-Id z#s>={{hrIHzxK-@VRVlYG*aiX>-c@AL01>2+f6U(y`LpoAK#s+WO18vNj;yBT{m|= zinq3`^qxBbOqZaqr#FMLr)Sl@w{6E)WdrxuUH3sIVlE|XEQM0RI;Z6Q79Mb8?5O88 zbm9#X z&-{#5G>D|pEtgKLP?SzFBXXz=xFd*lpfX(YLt&QxDRuh77qz!6SULm;J!J%a@0Z@O_V8a8dQ(SCQVemJUt-7jnyJGhlwQqDYLE^bqnh$i+Y3=O zf2{x3b{X&_MhHK*aLAR%l4KVn)synf;|%yfCX%#o*6;KN?-=Z@ZQd&6)QJ4DQMN%p z^o&FlF94~tPwnwsOJV>a$rnxvdN3rUm#_XlkdZR7$dHgQ25q!;U3FF7gCLGjPVnFI z<@AI)A)t|vL?t|(zz{nNR~j=5D;ozfy5rUkIvN{uF*+Rq6>b$LX$xx`1#cG%EpJtA zh_@X?*qly6oJQ0Wgg^kba0SzNLhT)3AWt#6f8Yfn&i}s5MMv`w5LY`fx_>HES4Evh z+R?>=Mu1b01H!{EKqDl~$s@?eFD%SX!^_PBpU=SA@Cs!Ls2b#Yzg3TP=T*c@Rl>U7!VCWOGaJi$&}Je=Hrv-EF3 z6_x)U6bk(hG|W}j9Wlzk=>0Dd!?eAeEVwi+V2*As5DQs%3kO&Fe-CC3`OmXXZZ7u! z;M5$#WnpgtMS#H&gz@}mC?{)2S4Wt&nqqy4`XrT%X$ zG}6+4D@K@xMaRa$+|dID_?xJIJ!2sQcC`?r`};lz4=)D~zcw#7h))Q_&Bw;g3*zSf zC#VX-6wJY{;QtDkUl_y({NI2b&222b{%=54R6vRjFjuex#6nRCv@bU`(gD%ALGL8_pza{wh^Z&G5b4LgQ z$A5$b5&)V(Alwi>4t^d>2nV+S0vnKrkC(#|EGW#)BLo!YO;#N+|n|F2m8 zrpg?Fk)V+_rG3OM0iXWM@t)f#EpMWwEyWj|2BLC6$ow> zY+wj2d;M!FX<0b`>&)JU<{$P60z>|u7GiXezwN=oobF$jZT<@>|KIWRPqZG^76_#O zjgkBl4CZL*>H&7Kkg`H(%c#IUu~|<{Ut7eh7!K zfEhOjL`VS4%WnyW0Kr24=KlXL>i;ENh&9;3$^zkOx#<4i`T4)I`Tw&v{I{$GA;pG25{m<%x`0}6i$-)64Di_4+^K^5&g@k0U zrzj((?U{A>=ux-T@3tD@|JNR=TKnzF*s`^&93DfuBzJ@qgN4Ols)b$+$Ij^hpR!#} zni$@`*M;Rn7K7a%y+n&aBF6a|qB0pmG-M)SK~VqVvd~UaK=t0EMhC0~SuhYoA+939 z_B8OiM|?-8)&1~sdG(P49Q}K|FL#CZ*(V@Kg5udP9Cp;DNi~6lMSul~mcl|djpmWV z;%Sobr3@x~M^5{b1~z`}R;JGz_(#xy4B(`VMB|#8xKrl0x*xV5rps)eo2VHS6p;V+ zxrOT<|FWA#Qk4ZM=P^p?Sp)yk;NIq)WU6t%68?c>q377{x}(iA3CdUwsJG$E8>Afn zBlNf4@HV9AxEK_t-&2%U<2hcV9UcdBgx-(hUY7CiXi|F4jg-KlgAo{!Sb@3sWzR1I z--lRdzfKb^dJ9A%v!RA1i#*sDXgLVJy?lPHo11Tr3Ga2;;@0$YBNjtn@|h!vaSZMetxm^XMgK9C>HfM-5v( z^$s(w?4qWtJ?9FUMDl)DX2Y)rv8;N zc~HmYqRG2wWe0g^3xci9L>nqLkr?<(0G>lz! zbe`FGCK&#KHKp;%6j?~slLzDKvRFC<@A)(SX$~uZu%9yMxu=Gy_Lk{2F`lPvns>|Zrpwq-f_Uu~cmZbT&wXubc(nx2=r66(pA9K0$I6d`h^!ie8&EdX9V}=XiVR z$lYafx8(RXy{+LP!oBr=o<#|dtiVq51v-`vYhl4qd%1s|;n`E~kDH$-BeR!n)9Ok$$UCSUFDYTLq5+59R z!of8paVF0HuqbnDm*e9K@9;KQ-RF?oBK6;D?0`ZG&L8oXzE}>12=*nRM01b(=-&VXddCtt$|Mqb>Td7F!717n`umz3WU zf1XgVDabQSq6pT`NYL+8D0o+I*mX)7&7-Z9L-6^pv07=HoW!j+pz#Ev5bZ!2K!oPr z^1u)xOkIb?{xT^|yB+TY*mK|F#_?Ghhh9{m?qW*Z%vbr0d~r9D&UrI`w72r`m+_pq z#g8wFV1_Q8iBgsH@rO2Qo{lU0=Vg`Yrhen5TbYNb=aXVNr;R2H_{~|Z8V?_jb2(SX zJV794^ur`Xjr!nvJx&=cZW%2eBFGp~xV+CJ)S=KuRAUFnDM}o^(T(wDl(AEo%4(vX zJiOd>Z@mB+H7r0Emc>EiCx)1CXKr%e@jT6|vX89VtVN0Yf3<3?;{`wL2kmFeZguRv z6vzD5mc8#(3%)yM4|b6$Pl;@{yrO?TSVc~!e)f3gdfL{C!@b@!3D`6Uf9~5~eUM9% zAam@-T5%P~(xxp&l2#nmf-Ob9qd7zk`{?upBfwLrM9! zYF|51Kz@&Gf6weeTIG94A#p#_U~q@ou0ij4f!}@-yLvzU`~*Xyhi{W~)HlyOY0&nx zy;JIdA4iFfW1+;k5KJ7pMy!j^*uIe(ySO2XNnm|Po?)P}oi?kRZej*0P)yz0<)>HG z68VD?-B68;t`JE`28r*A2gqi;ST7x4SRi>vh7;E5k)A>3e0?zA?&0FH-tV&UoMOrR zJTzi`@+x*+FKlh80@unsdG?{c(JzKFaEMQ>TmG0z{ATMwb%d=I>Es6UMDXfQW{ig! z+Vd@}<6Q@JHDvLZ$SpHExBuQqsM!ZGhg&VclhOj*c?HbV$kGR16xmT9V&i9o>(79Pem+wf`K?w495P+7Q$B z;`3FD#$tQY>D_=q$4S`lo1Jky&bb)Kcl7vVV?pENBl!ELipnR7{zaZoCDhMTi%$<` zrLRi34h}BYkF}Ki(#C3n^)n~10F*^1hO$*~)FjAR@;NCdpYW`yw|BBqTaPs~kzcXd z^Ok&Pe6*(Nhhic_^e;9_;W|=!M!nPo#uw-C3}9s!Sxm1wERzu{XslkPpzymf9o#yB zHk4+VFIm&NU~np#UCqX$m7Sf#`EubC&}H*vjB2si|J%n3al;p*9ib1`)qrgd+=|uI zjm|vh-(juSo%Q{ZgHKUHMyEnw9;7PoQ{S#vM6W$R>^x&02OOh1Uh*J~a8>?z%3B;f z@4!9NQYxeJ%JGVdVk4^%c5;&N%5m8~5MIa@Uo2)Oqpp}P)j9DCR}wZaG|ro`hi!MU zTaAxQIe5fteyz`=zO-%-dGDAh#~QKEN(qQ0Z3zi>_Y$#7z_ZlPtK; z)HO^HqoNjh3`H)f#A#~?#cqH9V6nB-j=D=Od^|KZla z4=_gk{J8p?{uyrNFyDr`{{$CvciMJ8oy>l=MDizF>7jY*4fxKoF7bE@7k}DJ>+mc$ zK@Oz885>{nY`o%oKGk{F0N}J!fDOwS4&5=wL$enfYa3by>O*B^n7p1_k1ZBsohyyn zKe-6d$6#ODh8E4>#^wUM54OA#S>%*j<0!J}16|10Ktwum)JOU*C_6O%F(DBq{EVFf4Z1RmdpHVaKS~Q+su~KW5(nr&9BakShjZ3enp` z4=Br}^2D-ZKc(f50BQ$M3zdJ)Fax6+UHmlHdibiAl{(J3o~ul*K~`ry1t*x#d#Rjv z7f^ZhZSp|y`g}f zZ1v}C=J>=Wl<+ubt>5F-d#Bts+lf9NuzjoiMoY!BRL6h&RWuCQwHTl?v|QMzdvA()h+!>hzHzd2IaA4fwj}E`i0#gOM6tPxN%4%L4cNhN zZ#q2NDqmeayy|HESoJm|BZoCj30W`I8R`(kpcJu@uGIFfYFeKBX6*QZIE~AQW{j_J zXuj2lxfT}n55QwSa7^VaAYuF7Fh)m%Am z$D|mh$X<1GeMaqs%XU>!@7tA&-gMrtp4>ifV>sQ^9#al9gF`wV%AYTD+*{AviZpK~ zz1yliTWBHF$1ejgpT-ponud*jET*fl%Ll zFR|>N$tCf`@bY|^g%NvQ+4$f(kjGu+Wf0FBEXACXUIx=@|MANA(G6Z5lkQtecH9eO z3=KUw#cwts^r9!7kFFr2e3q`=EKxpeReZxe8zQ5_+*k}1aW!TMoV{WL0-D{Gm+c(KqCir1_eA*``;#Xvb9;6+h4>M z6%`$lX|bie+i6(5O6Vc1xFT^TPTG1?uOAad%9&V{!4fO%dPDQ*AGhq|k!T6fw6gzJ zMOSFrKlWxFxD(NzyLEOznQ!`OVNKaI1OuuiOxsDrk<84mhkT%rx9jfH6sw#e!(t=+ z3QOZFtsou&*?XQmXUdHx2&I_sXFJ$=p^Y37bI)VD05=ZV3v?O#Ft{pB5AHl7oG4=G zJl$X}{a`2M>2w_z6RYM=XrSjiJqfMs_$~Wf9PRih67X{6&4>4o@bTy0-5Oj^t9JE! zs3MjP_jdc4W?+Bhez)|T8ugQA80nlXbaMa7ImH~Fll`r-V$J*QW9jfngQBlmwGZ51 z2`t$-y|Iuo%+gPbMO>sg5RpU*^n0qwrb$}#HQuFzj`Qf#$j0(?VVI$h<&qxhvi=N( z?F>$Z{C+1up7#?gVzRj&m6lsBi2)(DFCG#XNNxUcs*TdAmaaZVEp4fz^7IYosw}lbG5m);KN{W8d^z~A}N9X+G@K4?kas>hBBm1eiYxv@i(7s`7?E_@feM<88Ni`{SrfX7&hg-nJiWIwm9B z0T&mwgeu_Tb3w9nIDSoCQ`c2%u|jPYP*FF%;}anPGvPh{(pc9zZyKi&y~=vm@?ykx z*duk);$wjNFMwGf`#3b)L{Sh9AE+e;&~h!+j-p)<;C~OLks@a1C;xENa?YJ;Ky~++ z&OT}_n8{Ghv6?}LMcn62sAVrJ81X%f0sFfGanrlMz&7AenAMn8g|@h$+kNaY8Fkqc z_VHKa4TeF3J_7f%4q<7epWAZhv~bw--NoijIP1)if-atH1_L74N@93nQ#@E3l2VUL zDbFh)AV-FQ*4}^9Lv{{>{j#;l$mF;>S{|KK2sT>uh-Y}?zgEjFf&VU%fv|D8Aqf}@ z^tnPQ*l@G7Lbpi-4}^IZQK~ip%s#D`D+P_g?i+cMm1uL05zy~gq8>?)0l=BwRnw5i zX!chZ-Y*n0rjD+3^$jc_kQjzNgJ7Pk>|mi6i(fQ+DWJ8e1w0sa#0vE6(d@t1Lx-bd zqEpH1_e`iV$?j3tw*8+}!cb2h!k;j%CGL*fj|Sx>9)5{rY-Qp+r@Sh`Hx>=p0z+%! z;C2PqF>yjn$%&dQy+u)JUUy#*p)z!$6n-j-DRkj%2v_wb_(~~TM9JOpU7>0by=<=9 z4wG?}8B5v_u@x&LmNI#jL@{KMJ2{EL)!~~p_{V0Qzm`-Jzf=MJTyG$6xDgURwbkus zq$CBvaWWz;z}1}pU>7ABm@r$)jrBXe7_j9Mfw}4@5izz~*UIpip0dTbP{G7BPAEqg z8kzw8!Gk3kRV7P^5&5aG99H)oBh^ay&^>J!UKtSqO}c&`EhLWoP|_&E)6KDVi~kt& zJ9uHq$d7!8O@2vkSN=#rHsSus4Y?hw>Bzm>CQmR!blll6RI9Taqm{J^RqA%) zrFBx$4!~c1>*RN^HAL6Y*wVp2VRS~|jQ^byCI`+G&MYWYsAe&eprO(7)Wmm7Ugx9GQ%$^?Rmrk*eVB`G z{=98KBB3|D1u8_tOoU<9Bs{@SX2$yRXXL z!(VdY6{yl;M_& z`J9z@1|0`gtTfDC(i$ILMk8-w)$lXNm|ane4h+lzON{+O4edg-(?#WFU)U)RuMZs* zVd5PupF62kJ#sqIliXO6cV3m`cpp)-S2_4LCfn9c+tz;n@hKS_jN`DTg@;N`@5Z`C zq(SWbwB%K&Nh#_?(Y}+g)9e-+8`G7NY+Z0_n0uZ!7Rq1H74i1sBe`^Wvn+9mVXJS1e^u~ClWxeV z02U+Cn7Eu|_fwSb9dR$8`!wSdMhDXeI z@LRfx4hz(YJBlN_c%918=d~!V+#89y*(4>_g>1Z?aU&$!`DQDTpnXCNaq#Yjmw2{A zT5~gcBExUQdb$Q2+CDU!sMAAYCllqOQSv6k$wn-st?tuDb@LvJ;!MoU>Dk#^C)LvK zCM2H_0YiA)L6IT0u-iI&=BQw1CPxD_GjIBjslqAt$79pl*PSQ4#P=1NB((e(lv~_B zUa>PN0$rM>*B%OlQ%53xIwWaxU{>G0ly3YuC2JEbY$_Cx5) zI(;g4`&`-+QJ=i()=bUVBK@s5O3gRz!{y9siIy4uLUeQ6ynKApx~vJsFKW{`tDo19 z&-fWtc$M;ocRhp8cer2{SFD;pU#W=>&UprF0%(+YT`Cl7amHb9_^))yW)0PzMq=v1 z%*J06gdsOW-KmQ0y8X$)QbnS0G^v4XkGBPj$7fS7#|guNw$O>Av-dx*B6*Xr6e%R8 z10y}h?^lMqsS)h~J2f>w-os!~460#sp#%+y*8GJwBMWyR9WIm1g?4Da$KkU06H(&; zz}3MX)9198bY*NajoRnoOTcX0ddGT;u^y{p6}2b+S zzy6Q~T{n&YgsZ>#%|!hjP4$tm6LG(Zcf_KD#K3R*YnRgpy-$g1d1dOJI6Q^HcG;7E zuHw-_tk{~nUx$DShxS4ZG>Swu{2K=1x6a}xdDpegE9Mp!F~%Kg9g9WFN8hWfW8d1V z_0hbRy`mdTO#WEjJ;RoEeK=ox&ey57G9)u3^?FY^;DIqYzR^YG;o-bL0KK4N+Sz=! z<*iq0bzPmpul-u6OQa?lanT2(&B?HjRfBtb*c!jAEM2-j{*GoE=4~y>8$A1^SrYQ| z)Q}{VL@_aWX2y+)xj&)H>1o7fEDI#nvAVHKB|ix&f*(&g2z<%;^7UiY*#dm~YTL-Vqe>3;}>wpJMa@vKBey87%X|VmSK|lCa|;= zb)N2Ojki5S-oXt%WjsG-QbS->aw+$P&U}@Y0!~gO#>y8uks=@U0Za8issg?_ahb zQb|6hw+dP;CRNKR)JOs?q|sjDpp z9{muL+Xb!{-D0r?_Fwp?>lRcpD)6MpG%K_bbE4(PtO6sC*U-=qU3LXYrS`8qfe`J@ z1;G()0Jj`*w0^wYSIXYI1#BD2>h|WrN-B}k8M~06{sHSYT{mHaY`jNc{^FnScGq~t zR!m-JgI0Qmx;-!|1N+I@(^O^J615!g_==J5VxwPTxz3J_Lw&RB6J`6(eBcn-%hPun zrGUM2bUp>8!P!2hHkO~)`?5l@GFYwQFL|m&~Lc@4;dHjB#eT!IBmi zu(y$HhpUvL`APG_7 z#3wSxpce`i0w#VB&V_=G?l0RPQcC<;V{2Qf`l}~O1No!o?V+^EVAsO1Af{%$|!l;pc%`p9znA* zZQ@wcIaY;=pH%rmxNq9!TW7Y;ipqPOZKnZ|e(v8vMZf1ua<@*ad{ZDEl%_6=#2U%m z2S?!eRNR5l;ForeN`SE}@qXC2*m&-JtYgWtEvk@bARWo~8A++~c{7L~Dy{vI#OH^K z>d$$!9nZh7Ya!!rIgNkFbWAhtUHx&pM`ScWq4&qv8=uUvQCGf_p;gK%W$t7cOXO3_ znmOB?`tWfS^Kp_aUZP~`zlPT8s*ms-Oj?-P#M6zE|ENg-n)!`&m1}&Wkf#D z>2mMG)xnAiWk142x~#1o%4p>Jcc`_IXi}G*pAA>lR5wf2>;G=)8Fd?3C5t&0G5pdt z{iLzPMcrr?$MmIut#>czJQ3V1c$D^08c{cA9qIO>qOwh#>&A z&PmdUf-HySgp!sYkzg6EcdMR{mf$zuf3jOKr*P`)TdCW3Kd@61yBOy!ksvrRa>4gUt#Qm9XLBcaFE!pL5^w7DHDoV-$@;RrUR3_A0-CU& zEUGeap6pN(tokYnmuz1H9d-A_dlU?OpD<**drfz@^|@$fbXlul5p@NPJoVK^!H=J# zeovt~&uQ$V)b5l;H2u!(Y7S6XFhZ%#hICj<`LBmC1Q+HWg;j|_%bd#&ao;I5InyHD zOSAZ6CcbcFE77V?9hodhrZT6>6&V&1ptUQv>F=EU?zS$_OV5RvnPoXNMoqq0HN~)9El&-x@QP9Me?VmER<5U(=GH;f z{YwNAO9X0IQW=Hz4$!j`%oXX3VtDPBb%eXpP^yOBSvs+{IOuR3$>E?Xqly?6;w24Erd5z`^6K1rg=r;i#hSH4EQ{;Huwi{>gq z1v< z9_PC$U6(;sX$Xv>MyvYb1RmiIj4;lI4bhCiZ@mkYU6S9{62bC=QJ&AR+4na8F>5#@anOVi6cnd;B$i z5*%~<$kOq+Pqn?h^8zKn8ck>uwKoLIds)2W-oT{urBd(4`kg;JTKRA}B64Fx z1Dhgeq8!zKqXxR(5LA+$oW11w>K2=rD9W`k;CMnNROz7cJr=sSutxDZkYdg&9tH5) zCY7+)&#HFjaiHD#m^9qv$xT|I&%L^-?(S|8zY1#amwW6z^nnPiDJSaZ_vUKF#KLHP z^5o&Geo}PykQ&lPM9|RQpi0@BJj5usS5LcH79*EwkM-qE1#P1QXq0y$TTt^;IVEcm zZ~5@Bba~aRo%UZAH4N{pGPqBgH;xLd>2EJh9xZ&iSSETYHDr#1Kd^;Y-n6u0sB6}= z)b!Pt>)c*6`b8!rfOINHrjOk?iot#kQghsJEzXKBCc0|_RPyt>MqIj5vs%E|?w(CF z#A?XfXKe_V6~-HK-gRF%SZa=HJq`%m$@NN2DPnvdgo*Q+r7CS(K(~>r7fCKP6(o3p zR)d9dD5GnSE~*nTSjW`YJ(^vA^FAL3JiL0C!1tq;xS$URT79TrT|e7WW`QHqs&}v2JSXkE;nne7Lp`=c zES`1L!GZiLENN__7f;~_IV-UPFy+^Z=OHw%K;M3;+1Xjd^8Kmz3cO2&$riwUt2u|B zzSYdwSqKnvUw;vj?MsW*op@;|mk*Opw6u3{fR1|{&S5U`FT-LxyzegK+6*ZCfG36& z_2j|j#8}c*(~J>xh@>j_yUEE|YTbQ%<*V>VE@fiJ5 zrn*KZ^pR#0FO*^@Z0l{Jf4y8|4jqX{6n1Ry&ypCJgu=>UFv{k8aby1{MZ>E4RO6M%0f=!s*8Yt1b zZEQdxICimwN0S*xbgv#mBl%afRsSGA=9yl*Na2wa_T@B?4uYFvrisn&y zrsU3>C}q27wdk6i6GF@Jte@9@H7M4s?NohaHFWAkvN3Dk@m3}?rEpzi{VkKHsDM$E zo0kDO9cM!RA-VToa;=>Gk;^c4v;E>WfaYFfQR8i$Rvw-*5qZR{pVSF&UO0>5SFTs0 zx=rzKzEp02A0xJkUh9+0x<-aHEGgK8k#G#x*o}A#;lr5MUEfEfkNwgQMLecTXRwB6 z@BcE(joU~^bO6~j&g-tya4C&psN`7mv<*b%-v}fD<7-_L6DwC&b0D(*&XV7A8y2HAKRJT8%EMM`M~CX>7L2ny zafv|nQPV95#&a;(71t~E_x;<73Z{++w%muINF?{PRfEpC()WROck-a-|L=OY}L-(pJVq%)N!dJbRocd(CjqFg5J%=zWm%gbX0cy-4qUA|t<{#q{@)j}yNF6*HxoT+lv3wf8B<-6p*V zA1T1owD$T1mu^no8hC6J<@N%Z3~iiRDb7sHed*b4aycamjDHxbi)0joBopOcTuy3C zWK2$i9$BPlnjY6^jgNjP5W7W6{=xV>i$hbg&$uX+%*~x_xTDSXx+NR0jK6lHnoyJi0Vs3ouZE|s)NL!y}NdOG>rgGeOc+K(hJommT_eyM4>z%%T zPTjuXFz-5pY`zm!ITr_Zym_ZJ&jPEdD~PIwz4yagW7=8nQg55=yg~@rv;rz$QRCeA z5f;T?uU#%WF6_3)AM2tKx^(^PhCvB%CMv(5Wpcn zmYcu0!0NI~F(e|Z_whCI+SjA1sILUb&10uVX)@*y+l~){0sF^KEYy#?m|hpkan&^~ zO2oYf9e(&C4QkxQ{CNr|-=<|)A~xpQpS5?A{o+J%BF^HClj9ix9u`q(9&f?kwvofN z@N`7h<+9%GQ|C@QCiUND1hF@dj=5BsofY~#{fm>>Mq~EZ9Y;<6>euFK*^=q%DA_w} z4gz#IouXzULm2~BuS!To_Dp@u&(&98g14_wXrrZu=%CYKswMK2vLWEW9WU7h<~Odr zfy=c?{1)XiG60HXU@Uoyfe(~pOPRs|bl+h&U zvhRbL6}#e%-xBq{@nC>A!DO6l`yWTf#<+z#Mm9Hr;rP^&O1-zkwf5f}b=~VUS&++! z(R-j;ONF^p`|f}07FqDB!J+AoEpc=QJVBchLtMHG;u+_z$ z>tU9yxmCO95BM{1S$a&2s+hiM;k=j4C7|k1(u`f~r)#EjnBSoi`E`}}TOEOTo`OT2hgfaD6JB6Uhzkb~r z&G2UfguRMy%`c}>8NShisC=NTo;#=5QHbC3+^_l}^(QPjACR%_XNK6>eRHsvq+Uww zig;DbBnL?ImD|T9AtkkjIuI~V5>Ru`y=F9*y5Y{Z?qvUg?4HY^Gj!oCmg9A$cl2X} zn>yX8tcgfRSoiCDVl-TX#U{LUT{TFZ+)k=~s+|EUK=_lPqNd?cUcb);sEuVy8!B|L z97gKN&dHusEF5&K*X9KYmM_4ySzuP?TQ5{=TtpBcrS(@+^@JtPqw(sr*GFW16Dy>E z^QuRrz?){1oAGdhsb=HbuAyAZPyEB|bb_Up$eQ?^`LCr1YQC*C%u_BoAHJZ{H>eQh z<41Z)_6OzuiZZ;S;_q^eKUbGs2*LvBVqU#ZjF<5XsZr3W6c|b{w;9>IKm!+z1l(@dc+29nKCs1N-ZvpDu8ZD z8_MpF|BIa7zFz+(_Gi+kqXlvS3+}G|7xr4pIXg|2s94%TUyZ{(zR6Ga?ju@3qvaz% z5*^+qqvT%ieyB;v@>e_=sf1*;Hgy&$>o_5b!TOBjxHd!yJ8u+;rvJEOryCh#Zn1oS zqeb?0P+4P%8kwYh3~BZw9Jx^2cB!k5n5s0GQjA`a$WT5nnY{+}9$$U4s)4Cek#5nO zBPyx{+cOy@cpRpZYIS92D;-J8EtnWn@R?ohX9%Kc0|tpQv_n*cFaKi9N*9&3lgePS zh6MMfnRtgXciiDn`))q^t|78sK5$jr8SL_MiaHUhOwT)v59I`R;u;e9B7$<|@PcLA zDMum2eCsCOW(RE9zI+0ue7D$Rki8v8P4gasJQeS1FTQk_=8SigDAT!bp*Er*ybn}h z3@51E0J^(GUt%|_hW|P%Mj%R_cmSAg#~KX8^?%f&|r@} zr6QI8tE-;ag();WUz>;sYN7kmTnVYU+Dt(XpW8KR^Tok=P3PDKgB+Qw+C`imO=V))_Ooj9VHK0mB;GrD?5HI^mTf4_1~aJ}py1lgefR#{ow zUftW*$8`7u7lZ9;SNW4tsD6dgFX+Uv+aC`f8O2L}qdg)GW16+3z;dN6<^yJmxH#$%e0#jOyLA0oq(B zb|Xi($J(T(G3F08bQjw@`0uq#b2tlhqCo}~=f0uDz- zi9T&rogk_RPCLsUH9kA;?y73j$Jg`Lg7b5>M3>$d_dJh48jkP_Z;N~&<1`@KJ+p~A z=}ioA7{8*u&AepWM>G4v_cisQg2L5fw4>ZDaq7Z3`>#Zd3N;5%0PVv~CKqYRlpQ!Mb1+%{cmxK@SC$OiT2(k7YY>moVY(AR1M zuGP6;@_5X>BFm}Ryvz=U2J3(BQbKrLZFN${U_{^(UQ#`oiK0aL)UD)hUKA`*>TJ@o zTr@J`77CbHw?c|qR3f~zi)A~CX3va(8 z-m2-(5xZ|fBoj;F`wH^EoAH8lWM}NKkexHCRd&o3#ZBQ;4uW4=y;IUm#ACHTiAGJn zOCs5kOfi&QOPfD%_=;`+b7+R#RYTU5GBizI0qho*qA9&~VrWO%FZCj#C_Q)#SLB*{ zbEs(8+$M@@gTARK-VR=Q7NNGRTtre+Uqqlu|DM*J@moV6Cu4tFTAh;egUnIozD5-skjB>C?jHR1iJ&NQFGV{#CRV-tBTI@>G8>}--$b9> zY4E#9c5~hO7|o=nxSzylu^r&H>Q|S|z$Ee&$G`mTXze;^LEsucdT&AO{yw<{oFtbE#vDVM*IwVi&p0V`$mr z24cvu`2MCrwm^#w3ftF9r)VWAA};-8d&HV471aAOq)sx1{`I^0_dnCSf`uc25kIjW zG*eDbHO6u}LKL)YHv}p<9TFK9TsXw~`^sk~xp9qj$O$PyULQ$kX3e@yUh$QpEaB*mU75%GJXbvtXM?0B810 z#|4&3MLi(V$4^-bX(rgIB=$%j(r&S&rjZ~z$|RQk(~PU+0j^EgIX*WFU(jvq3FYMF z=k-mbUj*-q2y(KS3F&=%0DlXj!D*{vL(@a$23GE)k$eY`(_;T57jm6nnllB1gSao= zP}Q?$z0+Sv;0{{~++SF@*xO^(AV&QBrZlx2xaZBD7s>Y`w5BOYY-k2s)G}C$6MN}r z!jPc5nR+PJC&4#U17Oe#0yNs?BPJ`ZoEiyz{LPihjYs0S=9%@@%16FkB@&dyflrdG zp)JUR6xPh2r6wg={-W11SEQDRfz};2v25W@&q%Fs6}Euu@y*Jl2uHr2<0O$I{;EKt zj9~~Cuk`y%U`)LQc>!dz58PiVhWN<@-Nz4{$tZ7|)L@$v#>SpUvYaMA6k6MYsBeI= ztfB{(P)QO-OZc@TEAj3enXH%l3>GEr_a#k=%iz4}!+3@l_4-t+=Lxdkt!L^nNarVx z>gJY~7-H>!vC6_&0DB@M0`3DQTYE{gR2_Ah(JyaVOaeMBh`)4%0y zORD2(C?zuZvA_QssnDvsE}hvic~ddmD2lZI6XSl1X16}+gA+-}s4pd8Qcg1?hxWL^ zsleD-`-d2{dak} zwbJcT`~2iV-wo=x?X5bSa*6BH&5oEP6u+v*citNjM6mCbnzkJQ2|hN!XaLw^YAPnX zL{HkD7h}+bI2E~~K=}1{b`5E%DD<|QXa1ZTHtOQ`VvTx>EruS$ZkyUSjE`QyQeZ-ueAc-;+7mqnXd_JoDW5eSNP{z5Li46iE*zzat8> zaL~jCZTWhc6oM(ub!wAmycXr@-ztZ_E^t*KL^snl$`6ftug5y(QLd;#^W$SVfVxe9 zl=`cseOOhaT~VT$5c#oX`CsOwKCTVy2jeSlqOXZzTRSD23pGK}sOJIf&!}f{oik;O znF5DyVLekMTq+iKy_7wamzLHXK~CL+3dRQ8hb*%EBPmu)vUBKV4s~(nB&+-KRaX+^ z0nU~3j@-OpgMW&Nnc_&}q|BK({MDoUrpe$ZnDeaT;i}g4%E8EIlND&4R9um-O7K88 zSaW%KRu<7-w!k%uUu@;){9gY~!cVA1E(T7plI|Ib<-n2RGtk7t;pnqK)gzd_!h4~p z$7e!W@|-aNE>|+F_Zxh^k^Z)~`<=3E2ng$<{#j^}F&Z)-ZJQg6rxNei0Fv*ZmEN z)aj~8GHQmtfjmxRGLNxFZgja+p{XE^$;%ON^Af!#EfDI`O-;1a_BT)|5Ba{GB#s)1 z-}q;2bI_Jsdq%IvTCJ3nFqB6(F}{QzddY`TGBsy2d331(Rrri^A|3cSxn@`?_NXO+ z(4e^#^?tk{Zr`Qp-dkx<-OAoi>&*pNWA$>iF_EPqM$a^w9^TfixeXDnJ)e@}JHtyK;jLG&IbBkY*hdlK@FPNokgcu{W z5*y?Ce9Blp@awAO&LuTRy{78Pf34NS1peuVRlxm^F{a3UGow!{s>;9uz&ETafTfv9 z5RJGz0&d@sM3WrezJlVMnApSbJk`J>^Wojuvsdh2v5M>#JXlDbLDm;8Jka5@sd^wG zDWl>Y`U8uNIa*5qJ+fvYedF)nc^A>sS)PFri=@~Tb6-+U3~m|GMsQ!Qo1;%zp`b~e z*@H@}wmod2br97M$9kaNun4mK_11q#S(N;oDvAy78>XpF%!{s`DmZIQo%}!u^#xxJ zNq5RyO+!+}U-A2R9JF<#1BsLf0u6X|YqNY}5yy}!*W!jma(6r*D9Ku(7+H*T9TaRy zV`Ay5ewoCdPn#yBjw`1UQcN4)*GDm{oYp0$5?Kil`5D!NL=ak;U^dgsQ!*o|1xDG{ zfrcY0xf}D3iTN?+;;)q7x|Zu=E3g(?%ja5nND_r;GmT_0fphZBncDn0IIy|T{DF1JRZOX)m z>9@#8{%^Kg8ygh!hg?Z$^C@zqWjTp_pmCe}$ix8wOX>Z8c*d+B4v!7)ifW}^P3jUo zEwp-e{H@2p*|#Xn7b{(4R>%Dav{>OkNK>uq8^*jxZ*Qq3VTbJK)N=2X8=sq$;CGgT>UGXt6|H4>?81JvCHTBNH*43VXD0xPSWr^GCT57i_<{(!uAK%doVi zI}hi}VR5xQsgc2?Vk?magC?JptNWWcenTDd%R`TWiO>L9#t*_d4h!^b!X58=UYq6* z{4OkXWYMQOck8mMke3nu;1iHx(bBtPg;xBXs<2L9*&!xnLYcc<^%v|{S&$KFbz9r$ z%nT-+NHNBAC7Lw3YeHW590o8eX*@=l-(S6Y%ODwe16O!Uu~@O*fxbCUUg6%)7-hQO zH=KWN^~Lf9>itWWW7Rs}ksrqi>?O*?L5VX}m~>JiHQLv?>Z#i>znFS2uV7r8uI>bIyJMA8RFDKYpbZ&{GY9&@D0Ckm~}$^-@-$-r=V)yJ23m?Foh zyZ8#h<+XEmi7XjQ_%+$2@lY(z{7MX(hfos34^#U!h7L~1zxXnz2?WPI8|t-xs=jg2 zB{LH>!T6t%D~<@7&gu4vY*-b{**H|g+QK_#-{URF?&v2flY5Q!f?AqDf3(W*5WgO} zLC8QQj!)hn%s}XJs~Zyd&Z5;1XWb8H66E$VoflI3+!Fd`);@+$j$NZCPPVnxJK8bPX`oL1Am*mS0XR%r?6ZVS%!VHT`x5Q`87%dIkx@xrjb$a?R z0p0Hc)F#m((EZi4`&rzn=#<3fQl~RFXYK~^)=6(>5z%vTt48l zLq%T&W2hM*8L_4HYk9?X|cBxD-2AzR5%8$+oI%XSk~AmPUUcvHoqYDJ>H` zQ)}~?aHv!G-n9DFcyhO7rFg+1=@$oNyDdB?g+?Kj%8&OT)MWQfkzegDmgT|i_{m|& z-Bqrv>*HzXd)rW+*EzvEl;J-V(I+W$w#7zY@NwWNGSDIAo`=0A>gC^z;y&7Yh7N`| z@uca+3)Zp}k6TqO+x(ae6;myda2Luv1QNGRFcn$I0Ium98b2iK2UoU!rE$!k?DFAd zRyvbr&^MgoQ!HamJT<5-7}uXDRxa4FWFq2dqtk9CDB61f)V9mnuZypzj}xg1 zY98=_Zwg#7$h?t_^}guQwHQM6jGd+|O@8kGeS_Y*GWs=*#o0W>_`>IoRvt2!>8qLnFTvR=0m^KB=}=QDPh)NY)$GQ`rM=U6EY^4zOoo3L8Oo{p0n8i2!*h)WWDOPZ?xfn@I znGY8EyBDVcAIPnE?(Mu*Z&^c>r9$PWH!kzDA=Js`0LHQnk%XMW%K^Z@Ri#4v*V3-w zj8&EI5q;UDfTin_HqhPYrZR{w)<96b&rB@KJkkX5-C)UV^_9nSU7L-mqIX~qb0{TLUmqu z<8!GF#Z2wNX4jgHL*0>JCV|*^%pZqWuBzto8Wq#C4VDDh-M91qEf5=`k3)`5Ctc$A zRq~|)4T}q;iB~CBkBEJ1DK}Yr`3}7}YFht_6cL7D-j$AN&%10Q|m< z$SKgPBqn7^8L8mDf7x>p^0TG6k-jfiGC%a?o>I1~ClN2U*L6aK?#k@yY1o+<++>Wz z_|PRjX2F&#y5CMzB-DiC?AcS8n00`m!oV0xm&#_}9b(B7QT-~{f9<+INr+4>$RdMj zm^X}dQGSID;hN>5Q56)$KopKzP_SWFpJk>C0IsFv!a+gta=8S-U0-pDcuWRUt=&_T z*fImAfZK=1h+)c{gl+es>*6;mc4>O6S4K{YM?#^t;(~L<_b`E%(z;&sEuN4mn)e?* z?;kg|R(!{iDvMyr-Pesy?N&o%4Hfng5QGfWJQl96s5k^coAqoiY1CieBqtbVvZ z)7ko7kY0l9y+A9QCI-*TM{kH>yj}efT8P}QuKP25Q@ibbz!m3uI8Up>DW#*y`6((m zl^cigH_a!gpq*Sk^138VaWNlA9(8y2$AKzN9lCCwngh?_aD?nF_x(2FftXU4 z@Ey*e7xc<9O70bmuo1#^+b&5)hATWBGO=>u5Kh#mn5r6Wm1)Uip6>Jr9 z%|nZbr}a{9ZoHdYd8Tc8G5LErX_CLiN4b=~ZwD6seZfrIWVeV5?@#ET6gWsxmmGSg zri3bj(-XI}E%~CDwzi@C0s=VHFqnw5Apzn{nPh>UESzyV0W(P}33h5D1OyZJFFxz* z1Mb3T)ihq$_3P)U6cn!|Lf2j|6z>oa*@)eMRisvwn(^fqDpWXwifMs}(QK0`g}Us6 zkWQsRA-{liZv`FhVk1ST)FZ^?~h5S%Yf@hUmxa(#UzgIcX{_unw zdVxaz>th{^aiXp@+4DJ#f3>_xI0+qE$scok|D0RA3(r$M5hregoqyER~Z&_Gj~F zh`e&`Pk~m%!EAk2eZ9L;z=`60heMu)%7FjH!-)5RZZhLm4rlKqHUtJ$952NhW-;UsItmk;r-iBD_`FaOtnnAaHzp*F_s%+vg$7*V8>sX0M zzJGtM=0>YX&jzeR#52g5#>2~2Amk^hV_{i}tQb#cN`(t%32f^^c)kWtr;xE({JQQ? zk{zZ9yt*3m_Q*Nsz#-!|pL9lC9s5@{x%OWcuh?Cn4G5_=4t`j1?@!2E77_Fxsd0-U zD|byUD48j5gsL_mIlOK>)EV#!gdvGjW$y7+b2fVG5jDO)K=4YJG0so4wF%qdrKQ$V zhy3cG9ML{`2M~plM9luW8Wi6d7jgN?8HW&tHKDMhs%lw<8YY=x(q-RH)}c z)_a8|vMa4N!sNQ0xl;@|`k%d#d%b$&1yurGPz$4nfD#8G`-B&uQJ;9OqI)A=qye74 z@}V!PdTnHfilQX0NH<;8)HXUl!D;gO=W>-^H2B?+8Yk2=cT4e3iv7p;_2lwe9bnQ# zz%Rou4Jy`3Ud8QXMzNVDE+{BaEvSbBHnp(M!(W)IcbCtW{(7vn`To29!q(TnH7Q4i zDM!m1Y7$vJ?mQv(YuX`!N^nsUwFacbnU;}pcK#XvOsAF*i=9 z&g>>AZr{5R65(P{$og)z308@4=N>-v;V~j4CdK;XW5fq?zzFE*=@Ao@gjLs7^<*Ty z!X7dY$1&`~L%bpW>{e|+l}*C8v&)OOgqbb379*VR*60>GJ(!l(9Tw zRNjmob2hNgZ6f{53^#-(P4Bg{Z6vJZiMndCq>$4K7BIv3E<0tD{{PXaxg7h>KX7_$yWzFX?`;BM!oF5E(~3B~6N z^86Y*sfx{ta+J<=SUTQ7XYw;9_d6+MS*)dZIK?&WrsqmIF%%%s99G&1P}w(s(h?vp zP7D~31Wpg%Ub1i8u@+LS-?Da9g>FZPDbn~*CLcc#n`kf{qy6dVy`qDgL`Fs`pMthe zl-l2XwjoUqcb}^v9Q+9Hx#lAIhF7H(|elA5Y5=48we0a;ciOpQ|2_WFW0tpecrscLGmvP&fczcmy7OGT(9 z_c&HbqU6WXN#5JijA-v)mlr>o6Zd1?GZ9>&#>OZrBQM^cq5es;s>+B6QW?qAU6yp}U&wB;C=r_lJ2z`@b- z)wh+tynN`5vjJ_YJw+;MRM04~;`9_O+15abnDsf(Sy=D%lz!JzKe&lYaX5_oT%IIV z9%jD+BT5Z^r9FQ$lJ*cwzgl60LRm0!wB&p~M)0zSOF1{|nR}sjIsXJDBZN5f5b{9| zXTE_nl|~2pDLp;2=gNNuDH?_U^^QQ*y3_Q1kPT^KM@y1qIf>^4_xIS2C(2k7#CO?p<|x8Lr*n*h^cT zb>>bSBTQRh;#%JOqrh`4+Q;uk)%BW3ELS>4!7})x#Xwy?{P|G0HfQ&ROWS1+$?%sJ zZH+xt^v$ZC^WirF67$!m|C}pbxm~uUiPrlMy1Qv3vD_0Z93Ok$boSCL{vL8ONK>f?qkD6V zXqUeXarm!hgN}|k{~M;ViN%!XTxZ|vnp2&!C4}y4zd7)x2cnG7 z(2tyqMPs#P8%4yqmT{#z@S5blw*YSoIld-Qp8&Eot<5{P2{=j;VdD~)Z8bTAT^;ZV zPWV+6sfI~h8dm5VaS^)Mg7mGKnJV_=LjS}%_3T&LOI&KZ{Tw+)c^)m@6Q{)6qd8l9 zDMO0N%Tz{{E<3fZcOrdkZ0h9!`=6#APi_}Jym*b>nd^VIGKFG*^nN&8H1wo>jBY!6 zGO9!(Tq>xnWB3H66?2O~mA?u5pO=ZLW1&I|(rNRIU3{WE%Dd;`nAp~54*epzcs}!d z+LhG9!x;j=D7-E zQWA+G#4i7(AgP<&pAJ(XsvV~2J9fU_#pHW+VD4rY6M3S{SucU`KP+Fo9AN%kSpn#9 zcx9h(t^gm-rb{WiwEnSq2Xj1xy2jzfsyF2DL;lW^f)9J$o z4B}UDS~3lhN}T+5Rz%pr9cBJ+3~5O3pt$m6^8=);7PhbDU(2ebQ#IHXdbmb|MnJp* z4ZB|w*?^go5TwIczuhc|1DlI;4MPSvv#$%oQ@{BJkJ>jwm-(i?-2Q0Cd~Ir$Trm=x z)i&^Q1sk+?xLki0cM2+R$gEJ%&BUzN!$4ep)-x)a-qqlVcv&b-3#U{m5-_3s5ArLX z`~ij%VzP$UuLURB5Gd4@YPK3#`rE%ioLSY+PjQlgb2KZb=jt7Kty9MjVei&s3K?qc z`-PIUNI)PcA+Ye98ixq;V*kdAK3bQ6Odlm^PmXb5Q*0ENPAO5}pD+Xh*flR-@TZGCvlZbrP!FM* z;sHu97RXO|U6!B7UBZhy1??mkTFeU9GL&3{eshS&vlmcQs(XIUEsmN+?jf=gzsbJFKZt=H?u;Un3HV^ou2gxoFeeI z?FbP*SFPZxo@Hs@Mz>vJ;IVL8?O^0AB3901A_WFZyD2a)`Fg!#aK*%~hpw)^iH@b{ zD@69z*c!9Q^cgKay-eTWMt`XY^`Gl|u0PxUM{IbsEU;~QQ^qf)EPd6BZGXh{KN|zo zUD%I#N)tbqU|Zx?laooRO@$4r>SlbQN3;u_ZgRF^@Xzxc+t}@!seSh{fI3l0aj3Lx zkh9j3M>vO*?0RXtasW&qzmSc4aw3oj_RiGXr2}>Cu!}G5N0^_>ClrxhAFQ;bi{ zsef2$si~2GRZkOJXC`^cgyTb8N|IIHBi;*&%Jv_m3>~ca(#TPgz9DJPhb%zn4Q%ll zT9R~(yyy{U;@-DHM*%yA*;3BbO3yEsU=*f!DK;r$5M2WUprh@2eaxtqCxO*fF91^c zTG+$=Qoj^4jCujOg+;$%O46v}e1C1N@H%N&xc|Z_! z4x*z)G`u7g;i~Bo$4woS_uz%x8Vh+R67>?P=xHZX3(dddm&!76I*l5~6xBFbZi>xm z@wBYB**z<$pBQrVTz42m`x85kWz-C8#M8dz?Rm5umCe8dTVc(Q+*veP^#O^Iz?P6G z(W6DRLZ<5x+_9@=3FN019NXzw!@?}4zd^L8T8q|K#|sSFoDz)4olhprWlka;0eXU8 zRJ6a8q}b~TYo$L$b$hPCk(amKE%+*M^~cvDnnL{!7`Bw|F;0qUi$~G3qJtoU&3Gk- z2hMUXTdy_@7c*3Q-zH!ftC$wIPk0-^n92G)1f}1((PxudlXT6O9{LeuK?(0FQ1krb zKyU~jVKcF!NMW`-1YvNL+C2IJq%s7aC`rzk6Y1``?#YOJd+m56<8!y5_uxc=c8&R` zV_zxos7*Q!Ro$RP!gJ+xZ+=Dpv)+wY>SnA@Yxq78E$;tUZJ5tW!TV)vVv}oXUzjU} ziFFe^NbVxV^#xfHD{6 ztu5|xz{lI>1^~<0ek;UW(W&-9AZ#j)^3QLMfpGfv!42+Zz2ePhZ2eWuW%o!5WHnJc zXzDd#A9yw8@8Zpwo$$g`Iqcah+LjSKNDLWx9_Q;?-=t8lyFs$6VXt}qvGc|W|GGp3 zq~mI?)|H~+aAl=5?K*=lDaBO>YUHc1bG03KxqWldwLpsn!|EQ`FwK|B75PEOUMSQ+s?M#8fzqDxmFod7%|{5ba_Y_5m)R+$Ez^p&en# zQmBmg)2>uML;?j#CTS;PC7C?Qfm5l5t@jCpS*h(POvlK36@JhahZr3V$S=ygu&L*< zwD@)G2Qc~;&uu@IrQk%X4!zNQ^JUvkSicc6bh|~~;%RT{;E>?ciZ6e>uG%l|aZb2l zYKn~>JFe`5tF!A)!eiLn6%^9ox_3_1G9k6lC{R)yVbU>R6#__VPu5i{*PCF}HqUea zRdKvg))h+s+=z5ul=oL4>!J(>H@*4Hsl}OMcOWpO2*xn*H9XYE*N|gWt|48)wVHbS z*<&kwNhxHoAyf_;IfjDXeEJoE43J``J{z=r)^!$ ztW{R;K9eU#GhhP6q|5DJ?>c_3T*3F%n7^%h+*1e`?QI)2B*-JVq`nb8Ll9WGx4212 z`%Yxi4=@_M8vP2I`GH%_{Y^~GYKrW?4b}dBG?3TBXT3QfR7@f3av8Aqy>dP7_~B5$ z{y4n$Aem=8>*#)VV%vU=izn7o$uN4i;)|qdI~mFK-EgjbB)Ojc^3;lyEevuckUob7 zKD&S8TI;=SQGUVA+v>O87JG5A0LVQonjahv;VI?IF#Cm!%=Evjhj#$b_0`1WxxEm{ z#)cPk2!OavNk{;JLUnVUJn<{^AhM4oK+&3GxH?e1Kt)GmVrq)Z8~HpKrQaQ}CG)mj z<8bZMpv!3xN@6YzYcpYqi&>Qs4t<36#ITP^Gum~OpuaMb?%fsKrevTp@%rOC4h=J& zWlW)oouE##oe*PG7O=3euoBv{vxgGUXkjMh?PlvW^#n<`G+pINf>|#p`fZohjhemI zxY1-0z8jyPvT`u~OcJ31gN>`4{~i8W)P6ejY*t!$Snduy-!Y9l_kEB=7&gw%w)yt~ zcGH8UmWY>lrO3T(ao0>KQ9#FF>^AyCAp)4jysZ3lOuWBuD^efBJet$ev+UpUZZgIJ z2}gv;qs*v4Xg~Qd_qg@Pq>(roB-#zs3i`b40JdQHgf+Fa9PVRMV z+a4pb^mDS9Jw;=5a&O>SGEcHmsEcA?;|*Z2CWY#EVajl`+U~P8M{(qPv#Ha5_cue3 zVQJpxA8jcz7@R#}>p3e^I})Ya#FLek<#!StSJPD8>$`HtW5N4nbG&{gAMZ5mZBh#BHa1B4Mc`ZTa)>4Q8{!f=@u&%@Q_I|hJ) z(5VU7XE<0C_g~lMvA7-xalE~M`i|+e!S{OmvE|=2{K0eS#7uPe==NgedWm3U)ab6m zqQ$k6xd*CNtUuRgPcvzAFk-Z`sHtX@;KM zrj8!Qn`$c>%E&0S3rITg&(oPWuor+3j{Ee6{~-tfJ)|4JGE$iY_wi$VykAZ zzqHXhCpPByVI{L({59<{=x#yRUR_*3W6#%1)Pm+TIK$8rPw`xFG3bXLXRW_QW(2)Y z{Cv-K*`CnTr=r%!$&{1vEKdJF0S7+EZTijWfy6IX`%D7vuG%N&nr!>Gxi;Y|2%#3_ zj7TYxGt?x*M%co&e6Zk4KrkI(eXDkr1hmSsbJ92DY#s;`{PBj!}@Ts?6(Ru-|J;@uFce34}O;$9x*-iR9!WV7=VJ z_~fp5w1&eqsP9psK}G$%K85HsD`_!yn0& z=tSAyDP0VBT^&dL9Kc^#>>q&71NmW{xV+WHn`o(P=v~6ZDi-6ut^EXxWk19oJ)k3! z#IniDJGIGH^`nh>Sqk+=fiQ8>Yo_Qv@}MIh<3_0T?~41Z0#Z2F+*xd0pT{9S3IkV} zs92>2c4PtOY#TqMXog0OwzDQ4LK#$!UX<8>JxdvZzcLCjY|((*npec;(b#`~ z$}wDMZtyYWF=&C$krX@JNIXUgebcV(j(Z&QY<*m7(oxI4$s7HWz9cBwaLnzk6<7xT zGqM^prMXU{X$Z>X>v;`=G|8AW;S>=|uo z$&~6ryZtMm{4V%dnjy6N#n7<%KFOD@JFsDV>lf#WquB5Q7xsTAEJ}$P&6xdk9kJp` ze|>|S2Br5th_q}I#=9r5HO1#*rYW+~-IOQ>DDZ)C=DMs8P(!1R7o<9WnFIw3Vj#l6 ziD$IB#15A7Yo{T1FPqUd4aSf!oT(?jMBDKy{2DwPPK{8N(?qG+=<6>*txyz z*s+N`Twt4RwSAS+SK^$aR~fpeT24dr^!7?5w^e8eS?|z3C+22`HCYtd;6DDCXNFSA zAia8XbnCiuDs^1>MJC{%biaD`4YaztFQThTKnn-1CaXdOiTi>}Y5&nmSX9m`_@$YP zOQ^K3M>Th(uFVt>aRNYWRjz#&%{T1u%VfwR>06TwY2DlqcKj()SeX7-t@lVz_LOID z_srS)lrqxO^Z6ypy1`W@Zl^s~@%O`Mp0okkk{*|VYqF2?3y+;cs;a5@a7IHq=+@>l!cpxrWLa%C+IXVeyQV+DQGEEXYxi zfVif4`JAcW@4j~h@W%y@B>%55PHS>(x(_{fy@;xI&59LZXZE`EIZ?w z;_2`r+FC`agE*-{4kAD&@HNg1a+#PM>wDleR@;W|>djnv^mN`s6XNj9@W|ge)9<7B zsf_9H_20jZ4b9ErZfINNKtjw42=KF~DRjLwv+w~BN$UoQLS3605MokjXi|t+H&;>~ zx70nVAepS=TpBJHk0nRg(uO2T7qs`XxZPbt|!fU(#&pQp@l~@Ml$Zuay!WM zXs7k5!S|b??-d>f0Rf%F0O1)r)Tlmq#&hN7GH`hInw{Zx)mJRg%Kxrt@p)CoRVInu|Gqdn zbY743%f7WVk7VEF7Zx8an$y2MtfYEUut#n2Tse1}Y!H5&kMom7`Qp9K-OKMli#a>n z;JD3;*6wq-*EQ}@e&$)g{+RAEB?Q^9VzlxAlk*Pm`PAPw{A)ZL13-|0h)H1MTXYe7 zA*KvI^x}bl!PLHbx=pk;9e~nNaOL>O=i&O?Gk{`A?MygsDPWaQUFPhTok%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&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/2.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/2.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc900c6451aa9a7e8e3888079780bd8f5e51e64 GIT binary patch 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` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/3.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/3.png new file mode 100644 index 0000000000000000000000000000000000000000..0228c230ac5dddc729917ec776d1fc06064481ea GIT binary patch literal 4588 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/4.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/4.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc7edd974a1e74be28cf9f9b0870b2d09e3c2c6 GIT binary patch literal 4592 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/5.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/5.png new file mode 100644 index 0000000000000000000000000000000000000000..c5462c966bca785a4398bb18563cd8a810481430 GIT binary patch literal 4597 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 MEz`MkTEX-G0re0)`~Uy| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/7.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/7.png new file mode 100644 index 0000000000000000000000000000000000000000..e398fdd93735d2f3e8326942c23a687d0492210d GIT binary patch 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( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/8.png b/src/main/resources/assets/gregtech/textures/items/metaitems/impeller_jetpack/8.png new file mode 100644 index 0000000000000000000000000000000000000000..848fc9d80d5b8e16ca94ab55dd5c9556e1ea40e0 GIT binary patch literal 4450 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 literal 0 HcmV?d00001 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 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|ldikcKqK^1J-k*^P1pj7w zGkdrD?fbny&-=XZ``!Aw+WC_TrW7CuGAUFQY=FN-&Xt!7ze|U|5D_GYQv-oIzoJV3 zZJ2)xI+Nmg?<@qFdEfn;_EaCJo4jt%)XJA1U!3>eDWjskF81cWjiH}yKpVFOHa{H- z+%NrD+tK}>qICy$)urya@ptu*+^UG;Yj zH*QP3e&3EWuN*6mJ~*zY_Q59-+uD$#ij^;woE*yQ84UNIV-H^Frc0l!9$&tqe<~>Z zWx?O}9PP`cCj9lWM{h6sVNYM}ad**zxqZLBFtx70`~s=|%lWRNQ5B1%7JJePCzbCtW7 zuKnkAvkSYCy$2V3KD=feK*s^Y_zxWi=F2!Ix~YLy8VuBwg5t6F7V!RGt~ zo!uco1#w`DXh%GzSwe>oOX?Niy|YYUXi~&(^!I4^ArKKZZ~+cpG(Xm4+KwKFc=Y$hOC zc!Hz}n#Q37Zgpz5*nw+Sc}7DJShA@awyJBWqfwOfHrt0mPg5bpjjUSDO2Y&JBRWKb zpj@OAQc_TnvvNk88A}>hWCFxM9B8%$WvQ&J(W2YB)uLZQb@ugF3_xhZ;jE2OeTm1j zCM>%$0mDcGGODx{=`;Y*04%-DltE=ry#cO-bt6d&B$*No>xvrf zyhxOZkY2%&Cch#IDW{0GIHs^73sK#Six4n1E;a+g(3&wcn+74E$8-}KhTbtF*F&%| znR-->!50@dsHC^yun^KLThwF_3i>b@s!LTB!4s7MMR6?d<=s5)W>^lFB#OcnFE3G| zqEM8SiWcq<>T;XIAZLH7m=s-xI==LdrFojAI0>f}(Tg)I>&CrNj=^c#<7F9I0kkM) zyjftXu%5-(NUe@n3e@O!(;QDi6|_XsILELO&cppU%eX0q^h%t>@=nzxi6~U57R+*I zx(*kDmFc^fiYB=yh_X{tK1_D_02C~}td4@m619ZgvTo^7yInMazZqhe z$M|o(DgfsylD&c^0SmWfGB}rOj-8@f;AcOKnD5dIy7Tj#6KE5GJ=_JT4qSg%H zI3T`7Jfw&BFp9$Aq(|g&iDr4+E5h3M0uN0ASQ)HBT{fPPt>OERM;?<0W2D|;N0us= z#!UgHI)Vu!*_L$yP4e!$u{S2~Sdw>pCE&qDFH8}~u?)^DfWtXS_R=iFcqobgKg!dX z@myK=O%ZC;IvP1=zEj>2&H*IVN{NfRZ0b3fBF8+Z?IdTkFj_yo(#nEETY%FfJ72!m zBuLxWzwJbE8e%f=5ht1J3D2E!*{-ATZ^DhCpg-ch=ZP)8 z4F|}gwR6@+sJ!xrg|;K7_7{`A*0t~7{IP#`P3hmud+*-&>EynJz18xB#D~YQs!uEW zXMMI}?(hfewpN7J=lyi&(#WLkPu)3i{GQ(JyGlDxFE;W|oV~8+%b`8+)u8y7E zuxx+D#3}iY{W%w-pPjh@3AW<(lV5$W@J0Uv;H8x{C;#=%Myf=fck8r6N|R?`ZtEme zEZICGzirw0U(Lwhd-$1;9(qzeIK}(P>II7y^{Uk;c7HbQ#dp`dpEtq3_q4fHeRkZ= z0qN;Q1IJ%m^OnBz#Lt%myUx|zQMRA#nx43@WJ?*h@8h!5ok#xNm3!)NF#?*#)lI(Y zsn_$l^CxmQ9XjyL$`@{H{==*{jOO;Kzj^h8vwvDPnDe{t3M4Yv*1fvkUH-tDGs{1} Y;g5LX+vniFD+CEu)&_Unvf>y21M*9hqW}N^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/nms.boots.png b/src/main/resources/assets/gregtech/textures/items/metaitems/nms.boots.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/metaitems/nms.chestplate.png b/src/main/resources/assets/gregtech/textures/items/metaitems/nms.chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..a7813215a328ad435f502c45cd16d7e37bed7f59 GIT binary patch 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# literal 0 HcmV?d00001 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 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/metaitems/qts.advanced_chestplate.png b/src/main/resources/assets/gregtech/textures/items/metaitems/qts.advanced_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..b84b9680d8f39c4c36b07c33124409e0bcfa822c GIT binary patch literal 4876 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 auKUz5I3(Zc8^!--FdQd$cIBpRyZ#Oe_HC2^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/qts.boots.png b/src/main/resources/assets/gregtech/textures/items/metaitems/qts.boots.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1ff802fb6e18ca5fb5a3fce0a4bd40031c431e GIT binary patch literal 3388 zcmcIm3se;66<#2*;4AB+6-8hedMX~B-I>|<#I3?C+k9v%fMRg{Ud*<9%i?_rVL z70Zw`!eTKmRH@RMc5Ll-yzZL4xjP}_jeVtfz${gG|s)Q5jE_;JgiWqx1O%bxQsn{qY{yAMjZxnAD=K1U6;MEGV^jpoKa-D}C4>m9Ssoz9ulI}}qyB>PN>udROd;BRi$ zer}y{ewYpHSrPl#V(XlO^s0TD+Wh!Ow_Wv|5av!F0yTL|mr3Z1n$nqZr0~Z#zO`g} zt?F3M%Fl*ZE$xL!#tE4Pl1epYmU2a@e!4pzt_^c}ZrSa8oT7QZ1}OMys{8_!R;iXO ztr7rT%F2j`E#?ANbf~KvML5Qat}!@qr(k1CxXc=nT~(8vN7t0n76x7VU1UiW1r_*N z86Z`DUqGU&tY}a#1)r5=Es6w1^hi$<(D_SDU0;SbfR#s{%bsAnQ)rk+qAzHip|z}!^|Jw4g0e(JRw&_RUMk`5qB`>VO9mjcPG`i%gueLw5fhS} zQ31mU12UnslvgdV+FVxR%SD>asDN&!jzuHMx$GBsKEQS;9^5QYHjxD~FXr*QZ!F8M zv3L=iP06YSNn67O7`{?ks2B|IVeLR>t*G)HBS?(E^KcWT(@{9F2q!5V4~aT?hVxe6 zA*#zGbrfNsaPmu{ka7%=!F`1pn)33ZA3(r3KPYCkLZBE$B59y(ypI>5Vd$N1{CXB_ zOd{{)eDK4a4JzoZ(@A9oBpC!~Hp^~BVW=98V<45yUW11rFxp@-VJx91FpJI$Z-6iv zNHam=fE?Rz=jn2VLCXG6F)=(1b$sC+OB?@EQp-Fq4>v)_X9$NsnVdaSf+&f`-a)4=^ZI6C@&)$w@HF z)!{l^#g>Jid>j(w9tCKnrmQHf@PTE}@G>_69uH(WyuY%9g-Y*1l8|+Y_sW$(WYdcw zc4OJO7Z0^}^`8$^u;RD~1Rw&~%~(;gqF#~rBN5IZGLHa3@NqOyV%Js#m~h94WDC8k z9SKz28zo@&;vRxDVtNB@#taP1Gcdq((MF4jp!FmPX)}iM9VmtBLr>`=_3=NV6ixzN z0s_S>JPx#9As&+vC-r6{ju|2AF<{b@n3*BWn2GS<9t+8M2%Y(!@rJ@fGsB(AQ7*^!QF=0I0A}%07-u-{<-IsR{)~!Mbn2>j0Tb{JafgNf++B>^a=-nOy zbGcHc!847TsQ)}D6X798!R{OB$NyF54BO|wY6n&tNHFkmlgro=9EX(0$Q%Y=B9j~& zfb}ZEInDN4OC21m4`$iZ^UTkl+twbq=$d_^cI2}8NMS2e^m4+5S@y$=*EnuZ`dh}_ zx$~2nKbf5{-Qh~!yZ)Jd)241`nxfmHyBddXT4QqNf3uR=oYXSk8gg}&ylu1EX&`}6G|UZUF#ot>SRr?oi-M}Fo1Uct_q+S)_A z-dcY3=sQO{a`M~S&RnZFaP?;4sl#XgAv+v#`F~!do?+j(q`$1M>52ti=BR)Dhw+md zh%K?(PCi7xc{=)o9r6<=PM(Z&4!m8S_|Emzd7GYoDb1CCcro31u_^a=gF)b|e0EBZq4)ND<3y+*w6jz^t%22wH+NDu_^JT*HWfPWo5@NUrz0Qe@#+S z(%+9>zW_t}bY0`fi`!=w>}^Qkn`M9o2pIux{qrSBl(w QHOg?Fm62`lSXQ**KQ?`z+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/qts.chestplate.png b/src/main/resources/assets/gregtech/textures/items/metaitems/qts.chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdfb17459daf121df3b97581270b150eaed950a GIT binary patch literal 3485 zcmcIm3se(V8XiO`TC{9yD^`?o)D^Z2nO8E&lvFT59vX-U7O++)GdCn9$)q#kSzYKB zt3@hRw02!x>UM1_Dm~j4do1UnPJX_?`ZXjjDY`f7jEzf62>}BCTprF*#MfG zJ{yfE4F-Jzg2b=g(9oWB&^mr)`=qo(TNg&2KINS`-|G5ee|_enI<#PiY2B_&(+1mv zo|ft>(Q7=DpE|jG#LV>lssA3mEd0>+7fiKLqgMA_+|p-=JsS3gt!K-N^IyDBu%oPd zZA*XWmlN!-ji||fZClxnQY3ojvmeLw4Mx`VSlR}dj;qyF+?!e9)0VbP0#jFwIoAH! z_6Tz1UtVu|Ci;Pz?b#=^(K#vGH(s4&9V6dBvi|(-vgjo>Un<79dc(dbc}dv3$%{*B ziq?($yl^nDvl$eAHt@^T=?(Y&cFj?GPu$9vvL5>4)A-`|?{twc27p*w|NbmHLbr^fVBH+Z$5rQGzf*z%&)SS3@Qd zYDj)TQ3%O-OJ$eexF~3V3%G&Dr$AXUB~^l?2sba1Su^K48Sub)2MdlE@=ij;1++e2kztf(VFOB++TF zyh)VKqiBw#eU1!i52nsN)S}%SIav4qq z=C?9ffeXO1!I8^}`dP>Ef?7>ROi-Bspa+3z=PmHKC(FV8)|)ZEs8$x{a8VG($FnTLH0$choO%aR)naR&8CDDU;UoC2@Lt|{|~!Cn!{ z7Is@Z3SV|-l(aUTfweOvF6eC(t`p$MMpH09Ivt>NHdam65Xv{96sQb}qjf{Y@js#z zOoHIxJ;eYX1e%`^4+$88($N&o02l?!G6Jr*LmKleuO$tlP5^e{j`4&l{pSxxxGM?n zl6RFFA)eeGG!e+oVKf*{wU7&_pLG8pdv_(>y|t=90&YpVpC?Hg^^guU9nH=CDDZ6# zAUQ`ZQ2#l`-Kz84D+l4h#=*WD>csz5&kWj^eroSkTZcdJVYii`DR>1^hoQR{{0QCN zfCpBp4DV)5v94zjWW>Zwb84Rcn5Ad2#|8vG2K@`n8Fjj!hByUtPNvTe9n@onD-@aXrY4e183d3ETKl z_gP<^vAk~@wkndGv$HjE<6K+4zW-mnvpSET=z2IeOP1vW4(347<6=$nU&G?-Y)C=k zBNvxz!e3}POLQ#Vbts08dfQjOAd}-ZvBH9zUyX{6su>>dcwC#7?ogIxc@k z?YpTej}Nc;=<}oP ZVIQ?8Mj#HyMD_NcnU-yCnZ5Kk{{h0S%_jf= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/qts.helmet.png b/src/main/resources/assets/gregtech/textures/items/metaitems/qts.helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..8540dfd19117fac0f07146874316f9c2c561566e GIT binary patch literal 3309 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 Zh5Od1FQtR=RrXvQs;Ud_xV8CL{{k6GS#SUV literal 0 HcmV?d00001 From 725503842ac84f0616d6069c5f3d31a684e893c7 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:09:53 -0400 Subject: [PATCH 23/56] Sim.3 --- .../textures/armor/advanced_jetpack.png | Bin 0 -> 3202 bytes .../armor/advanced_nano_muscle_suite_1.png | Bin 0 -> 10146 bytes .../armor/advanced_nano_muscle_suite_2.png | Bin 0 -> 4858 bytes .../armor/advanced_quark_tech_suite_1.png | Bin 0 -> 12156 bytes .../armor/advanced_quark_tech_suite_2.png | Bin 0 -> 5853 bytes .../gregtech/textures/armor/battery_pack_hv.png | Bin 0 -> 3636 bytes .../gregtech/textures/armor/battery_pack_lv.png | Bin 0 -> 3156 bytes .../gregtech/textures/armor/battery_pack_mv.png | Bin 0 -> 3557 bytes .../assets/gregtech/textures/armor/jetpack.png | Bin 0 -> 2785 bytes .../textures/armor/liquid_fuel_jetpack.png | Bin 0 -> 2771 bytes .../textures/armor/nano_muscule_suite_1.png | Bin 0 -> 10199 bytes .../textures/armor/nano_muscule_suite_2.png | Bin 0 -> 4487 bytes .../textures/armor/nightvision_goggles.png | Bin 0 -> 432 bytes .../textures/armor/quark_tech_suite_1.png | Bin 0 -> 13338 bytes .../textures/armor/quark_tech_suite_2.png | Bin 0 -> 5485 bytes 15 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/armor/advanced_jetpack.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/advanced_nano_muscle_suite_1.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/advanced_nano_muscle_suite_2.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/advanced_quark_tech_suite_1.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/advanced_quark_tech_suite_2.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/battery_pack_hv.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/battery_pack_lv.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/battery_pack_mv.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/jetpack.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/liquid_fuel_jetpack.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_1.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/nano_muscule_suite_2.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/nightvision_goggles.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/quark_tech_suite_1.png create mode 100644 src/main/resources/assets/gregtech/textures/armor/quark_tech_suite_2.png diff --git a/src/main/resources/assets/gregtech/textures/armor/advanced_jetpack.png b/src/main/resources/assets/gregtech/textures/armor/advanced_jetpack.png new file mode 100644 index 0000000000000000000000000000000000000000..2917652e242778b02523271df5cdc7bd195b5e04 GIT binary patch literal 3202 zcmb_e2~-nj9-nZ?rHG0t(5Zf+*D$ z&ngHWSP_d_D;}(hEf$pu3ROht3RcS^A_!Kk2z0_#+vj%Q_U*hkGv9pQ?|=RNN0J*J z7Ba>5Z?*scOyPzGMWSybdIwlfLZ1zH4F&+fP^D~kI7_5VK)}e5K+prC(`lXn;IVDz z*2}za!e``McHvw-u)_Lbn`%Ksxa`iAJnpJZV00Nf{|hdAXTo$vx#5k&7KQ8T)(o=+ zAy-(>ZPuD!EnUZ6KiP8ggBOJl=(FoEhZ33!vm>(mqsvkox0QF)Ham&;m>I+Nl%$rW z01gY1tDPV8SR0%8mCwlE4j71TM|kG$@s%#f+>N%kE;p1;f-Jr(F8ah_s!a3 zTk1&X-Ewkyj(2WHI9=;8kB8i3RM+z>&K$q^vtfuit*IYT6ops^EMz*xu=EGK4a=Pu zZSP8`QGHs7EY3DJTHh(xMjVtXntV?n8iiH)N0 z349eBNtA}BtC3~tVFF=#l8`RK`ul;tdIqXMj%Z;}FPAAa3_TM&qL+cLP1|@ZI0Dfo zF|nfwjpm1gY^53jDc(LfAw;HtRJu3hLn71Z3qc|QqTvZNJVe4lJ`6H}K_r4>7Z$aq z7Ks^=LBV6T&@U!7QL9xk@OYh0=dB}oE7cM_S}b%tfruv(aVP?(NmFQHJx-x3A{u3iT8MB`Q8(R9(Wn?~H3DmuYJpNI8&6dDxXU1$ZAuIs^oWuwL`t2;^Box^ z2-YG@tmzyF5pfVnK%g>+BnAY1L?AKamI{z%jYw= z3XK+42oY`&6N}R0EtQHGViJ);Ld0}j0*Ok+5$I$Q4o>hP;$Va%BvGg&F+viJ%Lgfi zDW)PAmlyqy@=MiHv_8HM#bVQloOdKgbc{NL|IPgSJRj)_MyS*jN!pmrWk~Xbb#SB+ z7_iXP;7qL0RM`lcnbB?OU(W2Pye<(zmHtV&kHR!cu~rAG5tan4g7G>F|C5fwqyCR@ zFd7Q}k5P`Cy)(JS;pjLtEhpwM`Y|!d5d}KF)##jVh-;7nfJGlSh$YY$bQkiKE*xiL z(es-52RL4bXE+ug_2SHQvbR30g7({8YfU$*4}M|MJvVad1_ovYI<_R$)Tw$E_hhmfd;Z;hpLKk-=yV$8<-pUm-8ZK3 zJSV@&-&Bdo)=Mw{WPCn`;ZL&Xt$RT8;?3a$V&yS=@XeTMj~Iv@MOV z&Q!>!YA@E!3kHhHzcF?WoegfVAhb%Re;DBZ!-dWvD|bho`NLpOir4zy;)^ZLI~Hwm z&+6|@R$c1H{V?Y%C$QkHCXTU?+TLtX%quYAfZq-47SE;ID%~iWb zX#rJZbS-YYaB-E{x^lPpgAzfPA@l9M+*o6x)0D2=YuY>B3^|`T zcs-}Wq5V5S=NPt9aL+n>#6wH|Smn?qK9q~B@lxRnp6I(A#`_kBGB*jcGd13$c$*JD*2 z?lCX(t<~vi>pRk#+s;Lt*nVAf@_1^*-7g(F$pEGPP$_VGPV9}xeU0nB%82If09sgI ztT=Oc$CJkTBV4;H_pVu=;aM7wMM;|dS5$pc#yNevt-I9IcEi_OE8EYU4zdAD1SOHV ztG&-2s4KECoBYDB?f9}x$M}+!bEh1=GwbuP{ng2{lb=+tdUz%(Zkmxc{EYr&e@IzG zM{j#oE5o-7Fu{}&f)>_>FYf= zBX+&w6H7!t@dmCS8Hp*W7?JlC6AhN=1239=9YUi?SOb|3s7yfVS7{QC8tZ1 zyN1N4^+l`C_qBHFJ{}(Wv{4e1_Bz?#H3NI}7;BBd+V;ufId@u`V$NmsZ|%7>_*2#Q zkIQl|4Zzl^X4EzH{+lj;V3CO(lwbfB9z3W^!}tBN_D26dmz;_|p0mkPyE>~pBZk$t zm8pp@emT|U)GOe&6{&FjzhCwqDcX}!y$UyL^Aw*>>FgR7?|kabtE3tXZCCGttW$Ol z$Uj6@P1)&x$6f8;UU}enQCEK5EgJ`?LB*WzY#s1*wVxHCdhtP@tjVv644Am81s;;F R&;zEwxLi(HPOz}m+I&(&jA8~cI%$h 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 F{{ns?hN%Dm literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/advanced_nano_muscle_suite_2.png b/src/main/resources/assets/gregtech/textures/armor/advanced_nano_muscle_suite_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f36867fb9af1c43ce993ffbc91c40d12f1007178 GIT binary patch literal 4858 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 y-Kk$)on^S&IIZLjD)WV%etv literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/advanced_quark_tech_suite_2.png b/src/main/resources/assets/gregtech/textures/armor/advanced_quark_tech_suite_2.png new file mode 100644 index 0000000000000000000000000000000000000000..065f5ddd9338cb9f1a962935c90ad50c6e7b9d25 GIT binary patch literal 5853 zcmcIo2{@Gd{(mh8iHa;!QPZT7j9JW#nXzRVQO2&Qly??P88c=^mh2)aD#VFMiZ4slAhh}8XQyXW5jz4w2f|MUFKGc)h|{=UoSyMM<)7pIM?%1f0Y z2vT*hw{-*GvEaQyNdbJeKaPn3U-S6(-a-hPzj*E~1Ld4VK#-y=$HPnHMR%k!d0Zoy z#bdCI!nk}u4MAp>VSJdmhb=-f*#4X#bJTE6JqpQTnWMH6=~z17h8@7Mj}WlkBb+># z5qp>v7Ru5BX%U8 zHj-#WLNjp$BGQCngd-UfC=^2^9*ZMmuw)F*7>y%Q30Nu~kNozB0@?&DKdPIp-8Ws} z&KwmW67i`ROlWARQK+#IPvDQiQ79A)7LUQ>(SQOi3=a~)Vdx;?s_znP*+Qm(!xwRQ zLC86YFoPE&GDiWVUrpfhe~1kdesdFW7$ywnV{k^;Ig`E+vY0>U_#uM8FUna=3_Fm` zWe16bfEM?ImLI?q@q_`q{~-Fu@jod5uBFp|==ir-xZEEqgd*BrV8%Cx{99_FM>wC2 zabpX4Ap$0wwim!$HD?W#=w$7W!vBSo-~lM`Br1;ZPoyAgSg;8G zUx`^vsvl3lg@Mf+F6__7@PqtO$RD1h+VBE-0-zY6Gyd~)2OAp~0nd*U2o8j98?BKJ zG#e6*LL#B@Mz}9<>2#_?kWd5%G1(5b<|yDFBMyf}g-KWp8B7ynG>JmMp&1M; z5zQpyjadXDjtKktedo93F+=9EV2=N5L9lpCAmbnKh-?<##F)T9Qy4@TO)#00#$tdE z3JEp=XIR(-!2Xf~RA&JP)Fd4EXQ^|jSU@5U&&D!L@FX;jXu?EOm;?fv%)k=RunB<# zGmVK9EDoN_{C{ZvF2xGiCj>zkeyc2N*#FyAAjjgncoUo-gGFJn(O4pph$a#VFq%SQ z6VQG*EbK=l`{7LdSZ0{HG6GCrEA&s?wpcPAM>Zy4jqPwa91UlMw=toStcYYXnL@N7 z5dJeK%!Y|9ARA3)8ROAJCIO2kQ;czF62XtaW`Gxr!~co<3xcl(VE((MUp;EinX^3n z8)A2M@DJ?BFLgwPnRETY9L1a~3^oh(?J?)yI*g-(F0F15tTEAKdS{UbGYvmDk^39ITM^^P|nooEh zZ=M*atT9hsev71T9rz?RUIXQ;l{(N}3v2dm?d`HfrO2zdE8&*rs9n7!Tlw>9SyFkd zYQo4=+oK77?G7czTy{C|^FOf?6R8r#~`Am0ivU$TxY zR5v|%No=^8oR(nL;+nO3)NCUn=}x6eV|Q!V=-suZrId*krhMNiWgz8c?d6`#ayAA^1N88i$Mu<;u_<{}s?5%aLaz7`>W%rvd zdIvI%xgSoxc(GNCR%zTI6_<0DK`x$}hRxN^imn=f=Y!L1l+;M89G}!f9!2qVpmsu{ zn{soXdcqATJik%QeHfxD2?i`sf#GI(D+ns*)|@HOPw|zCci5~;jILh@ogZ52oplgL z@5r3g(bYZ8S?b}rx>GI|spOJX6locQX;#l-uWS(_lG>`yRhM>$F9-OzQea4Fqj3_f z1l<|i@xZ1>nD^^f%_ zSGkA!1P3o(w6zM>Ii#ka-wzDA6|7RE;dkW(SxI+QGyW=feVHWqI<>&H#U=@_nK^w*E$&${u_aQt#rN9)%z&KUHewm z?0yP}jE)3LcRzaiqQMh!>J49{+UZQ|EcU?UOmd-p=5h9t!D@war+JP!P+ov;LLAPi& zqO7`9?D?=*+Zdm&XSGQF+V$%i0c$nn*7rD`b4Mh_={dZtHqw#AvAy4!Eu?oO%e+>h zx!TLitv@gq4STz@oE+Ilo}LG96zbm$BqeaA3`CJerW*+MrgfR@gXFZP(}nuhQZXYy zDpr$^L&~Y%uQyGTlZst65)0h(`*jZl=GeI~b7^h4$K7OOfb3os1-Y{vWr!i)8KRc7 zGSf{zMYgefQLxUc7NM=Hd~>BsXUN)Nxug1>ns+Bbypu{VDsysfRvNOr6`Cu3bBf8Q zKIL6sqw7?^F#p7Z8?ssrQT|x^Vy^UF)W?fDR*CnAMt|XIH(ku-Z=$&dN|U(Kfr$v0 zO)FJwdc%z#@yj~pAgg&rnTY*uz{McRbtHMu9eUo?4^?M9j|vM*Zepx-aq5?rY>oAN zP&Tyf@Xb5DlcRx#ub?}W@rZL54dktm!=XM~Pj&_CRQcayR7~-nybRSW(k3-jPZcr- ztL@VD+LP$#+}HKq#Acpj zqygRCK`|nQlcV5}E^>+G#NU2V5*Ox|!uA$8OJB%9u_O0Qx~}fuAr%KlM5I(221iF5 z&At^;n?^=(T89#mP|P!NYIF1Elll3DoTbmJgo+)nJq~9TuX{zlE#=j#He!2CEkA!0 zTGx$?cQ_wPV0*98N!S_r`XsdPGkxXY(T*p*i1AN(+!gMMZE-)9^pM@81Bu9vhrD1N zsorjjQ)l#*}2y4`1A% z%n9nMOC1R_q#?^wM2*;&;maYVapOu(WFFH#-L_P2!{NI|XG-@tthk=^;=QM5qG5CE z(1d&{@R#w2I*b`~tgW)-K$5&{G+pLzJ)NaKHc~OD3cilw*oW&G&UcfJCBs8B{Vkii zKlGncERTOxsNX8S-1~l^#T3-v-=Exr0Qm&$y>j)`VJCx}<8=>y2Ntu`bQgHpjI24( zAjD~|D_SI}KtxyVxH%c6L0h>lpu$VEjnOq(^u7Sx_CMY0`bUSevooBt#n@v`p)4=)2OieE=i=t#zpe+RKoJt zaNZOr$8PsR>Or@`x{oRwlGop~NOfSL(m^W-Xna+{S*mit#!CIM?#EpHH(T|>5$&;z zkY=68=;*ZQddxUKi(S}CP74kT)Axz(508huv%3HILnVuSn!7!YZXm5R1f^t{y%|V5 zZ&RG6TpS!1Qg%7>W&lAwf&0GeP?L2*-t7xR+fwXM+U_!A)a}0Jw0Dlw(RVz(+dDcz zFV48z8v|#2zNBBIp^zY>(swnIf9&{*f>hNiZL14`^uF4=Xid<@c`5 zIH><|@X;kK{Yr;W?vfHcT|SHLklU0a=hYabL33lO9B5q7#`NBDZa(z*Y{rXM>6wgk z4LR{=wWJ>TsmXUlqjy#v`MA(=^s{D9g=G02imowz@o@d;x_2_+`AjV0<%`;VV4;K{ zR}tt{*RCDCYGoh&{;7YH>r`G6EQ*K%soZrx*Cf?HKU@J?PHtinf{K-W?p12sDPBBU zd(ziJ-)9k#9MG;SCD37#cVv(g<-;`TP@&Z`@f(jph?+Tg2ve85r?WJ~;O)+`wJJV7 zogiO8)|?;Oc9C7HD&7AGH2)Du&)WZr_qi44(nI#A^mr|bfA}`xT6nr?L-ihLi@mk@ z*m#8nb~LJ<8R?rEXlVEAZ&Q$O%U@EH+I|?{USME(V6hS-JrZKzq&gb5L%gUvtN_w2~Pqp;pv(PEB`TY(d3rkvW zOh%oknyJGm(>pxQZ%cDtvf4Y#L0e|Sl)N~zvAf*eGb2j=@v#=tf(_>eRuP8A!UZ#s z9Qu2%YKtOYSUdxUIi zngAoze>(YbUD4V0_ht)SHRfFvT)0(f2$ljd7j*xlge2Hr!`+MHZr@Y6sx8&-q3^ky z)hm@`UwgC@G&i7kt3|#Rr{>F!dwZzlplkU#cWkb5CTnogrEv|v*o?tRobZ)HE z*4D-=FH=r98l#O0`}j58MQ%h~MIqCV@2w zi9~`f&%ZA>bm7_4r%RF=Pq$Xo4Kqo(APjehLwtH3ZQXS|PJIb2YDC>@NnzJ;sNJoS zWzWQ#JwnEvE3M_Zt@oYcPqB^q`>Q6JAKqH6IjSxK$=x?QU5rhLy&_+$**gSbmmlfW z9Mwu;6gf5xxXj*LU#9fi-N=>;$gP!5PENO`JdnrbHfUTjRfJZ?dnp+d^^Q%4BSJ(P zpVp@oUU}@Jk!Wk8dWVtrIzfNK+XOp5*F6Y@h}wLOo3%Tg?-)i|#+O;DTrLm-_XVE8qeMcJpUudU}{R^)8#9*SY4^al^mWOg0?)_&9^m6+OdU zMpJtc)}wlT^2I(Vwz1I$x>SJ^nzf9!Z^ncaNUg!gmn>&G6Lf({+amD;DvXJ=;vT~mp`l%CtFU=&@T z3}g~4{1<^A0AprPx3k)&f6wJ@`gM`K%=B#C)uVbPncK`46QalmmqcI;5POs`CNePqub5m_o8>2S7msJZ7V$SKBq zKR>xG=#rPtne^wa+W6dJwV>FAY<&HdE#Nm!bD!Jq{nO+u7nPTFtDRBK8nn@COB{4N zLvSY?<>PfFH-4)LP2BNHtX88|c^K3b-)C$7e8dq6zMwrk5sZ81dMfw-)0Aizimsu@cR2_djfJ4 ze&uy#g@nCu&M6K99rASM%>yfl2T+SH2a$8RZG@?aWT2SX$2g1KNS+WLs+O G8~=9+Vc3@d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/battery_pack_hv.png b/src/main/resources/assets/gregtech/textures/armor/battery_pack_hv.png new file mode 100644 index 0000000000000000000000000000000000000000..21bf08f0c3c86fa6cc8147cb80abf51f96ade74f GIT binary patch literal 3636 zcmbVP2~-o;8lHeCiy#yc1e6e5(McxBWR(b*pkRpv2#QiFlgR|4WHAX4KqX>DM8u_{ zxB~iIFje8Xm7)(?ixx$+Qi@O&#Us8-0YMQruoJdgUu``v=S=R*-0yz>_iy)}*&tdl z&(_-28UO&>pg=(wJ{s`L&vGRGfAi-7D>v8XB}bk8DoGXw6bW@Pz2)h9%qVep=iizIqH>e6xLu|D?^M zcIDL2OFh5HHAd% zhv=5`NCOFt6pDy^l?Ed+$V?EW!VDsdL#8t6Fo!dfNQ0S0=?b}&qMz$kh|O`(z@lS}9mXS>=0PeAq(Wkd#ii4^5OoGb<3i8?RH%~5Wy$YBVKGGI!c;uRe}dvwBSmz` zKZ2zwSEkY^5Zq_E0*S>aYGo{mI2=hXUlp&?;D&K^^mpF};d_flC6mYF6YuXa{c43m zZje%|LzE~MB;b+o@Q~$lDVK^tGKk4QK!^p=K!^szpoA?$K!$`Zg{2HSo6VvQtrw`! z1XB^1)(`Z9RE6Rkf2f0KED4QHXM%_fr)0BW6hvq!4dkG7HcKXj*c=*bh%H1T$6FGK zf0xyyN@`NYlrSJV6$TM0Dgl`+m;G%{?!jbq;Og)8D47BS9xnz)p ziE$(n5J3?c$VOoq$YIOqAckNNgTY`@nKbmHxuhs8;ozGF#)41~ro#}b;ZqP(;?x@aj1%V0 zAOe6zT#&$Dtl!(V_s+(M2$%KwXL>@fzAY#tWoBe$R|g##Q)#!(rEYsxp1o_j>sBi{ z=fKT?adP=|i`(KW(;TgLv_4c*{qlC}sxr2R_BkiDde_|R6YEp% zsh>BrqRjK<-6xusq*CWbbbkHmjrLJbPCHY8%bjLwcYLV&iJVRC-ecTx{Zm~=nQz~v zNq1B&4eL%tM3fvj>K)d5H|d`G!Ub0Tuf*CH2gkjLPbAkKjzyh9+*|oGo_xE%R#l%vRCoe$*M}*U1Sqe*Ok2cT8%|a(4N1EnHj|=%}bzv_zH>KUbe(I59 z?YYb+5C3C6Q{S@T>RDgSGq|}nZCU273a1(MH|mq@4U;#PmAZ5VTnm_^z) zvRE8YQW)#Fhouq(gdV@W=y+a5rHzO2Y>!!>4QK{LK7X^U>!oK`B_XTS{ZQC`O-Z2i zQy|l6$4vd#mA}^Cda`89x;b{Dk>oxh=L#KW8#WzlbEIV+;Z3pzDjF@L&K`|OC-Uvb zdLG-p!E#LXd9Q`#9XC#btB#JPt_e8sBJ-r)FU0j|s-fkyyKIU>u62RK0f&WvcS8Jk z?n=c$OcU=f(xS7ba zc^MLl;hD(UPb(7JhKkKjW95;8myf=S3GZzw$jB3w_zQxv;2l$rlYH6`wmCdXWZ{@` zbnKSH3OAhVsJ-#-vfsRWcWtW_RZZ*uta;~}qC&(vZbGhWz_jtBLm!MboSEafG`mjm z+~Qa|=;Yu;6x6}nH`Ugr_OTKOr$^iX=8D#|L`OM1JgIfIcMz1zzo(?fZ^~%zoM?v3?8}zd(lPe5>2xbc*OhjGQ@xZUTF|Mxn;Iq2z22PP8EY1v;jtm-!RB?da-0nh^aS?D48BJq4jE6Or%wi4yWbbS z=;7iMllu~&+H_TU&MKcga^C zlA@X#ZR^)q?#(y*hC55w>J~Nkjhq~f(;KT!qdu+#>BXXp-?0WLM-X_Oy zKOGIA>L%d)*C|22_0&XPK-;fkjbsB{+*c>u38p2teY5=8r2745ZDMB1Q+>}lO#B6~5Ryz^oRA;+ZXb6{|Y>1)MApVajLj(4-UX;X@grw%4^9`g$U$KK$A hr)KI2z8377^7!@#v6K9*2&RvcpnwH}6LVtHe+O=dbo>AS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/battery_pack_lv.png b/src/main/resources/assets/gregtech/textures/armor/battery_pack_lv.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6e1a6fa76b24e246655b05b263ceb8049c8efb GIT binary patch literal 3156 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 WqF&wc1`qxJ2Ef-VkXyDgZu6hmI_YNs literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/battery_pack_mv.png b/src/main/resources/assets/gregtech/textures/armor/battery_pack_mv.png new file mode 100644 index 0000000000000000000000000000000000000000..717f477444be7656da394931d1d40c5823b6283c GIT binary patch literal 3557 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 A8~^|S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/liquid_fuel_jetpack.png b/src/main/resources/assets/gregtech/textures/armor/liquid_fuel_jetpack.png new file mode 100644 index 0000000000000000000000000000000000000000..e9df365fe44543c9db1446899e056425cfe0cbb0 GIT binary patch literal 2771 zcmcIm3s4j17TzGBK!o@Lswgp90VT=qCL!6qMjim6F51+~4356V=$QpIPjdjIg!I^N#7ow=FW@&EYx^>)m$hxJ={|cQ zNWa~~nY?|^vg$&J7q;|d@a5i7&JIoeE$OMp4m5Oc(uirf^^@qSrM};~TK9P)p8wdr z>#w{3=f32NGT!`{eIGoYl;UfB1|@xcZv}6O^8%|3EyEhP)+L-bCg&75v)=XpF0)sA zc0ZljdTU1P^zxA(Zf=nr4PCcBY25ecQiD$Sj>ttqjq=Gy7asci@q3P^$}t^%w0YOO zQ8AIqpv+i%mB{gC@Lwu=bYEFs^Y0~=YpHs<TgPLYZtHEM3FlN4+kryI-^ zQ^ZERU_+}38?6+$&xHsoL?l{Rj!Q8dmCb@t9EJy=8iq3Hi(i6DwJ?H9q_{-#J1D3c zim(y?6-<%1p0Sz;kh8%==cWWo z>+}>Y5h@gNN~o8EqzMHI3nh9vCPfvnj6xK%#qKTw6ax(k7H-MhDJx((smF8*p&Y@0 zT6(EWNMKT_5T#@=rl;g6Dnnne?&lc@O8h*8S4H378F+%holWte-v#v2;RyKs&43f6 zyUCRT(p}v&B^cZ`{OQ{rpe@R$0qGx<`~Zw)^tK|xO2_7bN*JoOlt1VyF^IokgMn1U zFK5|*_QLcUf`gIhUJlP<@G?BjX)_q%RxqpEgEg}tXhd|PI#z4n@vll(at}Oyo#X9K z_WLbbziAVPx2kIFgawyN!#XEai{QEuV{cf-=nSRLn!o6cxw`l0760R2@*RD`^O$eO z?e1#}4$oZwU8(ePiht<3ku9mX5x28@>JgW#w~~cVt$z6A$&>Wax3fFBwI|BwPAi)`E%)^kSt}GF zIz`CJz~1TSBr%ctFJEhEX^D$YJn_j|)<3Htd{5_&rp89j^5atuw%4}D6^xFc%Lrz2 z3l#d$+SOE2{_)3?a^KqaxTmKeA!6#Dlg-WXl1rJV^$@iEn{I_t>GjJOH!9ii4Ic5S z+7j1D=zwfBueM$AP2U!;l^)k64Q*}X?#y0?c(-TSd#m1C)jlyjJ^jeBW2@UIX1*U= zFuFTLeW50(G=~mCWA17%{@AvLN3~*wH^;DGjPT~v;0V|S}0oMM7-Z=+}&0YaC0q``tyUwDM?eSKmR4tuVTvnl~dyu z&GaI0;V%*RGM_{(I7@OWyl+%;V?=56|}v6EBvOR7KUK9s4}b zxuK$>LLAzW{-vLXG0U@VXS?an##ZSXWX9b!JiEg&vKIG!T4)=8_2{8D&z+9%3@m*L zZ9*0&`eg6qeAmKR7=0k8{wr+c&4%;Og6?!f8=F1SzP|q8tX~-dggV1PkD9^sT~`zV#k=@W?j0+jadxc*b?dS e;RI0MPoYU()g8yXcs}m`Oo{Qy>YBLRRsRO#NcK(u literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..283b916f81c66ac68093fba18c5ac92387dee34b GIT binary patch literal 10199 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 E0WiRrE&u=k literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..7229db8b102981b5e5300c5c4193e38b33c6b960 GIT binary patch literal 4487 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 Ib4q9e0JFES;Q#;t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/quark_tech_suite_1.png b/src/main/resources/assets/gregtech/textures/armor/quark_tech_suite_1.png new file mode 100644 index 0000000000000000000000000000000000000000..afab15e13653f97e67bd38d65ea78db13856d03c GIT binary patch literal 13338 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 R%*nr=XsPL`K328~|3BP6fldGb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/armor/quark_tech_suite_2.png b/src/main/resources/assets/gregtech/textures/armor/quark_tech_suite_2.png new file mode 100644 index 0000000000000000000000000000000000000000..98e08fbb834ba542b7bbf60aca2ff074df5f8e4b GIT binary patch literal 5485 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 Date: Thu, 19 Aug 2021 16:10:52 -0400 Subject: [PATCH 24/56] Sim.4 --- .../assets/gregtech/sounds/jet_engine.ogg | Bin 0 -> 11006 bytes .../assets/gregtech/sounds/jet_engine.ogg.sfk | Bin 0 -> 144 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/gregtech/sounds/jet_engine.ogg create mode 100644 src/main/resources/assets/gregtech/sounds/jet_engine.ogg.sfk diff --git a/src/main/resources/assets/gregtech/sounds/jet_engine.ogg b/src/main/resources/assets/gregtech/sounds/jet_engine.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1f4f7e1bb6a84ed9764eca0aa44906a174f81668 GIT binary patch literal 11006 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/sounds/jet_engine.ogg.sfk b/src/main/resources/assets/gregtech/sounds/jet_engine.ogg.sfk new file mode 100644 index 0000000000000000000000000000000000000000..b5c63523ac52e1dec38cce39f4032c41b0d760f7 GIT binary patch literal 144 zcmWG`3-D%SU|?_n;!b~KDFGnO1jGz13=GYxAO={R3&O%AWxpKYx$#woJL;1oU)z^T zo`s*&xG#Un=PLW^&UNqWJkGlJX1t*v4|A)2;^CX~=`?rJ=b1c#U+s9R-W&2{e~RLf U`0}1x{TmCn@aIc>d0%>X0Ywcdvj6}9 literal 0 HcmV?d00001 From 4acef9ceb92c2e20c3710b18a86d9fa2a0d76ed6 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:23:24 -0400 Subject: [PATCH 25/56] Add armor related lang stuff --- .../resources/assets/gregtech/lang/en_us.lang | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 1644a722e16..b4353feb2a2 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -896,6 +896,59 @@ metaitem.voltage_coil.uxv.tooltip=UXV Coil metaitem.voltage_coil.max.name=Maximum Voltage Coil metaitem.voltage_coil.max.tooltip=Maximum Coil +metaitem.liquid_fuel_jetpack.name=§eLiquid fuel jetpack +metaitem.impeller_jetpack.name=§eThruster Jetpack +metaitem.advanced_impeller_jetpack.name=§bAdvanced Thruster Jetpack +metaitem.battery_pack.lv.name=Battery pack (§eLV§r) +metaitem.battery_pack.mv.name=Battery pack (§eMV§r) +metaitem.battery_pack.hv.name=Battery pack (§eHV§r) + +metaitem.nightvision_goggles.name=§eNightvision Goggles + +metaitem.nms.chestplate.name=§eNanoMuscle™ Suite Chestplate +metaitem.nms.leggins.name=§eNanoMuscle™ Suite Leggings +metaitem.nms.boots.name=§eNanoMuscle™ Suite Boots +metaitem.nms.helmet.name=§eNanoMuscle™ Suite Helmet +metaitem.nms.advanced_chestplate.name=§bAdvanced NanoMuscle™ Suite Chestplate + +metaitem.qts.chestplate.name=§bQuarkTech™ Suite Chestplate +metaitem.qts.leggins.name=§bQuarkTech™ Suite Leggins +metaitem.qts.boots.name=§bQuarkTech™ Suite Boots +metaitem.qts.helmet.name=§bQuarkTech™ Suite Helmet +metaitem.qts.advanced_chestplate.name=§5Advanced QuarkTech™ Suite Chestplate + +metaitem.impeller.mv.name=§ePower Thruster +metaitem.impeller.hv.name=§bAdvanced Power Thruster +metaitem.gravitation_engine.name=§5Gravitation Engine Unit + +metaarmor.nms.nightvision.enabled=NanoMuscle™ Suite: NightVision enabled +metaarmor.nms.nightvision.disabled=NanoMuscle™ Suite: NightVision disabled + +metaarmor.qts.nightvision.enabled=QuarkTech™ Suite: NightVision enabled +metaarmor.qts.nightvision.disabled=QuarkTech™ Suite: NightVision disabled + +metaarmor.jetpack.hover.enable=Jetpack: hover mode enabled +metaarmor.jetpack.hover.disable=Jetpack: hover mode disabled + +metaarmor.message.nightvision.enabled=§bNightvision: §aOn +metaarmor.message.nightvision.disabled=§bNightvision: §cOff +metaarmor.message.nightvision.error=§cNot enough power! + +metaarmor.hud.status.enabled=§aON +metaarmor.hud.status.disabled=§cOFF +metaarmor.hud.energy_lvl=Energy level: %s +metaarmor.hud.fuel_lvl=Fuel level: %s +metaarmor.hud.hover_mode=Hover mode: %s +mataarmor.hud.supply_mode=Supply mode: %s +metaarmor.hud.fly_mode=Fly mode: %s +metaarmor.hud.gravi_engine=GraviEngine: %s + +metaarmor.energy_share.enable=Energy Supply: Gadgets charging enabled +metaarmor.energy_share.disable=Energy Supply: Gadgets charging disabled +metaarmor.energy_share.tooltip=Supply mode: %s +metaarmor.energy_share.tooltip.guide=To change mode shift-right click when holding item + + cover.filter.blacklist.disabled=Whitelist cover.filter.blacklist.enabled=Blacklist From 07ed13055a4333aeab56c8e1537345591d8dbd18 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:27:28 -0400 Subject: [PATCH 26/56] fix path location --- src/main/java/gregtech/api/items/armor/ArmorUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java index a240ea16a4b..71ef5c40750 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorUtils.java +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -36,7 +36,7 @@ public class ArmorUtils { public static final Side SIDE = FMLCommonHandler.instance().getSide(); - public static final SoundEvent JET_ENGINE = new SoundEvent(new ResourceLocation("gtadditions:jet_engine")); + public static final SoundEvent JET_ENGINE = new SoundEvent(new ResourceLocation("gregtech:jet_engine")); /** * Check is possible to charge item From cb57ee4eacf26d74a9eb198fe54844542b7b72d7 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:28:24 -0400 Subject: [PATCH 27/56] Fix model locations --- .../java/gregtech/common/items/Armor/AdvancedJetpack.java | 2 +- .../gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java | 2 +- .../gregtech/common/items/Armor/AdvancedQurakTechSuite.java | 2 +- src/main/java/gregtech/common/items/Armor/BatteryPack.java | 2 +- src/main/java/gregtech/common/items/Armor/Jetpack.java | 2 +- .../java/gregtech/common/items/Armor/NanoMuscleSuite.java | 4 ++-- .../java/gregtech/common/items/Armor/NightvisionGoggles.java | 2 +- .../java/gregtech/common/items/Armor/PowerlessJetpack.java | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java index 00039941785..d5e3c9b85aa 100644 --- a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java +++ b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java @@ -172,7 +172,7 @@ public void drawHUD(ItemStack item) { @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gtadditions:textures/armor/advanced_jetpack.png"; + return "gregtech:textures/armor/advanced_jetpack.png"; } } diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java index c3480ab6406..63052151280 100644 --- a/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java @@ -251,7 +251,7 @@ public void drawHUD(ItemStack item) { @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gtadditions:textures/armor/advanced_nano_muscle_suite_1.png"; + return "gregtech:textures/armor/advanced_nano_muscle_suite_1.png"; } @Override diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java index 080fa1bc57e..a9ca8624602 100644 --- a/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java +++ b/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java @@ -281,7 +281,7 @@ public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemSta @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gtadditions:textures/armor/advanced_quark_tech_suite_1.png"; + return "gregtech:textures/armor/advanced_quark_tech_suite_1.png"; } @Override diff --git a/src/main/java/gregtech/common/items/Armor/BatteryPack.java b/src/main/java/gregtech/common/items/Armor/BatteryPack.java index f2354aabd87..c8d92e6bcbe 100644 --- a/src/main/java/gregtech/common/items/Armor/BatteryPack.java +++ b/src/main/java/gregtech/common/items/Armor/BatteryPack.java @@ -137,6 +137,6 @@ public int getArmorLayersAmount(ItemStack itemStack) { @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return String.format("gtadditions:textures/armor/battery_pack_%s.png", GTValues.VN[tier].toLowerCase()); + return String.format("gregtech:textures/armor/battery_pack_%s.png", GTValues.VN[tier].toLowerCase()); } } diff --git a/src/main/java/gregtech/common/items/Armor/Jetpack.java b/src/main/java/gregtech/common/items/Armor/Jetpack.java index a8470289db7..d158f6b75da 100644 --- a/src/main/java/gregtech/common/items/Armor/Jetpack.java +++ b/src/main/java/gregtech/common/items/Armor/Jetpack.java @@ -122,7 +122,7 @@ public Multimap getAttributeModifiers(EntityEquipment @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gtadditions:textures/armor/jetpack.png"; + return "gregtech:textures/armor/jetpack.png"; } @Override diff --git a/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java b/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java index eef521edc10..66a1643279f 100644 --- a/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java @@ -124,8 +124,8 @@ public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlo String armorTexture = "nano_muscule_suite"; if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_nano_muscle_suite"; return SLOT != EntityEquipmentSlot.LEGS ? - String.format("gtadditions:textures/armor/%s_1.png", armorTexture) : - String.format("gtadditions:textures/armor/%s_2.png", armorTexture); + String.format("gregtech:textures/armor/%s_1.png", armorTexture) : + String.format("gregtech:textures/armor/%s_2.png", armorTexture); } @Override diff --git a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java index c1ff844f632..f1f9f776ffa 100644 --- a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java +++ b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java @@ -101,7 +101,7 @@ public double getDamageAbsorption() { @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gtadditions:textures/armor/nightvision_goggles.png"; + return "gregtech:textures/armor/nightvision_goggles.png"; } @Override diff --git a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java index 781d4ed315a..e6daf54e570 100644 --- a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java +++ b/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java @@ -189,7 +189,7 @@ public void addToolComponents(@SuppressWarnings("rawtypes") ArmorMetaValueItem m @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gtadditions:textures/armor/liquid_fuel_jetpack.png"; + return "gregtech:textures/armor/liquid_fuel_jetpack.png"; } @SideOnly(Side.CLIENT) From 9ffa9fe663cf587fac82f23de6b149f929752f55 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:37:26 -0400 Subject: [PATCH 28/56] add needed items --- src/main/java/gregtech/common/items/MetaItems.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 7a318815c4f..7d54ce1fa0c 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -516,6 +516,10 @@ private MetaItems() { public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_NANO_MUSCLE_CHESTPLATE; public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_QAURK_TECH_SUITE_CHESTPLATE; + public static MetaItem.MetaValueItem IMPELLER_MV; + public static MetaItem.MetaValueItem IMPELLER_HV; + public static MetaItem.MetaValueItem GRAVITATION_ENGINE; + private static final List orePrefixes = new ArrayList() {{ add(OrePrefix.dust); add(OrePrefix.dustSmall); From 0141edfcca542d2a52f1618d65a1ff6db5369307 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:37:46 -0400 Subject: [PATCH 29/56] Sim --- src/main/java/gregtech/common/items/MetaItem1.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index f8cb1ee73e2..8a4aa061803 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -563,5 +563,10 @@ public void registerSubItems() { ZERO_POINT_MODULE = addItem(752, "zpm").addComponents(ElectricStats.createBattery(2000000000000L, GTValues.ZPM, false)).setModelAmount(8); ULTIMATE_BATTERY = addItem(753, "max.battery").addComponents(ElectricStats.createRechargeableBattery(Long.MAX_VALUE, GTValues.MAX)).setUnificationData(OrePrefix.battery, Tier.Maximum).setModelAmount(8); + + IMPELLER_MV = addItem(776, "impeller.mv"); + IMPELLER_HV = addItem(777, "impeller.hv"); + GRAVITATION_ENGINE = addItem(778, "gravitation_engine"); } + } From 43a31e01cd7d2e9f1fcdb2b6c0b4eb58de085329 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:39:28 -0400 Subject: [PATCH 30/56] add missing PNG's --- .../items/metaitems/battery_pack.hv/1.png | Bin 0 -> 3975 bytes .../items/metaitems/battery_pack.hv/2.png | Bin 0 -> 3988 bytes .../items/metaitems/battery_pack.hv/3.png | Bin 0 -> 3983 bytes .../items/metaitems/battery_pack.hv/4.png | Bin 0 -> 3991 bytes .../items/metaitems/battery_pack.hv/5.png | Bin 0 -> 3993 bytes .../items/metaitems/battery_pack.hv/6.png | Bin 0 -> 3985 bytes .../items/metaitems/battery_pack.hv/7.png | Bin 0 -> 3985 bytes .../items/metaitems/battery_pack.hv/8.png | Bin 0 -> 3983 bytes .../items/metaitems/battery_pack.lv/1.png | Bin 0 -> 3546 bytes .../items/metaitems/battery_pack.lv/2.png | Bin 0 -> 3559 bytes .../items/metaitems/battery_pack.lv/3.png | Bin 0 -> 3562 bytes .../items/metaitems/battery_pack.lv/4.png | Bin 0 -> 3575 bytes .../items/metaitems/battery_pack.lv/5.png | Bin 0 -> 3578 bytes .../items/metaitems/battery_pack.lv/6.png | Bin 0 -> 3571 bytes .../items/metaitems/battery_pack.lv/7.png | Bin 0 -> 3575 bytes .../items/metaitems/battery_pack.lv/8.png | Bin 0 -> 3562 bytes .../items/metaitems/battery_pack.mv/1.png | Bin 0 -> 3965 bytes .../items/metaitems/battery_pack.mv/2.png | Bin 0 -> 3987 bytes .../items/metaitems/battery_pack.mv/3.png | Bin 0 -> 3983 bytes .../items/metaitems/battery_pack.mv/4.png | Bin 0 -> 3981 bytes .../items/metaitems/battery_pack.mv/5.png | Bin 0 -> 3978 bytes .../items/metaitems/battery_pack.mv/6.png | Bin 0 -> 3985 bytes .../items/metaitems/battery_pack.mv/7.png | Bin 0 -> 3986 bytes .../items/metaitems/battery_pack.mv/8.png | Bin 0 -> 3955 bytes 24 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/1.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/2.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/3.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/4.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/5.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/6.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/7.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/8.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/1.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/2.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/3.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/4.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/5.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/6.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/7.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/8.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/1.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/2.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/3.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/4.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/5.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/6.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/7.png create mode 100644 src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/8.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/1.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40597c5d314f460223a418433cd2fcc74e826d10 GIT binary patch literal 3975 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/4.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/4.png new file mode 100644 index 0000000000000000000000000000000000000000..9a37c35e81301d34212c3645954f5e3377c8b721 GIT binary patch literal 3991 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 CDv}cb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/6.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/6.png new file mode 100644 index 0000000000000000000000000000000000000000..b85ea22f21762e97d431a32dbc6c3bd69b1b269c GIT binary patch literal 3985 zcmcIn3se(V8Xizo@KJoN_+*HRpiX8c$s{D20ultYK@^bS4)>Z3Kain@xpfYu(hRyhjYw(D!}BoMU+)U(~@oP?SC|M!1< z|M&m*vN$O*u6w|M00cq0C&X)}z`v;Q?a~SU+6oJs5yVHq#l$2if5pO5vIH!hmIs7bdY@50LRTW4ze z8P@tb6W4x{w<8w`9Fg;7P<>+;=Vk4o`?8adiY39HPUtW+^Uy#L^5=kaRn=vk$d0a$ zHqQ!t%UPCql?t2`RrcYdfk^?@XUK%Ff0`SZ;jFQ#gG-f1x>+-P-Wfb|wsYF59v9Oa zQ_gG$>DBi`qlYc;yl&Z9>4D&q#S?m8IzPGJ>BbJ3WUx^&_`uY?JHPm;_^G<* z9M>gkw7Oqbv?=mi|2&>B1EDkixRhr|Z7h&!;VX_@}WwijgBHCp~FO zjyw&K^tZ&P+YqE{Z{h2M{B=VRd9EkuY+y(A zAd54rMU985L@39qMQN0l&{|?ZHWy!L1<8epDNNyPM#+jI-$uteRM3D4*lE;ZGMa5F zhg#&etAfwMGA=^hD)!lGk*AolX9s{sT_?;2r>dEB5+cQ zk#d!cP)Q_c%SQygSy_W>ie`L^FZiYwW!vo*6^`fU=Zo{DV&0mCL$WAwLV`;q7}UUQ z1!g<#z|6Lxtrj%E##lLvo#V}@V3F4IxpuV(M(RnyWbv9c+gf0PfZ-0>f|FuGNXf0p zGG0APuGQ#v&N4VK0uwOXZBUo=>RPgSJ8#S8+cE7GzvKWytJQjav>A)Z=ATrXnOSsX`*Nw4HvfGRvq8ywya*GH@n33*Z)W zmI(D0R~5q>c`I}bqm#b4o&d+4l{aukDERHzb4RPysuIjLJ8fn_f<`TZsfsy{Rq5qY zrJgX5n4TdGm_aWCm{LYZU~+|=k+OP*A_3F7U&AxG0xyOAo)%?!2HJQY9i>-DC=g-5 ziQHF!Y4JRK;^PNY8?n zv6KvQTAqv?>TX39&3IB^1R?`g)UwRAQOGxg%wsk`8$hsL!ETS5jW^iyX)B1%f(WQxPdw;Mli&I8sLGO*BA8V+}0wW&o0D{n%*WJm2hN?R;Oj&au%&oi?v1Jp}1QM-O@ zbl$5`A`J>kE+HArKr7@}1S6v{B}M@d0Mqq%J$uPZwBrutTBqR!o0tA4^pC=mr z_Z}p|IB~=9!nLk-3EmZjNAD#SzId;>zzn3)qyXV6p%j2%DJDPb;AG)pfp25(mXUNa}0~XpV$D^ySG&bFcdf-p+ zPS=9q`djC&TsiG3eefWsEIu?Rt2TYZ*m>N0ejQx8$IZQRb8}s;wHr3L9>yN{>dD(U z(vX=GUKDrO8Sh-+3=AJ64nGye_Zl}WWI@B?#r_kE9&TFJgsvRNt?Rw{RvlDY7d6bX z{n*m`|6Y3RpBFD$A_jead*r!G!Or?yCw`~^9XFNEPjFWIOj}=Z{cg4IrZ03(VZBCDgO(CUz8S~TGQMc)1Hy(GcEUGHMPH7{qTy~Z}MUW%4bql7&4WG5+-hRgx z-!pe^mXGYK8P+#w$gC3^OK2o&^{J&3?vhu&{ou&dBH8-N@4pV|UNQUF(ZikWbwwNY zx=f;cYQ+T6leDWN_s>;x7ihRptdqRBMFt34=EmnWHvK3b&svJ_wv5kmz|&qx8oXd z+faEY932kAc73`%wByang87km@*g$(Mh@-y&4Bs<{$S^@&~AQp|C(`rgJ0^?CkK)7 zmA|G2;zY?3dHvL1u1$6X=uc|b;%G&K+)sz0D~QQH9g1pwT|0ZPxZfePPzUL#+>bY1^%DVPApwVs@0|+ w60`SC`(%#AeB)i;XVxEo**iBaGpzx?e<6R@qz3Gg@E>17Y@()oT;{v~1u`X)-T(jq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/7.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.hv/7.png new file mode 100644 index 0000000000000000000000000000000000000000..2f038b9b6c8f220afe9a0d0b89cad9bcb36b4f7d GIT binary patch literal 3985 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 AmH+?% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/1.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/1.png new file mode 100644 index 0000000000000000000000000000000000000000..510c8cdb647e2af597e62f960e06100bc5395baf GIT binary patch literal 3546 zcmc&%3se->86F-QL`19{CAH#YHHwyDXLfgH*^yOXcjXZm7es=_L}zF2!0PVIIy=CM zR=^j&s*%)3(psaQqzA1Sn+m0r0#QVZNu$(*rY63c>Zwssv^|M2_Rg|wi1C%CJ>7F= z=FXk}{*Ukf{{P-xYs*R-68^(*1VM&mq?>c#6IHITf$;7rExnB(L3)SDWJ}>hJ3w>N zQqefVU`U*ZAaR?wY--9pY>TdJ8f9tSl^1sDf_p-?&3U?IL&i(%(ENR-s{I+JE%qM> zHDzB!Z4^e&J@=E~327}UHwP^ZX{}yiS{X55{rTHF&KrL8LC_w1=Z@9ct9$bI6?bf| zxzc`iB)>hlJZt+~#rukos0oXX#GLO6EAO;6+|V7pTc#QFc4o-f`3`V(wjyH~+o#NeJ&7|OG5=NATy}f zP=|A)rOix37}*Gg|UQ=MD>OQg3{^?hImwi6Nzd( zQB7zuf}(XetBep+uV?N(E|27K0kss5Kf4 zN?@MFg3Nd^!85i`gBf^O$>EkAqJSzI8M{~{8&%NL-Vj{wfLg)hhY13v_A+iYk$@{9 z`2;yOAm=WUoIc|ms|HTs0)p&;vP3}ET`0<;r%-%^>cHo37=X}PtpOVk^~L21nDEG! zVi<-WkcUcpau>USItO^fB8df-V(8}BzGysh4)_|+r&tcfeT&_+Ndk;4O1Yxw?8~yP zFJ9DSQnG45<6d+KoLJ(Ss2KFG0cJ)9MwRj%BQzLp$i+!oXP`COALAMt$9qMsBIn>2 ze_ND-60}bD4N*urj**!s3Ue&Yi;|0hfH_=D0Z_Yz0u>ra18owWq67^?@3j5rGhkzq zMBd?qA0BK_K5wm7Iz#ZtjKG2nvrz>@O>j6kI#Gj@8pcjwq#jV1j?_^YV`t$=Z{TBO%KF}7;zSne_}V)jw^P7iw_^;;@K_?N<1s@buf+fZaFQe`g3<)E z&5#_ho*8FcLpg!)=46D?XQN=2J0G!G{?RW?tPi5J^zN8R9rH>&=uXT^e%O#8iQVJk; zec5>&57m$KUlfXg)Gq=zBQda>0m)-j@sj951Dru+5oO$Nr-Nmb*ww`X=kFMSY^fe; z$HNpq9wma;laz*FF`m&=N}d_az~KZ&*>!**wTTqV>HAQA7)m58B|~3*{D&y{lfV`- zLIHr=f%<#IW6Kh zl&Nn|qaW6Po|cJllcQnx4fNyh)H(h3#qZmJl?LJqyx+;CZwelVlwsf;244avIUvA# zmEbw;;@_TKf*`?}8RnGS{8iVt9<14&9KE`XnzCWXAmZqJu>7rc)QH>El#1-jqY7DY zU|P5fdq-QC<{k9&#`izIIxE^xccyuH#3#>{=!J_J8~(n%>qOfLh7VP}r@h=ZGp%gU zmqUXmc2%Nb%W`JT;tR6I53ktLv}wViOmk>w(XcOH*`GJ1i!7TIRvOa&n~036RLhXV z$i2uDy!P!iyW`AeTlA{qlQ){oEANzE@A+f--o4}6HAr&RxR}+$CPl@28$M3&`0cAJ zcgN-K&#PaIq;do0mn-Aj@raO~&y#Mg+zObc^D7RO{H|twtG%MM@vB$$R_&3>H{LnD zAf>YiN#1iZncnfwsh?b^pBq_oO*7!5>y*yA{!?p*8BW}+zMHx~Z}6Uz$Lb=e>|M6< z%ZUfI2-5h<(0j|qn4|4$!w${C-b)Kb-aPBPB-0nYN$}oM>pD~W(`$GBF*L6_SGD7Y ze}zm2z4h$ZH`-KHpfI(PG6Q38-m2Q zf1wp@&Fk$4)BklKW>^azQ8Sqt{~8k;zZF<+tW2#kU7dHNfr8y?){>;M1& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/2.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/2.png new file mode 100644 index 0000000000000000000000000000000000000000..faffdf92ba189fd77490c5219602ac144b191fac GIT binary patch literal 3559 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/4.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/4.png new file mode 100644 index 0000000000000000000000000000000000000000..d2abf084861859dfbdd70a727e5af61cb3d8b498 GIT binary patch literal 3575 zcmc&%3s4kC8XoWsL_suir^azi0Vd4O%)V#BsERzUde) z>@B_>UM`HCfA$Z-G1HGETpO~yUsKHrYiZbkKepf4(oT>0Ea)9a+m=}qnw+9OHw!O$lslZgvTs78r9x4xTMWqcSYZPr&v2~XG*^b3+qOM@oPdpZ#Y#m zkm~>Gwylf8hn3W%eq{)sHKnHV&gird`3EHB*v;kP3rfE9TE@LjH-^azf@Y4*UR;v3 zZs_0Vb!8mi1?HW)5}oku+ChIV|4esi-0HHF$kSiU9`$iozlGGeT+`S?bN9b@_-64v zOGH~Y5VlSqJSEODYF}ZjGGqj5>%HZovQf*LZZQ_BfmDit+A6kqw zHqZLLd(PyKA(BI+qxqesZD2 za*Kh2IzWzFuwY$v4H)X?E!c|&J874!z~xRVlEIv!)C{g@F-P;*B<8~~ z{D3@A+MBUd0z^9Sig_{z67!*(6MCcZD(T=yJfC1Y6!&eG7^@6eMU*o{F}F9%X}$5H zR;!v-8jXF?E%0K2ccN<0zX#Y@1z0e39jCN7NoSA-Mo%+Z-SecDA;}(5yU4qpOMfnE zWJokN2#Bsm@wK<)*8R$(oZGy_p1{28{fRUq3&R%V^ zWH+p5Hn*=<)hixq1QbaDy&mAC4zRe9(mQe1s59UOr@_QgH0NM>O060n5t$^n7iM{> zzYgbsCH_&a8})IIVL7#?EEuQq0q~fA+Wi1Lp2)I)e}M}?rH>#!bB;-Ks zdb9H=9ug1rUlj6z+$REwm08%$fb6wkPFeJz0nVU`h_aHD>*iQBb|PQk{T(BaE$pFo zylnoXQKFnCgHcOyxRW&*aWki9ahfM7-008)%AhkFIo{NZ@`F$^z)}j-$1g<5p9Idu z3ON8C2gI+4$LN6JXw7<@G&&r(nTNb(DIJYFwZLg|Qd$RRfHmLa=+EQ1uipRn@o1w{$JTFeu0OhriC-6eZW%X!(V$`dKWb{H8_q6Uw`?T# zq2!pm??U$K|2qk;e^{R^z5$yh~0n5?PUHYU}JyNo37irh6LpNVt zK50E06)_~cttP$Z*?$Jbo(+quoZ)(FV5^>b`^3SR_v1qAz8<<=9K?lne>Y}-7QV4v zsEwF(s&voX(Bt0>N7DASRiwVV;y6)t^5T)G$dLEXc%oK~|EBf~p0XpobXIosqWxJ> zLs!274wh9_Rdp<_QU)U1+AdeOcdb~1#YI$S?UCbS5afh2@_^@pWNtj*F_-siS<>-= zkoMkujd#nH>F>54I@S_$i@J5~L{Q1eamTudt;WjZiTCP$zfbI>gU;_fN*F3pVPzTv%P=8d$%+<&E!}UT&yQS|5Era>&60&)X&QGdq&^T`Q|> zwA7~z*xY*QgObu&8fio5-Q_Qr*I%f;TDGjw@=0aKoyr9jho^jhyKDw}A@XF&sM=L` zT!&w}B^?btns;qwBQ7S$K{3-BQ^|hAC;b)iHf_~no&8HkZzvtMx^u;A+qY%L4Ueck z^KFP}{U>~IbCmJzH?G4&@6?5_{u><@@;v|m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/5.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/5.png new file mode 100644 index 0000000000000000000000000000000000000000..4db755ca0432277783d8f2a93ea73dbe5cd84239 GIT binary patch literal 3578 zcmcIn3se(V8lIq7q)J7w(puLsqGFdxW|GMyGc^b#sDTE8rWIY?GMSk`G|7aS;aMt= z`k*eWRcjTib=_`#;1(ZyT(sXYDYp`p9Bh;~4I( zE4wvpxp(y3_BTQ%PHRfKI=FPe;q7ml77Ypg)tPG>&yX*)C_ZqsZd{VNq&sUz!HJc1 z=bKNBbgm02Pha<8!H#@r*u=cQ#GL60D{r+nT*i;wF4K(Jk~&~qcEc!cY*qN@jmNhS z!Ulf&n@#hFJyX6t{VUzDjKuA0Z;!Ht3-_SZzxI?4d#(JGXdF{b9vmXPrg(YuyanZR zRz-X{yUX5O%gsK1c|ua`il=Ipw`li|S^8FL)X6V0M}E>ZAR8Ow){ox*>fYb~xu@(K zV`OVL=iM|dEHU0Va&}VDW>wiMF)yvY=s4DZ_KH-IQR&x9fw4TTR>FP}X@ODMo6sz)4L0!t2kTS>!eF=#){`oX(BdQ+4{K1& zphgX9Op9Oyg`<>40|!1zU`=41)C}{~fGzN5ROU*Ok5a1(3ky|+S`{zkr~z3>HL6i- zGzgGD#A2^R7a?A8T%QIrCo+P|C%JepENi44e73}Y5UJx zKw}bkr^^i%?r%_jZ>?6!;uR&@%WxL6Q3*m-xm+wo8?;VRtEUksVQ?ZSf#Zk)B``#T zG8pY3S)5>dqXqlTJd-aoNZ#LDOf1g;9p8GVp*1>^VNt~CAT)@M#ZiRhG&%$)9E?MQ z;<$z&`@G2zT%ew5cYm$2S1i!TVJODoIESEGjz$O!cOo>Q)gd~kPS0Q@j8K?k>$Yt!dwn0eFRB*t&6-< zDx?K2DFj(|TAWm9OAO;4f5t2nQgmB;-rqdb-hSm3>{2-Kcpp?kI z`uHDF3M7HarM)>EI1bc5A|5B_U>KUzAO;L@U+2ULgw`+^qNN#w)`5{Y&2SHo=e~OX z>EmG@%Y(y-Di6nvauizR$a#GEZvx!0v55 z>ifG=@4LAd%&Bsj`p-1#LH*}RnFtO!3UuFKKmI|TGhmh0M2@lk8cGFTLBi<11VA(MH#$FRw4%H&_{wH~ieT zsgn%*8Wttb%G`Y~F)wdb-HVjrr8wzr!;(8usyCv4nb}==%*gMubax(!O}o^gz!sIZ z+-(;#gq?}zeK~(>xcK!m759?h&beWg9jD#(ZS5@^(zk|mEkrN$P?3=_%$09;wk}v( zxPD4!=*Eiimddzg2Yy#uTUl3ev$SQzO0K3VY)`yc+`Ol%YS-Vr^G=V*t#6C942Ke< zQ?}J!Nb9iXwh_qMv`vfRo9#PWqq?C*wou}|p|O_A+S;u6XE#50;p63p&O)c_-^7-j zoWI!lhvL<(_-99NueW7JyNOXy;*OKa#C!Q=Eggp)k=0mTVtw0TVSn{MbXL>eIXzcv zvXv>B=+9QnOXH)~q>j&ecf@Q36f22?_3*eXiMJQ@p?gh+lS{&A??;< z|KjbL#<$-&uTto@AG6##f2#9pjCw?q7+N%9*Wdorqr7s8u0DIcIgLFYTbiu6SaKEH z&>LJ9q95$t*3YNJNiZ>ArdD`tq%3S6?ruQ^N1uxYJy}=Un|( zTV-5Aap;B#=f)du9Zfs*dgqpdAB7JLJ#I&LL)x3#>}ti-($L@Dhz`*w#LA;0J}e?G zEab&C;gONI?j{s!Yd&*kSJRDW#0>Mz()X*vKKP=lIb%W;R9<(n>}XH8Ayc(>(v4-2 zk@i=t(u7a{DYRP?TYEmQv2}Qp@1d6$#+QXn9(Wq6!A$ulQwy!~Ukgi0y16bnyYjyo C&-al4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/6.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/6.png new file mode 100644 index 0000000000000000000000000000000000000000..387ad881005caba1488227f78eed233e73f5d519 GIT binary patch literal 3571 zcmcIn3se(V8lC_uDq5_rphz8uifEZ+Chr-IN)v>53<4s8i;u}XU^K~$lMo_HmskyheO&6{^|_IsUlxaCWjf9tc*FYZ1#n)idFd9bdAa>X*Vgj8 z(TiO11(#k68tVSXRQ2_x3(CH9x|&Twy`*Cl!)!k0jpRVbQM|`wy z?TqLb{52UDbkXBS*Q~e~m)TAF4jTL6t+ME8{_}3rz&D8fQPMQUxcDhE{gapW{6~Is z&hgD`{^{$9DK9VX^5&wGn!N+7=8x@t_T#LWW6j~y@qrFQ{NCJMf7y4d{GqAWxfa&7 zHZ5{=vMDA%#kXErJ~4LqAFkPtiv4;vQ>8gfok85K=)ODkZcSBJ3-twb>R=pJq=34liJWrl&97zjKB_-pl^f^T!4M8JD`9zAI$$DTr zTgbaiNON610`rUsnWVE}Hqp!$@#&=!JE1fqhc2B-6AUtHBs{`L0tHUiL%}|$!{sJ@ zCM2Mj1Y>zxg}?z3&rB22me4#~CTtcY7S<{CD2;1%uz^tGdX1JKl3_K58&#N5g=f$?=&6ft)MYU0>?YR z!lMl;;H}L@T3v1r<)T@u#e{%Rl|0Xoc1q3I?REo-85u3AF=+Luozv5(ozc@qy@6v1 zjBej=5$Ix>LGu2#Vqydu==k0{0;d?gUS~vsG6JRaS_-8Ig9gRaI)Y&glwL=0?b^mm zJg8^N(NU}H6$3P~IEJ%YEsJ6rmO}NomIKN(I#kE$3^Y#Ac8bB}stFL0Oy}Jo%d>-Z zIDwrN965M6z&(}TwYe{5P?WZ6zFEGSx5msWm!ItL9L<79&tCt))>)t;YfVFoTxSbBu=3KRKR9>iw6Ghkhmxo{@T) z9U-bb88?QN_zq0y$hMFRaDaFJAA8T_-Sc&;wgmi`cfVwwRPuq{)_PQrcBQs=OBNSkUR|C!@x`ECdax! zy-MJomX~lW5rV>Kt0g5TZ{F8`#A`2P_Br|;AKzGb^{d2cV}rGNWB(}?@7ASPE!yz; z5Z|8kE+xOx7>8S~!n2m$H1D~YvYrTK${B z$U)PUPo~t4ig?&%&a(1B)@*U-d51LIt$s88y?aerTXN@D?~gU#Dc@Vr`Mt*bHQ3dd z+&-OlB&RLyU#Ykozw!iE&}-tv`PJ(-4_i?(Wkq#l?b%_M!{=~2tqV3l5R+d?#V(2X ztm5saC7bwOT_;YgnY<;F%!!4~NV(Ef88SjMK&Q#p@)}`((SahSN#qzZ` zZsW&E+oB9v>ofh=-aXh4^8dDe@qy_OvS6E~V)B;0SLiV4)QnxzFY0gKGdV6+UNMRT zy1a8{Xi{!Xj(yGbwA~l?eK@VpjVmoxs+XXs_g^b3A90d=?;LC>wwXS>FnzVeZ z#d7sl>7^44x#o4e@&tFt)QjDjk04Q1X62}t7Av4l{KJ~KzBe}JC7*76F#(CKTyk~X y$`6=5tNr|{?V9xspHw`gE;DC+hVeuI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/7.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/7.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6097cb2491787c799dc9b07e4414ee665c7132 GIT binary patch literal 3575 zcmcIn3se(V8lK<_kRrZORL0Ro+&W|??-_}J2};mlKvb~0Fqyf5(IgWmAw23Hs8q!j zwd%1}U5l(;TeQ_aRE}B?DuQm=)3S9vtgS2H(Ymc$DO$T$mv--jkW!0}-EMQvBzNxp z@BjGz@Bi=3I!oH@XF|t@A_($~DaDupe^KcP9tgkPB_&@Yh)l~H43;ELumUt=_DnRE zq$u4~1c}|eZBt!py=BDOx~Sxa>V?5q+gwx9E%uA2D^1V+4$V4X*z%Uiu+2Kmd9d_; z#75`%C6|92G-dYbq|T6){Tgb@4KIcbSl{~f?pA8thqAramfdU8*WAfE;JvW<;EkqB zqiwGQm8HG%NAH0GBx1^nvyrVG!DTJx6Sq{24@wo$`%?Q&$~_SUCRT(t*L_?wknI2G zJypvhhLqK$eWH$-msqp?L6jv_{2odD;O@$ZoU%)9eRL&tDoo6g%^kmVdD-GE;eXBU z$ZXmVvOm5RlQenLpdA}OR33|7yDoM3#lNJFKHt$VmyEV+#~)jG!zV)W{oNG*Y2UC*CozS{!WrJ&zk1k$)dsKXQDRQcDUe}%Z z3Fje_A+D5cH-ZcvE9Kr|$3@HKg@uK2g~~WV%#%a1P;x>cS152OfxC;H z9;OI)x+nE$FakF#@-7cAI8jL>V-*TKdJKBn9fHFZQ0sL2VS<3kix`)jj3cCwe1aSs zkaHD?cAs&Ml><9)0H?VUM)qX1tF_ ziL`0e8U@MXHb$$#b*zfPDUKjWK^8P%iXd8poh`FPkT^56-nm)H@Y z%A;}PfXMe^LT|POTtI!i`~TQ`GVh+MTXiSkr@Z?m^CXuJ?C#bhf4D1kzZ<*3oF$d1 z?@Xin>OW7*M0m*2u=@u3@qg7h{q}{Q+kvG9;tRaj&824wUWcS%;2s8F0yjC}g!L-I zds=M$zC#ESlxH#~WoE7Z^5u6nev%lmrgRE=JbuvlVKY<6kz1z942JfYjLBnPMPye) zu#6?iLxM*it|rDSesz0J^R=CWU5&ZkjLBa6`_JD?OHVnS5`6gTuCDm$SC+1;a5WVb zUbxf|^nH2anFkY1TN2*j$JQ!m@7;Vhs;+X`kyK;<#>iEzcfP%Rq28WrFYMIwfWs?c1_e*--I_t+TI)U#ohbs|6Ou2 zyt6vSeq=Eb)(>gUSG|<>dez1mWC^Z1!iB=Jy-p{{k%(A8Pk%(oV<|7xfV$=B?9+Y$AkYr;`S{fcqAjpY|U zzcz1SO(wScR`Tl?j(t!U+tzSnQ_dJ<<+tBVJ)BudUK5Wsmu_#me&AjO@-GX0d&sZT zhn&5BY|g1UiAS??Yd>8&GNN;d>^B4QKPukey0xpQWLV6G`g6nowr==8tEyI;4s~{J z&wYMWsBUe2flLha~nS^?~IW(Ms7UE8o%fmJnpQ%&2d0zX9u^TS5lU=Y^ZFwUOusS&ty~V zwp63>AKnv}>$&&|<>Z=+%NkA&1@C2JSlGaRaS7wXWys5*Ylk+rE%}|S*P0epR^;xq zy*ZtU+1ftiILO{Sz4|Qv_k_w_IZYiwg)daeX3X>+UT*k<^uNNCoMt>YGk4X008RMq A4gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/8.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.lv/8.png new file mode 100644 index 0000000000000000000000000000000000000000..15e21b0c190f226e4ec7596dd4d03d49d08d8781 GIT binary patch literal 3562 zcmcIn3s4hh9$!FI@DM$_9nET*-N!QPz} zKgw2nN4;|X_2`tT2aVsyEsi;~b(v{-|JXO%Z@%BIf8j*b2adM)SLUwlv^SQVUbFLZ z>leeF>!SnN>o=D)E`nq!3;&+j9_$-vvo>GD58ta$jovanX3V_ik?c#W;!p1Xd~0v4 z*YQ6$%$E%cY|Z{sBg>hzb=|#@ws_$oH2v7E#j?49FMNj4HTnbng}G5#qh4JQnEm#^ ze-;J{TDP%P)R~$$95d(u%c>&X`<(s1VHBH$wd&P}m=>sdE1BY`S zbmnIq1xUv6(+YhM)NhD%MM3Yrmk8E6T?Ka0Zp|WT&ZD3td=-8V52PU|J;Tpa^a56d z9c+=yYmf(<_sd}yW023%SWzo)VvAkV$^|yRJiCA{UqI^_dB#LI-A@7o9#*7azsK$M zk$!_bWS0c@(y~$xheX5$26-A}{3dM9vRHww$ z2u6@NN~%`5Pczt8KEtpv!Ex35m#d%@LBIV!~i3T}{v?~P@Y zBXayA!5wnW&`Q?LdRVXM1F~2|mM`W+&R5Jm!F1&H&l~_~t=5Q-$HwCEL|pj9DJ39{ zFd&bW_7#-ztTK=Faf<|+ol*kA9MheRPt0R~!t*)Qfp|!nCrtuNiJVZtaqjLa+q(0G zO(voSPGXV-TIX=eh+9CV_Lh z+~CEd11c1))k<2tK9Ta$ti^1QgH#nR7ei_tw9}zeqX>fgHgXOF50R4` z>jnKPfOFbH-L>-&6g}HwHWt`dTzv<7^WvnTM;_{zKNw#!S(dP4xqbeo(s>kDmjjQ# zJ*Su+Te`V=+;+r~a!PUO<+JCB<`13AuwZrbrNQbC5>|IszYZT;-(KJT@yARiEKgTW zG>EqcEq!Q&zkVp|^-`jns6T$8(av$$|rN%JUsaNuX1yX|SVU2VH=Y;k4Y zoi=3Kw)j`uqM)}jW4;y1yLam@3wr;bjtnhsI(HI(tF?Yh)%4ASFXXSQDwuJo7>`eD zu@aRLPGPZ6; z;~D#h_fCB)dT-2%y?^({4$A*-WL#=#5zOUa)cO4%RF)qK?6Mh1gG?*6Fg z`|*n_%Bs@8x^ul^b02eV&3Ccqt`bYI%AD7hPKfKh%*doQe3tS}%bKi?apduRx97(; zT&x&7WOrS^^DUKQ&JNfc_ubuN_C|JQprz7u-Ds5A6zi&1oxEDIq5dBtx#Du!SvPTf z$ePq@vpI2KW!94P7h|Bb)*scJ{XlKrR`a^r#Ds%rjk)M=S;;N0>|qN(Qg1wv_OFbZ i%F(SEy(acr61}80_4Ib~hkWU;gk?&$dFSMLZ~O;gW#?f4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/1.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/1.png new file mode 100644 index 0000000000000000000000000000000000000000..43675505893d3a19938518fd67d5b6947a3ae6aa GIT binary patch literal 3965 zcmcIn3s4kS7Hz~20xB^mxJqo=52!TLJzu(I77z%ZasUAXsM*ld{RTSBOb;^y3IHM`a4$yLB_>IMFeZq~gQF6T&z_3(&-<1*kts zQ9*MM#DC+~4{KsiBzUf_nHqU&&l@f`uABT8CFn05Umvsd12nZVeA8z!;ajy6jR%W= z_Sj(bS$3^xgkRM0u>XuLbUszSB7CL$sC8}KyV|H}=bS##Uf%WoqWABnR^~QsJovA( zEnd3P5hZb@`*JID5D&lXliqDzE+v;W)pz7|J;l=L`(vGFq*qS`zH401*IXiuZ?~6(uGA{r@Nff$?1BP&(SvyANcBC@e}ncm+u1O z?kJbg0JT?Im~BsB@nY}!n{R8sF-;lY#S|oS)hg4MPHtaD9$B*Lr^&(Ni;>#8_{VpX zLQX>@$C{$kEC}NEs`zz6KHBLGA3XTvRBNhcAONGga+W(%@dio-&Fj|SUlXutrh3~DpzjTYLb z#(M42@L61zU}&$3HA{`z3!17)K*I$yKox;XoF(N7R7C}nN|~IZ0#GSI21$q@2`R%# zB`qgtsTA$|V9=YH)6t0$ulM@tZEEKYEQvna+oz*`e1^9No(DdhnDxERIaUJnzyOR^3)CeYx~5FQDp)dwAxt~O&pCk5YBUZXgT`VoI9yn)k-0F9 zK0pT5wj}49fFu!Egd8&qB6DGwGy1c!SQEiBJYQlvRCjE)^131RijwD&0ycgKRZ-$l zHPPW_z*q%yvLNXDxs%Y3A{rhpa)mwG2mMs7MSNnt>rPVk@e#{>4<0p!yv9qDo4@kAxI|`!=NwBY!4dY~*1n zq!=nv%Z`2$oN^Flr9vT7^sOiGHlR<9;2}De-ausiJ9;H)&r8IiC-x;B&08Qn^ZUk9 z63Fg*((`CF9n(1Y+fdSV7-9db~THjv*s~o5S9TE?x)p@ z8b~r^{DLtTm+{7KpkX9tpduJOnRQ}t*Io}$n_0S2hFe{{aBdX z7o$Y#R0^e(WN{s%QsP0ZoWUuMAaSKu4oHP8NXc@lev}78Ndad7)!*3vBT9WmWHT9K z27srdk>-v}AT~T~=TvFkSFe^7cj9VlTJm<39Fy3- z*}0ZOA+JAfImUse15T*RC$2YQ=>0$9p<@f_JNnTiY6s*I$XB|HYw} z3CNQ%B`5Z-t_pDTlTBVnb&R~%^SHhq#XO7S7cSh=J`P!OBVpzTbywdeWTjKm>;8Uo z(#jKzPIvN$Y~N_qBVAXw>TJq|@72!8`6C^tZs%KbbEUEwI~Lw5@Cn@p#z*c&N}3K| zN`3gVPem+>d6b(}&0(EBD=R8oMz7czJ#*SW|B)CkSu^$`<@JaCt?!lAob{q-mYI1vcxVx@Q<-W)BHE6(AjTJpMLa75H?wZEt9 zwn<3Iyp2n}Yl@?GPuHBS|5H|V@?I}vSXO+9`RFuhOMp_TEc18W^4H}J4H|V?N=nMN zf6SWfz5Y&x#I3AldrG4PF&!wsx8_k>LGWuQgbbZ-?!~PAjiIwvZ@T1uMZvg5IJvG` zJ}Y$g=9Wpdv67JPH}9e!)`YQDLhzRJr{x?#DiE&2{sP{PW1u9~W+I zf9hJ>cxmy84P8^pE>1ph=+M-2BR*|Po0#5+`+L=PR8~|}eI_|lh1}eKrK6H_(>v=8 zhO`l-MO)hq&RgEuSX#8#HTB1J4T}Q09~IWuw|||TWGgM)SvUe)Fn8<3)-~6RDw*tH z+t+^0jUh$uNc5*o$69@{?K9Ul%&V&}-L>m*j-U1DvcIj^7nGe=Qq1?fi-#aV$V2C2 Y4-BIYpDNiW{&yD>85ePILHhFl0*Wex)c^nh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/2.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/2.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8b29aacf2f9780bd0a57b40d9adef48da0466d GIT binary patch literal 3987 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/3.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/3.png new file mode 100644 index 0000000000000000000000000000000000000000..235ad0e8f022e09bd1b896a373cacaac1b852327 GIT binary patch literal 3983 zcmcIn3se(V8V>P=50v_XuCk0l1uc`wOrA3m6cQ`AMi5XyaAh)c2S!6CCLx4J1z+{u z*7`!KBDLD3zK)*VdK6uBtxs4FzK_;-*VL?Q`@k25C0zliwt?+kw(g@sKLiJz7?7!qSx!3>b3F|kMlPLjG| z5=q3el^@oOJ(SpYe$9Ztb z4avOxo-};S!I%eKi#r^ynq!#TqtoJRP3x|a15f&GG+$Wv{)G1*rfqSZS+@Ol?ZqIj zOjUJ)!d#j_q^q)P$g8_d8_ap%!h(o=Jb(y8lthFZ#DGJOtK? zG5(_>^+D+|?n-&d#NZLj@0yR=-tKvyE=*yowYJ@U-FJ`va`L>!{!u+kBnOTp{O4iv z$YT)6uC};zheXo7kNEYIl&=kj4}pA2nlsHbj$(vdIW6KVcjwxmwnP#&(ru%e>A;DY zK{jvI%kEd#$Pk{@%Tm=Qg~?_BIec899V8cyPhkqDGbAe;8I44_Dd->;O^AH7J9t)QFap;~J%kBqI?*f$K1Z4#Slw zuAx*4iXf2Yj|}c+XE`d#_-^xF@J%nvaXM`jhUMqy%k!0T!JdslvXGd9zz70`8mObd z>ZIMM)e+X>!3Z3Towqr8!HS3;X|s^$)XQL`-V}0eKDSm!GfWUL%uU-cT&@sP@+h*5 zPtTTTw|F*Z84OrJF0eWsP#5><+HwS^;K&i$aqSbov;lgj+kr)(o14E+4R@BQ{7Slw6TJpS$T0#Lo7%u)c8>PQS{z5#_%EM9+GDM`77yV>7 z;RELAX{d@|ASG>#G^sZx@x4&a=RH7{4ajY0MM=fk{~2d^o;$POP>+Q*FrcD@x8 zTC>d;0^;G_|7X9~^6t&XY+Jnhz3YUD_ZRQz!G1lJyzfRYnD2^h>N(=6w&u^9G7+Bn z6g)OwbCBR#njisdMsbGJ!Q(@vLd{xSfvN~xL1@)#paAgr^F|~5)`LVGCmtADUF%ww z;9XIC^j%Wni|?8Xtgw6S@Df}42>nJPk=~3q#-yapYgm;Kw|qwM(Hg-x!F~7JgZ7|J zkwFu-?(l89})f`tC3u3Y(N-4d3ldbqbVvUcDiqn{*vz}=lqk4C7Ljxr*r zuTOK08W22dGw&joNhM9447&4|XKyrx*Vj8Uv8%R|+1E{?1Lo$9DOYwCFSt{FIimmKRUwkn+GQDK z#kMgO6}@ZgY|f@K_l@B>_d{dls|`axnfGZ#;>3P;HZLlU-Vt=Sp+Rjb93~ArRbD)C zR?@x|LmPEH+-KK!So!>XgKNOd5nAo;u&aZSs1>RQF+knHRd6FLa7cY)`KD1rmsbtT zI^4aJF{FOQr<)E`EDfmr%;nCI&P$qY__pK4%##FW#{MTKl{_$L= zv%`}!2O;-1bP_T)T#A-#a&_72{#u%n8#ZBD{((hUud0DfKNZ*2eOEm**{3m6Wvq$ k{kVGP-5s}zq(#yaKjFA-{X0|-&p&+eqsJS!$7ap`FO*=35&!@I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/4.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/4.png new file mode 100644 index 0000000000000000000000000000000000000000..7ccec61c176871589003066bf2b328f5b766108c GIT binary patch literal 3981 zcmcIn3se(V8Xgc8!6K*?d{CyNt++Z#W-@t9GzA2TSb`CwfREM5%ngi$OiUs{>$`g=frvezp6xd0B+T6ZzyIU= zzyH6N#rnj!_x$?#Aqetb{HT~D_!kwwzFpw2JtyZOf_SO;=xBWuCl~>m6gLtLCumwd z1VO@AtXy6-x<=o7VO9UwBO508UTw4v9;-K>KUfq$sSr)s8vW(=_~@0!o|YZCPXm`( zLMLDTgZJRLgHiXoectIvd4BZ#?wyx3JS=OV2b}WSWV}$eVC;eiDOdjeOXCi@vXB-Y`X!gy!pxbwcI{GY^4ExjQP6May>kmF$481+$`das0>?y_mptpQ_p|+sjIMq3dEnH%db>8Ph_3E#o9dMiIwd1-;+FyEQkxAY zwt&>SJ0C|4THdvE*(rHt*uur5d!0WsHu!jRr)fl(SruA2;fHMp9_7B&23>dnEbHQY zBZp~&Q=_ssNOH%A3@^TAJZ9}1(9Gl*xP2;Xg_nOt>|Z7p-0w3YAQ!1VI_AZLaS_KM zlHIJMQtb%h-%I>@A#1)4fe(SaA;poROVF@Fri2mkm1JjHp*Dhyh{(1wYzA`LDh%a0Etag%$#m9ekj{_Fv4L?pi3T<&gQYnv;uCa4wgwu=1P%tx&NN%>nrtoR zva5m5;<6M&T`Gu4qmXJqD96i%yeim7^ypjOsmJN#ohuF1WcOESfzwSCZ^<4SymuT0(N1hjRmn;FwB9i+1MRP;1!qv6TCg%h0iAz~UWdq52109s6x;{=JzXoF0lp=b>$ zA1Wg?GMQUdCvd!J*6XT-+#pjz4Gl@ZrV5G7F%IUf${edP3ARiImVwV?(ty-zNyAW2 zaW&C`S+GIJFgkhL^>{e$Y=Vh5L%}b{o-10NP7`mjI~WTK;$yTJOjW}3oQ7pcLP48o zTuv)l+(=Mr+(;WKoKw&YP0Klori`uoV+3}l$V+j*yG1#Hg*IMAM{zQ>Qe|Xul9B;j zNm6oLZK4R#B+UT1Las0>TCI(-@o-8o=C)SFs5od55HbQ#6u@P2z~D-PGU1F;uD}&0 zg^DF;*2r)KhKj_{Kr=8TMr=hb*1DJ?64X4?y{IB(@FOL}-JU)IYBlq$tESQ{3)eD0Jv75Q^kZkT-i#7q zQYn-q!Qv)HrNq@N#o#n2BXFgW0)#@YR5L@}z|&Fs zEAruhN=?xw5_T?W#8n&xlai?cF6T@Psi0UIsHyhzX=hOV_W7`H<-uD@FS5f!m5y=a zfQ@g%gtlz+gn+tu_y6(tR^Gkam~F2+f9pC)#runU^hkd>mE7+!ZZJO;+thW$YucMX z@5)4Y=4;@w@s@*xP%$J8I3rH5v>FEtMd3yjA;T$>kdZ2d0>}V7{@l?BzxE&z$B7Gu zHrKk=C3sg9A3c{;_~NdQdyQDpR)UUpIP01tQionjWq@oogVUnP3L|7 z{?T4;?(T?YNAm;6=>xZ~JeytN4E;90N72%IbJkve@JaK7*|`z@<*bTr*fF7@*W)ms zfJHCA0;%fKGwJ6{AC>>@I&10@wBh0G>CT36aPSTZ%X)Q9&@ z7>*#xhboABcXucwVpo+i&3m}Ug01ThIFWjDpPLC?DkldNZjAhK=*7#I&lS!(@cWu? zf@>mrm)9ou4nKNr#cmwA@$|MfWln{pakWB^N8w38Fdfw3ZpQ8)-q@nv`=g#BjB`7o2eBV!a64aZV^pA*t_wRha zFll^s(atH2yT&#id%D-M^unP@>*h{AXlMkFODt0L&+AWpQC(E=Pp{$+jV5&a&Sd|o z{oe2V{qS&qjPy0!Zfx+=|Md`AJH9!u@6`Org5dZaIbBaauG_V8-UrJUmiE=EEZtPa zJaR2}S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/5.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/5.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7a69e2b8c51d23fb151f30566e482240a772b6 GIT binary patch literal 3978 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/6.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/6.png new file mode 100644 index 0000000000000000000000000000000000000000..06639af576cc8c612d6f0d2b2eb964fe81a64719 GIT binary patch literal 3985 zcmcIn30MLn_n!nJ_QB)XZu2||GynJf-|>F$ z_x(TfOv%IBgm(=`5Ts2~q9GOjMa6GebNK5jEPRY0O;o&IZ;EFH3qVtc4@F}LjYi!M zL1KzO{kU|*AybDrrQH&atQs43?TVxCXp{BKf%!=ve1xWN&@bAQr2o_sY2Q5Ur-+62 z9^)@e3F$lhK>Wj&ABG-TKSMvWb+bQRe!Tp$ru&H|t1VT_XOEu!D1Afzsp8GmmX5>>7lO2EFMgXK%l^_CK1A^5ba%ROl$H@}Qd-1U>a{tbHi8U_^Ezl|GH|07 zkj>k5lA1lG5|n3klJ_YiZgl8D4xd=)1ZjoIW~Oj5qhTd+gV8}=Ei_;QZW{I4tag{y ztCRTcYT>iEER&#q758MFBv8~GE@J%Plal0K_natzyNIi0?;LMgmvS?&DDI-Y?YGAGc zyPNi6c2{)01p{y~PTt|>1v@HQq%A_8TPJ~$22!v&f@bZmI+!3}GB53r5mH=C$*;&V zK|M#F)9QE5GBRKVHeh$Vpe_;Ab>s+c!IdMt#&l5piUSC((HQj6Xe>5c(1pvLkPp+S z1Ef)Hm$|?JWU0U<WIoq8uYg4A+=(N~_Rl zNqHWEY7|(WD|l6vkehKO)X?I@E2@ylEbXS>s?0K4PH@_2SO(rkX9JnTo-ILx z#ntKstKfu=VRZ6_>q&6jIR%clLcy=cogTUm8ycG8bT9g$SXyavcEMdV3N{wS2jw>-h zE0ma;wWu*Q0W?aICO9QQ)muw(@^DJf)`nKas90zb5I6x83V`8qKx0Zm!C|ygPGJ;B zsTe}TSZJ1zpdvA}&~w=l0M}5T6YZuBX+T8c6oq z_yv1Da5l)mK|5(U+=0`jlWlOyd>R>4zkfc=TY2!7(u?c}Qswoy zvB1eUU_wK-1w%mny!-$7dn@nWZOk^-oxgXTWa9lLFnVOao=SmtLjcTSVw?Jpcx_|z z=Utfy&wMRBHr{fO5GtC~0M>#Lj7BXUBnr%;B5+JW5;&=%D1ZZa`~{*Be(OOZjuSr& z4X$*Fbt&y1f+p=ZVm1oWzshDr>zvj_y-+=P&3(F9s#oftUYwxsD zEEr-yPhR0C`Tn75YCIJYK1;oH)b8VpNA8<~_DLLm(fik_p_Y*LGfEuWE`Cw&cDrjI zKi*NET6Fjrez3B0r?_be&ky7fnxc}G-$iYyrMtws(juk|oEw&Qef90uPok+8ZBrJt zG;N(es$1!V@yKx;?7+ztxJ4?T=-VGJ8g{kW6%#?|q3gH?i8X)qkXWMz}=gWr4!e>plHAAk9 zdfdNE$gFzy#bHw3^;}AZ_o_7KZV%t*F~@E>k5xZ1jp_KWWgk6xlBdh?cy_HhH8NV= z;ru6G#+bT#&e!mW9X^LX!)wM$Qd!T$+gf z`Fnf+tfQ@(89HVqZ14DV=k7_}PPeQ{^lh8ItyAcY4o8%?xxLr_xYBxHY?g6MkFdD~ z)gh(#V{7j}^PKv_m$N+=LO^87A74^JvSIVktm*#+6Bv(% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/7.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/7.png new file mode 100644 index 0000000000000000000000000000000000000000..2462d18cba8a38ec306d5b058e6d1ffd57ffa90d GIT binary patch literal 3986 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/8.png b/src/main/resources/assets/gregtech/textures/items/metaitems/battery_pack.mv/8.png new file mode 100644 index 0000000000000000000000000000000000000000..6c2c38359a8eb45be0a282ccb61ad8728b01a3ca GIT binary patch literal 3955 zcmcIn3se(l7M@@$h_6uW%8KY1tEhFzOx}s6f(atjDDqHnt1y}Q1G6NVFq1%J@qiC} zuZj;IJz7z#D^)p1J(XkCqM~S5iq*w~a;#dr$BHguebrTK_a6cgdO$qwcFvi}%zy8H z|9ijt-TVJp5j#DqzyA<_1VQ>oPc_EDUsSmLdc!B5lk*5cL~6!hh>f6GGeF~_CZl5r ztyVJ@LBz=?Q$g2T{PG)2NA4+Vp6AJi?~3U)GWAF>7_r>{o2rZDy@|JK z%eMYiJTSj}dZSW2BfPx$d2p;h_X`s9&&Rpql>95ae)wwb@qS#2Xj;hJjQlz42h=CG zB%J#UBwxHYI^w;xzNKsGB7vxXIpxu62qtuvCJ!syH+B5>G;tOtGkeFTq7mq z7@^WBaGgwswp|jq8b@1namFcaYr!wQB;DzB=%mu@?Ch{?c^J#3Ng-LZQd}mL$uOva z@$>CY(v8{qk?j_YfTuXd;bd4lDp(}VtjnpFKu2TYU z7)dHr@PR8anOtoK8nY6Z33a=*85{$<1ZnMPRq%?276E}1K=2Be0}@ja3JXT6lYDr6E= zpq2;yc-ZA2$||K&u525RW!%7;WMm*Ze5)h!_8F~`k3HP zt^ce&3veAGaF84cn>*lmy~M(?Hq=XY)XAcx!(nBp)|^VS>~vcL_0mkz?K(V}^?H;D zi(09Y5fo-2)hft&f$lU;U@Ef$5K6g5MbVI;-J>KFwzj>ne3&Cp_D5yQj4oGtyy8lNSao|cxXsc8dp+kFKaqyy^BWm$HznU$b%kIFR;T)mF{t) z0mpP;LPxfFT|irT_y1Y1N8Y_zo9&8se{`Ot!uiG1dZfSZN}g|{2h1r#nYM26x~}@q zn=%pZ`8v35^stc-YEq^Jv>78Ptp)?6LV=mp1db_W1TIr6l>i5D`}26i{@#s5XeX^O zbU4)JJ0m+Kc>-1dhEKK{Z{TB6h_{{2v6xEqfdl7ZS)v_|4s!GJa0u z=`W1M|0!!;J9G07O=a@0H7$4R=Fq;wgL==q*77j-)`auVtE+1-e|7obj!W61m%jPO zwnro;7Hlb<`rbtQ`lZ#R#Uc*a+frB(-Jw}nQnsfUf0#L}Z#*S#4lyp-zwLwi%0nZyKMy;7umTRKHeGcuYtT}`j`BjCRv9guKw; zAF}TDzVG(?8@7q%@{gq{fx|`*pR#q)@^vvgm#8IM&!4GXT^F2P@T@6qtq5syHrD^m z`0th5@823#Q(Llmv(pv&DCgMZmVE`4Z#^yE|9!)Qx%qSRQ|@j_%(-<{JWBXa7acj> KSTQ+u(f Date: Thu, 19 Aug 2021 16:41:03 -0400 Subject: [PATCH 31/56] add missing Json --- .../models/item/metaitems/advanced_impeller_jetpack.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json b/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json new file mode 100644 index 00000000000..7744b5b96fa --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/advanced_impeller_jetpack" + } +} From 220289b682e587ad27335e5ad390abb973aafd24 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:50:15 -0400 Subject: [PATCH 32/56] add missing json --- .../gregtech/models/item/metaitems/gravitation_engine.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json b/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json new file mode 100644 index 00000000000..ceb151e4631 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json @@ -0,0 +1,7 @@ + +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/gravitation_engine" + } +} \ No newline at end of file From 933759ae1c29008b05704b8dd29b3261bf348a78 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:53:11 -0400 Subject: [PATCH 33/56] Sim --- .../gregtech/models/item/metaitems/battery_pack.hv/1.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/2.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/3.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/4.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/5.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/6.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/7.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.hv/8.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/1.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/2.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/3.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/4.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/5.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/6.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/7.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.lv/8.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/1.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/2.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/3.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/4.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/5.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/6.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/7.json | 6 ++++++ .../gregtech/models/item/metaitems/battery_pack.mv/8.json | 6 ++++++ 24 files changed, 144 insertions(+) create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json create mode 100644 src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json new file mode 100644 index 00000000000..a91f08320e5 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json new file mode 100644 index 00000000000..3158e6c4d18 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json new file mode 100644 index 00000000000..b7d7519e13e --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json new file mode 100644 index 00000000000..e8b7731d6ae --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json new file mode 100644 index 00000000000..71461879579 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/5" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json new file mode 100644 index 00000000000..f010f6302f3 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/6" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json new file mode 100644 index 00000000000..a875a23087e --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/7" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json new file mode 100644 index 00000000000..52ae041dcba --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/8" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json new file mode 100644 index 00000000000..0fe9e8d4198 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json new file mode 100644 index 00000000000..5a9cfe82db3 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json new file mode 100644 index 00000000000..5e590b1d536 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json new file mode 100644 index 00000000000..bf5cc6887ac --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json new file mode 100644 index 00000000000..f2182e0798f --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/5" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json new file mode 100644 index 00000000000..c62b119ef47 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/6" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json new file mode 100644 index 00000000000..1abd2281c34 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/7" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json new file mode 100644 index 00000000000..74b11732da1 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/8" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json new file mode 100644 index 00000000000..0992c2b0e62 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json new file mode 100644 index 00000000000..98b8927c77d --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json new file mode 100644 index 00000000000..4e8641b1d73 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json new file mode 100644 index 00000000000..999664cd5ec --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json new file mode 100644 index 00000000000..189031744db --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/5" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json new file mode 100644 index 00000000000..fd57d72a93b --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/6" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json new file mode 100644 index 00000000000..a7aaadab915 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/7" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json new file mode 100644 index 00000000000..6f866a9f358 --- /dev/null +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/8" + } +} \ No newline at end of file From 7035c8c958815b08073d5bcd2600abc4c4416aea Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 17:27:07 -0400 Subject: [PATCH 34/56] relocating class --- .../items/Armor/AdvancedNanoMuscleSuite.java | 262 ------------------ 1 file changed, 262 deletions(-) delete mode 100644 src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java deleted file mode 100644 index 63052151280..00000000000 --- a/src/main/java/gregtech/common/items/Armor/AdvancedNanoMuscleSuite.java +++ /dev/null @@ -1,262 +0,0 @@ -package gregtech.common.items.Armor; - - -import gregtech.api.capability.GregtechCapabilities; -import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.api.items.armor.ArmorUtils; -import gregtech.api.util.GTUtility; -import gregtech.api.util.input.EnumKey; -import gregtech.common.items.MetaItems; -import net.minecraft.client.resources.I18n; -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.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class AdvancedNanoMuscleSuite extends NanoMuscleSuite { - private int cachedSlotId = -1; - - - public AdvancedNanoMuscleSuite() { - super(EntityEquipmentSlot.CHEST, 5000, 11400000); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack item) { - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); - boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); - byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; - boolean canShare = data.hasKey("CanShare") && data.getBoolean("CanShare"); - boolean result = false; - - // Mode toggle - if (!world.isRemote) { - if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { - flyEnabled = !flyEnabled; - toggleTimer = 10; - } - } - - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { - hoverMode = !hoverMode; - toggleTimer = 10; - if (!world.isRemote) { - String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; - player.sendMessage(new TextComponentTranslation(status)); - } - } - - // Backpack mechanics - if (canShare && !world.isRemote) { - // Trying to find item in inventory - if (cachedSlotId < 0) { - // Do not call this method often - if (world.getWorldTime() % 40 == 0) { - cachedSlotId = ArmorUtils.getChargeableItem(player, cont.getTier()); - } - } else { - ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); - if (!ArmorUtils.isPossibleToCharge(cachedItem)) { - cachedSlotId = -1; - } - } - - - // Do neighbor armor charge - for (int i = 0; i < player.inventory.armorInventory.size(); i++) { - IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (chargeable == null) continue; - if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) - continue; - if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { - long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); - if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); - player.inventoryContainer.detectAndSendChanges(); - } - } - - // Do charge - if (cachedSlotId >= 0) { - IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (chargeable == null) { - return; - } - if (cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { - long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); - if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); - player.inventoryContainer.detectAndSendChanges(); - } - } - } - - if (player.onGround) hoverMode = false; - - // Fly mechanics - if (flyEnabled && cont.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { - if (hoverMode) { - if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - if (player.motionY > 0.1D) { - player.motionY -= 0.1D; - } - - if (player.motionY < -0.1D) { - player.motionY += 0.1D; - } - - if (player.motionY <= 0.1D && player.motionY >= -0.1D) { - player.motionY = 0.0D; - } - - if (player.motionY > 0.1D || player.motionY < -0.1D) { - if (player.motionY < 0) { - player.motionY += 0.05D; - } else { - player.motionY -= 0.0025D; - } - } else { - player.motionY = 0.0D; - } - ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); - ArmorUtils.playJetpackSound(player); - } - - if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); - } - - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { - player.motionY = 0.35D; - } - - if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - player.motionY = -0.35D; - } - - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - player.motionY = 0.0D; - } - - player.fallDistance = 0.0F; - result = true; - } else { - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { - if (player.motionY <= 0.8D) player.motionY += 0.2D; - if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - player.moveRelative(0.0F, 0.0F, 0.85F, 0.1F); - } - ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); - ArmorUtils.playJetpackSound(player); - player.fallDistance = 0.0F; - result = true; - } - } - } - - // Fly discharge - if (result) { - cont.discharge(MathHelper.floor(energyPerUse / 2.0), cont.getTier(), true, false, false); - ArmorUtils.resetPlayerFloatingTime(player); - } - - // Do not spam of server packets - if (toggleTimer > 0) { - toggleTimer--; - } - - data.setBoolean("CanShare", canShare); - data.setBoolean("FlyMode", flyEnabled); - data.setBoolean("Hover", hoverMode); - data.setByte("ToggleTimer", toggleTimer); - player.inventoryContainer.detectAndSendChanges(); - } - - @Override - public void addInfo(ItemStack itemStack, List lines) { - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); - String state; - if (data.hasKey("CanShare")) { - state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); - } else { - state = I18n.format("metaarmor.hud.status.disabled"); - } - lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); - lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); - super.addInfo(itemStack, lines); - } - - @Override - public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack armor = player.getHeldItem(hand); - - if (armor.getItem() instanceof ArmorMetaItem && player.isSneaking()) { - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(armor); - boolean canShareEnergy = data.hasKey("CanShare") && data.getBoolean("CanShare"); - - canShareEnergy = !canShareEnergy; - String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); - if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); - data.setBoolean("CanShare", canShareEnergy); - return ActionResult.newResult(EnumActionResult.SUCCESS, armor); - } - - return super.onRightClick(world, player, hand); - } - - @SideOnly(Side.CLIENT) - public boolean isNeedDrawHUD() { - return true; - } - - @Override - public void drawHUD(ItemStack item) { - super.addCapacityHUD(item); - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (cont == null) return; - if (!cont.canUse(energyPerUse)) return; - NBTTagCompound data = item.getTagCompound(); - if (data != null) { - if (data.hasKey("CanShare")) { - String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); - } - - if (data.hasKey("FlyMode")) { - String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("metaarmor.hud.fly_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(); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/advanced_nano_muscle_suite_1.png"; - } - - @Override - public double getDamageAbsorption() { - return 1.0D; - } - -} From 7b9872b62b3126e0ca7caa09e46ba7f671e48a56 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 17:27:20 -0400 Subject: [PATCH 35/56] relocating class 2 --- .../items/Armor/AdvancedQurakTechSuite.java | 291 ------------------ 1 file changed, 291 deletions(-) delete mode 100644 src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java deleted file mode 100644 index a9ca8624602..00000000000 --- a/src/main/java/gregtech/common/items/Armor/AdvancedQurakTechSuite.java +++ /dev/null @@ -1,291 +0,0 @@ -package gregtech.common.items.Armor; - -import gregtech.api.GTValues; -import gregtech.api.capability.GregtechCapabilities; -import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.api.items.armor.ArmorUtils; -import gregtech.api.items.armor.QuarkTechSuite; -import gregtech.api.util.GTUtility; -import gregtech.api.util.input.EnumKey; -import gregtech.common.items.MetaItems; -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.ActionResult; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.MathHelper; -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 javax.annotation.Nonnull; -import java.util.List; - -public class AdvancedQurakTechSuite extends QuarkTechSuite { - private int cachedSlotId = -1; - - public AdvancedQurakTechSuite() { - super(EntityEquipmentSlot.CHEST, 10000, 100000000, GTValues.IV); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack item) { - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("Hover") ? data.getBoolean("Hover") : false; - boolean flyEnabled = data.hasKey("FlyMode") ? data.getBoolean("FlyMode") : false; - byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; - boolean canShare = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; - boolean result = false; - float energyUsageMultiplier = 1.0F; - - // Mode toggle - if (!world.isRemote) { - if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { - flyEnabled = !flyEnabled; - toggleTimer = 10; - } - } - - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { - hoverMode = !hoverMode; - toggleTimer = 10; - if (!world.isRemote) { - String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; - player.sendMessage(new TextComponentTranslation(status)); - } - } - - // Additional features - if (player.onGround) hoverMode = false; - if (cont.getCharge() >= energyPerUse) player.extinguish(); - - // Backpack mechanics - if (canShare && !world.isRemote) { - // Trying to find item in inventory - if (cachedSlotId < 0) { - // Do not call this method often - if (world.getWorldTime() % 40 == 0) { - cachedSlotId = ArmorUtils.getChargeableItem(player, cont.getTier()); - } - } else { - ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); - if (!ArmorUtils.isPossibleToCharge(cachedItem)) { - cachedSlotId = -1; - } - } - - - // Do neighbor armor charge - for (int i = 0; i < player.inventory.armorInventory.size(); i++) { - IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (chargeable == null) continue; - if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) - continue; - if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { - long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); - if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); - player.inventoryContainer.detectAndSendChanges(); - } - } - - // Do charge - if (cachedSlotId >= 0) { - IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (chargeable == null) { - return; - } - if (cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { - long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); - if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); - player.inventoryContainer.detectAndSendChanges(); - } - } - } - - // Fly mechanics - if (flyEnabled && cont.canUse(energyPerUse)) { - if (hoverMode) { - if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - if (player.motionY > 0.1D) { - player.motionY -= 0.1D; - } - - if (player.motionY < -0.1D) { - player.motionY += 0.1D; - } - - if (player.motionY <= 0.1D && player.motionY >= -0.1D) { - player.motionY = 0.0D; - } - - if (player.motionY > 0.1D || player.motionY < -0.1D) { - if (player.motionY < 0) { - player.motionY += 0.05D; - } else { - player.motionY -= 0.0025D; - } - } else { - player.motionY = 0.0D; - } - } - - if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); - } - - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { - player.motionY = 0.35D; - } - - if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - player.motionY = -0.35D; - } - - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - player.motionY = 0.0D; - } - - player.fallDistance = 0.0F; - result = true; - } else { - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { - if (ArmorUtils.isKeyDown(player, EnumKey.BOOST) && !ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - if (player.motionY <= 1.6D) player.motionY += 0.4D; - energyUsageMultiplier = 1.5F; - } else { - if (player.motionY <= 0.8D) player.motionY += 0.2D; - } - - if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - if (ArmorUtils.isKeyDown(player, EnumKey.BOOST)) { - player.moveRelative(0.0F, 0.0F, 1.0F, 0.20F); - energyUsageMultiplier = 1.5F; - } else { - player.moveRelative(0.0F, 0.0F, 1.0F, 0.1F); - } - } - player.fallDistance = 0.0F; - result = true; - } - } - } - - // Fly discharge - if (result) { - cont.discharge(MathHelper.floor(energyPerUse * energyUsageMultiplier / 4), cont.getTier(), true, false, false); - ArmorUtils.resetPlayerFloatingTime(player); - } - - // Do not spam of server packets - if (toggleTimer > 0) { - toggleTimer--; - } - - data.setBoolean("CanShare", canShare); - data.setBoolean("FlyMode", flyEnabled); - data.setBoolean("Hover", hoverMode); - data.setByte("ToggleTimer", toggleTimer); - player.inventoryContainer.detectAndSendChanges(); - } - - @Override - public void addInfo(ItemStack itemStack, List lines) { - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); - String state = ""; - if (data.hasKey("CanShare")) { - state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); - } else { - state = I18n.format("metaarmor.hud.status.disabled"); - } - lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); - lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); - super.addInfo(itemStack, lines); - } - - @Override - public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { - if (player.getHeldItem(hand).getItem() instanceof ArmorMetaItem && player.isSneaking()) { - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(player.getHeldItem(hand)); - boolean canShareEnergy = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; - - canShareEnergy = !canShareEnergy; - String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); - if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); - data.setBoolean("CanShare", canShareEnergy); - return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); - } else { - return super.onRightClick(world, player, hand); - } - } - - @SideOnly(Side.CLIENT) - public boolean isNeedDrawHUD() { - return true; - } - - @Override - public void drawHUD(ItemStack item) { - super.addCapacityHUD(item); - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (cont == null) return; - if (!cont.canUse(energyPerUse)) return; - NBTTagCompound data = item.getTagCompound(); - if (data != null) { - if (data.hasKey("CanShare")) { - String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); - } - - if (data.hasKey("FlyMode")) { - String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("metaarmor.hud.gravi_engine", 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(); - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - int damageLimit = Integer.MAX_VALUE; - IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (energyPerUse > 0) { - damageLimit = (int) Math.min(damageLimit, 25.0D * item.getCharge() / energyPerUse); - } - return new ArmorProperties(8, getDamageAbsorption() * getAbsorption(armor), damageLimit); - } - - @Override - public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - if (source == DamageSource.FALL || source == DamageSource.DROWN || source == DamageSource.STARVE) { - return false; - } else { - return true; - } - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/advanced_quark_tech_suite_1.png"; - } - - @Override - public double getDamageAbsorption() { - return 1.5D; - } -} From 2c231efe11d03339cca4d75cf2beac2f6348cef8 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 17:27:29 -0400 Subject: [PATCH 36/56] relocating class 3 --- .../common/items/Armor/NanoMuscleSuite.java | 135 ------------------ 1 file changed, 135 deletions(-) delete mode 100644 src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java diff --git a/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java b/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java deleted file mode 100644 index 66a1643279f..00000000000 --- a/src/main/java/gregtech/common/items/Armor/NanoMuscleSuite.java +++ /dev/null @@ -1,135 +0,0 @@ -package gregtech.common.items.Armor; - - -import gregtech.api.GTValues; -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.EnumKey; -import gregtech.common.items.MetaItems; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -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.DamageSource; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor.ArmorProperties; - -import javax.annotation.Nonnull; - -public class NanoMuscleSuite extends ArmorLogicSuite { - - public NanoMuscleSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity) { - super(energyPerUse, capacity, GTValues.HV, slot); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { - IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); - byte toggleTimer = nbtData.getByte("toggleTimer"); - boolean ret = false; - if (SLOT == EntityEquipmentSlot.HEAD) { - boolean nightvision = nbtData.getBoolean("Nightvision"); - if (ArmorUtils.isKeyDown(player, EnumKey.MENU) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { - toggleTimer = 10; - nightvision = !nightvision; - if (!world.isRemote) { - nbtData.setBoolean("Nightvision", nightvision); - if (nightvision) { - player.sendMessage(new TextComponentTranslation("metaarmor.nms.nightvision.enabled")); - } else { - player.sendMessage(new TextComponentTranslation("metaarmor.nms.nightvision.disabled")); - } - } - } - - if (nightvision && !world.isRemote && item.getCharge() >= (energyPerUse / 100)) { - BlockPos pos = new BlockPos((int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ)); - int skylight = player.getEntityWorld().getLightFromNeighbors(pos); - if (skylight > 8) { - player.removePotionEffect(MobEffects.NIGHT_VISION); - player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 100, 0, true, true)); - } else { - player.removePotionEffect(MobEffects.BLINDNESS); - player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 300, 0, true, true)); - } - ret = true; - item.discharge((energyPerUse / 100), GTValues.HV, true, false, false); - } - - if (!nightvision && !world.isRemote) { - PotionEffect blindness = player.getActivePotionEffect(MobEffects.BLINDNESS); - PotionEffect night_vision = player.getActivePotionEffect(MobEffects.NIGHT_VISION); - if (blindness != null) { - if (blindness.getDuration() < 1) player.removePotionEffect(MobEffects.BLINDNESS); - } - if (night_vision != null) { - if (night_vision.getDuration() < 1) player.removePotionEffect(MobEffects.NIGHT_VISION); - } - } - - if (!world.isRemote && toggleTimer > 0) { - --toggleTimer; - nbtData.setByte("toggleTimer", toggleTimer); - } - } - if (ret) { - player.inventoryContainer.detectAndSendChanges(); - } - } - - public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - if (source == DamageSource.FALL) return true; - return false; - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - IElectricItem container = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - int damageLimit = Integer.MAX_VALUE; - if (source == DamageSource.FALL && this.getEquipmentSlot(armor) == EntityEquipmentSlot.FEET) { - if (energyPerUse > 0) { - damageLimit = (int) Math.min(damageLimit, 25.0 * container.getCharge() / energyPerUse); - } - return new ArmorProperties(10, (damage < 8.0) ? 1.0 : 0.875, damageLimit); - } - return super.getProperties(player, armor, source, damage, equipmentSlot); - } - - @Override - public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { - return SLOT; - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { - IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - item.discharge(energyPerUse * damage, item.getTier(), true, false, false); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - ItemStack currentChest = Minecraft.getMinecraft().player.inventory.armorItemInSlot(EntityEquipmentSlot.CHEST.getIndex()); - ItemStack advancedChest = MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm(); - String armorTexture = "nano_muscule_suite"; - if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_nano_muscle_suite"; - return SLOT != EntityEquipmentSlot.LEGS ? - String.format("gregtech:textures/armor/%s_1.png", armorTexture) : - String.format("gregtech:textures/armor/%s_2.png", armorTexture); - } - - @Override - public double getDamageAbsorption() { - return 0.9D; - } -} From 351a83e4b6e20dcb6d06fa03db885251bfc6a49e Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 17:28:07 -0400 Subject: [PATCH 37/56] relocating class --- .../items/armor/AdvancedNanoMuscleSuite.java | 259 ++++++++++++++++ .../items/armor/AdvancedQurakTechSuite.java | 291 ++++++++++++++++++ .../api/items/armor/NanoMuscleSuite.java | 135 ++++++++ 3 files changed, 685 insertions(+) create mode 100644 src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java create mode 100644 src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java create mode 100644 src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java diff --git a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java new file mode 100644 index 00000000000..560974320f4 --- /dev/null +++ b/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java @@ -0,0 +1,259 @@ +package gregtech.api.items.armor; + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import gregtech.common.items.MetaItems; +import net.minecraft.client.resources.I18n; +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.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class AdvancedNanoMuscleSuite extends NanoMuscleSuite { + private int cachedSlotId = -1; + + + public AdvancedNanoMuscleSuite() { + super(EntityEquipmentSlot.CHEST, 5000, 11400000); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack item) { + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); + boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); + boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); + byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; + boolean canShare = data.hasKey("CanShare") && data.getBoolean("CanShare"); + boolean result = false; + + // Mode toggle + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { + flyEnabled = !flyEnabled; + toggleTimer = 10; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + hoverMode = !hoverMode; + toggleTimer = 10; + if (!world.isRemote) { + String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; + player.sendMessage(new TextComponentTranslation(status)); + } + } + + // Backpack mechanics + if (canShare && !world.isRemote) { + // Trying to find item in inventory + if (cachedSlotId < 0) { + // Do not call this method often + if (world.getWorldTime() % 40 == 0) { + cachedSlotId = ArmorUtils.getChargeableItem(player, cont.getTier()); + } + } else { + ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); + if (!ArmorUtils.isPossibleToCharge(cachedItem)) { + cachedSlotId = -1; + } + } + + + // Do neighbor armor charge + for (int i = 0; i < player.inventory.armorInventory.size(); i++) { + IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) continue; + if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) + continue; + if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + + // Do charge + if (cachedSlotId >= 0) { + IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) { + return; + } + if (cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + } + + if (player.onGround) hoverMode = false; + + // Fly mechanics + if (flyEnabled && cont.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { + if (hoverMode) { + if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY > 0.1D) { + player.motionY -= 0.1D; + } + + if (player.motionY < -0.1D) { + player.motionY += 0.1D; + } + + if (player.motionY <= 0.1D && player.motionY >= -0.1D) { + player.motionY = 0.0D; + } + + if (player.motionY > 0.1D || player.motionY < -0.1D) { + if (player.motionY < 0) { + player.motionY += 0.05D; + } else { + player.motionY -= 0.0025D; + } + } else { + player.motionY = 0.0D; + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY = 0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = -0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = 0.0D; + } + + player.fallDistance = 0.0F; + result = true; + } else { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY <= 0.8D) player.motionY += 0.2D; + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.85F, 0.1F); + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + player.fallDistance = 0.0F; + result = true; + } + } + } + + // Fly discharge + if (result) { + cont.discharge(MathHelper.floor(energyPerUse / 2.0), cont.getTier(), true, false, false); + ArmorUtils.resetPlayerFloatingTime(player); + } + + // Do not spam of server packets + if (toggleTimer > 0) { + toggleTimer--; + } + + data.setBoolean("CanShare", canShare); + data.setBoolean("FlyMode", flyEnabled); + data.setBoolean("Hover", hoverMode); + data.setByte("ToggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + String state; + if (data.hasKey("CanShare")) { + state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); + } else { + state = I18n.format("metaarmor.hud.status.disabled"); + } + lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); + lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); + super.addInfo(itemStack, lines); + } + + @Override + public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { + ItemStack armor = player.getHeldItem(hand); + + if (armor.getItem() instanceof ArmorMetaItem && player.isSneaking()) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(armor); + boolean canShareEnergy = data.hasKey("CanShare") && data.getBoolean("CanShare"); + + canShareEnergy = !canShareEnergy; + String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); + if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); + data.setBoolean("CanShare", canShareEnergy); + return ActionResult.newResult(EnumActionResult.SUCCESS, armor); + } + + return super.onRightClick(world, player, hand); + } + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (!cont.canUse(energyPerUse)) return; + NBTTagCompound data = item.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); + } + + if (data.hasKey("FlyMode")) { + String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("metaarmor.hud.fly_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(); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gregtech:textures/armor/advanced_nano_muscle_suite_1.png"; + } + + @Override + public double getDamageAbsorption() { + return 1.0D; + } + +} diff --git a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java new file mode 100644 index 00000000000..d24f56f8acc --- /dev/null +++ b/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java @@ -0,0 +1,291 @@ +package gregtech.api.items.armor; + +import gregtech.api.GTValues; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; +import gregtech.api.items.armor.QuarkTechSuite; +import gregtech.api.util.GTUtility; +import gregtech.api.util.input.EnumKey; +import gregtech.common.items.MetaItems; +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.ActionResult; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.MathHelper; +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 javax.annotation.Nonnull; +import java.util.List; + +public class AdvancedQurakTechSuite extends QuarkTechSuite { + private int cachedSlotId = -1; + + public AdvancedQurakTechSuite() { + super(EntityEquipmentSlot.CHEST, 10000, 100000000, GTValues.IV); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack item) { + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); + boolean hoverMode = data.hasKey("Hover") ? data.getBoolean("Hover") : false; + boolean flyEnabled = data.hasKey("FlyMode") ? data.getBoolean("FlyMode") : false; + byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; + boolean canShare = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; + boolean result = false; + float energyUsageMultiplier = 1.0F; + + // Mode toggle + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { + flyEnabled = !flyEnabled; + toggleTimer = 10; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + hoverMode = !hoverMode; + toggleTimer = 10; + if (!world.isRemote) { + String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; + player.sendMessage(new TextComponentTranslation(status)); + } + } + + // Additional features + if (player.onGround) hoverMode = false; + if (cont.getCharge() >= energyPerUse) player.extinguish(); + + // Backpack mechanics + if (canShare && !world.isRemote) { + // Trying to find item in inventory + if (cachedSlotId < 0) { + // Do not call this method often + if (world.getWorldTime() % 40 == 0) { + cachedSlotId = ArmorUtils.getChargeableItem(player, cont.getTier()); + } + } else { + ItemStack cachedItem = player.inventory.mainInventory.get(cachedSlotId); + if (!ArmorUtils.isPossibleToCharge(cachedItem)) { + cachedSlotId = -1; + } + } + + + // Do neighbor armor charge + for (int i = 0; i < player.inventory.armorInventory.size(); i++) { + IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) continue; + if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) + continue; + if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + + // Do charge + if (cachedSlotId >= 0) { + IElectricItem chargeable = player.inventory.mainInventory.get(cachedSlotId).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (chargeable == null) { + return; + } + if (cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { + long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); + if (delta > 0) cont.discharge(delta, cont.getTier(), true, false, false); + player.inventoryContainer.detectAndSendChanges(); + } + } + } + + // Fly mechanics + if (flyEnabled && cont.canUse(energyPerUse)) { + if (hoverMode) { + if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY > 0.1D) { + player.motionY -= 0.1D; + } + + if (player.motionY < -0.1D) { + player.motionY += 0.1D; + } + + if (player.motionY <= 0.1D && player.motionY >= -0.1D) { + player.motionY = 0.0D; + } + + if (player.motionY > 0.1D || player.motionY < -0.1D) { + if (player.motionY < 0) { + player.motionY += 0.05D; + } else { + player.motionY -= 0.0025D; + } + } else { + player.motionY = 0.0D; + } + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY = 0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = -0.35D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = 0.0D; + } + + player.fallDistance = 0.0F; + result = true; + } else { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (ArmorUtils.isKeyDown(player, EnumKey.BOOST) && !ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + if (player.motionY <= 1.6D) player.motionY += 0.4D; + energyUsageMultiplier = 1.5F; + } else { + if (player.motionY <= 0.8D) player.motionY += 0.2D; + } + + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + if (ArmorUtils.isKeyDown(player, EnumKey.BOOST)) { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.20F); + energyUsageMultiplier = 1.5F; + } else { + player.moveRelative(0.0F, 0.0F, 1.0F, 0.1F); + } + } + player.fallDistance = 0.0F; + result = true; + } + } + } + + // Fly discharge + if (result) { + cont.discharge(MathHelper.floor(energyPerUse * energyUsageMultiplier / 4), cont.getTier(), true, false, false); + ArmorUtils.resetPlayerFloatingTime(player); + } + + // Do not spam of server packets + if (toggleTimer > 0) { + toggleTimer--; + } + + data.setBoolean("CanShare", canShare); + data.setBoolean("FlyMode", flyEnabled); + data.setBoolean("Hover", hoverMode); + data.setByte("ToggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } + + @Override + public void addInfo(ItemStack itemStack, List lines) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(itemStack); + String state = ""; + if (data.hasKey("CanShare")) { + state = data.getBoolean("CanShare") ? I18n.format("metaarmor.hud.status.enabled") : I18n.format("metaarmor.hud.status.disabled"); + } else { + state = I18n.format("metaarmor.hud.status.disabled"); + } + lines.add(I18n.format("metaarmor.energy_share.tooltip", state)); + lines.add(I18n.format("metaarmor.energy_share.tooltip.guide")); + super.addInfo(itemStack, lines); + } + + @Override + public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { + if (player.getHeldItem(hand).getItem() instanceof ArmorMetaItem && player.isSneaking()) { + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(player.getHeldItem(hand)); + boolean canShareEnergy = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; + + canShareEnergy = !canShareEnergy; + String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); + if (!world.isRemote) player.sendMessage(new TextComponentTranslation(locale)); + data.setBoolean("CanShare", canShareEnergy); + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } else { + return super.onRightClick(world, player, hand); + } + } + + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (!cont.canUse(energyPerUse)) return; + NBTTagCompound data = item.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); + } + + if (data.hasKey("FlyMode")) { + String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("metaarmor.hud.gravi_engine", 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(); + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + int damageLimit = Integer.MAX_VALUE; + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (energyPerUse > 0) { + damageLimit = (int) Math.min(damageLimit, 25.0D * item.getCharge() / energyPerUse); + } + return new ArmorProperties(8, getDamageAbsorption() * getAbsorption(armor), damageLimit); + } + + @Override + public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + if (source == DamageSource.FALL || source == DamageSource.DROWN || source == DamageSource.STARVE) { + return false; + } else { + return true; + } + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + return "gregtech:textures/armor/advanced_quark_tech_suite_1.png"; + } + + @Override + public double getDamageAbsorption() { + return 1.5D; + } +} diff --git a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java new file mode 100644 index 00000000000..e5992baca37 --- /dev/null +++ b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java @@ -0,0 +1,135 @@ +package gregtech.api.items.armor; + + +import gregtech.api.GTValues; +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.EnumKey; +import gregtech.common.items.MetaItems; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +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.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; + +import javax.annotation.Nonnull; + +public class NanoMuscleSuite extends ArmorLogicSuite { + + public NanoMuscleSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity) { + super(energyPerUse, capacity, GTValues.HV, slot); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); + byte toggleTimer = nbtData.getByte("toggleTimer"); + boolean ret = false; + if (SLOT == EntityEquipmentSlot.HEAD) { + boolean nightvision = nbtData.getBoolean("Nightvision"); + if (ArmorUtils.isKeyDown(player, EnumKey.MENU) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + toggleTimer = 10; + nightvision = !nightvision; + if (!world.isRemote) { + nbtData.setBoolean("Nightvision", nightvision); + if (nightvision) { + player.sendMessage(new TextComponentTranslation("metaarmor.nms.nightvision.enabled")); + } else { + player.sendMessage(new TextComponentTranslation("metaarmor.nms.nightvision.disabled")); + } + } + } + + if (nightvision && !world.isRemote && item.getCharge() >= (energyPerUse / 100)) { + BlockPos pos = new BlockPos((int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ)); + int skylight = player.getEntityWorld().getLightFromNeighbors(pos); + if (skylight > 8) { + player.removePotionEffect(MobEffects.NIGHT_VISION); + player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 100, 0, true, true)); + } else { + player.removePotionEffect(MobEffects.BLINDNESS); + player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 300, 0, true, true)); + } + ret = true; + item.discharge((energyPerUse / 100), GTValues.HV, true, false, false); + } + + if (!nightvision && !world.isRemote) { + PotionEffect blindness = player.getActivePotionEffect(MobEffects.BLINDNESS); + PotionEffect night_vision = player.getActivePotionEffect(MobEffects.NIGHT_VISION); + if (blindness != null) { + if (blindness.getDuration() < 1) player.removePotionEffect(MobEffects.BLINDNESS); + } + if (night_vision != null) { + if (night_vision.getDuration() < 1) player.removePotionEffect(MobEffects.NIGHT_VISION); + } + } + + if (!world.isRemote && toggleTimer > 0) { + --toggleTimer; + nbtData.setByte("toggleTimer", toggleTimer); + } + } + if (ret) { + player.inventoryContainer.detectAndSendChanges(); + } + } + + public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + if (source == DamageSource.FALL) return true; + return false; + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + IElectricItem container = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + int damageLimit = Integer.MAX_VALUE; + if (source == DamageSource.FALL && this.getEquipmentSlot(armor) == EntityEquipmentSlot.FEET) { + if (energyPerUse > 0) { + damageLimit = (int) Math.min(damageLimit, 25.0 * container.getCharge() / energyPerUse); + } + return new ArmorProperties(10, (damage < 8.0) ? 1.0 : 0.875, damageLimit); + } + return super.getProperties(player, armor, source, damage, equipmentSlot); + } + + @Override + public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { + return SLOT; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { + IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + item.discharge(energyPerUse * damage, item.getTier(), true, false, false); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + ItemStack currentChest = Minecraft.getMinecraft().player.inventory.armorItemInSlot(EntityEquipmentSlot.CHEST.getIndex()); + ItemStack advancedChest = MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm(); + String armorTexture = "nano_muscule_suite"; + if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_nano_muscle_suite"; + return SLOT != EntityEquipmentSlot.LEGS ? + String.format("gregtech:textures/armor/%s_1.png", armorTexture) : + String.format("gregtech:textures/armor/%s_2.png", armorTexture); + } + + @Override + public double getDamageAbsorption() { + return 0.9D; + } +} From 1cf2c56b303c63d8056945180aecfe6b2dc7926a Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 17:28:34 -0400 Subject: [PATCH 38/56] fix file path --- src/main/java/gregtech/common/items/Armor/MetaArmor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index 1d26c4433f2..5c484caf9a1 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -1,7 +1,6 @@ package gregtech.common.items.Armor; -import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.api.items.armor.QuarkTechSuite; +import gregtech.api.items.armor.*; import gregtech.common.ConfigHolder; import gregtech.common.items.MetaItems; import net.minecraft.inventory.EntityEquipmentSlot; From 0058b45180cb8ae1bdf762b13634b86cbc0eb32f Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 17:49:12 -0400 Subject: [PATCH 39/56] fix filepath --- src/main/java/gregtech/api/items/armor/QuarkTechSuite.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java index f48e78ea283..2cf53acbc8f 100644 --- a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java +++ b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java @@ -242,8 +242,8 @@ public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlo String armorTexture = "quark_tech_suite"; if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_quark_tech_suite"; return SLOT != EntityEquipmentSlot.LEGS ? - String.format("gtadditions:textures/armor/%s_1.png", armorTexture) : - String.format("gtadditions:textures/armor/%s_2.png", armorTexture); + String.format("gregtech:textures/armor/%s_1.png", armorTexture) : + String.format("gregtech:textures/armor/%s_2.png", armorTexture); } @Override From 9bacccfc11029cb11ea4c0ad2daffb8f00824c5f Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 18:21:16 -0400 Subject: [PATCH 40/56] fix Jetpack fall damage --- .../java/gregtech/common/EventHandlers.java | 45 ++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 3a44aaad790..915ea3b3e69 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -110,32 +110,57 @@ public void onKeyInput(InputEvent.KeyInputEvent event) { } } -//TODO add jetpack @SubscribeEvent(priority = EventPriority.LOW) public void onEntityLivingFallEvent(LivingFallEvent event) { if (!event.getEntity().getEntityWorld().isRemote && event.getEntity() instanceof EntityLivingBase) { EntityLivingBase entity = (EntityLivingBase) event.getEntity(); ItemStack armor = entity.getItemStackFromSlot(EntityEquipmentSlot.FEET); + ItemStack jet = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST); final ItemStack NANO = MetaItems.NANO_MUSCLE_SUITE_BOOTS.getStackForm(); final ItemStack QUARK = MetaItems.QUARK_TECH_SUITE_BOOTS.getStackForm(); - if (armor != null) { + final ItemStack JET = MetaItems.IMPELLER_JETPACK.getStackForm(); + final ItemStack ADJET = MetaItems.ADVANCED_IMPELLER_JETPACK.getStackForm(); + final ItemStack FLUIDJET = MetaItems.SEMIFLUID_JETPACK.getStackForm(); + + + if (armor != null || jet != null) { int fallDamage = 0; if (armor.isItemEqual(NANO)) { fallDamage = MathHelper.floor(event.getDistance() - 3.0); if (fallDamage >= 8) return; } else if (armor.isItemEqual(QUARK)) { fallDamage = Math.max((int) event.getDistance() - 10, 0); + } + if (jet.isItemEqual(JET) || (jet.isItemEqual(ADJET) || (jet.isItemEqual(FLUIDJET)))) { + } else { return; } - ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) armor.getItem()).getItem(armor); - ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); - IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (item == null) return; - int energyCost = armorLogic.getEnergyPerUse() * fallDamage; - if (item.getCharge() >= energyCost) { - item.discharge(energyCost, item.getTier(), true, false, false); - event.setCanceled(true); + if (jet.isItemEqual(FLUIDJET)) { + } else { + + if (fallDamage != 0) { + ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) armor.getItem()).getItem(armor); + ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) return; + int energyCost = armorLogic.getEnergyPerUse() * fallDamage; + if (item.getCharge() >= energyCost) { + item.discharge(energyCost, item.getTier(), true, false, false); + event.setCanceled(true); + } + } + else{ + ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) jet.getItem()).getItem(jet); + ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); + IElectricItem item = jet.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) return; + int energyCost = armorLogic.getEnergyPerUse(); + if (item.getCharge() >= energyCost) { + item.discharge(energyCost, item.getTier(), true, false, false); + event.setCanceled(true); + } + } } } } From 21e29f8381cdcc46118823481679e19fb3e2f498 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 18:26:52 -0400 Subject: [PATCH 41/56] add missing call --- src/main/java/gregtech/common/EventHandlers.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 915ea3b3e69..4e335b2bbb1 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -137,6 +137,7 @@ public void onEntityLivingFallEvent(LivingFallEvent event) { return; } if (jet.isItemEqual(FLUIDJET)) { + event.setCanceled(true); } else { if (fallDamage != 0) { From 8c35a310bd61a990663da4e507720336be2cb073 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 21:21:40 -0400 Subject: [PATCH 42/56] fix code --- .../java/gregtech/common/EventHandlers.java | 63 ++++++++----------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 4e335b2bbb1..39213b65073 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -123,44 +123,33 @@ public void onEntityLivingFallEvent(LivingFallEvent event) { final ItemStack FLUIDJET = MetaItems.SEMIFLUID_JETPACK.getStackForm(); - if (armor != null || jet != null) { - int fallDamage = 0; - if (armor.isItemEqual(NANO)) { - fallDamage = MathHelper.floor(event.getDistance() - 3.0); - if (fallDamage >= 8) return; - } else if (armor.isItemEqual(QUARK)) { - fallDamage = Math.max((int) event.getDistance() - 10, 0); - } - if (jet.isItemEqual(JET) || (jet.isItemEqual(ADJET) || (jet.isItemEqual(FLUIDJET)))) { - - } else { - return; - } - if (jet.isItemEqual(FLUIDJET)) { - event.setCanceled(true); - } else { - - if (fallDamage != 0) { - ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) armor.getItem()).getItem(armor); - ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); - IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (item == null) return; - int energyCost = armorLogic.getEnergyPerUse() * fallDamage; - if (item.getCharge() >= energyCost) { - item.discharge(energyCost, item.getTier(), true, false, false); - event.setCanceled(true); - } + if (jet.isItemEqual(JET) || (jet.isItemEqual(ADJET) || (jet.isItemEqual(FLUIDJET))) || armor.isItemEqual(QUARK) || armor.isItemEqual(NANO)) { + } else { + return; + } + if (jet.isItemEqual(FLUIDJET)) { + event.setCanceled(true); + } else { + if(jet != null) { + ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) armor.getItem()).getItem(armor); + ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); + IElectricItem item = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) return; + int energyCost = (armorLogic.getEnergyPerUse() * Math.round(event.getDistance())); + if (item.getCharge() >= energyCost) { + item.discharge(energyCost, item.getTier(), true, false, false); + event.setCanceled(true); } - else{ - ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) jet.getItem()).getItem(jet); - ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); - IElectricItem item = jet.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (item == null) return; - int energyCost = armorLogic.getEnergyPerUse(); - if (item.getCharge() >= energyCost) { - item.discharge(energyCost, item.getTier(), true, false, false); - event.setCanceled(true); - } + } + else { + ArmorMetaItem.ArmorMetaValueItem armorMetaValue = ((ArmorMetaItem) jet.getItem()).getItem(jet); + ArmorLogicSuite armorLogic = (ArmorLogicSuite) armorMetaValue.getArmorLogic(); + IElectricItem item = jet.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (item == null) return; + int energyCost = (armorLogic.getEnergyPerUse() * Math.round(event.getDistance())); + if (item.getCharge() >= energyCost) { + item.discharge(energyCost, item.getTier(), true, false, false); + event.setCanceled(true); } } } From 256bafe072b7c5d32266b6c41333d1fe191dea91 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Thu, 19 Aug 2021 21:34:14 -0400 Subject: [PATCH 43/56] Add armor recipes --- .../loaders/recipe/MiscRecipeLoader.java | 224 +++++++++++++++++- 1 file changed, 221 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java index 21b77846f53..f9e31977ff7 100644 --- a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java @@ -2,22 +2,37 @@ import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.RecipeMaps; +import gregtech.api.recipes.recipes.FuelRecipe; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.MaterialStack; import gregtech.api.unification.stack.UnificationEntry; +import gregtech.common.blocks.BlockTransparentCasing; +import gregtech.common.blocks.MetaBlocks; +import gregtech.common.items.Armor.PowerlessJetpack; import gregtech.common.items.MetaItems; +import gregtech.common.metatileentities.MetaTileEntities; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import scala.tools.cmd.Meta; +import static gregtech.api.GTValues.L; +import static gregtech.api.recipes.RecipeMaps.ASSEMBLER_RECIPES; import static gregtech.api.recipes.RecipeMaps.FORMING_PRESS_RECIPES; +import static gregtech.api.unification.material.MarkerMaterials.Tier.*; +import static gregtech.api.unification.material.MarkerMaterials.Tier.Elite; import static gregtech.api.unification.material.Materials.*; -import static gregtech.api.unification.ore.OrePrefix.dust; -import static gregtech.common.items.MetaItems.TOOL_MATCHBOX; -import static gregtech.common.items.MetaItems.TOOL_MATCHES; +import static gregtech.api.recipes.RecipeMaps.*; +import static gregtech.api.unification.ore.OrePrefix.*; +import static gregtech.api.unification.ore.OrePrefix.wireGtSingle; +import static gregtech.common.items.MetaItems.*; public class MiscRecipeLoader { @@ -153,5 +168,208 @@ public static void init() { .duration(128) .EUt(30) .buildAndRegister(); + + //armor +//TODO add tape when it is added + // Nightvision Goggles + ASSEMBLER_RECIPES.recipeBuilder().duration(400).EUt(128) + .inputs(MetaBlocks.TRANSPARENT_CASING.getItemVariant(BlockTransparentCasing.CasingType.REINFORCED_GLASS)) + .inputs(EMITTER_MV.getStackForm(2)) + //.inputs(INSULATING_TAPE.getStackForm(2)) + .inputs(BATTERY_HV_LITHIUM.getStackForm()) + .outputs(NIGHTVISION_GOGGLES.getStackForm()) + .circuitMeta(3) + .buildAndRegister(); + + // NanoMuscle Suite + ASSEMBLER_RECIPES.recipeBuilder().duration(1200).EUt(512) + .input(circuit, Advanced) + .inputs(CARBON_PLATE.getStackForm(7)) + .inputs(BATTERY_HV_LITHIUM.getStackForm()) + .circuitMeta(0) + .outputs(NANO_MUSCLE_SUITE_CHESTPLATE.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(1200).EUt(512) + .input(circuit, Advanced) + .inputs(CARBON_PLATE.getStackForm(6)) + .inputs(BATTERY_HV_LITHIUM.getStackForm()) + .circuitMeta(1) + .outputs(NANO_MUSCLE_SUITE_LEGGINS.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(1200).EUt(512) + .input(circuit, Advanced) + .inputs(CARBON_PLATE.getStackForm(4)) + .inputs(BATTERY_HV_LITHIUM.getStackForm()) + .circuitMeta(2) + .outputs(NANO_MUSCLE_SUITE_BOOTS.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(1200).EUt(512) + .input(circuit, Advanced, 2) + .inputs(MetaBlocks.TRANSPARENT_CASING.getItemVariant(BlockTransparentCasing.CasingType.REINFORCED_GLASS)) + .inputs(NIGHTVISION_GOGGLES.getStackForm()) + .inputs(CARBON_PLATE.getStackForm(5)) + .inputs(BATTERY_HV_LITHIUM.getStackForm()) + .circuitMeta(3) + .outputs(NANO_MUSCLE_SUITE_HELMET.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(1500).EUt(1024) + .input(circuit, Advanced, 2) + .inputs(NANO_MUSCLE_SUITE_CHESTPLATE.getStackForm()) + .inputs(ADVANCED_IMPELLER_JETPACK.getStackForm()) + //.inputs(INSULATING_TAPE.getStackForm(4)) + .inputs(POWER_INTEGRATED_CIRCUIT.getStackForm(4)) + .outputs(ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm()) + .buildAndRegister(); + // Jetpacks + ASSEMBLER_RECIPES.recipeBuilder().duration(400).EUt(100) + .input(circuit, Good, 6) + .inputs(MetaTileEntities.STEEL_TANK.getStackForm()) + .inputs(ELECTRIC_PUMP_MV.getStackForm(2)) + .input(pipeSmallFluid, Polyethylene, 2) + .input(pipeNormalFluid, Steel, 2) + .input(plate, Aluminium) + .input(screw, Aluminium, 4) + .input(stick, Aluminium, 2) + .outputs(SEMIFLUID_JETPACK.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(400).EUt(100) + .input(circuit, Good, 6) + .inputs(BATTERY_MV_CADMIUM.getStackForm(6)) + .inputs(IMPELLER_MV.getStackForm(4)) + .input(plate, Aluminium) + .input(screw, Aluminium, 4) + .input(stick, Aluminium, 2) + .outputs(IMPELLER_JETPACK.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(200).EUt(60) + .input(cableGtSingle, Copper) + .inputs(ELECTRIC_MOTOR_MV.getStackForm()) + .input(stick, Steel) + .input(rotor, Polyethylene, 2) + .input(pipeNormalFluid, Polyethylene) + .outputs(IMPELLER_MV.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(200).EUt(60) + .input(cableGtSingle, Gold) + .inputs(ELECTRIC_MOTOR_HV.getStackForm()) + .input(stick, StainlessSteel) + .input(rotor, Polyethylene, 2) + .input(pipeNormalFluid, Polyethylene) + .outputs(IMPELLER_HV.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(800).EUt(400) + .input(circuit, Good, 4) + .input(circuit, Advanced) + .inputs(BATPACK_HV.getStackForm()) + .inputs(IMPELLER_HV.getStackForm(6)) + .inputs(BATTERY_HV_CADMIUM.getStackForm()) + .input(plate, Aluminium) + .input(screw, Aluminium, 4) + .input(stick, Aluminium, 2) + .outputs(ADVANCED_IMPELLER_JETPACK.getStackForm()) + .buildAndRegister(); + + // Battery Packs + ModHandler.addShapedRecipe("battery_pack.lv", BATPACK_LV.getStackForm(), + "BPB", "BCB", "B B", + 'B', BATTERY_LV_LITHIUM, + 'C', new UnificationEntry(circuit, Basic), + 'P', new UnificationEntry(plate, Steel)); + + ModHandler.addShapedRecipe("battery_pack.mv", BATPACK_MV.getStackForm(), + "BPB", "BCB", "B B", + 'B', BATTERY_MV_LITHIUM, + 'C', new UnificationEntry(circuit, Good), + 'P', new UnificationEntry(plate, Aluminium)); + + ModHandler.addShapedRecipe("battery_pack.hv", BATPACK_HV.getStackForm(), + "BPB", "BCB", "B B", + 'B', BATTERY_HV_LITHIUM, + 'C', new UnificationEntry(circuit, Advanced), + 'P', new UnificationEntry(plate, StainlessSteel)); + + // QuarkTech Suite + ASSEMBLER_RECIPES.recipeBuilder().duration(2400).EUt(1600) + .input(circuit, Extreme, 2) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(4)) + .inputs(ELECTRIC_PISTON_EV.getStackForm(2)) + .inputs(NANO_MUSCLE_SUITE_BOOTS.getStackForm()) + .outputs(QUARK_TECH_SUITE_BOOTS.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(2400).EUt(1600) + .input(circuit, Extreme, 4) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(6)) + .inputs(CONVEYOR_MODULE_EV.getStackForm(2)) + .inputs(NANO_MUSCLE_SUITE_LEGGINS.getStackForm()) + .outputs(QUARK_TECH_SUITE_LEGGINS.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(2400).EUt(1600) + .input(circuit, Extreme, 4) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(8)) + .inputs(FIELD_GENERATOR_EV.getStackForm(2)) + .inputs(NANO_MUSCLE_SUITE_CHESTPLATE.getStackForm()) + .outputs(QUARK_TECH_SUITE_CHESTPLATE.getStackForm()) + .buildAndRegister(); + + ASSEMBLER_RECIPES.recipeBuilder().duration(2400).EUt(1600) + .input(circuit, Extreme, 2) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(LAPOTRON_CRYSTAL.getStackForm()) + .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(4)) + .inputs(SENSOR_EV.getStackForm()) + .inputs(EMITTER_EV.getStackForm()) + .inputs(NANO_MUSCLE_SUITE_HELMET.getStackForm()) + .outputs(QUARK_TECH_SUITE_HELMET.getStackForm()) + .buildAndRegister(); +//TODO add superconductors when added + ASSEMBLY_LINE_RECIPES.recipeBuilder().duration(1800).EUt(7100) + .inputs(FIELD_GENERATOR_IV.getStackForm()) + .inputs(FIELD_GENERATOR_EV.getStackForm(2)) + .input(circuit, Master, 4) + // .input(wireGtSingle, IVSuperconductor, 4) + .inputs(POWER_INTEGRATED_CIRCUIT.getStackForm(4)) + .fluidInputs(SolderingAlloy.getFluid(L * 8)) + .outputs(GRAVITATION_ENGINE.getStackForm()) + .buildAndRegister(); + + ASSEMBLY_LINE_RECIPES.recipeBuilder().duration(3600).EUt(8192) + .inputs(HIGH_POWER_INTEGRATED_CIRCUIT.getStackForm(16)) + // .input(wireGtSingle, IVSuperconductor, 8) + .inputs(GRAVITATION_ENGINE.getStackForm(2)) + .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(12)) + .input(circuit, Elite, 4) + .inputs(QUARK_TECH_SUITE_CHESTPLATE.getStackForm()) + .fluidInputs(SolderingAlloy.getFluid(L * 8)) + .outputs(ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm()) + .buildAndRegister(); + + ASSEMBLY_LINE_RECIPES.recipeBuilder().duration(3600).EUt(8192) + .inputs(HIGH_POWER_INTEGRATED_CIRCUIT.getStackForm(8)) + // .input(wireGtSingle, IVSuperconductor, 8) + .inputs(GRAVITATION_ENGINE.getStackForm(2)) + .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(16)) + .input(circuit, Elite, 2) + .inputs(ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm()) + .fluidInputs(SolderingAlloy.getFluid(L * 8)) + .outputs(ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm()) + .buildAndRegister(); + ModHandler.addShapelessRecipe("fluid_jetpack_clear", SEMIFLUID_JETPACK.getStackForm(), SEMIFLUID_JETPACK.getStackForm()); + } } From 37ced06f90a218e6c2ddabb02ce0646005391f86 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Fri, 20 Aug 2021 01:27:24 -0400 Subject: [PATCH 44/56] Add missing coremods --- .../common/asm/LayerArmorBaseVisitor.java | 32 +++++++++++ .../common/asm/LayerCustomHeadVisitor.java | 56 +++++++++++++++++++ .../common/asm/SpecialArmorApplyVisitor.java | 49 ++++++++++++++++ .../common/asm/SpecialArmorClassVisitor.java | 27 +++++++++ 4 files changed, 164 insertions(+) create mode 100644 src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java create mode 100644 src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java create mode 100644 src/main/java/gregtech/common/asm/SpecialArmorApplyVisitor.java create mode 100644 src/main/java/gregtech/common/asm/SpecialArmorClassVisitor.java diff --git a/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java b/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java new file mode 100644 index 00000000000..ed4a21d8edc --- /dev/null +++ b/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java @@ -0,0 +1,32 @@ +package gregtech.common.asm; + +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +import gregtech.common.asm.util.ObfMapping; + +class LayerArmorBaseVisitor extends MethodVisitor implements Opcodes { + + public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerArmorBase"; + public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_188361_a", "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"); + + private static final String ARMOR_HOOKS_OWNER = "gregtech/api/items/armor/ArmorRenderHooks"; + private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/client/renderer/entity/layers/LayerArmorBase;Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"; + private static final String ARMOR_HOOKS_METHOD_NAME = "renderArmorLayer"; + + public LayerArmorBaseVisitor(MethodVisitor mv) { + super(Opcodes.ASM5, mv); + } + + @Override + public void visitInsn(int opcode) { + if (opcode == Opcodes.RETURN) { + super.visitVarInsn(ALOAD, 0); //this + super.visitVarInsn(ALOAD, 1); //entityLivingBaseIn + for (int i = 0; i < 7; i++) super.visitVarInsn(FLOAD, 2 + i); //limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale + super.visitVarInsn(ALOAD, 9); //slotIn + super.visitMethodInsn(INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, false); + } + super.visitInsn(opcode); + } +} diff --git a/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java b/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java new file mode 100644 index 00000000000..6297c367c4d --- /dev/null +++ b/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java @@ -0,0 +1,56 @@ +package gregtech.common.asm; + +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +import gregtech.common.asm.util.ObfMapping; +import gregtech.common.asm.util.SafeMethodVisitor; + +class LayerCustomHeadVisitor extends SafeMethodVisitor { + + public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerCustomHead"; + public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_177141_a", "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFF)V"); + + private static final String METHOD_OWNER = "net/minecraft/client/renderer/ItemRenderer"; + private static final String METHOD_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V"; + private static final String METHOD_NAME = "func_178099_a"; + private static final ObfMapping METHOD_MAPPING = new ObfMapping(METHOD_OWNER, METHOD_NAME, METHOD_SIGNATURE).toRuntime(); + + + private static final String ARMOR_HOOKS_OWNER = "gregtech/api/items/armor/ArmorRenderHooks"; + private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;)Z"; + private static final String ARMOR_HOOKS_METHOD_NAME = "shouldNotRenderHeadItem"; + + public LayerCustomHeadVisitor(MethodVisitor mv) { + super(Opcodes.ASM5, mv); + } + + private boolean checkTargetInsn(int opcode, String owner, String name, String desc) { + return opcode == Opcodes.INVOKEVIRTUAL && 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(); + Label endLabel = new Label(); + Label skipLabel = new Label(); + super.visitVarInsn(Opcodes.ALOAD, 1); //load entity + super.visitMethodInsn(Opcodes.INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, false); + super.visitJumpInsn(Opcodes.IFEQ, skipLabel); + for (int i = 0; i < 4; i++) super.visitInsn(Opcodes.POP); //pop this, entity, stack, transformType + super.visitJumpInsn(Opcodes.GOTO, endLabel); + super.visitLabel(skipLabel); + super.visitMethodInsn(opcode, owner, name, desc, itf); + super.visitLabel(endLabel); + return; + } + 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/common/asm/SpecialArmorApplyVisitor.java b/src/main/java/gregtech/common/asm/SpecialArmorApplyVisitor.java new file mode 100644 index 00000000000..2257aa5a86b --- /dev/null +++ b/src/main/java/gregtech/common/asm/SpecialArmorApplyVisitor.java @@ -0,0 +1,49 @@ +package gregtech.common.asm; + +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +import gregtech.common.asm.util.ObfMapping; +import gregtech.common.asm.util.SafeMethodVisitor; + +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/api/items/armor/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 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/common/asm/SpecialArmorClassVisitor.java b/src/main/java/gregtech/common/asm/SpecialArmorClassVisitor.java new file mode 100644 index 00000000000..a4e5c7610b9 --- /dev/null +++ b/src/main/java/gregtech/common/asm/SpecialArmorClassVisitor.java @@ -0,0 +1,27 @@ +package gregtech.common.asm; + +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +import gregtech.common.asm.util.ObfMapping; +import gregtech.common.asm.util.TargetClassVisitor; + +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(); + } +} From bf0d24603ff15dc7dff261a2839b237c358425e9 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Fri, 20 Aug 2021 01:27:59 -0400 Subject: [PATCH 45/56] Sim --- .../common/asm/util/SafeMethodVisitor.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java diff --git a/src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java b/src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java new file mode 100644 index 00000000000..dda78a6e9dc --- /dev/null +++ b/src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java @@ -0,0 +1,26 @@ +package gregtech.common.asm.util; + +import org.objectweb.asm.MethodVisitor; + +public abstract class SafeMethodVisitor extends MethodVisitor { + + private boolean patchedSuccessfully = false; + + public SafeMethodVisitor(int api, MethodVisitor mv) { + super(api, mv); + } + + protected void markPatchedSuccessfully() { + this.patchedSuccessfully = true; + } + + @Override + public void visitEnd() { + super.visitEnd(); + if (!patchedSuccessfully) { + throw new RuntimeException("Patching failed, patch code wasn't injected " + getInjectTargetString()); + } + } + + protected abstract String getInjectTargetString(); +} From 85c0ad09d441b08c597da6d575637b88bf26e48c Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Fri, 20 Aug 2021 01:28:52 -0400 Subject: [PATCH 46/56] finish coremod --- .../gregtech/common/asm/GTCETransformer.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/gregtech/common/asm/GTCETransformer.java b/src/main/java/gregtech/common/asm/GTCETransformer.java index 68905f2248d..add0781fb12 100644 --- a/src/main/java/gregtech/common/asm/GTCETransformer.java +++ b/src/main/java/gregtech/common/asm/GTCETransformer.java @@ -17,6 +17,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) ClassWriter classWriter = new ClassWriter(0); classReader.accept(new TargetClassVisitor(classWriter, JEIVisitor.TARGET_METHOD, JEIVisitor::new), 0); return classWriter.toByteArray(); + } else if (internalName.equals(ConcretePowderVisitor.TARGET_CLASS_NAME)) { if (ConfigHolder.vanillaRecipes.disableConcreteInWorld) { ClassReader classReader = new ClassReader(basicClass); @@ -25,6 +26,24 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) return classWriter.toByteArray(); } } + if (internalName.equals(LayerCustomHeadVisitor.TARGET_CLASS_NAME)) { + ClassReader classReader = new ClassReader(basicClass); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classReader.accept(new TargetClassVisitor(classWriter, LayerCustomHeadVisitor.TARGET_METHOD, LayerCustomHeadVisitor::new), 0); + return classWriter.toByteArray(); + } + if (internalName.equals(SpecialArmorApplyVisitor.TARGET_CLASS_NAME)) { + ClassReader classReader = new ClassReader(basicClass); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classReader.accept(new SpecialArmorClassVisitor(classWriter, SpecialArmorApplyVisitor.TARGET_METHOD, SpecialArmorApplyVisitor::new), 0); + return classWriter.toByteArray(); + } + if (internalName.equals(LayerArmorBaseVisitor.TARGET_CLASS_NAME)) { + ClassReader classReader = new ClassReader(basicClass); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classReader.accept(new TargetClassVisitor(classWriter, LayerArmorBaseVisitor.TARGET_METHOD, LayerArmorBaseVisitor::new), 0); + return classWriter.toByteArray(); + } return basicClass; } } From bf3942530769b8eb46b1f9a0af404082f9f6f29d Mon Sep 17 00:00:00 2001 From: BraggestSage833 Date: Sat, 21 Aug 2021 02:20:48 -0400 Subject: [PATCH 47/56] clean up imports --- .../items/armor/AdvancedQurakTechSuite.java | 3 - .../api/items/armor/ArmorLogicSuite.java | 2 - .../api/items/armor/ArmorMetaItem.java | 16 +- .../api/items/armor/ISpecialArmorLogic.java | 92 +++--- .../api/items/armor/NanoMuscleSuite.java | 2 - .../java/gregtech/api/net/KeysPacket.java | 1 - .../java/gregtech/api/net/NetworkHandler.java | 1 + .../gregtech/api/util/LocalizationUtils.java | 4 +- .../java/gregtech/api/util/input/Key.java | 5 +- .../common/asm/LayerArmorBaseVisitor.java | 64 ++-- .../common/asm/LayerCustomHeadVisitor.java | 111 ++++--- .../common/asm/SpecialArmorApplyVisitor.java | 97 +++--- .../common/asm/SpecialArmorClassVisitor.java | 53 ++- .../common/asm/util/SafeMethodVisitor.java | 52 +-- .../common/items/Armor/AdvancedJetpack.java | 241 +++++++------- .../common/items/Armor/MetaArmor.java | 2 +- .../items/Armor/NightvisionGoggles.java | 16 +- .../common/pipelike/cable/Insulation.java | 1 - .../loaders/recipe/MiscRecipeLoader.java | 19 +- .../AnnotatedComponentHandlerLoader.java | 2 +- .../metaitems/impeller_jetpack.json | 28 +- .../metaitems/advanced_impeller_jetpack.json | 1 - .../item/metaitems/battery_pack.hv/1.json | 12 +- .../item/metaitems/battery_pack.hv/2.json | 12 +- .../item/metaitems/battery_pack.hv/3.json | 12 +- .../item/metaitems/battery_pack.hv/4.json | 12 +- .../item/metaitems/battery_pack.hv/5.json | 12 +- .../item/metaitems/battery_pack.hv/6.json | 12 +- .../item/metaitems/battery_pack.hv/7.json | 12 +- .../item/metaitems/battery_pack.hv/8.json | 12 +- .../item/metaitems/battery_pack.lv/1.json | 12 +- .../item/metaitems/battery_pack.lv/2.json | 12 +- .../item/metaitems/battery_pack.lv/3.json | 12 +- .../item/metaitems/battery_pack.lv/4.json | 12 +- .../item/metaitems/battery_pack.lv/5.json | 12 +- .../item/metaitems/battery_pack.lv/6.json | 12 +- .../item/metaitems/battery_pack.lv/7.json | 12 +- .../item/metaitems/battery_pack.lv/8.json | 12 +- .../item/metaitems/battery_pack.mv/1.json | 12 +- .../item/metaitems/battery_pack.mv/2.json | 12 +- .../item/metaitems/battery_pack.mv/3.json | 12 +- .../item/metaitems/battery_pack.mv/4.json | 12 +- .../item/metaitems/battery_pack.mv/5.json | 12 +- .../item/metaitems/battery_pack.mv/6.json | 12 +- .../item/metaitems/battery_pack.mv/7.json | 12 +- .../item/metaitems/battery_pack.mv/8.json | 12 +- .../item/metaitems/gravitation_engine.json | 13 +- .../models/item/metaitems/impeller.hv.json | 13 +- .../models/item/metaitems/impeller.mv.json | 13 +- .../item/metaitems/impeller_jetpack/1.json | 13 +- .../item/metaitems/impeller_jetpack/2.json | 13 +- .../item/metaitems/impeller_jetpack/3.json | 13 +- .../item/metaitems/impeller_jetpack/4.json | 13 +- .../item/metaitems/impeller_jetpack/5.json | 13 +- .../item/metaitems/impeller_jetpack/6.json | 13 +- .../item/metaitems/impeller_jetpack/7.json | 13 +- .../item/metaitems/impeller_jetpack/8.json | 13 +- .../item/metaitems/nightvision_goggles.json | 8 +- .../metaitems/nms.advanced_chestplate.json | 12 +- .../models/item/metaitems/nms.boots.json | 12 +- .../models/item/metaitems/nms.chestplate.json | 12 +- .../models/item/metaitems/nms.helmet.json | 12 +- .../models/item/metaitems/nms.leggins.json | 12 +- .../metaitems/qts.advanced_chestplate.json | 8 +- .../models/item/metaitems/qts.boots.json | 12 +- .../models/item/metaitems/qts.chestplate.json | 12 +- .../models/item/metaitems/qts.helmet.json | 12 +- .../models/item/metaitems/qts.leggins.json | 12 +- .../gregtech/api/util/InventoryUtilsTest.java | 307 +++++++++--------- 69 files changed, 815 insertions(+), 860 deletions(-) diff --git a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java index d24f56f8acc..c69c4c9c1d0 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java +++ b/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java @@ -3,9 +3,6 @@ import gregtech.api.GTValues; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorMetaItem; -import gregtech.api.items.armor.ArmorUtils; -import gregtech.api.items.armor.QuarkTechSuite; import gregtech.api.util.GTUtility; import gregtech.api.util.input.EnumKey; import gregtech.common.items.MetaItems; diff --git a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java index ab778641956..13c6c2ec7fc 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java +++ b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java @@ -5,9 +5,7 @@ import com.google.common.collect.Multimap; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; -import gregtech.api.items.armor.ArmorMetaItem; import gregtech.api.items.armor.ArmorMetaItem.ArmorMetaValueItem; -import gregtech.api.items.armor.ISpecialArmorLogic; import gregtech.api.items.metaitem.ElectricStats; import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index 0a965b104bb..7ab95276c20 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -2,7 +2,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Multimap; -import com.google.common.collect.Streams; import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.stats.IEnchantabilityHelper; import gregtech.api.items.metaitem.stats.IItemComponent; @@ -94,7 +93,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { public boolean isValidArmor(ItemStack stack, EntityEquipmentSlot armorType, Entity entity) { IArmorLogic armorLogic = getArmorLogic(stack); return super.isValidArmor(stack, armorType, entity) && - armorLogic.isValidArmor(stack, entity, armorType); + armorLogic.isValidArmor(stack, entity, armorType); } @Nullable @@ -139,10 +138,14 @@ public void renderHelmetOverlay(ItemStack stack, EntityPlayer player, ScaledReso 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; + case 0: + return EntityEquipmentSlot.FEET; + case 1: + return EntityEquipmentSlot.LEGS; + case 2: + return EntityEquipmentSlot.CHEST; + default: + return EntityEquipmentSlot.HEAD; } } @@ -174,6 +177,7 @@ public ArmorMetaValueItem addComponents(IItemComponent... stats) { return this; } } + @Override public boolean isEnchantable(ItemStack stack) { return true; diff --git a/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java b/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java index 09c532ed8bb..35734b1d7b3 100644 --- a/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java +++ b/src/main/java/gregtech/api/items/armor/ISpecialArmorLogic.java @@ -1,46 +1,46 @@ -package gregtech.api.items.armor; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraftforge.common.ISpecialArmor.ArmorProperties; - -import javax.annotation.Nonnull; - -/** - * Armor logic that wraps {@link net.minecraftforge.common.ISpecialArmor} methods - * to allow full control over damage absorption additionally to vanilla attribute values - */ -public interface ISpecialArmorLogic extends IArmorLogic { - - /** - * Retrieves the modifiers to be used when calculating armor damage. - * - * Armor will higher priority will have damage applied to them before - * lower priority ones. If there are multiple pieces of armor with the - * same priority, damage will be distributed between them based on there - * absorption ratio. - */ - ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot); - - /** - * Get the displayed effective armor. - * - * @return The number of armor points for display, 2 per shield. - */ - int getArmorDisplay(EntityPlayer player, @Nonnull ItemStack armor, int slot); - - /** - * Simple check to see if the armor should interact with "Unblockable" damage - * sources. A fair number of vanilla damage sources have this tag, such as - * Anvils, Falling, Fire, and Magic. - * - * Returning true here means that the armor is able to meaningfully respond - * to this damage source. Otherwise, no interaction is allowed. - */ - default boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - return false; - } -} +package gregtech.api.items.armor; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; + +import javax.annotation.Nonnull; + +/** + * Armor logic that wraps {@link net.minecraftforge.common.ISpecialArmor} methods + * to allow full control over damage absorption additionally to vanilla attribute values + */ +public interface ISpecialArmorLogic extends IArmorLogic { + + /** + * Retrieves the modifiers to be used when calculating armor damage. + *

+ * Armor will higher priority will have damage applied to them before + * lower priority ones. If there are multiple pieces of armor with the + * same priority, damage will be distributed between them based on there + * absorption ratio. + */ + ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot); + + /** + * Get the displayed effective armor. + * + * @return The number of armor points for display, 2 per shield. + */ + int getArmorDisplay(EntityPlayer player, @Nonnull ItemStack armor, int slot); + + /** + * Simple check to see if the armor should interact with "Unblockable" damage + * sources. A fair number of vanilla damage sources have this tag, such as + * Anvils, Falling, Fire, and Magic. + *

+ * Returning true here means that the armor is able to meaningfully respond + * to this damage source. Otherwise, no interaction is allowed. + */ + default boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { + return false; + } +} diff --git a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java index e5992baca37..e4c07f526d5 100644 --- a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java +++ b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java @@ -4,8 +4,6 @@ import gregtech.api.GTValues; 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.EnumKey; import gregtech.common.items.MetaItems; diff --git a/src/main/java/gregtech/api/net/KeysPacket.java b/src/main/java/gregtech/api/net/KeysPacket.java index c2b8727ce2a..314104ac89a 100644 --- a/src/main/java/gregtech/api/net/KeysPacket.java +++ b/src/main/java/gregtech/api/net/KeysPacket.java @@ -1,7 +1,6 @@ package gregtech.api.net; - import gregtech.api.util.input.EnumKey; import gregtech.api.util.input.Key; import gregtech.api.util.input.Keybinds; diff --git a/src/main/java/gregtech/api/net/NetworkHandler.java b/src/main/java/gregtech/api/net/NetworkHandler.java index d05f88df290..400c19a63c4 100755 --- a/src/main/java/gregtech/api/net/NetworkHandler.java +++ b/src/main/java/gregtech/api/net/NetworkHandler.java @@ -75,6 +75,7 @@ public PacketCodec(PacketEncoder encoder, PacketDecoder decoder) { this.decoder = decoder; } } + public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel("Gregtech"); private static final HashMap, PacketCodec> codecMap = new HashMap<>(); @SideOnly(Side.CLIENT) diff --git a/src/main/java/gregtech/api/util/LocalizationUtils.java b/src/main/java/gregtech/api/util/LocalizationUtils.java index 2ec1a6bb386..9b74cffb6ab 100644 --- a/src/main/java/gregtech/api/util/LocalizationUtils.java +++ b/src/main/java/gregtech/api/util/LocalizationUtils.java @@ -15,8 +15,9 @@ public class LocalizationUtils { *

  • `LocalisationUtils` is only for cases where some kind of translation is required on the server and there is no client/player in context.
  • *
  • `LocalisationUtils` is "best effort" and will probably only work properly with en-us.
  • * + * * @param localisationKey the localisation key passed to the underlying format function - * @param substitutions the substitutions passed to the underlying format function + * @param substitutions the substitutions passed to the underlying format function * @return the localized string. */ public static String format(String localisationKey, Object... substitutions) { @@ -36,6 +37,7 @@ public static String format(String localisationKey, Object... substitutions) { *
  • `LocalisationUtils` is only for cases where some kind of translation is required on the server and there is no client/player in context.
  • *
  • `LocalisationUtils` is "best effort" and will probably only work properly with en-us.
  • * + * * @param localisationKey the localisation key passed to the underlying hasKey function * @return a boolean indicating if the given localisation key has localisations */ diff --git a/src/main/java/gregtech/api/util/input/Key.java b/src/main/java/gregtech/api/util/input/Key.java index 333e640d989..61197494d3d 100644 --- a/src/main/java/gregtech/api/util/input/Key.java +++ b/src/main/java/gregtech/api/util/input/Key.java @@ -4,8 +4,9 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class Key { @SideOnly(Side.CLIENT) -private KeyBinding binding; +public class Key { + @SideOnly(Side.CLIENT) + private KeyBinding binding; public final EnumKey KEY; public boolean state; public static final String KEYS_CATEGORY = "gregtech"; diff --git a/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java b/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java index ed4a21d8edc..33fe163c740 100644 --- a/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java +++ b/src/main/java/gregtech/common/asm/LayerArmorBaseVisitor.java @@ -1,32 +1,32 @@ -package gregtech.common.asm; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import gregtech.common.asm.util.ObfMapping; - -class LayerArmorBaseVisitor extends MethodVisitor implements Opcodes { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerArmorBase"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_188361_a", "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"); - - private static final String ARMOR_HOOKS_OWNER = "gregtech/api/items/armor/ArmorRenderHooks"; - private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/client/renderer/entity/layers/LayerArmorBase;Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"; - private static final String ARMOR_HOOKS_METHOD_NAME = "renderArmorLayer"; - - public LayerArmorBaseVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == Opcodes.RETURN) { - super.visitVarInsn(ALOAD, 0); //this - super.visitVarInsn(ALOAD, 1); //entityLivingBaseIn - for (int i = 0; i < 7; i++) super.visitVarInsn(FLOAD, 2 + i); //limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale - super.visitVarInsn(ALOAD, 9); //slotIn - super.visitMethodInsn(INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, false); - } - super.visitInsn(opcode); - } -} +package gregtech.common.asm; + +import gregtech.common.asm.util.ObfMapping; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +class LayerArmorBaseVisitor extends MethodVisitor implements Opcodes { + + public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerArmorBase"; + public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_188361_a", "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"); + + private static final String ARMOR_HOOKS_OWNER = "gregtech/api/items/armor/ArmorRenderHooks"; + private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/client/renderer/entity/layers/LayerArmorBase;Lnet/minecraft/entity/EntityLivingBase;FFFFFFFLnet/minecraft/inventory/EntityEquipmentSlot;)V"; + private static final String ARMOR_HOOKS_METHOD_NAME = "renderArmorLayer"; + + public LayerArmorBaseVisitor(MethodVisitor mv) { + super(Opcodes.ASM5, mv); + } + + @Override + public void visitInsn(int opcode) { + if (opcode == Opcodes.RETURN) { + super.visitVarInsn(ALOAD, 0); //this + super.visitVarInsn(ALOAD, 1); //entityLivingBaseIn + for (int i = 0; i < 7; i++) + super.visitVarInsn(FLOAD, 2 + i); //limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale + super.visitVarInsn(ALOAD, 9); //slotIn + super.visitMethodInsn(INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, false); + } + super.visitInsn(opcode); + } +} diff --git a/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java b/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java index 6297c367c4d..b06f3f8a4a7 100644 --- a/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java +++ b/src/main/java/gregtech/common/asm/LayerCustomHeadVisitor.java @@ -1,56 +1,55 @@ -package gregtech.common.asm; - -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import gregtech.common.asm.util.ObfMapping; -import gregtech.common.asm.util.SafeMethodVisitor; - -class LayerCustomHeadVisitor extends SafeMethodVisitor { - - public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerCustomHead"; - public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_177141_a", "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFF)V"); - - private static final String METHOD_OWNER = "net/minecraft/client/renderer/ItemRenderer"; - private static final String METHOD_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V"; - private static final String METHOD_NAME = "func_178099_a"; - private static final ObfMapping METHOD_MAPPING = new ObfMapping(METHOD_OWNER, METHOD_NAME, METHOD_SIGNATURE).toRuntime(); - - - private static final String ARMOR_HOOKS_OWNER = "gregtech/api/items/armor/ArmorRenderHooks"; - private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;)Z"; - private static final String ARMOR_HOOKS_METHOD_NAME = "shouldNotRenderHeadItem"; - - public LayerCustomHeadVisitor(MethodVisitor mv) { - super(Opcodes.ASM5, mv); - } - - private boolean checkTargetInsn(int opcode, String owner, String name, String desc) { - return opcode == Opcodes.INVOKEVIRTUAL && 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(); - Label endLabel = new Label(); - Label skipLabel = new Label(); - super.visitVarInsn(Opcodes.ALOAD, 1); //load entity - super.visitMethodInsn(Opcodes.INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, false); - super.visitJumpInsn(Opcodes.IFEQ, skipLabel); - for (int i = 0; i < 4; i++) super.visitInsn(Opcodes.POP); //pop this, entity, stack, transformType - super.visitJumpInsn(Opcodes.GOTO, endLabel); - super.visitLabel(skipLabel); - super.visitMethodInsn(opcode, owner, name, desc, itf); - super.visitLabel(endLabel); - return; - } - 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); - } -} +package gregtech.common.asm; + +import gregtech.common.asm.util.ObfMapping; +import gregtech.common.asm.util.SafeMethodVisitor; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +class LayerCustomHeadVisitor extends SafeMethodVisitor { + + public static final String TARGET_CLASS_NAME = "net/minecraft/client/renderer/entity/layers/LayerCustomHead"; + public static final ObfMapping TARGET_METHOD = new ObfMapping(TARGET_CLASS_NAME, "func_177141_a", "(Lnet/minecraft/entity/EntityLivingBase;FFFFFFF)V"); + + private static final String METHOD_OWNER = "net/minecraft/client/renderer/ItemRenderer"; + private static final String METHOD_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V"; + private static final String METHOD_NAME = "func_178099_a"; + private static final ObfMapping METHOD_MAPPING = new ObfMapping(METHOD_OWNER, METHOD_NAME, METHOD_SIGNATURE).toRuntime(); + + + private static final String ARMOR_HOOKS_OWNER = "gregtech/api/items/armor/ArmorRenderHooks"; + private static final String ARMOR_HOOKS_SIGNATURE = "(Lnet/minecraft/entity/EntityLivingBase;)Z"; + private static final String ARMOR_HOOKS_METHOD_NAME = "shouldNotRenderHeadItem"; + + public LayerCustomHeadVisitor(MethodVisitor mv) { + super(Opcodes.ASM5, mv); + } + + private boolean checkTargetInsn(int opcode, String owner, String name, String desc) { + return opcode == Opcodes.INVOKEVIRTUAL && 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(); + Label endLabel = new Label(); + Label skipLabel = new Label(); + super.visitVarInsn(Opcodes.ALOAD, 1); //load entity + super.visitMethodInsn(Opcodes.INVOKESTATIC, ARMOR_HOOKS_OWNER, ARMOR_HOOKS_METHOD_NAME, ARMOR_HOOKS_SIGNATURE, false); + super.visitJumpInsn(Opcodes.IFEQ, skipLabel); + for (int i = 0; i < 4; i++) super.visitInsn(Opcodes.POP); //pop this, entity, stack, transformType + super.visitJumpInsn(Opcodes.GOTO, endLabel); + super.visitLabel(skipLabel); + super.visitMethodInsn(opcode, owner, name, desc, itf); + super.visitLabel(endLabel); + return; + } + 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/common/asm/SpecialArmorApplyVisitor.java b/src/main/java/gregtech/common/asm/SpecialArmorApplyVisitor.java index 2257aa5a86b..134f646a452 100644 --- a/src/main/java/gregtech/common/asm/SpecialArmorApplyVisitor.java +++ b/src/main/java/gregtech/common/asm/SpecialArmorApplyVisitor.java @@ -1,49 +1,48 @@ -package gregtech.common.asm; - -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import gregtech.common.asm.util.ObfMapping; -import gregtech.common.asm.util.SafeMethodVisitor; - -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/api/items/armor/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 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); - } -} +package gregtech.common.asm; + +import gregtech.common.asm.util.ObfMapping; +import gregtech.common.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/api/items/armor/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 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/common/asm/SpecialArmorClassVisitor.java b/src/main/java/gregtech/common/asm/SpecialArmorClassVisitor.java index a4e5c7610b9..97d733d3654 100644 --- a/src/main/java/gregtech/common/asm/SpecialArmorClassVisitor.java +++ b/src/main/java/gregtech/common/asm/SpecialArmorClassVisitor.java @@ -1,27 +1,26 @@ -package gregtech.common.asm; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import gregtech.common.asm.util.ObfMapping; -import gregtech.common.asm.util.TargetClassVisitor; - -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(); - } -} +package gregtech.common.asm; + +import gregtech.common.asm.util.ObfMapping; +import gregtech.common.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/asm/util/SafeMethodVisitor.java b/src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java index dda78a6e9dc..7d1845cdfb9 100644 --- a/src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java +++ b/src/main/java/gregtech/common/asm/util/SafeMethodVisitor.java @@ -1,26 +1,26 @@ -package gregtech.common.asm.util; - -import org.objectweb.asm.MethodVisitor; - -public abstract class SafeMethodVisitor extends MethodVisitor { - - private boolean patchedSuccessfully = false; - - public SafeMethodVisitor(int api, MethodVisitor mv) { - super(api, mv); - } - - protected void markPatchedSuccessfully() { - this.patchedSuccessfully = true; - } - - @Override - public void visitEnd() { - super.visitEnd(); - if (!patchedSuccessfully) { - throw new RuntimeException("Patching failed, patch code wasn't injected " + getInjectTargetString()); - } - } - - protected abstract String getInjectTargetString(); -} +package gregtech.common.asm.util; + +import org.objectweb.asm.MethodVisitor; + +public abstract class SafeMethodVisitor extends MethodVisitor { + + private boolean patchedSuccessfully = false; + + public SafeMethodVisitor(int api, MethodVisitor mv) { + super(api, mv); + } + + protected void markPatchedSuccessfully() { + this.patchedSuccessfully = true; + } + + @Override + public void visitEnd() { + super.visitEnd(); + if (!patchedSuccessfully) { + throw new RuntimeException("Patching failed, patch code wasn't injected " + getInjectTargetString()); + } + } + + protected abstract String getInjectTargetString(); +} diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java index d5e3c9b85aa..95d447fff9f 100644 --- a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java +++ b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java @@ -1,7 +1,6 @@ package gregtech.common.items.Armor; - import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.items.armor.ArmorUtils; @@ -21,158 +20,158 @@ import java.util.List; - public class AdvancedJetpack extends Jetpack { - - public AdvancedJetpack(int energyPerUse, int capacity, int tier) { - super(energyPerUse, capacity, tier); - } +public class AdvancedJetpack extends Jetpack { - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack item) { - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); - boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); - byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; - boolean result = false; + public AdvancedJetpack(int energyPerUse, int capacity, int tier) { + super(energyPerUse, capacity, tier); + } - // Mode toggle - if (!world.isRemote) { - if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { - flyEnabled = !flyEnabled; - toggleTimer = 10; - } + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack item) { + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); + boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); + boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); + byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; + boolean result = false; + + // Mode toggle + if (!world.isRemote) { + if (ArmorUtils.isKeyDown(player, EnumKey.FLY_KEY) && toggleTimer == 0) { + flyEnabled = !flyEnabled; + toggleTimer = 10; } + } - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { - hoverMode = !hoverMode; - toggleTimer = 10; - if (!world.isRemote) { - String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; - player.sendMessage(new TextComponentTranslation(status)); - } + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { + hoverMode = !hoverMode; + toggleTimer = 10; + if (!world.isRemote) { + String status = hoverMode ? "metaarmor.jetpack.hover.enable" : "metaarmor.jetpack.hover.disable"; + player.sendMessage(new TextComponentTranslation(status)); } + } - if (player.onGround) hoverMode = false; + if (player.onGround) hoverMode = false; - // Fly mechanics - if (flyEnabled && cont.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { - if (hoverMode) { - if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - if (player.motionY > 0.1D) { - player.motionY -= 0.1D; - } + // Fly mechanics + if (flyEnabled && cont.canUse(energyPerUse) && !player.isInWater() && !player.isInLava()) { + if (hoverMode) { + if (!ArmorUtils.isKeyDown(player, EnumKey.JUMP) || !ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + if (player.motionY > 0.1D) { + player.motionY -= 0.1D; + } - if (player.motionY < -0.1D) { - player.motionY += 0.1D; - } + if (player.motionY < -0.1D) { + player.motionY += 0.1D; + } - if (player.motionY <= 0.1D && player.motionY >= -0.1D) { - player.motionY = 0.0D; - } + if (player.motionY <= 0.1D && player.motionY >= -0.1D) { + player.motionY = 0.0D; + } - if (player.motionY > 0.1D || player.motionY < -0.1D) { - if (player.motionY < 0) { - player.motionY += 0.05D; - } else { - player.motionY -= 0.0025D; - } + if (player.motionY > 0.1D || player.motionY < -0.1D) { + if (player.motionY < 0) { + player.motionY += 0.05D; } else { - player.motionY = 0.0D; + player.motionY -= 0.0025D; } - ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); - ArmorUtils.playJetpackSound(player); + } else { + player.motionY = 0.0D; } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); + } - if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); - } + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.25F, 0.2F); + } - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { - player.motionY = 0.35D; - } + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + player.motionY = 0.35D; + } - if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - player.motionY = -0.35D; - } + if (ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = -0.35D; + } - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { - player.motionY = 0.0D; - } + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP) && ArmorUtils.isKeyDown(player, EnumKey.SHIFT)) { + player.motionY = 0.0D; + } + player.fallDistance = 0.0F; + result = true; + } else { + if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { + if (player.motionY <= 0.8D) player.motionY += 0.2D; + if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { + player.moveRelative(0.0F, 0.0F, 0.85F, 0.1F); + } + ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); + ArmorUtils.playJetpackSound(player); player.fallDistance = 0.0F; result = true; - } else { - if (ArmorUtils.isKeyDown(player, EnumKey.JUMP)) { - if (player.motionY <= 0.8D) player.motionY += 0.2D; - if (ArmorUtils.isKeyDown(player, EnumKey.FORWARD)) { - player.moveRelative(0.0F, 0.0F, 0.85F, 0.1F); - } - ArmorUtils.spawnParticle(world, player, EnumParticleTypes.CLOUD, -0.6D); - ArmorUtils.playJetpackSound(player); - player.fallDistance = 0.0F; - result = true; - } } } - - // Fly discharge - if (result) { - cont.discharge(energyPerUse, cont.getTier(), true, false, false); - ArmorUtils.resetPlayerFloatingTime(player); - } - - // Do not spam of server packets - if (toggleTimer > 0) { - toggleTimer--; - } - - data.setBoolean("FlyMode", flyEnabled); - data.setBoolean("Hover", hoverMode); - data.setByte("ToggleTimer", toggleTimer); - player.inventoryContainer.detectAndSendChanges(); } - @Override - public void addInfo(ItemStack itemStack, List lines) { - super.addInfo(itemStack, lines); + // Fly discharge + if (result) { + cont.discharge(energyPerUse, cont.getTier(), true, false, false); + ArmorUtils.resetPlayerFloatingTime(player); } - @SideOnly(Side.CLIENT) - public boolean isNeedDrawHUD() { - return true; + // Do not spam of server packets + if (toggleTimer > 0) { + toggleTimer--; } - @Override - public void drawHUD(ItemStack item) { - super.addCapacityHUD(item); - IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - if (cont == null) return; - if (!cont.canUse(energyPerUse)) return; - NBTTagCompound data = item.getTagCompound(); - if (data != null) { - if (data.hasKey("CanShare")) { - String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); - } + data.setBoolean("FlyMode", flyEnabled); + data.setBoolean("Hover", hoverMode); + data.setByte("ToggleTimer", toggleTimer); + player.inventoryContainer.detectAndSendChanges(); + } - if (data.hasKey("FlyMode")) { - String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; - this.HUD.newString(I18n.format("metaarmor.hud.fly_mode", I18n.format(status))); - } + @Override + public void addInfo(ItemStack itemStack, List lines) { + super.addInfo(itemStack, lines); + } - 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))); - } + @SideOnly(Side.CLIENT) + public boolean isNeedDrawHUD() { + return true; + } + + @Override + public void drawHUD(ItemStack item) { + super.addCapacityHUD(item); + IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); + if (cont == null) return; + if (!cont.canUse(energyPerUse)) return; + NBTTagCompound data = item.getTagCompound(); + if (data != null) { + if (data.hasKey("CanShare")) { + String status = data.getBoolean("CanShare") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("mataarmor.hud.supply_mode", I18n.format(status))); + } + + if (data.hasKey("FlyMode")) { + String status = data.getBoolean("FlyMode") ? "metaarmor.hud.status.enabled" : "metaarmor.hud.status.disabled"; + this.HUD.newString(I18n.format("metaarmor.hud.fly_mode", I18n.format(status))); } - this.HUD.draw(); - this.HUD.reset(); - } - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - return "gregtech:textures/armor/advanced_jetpack.png"; + 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(); + } + + @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/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index 5c484caf9a1..fa47e72d2d1 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -5,7 +5,7 @@ import gregtech.common.items.MetaItems; import net.minecraft.inventory.EntityEquipmentSlot; -public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem> { +public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem> { @Override public void registerSubItems() { ConfigHolder.UnofficialOptions.Equipment e = ConfigHolder.UnofficialOptions.equipment; diff --git a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java index f1f9f776ffa..e16aab89d4d 100644 --- a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java +++ b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java @@ -38,21 +38,21 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); byte toggleTimer = nbtData.getByte("toggleTimer"); boolean ret = false; - if(!player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem().equals(itemStack.getItem())) { + if (!player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem().equals(itemStack.getItem())) { disableNightVision(world, player, false); } if (SLOT == EntityEquipmentSlot.HEAD) { boolean nightvision = nbtData.getBoolean("Nightvision"); if (ArmorUtils.isKeyDown(player, EnumKey.MENU) && ArmorUtils.isKeyDown(player, EnumKey.MODE_SWITCH) && toggleTimer == 0) { toggleTimer = 10; - if(!nightvision && item.getCharge() >= energyPerUse / 100) { + if (!nightvision && item.getCharge() >= energyPerUse / 100) { nightvision = true; player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.enabled")); - } else if(nightvision){ + } else if (nightvision) { nightvision = false; disableNightVision(world, player, true); } else { - if(!world.isRemote) { + if (!world.isRemote) { player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.error")); } } @@ -87,10 +87,10 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { } public void disableNightVision(World world, EntityPlayer player, boolean sendMsg) { - if(!world.isRemote) { + if (!world.isRemote) { player.removePotionEffect(MobEffects.NIGHT_VISION); player.removePotionEffect(MobEffects.BLINDNESS); - if(sendMsg) player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.disabled")); + if (sendMsg) player.sendMessage(new TextComponentTranslation("metaarmor.message.nightvision.disabled")); } } @@ -107,10 +107,10 @@ public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlo @Override public void addInfo(ItemStack itemStack, List lines) { super.addInfo(itemStack, lines); - if(SLOT == EntityEquipmentSlot.HEAD) { + if (SLOT == EntityEquipmentSlot.HEAD) { NBTTagCompound nbtData = GTUtility.getOrCreateNbtCompound(itemStack); boolean nv = nbtData.getBoolean("Nightvision"); - if(nv) { + 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/pipelike/cable/Insulation.java b/src/main/java/gregtech/common/pipelike/cable/Insulation.java index cf4a12ec2a5..5d6cf51d089 100644 --- a/src/main/java/gregtech/common/pipelike/cable/Insulation.java +++ b/src/main/java/gregtech/common/pipelike/cable/Insulation.java @@ -3,7 +3,6 @@ import gregtech.api.pipenet.block.material.IMaterialPipeType; import gregtech.api.unification.material.properties.WireProperties; import gregtech.api.unification.ore.OrePrefix; -import gregtech.common.ConfigHolder; import javax.annotation.Nonnull; diff --git a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java index f9e31977ff7..61f40ec8c79 100644 --- a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java @@ -2,7 +2,6 @@ import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.RecipeMaps; -import gregtech.api.recipes.recipes.FuelRecipe; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; @@ -11,27 +10,17 @@ import gregtech.api.unification.stack.UnificationEntry; import gregtech.common.blocks.BlockTransparentCasing; import gregtech.common.blocks.MetaBlocks; -import gregtech.common.items.Armor.PowerlessJetpack; import gregtech.common.items.MetaItems; import gregtech.common.metatileentities.MetaTileEntities; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; -import net.minecraftforge.fluids.capability.IFluidTankProperties; -import scala.tools.cmd.Meta; import static gregtech.api.GTValues.L; -import static gregtech.api.recipes.RecipeMaps.ASSEMBLER_RECIPES; -import static gregtech.api.recipes.RecipeMaps.FORMING_PRESS_RECIPES; +import static gregtech.api.recipes.RecipeMaps.*; import static gregtech.api.unification.material.MarkerMaterials.Tier.*; -import static gregtech.api.unification.material.MarkerMaterials.Tier.Elite; import static gregtech.api.unification.material.Materials.*; -import static gregtech.api.recipes.RecipeMaps.*; import static gregtech.api.unification.ore.OrePrefix.*; -import static gregtech.api.unification.ore.OrePrefix.wireGtSingle; import static gregtech.common.items.MetaItems.*; public class MiscRecipeLoader { @@ -342,7 +331,7 @@ public static void init() { .inputs(FIELD_GENERATOR_IV.getStackForm()) .inputs(FIELD_GENERATOR_EV.getStackForm(2)) .input(circuit, Master, 4) - // .input(wireGtSingle, IVSuperconductor, 4) + // .input(wireGtSingle, IVSuperconductor, 4) .inputs(POWER_INTEGRATED_CIRCUIT.getStackForm(4)) .fluidInputs(SolderingAlloy.getFluid(L * 8)) .outputs(GRAVITATION_ENGINE.getStackForm()) @@ -350,7 +339,7 @@ public static void init() { ASSEMBLY_LINE_RECIPES.recipeBuilder().duration(3600).EUt(8192) .inputs(HIGH_POWER_INTEGRATED_CIRCUIT.getStackForm(16)) - // .input(wireGtSingle, IVSuperconductor, 8) + // .input(wireGtSingle, IVSuperconductor, 8) .inputs(GRAVITATION_ENGINE.getStackForm(2)) .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(12)) .input(circuit, Elite, 4) @@ -361,7 +350,7 @@ public static void init() { ASSEMBLY_LINE_RECIPES.recipeBuilder().duration(3600).EUt(8192) .inputs(HIGH_POWER_INTEGRATED_CIRCUIT.getStackForm(8)) - // .input(wireGtSingle, IVSuperconductor, 8) + // .input(wireGtSingle, IVSuperconductor, 8) .inputs(GRAVITATION_ENGINE.getStackForm(2)) .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(16)) .input(circuit, Elite, 2) diff --git a/src/main/java/gregtech/loaders/recipe/component/AnnotatedComponentHandlerLoader.java b/src/main/java/gregtech/loaders/recipe/component/AnnotatedComponentHandlerLoader.java index eafdd2ee2aa..7cf8e3ff216 100644 --- a/src/main/java/gregtech/loaders/recipe/component/AnnotatedComponentHandlerLoader.java +++ b/src/main/java/gregtech/loaders/recipe/component/AnnotatedComponentHandlerLoader.java @@ -14,7 +14,7 @@ public class AnnotatedComponentHandlerLoader { public static void discoverAndLoadAnnotatedComponentHandlers(ASMDataTable asmDataTable) { Set annotations = asmDataTable.getAll(IComponentHandler.RegisterComponentHandler.class.getName()); int componentHandlersRegistered = 0; - for (ASMData annotationData :annotations) { + for (ASMData annotationData : annotations) { String componentHandlerClassName = annotationData.getClassName(); Class componentHandlerClass; try { diff --git a/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json b/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json index 403c9c6e826..00df323ed8a 100644 --- a/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json +++ b/src/main/resources/assets/gregtech/blockstates/metaitems/impeller_jetpack.json @@ -1,14 +1,14 @@ -{ - "forge_marker": 1, - "variants": { - "inventory": { - "model": "forge:forgebucket", - "textures": { - "base": "gregtech:items/metaitems/impeller_jetpack/base", - "fluid": "gregtech:items/metaitems/impeller_jetpack/overlay", - "cover": "gregtech:items/metaitems/impeller_jetpack/base" - }, - "transform": "forge:default-item" - } - } -} \ No newline at end of file +{ + "forge_marker": 1, + "variants": { + "inventory": { + "model": "forge:forgebucket", + "textures": { + "base": "gregtech:items/metaitems/impeller_jetpack/base", + "fluid": "gregtech:items/metaitems/impeller_jetpack/overlay", + "cover": "gregtech:items/metaitems/impeller_jetpack/base" + }, + "transform": "forge:default-item" + } + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json b/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json index 7744b5b96fa..6bb7f2d61d3 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/advanced_impeller_jetpack.json @@ -1,4 +1,3 @@ - { "parent": "item/generated", "textures": { diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json index a91f08320e5..28fb2b34178 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/1.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/1" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/1" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json index 3158e6c4d18..dd822b484c5 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/2.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/2" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/2" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json index b7d7519e13e..a49661eb527 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/3.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/3" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/3" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json index e8b7731d6ae..4a3a1653638 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/4.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/4" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/4" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json index 71461879579..81442d50c0b 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/5.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/5" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/5" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json index f010f6302f3..3c7c585f3fc 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/6.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/6" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/6" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json index a875a23087e..ec79f0fdbc6 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/7.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/7" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/7" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json index 52ae041dcba..b975664ab57 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.hv/8.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.hv/8" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.hv/8" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json index 0fe9e8d4198..15d24a94b11 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/1.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/1" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/1" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json index 5a9cfe82db3..87b1f6681ea 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/2.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/2" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/2" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json index 5e590b1d536..105f63b2f9f 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/3.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/3" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/3" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json index bf5cc6887ac..a963851dac4 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/4.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/4" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/4" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json index f2182e0798f..afcb9360a7f 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/5.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/5" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/5" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json index c62b119ef47..e8bbef65052 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/6.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/6" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/6" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json index 1abd2281c34..d446c0ab07e 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/7.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/7" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/7" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json index 74b11732da1..a8c2bff041f 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.lv/8.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.lv/8" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.lv/8" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json index 0992c2b0e62..c5cb013db91 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/1.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/1" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/1" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json index 98b8927c77d..9d562311fcd 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/2.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/2" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/2" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json index 4e8641b1d73..bc7fe990d6a 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/3.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/3" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/3" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json index 999664cd5ec..f71f88b8754 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/4.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/4" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/4" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json index 189031744db..fa7a9290ee2 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/5.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/5" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/5" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json index fd57d72a93b..db09ca2c980 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/6.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/6" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/6" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json index a7aaadab915..f9f37acea92 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/7.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/7" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/7" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json index 6f866a9f358..eb19b580c8c 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/battery_pack.mv/8.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/battery_pack.mv/8" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/battery_pack.mv/8" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json b/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json index ceb151e4631..4520ce966c5 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/gravitation_engine.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/gravitation_engine" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/gravitation_engine" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json index 146b01ff541..ba66d6bcf85 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.hv.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller.hv" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller.hv" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json index cb12d37c8c7..7756d133119 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller.mv.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller.mv" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller.mv" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json index 88685746ea1..6adc3366721 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/1.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/1" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/1" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json index b706bee8dea..773d72486b3 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/2.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/2" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/2" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json index 42cfc1163ed..84672615549 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/3.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/3" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/3" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json index 09c0e640e3f..8813a70f808 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/4.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/4" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/4" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json index c14e2d92a8b..630e01487fb 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/5.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/5" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/5" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json index a29f7f2f623..137e8ffe04d 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/6.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/6" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/6" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json index 70e9ccf03a7..7447adc06f0 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/7.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/7" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/7" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json index 665e2c9445f..21dafdc834d 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/impeller_jetpack/8.json @@ -1,7 +1,6 @@ - -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/impeller_jetpack/8" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/impeller_jetpack/8" + } +} 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 8d8f2e26baa..9a0f438eb6e 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" - } + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nightvision_goggles" + } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json index adf361f20f9..91add94de79 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.advanced_chestplate.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/nms.advanced_chestplate" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.advanced_chestplate" + } +} 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 ef55ec5dca7..13ce1fd00a5 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" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.boots" + } +} 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 9b50a0fe137..b1df3c537c3 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" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.chestplate" + } +} 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 65b287a6a92..68dc953dc08 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" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.helmet" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json index 256fcdf4cb4..d6041295bf7 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/nms.leggins" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/nms.leggins" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json index 86d1126f1ec..ae527b67f10 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.advanced_chestplate.json @@ -1,6 +1,6 @@ { - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/qts.advanced_chestplate" - } + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.advanced_chestplate" + } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json index 86bee5d7e21..feea6bf8e20 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.boots.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/qts.boots" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.boots" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json index d501ab667f4..9b6a8ec4205 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.chestplate.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/qts.chestplate" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.chestplate" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json index a8317435192..3032e2a18c4 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.helmet.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/qts.helmet" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.helmet" + } +} diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json index 500c3fbe03e..4b5040d450a 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json @@ -1,6 +1,6 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gregtech:items/metaitems/qts.leggins" - } -} \ No newline at end of file +{ + "parent": "item/generated", + "textures": { + "layer0": "gregtech:items/metaitems/qts.leggins" + } +} diff --git a/src/test/java/gregtech/api/util/InventoryUtilsTest.java b/src/test/java/gregtech/api/util/InventoryUtilsTest.java index 957ac0231cf..03ff3190386 100644 --- a/src/test/java/gregtech/api/util/InventoryUtilsTest.java +++ b/src/test/java/gregtech/api/util/InventoryUtilsTest.java @@ -1,24 +1,28 @@ package gregtech.api.util; -import net.minecraft.init.*; -import net.minecraft.item.*; -import net.minecraft.nbt.*; -import net.minecraftforge.items.*; -import org.junit.*; -import org.junit.rules.*; - -import java.util.*; +import net.minecraft.init.Bootstrap; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagString; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import static org.junit.Assert.*; -public class InventoryUtilsTest -{ +public class InventoryUtilsTest { /** * Required. Without this all item-related operations will fail because registries haven't been initialized. */ @BeforeClass - public static void bootStrap() - { + public static void bootStrap() { Bootstrap.register(); } @@ -29,314 +33,295 @@ public static void bootStrap() public final ExpectedException thrown = ExpectedException.none(); @Test - public void simulateItemStackMerge_succeeds_for_inserting_single_stack_into_empty_one_slot_inventory() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack feathers = new ItemStack(Items.FEATHER, 64); + public void simulateItemStackMerge_succeeds_for_inserting_single_stack_into_empty_one_slot_inventory() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack feathers = new ItemStack(Items.FEATHER, 64); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(feathers), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(feathers), + handler + ); assertTrue( - "Merging one full stack into a single empty slot failed.", - result + "Merging one full stack into a single empty slot failed.", + result ); } @Test - public void simulateItemStackMerge_succeeds_for_inserting_two_half_stacks_into_empty_one_slot_inventory() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack feathers = new ItemStack(Items.FEATHER, 32); + public void simulateItemStackMerge_succeeds_for_inserting_two_half_stacks_into_empty_one_slot_inventory() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack feathers = new ItemStack(Items.FEATHER, 32); boolean result = - InventoryUtils.simulateItemStackMerge( - Arrays.asList(feathers, feathers), - handler - ); + InventoryUtils.simulateItemStackMerge( + Arrays.asList(feathers, feathers), + handler + ); assertTrue( - "Merging two half-stacks into an empty inventory with one slot failed.", - result + "Merging two half-stacks into an empty inventory with one slot failed.", + result ); } @Test - public void simulateItemStackMerge_succeeds_for_inserting_one_half_stack_into_inventory_with_one_half_stack() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack feathers = new ItemStack(Items.FEATHER, 32); + public void simulateItemStackMerge_succeeds_for_inserting_one_half_stack_into_inventory_with_one_half_stack() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack feathers = new ItemStack(Items.FEATHER, 32); handler.insertItem(0, feathers, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(feathers), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(feathers), + handler + ); assertTrue( - "Merging half a stack into an inventory with one slot containing half a stack of the same item failed.", - result + "Merging half a stack into an inventory with one slot containing half a stack of the same item failed.", + result ); } @Test - public void simulateItemStackMerge_succeeds_for_inserting_one_half_stack_into_inventory_with_two_three_quarter_stacks() - { - IItemHandler handler = new ItemStackHandler(2); - ItemStack feathers_32 = new ItemStack(Items.FEATHER, 32); - ItemStack feathers_48 = new ItemStack(Items.FEATHER, 48); + public void simulateItemStackMerge_succeeds_for_inserting_one_half_stack_into_inventory_with_two_three_quarter_stacks() { + IItemHandler handler = new ItemStackHandler(2); + ItemStack feathers_32 = new ItemStack(Items.FEATHER, 32); + ItemStack feathers_48 = new ItemStack(Items.FEATHER, 48); handler.insertItem(0, feathers_48, false); handler.insertItem(1, feathers_48, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(feathers_32), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(feathers_32), + handler + ); assertTrue( - "Merging half a stack into an inventory with two three-quarter stacks of the same item failed.", - result + "Merging half a stack into an inventory with two three-quarter stacks of the same item failed.", + result ); } @Test - public void simulateItemStackMerge_succeeds_for_inserting_one_half_stack_into_inventory_with_one_three_quarter_stack_and_one_empty_slot() - { - IItemHandler handler = new ItemStackHandler(2); - ItemStack feathers_32 = new ItemStack(Items.FEATHER, 32); - ItemStack feathers_48 = new ItemStack(Items.FEATHER, 48); + public void simulateItemStackMerge_succeeds_for_inserting_one_half_stack_into_inventory_with_one_three_quarter_stack_and_one_empty_slot() { + IItemHandler handler = new ItemStackHandler(2); + ItemStack feathers_32 = new ItemStack(Items.FEATHER, 32); + ItemStack feathers_48 = new ItemStack(Items.FEATHER, 48); handler.insertItem(0, feathers_48, false); handler.insertItem(1, feathers_48, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(feathers_32), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(feathers_32), + handler + ); assertTrue( - "Merging half a stack into an inventory with one three-quarter stack of the same item and one empty slot failed.", - result + "Merging half a stack into an inventory with one three-quarter stack of the same item and one empty slot failed.", + result ); } @Test - public void simulateItemStackMerge_fails_to_insert_items_into_a_full_inventory_with_no_common_items() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack feathers = new ItemStack(Items.FEATHER, 32); - ItemStack arrows = new ItemStack(Items.ARROW, 1); + public void simulateItemStackMerge_fails_to_insert_items_into_a_full_inventory_with_no_common_items() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack feathers = new ItemStack(Items.FEATHER, 32); + ItemStack arrows = new ItemStack(Items.ARROW, 1); handler.insertItem(0, feathers, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(arrows), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(arrows), + handler + ); assertFalse( - "Unexpectedly succeeded at merging an arrow into an inventory full of feathers.", - result + "Unexpectedly succeeded at merging an arrow into an inventory full of feathers.", + result ); } @Test - public void simulateItemStackMerge_fails_to_insert_items_into_a_full_inventory_with_common_items() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack inv_feathers = new ItemStack(Items.FEATHER, 64); - ItemStack more_feathers = new ItemStack(Items.FEATHER, 1); + public void simulateItemStackMerge_fails_to_insert_items_into_a_full_inventory_with_common_items() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack inv_feathers = new ItemStack(Items.FEATHER, 64); + ItemStack more_feathers = new ItemStack(Items.FEATHER, 1); handler.insertItem(0, inv_feathers, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(more_feathers), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(more_feathers), + handler + ); assertFalse( - "Unexpectedly succeeded at merging feathers into an inventory full of feathers.", - result + "Unexpectedly succeeded at merging feathers into an inventory full of feathers.", + result ); } @Test - public void simulateItemStackMerge_respects_different_NBT_tags_as_different_items() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack feathers = new ItemStack(Items.FEATHER, 1); - ItemStack special_feathers = new ItemStack(Items.FEATHER, 1); + public void simulateItemStackMerge_respects_different_NBT_tags_as_different_items() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack feathers = new ItemStack(Items.FEATHER, 1); + ItemStack special_feathers = new ItemStack(Items.FEATHER, 1); special_feathers.setTagInfo("Foo", new NBTTagString("Test")); handler.insertItem(0, feathers, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(special_feathers), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(special_feathers), + handler + ); assertFalse( - "Unexpectedly succeeded at merging feathers with NBT tags into a stack of plain feathers.", - result + "Unexpectedly succeeded at merging feathers with NBT tags into a stack of plain feathers.", + result ); } @Test - public void simulateItemStackMerge_respects_different_damage_values_as_different_items() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack feathers = new ItemStack(Items.FEATHER, 1); - ItemStack special_feathers = new ItemStack(Items.FEATHER, 1); + public void simulateItemStackMerge_respects_different_damage_values_as_different_items() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack feathers = new ItemStack(Items.FEATHER, 1); + ItemStack special_feathers = new ItemStack(Items.FEATHER, 1); special_feathers.setItemDamage(1); handler.insertItem(0, feathers, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(special_feathers), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(special_feathers), + handler + ); assertFalse( - "Unexpectedly succeeded at merging damaged feathers into a stack of plain feathers.", - result + "Unexpectedly succeeded at merging damaged feathers into a stack of plain feathers.", + result ); } @Test - public void simulateItemStackMerge_respects_unstackable_but_otherwise_identical_items() - { - IItemHandler handler = new ItemStackHandler(1); - ItemStack pickaxe = new ItemStack(Items.IRON_PICKAXE, 1); - ItemStack anotherPickaxe = new ItemStack(Items.IRON_PICKAXE, 1); + public void simulateItemStackMerge_respects_unstackable_but_otherwise_identical_items() { + IItemHandler handler = new ItemStackHandler(1); + ItemStack pickaxe = new ItemStack(Items.IRON_PICKAXE, 1); + ItemStack anotherPickaxe = new ItemStack(Items.IRON_PICKAXE, 1); assertFalse(pickaxe.isStackable()); handler.insertItem(0, pickaxe, false); boolean result = - InventoryUtils.simulateItemStackMerge( - Collections.singletonList(anotherPickaxe), - handler - ); + InventoryUtils.simulateItemStackMerge( + Collections.singletonList(anotherPickaxe), + handler + ); assertFalse( - "Unexpectedly succeeded at merging a pickaxe into another one.", - result + "Unexpectedly succeeded at merging a pickaxe into another one.", + result ); } @Test - public void normalizeItemStack_returns_empty_list_for_single_empty_stack() - { + public void normalizeItemStack_returns_empty_list_for_single_empty_stack() { List result = InventoryUtils.normalizeItemStack(ItemStack.EMPTY); assertTrue( - "Unexpectedly got results when normalizing an empty ItemStack", - result.isEmpty() + "Unexpectedly got results when normalizing an empty ItemStack", + result.isEmpty() ); } @Test - public void normalizeItemStack_returns_single_element_list_for_a_single_already_normal_stack() - { - ItemStack stack = new ItemStack(Items.ENDER_PEARL, 16); + public void normalizeItemStack_returns_single_element_list_for_a_single_already_normal_stack() { + ItemStack stack = new ItemStack(Items.ENDER_PEARL, 16); List result = InventoryUtils.normalizeItemStack(stack); assertFalse( - "Unexpectedly got no results when normalizing an already normal ItemStack", - result.isEmpty() + "Unexpectedly got no results when normalizing an already normal ItemStack", + result.isEmpty() ); assertEquals( - "Unexpectedly got wrong number of resulting stacks when normalizing an already normal ItemStack", - 1, result.size() + "Unexpectedly got wrong number of resulting stacks when normalizing an already normal ItemStack", + 1, result.size() ); assertTrue( - "ItemStack was modified when it didn't need to be", - ItemStack.areItemStacksEqual(stack, result.get(0)) + "ItemStack was modified when it didn't need to be", + ItemStack.areItemStacksEqual(stack, result.get(0)) ); } @Test - public void normalizeItemStack_returns_normalized_stacks_for_an_abnormal_stack() - { - ItemStack stack = new ItemStack(Items.ENDER_PEARL, 45); + public void normalizeItemStack_returns_normalized_stacks_for_an_abnormal_stack() { + ItemStack stack = new ItemStack(Items.ENDER_PEARL, 45); List result = InventoryUtils.normalizeItemStack(stack); assertFalse( - "Unexpectedly got no results when normalizing an abnormal stack", - result.isEmpty() + "Unexpectedly got no results when normalizing an abnormal stack", + result.isEmpty() ); assertEquals( - "Unexpectedly got wrong number of resulting stacks when normalizing an abnormal ItemStack", - 3, result.size() + "Unexpectedly got wrong number of resulting stacks when normalizing an abnormal ItemStack", + 3, result.size() ); - ItemStack expectedFull = new ItemStack(Items.ENDER_PEARL, 16); + ItemStack expectedFull = new ItemStack(Items.ENDER_PEARL, 16); ItemStack expectedPartial = new ItemStack(Items.ENDER_PEARL, 13); assertTrue("First item stack does not match expected full stack", - ItemStack.areItemStacksEqual(expectedFull, result.get(0))); + ItemStack.areItemStacksEqual(expectedFull, result.get(0))); assertTrue("Second item stack does not match expected full stack", - ItemStack.areItemStacksEqual(expectedFull, result.get(1))); + ItemStack.areItemStacksEqual(expectedFull, result.get(1))); assertTrue("Third item stack does not match expected partial stack", - ItemStack.areItemStacksEqual(expectedPartial, result.get(2))); + ItemStack.areItemStacksEqual(expectedPartial, result.get(2))); } @Test - public void apportionStack_throws_AssertionError_when_supplied_stack_is_empty() - { + public void apportionStack_throws_AssertionError_when_supplied_stack_is_empty() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Cannot apportion an empty stack."); InventoryUtils.apportionStack(ItemStack.EMPTY, 64); } @Test - public void apportionStack_throws_AssertionError_when_maxCount_is_zero() - { + public void apportionStack_throws_AssertionError_when_maxCount_is_zero() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Count must be non-zero and positive."); InventoryUtils.apportionStack(new ItemStack(Items.ARROW, 1), 0); } @Test - public void apportionStack_throws_AssertionError_when_maxCount_is_negative() - { + public void apportionStack_throws_AssertionError_when_maxCount_is_negative() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Count must be non-zero and positive."); InventoryUtils.apportionStack(new ItemStack(Items.ARROW, 1), -1); } @Test - public void apportionStack_splits_evenly_divisible_stack() - { + public void apportionStack_splits_evenly_divisible_stack() { ItemStack oversized = new ItemStack(Items.ENDER_PEARL, 64); - ItemStack normal = new ItemStack(Items.ENDER_PEARL, 16); + ItemStack normal = new ItemStack(Items.ENDER_PEARL, 16); List result = InventoryUtils.apportionStack(oversized, 16); assertFalse(result.isEmpty()); assertEquals(4, result.size()); - for(ItemStack stack : result) - { + for (ItemStack stack : result) { assertTrue(ItemStack.areItemStacksEqual(stack, normal)); } } @Test - public void apportionStack_splits_unevenly_divisible_stack_with_remainder_at_end() - { + public void apportionStack_splits_unevenly_divisible_stack_with_remainder_at_end() { ItemStack oversized = new ItemStack(Items.ENDER_PEARL, 45); - ItemStack normal = new ItemStack(Items.ENDER_PEARL, 16); + ItemStack normal = new ItemStack(Items.ENDER_PEARL, 16); ItemStack remainder = new ItemStack(Items.ENDER_PEARL, 13); List result = InventoryUtils.apportionStack(oversized, 16); @@ -350,8 +335,7 @@ public void apportionStack_splits_unevenly_divisible_stack_with_remainder_at_end } @Test - public void deepCopy_retains_empty_stacks_when_requested() - { + public void deepCopy_retains_empty_stacks_when_requested() { IItemHandler inventory = new ItemStackHandler(2); inventory.insertItem(1, new ItemStack(Items.FEATHER, 1), false); @@ -367,10 +351,9 @@ public void deepCopy_retains_empty_stacks_when_requested() } @Test - public void deepCopy_discards_empty_stacks_when_requested() - { + public void deepCopy_discards_empty_stacks_when_requested() { IItemHandler inventory = new ItemStackHandler(2); - ItemStack feather = new ItemStack(Items.FEATHER, 1); + ItemStack feather = new ItemStack(Items.FEATHER, 1); inventory.insertItem(1, feather, false); assertTrue(inventory.getStackInSlot(0).isEmpty()); From 39ad2b93b2cb8d65f1b121b54660350c9c38a40c Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sun, 29 Aug 2021 20:19:35 -0500 Subject: [PATCH 48/56] fix merge issues --- .../java/gregtech/common/EventHandlers.java | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index 39213b65073..f0ab5fd45ec 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -1,10 +1,7 @@ package gregtech.common; import gregtech.api.GTValues; -import gregtech.common.blocks.BlockConcrete; -import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.items.armor.ArmorLogicSuite; @@ -16,32 +13,20 @@ import gregtech.api.util.input.Keybinds; import gregtech.common.items.Armor.PowerlessJetpack; import gregtech.common.items.MetaItems; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; -import net.minecraft.util.MovementInput; -import net.minecraft.util.MovementInputFromOptions; -import net.minecraft.util.math.BlockPos; import net.minecraftforge.event.entity.living.EnderTeleportEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.common.config.Config; -import net.minecraftforge.common.config.ConfigManager; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.event.entity.living.LivingFallEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.Mod; 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; From 3d49b2120b2a356c05c8d2ec81c53e6b150386e7 Mon Sep 17 00:00:00 2001 From: BraggestSage833 <46819052+BraggestSage833@users.noreply.github.com> Date: Sun, 29 Aug 2021 21:40:18 -0400 Subject: [PATCH 49/56] Add duct tape to recipes --- src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java index 61f40ec8c79..bd188d5e243 100644 --- a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java @@ -159,12 +159,11 @@ public static void init() { .buildAndRegister(); //armor -//TODO add tape when it is added // Nightvision Goggles ASSEMBLER_RECIPES.recipeBuilder().duration(400).EUt(128) .inputs(MetaBlocks.TRANSPARENT_CASING.getItemVariant(BlockTransparentCasing.CasingType.REINFORCED_GLASS)) .inputs(EMITTER_MV.getStackForm(2)) - //.inputs(INSULATING_TAPE.getStackForm(2)) + .inputs(DUCT_TAPE.getStackForm(2)) .inputs(BATTERY_HV_LITHIUM.getStackForm()) .outputs(NIGHTVISION_GOGGLES.getStackForm()) .circuitMeta(3) @@ -209,7 +208,7 @@ public static void init() { .input(circuit, Advanced, 2) .inputs(NANO_MUSCLE_SUITE_CHESTPLATE.getStackForm()) .inputs(ADVANCED_IMPELLER_JETPACK.getStackForm()) - //.inputs(INSULATING_TAPE.getStackForm(4)) + .inputs(DUCT_TAPE.getStackForm(2)) .inputs(POWER_INTEGRATED_CIRCUIT.getStackForm(4)) .outputs(ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm()) .buildAndRegister(); From f4e58eb3d7ff078d87801ffc44c96c0c02fb879b Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 16:11:31 -0500 Subject: [PATCH 50/56] clean up configs a bit --- .../gregtech/api/items/armor/ArmorUtils.java | 19 ++++++++++--------- .../java/gregtech/common/ConfigHolder.java | 14 ++++++-------- .../common/items/Armor/MetaArmor.java | 2 +- .../items/Armor/NightvisionGoggles.java | 4 ++-- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/main/java/gregtech/api/items/armor/ArmorUtils.java b/src/main/java/gregtech/api/items/armor/ArmorUtils.java index 71ef5c40750..d1d2fa85903 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorUtils.java +++ b/src/main/java/gregtech/api/items/armor/ArmorUtils.java @@ -214,22 +214,23 @@ private Pair getStringCoord(int index) { int windowHeight = new ScaledResolution(mc).getScaledHeight(); int windowWidth = new ScaledResolution(mc).getScaledWidth(); int stringWidth = mc.fontRenderer.getStringWidth(stringList.get(index)); - switch (ConfigHolder.UnofficialOptions.armorHud.hudLocation) { + ConfigHolder.UnofficialOptions.ArmorHud configs = ConfigHolder.U.equipment.armorHud; + switch (configs.hudLocation) { case 1: - posX = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX; - posY = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetY + (fontHeight * index); + posX = 1 + configs.hudOffsetX; + posY = 1 + configs.hudOffsetY + (fontHeight * index); break; case 2: - posX = windowWidth - (1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX) - stringWidth; - posY = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetY + (fontHeight * index); + posX = windowWidth - (1 + configs.hudOffsetX) - stringWidth; + posY = 1 + configs.hudOffsetY + (fontHeight * index); break; case 3: - posX = 1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX; - posY = windowHeight - fontHeight * (stringAmount - index) - 1 - ConfigHolder.UnofficialOptions.armorHud.hudOffsetY; + posX = 1 + configs.hudOffsetX; + posY = windowHeight - fontHeight * (stringAmount - index) - 1 - configs.hudOffsetY; break; case 4: - posX = windowWidth - (1 + ConfigHolder.UnofficialOptions.armorHud.hudOffsetX) - stringWidth; - posY = windowHeight - fontHeight * (stringAmount - index) - 1 - ConfigHolder.UnofficialOptions.armorHud.hudOffsetY; + posX = windowWidth - (1 + ConfigHolder.U.equipment.armorHud.hudOffsetX) - stringWidth; + posY = windowHeight - fontHeight * (stringAmount - index) - 1 - configs.hudOffsetY; break; default: throw new IllegalArgumentException(); diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index 61f3cdbb2c5..19b65684ff2 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -169,15 +169,14 @@ public static class UnofficialOptions { @Config.Name("GregTech 6 Options") public GT6 GT6 = new GT6(); - @Config.Comment("Config category Armor hud") - @Config.Name("Hud Location") - public static ArmorHud armorHud = new ArmorHud(); - - @Config.Comment("Config category for energy compatibility features") @Config.Name("Energy Compatibility Options") public EnergyCompatibility energyOptions = new EnergyCompatibility(); + @Config.Comment({"Configs for Armor and Tools", "Tiers are from ULV-0 to MAX-14"}) + @Config.Name("Armor Options") + public Equipment equipment = new Equipment(); + @Config.Comment("Client configs for file path, rendering and so on") @Config.Name("Client Options") @Config.RequiresMcRestart @@ -294,9 +293,6 @@ public static class ArmorHud { } - @Config.Comment({"Configs for Armor and Tools", "Tiers are from ULV-0 to MAX-14"}) - public static Equipment equipment = new Equipment(); - public static class Equipment { @Config.Name("Nightvision Goggles") public NightvisionGoggles nightvisionGoggles = new NightvisionGoggles(); @@ -320,6 +316,8 @@ public static class Equipment { public BatpackMv batpackMv = new BatpackMv(); @Config.Name("Batpack HV") public BatpackHv batpackHv = new BatpackHv(); + @Config.Comment("Armor HUD Location") + public ArmorHud armorHud = new ArmorHud(); } public static class NightvisionGoggles { diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index fa47e72d2d1..7bfecc2a525 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -8,7 +8,7 @@ public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem> { @Override public void registerSubItems() { - ConfigHolder.UnofficialOptions.Equipment e = ConfigHolder.UnofficialOptions.equipment; + ConfigHolder.UnofficialOptions.Equipment e = ConfigHolder.U.equipment; MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); MetaItems.NANO_MUSCLE_SUITE_LEGGINS = addItem(1, "nms.leggins").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); diff --git a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java index e16aab89d4d..c216590aead 100644 --- a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java +++ b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java @@ -25,7 +25,7 @@ public class NightvisionGoggles extends ArmorLogicSuite { public NightvisionGoggles() { - super(ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.energyPerUse, ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.capacity, ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.voltageTier, EntityEquipmentSlot.HEAD); + super(ConfigHolder.U.equipment.nightvisionGoggles.energyPerUse, ConfigHolder.U.equipment.nightvisionGoggles.capacity, ConfigHolder.U.equipment.nightvisionGoggles.voltageTier, EntityEquipmentSlot.HEAD); } public NightvisionGoggles(int energyPerUse, int capacity, int voltageTier, EntityEquipmentSlot slot) { @@ -73,7 +73,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, true)); } ret = true; - item.discharge((energyPerUse / 100), ConfigHolder.UnofficialOptions.equipment.nightvisionGoggles.voltageTier, true, false, false); + item.discharge((energyPerUse / 100), ConfigHolder.U.equipment.nightvisionGoggles.voltageTier, true, false, false); } if (!world.isRemote && toggleTimer > 0) { From 2f2805cc5b497cf7087935bdb6379d20661f1ef9 Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 16:18:56 -0500 Subject: [PATCH 51/56] clean up batpack configs, change some defaults --- .../api/items/armor/NanoMuscleSuite.java | 3 +- .../java/gregtech/common/ConfigHolder.java | 37 +++++-------------- .../common/items/Armor/MetaArmor.java | 7 ++-- 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java index e4c07f526d5..396967ca748 100644 --- a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java +++ b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java @@ -6,6 +6,7 @@ import gregtech.api.capability.IElectricItem; import gregtech.api.util.GTUtility; import gregtech.api.util.input.EnumKey; +import gregtech.common.ConfigHolder; import gregtech.common.items.MetaItems; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -27,7 +28,7 @@ public class NanoMuscleSuite extends ArmorLogicSuite { public NanoMuscleSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity) { - super(energyPerUse, capacity, GTValues.HV, slot); + super(energyPerUse, capacity, ConfigHolder.U.equipment.nanoSuit.voltageTier, slot); } @Override diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index 19b65684ff2..d0b5f18b6af 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -310,12 +310,9 @@ public static class Equipment { public AdvImpellerJetpack advImpellerJetpack = new AdvImpellerJetpack(); @Config.Name("Semifluid Jetpack") public SemiFluidJetpack semiFluidJetpack = new SemiFluidJetpack(); - @Config.Name("Batpack LV") - public BatpackLv batpackLv = new BatpackLv(); - @Config.Name("Batpack MV") - public BatpackMv batpackMv = new BatpackMv(); - @Config.Name("Batpack HV") - public BatpackHv batpackHv = new BatpackHv(); + @Config.Name("BatPacks") + @Config.RequiresMcRestart + public Batpack batpack = new Batpack(); @Config.Comment("Armor HUD Location") public ArmorHud armorHud = new ArmorHud(); } @@ -383,7 +380,7 @@ public static class AdvQuarkTechSuit { public static class ImpellerJetpack { @Config.RangeInt(min = 0, max = 14) @Config.RequiresMcRestart - public int voltageTier = 3; + public int voltageTier = 2; @Config.RangeInt(min = 0) @Config.RequiresMcRestart public int capacity = 2520000; @@ -395,7 +392,7 @@ public static class ImpellerJetpack { public static class AdvImpellerJetpack { @Config.RangeInt(min = 0, max = 14) @Config.RequiresMcRestart - public int voltageTier = 4; + public int voltageTier = 3; @Config.RangeInt(min = 0) @Config.RequiresMcRestart public int capacity = 11400000; @@ -413,31 +410,15 @@ public static class SemiFluidJetpack { public int capacity = 12000; } - public static class BatpackLv { - @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 1; + public static class Batpack { @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 600000; - } + public int capacityLV = 600000; - public static class BatpackMv { - @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 2; @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 2400000; - } + public int capacityMV = 2400000; - public static class BatpackHv { - @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 3; @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 9600000; + public int capacityHV = 9600000; } } } diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index 7bfecc2a525..b27f5d986d5 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -1,5 +1,6 @@ package gregtech.common.items.Armor; +import gregtech.api.GTValues; import gregtech.api.items.armor.*; import gregtech.common.ConfigHolder; import gregtech.common.items.MetaItems; @@ -22,9 +23,9 @@ public void registerSubItems() { MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack(e.semiFluidJetpack.capacity, e.semiFluidJetpack.voltageTier)); MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(e.impellerJetpack.energyPerUse, e.impellerJetpack.capacity, e.impellerJetpack.voltageTier)); - MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpackLv.capacity, e.batpackLv.voltageTier)); - MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpackMv.capacity, e.batpackMv.voltageTier)); - MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpackHv.capacity, e.batpackHv.voltageTier)); + MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpack.capacityLV, GTValues.LV)); + MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)); + MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)); MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQurakTechSuite()); From 71bc84a45081d2fb2544b6ff49974bb0231cbc51 Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 17:07:17 -0500 Subject: [PATCH 52/56] heavily clean up armor configs --- .../items/armor/AdvancedNanoMuscleSuite.java | 5 +- .../items/armor/AdvancedQurakTechSuite.java | 19 +-- .../api/items/armor/ArmorLogicSuite.java | 4 +- .../api/items/armor/ArmorMetaItem.java | 6 + .../api/items/armor/NanoMuscleSuite.java | 17 ++- .../api/items/armor/QuarkTechSuite.java | 3 +- .../java/gregtech/common/ConfigHolder.java | 124 ++++-------------- .../common/items/Armor/AdvancedJetpack.java | 2 +- .../gregtech/common/items/Armor/Jetpack.java | 2 +- .../common/items/Armor/MetaArmor.java | 53 ++++---- .../items/Armor/NightvisionGoggles.java | 7 +- .../common/items/Armor/PowerlessJetpack.java | 30 ++--- 12 files changed, 93 insertions(+), 179 deletions(-) diff --git a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java index 560974320f4..6c2816bf5b7 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java @@ -26,9 +26,8 @@ public class AdvancedNanoMuscleSuite extends NanoMuscleSuite { private int cachedSlotId = -1; - - public AdvancedNanoMuscleSuite() { - super(EntityEquipmentSlot.CHEST, 5000, 11400000); + public AdvancedNanoMuscleSuite(int energyPerUse, long capacity, int tier) { + super(EntityEquipmentSlot.CHEST, energyPerUse, capacity, tier); } @Override diff --git a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java index c69c4c9c1d0..8fa1be2ee3a 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java +++ b/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java @@ -1,6 +1,5 @@ package gregtech.api.items.armor; -import gregtech.api.GTValues; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.util.GTUtility; @@ -30,18 +29,18 @@ public class AdvancedQurakTechSuite extends QuarkTechSuite { private int cachedSlotId = -1; - public AdvancedQurakTechSuite() { - super(EntityEquipmentSlot.CHEST, 10000, 100000000, GTValues.IV); + public AdvancedQurakTechSuite(int energyPerUse, long capacity, int tier) { + super(EntityEquipmentSlot.CHEST, energyPerUse, capacity, tier); } @Override public void onArmorTick(World world, EntityPlayer player, ItemStack item) { IElectricItem cont = item.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); NBTTagCompound data = GTUtility.getOrCreateNbtCompound(item); - boolean hoverMode = data.hasKey("Hover") ? data.getBoolean("Hover") : false; - boolean flyEnabled = data.hasKey("FlyMode") ? data.getBoolean("FlyMode") : false; + boolean hoverMode = data.hasKey("Hover") && data.getBoolean("Hover"); + boolean flyEnabled = data.hasKey("FlyMode") && data.getBoolean("FlyMode"); byte toggleTimer = data.hasKey("ToggleTimer") ? data.getByte("ToggleTimer") : 0; - boolean canShare = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; + boolean canShare = data.hasKey("CanShare") && data.getBoolean("CanShare"); boolean result = false; float energyUsageMultiplier = 1.0F; @@ -213,7 +212,7 @@ public void addInfo(ItemStack itemStack, List lines) { public ActionResult onRightClick(World world, EntityPlayer player, EnumHand hand) { if (player.getHeldItem(hand).getItem() instanceof ArmorMetaItem && player.isSneaking()) { NBTTagCompound data = GTUtility.getOrCreateNbtCompound(player.getHeldItem(hand)); - boolean canShareEnergy = data.hasKey("CanShare") ? data.getBoolean("CanShare") : false; + boolean canShareEnergy = data.hasKey("CanShare") && data.getBoolean("CanShare"); canShareEnergy = !canShareEnergy; String locale = "metaarmor.energy_share." + (canShareEnergy ? "enable" : "disable"); @@ -269,11 +268,7 @@ public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack @Override public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - if (source == DamageSource.FALL || source == DamageSource.DROWN || source == DamageSource.STARVE) { - return false; - } else { - return true; - } + return source != DamageSource.FALL && source != DamageSource.DROWN && source != DamageSource.STARVE; } @Override diff --git a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java index 13c6c2ec7fc..f0b96f50b81 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java +++ b/src/main/java/gregtech/api/items/armor/ArmorLogicSuite.java @@ -27,12 +27,12 @@ public abstract class ArmorLogicSuite implements ISpecialArmorLogic { protected final int energyPerUse; protected final int tier; - protected final int maxCapacity; + protected final long maxCapacity; protected final EntityEquipmentSlot SLOT; @SideOnly(Side.CLIENT) protected ArmorUtils.ModularHUD HUD; - protected ArmorLogicSuite(int energyPerUse, int maxCapacity, int tier, EntityEquipmentSlot slot) { + protected ArmorLogicSuite(int energyPerUse, long maxCapacity, int tier, EntityEquipmentSlot slot) { this.energyPerUse = energyPerUse; this.maxCapacity = maxCapacity; this.tier = tier; diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index 7ab95276c20..287b3fbe538 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -176,6 +176,12 @@ public ArmorMetaValueItem addComponents(IItemComponent... stats) { super.addComponents(stats); return this; } + + @Override + public ArmorMetaValueItem setModelAmount(int modelAmount) { + super.setModelAmount(modelAmount); + return this; + } } @Override diff --git a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java index 396967ca748..9336ea41a8b 100644 --- a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java +++ b/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java @@ -1,12 +1,10 @@ package gregtech.api.items.armor; - import gregtech.api.GTValues; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.util.GTUtility; import gregtech.api.util.input.EnumKey; -import gregtech.common.ConfigHolder; import gregtech.common.items.MetaItems; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -27,8 +25,8 @@ public class NanoMuscleSuite extends ArmorLogicSuite { - public NanoMuscleSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity) { - super(energyPerUse, capacity, ConfigHolder.U.equipment.nanoSuit.voltageTier, slot); + public NanoMuscleSuite(EntityEquipmentSlot slot, int energyPerUse, long maxCapacity, int tier) { + super(energyPerUse, maxCapacity, tier, slot); } @Override @@ -52,7 +50,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { } } - if (nightvision && !world.isRemote && item.getCharge() >= (energyPerUse / 100)) { + if (nightvision && !world.isRemote && item != null && item.getCharge() >= (energyPerUse / 100)) { BlockPos pos = new BlockPos((int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ)); int skylight = player.getEntityWorld().getLightFromNeighbors(pos); if (skylight > 8) { @@ -88,8 +86,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { } public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, EntityEquipmentSlot equipmentSlot) { - if (source == DamageSource.FALL) return true; - return false; + return source == DamageSource.FALL; } @Override @@ -97,7 +94,7 @@ public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack IElectricItem container = armor.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); int damageLimit = Integer.MAX_VALUE; if (source == DamageSource.FALL && this.getEquipmentSlot(armor) == EntityEquipmentSlot.FEET) { - if (energyPerUse > 0) { + if (energyPerUse > 0 && container != null) { damageLimit = (int) Math.min(damageLimit, 25.0 * container.getCharge() / energyPerUse); } return new ArmorProperties(10, (damage < 8.0) ? 1.0 : 0.875, damageLimit); @@ -113,7 +110,9 @@ public EntityEquipmentSlot getEquipmentSlot(ItemStack itemStack) { @Override public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, EntityEquipmentSlot equipmentSlot) { IElectricItem item = itemStack.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); - item.discharge(energyPerUse * damage, item.getTier(), true, false, false); + if (item != null) { + item.discharge((long) energyPerUse * damage, item.getTier(), true, false, false); + } } @Override diff --git a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java index 2cf53acbc8f..eb7815c4704 100644 --- a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java +++ b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java @@ -1,6 +1,5 @@ package gregtech.api.items.armor; - import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.util.GTUtility; @@ -35,7 +34,7 @@ public class QuarkTechSuite extends ArmorLogicSuite { protected static final Map potionRemovalCost = new IdentityHashMap<>(); private float charge = 0.0F; - public QuarkTechSuite(EntityEquipmentSlot slot, int energyPerUse, int capacity, int tier) { + public QuarkTechSuite(EntityEquipmentSlot slot, int energyPerUse, long capacity, int tier) { super(energyPerUse, capacity, tier, slot); potionRemovalCost.put(MobEffects.POISON, 10000); potionRemovalCost.put(MobEffects.WITHER, 25000); diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index d0b5f18b6af..3bbb9b14429 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -294,129 +294,51 @@ public static class ArmorHud { } public static class Equipment { - @Config.Name("Nightvision Goggles") - public NightvisionGoggles nightvisionGoggles = new NightvisionGoggles(); - @Config.Name("NanoMuscle Suit") - public NanoSuit nanoSuit = new NanoSuit(); - @Config.Name("Advanced NanoMuscle Suit") - public AdvNanoSuit advNanoSuit = new AdvNanoSuit(); - @Config.Name("QuarkTech Suit") - public QuarkTechSuit quarkTechSuit = new QuarkTechSuit(); - @Config.Name("Advanced QuarkTech Suit") - public AdvQuarkTechSuit advQuarkTechSuit = new AdvQuarkTechSuit(); - @Config.Name("Impeller Jetpack") - public ImpellerJetpack impellerJetpack = new ImpellerJetpack(); - @Config.Name("Advanced Impeller Jetpack") - public AdvImpellerJetpack advImpellerJetpack = new AdvImpellerJetpack(); - @Config.Name("Semifluid Jetpack") - public SemiFluidJetpack semiFluidJetpack = new SemiFluidJetpack(); - @Config.Name("BatPacks") - @Config.RequiresMcRestart - public Batpack batpack = new Batpack(); - @Config.Comment("Armor HUD Location") - public ArmorHud armorHud = new ArmorHud(); - } - - public static class NightvisionGoggles { + @Config.Comment("NightVision Goggles Voltage Tier. Default: 2 (LV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 2; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 400000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 3600; - } + public int voltageTierNightVision = 2; - public static class NanoSuit { + @Config.Comment("NanoSuit Voltage Tier. Default: 3 (MV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 3; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 1600000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 5000; - } + public int voltageTierNanoSuit = 3; - public static class AdvNanoSuit { + @Config.Comment("Advanced NanoSuit Chestplate Voltage Tier. Default: 4 (EV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 6; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 11400000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 5000; - } + public int voltageTierAdvNanoSuit = 4; - public static class QuarkTechSuit { + @Config.Comment("QuarkTech Suit Voltage Tier. Default: 5 (IV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 5; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 8000000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 10000; - } + public int voltageTierQuarkTech = 5; - public static class AdvQuarkTechSuit { + @Config.Comment("Advanced QuarkTech Suit Chestplate Voltage Tier. Default: 5 (IV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 6; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 100000000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 10000; - } + public int voltageTierAdvQuarkTech = 5; - public static class ImpellerJetpack { + @Config.Comment("Impeller Jetpack Voltage Tier. Default: 2 (MV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 2; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 2520000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 125; - } + public int voltageTierImpeller = 2; - public static class AdvImpellerJetpack { + @Config.Comment("Advanced Impeller Jetpack Voltage Tier. Default: 3 (HV)") @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 3; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 11400000; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int energyPerUse = 512; - } + public int voltageTierAdvImpeller = 3; - public static class SemiFluidJetpack { - @Config.RangeInt(min = 0, max = 14) - @Config.RequiresMcRestart - public int voltageTier = 2; - @Config.RangeInt(min = 0) - @Config.RequiresMcRestart - public int capacity = 12000; + @Config.Name("BatPack Options") + public BatPack batpack = new BatPack(); + + @Config.Comment("Armor HUD Location") + public ArmorHud armorHud = new ArmorHud(); } - public static class Batpack { + public static class BatPack { + @Config.Comment("Total LV BatPack capacity. Default: 600,000") @Config.RangeInt(min = 0) public int capacityLV = 600000; + @Config.Comment("Total MV BatPack capacity. Default: 2,400,000") @Config.RangeInt(min = 0) public int capacityMV = 2400000; + @Config.Comment("Total HV BatPack capacity. Default: 9,600,000") @Config.RangeInt(min = 0) public int capacityHV = 9600000; } diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java index 95d447fff9f..6391723ac33 100644 --- a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java +++ b/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java @@ -22,7 +22,7 @@ public class AdvancedJetpack extends Jetpack { - public AdvancedJetpack(int energyPerUse, int capacity, int tier) { + public AdvancedJetpack(int energyPerUse, long capacity, int tier) { super(energyPerUse, capacity, tier); } diff --git a/src/main/java/gregtech/common/items/Armor/Jetpack.java b/src/main/java/gregtech/common/items/Armor/Jetpack.java index d158f6b75da..1a5697f53a3 100644 --- a/src/main/java/gregtech/common/items/Armor/Jetpack.java +++ b/src/main/java/gregtech/common/items/Armor/Jetpack.java @@ -29,7 +29,7 @@ public class Jetpack extends ArmorLogicSuite { - public Jetpack(int energyPerUse, int capacity, int tier) { + public Jetpack(int energyPerUse, long capacity, int tier) { super(energyPerUse, capacity, tier, EntityEquipmentSlot.CHEST); } diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index b27f5d986d5..ecbb434c86a 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -7,37 +7,38 @@ import net.minecraft.inventory.EntityEquipmentSlot; public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem> { + @Override public void registerSubItems() { ConfigHolder.UnofficialOptions.Equipment e = ConfigHolder.U.equipment; - MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); - MetaItems.NANO_MUSCLE_SUITE_LEGGINS = addItem(1, "nms.leggins").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); - MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); - MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(3, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, e.nanoSuit.energyPerUse, e.nanoSuit.capacity)); - - MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); - MetaItems.QUARK_TECH_SUITE_LEGGINS = addItem(5, "qts.leggins").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); - MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); - MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(7, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, e.quarkTechSuit.energyPerUse, e.quarkTechSuit.capacity, e.quarkTechSuit.voltageTier)); - - MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack(e.semiFluidJetpack.capacity, e.semiFluidJetpack.voltageTier)); - MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(e.impellerJetpack.energyPerUse, e.impellerJetpack.capacity, e.impellerJetpack.voltageTier)); - - MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpack.capacityLV, GTValues.LV)); - MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)); - MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)); - - MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQurakTechSuite()); - MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite()); - MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(e.advImpellerJetpack.energyPerUse, e.advImpellerJetpack.capacity, e.advImpellerJetpack.voltageTier)); + int energyPerUse = 5000; + int tier = e.voltageTierNanoSuit; + long maxCapacity = (long) Math.max(1, Math.pow(4, tier)); + MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)); + MetaItems.NANO_MUSCLE_SUITE_LEGGINS = addItem(1, "nms.leggins").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)); + MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)); + MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(3, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)); + + energyPerUse = 10000; + tier = e.voltageTierQuarkTech; + maxCapacity = (long) Math.max(1, Math.pow(4, tier)); + MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)); + MetaItems.QUARK_TECH_SUITE_LEGGINS = addItem(5, "qts.leggins").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)); + MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)); + MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(7, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)); + + MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); + MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(125, 2520000L * (long) Math.max(1, Math.pow(4, e.voltageTierImpeller - 2)), e.voltageTierImpeller)).setModelAmount(8); + + MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpack.capacityLV, GTValues.LV)).setModelAmount(8); + MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)).setModelAmount(8); + MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)).setModelAmount(8); + + MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQurakTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech)), e.voltageTierAdvQuarkTech)); + MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit)), e.voltageTierAdvNanoSuit)); + MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(512, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvImpeller - 3)), e.voltageTierAdvImpeller)); MetaItems.NIGHTVISION_GOGGLES = addItem(16, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()); - - MetaItems.IMPELLER_JETPACK.setModelAmount(8); - MetaItems.BATPACK_LV.setModelAmount(8); - MetaItems.BATPACK_MV.setModelAmount(8); - MetaItems.BATPACK_HV.setModelAmount(8); - } } diff --git a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java index c216590aead..0ecdb1f3418 100644 --- a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java +++ b/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java @@ -1,6 +1,5 @@ package gregtech.common.items.Armor; - import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; import gregtech.api.items.armor.ArmorLogicSuite; @@ -25,10 +24,10 @@ public class NightvisionGoggles extends ArmorLogicSuite { public NightvisionGoggles() { - super(ConfigHolder.U.equipment.nightvisionGoggles.energyPerUse, ConfigHolder.U.equipment.nightvisionGoggles.capacity, ConfigHolder.U.equipment.nightvisionGoggles.voltageTier, EntityEquipmentSlot.HEAD); + this(3600, 400000L * (long) Math.max(1, Math.pow(4, ConfigHolder.U.equipment.voltageTierNightVision - 2)), ConfigHolder.U.equipment.voltageTierNightVision, EntityEquipmentSlot.HEAD); } - public NightvisionGoggles(int energyPerUse, int capacity, int voltageTier, EntityEquipmentSlot slot) { + public NightvisionGoggles(int energyPerUse, long capacity, int voltageTier, EntityEquipmentSlot slot) { super(energyPerUse, capacity, voltageTier, slot); } @@ -73,7 +72,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 999999, 0, true, true)); } ret = true; - item.discharge((energyPerUse / 100), ConfigHolder.U.equipment.nightvisionGoggles.voltageTier, true, false, false); + item.discharge((energyPerUse / 100), this.tier, true, false, false); } if (!world.isRemote && toggleTimer > 0) { diff --git a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java index e6daf54e570..3f868331547 100644 --- a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java +++ b/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java @@ -1,6 +1,5 @@ package gregtech.common.items.Armor; - import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import gregtech.api.GTValues; @@ -43,25 +42,26 @@ import java.util.List; public class PowerlessJetpack implements IArmorLogic { - public final int tankCapacity; - public final int burnTier; - public final static List fuels; - public final static List forbiddenFuels; + + public static final List FUELS = RecipeMaps.COMBUSTION_GENERATOR_FUELS.getRecipeList(); + public static final List FUELS_FORBIDDEN = Arrays.asList(Materials.Oil.getFluid(), Materials.SulfuricLightFuel.getFluid()); + + public final int tankCapacity = 16000; + public final int burnTier = GTValues.MV; + @SideOnly(Side.CLIENT) private ArmorUtils.ModularHUD HUD; - public PowerlessJetpack(int capacity, int burnTier) { + public PowerlessJetpack() { if (ArmorUtils.SIDE.isClient()) HUD = new ArmorUtils.ModularHUD(); - this.tankCapacity = capacity; - this.burnTier = burnTier; } @Override public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { IFluidHandlerItem internalTank = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); FuelRecipe currentRecipe = null; - if (internalTank.drain(1, false) != null && !player.isInWater() && !player.isInLava()) { - for (FuelRecipe current : fuels) { + if (internalTank != null && internalTank.drain(1, false) != null && !player.isInWater() && !player.isInLava()) { + for (FuelRecipe current : FUELS) { if (current.getRecipeFluid().isFluidEqual(internalTank.drain(1, false))) { currentRecipe = current; break; @@ -254,8 +254,8 @@ public ICapabilityProvider createProvider(ItemStack itemStack) { return new FluidHandlerItemStack(itemStack, maxCapacity) { @Override public boolean canFillFluidType(FluidStack fluidStack) { - for (FuelRecipe recipe : fuels) - if (fluidStack.isFluidEqual(recipe.getRecipeFluid()) && !forbiddenFuels.contains(fluidStack.getFluid())) + for (FuelRecipe recipe : FUELS) + if (fluidStack.isFluidEqual(recipe.getRecipeFluid()) && !FUELS_FORBIDDEN.contains(fluidStack.getFluid())) return true; return false; } @@ -271,10 +271,4 @@ public IFluidTankProperties[] getTankProperties() { public void addInformation(ItemStack itemStack, List lines) { } } - - static { - fuels = RecipeMaps.COMBUSTION_GENERATOR_FUELS.getRecipeList(); - forbiddenFuels = Arrays.asList(Materials.Oil.getFluid(1).getFluid(), - Materials.SulfuricLightFuel.getFluid(1).getFluid()); - } } From aa625d9118250d7e9f83b26aa2f55a66294799f8 Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 17:18:59 -0500 Subject: [PATCH 53/56] fix typos, use EnumRarity over hardcoded color --- .../items/armor/AdvancedNanoMuscleSuite.java | 2 +- ...Suite.java => AdvancedQuarkTechSuite.java} | 6 +- .../api/items/armor/ArmorMetaItem.java | 18 +++-- .../api/items/armor/QuarkTechSuite.java | 2 +- .../common/items/Armor/MetaArmor.java | 29 ++++---- .../java/gregtech/common/items/MetaItem1.java | 6 +- .../java/gregtech/common/items/MetaItems.java | 6 +- .../loaders/recipe/MiscRecipeLoader.java | 10 +-- .../resources/assets/gregtech/lang/en_us.lang | 66 +++++++++--------- .../{nms.leggins.json => nms.leggings.json} | 2 +- .../{qts.leggins.json => qts.leggings.json} | 2 +- .../{nms.leggins.png => nms.leggings.png} | Bin .../{qts.leggins.png => qts.leggings.png} | Bin 13 files changed, 77 insertions(+), 72 deletions(-) rename src/main/java/gregtech/api/items/armor/{AdvancedQurakTechSuite.java => AdvancedQuarkTechSuite.java} (98%) rename src/main/resources/assets/gregtech/models/item/metaitems/{nms.leggins.json => nms.leggings.json} (50%) rename src/main/resources/assets/gregtech/models/item/metaitems/{qts.leggins.json => qts.leggings.json} (50%) rename src/main/resources/assets/gregtech/textures/items/metaitems/{nms.leggins.png => nms.leggings.png} (100%) rename src/main/resources/assets/gregtech/textures/items/metaitems/{qts.leggins.png => qts.leggings.png} (100%) diff --git a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java index 6c2816bf5b7..d1564328036 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java @@ -77,7 +77,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack item) { for (int i = 0; i < player.inventory.armorInventory.size(); i++) { IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); if (chargeable == null) continue; - if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) + if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE.getStackForm())) continue; if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); diff --git a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java b/src/main/java/gregtech/api/items/armor/AdvancedQuarkTechSuite.java similarity index 98% rename from src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java rename to src/main/java/gregtech/api/items/armor/AdvancedQuarkTechSuite.java index 8fa1be2ee3a..178d85e2fa5 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedQurakTechSuite.java +++ b/src/main/java/gregtech/api/items/armor/AdvancedQuarkTechSuite.java @@ -26,10 +26,10 @@ import javax.annotation.Nonnull; import java.util.List; -public class AdvancedQurakTechSuite extends QuarkTechSuite { +public class AdvancedQuarkTechSuite extends QuarkTechSuite { private int cachedSlotId = -1; - public AdvancedQurakTechSuite(int energyPerUse, long capacity, int tier) { + public AdvancedQuarkTechSuite(int energyPerUse, long capacity, int tier) { super(EntityEquipmentSlot.CHEST, energyPerUse, capacity, tier); } @@ -85,7 +85,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack item) { for (int i = 0; i < player.inventory.armorInventory.size(); i++) { IElectricItem chargeable = player.inventory.armorInventory.get(i).getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null); if (chargeable == null) continue; - if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm())) + if (player.inventory.armorInventory.get(i).isItemEqual(MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE.getStackForm())) continue; if ((chargeable.getCharge() + chargeable.getTransferLimit() * 10) <= chargeable.getMaxCharge() && cont.canUse(chargeable.getTransferLimit() * 10) && world.getWorldTime() % 10 == 0) { long delta = chargeable.charge(chargeable.getTransferLimit() * 10, chargeable.getTier(), true, false); diff --git a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java index 287b3fbe538..5d7f21d9482 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java +++ b/src/main/java/gregtech/api/items/armor/ArmorMetaItem.java @@ -14,6 +14,7 @@ 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.world.World; @@ -164,7 +165,7 @@ public IArmorLogic getArmorLogic() { } public ArmorMetaValueItem setArmorLogic(IArmorLogic armorLogic) { - Preconditions.checkNotNull(armorLogic, "Cannot set armorLogic to null"); + Preconditions.checkNotNull(armorLogic, "Cannot set ArmorLogic to null"); this.armorLogic = armorLogic; this.armorLogic.addToolComponents(this); return this; @@ -179,24 +180,27 @@ public ArmorMetaValueItem addComponents(IItemComponent... stats) { @Override public ArmorMetaValueItem setModelAmount(int modelAmount) { - super.setModelAmount(modelAmount); - return this; + return (ArmorMetaValueItem) super.setModelAmount(modelAmount); + } + + @Override + public ArmorMetaValueItem setRarity(EnumRarity rarity) { + return (ArmorMetaValueItem) super.setRarity(rarity); } } @Override - public boolean isEnchantable(ItemStack stack) { + public boolean isEnchantable(@Nonnull ItemStack stack) { return true; } @Override - public int getItemEnchantability(ItemStack stack) { - + public int getItemEnchantability(@Nonnull ItemStack stack) { return 50; } @Override - public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { + public boolean canApplyAtEnchantingTable(@Nonnull ItemStack stack, @Nonnull Enchantment enchantment) { switch (this.getEquipmentSlot(stack)) { case HEAD: return enchantment.type.canEnchantItem(Items.DIAMOND_HELMET); diff --git a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java index eb7815c4704..054927a7521 100644 --- a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java +++ b/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java @@ -237,7 +237,7 @@ public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSour @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { ItemStack currentChest = Minecraft.getMinecraft().player.inventory.armorItemInSlot(EntityEquipmentSlot.CHEST.getIndex()); - ItemStack advancedChest = MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm(); + ItemStack advancedChest = MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE.getStackForm(); String armorTexture = "quark_tech_suite"; if (advancedChest.isItemEqual(currentChest)) armorTexture = "advanced_quark_tech_suite"; return SLOT != EntityEquipmentSlot.LEGS ? diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index ecbb434c86a..d618cc2df65 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -5,6 +5,7 @@ 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> { @@ -15,30 +16,30 @@ public void registerSubItems() { int energyPerUse = 5000; int tier = e.voltageTierNanoSuit; long maxCapacity = (long) Math.max(1, Math.pow(4, tier)); - MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)); - MetaItems.NANO_MUSCLE_SUITE_LEGGINS = addItem(1, "nms.leggins").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)); - MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)); - MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(3, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)); + MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_LEGGINGS = addItem(1, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(3, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); energyPerUse = 10000; tier = e.voltageTierQuarkTech; maxCapacity = (long) Math.max(1, Math.pow(4, tier)); - MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)); - MetaItems.QUARK_TECH_SUITE_LEGGINS = addItem(5, "qts.leggins").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)); - MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)); - MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(7, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)); + MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUARK_TECH_SUITE_LEGGINGS = addItem(5, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(7, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()); - MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(125, 2520000L * (long) Math.max(1, Math.pow(4, e.voltageTierImpeller - 2)), e.voltageTierImpeller)).setModelAmount(8); + MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()).setRarity(EnumRarity.UNCOMMON); + MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(125, 2520000L * (long) Math.max(1, Math.pow(4, e.voltageTierImpeller - 2)), e.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpack.capacityLV, GTValues.LV)).setModelAmount(8); MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)).setModelAmount(8); MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)).setModelAmount(8); - MetaItems.ADVANCED_QAURK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQurakTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech)), e.voltageTierAdvQuarkTech)); - MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit)), e.voltageTierAdvNanoSuit)); - MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(512, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvImpeller - 3)), e.voltageTierAdvImpeller)); + MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech)), e.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); + MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); + MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(512, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvImpeller - 3)), e.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); - MetaItems.NIGHTVISION_GOGGLES = addItem(16, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()); + MetaItems.NIGHTVISION_GOGGLES = addItem(16, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()).setRarity(EnumRarity.UNCOMMON); } } diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index 8a4aa061803..8dd0968a2d7 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -564,9 +564,9 @@ public void registerSubItems() { ZERO_POINT_MODULE = addItem(752, "zpm").addComponents(ElectricStats.createBattery(2000000000000L, GTValues.ZPM, false)).setModelAmount(8); ULTIMATE_BATTERY = addItem(753, "max.battery").addComponents(ElectricStats.createRechargeableBattery(Long.MAX_VALUE, GTValues.MAX)).setUnificationData(OrePrefix.battery, Tier.Maximum).setModelAmount(8); - IMPELLER_MV = addItem(776, "impeller.mv"); - IMPELLER_HV = addItem(777, "impeller.hv"); - GRAVITATION_ENGINE = addItem(778, "gravitation_engine"); + IMPELLER_MV = addItem(776, "impeller.mv").setRarity(EnumRarity.UNCOMMON); + IMPELLER_HV = addItem(777, "impeller.hv").setRarity(EnumRarity.RARE); + GRAVITATION_ENGINE = addItem(778, "gravitation_engine").setRarity(EnumRarity.EPIC); } } diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 7d54ce1fa0c..19ae38dd61f 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -496,12 +496,12 @@ private MetaItems() { public static ArmorMetaItem.ArmorMetaValueItem NIGHTVISION_GOGGLES; public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_CHESTPLATE; - public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_LEGGINS; + public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_LEGGINGS; public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_BOOTS; public static ArmorMetaItem.ArmorMetaValueItem NANO_MUSCLE_SUITE_HELMET; public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_CHESTPLATE; - public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_LEGGINS; + public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_LEGGINGS; public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_BOOTS; public static ArmorMetaItem.ArmorMetaValueItem QUARK_TECH_SUITE_HELMET; @@ -514,7 +514,7 @@ private MetaItems() { public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_IMPELLER_JETPACK; public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_NANO_MUSCLE_CHESTPLATE; - public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_QAURK_TECH_SUITE_CHESTPLATE; + public static ArmorMetaItem.ArmorMetaValueItem ADVANCED_QUARK_TECH_SUITE_CHESTPLATE; public static MetaItem.MetaValueItem IMPELLER_MV; public static MetaItem.MetaValueItem IMPELLER_HV; diff --git a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java index bd188d5e243..35f7906f3a5 100644 --- a/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MiscRecipeLoader.java @@ -183,7 +183,7 @@ public static void init() { .inputs(CARBON_PLATE.getStackForm(6)) .inputs(BATTERY_HV_LITHIUM.getStackForm()) .circuitMeta(1) - .outputs(NANO_MUSCLE_SUITE_LEGGINS.getStackForm()) + .outputs(NANO_MUSCLE_SUITE_LEGGINGS.getStackForm()) .buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder().duration(1200).EUt(512) @@ -301,8 +301,8 @@ public static void init() { .inputs(LAPOTRON_CRYSTAL.getStackForm()) .inputs(PLATE_IRIDIUM_ALLOY.getStackForm(6)) .inputs(CONVEYOR_MODULE_EV.getStackForm(2)) - .inputs(NANO_MUSCLE_SUITE_LEGGINS.getStackForm()) - .outputs(QUARK_TECH_SUITE_LEGGINS.getStackForm()) + .inputs(NANO_MUSCLE_SUITE_LEGGINGS.getStackForm()) + .outputs(QUARK_TECH_SUITE_LEGGINGS.getStackForm()) .buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder().duration(2400).EUt(1600) @@ -344,7 +344,7 @@ public static void init() { .input(circuit, Elite, 4) .inputs(QUARK_TECH_SUITE_CHESTPLATE.getStackForm()) .fluidInputs(SolderingAlloy.getFluid(L * 8)) - .outputs(ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm()) + .outputs(ADVANCED_QUARK_TECH_SUITE_CHESTPLATE.getStackForm()) .buildAndRegister(); ASSEMBLY_LINE_RECIPES.recipeBuilder().duration(3600).EUt(8192) @@ -355,7 +355,7 @@ public static void init() { .input(circuit, Elite, 2) .inputs(ADVANCED_NANO_MUSCLE_CHESTPLATE.getStackForm()) .fluidInputs(SolderingAlloy.getFluid(L * 8)) - .outputs(ADVANCED_QAURK_TECH_SUITE_CHESTPLATE.getStackForm()) + .outputs(ADVANCED_QUARK_TECH_SUITE_CHESTPLATE.getStackForm()) .buildAndRegister(); ModHandler.addShapelessRecipe("fluid_jetpack_clear", SEMIFLUID_JETPACK.getStackForm(), SEMIFLUID_JETPACK.getStackForm()); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index b4353feb2a2..4818681f7b9 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -896,39 +896,39 @@ metaitem.voltage_coil.uxv.tooltip=UXV Coil metaitem.voltage_coil.max.name=Maximum Voltage Coil metaitem.voltage_coil.max.tooltip=Maximum Coil -metaitem.liquid_fuel_jetpack.name=§eLiquid fuel jetpack -metaitem.impeller_jetpack.name=§eThruster Jetpack -metaitem.advanced_impeller_jetpack.name=§bAdvanced Thruster Jetpack -metaitem.battery_pack.lv.name=Battery pack (§eLV§r) -metaitem.battery_pack.mv.name=Battery pack (§eMV§r) -metaitem.battery_pack.hv.name=Battery pack (§eHV§r) - -metaitem.nightvision_goggles.name=§eNightvision Goggles - -metaitem.nms.chestplate.name=§eNanoMuscle™ Suite Chestplate -metaitem.nms.leggins.name=§eNanoMuscle™ Suite Leggings -metaitem.nms.boots.name=§eNanoMuscle™ Suite Boots -metaitem.nms.helmet.name=§eNanoMuscle™ Suite Helmet -metaitem.nms.advanced_chestplate.name=§bAdvanced NanoMuscle™ Suite Chestplate - -metaitem.qts.chestplate.name=§bQuarkTech™ Suite Chestplate -metaitem.qts.leggins.name=§bQuarkTech™ Suite Leggins -metaitem.qts.boots.name=§bQuarkTech™ Suite Boots -metaitem.qts.helmet.name=§bQuarkTech™ Suite Helmet -metaitem.qts.advanced_chestplate.name=§5Advanced QuarkTech™ Suite Chestplate - -metaitem.impeller.mv.name=§ePower Thruster -metaitem.impeller.hv.name=§bAdvanced Power Thruster -metaitem.gravitation_engine.name=§5Gravitation Engine Unit - -metaarmor.nms.nightvision.enabled=NanoMuscle™ Suite: NightVision enabled -metaarmor.nms.nightvision.disabled=NanoMuscle™ Suite: NightVision disabled - -metaarmor.qts.nightvision.enabled=QuarkTech™ Suite: NightVision enabled -metaarmor.qts.nightvision.disabled=QuarkTech™ Suite: NightVision disabled - -metaarmor.jetpack.hover.enable=Jetpack: hover mode enabled -metaarmor.jetpack.hover.disable=Jetpack: hover mode disabled +metaitem.liquid_fuel_jetpack.name=Liquid-Fueled Jetpack +metaitem.impeller_jetpack.name=Thruster Jetpack +metaitem.advanced_impeller_jetpack.name=Advanced Thruster Jetpack +metaitem.battery_pack.lv.name=Battery Pack (§eLV§r) +metaitem.battery_pack.mv.name=Battery Pack (§eMV§r) +metaitem.battery_pack.hv.name=Battery Pack (§eHV§r) + +metaitem.nightvision_goggles.name=NightVision Goggles + +metaitem.nms.chestplate.name=NanoMuscle™ Suite Chestplate +metaitem.nms.leggings.name=NanoMuscle™ Suite Leggings +metaitem.nms.boots.name=NanoMuscle™ Suite Boots +metaitem.nms.helmet.name=NanoMuscle™ Suite Helmet +metaitem.nms.advanced_chestplate.name=Advanced NanoMuscle™ Suite Chestplate + +metaitem.qts.chestplate.name=QuarkTech™ Suite Chestplate +metaitem.qts.leggings.name=QuarkTech™ Suite Leggings +metaitem.qts.boots.name=QuarkTech™ Suite Boots +metaitem.qts.helmet.name=QuarkTech™ Suite Helmet +metaitem.qts.advanced_chestplate.name=Advanced QuarkTech™ Suite Chestplate + +metaitem.impeller.mv.name=Power Thruster +metaitem.impeller.hv.name=Advanced Power Thruster +metaitem.gravitation_engine.name=Gravitation Engine Unit + +metaarmor.nms.nightvision.enabled=NanoMuscle™ Suite: NightVision Enabled +metaarmor.nms.nightvision.disabled=NanoMuscle™ Suite: NightVision Disabled + +metaarmor.qts.nightvision.enabled=QuarkTech™ Suite: NightVision Enabled +metaarmor.qts.nightvision.disabled=QuarkTech™ Suite: NightVision Disabled + +metaarmor.jetpack.hover.enable=Jetpack: Hover Mode Enabled +metaarmor.jetpack.hover.disable=Jetpack: Hover Mode Disabled metaarmor.message.nightvision.enabled=§bNightvision: §aOn metaarmor.message.nightvision.disabled=§bNightvision: §cOff diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json b/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggings.json similarity index 50% rename from src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.json rename to src/main/resources/assets/gregtech/models/item/metaitems/nms.leggings.json index d6041295bf7..fc796d867f9 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/nms.leggins.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.leggins" + "layer0": "gregtech:items/metaitems/nms.leggings" } } diff --git a/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json b/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggings.json similarity index 50% rename from src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json rename to src/main/resources/assets/gregtech/models/item/metaitems/qts.leggings.json index 4b5040d450a..3e1b4165e11 100644 --- a/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggins.json +++ b/src/main/resources/assets/gregtech/models/item/metaitems/qts.leggings.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "gregtech:items/metaitems/qts.leggins" + "layer0": "gregtech:items/metaitems/qts.leggings" } } diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/nms.leggins.png b/src/main/resources/assets/gregtech/textures/items/metaitems/nms.leggings.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/items/metaitems/nms.leggins.png rename to src/main/resources/assets/gregtech/textures/items/metaitems/nms.leggings.png diff --git a/src/main/resources/assets/gregtech/textures/items/metaitems/qts.leggins.png b/src/main/resources/assets/gregtech/textures/items/metaitems/qts.leggings.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/items/metaitems/qts.leggins.png rename to src/main/resources/assets/gregtech/textures/items/metaitems/qts.leggings.png From 10925f52c8f431c69dc741d1a556d77efaa2c88d Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 17:24:01 -0500 Subject: [PATCH 54/56] fix a couple mistakes --- src/main/java/gregtech/common/items/Armor/MetaArmor.java | 8 ++++---- src/main/resources/assets/gregtech/lang/en_us.lang | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index d618cc2df65..fa12bb697dc 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -15,7 +15,7 @@ public void registerSubItems() { int energyPerUse = 5000; int tier = e.voltageTierNanoSuit; - long maxCapacity = (long) Math.max(1, Math.pow(4, tier)); + long maxCapacity = 1600000L * (long) Math.max(1, Math.pow(4, tier - 3)); MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); MetaItems.NANO_MUSCLE_SUITE_LEGGINGS = addItem(1, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); @@ -23,7 +23,7 @@ public void registerSubItems() { energyPerUse = 10000; tier = e.voltageTierQuarkTech; - maxCapacity = (long) Math.max(1, Math.pow(4, tier)); + maxCapacity = 8000000L * (long) Math.max(1, Math.pow(4, tier - 5)); MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); MetaItems.QUARK_TECH_SUITE_LEGGINGS = addItem(5, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); @@ -36,8 +36,8 @@ public void registerSubItems() { MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)).setModelAmount(8); MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)).setModelAmount(8); - MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech)), e.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); - MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); + MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech - 5)), e.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); + MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit - 4)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(512, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvImpeller - 3)), e.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); MetaItems.NIGHTVISION_GOGGLES = addItem(16, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()).setRarity(EnumRarity.UNCOMMON); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 4818681f7b9..181a744983e 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -930,8 +930,8 @@ metaarmor.qts.nightvision.disabled=QuarkTech™ Suite: NightVision Disabled metaarmor.jetpack.hover.enable=Jetpack: Hover Mode Enabled metaarmor.jetpack.hover.disable=Jetpack: Hover Mode Disabled -metaarmor.message.nightvision.enabled=§bNightvision: §aOn -metaarmor.message.nightvision.disabled=§bNightvision: §cOff +metaarmor.message.nightvision.enabled=§bNightVision: §aOn +metaarmor.message.nightvision.disabled=§bNightVision: §cOff metaarmor.message.nightvision.error=§cNot enough power! metaarmor.hud.status.enabled=§aON From 756606b8daac335c7f5ac27fd9af72b1017c390d Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 17:26:25 -0500 Subject: [PATCH 55/56] re-order armor items in JEI --- .../common/items/Armor/MetaArmor.java | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/Armor/MetaArmor.java index fa12bb697dc..c8ec093993a 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/Armor/MetaArmor.java @@ -13,33 +13,32 @@ public class MetaArmor extends ArmorMetaItem.ArmorMetaValueItem public void registerSubItems() { ConfigHolder.UnofficialOptions.Equipment e = ConfigHolder.U.equipment; + MetaItems.NIGHTVISION_GOGGLES = addItem(1, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()).setRarity(EnumRarity.UNCOMMON); + + MetaItems.SEMIFLUID_JETPACK = addItem(2, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()).setRarity(EnumRarity.UNCOMMON); + MetaItems.IMPELLER_JETPACK = addItem(3, "impeller_jetpack").setArmorLogic(new Jetpack(125, 2520000L * (long) Math.max(1, Math.pow(4, e.voltageTierImpeller - 2)), e.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); + MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(4, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(512, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvImpeller - 3)), e.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); + int energyPerUse = 5000; int tier = e.voltageTierNanoSuit; long maxCapacity = 1600000L * (long) Math.max(1, Math.pow(4, tier - 3)); - MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(0, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_MUSCLE_SUITE_LEGGINGS = addItem(1, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(2, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(3, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_HELMET = addItem(20, "nms.helmet").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(23, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); + MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit - 4)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); energyPerUse = 10000; tier = e.voltageTierQuarkTech; maxCapacity = 8000000L * (long) Math.max(1, Math.pow(4, tier - 5)); - MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(4, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUARK_TECH_SUITE_LEGGINGS = addItem(5, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUARK_TECH_SUITE_HELMET = addItem(6, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(7, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); - - MetaItems.SEMIFLUID_JETPACK = addItem(8, "liquid_fuel_jetpack").setArmorLogic(new PowerlessJetpack()).setRarity(EnumRarity.UNCOMMON); - MetaItems.IMPELLER_JETPACK = addItem(9, "impeller_jetpack").setArmorLogic(new Jetpack(125, 2520000L * (long) Math.max(1, Math.pow(4, e.voltageTierImpeller - 2)), e.voltageTierImpeller)).setModelAmount(8).setRarity(EnumRarity.UNCOMMON); - - MetaItems.BATPACK_LV = addItem(10, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpack.capacityLV, GTValues.LV)).setModelAmount(8); - MetaItems.BATPACK_MV = addItem(11, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)).setModelAmount(8); - MetaItems.BATPACK_HV = addItem(12, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)).setModelAmount(8); - - MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE = addItem(13, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech - 5)), e.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); - MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(14, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit - 4)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); - MetaItems.ADVANCED_IMPELLER_JETPACK = addItem(15, "advanced_impeller_jetpack").setArmorLogic(new AdvancedJetpack(512, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvImpeller - 3)), e.voltageTierAdvImpeller)).setRarity(EnumRarity.RARE); - - MetaItems.NIGHTVISION_GOGGLES = addItem(16, "nightvision_goggles").setArmorLogic(new NightvisionGoggles()).setRarity(EnumRarity.UNCOMMON); + MetaItems.QUARK_TECH_SUITE_HELMET = addItem(40, "qts.helmet").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.HEAD, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUARK_TECH_SUITE_CHESTPLATE = addItem(41, "qts.chestplate").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUARK_TECH_SUITE_LEGGINGS = addItem(42, "qts.leggings").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.QUARK_TECH_SUITE_BOOTS = addItem(43, "qts.boots").setArmorLogic(new QuarkTechSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.RARE); + MetaItems.ADVANCED_QUARK_TECH_SUITE_CHESTPLATE = addItem(50, "qts.advanced_chestplate").setArmorLogic(new AdvancedQuarkTechSuite(10000, 100000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvQuarkTech - 5)), e.voltageTierAdvQuarkTech)).setRarity(EnumRarity.EPIC); + + MetaItems.BATPACK_LV = addItem(70, "battery_pack.lv").setArmorLogic(new BatteryPack(0, e.batpack.capacityLV, GTValues.LV)).setModelAmount(8); + MetaItems.BATPACK_MV = addItem(71, "battery_pack.mv").setArmorLogic(new BatteryPack(0, e.batpack.capacityMV, GTValues.MV)).setModelAmount(8); + MetaItems.BATPACK_HV = addItem(72, "battery_pack.hv").setArmorLogic(new BatteryPack(0, e.batpack.capacityHV, GTValues.HV)).setModelAmount(8); } } From 3e1a1e9ada380f85a1f73bb857d700b1f66b007d Mon Sep 17 00:00:00 2001 From: DStrand1 Date: Sat, 4 Sep 2021 17:31:29 -0500 Subject: [PATCH 56/56] move some classes to common --- .../gregtech/api/items/armor/ArmorHooks.java | 45 ++++++++++--------- .../api/items/armor/ArmorRenderHooks.java | 1 + .../java/gregtech/common/EventHandlers.java | 2 +- .../java/gregtech/common/items/MetaItems.java | 2 +- .../{Armor => armor}/AdvancedJetpack.java | 2 +- .../items/armor/AdvancedNanoMuscleSuite.java | 4 +- .../items/armor/AdvancedQuarkTechSuite.java | 4 +- .../items/{Armor => armor}/BatteryPack.java | 2 +- .../items/{Armor => armor}/Jetpack.java | 2 +- .../items/{Armor => armor}/MetaArmor.java | 4 +- .../items/armor/NanoMuscleSuite.java | 4 +- .../{Armor => armor}/NightvisionGoggles.java | 2 +- .../{Armor => armor}/PowerlessJetpack.java | 2 +- .../items/armor/QuarkTechSuite.java | 4 +- 14 files changed, 45 insertions(+), 35 deletions(-) rename src/main/java/gregtech/common/items/{Armor => armor}/AdvancedJetpack.java (99%) rename src/main/java/gregtech/{api => common}/items/armor/AdvancedNanoMuscleSuite.java (98%) rename src/main/java/gregtech/{api => common}/items/armor/AdvancedQuarkTechSuite.java (98%) rename src/main/java/gregtech/common/items/{Armor => armor}/BatteryPack.java (99%) rename src/main/java/gregtech/common/items/{Armor => armor}/Jetpack.java (99%) rename src/main/java/gregtech/common/items/{Armor => armor}/MetaArmor.java (97%) rename src/main/java/gregtech/{api => common}/items/armor/NanoMuscleSuite.java (97%) rename src/main/java/gregtech/common/items/{Armor => armor}/NightvisionGoggles.java (99%) rename src/main/java/gregtech/common/items/{Armor => armor}/PowerlessJetpack.java (99%) rename src/main/java/gregtech/{api => common}/items/armor/QuarkTechSuite.java (98%) diff --git a/src/main/java/gregtech/api/items/armor/ArmorHooks.java b/src/main/java/gregtech/api/items/armor/ArmorHooks.java index 00c2f4b1ca6..4a5153dded3 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorHooks.java +++ b/src/main/java/gregtech/api/items/armor/ArmorHooks.java @@ -1,22 +1,23 @@ -package gregtech.api.items.armor; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.NonNullList; - -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); - } - } - } - } -} +package gregtech.api.items.armor; + +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/api/items/armor/ArmorRenderHooks.java b/src/main/java/gregtech/api/items/armor/ArmorRenderHooks.java index fe02f2871a1..1ce8a711906 100644 --- a/src/main/java/gregtech/api/items/armor/ArmorRenderHooks.java +++ b/src/main/java/gregtech/api/items/armor/ArmorRenderHooks.java @@ -15,6 +15,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) +@SuppressWarnings("unused") public class ArmorRenderHooks { public static boolean shouldNotRenderHeadItem(EntityLivingBase entityLivingBase) { diff --git a/src/main/java/gregtech/common/EventHandlers.java b/src/main/java/gregtech/common/EventHandlers.java index f0ab5fd45ec..41964a3c5eb 100644 --- a/src/main/java/gregtech/common/EventHandlers.java +++ b/src/main/java/gregtech/common/EventHandlers.java @@ -11,7 +11,7 @@ import gregtech.api.net.NetworkHandler; import gregtech.api.util.input.Key; import gregtech.api.util.input.Keybinds; -import gregtech.common.items.Armor.PowerlessJetpack; +import gregtech.common.items.armor.PowerlessJetpack; import gregtech.common.items.MetaItems; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityEnderman; diff --git a/src/main/java/gregtech/common/items/MetaItems.java b/src/main/java/gregtech/common/items/MetaItems.java index 19ae38dd61f..8cc815b92f7 100644 --- a/src/main/java/gregtech/common/items/MetaItems.java +++ b/src/main/java/gregtech/common/items/MetaItems.java @@ -9,7 +9,7 @@ import gregtech.api.items.toolitem.ToolMetaItem; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.util.GTLog; -import gregtech.common.items.Armor.MetaArmor; +import gregtech.common.items.armor.MetaArmor; import gregtech.common.render.FacadeItemModel; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.ModelResourceLocation; diff --git a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java similarity index 99% rename from src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java rename to src/main/java/gregtech/common/items/armor/AdvancedJetpack.java index 6391723ac33..dcb37dd9db1 100644 --- a/src/main/java/gregtech/common/items/Armor/AdvancedJetpack.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedJetpack.java @@ -1,4 +1,4 @@ -package gregtech.common.items.Armor; +package gregtech.common.items.armor; import gregtech.api.capability.GregtechCapabilities; diff --git a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java similarity index 98% rename from src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java rename to src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java index d1564328036..7f0230c7053 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedNanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedNanoMuscleSuite.java @@ -1,7 +1,9 @@ -package gregtech.api.items.armor; +package gregtech.common.items.armor; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; import gregtech.api.util.GTUtility; import gregtech.api.util.input.EnumKey; import gregtech.common.items.MetaItems; diff --git a/src/main/java/gregtech/api/items/armor/AdvancedQuarkTechSuite.java b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java similarity index 98% rename from src/main/java/gregtech/api/items/armor/AdvancedQuarkTechSuite.java rename to src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java index 178d85e2fa5..98e95f44f34 100644 --- a/src/main/java/gregtech/api/items/armor/AdvancedQuarkTechSuite.java +++ b/src/main/java/gregtech/common/items/armor/AdvancedQuarkTechSuite.java @@ -1,7 +1,9 @@ -package gregtech.api.items.armor; +package gregtech.common.items.armor; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; +import gregtech.api.items.armor.ArmorMetaItem; +import gregtech.api.items.armor.ArmorUtils; import gregtech.api.util.GTUtility; import gregtech.api.util.input.EnumKey; import gregtech.common.items.MetaItems; diff --git a/src/main/java/gregtech/common/items/Armor/BatteryPack.java b/src/main/java/gregtech/common/items/armor/BatteryPack.java similarity index 99% rename from src/main/java/gregtech/common/items/Armor/BatteryPack.java rename to src/main/java/gregtech/common/items/armor/BatteryPack.java index c8d92e6bcbe..007865dee94 100644 --- a/src/main/java/gregtech/common/items/Armor/BatteryPack.java +++ b/src/main/java/gregtech/common/items/armor/BatteryPack.java @@ -1,4 +1,4 @@ -package gregtech.common.items.Armor; +package gregtech.common.items.armor; import gregtech.api.GTValues; import gregtech.api.capability.GregtechCapabilities; diff --git a/src/main/java/gregtech/common/items/Armor/Jetpack.java b/src/main/java/gregtech/common/items/armor/Jetpack.java similarity index 99% rename from src/main/java/gregtech/common/items/Armor/Jetpack.java rename to src/main/java/gregtech/common/items/armor/Jetpack.java index 1a5697f53a3..56b890dd882 100644 --- a/src/main/java/gregtech/common/items/Armor/Jetpack.java +++ b/src/main/java/gregtech/common/items/armor/Jetpack.java @@ -1,4 +1,4 @@ -package gregtech.common.items.Armor; +package gregtech.common.items.armor; import com.google.common.collect.ImmutableMultimap; diff --git a/src/main/java/gregtech/common/items/Armor/MetaArmor.java b/src/main/java/gregtech/common/items/armor/MetaArmor.java similarity index 97% rename from src/main/java/gregtech/common/items/Armor/MetaArmor.java rename to src/main/java/gregtech/common/items/armor/MetaArmor.java index c8ec093993a..4c3296cf8a0 100644 --- a/src/main/java/gregtech/common/items/Armor/MetaArmor.java +++ b/src/main/java/gregtech/common/items/armor/MetaArmor.java @@ -1,4 +1,4 @@ -package gregtech.common.items.Armor; +package gregtech.common.items.armor; import gregtech.api.GTValues; import gregtech.api.items.armor.*; @@ -26,7 +26,7 @@ public void registerSubItems() { MetaItems.NANO_MUSCLE_SUITE_CHESTPLATE = addItem(21, "nms.chestplate").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.CHEST, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); MetaItems.NANO_MUSCLE_SUITE_LEGGINGS = addItem(22, "nms.leggings").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.LEGS, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); MetaItems.NANO_MUSCLE_SUITE_BOOTS = addItem(23, "nms.boots").setArmorLogic(new NanoMuscleSuite(EntityEquipmentSlot.FEET, energyPerUse, maxCapacity, tier)).setRarity(EnumRarity.UNCOMMON); - MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 11400000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit - 4)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); + MetaItems.ADVANCED_NANO_MUSCLE_CHESTPLATE = addItem(30, "nms.advanced_chestplate").setArmorLogic(new AdvancedNanoMuscleSuite(5000, 13000000L * (long) Math.max(1, Math.pow(4, e.voltageTierAdvNanoSuit - 4)), e.voltageTierAdvNanoSuit)).setRarity(EnumRarity.RARE); energyPerUse = 10000; tier = e.voltageTierQuarkTech; diff --git a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java b/src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java similarity index 97% rename from src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java rename to src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java index 9336ea41a8b..504a403a532 100644 --- a/src/main/java/gregtech/api/items/armor/NanoMuscleSuite.java +++ b/src/main/java/gregtech/common/items/armor/NanoMuscleSuite.java @@ -1,8 +1,10 @@ -package gregtech.api.items.armor; +package gregtech.common.items.armor; import gregtech.api.GTValues; 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.EnumKey; import gregtech.common.items.MetaItems; diff --git a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java b/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java similarity index 99% rename from src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java rename to src/main/java/gregtech/common/items/armor/NightvisionGoggles.java index 0ecdb1f3418..7dfb90e7bb8 100644 --- a/src/main/java/gregtech/common/items/Armor/NightvisionGoggles.java +++ b/src/main/java/gregtech/common/items/armor/NightvisionGoggles.java @@ -1,4 +1,4 @@ -package gregtech.common.items.Armor; +package gregtech.common.items.armor; import gregtech.api.capability.GregtechCapabilities; import gregtech.api.capability.IElectricItem; diff --git a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java similarity index 99% rename from src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java rename to src/main/java/gregtech/common/items/armor/PowerlessJetpack.java index 3f868331547..49c95f4f646 100644 --- a/src/main/java/gregtech/common/items/Armor/PowerlessJetpack.java +++ b/src/main/java/gregtech/common/items/armor/PowerlessJetpack.java @@ -1,4 +1,4 @@ -package gregtech.common.items.Armor; +package gregtech.common.items.armor; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; diff --git a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java b/src/main/java/gregtech/common/items/armor/QuarkTechSuite.java similarity index 98% rename from src/main/java/gregtech/api/items/armor/QuarkTechSuite.java rename to src/main/java/gregtech/common/items/armor/QuarkTechSuite.java index 054927a7521..32f944e5fdd 100644 --- a/src/main/java/gregtech/api/items/armor/QuarkTechSuite.java +++ b/src/main/java/gregtech/common/items/armor/QuarkTechSuite.java @@ -1,7 +1,9 @@ -package gregtech.api.items.armor; +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.EnumKey; import gregtech.common.items.MetaItems;