66import net .minecraft .world .inventory .Slot ;
77import net .minecraft .world .item .ItemStack ;
88import net .neoforged .neoforge .capabilities .Capabilities ;
9- import net .neoforged .neoforge .energy .IEnergyStorage ;
9+ import net .neoforged .neoforge .transfer .access .ItemAccess ;
10+ import net .neoforged .neoforge .transfer .energy .EnergyHandler ;
11+ import net .neoforged .neoforge .transfer .transaction .Transaction ;
1012import org .cyclops .commoncapabilities .api .ingredient .IngredientComponent ;
1113import org .cyclops .commoncapabilities .api .ingredient .storage .IIngredientComponentStorage ;
14+ import org .cyclops .cyclopscore .capability .item .ItemStackResourceHandlerContainerSlot ;
1215import org .cyclops .cyclopscore .helper .IModHelpers ;
1316import org .cyclops .cyclopscore .ingredient .storage .InconsistentIngredientInsertionException ;
1417import org .cyclops .cyclopscore .ingredient .storage .IngredientStorageHelpers ;
@@ -59,22 +62,22 @@ public String formatQuantity(Long instance) {
5962
6063 @ Override
6164 public boolean isInstance (ItemStack itemStack ) {
62- return itemStack .getCapability (Capabilities .EnergyStorage .ITEM ) != null ;
65+ return itemStack .getCapability (Capabilities .Energy .ITEM , ItemAccess . forStack ( itemStack ) ) != null ;
6366 }
6467
6568 @ Override
6669 public Long getInstance (ItemStack itemStack ) {
67- return Optional .ofNullable (itemStack .getCapability (Capabilities .EnergyStorage .ITEM ))
68- .map (IEnergyStorage :: getEnergyStored )
69- .orElse (0 )
70+ return Optional .ofNullable (itemStack .getCapability (Capabilities .Energy .ITEM , ItemAccess . forStack ( itemStack ) ))
71+ .map (EnergyHandler :: getAmountAsLong )
72+ .orElse (0L )
7073 .longValue ();
7174 }
7275
7376 @ Override
7477 public long getMaxQuantity (ItemStack itemStack ) {
75- return Optional .ofNullable (itemStack .getCapability (Capabilities .EnergyStorage .ITEM ))
76- .map (IEnergyStorage :: getMaxEnergyStored )
77- .orElse (0 );
78+ return Optional .ofNullable (itemStack .getCapability (Capabilities .Energy .ITEM , ItemAccess . forStack ( itemStack ) ))
79+ .map (EnergyHandler :: getCapacityAsLong )
80+ .orElse (0L );
7881 }
7982
8083 @ Override
@@ -94,19 +97,17 @@ public int throwIntoWorld(IIngredientComponentStorage<Long, Boolean> storage, Lo
9497 }
9598
9699 protected IIngredientComponentStorage <Long , Boolean > getEnergyStorage (IngredientComponent <Long , Boolean > component ,
97- IEnergyStorage energyStorage ) {
100+ EnergyHandler energyStorage ) {
98101 return component
99- .getStorageWrapperHandler (Capabilities .EnergyStorage .ITEM )
102+ .getStorageWrapperHandler (Capabilities .Energy .ITEM )
100103 .wrapComponentStorage (energyStorage );
101104 }
102105
103106 @ Override
104107 public Long insertIntoContainer (IIngredientComponentStorage <Long , Boolean > storage ,
105108 AbstractContainerMenu container , int containerSlot , Long maxInstance ,
106109 @ Nullable Player player , boolean transferFullSelection ) {
107- ItemStack stack = container .getSlot (containerSlot ).getItem ();
108-
109- return Optional .ofNullable (stack .getCapability (Capabilities .EnergyStorage .ITEM ))
110+ return Optional .ofNullable (ItemStackResourceHandlerContainerSlot .asItemAccess (container , containerSlot ).getCapability (Capabilities .Energy .ITEM ))
110111 .map (energyStorage -> {
111112 IIngredientComponentStorage <Long , Boolean > itemStorage = getEnergyStorage (storage .getComponent (), energyStorage );
112113 Long ret = 0L ;
@@ -115,7 +116,7 @@ public Long insertIntoContainer(IIngredientComponentStorage<Long, Boolean> stora
115116 } catch (InconsistentIngredientInsertionException e ) {
116117 // Ignore
117118 }
118- container .broadcastChanges ();
119+ container .broadcastChanges (); // TODO: can this be removed due to ItemAccess usage?
119120 return ret ;
120121 })
121122 .orElse (0L );
@@ -124,8 +125,7 @@ public Long insertIntoContainer(IIngredientComponentStorage<Long, Boolean> stora
124125 @ Override
125126 public void extractActiveStackFromPlayerInventory (IIngredientComponentStorage <Long , Boolean > storage ,
126127 AbstractContainerMenu container , Inventory playerInventory , long moveQuantityPlayerSlot ) {
127- ItemStack playerStack = container .getCarried ();
128- Optional .ofNullable (playerStack .getCapability (Capabilities .EnergyStorage .ITEM ))
128+ Optional .ofNullable (ItemAccess .forPlayerCursor (playerInventory .player , container ).getCapability (Capabilities .Energy .ITEM ))
129129 .ifPresent (energyStorage -> {
130130 IIngredientComponentStorage <Long , Boolean > itemStorage = getEnergyStorage (storage .getComponent (), energyStorage );
131131 try {
@@ -141,8 +141,7 @@ public void extractMaxFromContainerSlot(IIngredientComponentStorage<Long, Boolea
141141 AbstractContainerMenu container , int containerSlot , Inventory playerInventory , int limit ) {
142142 Slot slot = container .getSlot (containerSlot );
143143 if (slot .mayPickup (playerInventory .player )) {
144- ItemStack toMoveStack = slot .getItem ();
145- Optional .ofNullable (toMoveStack .getCapability (Capabilities .EnergyStorage .ITEM ))
144+ Optional .ofNullable (ItemStackResourceHandlerContainerSlot .asItemAccess (container , containerSlot ).getCapability (Capabilities .Energy .ITEM ))
146145 .ifPresent (energyStorage -> {
147146 IIngredientComponentStorage <Long , Boolean > itemStorage = getEnergyStorage (storage .getComponent (), energyStorage );
148147 try {
@@ -156,21 +155,23 @@ public void extractMaxFromContainerSlot(IIngredientComponentStorage<Long, Boolea
156155
157156 @ Override
158157 public long getActivePlayerStackQuantity (Inventory playerInventory , AbstractContainerMenu container ) {
159- ItemStack toMoveStack = container .getCarried ();
160- return Optional .ofNullable (toMoveStack .getCapability (Capabilities .EnergyStorage .ITEM ))
161- .map (IEnergyStorage ::getEnergyStored )
162- .orElse (0 );
158+ return Optional .ofNullable (ItemAccess .forPlayerCursor (playerInventory .player , container ).getCapability (Capabilities .Energy .ITEM ))
159+ .map (EnergyHandler ::getAmountAsLong )
160+ .orElse (0L );
163161 }
164162
165163 @ Override
166164 public void drainActivePlayerStackQuantity (Inventory playerInventory , AbstractContainerMenu container , long quantityIn ) {
167- ItemStack toMoveStack = container .getCarried ();
168- Optional .ofNullable (toMoveStack .getCapability (Capabilities .EnergyStorage .ITEM ))
165+ Optional .ofNullable (ItemAccess .forPlayerCursor (playerInventory .player , container ).getCapability (Capabilities .Energy .ITEM ))
169166 .ifPresent (energyStorage -> {
170167 // Drain
171168 long quantity = quantityIn ;
172169 while (quantity > 0 ) {
173- int drained = energyStorage .extractEnergy ((int ) quantity , false );
170+ int drained ;
171+ try (var tx = Transaction .openRoot ()) {
172+ drained = energyStorage .extract ((int ) quantity , tx );
173+ tx .commit ();
174+ }
174175 if (drained <= 0 ) {
175176 break ;
176177 }
0 commit comments