aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/multitileentity
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity')
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java70
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java18
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityItemInternal.java168
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java12
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java182
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/TickableMultiTileEntity.java81
-rw-r--r--src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java23
-rw-r--r--src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileUpgradeCasing.java71
-rw-r--r--src/main/java/gregtech/api/multitileentity/enums/MultiTileCasingPurpose.java13
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java45
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java11
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java19
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/UpgradableModularMuTE.java10
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/UpgradableMuTE.java12
-rw-r--r--src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java821
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java198
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java2013
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java688
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/PowerController.java92
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/StackableController.java43
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/StackableModularController.java77
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java32
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java10
23 files changed, 1580 insertions, 3129 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
index a30d523b55..5ea1069193 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
@@ -189,8 +189,8 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
@Override
public ArrayList<String> getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) {
final TileEntity aTileEntity = aPlayer.worldObj.getTileEntity(aX, aY, aZ);
- if (aTileEntity instanceof IDebugableTileEntity) {
- return ((IDebugableTileEntity) aTileEntity).getDebugInfo(aPlayer, aLogLevel);
+ if (aTileEntity instanceof IDebugableTileEntity mte) {
+ return mte.getDebugInfo(aPlayer, aLogLevel);
}
return new ArrayList<>();
}
@@ -291,7 +291,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
if (!LOCK) {
LOCK = true;
- if (aTileEntity instanceof BaseTileEntity) ((BaseTileEntity) aTileEntity).onAdjacentBlockChange(aX, aY, aZ);
+ if (aTileEntity instanceof BaseTileEntity bte) bte.onAdjacentBlockChange(aX, aY, aZ);
LOCK = false;
}
if (aTileEntity instanceof IMTE_OnNeighborBlockChange change) change.onNeighborBlockChange(aWorld, aBlock);
@@ -368,21 +368,25 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
final int aFortune = EnchantmentHelper.getFortuneModifier(aPlayer);
float aChance = 1.0F;
final TileEntity aTileEntity = getTileEntity(aWorld, aX, aY, aZ, true);
- if (aTileEntity instanceof IMultiTileEntity) {
- final ArrayList<ItemStack> tList = ((IMultiTileEntity) aTileEntity).getDrops(aFortune, aSilkTouch);
- aChance = ForgeEventFactory
- .fireBlockHarvesting(tList, aWorld, this, aX, aY, aZ, aMeta, aFortune, aChance, aSilkTouch, aPlayer);
- for (final ItemStack tStack : tList)
- if (XSTR.XSTR_INSTANCE.nextFloat() <= aChance) dropBlockAsItem(aWorld, aX, aY, aZ, tStack);
+
+ if (!(aTileEntity instanceof IMultiTileEntity mte)) {
+ return;
}
+
+ final ArrayList<ItemStack> tList = mte.getDrops(aFortune, aSilkTouch);
+ aChance = ForgeEventFactory
+ .fireBlockHarvesting(tList, aWorld, this, aX, aY, aZ, aMeta, aFortune, aChance, aSilkTouch, aPlayer);
+ for (final ItemStack tStack : tList)
+ if (XSTR.XSTR_INSTANCE.nextFloat() <= aChance) dropBlockAsItem(aWorld, aX, aY, aZ, tStack);
+
}
@Override
public final boolean shouldSideBeRendered(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) {
final TileEntity aTileEntity = aWorld
.getTileEntity(aX - OFFX[ordinalSide], aY - OFFY[ordinalSide], aZ - OFFZ[ordinalSide]);
- return aTileEntity instanceof IMultiTileEntity
- ? ((IMultiTileEntity) aTileEntity).shouldSideBeRendered(ForgeDirection.getOrientation(ordinalSide))
+ return aTileEntity instanceof IMultiTileEntity mte
+ ? mte.shouldSideBeRendered(ForgeDirection.getOrientation(ordinalSide))
: super.shouldSideBeRendered(aWorld, aX, aY, aZ, ordinalSide);
}
@@ -473,12 +477,17 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
@Override
public final int getComparatorInputOverride(World aWorld, int aX, int aY, int aZ, int ordinalSide) {
final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- return aTileEntity instanceof IMTE_GetComparatorInputOverride override
- ? override.getComparatorInputOverride(ForgeDirection.getOrientation(ordinalSide))
- : aTileEntity instanceof IMTE_IsProvidingWeakPower power ? power.isProvidingWeakPower(
+ if (aTileEntity instanceof IMTE_GetComparatorInputOverride override) {
+ return override.getComparatorInputOverride(ForgeDirection.getOrientation(ordinalSide));
+ }
+
+ if (aTileEntity instanceof IMTE_IsProvidingWeakPower power) {
+ return power.isProvidingWeakPower(
ForgeDirection.getOrientation(ordinalSide)
- .getOpposite())
- : super.getComparatorInputOverride(aWorld, aX, aY, aZ, ordinalSide);
+ .getOpposite());
+ }
+
+ return super.getComparatorInputOverride(aWorld, aX, aY, aZ, ordinalSide);
}
@Override
@@ -523,7 +532,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
public final ArrayList<ItemStack> getDrops(World aWorld, int aX, int aY, int aZ, int aUnusableMetaData,
int aFortune) {
final TileEntity aTileEntity = getTileEntity(aWorld, aX, aY, aZ, true);
- if (aTileEntity instanceof IMultiTileEntity) return ((IMultiTileEntity) aTileEntity).getDrops(aFortune, false);
+ if (aTileEntity instanceof IMultiTileEntity mte) return mte.getDrops(aFortune, false);
return new ArrayList<>();
}
@@ -536,8 +545,8 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
public final float getExplosionResistance(Entity aExploder, World aWorld, int aX, int aY, int aZ,
double aExplosionX, double aExplosionY, double aExplosionZ) {
final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- return aTileEntity instanceof IMultiTileEntity
- ? ((IMultiTileEntity) aTileEntity).getExplosionResistance(aExploder, aExplosionX, aExplosionY, aExplosionZ)
+ return aTileEntity instanceof IMultiTileEntity mte
+ ? mte.getExplosionResistance(aExploder, aExplosionX, aExplosionY, aExplosionZ)
: 1.0F;
}
@@ -546,14 +555,14 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
if (aWorld.isRemote) return;
final TileEntity aTileEntity = getTileEntity(aWorld, aX, aY, aZ, true);
if (aTileEntity != null) LAST_BROKEN_TILEENTITY.set(aTileEntity);
- if (aTileEntity instanceof IMultiTileEntity) {
+ if (aTileEntity instanceof IMultiTileEntity mte) {
GT_Log.exp.printf(
"Explosion at : %d | %d | %d DIMID: %s due to near explosion!%n",
aX,
aY,
aZ,
aWorld.provider.dimensionId);
- ((IMultiTileEntity) aTileEntity).onExploded(aExplosion);
+ mte.onExploded(aExplosion);
} else aWorld.setBlockToAir(aX, aY, aZ);
}
@@ -587,13 +596,13 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
public final ItemStack getPickBlock(MovingObjectPosition aTarget, World aWorld, int aX, int aY, int aZ,
EntityPlayer aPlayer) {
final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- return aTileEntity instanceof IMultiTileEntity ? ((IMultiTileEntity) aTileEntity).getPickBlock(aTarget) : null;
+ return aTileEntity instanceof IMultiTileEntity mte ? mte.getPickBlock(aTarget) : null;
}
@Override
public final ItemStack getPickBlock(MovingObjectPosition aTarget, World aWorld, int aX, int aY, int aZ) {
final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- return aTileEntity instanceof IMultiTileEntity ? ((IMultiTileEntity) aTileEntity).getPickBlock(aTarget) : null;
+ return aTileEntity instanceof IMultiTileEntity mte ? mte.getPickBlock(aTarget) : null;
}
public final IMultiTileEntity receiveMultiTileEntityData(IBlockAccess aWorld, int aX, short aY, int aZ, short aRID,
@@ -601,9 +610,8 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
if (!(aWorld instanceof World)) return null;
TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- if (!(aTileEntity instanceof IMultiTileEntity)
- || ((IMultiTileEntity) aTileEntity).getMultiTileEntityRegistryID() != aRID
- || ((IMultiTileEntity) aTileEntity).getMultiTileEntityID() != aID) {
+ if (!(aTileEntity instanceof IMultiTileEntity mte) || mte.getMultiTileEntityRegistryID() != aRID
+ || mte.getMultiTileEntityID() != aID) {
final MultiTileEntityRegistry tRegistry = MultiTileEntityRegistry.getRegistry(aRID);
if (tRegistry == null) return null;
@@ -612,7 +620,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
setTileEntity((World) aWorld, aX, aY, aZ, aTileEntity, false);
}
- return ((IMultiTileEntity) aTileEntity);
+ return (IMultiTileEntity) aTileEntity;
}
public void receiveCoverData(IMultiTileEntity mte, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4,
@@ -629,14 +637,6 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
mte.issueBlockUpdate();
}
}
- //
- // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, aTextureData);
- //
- // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData & 0x7F);
- // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aTexturePage | 0x80);
- //
- // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, aColorData);
- // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData);
@Override
public final TileEntity createTileEntity(World aWorld, int aMeta) {
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
index 3eae75f934..4ce4c3c886 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
@@ -13,6 +13,7 @@ import gregtech.api.multitileentity.multiblock.casing.FunctionalCasing;
import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
import gregtech.api.util.GT_Util;
import gregtech.common.tileentities.casings.upgrade.Inventory;
+import gregtech.common.tileentities.casings.upgrade.Tank;
public class MultiTileEntityClassContainer {
@@ -144,6 +145,23 @@ public class MultiTileEntityClassContainer {
return this;
}
+ public MultiTileEntityClassContainer upgradeTankCount(int count) {
+ verifyDescendentOf(Tank.class);
+
+ mParameters.setInteger(NBT.UPGRADE_TANK_COUNT, count);
+ return this;
+ }
+
+ public MultiTileEntityClassContainer upgradeTankCapacity(Long aCapacity) {
+ mParameters.setLong(NBT.UPGRADE_TANK_CAPACITY, aCapacity);
+ return this;
+ }
+
+ public MultiTileEntityClassContainer upgradeAmperage(long amperage) {
+ mParameters.setLong(NBT.UPGRADE_AMPERAGE, amperage);
+ return this;
+ }
+
@SuppressWarnings("unused")
public MultiTileEntityClassContainer setNBT(String key, Object val) {
return setNBT(new Tuple(key, val));
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItemInternal.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItemInternal.java
index 07a9124df4..cc10485f84 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItemInternal.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItemInternal.java
@@ -51,14 +51,14 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@SuppressWarnings("unchecked")
public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List<String> aList, boolean aF3_H) {
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer == null) {
aList.add("INVALID ITEM!");
return;
}
- if (tTileEntityContainer.mTileEntity instanceof IMTE_AddToolTips) {
+ if (tTileEntityContainer.mTileEntity instanceof IMTE_AddToolTips mte) {
try {
- ((IMTE_AddToolTips) tTileEntityContainer.mTileEntity).addToolTips(aList, aStack, aF3_H);
+ mte.addToolTips(aList, aStack, aF3_H);
} catch (Throwable e) {
GT_FML_LOGGER.error("addInformation", e);
}
@@ -73,11 +73,9 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@SuppressWarnings("unchecked")
public void getSubItems(Item aItem, CreativeTabs aTab, List<ItemStack> aList) {
for (MultiTileEntityClassContainer tClass : mBlock.mMultiTileEntityRegistry.mRegistrations) {
- if (!tClass.mHidden) {
- if (((IMultiTileEntity) tClass.mCanonicalTileEntity)
- .getSubItems(mBlock, aItem, aTab, aList, tClass.mID)) {
- aList.add(mBlock.mMultiTileEntityRegistry.getItem(tClass.mID));
- }
+ if (!tClass.mHidden && ((IMultiTileEntity) tClass.mCanonicalTileEntity)
+ .getSubItems(mBlock, aItem, aTab, aList, tClass.mID)) {
+ aList.add(mBlock.mMultiTileEntityRegistry.getItem(tClass.mID));
}
}
}
@@ -85,10 +83,15 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@Override
public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ,
int ordinalSide, float aHitX, float aHitY, float aHitZ) {
+
if (aY < 0 || aY > aWorld.getHeight()) return false;
+
+ if (aPlayer == null) return false;
+
try {
ForgeDirection side = ForgeDirection.getOrientation(ordinalSide);
final Block tClickedBlock = aWorld.getBlock(aX, aY, aZ);
+
if (tClickedBlock instanceof BlockSnow && (aWorld.getBlockMetadata(aX, aY, aZ) & 7) < 1) {
ordinalSide = SIDE_TOP;
side = ForgeDirection.UP;
@@ -102,79 +105,86 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
final Block tReplacedBlock = aWorld.getBlock(aX, aY, aZ);
if (!tReplacedBlock.isReplaceable(aWorld, aX, aY, aZ)
- || !mBlock.canReplace(aWorld, aX, aY, aZ, ordinalSide, aStack)) return false;
- if (aStack.stackSize == 0 || (aPlayer != null && !aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack)))
+ || !mBlock.canReplace(aWorld, aX, aY, aZ, ordinalSide, aStack)) {
return false;
+ }
+
+ if (aStack.stackSize == 0 || (!aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack))) {
+ return false;
+ }
final MultiTileEntityContainer aMTEContainer = mBlock.mMultiTileEntityRegistry
.getNewTileEntityContainer(aWorld, aX, aY, aZ, aStack);
- if (aMTEContainer != null
- && (aPlayer == null || aPlayer.isSneaking()
- || !(aMTEContainer.mTileEntity instanceof IMTE_OnlyPlaceableWhenSneaking mteSNeaking)
- || !mteSNeaking.onlyPlaceableWhenSneaking())
- && (aWorld.checkNoEntityCollision(AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1))
- || (aMTEContainer.mTileEntity instanceof IMTE_IgnoreEntityCollisionWhenPlacing mteIgnoreCollision
- && mteIgnoreCollision.ignoreEntityCollisionWhenPlacing(
- aStack,
- aPlayer,
- aWorld,
- aX,
- aY,
- aZ,
- side,
- aHitX,
- aHitY,
- aHitZ)))
- && (!(aMTEContainer.mTileEntity instanceof IMTE_CanPlace mteCanPlace)
- || mteCanPlace.canPlace(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ))
- && aWorld.setBlock(aX, aY, aZ, aMTEContainer.mBlock, 15 - aMTEContainer.mBlockMetaData, 2)) {
- aMTEContainer.setMultiTile(aWorld, aX, aY, aZ);
-
- try {
- if (((IMultiTileEntity) aMTEContainer.mTileEntity)
- .onPlaced(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ)) {
- aWorld.playSoundEffect(
- aX + 0.5,
- aY + 0.5,
- aZ + 0.5,
- aMTEContainer.mBlock.stepSound.func_150496_b(),
- (aMTEContainer.mBlock.stepSound.getVolume() + 1) / 2,
- aMTEContainer.mBlock.stepSound.getPitch() * 0.8F);
- }
- } catch (Throwable e) {
- GT_FML_LOGGER.error("onPlaced", e);
- }
- try {
- if (aMTEContainer.mTileEntity instanceof IMTE_HasMultiBlockMachineRelevantData mteData
- && (mteData.hasMultiBlockMachineRelevantData())) {
- GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ);
- }
- } catch (Throwable e) {
- GT_FML_LOGGER.error("causeMachineUpdate", e);
- }
- try {
- if (!aWorld.isRemote) {
- aWorld.notifyBlockChange(aX, aY, aZ, tReplacedBlock);
- aWorld.func_147453_f /* updateNeighborsAboutBlockChange */(aX, aY, aZ, aMTEContainer.mBlock);
- }
- } catch (Throwable e) {
- GT_FML_LOGGER.error("notifyBlockChange", e);
+ if (aMTEContainer == null) return false;
+
+ if (!aPlayer.isSneaking() && aMTEContainer.mTileEntity instanceof IMTE_OnlyPlaceableWhenSneaking mteSNeaking
+ && mteSNeaking.onlyPlaceableWhenSneaking()) {
+ return false;
+ }
+
+ if ((!(aMTEContainer.mTileEntity instanceof IMTE_IgnoreEntityCollisionWhenPlacing mteIgnoreCollision)
+ || !mteIgnoreCollision
+ .ignoreEntityCollisionWhenPlacing(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ))
+ && !aWorld.checkNoEntityCollision(AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1))) {
+ return false;
+ }
+
+ if (aMTEContainer.mTileEntity instanceof IMTE_CanPlace mteCanPlace
+ && !mteCanPlace.canPlace(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ)) {
+ return false;
+ }
+
+ if (!aWorld.setBlock(aX, aY, aZ, aMTEContainer.mBlock, 15 - aMTEContainer.mBlockMetaData, 2)) {
+ return false;
+ }
+
+ aMTEContainer.setMultiTile(aWorld, aX, aY, aZ);
+
+ try {
+ if (((IMultiTileEntity) aMTEContainer.mTileEntity)
+ .onPlaced(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ)) {
+ aWorld.playSoundEffect(
+ aX + 0.5,
+ aY + 0.5,
+ aZ + 0.5,
+ aMTEContainer.mBlock.stepSound.func_150496_b(),
+ (aMTEContainer.mBlock.stepSound.getVolume() + 1) / 2,
+ aMTEContainer.mBlock.stepSound.getPitch() * 0.8F);
}
- try {
- ((IMultiTileEntity) aMTEContainer.mTileEntity).onTileEntityPlaced();
- } catch (Throwable e) {
- GT_FML_LOGGER.error("onTileEntityPlaced", e);
+ } catch (Throwable e) {
+ GT_FML_LOGGER.error("onPlaced", e);
+ }
+ try {
+ if (aMTEContainer.mTileEntity instanceof IMTE_HasMultiBlockMachineRelevantData mteData
+ && (mteData.hasMultiBlockMachineRelevantData())) {
+ GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ);
}
- try {
- aWorld.func_147451_t /* updateAllLightTypes */(aX, aY, aZ);
- } catch (Throwable e) {
- GT_FML_LOGGER.error("updateAllLightTypes", e);
+ } catch (Throwable e) {
+ GT_FML_LOGGER.error("causeMachineUpdate", e);
+ }
+ try {
+ if (!aWorld.isRemote) {
+ aWorld.notifyBlockChange(aX, aY, aZ, tReplacedBlock);
+ aWorld.func_147453_f /* updateNeighborsAboutBlockChange */(aX, aY, aZ, aMTEContainer.mBlock);
}
-
- aStack.stackSize--;
- return true;
+ } catch (Throwable e) {
+ GT_FML_LOGGER.error("notifyBlockChange", e);
+ }
+ try {
+ ((IMultiTileEntity) aMTEContainer.mTileEntity).onTileEntityPlaced();
+ } catch (Throwable e) {
+ GT_FML_LOGGER.error("onTileEntityPlaced", e);
}
+ try {
+ aWorld.func_147451_t /* updateAllLightTypes */(aX, aY, aZ);
+ } catch (Throwable e) {
+ GT_FML_LOGGER.error("updateAllLightTypes", e);
+ }
+
+ aStack.stackSize--;
+ return true;
+
} catch (Throwable e) {
GT_FML_LOGGER.error("onItemUse", e);
}
@@ -186,7 +196,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
final MultiTileEntityClassContainer tContainer = mBlock.mMultiTileEntityRegistry.getClassContainer(aStack);
if (tContainer == null) return;
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null && tTileEntityContainer.mTileEntity instanceof IItemUpdatable itemUpdatable) {
itemUpdatable.updateItemStack(aStack);
}
@@ -197,7 +207,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
final MultiTileEntityClassContainer tContainer = mBlock.mMultiTileEntityRegistry.getClassContainer(aStack);
if (tContainer == null) return;
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null && tTileEntityContainer.mTileEntity instanceof IItemUpdatable itemUpdatable) {
itemUpdatable.updateItemStack(aStack, aWorld, aX, aY, aZ);
}
@@ -208,7 +218,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
final MultiTileEntityClassContainer tContainer = mBlock.mMultiTileEntityRegistry.getClassContainer(aStack);
if (tContainer == null) return 1;
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null
&& tTileEntityContainer.mTileEntity instanceof IMTE_GetMaxStackSize maxStackSize) {
return maxStackSize.getMaxStackSize(aStack, tContainer.mStackSize);
@@ -224,7 +234,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@Override
public FluidStack getFluid(ItemStack aStack) {
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null
&& tTileEntityContainer.mTileEntity instanceof IFluidContainerItem fluidContainerItem) {
final FluidStack rFluid = fluidContainerItem.getFluid(aStack);
@@ -237,7 +247,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@Override
public int getCapacity(ItemStack aStack) {
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null
&& tTileEntityContainer.mTileEntity instanceof IFluidContainerItem fluidContainerItem) {
final int rCapacity = fluidContainerItem.getCapacity(aStack);
@@ -250,7 +260,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@Override
public int fill(ItemStack aStack, FluidStack aFluid, boolean aDoFill) {
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null
&& tTileEntityContainer.mTileEntity instanceof IFluidContainerItem fluidContainerItem) {
final int tFilled = fluidContainerItem.fill(aStack, aFluid, aDoFill);
@@ -263,7 +273,7 @@ public class MultiTileEntityItemInternal extends ItemBlock implements IFluidCont
@Override
public FluidStack drain(ItemStack aStack, int aMaxDrain, boolean aDoDrain) {
final MultiTileEntityContainer tTileEntityContainer = mBlock.mMultiTileEntityRegistry
- .getNewTileEntityContainer(aStack);
+ .getCachedTileEntityContainer(aStack);
if (tTileEntityContainer != null
&& tTileEntityContainer.mTileEntity instanceof IFluidContainerItem fluidContainerItem) {
final FluidStack rFluid = fluidContainerItem.drain(aStack, aMaxDrain, aDoDrain);
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
index 45117773fe..a5e30fb76c 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
@@ -38,6 +38,7 @@ public class MultiTileEntityRegistry {
// TODO: NBT sensitive or not? Starting with not for now
private static final ItemStackMap<MultiTileEntityRegistry> REGISTRIES = new ItemStackMap<>(false);
private static final HashSet<Class<?>> sRegisteredTileEntities = new HashSet<>();
+ private final HashMap<Integer, MultiTileEntityContainer> cachedTileEntityContainers = new HashMap<>();
public HashMap<Short, CreativeTab> mCreativeTabs = new HashMap<>();
public Map<Short, MultiTileEntityClassContainer> mRegistry = new HashMap<>();
@@ -80,7 +81,7 @@ public class MultiTileEntityRegistry {
mBlock = aBlock;
GT_FML_LOGGER.info(aNameInternal + " " + Block.getIdFromBlock(aBlock) + "This is the answer");
mBlock.mMultiTileEntityRegistry = this;
- REGISTRIES.put(new ItemStack(Item.getItemFromBlock(aBlock), 1, GT_Values.W), this);
+ REGISTRIES.put(new ItemStack(Item.getItemById(Block.getIdFromBlock(aBlock)), 1, GT_Values.W), this);
NAMED_REGISTRIES.put(mNameInternal, this);
}
@@ -267,6 +268,15 @@ public class MultiTileEntityRegistry {
return tContainer == null ? null : tContainer.mTileEntity;
}
+ public MultiTileEntityContainer getCachedTileEntityContainer(ItemStack stack) {
+ MultiTileEntityContainer container = cachedTileEntityContainers.get(Items.feather.getDamage(stack));
+ if (container == null) {
+ container = getNewTileEntityContainer(stack);
+ cachedTileEntityContainers.put(Items.feather.getDamage(stack), container);
+ }
+ return container;
+ }
+
public MultiTileEntityContainer getNewTileEntityContainer(ItemStack aStack) {
return getNewTileEntityContainer(null, 0, 0, 0, Items.feather.getDamage(aStack), aStack.getTagCompound());
}
diff --git a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
index 4b2a5aca67..3d98663e6d 100644
--- a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
@@ -8,6 +8,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+import javax.annotation.Nonnull;
+
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
@@ -16,6 +18,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
@@ -28,9 +31,6 @@ import net.minecraft.world.Explosion;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidStack;
-import net.minecraftforge.fluids.FluidTankInfo;
-import net.minecraftforge.fluids.IFluidTank;
import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
@@ -90,6 +90,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity
protected boolean needsUpdate = false;
protected boolean hasInventoryChanged = false;
protected boolean isPainted = false;
+ @Nonnull
protected ForgeDirection facing = ForgeDirection.WEST; // Default to WEST, so it renders facing Left in the
// inventory
protected byte color;
@@ -203,12 +204,6 @@ public abstract class MultiTileEntity extends CoverableTileEntity
}
@Override
- public ITexture[] getTexture(Block ignoredBlock, ForgeDirection ignoredSide) {
- // We are not going to be using this
- return null;
- }
-
- @Override
public void readFromNBT(NBTTagCompound nbt) {
// Check if it is a World/Chunk-Loading Process calling readFromNBT
if (mteID == GT_Values.W || mteRegistry == GT_Values.W) {
@@ -231,7 +226,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity
if (nbt.hasKey("y")) yCoord = nbt.getInteger("y");
if (nbt.hasKey("z")) zCoord = nbt.getInteger("z");
// read the custom Name.
- if (nbt.hasKey(NBT.DISPAY)) customName = nbt.getCompoundTag(NBT.DISPAY)
+ if (nbt.hasKey(NBT.DISPLAY)) customName = nbt.getCompoundTag(NBT.DISPLAY)
.getString(NBT.CUSTOM_NAME);
// And now everything else.
@@ -249,6 +244,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity
if (nbt.hasKey(NBT.FACING)) facing = ForgeDirection.getOrientation(nbt.getInteger(NBT.FACING));
readCoverNBT(nbt);
+ readTasksNBT(nbt);
readMultiTileNBT(nbt);
if (NetworkUtils.isDedicatedClient()) {
@@ -272,6 +268,8 @@ public abstract class MultiTileEntity extends CoverableTileEntity
/* Do Nothing */
}
+ protected void readTasksNBT(NBTTagCompound nbt) {}
+
@Override
public final void writeToNBT(NBTTagCompound aNBT) {
super.writeToNBT(aNBT);
@@ -281,11 +279,11 @@ public abstract class MultiTileEntity extends CoverableTileEntity
// write the Custom Name
if (GT_Utility.isStringValid(customName)) {
final NBTTagCompound displayNBT;
- if (aNBT.hasKey(NBT.DISPAY)) {
- displayNBT = aNBT.getCompoundTag(NBT.DISPAY);
+ if (aNBT.hasKey(NBT.DISPLAY)) {
+ displayNBT = aNBT.getCompoundTag(NBT.DISPLAY);
} else {
displayNBT = new NBTTagCompound();
- aNBT.setTag(NBT.DISPAY, displayNBT);
+ aNBT.setTag(NBT.DISPLAY, displayNBT);
}
displayNBT.setString(NBT.CUSTOM_NAME, customName);
}
@@ -298,6 +296,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity
aNBT.setInteger(NBT.FACING, facing.ordinal());
writeCoverNBT(aNBT, false);