Skip to content

Commit 514e2fa

Browse files
authored
Update to 1.21.8. Note: this uses Citizens' setEndermanAngry method instead of reimplementing it which is more future-friendly but does increase dependency on Citizens slightly (#412)
1 parent 53b149d commit 514e2fa

3 files changed

Lines changed: 8 additions & 56 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313

1414
<properties>
1515
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16-
<bukkit.version>1.21.3-R0.1-SNAPSHOT</bukkit.version>
17-
<citizens.version>2.0.36-SNAPSHOT</citizens.version>
16+
<bukkit.version>1.21.8-R0.1-SNAPSHOT</bukkit.version>
17+
<citizens.version>2.0.39-SNAPSHOT</citizens.version>
1818
<BUILD_NUMBER>Unknown</BUILD_NUMBER>
1919
</properties>
2020

src/main/java/org/mcmonkey/sentinel/SentinelWeaponHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public class SentinelWeaponHelper extends SentinelHelperObject {
2929

3030
static {
3131
if (SentinelVersionCompat.v1_21) {
32-
LINGERING_POTION = EntityType.POTION;
33-
SPLASH_POTION = EntityType.POTION;
32+
LINGERING_POTION = EntityType.LINGERING_POTION;
33+
SPLASH_POTION = EntityType.SPLASH_POTION;
3434
TIPPED_ARROW = EntityType.ARROW;
3535
}
3636
else if (SentinelVersionCompat.v1_14) {

src/main/java/org/mcmonkey/sentinel/utilities/SentinelNMSHelper.java

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ public class SentinelNMSHelper {
1616

1717
public static MethodHandle CRAFTENTITY_GETHANDLE, NMSENTITY_WORLDGETTER, NMSWORLD_BROADCASTENTITYEFFECT, NMSENTITY_GETDATAWATCHER, DATWATCHER_SET;
1818

19-
public static Object ENTITYENDERMAN_DATAWATCHER_ANGRY;
20-
21-
private static boolean nmsWorks = true, endermanValid = false;
19+
private static boolean nmsWorks = true;
2220

2321
public static MethodHandle INVENTORYCLOSEEVENT_GETVIEW, INVENTORYVIEW_GETTITLE;
2422

@@ -45,57 +43,32 @@ public static void init() {
4543
String bukkitPackageName = Bukkit.getServer().getClass().getPackage().getName();
4644
Class craftEntity = Class.forName(bukkitPackageName + ".entity.CraftEntity");
4745
CRAFTENTITY_GETHANDLE = NMS.getMethodHandle(craftEntity, "getHandle", true);
48-
Class nmsEntity, nmsWorld, nmsDataWatcher, nmsDataWatcherObject, nmsEntityEnderman, nmsHuman, nmsLivingEntity;
49-
String endermanAngryField = null;
46+
Class nmsEntity, nmsWorld, nmsDataWatcher, nmsDataWatcherObject;
5047
String broadcastEffectMethod = "broadcastEntityEffect", dataWatcherSet = "set";
5148
if (SentinelVersionCompat.v1_17) { // 1.17+ - Mojang mappings update
5249
nmsEntity = Class.forName("net.minecraft.world.entity.Entity");
5350
nmsWorld = Class.forName("net.minecraft.world.level.World"); // Level
5451
nmsDataWatcher = Class.forName("net.minecraft.network.syncher.DataWatcher"); // SynchedEntityData
5552
nmsDataWatcherObject = Class.forName("net.minecraft.network.syncher.DataWatcherObject"); // EntityDataAccessor
56-
nmsEntityEnderman = Class.forName("net.minecraft.world.entity.monster.EntityEnderman");
5753
if (SentinelVersionCompat.v1_21 && !SentinelVersionCompat.vFuture) { // 1.21 names
58-
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.21.3
59-
if (getOptionalFieldType(nmsEntityEnderman, "cc") == nmsDataWatcherObject) {
60-
endermanAngryField = "cc"; // net.minecraft.world.entity.monster.EnderMan#DATA_CREEPY
61-
}
62-
else {
63-
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.21
64-
endermanAngryField = "ce"; // net.minecraft.world.entity.monster.EnderMan#DATA_CREEPY
65-
}
6654
broadcastEffectMethod = "a"; // net.minecraft.world.level.Level#broadcastEntityEvent(Entity,byte)
6755
dataWatcherSet = "a"; // net.minecraft.network.syncher.SynchedEntityData#set
6856
}
6957
else if (SentinelVersionCompat.v1_20 && !SentinelVersionCompat.v1_21) { // 1.20 names
70-
try {
71-
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.20.2
72-
if (getOptionalFieldType(nmsEntityEnderman, "bV") == nmsDataWatcherObject) {
73-
endermanAngryField = "bV"; // net.minecraft.world.entity.monster.EnderMan#DATA_CREEPY
74-
}
75-
}
76-
catch (Throwable ex) {
77-
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.20.6
78-
endermanAngryField = "ca"; // net.minecraft.world.entity.monster.EnderMan#DATA_CREEPY
79-
}
8058
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.20.6
8159
broadcastEffectMethod = "a"; // net.minecraft.world.level.Level#broadcastEntityEvent(Entity,byte)
8260
dataWatcherSet = "a"; // net.minecraft.network.syncher.SynchedEntityData#set
8361
}
8462
else if (SentinelVersionCompat.v1_19 && !SentinelVersionCompat.v1_20) { // 1.19.4 names
8563
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.19.4
86-
endermanAngryField = "bU"; // net.minecraft.world.entity.monster.EnderMan#DATA_CREEPY
8764
broadcastEffectMethod = "a"; // net.minecraft.world.level.Level#broadcastEntityEvent(Entity,byte)
8865
dataWatcherSet = "b"; // net.minecraft.network.syncher.SynchedEntityData#set
8966
}
9067
else if (SentinelVersionCompat.v1_18 && !SentinelVersionCompat.v1_19) { // 1.18 names
9168
// https://minidigger.github.io/MiniMappingViewer/#/mojang/server/1.18.2
92-
endermanAngryField = "bX"; // net.minecraft.world.entity.monster.EnderMan#DATA_CREEPY
9369
broadcastEffectMethod = "a"; // net.minecraft.world.level.Level#broadcastEntityEvent(Entity,byte)
9470
dataWatcherSet = "b"; // net.minecraft.network.syncher.SynchedEntityData#set
9571
}
96-
else if (!SentinelVersionCompat.v1_18) { // 1.17 names
97-
endermanAngryField = "bV"; // EnderMan#DATA_CREEPY
98-
}
9972
}
10073
else { // 1.12 through 1.16 - Original Spigot NMS versioned mappings
10174
String packageVersion = bukkitPackageName.substring(bukkitPackageName.lastIndexOf('.') + 1); // Should be like "v1_16_R3"
@@ -104,26 +77,15 @@ else if (!SentinelVersionCompat.v1_18) { // 1.17 names
10477
nmsWorld = Class.forName(nmsPackageName + ".World");
10578
nmsDataWatcher = Class.forName(nmsPackageName + ".DataWatcher");
10679
nmsDataWatcherObject = Class.forName(nmsPackageName + ".DataWatcherObject");
107-
nmsEntityEnderman = Class.forName(nmsPackageName + ".EntityEnderman");
108-
if (SentinelVersionCompat.v1_16) {
109-
endermanAngryField = "bo";
110-
}
11180
}
11281
NMSENTITY_WORLDGETTER = NMS.getFirstGetter(nmsEntity, nmsWorld);
11382
NMSENTITY_GETDATAWATCHER = NMS.getFirstGetter(nmsEntity, nmsDataWatcher);
11483
NMSWORLD_BROADCASTENTITYEFFECT = NMS.getMethodHandle(nmsWorld, broadcastEffectMethod, true, nmsEntity, byte.class);
11584
DATWATCHER_SET = NMS.getMethodHandle(nmsDataWatcher, dataWatcherSet, true, nmsDataWatcherObject, Object.class);
116-
if (endermanAngryField != null && nmsEntityEnderman != null) {
117-
Field dataWatcherAngryField = NMS.getField(nmsEntityEnderman, endermanAngryField);
118-
dataWatcherAngryField.setAccessible(true);
119-
ENTITYENDERMAN_DATAWATCHER_ANGRY = dataWatcherAngryField.get(null);
120-
endermanValid = true;
121-
}
12285
}
12386
catch (Throwable ex) {
12487
ex.printStackTrace();
125-
nmsWorks = false;
126-
endermanValid = false;
88+
nmsWorks = false;
12789
}
12890
}
12991

@@ -143,17 +105,7 @@ public static void animateIronGolemSwing(IronGolem entity) {
143105
}
144106

145107
public static void setEndermanAngry(Enderman entity, boolean angry) {
146-
if (!nmsWorks || !endermanValid) {
147-
return;
148-
}
149-
try {
150-
Object nmsHandle = CRAFTENTITY_GETHANDLE.invoke(entity);
151-
Object dataWatcher = NMSENTITY_GETDATAWATCHER.invoke(nmsHandle);
152-
DATWATCHER_SET.invoke(dataWatcher, ENTITYENDERMAN_DATAWATCHER_ANGRY, angry);
153-
}
154-
catch (Throwable ex) {
155-
endermanValid = false;
156-
}
108+
NMS.setEndermanAngry(entity, angry);
157109
}
158110

159111

0 commit comments

Comments
 (0)