diff options
Diffstat (limited to 'src/main/java/gregtech/api')
3 files changed, 79 insertions, 23 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!"); |