Class SimpleEnergyHandler

java.lang.Object
net.neoforged.neoforge.transfer.energy.SimpleEnergyHandler
All Implemented Interfaces:
ValueIOSerializable, EnergyHandler

public class SimpleEnergyHandler extends Object implements EnergyHandler, ValueIOSerializable
A simple implementation of EnergyHandler, that can store any level of energy up to a given capacity, with per-operation insertion and extraction limits.

While new instances of SimpleEnergyHandler can be created and used directly, overriding onEnergyChanged(int) to react to changes in the energy level is recommended, for example to trigger setChanged().

  • Field Details

    • energy

      protected int energy
    • capacity

      protected int capacity
    • maxInsert

      protected int maxInsert
    • maxExtract

      protected int maxExtract
    • energyJournal

      private final SimpleEnergyHandler.EnergyJournal energyJournal
  • Constructor Details

  • Method Details

    • serialize

      public void serialize(ValueOutput output)
      Specified by:
      serialize in interface ValueIOSerializable
    • deserialize

      public void deserialize(ValueInput input)
      Specified by:
      deserialize in interface ValueIOSerializable
    • set

      public void set(int amount)
      Directly overwrites the energy amount of the handler.
      Throws:
      IllegalArgumentException - if the amount is negative
    • onEnergyChanged

      protected void onEnergyChanged(int previousAmount)
      Called after the amount of energy in the handler changed.

      For changes that happen through set(int), this method is called immediately. For changes that happen through insert(int, net.neoforged.neoforge.transfer.transaction.TransactionContext) or extract(int, net.neoforged.neoforge.transfer.transaction.TransactionContext), this function will be called at the end of the transaction.

    • getAmountAsLong

      public long getAmountAsLong()
      Description copied from interface: EnergyHandler
      Returns the amount of energy currently stored, as a long.

      In general, energy handlers can report long amounts. However, if the handler is known to only support amounts up to Integer.MAX_VALUE, or if the caller prefers to deal in ints only, the int-returning overload can be used instead.

      The returned amount must be non-negative.

      Specified by:
      getAmountAsLong in interface EnergyHandler
      Returns:
      the amount as a long
      See Also:
    • getCapacityAsLong

      public long getCapacityAsLong()
      Description copied from interface: EnergyHandler
      Returns the capacity of the handler, irrespective of the current amount, as a long.

      In general, energy handlers can report long capacities. However, if the handler is known to only support capacities up to Integer.MAX_VALUE, or if the caller prefers to deal in ints only, the int-returning overload can be used instead.

      This function serves as a hint on the maximum amount the energy handler might contain, for example the handler can be considered full if amount >= capacity. Note that the returned capacity may overestimate the actual allowed amount, and it might be smaller than the current amount. The only way to know if a handler will accept a resource, is to try to insert it.

      Specified by:
      getCapacityAsLong in interface EnergyHandler
      Returns:
      the capacity, as a long
      See Also:
    • insert

      public int insert(int amount, TransactionContext transaction)
      Description copied from interface: EnergyHandler
      Inserts up to the given amount of energy into the handler.

      Changes to the handler are made in the context of a transaction.

      Specified by:
      insert in interface EnergyHandler
      Parameters:
      amount - The maximum amount of energy to insert. Must be non-negative.
      transaction - The transaction that this operation is part of.
      Returns:
      The amount that was inserted. Between 0 (inclusive, nothing was inserted) and amount (inclusive, everything was inserted).
    • extract

      public int extract(int amount, TransactionContext transaction)
      Description copied from interface: EnergyHandler
      Extracts up to the given amount of energy from the handler.

      Changes to the handler are made in the context of a transaction.

      Specified by:
      extract in interface EnergyHandler
      Parameters:
      amount - The maximum amount of energy to extract. Must be non-negative.
      transaction - The transaction that this operation is part of.
      Returns:
      The amount that was extracted. Between 0 (inclusive, nothing was extracted) and amount (inclusive, everything was extracted).