diff options
Diffstat (limited to 'src')
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(); } } |