summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorEvilSeph <evilseph@unaligned.org>2011-06-30 13:51:42 -0400
committerEvilSeph <evilseph@unaligned.org>2011-06-30 13:51:42 -0400
commitb53029975978541e442beedbc369d890872cf2b8 (patch)
tree45fe5bb5599f6948858feb921e29b615b9c37cca /src/main/java
parent1e209e8e11303abd42a155b48f84fb8239e4a1e7 (diff)
downloadcraftbukkit-b53029975978541e442beedbc369d890872cf2b8.tar
craftbukkit-b53029975978541e442beedbc369d890872cf2b8.tar.gz
craftbukkit-b53029975978541e442beedbc369d890872cf2b8.tar.lz
craftbukkit-b53029975978541e442beedbc369d890872cf2b8.tar.xz
craftbukkit-b53029975978541e442beedbc369d890872cf2b8.zip
Made trapdoors fire BlockRedstone events.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/BlockTrapdoor.java188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/BlockTrapdoor.java b/src/main/java/net/minecraft/server/BlockTrapdoor.java
new file mode 100644
index 00000000..0e39d4c7
--- /dev/null
+++ b/src/main/java/net/minecraft/server/BlockTrapdoor.java
@@ -0,0 +1,188 @@
+package net.minecraft.server;
+
+import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
+
+public class BlockTrapdoor extends Block {
+
+ protected BlockTrapdoor(int i, Material material) {
+ super(i, material);
+ this.textureId = 84;
+ if (material == Material.ORE) {
+ ++this.textureId;
+ }
+
+ float f = 0.5F;
+ float f1 = 1.0F;
+
+ this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f);
+ }
+
+ public boolean a() {
+ return false;
+ }
+
+ public boolean b() {
+ return false;
+ }
+
+ public AxisAlignedBB e(World world, int i, int j, int k) {
+ this.a(world, i, j, k);
+ return super.e(world, i, j, k);
+ }
+
+ public void a(IBlockAccess iblockaccess, int i, int j, int k) {
+ this.c(iblockaccess.getData(i, j, k));
+ }
+
+ public void c(int i) {
+ float f = 0.1875F;
+
+ this.a(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F);
+ if (d(i)) {
+ if ((i & 3) == 0) {
+ this.a(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
+ }
+
+ if ((i & 3) == 1) {
+ this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);
+ }
+
+ if ((i & 3) == 2) {
+ this.a(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+ if ((i & 3) == 3) {
+ this.a(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);
+ }
+ }
+ }
+
+ public void b(World world, int i, int j, int k, EntityHuman entityhuman) {
+ this.interact(world, i, j, k, entityhuman);
+ }
+
+ public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) {
+ if (this.material == Material.ORE) {
+ return true;
+ } else {
+ int l = world.getData(i, j, k);
+
+ world.setData(i, j, k, l ^ 4);
+ world.a(entityhuman, 1003, i, j, k, 0);
+ return true;
+ }
+ }
+
+ public void a(World world, int i, int j, int k, boolean flag) {
+ int l = world.getData(i, j, k);
+ boolean flag1 = (l & 4) > 0;
+
+ if (flag1 != flag) {
+ world.setData(i, j, k, l ^ 4);
+ world.a((EntityHuman) null, 1003, i, j, k, 0);
+ }
+ }
+
+ public void doPhysics(World world, int i, int j, int k, int l) {
+ if (!world.isStatic) {
+ int i1 = world.getData(i, j, k);
+ int j1 = i;
+ int k1 = k;
+
+ if ((i1 & 3) == 0) {
+ k1 = k + 1;
+ }
+
+ if ((i1 & 3) == 1) {
+ --k1;
+ }
+
+ if ((i1 & 3) == 2) {
+ j1 = i + 1;
+ }
+
+ if ((i1 & 3) == 3) {
+ --j1;
+ }
+
+ if (!world.e(j1, j, k1)) {
+ world.setTypeId(i, j, k, 0);
+ this.g(world, i, j, k, i1);
+ }
+
+ // CraftBukkit start
+ if (l > 0 && Block.byId[l] != null && Block.byId[l].isPowerSource()) {
+ org.bukkit.World bworld = world.getWorld();
+ org.bukkit.block.Block block = bworld.getBlockAt(i, j, k);
+
+ int power = block.getBlockPower();
+ int oldPower = (world.getData(i, j, k) & 4) > 0 ? 15 : 0;
+
+ if (oldPower == 0 ^ power == 0) {
+ BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, oldPower, power);
+ world.getServer().getPluginManager().callEvent(eventRedstone);
+
+ this.a(world, i, j, k, eventRedstone.getNewCurrent() > 0);
+ }
+ // CraftBukkit end
+ }
+ }
+ }
+
+ public MovingObjectPosition a(World world, int i, int j, int k, Vec3D vec3d, Vec3D vec3d1) {
+ this.a(world, i, j, k);
+ return super.a(world, i, j, k, vec3d, vec3d1);
+ }
+
+ public void postPlace(World world, int i, int j, int k, int l) {
+ byte b0 = 0;
+
+ if (l == 2) {
+ b0 = 0;
+ }
+
+ if (l == 3) {
+ b0 = 1;
+ }
+
+ if (l == 4) {
+ b0 = 2;
+ }
+
+ if (l == 5) {
+ b0 = 3;
+ }
+
+ world.setData(i, j, k, b0);
+ }
+
+ public boolean canPlace(World world, int i, int j, int k, int l) {
+ if (l == 0) {
+ return false;
+ } else if (l == 1) {
+ return false;
+ } else {
+ if (l == 2) {
+ ++k;
+ }
+
+ if (l == 3) {
+ --k;
+ }
+
+ if (l == 4) {
+ ++i;
+ }
+
+ if (l == 5) {
+ --i;
+ }
+
+ return world.e(i, j, k);
+ }
+ }
+
+ public static boolean d(int i) {
+ return (i & 4) != 0;
+ }
+}