Posted November 2, 20186 yr I blindly stumbled my way through making a capability and I have no idea if it did it right. I'm putting a couple questions into one post. How do I make my capability save a different value for each itemstack. The code I have right now seems like it would make every Item (of its type) the same thing. (I think, doesn't minecraft only have one instance of every item but its used in different itemstacks?) How would I add a tooltip that will change (specifically when I craft it with a specific Item)? Current capability code: Spoiler @CapabilityInject(value = Sharpenedness.class) public static final Capability<Sharpenedness> SHARPENED = null; private Sharpenedness instance = SHARPENED.getDefaultInstance(); @Override public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) { return new ICapabilitySerializable<NBTBase>() { @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { return (capability == SHARPENED); } @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { return capability == SHARPENED ? SHARPENED.<T> cast(instance) : null; } @Override public void deserializeNBT(NBTBase nbt) { SHARPENED.getStorage().readNBT(SHARPENED, instance, null, nbt); } @Override public NBTBase serializeNBT() { return SHARPENED.getStorage().writeNBT(SHARPENED, instance, null); } }; } Spoiler public class Sharpenedness { public int progress; public Sharpenedness() { progress = 0; } public Sharpenedness(int number) { progress = number; } public int getProgress() { return progress; } public void setProgress(int number) { progress = number; } public void addProgress(int amount) { progress += amount; } } Spoiler public class SharpenednessFactory implements Callable<Sharpenedness>{ @Override public Sharpenedness call() throws Exception { return new Sharpenedness(); } } Spoiler public class SharpenednessStorage implements IStorage<Sharpenedness>{ @Override public NBTBase writeNBT(Capability<Sharpenedness> capability, Sharpenedness instance, EnumFacing side) { return new NBTTagLong(instance.getProgress()); } @Override public void readNBT(Capability<Sharpenedness> capability, Sharpenedness instance, EnumFacing side, NBTBase nbt) { } } Spoiler @EventHandler public static void init(FMLInitializationEvent event) { ModRecipes.init(); CapabilityManager.INSTANCE.register(Sharpenedness.class, new SharpenednessStorage(), new SharpenednessFactory()); } Here's a little background Edited November 2, 20186 yr by TheGoldenProof
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.