Skip to content

Commit 52b085b

Browse files
committed
v9.4.0
1 parent f2be889 commit 52b085b

File tree

5 files changed

+119
-16
lines changed

5 files changed

+119
-16
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.github.cryptomorin</groupId>
88
<artifactId>XSeries</artifactId>
9-
<version>9.3.1</version>
9+
<version>9.4.0</version>
1010

1111
<name>XSeries</name>
1212
<description>A set of utilities for Minecraft plugins</description>
@@ -68,7 +68,7 @@
6868

6969
<properties>
7070
<!-- Latest version -->
71-
<spigotVersion>1.19.4-R0.1-SNAPSHOT</spigotVersion>
71+
<spigotVersion>1.20-R0.1-SNAPSHOT</spigotVersion>
7272
</properties>
7373

7474
<dependencies>

src/main/java/com/cryptomorin/xseries/NMSExtras.java

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
package com.cryptomorin.xseries;
2323

2424
import org.bukkit.Chunk;
25+
import org.bukkit.DyeColor;
2526
import org.bukkit.Location;
2627
import org.bukkit.Material;
2728
import org.bukkit.block.Block;
@@ -44,7 +45,7 @@
4445
* All the parameters are non-null.
4546
*
4647
* @author Crypto Morin
47-
* @version 5.2.1
48+
* @version 5.3.0
4849
*/
4950
public final class NMSExtras {
5051
public static final MethodHandle EXP_PACKET;
@@ -62,7 +63,8 @@ public final class NMSExtras {
6263
public static final MethodHandle PLAY_BLOCK_ACTION;
6364
public static final MethodHandle GET_BUKKIT_ENTITY;
6465
public static final MethodHandle GET_BLOCK_TYPE;
65-
public static final MethodHandle GET_BLOCK, GET_IBLOCK_DATA, SANITIZE_LINES, TILE_ENTITY_SIGN, TILE_ENTITY_SIGN__GET_UPDATE_PACKET, TILE_ENTITY_SIGN__SET_LINE;
66+
public static final MethodHandle GET_BLOCK, GET_IBLOCK_DATA, SANITIZE_LINES, TILE_ENTITY_SIGN,
67+
TILE_ENTITY_SIGN__GET_UPDATE_PACKET, TILE_ENTITY_SIGN__SET_LINE, SIGN_TEXT;
6668

6769
public static final Class<?>
6870
MULTI_BLOCK_CHANGE_INFO_CLASS = null, // getNMSClass("PacketPlayOutMultiBlockChange$MultiBlockChangeInfo")
@@ -89,7 +91,7 @@ public final class NMSExtras {
8991
MethodHandle getBlock = null;
9092
MethodHandle getIBlockData = null;
9193
MethodHandle sanitizeLines = null;
92-
MethodHandle tileEntitySign = null, tileEntitySign_getUpdatePacket = null, tileEntitySign_setLine = null;
94+
MethodHandle tileEntitySign = null, tileEntitySign_getUpdatePacket = null, tileEntitySign_setLine = null, signText = null;
9395

9496
MethodHandle playOutMultiBlockChange = null, multiBlockChangeInfo = null, chunkWrapper = null, chunkWrapperSet = null,
9597
shortsOrInfo = null, setBlockData = null;
@@ -200,7 +202,9 @@ public final class NMSExtras {
200202
getBlock = lookup.findVirtual(BLOCK_DATA, v(18, "b").orElse("getBlock"), MethodType.methodType(block));
201203
playBlockAction = lookup.findVirtual(world, v(18, "a").orElse("playBlockAction"), MethodType.methodType(void.class, blockPos, block, int.class, int.class));
202204

203-
signEditorPacket = lookup.findConstructor(signOpenPacket, MethodType.methodType(void.class, blockPos));
205+
signEditorPacket = lookup.findConstructor(signOpenPacket,
206+
v(20, MethodType.methodType(void.class, blockPos, boolean.class))
207+
.orElse(MethodType.methodType(void.class, blockPos)));
204208
if (supports(17)) {
205209
packetPlayOutBlockChange = lookup.findConstructor(packetPlayOutBlockChangeClass, MethodType.methodType(void.class, blockPos, BLOCK_DATA));
206210
getIBlockData = lookup.findStatic(CraftMagicNumbers, "getBlock", MethodType.methodType(BLOCK_DATA, Material.class, byte.class));
@@ -209,9 +213,24 @@ public final class NMSExtras {
209213

210214
tileEntitySign = lookup.findConstructor(TileEntitySign, MethodType.methodType(void.class, blockPos, BLOCK_DATA));
211215
tileEntitySign_getUpdatePacket = lookup.findVirtual(TileEntitySign,
212-
v(19, "f").v(18, "c").orElse("getUpdatePacket"),
216+
v(20, "j").v(19, "f").v(18, "c").orElse("getUpdatePacket"),
213217
MethodType.methodType(PacketPlayOutTileEntityData));
214-
tileEntitySign_setLine = lookup.findVirtual(TileEntitySign, "a", MethodType.methodType(void.class, int.class, IChatBaseComponent, IChatBaseComponent));
218+
219+
if (supports(20)) {
220+
Class<?> SignText = getNMSClass("world.level.block.entity.SignText");
221+
// public boolean a(SignText signtext, boolean flag) {
222+
// return flag ? this.c(signtext) : this.b(signtext);
223+
// }
224+
tileEntitySign_setLine = lookup.findVirtual(TileEntitySign, "a", MethodType.methodType(boolean.class, SignText, boolean.class));
225+
226+
// public SignText(net.minecraft.network.chat.IChatBaseComponent[] var0, IChatBaseComponent[] var1,
227+
// EnumColor var2, boolean var3) {
228+
Class<?> EnumColor = getNMSClass("world.item.EnumColor");
229+
signText = lookup.findConstructor(SignText, MethodType.methodType(void.class,
230+
IChatBaseComponent.arrayType(), IChatBaseComponent.arrayType(), EnumColor, boolean.class));
231+
} else {
232+
tileEntitySign_setLine = lookup.findVirtual(TileEntitySign, "a", MethodType.methodType(void.class, int.class, IChatBaseComponent, IChatBaseComponent));
233+
}
215234
}
216235
} catch (NoSuchMethodException | IllegalAccessException | NoSuchFieldException ex) {
217236
ex.printStackTrace();
@@ -247,6 +266,7 @@ public final class NMSExtras {
247266
CHUNK_WRAPPER_SET = chunkWrapperSet;
248267
SHORTS_OR_INFO = shortsOrInfo;
249268
SET_BLOCK_DATA = setBlockData;
269+
SIGN_TEXT = signText;
250270
}
251271

252272
private NMSExtras() {
@@ -387,7 +407,7 @@ protected static void sendBlockChange(Player player, Chunk chunk, Map<WorldlessB
387407
/**
388408
* Currently only supports 1.17
389409
*/
390-
public static void openSign(Player player, String[] lines) {
410+
public static void openSign(Player player, DyeColor textColor, String[] lines, boolean frontSide) {
391411
try {
392412
Location loc = player.getLocation();
393413
Object position = BLOCK_POSITION.invoke(loc.getBlockX(), 1, loc.getBlockY());
@@ -396,13 +416,32 @@ public static void openSign(Player player, String[] lines) {
396416

397417
Object components = SANITIZE_LINES.invoke((Object[]) lines);
398418
Object tileSign = TILE_ENTITY_SIGN.invoke(position, signBlockData);
399-
for (int i = 0; i < lines.length; i++) {
400-
Object component = java.lang.reflect.Array.get(components, i);
401-
TILE_ENTITY_SIGN__SET_LINE.invoke(tileSign, i, component, component);
419+
if (supports(20)) {
420+
// When can we use this without blocks... player.openSign();
421+
Class<?> EnumColor = ReflectionUtils.getNMSClass("world.item.EnumColor");
422+
Object enumColor = null;
423+
for (Field field : EnumColor.getFields()) {
424+
Object color = field.get(null);
425+
String colorName = (String) EnumColor.getDeclaredMethod("b").invoke(color); // gets its name
426+
if (textColor.name().equalsIgnoreCase(colorName)) {
427+
enumColor = color;
428+
break;
429+
}
430+
}
431+
432+
Object signText = SIGN_TEXT.invoke(components, components, enumColor, frontSide);
433+
TILE_ENTITY_SIGN__SET_LINE.invoke(signText, true);
434+
} else {
435+
for (int i = 0; i < lines.length; i++) {
436+
Object component = java.lang.reflect.Array.get(components, i);
437+
TILE_ENTITY_SIGN__SET_LINE.invoke(tileSign, i, component, component);
438+
}
402439
}
403440
Object signLinesUpdatePacket = TILE_ENTITY_SIGN__GET_UPDATE_PACKET.invoke(tileSign);
404441

405-
Object signPacket = PACKET_PLAY_OUT_OPEN_SIGN_EDITOR.invoke(position);
442+
Object signPacket =
443+
v(20, PACKET_PLAY_OUT_OPEN_SIGN_EDITOR.invoke(position, true))
444+
.orElse(PACKET_PLAY_OUT_OPEN_SIGN_EDITOR.invoke(position));
406445

407446
sendPacket(player, blockChangePacket, signLinesUpdatePacket, signPacket);
408447
} catch (Throwable x) {

src/main/java/com/cryptomorin/xseries/ReflectionUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ public final class ReflectionUtils {
133133
throw new RuntimeException("Failed to parse minor number: " + minorVer + ' ' + getVersionInformation(), ex);
134134
}
135135

136-
// Don't use \d, it'd also match negative number (if it somehow ever happened?)
137-
Matcher bukkitVer = Pattern.compile("^[0-9]+\\.[0-9]+\\.([0-9]+)").matcher(Bukkit.getBukkitVersion());
136+
// Bukkit.getBukkitVersion() = "1.12.2-R0.1-SNAPSHOT"
137+
Matcher bukkitVer = Pattern.compile("^\\d+\\.\\d+\\.(\\d+)").matcher(Bukkit.getBukkitVersion());
138138
if (bukkitVer.find()) { // matches() won't work, we just want to match the start using "^"
139139
try {
140140
// group(0) gives the whole matched string, we just want the captured group.

src/main/java/com/cryptomorin/xseries/XMaterial.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,12 @@ public enum XMaterial {
104104
ANDESITE_SLAB,
105105
ANDESITE_STAIRS,
106106
ANDESITE_WALL,
107+
ANGLER_POTTERY_SHERD,
107108
ANVIL,
108109
APPLE,
110+
ARCHER_POTTERY_SHERD,
109111
ARMOR_STAND,
112+
ARMS_UP_POTTERY_SHERD,
110113
ARROW,
111114
ATTACHED_MELON_STEM(7, "MELON_STEM"),
112115
ATTACHED_PUMPKIN_STEM(7, "PUMPKIN_STEM"),
@@ -198,6 +201,7 @@ public enum XMaterial {
198201
BLACK_TERRACOTTA(15, "STAINED_CLAY"),
199202
BLACK_WALL_BANNER("WALL_BANNER"),
200203
BLACK_WOOL(15, "WOOL"),
204+
BLADE_POTTERY_SHERD,
201205
BLAST_FURNACE,
202206
BLAZE_POWDER,
203207
BLAZE_ROD,
@@ -231,6 +235,7 @@ public enum XMaterial {
231235
BRAIN_CORAL_FAN,
232236
BRAIN_CORAL_WALL_FAN,
233237
BREAD,
238+
BREWER_POTTERY_SHERD,
234239
BREWING_STAND("BREWING_STAND", "BREWING_STAND_ITEM"),
235240
BRICK("CLAY_BRICK"),
236241
BRICKS("BRICK"),
@@ -263,9 +268,11 @@ public enum XMaterial {
263268
BUCKET,
264269
BUDDING_AMETHYST,
265270
BUNDLE,
271+
BURN_POTTERY_SHERD,
266272
CACTUS,
267273
CAKE("CAKE_BLOCK"),
268274
CALCITE,
275+
CALIBRATED_SCULK_SENSOR,
269276
CAMEL_SPAWN_EGG,
270277
CAMPFIRE,
271278
CANDLE,
@@ -430,6 +437,7 @@ public enum XMaterial {
430437
CYAN_WOOL(9, "WOOL"),
431438
DAMAGED_ANVIL(2, "ANVIL"),
432439
DANDELION("YELLOW_FLOWER"),
440+
DANGER_POTTERY_SHERD,
433441
DARK_OAK_BOAT("BOAT_DARK_OAK"),
434442
DARK_OAK_BUTTON("WOOD_BUTTON"),
435443
DARK_OAK_CHEST_BOAT,
@@ -558,6 +566,7 @@ public enum XMaterial {
558566
END_STONE_BRICK_WALL,
559567
EVOKER_SPAWN_EGG(34, "MONSTER_EGG"),
560568
EXPERIENCE_BOTTLE("EXP_BOTTLE"),
569+
EXPLORER_POTTERY_SHERD,
561570
EXPOSED_COPPER,
562571
EXPOSED_CUT_COPPER,
563572
EXPOSED_CUT_COPPER_SLAB,
@@ -591,6 +600,7 @@ public enum XMaterial {
591600
FLOWER_BANNER_PATTERN,
592601
FLOWER_POT("FLOWER_POT", "FLOWER_POT_ITEM"),
593602
FOX_SPAWN_EGG,
603+
FRIEND_POTTERY_SHERD,
594604
FROGSPAWN,
595605
FROG_SPAWN_EGG,
596606
/**
@@ -678,7 +688,9 @@ public enum XMaterial {
678688
GUNPOWDER("SULPHUR"),
679689
HANGING_ROOTS,
680690
HAY_BLOCK,
691+
HEARTBREAK_POTTERY_SHERD,
681692
HEART_OF_THE_SEA,
693+
HEART_POTTERY_SHERD,
682694
HEAVY_WEIGHTED_PRESSURE_PLATE("IRON_PLATE"),
683695
HOGLIN_SPAWN_EGG("MONSTER_EGG"),
684696
HONEYCOMB,
@@ -692,6 +704,8 @@ public enum XMaterial {
692704
HORN_CORAL_FAN,
693705
HORN_CORAL_WALL_FAN,
694706
HORSE_SPAWN_EGG(100, "MONSTER_EGG"),
707+
HOST_ARMOR_TRIM_SMITHING_TEMPLATE,
708+
HOWL_POTTERY_SHERD,
695709
HUSK_SPAWN_EGG(23, "MONSTER_EGG"),
696710
ICE,
697711
INFESTED_CHISELED_STONE_BRICKS(5, "MONSTER_EGGS"),
@@ -882,6 +896,7 @@ public enum XMaterial {
882896
MELON_STEM,
883897
MILK_BUCKET,
884898
MINECART,
899+
MINER_POTTERY_SHERD,
885900
MOJANG_BANNER_PATTERN,
886901
MOOSHROOM_SPAWN_EGG(96, "MONSTER_EGG"),
887902
MOSSY_COBBLESTONE,
@@ -894,6 +909,7 @@ public enum XMaterial {
894909
MOSSY_STONE_BRICK_WALL,
895910
MOSS_BLOCK,
896911
MOSS_CARPET,
912+
MOURNER_POTTERY_SHERD,
897913
MOVING_PISTON("PISTON_MOVING_PIECE"),
898914
MUD,
899915
MUDDY_MANGROVE_ROOTS,
@@ -915,6 +931,7 @@ public enum XMaterial {
915931
MUSIC_DISC_MELLOHI("RECORD_7"),
916932
MUSIC_DISC_OTHERSIDE,
917933
MUSIC_DISC_PIGSTEP,
934+
MUSIC_DISC_RELIC,
918935
MUSIC_DISC_STAL("RECORD_8"),
919936
MUSIC_DISC_STRAD("RECORD_9"),
920937
MUSIC_DISC_WAIT("RECORD_12"),
@@ -1037,8 +1054,12 @@ public enum XMaterial {
10371054
PINK_WOOL(6, "WOOL"),
10381055
PISTON("PISTON_BASE"),
10391056
PISTON_HEAD("PISTON_EXTENSION"),
1057+
PITCHER_CROP,
1058+
PITCHER_PLANT,
1059+
PITCHER_POD,
10401060
PLAYER_HEAD(3, "SKULL", "SKULL_ITEM"),
10411061
PLAYER_WALL_HEAD(3, "SKULL", "SKULL_ITEM"),
1062+
PLENTY_POTTERY_SHERD,
10421063
PODZOL(2, "DIRT"),
10431064
POINTED_DRIPSTONE,
10441065
POISONOUS_POTATO,
@@ -1124,6 +1145,7 @@ public enum XMaterial {
11241145
PRISMARINE_SLAB,
11251146
PRISMARINE_STAIRS,
11261147
PRISMARINE_WALL,
1148+
PRIZE_POTTERY_SHERD,
11271149
PUFFERFISH(3, "RAW_FISH"),
11281150
PUFFERFISH_BUCKET,
11291151
PUFFERFISH_SPAWN_EGG,
@@ -1162,6 +1184,7 @@ public enum XMaterial {
11621184
RABBIT_SPAWN_EGG(101, "MONSTER_EGG"),
11631185
RABBIT_STEW,
11641186
RAIL("RAILS"),
1187+
RAISER_ARMOR_TRIM_SMITHING_TEMPLATE,
11651188
RAVAGER_SPAWN_EGG,
11661189
RAW_COPPER,
11671190
RAW_COPPER_BLOCK,
@@ -1250,19 +1273,24 @@ public enum XMaterial {
12501273
SEA_LANTERN,
12511274
SEA_PICKLE,
12521275
SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE,
1276+
SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE,
1277+
SHEAF_POTTERY_SHERD,
12531278
SHEARS,
12541279
SHEEP_SPAWN_EGG(91, "MONSTER_EGG"),
1280+
SHELTER_POTTERY_SHERD,
12551281
SHIELD,
12561282
SHROOMLIGHT,
12571283
SHULKER_BOX("PURPLE_SHULKER_BOX"),
12581284
SHULKER_SHELL,
12591285
SHULKER_SPAWN_EGG(69, "MONSTER_EGG"),
1286+
SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE,
12601287
SILVERFISH_SPAWN_EGG(60, "MONSTER_EGG"),
12611288
SKELETON_HORSE_SPAWN_EGG(28, "MONSTER_EGG"),
12621289
SKELETON_SKULL("SKULL", "SKULL_ITEM"),
12631290
SKELETON_SPAWN_EGG(51, "MONSTER_EGG"),
12641291
SKELETON_WALL_SKULL("SKULL", "SKULL_ITEM"),
12651292
SKULL_BANNER_PATTERN,
1293+
SKULL_POTTERY_SHERD,
12661294
SLIME_BALL,
12671295
SLIME_BLOCK,
12681296
SLIME_SPAWN_EGG(55, "MONSTER_EGG"),
@@ -1282,7 +1310,9 @@ public enum XMaterial {
12821310
SMOOTH_SANDSTONE_STAIRS,
12831311
SMOOTH_STONE,
12841312
SMOOTH_STONE_SLAB,
1313+
SNIFFER_EGG,
12851314
SNIFFER_SPAWN_EGG,
1315+
SNORT_POTTERY_SHERD,
12861316
SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE,
12871317
SNOW,
12881318
SNOWBALL("SNOW_BALL"),
@@ -1377,6 +1407,7 @@ public enum XMaterial {
13771407
*/
13781408
SUGAR_CANE("SUGAR_CANE_BLOCK"),
13791409
SUNFLOWER("DOUBLE_PLANT"),
1410+
SUSPICIOUS_GRAVEL,
13801411
SUSPICIOUS_SAND,
13811412
SUSPICIOUS_STEW,
13821413
SWEET_BERRIES,
@@ -1476,6 +1507,7 @@ public enum XMaterial {
14761507
WAXED_WEATHERED_CUT_COPPER,
14771508
WAXED_WEATHERED_CUT_COPPER_SLAB,
14781509
WAXED_WEATHERED_CUT_COPPER_STAIRS,
1510+
WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE,
14791511
WEATHERED_COPPER,
14801512
WEATHERED_CUT_COPPER,
14811513
WEATHERED_CUT_COPPER_SLAB,

0 commit comments

Comments
 (0)