Commits

Dinnerbone authored a69c75bedec
Implemented BLOCK_PHYSICS
No tags

src/net/minecraft/server/WorldServer.java

Modified
1 1 package net.minecraft.server;
2 2
3 3
4 4 import java.io.File;
5 5 import java.util.*;
6 +import org.bukkit.craftbukkit.CraftBlock;
7 +import org.bukkit.craftbukkit.CraftServer;
6 8 import org.bukkit.craftbukkit.CraftWorld;
9 +import org.bukkit.event.Event.Type;
10 +import org.bukkit.event.block.BlockPhysicsEvent;
7 11
8 12
9 13 public class WorldServer extends World {
10 14
11 15 public ChunkProviderServer A;
12 16 public boolean B;
13 17 public boolean C;
14 18 private MinecraftServer D;
15 19 private MCHashTable E;
16 20 private final CraftWorld world; // CraftBukkit
21 + private final CraftServer server; // CraftBukkit
17 22
18 23 public WorldServer(MinecraftServer minecraftserver, File file, String s, int i) {
19 24 super(file, s, (new Random()).nextLong(), WorldProvider.a(i));
20 25 B = false;
21 26 E = new MCHashTable();
22 27 D = minecraftserver;
23 28 world = new CraftWorld(this); // CraftBukkit
29 + server = minecraftserver.server; // CraftBukkit
24 30 }
25 31
26 32 // CraftBukkit start
27 33 @Override
28 34 public boolean c(int i1, int j1, int k1, int l1) {
29 35 boolean result = super.c(i1, j1, k1, l1);
30 36 world.updateBlock(i1, j1, k1);
31 37 return result;
32 38 }
33 39
36 42 boolean result = super.d(i1, j1, k1, l1);
37 43 world.updateBlock(i1, j1, k1);
38 44 return result;
39 45 }
40 46
41 47 public CraftWorld getWorld() {
42 48 return world;
43 49 }
44 50 // CraftBukkit stop
45 51
52 + // CraftBukkit start - note: the following methods are straight from the
53 + // World.java with tweaks as noted. KEEP THEM UPDATED!
54 + @Override
55 + public void g(int i1, int j1, int k1, int l1) {
56 + k(i1 - 1, j1, k1, l1);
57 + k(i1 + 1, j1, k1, l1);
58 + k(i1, j1 - 1, k1, l1);
59 + k(i1, j1 + 1, k1, l1);
60 + k(i1, j1, k1 - 1, l1);
61 + k(i1, j1, k1 + 1, l1);
62 + }
63 +
64 + private void k(int i1, int j1, int k1, int l1) {
65 + if (i || z) {
66 + return;
67 + }
68 + Block block = Block.m[a(i1, j1, k1)];
69 +
70 + if (block != null) {
71 + // CraftBukkit start
72 + BlockPhysicsEvent event = new BlockPhysicsEvent(Type.BLOCK_PHYSICS, world.getBlockAt(f, y, f), l1);
73 + server.getPluginManager().callEvent(event);
74 + if (event.isCancelled()) {
75 + return;
76 + }
77 + // CraftBukkit stop
78 +
79 + block.b(this, i1, j1, k1, l1);
80 + }
81 + }
82 + // CraftBukkit stop
83 +
46 84 public void f() {
47 85 super.f();
48 86 }
49 87
50 88 public void a(Entity entity, boolean flag) {
51 89 if (!D.m && (entity instanceof EntityAnimals)) {
52 90 entity.l();
53 91 }
54 92 if (entity.j == null || !(entity.j instanceof EntityPlayer)) {
55 93 super.a(entity, flag);

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut