refactor SchematicBlock, close #1949
This commit is contained in:
parent
260a57d600
commit
ac2a969919
1 changed files with 54 additions and 38 deletions
|
@ -56,9 +56,7 @@ public class SchematicBlock extends SchematicBlockBase {
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
super.writeToWorld(context, x, y, z, stacks);
|
super.writeToWorld(context, x, y, z, stacks);
|
||||||
|
|
||||||
// Meta needs to be specified twice, depending on the block behavior
|
this.setBlockInWorld(context, x, y, z);
|
||||||
context.world().setBlock(x, y, z, block, meta, 3);
|
|
||||||
context.world().setBlockMetadataWithNotify(x, y, z, meta, 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -80,37 +78,53 @@ public class SchematicBlock extends SchematicBlockBase {
|
||||||
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
super.writeToNBT(nbt, registry);
|
super.writeToNBT(nbt, registry);
|
||||||
|
|
||||||
nbt.setInteger("blockId", registry.getIdForBlock(block));
|
writeBlockToNBT(nbt, registry);
|
||||||
nbt.setInteger("blockMeta", meta);
|
writeRequirementsToNBT(nbt, registry);
|
||||||
|
|
||||||
if (storedRequirements.length > 0) {
|
|
||||||
NBTTagList rq = new NBTTagList();
|
|
||||||
|
|
||||||
for (ItemStack stack : storedRequirements) {
|
|
||||||
NBTTagCompound sub = new NBTTagCompound();
|
|
||||||
stack.writeToNBT(sub);
|
|
||||||
registry.stackToRegistry(sub);
|
|
||||||
rq.appendTag(sub);
|
|
||||||
}
|
|
||||||
|
|
||||||
nbt.setTag("rq", rq);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
super.readFromNBT(nbt, registry);
|
super.readFromNBT(nbt, registry);
|
||||||
|
|
||||||
|
readBlockFromNBT(nbt, registry);
|
||||||
|
readRequirementsFromNBT(nbt, registry);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BuildingStage getBuildStage () {
|
||||||
|
if (block instanceof BlockFalling) {
|
||||||
|
return BuildingStage.SUPPORTED;
|
||||||
|
} else if (block instanceof BlockFluidBase || block instanceof BlockLiquid) {
|
||||||
|
return BuildingStage.EXPANDING;
|
||||||
|
} else if (block.isOpaqueCube()) {
|
||||||
|
return BuildingStage.STANDALONE;
|
||||||
|
} else {
|
||||||
|
return BuildingStage.SUPPORTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BuildingPermission getBuildingPermission() {
|
||||||
|
return defaultPermission;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Utility functions
|
||||||
|
protected void setBlockInWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// Meta needs to be specified twice, depending on the block behavior
|
||||||
|
context.world().setBlock(x, y, z, block, meta, 3);
|
||||||
|
context.world().setBlockMetadataWithNotify(x, y, z, meta, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void readBlockFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
try {
|
try {
|
||||||
block = registry.getBlockForId(nbt.getInteger("blockId"));
|
block = registry.getBlockForId(nbt.getInteger("blockId"));
|
||||||
|
meta = nbt.getInteger("blockMeta");
|
||||||
} catch (MappingNotFoundException e) {
|
} catch (MappingNotFoundException e) {
|
||||||
defaultPermission = BuildingPermission.CREATIVE_ONLY;
|
defaultPermission = BuildingPermission.CREATIVE_ONLY;
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
meta = nbt.getInteger("blockMeta");
|
|
||||||
|
protected void readRequirementsFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
if (nbt.hasKey("rq")) {
|
if (nbt.hasKey("rq")) {
|
||||||
NBTTagList rq = nbt.getTagList("rq", Constants.NBT.TAG_COMPOUND);
|
NBTTagList rq = nbt.getTagList("rq", Constants.NBT.TAG_COMPOUND);
|
||||||
|
|
||||||
|
@ -139,22 +153,24 @@ public class SchematicBlock extends SchematicBlockBase {
|
||||||
storedRequirements = new ItemStack[0];
|
storedRequirements = new ItemStack[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void writeBlockToNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
|
nbt.setInteger("blockId", registry.getIdForBlock(block));
|
||||||
|
nbt.setInteger("blockMeta", meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void writeRequirementsToNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
|
if (storedRequirements.length > 0) {
|
||||||
|
NBTTagList rq = new NBTTagList();
|
||||||
|
|
||||||
@Override
|
for (ItemStack stack : storedRequirements) {
|
||||||
public BuildingStage getBuildStage () {
|
NBTTagCompound sub = new NBTTagCompound();
|
||||||
if (block instanceof BlockFalling) {
|
stack.writeToNBT(sub);
|
||||||
return BuildingStage.SUPPORTED;
|
registry.stackToRegistry(sub);
|
||||||
} else if (block instanceof BlockFluidBase || block instanceof BlockLiquid) {
|
rq.appendTag(sub);
|
||||||
return BuildingStage.EXPANDING;
|
}
|
||||||
} else if (block.isOpaqueCube()) {
|
|
||||||
return BuildingStage.STANDALONE;
|
nbt.setTag("rq", rq);
|
||||||
} else {
|
|
||||||
return BuildingStage.SUPPORTED;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BuildingPermission getBuildingPermission() {
|
|
||||||
return defaultPermission;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue