fix converter + doors

This commit is contained in:
Sen 2025-06-28 17:22:41 +02:00
parent 601a331ee3
commit 96fb940087
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
3 changed files with 347 additions and 489 deletions

View file

@ -28,299 +28,240 @@ import common.world.IWorldAccess;
import common.world.State; import common.world.State;
import common.world.World; import common.world.World;
public class BlockDoor extends Block implements Rotatable public class BlockDoor extends Block implements Rotatable {
{ public static enum EnumDoorHalf implements Identifyable {
UPPER, LOWER;
public String toString() {
return this.getName();
}
public String getName() {
return this == UPPER ? "upper" : "lower";
}
}
public static enum EnumHingePosition implements Identifyable {
LEFT, RIGHT;
public String toString() {
return this.getName();
}
public String getName() {
return this == LEFT ? "left" : "right";
}
}
public static final PropertyBool OPEN = PropertyBool.create("open"); public static final PropertyBool OPEN = PropertyBool.create("open");
public static final PropertyEnum<BlockDoor.EnumHingePosition> HINGE = PropertyEnum.<BlockDoor.EnumHingePosition>create("hinge", BlockDoor.EnumHingePosition.class); public static final PropertyEnum<EnumHingePosition> HINGE = PropertyEnum.<EnumHingePosition>create("hinge", EnumHingePosition.class);
public static final PropertyBool POWERED = PropertyBool.create("powered"); public static final PropertyBool POWERED = PropertyBool.create("powered");
public static final PropertyEnum<BlockDoor.EnumDoorHalf> HALF = PropertyEnum.<BlockDoor.EnumDoorHalf>create("half", BlockDoor.EnumDoorHalf.class); public static final PropertyEnum<EnumDoorHalf> HALF = PropertyEnum.<EnumDoorHalf>create("half", EnumDoorHalf.class);
public static final List<BlockDoor> DOORS = Lists.newArrayList(); public static final List<BlockDoor> DOORS = Lists.newArrayList();
public BlockDoor(Material materialIn) public BlockDoor(Material material) {
{ super(material);
super(materialIn); this.setDefaultState(this.getBaseState().withProperty(FACING, Facing.NORTH).withProperty(OPEN, false)
this.setDefaultState(this.getBaseState().withProperty(FACING, Facing.NORTH).withProperty(OPEN, Boolean.valueOf(false)).withProperty(HINGE, BlockDoor.EnumHingePosition.LEFT).withProperty(POWERED, Boolean.valueOf(false)).withProperty(HALF, BlockDoor.EnumDoorHalf.LOWER)); .withProperty(HINGE, EnumHingePosition.LEFT).withProperty(POWERED, false)
.withProperty(HALF, EnumDoorHalf.LOWER));
DOORS.add(this); DOORS.add(this);
} }
// /** public boolean isOpaqueCube() {
// * Gets the localized name of this block. Used for the statistics page.
// */
// public String getLocalizedName()
// {
// return Strs.get((this.getUnlocalizedName() + ".name").replaceAll("tile", "item"));
// }
/**
* Used to determine ambient occlusion and culling when rebuilding chunks for render
*/
public boolean isOpaqueCube()
{
return false; return false;
} }
public boolean isPassable(IBlockAccess worldIn, BlockPos pos) public boolean isPassable(IBlockAccess world, BlockPos pos) {
{ return world.getState(pos).getValue(OPEN);
return worldIn.getState(pos).getValue(OPEN);
} }
public boolean isFullCube() public boolean isFullCube() {
{
return false; return false;
} }
public BoundingBox getSelectedBoundingBox(World worldIn, BlockPos pos) public BoundingBox getSelectedBoundingBox(World world, BlockPos pos) {
{ this.setBlockBoundsBasedOnState(world, pos);
this.setBlockBoundsBasedOnState(worldIn, pos); return super.getSelectedBoundingBox(world, pos);
return super.getSelectedBoundingBox(worldIn, pos);
} }
public BoundingBox getCollisionBoundingBox(World worldIn, BlockPos pos, State state) public BoundingBox getCollisionBoundingBox(World world, BlockPos pos, State state) {
{ this.setBlockBoundsBasedOnState(world, pos);
this.setBlockBoundsBasedOnState(worldIn, pos); return super.getCollisionBoundingBox(world, pos, state);
return super.getCollisionBoundingBox(worldIn, pos, state);
} }
public void setBlockBoundsBasedOnState(IWorldAccess worldIn, BlockPos pos) public void setBlockBoundsBasedOnState(IWorldAccess world, BlockPos pos) {
{ float thick = 0.1875F;
float f = 0.1875F;
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F); this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
State state = worldIn.getState(pos); State state = world.getState(pos);
Facing enumfacing = state.getValue(FACING); Facing facing = state.getValue(FACING);
boolean flag = state.getValue(OPEN); boolean open = state.getValue(OPEN);
boolean flag1 = state.getValue(HINGE) == BlockDoor.EnumHingePosition.RIGHT; boolean right = state.getValue(HINGE) == EnumHingePosition.RIGHT;
if (flag) if(open) {
{ if(facing == Facing.EAST) {
if (enumfacing == Facing.EAST) if(!right) {
{ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thick);
if (!flag1)
{
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);
} }
else else {
{ this.setBlockBounds(0.0F, 0.0F, 1.0F - thick, 1.0F, 1.0F, 1.0F);
this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
} }
} }
else if (enumfacing == Facing.SOUTH) else if(facing == Facing.SOUTH) {
{ if(!right) {
if (!flag1) this.setBlockBounds(1.0F - thick, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
{
this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
} }
else else {
{ this.setBlockBounds(0.0F, 0.0F, 0.0F, thick, 1.0F, 1.0F);
this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);
} }
} }
else if (enumfacing == Facing.WEST) else if(facing == Facing.WEST) {
{ if(!right) {
if (!flag1) this.setBlockBounds(0.0F, 0.0F, 1.0F - thick, 1.0F, 1.0F, 1.0F);
{
this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
} }
else else {
{ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thick);
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);
} }
} }
else if (enumfacing == Facing.NORTH) else if(facing == Facing.NORTH) {
{ if(!right) {
if (!flag1) this.setBlockBounds(0.0F, 0.0F, 0.0F, thick, 1.0F, 1.0F);
{
this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);
} }
else else {
{ this.setBlockBounds(1.0F - thick, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
} }
} }
} }
else if (enumfacing == Facing.EAST) else if(facing == Facing.EAST) {
{ this.setBlockBounds(0.0F, 0.0F, 0.0F, thick, 1.0F, 1.0F);
this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);
} }
else if (enumfacing == Facing.SOUTH) else if(facing == Facing.SOUTH) {
{ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thick);
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);
} }
else if (enumfacing == Facing.WEST) else if(facing == Facing.WEST) {
{ this.setBlockBounds(1.0F - thick, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
} }
else if (enumfacing == Facing.NORTH) else if(facing == Facing.NORTH) {
{ this.setBlockBounds(0.0F, 0.0F, 1.0F - thick, 1.0F, 1.0F, 1.0F);
this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
} }
} }
public boolean onBlockActivated(World worldIn, BlockPos pos, State state, EntityNPC playerIn, Facing side, float hitX, float hitY, float hitZ) public boolean onBlockActivated(World world, BlockPos pos, State state, EntityNPC player, Facing side, float hitX, float hitY, float hitZ) {
{ if(this.material == Material.SOLID)
if (this.material == Material.SOLID)
{
return true; return true;
} BlockPos lower = state.getValue(HALF) == EnumDoorHalf.LOWER ? pos : pos.down();
else BlockPos upper = state.getValue(HALF) == EnumDoorHalf.UPPER ? pos : pos.up();
{ State bottom = pos.equals(lower) ? state : world.getState(lower);
BlockPos blockpos = state.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER ? pos : pos.down(); State top = pos.equals(upper) ? state : world.getState(upper);
State iblockstate = pos.equals(blockpos) ? state : worldIn.getState(blockpos); if(bottom.getBlock() != this || top.getBlock() != this)
if (iblockstate.getBlock() != this)
{
return false; return false;
} boolean open = !state.getValue(OPEN);
else world.setState(lower, bottom.withProperty(OPEN, open), 2);
{ world.setState(upper, top.withProperty(OPEN, open), 2);
state = iblockstate.cycleProperty(OPEN); world.markBlockRangeForRenderUpdate(lower, upper);
worldIn.setState(blockpos, state, 2); world.playAuxSFX(player, open ? 1003 : 1006, pos, 0);
worldIn.markBlockRangeForRenderUpdate(blockpos, pos);
worldIn.playAuxSFX(playerIn, ((Boolean)state.getValue(OPEN)).booleanValue() ? 1003 : 1006, pos, 0);
return true; return true;
} }
}
}
public void toggleDoor(World worldIn, BlockPos pos, boolean open) public void toggleDoor(World world, BlockPos pos, boolean open) {
{ State state = world.getState(pos);
State iblockstate = worldIn.getState(pos); if(state.getBlock() == this) {
BlockPos lower = state.getValue(HALF) == EnumDoorHalf.LOWER ? pos : pos.down();
if (iblockstate.getBlock() == this) BlockPos upper = state.getValue(HALF) == EnumDoorHalf.UPPER ? pos : pos.up();
{ State bottom = pos.equals(lower) ? state : world.getState(lower);
BlockPos blockpos = iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER ? pos : pos.down(); State top = pos.equals(upper) ? state : world.getState(upper);
State iblockstate1 = pos == blockpos ? iblockstate : worldIn.getState(blockpos); if(bottom.getBlock() == this && top.getBlock() == this && ((open != bottom.getValue(OPEN)) || (open != top.getValue(OPEN)))) {
world.setState(lower, bottom.withProperty(OPEN, open), 2);
if (iblockstate1.getBlock() == this && ((Boolean)iblockstate1.getValue(OPEN)).booleanValue() != open) world.setState(upper, top.withProperty(OPEN, open), 2);
{ world.markBlockRangeForRenderUpdate(lower, upper);
worldIn.setState(blockpos, iblockstate1.withProperty(OPEN, Boolean.valueOf(open)), 2); world.playAuxSFX(open ? 1003 : 1006, pos, 0);
worldIn.markBlockRangeForRenderUpdate(blockpos, pos);
worldIn.playAuxSFX(open ? 1003 : 1006, pos, 0);
} }
} }
} }
/** public void onNeighborBlockChange(World world, BlockPos pos, State state, Block neighbor) {
* Called when a neighboring block changes. if(state.getValue(HALF) == EnumDoorHalf.UPPER) {
*/ BlockPos lower = pos.down();
public void onNeighborBlockChange(World worldIn, BlockPos pos, State state, Block neighborBlock) State bottom = world.getState(lower);
{
if (state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER)
{
BlockPos blockpos = pos.down();
State iblockstate = worldIn.getState(blockpos);
if (iblockstate.getBlock() != this) if(bottom.getBlock() != this) {
{ world.setBlockToAir(pos);
worldIn.setBlockToAir(pos);
} }
else if (neighborBlock != this) else if(neighbor != this) {
{ this.onNeighborBlockChange(world, lower, bottom, neighbor);
this.onNeighborBlockChange(worldIn, blockpos, iblockstate, neighborBlock);
} }
} }
else else {
{ boolean wrong = false;
boolean flag1 = false; BlockPos upper = pos.up();
BlockPos blockpos1 = pos.up(); State top = world.getState(upper);
State iblockstate1 = worldIn.getState(blockpos1);
if (iblockstate1.getBlock() != this) if(top.getBlock() != this) {
{ world.setBlockToAir(pos);
worldIn.setBlockToAir(pos); wrong = true;
flag1 = true;
} }
if (!worldIn.isBlockSolid(pos.down())) if(!world.isBlockSolid(pos.down())) {
{ world.setBlockToAir(pos);
worldIn.setBlockToAir(pos); wrong = true;
flag1 = true;
if (iblockstate1.getBlock() == this) if(top.getBlock() == this) {
{ world.setBlockToAir(upper);
worldIn.setBlockToAir(blockpos1);
} }
} }
if (flag1) if(wrong) {
{ if(!world.client) {
if (!worldIn.client) this.dropBlockAsItem(world, pos, state, 0);
{
this.dropBlockAsItem(worldIn, pos, state, 0);
} }
} }
else else {
{ boolean power = world.isBlockPowered(pos) || world.isBlockPowered(upper);
boolean flag = worldIn.isBlockPowered(pos) || worldIn.isBlockPowered(blockpos1);
if ((flag || neighborBlock.canProvidePower()) && neighborBlock != this && flag != ((Boolean)iblockstate1.getValue(POWERED)).booleanValue()) if((power || neighbor.canProvidePower()) && neighbor != this) {
{ world.setState(pos, state.withProperty(POWERED, power), 2);
worldIn.setState(blockpos1, iblockstate1.withProperty(POWERED, Boolean.valueOf(flag)), 2); world.setState(upper, top.withProperty(POWERED, power), 2);
if (flag != ((Boolean)state.getValue(OPEN)).booleanValue()) if((power != state.getValue(OPEN)) || (power != top.getValue(OPEN))) {
{ world.setState(pos, state.withProperty(OPEN, power), 2);
worldIn.setState(pos, state.withProperty(OPEN, Boolean.valueOf(flag)), 2); world.setState(upper, top.withProperty(OPEN, power), 2);
worldIn.markBlockRangeForRenderUpdate(pos, pos); world.markBlockRangeForRenderUpdate(pos, upper);
worldIn.playAuxSFX(flag ? 1003 : 1006, pos, 0); world.playAuxSFX(power ? 1003 : 1006, pos, 0);
} }
} }
} }
} }
} }
/** public Item getItemDropped(State state, Random rand, int fortune) {
* Get the Item that this Block should drop when harvested. return state.getValue(HALF) == EnumDoorHalf.UPPER ? null : this.getItem();
*/
public Item getItemDropped(State state, Random rand, int fortune)
{
return state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER ? null : this.getItem();
} }
/** public HitPosition collisionRayTrace(World world, BlockPos pos, Vec3 start, Vec3 end) {
* Ray traces through the blocks collision from start vector to end vector returning a ray trace hit. this.setBlockBoundsBasedOnState(world, pos);
*/ return super.collisionRayTrace(world, pos, start, end);
public HitPosition collisionRayTrace(World worldIn, BlockPos pos, Vec3 start, Vec3 end)
{
this.setBlockBoundsBasedOnState(worldIn, pos);
return super.collisionRayTrace(worldIn, pos, start, end);
} }
public boolean canPlaceBlockAt(World worldIn, BlockPos pos) public boolean canPlaceBlockAt(World world, BlockPos pos) {
{ return pos.getY() < World.MAX_SIZE_Y - 1 && world.isBlockSolid(pos.down()) && super.canPlaceBlockAt(world, pos) && super.canPlaceBlockAt(world, pos.up());
return pos.getY() >= World.MAX_SIZE_Y - 1 ? false : worldIn.isBlockSolid(pos.down()) && super.canPlaceBlockAt(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos.up());
} }
public int getMobilityFlag() public int getMobilityFlag() {
{
return 1; return 1;
} }
public Item getItem(World worldIn, BlockPos pos) public Item getItem(World world, BlockPos pos) {
{
return this.getItem(); return this.getItem();
} }
// public void onBlockHarvested(World worldIn, BlockPos pos, State state, EntityNPC player) public BlockLayer getBlockLayer() {
// {
// BlockPos blockpos = pos.down();
//
// if (player.creative && state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER && worldIn.getState(blockpos).getBlock() == this)
// {
// worldIn.setBlockToAir(blockpos);
// }
// }
public BlockLayer getBlockLayer()
{
return BlockLayer.CUTOUT; return BlockLayer.CUTOUT;
} }
public static Facing getFacing(IBlockAccess worldIn, BlockPos pos) public static Facing getFacing(IBlockAccess world, BlockPos pos) {
{ return world.getState(pos).getValue(FACING);
return worldIn.getState(pos).getValue(FACING);
} }
protected Property[] getProperties() protected Property[] getProperties() {
{
return new Property[] {HALF, FACING, OPEN, HINGE, POWERED}; return new Property[] {HALF, FACING, OPEN, HINGE, POWERED};
} }
@ -333,43 +274,19 @@ public class BlockDoor extends Block implements Rotatable
String top = name + "_top"; String top = name + "_top";
if(state.getValue(HALF) == EnumDoorHalf.LOWER) { if(state.getValue(HALF) == EnumDoorHalf.LOWER) {
if(state.getValue(HINGE) == EnumHingePosition.LEFT == state.getValue(OPEN)) if(state.getValue(HINGE) == EnumHingePosition.LEFT == state.getValue(OPEN))
return provider.getModel(bottom) return provider.getModel(bottom).add(0, 0, 0, 3, 16, 16).d().uv(13, 0, 16, 16).n().uv(3, 0, 0, 16).s().uv(0, 0, 3, 16).w()
.add(0, 0, 0, 3, 16, 16) .uv(16, 0, 0, 16).e().uv(0, 0, 16, 16).noCull().rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 1 : 0));
.d().uv(13, 0, 16, 16)
.n().uv(3, 0, 0, 16)
.s().uv(0, 0, 3, 16)
.w().uv(16, 0, 0, 16)
.e().uv(0, 0, 16, 16).noCull()
.rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 1 : 0));
else else
return provider.getModel(bottom) return provider.getModel(bottom).add(0, 0, 0, 3, 16, 16).d().uv(13, 0, 16, 16).n().uv(3, 0, 0, 16).s().uv(0, 0, 3, 16).w()
.add(0, 0, 0, 3, 16, 16) .uv(0, 0, 16, 16).e().uv(16, 0, 0, 16).noCull().rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 3 : 0));
.d().uv(13, 0, 16, 16)
.n().uv(3, 0, 0, 16)
.s().uv(0, 0, 3, 16)
.w().uv(0, 0, 16, 16)
.e().uv(16, 0, 0, 16).noCull()
.rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 3 : 0));
} }
else { else {
if(state.getValue(HINGE) == EnumHingePosition.LEFT == state.getValue(OPEN)) if(state.getValue(HINGE) == EnumHingePosition.LEFT == state.getValue(OPEN))
return provider.getModel(top) return provider.getModel(top).add(0, 0, 0, 3, 16, 16).u(bottom).uv(13, 0, 16, 16).n().uv(3, 0, 0, 16).s().uv(0, 0, 3, 16).w()
.add(0, 0, 0, 3, 16, 16) .uv(16, 0, 0, 16).e().uv(0, 0, 16, 16).noCull().rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 1 : 0));
.u(bottom).uv(13, 0, 16, 16)
.n().uv(3, 0, 0, 16)
.s().uv(0, 0, 3, 16)
.w().uv(16, 0, 0, 16)
.e().uv(0, 0, 16, 16).noCull()
.rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 1 : 0));
else else
return provider.getModel(top) return provider.getModel(top).add(0, 0, 0, 3, 16, 16).u(bottom).uv(13, 0, 16, 16).n().uv(3, 0, 0, 16).s().uv(0, 0, 3, 16).w()
.add(0, 0, 0, 3, 16, 16) .uv(0, 0, 16, 16).e().uv(16, 0, 0, 16).noCull().rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 3 : 0));
.u(bottom).uv(13, 0, 16, 16)
.n().uv(3, 0, 0, 16)
.s().uv(0, 0, 3, 16)
.w().uv(0, 0, 16, 16)
.e().uv(16, 0, 0, 16).noCull()
.rotate(getRotation(state.getValue(FACING), state.getValue(OPEN) ? 3 : 0));
} }
} }
@ -380,36 +297,4 @@ public class BlockDoor extends Block implements Rotatable
protected Item getItemToRegister() { protected Item getItemToRegister() {
return new ItemDoor(this); return new ItemDoor(this);
} }
public static enum EnumDoorHalf implements Identifyable
{
UPPER,
LOWER;
public String toString()
{
return this.getName();
}
public String getName()
{
return this == UPPER ? "upper" : "lower";
}
}
public static enum EnumHingePosition implements Identifyable
{
LEFT,
RIGHT;
public String toString()
{
return this.getName();
}
public String getName()
{
return this == LEFT ? "left" : "right";
}
}
} }

