I have made a custom boom item and I would like to add default NBT data: the author the title and the pages.
This is my code:
package com.scottbot.testmod.objects.items;
import com.scottbot.testmod.TestMod;
import com.scottbot.testmod.gui.ModBookReadScreen;
import net.minecraft.client.Minecraft;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.WrittenBookItem;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.nbt.StringNBT;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.StringUtils;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import javax.annotation.Nullable;
import java.util.List;
public class ModBookItem extends WrittenBookItem {
public ModBookItem(Properties builder) {
super(builder);
ItemStack stack = new ItemStack(this);
TestMod.LOGGER.info("tagging");
addTags(stack);
}
public void addTags(ItemStack stack) {
CompoundNBT nbt = stack.getOrCreateTag();
TestMod.LOGGER.info(stack.getTag());
ListNBT bookPages = new ListNBT();
String[] values = {"test", "test2", "test3", "test4"};
for (String text : values) { bookPages.add(StringNBT.valueOf("{\"text\":\"" + text + "}\""));}
nbt.put("pages", bookPages);
nbt.putString("author", "Test Author");
nbt.putString("title", "Test Title");
stack.setTag(nbt);
TestMod.LOGGER.info(stack.hasTag());
TestMod.LOGGER.info(stack.getTag());
}
@Override
public void onCreated(ItemStack stack, World worldIn, PlayerEntity playerIn) {
addTags(stack);
super.onCreated(stack, worldIn, playerIn);
}
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
ItemStack stack = playerIn.getHeldItem(handIn);
Minecraft.getInstance().displayGuiScreen(new ModBookReadScreen(new ModBookReadScreen.WrittenBookInfo(stack)));
return ActionResult.resultSuccess(stack);
}
@Override
public void addInformation(ItemStack stack, @Nullable World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
TestMod.LOGGER.info(stack.getTag());
TestMod.LOGGER.info(stack.hasTag());
if (stack.hasTag()) {
CompoundNBT compoundnbt = stack.getTag();
TestMod.LOGGER.info(compoundnbt);
assert compoundnbt != null;
String s = compoundnbt.getString("author");
TestMod.LOGGER.info(s);
if (!StringUtils.isNullOrEmpty(s)) {
tooltip.add((new TranslationTextComponent("book.byAuthor", s)).applyTextStyle(TextFormatting.GRAY));
}
}
}
When I start the game, it logs that the tags were added:
But when I actually get it from the creative menu it doesn't have the author tag and when I open the book it says invalid tag.
Any help would be appreciated, thanks!