Skip to content

Commit 4af9ecd

Browse files
authored
feat: lazily resolve NBT on items (#3247)
- closes #3238
1 parent d46d752 commit 4af9ecd

File tree

7 files changed

+21
-12
lines changed

7 files changed

+21
-12
lines changed

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.sk89q.worldedit.registry.state.Property;
3737
import com.sk89q.worldedit.util.Direction;
3838
import com.sk89q.worldedit.util.SideEffect;
39+
import com.sk89q.worldedit.util.concurrency.LazyReference;
3940
import com.sk89q.worldedit.util.formatting.text.Component;
4041
import com.sk89q.worldedit.world.RegenOptions;
4142
import com.sk89q.worldedit.world.biome.BiomeType;
@@ -550,7 +551,8 @@ protected ServerLevel getServerLevel(final World world) {
550551
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
551552
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
552553
final BaseItemStack weStack = new BaseItemStack(BukkitAdapter.asItemType(itemStack.getType()), itemStack.getAmount());
553-
weStack.setNbt(((LinCompoundTag) toNativeLin(nmsStack.getTag())));
554+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
555+
weStack.setNbtReference(LazyReference.from(() -> ((LinCompoundTag) toNativeLin(nmsStack.getTag()))));
554556
return weStack;
555557
}
556558

worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.sk89q.worldedit.registry.state.Property;
3636
import com.sk89q.worldedit.util.Direction;
3737
import com.sk89q.worldedit.util.SideEffect;
38+
import com.sk89q.worldedit.util.concurrency.LazyReference;
3839
import com.sk89q.worldedit.util.formatting.text.Component;
3940
import com.sk89q.worldedit.world.RegenOptions;
4041
import com.sk89q.worldedit.world.biome.BiomeType;
@@ -548,7 +549,8 @@ protected ServerLevel getServerLevel(final World world) {
548549
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
549550
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
550551
final BaseItemStack weStack = new BaseItemStack(BukkitAdapter.asItemType(itemStack.getType()), itemStack.getAmount());
551-
weStack.setNbt(((LinCompoundTag) toNativeLin(nmsStack.getTag())));
552+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
553+
weStack.setNbtReference(LazyReference.from(() -> ((LinCompoundTag) toNativeLin(nmsStack.getTag()))));
552554
return weStack;
553555
}
554556

worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,13 +565,14 @@ protected ServerLevel getServerLevel(final World world) {
565565
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
566566
final RegistryAccess.Frozen registryAccess = DedicatedServer.getServer().registryAccess();
567567
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
568-
final net.minecraft.nbt.Tag tag = COMPONENTS_CODEC.encodeStart(
568+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
569+
final Supplier<net.minecraft.nbt.Tag> tag = () -> COMPONENTS_CODEC.encodeStart(
569570
registryAccess.createSerializationContext(NbtOps.INSTANCE),
570571
nmsStack.getComponentsPatch()
571572
).getOrThrow();
572573
return new BaseItemStack(
573574
BukkitAdapter.asItemType(itemStack.getType()),
574-
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag)),
575+
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag.get())),
575576
itemStack.getAmount()
576577
);
577578
}

worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,13 +565,14 @@ protected ServerLevel getServerLevel(final World world) {
565565
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
566566
final RegistryAccess.Frozen registryAccess = DedicatedServer.getServer().registryAccess();
567567
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
568-
final net.minecraft.nbt.Tag tag = COMPONENTS_CODEC.encodeStart(
568+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
569+
final Supplier<net.minecraft.nbt.Tag> tag = () -> COMPONENTS_CODEC.encodeStart(
569570
registryAccess.createSerializationContext(NbtOps.INSTANCE),
570571
nmsStack.getComponentsPatch()
571572
).getOrThrow();
572573
return new BaseItemStack(
573574
BukkitAdapter.asItemType(itemStack.getType()),
574-
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag)),
575+
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag.get())),
575576
itemStack.getAmount()
576577
);
577578
}

worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -549,13 +549,14 @@ protected ServerLevel getServerLevel(final World world) {
549549
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
550550
final RegistryAccess.Frozen registryAccess = DedicatedServer.getServer().registryAccess();
551551
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
552-
final net.minecraft.nbt.Tag tag = COMPONENTS_CODEC.encodeStart(
552+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
553+
final Supplier<net.minecraft.nbt.Tag> tag = () -> COMPONENTS_CODEC.encodeStart(
553554
registryAccess.createSerializationContext(NbtOps.INSTANCE),
554555
nmsStack.getComponentsPatch()
555556
).getOrThrow();
556557
return new BaseItemStack(
557558
BukkitAdapter.asItemType(itemStack.getType()),
558-
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag)),
559+
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag.get())),
559560
itemStack.getAmount()
560561
);
561562
}

worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -549,13 +549,14 @@ protected ServerLevel getServerLevel(final World world) {
549549
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
550550
final RegistryAccess.Frozen registryAccess = DedicatedServer.getServer().registryAccess();
551551
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
552-
final net.minecraft.nbt.Tag tag = COMPONENTS_CODEC.encodeStart(
552+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
553+
final Supplier<net.minecraft.nbt.Tag> tag = () -> COMPONENTS_CODEC.encodeStart(
553554
registryAccess.createSerializationContext(NbtOps.INSTANCE),
554555
nmsStack.getComponentsPatch()
555556
).getOrThrow();
556557
return new BaseItemStack(
557558
BukkitAdapter.asItemType(itemStack.getType()),
558-
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag)),
559+
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag.get())),
559560
itemStack.getAmount()
560561
);
561562
}

worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,13 +559,14 @@ protected ServerLevel getServerLevel(final World world) {
559559
public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) {
560560
final RegistryAccess.Frozen registryAccess = DedicatedServer.getServer().registryAccess();
561561
final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
562-
final net.minecraft.nbt.Tag tag = COMPONENTS_CODEC.encodeStart(
562+
// We should be fine to perform this later as we're using a deep-copied itemstack (above)
563+
final Supplier<net.minecraft.nbt.Tag> tag = () -> COMPONENTS_CODEC.encodeStart(
563564
registryAccess.createSerializationContext(NbtOps.INSTANCE),
564565
nmsStack.getComponentsPatch()
565566
).getOrThrow();
566567
return new BaseItemStack(
567568
BukkitAdapter.asItemType(itemStack.getType()),
568-
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag)),
569+
LazyReference.from(() -> (LinCompoundTag) toNativeLin(tag.get())),
569570
itemStack.getAmount()
570571
);
571572
}

0 commit comments

Comments
 (0)