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")
|
@Contract(value = "_ -> this")
|
||||||
public @NotNull ItemBuilder meta(@NotNull UnaryOperator<@NotNull ItemMetaBuilder> itemMetaConsumer) {
|
public @NotNull ItemBuilder meta(@NotNull UnaryOperator<@NotNull ItemMetaBuilder> itemMetaConsumer) {
|
||||||
itemMetaConsumer.apply(metaBuilder);
|
this.metaBuilder = itemMetaConsumer.apply(metaBuilder);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,11 +3,13 @@ package net.minestom.server.item;
|
|||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.minestom.server.item.attribute.ItemAttribute;
|
import net.minestom.server.item.attribute.ItemAttribute;
|
||||||
import net.minestom.server.utils.NBTUtils;
|
import net.minestom.server.utils.NBTUtils;
|
||||||
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public abstract class ItemMetaBuilder implements Cloneable {
|
public abstract class ItemMetaBuilder implements Cloneable {
|
||||||
|
|
||||||
@ -22,9 +24,6 @@ public abstract class ItemMetaBuilder implements Cloneable {
|
|||||||
|
|
||||||
protected NBTCompound originalNBT;
|
protected NBTCompound originalNBT;
|
||||||
|
|
||||||
protected ItemMetaBuilder() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull ItemMetaBuilder damage(int damage) {
|
public @NotNull ItemMetaBuilder damage(int damage) {
|
||||||
this.damage = damage;
|
this.damage = damage;
|
||||||
return this;
|
return this;
|
||||||
@ -88,10 +87,14 @@ public abstract class ItemMetaBuilder implements Cloneable {
|
|||||||
|
|
||||||
protected abstract void deepClone(@NotNull ItemMetaBuilder metaBuilder);
|
protected abstract void deepClone(@NotNull ItemMetaBuilder metaBuilder);
|
||||||
|
|
||||||
public static @NotNull ItemMetaBuilder fromNBT(@NotNull ItemMetaBuilder metaBuilder, @NotNull NBTCompound nbtCompound) {
|
protected abstract @NotNull Supplier<@NotNull ItemMetaBuilder> getSupplier();
|
||||||
NBTUtils.loadDataIntoMeta(metaBuilder, nbtCompound);
|
|
||||||
metaBuilder.originalNBT = nbtCompound;
|
@Contract(value = "_, _ -> new", pure = true)
|
||||||
return metaBuilder;
|
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
|
@Override
|
||||||
|
@ -11,6 +11,7 @@ import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class CompassMeta extends ItemMeta implements ItemMetaBuilder.Provider<CompassMeta.Builder> {
|
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.lodestoneDimension = lodestoneDimension;
|
||||||
compassBuilder.lodestonePosition = lodestonePosition;
|
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);
|
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)
|
return ItemStack.builder(material)
|
||||||
.amount(count)
|
.amount(count)
|
||||||
.meta(metaBuilder -> {
|
.meta(metaBuilder -> {
|
||||||
|
@ -222,19 +222,19 @@ public class PlayerInit {
|
|||||||
|
|
||||||
globalEventHandler.addEventCallback(PlayerSpawnEvent.class, event -> {
|
globalEventHandler.addEventCallback(PlayerSpawnEvent.class, event -> {
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
player.setGameMode(GameMode.SURVIVAL);
|
player.setGameMode(GameMode.CREATIVE);
|
||||||
|
|
||||||
player.setPermissionLevel(4);
|
player.setPermissionLevel(4);
|
||||||
|
|
||||||
PlayerInventory inventory = player.getInventory();
|
PlayerInventory inventory = player.getInventory();
|
||||||
ItemStack itemStack = ItemStack.of(Material.STONE, 64);
|
ItemStack itemStack = ItemStack.of(Material.STONE, 64);
|
||||||
inventory.addItemStack(itemStack);
|
//inventory.addItemStack(itemStack);
|
||||||
|
|
||||||
{
|
{
|
||||||
ItemStack item = ItemStack.builder(Material.DIAMOND_CHESTPLATE)
|
ItemStack item = ItemStack.builder(Material.DIAMOND_CHESTPLATE)
|
||||||
.displayName(Component.text("test"))
|
.displayName(Component.text("test"))
|
||||||
.build();
|
.build();
|
||||||
inventory.setChestplate(item);
|
//inventory.setChestplate(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
//player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 32));
|
//player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 32));
|
||||||
|
Loading…
Reference in New Issue
Block a user