From ca4076077eb8514b2e5bbeb315058b12169e7b81 Mon Sep 17 00:00:00 2001 From: Tahg Date: Sat, 19 Feb 2011 10:55:47 -0500 Subject: [PATCH] fixed buttons, plates added yield to explosion added event for chunk unloading --- .../net/minecraft/server/BlockButton.java | 10 ++++++- .../minecraft/server/BlockPressurePlate.java | 12 +++++++- .../minecraft/server/ChunkProviderServer.java | 28 ++++++++++++------- .../java/net/minecraft/server/Explosion.java | 2 +- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockButton.java b/src/main/java/net/minecraft/server/BlockButton.java index 1002c9c901..c79766c4ae 100644 --- a/src/main/java/net/minecraft/server/BlockButton.java +++ b/src/main/java/net/minecraft/server/BlockButton.java @@ -167,7 +167,7 @@ public class BlockButton extends Block { if (j1 == 0) { return true; } else { - //Allow the lever to change the current + //Allow the button to change the current int old = (j1 != 8) ? 1 : 0; int current = (j1 == 8) ? 1 : 0; BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, old, current); @@ -243,6 +243,14 @@ public class BlockButton extends Block { int l = world.getData(i, j, k); if ((l & 8) != 0) { + // Craftbukkit start + CraftWorld craftWorld = ((WorldServer) world).getWorld(); + CraftServer server = ((WorldServer) world).getServer(); + CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k); + BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, 1, 0); + server.getPluginManager().callEvent(eventRedstone); + if(eventRedstone.getNewCurrent() > 0) return; + // Craftbukkit end world.c(i, j, k, l & 7); world.h(i, j, k, this.id); int i1 = l & 7; diff --git a/src/main/java/net/minecraft/server/BlockPressurePlate.java b/src/main/java/net/minecraft/server/BlockPressurePlate.java index 90f0a74925..7fedf6cec8 100644 --- a/src/main/java/net/minecraft/server/BlockPressurePlate.java +++ b/src/main/java/net/minecraft/server/BlockPressurePlate.java @@ -4,7 +4,8 @@ import java.util.List; import java.util.Random; // CraftBukkit start -import org.bukkit.block.BlockFace;import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.block.CraftBlock; import org.bukkit.craftbukkit.entity.CraftLivingEntity; @@ -115,6 +116,15 @@ public class BlockPressurePlate extends Block { flag1 = true; } + // Craftbukkit start + CraftWorld craftWorld = ((WorldServer) world).getWorld(); + CraftServer server = ((WorldServer) world).getServer(); + CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k); + BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, flag ? 1 : 0, flag1 ? 1 : 0); + server.getPluginManager().callEvent(eventRedstone); + flag1 = eventRedstone.getNewCurrent() > 0; + // Craftbukkit end + if (flag1 && !flag) { world.c(i, j, k, 1); world.h(i, j, k, this.id); diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java index 53b69ef311..87beef5755 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -10,15 +10,17 @@ import java.util.Set; // CraftBukkit start import org.bukkit.Location; +import org.bukkit.Server; import org.bukkit.craftbukkit.CraftChunk; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.entity.Player; import org.bukkit.event.Event.Type; import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkUnloadEvent; // CraftBukkit end -public class ChunkProviderServer implements IChunkProvider { - +public class ChunkProviderServer implements IChunkProvider +{ public LongHashset a = new LongHashset(); // CraftBukkit private Chunk b; private IChunkProvider c; @@ -39,7 +41,7 @@ public class ChunkProviderServer implements IChunkProvider { return this.e.containsKey(i, j); } // CraftBukkit end - + public void c(int i, int j) { int k = i * 16 + 8 - this.g.spawnX; int l = j * 16 + 8 - this.g.spawnZ; @@ -197,16 +199,22 @@ public class ChunkProviderServer implements IChunkProvider { public boolean a() { if (!this.g.C) { // CraftBukkit start + Server server = g.getServer(); while (!this.a.isEmpty()) { long chunkcoordinates = this.a.popFirst(); Chunk chunk = e.get(chunkcoordinates); - if (chunk == null) continue; - chunk.e(); - this.b(chunk); - this.a(chunk); - this.a.remove(chunkcoordinates); - this.e.remove(chunkcoordinates); - this.f.remove(chunk); + if (chunk == null) { + continue; + } + ChunkUnloadEvent cue = new ChunkUnloadEvent(Type.CHUNK_UNLOADED, chunk.bukkitChunk); + server.getPluginManager().callEvent(cue); + if (!cue.isCancelled()) { + chunk.e(); + this.b(chunk); + this.a(chunk); + this.e.remove(chunkcoordinates); + this.f.remove(chunk); + } } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java index 3eb7bcc91c..c59cebf1bd 100644 --- a/src/main/java/net/minecraft/server/Explosion.java +++ b/src/main/java/net/minecraft/server/Explosion.java @@ -240,7 +240,7 @@ public class Explosion { } if (i1 > 0) { - Block.byId[i1].a(this.i, j, k, l, this.i.getData(j, k, l), 0.3F); + Block.byId[i1].a(this.i, j, k, l, this.i.getData(j, k, l), event.getYield()); //Modified by Craftbukkit this.i.e(j, k, l, 0); Block.byId[i1].a_(this.i, j, k, l); }