fix: optional world pos in lodestone tracker item component (fixes #2270)

This commit is contained in:
mworzala 2024-07-16 20:07:21 -04:00
parent 60a83fd39b
commit e5372fd779
No known key found for this signature in database
GPG Key ID: B148F922E64797C7
2 changed files with 10 additions and 4 deletions

View File

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

View File

@ -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<LodestoneTracker> 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);
}