Fixed inventory misalignment when updating 5.09.30 -> 5.09.31
I added a new method to BaseMetaTileEntity that shifts the Inventory index according to the change in Input/Output slots. Instrumentally I have added a new version ID that considers the GT subversion.
This commit is contained in:
parent
6287e1e67f
commit
a6046ddfad
2 changed files with 55 additions and 2 deletions
|
@ -60,7 +60,8 @@ import java.util.regex.Pattern;
|
|||
|
||||
@Mod(modid = "gregtech", name = "GregTech", version = "MC1710", useMetadata = false, dependencies = "required-after:IC2; after:Forestry; after:PFAAGeologica; after:Thaumcraft; after:Railcraft; after:appliedenergistics2; after:ThermalExpansion; after:TwilightForest; after:harvestcraft; after:magicalcrops; after:BuildCraft|Transport; after:BuildCraft|Silicon; after:BuildCraft|Factory; after:BuildCraft|Energy; after:BuildCraft|Core; after:BuildCraft|Builders; after:GalacticraftCore; after:GalacticraftMars; after:GalacticraftPlanets; after:ThermalExpansion|Transport; after:ThermalExpansion|Energy; after:ThermalExpansion|Factory; after:RedPowerCore; after:RedPowerBase; after:RedPowerMachine; after:RedPowerCompat; after:RedPowerWiring; after:RedPowerLogic; after:RedPowerLighting; after:RedPowerWorld; after:RedPowerControl; after:UndergroundBiomes;")
|
||||
public class GT_Mod implements IGT_Mod {
|
||||
public static final int VERSION = 509;
|
||||
public static final int VERSION = 509, SUBVERSION = 31;
|
||||
public static final int TOTAL_VERSION = 1000 * VERSION + SUBVERSION;
|
||||
public static final int REQUIRED_IC2 = 624;
|
||||
@Mod.Instance("gregtech")
|
||||
public static GT_Mod instance;
|
||||
|
|
|
@ -119,6 +119,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
aNBT.setBoolean("mInputDisabled", mInputDisabled);
|
||||
aNBT.setBoolean("mOutputDisabled", mOutputDisabled);
|
||||
aNBT.setTag("GT.CraftingComponents", mRecipeStuff);
|
||||
aNBT.setInteger("nbtVersion", GT_Mod.TOTAL_VERSION);
|
||||
} catch (Throwable e) {
|
||||
GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immidietly to GregTech Intergalactical!!!");
|
||||
e.printStackTrace(GT_Log.err);
|
||||
|
@ -187,7 +188,8 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
mCoverData = aNBT.getIntArray("mCoverData");
|
||||
mSidedRedstone = aNBT.getByteArray("mRedstoneSided");
|
||||
mRecipeStuff = aNBT.getCompoundTag("GT.CraftingComponents");
|
||||
|
||||
int nbtVersion = aNBT.getInteger("nbtVersion");
|
||||
|
||||
if (mCoverData.length != 6) mCoverData = new int[]{0, 0, 0, 0, 0, 0};
|
||||
if (mCoverSides.length != 6) mCoverSides = new int[]{0, 0, 0, 0, 0, 0};
|
||||
if (mSidedRedstone.length != 6)
|
||||
|
@ -202,6 +204,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
for (int i = 0; i < tItemList.tagCount(); i++) {
|
||||
NBTTagCompound tTag = tItemList.getCompoundTagAt(i);
|
||||
int tSlot = tTag.getInteger("IntSlot");
|
||||
tSlot = shiftInventoryIndex(tSlot, nbtVersion);
|
||||
if (tSlot >= 0 && tSlot < mMetaTileEntity.getRealInventory().length) {
|
||||
mMetaTileEntity.getRealInventory()[tSlot] = GT_Utility.loadItem(tTag);
|
||||
}
|
||||
|
@ -1904,4 +1907,53 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) {
|
||||
mMetaTileEntity.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shifts the machine Inventory index according to the change in Input/Output Slots.
|
||||
* This is NOT done automatically. If you want to change slot count for a machine this method needs to be adapted.
|
||||
* @param slotIndex The original Inventory index
|
||||
* @param nbtVersion The GregTech version in which the original Inventory Index was saved.
|
||||
* @return The corrected Inventory index
|
||||
*/
|
||||
private int shiftInventoryIndex(int slotIndex, int nbtVersion){
|
||||
int oldInputSize, newInputSize, oldOutputSize, newOutputSize;
|
||||
if (mID >= 211 && mID <= 218) {//Assembler
|
||||
if (nbtVersion < 509031) {
|
||||
oldInputSize = 2;
|
||||
oldOutputSize = 1;
|
||||
} else {
|
||||
return slotIndex;
|
||||
}
|
||||
newInputSize = 6;
|
||||
newOutputSize = 1;
|
||||
} else if (mID >= 421 && mID <= 428){//Chemical Reactor
|
||||
if (nbtVersion < 509031) {
|
||||
oldInputSize = 2;
|
||||
oldOutputSize = 1;
|
||||
} else {
|
||||
return slotIndex;
|
||||
}
|
||||
newInputSize = 2;
|
||||
newOutputSize = 2;
|
||||
} else if (mID >= 531 && mID <= 538) {//Distillery
|
||||
if (nbtVersion < 509031) {
|
||||
oldInputSize = 1;
|
||||
oldOutputSize = 0;
|
||||
} else {
|
||||
return slotIndex;
|
||||
}
|
||||
newInputSize = 1;
|
||||
newOutputSize = 1;
|
||||
} else {
|
||||
return slotIndex;
|
||||
}
|
||||
int indexShift = 0;
|
||||
if (slotIndex >= oldInputSize) {
|
||||
indexShift += newInputSize - oldInputSize;
|
||||
}
|
||||
if (slotIndex >= oldInputSize + oldOutputSize) {
|
||||
indexShift += newOutputSize - oldOutputSize;
|
||||
}
|
||||
return slotIndex + indexShift;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue