Commits
Dinnerbone authored a69c75bedec
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 | |
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 + | |
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); |