From e5372fd779440480c03eb4ca8c64530f032fcea9 Mon Sep 17 00:00:00 2001 From: mworzala Date: Tue, 16 Jul 2024 20:07:21 -0400 Subject: [PATCH] fix: optional world pos in lodestone tracker item component (fixes #2270) --- demo/src/main/java/net/minestom/demo/PlayerInit.java | 5 +++++ .../minestom/server/item/component/LodestoneTracker.java | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/demo/src/main/java/net/minestom/demo/PlayerInit.java b/demo/src/main/java/net/minestom/demo/PlayerInit.java index d82add7d8..cc6644c01 100644 --- a/demo/src/main/java/net/minestom/demo/PlayerInit.java +++ b/demo/src/main/java/net/minestom/demo/PlayerInit.java @@ -40,6 +40,7 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.item.component.BlockPredicates; import net.minestom.server.item.component.EnchantmentList; +import net.minestom.server.item.component.LodestoneTracker; import net.minestom.server.item.component.PotionContents; import net.minestom.server.item.enchant.Enchantment; import net.minestom.server.monitoring.BenchmarkManager; @@ -156,6 +157,10 @@ public class PlayerInit { .build(); player.getInventory().addItemStack(bundle); + player.getInventory().addItemStack(ItemStack.builder(Material.COMPASS) + .set(ItemComponent.LODESTONE_TRACKER, new LodestoneTracker(player.getInstance().getDimensionName(), new Vec(10, 10, 10), true)) + .build()); + player.getInventory().addItemStack(ItemStack.builder(Material.STONE_SWORD) .set(ItemComponent.ENCHANTMENTS, new EnchantmentList(Map.of( Enchantment.SHARPNESS, 10 diff --git a/src/main/java/net/minestom/server/item/component/LodestoneTracker.java b/src/main/java/net/minestom/server/item/component/LodestoneTracker.java index 2e5564795..befd8f6a5 100644 --- a/src/main/java/net/minestom/server/item/component/LodestoneTracker.java +++ b/src/main/java/net/minestom/server/item/component/LodestoneTracker.java @@ -6,20 +6,21 @@ import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.play.data.WorldPos; import net.minestom.server.utils.nbt.BinaryTagSerializer; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -public record LodestoneTracker(@NotNull WorldPos target, boolean tracked) { +public record LodestoneTracker(@Nullable WorldPos target, boolean tracked) { public static final NetworkBuffer.Type NETWORK_TYPE = new NetworkBuffer.Type<>() { @Override public void write(@NotNull NetworkBuffer buffer, @NotNull LodestoneTracker value) { - buffer.write(WorldPos.NETWORK_TYPE, value.target); + buffer.writeOptional(WorldPos.NETWORK_TYPE, value.target); buffer.write(NetworkBuffer.BOOLEAN, value.tracked); } @Override public @NotNull LodestoneTracker read(@NotNull NetworkBuffer buffer) { return new LodestoneTracker( - buffer.read(WorldPos.NETWORK_TYPE), + buffer.readOptional(WorldPos.NETWORK_TYPE), buffer.read(NetworkBuffer.BOOLEAN) ); } @@ -39,7 +40,7 @@ public record LodestoneTracker(@NotNull WorldPos target, boolean tracked) { this(new WorldPos(dimension, blockPosition), tracked); } - public @NotNull LodestoneTracker withTarget(@NotNull WorldPos target) { + public @NotNull LodestoneTracker withTarget(@Nullable WorldPos target) { return new LodestoneTracker(target, tracked); }