1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
package gregtech.api.multitileentity;
import gregtech.api.enums.Materials;
import gregtech.api.multitileentity.base.BaseMultiTileEntity;
import gregtech.api.util.GT_Util;
import net.minecraft.block.material.Material;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Tuple;
import java.lang.ref.WeakReference;
import static gregtech.api.enums.GT_Values.NBT;
public class MultiTileEntityClassContainer {
private final WeakReference<MultiTileEntityRegistry> mRegistry;
private String mLocalized;
private String mCategoryName;
public final short mID;
public Class<? extends BaseMultiTileEntity> mClass;
public MultiTileEntityBlock mBlock;
public BaseMultiTileEntity mCanonicalTileEntity;
public NBTTagCompound mParameters;
// These have defaults
public byte mBlockMetaData = 1;
public byte mStackSize = 64;
public boolean mHidden = false;
public MultiTileEntityClassContainer(MultiTileEntityRegistry aRegistry, int aID, Class<? extends BaseMultiTileEntity> aClass) {
/* Start the Builder */
mRegistry = new WeakReference<>(aRegistry);
mID = (short) aID;
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 = mClass.newInstance();} catch (Throwable e) {throw new IllegalArgumentException(e);}
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;
}
/* 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
public MultiTileEntityClassContainer material(Materials aMaterial) {
// Sets the material, and the color from the material, if not already set
mParameters.setString(NBT.MATERIAL, aMaterial.toString());
if (!mParameters.hasKey(NBT.COLOR))
mParameters.setInteger(NBT.COLOR, GT_Util.getRGBInt(aMaterial.getRGBA()));
return this;
}
public MultiTileEntityClassContainer color(int aRPG) {
mParameters.setInteger(NBT.COLOR, aRPG);
return this;
}
public MultiTileEntityClassContainer color(short[] aRPGA) {
mParameters.setInteger(NBT.COLOR, GT_Util.getRGBInt(aRPGA));
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;
}
public MultiTileEntityClassContainer setNBT(Tuple... aTags) {
/* Merge in arbitrary NBT tuples of (key, value). Useful for anything for which a custom method has not yet been exposed */
mParameters = GT_Util.fuseNBT(mParameters, GT_Util.makeNBT(aTags));
return this;
}
}
|