Unicopia/src/main/java/com/minelittlepony/unicopia/item/ChameleonItem.java
2021-12-22 11:15:09 +02:00

58 lines
1.8 KiB
Java

package com.minelittlepony.unicopia.item;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public interface ChameleonItem {
default boolean isFullyDisguised() {
return true;
}
default ItemStack getAppearanceStack(ItemStack stack) {
Item appearance = getAppearance(stack);
if (appearance != Items.AIR) {
return createAppearanceStack(stack, appearance);
}
return stack;
}
default ItemStack createAppearanceStack(ItemStack stack, Item appearance) {
ItemStack newAppearance = appearance.getDefaultStack();
if (stack.hasNbt()) {
newAppearance.setNbt(stack.getNbt().copy());
}
newAppearance.setCount(stack.getCount());
newAppearance.removeSubNbt("appearance");
return newAppearance;
}
default boolean hasAppearance(ItemStack stack) {
return getAppearance(stack) != Items.AIR;
}
default Item getAppearance(ItemStack stack) {
if (stack.hasNbt() && stack.getNbt().contains("appearance")) {
return Registry.ITEM.get(new Identifier(stack.getNbt().getString("appearance")));
}
return Items.AIR;
}
default ItemStack setAppearance(ItemStack stack, ItemStack appearance) {
ItemStack result = stack.copy();
if (appearance.hasNbt()) {
result.setNbt(appearance.getNbt().copy());
result.removeCustomName();
result.setDamage(stack.getDamage());
result.setCount(stack.getCount());
}
result.getOrCreateNbt().putString("appearance", Registry.ITEM.getId(appearance.getItem()).toString());
return result;
}
}