Skip to content

Commit a6b23a9

Browse files
committed
26.1 part 5: initial code updates
1 parent 909187e commit a6b23a9

13 files changed

Lines changed: 42 additions & 57 deletions

File tree

plugin/src/main/java/com/denizenscript/denizen/nms/NMSVersion.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ public enum NMSVersion {
77
v1_18("1.18"),
88
v1_19("1.19"),
99
v1_20("1.20"),
10-
v1_21("1.21");
10+
v1_21("1.21"),
11+
v26_1("26.1");
1112

1213
final String minecraftVersion;
1314

plugin/src/main/java/com/denizenscript/denizen/scripts/containers/core/ItemScriptHelper.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,17 @@ public static void removeDenizenRecipes() {
6060
Iterator<Recipe> recipeIterator = Bukkit.recipeIterator();
6161
ArrayList<NamespacedKey> keys = new ArrayList<>();
6262
while (recipeIterator.hasNext()) {
63-
if (recipeIterator.next() instanceof Keyed keyed && keyed.getKey().getNamespace().equals("denizen")) {
64-
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
65-
keys.add(keyed.getKey());
66-
}
67-
else {
68-
recipeIterator.remove();
63+
try {
64+
if (recipeIterator.next() instanceof Keyed keyed && keyed.getKey().getNamespace().equals("denizen")) {
65+
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
66+
keys.add(keyed.getKey());
67+
}
68+
else {
69+
recipeIterator.remove();
70+
}
6971
}
7072
}
73+
catch (AbstractMethodError ignored) {} // TODO: 26.1: work around Spigot bug
7174
}
7275
if (!keys.isEmpty()) {
7376
NMSHandler.itemHelper.removeRecipes(keys);

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/helpers/AdvancementHelperImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ private static AdvancementHolder asNMSCopy(com.denizenscript.denizen.nms.util.Ad
174174
AdvancementHolder parent = advancement.parent != null
175175
? getNMSAdvancementManager().advancements.get(CraftNamespacedKey.toMinecraft(advancement.parent))
176176
: null;
177-
DisplayInfo display = new DisplayInfo(CraftItemStack.asNMSCopy(advancement.icon),
177+
DisplayInfo display = new DisplayInfo(CraftItemStack.asNMSTemplate(advancement.icon),
178178
Handler.componentToNMS(FormattedTextHelper.parse(advancement.title, ChatColor.WHITE)), Handler.componentToNMS(FormattedTextHelper.parse(advancement.description, ChatColor.WHITE)),
179179
Optional.ofNullable(advancement.background).map(CraftNamespacedKey::toMinecraft).map(ClientAsset.ResourceTexture::new), AdvancementType.valueOf(advancement.frame.name()),
180180
advancement.toast, advancement.announceToChat, advancement.hidden);

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/helpers/BlockHelperImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,11 @@ public void doRandomTick(Location location) {
184184
net.minecraft.world.level.block.state.BlockState nmsBlock = nmsChunk.getBlockState(pos);
185185
ServerLevel nmsWorld = ((CraftWorld) location.getWorld()).getHandle();
186186
if (nmsBlock.isRandomlyTicking()) {
187-
nmsBlock.randomTick(nmsWorld, pos, nmsWorld.random);
187+
nmsBlock.randomTick(nmsWorld, pos, nmsWorld.getRandom());
188188
}
189189
FluidState fluid = nmsBlock.getFluidState();
190190
if (fluid.isRandomlyTicking()) {
191-
fluid.animateTick(nmsWorld, pos, nmsWorld.random);
191+
fluid.animateTick(nmsWorld, pos, nmsWorld.getRandom());
192192
}
193193
}
194194

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/helpers/FishingHelperImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public org.bukkit.inventory.ItemStack getResult(FishHook fishHook, CatchType cat
3737
case DEFAULT -> {
3838
ServerLevel nmsWorld = ((CraftWorld) fishHook.getWorld()).getHandle();
3939
ItemStack nmsFishingRod = nmsHook.getPlayerOwner().getMainHandItem();
40-
float f = nmsWorld.random.nextFloat();
40+
float f = nmsWorld.getRandom().nextFloat();
4141
float i = EnchantmentHelper.getFishingTimeReduction(nmsWorld, nmsFishingRod, nmsHook.getPlayerOwner());
4242
int j = EnchantmentHelper.getFishingLuckBonus(nmsWorld, nmsFishingRod, nmsHook.getPlayerOwner());
4343
float f1 = 0.1F - i * 0.025F - (float) j * 0.01F;
@@ -73,7 +73,7 @@ public ItemStack getRandomReward(FishingHook nmsHook, ResourceKey<LootTable> key
7373
.withParameter(LootContextParams.TOOL, new ItemStack(Items.FISHING_ROD))
7474
.create(LootContextParamSets.FISHING);
7575
List<ItemStack> nmsItems = nmsWorld.getServer().reloadableRegistries().getLootTable(key).getRandomItems(nmsLootParams);
76-
return nmsItems.get(nmsWorld.random.nextInt(nmsItems.size()));
76+
return nmsItems.get(nmsWorld.getRandom().nextInt(nmsItems.size()));
7777
}
7878

7979
@Override

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/helpers/ItemHelperImpl.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import net.minecraft.world.item.component.TypedEntityData;
5353
import net.minecraft.world.item.crafting.*;
5454
import net.minecraft.world.item.crafting.BlastingRecipe;
55+
import net.minecraft.world.item.crafting.CraftingRecipe;
5556
import net.minecraft.world.item.crafting.Recipe;
5657
import net.minecraft.world.item.crafting.ShapelessRecipe;
5758
import net.minecraft.world.item.crafting.SmithingTransformRecipe;
@@ -96,21 +97,20 @@
9697

9798
public class ItemHelperImpl extends ItemHelper {
9899

100+
public static final Recipe.CommonInfo BASE_RECIPE_INFO = new Recipe.CommonInfo(true);
101+
99102
public static net.minecraft.world.item.crafting.RecipeHolder<?> getNMSRecipe(NamespacedKey key) {
100103
ResourceKey<Recipe<?>> nmsKey = ResourceKey.create(Registries.RECIPE, CraftNamespacedKey.toMinecraft(key));
101104
return ((CraftServer) Bukkit.getServer()).getServer().getRecipeManager().byKey(nmsKey).orElse(null);
102105
}
103106

104-
public static final Field Item_components = ReflectionHelper.getFields(Item.class).get("components", DataComponentMap.class);
105-
106107
public static final Field RecipeManager_featureFlagSet = ReflectionHelper.getFields(RecipeManager.class).getFirstOfType(FeatureFlagSet.class);
107108

108109
public void setMaxStackSize(Material material, int size) {
109110
try {
110111
ReflectionHelper.getFinalSetter(Material.class, "maxStack").invoke(material, size);
111-
Item nmsItem = BuiltInRegistries.ITEM.getValue(CraftNamespacedKey.toMinecraft(material.getKey()));
112-
DataComponentMap currentComponents = nmsItem.components();
113-
Item_components.set(nmsItem, DataComponentMap.composite(currentComponents, DataComponentMap.builder().set(DataComponents.MAX_STACK_SIZE, size).build()));
112+
Holder.Reference<Item> nmsItemHolder = BuiltInRegistries.ITEM.get(CraftNamespacedKey.toMinecraft(material.getKey())).orElseThrow();
113+
nmsItemHolder.bindComponents(DataComponentMap.composite(nmsItemHolder.components(), DataComponentMap.builder().set(DataComponents.MAX_STACK_SIZE, size).build()));
114114
}
115115
catch (Throwable ex) {
116116
Debug.echoError(ex);
@@ -211,18 +211,18 @@ public void registerFurnaceRecipe(String keyName, String group, ItemStack result
211211
ResourceKey<Recipe<?>> key = createRecipeKey(keyName);
212212
Ingredient itemRecipe = itemArrayToRecipe(ingredient, exact);
213213
AbstractCookingRecipe recipe;
214-
CookingBookCategory categoryValue = category == null ? CookingBookCategory.MISC : CookingBookCategory.valueOf(CoreUtilities.toUpperCase(category));
214+
AbstractCookingRecipe.CookingBookInfo bookInfo = new AbstractCookingRecipe.CookingBookInfo(category == null ? CookingBookCategory.MISC : CookingBookCategory.valueOf(CoreUtilities.toUpperCase(category)), group);
215215
if (type.equalsIgnoreCase("smoker")) {
216-
recipe = new SmokingRecipe(group, categoryValue, itemRecipe, CraftItemStack.asNMSCopy(result), exp, time);
216+
recipe = new SmokingRecipe(BASE_RECIPE_INFO, bookInfo, itemRecipe, CraftItemStack.asNMSTemplate(result), exp, time);
217217
}
218218
else if (type.equalsIgnoreCase("blast")) {
219-
recipe = new BlastingRecipe(group, categoryValue, itemRecipe, CraftItemStack.asNMSCopy(result), exp, time);
219+
recipe = new BlastingRecipe(BASE_RECIPE_INFO, bookInfo, itemRecipe, CraftItemStack.asNMSTemplate(result), exp, time);
220220
}
221221
else if (type.equalsIgnoreCase("campfire")) {
222-
recipe = new CampfireCookingRecipe(group, categoryValue, itemRecipe, CraftItemStack.asNMSCopy(result), exp, time);
222+
recipe = new CampfireCookingRecipe(BASE_RECIPE_INFO, bookInfo, itemRecipe, CraftItemStack.asNMSTemplate(result), exp, time);
223223
}
224224
else {
225-
recipe = new SmeltingRecipe(group, categoryValue, itemRecipe, CraftItemStack.asNMSCopy(result), exp, time);
225+
recipe = new SmeltingRecipe(BASE_RECIPE_INFO, bookInfo, itemRecipe, CraftItemStack.asNMSTemplate(result), exp, time);
226226
}
227227
RecipeHolder<AbstractCookingRecipe> holder = new RecipeHolder<>(key, recipe);
228228
getRecipeManager().addRecipe(holder);
@@ -232,7 +232,7 @@ else if (type.equalsIgnoreCase("campfire")) {
232232
public void registerStonecuttingRecipe(String keyName, String group, ItemStack result, ItemStack[] ingredient, boolean exact) {
233233
ResourceKey<Recipe<?>> key = createRecipeKey(keyName);
234234
Ingredient itemRecipe = itemArrayToRecipe(ingredient, exact);
235-
StonecutterRecipe recipe = new StonecutterRecipe(group, itemRecipe, CraftItemStack.asNMSCopy(result));
235+
StonecutterRecipe recipe = new StonecutterRecipe(BASE_RECIPE_INFO, itemRecipe, CraftItemStack.asNMSTemplate(result));
236236
RecipeHolder<StonecutterRecipe> holder = new RecipeHolder<>(key, recipe);
237237
getRecipeManager().addRecipe(holder);
238238
}
@@ -243,8 +243,7 @@ public void registerSmithingRecipe(String keyName, ItemStack result, ItemStack[]
243243
Ingredient templateItemRecipe = templateItem.length == 0 ? null : itemArrayToRecipe(templateItem, templateExact);
244244
Ingredient baseItemRecipe = itemArrayToRecipe(baseItem, baseExact);
245245
Ingredient upgradeItemRecipe = itemArrayToRecipe(upgradeItem, upgradeExact);
246-
net.minecraft.world.item.ItemStack nmsCopy = CraftItemStack.asNMSCopy(result);
247-
SmithingTransformRecipe recipe = new SmithingTransformRecipe(Optional.ofNullable(templateItemRecipe), baseItemRecipe, Optional.of(upgradeItemRecipe), new TransmuteResult(nmsCopy.getItemHolder(), nmsCopy.getCount(), nmsCopy.getComponentsPatch()));
246+
SmithingTransformRecipe recipe = new SmithingTransformRecipe(BASE_RECIPE_INFO, Optional.ofNullable(templateItemRecipe), baseItemRecipe, Optional.of(upgradeItemRecipe), CraftItemStack.asNMSTemplate(result));
248247
RecipeHolder<SmithingTransformRecipe> holder = new RecipeHolder<>(key, recipe);
249248
getRecipeManager().addRecipe(holder);
250249
}
@@ -257,8 +256,7 @@ public void registerShapelessRecipe(String keyName, String group, ItemStack resu
257256
for (int i = 0; i < ingredients.size(); i++) {
258257
ingredientList.add(itemArrayToRecipe(ingredients.get(i), exact[i]));
259258
}
260-
// TODO: 1.19.3: Add support for choosing a CraftingBookCategory
261-
ShapelessRecipe recipe = new ShapelessRecipe(group, categoryValue, CraftItemStack.asNMSCopy(result), NonNullList.of(null, ingredientList.toArray(new Ingredient[0])));
259+
ShapelessRecipe recipe = new ShapelessRecipe(BASE_RECIPE_INFO, new CraftingRecipe.CraftingBookInfo(categoryValue, group), CraftItemStack.asNMSTemplate(result), NonNullList.of(null, ingredientList.toArray(new Ingredient[0])));
262260
RecipeHolder<ShapelessRecipe> holder = new RecipeHolder<>(key, recipe);
263261
getRecipeManager().addRecipe(holder);
264262
}

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/helpers/WorldHelperImpl.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.bukkit.Location;
1717
import org.bukkit.World;
1818
import org.bukkit.craftbukkit.CraftWorld;
19+
import org.bukkit.event.world.TimeSkipEvent;
1920

2021
public class WorldHelperImpl implements WorldHelper {
2122

@@ -77,7 +78,8 @@ public boolean isNight(World world) {
7778

7879
@Override
7980
public void setDayTime(World world, long time) {
80-
((CraftWorld) world).getHandle().setDayTime(time);
81+
ServerLevel nmsWorld = ((CraftWorld) world).getHandle();
82+
nmsWorld.dimensionType().defaultClock().ifPresent((clock) -> nmsWorld.clockManager().setTotalTicks(clock, time, TimeSkipEvent.SkipReason.CUSTOM));
8183
}
8284

8385
@Override
@@ -94,17 +96,8 @@ public void wakeUpAllPlayers(World world) {
9496
nmsWorld.getPlayers(LivingEntity::isSleeping).forEach((player) -> player.stopSleepInBed(false, false));
9597
}
9698

97-
// net.minecraft.server.level.ServerLevel#resetWeatherCycle()
9899
@Override
99100
public void clearWeather(World world) {
100-
PrimaryLevelData data = ((CraftWorld) world).getHandle().serverLevelData;
101-
data.setRaining(false);
102-
if (!data.isRaining()) {
103-
data.setRainTime(0);
104-
}
105-
data.setThundering(false);
106-
if (!data.isThundering()) {
107-
data.setThunderTime(0);
108-
}
101+
((CraftWorld) world).getHandle().resetWeatherCycle();
109102
}
110103
}

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/impl/ImprovedOfflinePlayerImpl.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,10 @@ public void setAttributes(AttributeMap attributes) {
145145
protected boolean loadPlayerData(UUID uuid) {
146146
try {
147147
this.player = uuid;
148-
for (org.bukkit.World w : Bukkit.getWorlds()) {
149-
this.file = new File(w.getWorldFolder(), "playerdata" + File.separator + this.player + ".dat");
150-
if (this.file.exists()) {
151-
this.compound = NBTAdapter.toAPI(NbtIo.readCompressed(new FileInputStream(this.file), NbtAccounter.unlimitedHeap()));
152-
return true;
153-
}
148+
this.file = new File(MinecraftServer.getServer().playerDataStorage.getPlayerDir(), this.player + ".dat");
149+
if (this.file.exists()) {
150+
this.compound = NBTAdapter.toAPI(NbtIo.readCompressed(new FileInputStream(this.file), NbtAccounter.unlimitedHeap()));
151+
return true;
154152
}
155153
}
156154
catch (Exception e) {

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/impl/blocks/BlockLightImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static void enqueueRunnable(LevelChunk chunk, Runnable runnable) {
5454
if (lightEngine instanceof ThreadedLevelLightEngine) {
5555
ChunkPos coord = chunk.getPos();
5656
try {
57-
LIGHTENGINETHREADED_QUEUERUNNABLE.invoke(lightEngine, coord.x, coord.z, LIGHTENGINETHREADED_TASKTYPE_PRE, runnable);
57+
LIGHTENGINETHREADED_QUEUERUNNABLE.invoke(lightEngine, coord.x(), coord.z(), LIGHTENGINETHREADED_TASKTYPE_PRE, runnable);
5858
}
5959
catch (Throwable ex) {
6060
Debug.echoError(ex);
@@ -241,7 +241,7 @@ public void sendNearbyChunkUpdates() {
241241
public static void sendNearbyChunkUpdates(LevelChunk chunk) {
242242
ChunkPos pos = chunk.getPos();
243243
for (Vector vec : RELATIVE_CHUNKS) {
244-
ChunkAccess other = chunk.getLevel().getChunk(pos.x + vec.getBlockX(), pos.z + vec.getBlockZ(), ChunkStatus.FULL, false);
244+
ChunkAccess other = chunk.getLevel().getChunk(pos.x() + vec.getBlockX(), pos.z() + vec.getBlockZ(), ChunkStatus.FULL, false);
245245
if (other instanceof LevelChunk) {
246246
sendSingleChunkUpdate((LevelChunk) other);
247247
}

v26_1/src/main/java/com/denizenscript/denizen/nms/v26_1/impl/entities/EntityItemProjectileImpl.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,6 @@ protected void onHitBlock(BlockHitResult movingobjectpositionblock) {
6969
remove(RemovalReason.KILLED);
7070
}
7171

72-
@Override
73-
public void onSyncedDataUpdated(EntityDataAccessor<?> datawatcherobject) {
74-
super.onSyncedDataUpdated(datawatcherobject);
75-
if (ITEM.equals(datawatcherobject)) {
76-
this.getItemStack().setEntityRepresentation(this);
77-
}
78-
}
79-
8072
@Override
8173
public boolean save(ValueOutput nmsValueOutput) {
8274
if (!this.getItemStack().isEmpty()) {

0 commit comments

Comments
 (0)