aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlood-Asp <bloodasphendrik@gmail.com>2016-12-17 18:21:51 +0100
committerGitHub <noreply@github.com>2016-12-17 18:21:51 +0100
commit6e3e6494a1f83c8284bcffc0274a2f36cc8053c7 (patch)
treeb5c9ec9bf13b3c0f89483d45b2c96a6e390fc659
parentc9eb3dc3b4c5061a30b62443f3673cdaf5ccdb62 (diff)
parent3d2dd065fafb12a7107aa9b33cd6ed442197c25e (diff)
downloadGT5-Unofficial-6e3e6494a1f83c8284bcffc0274a2f36cc8053c7.tar.gz
GT5-Unofficial-6e3e6494a1f83c8284bcffc0274a2f36cc8053c7.tar.bz2
GT5-Unofficial-6e3e6494a1f83c8284bcffc0274a2f36cc8053c7.zip
Merge pull request #803 from dgabehar/unstable
Crash with Modular Exoskeleton #769
-rw-r--r--src/main/java/gregtech/common/items/armor/ArmorData.java121
-rw-r--r--src/main/java/gregtech/common/items/armor/ModularArmor_Item.java4
-rw-r--r--src/main/java/gregtech/common/items/armor/gui/GuiElectricArmor1.java71
-rw-r--r--src/main/java/gregtech/common/items/armor/gui/GuiModularArmor.java8
4 files changed, 158 insertions, 46 deletions
diff --git a/src/main/java/gregtech/common/items/armor/ArmorData.java b/src/main/java/gregtech/common/items/armor/ArmorData.java
index c6ef4d5bc0..00ec76aeea 100644
--- a/src/main/java/gregtech/common/items/armor/ArmorData.java
+++ b/src/main/java/gregtech/common/items/armor/ArmorData.java
@@ -43,7 +43,7 @@ public class ArmorData {
public Map<StatType,Float> mStat = new HashMap<StatType,Float>();
public Map<StatType,Boolean> mBStat = new HashMap<StatType,Boolean>();
-
+ static ArrayList<StatType> updateArmorStatTypeList;
// public boolean fullArmor;
// public boolean fullRadiationDef;
// public boolean fullElectricDef;
@@ -94,6 +94,14 @@ public class ArmorData {
// public int antiGravMaxWeight;
public ArmorData(EntityPlayer player, ItemStack stack, int type, int tier) {
+ if(updateArmorStatTypeList == null)
+ {
+ updateArmorStatTypeList = new ArrayList<StatType>();
+ updateArmorStatTypeList.add(StatType.MAGNET);
+ updateArmorStatTypeList.add(StatType.THORNS);
+ updateArmorStatTypeList.add(StatType.PROCESSINGPOWER);
+ updateArmorStatTypeList.add(StatType.PROCESSINGPOWERUSED);
+ }
this.type = type;
this.armorTier = tier;
ContainerModularArmor tmp = new ContainerBasicArmor((EntityPlayer) player, new InventoryArmor(ModularArmor_Item.class, stack));
@@ -250,38 +258,90 @@ public class ArmorData {
}
if (helmet != null && chestplate != null && leggings != null && boots != null) {
set(mBStat, StatType.FULLARMOR, true);
+ boolean helmHasFullRadiationDefence=false;
+ boolean chestplateHasFullRadiationDefence=false;
+ boolean leggingsHasFullRadiationDefence=false;
+ boolean bootsHasFullRadiationDefence=false;
+
+ boolean helmHasFullElectricalDefenceDefence=false;
+ boolean chestplateHasFullElectricalDefenceDefence=false;
+ boolean leggingsHasFullElectricalDefenceDefence=false;
+ boolean bootsHasFullElectricalDefenceDefence=false;
+ //Check each armor pieces for valid mStat value and verify that the Hash contains the StatType key
+ if(helmet.mStat!= null)
+ {
+ if(helmet.mStat.containsKey(StatType.RADIATIONDEFENCE))
+ {
+ helmHasFullRadiationDefence = helmet.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ if(helmet.mStat.containsKey(StatType.ELECTRICALDEFENCE))
+ {
+ helmHasFullElectricalDefenceDefence = helmet.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ }
+ if(chestplate.mStat!= null)
+ {
+ if(chestplate.mStat.containsKey(StatType.RADIATIONDEFENCE))
+ {
+ chestplateHasFullRadiationDefence = chestplate.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ if(chestplate.mStat.containsKey(StatType.ELECTRICALDEFENCE))
+ {
+ chestplateHasFullElectricalDefenceDefence = chestplate.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ }
+ if(leggings.mStat!= null)
+ {
+ if(leggings.mStat.containsKey(StatType.RADIATIONDEFENCE))
+ {
+ leggingsHasFullRadiationDefence = leggings.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ if(leggings.mStat.containsKey(StatType.ELECTRICALDEFENCE))
+ {
+ leggingsHasFullElectricalDefenceDefence = leggings.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ }
+ if(boots.mStat!= null)
+ {
+ if(boots.mStat.containsKey(StatType.RADIATIONDEFENCE))
+ {
+ bootsHasFullRadiationDefence = boots.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ if(boots.mStat.containsKey(StatType.ELECTRICALDEFENCE))
+ {
+ bootsHasFullElectricalDefenceDefence = boots.mStat.get(StatType.RADIATIONDEFENCE)> 0.9f;
+ }
+ }
+ //Set Status of Full Armor types
+ set(mBStat, StatType.FULLRADIATIONARMOR, helmHasFullRadiationDefence&&chestplateHasFullRadiationDefence&&leggingsHasFullRadiationDefence &&bootsHasFullRadiationDefence);
+ set(mBStat, StatType.FULLELECTRICARMOR, helmHasFullElectricalDefenceDefence&&chestplateHasFullElectricalDefenceDefence&&leggingsHasFullElectricalDefenceDefence &&bootsHasFullElectricalDefenceDefence);
} else {
+ //Reset Full armor type status to false for all types if StatType.FULLARMOR is false
set(mBStat, StatType.FULLARMOR, false);
+ set(mBStat, StatType.FULLRADIATIONARMOR, false);
+ set(mBStat, StatType.FULLELECTRICARMOR, false);
}
- set(mBStat, StatType.FULLRADIATIONARMOR, mBStat.get(StatType.FULLARMOR) && helmet.mStat.get(StatType.RADIATIONDEFENCE) > 0.9f && chestplate.mStat.get(StatType.RADIATIONDEFENCE) > 0.9f && leggings.mStat.get(StatType.RADIATIONDEFENCE) > 0.9f && boots.mStat.get(StatType.RADIATIONDEFENCE) > 0.9f);
- set(mBStat, StatType.FULLELECTRICARMOR, mBStat.get(StatType.FULLARMOR) && chestplate.mStat.get(StatType.ELECTRICALDEFENCE) > 0.9f && chestplate.mStat.get(StatType.ELECTRICALDEFENCE) > 0.9f && leggings.mStat.get(StatType.ELECTRICALDEFENCE) > 0.9f && boots.mStat.get(StatType.ELECTRICALDEFENCE) > 0.9f);
+
+
set(mBStat, StatType.MAGNET, 0);
set(mBStat, StatType.THORNS, 0);
set(mBStat, StatType.PROCESSINGPOWER, 0);
set(mBStat, StatType.PROCESSINGPOWERUSED, 0);
- if (helmet != null) {
- change(mStat, StatType.MAGNET, helmet.mStat.get(StatType.MAGNET));
- change(mStat, StatType.THORNS, helmet.mStat.get(StatType.THORNS));
- change(mStat, StatType.PROCESSINGPOWER, helmet.mStat.get(StatType.PROCESSINGPOWER));
- change(mStat, StatType.PROCESSINGPOWERUSED, helmet.mStat.get(StatType.PROCESSINGPOWERUSED));
+
+ if (helmet != null) {
+ updateArmorStats(helmet,updateArmorStatTypeList );
}
if (chestplate != null) {
- change(mStat, StatType.MAGNET, chestplate.mStat.get(StatType.MAGNET));
- change(mStat, StatType.THORNS, chestplate.mStat.get(StatType.THORNS));
- change(mStat, StatType.PROCESSINGPOWER, chestplate.mStat.get(StatType.PROCESSINGPOWER));
- change(mStat, StatType.PROCESSINGPOWERUSED, chestplate.mStat.get(StatType.PROCESSINGPOWERUSED));
+ updateArmorStats(chestplate,updateArmorStatTypeList );
+
}
if (leggings != null) {
- change(mStat, StatType.MAGNET, leggings.mStat.get(StatType.MAGNET));
- change(mStat, StatType.THORNS, leggings.mStat.get(StatType.THORNS));
- change(mStat, StatType.PROCESSINGPOWER, leggings.mStat.get(StatType.PROCESSINGPOWER));
- change(mStat, StatType.PROCESSINGPOWERUSED, leggings.mStat.get(StatType.PROCESSINGPOWERUSED));
+ updateArmorStats(leggings,updateArmorStatTypeList );
+
}
if (boots != null) {
- change(mStat, StatType.MAGNET, boots.mStat.get(StatType.MAGNET));
- change(mStat, StatType.THORNS, boots.mStat.get(StatType.THORNS));
- change(mStat, StatType.PROCESSINGPOWER, boots.mStat.get(StatType.PROCESSINGPOWER));
- change(mStat, StatType.PROCESSINGPOWERUSED, boots.mStat.get(StatType.PROCESSINGPOWERUSED));
+ updateArmorStats(boots,updateArmorStatTypeList );
+
}
isTopItem = false;
if (type == 0) {
@@ -306,6 +366,23 @@ public class ArmorData {
maxWeight += boots.mStat.get(StatType.WEIGHT);
}
}
+
+ private void updateArmorStats(ArmorData armorData, ArrayList<StatType> statTypes) {
+ for (StatType statType : statTypes) {
+ if(armorData == null || armorData.mStat == null || !armorData.mStat.containsKey(statType))
+ continue;
+// if(armorData != null && armorData.mStat != null && armorData.mStat.containsKey(statType))
+// {
+ set(mStat, statType, armorData.mStat.get(statType));
+// }
+ /*change(mStat, StatType.MAGNET, armorData.mStat.get(StatType.MAGNET));
+ change(mStat, StatType.THORNS, armorData.mStat.get(StatType.THORNS));
+ change(mStat, StatType.PROCESSINGPOWER, armorData.mStat.get(StatType.PROCESSINGPOWER));
+ change(mStat, StatType.PROCESSINGPOWERUSED, armorData.mStat.get(StatType.PROCESSINGPOWERUSED));*/
+ }
+
+
+ }
public void set(Map aMap, StatType aType, boolean aSet){
if(aMap.containsKey(aType))aMap.remove(aType);
@@ -320,7 +397,9 @@ public class ArmorData {
public void change(Map aMap, StatType aType, float aChange){
float tChange = 0;
if(aMap==null)System.out.println("changeMapnull");
- if(aMap.containsKey(aType)){tChange = (float) aMap.get(aType);
+ if(aMap.containsKey(aType)){
+ Object value = aMap.get(aType);
+ tChange = value != null ? (float) aMap.get(aType) : 0.0f;
aMap.remove(aType);
}
aMap.put(aType, (tChange + aChange));
diff --git a/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java b/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java
index 6327a8c8ba..bc611e6458 100644
--- a/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java
+++ b/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java
@@ -210,8 +210,8 @@ public class ModularArmor_Item extends ItemArmor implements ISpecialArmor, IGogg
}
// Breathing
- if (data.type == 0 && aPlayer.getAir() < 100) {
- int air = 0;
+ if (data.type == 0 && aPlayer.getAir() < 100 && data.fluid != null) {
+ int air = 0;
if (data.fluid.getUnlocalizedName().equals("fluid.oxygen") && data.fluid.amount >= 150) {
aPlayer.setAir(aPlayer.getAir() + 150);
air = 150;
diff --git a/src/main/java/gregtech/common/items/armor/gui/GuiElectricArmor1.java b/src/main/java/gregtech/common/items/armor/gui/GuiElectricArmor1.java
index 3ea092a2ab..dec19e0308 100644
--- a/src/main/java/gregtech/common/items/armor/gui/GuiElectricArmor1.java
+++ b/src/main/java/gregtech/common/items/armor/gui/GuiElectricArmor1.java
@@ -1,7 +1,10 @@
package gregtech.common.items.armor.gui;
+import gregtech.api.enums.GT_Values;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Utility;
+import gregtech.common.GT_Network;
+import gregtech.common.items.armor.ArmorData;
import gregtech.common.items.armor.components.StatType;
import java.text.DecimalFormat;
@@ -40,7 +43,12 @@ public class GuiElectricArmor1 extends GuiContainer {
cont = containerModularArmor;
tab = 0;
}
-
+ @Override
+ public void onGuiClosed()
+ {
+ cont.saveInventory(player);
+ super.onGuiClosed();
+ };
public String seperateNumber(long number){
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
@@ -97,12 +105,12 @@ public class GuiElectricArmor1 extends GuiContainer {
default:
break;
}
-
- if(cont.mInvArmor.data.mStat.get(StatType.TANKCAP)>0){
+ float tankCap = cont.mInvArmor.data.mStat.containsKey(StatType.TANKCAP) ? cont.mInvArmor.data.mStat.get(StatType.TANKCAP) :0.0f;
+ if(tankCap>0){
drawTexturedModalRect(xStart + 94, yStart + 32, 231, 69, 16, 34);
}
-
- int bar = (int) Math.floor(18 * (cont.mInvArmor.data.mStat.get(StatType.WEIGHT)/(float)1000));
+ float weight = cont.mInvArmor.data.mStat.containsKey(StatType.WEIGHT) ? cont.mInvArmor.data.mStat.get(StatType.WEIGHT) : 0.0f;
+ int bar = (int) Math.floor(18 * (weight)/(float)1000);
drawTexturedModalRect(xStart + 15, yStart + 7, 217, 26, bar, 5);
drawTexturedModalRect(xStart + bar + 15, yStart + 7, 197+bar, 26, 18-bar, 5);
@@ -151,34 +159,51 @@ public class GuiElectricArmor1 extends GuiContainer {
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();}
+ if(xStart>72&&xStart<81&&cont.mInvArmor.data.helmet!=null){cont.mInvArmor.data.helmet.openGui=true;}
+ if(xStart>82&&xStart<91&&cont.mInvArmor.data.chestplate!=null){cont.mInvArmor.data.chestplate.openGui=true;}
+ if(xStart>92&&xStart<101&&cont.mInvArmor.data.leggings!=null){cont.mInvArmor.data.leggings.openGui=true;}
+ if(xStart>102&&xStart<112&&cont.mInvArmor.data.boots!=null){cont.mInvArmor.data.boots.openGui=true;}
+
+// 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) {
+// if (slot != null && slot instanceof SlotFluid && player != null && cont.mInvArmor.data.helmet!=null) {
// ItemStack tmp = player.inventory.getItemStack();
+// //GT_Network gtn = new GT_Network();
// if (tmp == null) {
-// GTExtras.NET.sendToServer(new FluidSync(player.getCommandSenderName(), 0, "null"));
+// //GT_Values.NW.sendToServer(new FluidSync(player.getCommandSenderName(), 0, "null"));
// }
+// //ArmorData armorData = new ArmorData(player,);
// 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);
+// slot.putStack(GT_Utility.getFluidDisplayStack(tmp2, true));
+//
+// if(cont.mInvArmor.data.helmet.fluid == null)
+// {
+// cont.mInvArmor.data.helmet.fluid = new FluidStack(tmp2.getFluid(), tmp2.amount);
+// }
+// else
+// {
+// cont.mInvArmor.data.helmet.fluid.amount += tmp2.amount;
+// }
+//
+// //GT_Values.NW.sendToServer(new FluidSync(player.getCommandSenderName(), tmp2.amount, GT_Utility.getFluidName(tmp2, false)));
+// ItemStack tmp4 = GT_Utility.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()));
+// //GT_Values.NW.sendToServer(new FluidSync2(player.getCommandSenderName()));
// } else {
// player.inventory.setItemStack(null);
// player.inventory.addItemStackToInventory(tmp4);
-// GTExtras.NET.sendToServer(new FluidSync2(player.getCommandSenderName()));
+// //GT_Values.NW.sendToServer(new FluidSync2(player.getCommandSenderName()));
// }
//
// } else if (slot.getHasStack() && tmp2 != null) {
@@ -194,9 +219,17 @@ public class GuiElectricArmor1 extends GuiContainer {
// 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)));
+// //GT_Values.NW.sendToServer(new FluidSync2(player.getCommandSenderName()));
+// slot.putStack(GT_Utility.getFluidDisplayStack(tmp2, true));
+// if(cont.mInvArmor.data.helmet.fluid == null)
+// {
+// cont.mInvArmor.data.helmet.fluid = new FluidStack(tmp2.getFluid(), tmp2.amount);
+// }
+// else
+// {
+// cont.mInvArmor.data.helmet.fluid.amount += tmp2.amount;
+// }
+// //GT_Values.NW.sendToServer(new FluidSync(player.getCommandSenderName(), tmp2.amount, GT_Utility.getFluidName(tmp2, false)));
// }
// }
// }
diff --git a/src/main/java/gregtech/common/items/armor/gui/GuiModularArmor.java b/src/main/java/gregtech/common/items/armor/gui/GuiModularArmor.java
index a24ca3ca1e..ae2ba88013 100644
--- a/src/main/java/gregtech/common/items/armor/gui/GuiModularArmor.java
+++ b/src/main/java/gregtech/common/items/armor/gui/GuiModularArmor.java
@@ -191,10 +191,10 @@ public class GuiModularArmor extends GuiContainer {
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();}
+ if(xStart>124&&xStart<133&&cont.mInvArmor.data.helmet!=null){cont.mInvArmor.data.helmet.openGui=true;}
+ if(xStart>134&&xStart<143&&cont.mInvArmor.data.chestplate!=null){cont.mInvArmor.data.chestplate.openGui=true;}
+ if(xStart>144&&xStart<153&&cont.mInvArmor.data.leggings!=null){cont.mInvArmor.data.leggings.openGui=true;}
+ if(xStart>154&&xStart<163&&cont.mInvArmor.data.boots!=null){cont.mInvArmor.data.boots.openGui=true;}
}
}
super.mouseClicked(mouseX, mouseY, mouseBtn);