/
WorldHelper_v1_11_R1.java
101 lines (82 loc) · 3.52 KB
/
WorldHelper_v1_11_R1.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package net.aufdemrand.denizen.nms.helpers;
import net.aufdemrand.denizen.nms.interfaces.WorldAccess;
import net.aufdemrand.denizen.nms.interfaces.WorldHelper;
import net.aufdemrand.denizen.nms.util.ReflectionHelper;
import net.minecraft.server.v1_11_R1.*;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class WorldHelper_v1_11_R1 implements WorldHelper {
private final Map<World, IWorldAccess> worldAccessMap = new HashMap<World, IWorldAccess>();
@Override
public boolean isStatic(World world) {
return ((CraftWorld) world).getHandle().isClientSide;
}
@Override
public void setStatic(World world, boolean isStatic) {
WorldServer worldServer = ((CraftWorld) world).getHandle();
ReflectionHelper.setFieldValue(net.minecraft.server.v1_11_R1.World.class, "isClientSide", worldServer, isStatic);
}
@Override
public void setWorldAccess(World world, final WorldAccess worldAccess) {
if (worldAccessMap.containsKey(world)) {
removeWorldAccess(world);
}
IWorldAccess nmsWorldAccess = new IWorldAccess() {
@Override
public void a(net.minecraft.server.v1_11_R1.World world, BlockPosition blockPosition, IBlockData iBlockData, IBlockData iBlockData1, int i) {
}
@Override
public void a(BlockPosition blockPosition) {
}
@Override
public void a(int i, int i1, int i2, int i3, int i4, int i5) {
}
@Override
public void a(@Nullable EntityHuman entityHuman, SoundEffect soundEffect, SoundCategory soundCategory, double v, double v1, double v2, float v3, float v4) {
}
@Override
public void a(SoundEffect soundEffect, BlockPosition blockPosition) {
}
@Override
public void a(int i, boolean b, double v, double v1, double v2, double v3, double v4, double v5, int... ints) {
}
@Override
public void a(int i, boolean b, boolean b1, double v, double v1, double v2, double v3, double v4, double v5, int... ints) {
}
@Override
public void a(Entity entity) {
}
@Override
public void b(Entity entity) {
worldAccess.despawn(entity.getBukkitEntity());
}
@Override
public void a(int i, BlockPosition blockPosition, int i1) {
}
@Override
public void a(EntityHuman entityHuman, int i, BlockPosition blockPosition, int i1) {
}
@Override
public void b(int i, BlockPosition blockPosition, int i1) {
}
};
worldAccessMap.put(world, nmsWorldAccess);
((CraftWorld) world).getHandle().addIWorldAccess(nmsWorldAccess);
}
@Override
public void removeWorldAccess(World world) {
if (!worldAccessMap.containsKey(world)) {
return;
}
net.minecraft.server.v1_11_R1.World nmsWorld = ((CraftWorld) world).getHandle();
List<IWorldAccess> list = ReflectionHelper.getFieldValue(net.minecraft.server.v1_11_R1.World.class, "u", nmsWorld);
if (list != null) {
list.remove(worldAccessMap.get(world));
}
worldAccessMap.remove(world);
}
}