Add resistance to MultiItems to prevent crashes from invalid stacks.

This commit is contained in:
AlgorithmX2
2014-06-04 00:07:36 -05:00
parent 286baaa0a5
commit f894d48328
4 changed files with 39 additions and 25 deletions
+10
View File
@@ -208,6 +208,10 @@ public class Registration
for (MaterialType mat : MaterialType.values()) for (MaterialType mat : MaterialType.values())
{ {
try try
{
if ( mat == MaterialType.InvalidType )
((ItemMultiMaterial) materialItem.item()).createMaterial( mat );
else
{ {
Field f = materialClass.getField( "material" + mat.name() ); Field f = materialClass.getField( "material" + mat.name() );
ItemStackSrc is = ((ItemMultiMaterial) materialItem.item()).createMaterial( mat ); ItemStackSrc is = ((ItemMultiMaterial) materialItem.item()).createMaterial( mat );
@@ -216,6 +220,7 @@ public class Registration
else else
f.set( materials, new NullItemDefinition() ); f.set( materials, new NullItemDefinition() );
} }
}
catch (Throwable err) catch (Throwable err)
{ {
AELog.severe( "Error creating material: " + mat.name() ); AELog.severe( "Error creating material: " + mat.name() );
@@ -229,6 +234,10 @@ public class Registration
for (PartType type : PartType.values()) for (PartType type : PartType.values())
{ {
try try
{
if ( type == PartType.InvalidType )
((ItemMultiPart) partItem.item()).createPart( type, null );
else
{ {
Field f = partClass.getField( "part" + type.name() ); Field f = partClass.getField( "part" + type.name() );
Enum varients[] = type.getVarients(); Enum varients[] = type.getVarients();
@@ -257,6 +266,7 @@ public class Registration
} }
} }
} }
}
catch (Throwable err) catch (Throwable err)
{ {
AELog.severe( "Error creating part: " + type.name() ); AELog.severe( "Error creating part: " + type.name() );
+1 -1
View File
@@ -166,7 +166,7 @@ public class ItemMultiMaterial extends AEBaseItem implements IStorageComponent,
{ {
if ( dmgToMaterial.containsKey( is.getItemDamage() ) ) if ( dmgToMaterial.containsKey( is.getItemDamage() ) )
return dmgToMaterial.get( is.getItemDamage() ); return dmgToMaterial.get( is.getItemDamage() );
return null; return MaterialType.InvalidType;
} }
@Override @Override
+2
View File
@@ -17,6 +17,8 @@ import cpw.mods.fml.relauncher.SideOnly;
public enum MaterialType public enum MaterialType
{ {
InvalidType(-1, AEFeature.Core),
CertusQuartzCrystal(0, AEFeature.Core, "crystalCertusQuartz"), CertusQuartzCrystalCharged(1, AEFeature.Core, EntityChargedQuartz.class), CertusQuartzCrystal(0, AEFeature.Core, "crystalCertusQuartz"), CertusQuartzCrystalCharged(1, AEFeature.Core, EntityChargedQuartz.class),
CertusQuartzDust(2, AEFeature.Core, "dustCertusQuartz"), NetherQuartzDust(3, AEFeature.Core, "dustNetherQuartz"), Flour(4, AEFeature.Flour, "dustWheat"), GoldDust( CertusQuartzDust(2, AEFeature.Core, "dustCertusQuartz"), NetherQuartzDust(3, AEFeature.Core, "dustNetherQuartz"), Flour(4, AEFeature.Flour, "dustWheat"), GoldDust(
+2
View File
@@ -39,6 +39,8 @@ import appeng.parts.reporting.PartTerminal;
public enum PartType public enum PartType
{ {
InvalidType(-1, AEFeature.Core, null),
CableGlass(0, AEFeature.Core, PartCableGlass.class), CableGlass(0, AEFeature.Core, PartCableGlass.class),
CableCovered(20, AEFeature.Core, PartCableCovered.class), CableCovered(20, AEFeature.Core, PartCableCovered.class),