aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
diff options
context:
space:
mode:
authorJakub Szewczyk <git@kubasz.xyz>2022-03-31 17:31:42 +0100
committerGitHub <noreply@github.com>2022-03-31 18:31:42 +0200
commit2ed0d164315810c0c03e92d30e52225a8228ac99 (patch)
tree32546c67961d47ed9b7767c18b625952fff576be /src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
parentbec757c9d1f329fb30ed262b3eea9e9b69289181 (diff)
downloadGT5-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.java30
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;
}