• Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hi   My item has ItemHandler capability, which works fine. But one of the things I have when storing a item on the capability is overring the translation key with the contained stack's translation key.     The problem is that this will only sync when opening the item again. I need to send a message to the client with the new contained stack which I do not know how to do. I don't know which ItemStack I need to change on the client when the container is closed.     My item needs to have two capabilities attached to it. One is the Forge ItemHandler Capability while the other that is exclusive to the glass variant should be able to store a liquid too. For this, I made a provider that includes these capabilities: public class StackFluidContainerProvider implements ICapabilitySerializable { private final FluidContainer fluid; private final ItemStackHandler inventory; private final LazyOptional<IItemHandler> itemHandler = LazyOptional.of(this::getInventory); private final LazyOptional<IFluidContainer> fluidHandler = LazyOptional.of(this::getFluid); public StackFluidContainerProvider(short slots, short maxVolume) { inventory = new ItemStackHandler(slots); fluid = new FluidContainer(maxVolume); } protected FluidContainer getFluid() { return fluid; } protected ItemStackHandler getInventory() { return inventory; } @SuppressWarnings("ConstantConditions") @Override public INBT serializeNBT() { CompoundNBT compoundNBT = new CompoundNBT(); compoundNBT.put("items", CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.getStorage().writeNBT(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY,getInventory(),null)); compoundNBT.put("fluid", FluidContainerStorage.FLUID_CONTAINER_CAPABILITY.getStorage().writeNBT(FluidContainerStorage.FLUID_CONTAINER_CAPABILITY,getFluid(),null)); return compoundNBT; } @Override public void deserializeNBT(INBT nbt) { if (nbt instanceof CompoundNBT) { CompoundNBT compoundNBT = (CompoundNBT)nbt; CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.getStorage().readNBT(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, getInventory(), null, compoundNBT.get("items")); FluidContainerStorage.FLUID_CONTAINER_CAPABILITY.getStorage().readNBT(FluidContainerStorage.FLUID_CONTAINER_CAPABILITY, getFluid(), null, compoundNBT.get("fluid")); } } @SuppressWarnings("unchecked") public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) { if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return itemHandler.cast(); else if (cap == FluidContainerStorage.FLUID_CONTAINER_CAPABILITY) return fluidHandler.cast(); return (LazyOptional<T>) LazyOptional.empty(); } }   But when I try and fetch the capability the parameter cap seems to always be null, which means it always returns the first statement (in this case the ItemHandler) which results in a casting error.
    • No, you have said that i should make that modelUnicorn extends ModelEntity and not ModelHorse, but i need the AbstractHorseEntity, else the gui, animations and etc. wont work and i should rewrite the code.
    • Other mods I can find add their TEISR directly in the item constructor (which crashes the server). But doing the same I at least expect it to do something while in Single Player.
    • ModelUnicorn should extend ModelHorse. Everything else you want will come from your UnicornEntity class extending EntityHorse.
    • Sorry, I looked around and couldn't figure out how to do that, do you know of any good place where it can tell me how to?
  • Topics

  • Who's Online (See full list)