Line 118: |
Line 118: |
| | | |
| <syntaxhighlight lang="java"> | | <syntaxhighlight lang="java"> |
− | public static Capability<IItemHandler> ITEM_HANDLER_CAPABILITY = CapabilityManager.get(new CapabilityToken<>(){}); | + | public static Capability<IItemHandler> ITEM_HANDLER = CapabilityManager.get(new CapabilityToken<>(){}); |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | The above code will let Forge know that the field <code>ITEM_HANDLER_CAPABILITY</code> should be analogous with the <code>IItemHandler</code> capability. Note that this does not mean the capability is accessible or registered. To check if it is, call <code>Capability#isRegistered</code>. | + | The above code will let Forge know that the field <code>ITEM_HANDLER</code> should be analogous with the <code>IItemHandler</code> capability. Note that this does not mean the capability is accessible or registered. To check if it is, call <code>Capability#isRegistered</code>. |
| | | |
− | This is, for obvious reasons, redundant, since that capability is also available through | + | This is, for obvious reasons, redundant, since all capabilities are available through |
− | <code>CapabilityItemHandler</code>. | + | <code>ForgeCapabilities</code>. |
| | | |
| === Exposing a Capability === | | === Exposing a Capability === |
Line 153: |
Line 153: |
| // suppose the presence of a field 'inventory' of type 'IItemHandler' | | // suppose the presence of a field 'inventory' of type 'IItemHandler' |
| | | |
− | private final LazyOptional<IItemhandler> inventoryOptional = LazyOptional.of(() -> this.inventory); | + | private LazyOptional<IItemhandler> inventoryOptional = LazyOptional.empty(); |
| | | |
| @Override | | @Override |
| public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction direction) { | | public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction direction) { |
− | if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY | + | if (capability == ForgeCapabilities.ITEM_HANDLER |
| && (direction == null || direction == Direction.UP || direction == Direction.DOWN)) { | | && (direction == null || direction == Direction.UP || direction == Direction.DOWN)) { |
| return this.inventoryOptional.cast(); | | return this.inventoryOptional.cast(); |
| } | | } |
| return super.getCapability(capability, direction); // See note after snippet | | return super.getCapability(capability, direction); // See note after snippet |
| + | } |
| + | |
| + | @Override |
| + | public void invalidateCaps() |
| + | { |
| + | this.inventoryOptional = LazyOptional.of(() -> this.inventory); |
| } | | } |
| | | |
Line 222: |
Line 228: |
| @Override | | @Override |
| public <T> LazyOptional<T> getCapability(Capability<T> cap, @Nullable Direction direction) { | | public <T> LazyOptional<T> getCapability(Capability<T> cap, @Nullable Direction direction) { |
− | if (cap == CapabilityEnergy.ENERGY) { | + | if (cap == ForgeCapabilities.ENERGY) { |
| return optionalStorage.cast(); | | return optionalStorage.cast(); |
| } | | } |
Line 256: |
Line 262: |
| EnergyStorage backend = new EnergyStorage(((EnergyBasedBlockEntity) event.getObject()).capacity); | | EnergyStorage backend = new EnergyStorage(((EnergyBasedBlockEntity) event.getObject()).capacity); |
| LazyOptional<IEnergyStorage> optionalStorage = LazyOptional.of(() -> backend); | | LazyOptional<IEnergyStorage> optionalStorage = LazyOptional.of(() -> backend); |
− | Capability<IEnergyStorage> capability = CapabilityEnergy.ENERGY; | + | Capability<IEnergyStorage> capability = ForgeCapabilities.ENERGY; |
| | | |
| ICapabilityProvider provider = new ICapabilitySerializable<IntTag>() { | | ICapabilityProvider provider = new ICapabilitySerializable<IntTag>() { |
Line 316: |
Line 322: |
| if (targetCapability == null) { | | if (targetCapability == null) { |
| ICapabilityProvider provider = level.getBlockEntity(pos.relative(direction)); | | ICapabilityProvider provider = level.getBlockEntity(pos.relative(direction)); |
− | targetCapability = provider.getCapability(CapabilityEnergy.ENERGY, direction.getOpposite()); | + | targetCapability = provider.getCapability(ForgeCapabilities.ENERGY, direction.getOpposite()); |
| cache.put(direction, targetCapability); | | cache.put(direction, targetCapability); |
| targetCapability.addListener(self -> cache.put(direction, null)); | | targetCapability.addListener(self -> cache.put(direction, null)); |