Implemented BlockState.update(boolean), signs should now work, cleaned up some code a little
Dieser Commit ist enthalten in:
Ursprung
c9efe94545
Commit
d374bff8d0
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren