aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/multitileentity/base
diff options
context:
space:
mode:
authorJason Mitchell <mitchej@gmail.com>2023-01-20 00:30:50 -0800
committerGitHub <noreply@github.com>2023-01-20 09:30:50 +0100
commit7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb (patch)
treebea33f6637b929427e9abbe733e19606f8bf9032 /src/main/java/gregtech/api/multitileentity/base
parent750a4070af4756e3708e2b2555b9874864bf3cfb (diff)
downloadGT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.tar.gz
GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.tar.bz2
GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.zip
MTE Inventory updates (#1496)
* MTE Inventory updates * Separate Input/Output inventory * Use a LinkedHashMap to ensure inventory orders are deterministic * Input/Output work on either Input/Output inventories * MTE Inventory * Add GT_Packet_MultiTileEntity * More dyanmic packet with packetFeatures * Add IMTE_HasModes for MultiBlockPart * Help with MTE Inventory (#1613) * convert inventory to use ItemStackHandler * Update MUI * inventories * move Iteminventory to its own method Co-authored-by: miozune <miozune@gmail.com> * Update MUI * Update MUI * Add IMultiBlockPart * Mte fluid inventory (#1639) * first work on fluid inventory * make gui work with numbers not dividable by 4 * use math.min * add outputfluids saving * actually working * Update MUI Co-authored-by: miozune <miozune@gmail.com> * Ticking Covers! * Parts now register covers with the controller * Controllers now tick covers on parts * Break cover ticking out into `tickCoverAtSide` Fix some inventory methods on MultiBlockController * Filter on tickable covers * Improve GUIs for MTEs (#1650) * working controller GUI * locked inventory selection work * input and output locking of inventories Co-authored-by: miozune <miozune@gmail.com> * spotless * CoverInfo refactor (#1654) * Add `CoverInfo` and deprecate the old fields to hold cover information * Disable MTE registration * Fix NPE - Return EMPTY_INFO for SIDE_UNKNOWN Temporarily add back old NBT saving in case of a revert so covers aren't lost. * Actually save the old NBT data, instead of empty Co-authored-by: BlueWeabo <76872108+BlueWeabo@users.noreply.github.com> Co-authored-by: miozune <miozune@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity/base')
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java157
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java11
2 files changed, 92 insertions, 76 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java
index 8161680b1e..2ab1f8c7d6 100644
--- a/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java
@@ -15,6 +15,7 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.enums.SoundResource;
import gregtech.api.enums.Textures;
+import gregtech.api.gui.modularui.GT_UIInfos;
import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregtechWailaProvider;
@@ -24,9 +25,10 @@ import gregtech.api.metatileentity.GregTechTileClientEvents;
import gregtech.api.multitileentity.MultiTileEntityBlockInternal;
import gregtech.api.multitileentity.MultiTileEntityClassContainer;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
+import gregtech.api.multitileentity.interfaces.IMultiBlockPart;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
+import gregtech.api.net.GT_Packet_MultiTileEntity;
import gregtech.api.net.GT_Packet_New;
-import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.XSTR;
import gregtech.api.render.TextureFactory;
@@ -34,7 +36,6 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Util;
import gregtech.api.util.GT_Utility;
-import gregtech.api.util.ISerializableObject;
import gregtech.common.render.GT_MultiTexture;
import gregtech.common.render.IRenderedBlock;
import java.util.ArrayList;
@@ -55,6 +56,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.Explosion;
@@ -78,9 +80,10 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
public Materials mMaterial = Materials._NULL;
protected final boolean mIsTicking; // If this TileEntity is ticking at all
- protected boolean mShouldRefresh =
- true; // This Variable checks if this TileEntity should refresh when the Block is being set. That way you
+ // This Variable checks if this TileEntity should refresh when the Block is being set. That way you
// can turn this check off any time you need it.
+ protected boolean mShouldRefresh = true;
+
protected boolean mDoesBlockUpdate = false; // This Variable is for a buffered Block Update.
protected boolean mForceFullSelectionBoxes = false; // This Variable is for forcing the Selection Box to be full.
protected boolean mNeedsUpdate = false;
@@ -192,8 +195,6 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
copyTextures();
}
- 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[] {15, 15, 15, 15, 15, 15};
updateCoverBehavior();
@@ -252,7 +253,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
@Override
public boolean useModularUI() {
- return true;
+ return false;
}
@Override
@@ -730,6 +731,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
try {
return allowRightclick(aPlayer) && onRightClick(aPlayer, aSide, aX, aY, aZ);
} catch (Throwable e) {
+ GT_FML_LOGGER.error("onBlockActivated Failed", e);
e.printStackTrace(GT_Log.err);
return true;
}
@@ -747,9 +749,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
return true;
}
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
}
if (isServerSide()) {
if (!privateAccess() || aPlayer.getDisplayName().equalsIgnoreCase(getOwnerName())) {
@@ -826,14 +826,29 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
aY,
aZ)) return true;
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
+
+ return openModularUi(aPlayer, aSide);
}
}
return false;
}
+ public boolean hasGui(byte aSide) {
+ return false;
+ }
+
+ boolean openModularUi(EntityPlayer aPlayer, byte aSide) {
+ if (!hasGui(aSide) || !isServerSide()) {
+ System.out.println("No GUI or Not Serverside");
+ return false;
+ }
+
+ GT_UIInfos.openGTTileEntityUI(this, aPlayer);
+ System.out.println("Trying to open a UI");
+ return true;
+ }
+
public boolean onWrenchRightClick(
EntityPlayer aPlayer, ItemStack tCurrentItem, byte wrenchSide, float aX, float aY, float aZ) {
if (setMainFacing(wrenchSide)) {
@@ -955,56 +970,49 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
return mLockUpgrade;
}
- public byte getTextureData() {
- return 0;
- }
-
/**
* @return a Packet containing all Data which has to be synchronised to the Client - Override as needed
*/
public GT_Packet_New getClientDataPacket() {
- return new GT_Packet_TileEntity(
+
+ final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(
+ 0,
xCoord,
(short) yCoord,
zCoord,
getMultiTileEntityRegistryID(),
getMultiTileEntityID(),
- mCoverSides[0],
- mCoverSides[1],
- mCoverSides[2],
- mCoverSides[3],
- mCoverSides[4],
- mCoverSides[5],
(byte) ((mFacing & 7) | (mRedstone ? 16 : 0)),
- (byte) getTextureData(), /*getTexturePage()*/
- (byte) 0, /*getUpdateData()*/
- (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)),
mColor);
- }
-
- @Override
- public Packet getDescriptionPacket() {
- issueClientUpdate();
- return null;
- }
- @Override
- public void getWailaBody(
- ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
- super.getWailaBody(itemStack, currenttip, accessor, config);
- currenttip.add(String.format(
- "Facing: %s", ForgeDirection.getOrientation(getFrontFacing()).name()));
- }
+ packet.setCoverData(
+ getCoverInfoAtSide((byte) 0).getCoverID(),
+ getCoverInfoAtSide((byte) 1).getCoverID(),
+ getCoverInfoAtSide((byte) 2).getCoverID(),
+ getCoverInfoAtSide((byte) 3).getCoverID(),
+ getCoverInfoAtSide((byte) 4).getCoverID(),
+ getCoverInfoAtSide((byte) 5).getCoverID());
+
+ packet.setRedstoneData((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 (this instanceof IMTE_HasModes) {
+ final IMTE_HasModes mteModes = (IMTE_HasModes) this;
+ packet.setModes(mteModes.getMode(), mteModes.getAllowedModes());
+ }
+ if (this instanceof IMultiBlockPart) {
+ final IMultiBlockPart mtePart = (IMultiBlockPart) this;
+ if (mtePart.getTargetPos() != null) {
+ final ChunkCoordinates aTarget = mtePart.getTargetPos();
+ packet.setTargetPos(aTarget.posX, (short) aTarget.posY, aTarget.posZ);
+ }
+ }
- @Override
- public void getWailaNBTData(
- EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) {
- super.getWailaNBTData(player, tile, tag, world, x, y, z);
+ return packet;
}
@Override
@@ -1019,10 +1027,6 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
sendCoverDataIfNeeded();
}
- public void setTextureData(byte aValue) {
- /*Do nothing*/
- }
-
@Override
public boolean receiveClientEvent(int aEventID, int aValue) {
super.receiveClientEvent(aEventID, aValue);
@@ -1037,10 +1041,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
// mWorks = ((aValue & 64) != 0);
break;
case GregTechTileClientEvents.CHANGE_CUSTOM_DATA:
- if ((aValue & 0x80) != 0) // Is texture index
- setTextureData((byte) (aValue & 0x7F));
- // else if (mMetaTileEntity instanceof GT_MetaTileEntity_Hatch)//is texture page and hatch
- // ((GT_MetaTileEntity_Hatch) mMetaTileEntity).onTexturePageUpdate((byte) (aValue & 0x7F));
+ // Nothing here, currently
break;
case GregTechTileClientEvents.CHANGE_COLOR:
if (aValue > 16 || aValue < 0) aValue = 0;
@@ -1075,6 +1076,26 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
}
@Override
+ public Packet getDescriptionPacket() {
+ issueClientUpdate();
+ return null;
+ }
+
+ @Override
+ public void getWailaBody(
+ ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
+ super.getWailaBody(itemStack, currenttip, accessor, config);
+ currenttip.add(String.format(
+ "Facing: %s", ForgeDirection.getOrientation(getFrontFacing()).name()));
+ }
+
+ @Override
+ public void getWailaNBTData(
+ EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) {
+ super.getWailaNBTData(player, tile, tag, world, x, y, z);
+ }
+
+ @Override
public boolean hasCustomInventoryName() {
return false;
}
@@ -1262,11 +1283,13 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
*/
@Override
public void openInventory() {
+ System.out.println("Open Inventory");
/* Do nothing */
}
@Override
public void closeInventory() {
+ System.out.println("Close Inventory");
/* Do nothing */
}
@@ -1350,33 +1373,27 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
*/
public boolean coverLetsFluidIn(byte aSide, Fluid aFluid) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsFluidIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aFluid, this);
+ return getCoverInfoAtSide(aSide).letsFluidIn(aFluid);
}
public boolean coverLetsFluidOut(byte aSide, Fluid aFluid) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsFluidOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aFluid, this);
+ return getCoverInfoAtSide(aSide).letsFluidOut(aFluid);
}
public boolean coverLetsEnergyIn(byte aSide) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsEnergyIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
+ return getCoverInfoAtSide(aSide).letsEnergyIn();
}
public boolean coverLetsEnergyOut(byte aSide) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsEnergyOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
+ return getCoverInfoAtSide(aSide).letsEnergyOut();
}
public boolean coverLetsItemsIn(byte aSide, int aSlot) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsItemsIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aSlot, this);
+ return getCoverInfoAtSide(aSide).letsItemsIn(aSlot);
}
public boolean coverLetsItemsOut(byte aSide, int aSlot) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsItemsOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aSlot, this);
+ return getCoverInfoAtSide(aSide).letsItemsOut(aSlot);
}
@Override
diff --git a/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java
index bc6f2439ea..9b3deb9d69 100644
--- a/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.GT_Values.NW;
import gregtech.api.net.GT_Packet_SendCoverData;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.covers.CoverInfo;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.Packet;
@@ -37,13 +38,11 @@ public abstract class BaseNontickableMultiTileEntity extends BaseMultiTileEntity
super.issueCoverUpdate(aSide);
} else {
// Otherwise, send the data right away
- NW.sendPacketToAllPlayersInRange(
- worldObj,
- new GT_Packet_SendCoverData(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this),
- xCoord,
- zCoord);
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_SendCoverData(coverInfo, this), xCoord, zCoord);
+
// Just in case
- mCoverNeedUpdate[aSide] = false;
+ coverInfo.setNeedsUpdate(false);
}
}