aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2021-11-16 05:32:32 +0800
committerGlease <4586901+Glease@users.noreply.github.com>2021-11-17 11:25:04 +0800
commit3f29e8c504ed163b7df9c4fb02a58d51ce2b878c (patch)
treeb69208a308ab475fcb43b65904cf32dc24c44719 /src
parent2265c1f0d2038dd1345146a1b9aecadcf5f48d58 (diff)
downloadGT5-Unofficial-3f29e8c504ed163b7df9c4fb02a58d51ce2b878c.tar.gz
GT5-Unofficial-3f29e8c504ed163b7df9c4fb02a58d51ce2b878c.tar.bz2
GT5-Unofficial-3f29e8c504ed163b7df9c4fb02a58d51ce2b878c.zip
convert cover data storage to a full nbt tag
Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/GT_Mod.java2
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java45
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java8
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java28
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java213
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java161
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java20
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java4
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java14
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java20
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java16
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java6
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java2
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java2
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java4
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCover.java3
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java46
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverNew.java113
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehavior.java202
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehavior_New.java480
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java2
-rw-r--r--src/main/java/gregtech/api/util/ISerializableObject.java107
-rw-r--r--src/main/java/gregtech/common/GT_Network.java2
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Arm.java11
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java13
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java256
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java21
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java18
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java19
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java24
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java2
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java2
32 files changed, 1530 insertions, 336 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 44ee615f41..fc7b17e0c6 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -115,7 +115,7 @@ import static gregtech.api.enums.GT_Values.MOD_ID_FR;
" after:TConstruct;" +
" after:Translocator;")
public class GT_Mod implements IGT_Mod {
- public static final int VERSION = 509, SUBVERSION = 33;
+ public static final int VERSION = 509, SUBVERSION = 39;
public static final int TOTAL_VERSION = calculateTotalGTVersion(VERSION, SUBVERSION);
public static final int REQUIRED_IC2 = 624;
@Mod.Instance("gregtech")
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index fe48f6506f..0d321423fc 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -113,7 +113,7 @@ public class GregTech_API {
/**
* The List of Cover Behaviors for the Covers
*/
- public static final Map<GT_ItemStack, GT_CoverBehavior> sCoverBehaviors = new ConcurrentHashMap<>();
+ public static final Map<GT_ItemStack, GT_CoverBehavior_New<?>> sCoverBehaviors = new ConcurrentHashMap<>();
/**
* The List of Circuit Behaviors for the Redstone Circuit Block
*/
@@ -615,6 +615,10 @@ public class GregTech_API {
}
public static void registerCover(ItemStack aStack, ITexture aCover, GT_CoverBehavior aBehavior) {
+ registerCover(aStack, aCover, (GT_CoverBehavior_New<?>) aBehavior);
+ }
+
+ public static void registerCover(ItemStack aStack, ITexture aCover, GT_CoverBehavior_New<?> aBehavior) {
if (!sCovers.containsKey(new GT_ItemStack(aStack)))
sCovers.put(new GT_ItemStack(aStack), aCover == null || !aCover.isValidTexture() ? Textures.BlockIcons.ERROR_RENDERING[0] : aCover);
if (aBehavior != null)
@@ -622,6 +626,10 @@ public class GregTech_API {
}
public static void registerCoverBehavior(ItemStack aStack, GT_CoverBehavior aBehavior) {
+ registerCoverBehavior(aStack, (GT_CoverBehavior_New<?>) aBehavior);
+ }
+
+ public static void registerCoverBehavior(ItemStack aStack, GT_CoverBehavior_New<?> aBehavior) {
sCoverBehaviors.put(new GT_ItemStack(aStack), aBehavior == null ? sDefaultBehavior : aBehavior);
}
@@ -631,6 +639,15 @@ public class GregTech_API {
* @param aBehavior can be null
*/
public static void registerCover(Collection<ItemStack> aStackList, ITexture aCover, GT_CoverBehavior aBehavior) {
+ registerCover(aStackList, aCover, aBehavior);
+ }
+
+ /**
+ * Registers multiple Cover Items. I use that for the OreDict Functionality.
+ *
+ * @param aBehavior can be null
+ */
+ public static void registerCover(Collection<ItemStack> aStackList, ITexture aCover, GT_CoverBehavior_New<?> aBehavior) {
if (aCover.isValidTexture())
aStackList.forEach(tStack -> GregTech_API.registerCover(tStack, aCover, aBehavior));
}
@@ -638,10 +655,24 @@ public class GregTech_API {
/**
* returns a Cover behavior, guaranteed to not return null after preload
*/
+ @Deprecated
public static GT_CoverBehavior getCoverBehavior(ItemStack aStack) {
if (aStack == null || aStack.getItem() == null)
return sNoBehavior;
- GT_CoverBehavior rCover = sCoverBehaviors.get(new GT_ItemStack(aStack));
+ GT_CoverBehavior_New<?> rCover = sCoverBehaviors.get(new GT_ItemStack(aStack));
+ if (!(rCover instanceof GT_CoverBehavior) || rCover == null)
+ return sDefaultBehavior;
+ return (GT_CoverBehavior) rCover;
+ }
+
+ /**
+ * returns a Cover behavior, guaranteed to not return null after preload
+ * @return
+ */
+ public static GT_CoverBehavior_New<?> getCoverBehaviorNew(ItemStack aStack) {
+ if (aStack == null || aStack.getItem() == null)
+ return sNoBehavior;
+ GT_CoverBehavior_New<?> rCover = sCoverBehaviors.get(new GT_ItemStack(aStack));
if (rCover == null)
return sDefaultBehavior;
return rCover;
@@ -650,6 +681,7 @@ public class GregTech_API {
/**
* returns a Cover behavior, guaranteed to not return null
*/
+ @Deprecated
public static GT_CoverBehavior getCoverBehavior(int aStack) {
if (aStack == 0)
return sNoBehavior;
@@ -657,6 +689,15 @@ public class GregTech_API {
}
/**
+ * returns a Cover behavior, guaranteed to not return null
+ */
+ public static GT_CoverBehavior_New<?> getCoverBehaviorNew(int aStack) {
+ if (aStack == 0)
+ return sNoBehavior;
+ return getCoverBehaviorNew(GT_Utility.intToStack(aStack));
+ }
+
+ /**
* Register a Wrench to be usable on GregTech Machines.
* The Wrench MUST have some kind of Durability unlike certain Buildcraft Wrenches.
* <p/>
diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
index f136f4f32b..d40a6026dc 100644
--- a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
+++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
@@ -59,7 +59,7 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity {
continue;
j = GT_Utility.getOppositeSide(i);
if (aSuckItems) {
- if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsItemsIn(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), -2, aBaseMetaTileEntity)) {
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSideNew(i).letsItemsIn(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSideNew(i), -2, aBaseMetaTileEntity)) {
IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i);
if (aBaseMetaTileEntity.getColorization() >= 0) {
byte tColor = tItemPipe.getColorization();
@@ -69,13 +69,13 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity {
}
if (tItemPipe instanceof BaseMetaPipeEntity) {
IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
- if (tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe.getCoverBehaviorAtSide(j).letsItemsOut(j, tItemPipe.getCoverIDAtSide(j), tItemPipe.getCoverDataAtSide(j), -2, tItemPipe)) {
+ if (tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe.getCoverBehaviorAtSideNew(j).letsItemsOut(j, tItemPipe.getCoverIDAtSide(j), tItemPipe.getCoverDataAtSideNew(j), -2, tItemPipe)) {
scanPipes((IMetaTileEntityItemPipe) tMetaTileEntity, aMap, aStep, aSuckItems, aIgnoreCapacity);
}
}
}
} else {
- if (aBaseMetaTileEntity.getCoverBehaviorAtSide(i).letsItemsOut(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSide(i), -2, aBaseMetaTileEntity)) {
+ if (aBaseMetaTileEntity.getCoverBehaviorAtSideNew(i).letsItemsOut(i, aBaseMetaTileEntity.getCoverIDAtSide(i), aBaseMetaTileEntity.getCoverDataAtSideNew(i), -2, aBaseMetaTileEntity)) {
IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i);
if (tItemPipe != null) {
if (aBaseMetaTileEntity.getColorization() >= 0) {
@@ -86,7 +86,7 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity {
}
if (tItemPipe instanceof BaseMetaPipeEntity) {
IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
- if (tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe.getCoverBehaviorAtSide(j).letsItemsIn(j, tItemPipe.getCoverIDAtSide(j), tItemPipe.getCoverDataAtSide(j), -2, tItemPipe)) {
+ if (tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe.getCoverBehaviorAtSideNew(j).letsItemsIn(j, tItemPipe.getCoverIDAtSide(j), tItemPipe.getCoverDataAtSideNew(j), -2, tItemPipe)) {
scanPipes((IMetaTileEntityItemPipe) tMetaTileEntity, aMap, aStep, aSuckItems, aIgnoreCapacity);
}
}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
index 560d47c595..47be175ead 100644
--- a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
+++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
@@ -1,6 +1,9 @@
package gregtech.api.interfaces.tileentity;
import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_CoverBehavior_New;
+import gregtech.api.util.ISerializableObject;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEnergyContainer {
@@ -10,20 +13,36 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn
boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced);
+ @Deprecated
void setCoverDataAtSide(byte aSide, int aData);
+ default void setCoverDataAtSide(byte aSide, ISerializableObject aData) {
+ if (aData instanceof ISerializableObject.LegacyCoverData)
+ setCoverDataAtSide(aSide, ((ISerializableObject.LegacyCoverData) aData).get());
+ }
+
void setCoverIDAtSide(byte aSide, int aID);
void setCoverItemAtSide(byte aSide, ItemStack aCover);
+ @Deprecated
int getCoverDataAtSide(byte aSide);
+ default ISerializableObject getCoverDataAtSideNew(byte aSide) {
+ return new ISerializableObject.LegacyCoverData(getCoverDataAtSide(aSide));
+ }
+
int getCoverIDAtSide(byte aSide);
ItemStack getCoverItemAtSide(byte aSide);
+ @Deprecated
GT_CoverBehavior getCoverBehaviorAtSide(byte aSide);
+ default GT_CoverBehavior_New<?> getCoverBehaviorAtSideNew(byte aSide) {
+ return getCoverBehaviorAtSide(aSide);
+ }
+
/**
* For use by the regular MetaTileEntities. Returns the Cover Manipulated input Redstone.
* Don't use this if you are a Cover Behavior. Only for MetaTileEntities.
@@ -46,4 +65,13 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn
* Receiving a packet with cover data.
*/
void receiveCoverData(byte coverSide, int coverID, int coverData);
+
+ /**
+ * Receiving a packet with cover data.
+ * @param aPlayer the player who made the change
+ */
+ default void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) {
+ if (aCoverData instanceof ISerializableObject.LegacyCoverData)
+ receiveCoverData(aCoverSide, aCoverID, ((ISerializableObject.LegacyCoverData) aCoverData).get());
+ }
}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
index c2465c1a53..af14f9a9fe 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -1,5 +1,14 @@
package gregtech.api.metatileentity;
+import static gregtech.GT_Mod.GT_FML_LOGGER;
+import static gregtech.api.enums.GT_Values.NW;
+import static gregtech.api.metatileentity.BaseMetaTileEntity.COVER_DATA_NBT_KEYS;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
@@ -11,16 +20,22 @@ import gregtech.api.interfaces.metatileentity.IConnectable;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity;
-import gregtech.api.metatileentity.BaseMetaTileEntity.ClientEvents;
import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_CoverBehavior_New;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.ISerializableObject;
import gregtech.common.GT_Client;
import gregtech.common.covers.GT_Cover_Fluidfilter;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -32,27 +47,18 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
-
-import static gregtech.GT_Mod.GT_FML_LOGGER;
-import static gregtech.api.enums.GT_Values.NW;
-
/**
* NEVER INCLUDE THIS FILE IN YOUR MOD!!!
* <p/>
* This is the main TileEntity for EVERYTHING.
*/
public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileEntity, IPipeRenderedTileEntity {
- private final GT_CoverBehavior[] mCoverBehaviors = new GT_CoverBehavior[]{GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior};
+ private final GT_CoverBehavior_New<?>[] mCoverBehaviors = new GT_CoverBehavior_New<?>[]{GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior};
public byte mConnections = IConnectable.NO_CONNECTION;
protected MetaPipeEntity mMetaTileEntity;
private byte[] mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0};
- private int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0};
- private int[] mCoverData = new int[]{0, 0, 0, 0, 0, 0};
- private final int[] mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING];
+ private int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0}, mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING];
+ private ISerializableObject[] mCoverData = new ISerializableObject[6];
private boolean mInventoryChanged = false, mWorkUpdate = false, mWorks = true, mNeedsUpdate = true, mNeedsBlockUpdate = true, mSendClientData = false;
private final boolean mCheckConnections = false;
private byte mColor = 0, oColor = 0, mStrongRedstone = 0, oStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, mLagWarningCount = 0;
@@ -92,27 +98,18 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
try {
aNBT.setInteger("mID", mID);
- aNBT.setIntArray("mCoverData", mCoverData);
+ for (int i = 0; i < mCoverData.length; i++) {
+ if (mCoverData[i] != null)
+ aNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT());
+ }
aNBT.setIntArray("mCoverSides", mCoverSides);
aNBT.setByteArray("mRedstoneSided", mSidedRedstone);
aNBT.setByte("mConnections", mConnections);
aNBT.setByte("mColor", mColor);
aNBT.setByte("mStrongRedstone", mStrongRedstone);
aNBT.setBoolean("mWorks", !mWorks);
-
- for(int i=0;i < mCoverData.length; i++) {
- if (GregTech_API.getCoverBehavior(mCoverSides[i]) instanceof GT_Cover_Fluidfilter) {
- final int fluidId = mCoverData[i] >>> 3;
- final Fluid fluid = FluidRegistry.getFluid(fluidId);
- if(fluid != null) {
- final String fluidName = FluidRegistry.getFluidName(fluid);
- aNBT.setString(String.format("fluidFilter%d", i), fluidName);
- }
- }
- }
-
} 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 immediately to GregTech Intergalactical!!!");
+ GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk would've been corrupted by now, but I prevented that. Please report immediately to GregTech Intergalactical!!!");
e.printStackTrace(GT_Log.err);
}
try {
@@ -158,28 +155,61 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
if (aID <= 0) mID = (short) aNBT.getInteger("mID");
else mID = aID;
mCoverSides = aNBT.getIntArray("mCoverSides");
- mCoverData = aNBT.getIntArray("mCoverData");
mSidedRedstone = aNBT.getByteArray("mRedstoneSided");
mConnections = aNBT.getByte("mConnections");
mColor = aNBT.getByte("mColor");
mStrongRedstone = aNBT.getByte("mStrongRedstone");
mWorks = !aNBT.getBoolean("mWorks");
- 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};
+ // check old form of data
+ mCoverData = null;
+ if (aNBT.hasKey("mCoverData", 11)) {
+ int[] tOldData = aNBT.getIntArray("mCoverData");
+ if (tOldData.length == 6)
+ mCoverData = Arrays.stream(tOldData).mapToObj(ISerializableObject.LegacyCoverData::new).toArray(ISerializableObject[]::new);
+ }
+ // if no old data
+ if (mCoverData == null) {
+ mCoverData = new ISerializableObject[6];
+ for (byte i = 0; i<6; i++) {
+ GT_CoverBehavior_New<?> tBehavior = getCoverBehaviorAtSideNew(i);
+ if (tBehavior == null)
+ continue;
+ mCoverData[i] = tBehavior.createDataObject();
+ if (aNBT.hasKey(COVER_DATA_NBT_KEYS[i]))
+ mCoverData[i].loadDataFromNBT(aNBT.getTag(COVER_DATA_NBT_KEYS[i]));
+ }
+ }
if (mSidedRedstone.length != 6) mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0};
- for (byte i = 0; i < 6; i++) {
- mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
- if(mCoverBehaviors[i] instanceof GT_Cover_Fluidfilter) {
- final String filterKey = String.format("fluidFilter%d", i);
- if (aNBT.hasKey(filterKey)) {
- mCoverData[i] = (mCoverData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3);
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
+
+ // check old form of data
+ mCoverData = new ISerializableObject[6];
+ if (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6) {
+ int[] tOldData = aNBT.getIntArray("mCoverData");
+ for (int i = 0; i < tOldData.length; i++) {
+ if(mCoverBehaviors[i] instanceof GT_Cover_Fluidfilter) {
+ final String filterKey = String.format("fluidFilter%d", i);
+ if (aNBT.hasKey(filterKey)) {
+ mCoverData[i] = mCoverBehaviors[i].createDataObject((tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3));
+ }
+ } else if (mCoverBehaviors[i] != null && mCoverBehaviors[i] != GregTech_API.sNoBehavior) {
+ mCoverData[i] = mCoverBehaviors[i].createDataObject(tOldData[i]);
}
}
+ } else {
+ // no old data
+ for (byte i = 0; i<6; i++) {
+ if (mCoverBehaviors[i] == null)
+ continue;
+ if (aNBT.hasKey(COVER_DATA_NBT_KEYS[i]))
+ mCoverData[i] = mCoverBehaviors[i].createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i]));
+ else
+ mCoverData[i] = mCoverBehaviors[i].createDataObject();
+ }
}
-
-
if (mID != 0 && createNewMetatileEntity(mID)) {
NBTTagList tItemList = aNBT.getTagList("Inventory", 10);
for (int i = 0; i < tItemList.tagCount(); i++) {
@@ -199,11 +229,11 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
}
- if (mCoverData.length != 6) mCoverData = new int[]{0, 0, 0, 0, 0, 0};
+ if (mCoverData == null || mCoverData.length != 6) mCoverData = new ISerializableObject[6];
if (mCoverSides.length != 6) mCoverSides = new int[]{0, 0, 0, 0, 0, 0};
if (mSidedRedstone.length != 6) mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0};
- for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
}
private boolean createNewMetatileEntity(short aID) {
@@ -271,7 +301,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
for (byte i = (byte) (tCode - 2); i < 6; i++)
if (getCoverIDAtSide(i) != 0) {
tCode++;
- GT_CoverBehavior tCover = getCoverBehaviorAtSide(i);
+ GT_CoverBehavior_New<?> tCover = getCoverBehaviorAtSideNew(i);
int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this);
if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) {
byte tRedstone = tCover.isRedstoneSensitive(i, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer) ? getInputRedstoneSignal(i) : 0;
@@ -298,7 +328,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
if (isServerSide()) {
if (mTickTimer == 10) {
for (byte i = 0; i < 6; i++)
- mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
issueBlockUpdate();
joinEnet();
}
@@ -326,15 +356,12 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
if (mTickTimer > 10) {
- if (mConnections != oTextureData)
- sendBlockEvent(ClientEvents.CHANGE_COMMON_DATA, oTextureData = mConnections);
+ if (mConnections != oTextureData) sendBlockEvent((byte) 0, oTextureData = mConnections);
byte tData = mMetaTileEntity.getUpdateData();
- if (tData != oUpdateData)
- sendBlockEvent(ClientEvents.CHANGE_CUSTOM_DATA, oUpdateData = tData);
- if (mColor != oColor) sendBlockEvent(ClientEvents.CHANGE_COLOR, oColor = mColor);
+ if (tData != oUpdateData) sendBlockEvent((byte) 1, oUpdateData = tData);
+ if (mColor != oColor) sendBlockEvent((byte) 2, oColor = mColor);
tData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) | ((mSidedRedstone[2] > 0) ? 4 : 0) | ((mSidedRedstone[3] > 0) ? 8 : 0) | ((mSidedRedstone[4] > 0) ? 16 : 0) | ((mSidedRedstone[5] > 0) ? 32 : 0));
- if (tData != oRedstoneData)
- sendBlockEvent(ClientEvents.CHANGE_REDSTONE_OUTPUT, oRedstoneData = tData);
+ if (tData != oRedstoneData) sendBlockEvent((byte) 3, oRedstoneData = tData);
}
if (mNeedsBlockUpdate) {
@@ -384,7 +411,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
mCoverSides[4] = aCover4;
mCoverSides[5] = aCover5;
- for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
+ for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
receiveClientEvent(0, aTextureData);
receiveClientEvent(1, aUpdateData);
@@ -498,6 +525,12 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
@Override
+ public void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) {
+ if ((aCoverSide >= 0 && aCoverSide < 6) && (mCoverSides[aCoverSide] == aCoverID))
+ setCoverDataAtSide(aCoverSide, aCoverData);
+ }
+
+ @Override
public byte getStrongestRedstone() {
return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5))))));
}
@@ -869,7 +902,8 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
if (mStrongRedstone > 0) tNBT.setByte("mStrongRedstone", mStrongRedstone);
for (byte i = 0; i < mCoverSides.length; i++) {
if (mCoverSides[i] != 0) {
- tNBT.setIntArray("mCoverData", mCoverData);
+ if (mCoverData[i] != null) // this really shouldn't be null if a cover is there already, but whatever
+ tNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT());
tNBT.setIntArray("mCoverSides", mCoverSides);
break;
}
@@ -909,13 +943,13 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)) {
if (getCoverIDAtSide(aSide) == 0 && getCoverIDAtSide(tSide) != 0) {
if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) {
- setCoverDataAtSide(tSide, getCoverBehaviorAtSide(tSide).onCoverScrewdriverclick(tSide, getCoverIDAtSide(tSide), getCoverDataAtSide(tSide), this, aPlayer, 0.5F, 0.5F, 0.5F));
+ setCoverDataAtSide(tSide, getCoverBehaviorAtSideNew(tSide).onCoverScrewdriverClick(tSide, getCoverIDAtSide(tSide), getCoverDataAtSideNew(tSide), this, aPlayer, 0.5F, 0.5F, 0.5F));
mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ);
GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
}
} else {
if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
- setCoverDataAtSide(aSide, getCoverBehaviorAtSide(aSide).onCoverScrewdriverclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ));
+ setCoverDataAtSide(aSide, getCoverBehaviorAtSideNew(aSide).onCoverScrewdriverClick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSideNew(aSide), this, aPlayer, aX, aY, aZ));
mMetaTileEntity.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ);
GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
}
@@ -968,7 +1002,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
if (getCoverIDAtSide(coverSide) == 0) {
if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) {
- if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(coverSide, new GT_ItemStack(tCurrentItem), this) &&
+ if (GregTech_API.getCoverBehaviorNew(tCurrentItem).isCover