summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/net/minecraft/server/WorldServer.java39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/net/minecraft/server/WorldServer.java b/src/net/minecraft/server/WorldServer.java
index 862fafec..594495b3 100644
--- a/src/net/minecraft/server/WorldServer.java
+++ b/src/net/minecraft/server/WorldServer.java
@@ -3,8 +3,11 @@ package net.minecraft.server;
import java.io.File;
import java.util.*;
+import org.bukkit.craftbukkit.CraftBlock;
+import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.event.Event;
+import org.bukkit.event.block.BlockPhysicsEvent;
public class WorldServer extends World {
@@ -15,6 +18,7 @@ public class WorldServer extends World {
private MinecraftServer D;
private MCHashTable E;
private final CraftWorld world; // CraftBukkit
+ private final CraftServer server; // CraftBukkit
public WorldServer(MinecraftServer minecraftserver, File file, String s, int i) {
super(file, s, (new Random()).nextLong(), WorldProvider.a(i));
@@ -22,6 +26,7 @@ public class WorldServer extends World {
E = new MCHashTable();
D = minecraftserver;
world = new CraftWorld(this); // CraftBukkit
+ server = minecraftserver.server; // CraftBukkit
}
// CraftBukkit start
@@ -44,7 +49,39 @@ public class WorldServer extends World {
}
public void callHook(Event event) {
- D.server.getPluginManager().callEvent(event);
+ server.getPluginManager().callEvent(event);
+ }
+ // CraftBukkit stop
+
+ // CraftBukkit start - note: the following methods are straight from the
+ // World.java with tweaks as noted. KEEP THEM UPDATED!
+ @Override
+ public void g(int i1, int j1, int k1, int l1) {
+ k(i1 - 1, j1, k1, l1);
+ k(i1 + 1, j1, k1, l1);
+ k(i1, j1 - 1, k1, l1);
+ k(i1, j1 + 1, k1, l1);
+ k(i1, j1, k1 - 1, l1);
+ k(i1, j1, k1 + 1, l1);
+ }
+
+ private void k(int i1, int j1, int k1, int l1) {
+ if (i || z) {
+ return;
+ }
+ Block block = Block.m[a(i1, j1, k1)];
+
+ if (block != null) {
+ // CraftBukkit start
+ BlockPhysicsEvent event = new BlockPhysicsEvent(Event.Type.BLOCK_PHYSICS, world.getBlockAt(i1, j1, k1), l1);
+ server.getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return;
+ }
+ // CraftBukkit stop
+
+ block.b(this, i1, j1, k1, l1);
+ }
}
// CraftBukkit stop