diff options
| author | Jason Mitchell <mitchej@gmail.com> | 2023-05-06 08:13:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-06 17:13:45 +0200 |
| commit | d945860185b888709300e28ae1c9db88799856c0 (patch) | |
| tree | 0d7e2766c98164d6ae915c0e8a9d8f46c7ceb4e5 /src/main/java/gregtech/api/metatileentity/implementations | |
| parent | f6e17a41972ba0afb6004a3d383be8d51eaee60e (diff) | |
| download | GT5-Unofficial-d945860185b888709300e28ae1c9db88799856c0.tar.gz GT5-Unofficial-d945860185b888709300e28ae1c9db88799856c0.tar.bz2 GT5-Unofficial-d945860185b888709300e28ae1c9db88799856c0.zip | |
Exploring some various ForgeDirection fixes (#1950)
* Fix mFacing NPEs
* Default facing fixes (#1945)
* QuickFixes incomplete facing fixes
* fix Neither UP nor DOWN conditions as offsetY == 0 is not valid test
* fix neither up nor down again
* Still not fixed: use ForgeDirection.flag for clarty
killed more ordinal siding.
* get ride of offset testing
---------
Co-authored-by: Jakub <53441451+kuba6000@users.noreply.github.com>
Co-authored-by: Jason Mitchell <mitchej@gmail.com>
* bit logic fix
* Fix single block machine facings
* Predict the machine facing direction clientside before the server packet arrives
* Fix isFacingValid logic
---------
Co-authored-by: Léa Gris <lea.gris@noiraude.net>
Co-authored-by: Jakub <53441451+kuba6000@users.noreply.github.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: Raven Szewczyk <git@eigenraven.me>
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/implementations')
5 files changed, 66 insertions, 35 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java index 699b0d5797..59dc65f89a 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java @@ -2,6 +2,11 @@ package gregtech.api.metatileentity.implementations; import static gregtech.api.enums.Mods.GalacticraftCore; import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.WEST; import java.util.ArrayList; import java.util.HashSet; @@ -511,34 +516,34 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile spaceDown = spaceNorth = spaceWest = 0; spaceSouth = spaceEast = 1; } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { + if (getBaseMetaTileEntity().getCoverIDAtSide(UP) != 0) { spaceNorth = spaceWest = 0; spaceUp = spaceSouth = spaceEast = 1; } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { + if (getBaseMetaTileEntity().getCoverIDAtSide(NORTH) != 0) { spaceDown = spaceNorth = spaceWest = 0; spaceUp = spaceEast = 1; } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { + if (getBaseMetaTileEntity().getCoverIDAtSide(SOUTH) != 0) { spaceDown = spaceWest = 0; spaceUp = spaceSouth = spaceEast = 1; } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { + if (getBaseMetaTileEntity().getCoverIDAtSide(WEST) != 0) { spaceDown = spaceNorth = spaceWest = 0; spaceUp = spaceSouth = 1; } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { + if (getBaseMetaTileEntity().getCoverIDAtSide(EAST) != 0) { spaceDown = spaceNorth = 0; spaceUp = spaceSouth = spaceEast = 1; } byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & (1 << DOWN.ordinal())) != 0) spaceDown = 0f; - if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) spaceUp = 1f; - if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) spaceNorth = 0f; - if ((tConn & (1 << ForgeDirection.SOUTH.ordinal())) != 0) spaceSouth = 1f; - if ((tConn & (1 << ForgeDirection.WEST.ordinal())) != 0) spaceWest = 0f; - if ((tConn & (1 << ForgeDirection.EAST.ordinal())) != 0) spaceEast = 1f; + if ((tConn & DOWN.flag) != 0) spaceDown = 0f; + if ((tConn & UP.flag) != 0) spaceUp = 1f; + if ((tConn & NORTH.flag) != 0) spaceNorth = 0f; + if ((tConn & SOUTH.flag) != 0) spaceSouth = 1f; + if ((tConn & WEST.flag) != 0) spaceWest = 0f; + if ((tConn & EAST.flag) != 0) spaceEast = 1f; return AxisAlignedBB.getBoundingBox( aX + spaceWest, diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index 50927d7b89..c0c6c7663d 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -428,7 +428,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { final IGregTechTileEntity gTank = tTank instanceof IGregTechTileEntity ? (IGregTechTileEntity) tTank : null; if (isConnectedAtSide(side) && tTank != null - && (mLastReceivedFrom & (1 << side.ordinal())) == 0 + && (mLastReceivedFrom & side.flag) == 0 && getBaseMetaTileEntity().getCoverInfoAtSide(side) .letsFluidOut(tFluid.getFluid()) && (gTank == null || gTank.getCoverInfoAtSide(oppositeSide) @@ -478,7 +478,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { float aX, float aY, float aZ) { if (GT_Mod.gregtechproxy.gt6Pipe) { final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); - final byte tMask = (byte) (1 << tSide.ordinal()); + final byte tMask = (byte) (tSide.flag); if (entityPlayer.isSneaking()) { if (isInputDisabledAtSide(tSide)) { mDisableInput &= ~tMask; @@ -798,7 +798,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { } public boolean isInputDisabledAtSide(ForgeDirection side) { - return (mDisableInput & (1 << side.ordinal())) != 0; + return (mDisableInput & side.flag) != 0; } @Override @@ -843,12 +843,12 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { } final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & (1 << ForgeDirection.DOWN.ordinal())) != 0) tSide0 = 0f; - if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) tSide1 = 1f; - if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) tSide2 = 0f; - if ((tConn & (1 << ForgeDirection.SOUTH.ordinal())) != 0) tSide3 = 1f; - if ((tConn & (1 << ForgeDirection.WEST.ordinal())) != 0) tSide4 = 0f; - if ((tConn & (1 << ForgeDirection.EAST.ordinal())) != 0) tSide5 = 1f; + if ((tConn & ForgeDirection.DOWN.flag) != 0) tSide0 = 0f; + if ((tConn & ForgeDirection.UP.flag) != 0) tSide1 = 1f; + if ((tConn & ForgeDirection.NORTH.flag) != 0) tSide2 = 0f; + if ((tConn & ForgeDirection.SOUTH.flag) != 0) tSide3 = 1f; + if ((tConn & ForgeDirection.WEST.flag) != 0) tSide4 = 0f; + if ((tConn & ForgeDirection.EAST.flag) != 0) tSide5 = 1f; return AxisAlignedBB .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java index 0a1fe6ae7a..f0d8807e95 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java @@ -497,12 +497,12 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE } final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & (1 << ForgeDirection.DOWN.ordinal())) != 0) spaceDown = 0f; - if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) spaceUp = 1f; - if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) spaceNorth = 0f; - if ((tConn & (1 << ForgeDirection.SOUTH.ordinal())) != 0) spaceSouth = 1f; - if ((tConn & (1 << ForgeDirection.WEST.ordinal())) != 0) spaceWest = 0f; - if ((tConn & (1 << ForgeDirection.EAST.ordinal())) != 0) spaceEast = 1f; + if ((tConn & ForgeDirection.DOWN.flag) != 0) spaceDown = 0f; + if ((tConn & ForgeDirection.UP.flag) != 0) spaceUp = 1f; + if ((tConn & ForgeDirection.NORTH.flag) != 0) spaceNorth = 0f; + if ((tConn & ForgeDirection.SOUTH.flag) != 0) spaceSouth = 1f; + if ((tConn & ForgeDirection.WEST.flag) != 0) spaceWest = 0f; + if ((tConn & ForgeDirection.EAST.flag) != 0) spaceEast = 1f; return AxisAlignedBB.getBoundingBox( aX + spaceWest, diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java index fe5d57c84a..80ad9e38a5 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java @@ -17,6 +17,9 @@ import static gregtech.api.metatileentity.BaseTileEntity.STALLED_VENT_TOOLTIP; import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.metatileentity.BaseTileEntity.UNUSED_SLOT_TOOLTIP; import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.UNKNOWN; +import static net.minecraftforge.common.util.ForgeDirection.UP; import java.util.Arrays; import java.util.Collections; @@ -68,8 +71,15 @@ import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; import gregtech.api.render.TextureFactory; -import gregtech.api.util.*; +import gregtech.api.util.GT_ClientPreference; +import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; +import gregtech.api.util.GT_TooltipDataCache; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.GT_Waila; import gregtech.common.gui.modularui.UIHelper; import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget; import gregtech.common.power.BasicMachineEUPower; @@ -101,7 +111,7 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B public boolean mDisableFilter = true; public boolean mDisableMultiStack = true; public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mOutputBlocked = 0; - public ForgeDirection mMainFacing = ForgeDirection.UNKNOWN; + public ForgeDirection mMainFacing = ForgeDirection.WEST; public FluidStack mOutputFluid; public String mGUIName, mNEIName; protected final Power mPower; @@ -190,7 +200,7 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B } protected boolean isValidMainFacing(ForgeDirection side) { - return side.offsetY == 0; // Neither DOWN nor UP + return (side.flag & (UP.flag | DOWN.flag | UNKNOWN.flag)) == 0; // Horizontal } public boolean setMainFacing(ForgeDirection side) { @@ -205,6 +215,20 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B } @Override + public void onFacingChange() { + super.onFacingChange(); + // Set up the correct facing (front towards player, output opposite) client-side before the server packet + // arrives + if (mMainFacing == UNKNOWN) { + IGregTechTileEntity te = getBaseMetaTileEntity(); + if (te != null && te.getWorld().isRemote) { + mMainFacing = te.getFrontFacing(); + te.setFrontFacing(te.getBackFacing()); + } + } + } + + @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] rTextures = new ITexture[14][17][]; aTextures = Arrays.copyOf(aTextures, 14); @@ -237,7 +261,7 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { final int textureIndex; - if (mMainFacing.offsetY != 0) { // UP or DOWN + if ((mMainFacing.flag & (UP.flag | DOWN.flag)) != 0) { // UP or DOWN if (sideDirection == facingDirection) { textureIndex = active ? 2 : 3; } else { @@ -298,7 +322,8 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B @Override public boolean isFacingValid(ForgeDirection facing) { - return facing.offsetY == 0 || facing.offsetY == 0; + // Either mMainFacing or mMainFacing is horizontal + return ((facing.flag | mMainFacing.flag) & ~(UP.flag | DOWN.flag | UNKNOWN.flag)) != 0; } @Override @@ -525,7 +550,7 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B public void initDefaultModes(NBTTagCompound aNBT) { mMainFacing = ForgeDirection.UNKNOWN; if (!getBaseMetaTileEntity().getWorld().isRemote) { - GT_ClientPreference tPreference = GT_Mod.gregtechproxy + final GT_ClientPreference tPreference = GT_Mod.gregtechproxy .getClientPreference(getBaseMetaTileEntity().getOwnerUuid()); if (tPreference != null) { mDisableFilter = !tPreference.isSingleBlockInitialFilterEnabled(); @@ -722,10 +747,10 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B } protected void doDisplayThings() { - if (mMainFacing.offsetY != 0 && getBaseMetaTileEntity().getFrontFacing().offsetY == 0) { + if (!isValidMainFacing(mMainFacing) && isValidMainFacing(getBaseMetaTileEntity().getFrontFacing())) { mMainFacing = getBaseMetaTileEntity().getFrontFacing(); } - if (mMainFacing.offsetY == 0 && !mHasBeenUpdated) { + if (isValidMainFacing(mMainFacing) && !mHasBeenUpdated) { mHasBeenUpdated = true; getBaseMetaTileEntity().setFrontFacing(getBaseMetaTileEntity().getBackFacing()); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java index 2d4b080093..dc79ef0ba9 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java @@ -672,7 +672,8 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_ final ForgeDirection mainFacing = this.mMainFacing; - if (mainFacing.ordinal() > 1 && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 + if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 + && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { final double oX = aBaseMetaTileEntity.getXCoord(); |
