public class Lever extends WorldSavedData {
//-----------------------------------------------------------------------------------------------
private static final String TAG = "Lever";
public static final int MAX_USED = 16;//Можно изменит или во-обще можно добавить и использовать из NBT
private World world_p;
private ArrayList<PartLever> regLever = new ArrayList<PartLever>();
//-----------------------------------------------------------------------------------------------
public Lever() {
super(TAG);
}
public Lever(String tag) {
super(tag);
}
//-----------------------------------------------------------------------------------------------
public static void check(World world) {
WorldSavedData data = world.perWorldStorage.loadData(Lever.class, TAG);
if (data == null) data = new Lever(TAG);
world.perWorldStorage.setData(TAG, data);
data.markDirty();
}
public static Lever get(World world) {
return (Lever)world.perWorldStorage.loadData(Lever.class, TAG);
}
//-----------------------------------------------------------------------------------------------
public void setWorld(World world) {
world_p = world;
}
public ArrayList<PartLever> getList() {
return regLever;
}
//-----------------------------------------------------------------------------------------------
public void addLever(int x, int y, int z, int count_used) {
PartLever bct = new PartLever(x, y, z, count_used);
addLever(bct);
}
public void addLever(PartLever bct) {
if (regLever != null) regLever.add(bct);
else System.out.println("[Error] Adding - PartLever: x = " + bct.x + ", y = " + bct.y + ", z = " + bct.z + ".");
}
public void addLever_check(PartLever bct) {
boolean flag = false;
if (regLever != null) {
for (PartLever bctp : regLever) {
if (bctp.x == bct.x && bctp.y == bct.y && bctp.z == bct.z)
flag = true;
}
}
if (!flag) regLever.add(bct);
if (flag) System.out.println("[Error] Adding - PartLever: x = " + bct.x + ", y = " + bct.y + ", z = " + bct.z + ".");
}
//-----------------------------------------------------------------------------------------------
public void removeLever(int x, int y, int z) {
boolean flag = false;
if (regLever != null && regLever.size() > 0) {
for (int i = 0; i < regLever.size(); ++i) {
PartLever bctp = regLever.get(i);
if (bctp != null && bctp.x == x && bctp.y == y && bctp.z == z) {
regLever.remove(bctp);
flag = true;
}
}
}
if (!flag) System.out.println("[Error] Not Remove - PartLever: x = " + x + ", y = " + y + ", z = " + z + ".");
}
public void removeLever(PartLever bct) {
if (regLever != null) regLever.remove(bct);
else System.out.println("[Error] Not Remove - PartLever: x = " + bct.x + ", y = " + bct.y + ", z = " + bct.z + ".");
}
//-----------------------------------------------------------------------------------------------
public PartLever getLever(int x, int y, int z) {
if (regLever != null && regLever.size() > 0) {
for (PartLever bctp : regLever) {
if (bctp.x == x && bctp.y == y && bctp.z == z) return bctp;
}
}
return null;
}
public boolean isLever(int x, int y, int z) {
if (regLever != null && regLever.size() > 0) {
for (PartLever bctp : regLever) {
if (bctp.x == x && bctp.y == y && bctp.z == z) return true;
}
}
return false;
}
public void use(int x, int y, int z) {
if (regLever != null && regLever.size() > 0) {
for (PartLever bctp : regLever) {
if (bctp.x == x && bctp.y == y && bctp.z == z) {
++bctp.count_used;
}
}
}
}
//-----------------------------------------------------------------------------------------------
@Override
public void readFromNBT(NBTTagCompound nbt) {
/* System.out.println("readFromNBT " + (
FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER ? "Side Server" :
FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT ? "Side Client" :
"Side Error"));*/
regLever.clear();
NBTTagList nbttaglist = nbt.getTagList(TAG, Constants.NBT.TAG_COMPOUND);
if (nbttaglist != null) {
for (int i = 0; i < nbttaglist.tagCount(); ++i) {
NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
int x = nbttagcompound1.getInteger("CordX");
int y = nbttagcompound1.getInteger("CordY");
int z = nbttagcompound1.getInteger("CordZ");
int count_used = (int)nbttagcompound1.getShort("CountUsed");
PartLever bct = new PartLever(x, y, z, count_used);
addLever_check(bct);
//System.out.println(bct.toString());
}
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
/*System.out.println("writeToNBT " + (
FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER ? "Side Server" :
FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT ? "Side Client" :
"Side Error"));*/
if (regLever != null && regLever.size() > 0) {
NBTTagList nbttaglist = new NBTTagList();
for (int i = 0; i < regLever.size(); ++i) {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.setInteger("CordX", regLever.get(i).x);
nbttagcompound1.setInteger("CordY", regLever.get(i).y);
nbttagcompound1.setInteger("CordZ", regLever.get(i).z);
nbttagcompound1.setShort("CountUsed", (short)regLever.get(i).count_used);
//--------------------------------------------------------------
nbttaglist.appendTag(nbttagcompound1);
}
nbt.setTag(TAG, nbttaglist);
}
}
//-----------------------------------------------------------------------------------------------
public static class PartLever {
public int x;
public int y;
public int z;
public int count_used;
public PartLever(int x, int y, int z, int count_used) {
this.x = x;
this.y = y;
this.z = z;
this.count_used = count_used;
}
public String toString() {
String str = "PartLever: x = " + x + ", y = " + y + ", z = " + z + "";
str += "count_used:" + count_used;
return str + ".";
}
}
//-----------------------------------------------------------------------------------------------
}