#2775 Adding Trinket support for BatpackItem. Thanks to SimonFlapse

* #2775 Adding trinket support for BatpackItem

* Added support for wearing BatpackItems in the 'back' trinket slot on the chest. This frees up an additional space for regular armor.

* BatpackItem only output when in chest armor slot
This commit is contained in:
Simon 2022-03-30 11:21:29 +02:00 committed by GitHub
parent 4fc9352c76
commit e28c9176e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 115 additions and 18 deletions

View file

@ -280,18 +280,40 @@ public class ItemUtils {
}
for (int i = 0; i < player.getInventory().size(); i++) {
ItemStack invStack = player.getInventory().getStack(i);
if (invStack.isEmpty() || !filter.test(invStack)) {
continue;
}
EnergyStorageUtil.move(
sourceStorage,
ContainerItemContext.ofPlayerSlot(player, playerInv.getSlots().get(i)).find(EnergyStorage.ITEM),
maxOutput,
null
);
transferPower(player, i, sourceStorage, maxOutput, filter);
}
}
/**
* Output energy from EnergyStorage to other EnergyStorage at slot index.
* <br> <br>
* It is recommended to use {@link ItemUtils#distributePowerToInventory(PlayerEntity, ItemStack, long, Predicate)}
* <br> <br>
* Only outputs energy if the item in the provided slot can accept power
*
* @param player {@link PlayerEntity} Player having powered item
* @param slot {@code int} Slot of the targeted item
* @param sourceStorage {@link EnergyStorage} EnergyStorage to output from
* @param maxOutput {@code int} Maximum output rate of powered item
* @param filter {@link Predicate} Filter for items to output to
* @return The actual amount of energy transferred, can be zero (0) if the targeted item does not support power input
*/
public static long transferPower(PlayerEntity player, int slot, EnergyStorage sourceStorage, long maxOutput, Predicate<ItemStack> filter) {
PlayerInventoryStorage playerInv = PlayerInventoryStorage.of(player);
ItemStack invStack = player.getInventory().getStack(slot);
if (invStack.isEmpty() || !filter.test(invStack)) {
return 0;
}
EnergyStorage receiverStorage = ContainerItemContext.ofPlayerSlot(player, playerInv.getSlots().get(slot)).find(EnergyStorage.ITEM);
return EnergyStorageUtil.move(
sourceStorage,
receiverStorage,
maxOutput,
null
);
}
}