summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTahg <tahgtahv@gmail.com>2011-02-19 10:55:47 -0500
committerTahg <tahgtahv@gmail.com>2011-02-19 23:44:35 -0500
commitca4076077eb8514b2e5bbeb315058b12169e7b81 (patch)
treed7894677e71eb0a148c93db28ec6580cf6a61bf0
parentd4b67c5549dec7c27b39a27c81299e218b79826f (diff)
downloadcraftbukkit-ca4076077eb8514b2e5bbeb315058b12169e7b81.tar
craftbukkit-ca4076077eb8514b2e5bbeb315058b12169e7b81.tar.gz
craftbukkit-ca4076077eb8514b2e5bbeb315058b12169e7b81.tar.lz
craftbukkit-ca4076077eb8514b2e5bbeb315058b12169e7b81.tar.xz
craftbukkit-ca4076077eb8514b2e5bbeb315058b12169e7b81.zip
fixed buttons, plates
added yield to explosion added event for chunk unloading
-rw-r--r--src/main/java/net/minecraft/server/BlockButton.java10
-rw-r--r--src/main/java/net/minecraft/server/BlockPressurePlate.java12
-rw-r--r--src/main/java/net/minecraft/server/ChunkProviderServer.java28
-rw-r--r--src/main/java/net/minecraft/server/Explosion.java2
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 1002c9c9..c79766c4 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 90f0a749..7fedf6ce 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 53b69ef3..87beef57 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 3eb7bcc9..c59cebf1 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);
}