Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

werdwar

Members
  • Joined

  • Last visited

  1. Thank you very much! I have this working with a capability I added to my item, however, the durability bar isn't updating until I move it around in the inventory or drop it and pick it back up. Is there another function I can call within onItemRightClick to make sure the durability bar updates on use? Here is my custom class again with the overidden methods: @MethodsReturnNonnullByDefault public class ItemGem extends Item { private int max_power; ItemGem(Item.Properties properties, int max_power) { super(properties); this.max_power = max_power; } @Override public ActionResult<ItemStack> onItemRightClick(World world, PlayerEntity player, Hand hand) throws NoSuchElementException { // get the itemstack being held by the player ItemStack itemstack = player.getHeldItem(hand); // get the itemstack's capability IGemPower iGemPower = itemstack.getCapability(GemPowerCapability.GEM_POWER_CAPABILITY).orElseThrow(() -> new NoSuchElementException("Missing 'GEM_POWER' Capability on an item of type ItemGem!")); // if we're in the logical client and the gem still has power left: if(!world.isRemote && iGemPower.getAmount() > 0) { // get the player's capability IMagicPower iMagicPower = player.getCapability(MagicPowerCapability.MAGIC_POWER_CAPABILITY).orElseThrow(() -> new NoSuchElementException("Capability 'MAGIC_POWER' missing on player entity: all players should have a MAGIC_POWER capability")); // add one power to the player's capability iMagicPower.addOrSubtractAmount(1); // send a message to the player with their new power total player.sendStatusMessage(new StringTextComponent("new power total: " + iMagicPower.getAmount()), false); // subtract one power from the item's capability iGemPower.addOrSubtractAmount(-1); } return super.onItemRightClick(world, player, hand); } @Override public boolean showDurabilityBar(ItemStack stack) { return true; } @Override public double getDurabilityForDisplay(ItemStack stack) { IGemPower iGemPower = stack.getCapability(GemPowerCapability.GEM_POWER_CAPABILITY).orElseThrow(() -> new NoSuchElementException("Missing 'GEM_POWER' Capability on an item of type ItemGem!")); double durability = (double)(this.max_power - iGemPower.getAmount()) / (double)this.max_power; return durability; } }
  2. werdwar joined the community
  3. I'm trying to use the durability of an item to represent stored magicl energy; sort of like a battery. To do this, I am overriding the onItemRightClick() method in a custom class called itemGem that extends Item: @MethodsReturnNonnullByDefault public class ItemGem extends Item { ItemGem(Item.Properties properties) { super(properties); } @Override public ActionResult<ItemStack> onItemRightClick(World world, PlayerEntity player, Hand hand) { // get the itemstack being held by the player ItemStack itemstack = player.getHeldItem(hand); // if we're in the logical client and the gem still has power left: if(!world.isRemote && itemstack.getDamage() < itemstack.getMaxDamage()) { player.getCapability(MagicPowerCapability.MAGIC_POWER_CAPABILITY).ifPresent(new NonNullConsumer<IMagicPower>() { @Override public void accept(@Nonnull IMagicPower iMagicPower) { // add one power to the player's capability iMagicPower.addOrSubtractAmount(1); // send a message to the player with their new power total player.sendStatusMessage(new StringTextComponent("new power total: " + iMagicPower.getAmount()), false); } }); } if(!world.isRemote) { // damage the item itemstack.damageItem(1, player, PlayerEntity -> {/* need to give a damaged version or something here so it doesn't just disappear? */}); //TODO: figure out why the gem disappears after its power is used up. } return super.onItemRightClick(world, player, hand); } } My issue is that when the item hits zero durability, it disappears; I want it to sitck around at zero durability so that it can be recharged. As I understand it, the third argument of damageItem() is a Consumer that is triggered when the item hits zero durability, but I'm not sure what I can or should do there. I'm not sure if I should somehow give the player a different item (e.g. an uncharged_gem) that can be recharged, or if I can somehow prevent the item from being removed. I guess I could just leave it at one damage and call that "empty" so that it isn't removed, but I feel like there should be a better solution.

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.