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.java34
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java47
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java49
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java24
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java203
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java174
-rw-r--r--src/main/java/gregtech/api/multitileentity/WeakTargetRef.java88
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java20
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java19
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java2
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java5
-rw-r--r--src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java2
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java97
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java86
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java34
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java4
16 files changed, 378 insertions, 510 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
index 800e9af20a..1697eb03ce 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
@@ -14,6 +14,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
+import net.minecraft.block.BlockContainer;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
@@ -24,7 +25,6 @@ import net.minecraft.entity.EnumCreatureType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.tileentity.TileEntity;
@@ -62,11 +62,14 @@ import gregtech.common.render.GT_MultiTile_Renderer;
* MultiTileEntityBlock ported from GT6
*/
@Optional.Interface(iface = "com.cricketcraft.chisel.api.IFacade", modid = "ChiselAPI")
-public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITileEntityProvider, IFacade {
+public class MultiTileEntityBlock extends BlockContainer implements IDebugableBlock, ITileEntityProvider, IFacade {
+
+ private MultiTileEntityRegistry registry;
private static boolean LOCK = false;
- private boolean registered = false, normalCube;
+ private boolean registered = false;
+ private boolean normalCube;
protected String internalName, toolName, materialName, modID;
public String getName() {
@@ -125,7 +128,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
internalName = getName();
lightOpacity = isOpaqueCube() ? 255 : 0;
- GameRegistry.registerBlock(this, ItemBlock.class, internalName);
+ GameRegistry.registerBlock(this, MultiTileEntityItem.class, internalName);
return this;
}
@@ -382,6 +385,18 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
return 0;
}
+ public MultiTileEntityRegistry getRegistry() {
+ return registry;
+ }
+
+ public void setRegistry(MultiTileEntityRegistry registry) {
+ this.registry = registry;
+ }
+
+ public boolean isRegistered() {
+ return registered;
+ }
+
@Override
protected boolean canSilkHarvest() {
return false;
@@ -389,11 +404,13 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
@Override
public final String getLocalizedName() {
+ // return StatCollector.translateToLocal(registry.getInternalName() + ".name");
return StatCollector.translateToLocal(internalName + ".name");
}
@Override
public final String getUnlocalizedName() {
+ // return registry.getInternalName();
return internalName;
}
@@ -571,12 +588,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
}
@Override
- public final TileEntity createTileEntity(World world, int meta) {
- return null;
- }
-
- @Override
- public TileEntity createNewTileEntity(World world, int i) {
- return null;
+ public TileEntity createNewTileEntity(World world, int meta) {
+ return registry.getNewTileEntity(meta);
}
}
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java
deleted file mode 100644
index 3d8da5d796..0000000000
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package gregtech.api.multitileentity;
-
-import net.minecraft.block.Block;
-import net.minecraft.block.material.Material;
-import net.minecraft.client.renderer.texture.IIconRegister;
-import net.minecraft.util.StatCollector;
-
-import gregtech.common.render.GT_MultiTile_Renderer;
-
-/*
- * The internal block used in the registry for lookup.
- * - Not the same as the block spawned with the MuTE to allow for multiple different types of blocks/materials
- * in each registry.
- */
-public class MultiTileEntityBlockRegistryInternal extends Block {
-
- public MultiTileEntityRegistry registry;
-
- public MultiTileEntityBlockRegistryInternal() {
- super(Material.anvil);
- }
-
- @Override
- public void registerBlockIcons(IIconRegister aIconRegister) {
- /* Do Nothing */
- }
-
- @Override
- public int getRenderType() {
- return GT_MultiTile_Renderer.INSTANCE == null ? super.getRenderType()
- : GT_MultiTile_Renderer.INSTANCE.getRenderId();
- }
-
- @Override
- public final String getUnlocalizedName() {
- return registry.getInternalName();
- }
-
- @Override
- public final String getLocalizedName() {
- return StatCollector.translateToLocal(registry.getInternalName() + ".name");
- }
-
- public MultiTileEntityRegistry getRegistry() {
- return registry;
- }
-}
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
index 6eba28bad9..325f583149 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
@@ -21,15 +21,11 @@ public class MultiTileEntityClassContainer {
private String localized;
private String categoryName;
- public final short muteID;
- public Class<? extends MultiTileEntity> muteClass;
- public MultiTileEntityBlock block;
- public MultiTileEntity referenceTileEntity;
- public NBTTagCompound parameters;
-
- // These have defaults
- public byte blockMetaData = 1;
- public byte maxStackSize = 64;
+ private final short muteID;
+ private final Class<? extends MultiTileEntity> muteClass;
+ private MultiTileEntity referenceTileEntity;
+ private NBTTagCompound parameters;
+
public boolean hidden = false;
public MultiTileEntityClassContainer(MultiTileEntityRegistry aRegistry, int aID,
@@ -72,26 +68,11 @@ public class MultiTileEntityClassContainer {
return this;
}
- public MultiTileEntityClassContainer meta(int aMeta) {
- blockMetaData = (byte) aMeta;
- return this;
- }
-
- public MultiTileEntityClassContainer stackSize(int aStackSize) {
- maxStackSize = (byte) aStackSize;
- return this;
- }
-
public MultiTileEntityClassContainer hide() {
hidden = true;
return this;
}
- public MultiTileEntityClassContainer setBlock(MultiTileEntityBlock aBlock) {
- block = aBlock;
- return this;
- }
-
/* These methods are builder methods for commonly used NBT tags */
// Need a base texture for the MTE machine, and then a separate texture set for the machine/active overlays
@@ -177,6 +158,26 @@ public class MultiTileEntityClassContainer {
return this;
}
+ public WeakReference<MultiTileEntityRegistry> getRegistry() {
+ return registry;
+ }
+
+ public Class<? extends MultiTileEntity> getMuteClass() {
+ return muteClass;
+ }
+
+ public short getMuteID() {
+ return muteID;
+ }
+
+ public MultiTileEntity getReferenceTileEntity() {
+ return referenceTileEntity;
+ }
+
+ public NBTTagCompound getParameters() {
+ return parameters;
+ }
+
private void verifyDescendentOf(Class<?> cls) {
// Check if cls is extended by mClass
if (!cls.isAssignableFrom(muteClass)) {
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java
deleted file mode 100644
index 3ca0ee46f4..0000000000
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package gregtech.api.multitileentity;
-
-import net.minecraft.world.World;
-
-import gregtech.api.multitileentity.base.MultiTileEntity;
-import gregtech.api.util.GT_Util;
-
-public class MultiTileEntityContainer {
-
- public final MultiTileEntity tileEntity;
- public final MultiTileEntityBlock block;
- public final byte blockMetaData;
-
- public MultiTileEntityContainer(MultiTileEntity tileEntity, MultiTileEntityBlock block, byte blockMetaData) {
- this.blockMetaData = blockMetaData;
- this.tileEntity = tileEntity;
- this.block = block;
- }
-
- public void setMultiTile(World aWorld, int aX, int aY, int aZ) {
- GT_Util.setBlock(aWorld, aX, aY, aZ, block, blockMetaData, 0, false);
- GT_Util.setTileEntity(aWorld, aX, aY, aZ, tileEntity, true);
- }
-}
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java
index 8dc1d348ff..e67ab61e96 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java
@@ -16,44 +16,43 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-import net.minecraftforge.fluids.FluidStack;
-import net.minecraftforge.fluids.IFluidContainerItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.metatileentity.CoverableTileEntity;
-import gregtech.api.multitileentity.interfaces.IItemUpdatable;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
-public class MultiTileEntityItem extends ItemBlock implements IFluidContainerItem, IItemUpdatable {
+public class MultiTileEntityItem extends ItemBlock {
- public final MultiTileEntityBlockRegistryInternal mBlock;
+ public final MultiTileEntityBlock block;
- public MultiTileEntityItem(Block aBlock) {
- super(aBlock);
+ public MultiTileEntityItem(Block block) {
+ super(block);
setMaxDamage(0);
setHasSubtypes(true);
- mBlock = (MultiTileEntityBlockRegistryInternal) aBlock;
+ this.block = (MultiTileEntityBlock) block;
}
@Override
@SuppressWarnings("unchecked")
- public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List<String> aList, boolean aF3_H) {
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer == null) {
- aList.add("INVALID ITEM!");
+ public void addInformation(ItemStack stack, EntityPlayer player, List<String> list, boolean F3_H) {
+ final IMultiTileEntity mute = block.getRegistry()
+ .getReferenceTileEntity(stack);
+ if (mute == null) {
+ list.add("INVALID ITEM!");
return;
}
try {
- tTileEntityContainer.tileEntity.addToolTips(aList, aStack, aF3_H);
+ mute.addToolTips(list, stack, F3_H);
} catch (Throwable e) {
GT_FML_LOGGER.error("addInformation", e);
}
- final NBTTagCompound aNBT = aStack.getTagCompound();
- CoverableTileEntity.addInstalledCoversInformation(aNBT, aList);
+ final NBTTagCompound aNBT = stack.getTagCompound();
+ CoverableTileEntity.addInstalledCoversInformation(aNBT, list);
// TODO: Add anything else relevant
}
@@ -61,68 +60,68 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte
@SideOnly(Side.CLIENT)
@SuppressWarnings("unchecked")
public void getSubItems(Item aItem, CreativeTabs aTab, List<ItemStack> aList) {
- for (MultiTileEntityClassContainer tClass : mBlock.registry.registrations) {
- if (!tClass.hidden && ((IMultiTileEntity) tClass.referenceTileEntity)
- .getSubItems(mBlock, aItem, aTab, aList, tClass.muteID)) {
- aList.add(mBlock.registry.getItem(tClass.muteID));
+ for (MultiTileEntityClassContainer tClass : block.getRegistry().registrations) {
+ if (!tClass.hidden && ((IMultiTileEntity) tClass.getReferenceTileEntity())
+ .getSubItems(block, aItem, aTab, aList, tClass.getMuteID())) {
+ aList.add(
+ block.getRegistry()
+ .getItem(tClass.getMuteID()));
}
}
}
@Override
- public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ,
- int ordinalSide, float aHitX, float aHitY, float aHitZ) {
+ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int ordinalSide,
+ float hitX, float hitY, float hitZ) {
- if (aY < 0 || aY > aWorld.getHeight()) return false;
+ if (y < 0 || y > world.getHeight()) return false;
- if (aPlayer == null) return false;
+ if (player == null) return false;
try {
ForgeDirection side = ForgeDirection.getOrientation(ordinalSide);
- final Block tClickedBlock = aWorld.getBlock(aX, aY, aZ);
+ final Block clickedBlock = world.getBlock(x, y, z);
- if (tClickedBlock instanceof BlockSnow && (aWorld.getBlockMetadata(aX, aY, aZ) & 7) < 1) {
+ if (clickedBlock instanceof BlockSnow && (world.getBlockMetadata(x, y, z) & 7) < 1) {
ordinalSide = SIDE_TOP;
side = ForgeDirection.UP;
- } else if (tClickedBlock != Blocks.vine && tClickedBlock != Blocks.tallgrass
- && tClickedBlock != Blocks.deadbush
- && !tClickedBlock.isReplaceable(aWorld, aX, aY, aZ)) {
- aX += side.offsetX;
- aY += side.offsetY;
- aZ += side.offsetZ;
+ } else if (clickedBlock != Blocks.vine && clickedBlock != Blocks.tallgrass
+ && clickedBlock != Blocks.deadbush
+ && !clickedBlock.isReplaceable(world, x, y, z)) {
+ x += side.offsetX;
+ y += side.offsetY;
+ z += side.offsetZ;
}
- final Block tReplacedBlock = aWorld.getBlock(aX, aY, aZ);
+ final Block tReplacedBlock = world.getBlock(x, y, z);
- if (!tReplacedBlock.isReplaceable(aWorld, aX, aY, aZ)
- || !mBlock.canReplace(aWorld, aX, aY, aZ, ordinalSide, aStack)) {
+ if (!tReplacedBlock.isReplaceable(world, x, y, z)
+ || !block.canReplace(world, x, y, z, ordinalSide, stack)) {
return false;
}
- if (aStack.stackSize == 0 || (!aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack))) {
+ if (stack.stackSize == 0 || (!player.canPlayerEdit(x, y, z, ordinalSide, stack))) {
return false;
}
+ // final TileEntity tileEntity = block.getRegistry().getNewTileEntity(world, x, y, z, stack);
- final MultiTileEntityContainer MuTEContainer = mBlock.registry
- .getNewTileEntityContainer(aWorld, aX, aY, aZ, aStack);
-
- if (MuTEContainer == null) return false;
-
- if (!aWorld.setBlock(aX, aY, aZ, MuTEContainer.block, 15 - MuTEContainer.blockMetaData, 2)) {
+ if (!world.setBlock(x, y, z, block, Items.feather.getDamage(stack), 2)) {
return false;
}
-
- MuTEContainer.setMultiTile(aWorld, aX, aY, aZ);
+ final TileEntity te = world.getTileEntity(x, y, z);
+ if (!(te instanceof IMultiTileEntity mute)) {
+ throw new IllegalStateException("TileEntity is not an IMultiTileEntity");
+ }
+ // MuTEContainer.setMultiTile(world, x, y, z);
try {
- if (((IMultiTileEntity) MuTEContainer.tileEntity)
- .onPlaced(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ)) {
- aWorld.playSoundEffect(
- aX + 0.5,
- aY + 0.5,
- aZ + 0.5,
- MuTEContainer.block.stepSound.func_150496_b(),
- (MuTEContainer.block.stepSound.getVolume() + 1) / 2,
- MuTEContainer.block.stepSound.getPitch() * 0.8F);
+ if (mute.onPlaced(stack, player, world, x, y, z, side, hitX, hitY, hitZ)) {
+ world.playSoundEffect(
+ x + 0.5,
+ y + 0.5,
+ z + 0.5,
+ block.stepSound.func_150496_b(),
+ (block.stepSound.getVolume() + 1) / 2,
+ block.stepSound.getPitch() * 0.8F);
}
} catch (Throwable e) {
GT_FML_LOGGER.error("onPlaced", e);
@@ -139,25 +138,25 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte
// }
// spotless:on
try {
- if (!aWorld.isRemote) {
- aWorld.notifyBlockChange(aX, aY, aZ, tReplacedBlock);
- aWorld.func_147453_f /* updateNeighborsAboutBlockChange */(aX, aY, aZ, MuTEContainer.block);
+ if (!world.isRemote) {
+ world.notifyBlockChange(x, y, z, tReplacedBlock);
+ world.func_147453_f /* updateNeighborsAboutBlockChange */(x, y, z, block);
}
} catch (Throwable e) {
GT_FML_LOGGER.error("notifyBlockChange", e);
}
try {
- ((IMultiTileEntity) MuTEContainer.tileEntity).onTileEntityPlaced();
+ mute.onTileEntityPlaced();
} catch (Throwable e) {
GT_FML_LOGGER.error("onTileEntityPlaced", e);
}
try {
- aWorld.func_147451_t /* updateAllLightTypes */(aX, aY, aZ);
+ world.func_147451_t /* updateAllLightTypes */(x, y, z);
} catch (Throwable e) {
GT_FML_LOGGER.error("updateAllLightTypes", e);
}
- aStack.stackSize--;
+ stack.stackSize--;
return true;
} catch (Throwable e) {
@@ -167,87 +166,6 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte
}
@Override
- public void updateItemStack(ItemStack aStack) {
- final MultiTileEntityClassContainer tContainer = mBlock.registry.getClassContainer(aStack);
- if (tContainer == null) return;
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer != null && tTileEntityContainer.tileEntity instanceof IItemUpdatable itemUpdatable) {
- itemUpdatable.updateItemStack(aStack);
- }
- }
-
- @Override
- public void updateItemStack(ItemStack aStack, World aWorld, int aX, int aY, int aZ) {
- final MultiTileEntityClassContainer tContainer = mBlock.registry.getClassContainer(aStack);
- if (tContainer == null) return;
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer != null && tTileEntityContainer.tileEntity instanceof IItemUpdatable itemUpdatable) {
- itemUpdatable.updateItemStack(aStack, aWorld, aX, aY, aZ);
- }
- }
-
- @Override
- public int getItemStackLimit(ItemStack aStack) {
- final MultiTileEntityClassContainer tContainer = mBlock.registry.getClassContainer(aStack);
- if (tContainer == null) return 1;
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- return tContainer.maxStackSize;
- }
-
- @Override
- public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
- updateItemStack(aStack);
- }
-
- @Override
- public FluidStack getFluid(ItemStack aStack) {
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer != null
- && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) {
- final FluidStack rFluid = fluidContainerItem.getFluid(aStack);
- updateItemStack(aStack);
- return rFluid;
- }
- return null;
- }
-
- @Override
- public int getCapacity(ItemStack aStack) {
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer != null
- && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) {
- final int rCapacity = fluidContainerItem.getCapacity(aStack);
- updateItemStack(aStack);
- return rCapacity;
- }
- return 0;
- }
-
- @Override
- public int fill(ItemStack aStack, FluidStack aFluid, boolean aDoFill) {
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer != null
- && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) {
- final int tFilled = fluidContainerItem.fill(aStack, aFluid, aDoFill);
- updateItemStack(aStack);
- return tFilled;
- }
- return 0;
- }
-
- @Override
- public FluidStack drain(ItemStack aStack, int aMaxDrain, boolean aDoDrain) {
- final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack);
- if (tTileEntityContainer != null
- && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) {
- final FluidStack rFluid = fluidContainerItem.drain(aStack, aMaxDrain, aDoDrain);
- updateItemStack(aStack);
- return rFluid;
- }
- return null;
- }
-
- @Override
public boolean func_150936_a /* canPlaceAtSide */(World aWorld, int aX, int aY, int aZ, int ordinalSide,
EntityPlayer aPlayer, ItemStack aStack) {
return true;
@@ -255,12 +173,15 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte
@Override
public final String getUnlocalizedName() {
- return mBlock.registry.getInternalName();
+ return block.getRegistry()
+ .getInternalName();
}
@Override
public final String getUnlocalizedName(ItemStack aStack) {
- return mBlock.registry.getInternalName() + "." + getDamage(aStack);
+ return block.getRegistry()
+ .getInternalName() + "."
+ + getDamage(aStack);
}
@Override
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
index 7fe83075cd..0b5afbb043 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
@@ -10,7 +10,6 @@ import java.util.List;
import net.minecraft.block.Block;
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.tileentity.TileEntity;
@@ -22,7 +21,6 @@ import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap;
import appeng.core.CreativeTab;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.LoaderState;
-import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.enums.GT_Values;
import gregtech.api.multitileentity.base.MultiTileEntity;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
@@ -39,59 +37,50 @@ 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> creativeTabs = new HashMap<>();
public final Short2ObjectMap<MultiTileEntityClassContainer> registry = new Short2ObjectOpenHashMap<>();
public List<MultiTileEntityClassContainer> registrations = new ArrayList<>();
private final String internalName;
- private final MultiTileEntityBlockRegistryInternal block;
-
- private static MultiTileEntityBlockRegistryInternal regblock(String internalName,
- MultiTileEntityBlockRegistryInternal block, Class<? extends ItemBlock> itemClass) {
- GameRegistry.registerBlock(block, itemClass == null ? ItemBlock.class : itemClass, internalName);
- return block;
- }
-
- /**
- * @param internalName the internal Name of the Item
- */
- public MultiTileEntityRegistry(String internalName) {
- this(internalName, new MultiTileEntityBlockRegistryInternal(), MultiTileEntityItem.class);
- }
+ private final MultiTileEntityBlock block;
/**
* @param internalName the internal Name of the Item
*/
- public MultiTileEntityRegistry(String internalName, MultiTileEntityBlockRegistryInternal block,
- Class<? extends ItemBlock> itemClass) {
- this(internalName, regblock(internalName, block, itemClass));
- }
-
- /**
- * @param internalName the internal Name of the Item
- */
- public MultiTileEntityRegistry(String internalName, MultiTileEntityBlockRegistryInternal block) {
+ public MultiTileEntityRegistry(String internalName, MultiTileEntityBlock block) {
if (!Loader.instance()
.isInState(LoaderState.PREINITIALIZATION)) {
throw new IllegalStateException(
"The MultiTileEntity Registry must be initialized during Preload Phase and not before");
}
+ if (!block.isRegistered()) {
+ throw new IllegalStateException("Block not registered");
+ }
this.internalName = internalName;
this.block = block;
- GT_FML_LOGGER.info(internalName + " " + Block.getIdFromBlock(block) + "This is the answer");
- this.block.registry = this;
+ GT_FML_LOGGER.info(internalName + " " + Block.getIdFromBlock(block) + " This is the answer");
+ this.block.setRegistry(this);
REGISTRIES.put(new ItemStack(Item.getItemById(Block.getIdFromBlock(block)), 1, GT_Values.W), this);
NAMED_REGISTRIES.put(internalName, this);
}
- public static TileEntity getCanonicalTileEntity(int aRegistryID, int aMultiTileEntityID) {
+ public static TileEntity getReferenceTileEntity(int aRegistryID, int aMultiTileEntityID) {
final MultiTileEntityRegistry tRegistry = getRegistry(aRegistryID);
if (tRegistry == null) return null;
final MultiTileEntityClassContainer tClassContainer = tRegistry.getClassContainer(aMultiTileEntityID);
if (tClassContainer == null) return null;
- return tClassContainer.referenceTileEntity;
+ return tClassContainer.getReferenceTileEntity();
+ }
+
+ public MultiTileEntity getReferenceTileEntity(ItemStack stack) {
+ return getReferenceTileEntity(Items.feather.getDamage(stack));
+ }
+
+ public MultiTileEntity getReferenceTileEntity(int metaId) {
+ final MultiTileEntityClassContainer muteClass = registry.get((short) metaId);
+ if (muteClass == null) return null;
+ return muteClass.getReferenceTileEntity();
}
public static MultiTileEntityRegistry getRegistry(int aRegistryID) {
@@ -120,27 +109,27 @@ public class MultiTileEntityRegistry {
GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container is null!");
tFailed = true;
} else {
- if (aClassContainer.muteClass == null) {
+ if (aClassContainer.getMuteClass() == null) {
GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class inside Class Container is null!");
tFailed = true;
}
- if (aClassContainer.muteID == GT_Values.W) {
+ if (aClassContainer.getMuteID() == GT_Values.W) {
GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container uses Wildcard MetaData!");
tFailed = true;
}
- if (aClassContainer.muteID < 0) {
+ if (aClassContainer.getMuteID() < 0) {
GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container uses negative MetaData!");
tFailed = true;
}
- if (registry.containsKey(aClassContainer.muteID)) {
+ if (registry.containsKey(aClassContainer.getMuteID())) {
GT_FML_LOGGER.error(
- "MULTI-TILE REGISTRY ERROR: Class Container uses occupied MetaData! (" + aClassContainer.muteID
+ "MULTI-TILE REGISTRY ERROR: Class Container uses occupied MetaData! (" + aClassContainer.getMuteID()
+ ")");
tFailed = true;
}
}
if (tFailed) {
- GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: STACKTRACE START");
+ GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR " + aLocalised + " : STACKTRACE START");
int i = 0;
for (StackTraceElement tElement : new Exception().getStackTrace()) if (i++ < 5 && !tElement.getClassName()
.startsWith("sun")) GT_FML_LOGGER.error("\tat " + tElement);
@@ -149,16 +138,20 @@ public class MultiTileEntityRegistry {
return null;
}
- GT_LanguageManager.addStringLocalization(internalName + "." + aClassContainer.muteID + ".name", aLocalised);
- registry.put(aClassContainer.muteID, aClassContainer);
- mLastRegisteredID = aClassContainer.muteID;
+ GT_LanguageManager
+ .addStringLocalization(internalName + "." + aClassContainer.getMuteID() + ".name", aLocalised);
+ registry.put(aClassContainer.getMuteID(), aClassContainer);
+ mLastRegisteredID = aClassContainer.getMuteID();
registrations.add(aClassContainer);
- if (sRegisteredTileEntities.add(aClassContainer.referenceTileEntity.getClass())) {
- aClassContainer.referenceTileEntity.onRegistrationFirst(this, aClassContainer.muteID);
+ if (sRegisteredTileEntities.add(
+ aClassContainer.getReferenceTileEntity()
+ .getClass())) {
+ aClassContainer.getReferenceTileEntity()
+ .onRegistrationFirst(this, aClassContainer.getMuteID());
}
- return getItem(aClassContainer.muteID);
+ return getItem(aClassContainer.getMuteID());
}
public short mLastRegisteredID = GT_Values.W;
@@ -179,15 +172,15 @@ public class MultiTileEntityRegistry {
return getItem(aID, aAmount, null);
}
- public ItemStack getItem(int aID, long aAmount, NBTTagCompound nbt) {
- final ItemStack rStack = new ItemStack(block, (int) aAmount, aID);
+ public ItemStack getItem(int metaID, long amount, NBTTagCompound nbt) {
+ final ItemStack stack = new ItemStack(block, (int) amount, metaID);
if (nbt == null || nbt.hasNoTags()) {
nbt = new NBTTagCompound();
- final MultiTileEntityContainer tTileEntityContainer = getNewTileEntityContainer(aID, nbt);
- if (tTileEntityContainer != null) ((IMultiTileEntity) tTileEntityContainer.tileEntity).writeItemNBT(nbt);
+ final TileEntity tileEntity = getNewTileEntity(metaID, nbt);
+ ((IMultiTileEntity) tileEntity).writeItemNBT(nbt);
}
- rStack.setTagCompound(nbt);
- return rStack;
+ stack.setTagCompound(nbt);
+ return stack;
}
public String getLocal(int aID) {
@@ -203,84 +196,37 @@ public class MultiTileEntityRegistry {
}
public TileEntity getNewTileEntity(int aID) {
- final MultiTileEntityContainer tContainer = getNewTileEntityContainer(null, 0, 0, 0, aID, null);
- return tContainer == null ? null : tContainer.tileEntity;
- }
-
- public MultiTileEntityContainer getNewTileEntityContainer(World world, int x, int y, int z, int aID,
- NBTTagCompound nbt) {
- final MultiTileEntityClassContainer tClass = registry.get((short) aID);
- if (tClass == null || tClass.block == null) return null;
- final MultiTileEntityContainer container = new MultiTileEntityContainer(
- (MultiTileEntity) GT_Utility.callConstructor(