aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java1
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java90
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java11
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java27
4 files changed, 95 insertions, 34 deletions
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java
index c93b5b618a..f7dfa461dd 100644
--- a/src/main/java/gregtech/api/enums/GT_Values.java
+++ b/src/main/java/gregtech/api/enums/GT_Values.java
@@ -248,7 +248,6 @@ public class GT_Values {
CUSTOM_NAME = "name", // String
DISPAY = "gt.display", // String
FACING = "gt.facing", // Byte
- HIDDEN = "gt.hidden", // Boolean
LOCK_UPGRADE = "gt.locked", // Boolean
MATERIAL = "gt.material", // String containing the Material Name.
MODE = "gt.mode", // Number
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
index 3443ae52ca..ba5938769c 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java
@@ -3,33 +3,95 @@ package gregtech.api.multitileentity;
import gregtech.api.enums.Materials;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
import gregtech.api.util.GT_Util;
+import net.minecraft.block.material.Material;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
+
+import java.lang.ref.WeakReference;
+
import static gregtech.api.enums.GT_Values.NBT;
public class MultiTileEntityClassContainer {
- public final Class<? extends TileEntity> mClass;
- public final MultiTileEntityBlock mBlock;
- public final TileEntity mCanonicalTileEntity;
- public final NBTTagCompound mParameters;
- public final byte mBlockMetaData, mStackSize;
+ private final WeakReference<MultiTileEntityRegistry> mRegistry;
+ private String mLocalized;
+ private String mCategoryName;
+
public final short mID;
- public final boolean mHidden;
+ public Class<? extends TileEntity> mClass;
+ public MultiTileEntityBlock mBlock;
+ public TileEntity mCanonicalTileEntity;
+ public NBTTagCompound mParameters;
+ // These have defaults
+ public byte mBlockMetaData = 1;
+ public byte mStackSize = 64;
+ public boolean mHidden = false;
- public MultiTileEntityClassContainer(int aID, Class<? extends TileEntity> aClass, int aBlockMetaData, int aStackSize, MultiTileEntityBlock aBlock, NBTTagCompound aParameters) {
- if (!IMultiTileEntity.class.isAssignableFrom(aClass)) throw new IllegalArgumentException("MultiTileEntities must implement the Interface IMultiTileEntity!");
- mBlockMetaData = (byte) aBlockMetaData;
- mStackSize = (byte) aStackSize;
- mParameters = aParameters == null ? new NBTTagCompound() : aParameters;
- mHidden = mParameters.getBoolean(NBT.HIDDEN);
+ public MultiTileEntityClassContainer(MultiTileEntityRegistry aRegistry, int aID, Class<? extends TileEntity> aClass) {
+ /* Start the Builder */
+ mRegistry = new WeakReference<>(aRegistry);
mID = (short) aID;
- mBlock = aBlock;
mClass = aClass;
+ mParameters = new NBTTagCompound();
+ }
+
+ public boolean register() {
+ /* End and register the Builder with the registry */
+ final MultiTileEntityRegistry registry = mRegistry.get();
+
if (mParameters.hasKey(NBT.MATERIAL) && !mParameters.hasKey(NBT.COLOR))
mParameters.setInteger(NBT.COLOR, GT_Util.getRGBInt(Materials.get(mParameters.getString(NBT.MATERIAL)).getRGBA()));
- try {mCanonicalTileEntity = aClass.newInstance();} catch (Throwable e) {throw new IllegalArgumentException(e);}
+
+ try {mCanonicalTileEntity = mClass.newInstance();} catch (Throwable e) {throw new IllegalArgumentException(e);}
if (mCanonicalTileEntity instanceof IMultiTileEntity) ((IMultiTileEntity) mCanonicalTileEntity).initFromNBT(mParameters, mID, (short) -1);
+
+ return registry != null && registry.add(this.mLocalized, this.mCategoryName, this) != null;
+ }
+
+ public MultiTileEntityClassContainer name(String aName) {
+ mLocalized = aName;
+ return this;
+ }
+
+ public MultiTileEntityClassContainer category(String aCategoryName) {
+ mCategoryName = aCategoryName;
+ return this;
+ }
+
+ public MultiTileEntityClassContainer meta(int aMeta) {
+ mBlockMetaData = (byte) aMeta;
+ return this;
}
+
+ public MultiTileEntityClassContainer stackSize(int aStackSize) {
+ mStackSize = (byte) aStackSize;
+ return this;
+ }
+
+ public MultiTileEntityClassContainer hide() {
+ mHidden = true;
+ return this;
+ }
+
+ public MultiTileEntityClassContainer setBlock(MultiTileEntityBlock aBlock) {
+ mBlock = aBlock;
+ return this;
+ }
+
+ public MultiTileEntityClassContainer material(Material aMaterial) {
+ mParameters.setString(NBT.MATERIAL, aMaterial.toString());
+ return this;
+ }
+
+ public MultiTileEntityClassContainer texture(String aTexture) {
+ mParameters.setString(NBT.TEXTURE, aTexture);
+ return this;
+ }
+
+ public MultiTileEntityClassContainer tankCapacity(Long aCapacity) {
+ mParameters.setLong(NBT.TANK_CAPACITY, aCapacity);
+ return this;
+ }
+
}
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
index d015a3a274..3e05efaf70 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
@@ -87,17 +87,12 @@ public class MultiTileEntityRegistry {
return NAMED_REGISTRIES.get(aRegistryName);
}
-
- /** Adds a new MultiTileEntity. It is highly recommended to do this in either the PreInit or the Init Phase. PostInit might not work well.*/
- public ItemStack add(
- String aLocalised, String aCategoricalName, int aID, Class<? extends TileEntity> aClass, int aBlockMetaData, int aStackSize,
- MultiTileEntityBlock aBlock, NBTTagCompound aParameters, Object... aRecipe
- ) {
- return add(aLocalised, aCategoricalName, new MultiTileEntityClassContainer(aID, aClass, aBlockMetaData, aStackSize, aBlock, aParameters), aRecipe);
+ public MultiTileEntityClassContainer create(int aID, Class<? extends TileEntity> aClass) {
+ return new MultiTileEntityClassContainer(this, aID, aClass);
}
/** Adds a new MultiTileEntity. It is highly recommended to do this in either the PreInit or the Init Phase. PostInit might not work well.*/
- public ItemStack add(String aLocalised, String aCategoricalName, MultiTileEntityClassContainer aClassContainer, Object... aRecipe) {
+ public ItemStack add(String aLocalised, String aCategoricalName, MultiTileEntityClassContainer aClassContainer) {
boolean tFailed = false;
if (GT_Utility.isStringInvalid(aLocalised)) {
GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Localisation Missing!");
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java
index dd851a59b1..1df5f1cca4 100644
--- a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java
@@ -21,18 +21,23 @@ public class GT_Loader_MultiTileEntities implements Runnable {
final MultiTileEntityRegistry aRegistry = new MultiTileEntityRegistry("gt.multitileentity");
final MultiTileEntityBlock aMachine = MultiTileEntityBlock.getOrCreate("GregTech", "machine", Material.iron, Block.soundTypeMetal, "wrench", 0, 0, 15, true, true);
- Class<? extends TileEntity> aClass;
-
// Disable for now
-// aClass = MultiBlock_Macerator.class; aRegistry.add(
-// "Large Macerator", "Multiblock Controller", 1000, aClass, 1, 64, aMachine,
-// GT_Util.makeNBT(tuple(NBT.MATERIAL, Material.iron), tuple(NBT.TEXTURE, "metalwall"), tuple(NBT.TANK_CAPACITY, 128000L))
-// );
-//
-// aClass = MultiBlockPart.class; aRegistry.add(
-// "Test Casing", "Multiblock Casing", 18000, aClass, 1, 64, aMachine,
-// GT_Util.makeNBT(tuple(NBT.MATERIAL, Material.iron), tuple(NBT.TEXTURE, "metalwall"))
-// );
+ aRegistry.create(1000, MultiBlock_Macerator.class)
+ .name("Large Macerator")
+ .category("Multiblock Controller")
+ .setBlock(aMachine)
+ .material(Material.iron)
+ .texture("metalwall")
+ .tankCapacity(128000L)
+ .register();
+
+ aRegistry.create(18000, MultiBlockPart.class)
+ .name("Test Casing")
+ .category("Multiblock Casing")
+ .setBlock(aMachine)
+ .material(Material.iron)
+ .texture("metalwall")
+ .register();
}
}