@@ -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