Implemented BlockState.update(boolean), signs should now work, cleaned up some code a little

By: Dinnerbone <dinnerbone@dinnerbone.com>
This commit is contained in:
CraftBukkit/Spigot 2011-01-08 01:22:17 +00:00
parent b0bf52751f
commit 31546ddf8e
6 changed files with 89 additions and 53 deletions

View File

@ -4,6 +4,7 @@ package org.bukkit.craftbukkit;
import org.bukkit.*;
import org.bukkit.block.BlockState;
import org.bukkit.craftbukkit.block.CraftBlockState;
import org.bukkit.craftbukkit.block.CraftSign;
public class CraftBlock implements Block {
private final CraftWorld world;
@ -253,6 +254,15 @@ public class CraftBlock implements Block {
}
public BlockState getState() {
return new CraftBlockState(world, x, y, z, type, data);
Material material = getType();
switch (material) {
case Sign:
case SignPost:
case WallSign:
return new CraftSign(this);
default:
return new CraftBlockState(this);
}
}
}

View File

@ -1,18 +1,18 @@
package org.bukkit.craftbukkit;
import net.minecraft.server.EntityBoat;
import org.bukkit.Boat;
/**
* A minecart.
*
* @author sk89q
*/
public class CraftBoat extends CraftVehicle implements Boat {
protected EntityBoat boat;
public CraftBoat(CraftServer server, EntityBoat entity) {
super(server, entity);
boat = entity;
}
}
package org.bukkit.craftbukkit;
import net.minecraft.server.EntityBoat;
import org.bukkit.Boat;
/**
* A minecart.
*
* @author sk89q
*/
public class CraftBoat extends CraftVehicle implements Boat {
protected EntityBoat boat;
public CraftBoat(CraftServer server, EntityBoat entity) {
super(server, entity);
boat = entity;
}
}

View File

@ -1,16 +1,16 @@
package org.bukkit.craftbukkit;
/**
* Indicates that an object has a method to get its CraftBukkit-equivalent
* CraftEntity object from its Minecraft net.minecraft.server.Entity object.
*
* @author sk89q
*/
public interface CraftMappable {
/**
* Gets the CraftEntity version.
*
* @return
*/
public CraftEntity getCraftEntity();
}
package org.bukkit.craftbukkit;
/**
* Indicates that an object has a method to get its CraftBukkit-equivalent
* CraftEntity object from its Minecraft net.minecraft.server.Entity object.
*
* @author sk89q
*/
public interface CraftMappable {
/**
* Gets the CraftEntity version.
*
* @return
*/
public CraftEntity getCraftEntity();
}

View File

@ -14,6 +14,7 @@ import net.minecraft.server.EntityPlayerMP;
import net.minecraft.server.EntitySnowball;
import net.minecraft.server.EntityArrow;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.TileEntity;
import net.minecraft.server.WorldGenBigTree;
import net.minecraft.server.WorldServer;
import net.minecraft.server.WorldGenTrees;
@ -185,6 +186,10 @@ public class CraftWorld implements World {
}
}
public TileEntity getTileEntityAt(final int x, final int y, final int z) {
return world.l(x, y, z);
}
@Override
public String toString() {
return "CraftWorld";

View File

@ -19,15 +19,15 @@ public class CraftBlockState implements BlockState {
protected byte data;
protected byte light;
public CraftBlockState(final CraftWorld world, final int x, final int y, final int z, final int type, final byte data) {
this.world = world;
this.x = x;
this.y = y;
this.z = z;
this.type = type;
this.data = data;
this.light = (byte)world.getHandle().i(x, y, z);
this.chunk = (CraftChunk)world.getChunkAt(x << 4, z << 4);
public CraftBlockState(final Block block) {
this.world = (CraftWorld)block.getWorld();
this.x = block.getX();
this.y = block.getY();
this.z = block.getZ();
this.type = block.getTypeID();
this.data = block.getData();
this.light = block.getLightLevel();
this.chunk = (CraftChunk)block.getChunk();
}
/**
@ -153,8 +153,14 @@ public class CraftBlockState implements BlockState {
synchronized (block) {
if (block.getType() != this.getType()) {
return false;
if (force) {
block.setTypeID(this.getTypeID());
} else {
return false;
}
}
block.setData(data);
}
return true;

View File

@ -1,27 +1,42 @@
package org.bukkit.craftbukkit.block;
import net.minecraft.server.TileEntitySign;
import org.bukkit.Block;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.CraftWorld;
public class CraftSign extends CraftBlockState implements Sign {
public CraftSign(final CraftWorld world, final int x, final int y, final int z, final int type, final byte data) {
super(world, x, y, z, type, data);
private final CraftWorld world;
private final TileEntitySign sign;
public CraftSign(final Block block) {
super(block);
world = (CraftWorld)block.getWorld();
sign = (TileEntitySign)world.getTileEntityAt(getX(), getY(), getZ());
}
public String[] getLines() {
throw new UnsupportedOperationException("Not supported yet.");
return sign.e;
}
public String getLine(int index) throws IndexOutOfBoundsException {
throw new UnsupportedOperationException("Not supported yet.");
return sign.e[index];
}
public void setLine(int index, String line) throws IndexOutOfBoundsException {
throw new UnsupportedOperationException("Not supported yet.");
sign.e[index] = line;
}
@Override
public boolean update(boolean force) {
boolean result = super.update(force);
if (result) {
sign.d();
}
return result;
}
}