summaryrefslogtreecommitdiffstats
path: root/src/main/java/org
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-01-15 00:12:55 +0000
committerDinnerbone <dinnerbone@dinnerbone.com>2011-01-15 19:53:33 +0000
commite4a31ce2069aeaa0c920bbb13bcf51e7ddaeccf5 (patch)
tree4296f2575b8d59a20645b888bb38ce4656339b77 /src/main/java/org
parent55959488a919612ffa80ec856661ce008acfb744 (diff)
downloadcraftbukkit-e4a31ce2069aeaa0c920bbb13bcf51e7ddaeccf5.tar
craftbukkit-e4a31ce2069aeaa0c920bbb13bcf51e7ddaeccf5.tar.gz
craftbukkit-e4a31ce2069aeaa0c920bbb13bcf51e7ddaeccf5.tar.lz
craftbukkit-e4a31ce2069aeaa0c920bbb13bcf51e7ddaeccf5.tar.xz
craftbukkit-e4a31ce2069aeaa0c920bbb13bcf51e7ddaeccf5.zip
Implemented BlockState MaterialData
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java41
1 files changed, 33 insertions, 8 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
index d9ba4deb..cf75291a 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
@@ -8,6 +8,7 @@ import org.bukkit.World;
import org.bukkit.block.BlockState;
import org.bukkit.craftbukkit.CraftChunk;
import org.bukkit.craftbukkit.CraftWorld;
+import org.bukkit.material.MaterialData;
public class CraftBlockState implements BlockState {
private final CraftWorld world;
@@ -16,7 +17,7 @@ public class CraftBlockState implements BlockState {
private final int y;
private final int z;
protected int type;
- protected byte data;
+ protected MaterialData data;
protected byte light;
public CraftBlockState(final Block block) {
@@ -25,9 +26,10 @@ public class CraftBlockState implements BlockState {
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();
+
+ createData(block.getData());
}
/**
@@ -80,9 +82,21 @@ public class CraftBlockState implements BlockState {
*
* @param data New block specific metadata
*/
- public void setData(final byte data) {
- this.data = data;
- world.getHandle().c(x, y, z, data);
+ public void setData(final MaterialData data) {
+ world.getHandle().c(x, y, z, data.getData());
+
+ Material mat = getType();
+
+ if ((mat == null) || (mat.getData() == null)) {
+ this.data = data;
+ } else {
+ if ((data.getClass() == mat.getData()) || (data.getClass() == MaterialData.class)) {
+ this.data = data;
+ } else {
+ throw new IllegalArgumentException("Provided data is not of type "
+ + mat.getData().getName() + ", found " + data.getClass().getName());
+ }
+ }
}
/**
@@ -90,7 +104,7 @@ public class CraftBlockState implements BlockState {
*
* @return block specific metadata
*/
- public byte getData() {
+ public MaterialData getData() {
return data;
}
@@ -111,6 +125,8 @@ public class CraftBlockState implements BlockState {
public void setTypeID(final int type) {
this.type = type;
world.getHandle().e(x, y, z, type);
+
+ createData((byte)0);
}
/**
@@ -148,7 +164,7 @@ public class CraftBlockState implements BlockState {
return update(false);
}
- public boolean update(boolean force) { // TODO
+ public boolean update(boolean force) {
Block block = getBlock();
synchronized (block) {
@@ -160,9 +176,18 @@ public class CraftBlockState implements BlockState {
}
}
- block.setData(data);
+ block.setData(data.getData());
}
return true;
}
+
+ private void createData(final byte data) {
+ Material mat = Material.getMaterial(type);
+ if (mat == null) {
+ this.data = new MaterialData(type, data);
+ } else {
+ this.data = mat.getNewData(data);
+ }
+ }
}