View file

@ -405,7 +405,7 @@ public final class Server implements IThreadListener, Executor {
public void run(long time) { public void run(long time) {
Region.loadMap(); Region.loadMap();
Converter.convert(); Converter.convert("terra");
long wtime = this.loadServerConfig(); long wtime = this.loadServerConfig();
if(this.keyPair == null) { if(this.keyPair == null) {
Log.SYSTEM.info("Generiere neues Schlüsselpaar"); Log.SYSTEM.info("Generiere neues Schlüsselpaar");

View file

@ -23,8 +23,6 @@ import common.block.artificial.BlockBed.EnumPartType;
import common.block.artificial.BlockCake; import common.block.artificial.BlockCake;
import common.block.artificial.BlockCarpet; import common.block.artificial.BlockCarpet;
import common.block.artificial.BlockDoor; import common.block.artificial.BlockDoor;
import common.block.artificial.BlockDoor.EnumDoorHalf;
import common.block.artificial.BlockDoor.EnumHingePosition;
import common.block.artificial.BlockFenceGate; import common.block.artificial.BlockFenceGate;
import common.block.artificial.BlockHay; import common.block.artificial.BlockHay;
import common.block.artificial.BlockLadder; import common.block.artificial.BlockLadder;
@ -42,6 +40,7 @@ import common.block.foliage.BlockCactus;
import common.block.foliage.BlockCarrot; import common.block.foliage.BlockCarrot;
import common.block.foliage.BlockCocoa; import common.block.foliage.BlockCocoa;
import common.block.foliage.BlockCrops; import common.block.foliage.BlockCrops;
import common.block.foliage.BlockDoublePlant;
import common.block.foliage.BlockFarmland; import common.block.foliage.BlockFarmland;
import common.block.foliage.BlockHugeMushroom; import common.block.foliage.BlockHugeMushroom;
import common.block.foliage.BlockHugeMushroom.EnumType; import common.block.foliage.BlockHugeMushroom.EnumType;
@ -128,6 +127,7 @@ import common.tileentity.TileEntityEnchantmentTable;
import common.tileentity.TileEntityFurnace; import common.tileentity.TileEntityFurnace;
import common.tileentity.TileEntityHopper; import common.tileentity.TileEntityHopper;
import common.tileentity.TileEntitySign; import common.tileentity.TileEntitySign;
import common.util.BlockPos;
import common.util.Facing; import common.util.Facing;
import common.util.Facing.Axis; import common.util.Facing.Axis;
import common.util.NibbleArray; import common.util.NibbleArray;
@ -311,7 +311,7 @@ public abstract class Converter {
private static final Random RANDOM = new Random(); private static final Random RANDOM = new Random();
private static final Map<String, String> ENTITY_MAP = Maps.newHashMap(); private static final Map<String, String> ENTITY_MAP = Maps.newHashMap();
private static final Map<String, String> TILE_MAP = Maps.newHashMap(); private static final Map<String, String> TILE_MAP = Maps.newHashMap();
private static final char[] BLOCK_MAP = new char[65536]; private static final State[] BLOCK_MAP = new State[65536];
private static void mapEntity(Class<? extends Entity> clazz, String ... names) { private static void mapEntity(Class<? extends Entity> clazz, String ... names) {
String name = EntityRegistry.getEntityString(clazz); String name = EntityRegistry.getEntityString(clazz);
@ -328,7 +328,7 @@ public abstract class Converter {
} }
private static void mapBlock(State state, int id, int data) { private static void mapBlock(State state, int id, int data) {
BLOCK_MAP[(id << 4) | data] = (char)BlockRegistry.getId(state); BLOCK_MAP[(id << 4) | data] = state;
} }
private static void mapBlock(State state, int id, int ... values) { private static void mapBlock(State state, int id, int ... values) {
@ -738,18 +738,7 @@ public abstract class Converter {
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 13), 63, 13); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 13), 63, 13);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 14), 63, 14); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 14), 63, 14);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 15), 63, 15); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 15), 63, 15);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 64, 0); mapBlock(Blocks.oak_door, 64);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 64, 1);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 64, 2);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 64, 3);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 64, 4);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 64, 5);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 64, 6);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 64, 7);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 64, 8, 12);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 64, 9, 13);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 64, 10, 14);
mapBlock(Blocks.oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 64, 11, 15);
mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.NORTH), 65); mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.NORTH), 65);
mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.SOUTH), 65, 3, 9, 15); mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.SOUTH), 65, 3, 9, 15);
mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.WEST), 65, 4, 10); mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.WEST), 65, 4, 10);
@ -794,18 +783,7 @@ public abstract class Converter {
mapBlock(Blocks.lever.getState().withProperty(BlockLever.FACING, EnumOrientation.DOWN_Z).withProperty(BlockLever.POWERED, true), 69, 15); mapBlock(Blocks.lever.getState().withProperty(BlockLever.FACING, EnumOrientation.DOWN_Z).withProperty(BlockLever.POWERED, true), 69, 15);
mapBlock(Blocks.stone_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, false), 70); mapBlock(Blocks.stone_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, false), 70);
mapBlock(Blocks.stone_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, true), 70, 1); mapBlock(Blocks.stone_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, true), 70, 1);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 71, 0); mapBlock(Blocks.iron_door, 71);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 71, 1);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 71, 2);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 71, 3);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 71, 4);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 71, 5);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 71, 6);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 71, 7);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 71, 8, 12);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 71, 9, 13);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 71, 10, 14);
mapBlock(Blocks.iron_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 71, 11, 15);
mapBlock(Blocks.wooden_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, false), 72); mapBlock(Blocks.wooden_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, false), 72);
mapBlock(Blocks.wooden_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, true), 72, 1); mapBlock(Blocks.wooden_pressure_plate.getState().withProperty(BlockPressurePlate.POWERED, true), 72, 1);
mapBlock(Blocks.redstone_ore, 73); mapBlock(Blocks.redstone_ore, 73);
@ -1042,10 +1020,7 @@ public abstract class Converter {
mapBlock(Blocks.stonebrick_stairs.getState().withProperty(BlockStairs.FACING, Facing.SOUTH).withProperty(BlockStairs.HALF, EnumHalf.TOP), 109, 6, 14); mapBlock(Blocks.stonebrick_stairs.getState().withProperty(BlockStairs.FACING, Facing.SOUTH).withProperty(BlockStairs.HALF, EnumHalf.TOP), 109, 6, 14);
mapBlock(Blocks.stonebrick_stairs.getState().withProperty(BlockStairs.FACING, Facing.NORTH).withProperty(BlockStairs.HALF, EnumHalf.TOP), 109, 7, 15); mapBlock(Blocks.stonebrick_stairs.getState().withProperty(BlockStairs.FACING, Facing.NORTH).withProperty(BlockStairs.HALF, EnumHalf.TOP), 109, 7, 15);
mapBlock(Blocks.mycelium, 110); mapBlock(Blocks.mycelium, 110);
mapBlock(Blocks.waterlily.getState().withProperty(BlockLilyPad.FACING, Facing.SOUTH), 111, 0, 4, 8, 12); mapBlock(Blocks.waterlily, 111);
mapBlock(Blocks.waterlily.getState().withProperty(BlockLilyPad.FACING, Facing.WEST), 111, 1, 5, 9, 13);
mapBlock(Blocks.waterlily.getState().withProperty(BlockLilyPad.FACING, Facing.NORTH), 111, 2, 6, 10, 14);
mapBlock(Blocks.waterlily.getState().withProperty(BlockLilyPad.FACING, Facing.EAST), 111, 3, 7, 11, 15);
mapBlock(Blocks.blood_brick, 112); mapBlock(Blocks.blood_brick, 112);
mapBlock(Blocks.blood_brick_fence, 113); mapBlock(Blocks.blood_brick_fence, 113);
mapBlock(Blocks.blood_brick_stairs.getState().withProperty(BlockStairs.FACING, Facing.EAST).withProperty(BlockStairs.HALF, EnumHalf.BOTTOM), 114, 0, 8); mapBlock(Blocks.blood_brick_stairs.getState().withProperty(BlockStairs.FACING, Facing.EAST).withProperty(BlockStairs.HALF, EnumHalf.BOTTOM), 114, 0, 8);
@ -1452,12 +1427,12 @@ public abstract class Converter {
mapBlock(Blocks.hardened_clay, 172); mapBlock(Blocks.hardened_clay, 172);
mapBlock(Blocks.coal_block, 173); mapBlock(Blocks.coal_block, 173);
mapBlock(Blocks.packed_ice, 174); mapBlock(Blocks.packed_ice, 174);
mapBlock(Blocks.dandelion, 175, 0); mapBlock(Blocks.sunflower, 175);
mapBlock(Blocks.blue_orchid, 175, 1); mapBlock(Blocks.syringa, 175, 1);
mapBlock(Blocks.tallgrass, 175, 2); mapBlock(Blocks.large_tallgrass, 175, 2);
mapBlock(Blocks.fern, 175, 3); mapBlock(Blocks.large_fern, 175, 3);
mapBlock(Blocks.rose, 175, 4); mapBlock(Blocks.rose_bush, 175, 4);
mapBlock(Blocks.pink_tulip, 175, 5); mapBlock(Blocks.paeonia, 175, 5);
mapBlock(Blocks.banner.getState().withProperty(BlockBannerStanding.ROTATION, 0), 176, 0); mapBlock(Blocks.banner.getState().withProperty(BlockBannerStanding.ROTATION, 0), 176, 0);
mapBlock(Blocks.banner.getState().withProperty(BlockBannerStanding.ROTATION, 1), 176, 1); mapBlock(Blocks.banner.getState().withProperty(BlockBannerStanding.ROTATION, 1), 176, 1);
mapBlock(Blocks.banner.getState().withProperty(BlockBannerStanding.ROTATION, 2), 176, 2); mapBlock(Blocks.banner.getState().withProperty(BlockBannerStanding.ROTATION, 2), 176, 2);
@ -1596,66 +1571,11 @@ public abstract class Converter {
mapBlock(Blocks.jungle_fence, 190); mapBlock(Blocks.jungle_fence, 190);
mapBlock(Blocks.dark_oak_fence, 191); mapBlock(Blocks.dark_oak_fence, 191);
mapBlock(Blocks.acacia_fence, 192); mapBlock(Blocks.acacia_fence, 192);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 193, 0); mapBlock(Blocks.spruce_door, 193);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 193, 1); mapBlock(Blocks.birch_door, 194);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 193, 2); mapBlock(Blocks.jungle_door, 195);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 193, 3); mapBlock(Blocks.acacia_door, 196);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 193, 4); mapBlock(Blocks.dark_oak_door, 197);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 193, 5);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 193, 6);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 193, 7);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 193, 8, 12);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 193, 9, 13);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 193, 10, 14);
mapBlock(Blocks.spruce_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 193, 11, 15);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 194, 0);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 194, 1);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 194, 2);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 194, 3);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 194, 4);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 194, 5);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 194, 6);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 194, 7);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 194, 8, 12);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 194, 9, 13);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 194, 10, 14);
mapBlock(Blocks.birch_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 194, 11, 15);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 195, 0);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 195, 1);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 195, 2);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 195, 3);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 195, 4);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 195, 5);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 195, 6);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 195, 7);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 195, 8, 12);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 195, 9, 13);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 195, 10, 14);
mapBlock(Blocks.jungle_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 195, 11, 15);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 196, 0);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 196, 1);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 196, 2);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 196, 3);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 196, 4);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 196, 5);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 196, 6);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 196, 7);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 196, 8, 12);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 196, 9, 13);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 196, 10, 14);
mapBlock(Blocks.acacia_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 196, 11, 15);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 197, 0);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 197, 1);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 197, 2);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 197, 3);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.EAST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 197, 4);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.SOUTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 197, 5);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.WEST).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 197, 6);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.LOWER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, true).withProperty(BlockDoor.POWERED, false), 197, 7);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 197, 8, 12);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, false), 197, 9, 13);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.LEFT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 197, 10, 14);
mapBlock(Blocks.dark_oak_door.getState().withProperty(BlockDoor.FACING, Facing.NORTH).withProperty(BlockDoor.HALF, EnumDoorHalf.UPPER).withProperty(BlockDoor.HINGE, EnumHingePosition.RIGHT).withProperty(BlockDoor.OPEN, false).withProperty(BlockDoor.POWERED, true), 197, 11, 15);
mapBlock(Blocks.iron_bars, 198); mapBlock(Blocks.iron_bars, 198);
mapBlock(Blocks.glass_pane, 199); mapBlock(Blocks.glass_pane, 199);
@ -1842,6 +1762,24 @@ public abstract class Converter {
return idx >= 0 ? name.substring(idx + 1) : name; // save compat return idx >= 0 ? name.substring(idx + 1) : name; // save compat
} }
private static State getState(int id, int meta, int down, int up) {
if(id >= 256)
return Blocks.stone.getState();
State state = BLOCK_MAP[(id << 4) | meta];
if(id == 111)
return state.withProperty(BlockLilyPad.FACING, Facing.randHorizontal(RANDOM));
else if(id == 175)
return ((meta & 8) > 0 ? BLOCK_MAP[(id << 4) | (down & 7)] : state).withProperty(BlockDoublePlant.HALF, (meta & 8) > 0 ? BlockDoublePlant.EnumBlockHalf.UPPER : BlockDoublePlant.EnumBlockHalf.LOWER);
else if(id == 64 || id == 71 || (id >= 193 && id <= 197))
return state.withProperty(BlockDoor.HALF, (meta & 8) > 0 ? BlockDoor.EnumDoorHalf.UPPER : BlockDoor.EnumDoorHalf.LOWER)
.withProperty(BlockDoor.HINGE, (((meta & 8) > 0 ? meta : up) & 1) > 0 ? BlockDoor.EnumHingePosition.RIGHT : BlockDoor.EnumHingePosition.LEFT)
.withProperty(BlockDoor.POWERED, (((meta & 8) > 0 ? meta : up) & 2) > 0)
.withProperty(BlockDoor.OPEN, (((meta & 8) > 0 ? down : meta) & 4) > 0)
.withProperty(BlockDoor.FACING, Facing.getHorizontal(((meta & 8) > 0 ? down : meta) & 3).rotateYCCW());
else
return state;
}
private static TagObject convertChunkData(NbtTag tag, boolean legacy) { private static TagObject convertChunkData(NbtTag tag, boolean legacy) {
TagObject ntag = new TagObject(); TagObject ntag = new TagObject();
tag = tag.getTag("Level"); tag = tag.getTag("Level");
@ -1930,7 +1868,6 @@ public abstract class Converter {
nent.setFloat("Yaw", rotation[0]); nent.setFloat("Yaw", rotation[0]);
nent.setFloat("Pitch", rotation[1]); nent.setFloat("Pitch", rotation[1]);
nent.setBool("OnGround", ground); nent.setBool("OnGround", ground);
nent.setInt("Dimension", 1);
nent.setString("id", mapped); nent.setString("id", mapped);
entities.add(nent); entities.add(nent);
} }
@ -1956,40 +1893,76 @@ public abstract class Converter {
NbtTag[] sects = tag.getTagList("Sections"); NbtTag[] sects = tag.getTagList("Sections");
entities = Lists.newArrayList(); entities = Lists.newArrayList();
char[] mapping = Region.getEncodeMap(); char[] mapping = Region.getEncodeMap();
NbtTag[] sections = new NbtTag[16];
for(NbtTag sect : sects) { for(NbtTag sect : sects) {
TagObject nsect = new TagObject(); int y = sect.getByte("Y");
nsect.setInt("Y", sect.getByte("Y")); if(y >= 0 && y < sections.length)
byte[] blocks = sect.getByteArray("Blocks"); sections[y] = sect;
NibbleArray data = new NibbleArray(sect.getByteArray("Data")); }
byte[] add = sect.getByteArray("Add"); byte[] lastBlocks = null;
NibbleArray adddata = add.length > 0 ? new NibbleArray(add) : null; NibbleArray lastData = null;
NibbleArray lastAdd = null;
byte[] blocks = null;
NibbleArray data = null;
NibbleArray adddata = null;
byte[] nextBlocks = null;
NibbleArray nextData = null;
NibbleArray nextAdd = null;
if(sections[0] != null) {
nextBlocks = sections[0].getByteArray("Blocks");
nextData = new NibbleArray(sections[0].getByteArray("Data"));
byte[] add = sections[0].getByteArray("Add");
nextAdd = add.length > 0 ? new NibbleArray(add) : null;
}
for(int y = 0; y < sections.length; y++) {
blocks = nextBlocks;
data = nextData;
adddata = nextAdd;
NbtTag next = y == sections.length - 1 ? null : sections[y + 1];
nextBlocks = next == null ? null : next.getByteArray("Blocks");
nextData = next == null ? null : new NibbleArray(next.getByteArray("Data"));
byte[] add = next == null ? null : next.getByteArray("Add");
nextAdd = add != null && add.length > 0 ? new NibbleArray(add) : null;
NbtTag sect = sections[y];
if(sect != null) {
byte[] newblks = new byte[4096];
NibbleArray datanew = new NibbleArray();
NibbleArray addnew = null; NibbleArray addnew = null;
for(int c = 0; c < blocks.length; ++c) { for(int c = 0; c < blocks.length; ++c) {
int cx = c & 15; int cx = c & 15;
int cy = c >> 8 & 15; int cy = c >> 8 & 15;
int cz = c >> 4 & 15; int cz = c >> 4 & 15;
int ca = adddata != null ? adddata.get(cx, cy, cz) : 0; char block = (char)((adddata != null ? adddata.get(cx, cy, cz) << 8 : 0) | (blocks[c] & 255));
char block = (char)((ca << 8) | (blocks[c] & 255));
if(block == 0) if(block == 0)
continue; continue;
int dt = block == 111 ? RANDOM.zrange(4) : data.get(cx, cy, cz); char cd = mapping[BlockRegistry.getId(getState(block, data.get(cx, cy, cz), cy == 0 ? (lastData == null ? 0 : lastData.get(cx, 15, cz)) : data.get(cx, cy - 1, cz),
char cd = mapping[block >= 256 ? BLOCK_MAP[1 << 4] : BLOCK_MAP[(block << 4) | dt]]; cy == 15 ? (nextData == null ? 0 : nextData.get(cx, 0, cz)) : data.get(cx, cy + 1, cz)))];
if(cd >> 12 != 0) { if(cd >> 12 != 0) {
if(addnew == null) if(addnew == null)
addnew = new NibbleArray(); addnew = new NibbleArray();
addnew.set(cx, cy, cz, cd >> 12); addnew.set(cx, cy, cz, cd >> 12);
} }
blocks[c] = (byte)(cd & 255); newblks[c] = (byte)(cd & 255);
data.set(cx, cy, cz, cd >> 8 & 15); datanew.set(cx, cy, cz, cd >> 8 & 15);
} }
nsect.setByteArray("Dat0", blocks);
nsect.setByteArray("Dat1", data.getData()); TagObject nsect = new TagObject();
nsect.setInt("Y", y);
nsect.setByteArray("Dat0", newblks);
nsect.setByteArray("Dat1", datanew.getData());
if(addnew != null) if(addnew != null)
nsect.setByteArray("Dat2", addnew.getData()); nsect.setByteArray("Dat2", addnew.getData());
nsect.setByteArray("BlockLight", sect.getByteArray("BlockLight")); nsect.setByteArray("BlockLight", sect.getByteArray("BlockLight"));
nsect.setByteArray("SkyLight", sect.getByteArray("SkyLight")); nsect.setByteArray("SkyLight", sect.getByteArray("SkyLight"));
entities.add(nsect); entities.add(nsect);
} }
lastBlocks = blocks;
lastData = data;
lastAdd = adddata;
}
ntag.setList("Sections", entities); ntag.setList("Sections", entities);
return ntag; return ntag;
} }
@ -2061,14 +2034,14 @@ public abstract class Converter {
return start; return start;
} }
public static boolean convert() { public static BlockPos convert(String dest) {
if(new File("server.cdt").exists()) if(new File("server.cdt").exists())
return false; return null;
File ldat = new File("level.dat"); File ldat = new File("level.dat");
if(!ldat.exists()) if(!ldat.exists())
ldat = new File("level.dat_old"); ldat = new File("level.dat_old");
if(!ldat.exists()) if(!ldat.exists())
return false; return null;
Log.IO.info("Welt wird konvertiert ..."); Log.IO.info("Welt wird konvertiert ...");
NbtTag tag; NbtTag tag;
DataInputStream in = null; DataInputStream in = null;
@ -2078,7 +2051,7 @@ public abstract class Converter {
} }
catch(Exception e) { catch(Exception e) {
Log.IO.error(e, "Fehler beim Lesen von level.dat"); Log.IO.error(e, "Fehler beim Lesen von level.dat");
return false; return null;
} }
finally { finally {
try { try {
@ -2094,18 +2067,18 @@ public abstract class Converter {
SaveVersion ver = data >= 1400 ? SaveVersion.RELEASE_1_13 : (data >= 100 ? SaveVersion.RELEASE_1_9 : (version == 19132 || version == 19133 ? SaveVersion.BETA_1_3 : (version == 0 ? SaveVersion.ALPHA_1_0 : null))); SaveVersion ver = data >= 1400 ? SaveVersion.RELEASE_1_13 : (data >= 100 ? SaveVersion.RELEASE_1_9 : (version == 19132 || version == 19133 ? SaveVersion.BETA_1_3 : (version == 0 ? SaveVersion.ALPHA_1_0 : null)));
if(ver == null) { if(ver == null) {
Log.IO.error("Version %d ist unbekannt", version); Log.IO.error("Version %d ist unbekannt", version);
return false; return null;
} }
if(ver == SaveVersion.RELEASE_1_13) { if(ver == SaveVersion.RELEASE_1_13) {
Log.IO.warn("Konvertiere keine Chunk-Daten, da Version zu neu (%s)", ver); Log.IO.warn("Konvertiere keine Chunk-Daten, da Version zu neu (%s)", ver);
return false; return null;
} }
File regionDir = new File("region"); File regionDir = new File("region");
if(!regionDir.exists()) { if(!regionDir.exists()) {
Log.IO.info("Kein Ordner region/ gefunden"); Log.IO.info("Kein Ordner region/ gefunden");
return false; return null;
} }
File chunkDir = new File(new File("chunk"), "terra"); File chunkDir = new File(new File("chunk"), dest);
Log.IO.info("Durchsuche Ordner region/ nach .mca- und .mcr-Dateien ..."); Log.IO.info("Durchsuche Ordner region/ nach .mca- und .mcr-Dateien ...");
File[] files = regionDir.listFiles(new FilenameFilter() { File[] files = regionDir.listFiles(new FilenameFilter() {
public boolean accept(File file, String name) { public boolean accept(File file, String name) {
@ -2114,7 +2087,7 @@ public abstract class Converter {
}); });
if(files.length == 0) { if(files.length == 0) {
Log.IO.info("Keine .mca- oder .mcr-Dateien gefunden"); Log.IO.info("Keine .mca- oder .mcr-Dateien gefunden");
return false; return null;
} }
Log.IO.info("Konvertiere %d .mca- und .mcr-Datei%s (%s) von region/*.mca,*.mcr nach %s ...", files.length, files.length == 1 ? "" : "en", ver, chunkDir); Log.IO.info("Konvertiere %d .mca- und .mcr-Datei%s (%s) von region/*.mca,*.mcr nach %s ...", files.length, files.length == 1 ? "" : "en", ver, chunkDir);
if(ver == SaveVersion.RELEASE_1_9) if(ver == SaveVersion.RELEASE_1_9)
@ -2132,7 +2105,7 @@ public abstract class Converter {
} }
time = System.currentTimeMillis() - time; time = System.currentTimeMillis() - time;
Log.IO.info("Fertig. Konversion dauerte " + ((time / 60000L) > 0 ? ((time / 60000L) + " Minuten und ") : "") + ((time / 1000L) % 60L) + " Sekunden."); Log.IO.info("Fertig. Konversion dauerte " + ((time / 60000L) > 0 ? ((time / 60000L) + " Minuten und ") : "") + ((time / 1000L) % 60L) + " Sekunden.");
Log.IO.info("Einstiegspunkt: /tele %d %d %d terra", tag.getInt("SpawnX"), tag.getInt("SpawnY"), tag.getInt("SpawnZ")); Log.IO.info("Einstiegspunkt: /tele %d %d %d %s", tag.getInt("SpawnX"), tag.getInt("SpawnY"), tag.getInt("SpawnZ"), dest);
return true; return new BlockPos(tag.getInt("SpawnX"), tag.getInt("SpawnY"), tag.getInt("SpawnZ"));
} }
} }