aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/items/armor
diff options
context:
space:
mode:
authorBlood-Asp <bloodasphendrik@gmail.com>2015-12-25 16:14:52 +0100
committerBlood-Asp <bloodasphendrik@gmail.com>2015-12-25 16:14:52 +0100
commita4bf359b03d6caa0dd8d449e41e4bae46222fc78 (patch)
tree5560a71d19f8c12896c62b2d38e5e8b470eebea9 /src/main/java/gregtech/common/items/armor
parent5132439317c6f121b854d67c94dbf14930792bb4 (diff)
downloadGT5-Unofficial-a4bf359b03d6caa0dd8d449e41e4bae46222fc78.tar.gz
GT5-Unofficial-a4bf359b03d6caa0dd8d449e41e4bae46222fc78.tar.bz2
GT5-Unofficial-a4bf359b03d6caa0dd8d449e41e4bae46222fc78.zip
Initial Modular armor port (from GTExtras)
Diffstat (limited to 'src/main/java/gregtech/common/items/armor')
-rw-r--r--src/main/java/gregtech/common/items/armor/ArmorCalculation.java413
-rw-r--r--src/main/java/gregtech/common/items/armor/ArmorData.java345
-rw-r--r--src/main/java/gregtech/common/items/armor/ContainerBasicArmor.java48
-rw-r--r--src/main/java/gregtech/common/items/armor/ContainerElectricArmor1.java53
-rw-r--r--src/main/java/gregtech/common/items/armor/ContainerModularArmor.java171
-rw-r--r--src/main/java/gregtech/common/items/armor/ElectricModularArmor1.java42
-rw-r--r--src/main/java/gregtech/common/items/armor/FluidSync.java67
-rw-r--r--src/main/java/gregtech/common/items/armor/FluidSync2.java67
-rw-r--r--src/main/java/gregtech/common/items/armor/GuiElectricArmor1.java310
-rw-r--r--src/main/java/gregtech/common/items/armor/GuiModularArmor.java196
-rw-r--r--src/main/java/gregtech/common/items/armor/InventoryArmor.java235
-rw-r--r--src/main/java/gregtech/common/items/armor/ModularArmor_Item.java449
-rw-r--r--src/main/java/gregtech/common/items/armor/SlotFluid.java33
-rw-r--r--src/main/java/gregtech/common/items/armor/SlotLocked.java33
-rw-r--r--src/main/java/gregtech/common/items/armor/Values.java125
-rw-r--r--src/main/java/gregtech/common/items/armor/Vector3.java278
16 files changed, 2865 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/items/armor/ArmorCalculation.java b/src/main/java/gregtech/common/items/armor/ArmorCalculation.java
new file mode 100644
index 0000000000..8915ce6f52
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ArmorCalculation.java
@@ -0,0 +1,413 @@
+package gregtech.common.items.armor;
+
+import java.util.List;
+
+import thaumcraft.api.nodes.IRevealer;
+import cpw.mods.fml.common.Loader;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ArmorCalculation {
+ public static float[] calculateArmor(ItemStack[] parts) {
+ float[] def = new float[32];
+ def[0] = 0; // Weight
+ def[1] = 1; // physical Def
+ def[2] = 1; // projectileDef
+ def[3] = 1; // fireDef
+ def[4] = 1; // magicDef
+ def[5] = 1; // explosionDef
+ def[6] = 0; // radiationDef
+ def[7] = 0; // electricDef
+ def[8] = 0; // witherDef
+ def[9] = 0; // fallDef
+ def[10] = 0; // Thorns
+ def[11] = 0; // ItemMagnet
+ def[12] = 0; // ItemCharge
+ def[13] = 0; // Thaumcraft goggles
+ def[14] = 0; // Nightvision
+ def[15] = 0; // tankCap
+ def[16] = 0; // motorPower
+ def[17] = 0; // motorEU
+ def[18] = 0; // pistonPower
+ def[19] = 0; // pistonEU
+ def[20] = 0; // ElectrolyzerPower
+ def[21] = 0; // ElectrolyzerEU
+ def[22] = 0; // FieldEmmiterPower
+ def[23] = 0; // FieldEmmiterEU
+ def[24] = 0; // JetpackFuelPower
+ def[25] = 0; // FuelUsage
+ def[26] = 0; // JetpackEUPower
+ def[27] = 0; // JetpackEU
+ def[28] = 0; // AntiGravPower
+ def[29] = 0; // AntiGravEU
+ def[30] = 0; // ProcessingPower
+ def[31] = 0; // ProcessingPowerUsed
+
+ if (parts != null) {
+ def[12] = 0.0f;
+ for (int i = 0; i < parts.length; i++) {
+ if (parts[i] != null) {
+ ItemData data = GT_OreDictUnificator.getItemData(parts[i]);
+ if (data != null && (data.mPrefix == OrePrefixes.plate || data.mPrefix == OrePrefixes.plateAlloy)) {
+ // Weight
+ def[0] = def[0] + Values.INSTANCE.getValues(data.mMaterial.mMaterial).weight;
+ if (data.mPrefix == OrePrefixes.plateAlloy && data.mMaterial.mMaterial == Materials.Iridium) {
+ def[0] = def[0] - 20;
+ }
+ // physicalDef
+ float tmp = Values.INSTANCE.getValues(data.mMaterial.mMaterial).physicalDef;
+ if (data.mPrefix == OrePrefixes.plateAlloy && data.mMaterial.mMaterial == Materials.Iridium) {
+ tmp = 0.27f;
+ }
+ if (tmp > 0.0f) {
+ def[1] = def[1] - (tmp * def[1]);
+ }
+ // projectileDef
+ tmp = Values.INSTANCE.getValues(data.mMaterial.mMaterial).projectileDef;
+ if (data.mPrefix == OrePrefixes.plateAlloy && data.mMaterial.mMaterial == Materials.Iridium) {
+ tmp = 0.27f;
+ }
+ if (tmp > 0.0f) {
+ def[2] = def[2] - (tmp * def[2]);
+ }
+ // fireDef
+ tmp = Values.INSTANCE.getValues(data.mMaterial.mMaterial).fireDef;
+ if (data.mPrefix == OrePrefixes.plateAlloy && data.mMaterial.mMaterial == Materials.Iridium) {
+ tmp = 0.25f;
+ }
+ if (tmp > 0.0f) {
+ def[3] = def[3] - (tmp * def[3]);
+ }
+ // magicDef
+ tmp = Values.INSTANCE.getValues(data.mMaterial.mMaterial).magicDef;
+ if (data.mPrefix == OrePrefixes.plateAlloy && data.mMaterial.mMaterial == Materials.Iridium) {
+ tmp = 0.25f;
+ }
+ if (tmp > 0.0f) {
+ def[4] = def[4] - (tmp * def[4]);
+ }
+ // explosionDef
+ tmp = Values.INSTANCE.getValues(data.mMaterial.mMaterial).explosionDef;
+ if (data.mPrefix == OrePrefixes.plateAlloy && data.mMaterial.mMaterial == Materials.Iridium) {
+ tmp = 0.27f;
+ }
+ if (tmp > 0.0f) {
+ def[5] = def[5] - (tmp * def[5]);
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.Rubber) {
+ def[7] = def[7] + 0.25f;
+ def[9] = def[9] + 2.0f;
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.Lead) {
+ def[6] = def[6] + 0.30f;
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.Plastic) {
+ def[7] = def[7] + 0.25f;
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.NeodymiumMagnetic) {
+ def[11] = def[11] + 2.0f;
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.NetherStar) {
+ def[8] = def[8] + 0.20f;
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.InfusedFire) {
+ def[10] = def[10] + 3.0f;
+ }
+ if (data.mPrefix == OrePrefixes.plate && data.mMaterial.mMaterial == Materials.InfusedEntropy) {
+ def[10] = def[10] + 4.0f;
+ }
+ } else if (GT_ModHandler.isChargerItem(parts[i])) {
+ def[12] = def[12] + (float) ic2.api.item.ElectricItem.manager.getCharge(parts[i]);
+ def[0] = (float) (def[0] + Math.pow(ic2.api.item.ElectricItem.manager.getCharge(parts[i]), 0.33f));
+ }
+ else if (Loader.isModLoaded("Thaumcraft") && parts[i].getItem() instanceof IRevealer) {
+ def[13] = 1;
+ def[31] += 100;
+ }
+ else if (parts[i].getItem().getUnlocalizedName().equals("ic2.itemNightvisionGoggles")) {
+ def[14] = 1;
+ def[31] += 100;
+ } else if (parts[i].getItem().getUnlocalizedName().equals("gt.meta.spring")) {// Once readded: GT Motors
+ switch (parts[i].getItem().getDamage(parts[i])) {
+ case 8630:
+ def[16] += 200; // motorPower
+ def[17] += 50;
+ def[31] += 10;
+ break;
+ case 8631:
+ def[16] += 300; // motorPower
+ def[17] += 100;
+ def[31] += 20;
+ break;
+ case 8632:
+ def[16] += 400; // motorPower
+ def[17] += 200;
+ def[31] += 50;
+ break;
+ case 8633:
+ def[16] += 500; // motorPower
+ def[17] += 400;
+ def[31] += 100;
+ break;
+ case 8634:
+ def[16] += 600; // motorPower
+ def[17] += 800;
+ def[31] += 200;
+ break;
+ }
+ } else if (parts[i].getItem().getUnlocalizedName().equals("gt.meta.springSmall")) {// Once Readded: GT Electric Pistons
+ switch (parts[i].getItem().getDamage(parts[i])) {
+ case 8630:
+ def[18] += 3;
+ def[19] += 200;
+ def[31] += 10;
+ break;
+ case 8631:
+ def[18] += 4;
+ def[19] += 300;
+ def[31] += 20;
+ break;
+ case 8632:
+ def[18] += 5;
+ def[19] += 450;
+ def[31] += 50;
+ break;
+ case 8633:
+ def[18] += 6;
+ def[19] += 800;
+ def[31] += 100;
+ break;
+ case 8634:
+ def[18] += 7;
+ def[19] += 1600;
+ def[31] += 200;
+ break;
+ }
+ } else if (parts[i].getItem().getUnlocalizedName().equals("gt.meta.Electrolyzer")) {// Once Readded: GT Electrolyzer
+ switch (parts[i].getItem().getDamage(parts[i])) {
+ case 8630:
+ def[20] += 10; // ElectrolyzerPower
+ def[21] += 1; // ElectrolyzerEU
+ def[31] += 50;
+ break;
+ case 8631:
+ def[20] += 20; // ElectrolyzerPower
+ def[21] += 4; // ElectrolyzerEU
+ def[31] += 100;
+ break;
+ case 8632:
+ def[20] += 40; // ElectrolyzerPower
+ def[21] += 16; // ElectrolyzerEU
+ def[31] += 150;
+ break;
+ case 8633:
+ def[20] += 80; // ElectrolyzerPower
+ def[21] += 64; // ElectrolyzerEU
+ def[31] += 200;
+ break;
+ case 8634:
+ def[20] += 160; // ElectrolyzerPower
+ def[21] += 256; // ElectrolyzerEU
+ def[31] += 250;
+ break;
+ }
+ } else if (parts[i].getItem().equals(ItemList.Cell_Empty.getItem())) {
+ def[15] += 8000;
+ } else if (parts[i].getItem().getUnlocalizedName().equals("gt.meta.cell")) {// Once Readded: GT Fluid Cells (tank)
+ switch (parts[i].getItem().getDamage(parts[i])) {
+ case 8630: // steel fluid cell
+ def[15] += 16000;
+ break;
+ case 8631: // tungsten fluid cell
+ def[15] += 64000;
+ break;
+ }
+ } else if (parts[i].getItem().getUnlocalizedName().equals("gt.meta.emmiter")) {// Once Readded: GT Field Emmiter
+ switch (parts[i].getItem().getDamage(parts[i])) {
+ case 8630:
+ def[22] += 1; // FieldEmmiterPower
+ def[23] += 1; // FieldEmmiterEU
+ def[31] += 100;
+ break;
+ case 8631:
+ def[22] += 2; // FieldEmmiterPower
+ def[23] += 4; // FieldEmmiterEU
+ def[31] += 200;
+ break;
+ case 8632:
+ def[22] += 3; // FieldEmmiterPower
+ def[23] += 16; // FieldEmmiterEU
+ def[31] += 300;
+ break;
+ case 8633:
+ def[22] += 4; // FieldEmmiterPower
+ def[23] += 64; // FieldEmmiterEU
+ def[31] += 400;
+ break;
+ case 8634:
+ def[22] += 5; // FieldEmmiterPower
+ def[23] += 512; // FieldEmmiterEU
+ def[31] += 500;
+ break;
+ }
+ } else if (data !=null && data.mPrefix == OrePrefixes.circuit) {// processing power stuff
+ if (data.mMaterial.mMaterial == Materials.Basic) {
+ def[30] += 100;
+ } else if (data.mMaterial.mMaterial == Materials.Good) {
+ def[30] += 200;
+ } else if (data.mMaterial.mMaterial == Materials.Advanced) {
+ def[30] += 300;
+ } else if (data.mMaterial.mMaterial == Materials.Data) {
+ def[30] += 400;
+ } else if (data.mMaterial.mMaterial == Materials.Elite) {
+ def[30] += 500;
+ } else if (data.mMaterial.mMaterial == Materials.Master) {
+ def[30] += 600;
+ }
+ } else if (parts[i].getItem().getUnlocalizedName().equals("gte.meta.jetpack")) {// jeptack parts
+ switch (parts[i].getItem().getDamage(parts[i])) {
+ case 0:
+ def[24] += 50; // JetpackFuelPower
+ def[25] += 1; // FuelUsage
+ def[31] += 10;
+ break;
+ case 1:
+ def[24] += 75; // JetpackFuelPower
+ def[25] += 2; // FuelUsage
+ def[31] += 20;
+ break;
+ case 2:
+ def[24] += 100; // JetpackFuelPower
+ def[25] += 4; // FuelUsage
+ def[31] += 30;
+ break;
+ case 3:
+ def[24] += 125; // JetpackFuelPower
+ def[25] += 8; // FuelUsage
+ def[31] += 40;
+ break;
+ case 4:
+ def[24] += 150; // JetpackFuelPower
+ def[25] += 16; // FuelUsage
+ def[31] += 50;
+ break;
+ case 5:
+ def[26] += 20; // JetpackEUPower
+ def[27] += 8; // JetpackEU
+ def[31] += 30;
+ break;
+ case 6:
+ def[26] += 30; // JetpackEUPower
+ def[27] += 16; // JetpackEU
+ def[31] += 60;
+ break;
+ case 7:
+ def[26] += 40; // JetpackEUPower
+ def[27] += 32; // JetpackEU
+ def[31] += 90;
+ break;
+ case 8:
+ def[26] += 50; // JetpackEUPower
+ def[27] += 64; // JetpackEU
+ def[31] += 120;
+ break;
+ case 9:
+ def[26] += 60; // JetpackEUPower
+ def[27] += 128; // JetpackEU
+ def[31] += 150;
+ break;
+ case 10:
+ def[28] += 100; // AntiGravPower
+ def[29] += 32; // AntiGravEU
+ def[31] += 100;
+ break;
+ case 11:
+ def[28] += 133; // AntiGravPower
+ def[29] += 64; // AntiGravEU
+ def[31] += 200;
+ break;
+ case 12:
+ def[28] += 166; // AntiGravPower
+ def[29] += 128; // AntiGravEU
+ def[31] += 300;
+ break;
+ case 13:
+ def[28] += 200; // AntiGravPower
+ def[29] += 256; // AntiGravEU
+ def[31] += 400;
+ break;
+ case 14:
+ def[28] += 233; // AntiGravPower
+ def[29] += 512; // AntiGravEU
+ def[31] += 500;
+ break;
+ }
+ } else if (true) {
+ //System.out.println("Unknown Item: " + parts[i].getItem().getUnlocalizedName());
+ }
+ }
+ }
+ }
+ def[1] = 1 - def[1];
+ def[2] = 1 - def[2];
+ def[3] = 1 - def[3];
+ def[4] = 1 - def[4];
+ def[5] = 1 - def[5];
+ if (def[7] > 0.95) {
+ def[7] = 1.0f;
+ }
+ if (def[8] > 0.98) {
+ def[8] = 1.0f;
+ }
+ return def;
+ }
+
+ public static int deChargeBatterys(ItemStack[] parts, int amount) {
+ // System.out.println("deCharge " + amount);
+ int decharged = 0;
+ for (int i = 0; decharged < amount && i < parts.length; i++) {
+ if (GT_ModHandler.isChargerItem(parts[i])) {
+ decharged = (int) (decharged + ic2.api.item.ElectricItem.manager.discharge(parts[i], amount - decharged, 10, false, false, false));
+ }
+ }
+ return decharged;
+ }
+
+ public static FluidStack getFluid(ItemStack[] parts, int tankCap) {
+ int fluidAmount;
+ if (parts.length > 12 && parts[12] != null) {
+ NBTTagCompound nbt = parts[12].getTagCompound();
+ if (nbt != null) {
+ fluidAmount = (int) nbt.getLong("mFluidDisplayAmount");
+ if (fluidAmount > tankCap) {
+ nbt.setLong("mFluidDisplayAmount", tankCap);
+ parts[12].setTagCompound(nbt);
+ fluidAmount = tankCap;
+ }
+ return new FluidStack(parts[12].getItemDamage(), fluidAmount);
+ }
+
+ }
+ return null;
+ }
+
+ public static void useFluid(ItemStack[] parts, int usedAmount) {
+ int fluidAmount;
+ if (parts.length > 12 && parts[12] != null) {
+ NBTTagCompound nbt = parts[12].getTagCompound();
+ if (nbt != null) {
+ fluidAmount = (int) nbt.getLong("mFluidDisplayAmount");
+ nbt.setLong("mFluidDisplayAmount", fluidAmount - usedAmount);
+ parts[12].setTagCompound(nbt);
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/armor/ArmorData.java b/src/main/java/gregtech/common/items/armor/ArmorData.java
new file mode 100644
index 0000000000..79c6a20ffa
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ArmorData.java
@@ -0,0 +1,345 @@
+package gregtech.common.items.armor;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Random;
+
+import gregtech.api.damagesources.GT_DamageSources;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.DamageSource;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ArmorData {
+
+ public int type; // 0 = helmet; 1 = chestplate; 2 = leggings; 3 = boots;
+ public int armorTier; // 0 = Basic Modular Armor; 1 = Modular Exoskeleton; 2= Modular Nanosuit; 3 = Heavy Power Armor
+ public List info; // needs Localization
+ public boolean isTopItem;
+ public int tooltipUpdate;
+ public boolean openGui;
+
+ public ArmorData helmet;
+ public ArmorData chestplate;
+ public ArmorData leggings;
+ public ArmorData boots;
+
+ public boolean fullArmor;
+ public boolean fullRadiationDef;
+ public boolean fullElectricDef;
+
+ public float fallDef;
+ public float physicalDef;
+ public float projectileDef;
+ public float fireDef;
+ public float magicDef;
+ public float explosionDef;
+ public float radiationDef;
+ public float electricDef;
+ public float witherDef;
+
+ public float thorns;
+ public float thornsSingle;
+ public int magnet;
+ public int magnetSingle;
+
+ public int partsCharge;
+ public int maxCharge;
+ public int charge;
+ public boolean thaumicGoggles;
+ public boolean nightVision;
+ public boolean potionInjector;
+ public boolean autoFeeder;
+
+ public FluidStack fluid;
+ public int tankCap;
+
+ public int weight;
+ public int maxWeight;
+ public int processingPower;
+ public int processingPowerUsed;
+ public int partProcessing;
+ public int partProcessingUsed;
+
+ public int motorPower;
+ public int motorEUusage;
+ public int pistonJumpboost;
+ public int pistonEUusage;
+ public int electrolyzerProd;
+ public int electrolyzerEUusage;
+ public int fieldGenCap;
+ public int fieldGenEUusage;
+
+ public int jetpackMaxWeight;
+ public int antiGravMaxWeight;
+
+ public ArmorData(EntityPlayer player, ItemStack stack, int type, int tier) {
+ this.type = type;
+ this.armorTier = tier;
+ ContainerModularArmor tmp = new ContainerBasicArmor((EntityPlayer) player, new InventoryArmor(ModularArmor_Item.class, stack));
+ calculateArmor(tmp.mInvArmor.parts);
+ switch (tier) {
+ case 0:
+ maxCharge = 0;
+ break;
+ case 1:
+ maxCharge = 250000;
+ break;
+ case 2:
+ maxCharge = 1000000;
+ }
+ readNBT(stack.getTagCompound());
+ }
+
+ private void readNBT(NBTTagCompound nbt) {
+ if (nbt == null) {
+ return;
+ }
+ if (nbt.hasKey("Charge")) {
+ this.charge = nbt.getInteger("Charge");
+ }
+ }
+
+ public void writeToNBT(NBTTagCompound nbt) {
+ if (nbt == null) {
+ return;
+ }
+ nbt.setInteger("Charge", this.charge);
+ }
+
+ public ArmorData calculateArmor(ItemStack[] parts) {
+ float[] def = ArmorCalculation.calculateArmor(parts);
+ weight = (int) def[0];
+ physicalDef = def[1];
+ projectileDef = def[2];
+ fireDef = def[3];
+ magicDef = def[4];
+ explosionDef = def[5];
+ radiationDef = def[6];
+ electricDef = def[7];
+ witherDef = def[8];
+ fallDef = def[9];
+ thornsSingle = def[10];
+ magnetSingle = (int) def[11];
+ if (armorTier > 0) {
+ partsCharge = (int) def[12];
+ thaumicGoggles = def[13] > 0.5f;
+ nightVision = def[14] > 0.5f;
+ tankCap = (int) def[15]; // tankCap
+ motorPower = (int) def[16]; // motorPower
+ motorEUusage = (int) def[17]; // motorEU
+ pistonJumpboost = (int) def[18]; // pistonPower
+ fallDef += pistonJumpboost;
+ pistonEUusage = (int) def[19]; // pistonEU
+ electrolyzerProd = (int) def[20]; // ElectrolyzerPower
+ electrolyzerEUusage = (int) def[21]; // ElectrolyzerEU
+ fieldGenCap = (int) def[22]; // FieldEmmiterPower
+ fieldGenEUusage = (int) def[23]; // FieldEmmiterEU
+ jetpackMaxWeight = (int) def[24] + (int) def[26]; // JetpackFuelPower// JetpackEUPower
+ def[25] = 0; // FuelUsage
+ def[27] = 0; // JetpackEU
+ antiGravMaxWeight = (int) def[28]; // AntiGravPower
+ def[29] = 0; // AntiGravEU
+ if (armorTier == 2) {
+ partProcessing = (int) def[30] + 500; // ProcessingPower
+ } else {
+ partProcessing = (int) def[30] + 300; // ProcessingPower
+ }
+ partProcessingUsed = (int) def[31]; // ProcessingPowerUsed
+ }
+ updateTooltip();
+ return this;
+ }
+
+ public void updateTooltip() {
+ List<String> tagList = new ArrayList<String>();
+ String tmp2 = "";
+ if (maxWeight > 4000) {
+ tmp2 = " " + GT_LanguageManager.getTranslation("hav");
+ }
+ if (maxCharge != 0) {
+ DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
+ DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
+ symbols.setGroupingSeparator(' ');
+ if (type == 0) {
+ if (thaumicGoggles) {
+ tagList.add(GT_LanguageManager.getTranslation("thaum"));
+ }
+ if (nightVision) {
+ tagList.add(GT_LanguageManager.getTranslation("night"));
+ }
+ }
+ tagList.add("EU: " + formatter.format(charge + partsCharge));
+ if (type == 2) {
+ tagList.add(GT_LanguageManager.getTranslation("jum") + ": " + pistonJumpboost / 3 + "m");
+ }
+ if (type == 2 && pistonJumpboost > 0) {
+ tagList.add(GT_LanguageManager.getTranslation("uph"));
+ }
+ if (type == 2 && motorPower > 0) {
+ tagList.add(GT_LanguageManager.getTranslation("speass") + ": " + motorPower);
+ tagList.add(GT_LanguageManager.getTranslation("motuse") + ": " + motorEUusage + " EU");
+ if (maxWeight > 4000) {
+ tagList.add(GT_LanguageManager.getTranslation("over"));
+ }
+ }
+ tagList.add(GT_LanguageManager.getTranslation("pro1") + " " + partProcessing + " " + GT_LanguageManager.getTranslation("pro3"));
+ tagList.add(GT_LanguageManager.getTranslation("pro2") + ": " + partProcessingUsed + " " + GT_LanguageManager.getTranslation("pro3"));
+ if (type == 0 && electrolyzerProd > 0) {
+ tagList.add(GT_LanguageManager.getTranslation("elec1") + " " + electrolyzerProd / 2 + GT_LanguageManager.getTranslation("elec2"));
+ }
+ if (tankCap > 0) {
+ if (fluid != null) {
+ tagList.add(GT_LanguageManager.getTranslation("tank") + ": " + fluid.getLocalizedName() + " " + fluid.amount + "L (" + tankCap + ")");
+ } else {
+ tagList.add(GT_LanguageManager.getTranslation("tankcap") + ": " + tankCap);
+ }
+ }
+ }
+ tagList.add(GT_LanguageManager.getTranslation("weight") + ": " + weight + tmp2);
+ tagList.add(GT_LanguageManager.getTranslation("phydef") + ": " + (Math.round(physicalDef * 1000) / 10.0) + "%");
+ tagList.add(GT_LanguageManager.getTranslation("prodef") + ": " + (Math.round(projectileDef * 1000) / 10.0) + "%");
+ tagList.add(GT_LanguageManager.getTranslation("firedef") + ": " + (Math.round(fireDef * 1000) / 10.0) + "%");
+ tagList.add(GT_LanguageManager.getTranslation("magdef") + ": " + (Math.round(magicDef * 1000) / 10.0) + "%");
+ tagList.add(GT_LanguageManager.getTranslation("expdef") + ": " + (Math.round(explosionDef * 1000) / 10.0) + "%");
+ if (fallDef > 0 && type == 3) {
+ tagList.add(GT_LanguageManager.getTranslation("abs1") + " " + fallDef + GT_LanguageManager.getTranslation("abs2"));
+ }
+ if (thorns > 0) {
+ tagList.add(GT_LanguageManager.getTranslation("thorns") + ": " + (int) thorns);
+ }
+ if (magnet > 0) {
+ tagList.add(GT_LanguageManager.getTranslation("magnet") + ": " + magnet + "m");
+ }
+ if (fullRadiationDef) {
+ tagList.add(GT_LanguageManager.getTranslation("radim"));
+ } else {
+ if (radiationDef > 0.01d) {
+ tagList.add(GT_LanguageManager.getTranslation("raddef") + ": " + (Math.round(radiationDef * 1000) / 10.0) + "%");
+ }
+ }
+ info = tagList;
+ }
+
+ public void armorPartsEquipped(EntityPlayer aPlayer) {
+ helmet = null;
+ chestplate = null;
+ leggings = null;
+ boots = null;
+ for (int i = 1; i < 5; i++) {
+ ItemStack stack = aPlayer.getEquipmentInSlot(i);
+ if (stack != null && stack.getItem() instanceof ModularArmor_Item) {
+ ModularArmor_Item tmp = (ModularArmor_Item) stack.getItem();
+ ContainerModularArmor tmp2 = new ContainerBasicArmor(aPlayer, new InventoryArmor(ModularArmor_Item.class, stack));
+ if ((this.type + i) == 4) {
+ fluid = ArmorCalculation.getFluid(tmp2.mInvArmor.parts, tankCap);
+ }
+ if (maxCharge > 0 && charge < maxCharge) {
+ int loaded = ArmorCalculation.deChargeBatterys(tmp2.mInvArmor.parts, maxCharge - charge);
+ charge = charge + loaded;
+ tmp.data.partsCharge -= loaded;
+
+ }
+ switch (tmp.armorType) {
+ case 0:
+ helmet = tmp.data;
+ break;
+ case 1:
+ chestplate = tmp.data;
+ break;
+ case 2:
+ leggings = tmp.data;
+ break;
+ case 3:
+ boots = tmp.data;
+ break;
+ default:
+ break;
+ }
+ writeToNBT(stack.getTagCompound());
+ }
+ }
+ if (helmet != null && chestplate != null && leggings != null && boots != null) {
+ fullArmor = true;
+ } else {
+ fullArmor = false;
+ }
+ fullRadiationDef = fullArmor && helmet.radiationDef > 0.9f && chestplate.radiationDef > 0.9f && leggings.radiationDef > 0.9f && boots.radiationDef > 0.9f;
+ fullElectricDef = fullArmor && helmet.electricDef > 0.9f && chestplate.electricDef > 0.9f && leggings.electricDef > 0.9f && boots.electricDef > 0.9f;
+ magnet = 0;
+ thorns = 0;
+ processingPower = 0;
+ processingPowerUsed = 0;
+ if (helmet != null) {
+ magnet += helmet.magnetSingle;
+ thorns += helmet.thornsSingle;
+ processingPower += helmet.partProcessing;
+ processingPowerUsed += helmet.partProcessingUsed;
+ }
+ if (chestplate != null) {
+ magnet += chestplate.magnetSingle;
+ thorns += chestplate.thornsSingle;
+ processingPower += chestplate.partProcessing;
+ processingPowerUsed += chestplate.partProcessingUsed;
+ }
+ if (leggings != null) {
+ magnet += leggings.magnetSingle;
+ thorns += leggings.thornsSingle;
+ processingPower += leggings.partProcessing;
+ processingPowerUsed += leggings.partProcessingUsed;
+ }
+ if (boots != null) {
+ magnet += boots.magnetSingle;
+ thorns += boots.thornsSingle;
+ processingPower += boots.partProcessing;
+ processingPowerUsed += boots.partProcessingUsed;
+ }
+ isTopItem = false;
+ if (type == 0) {
+ isTopItem = true;
+ } else if (helmet == null && type == 1) {
+ isTopItem = true;
+ } else if (helmet == null && chestplate == null && type == 2) {
+ isTopItem = true;
+ } else if (helmet == null && chestplate == null && leggings == null && type == 3) {
+ isTopItem = true;
+ }
+ if (helmet != null) {
+ maxWeight = helmet.weight;
+ }
+ if (chestplate != null) {
+ maxWeight += chestplate.weight;
+ }
+ if (leggings != null) {
+ maxWeight += leggings.weight;
+ }
+ if (boots != null) {
+ maxWeight += boots.weight;
+ }
+ }
+
+ public double getBaseAbsorptionRatio() {
+ switch (this.type) {
+ case 0:
+ return 0.15;
+ case 1:
+ return 0.40;
+ case 2:
+ return 0.30;
+ case 3:
+ return 0.15;
+ default:
+ return 0.00;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/armor/ContainerBasicArmor.java b/src/main/java/gregtech/common/items/armor/ContainerBasicArmor.java
new file mode 100644
index 0000000000..108d813707
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ContainerBasicArmor.java
@@ -0,0 +1,48 @@
+package gregtech.common.items.armor;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class ContainerBasicArmor extends ContainerModularArmor {
+
+ public ContainerBasicArmor(EntityPlayer player, InventoryArmor aInvArmor) {
+ super(player, aInvArmor);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mInvArmor, 0, 118, 6));
+ addSlotToContainer(new Slot(mInvArmor, 1, 136, 6));
+ addSlotToContainer(new Slot(mInvArmor, 2, 154, 6));
+ addSlotToContainer(new Slot(mInvArmor, 3, 118, 24));
+ addSlotToContainer(new Slot(mInvArmor, 4, 136, 24));
+ addSlotToContainer(new Slot(mInvArmor, 5, 154, 24));
+ addSlotToContainer(new Slot(mInvArmor, 6, 118, 42));
+ addSlotToContainer(new Slot(mInvArmor, 7, 136, 42));
+ addSlotToContainer(new Slot(mInvArmor, 8, 154, 42));
+
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 9; j++) {
+ addSlotToContainer(new Slot(aInventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
+ }
+ }
+
+ for (int i = 0; i < 9; i++) {
+ ItemStack stackInSlot = aInventoryPlayer.getStackInSlot(i);
+ if(isIdenticalItem(mInvArmor.parent,stackInSlot)){
+ addSlotToContainer(new SlotLocked(aInventoryPlayer,i,8+i*18,142));
+ }else{
+ addSlotToContainer(new Slot(aInventoryPlayer, i, 8 + i * 18, 142));}
+ }
+ }
+
+ public int getSlotCount() {
+ return 9;
+ }
+
+ public int getShiftClickSlotCount() {
+ return 9;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/ContainerElectricArmor1.java b/src/main/java/gregtech/common/items/armor/ContainerElectricArmor1.java
new file mode 100644
index 0000000000..063807275c
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ContainerElectricArmor1.java
@@ -0,0 +1,53 @@
+package gregtech.common.items.armor;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class ContainerElectricArmor1 extends ContainerBasicArmor {
+
+ public ContainerElectricArmor1(EntityPlayer player, InventoryArmor aInvArmor) {
+ super(player, aInvArmor);
+ }
+
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mInvArmor, 0, 118, 6));
+ addSlotToContainer(new Slot(mInvArmor, 1, 136, 6));
+ addSlotToContainer(new Slot(mInvArmor, 2, 154, 6));
+ addSlotToContainer(new Slot(mInvArmor, 3, 118, 24));
+ addSlotToContainer(new Slot(mInvArmor, 4, 136, 24));
+ addSlotToContainer(new Slot(mInvArmor, 5, 154, 24));
+ addSlotToContainer(new Slot(mInvArmor, 6, 118, 42));
+ addSlotToContainer(new Slot(mInvArmor, 7, 136, 42));
+ addSlotToContainer(new Slot(mInvArmor, 8, 154, 42));
+ addSlotToContainer(new Slot(mInvArmor, 9, 118, 60));
+ addSlotToContainer(new Slot(mInvArmor, 10, 136, 60));
+ addSlotToContainer(new Slot(mInvArmor, 11, 154, 60));
+
+ addSlotToContainer(new SlotFluid(mInvArmor,12,94,32));
+
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 9; j++) {
+ addSlotToContainer(new Slot(aInventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
+ }
+ }
+
+ for (int i = 0; i < 9; i++) {
+ ItemStack stackInSlot = aInventoryPlayer.getStackInSlot(i);
+ if(isIdenticalItem(mInvArmor.parent,stackInSlot)){
+ addSlotToContainer(new SlotLocked(aInventoryPlayer,i,8+i*18,142));
+ }else{
+ addSlotToContainer(new Slot(aInventoryPlayer, i, 8 + i * 18, 142));}
+ }
+ }
+
+ public int getSlotCount() {
+ return 12;
+ }
+
+ public int getShiftClickSlotCount() {
+ return 12;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/ContainerModularArmor.java b/src/main/java/gregtech/common/items/armor/ContainerModularArmor.java
new file mode 100644
index 0000000000..88f1a71599
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ContainerModularArmor.java
@@ -0,0 +1,171 @@
+package gregtech.common.items.armor;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+public abstract class ContainerModularArmor extends Container {
+
+ public InventoryArmor mInvArmor;
+
+ public ContainerModularArmor(EntityPlayer player, InventoryArmor aInvArmor) {
+ this.mInvArmor = aInvArmor;
+ addSlots(player.inventory);
+ }
+
+ public ArmorData getData(EntityPlayer aPlayer){
+
+
+
+ return null;
+ }
+
+ @Override
+ public boolean canInteractWith(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ public abstract void addSlots(InventoryPlayer aInventoryPlayer);
+
+ public abstract int getSlotCount();
+
+ public abstract int getShiftClickSlotCount();
+
+ public void saveInventory(EntityPlayer entityplayer) {
+ mInvArmor.onGuiSaved(entityplayer);
+ }
+
+ @Override
+ public void onContainerClosed(EntityPlayer player) {
+ super.onContainerClosed(player);
+ if (!player.worldObj.isRemote) {
+ saveInventory(player);
+ }
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
+ if (player == null) {
+ return null;
+ }
+
+ ItemStack originalStack = null;
+ Slot slot = (Slot) inventorySlots.get(slotIndex);
+ int numSlots = inventorySlots.size();
+ if (slot != null && slot.getHasStack()) {
+ ItemStack stackInSlot = slot.getStack();
+ originalStack = stackInSlot.copy();
+ if (slotIndex >= numSlots - 9 * 4 && tryShiftItem(stackInSlot, numSlots)) {
+ } else if (slotIndex >= numSlots - 9 * 4 && slotIndex < numSlots - 9) {
+ if (!shiftItemStack(stackInSlot, numSlots - 9, numSlots)) {
+ return null;
+ }
+ } else if (slotIndex >= numSlots - 9 && slotIndex < numSlots) {
+ if (!shiftItemStack(stackInSlot, numSlots - 9 * 4, numSlots - 9)) {
+ return null;
+ }
+ } else if (!shiftItemStack(stackInSlot, numSlots - 9 * 4, numSlots)) {
+ return null;
+ }
+ slot.onSlotChange(stackInSlot, originalStack);
+ if (stackInSlot.stackSize <= 0) {
+ slot.putStack(null);
+ } else {
+ slot.onSlotChanged();
+ }
+ if (stackInSlot.stackSize == originalStack.stackSize) {
+ return null;
+ }
+ slot.onPickupFromSlot(player, stackInSlot);
+ }
+ return originalStack;
+ }
+
+ private boolean tryShiftItem(ItemStack stackToShift, int numSlots) {
+ for (int machineIndex = 0; machineIndex < numSlots - 9 * 4; machineIndex++) {
+ Slot slot = (Slot) inventorySlots.get(machineIndex);
+ if (slot.getHasStack()) {
+ continue;
+ }
+ if(slot instanceof SlotLocked){
+ continue;
+ }
+ if(slot instanceof SlotFluid){
+ continue;
+ }
+
+ if (!slot.isItemValid(stackToShift)) {
+ continue;
+ }
+ if (shiftItemStack(stackToShift, machineIndex, machineIndex + 1)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected boolean shiftItemStack(ItemStack stackToShift, int start, int end) {
+ boolean changed = false;
+ if (stackToShift.isStackable()) {
+ for (int slotIndex = start; stackToShift.stackSize > 0 && slotIndex < end; slotIndex++) {
+ Slot slot = (Slot) inventorySlots.get(slotIndex);
+ ItemStack stackInSlot = slot.getStack();
+ if (stackInSlot != null && isIdenticalItem(stackInSlot, stackToShift)) {
+ int resultingStackSize = stackInSlot.stackSize + stackToShift.stackSize;
+ int max = Math.min(stackToShift.getMaxStackSize(), slot.getSlotStackLimit());
+ if (resultingStackSize <= max) {
+ stackToShift.stackSize = 0;
+ stackInSlot.stackSize = resultingStackSize;
+ slot.onSlotChanged();
+ changed = true;
+ } else if (stackInSlot.stackSize < max) {
+ stackToShift.stackSize -= max - stackInSlot.stackSize;
+ stackInSlot.stackSize = max;
+ slot.onSlotChanged();
+ changed = true;
+ }
+ }
+ }
+ }
+ if (stackToShift.stackSize > 0) {
+ for (int slotIndex = start; stackToShift.stackSize > 0 && slotIndex < end; slotIndex++) {
+ Slot slot = (Slot) inventorySlots.get(slotIndex);
+ ItemStack stackInSlot = slot.getStack();
+ if (stackInSlot == null) {
+ int max = Math.min(stackToShift.getMaxStackSize(), slot.getSlotStackLimit());
+ stackInSlot = stackToShift.copy();
+ stackInSlot.stackSize = Math.min(stackToShift.stackSize, max);
+ stackToShift.stackSize -= stackInSlot.stackSize;
+ slot.putStack(stackInSlot);
+ slot.onSlotChanged();
+ changed = true;
+ }
+ }
+ }
+ return changed;
+ }
+
+ public static boolean isIdenticalItem(ItemStack lhs, ItemStack rhs) {
+ if (lhs == null || rhs == null) {
+ return false;
+ }
+
+ if (lhs.getItem() != rhs.getItem()) {
+ return false;
+ }
+
+ if (lhs.getItemDamage() != OreDictionary.WILDCARD_VALUE) {
+ if (lhs.getItemDamage() != rhs.getItemDamage()) {
+ return false;
+ }
+ }
+
+ return ItemStack.areItemStackTagsEqual(lhs, rhs);
+ }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/ElectricModularArmor1.java b/src/main/java/gregtech/common/items/armor/ElectricModularArmor1.java
new file mode 100644
index 0000000000..5d8bfd82f0
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ElectricModularArmor1.java
@@ -0,0 +1,42 @@
+package gregtech.common.items.armor;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidContainerItem;
+
+public class ElectricModularArmor1 extends ModularArmor_Item{
+
+ public boolean mChargeProvider=false;
+
+ public ElectricModularArmor1(int aArmorIndex, int aType, String name,int gui) {
+ super(aArmorIndex, aType, name,gui);
+ }
+
+ public boolean canProvideEnergy(ItemStack aStack) {
+ return mChargeProvider;
+ }
+
+ public Item getChargedItem(ItemStack aStack) {
+ return this;
+ }
+
+ public Item getEmptyItem(ItemStack aStack) {
+ return this;
+ }
+
+ public int getMaxCharge(ItemStack aStack) {
+ return data.charge;
+ }
+
+ public int getTier(ItemStack aStack) {
+ return 2;
+ }
+
+ public int getTransferLimit(ItemStack aStack) {
+ return openGuiNr==1?128:512;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/armor/FluidSync.java b/src/main/java/gregtech/common/items/armor/FluidSync.java
new file mode 100644
index 0000000000..70ee268188
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/FluidSync.java
@@ -0,0 +1,67 @@
+package gregtech.common.items.armor;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.WorldServer;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.google.common.base.Charsets;
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+
+public class FluidSync /**implements IPacket**/ {
+ String playerName;
+ int amount;
+ String fluid;
+
+// @Override
+ public byte getPacketID() {
+ return 0;
+ }
+
+ public FluidSync(String player, int amount, String fluid) {
+ this.playerName = player;
+ this.amount = amount;
+ this.fluid = fluid.toLowerCase();
+ }
+
+// @Override
+ public ByteArrayDataOutput encode() {
+ ByteArrayDataOutput rOut = ByteStreams.newDataOutput(4);
+ rOut.writeUTF(playerName + ";" + amount + ";" + fluid);
+ return rOut;
+ }
+
+// @Override
+// public IPacket decode(ByteArrayDataInput aData) {
+// String tmp = aData.readUTF();
+// String[] tmp2 = tmp.split(";");
+// return new FluidSync(tmp2[0], Integer.parseInt(tmp2[1]), tmp2[2].toLowerCase());
+// }
+//
+// @Override
+// public void process(IBlockAccess aWorld, INetworkHandler aNetworkHandler) {
+// WorldServer[] worlds = DimensionManager.getWorlds();
+// EntityPlayer tmp;
+// for (int i = 0; i < worlds.length; i++) {
+// tmp = worlds[i].getPlayerEntityByName(playerName);
+// if (tmp != null) {
+// try {
+// if (fluid.equals("null")) {
+// tmp.openContainer.getSlot(12).putStack(null);
+// } else {
+// tmp.openContainer.getSlot(12).putStack(UT.Fluids.display(new FluidStack(FluidRegistry.getFluid(fluid), amount), true));
+// }
+// tmp.openContainer.detectAndSendChanges();
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+//
+// }
+// }
+// }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/FluidSync2.java b/src/main/java/gregtech/common/items/armor/FluidSync2.java
new file mode 100644
index 0000000000..de801aad8a
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/FluidSync2.java
@@ -0,0 +1,67 @@
+package gregtech.common.items.armor;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.WorldServer;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.google.common.base.Charsets;
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+
+public class FluidSync2 /**implements IPacket**/ {
+ String playerName;
+
+// @Override
+ public byte getPacketID() {
+ return 1;
+ }
+
+ public FluidSync2(String player) {
+ this.playerName = player;
+ }
+
+// @Override
+ public ByteArrayDataOutput encode() {
+ ByteArrayDataOutput rOut = ByteStreams.newDataOutput(4);
+ rOut.writeUTF(playerName);
+ return rOut;
+ }
+
+// @Override
+// public IPacket decode(ByteArrayDataInput aData) {
+// return new FluidSync2(aData.readUTF());
+// }
+//
+// @Override
+// public void process(IBlockAccess aWorld, INetworkHandler aNetworkHandler) {
+// WorldServer[] worlds = DimensionManager.getWorlds();
+// EntityPlayer tmp;
+// for (int i = 0; i < worlds.length; i++) {
+// tmp = worlds[i].getPlayerEntityByName(playerName);
+// if (tmp != null) {
+// try {
+// ItemStack tmp2 = tmp.inventory.getItemStack();
+// ItemStack tmp3 = UT.Fluids.getContainerForFilledItem(tmp2, true);
+// if (tmp2.stackSize <= 1) {
+// tmp2 = null;
+// } else {
+// tmp2.stackSize--;
+// }
+// tmp.inventory.setItemStack(tmp2);
+// if(tmp3!=null){
+// tmp3.stackSize=1;
+// tmp.inventory.addItemStackToInventory(tmp3);}
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+//
+// }
+// }
+// }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/GuiElectricArmor1.java b/src/main/java/gregtech/common/items/armor/GuiElectricArmor1.java
new file mode 100644
index 0000000000..25541f85ab
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/GuiElectricArmor1.java
@@ -0,0 +1,310 @@
+package gregtech.common.items.armor;
+
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Utility;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidContainerItem;
+
+@SideOnly(Side.CLIENT)
+public class GuiElectricArmor1 extends GuiContainer {
+ ContainerModularArmor cont;
+ EntityPlayer player;
+ private int tab;
+
+ public GuiElectricArmor1(ContainerModularArmor containerModularArmor, EntityPlayer aPlayer) {
+ super(containerModularArmor);
+ player = aPlayer;
+ cont = containerModularArmor;
+ tab = 0;
+ }
+
+ public String seperateNumber(long number){
+ DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
+ DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
+ symbols.setGroupingSeparator(' ');
+ return formatter.format(number);
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int x, int y) {
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ int x2 = x - xStart;
+ int y2 = y - yStart;
+ drawTooltip(x2, y2 + 5);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ this.mc.getTextureManager().bindTexture(new ResourceLocation("gtextras", "textures/gui/armorgui3x4.png"));
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ //Draw background
+ drawTexturedModalRect(xStart, yStart, 0, 0, xSize, ySize);
+ //Draw active arrows
+ drawTexturedModalRect(xStart + 10, yStart + 70, 219, 11, 14, 5);
+ //Draw active armor symbol
+ switch (cont.mInvArmor.data.type) {
+ case 0:
+ drawTexturedModalRect(xStart + 73, yStart + 68, 177, 10, 10, 9);
+ break;
+ case 1:
+ drawTexturedModalRect(xStart + 83, yStart + 68, 187, 10, 10, 9);
+ break;
+ case 2:
+ drawTexturedModalRect(xStart + 93, yStart + 68, 197, 10, 10, 9);
+ break;
+ case 3:
+ drawTexturedModalRect(xStart + 103, yStart + 68, 207, 10, 10, 9);
+ break;
+ default:
+ break;
+ }
+ //Draw active tab
+ switch(tab){
+ case 0:
+ break;
+ case 1:
+ drawTexturedModalRect(xStart + 7, yStart + 14, 2, 167, 104, 54);
+ break;
+ case 2:
+ drawTexturedModalRect(xStart + 7, yStart + 14, 107, 167, 104, 54);
+ break;
+ default:
+ break;
+ }
+
+ if(cont.mInvArmor.data.tankCap>0){
+ drawTexturedModalRect(xStart + 94, yStart + 32, 231, 69, 16, 34);
+ }
+
+ int bar = (int) Math.floor(18 * (cont.mInvArmor.data.weight/(float)1000));
+ drawTexturedModalRect(xStart + 15, yStart + 7, 217, 26, bar, 5);
+ drawTexturedModalRect(xStart + bar + 15, yStart + 7, 197+bar, 26, 18-bar, 5);
+
+ if(tab==0){
+ //processing power bar
+ bar = Math.min((int) Math.floor(52 * ((float)cont.mInvArmor.data.processingPowerUsed/(float)cont.mInvArmor.data.processingPower)),52);
+ drawTexturedModalRect(xStart + 17, yStart + 17, 177, 146, bar, 5);
+ drawTexturedModalRect(xStart + bar + 17, yStart + 17, 177+bar, 139, 52-bar, 5);
+ }else if(tab==1){
+
+ }else{
+ //Def tab values
+ if(cont.mInvArmor.data.physicalDef>0)drawTexturedModalRect(xStart + 30, yStart + 20, 186, 33, 7, 7);
+ drawBars(31, 20, cont.mInvArmor.data.physicalDef);
+ if(cont.mInvArmor.data.projectileDef>0)drawTexturedModalRect(xStart + 30, yStart + 29, 186, 42, 7, 7);
+ drawBars(31, 29, cont.mInvArmor.data.projectileDef);
+ if(cont.mInvArmor.data.fireDef>0)drawTexturedModalRect(xStart + 30, yStart + 38, 186, 51, 7, 7);
+ drawBars(31, 38, cont.mInvArmor.data.fireDef);
+ if(cont.mInvArmor.data.magicDef>0)drawTexturedModalRect(xStart + 30, yStart + 47, 186, 60, 7, 7);
+ drawBars(31, 47, cont.mInvArmor.data.magicDef);
+ if(cont.mInvArmor.data.explosionDef>0)drawTexturedModalRect(xStart + 30, yStart + 56, 186, 69, 7, 7);
+ drawBars(31, 56, cont.mInvArmor.data.explosionDef);
+ if(cont.mInvArmor.data.radiationDef>0)drawTexturedModalRect(xStart + 61, yStart + 20, 186, 87, 7, 7);
+ drawBars(62, 20, cont.mInvArmor.data.radiationDef);
+ if(cont.mInvArmor.data.electricDef>0)drawTexturedModalRect(xStart + 61, yStart + 29, 186, 96, 7, 7);
+ drawBars(62, 29, cont.mInvArmor.data.electricDef);
+ if(cont.mInvArmor.data.witherDef>0)drawTexturedModalRect(xStart + 61, yStart + 38, 186, 105, 7, 7);
+ drawBars(62, 38, cont.mInvArmor.data.witherDef);
+ if(cont.mInvArmor.data.fallDef>0)drawTexturedModalRect(xStart + 61, yStart + 47, 186, 114, 7, 7);
+ if(cont.mInvArmor.data.thorns>0)drawTexturedModalRect(xStart + 61, yStart + 56, 186, 123, 7, 7);
+ if(cont.mInvArmor.data.magnet>0)drawTexturedModalRect(xStart + 70, yStart + 56, 186, 78, 7, 7);
+ }
+
+
+ }
+
+ protected void mouseClicked(int mouseX, int mouseY, int mouseBtn) {
+ int xStart = mouseX-((width - xSize) / 2);
+ int yStart = mouseY-((height - ySize) / 2);
+ if(yStart>68&&yStart<77){
+ if(xStart>18&&xStart<26){
+ tab++;
+ }else if(xStart>8&&xStart<17){
+ tab--;
+ }
+ if(tab>2){tab=0;}
+ if(tab<0){tab=2;}
+ if(xStart>72&&xStart<112){
+ if(xStart>72&&xStart<81&&cont.mInvArmor.data.helmet!=null){cont.mInvArmor.data.helmet.openGui=true;player.closeScreen();}
+ if(xStart>82&&xStart<91&&cont.mInvArmor.data.chestplate!=null){cont.mInvArmor.data.chestplate.openGui=true;player.closeScreen();}
+ if(xStart>92&&xStart<101&&cont.mInvArmor.data.leggings!=null){cont.mInvArmor.data.leggings.openGui=true;player.closeScreen();}
+ if(xStart>102&&xStart<112&&cont.mInvArmor.data.boots!=null){cont.mInvArmor.data.boots.openGui=true;player.closeScreen();}
+ }
+ }
+// Slot slot = getSlotAtPosition(mouseX, mouseY);
+// if (slot != null && slot instanceof SlotFluid && player != null) {
+// ItemStack tmp = player.inventory.getItemStack();
+// if (tmp == null) {
+// GTExtras.NET.sendToServer(new FluidSync(player.getCommandSenderName(), 0, "null"));
+// }
+// if (tmp != null && tmp.getItem() instanceof IFluidContainerItem) {
+// FluidStack tmp2 = ((IFluidContainerItem) tmp.getItem()).getFluid(tmp);
+// if (!slot.getHasStack() && tmp2 != null) {
+// slot.putStack(UT.Fluids.display(tmp2, true));
+// GTExtras.NET.sendToServer(new FluidSync(player.getCommandSenderName(), tmp2.amount, UT.Fluids.name(tmp2, false)));
+// ItemStack tmp4 = UT.Fluids.getContainerForFilledItem(tmp, true);
+// tmp4.stackSize = 1;
+// if (tmp.stackSize > 1) {
+// player.inventory.addItemStackToInventory(tmp4);
+// tmp.stackSize--;
+// player.inventory.setItemStack(tmp);
+// GTExtras.NET.sendToServer(new FluidSync2(player.getCommandSenderName()));
+// } else {
+// player.inventory.setItemStack(null);
+// player.inventory.addItemStackToInventory(tmp4);
+// GTExtras.NET.sendToServer(new FluidSync2(player.getCommandSenderName()));
+// }
+//
+// } else if (slot.getHasStack() && tmp2 != null) {
+// Item fluidSlot = slot.getStack().getItem();
+// if (fluidSlot.getDamage(slot.getStack()) == tmp2.getFluidID()) {
+// NBTTagCompound nbt = slot.getStack().getTagCompound();
+// if (nbt != null) {
+// tmp2.amount += nbt.getLong("mFluidDisplayAmount");
+// ItemStack tmp3 = player.inventory.getItemStack();
+// if (tmp3.stackSize <= 1) {
+// tmp3 = null;
+// } else {
+// tmp3.stackSize--;
+// }
+// player.inventory.setItemStack(tmp3);
+// GTExtras.NET.sendToServer(new FluidSync2(player.getCommandSenderName()));
+// slot.putStack(UT.Fluids.display(tmp2, true));
+// GTExtras.NET.sendToServer(new FluidSync(player.getCommandSenderName(), tmp2.amount, UT.Fluids.name(tmp2, false)));
+// }
+// }
+// }
+// }
+// }
+ super.mouseClicked(mouseX, mouseY, mouseBtn);
+ }
+
+ protected void drawTooltip(int x, int y) {
+ List<String> list = new ArrayList<String>();
+ //General tooltips
+ if(x>=7&&y>=11&&x<=33&&y<=17){
+ list.add(GT_LanguageManager.getTranslation("weight") + ": " + cont.mInvArmor.data.weight);
+ list.add("Total Weight: "+cont.mInvArmor.data.maxWeight);
+ if (cont.mInvArmor.data.weight > 1000)
+ list.add("Too Heavy!");
+ }
+ if(x>=56&&y>=11&&x<=112&&y<=17){
+ list.add("Stored Energy: "+seperateNumber(cont.mInvArmor.data.charge)+" EU");
+ }
+ if(y>74&&y<83){
+ if(x>8&&x<17){
+ list.add("Previous Page");
+ }else if(x>18&&x<27){
+ list.add("Next Page");
+ }else if(x>72&&x<80){
+ list.add("Helmet");
+ }else if(x>81&&x<90){
+ list.add("Chestplate");
+ }else if(x>91&&x<100){
+ list.add("Leggings");
+ }else if(x>101&&x<110){
+ list.add("Boots");
+ }
+ }
+ if(tab==0){
+ if(x>=93&&y>=36&&x<=110&&y<=71){list.add("Tank Capacity: "+cont.mInvArmor.data.tankCap+"L");
+ }
+ if(x>=7&&y>=22&&x<=70&&y<=28){list.add("Processing Power Provided: "+cont.mInvArmor.data.processingPower);
+ list.add("Processing Power Used: "+cont.mInvArmor.data.processingPowerUsed);
+ }
+ }else if(tab==1){
+
+ }else{
+ if (x >= 28 && x <= 58) {
+ if (y >= 25 && y <= 32) {
+ list.add(GT_LanguageManager.getTranslation("phydef") + ": " + (Math.round(cont.mInvArmor.data.physicalDef * 1000) / 10.0) + "%");
+ } else if (y >= 33 && y <= 41) {
+ list.add(GT_LanguageManager.getTranslation("prodef") + ": " + (Math.round(cont.mInvArmor.data.projectileDef * 1000) / 10.0) + "%");
+ } else if (y >= 42 && y <= 50) {
+ list.add(GT_LanguageManager.getTranslation("firedef") + ": " + (Math.round(cont.mInvArmor.data.fireDef * 1000) / 10.0) + "%");
+ } else if (y >= 51 && y <= 59) {
+ list.add(GT_LanguageManager.getTranslation("magdef") + ": " + (Math.round(cont.mInvArmor.data.magicDef * 1000) / 10.0) + "%");
+ } else if (y >= 60 && y <= 68) {
+ list.add(GT_LanguageManager.getTranslation("expdef") + ": " + (Math.round(cont.mInvArmor.data.explosionDef * 1000) / 10.0) + "%");
+ }
+ } else if (x >= 59 && x <= 90) {
+ if (y >= 25 && y <= 32) {
+ list.add(GT_LanguageManager.getTranslation("raddef") + ": " + (Math.round(cont.mInvArmor.data.radiationDef * 1000) / 10.0) + "%");
+ if(cont.mInvArmor.data.fullRadiationDef){
+ list.add("Radiation Immunity");}
+ } else if (y >= 33 && y <= 41) {
+ list.add(GT_LanguageManager.getTranslation("eledef") + ": " + (Math.round(cont.mInvArmor.data.electricDef * 1000) / 10.0) + "%");
+ if(cont.mInvArmor.data.fullElectricDef){
+ list.add("Electric Immunity");}
+ } else if (y >= 42 && y <= 50) {
+ list.add(GT_LanguageManager.getTranslation("whidef") + ": " + (Math.round(cont.mInvArmor.data.witherDef * 1000) / 10.0) + "%");
+ } else if (y >= 51 && y <= 59) {
+ if(cont.mInvArmor.data.type!=3){
+ list.add("Fall Damage absorbtion");
+ list.add("Only for Boots");
+ }else{
+ list.add(GT_LanguageManager.getTranslation("abs1") + " " + (int) Math.round(cont.mInvArmor.data.fallDef) + GT_LanguageManager.getTranslation("abs2"));}
+ } else if (y >= 60 && y <= 68) {
+ if(x<69){
+ list.add(GT_LanguageManager.getTranslation("thorns") + ": " + (int) Math.round(cont.mInvArmor.data.thornsSingle) + " Dmg");
+ list.add("Total "+GT_LanguageManager.getTranslation("thorns") + ": " + (int) Math.round(cont.mInvArmor.data.thorns) + " Dmg");
+ }else{
+ list.add(GT_LanguageManager.getTranslation("magnet") + ": " + cont.mInvArmor.data.magnetSingle + " m");
+ list.add("Total "+GT_LanguageManager.getTranslation("magnet") + ": " + cont.mInvArmor.data.magnet + " m");}
+ }
+ }
+ }
+ if (!list.isEmpty())
+ drawHoveringText(list, x, y, fontRendererObj);
+ }
+
+ public void drawBars(int x, int y, float value) {
+
+ int bar = (int) Math.floor(18 * value);
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ xStart += 8;
+ yStart += 1;
+ drawTexturedModalRect(xStart + x, yStart + y, 217, 26, bar, 5);
+ drawTexturedModalRect(xStart+ bar + x, yStart + y, 197+bar, 26, 18-bar, 5);
+ }
+
+ protected Slot getSlotAtPosition(int p_146975_1_, int p_146975_2_) {
+ for (int k = 0; k < cont.inventorySlots.size(); ++k) {
+ Slot slot = (Slot) cont.inventorySlots.get(k);
+ if (this.isMouseOverSlot(slot, p_146975_1_, p_146975_2_)) {
+ return slot;
+ }
+ }
+ return null;
+ }
+
+ private boolean isMouseOverSlot(Slot p_146981_1_, int p_146981_2_, int p_146981_3_) {
+ return this.func_146978_c(p_146981_1_.xDisplayPosition, p_146981_1_.yDisplayPosition, 16, 16, p_146981_2_, p_146981_3_);
+ }
+}
diff --git a/src/main/java/gregtech/common/items/armor/GuiModularArmor.java b/src/main/java/gregtech/common/items/armor/GuiModularArmor.java
new file mode 100644
index 0000000000..c0e4b188ae
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/GuiModularArmor.java
@@ -0,0 +1,196 @@
+package gregtech.common.items.armor;
+
+import gregtech.api.util.GT_LanguageManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.util.ResourceLocation;
+
+@SideOnly(Side.CLIENT)
+public class GuiModularArmor extends GuiContainer {
+ ContainerModularArmor cont;
+ EntityPlayer player;
+
+ public GuiModularArmor(ContainerModularArmor containerModularArmor,EntityPlayer aPlayer) {
+ super(containerModularArmor);
+ cont = containerModularArmor;
+ this.player = aPlayer;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int x, int y) {
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ int x2 = x - xStart;
+ int y2 = y - yStart;
+ drawTooltip(x2, y2 + 5);
+ }
+
+ protected void drawTooltip(int x, int y) {
+ List<String> list = new ArrayList<String>();
+ if (x >= 10 && x <= 17) {
+ if (y >= 20 && y <= 27) {
+ list.add(GT_LanguageManager.getTranslation("weight") + ": " + cont.mInvArmor.data.weight);
+ list.add("Total Weight: "+cont.mInvArmor.data.maxWeight);
+ if (cont.mInvArmor.data.weight > 1000)
+ list.add("Too Heavy!");
+ } else if (y >= 29 && y <= 36) {
+ list.add(GT_LanguageManager.getTranslation("phydef") + ": " + (Math.round(cont.mInvArmor.data.physicalDef * 1000) / 10.0) + "%");
+ } else if (y >= 38 && y <= 45) {
+ list.add(GT_LanguageManager.getTranslation("prodef") + ": " + (Math.round(cont.mInvArmor.data.projectileDef * 1000) / 10.0) + "%");
+ } else if (y >= 47 && y <= 54) {
+ list.add(GT_LanguageManager.getTranslation("firedef") + ": " + (Math.round(cont.mInvArmor.data.fireDef * 1000) / 10.0) + "%");
+ } else if (y >= 56 && y <= 63) {
+ list.add(GT_LanguageManager.getTranslation("magdef") + ": " + (Math.round(cont.mInvArmor.data.magicDef * 1000) / 10.0) + "%");
+ } else if (y >= 65 && y <= 72) {
+ list.add(GT_LanguageManager.getTranslation("expdef") + ": " + (Math.round(cont.mInvArmor.data.explosionDef * 1000) / 10.0) + "%");
+ }
+ } else if (x >= 59 && x <= 66) {
+ if (y >= 20 && y <= 27) {
+ list.add(GT_LanguageManager.getTranslation("thorns") + ": " + (int) Math.round(cont.mInvArmor.data.thornsSingle) + " Dmg");
+ list.add("Total "+GT_LanguageManager.getTranslation("thorns") + ": " + (int) Math.round(cont.mInvArmor.data.thorns) + " Dmg");
+ } else if (y >= 29 && y <= 36) {
+ list.add(GT_LanguageManager.getTranslation("magnet") + ": " + cont.mInvArmor.data.magnetSingle + " m");
+ list.add("Total "+GT_LanguageManager.getTranslation("magnet") + ": " + cont.mInvArmor.data.magnet + " m");
+ } else if (y >= 38 && y <= 45) {
+ list.add(GT_LanguageManager.getTranslation("raddef") + ": " + (Math.round(cont.mInvArmor.data.radiationDef * 1000) / 10.0) + "%");
+ if(cont.mInvArmor.data.fullRadiationDef){
+ list.add("Radiation Immunity");}
+ } else if (y >= 47 && y <= 54) {
+ list.add(GT_LanguageManager.getTranslation("eledef") + ": " + (Math.round(cont.mInvArmor.data.electricDef * 1000) / 10.0) + "%");
+ if(cont.mInvArmor.data.fullElectricDef){
+ list.add("Electric Immunity");}
+ } else if (y >= 56 && y <= 63) {
+ list.add(GT_LanguageManager.getTranslation("whidef") + ": " + (Math.round(cont.mInvArmor.data.witherDef * 1000) / 10.0) + "%");
+ } else if (y >= 65 && y <= 72) {
+ if(cont.mInvArmor.data.type!=3){
+ list.add("Fall Damage absorbtion");
+ list.add("Only for Boots");
+ }else{
+ list.add(GT_LanguageManager.getTranslation("abs1") + " " + (int) Math.round(cont.mInvArmor.data.fallDef) + GT_LanguageManager.getTranslation("abs2"));}
+ }
+ }
+ if (!list.isEmpty())
+ drawHoveringText(list, x, y, fontRendererObj);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ this.mc.getTextureManager().bindTexture(new ResourceLocation("gtextras", "textures/gui/armorgui3x3.png"));
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ drawTexturedModalRect(xStart, yStart, 0, 0, xSize, ySize);
+
+ switch (cont.mInvArmor.data.type) {
+ case 0:
+ drawTexturedModalRect(xStart + 124, yStart + 67, 177, 10, 10, 9);
+ break;
+ case 1:
+ drawTexturedModalRect(xStart + 134, yStart + 67, 187, 10, 10, 9);
+ break;
+ case 2:
+ drawTexturedModalRect(xStart + 144, yStart + 67, 197, 10, 10, 9);
+ break;
+ case 3:
+ drawTexturedModalRect(xStart + 154, yStart + 67, 207, 10, 10, 9);
+ break;
+ default:
+ break;
+ }
+
+ // Weight: 10, 15 =191, 20
+ if(cont.mInvArmor.data.weight>0){
+ drawTexturedModalRect(xStart + 10, yStart + 15, 191, 20, 7, 7);
+ }
+ // Physical Def: 10, 24 =191, 29
+ if(cont.mInvArmor.data.physicalDef>0){
+ drawTexturedModalRect(xStart + 10, yStart + 24, 191, 29, 7, 7);
+ }
+ // Projectile Def: 10, 33 =191, 38
+ if(cont.mInvArmor.data.projectileDef>0){
+ drawTexturedModalRect(xStart + 10, yStart + 33, 191, 38, 7, 7);
+ }
+ // Fire Def: 10, 42 =191, 47
+ if(cont.mInvArmor.data.fireDef>0){
+ drawTexturedModalRect(xStart + 10, yStart + 42, 191, 47, 7, 7);
+ }
+ // Magic Def: 10, 51 =191, 56
+ if(cont.mInvArmor.data.magicDef>0){
+ drawTexturedModalRect(xStart + 10, yStart + 51, 191, 56, 7, 7);
+ }
+ // Explosive Def: 10, 60 =191, 65
+ if(cont.mInvArmor.data.explosionDef>0){
+ drawTexturedModalRect(xStart + 10, yStart + 60, 191, 65, 7, 7);
+ }
+ // Thorns: 59, 15 =198, 20
+ if(cont.mInvArmor.data.thorns>0){
+ drawTexturedModalRect(xStart + 59, yStart + 15, 198, 20, 7, 7);
+ }
+ // Magnet: 59, 24 =198, 29
+ if(cont.mInvArmor.data.magnetSingle>0){
+ drawTexturedModalRect(xStart + 59, yStart + 24, 198, 29, 7, 7);
+ }
+ // Radiation Def: 59, 33 =198, 38
+ if(cont.mInvArmor.data.radiationDef>0){
+ drawTexturedModalRect(xStart + 59, yStart + 33, 198, 38, 7, 7);
+ }
+ // Electric Def: 59, 42 =198, 47
+ if(cont.mInvArmor.data.electricDef>0){
+ drawTexturedModalRect(xStart + 59, yStart + 42, 198, 47, 7, 7);
+ }
+ // Wither Def: 59, 51 =198, 56
+ if(cont.mInvArmor.data.witherDef>0){
+ drawTexturedModalRect(xStart + 59, yStart + 51, 198, 56, 7, 7);
+ }
+ // Fall Reduction: 59, 60 =198, 65
+ if(cont.mInvArmor.data.fallDef>0){
+ drawTexturedModalRect(xStart + 59, yStart + 60, 198, 65, 7, 7);
+ }
+
+ drawBars(10, 24, cont.mInvArmor.data.physicalDef);
+ drawBars(10, 33, cont.mInvArmor.data.projectileDef);
+ drawBars(10, 42, cont.mInvArmor.data.fireDef);
+ drawBars(10, 51, cont.mInvArmor.data.magicDef);
+ drawBars(10, 60, cont.mInvArmor.data.explosionDef);
+ drawBars(59, 33, cont.mInvArmor.data.radiationDef);
+ drawBars(59, 42, cont.mInvArmor.data.electricDef);
+ drawBars(59, 51, cont.mInvArmor.data.witherDef);
+ }
+
+ public void drawBars(int x, int y, float value) {
+
+ int bar = (int) Math.floor(35 * value);
+ int xStart = (width - xSize) / 2;
+ int yStart = (height - ySize) / 2;
+ xStart += 8;
+ yStart += 1;
+ //drawRect(x + xStart, y + yStart, x + bar + xStart, y + 5 + yStart, 0x8000FF00);
+ //drawRect(x + bar + xStart, y + yStart, x + 36 + xStart, y + 5 + yStart, 0x80FF0000);
+ drawTexturedModalRect(xStart + x, yStart + y, 177, 78, bar, 5);
+ drawTexturedModalRect(xStart+ bar + x, yStart + y, 177, 73, 35-bar, 5);
+ }
+
+ protected void mouseClicked(int mouseX, int mouseY, int mouseBtn) {
+ int xStart = mouseX-((width - xSize) / 2);
+ int yStart = mouseY-((height - ySize) / 2);
+ if(yStart>67&&yStart<77){
+ if(xStart>124&&xStart<163){
+ if(xStart>124&&xStart<133&&cont.mInvArmor.data.helmet!=null){cont.mInvArmor.data.helmet.openGui=true;player.closeScreen();}
+ if(xStart>134&&xStart<143&&cont.mInvArmor.data.chestplate!=null){cont.mInvArmor.data.chestplate.openGui=true;player.closeScreen();}
+ if(xStart>144&&xStart<153&&cont.mInvArmor.data.leggings!=null){cont.mInvArmor.data.leggings.openGui=true;player.closeScreen();}
+ if(xStart>154&&xStart<163&&cont.mInvArmor.data.boots!=null){cont.mInvArmor.data.boots.openGui=true;player.closeScreen();}
+ }
+ }
+ super.mouseClicked(mouseX, mouseY, mouseBtn);
+ }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/InventoryArmor.java b/src/main/java/gregtech/common/items/armor/InventoryArmor.java
new file mode 100644
index 0000000000..0d615ed732
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/InventoryArmor.java
@@ -0,0 +1,235 @@
+package gregtech.common.items.armor;
+
+import gregtech.api.util.GT_Utility;
+
+import java.util.Random;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.oredict.OreDictionary;
+
+public class InventoryArmor implements IInventory {
+
+ public ItemStack[] parts;
+ public ItemStack parent;
+// float[] def = new float[32];
+ public int maxCharge;
+ public int charge;
+ public ArmorData data;
+
+ public InventoryArmor(Class<ModularArmor_Item> class1, ItemStack currentEquippedItem) {
+ this.parts = new ItemStack[16];
+ this.parent = currentEquippedItem;
+ setUID(false);
+ readFromNBT(currentEquippedItem.getTagCompound());
+// for (int i = 0; i < def.length; i++) {
+// def[i] = 0.0f;
+// }
+ if(currentEquippedItem.getItem() instanceof ModularArmor_Item){
+ data = ((ModularArmor_Item)currentEquippedItem.getItem()).data;
+ }
+
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return this.parts.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int i) {
+ return parts[i];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int i, int j) {
+ if (parts[i] == null) {
+ return null;
+ }
+
+ ItemStack product;
+ if (parts[i].stackSize <= j) {
+ product = parts[i];
+ parts[i] = null;
+// def = ArmorCalculation.calculateArmor(parts);
+ data.calculateArmor(parts);
+ return product;
+ } else {
+ product = parts[i].splitStack(j);
+ if (parts[i].stackSize == 0) {
+ parts[i] = null;
+ }
+// def = ArmorCalculation.calculateArmor(parts);
+ data.calculateArmor(parts);
+ return product;
+ }
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int slot) {
+ if (parts[slot] == null) {
+ return null;
+ }
+ ItemStack toReturn = parts[slot];
+ parts[slot] = null;
+ return toReturn;
+ }
+
+ @Override
+ public void setInventorySlotContents(int i, ItemStack itemstack) {
+ parts[i] = itemstack;
+// def = ArmorCalculation.calculateArmor(parts);
+ data.calculateArmor(parts);
+ }
+
+ @Override
+ public String getInventoryName() {
+ return "container.armor";
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return true;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 1;
+ }
+
+ @Override
+ public void markDirty() {
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return true;
+ }
+
+ @Override
+ public void openInventory() {
+ }
+
+ @Override
+ public void closeInventory() {
+ }
+
+ @Override
+ public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
+ return true;
+ }
+
+ public void onGuiSaved(EntityPlayer entityplayer) {
+ parent = findParentInInventory(entityplayer);
+ if (parent != null) {
+ save();
+ }
+ }
+
+ public void save() {
+ NBTTagCompound nbt = parent.getTagCompound();
+ if (nbt == null) {
+ nbt = new NBTTagCompound();
+ }
+ writeToNBT(nbt);
+ ModularArmor_Item tmp = (ModularArmor_Item) parent.getItem();
+ tmp.data.calculateArmor(parts);
+ parent.setTagCompound(nbt);
+ }
+
+ public void writeToNBT(NBTTagCompound nbt) {
+ NBTTagList nbttaglist = new NBTTagList();
+ for (int i = 0; i < parts.length; i++) {
+ if (parts[i] != null) {
+ NBTTagCompound nbttagcompound1 = new NBTTagCompound();
+ nbttagcompound1.setByte("Slot", (byte) i);
+ parts[i].writeToNBT(nbttagcompound1);
+ nbttaglist.appendTag(nbttagcompound1);
+ }
+ }
+ nbt.setTag("Items", nbttaglist);
+ }
+
+ public ItemStack findParentInInventory(EntityPlayer player) {
+ for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
+ ItemStack stack = player.inventory.getStackInSlot(i);
+ if (isIdenticalItem(stack, parent)) {
+ return stack;
+ }
+ }
+ return parent;
+ }
+
+ public static boolean isIdenticalItem(ItemStack lhs, ItemStack rhs) {
+ if (lhs == null || rhs == null) {
+ return false;
+ }
+
+ if (lhs.getItem() != rhs.getItem()) {
+ return false;
+ }
+
+ if (lhs.getItemDamage() != OreDictionary.WILDCARD_VALUE) {
+ if (lhs.getItemDamage() != rhs.getItemDamage()) {
+ return false;
+ }
+ }
+
+ return ItemStack.areItemStackTagsEqual(lhs, rhs);
+ }
+
+ public void readFromNBT(NBTTagCompound nbt) {
+ if (nbt == null) {
+ return;
+ }
+ if (nbt.hasKey("Items")) {
+ NBTTagList nbttaglist = nbt.getTagList("Items", 10);
+ parts = new ItemStack[getSizeInventory()];
+ for (int i = 0; i < nbttaglist.tagCount(); i++) {
+ NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
+ byte byte0 = nbttagcompound1.getByte("Slot");
+ if (byte0 >= 0 && byte0 < parts.length) {
+ parts[byte0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
+ //parts[12]= UT.Fluids.display(UT.Fluids.water(1234), true);
+ }
+ }
+ }
+
+ }
+
+ protected void setUID(boolean override) {
+ if (parent.getTagCompound() == null) {
+ parent.setTagCompound(new NBTTagCompound());
+ }
+ NBTTagCompound nbt = parent.getTagCompound();
+ if (override || !nbt.hasKey("UID")) {
+ nbt.setInteger("UID", new Random().nextInt());
+ }
+ }
+
+ public static int getOccupiedSlotCount(ItemStack itemStack) {
+ NBTTagCompound nbt = itemStack.getTagCompound();
+ if (nbt == null) {
+ return 0;
+ }
+
+ int count = 0;
+ if (nbt.hasKey("Items")) {
+ NBTTagList nbttaglist = nbt.getTagList("Items", 10);
+ for (int i = 0; i < nbttaglist.tagCount(); i++) {
+ NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
+ ItemStack itemStack1 = ItemStack.loadItemStackFromNBT(nbttagcompound1);
+ if (itemStack1 != null && itemStack1.stackSize > 0) {
+ count++;
+ }
+ }
+ }
+ return count;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java b/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java
new file mode 100644
index 0000000000..db7cbd604a
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java
@@ -0,0 +1,449 @@
+package gregtech.common.items.armor;
+
+import gregtech.api.damagesources.GT_DamageSources;
+import ic2.core.IC2;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
+import cpw.mods.fml.common.FMLCommonHandler;
+import cpw.mods.fml.common.Optional;
+import thaumcraft.api.IGoggles;
+import thaumcraft.api.nodes.IRevealer;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.client.settings.GameSettings;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemArmor;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.ItemArmor.ArmorMaterial;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraftforge.common.ISpecialArmor;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.event.entity.living.LivingFallEvent;
+
+@Optional.InterfaceList(value = { @Optional.Interface(iface = "thaumcraft.api.IGoggles", modid = "Thaumcraft", striprefs = true),
+ @Optional.Interface(iface = "thaumcraft.api.nodes.IRevealer", modid = "Thaumcraft", striprefs = true) })
+public class ModularArmor_Item extends ItemArmor implements ISpecialArmor, IGoggles, IRevealer {
+
+ public String mName;
+ public int timer = 160;
+ public Item repairMaterial;
+ public int openGuiNr;
+ public ArmorData data;
+ public int jumpticks;
+
+ // public int maxEU;
+
+ public ModularArmor_Item(int aArmorIndex, int aType, String name, int gui) {
+ super(ArmorMaterial.DIAMOND, aArmorIndex, aType);
+ MinecraftForge.EVENT_BUS.register(this);
+ setUnlocalizedName("gtextras:" + name);
+ GameRegistry.registerItem(this, name);
+ mName = name;
+ int mMaxDamage = (gui + 1) * 1024;
+ mMaxDamage *= getBaseAbsorptionRatio() * 2.5;
+ setMaxDamage(mMaxDamage);
+ repairMaterial = Items.leather;
+ openGuiNr = gui;
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ if (data == null) {
+ data = fillArmorData(aPlayer, aStack);
+ }
+ if (!aWorld.isRemote) {
+ //TODO
+// aPlayer.openGui(GTExtras.INSTANCE, openGuiNr, aWorld, (int) aPlayer.posX, (int) aPlayer.posY, (int) aPlayer.posZ);
+ }
+ return aStack;
+ }
+
+ @Override
+ public ISpecialArmor.ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
+ if (data == null) {
+ data = fillArmorData((EntityPlayer) player, armor);
+ }
+ if (player != null && armor != null && source != null) {
+ double tmp = 0.0d;
+ if (source.isMagicDamage()) {
+ tmp = data.magicDef;
+ } else if (source == GT_DamageSources.getRadioactiveDamage()) {
+ tmp = data.radiationDef;
+ } else if (source == GT_DamageSources.getElectricDamage()) {
+ tmp = data.electricDef;
+ } else if (source == DamageSource.wither) {
+ tmp = data.witherDef;
+ } else if (source.isFireDamage() || source == GT_DamageSources.getHeatDamage()) {
+ tmp = data.fireDef;
+ } else if (source.isExplosion()) {
+ tmp = data.explosionDef;
+ } else if (source.isProjectile()) {
+ tmp = data.projectileDef;
+ } else {
+ tmp = data.physicalDef;
+ }
+ if (data.thorns > 0.1d && source != DamageSource.fall && source.getSourceOfDamage() != null) {
+ source.getSourceOfDamage().attackEntityFrom(new DamageSource("Thorns"), data.thorns);
+ }
+
+ // fallDamage
+ if (source == DamageSource.fall) {
+ int fallDef = 0;
+ ItemStack stack = player.getEquipmentInSlot(1);
+ if (stack != null && stack.getItem() instanceof ModularArmor_Item) {
+ fallDef = (int) data.boots.fallDef;
+ }
+ tmp = 1.0d - (fallDef > damage ? 0.0d : (1.0d - tmp) * 0.5d);
+ }
+ if (tmp == 0.0d) {
+ tmp = data.physicalDef;
+ }
+ if (openGuiNr == 2) {
+ tmp = 1.0f - ((1.0f - tmp) / 2.0f);
+ }
+ return new ISpecialArmor.ArmorProperties(0, data.getBaseAbsorptionRatio() * tmp, 1000);
+
+ } else {
+ return new ISpecialArmor.ArmorProperties(0, 0, 0);
+ }
+ }
+
+ @Override
+ public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
+ if (data == null) {
+ data = fillArmorData(player, armor);
+ }
+ int tmp = (int) -Math.floor(-(data.getBaseAbsorptionRatio() * 20 * data.physicalDef));
+
+ return tmp;
+ }
+
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List info, boolean b) {
+ if (data == null) {
+ data = fillArmorData(player, itemStack);
+ }
+ if (data.info != null)
+ info.addAll(data.info);
+ }
+
+ @Override
+ public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
+ if (data == null) {
+ data = fillArmorData((EntityPlayer) entity, stack);
+ }
+ stack.damageItem(damage, entity);
+ ContainerModularArmor tmp = new ContainerBasicArmor((EntityPlayer) entity, new InventoryArmor(ModularArmor_Item.class, stack));
+ if (stack.getItemDamage() > stack.getMaxDamage() / 2 && new Random().nextInt(100) < 5) {
+ tmp.getSlot(new Random().nextInt(tmp.getSlotCount())).decrStackSize(1);
+ tmp.mInvArmor.onGuiSaved((EntityPlayer) entity);
+
+ /*public void eject(ItemStack drop)
+ {
+ if ((!IC2.platform.isSimulating()) || (drop == null)) {
+ return;
+ }
+ float f = 0.7F;
+ double d = this.worldObj.rand.nextFloat() * f + (1.0F - f) * 0.5D;
+ double d1 = this.worldObj.rand.nextFloat() * f + (1.0F - f) * 0.5D;
+ double d2 = this.worldObj.rand.nextFloat() * f + (1.0F - f) * 0.5D;
+ EntityItem entityitem = new EntityItem(this.worldObj, this.xCoord + d, this.yCoord + d1, this.zCoord + d2, drop);
+ entityitem.delayBeforeCanPickup = 10;
+ this.worldObj.spawnEntityInWorld(entityitem);
+ }*/
+
+ }
+ }
+
+ @SubscribeEvent
+ public void onEntityLivingFallEvent(LivingFallEvent event) {
+ if (FMLCommonHandler.instance().getEffectiveSide().isServer() && event.entity instanceof EntityPlayer) {
+ EntityPlayer player = (EntityPlayer) event.entity;
+ ItemStack armor = player.inventory.armorInventory[0];
+ if (data != null && event != null && data.type == 3 && data.charge >= data.pistonEUusage && event.distance - 3 <= data.fallDef) {
+ event.setCanceled(true);
+ } else if (data != null && event != null && data.type == 3 && data.charge >= data.pistonEUusage) {
+ event.distance -= data.fallDef;
+ }
+ }
+ }
+
+ @Override
+ public void onArmorTick(World aWorld, EntityPlayer aPlayer, ItemStack aStack) {
+ if (data == null) {
+ data = fillArmorData(aPlayer, aStack);
+ }
+ if (data.tooltipUpdate > 40) {
+ data.armorPartsEquipped(aPlayer);
+ data.tooltipUpdate = 0;
+ data.updateTooltip();
+ } else {
+ data.tooltipUpdate++;
+ }
+ if (aPlayer.onGround) {
+ jumpticks = 4;
+ } else {
+ jumpticks--;
+ }
+
+ // Breathing
+ if (data.type == 0 && aPlayer.getAir() < 100) {
+ int air = 0;
+ if (data.fluid.getUnlocalizedName().equals("fluid.oxygen") && data.fluid.amount >= 150) {
+ aPlayer.setAir(aPlayer.getAir() + 150);
+ air = 150;
+ } else if (data.fluid.getUnlocalizedName().equals("fluid.air") && data.fluid.amount >= 500) {
+ aPlayer.setAir(aPlayer.getAir() + 100);
+ air = 500;
+ }
+ if (air > 0) {
+ data.fluid.amount -= air;
+ ItemStack stack = aPlayer.getEquipmentInSlot(4);
+ if (stack != null && stack.getItem() instanceof ModularArmor_Item) {
+ ModularArmor_Item tmp = (ModularArmor_Item) stack.getItem();
+ ContainerModularArmor tmp2 = new ContainerBasicArmor(aPlayer, new InventoryArmor(ModularArmor_Item.class, stack));
+ ArmorCalculation.useFluid(tmp2.mInvArmor.parts, air);
+ }
+ }
+ }
+ // Fill Air Tank
+ if (data.tooltipUpdate == 40 && data.processingPower > data.processingPowerUsed && data.type == 0 && data.fluid != null
+ && data.fluid.getUnlocalizedName().equals("oxygen") && data.fluid.amount < data.tankCap && data.charge > data.electrolyzerEUusage) {
+ data.charge -= data.electrolyzerEUusage;
+ ItemStack stack = aPlayer.getEquipmentInSlot(4);
+ if (stack != null && stack.getItem() instanceof ModularArmor_Item) {
+ ModularArmor_Item tmp = (ModularArmor_Item) stack.getItem();
+ ContainerModularArmor tmp2 = new ContainerBasicArmor(aPlayer, new InventoryArmor(ModularArmor_Item.class, stack));
+ ArmorCalculation.useFluid(tmp2.mInvArmor.parts, -data.electrolyzerProd);
+ }
+ }
+
+ if (data.isTopItem) {
+ if(IC2.keyboard.isModeSwitchKeyDown(aPlayer)&&!aWorld.isRemote){
+ int typeMod=0;
+ switch(data.type){
+ case 0:
+ typeMod=400;
+ break;
+ case 1:
+ typeMod=300;
+ break;
+ case 2:
+ typeMod=200;
+ break;
+ case 3:
+ typeMod=100;
+ break;
+ }
+ //TODO
+// aPlayer.openGui(GTExtras.INSTANCE, openGuiNr+(typeMod), aWorld, (int) aPlayer.posX, (int) aPlayer.posY, (int) aPlayer.posZ);
+ }
+ //TODO
+// if(data.helmet!=null&&data.helmet.openGui){data.helmet.openGui=false;aPlayer.openGui(GTExtras.INSTANCE, openGuiNr+400, aWorld, (int) aPlayer.posX, (int) aPlayer.posY, (int) aPlayer.posZ);}
+// if(data.chestplate!=null&&data.chestplate.openGui){data.chestplate.openGui=false;aPlayer.openGui(GTExtras.INSTANCE, openGuiNr+300, aWorld, (int) aPlayer.posX, (int) aPlayer.posY, (int) aPlayer.posZ);}
+// if(data.leggings!=null&&data.leggings.openGui){data.leggings.openGui=false;aPlayer.openGui(GTExtras.INSTANCE, openGuiNr+200, aWorld, (int) aPlayer.posX, (int) aPlayer.posY, (int) aPlayer.posZ);}
+// if(data.boots!=null&&data.boots.openGui){data.boots.openGui=false;aPlayer.openGui(GTExtras.INSTANCE, openGuiNr+100, aWorld, (int) aPlayer.posX, (int) aPlayer.posY, (int) aPlayer.posZ);}
+ // Night Vision
+ if (timer >= 200) {
+ timer = 0;
+ if (data.processingPower > data.processingPowerUsed && data.helmet != null && data.helmet.nightVision && data.charge > 3) {
+ aPlayer.addPotionEffect(new PotionEffect(Potion.nightVision.getId(), 500, -3));
+ data.charge -= 4;
+ } else {
+ PotionEffect nv = aPlayer.getActivePotionEffect(Potion.nightVision);
+ if (nv != null && nv.getAmplifier() == -3) {
+ if (aPlayer.worldObj.isRemote) {
+ aPlayer.removePotionEffectClient(Potion.nightVision.id);
+ } else {
+ aPlayer.removePotionEffect(Potion.nightVision.id);
+ }
+ }
+ }
+ } else {
+ timer++;
+ }
+
+ // Item Magnet
+ if (data.magnet > 1) {
+ double x = aPlayer.posX;
+ double y = aPlayer.posY - (aPlayer.worldObj.isRemote ? 1.62 : 0) + 0.75;
+ double z = aPlayer.posZ;
+ List<EntityItem> items = aPlayer.worldObj.getEntitiesWithinAABB(EntityItem.class,
+ AxisAlignedBB.getBoundingBox(x - data.magnet, y - data.magnet, z - data.magnet, x + data.magnet, y + data.magnet, z + data.magnet));
+ for (EntityItem item : items) {
+ ItemStack stack = item.getEntityItem();
+ if (!item.isDead && stack != null) {
+ setEntityMotionFromVector(item, new Vector3(x, y, z), 0.45F);
+ }
+ }
+ }
+ // Weight limit calcuation
+ double motorSpeed = 0;
+ if (data.leggings != null) {
+ motorSpeed = data.leggings.motorPower;
+ }
+ if (data.maxWeight > 4000) {
+ if (data.leggings != null && data.leggings.charge > data.leggings.motorEUusage) {
+ motorSpeed -= data.maxWeight - 4000;
+ data.leggings.charge -= (data.leggings.motorEUusage / 100);
+ } else {
+ aPlayer.motionX *= (4000.0d / data.maxWeight);
+ aPlayer.motionZ *= (4000.0d / data.maxWeight);
+ }
+ }
+ if (data.leggings != null && data.leggings.charge > data.leggings.motorEUusage && data.processingPower > data.processingPowerUsed && motorSpeed > 0
+ && aPlayer.isSprinting() && jumpticks > 0
+ && (aPlayer.onGround && Math.abs(aPlayer.motionX) + Math.abs(aPlayer.motionZ) > 0.10000000149011612D)) {
+ data.leggings.charge -= data.leggings.motorEUusage;
+ motorSpeed = Math.sqrt(motorSpeed) / 3;
+
+ float var7 = (float) (0.02f * motorSpeed);
+ if (aPlayer.isInWater()) {
+ var7 = 0.1F;
+ if (aPlayer.motionY > 0) {
+ aPlayer.motionY += 0.10000000149011612D;
+ }
+ }
+
+ if (var7 > 0.0F) {
+ aPlayer.moveFlying(0.0F, 1.0F, var7);
+ }
+ }
+
+ // jump+step up assist
+ if (data.processingPower > data.processingPowerUsed && data.leggings != null) {
+ double stepup = data.leggings.pistonJumpboost;
+ if (stepup > 1) {
+ aPlayer.stepHeight = 1.0f;
+ }
+ if (GameSettings.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindJump)) {
+ if (stepup > 0 && jumpticks > 0) {
+ if (data.maxWeight > 2000) {
+ stepup *= 2000.0D / data.maxWeight;
+ }
+ aPlayer.motionY += 0.04 * stepup;
+ }
+ aPlayer.jumpMovementFactor = aPlayer.getAIMoveSpeed() * .2f;
+ }
+
+ }
+
+ // immune effect removal
+ List<PotionEffect> effects = new LinkedList(aPlayer.getActivePotionEffects());
+ for (PotionEffect effect : effects) {
+ int id = effect.getPotionID();
+ if (id == 24 && data.fullRadiationDef) {
+ aPlayer.removePotionEffect(id);
+ }
+ }
+ }
+ }
+
+ public void setEntityMotionFromVector(Entity entity, Vector3 originalPosVector, float modifier) {
+ Vector3 entityVector = Vector3.fromEntityCenter(entity);
+ Vector3 finalVector = originalPosVector.copy().subtract(entityVector);
+ if (finalVector.mag() > 1)
+ finalVector.normalize();
+ entity.motionX = finalVector.x * modifier;
+ entity.motionY = finalVector.y * modifier;
+ entity.motionZ = finalVector.z * modifier;
+ }
+
+ @Override
+ public int getItemEnchantability() {
+ return 0;
+ }
+
+ @Override
+ public boolean isBookEnchantable(ItemStack itemstack1, ItemStack itemstack2) {
+ return false;
+ }
+
+ @Override
+ public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
+ return true;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aIconRegister) {
+ this.itemIcon = aIconRegister.registerIcon("gtextras:" + mName);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) {
+ String armor="gtextras:textures/item/armorhelmet.png";
+ String tier="";
+ try{
+ if (data == null) {
+ data = fillArmorData((EntityPlayer) entity, stack);
+ }
+ if(this.data.armorTier==0){
+ tier="basic";
+ }else if(this.data.armorTier==1){
+ tier="e1";
+ }else if(this.data.armorTier==2){
+ tier="e2";
+ }
+ if(this.data.type==0||this.data.type==1){
+ armor = "gtextras:textures/models/armor/"+tier+"_helmet_chest.png";
+ }else{
+ armor = "gtextras:textures/models/armor/"+tier+"_leggings_boots.png";
+ }}catch(Exception e){System.err.println(e);}
+ return armor;
+ }
+
+ @Override
+ public boolean showNodes(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (data == null) {
+ data = fillArmorData((EntityPlayer) aPlayer, aStack);
+ }
+ return data.thaumicGoggles && data.armorTier > 0 && data.charge > 0;
+ }
+
+ @Override
+ public boolean showIngamePopups(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (data == null) {
+ data = fillArmorData((EntityPlayer) aPlayer, aStack);
+ }
+ return data.thaumicGoggles && data.armorTier > 0 && data.charge > 0;
+ }
+
+ public ArmorData fillArmorData(EntityPlayer player, ItemStack stack) {
+ return new ArmorData(player, stack, this.armorType, openGuiNr);
+ }
+
+ public double getBaseAbsorptionRatio() {
+ switch (this.armorType) {
+ case 0:
+ return 0.15;
+ case 1:
+ return 0.40;
+ case 2:
+ return 0.30;
+ case 3:
+ return 0.15;
+ default:
+ return 0.00;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/armor/SlotFluid.java b/src/main/java/gregtech/common/items/armor/SlotFluid.java
new file mode 100644
index 0000000000..9636cb4549
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/SlotFluid.java
@@ -0,0 +1,33 @@
+package gregtech.common.items.armor;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import scala.reflect.internal.Trees.This;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.fluids.FluidRegistry;
+
+public class SlotFluid extends Slot{
+
+ public SlotFluid(IInventory inventory, int slot_index, int x, int y) {
+ super(inventory, slot_index, x, y);
+ }
+
+ @Override
+ public boolean canTakeStack(EntityPlayer p_82869_1_)
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isItemValid(ItemStack p_75214_1_)
+ {
+ return false;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/SlotLocked.java b/src/main/java/gregtech/common/items/armor/SlotLocked.java
new file mode 100644
index 0000000000..b54d8d1027
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/SlotLocked.java
@@ -0,0 +1,33 @@
+package gregtech.common.items.armor;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+
+public class SlotLocked extends Slot{
+
+ public SlotLocked(IInventory par1iInventory, int par2, int par3, int par4) {
+ super(par1iInventory, par2, par3, par4);
+ }
+ @Override
+ public void onPickupFromSlot(EntityPlayer player, ItemStack itemStack) {
+ }
+ @Override
+ public boolean isItemValid(ItemStack par1ItemStack) {
+ return false;
+ }
+ @Override
+ public boolean getHasStack() {
+ return false;
+ }
+ @Override
+ public ItemStack decrStackSize(int i) {
+ return null;
+ }
+
+ @Override
+ public boolean canTakeStack(EntityPlayer stack) {
+ return false;}
+
+}
diff --git a/src/main/java/gregtech/common/items/armor/Values.java b/src/main/java/gregtech/common/items/armor/Values.java
new file mode 100644
index 0000000000..cad53d645f
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/Values.java
@@ -0,0 +1,125 @@
+package gregtech.common.items.armor;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import gregtech.api.enums.Materials;
+
+public class Values {
+ public static Values INSTANCE;
+ public static final Map<Materials, Values> MATERIAL_MAP = new HashMap<Materials, Values>();
+
+ public int weight;
+ public float physicalDef;
+ public float projectileDef;
+ public float fireDef;
+ public float magicDef;
+ public float explosionDef;
+
+ public Values(Materials material, int weight, float physicalDef, float projectileDef, float fireDef, float magicDef, float explosionDef) {
+ this.weight = weight;
+ this.physicalDef = physicalDef;
+ this.projectileDef = projectileDef;
+ this.fireDef = fireDef;
+ this.magicDef = magicDef;
+ this.explosionDef = explosionDef;
+ }
+
+ public Values() {
+ INSTANCE = this;
+ MATERIAL_MAP.put(Materials._NULL, new Values(Materials._NULL, 0, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f));
+ MATERIAL_MAP.put(Materials.Rubber, new Values(Materials.Rubber, 60, 0.06f, 0.06f, 0.02f, 0.1f, 0.1f));
+ MATERIAL_MAP.put(Materials.Wood, new Values(Materials.Wood, 80, 0.08f, 0.09f, 0.02f, 0.08f, 0.08f));
+ MATERIAL_MAP.put(Materials.Brass, new Values(Materials.Brass, 140, 0.12f, 0.12f, 0.10f, 0.10f, 0.12f));
+ MATERIAL_MAP.put(Materials.Copper, new Values(Materials.Copper, 140, 0.11f, 0.11f, 0.10f, 0.10f, 0.11f));
+ MATERIAL_MAP.put(Materials.Lead, new Values(Materials.Lead, 280, 0.05f, 0.05f, 0.05f, 0.05f, 0.05f));
+ MATERIAL_MAP.put(Materials.Plastic, new Values(Materials.Plastic, 60, 0.10f, 0.10f, 0.02f, 0.02f, 0.10f));
+ MATERIAL_MAP.put(Materials.Aluminium, new Values(Materials.Aluminium, 120, 0.14f, 0.14f, 0.12f, 0.12f, 0.14f));
+ MATERIAL_MAP.put(Materials.AstralSilver, new Values(Materials.AstralSilver, 180, 0.10f, 0.10f, 0.10f, 0.18f, 0.10f));
+ MATERIAL_MAP.put(Materials.BismuthBronze, new Values(Materials.BismuthBronze, 160, 0.12f, 0.12f, 0.10f, 0.10f, 0.12f));
+ MATERIAL_MAP.put(Materials.BlackBronze, new Values(Materials.BlackBronze, 160, 0.13f, 0.13f, 0.10f, 0.10f, 0.13f));
+ MATERIAL_MAP.put(Materials.BlackSteel, new Values(Materials.BlackSteel, 200, 0.19f, 0.19f, 0.17f, 0.17f, 0.19f));
+ MATERIAL_MAP.put(Materials.BlueSteel, new Values(Materials.BlueSteel, 200, 0.21f, 0.21f, 0.19f, 0.19f, 0.21f));
+ MATERIAL_MAP.put(Materials.Bronze, new Values(Materials.Bronze, 160, 0.13f, 0.13f, 0.12f, 0.12f, 0.13f));
+ MATERIAL_MAP.put(Materials.CobaltBrass, new Values(Materials.CobaltBrass, 180, 0.15f, 0.15f, 0.14f, 0.14f, 0.15f));
+ MATERIAL_MAP.put(Materials.DamascusSteel, new Values(Materials.DamascusSteel, 200, 0.22f, 0.22f, 0.20f, 0.20f, 0.22f));
+ MATERIAL_MAP.put(Materials.Electrum, new Values(Materials.Electrum, 250, 0.11f, 0.11f, 0.10f, 0.10f, 0.11f));
+ MATERIAL_MAP.put(Materials.Emerald, new Values(Materials.Emerald, 160, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Gold, new Values(Materials.Gold, 300, 0.09f, 0.09f, 0.05f, 0.25f, 0.09f));
+ MATERIAL_MAP.put(Materials.GreenSapphire, new Values(Materials.GreenSapphire, 160, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Invar, new Values(Materials.Invar, 190, 0.10f, 0.10f, 0.22f, 0.22f, 0.10f));
+ MATERIAL_MAP.put(Materials.Iron, new Values(Materials.Iron, 200, 0.12f, 0.12f, 0.10f, 0.10f, 0.12f));
+ MATERIAL_MAP.put(Materials.IronWood, new Values(Materials.IronWood, 150, 0.17f, 0.17f, 0.02f, 0.02f, 0.17f));
+ MATERIAL_MAP.put(Materials.Magnalium, new Values(Materials.Magnalium, 120, 0.15f, 0.15f, 0.17f, 0.17f, 0.15f));
+ MATERIAL_MAP.put(Materials.NeodymiumMagnetic, new Values(Materials.NeodymiumMagnetic, 220, 0.14f, 0.14f, 0.14f, 0.14f, 0.14f));
+ MATERIAL_MAP.put(Materials.Manganese, new Values(Materials.Manganese, 180, 0.15f, 0.15f, 0.14f, 0.14f, 0.15f));
+ MATERIAL_MAP.put(Materials.MeteoricIron, new Values(Materials.MeteoricIron, 200, 0.18f, 0.18f, 0.16f, 0.16f, 0.18f));
+ MATERIAL_MAP.put(Materials.MeteoricSteel, new Values(Materials.MeteoricSteel, 200, 0.21f, 0.21f, 0.19f, 0.19f, 0.21f));
+ MATERIAL_MAP.put(Materials.Molybdenum, new Values(Materials.Molybdenum, 140, 0.14f, 0.14f, 0.14f, 0.14f, 0.14f));
+ MATERIAL_MAP.put(Materials.Nickel, new Values(Materials.Nickel, 180, 0.12f, 0.12f, 0.15f, 0.15f, 0.12f));
+ MATERIAL_MAP.put(Materials.Olivine, new Values(Materials.Olivine, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Opal, new Values(Materials.Opal, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Palladium, new Values(Materials.Palladium, 280, 0.14f, 0.14f, 0.12f, 0.12f, 0.14f));
+ MATERIAL_MAP.put(Materials.Platinum, new Values(Materials.Platinum, 290, 0.15f, 0.15f, 0.13f, 0.13f, 0.15f));
+ MATERIAL_MAP.put(Materials.GarnetRed, new Values(Materials.GarnetRed, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.RedSteel, new Values(Materials.RedSteel, 200, 0.20f, 0.20f, 0.18f, 0.18f, 0.20f));
+ MATERIAL_MAP.put(Materials.RoseGold, new Values(Materials.RoseGold, 240, 0.10f, 0.10f, 0.08f, 0.18f, 0.10f));
+ MATERIAL_MAP.put(Materials.Ruby, new Values(Materials.Ruby, 180, 0.10f, 0.10f, 0.20f, 0.20f, 0.10f));
+ MATERIAL_MAP.put(Materials.Sapphire, new Values(Materials.Sapphire, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Silver, new Values(Materials.Silver, 220, 0.11f, 0.11f, 0.07f, 0.24f, 0.11f));
+ MATERIAL_MAP.put(Materials.StainlessSteel, new Values(Materials.StainlessSteel, 200, 0.16f, 0.16f, 0.21f, 0.21f, 0.16f));
+ MATERIAL_MAP.put(Materials.Steel, new Values(Materials.Steel, 200, 0.18f, 0.18f, 0.16f, 0.16f, 0.18f));
+ MATERIAL_MAP.put(Materials.SterlingSilver, new Values(Materials.SterlingSilver, 210, 0.15f, 0.15f, 0.13f, 0.13f, 0.15f));
+ MATERIAL_MAP.put(Materials.Tanzanite, new Values(Materials.Tanzanite, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Thorium, new Values(Materials.Thorium, 280, 0.13f, 0.13f, 0.16f, 0.16f, 0.13f));
+ MATERIAL_MAP.put(Materials.WroughtIron, new Values(Materials.WroughtIron, 200, 0.14f, 0.14f, 0.12f, 0.12f, 0.14f));
+ MATERIAL_MAP.put(Materials.GarnetYellow, new Values(Materials.GarnetYellow, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Carbon, new Values(Materials.Carbon, 60, 0.06f, 0.23f, 0.05f, 0.05f, 0.06f));
+ MATERIAL_MAP.put(Materials.InfusedAir,new Values(Materials.InfusedAir, 10, 0.10f, 0.10f, 0.10f,0.10f, 0.10f));
+ MATERIAL_MAP.put(Materials.Amethyst, new Values(Materials.Amethyst, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.InfusedWater,new Values(Materials.InfusedWater, 150, 0.10f, 0.10f,0.20f, 0.20f, 0.10f));
+ MATERIAL_MAP.put(Materials.BlueTopaz, new Values(Materials.BlueTopaz, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Chrome, new Values(Materials.Chrome, 200, 0.12f, 0.12f, 0.21f, 0.21f, 0.12f));
+ MATERIAL_MAP.put(Materials.Cobalt, new Values(Materials.Cobalt, 220, 0.16f, 0.16f, 0.14f, 0.14f, 0.16f));
+ MATERIAL_MAP.put(Materials.DarkIron, new Values(Materials.DarkIron, 200, 0.21f, 0.21f, 0.19f, 0.19f, 0.21f));
+ MATERIAL_MAP.put(Materials.Diamond, new Values(Materials.Diamond, 200, 0.20f, 0.20f, 0.22f, 0.22f, 0.20f));
+ MATERIAL_MAP.put(Materials.Enderium, new Values(Materials.Enderium, 250, 0.22f, 0.22f, 0.21f, 0.21f, 0.22f));
+ MATERIAL_MAP.put(Materials.ElectrumFlux,new Values(Materials.ElectrumFlux, 180, 0.19f, 0.19f, 0.16f, 0.16f, 0.19f));
+ MATERIAL_MAP.put(Materials.Force, new Values(Materials.Force, 180, 0.10f, 0.10f, 0.20f, 0.20f, 0.10f));
+ MATERIAL_MAP.put(Materials.HSLA, new Values(Materials.HSLA, 200, 0.21f, 0.21f, 0.17f, 0.17f, 0.21f));
+ MATERIAL_MAP.put(Materials.InfusedFire,new Values(Materials.InfusedFire, 150, 0.12f, 0.10f, 0.30f, 0.30f, 0.12f));
+ MATERIAL_MAP.put(Materials.InfusedGold, new Values(Materials.InfusedGold, 300, 0.15f, 0.15f, 0.05f, 0.05f, 0.15f));
+ MATERIAL_MAP.put(Materials.Mithril, new Values(Materials.Mithril, 200, 0.25f, 0.25f, 0.10f, 0.30f, 0.25f));
+ MATERIAL_MAP.put(Materials.InfusedOrder,new Values(Materials.InfusedOrder, 150, 0.18f, 0.22f,0.22f, 0.25f, 0.22f));
+ MATERIAL_MAP.put(Materials.Steeleaf, new Values(Materials.Steeleaf, 120, 0.16f, 0.16f, 0.06f, 0.06f, 0.16f));
+ MATERIAL_MAP.put(Materials.InfusedEarth,new Values(Materials.InfusedEarth, 350, 0.30f, 0.30f,0.30f, 0.30f, 0.30f));
+ MATERIAL_MAP.put(Materials.Thaumium, new Values(Materials.Thaumium, 200, 0.18f, 0.19f, 0.20f, 0.30f, 0.18f));
+ MATERIAL_MAP.put(Materials.Titanium, new Values(Materials.Titanium, 140, 0.20f, 0.20f, 0.18f, 0.18f, 0.20f));
+ MATERIAL_MAP.put(Materials.Tungsten, new Values(Materials.Tungsten, 270, 0.27f, 0.26f, 0.23f, 0.26f, 0.26f));
+ MATERIAL_MAP.put(Materials.Topaz, new Values(Materials.Topaz, 180, 0.10f, 0.10f, 0.14f, 0.14f, 0.10f));
+ MATERIAL_MAP.put(Materials.Ultimet, new Values(Materials.Ultimet, 180, 0.21f, 0.21f, 0.19f, 0.19f, 0.21f));
+ MATERIAL_MAP.put(Materials.Uranium, new Values(Materials.Uranium, 290, 0.27f, 0.23f, 0.20f, 0.15f, 0.21f));
+ MATERIAL_MAP.put(Materials.Vinteum, new Values(Materials.Vinteum, 180, 0.10f, 0.12f, 0.14f, 0.28f, 0.12f));
+ MATERIAL_MAP.put(Materials.Duranium, new Values(Materials.Duranium, 140, 0.24f, 0.24f, 0.24f, 0.24f, 0.24f));
+ MATERIAL_MAP.put(Materials.Iridium, new Values(Materials.Iridium, 220, 0.24f, 0.24f, 0.22f, 0.22f, 0.24f));
+ MATERIAL_MAP.put(Materials.Osmiridium, new Values(Materials.Osmiridium, 240, 0.18f, 0.18f, 0.16f, 0.16f, 0.18f));
+ MATERIAL_MAP.put(Materials.Osmium, new Values(Materials.Osmium, 250, 0.12f, 0.12f, 0.10f, 0.10f, 0.12f));
+ MATERIAL_MAP.put(Materials.Naquadah, new Values(Materials.Naquadah, 250, 0.27f, 0.27f, 0.25f, 0.25f, 0.27f));
+ MATERIAL_MAP.put(Materials.NetherStar, new Values(Materials.NetherStar, 140, 0.22f, 0.22f, 0.24f, 0.24f, 0.22f));
+ MATERIAL_MAP.put(Materials.InfusedEntropy,new Values(Materials.InfusedEntropy, 150, 0.10f, 0.10f,0.10f, 0.10f, 0.10f));
+ MATERIAL_MAP.put(Materials.Tritanium, new Values(Materials.Tritanium, 140, 0.26f, 0.26f, 0.26f, 0.26f, 0.26f));
+ MATERIAL_MAP.put(Materials.TungstenSteel, new Values(Materials.TungstenSteel, 270, 0.30f, 0.28f, 0.25f, 0.28f, 0.30f));
+ MATERIAL_MAP.put(Materials.Adamantium, new Values(Materials.Adamantium, 200, 0.28f, 0.28f, 0.26f, 0.30f, 0.30f));
+ MATERIAL_MAP.put(Materials.NaquadahAlloy, new Values(Materials.NaquadahAlloy, 300, 0.33f, 0.33f, 0.33f, 0.33f, 0.33f));
+ MATERIAL_MAP.put(Materials.Neutronium, new Values(Materials.Neutronium, 600, 0.50f, 0.50f, 0.50f, 0.50f, 0.50f));
+ }
+
+ public Values getValues(Materials mat) {
+ Values tmp = MATERIAL_MAP.get(mat);
+
+ if (tmp == null) {
+ return MATERIAL_MAP.get(Materials._NULL);
+ }
+ return tmp;
+ }
+}
diff --git a/src/main/java/gregtech/common/items/armor/Vector3.java b/src/main/java/gregtech/common/items/armor/Vector3.java
new file mode 100644
index 0000000000..590f544546
--- /dev/null
+++ b/src/main/java/gregtech/common/items/armor/Vector3.java
@@ -0,0 +1,278 @@
+package gregtech.common.items.armor;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import net.minecraft.entity.Entity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.Vec3;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.util.vector.Vector3f;
+import org.lwjgl.util.vector.Vector4f;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+public class Vector3 {
+ public static Vector3 zero = new Vector3();
+ public static Vector3 one = new Vector3(1, 1, 1);
+ public static Vector3 center = new Vector3(0.5, 0.5, 0.5);
+ public double x;
+ public double y;
+ public double z;
+
+ public Vector3() {
+ }
+
+ public Vector3(double d, double d1, double d2) {
+ x = d;
+ y = d1;
+ z = d2;
+ }
+
+ public Vector3(Vector3 vec) {
+ x = vec.x;
+ y = vec.y;
+ z = vec.z;
+ }
+
+ public Vector3(Vec3 vec) {
+ x = vec.xCoord;
+ y = vec.yCoord;
+ z = vec.zCoord;
+ }
+
+ public Vector3 copy() {
+ return new Vector3(this);
+ }
+
+ public static Vector3 fromEntity(Entity e) {
+ return new Vector3(e.posX, e.posY, e.posZ);
+ }
+
+ public static Vector3 fromEntityCenter(Entity e) {
+ return new Vector3(e.posX, e.posY - e.yOffset + e.height / 2, e.posZ);
+ }
+
+ public static Vector3 fromTileEntity(TileEntity e) {
+ return new Vector3(e.xCoord, e.yCoord, e.zCoord);
+ }
+
+ public static Vector3 fromTileEntityCenter(TileEntity e) {
+ return new Vector3(e.xCoord + 0.5, e.yCoord + 0.5, e.zCoord + 0.5);
+ }
+
+ public Vector3 set(double d, double d1, double d2) {
+ x = d;
+ y = d1;
+ z = d2;
+ return this;
+ }
+
+ public Vector3 set(Vector3 vec) {
+ x = vec.x;
+ y = vec.y;
+ z = vec.z;
+ return this;
+ }
+
+ public double dotProduct(Vector3 vec) {
+ double d = vec.x * x + vec.y * y + vec.z * z;
+ if (d > 1 && d < 1.00001)
+ d = 1;
+ else if (d < -1 && d > -1.00001)
+ d = -1;
+ return d;
+ }
+
+ public double dotProduct(double d, double d1, double d2) {
+ return d * x + d1 * y + d2 * z;
+ }
+
+ public Vector3 crossProduct(Vector3 vec) {
+ double d = y * vec.z - z * vec.y;
+ double d1 = z * vec.x - x * vec.z;
+ double d2 = x * vec.y - y * vec.x;
+ x = d;
+ y = d1;
+ z = d2;
+ return this;
+ }
+
+ public Vector3 add(double d, double d1, double d2) {
+ x += d;
+ y += d1;
+ z += d2;
+ return this;
+ }
+
+ public Vector3 add(Vector3 vec) {
+ x += vec.x;
+ y += vec.y;
+ z += vec.z;
+ return this;
+ }
+
+ public Vector3 add(double d) {
+ return add(d, d, d);
+ }
+
+ public Vector3 sub(Vector3 vec) {
+ return subtract(vec);
+ }
+
+ public Vector3 subtract(Vector3 vec) {
+ x -= vec.x;
+ y -= vec.y;
+ z -= vec.z;
+ return this;
+ }
+
+ public Vector3 negate(Vector3 vec) {
+ x = -x;
+ y = -y;
+ z = -z;
+ return this;
+ }
+
+ public Vector3 multiply(double d) {
+ x *= d;
+ y *= d;
+ z *= d;
+ return this;
+ }
+
+ public Vector3 multiply(Vector3 f) {
+ x *= f.x;
+ y *= f.y;
+ z *= f.z;
+ return this;
+ }
+
+ public Vector3 multiply(double fx, double fy, double fz) {
+ x *= fx;
+ y *= fy;
+ z *= fz;
+ return this;
+ }
+
+ public double mag() {
+ return Math.sqrt(x * x + y * y + z * z);
+ }
+
+ public double magSquared() {
+ return x * x + y * y + z * z;
+ }
+
+ public Vector3 normalize() {
+ double d = mag();
+ if (d != 0)
+ multiply(1 / d);
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ MathContext cont = new MathContext(4, RoundingMode.HALF_UP);
+ return "Vector3(" + new BigDecimal(x, cont) + ", " + new BigDecimal(y, cont) + ", " + new BigDecimal(z, cont) + ")";
+ }
+
+ public Vector3 perpendicular() {
+ if (z == 0)
+ return zCrossProduct();
+ return xCrossProduct();
+ }
+
+ public Vector3 xCrossProduct() {
+ double d = z;
+ double d1 = -y;
+ x = 0;
+ y = d;
+ z = d1;
+ return this;
+ }
+
+ public Vector3 zCrossProduct() {
+ double d = y;
+ double d1 = -x;
+ x = d;
+ y = d1;
+ z = 0;
+ return this;
+ }
+
+ public Vector3 yCrossProduct() {
+ double d = -z;
+ double d1 = x;
+ x = d;
+ y = 0;
+ z = d1;
+ return this;
+ }
+
+ public Vec3 toVec3D() {
+ return Vec3.createVectorHelper(x, y, z);
+ }
+
+ public double angle(Vector3 vec) {
+ return Math.acos(copy().normalize().dotProduct(vec.copy().normalize()));
+ }
+
+ public boolean isInside(AxisAlignedBB aabb) {
+ return x >= aabb.minX && y >= aabb.maxY && z >= aabb.minZ && x < aabb.maxX && y < aabb.maxY && z < aabb.maxZ;
+ }
+
+ public boolean isZero() {
+ return x == 0 && y == 0 && z == 0;
+ }
+
+ public boolean isAxial() {
+ return x == 0 ? y == 0 || z == 0 : y == 0 && z == 0;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public Vector3f vector3f() {
+ return new Vector3f((float) x, (float) y, (float) z);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public Vector4f vector4f() {
+ return new Vector4f((float) x, (float) y, (float) z, 1);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void glVertex() {
+ GL11.glVertex3d(x, y, z);
+ }
+
+ public Vector3 negate() {
+ x = -x;
+ y = -y;
+ z = -z;
+ return this;
+ }
+
+ public double scalarProject(Vector3 b) {
+ double l = b.mag();
+ return l == 0 ? 0 : dotProduct(b) / l;
+ }
+
+ public Vector3 project(Vector3 b) {
+ double l = b.magSquared();
+ if (l == 0) {
+ set(0, 0, 0);
+ return this;
+ }
+ double m = dotProduct(b) / l;
+ set(b).multiply(m);
+ return this;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof Vector3))
+ return false;
+ Vector3 v = (Vector3) o;
+ return x == v.x && y == v.y && z == v.z;
+ }
+}