mirror of
https://github.com/Minestom/Minestom.git
synced 2025-03-02 11:21:15 +01:00
Ensure that the meta is new when instantiating from NBT
This commit is contained in:
parent
8d8a22f209
commit
4a075da3e0
@ -41,7 +41,7 @@ public class ItemBuilder {
|
||||
|
||||
@Contract(value = "_ -> this")
|
||||
public @NotNull ItemBuilder meta(@NotNull UnaryOperator<@NotNull ItemMetaBuilder> itemMetaConsumer) {
|
||||
itemMetaConsumer.apply(metaBuilder);
|
||||
this.metaBuilder = itemMetaConsumer.apply(metaBuilder);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -3,11 +3,13 @@ package net.minestom.server.item;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.item.attribute.ItemAttribute;
|
||||
import net.minestom.server.utils.NBTUtils;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public abstract class ItemMetaBuilder implements Cloneable {
|
||||
|
||||
@ -22,9 +24,6 @@ public abstract class ItemMetaBuilder implements Cloneable {
|
||||
|
||||
protected NBTCompound originalNBT;
|
||||
|
||||
protected ItemMetaBuilder() {
|
||||
}
|
||||
|
||||
public @NotNull ItemMetaBuilder damage(int damage) {
|
||||
this.damage = damage;
|
||||
return this;
|
||||
@ -88,10 +87,14 @@ public abstract class ItemMetaBuilder implements Cloneable {
|
||||
|
||||
protected abstract void deepClone(@NotNull ItemMetaBuilder metaBuilder);
|
||||
|
||||
public static @NotNull ItemMetaBuilder fromNBT(@NotNull ItemMetaBuilder metaBuilder, @NotNull NBTCompound nbtCompound) {
|
||||
NBTUtils.loadDataIntoMeta(metaBuilder, nbtCompound);
|
||||
metaBuilder.originalNBT = nbtCompound;
|
||||
return metaBuilder;
|
||||
protected abstract @NotNull Supplier<@NotNull ItemMetaBuilder> getSupplier();
|
||||
|
||||
@Contract(value = "_, _ -> new", pure = true)
|
||||
public static @NotNull ItemMetaBuilder fromNBT(@NotNull ItemMetaBuilder src, @NotNull NBTCompound nbtCompound) {
|
||||
ItemMetaBuilder dest = src.getSupplier().get();
|
||||
NBTUtils.loadDataIntoMeta(dest, nbtCompound);
|
||||
dest.originalNBT = nbtCompound;
|
||||
return dest;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -11,6 +11,7 @@ import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class CompassMeta extends ItemMeta implements ItemMetaBuilder.Provider<CompassMeta.Builder> {
|
||||
|
||||
@ -143,5 +144,10 @@ public class CompassMeta extends ItemMeta implements ItemMetaBuilder.Provider<Co
|
||||
compassBuilder.lodestoneDimension = lodestoneDimension;
|
||||
compassBuilder.lodestonePosition = lodestonePosition;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NotNull Supplier<ItemMetaBuilder> getSupplier() {
|
||||
return Builder::new;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ public final class NBTUtils {
|
||||
return loadItem(material, count, nbtCompound);
|
||||
}
|
||||
|
||||
public static @NotNull ItemStack loadItem(@NotNull Material material, int count, NBTCompound nbtCompound) {
|
||||
public static @NotNull ItemStack loadItem(@NotNull Material material, int count, @Nullable NBTCompound nbtCompound) {
|
||||
return ItemStack.builder(material)
|
||||
.amount(count)
|
||||
.meta(metaBuilder -> {
|
||||
|
@ -222,19 +222,19 @@ public class PlayerInit {
|
||||
|
||||
globalEventHandler.addEventCallback(PlayerSpawnEvent.class, event -> {
|
||||
final Player player = event.getPlayer();
|
||||
player.setGameMode(GameMode.SURVIVAL);
|
||||
player.setGameMode(GameMode.CREATIVE);
|
||||
|
||||
player.setPermissionLevel(4);
|
||||
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
ItemStack itemStack = ItemStack.of(Material.STONE, 64);
|
||||
inventory.addItemStack(itemStack);
|
||||
//inventory.addItemStack(itemStack);
|
||||
|
||||
{
|
||||
ItemStack item = ItemStack.builder(Material.DIAMOND_CHESTPLATE)
|
||||
.displayName(Component.text("test"))
|
||||
.build();
|
||||
inventory.setChestplate(item);
|
||||
//inventory.setChestplate(item);
|
||||
}
|
||||
|
||||
//player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 32));
|
||||
|
Loading…
Reference in New Issue
Block a user