diff options
author | Jakub Szewczyk <git@kubasz.xyz> | 2022-03-31 17:31:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-31 18:31:42 +0200 |
commit | 2ed0d164315810c0c03e92d30e52225a8228ac99 (patch) | |
tree | 32546c67961d47ed9b7767c18b625952fff576be /src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java | |
parent | bec757c9d1f329fb30ed262b3eea9e9b69289181 (diff) | |
download | GT5-Unofficial-2ed0d164315810c0c03e92d30e52225a8228ac99.tar.gz GT5-Unofficial-2ed0d164315810c0c03e92d30e52225a8228ac99.tar.bz2 GT5-Unofficial-2ed0d164315810c0c03e92d30e52225a8228ac99.zip |
Make gregtech machines mark the chunk they're in as dirty on updates (#1001)
* Make gregtech machines mark the chunk they're in as dirty on updates
* Avoid any potential NPE in markDirty
* Mark dirty on GT tool use (screwdriver/wrench/etc)
* Fix multiblocks not marking hatches/buses as dirty too
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java')
-rw-r--r-- | src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 2f7504a4ce..f10066edf8 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -203,9 +203,9 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I } } if (isServerSide() && mTickTimer > 10) { - if (!doCoverThings()) + if (!doCoverThings()) return; - + byte oldConnections = mConnections; // Mask-out connection direction bits to keep only Foam related connections mConnections = (byte) (mMetaTileEntity.mConnections | (mConnections & ~IConnectable.CONNECTED_ALL)); @@ -278,7 +278,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I NW.sendPacketToAllPlayersInRange( worldObj, new GT_Packet_TileEntity( - xCoord, (short) yCoord, zCoord, mID, mCoverSides[0], mCoverSides[1], mCoverSides[2], mCoverSides[3], mCoverSides[4], mCoverSides[5], oTextureData = mConnections, + xCoord, (short) yCoord, zCoord, mID, mCoverSides[0], mCoverSides[1], mCoverSides[2], mCoverSides[3], mCoverSides[4], mCoverSides[5], oTextureData = mConnections, oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, oRedstoneData = (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)), oColor = mColor @@ -471,6 +471,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I @Override public void setInventorySlotContents(int aIndex, ItemStack aStack) { + markDirty(); mInventoryChanged = true; if (canAccessData()) mMetaTileEntity.setInventorySlotContents(aIndex, worldObj.isRemote ? aStack : GT_OreDictUnificator.setStack(true, aStack)); @@ -810,6 +811,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if (tCurrentItem != null) { if (getColorization() >= 0 && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { + mMetaTileEntity.markDirty(); tCurrentItem.func_150996_a(Items.bucket); setColorization((byte) -1); return true; @@ -817,6 +819,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) { if (mMetaTileEntity.onWrenchRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) { + mMetaTileEntity.markDirty(); GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); } @@ -827,12 +830,14 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { setCoverDataAtSide(tSide, getCoverBehaviorAtSideNew(tSide).onCoverScrewdriverClick(tSide, getCoverIDAtSide(tSide), getComplexCoverDataAtSide(tSide), this, aPlayer, 0.5F, 0.5F, 0.5F)); mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ); + mMetaTileEntity.markDirty(); 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, getCoverBehaviorAtSideNew(aSide).onCoverScrewdriverClick(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ)); mMetaTileEntity.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ); + mMetaTileEntity.markDirty(); GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); } } @@ -850,6 +855,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { if (mWorks) disableWorking(); else enableWorking(); + mMetaTileEntity.markDirty(); GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("090","Machine Processing: ") + (isAllowedToWork() ? GT_Utility.trans("088","Enabled") : GT_Utility.trans("087","Disabled"))); GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(101), 1.0F, -1, xCoord, yCoord, zCoord); } @@ -858,6 +864,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) { if (mMetaTileEntity.onWireCutterRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) { + mMetaTileEntity.markDirty(); //logic handled internally GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); } @@ -867,9 +874,11 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) { if (mMetaTileEntity.onSolderingToolRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) { + mMetaTileEntity.markDirty(); //logic handled internally GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 1.0F, -1, xCoord, yCoord, zCoord); } else if (GT_ModHandler.useSolderingIron(tCurrentItem, aPlayer)) { + mMetaTileEntity.markDirty(); mStrongRedstone ^= (1 << tSide); GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("091","Redstone Output at Side ") + tSide + GT_Utility.trans("092"," set to: ") + ((mStrongRedstone & (1 << tSide)) != 0 ? GT_Utility.trans("093","Strong") : GT_Utility.trans("094","Weak"))); GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 3.0F, -1, xCoord, yCoord, zCoord); @@ -888,6 +897,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem))) { setCoverItemAtSide(coverSide, tCurrentItem); + mMetaTileEntity.markDirty(); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); } @@ -898,6 +908,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(0), 1.0F, -1, xCoord, yCoord, zCoord); dropCover(coverSide, aSide, false); + mMetaTileEntity.markDirty(); } return true; } @@ -916,7 +927,13 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return false; try { - if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); + if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) { + boolean handled = mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); + if(handled) { + mMetaTileEntity.markDirty(); + } + return handled; + } } catch (Throwable e) { GT_Log.err.println("Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); e.printStackTrace(GT_Log.err); @@ -1156,7 +1173,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (!canAccessData() || getCoverIDAtSide(aSide) != 0) return false; return mMetaTileEntity.injectRotationalEnergy(aSide, aSpeed, aEnergy); } - + private boolean canMoveFluidOnSide(ForgeDirection aSide, Fluid aFluid, boolean isFill) { if (aSide == ForgeDirection.UNKNOWN) return true; @@ -1215,7 +1232,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I @Override public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { if (canAccessData() - && (aSide == ForgeDirection.UNKNOWN + && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) && getCoverBehaviorAtSideNew((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getComplexCoverDataAtSide((byte) aSide.ordinal()), null, this)) || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && getCoverBehaviorAtSideNew((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getComplexCoverDataAtSide((byte) aSide.ordinal()), null, this)) @@ -1242,6 +1259,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I } aStack = GT_OreDictUnificator.get(aStack); if (GT_Utility.areStacksEqual(tStack, aStack) && tStack.stackSize + aStack.stackSize <= Math.min(aStack.getMaxStackSize(), getInventoryStackLimit())) { + markDirty(); tStack.stackSize += aStack.stackSize; return true; } |