ItemContainer class
Пакет: com.hypixel.hytale.server.core.inventory.container
Файл: com/hypixel/hytale/server/core/inventory/container/ItemContainer.java
Поля (162)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
CodecMapCodec<ItemContainer> |
CODEC |
|
|
break |
|
|
break |
|
|
break |
|
InventorySection |
var1 |
|
Map |
var1 |
|
ClearTransaction |
var1 |
|
List |
var1 |
|
ItemStack |
var10 |
|
int |
var10 |
|
ItemStack |
var10 |
|
ItemStack |
var10 |
|
SlotTransaction |
var11 |
|
MoveTransaction |
var11 |
|
ItemStackSlotTransaction |
var11 |
|
int |
var11 |
|
SlotTransaction |
var12 |
|
ItemStackTransaction |
var12 |
|
MoveTransaction |
var12 |
|
int |
var12 |
|
short |
var12 |
|
int |
var12 |
|
SlotTransaction |
var13 |
|
ItemStackTransaction |
var13 |
|
int |
var13 |
|
ItemStack |
var13 |
|
ItemStack |
var14 |
|
MoveTransaction |
var14 |
|
List |
var14 |
|
ItemStack |
var15 |
|
int |
var15 |
|
|
var15 |
|
SlotTransaction |
var16 |
|
List |
var16 |
|
SlotTransaction |
var17 |
|
ItemStack |
var17 |
|
SlotTransaction |
var18 |
|
ItemStack |
var18 |
|
SlotTransaction |
var19 |
|
ItemStack |
var19 |
|
ItemStack |
var2 |
|
int |
var2 |
|
ListTransaction |
var2 |
|
List |
var2 |
|
ListTransaction |
var2 |
|
ItemStack[] |
var2 |
|
ItemContainer.ItemContainerChangeEvent |
var2 |
|
ItemResourceType[] |
var2 |
|
SlotTransaction |
var20 |
|
ItemStackSlotTransaction |
var21 |
|
SlotTransaction |
var22 |
|
SlotTransaction |
var23 |
|
SlotTransaction |
var24 |
|
SlotTransaction |
var25 |
|
SlotTransaction |
var26 |
|
ItemStackSlotTransaction |
var27 |
|
ListTransaction |
var3 |
|
SlotTransaction |
var3 |
|
ListTransaction |
var3 |
|
List |
var3 |
|
ListTransaction |
var3 |
|
ItemStack |
var3 |
|
ItemStack |
var3 |
|
ItemStack |
var3 |
|
ListTransaction |
var3 |
|
int |
var3 |
|
|
var3 |
|
ItemStack |
var3 |
|
ItemStackSlotTransaction |
var4 |
|
ItemStackSlotTransaction |
var4 |
|
ObjectArrayList |
var4 |
|
ItemStack |
var4 |
|
boolean |
var4 |
|
|
var4 |
|
Item |
var4 |
|
ItemStack |
var4 |
|
Item |
var4 |
|
List |
var4 |
|
ItemStackTransaction |
var4 |
|
ListTransaction |
var4 |
|
List |
var4 |
|
ItemStack |
var4 |
|
ItemStack |
var4 |
|
ItemStack |
var4 |
|
String |
var4 |
|
int |
var5 |
|
ItemStackSlotTransaction |
var5 |
|
ItemStackSlotTransaction |
var5 |
|
MoveTransaction |
var5 |
|
ItemStack |
var5 |
|
ListTransaction |
var5 |
|
List |
var5 |
|
ItemStack |
var5 |
|
int |
var5 |
|
ListTransaction |
var5 |
|
List |
var5 |
|
ItemStack |
var5 |
|
int |
var5 |
|
int |
var5 |
|
|
var5 |
|
|
var5 |
|
ItemStackTransaction |
var5 |
|
ListTransaction |
var5 |
|
ListTransaction |
var5 |
|
int |
var5 |
|
ResourceTransaction |
var5 |
|
ListTransaction |
var5 |
|
MaterialTransaction |
var5 |
|
ListTransaction |
var5 |
|
ItemStack |
var5 |
|
ItemStack |
var5 |
|
String |
var5 |
|
ItemStack |
var6 |
|
ItemStack |
var6 |
|
ItemStackSlotTransaction |
var6 |
|
MaterialSlotTransaction |
var6 |
|
ResourceSlotTransaction |
var6 |
|
TagSlotTransaction |
var6 |
|
SlotTransaction |
var6 |
|
MoveTransaction |
var6 |
|
ItemStackSlotTransaction |
var6 |
|
boolean |
var6 |
|
|
var6 |
|
ListTransaction |
var6 |
|
List |
var6 |
|
MoveTransaction |
var6 |
|
ItemStackSlotTransaction |
var6 |
|
int |
var6 |
|
SlotTransaction |
var6 |
|
int |
var6 |
|
int |
var6 |
|
TagTransaction |
var6 |
|
int |
var6 |
|
int |
var6 |
|
ListTransaction |
var6 |
|
Item |
var6 |
|
int |
var7 |
|
ItemStack |
var7 |
|
ItemStackTransaction |
var7 |
|
ItemStack |
var7 |
|
boolean |
var7 |
|
|
var7 |
|
ItemStack |
var7 |
|
int[] |
var7 |
|
SlotTransaction |
var7 |
|
Item |
var7 |
|
ItemStack |
var7 |
|
TestRemoveItemSlotResult |
var7 |
|
int |
var7 |
|
int |
var8 |
|
ItemStack |
var8 |
|
ItemStackTransaction |
var8 |
|
ItemStack |
var8 |
|
int[] |
var8 |
|
int |
var8 |
|
|
var8 |
|
|
var8 |
|
int |
var8 |
|
int |
var9 |
|
SlotTransaction |
var9 |
|
ItemStack |
var9 |
|
int |
var9 |
Методы (140)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Quantity is less than zero! " + var0 + " < 0") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Slot is less than zero! " + var0 + " < 0") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Slot is outside capacity! " + var0 + " >= " + var1) |
abstract |
throw new |
IndexOutOfBoundsExceptionthrow new IndexOutOfBoundsException("srcPos < 0") |
abstract |
throw new |
IndexOutOfBoundsExceptionthrow new IndexOutOfBoundsException("srcPos + length > capacity") |
abstract |
throw new |
IndexOutOfBoundsExceptionthrow new IndexOutOfBoundsException("destPos < 0") |
abstract |
throw new |
IndexOutOfBoundsExceptionthrow new IndexOutOfBoundsException("destPos + length > dest.capacity") |
abstract |
return new |
ItemStackSlotTransactionreturn new ItemStackSlotTransaction(true, ActionType.REPLACE, var1, var4, var3, var4, true, false, false, false, var3, null) |
abstract |
return new |
ItemStackSlotTransactionreturn new ItemStackSlotTransaction(false, ActionType.REPLACE, var1, var4, var4, null, true, false, false, false, var3, var3) |
public |
record |
TempItemDatarecord TempItemData(ItemStack itemStack, Item item) |
public |
ListTransaction<ItemStackTransaction> |
addItemStacksListTransaction<ItemStackTransaction> addItemStacks(List<ItemStack> var1) |
public |
ListTransaction<ItemStackTransaction> |
addItemStacksListTransaction<ItemStackTransaction> addItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3, boolean var4) |
public |
ListTransaction<ItemStackSlotTransaction> |
addItemStacksOrderedListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(List<ItemStack> var1) |
public |
ListTransaction<ItemStackSlotTransaction> |
addItemStacksOrderedListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(short var1, List<ItemStack> var2) |
public |
ListTransaction<ItemStackSlotTransaction> |
addItemStacksOrderedListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(List<ItemStack> var1, boolean var2, boolean var3) |
public |
ListTransaction<ItemStackSlotTransaction> |
addItemStacksOrderedListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(short var1, @Nullable List<ItemStack> var2, boolean var3, boolean var4) |
public |
boolean |
canAddItemStackboolean canAddItemStack(@Nonnull ItemStack var1) |
public |
boolean |
canAddItemStackboolean canAddItemStack(@Nonnull ItemStack var1, boolean var2, boolean var3) |
public |
boolean |
canAddItemStackToSlotboolean canAddItemStackToSlot(short var1, @Nonnull ItemStack var2, boolean var3, boolean var4) |
public |
boolean |
canAddItemStacksboolean canAddItemStacks(List<ItemStack> var1) |
public |
boolean |
canAddItemStacksboolean canAddItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveItemStackboolean canRemoveItemStack(ItemStack var1) |
public |
boolean |
canRemoveItemStackboolean canRemoveItemStack(@Nullable ItemStack var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveItemStacksboolean canRemoveItemStacks(List<ItemStack> var1) |
public |
boolean |
canRemoveItemStacksboolean canRemoveItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveMaterialboolean canRemoveMaterial(MaterialQuantity var1) |
public |
boolean |
canRemoveMaterialboolean canRemoveMaterial(@Nullable MaterialQuantity var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveMaterialsboolean canRemoveMaterials(List<MaterialQuantity> var1) |
public |
boolean |
canRemoveMaterialsboolean canRemoveMaterials(@Nullable List<MaterialQuantity> var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveResourceboolean canRemoveResource(ResourceQuantity var1) |
public |
boolean |
canRemoveResourceboolean canRemoveResource(@Nullable ResourceQuantity var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveResourcesboolean canRemoveResources(List<ResourceQuantity> var1) |
public |
boolean |
canRemoveResourcesboolean canRemoveResources(@Nullable List<ResourceQuantity> var1, boolean var2, boolean var3) |
public |
boolean |
canRemoveTagboolean canRemoveTag(int var1, int var2) |
public |
boolean |
canRemoveTagboolean canRemoveTag(int var1, int var2, boolean var3, boolean var4) |
abstract abstract |
boolean |
cantAddToSlotboolean cantAddToSlot(short var1, ItemStack var2, ItemStack var3) |
abstract abstract |
boolean |
cantDropFromSlotboolean cantDropFromSlot(short var1) |
abstract abstract |
boolean |
cantMoveToSlotboolean cantMoveToSlot(ItemContainer var1, short var2) |
abstract abstract |
boolean |
cantRemoveFromSlotboolean cantRemoveFromSlot(short var1) |
public |
ClearTransaction |
clearClearTransaction clear() |
abstract abstract |
ItemContainer |
cloneItemContainer clone() |
public |
boolean |
containsContainerboolean containsContainer(ItemContainer var1) |
public |
boolean |
containsItemStacksStackableWithboolean containsItemStacksStackableWith(@Nonnull ItemStack var1) |
public |
int |
countItemStacksint countItemStacks(@Nonnull Predicate<ItemStack> var1) |
public |
int |
countRemovableMaterialint countRemovableMaterial(@Nonnull MaterialQuantity var1) |
public |
int |
countRemovableMaterialint countRemovableMaterial(@Nonnull MaterialQuantity var1, boolean var2) |
public |
void |
doMigrationvoid doMigration(Function<String, String> var1) |
static |
<T extends ItemContainer> T |
ensureContainerCapacity<T extends ItemContainer> T ensureContainerCapacity(@Nullable T var0, short var1, @Nonnull Short2ObjectConcurrentHashMap.ShortFunction<T> var2, @Nullable List<ItemStack> var3) |
|
|
for for(short var5 = 0; var5 < var3; var5++) |
|
|
for for(ItemContainer var10 : var4) |
|
|
for for(ItemContainer var11 : var5) |
|
|
for for(ItemContainer var5 : var1) |
|
|
for for(int var11 = 0; var11 < var6 && var15 < var5; var11++) |
|
|
for for(short var6 = 0; var6 < var4; var6++) |
|
|
for for(ItemStack var6 : var1) |
|
|
for for(ItemContainer.TempItemData var5 : var4) |
|
|
for for(ItemStack var5 : var1) |
|
|
for for(ResourceQuantity var5 : var1) |
|
|
for for(MaterialQuantity var5 : var1) |
|
|
for for(MaterialQuantity var6 : var1) |
|
|
for for(short var4 = 0; var4 < var2.length; var4++) |
|
|
for for(int var9 = 0; var9 < var3 && var8 > 0; var9++) |
|
|
for for(short var15 = 0; var15 < var2.length; var15++) |
|
|
for for(short var16 = 0; var16 < var2.length && var3 < var2.length; var16++) |
|
|
for for(ItemResourceType var6 : var2) |
abstract |
|
for for(short var6 = 0; var6 < this.getCapacity() |
abstract |
|
for for(short var9 = 0; var9 < this.getCapacity() |
abstract |
|
for for(short var1 = 0; var1 < this.getCapacity() |
abstract |
|
for for(short var3 = 0; var3 < this.getCapacity() |
abstract |
|
for for(short var2 = 0; var2 < this.getCapacity() |
abstract |
|
for for(short var4 = 0; var4 < this.getCapacity() |
public |
void |
forEachvoid forEach(@Nonnull ShortObjectConsumer<ItemStack> var1) |
public |
<T> void |
forEachWithMeta<T> void forEachWithMeta(@Nonnull Short2ObjectConcurrentHashMap.ShortBiObjConsumer<ItemStack, T> var1, T var2) |
abstract abstract |
short |
getCapacityshort getCapacity() |
static |
ItemContainer |
getNewContainerItemContainer getNewContainer(short var0, @Nonnull Short2ObjectConcurrentHashMap.ShortFunction<ItemContainer> var1) |
public |
List<TestRemoveItemSlotResult> |
getSlotMaterialsToRemoveList<TestRemoveItemSlotResult> getSlotMaterialsToRemove(@Nullable List<MaterialQuantity> var1, boolean var2, boolean var3) |
|
|
if if(var6 == null) |
|
|
if if(var10 <= var9) |
|
|
if if(var1 < 0) |
|
|
if if(var4 == null) |
|
|
if if(!var2) |
|
|
if if(var7 == null) |
|
|
if if(!var2) |
|
|
if if(var8 > 0) |
|
|
if if(var6 > 0) |
|
|
if if(var2 && var6 < 0) |
|
|
if if(var6 > 0) |
|
|
if if(var2 && var6 < 0) |
|
|
if if(var6 > 0) |
|
|
if if(var2 && var6 < 0) |
|
|
if if(var7.quantityRemaining > 0) |
|
|
if if(var2 && var7.quantityRemaining < 0) |
|
|
if if(var5 != null) |
|
|
if if(var7 > 1) |
|
|
if if(var11 < var7) |
|
|
if if(var8 > 0) |
|
|
if if(var17 != var19) |
|
|
if if(var18 == null) |
|
|
if if(var2 == null) |
|
|
if if(var0 < 0) |
|
|
if if(var0 < 0) |
|
|
if if(var0 >= var1) |
|
|
if if(var2 != null) |
|
|
if if(var0 == null) |
abstract abstract |
ClearTransaction |
internal_clearClearTransaction internal_clear() |
protected |
MoveTransaction<ItemStackTransaction> |
internal_moveItemStackFromSlotMoveTransaction<ItemStackTransaction> internal_moveItemStackFromSlot(short var1, @Nonnull ItemContainer var2, boolean var3, boolean var4) |
protected |
MoveTransaction<ItemStackTransaction> |
internal_moveItemStackFromSlotMoveTransaction<ItemStackTransaction> internal_moveItemStackFromSlot(short var1, int var2, @Nonnull ItemContainer var3, boolean var4, boolean var5) |
protected |
MoveTransaction<SlotTransaction> |
internal_moveItemStackFromSlotMoveTransaction<SlotTransaction> internal_moveItemStackFromSlot(short var1, int var2, @Nonnull ItemContainer var3, short var4, boolean var5) |
protected |
ItemStackSlotTransaction |
internal_replaceItemStackItemStackSlotTransaction internal_replaceItemStack(short var1, @Nullable ItemStack var2, ItemStack var3) |
protected |
ListTransaction<SlotTransaction> |
internal_sortItemsListTransaction<SlotTransaction> internal_sortItems(@Nonnull SortType var1) |
public |
boolean |
isEmptyboolean isEmpty() |
abstract abstract |
void |
lockForReadvoid lockForRead() |
abstract abstract |
void |
lockForWritevoid lockForWrite() |
abstract abstract |
<V> V |
readAction<V> V readAction(Supplier<V> var1) |
abstract abstract |
<X, V> V |
readAction<X, V> V readAction(Function<X, V> var1, X var2) |
public |
EventRegistration<Void, ItemContainer.ItemContainerChangeEvent> |
registerChangeEventEventRegistration<Void, ItemContainer.ItemContainerChangeEvent> registerChangeEvent(@Nonnull Consumer<ItemContainer.ItemContainerChangeEvent> var1) |
public |
EventRegistration<Void, ItemContainer.ItemContainerChangeEvent> |
registerChangeEventEventRegistration<Void, ItemContainer.ItemContainerChangeEvent> registerChangeEvent(@Nonnull EventPriority var1, @Nonnull Consumer<ItemContainer.ItemContainerChangeEvent> var2) |
public |
EventRegistration<Void, ItemContainer.ItemContainerChangeEvent> |
registerChangeEventEventRegistration<Void, ItemContainer.ItemContainerChangeEvent> registerChangeEvent(short var1, @Nonnull Consumer<ItemContainer.ItemContainerChangeEvent> var2) |
public |
ListTransaction<ItemStackTransaction> |
removeItemStacksListTransaction<ItemStackTransaction> removeItemStacks(List<ItemStack> var1) |
public |
ListTransaction<ItemStackTransaction> |
removeItemStacksListTransaction<ItemStackTransaction> removeItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3) |
public |
ListTransaction<MaterialTransaction> |
removeMaterialsListTransaction<MaterialTransaction> removeMaterials(List<MaterialQuantity> var1) |
public |
ListTransaction<MaterialTransaction> |
removeMaterialsListTransaction<MaterialTransaction> removeMaterials(@Nullable List<MaterialQuantity> var1, boolean var2, boolean var3, boolean var4) |
public |
ListTransaction<MaterialSlotTransaction> |
removeMaterialsOrderedListTransaction<MaterialSlotTransaction> removeMaterialsOrdered(short var1, List<MaterialQuantity> var2) |
public |
ListTransaction<MaterialSlotTransaction> |
removeMaterialsOrderedListTransaction<MaterialSlotTransaction> removeMaterialsOrdered(List<MaterialQuantity> var1, boolean var2, boolean var3, boolean var4) |
public |
ListTransaction<MaterialSlotTransaction> |
removeMaterialsOrderedListTransaction<MaterialSlotTransaction> removeMaterialsOrdered(short var1, @Nullable List<MaterialQuantity> var2, boolean var3, boolean var4, boolean var5) |
public |
ListTransaction<ResourceTransaction> |
removeResourcesListTransaction<ResourceTransaction> removeResources(List<ResourceQuantity> var1) |
public |
ListTransaction<ResourceTransaction> |
removeResourcesListTransaction<ResourceTransaction> removeResources(@Nullable List<ResourceQuantity> var1, boolean var2, boolean var3, boolean var4) |
public |
ListTransaction<ItemStackSlotTransaction> |
replaceAllListTransaction<ItemStackSlotTransaction> replaceAll(SlotReplacementFunction var1) |
private |
ListTransaction<ItemStackSlotTransaction> |
replaceAllListTransaction<ItemStackSlotTransaction> replaceAll(SlotReplacementFunction var1, boolean var2) |
protected |
void |
sendUpdatevoid sendUpdate(@Nonnull Transaction var1) |
abstract abstract |
void |
setGlobalFiltervoid setGlobalFilter(FilterType var1) |
abstract abstract |
void |
setSlotFiltervoid setSlotFilter(FilterActionType var1, short var2, SlotFilter var3) |
|
public String |
toStringpublic String toString() |
abstract abstract |
void |
unlockForReadvoid unlockForRead() |
abstract abstract |
void |
unlockForWritevoid unlockForWrite() |
static |
void |
validateQuantityvoid validateQuantity(int var0) |
abstract |
|
validateQuantity validateQuantity(var2) |
static |
void |
validateSlotIndexvoid validateSlotIndex(short var0, int var1) |
abstract abstract |
<V> V |
writeAction<V> V writeAction(Supplier<V> var1) |
abstract abstract |
<X, V> V |
writeAction<X, V> V writeAction(Function<X, V> var1, X var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.inventory.container;
class="kw">import com.hypixel.fastutil.shorts.Short2ObjectConcurrentHashMap;
class="kw">import com.hypixel.hytale.codec.lookup.CodecMapCodec;
class="kw">import com.hypixel.hytale.event.EventPriority;
class="kw">import com.hypixel.hytale.event.EventRegistration;
class="kw">import com.hypixel.hytale.event.IEvent;
class="kw">import com.hypixel.hytale.event.SyncEventBusRegistry;
class="kw">import com.hypixel.hytale.function.consumer.ShortObjectConsumer;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.InventorySection;
class="kw">import com.hypixel.hytale.protocol.ItemResourceType;
class="kw">import com.hypixel.hytale.protocol.ItemWithAllMetadata;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.MaterialQuantity;
class="kw">import com.hypixel.hytale.server.core.inventory.ResourceQuantity;
class="kw">import com.hypixel.hytale.server.core.inventory.container.filter.FilterActionType;
class="kw">import com.hypixel.hytale.server.core.inventory.container.filter.FilterType;
class="kw">import com.hypixel.hytale.server.core.inventory.container.filter.SlotFilter;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ActionType;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ClearTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ListTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.MaterialSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.MaterialTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.MoveTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.MoveType;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ResourceSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ResourceTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.SlotTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.TagSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.TagTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.Transaction;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrays;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.function.Function;
class="kw">import java.util.function.Predicate;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">abstract class ItemContainer {
class="kw">public class="kw">static class="kw">final CodecMapCodec<ItemContainer> CODEC = new CodecMapCodec<>(true);
class="kw">public class="kw">static class="kw">final boolean DEFAULT_ADD_ALL_OR_NOTHING = false;
class="kw">public class="kw">static class="kw">final boolean DEFAULT_REMOVE_ALL_OR_NOTHING = true;
class="kw">public class="kw">static class="kw">final boolean DEFAULT_FULL_STACKS = false;
class="kw">public class="kw">static class="kw">final boolean DEFAULT_EXACT_AMOUNT = true;
class="kw">public class="kw">static class="kw">final boolean DEFAULT_FILTER = true;
class="kw">protected class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">protected class="kw">final SyncEventBusRegistry<Void, ItemContainer.ItemContainerChangeEvent> externalChangeEventRegistry = new SyncEventBusRegistry<>(
LOGGER, ItemContainer.ItemContainerChangeEvent.class
);
class="kw">protected class="kw">final SyncEventBusRegistry<Void, ItemContainer.ItemContainerChangeEvent> internalChangeEventRegistry = new SyncEventBusRegistry<>(
LOGGER, ItemContainer.ItemContainerChangeEvent.class
);
class="kw">public ItemContainer() {
}
class="kw">public class="kw">abstract short getCapacity();
class="kw">public class="kw">abstract void setGlobalFilter(FilterType var1);
class="kw">public class="kw">abstract void setSlotFilter(FilterActionType var1, short var2, SlotFilter var3);
class="kw">public class="kw">abstract ItemContainer clone();
class="kw">protected class="kw">abstract <V> V readAction(Supplier<V> var1);
class="kw">protected class="kw">abstract <X, V> V readAction(Function<X, V> var1, X var2);
class="kw">protected class="kw">abstract <V> V writeAction(Supplier<V> var1);
class="kw">protected class="kw">abstract <X, V> V writeAction(Function<X, V> var1, X var2);
class="kw">protected class="kw">abstract void lockForRead();
class="kw">protected class="kw">abstract void unlockForRead();
class="kw">protected class="kw">abstract void lockForWrite();
class="kw">protected class="kw">abstract void unlockForWrite();
class="kw">protected class="kw">abstract ClearTransaction internal_clear();
@Nullable
class="kw">protected class="kw">abstract ItemStack internal_getSlot(short var1);
@Nullable
class="kw">protected class="kw">abstract ItemStack internal_setSlot(short var1, ItemStack var2);
@Nullable
class="kw">protected class="kw">abstract ItemStack internal_removeSlot(short var1);
class="kw">protected class="kw">abstract boolean cantAddToSlot(short var1, ItemStack var2, ItemStack var3);
class="kw">protected class="kw">abstract boolean cantRemoveFromSlot(short var1);
class="kw">protected class="kw">abstract boolean cantDropFromSlot(short var1);
class="kw">protected class="kw">abstract boolean cantMoveToSlot(ItemContainer var1, short var2);
@Nonnull
class="kw">public InventorySection toPacket() {
InventorySection var1 = new InventorySection();
var1.capacity = this.getCapacity();
var1.items = this.toProtocolMap();
class="kw">return var1;
}
@Nonnull
class="kw">public Map<Integer, ItemWithAllMetadata> toProtocolMap() {
Map var1 = new Int2ObjectOpenHashMap();
this.forEachWithMeta((var0, var1x, var2) -> {
if (!ItemStack.isEmpty(var1x) && var1x.isValid()) {
var2.put(Integer.valueOf(var0), var1x.toPacket());
}
}, var1);
class="kw">return var1;
}
class="kw">public EventRegistration<Void, ItemContainer.ItemContainerChangeEvent> registerChangeEvent(@Nonnull Consumer<ItemContainer.ItemContainerChangeEvent> var1) {
class="kw">return this.registerChangeEvent((short)0, var1);
}
class="kw">public EventRegistration<Void, ItemContainer.ItemContainerChangeEvent> registerChangeEvent(
@Nonnull EventPriority var1, @Nonnull Consumer<ItemContainer.ItemContainerChangeEvent> var2
) {
class="kw">return this.registerChangeEvent(var1.getValue(), var2);
}
class="kw">public EventRegistration<Void, ItemContainer.ItemContainerChangeEvent> registerChangeEvent(
short var1, @Nonnull Consumer<ItemContainer.ItemContainerChangeEvent> var2
) {
class="kw">return this.externalChangeEventRegistry.register(var1, null, var2);
}
class="kw">public ClearTransaction clear() {
ClearTransaction var1 = this.writeAction(this::internal_clear);
this.sendUpdate(var1);
class="kw">return var1;
}
class="kw">public boolean canAddItemStackToSlot(short var1, @Nonnull ItemStack var2, boolean var3, boolean var4) {
validateSlotIndex(var1, this.getCapacity());
class="kw">return this.writeAction(() -> {
int var5 = var2.getQuantity();
ItemStack var6 = this.internal_getSlot(var1);
if (var4 && this.cantAddToSlot(var1, var2, var6)) {
class="kw">return false;
}
if (var6 == null) {
class="kw">return true;
}
if (!var2.isStackableWith(var6)) {
class="kw">return false;
}
int var7 = var6.getQuantity();
int var8 = Math.min(var6.getItem().getMaxStack() - var7, var5);
int var9 = var5 - var8;
class="kw">return var3 ? var5 <= 0 : var5 != var9;
});
}
@Nonnull
class="kw">public ItemStackSlotTransaction addItemStackToSlot(short var1, @Nonnull ItemStack var2) {
class="kw">return this.addItemStackToSlot(var1, var2, false, true);
}
@Nonnull
class="kw">public ItemStackSlotTransaction addItemStackToSlot(short var1, @Nonnull ItemStack var2, boolean var3, boolean var4) {
ItemStackSlotTransaction var5 = InternalContainerUtilItemStack.internal_addItemStackToSlot(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
}
@Nonnull
class="kw">public ItemStackSlotTransaction setItemStackForSlot(short var1, ItemStack var2) {
class="kw">return this.setItemStackForSlot(var1, var2, true);
}
@Nonnull
class="kw">public ItemStackSlotTransaction setItemStackForSlot(short var1, ItemStack var2, boolean var3) {
ItemStackSlotTransaction var4 = InternalContainerUtilItemStack.internal_setItemStackForSlot(this, var1, var2, var3);
this.sendUpdate(var4);
class="kw">return var4;
}
@Nullable
class="kw">public ItemStack getItemStack(short var1) {
validateSlotIndex(var1, this.getCapacity());
class="kw">return this.readAction(() -> this.internal_getSlot(var1));
}
@Nonnull
class="kw">public ItemStackSlotTransaction replaceItemStackInSlot(short var1, ItemStack var2, ItemStack var3) {
ItemStackSlotTransaction var4 = this.internal_replaceItemStack(var1, var2, var3);
this.sendUpdate(var4);
class="kw">return var4;
}
class="kw">public ListTransaction<ItemStackSlotTransaction> replaceAll(SlotReplacementFunction var1) {
class="kw">return this.replaceAll(var1, true);
}
class="kw">private ListTransaction<ItemStackSlotTransaction> replaceAll(SlotReplacementFunction var1, boolean var2) {
ListTransaction var3 = this.writeAction(() -> {
short var3 = this.getCapacity();
ObjectArrayList var4 = new ObjectArrayList(var3);
for (short var5 = 0; var5 < var3; var5++) {
ItemStack var6 = this.internal_getSlot(var5);
if (!var2 || !ItemStack.isEmpty(var6)) {
ItemStack var7 = var1.replace(var5, var6);
this.internal_setSlot(var5, var7);
var4.add(new ItemStackSlotTransaction(true, ActionType.REPLACE, var5, var6, var7, var6, true, false, false, false, var7, var7));
}
}
class="kw">return new ListTransaction<>(true, var4);
});
this.sendUpdate(var3);
class="kw">return var3;
}
class="kw">protected ItemStackSlotTransaction internal_replaceItemStack(short var1, @Nullable ItemStack var2, ItemStack var3) {
validateSlotIndex(var1, this.getCapacity());
class="kw">return this.writeAction(() -> {
ItemStack var4 = this.internal_getSlot(var1);
if ((var4 != null || var2 == null) && (var4 == null || var2 != null) && (var4 == null || var2.isStackableWith(var4))) {
this.internal_setSlot(var1, var3);
class="kw">return new ItemStackSlotTransaction(true, ActionType.REPLACE, var1, var4, var3, var4, true, false, false, false, var3, null);
} else {
class="kw">return new ItemStackSlotTransaction(false, ActionType.REPLACE, var1, var4, var4, null, true, false, false, false, var3, var3);
}
});
}
@Nonnull
class="kw">public SlotTransaction removeItemStackFromSlot(short var1) {
class="kw">return this.removeItemStackFromSlot(var1, true);
}
@Nonnull
class="kw">public SlotTransaction removeItemStackFromSlot(short var1, boolean var2) {
SlotTransaction var3 = InternalContainerUtilItemStack.internal_removeItemStackFromSlot(this, var1, var2);
this.sendUpdate(var3);
class="kw">return var3;
}
@Nonnull
class="kw">public ItemStackSlotTransaction removeItemStackFromSlot(short var1, int var2) {
class="kw">return this.removeItemStackFromSlot(var1, var2, true, true);
}
@Nonnull
class="kw">public ItemStackSlotTransaction removeItemStackFromSlot(short var1, int var2, boolean var3, boolean var4) {
ItemStackSlotTransaction var5 = InternalContainerUtilItemStack.internal_removeItemStackFromSlot(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
}
@Deprecated
class="kw">public ItemStackSlotTransaction internal_removeItemStack(short var1, int var2) {
class="kw">return InternalContainerUtilItemStack.internal_removeItemStackFromSlot(this, var1, var2, true, true);
}
@Nonnull
class="kw">public ItemStackSlotTransaction removeItemStackFromSlot(short var1, ItemStack var2, int var3) {
class="kw">return this.removeItemStackFromSlot(var1, var2, var3, true, true);
}
@Nonnull
class="kw">public ItemStackSlotTransaction removeItemStackFromSlot(short var1, ItemStack var2, int var3, boolean var4, boolean var5) {
ItemStackSlotTransaction var6 = InternalContainerUtilItemStack.internal_removeItemStackFromSlot(this, var1, var2, var3, var4, var5);
this.sendUpdate(var6);
class="kw">return var6;
}
@Nonnull
class="kw">public MaterialSlotTransaction removeMaterialFromSlot(short var1, @Nonnull MaterialQuantity var2) {
class="kw">return this.removeMaterialFromSlot(var1, var2, true, true, true);
}
@Nonnull
class="kw">public MaterialSlotTransaction removeMaterialFromSlot(short var1, @Nonnull MaterialQuantity var2, boolean var3, boolean var4, boolean var5) {
MaterialSlotTransaction var6 = InternalContainerUtilMaterial.internal_removeMaterialFromSlot(this, var1, var2, var3, var5);
this.sendUpdate(var6);
class="kw">return var6;
}
@Nonnull
class="kw">public ResourceSlotTransaction removeResourceFromSlot(short var1, @Nonnull ResourceQuantity var2) {
class="kw">return this.removeResourceFromSlot(var1, var2, true, true, true);
}
@Nonnull
class="kw">public ResourceSlotTransaction removeResourceFromSlot(short var1, @Nonnull ResourceQuantity var2, boolean var3, boolean var4, boolean var5) {
ResourceSlotTransaction var6 = InternalContainerUtilResource.internal_removeResourceFromSlot(this, var1, var2, var3, var5);
this.sendUpdate(var6);
class="kw">return var6;
}
@Nonnull
class="kw">public TagSlotTransaction removeTagFromSlot(short var1, int var2, int var3) {
class="kw">return this.removeTagFromSlot(var1, var2, var3, true, true);
}
@Nonnull
class="kw">public TagSlotTransaction removeTagFromSlot(short var1, int var2, int var3, boolean var4, boolean var5) {
TagSlotTransaction var6 = InternalContainerUtilTag.internal_removeTagFromSlot(this, var1, var2, var3, var4, var5);
this.sendUpdate(var6);
class="kw">return var6;
}
@Nonnull
class="kw">public MoveTransaction<ItemStackTransaction> moveItemStackFromSlot(short var1, @Nonnull ItemContainer var2) {
class="kw">return this.moveItemStackFromSlot(var1, var2, true);
}
@Nonnull
class="kw">public MoveTransaction<ItemStackTransaction> moveItemStackFromSlot(short var1, @Nonnull ItemContainer var2, boolean var3) {
class="kw">return this.moveItemStackFromSlot(var1, var2, false, var3);
}
@Nonnull
class="kw">public MoveTransaction<ItemStackTransaction> moveItemStackFromSlot(short var1, @Nonnull ItemContainer var2, boolean var3, boolean var4) {
MoveTransaction var5 = this.internal_moveItemStackFromSlot(var1, var2, var3, var4);
this.sendUpdate(var5);
var2.sendUpdate(var5.toInverted(this));
class="kw">return var5;
}
class="kw">protected MoveTransaction<ItemStackTransaction> internal_moveItemStackFromSlot(short var1, @Nonnull ItemContainer var2, boolean var3, boolean var4) {
validateSlotIndex(var1, this.getCapacity());
class="kw">return this.writeAction(() -> var2.writeAction(() -> {
if (var4 && this.cantRemoveFromSlot(var1)) {
class="kw">return null;
}
ItemStack var5 = this.internal_removeSlot(var1);
if (ItemStack.isEmpty(var5)) {
SlotTransaction var9 = new SlotTransaction(false, ActionType.REMOVE, var1, null, null, null, false, false, var4);
class="kw">return new MoveTransaction<>(false, var9, MoveType.MOVE_FROM_SELF, var2, ItemStackTransaction.FAILED_ADD);
}
SlotTransaction var6 = new SlotTransaction(true, ActionType.REMOVE, var1, var5, null, null, false, false, var4);
ItemStackTransaction var7 = InternalContainerUtilItemStack.internal_addItemStack(var2, var5, var3, false, var4);
ItemStack var8 = var7.getRemainder();
if (!ItemStack.isEmpty(var8)) {
InternalContainerUtilItemStack.internal_addItemStackToSlot(this, var1, var8, var3, false);
}
class="kw">return new MoveTransaction<>(var7.succeeded(), var6, MoveType.MOVE_FROM_SELF, var2, var7);
}));
}
@Nonnull
class="kw">public MoveTransaction<ItemStackTransaction> moveItemStackFromSlot(short var1, int var2, @Nonnull ItemContainer var3) {
class="kw">return this.moveItemStackFromSlot(var1, var2, var3, false, true);
}
@Nonnull
class="kw">public MoveTransaction<ItemStackTransaction> moveItemStackFromSlot(short var1, int var2, @Nonnull ItemContainer var3, boolean var4, boolean var5) {
MoveTransaction var6 = this.internal_moveItemStackFromSlot(var1, var2, var3, var4, var5);
this.sendUpdate(var6);
var3.sendUpdate(var6.toInverted(this));
class="kw">return var6;
}
class="kw">protected MoveTransaction<ItemStackTransaction> internal_moveItemStackFromSlot(short var1, int var2, @Nonnull ItemContainer var3, boolean var4, boolean var5) {
validateSlotIndex(var1, this.getCapacity());
validateQuantity(var2);
class="kw">return this.writeAction(() -> var3.writeAction(() -> {
if (var5 && this.cantRemoveFromSlot(var1)) {
class="kw">return null;
}
if (var5 && var3.cantMoveToSlot(this, var1)) {
ItemStack var10 = this.internal_getSlot(var1);
SlotTransaction var12 = new SlotTransaction(false, ActionType.REMOVE, var1, var10, var10, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var12, MoveType.MOVE_FROM_SELF, var3, ItemStackTransaction.FAILED_ADD);
}
ItemStackSlotTransaction var6 = this.internal_removeItemStack(var1, var2);
if (!var6.succeeded()) {
SlotTransaction var11 = new SlotTransaction(false, ActionType.REMOVE, var1, null, null, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var11, MoveType.MOVE_FROM_SELF, var3, ItemStackTransaction.FAILED_ADD);
}
ItemStack var7 = var6.getOutput();
if (ItemStack.isEmpty(var7)) {
SlotTransaction var13 = new SlotTransaction(false, ActionType.REMOVE, var1, null, null, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var13, MoveType.MOVE_FROM_SELF, var3, ItemStackTransaction.FAILED_ADD);
}
ItemStackTransaction var8 = InternalContainerUtilItemStack.internal_addItemStack(var3, var7, var4, false, var5);
ItemStack var9 = var8.getRemainder();
if (!ItemStack.isEmpty(var9)) {
InternalContainerUtilItemStack.internal_addItemStackToSlot(this, var1, var9, var4, false);
}
class="kw">return new MoveTransaction<>(var8.succeeded(), var6, MoveType.MOVE_FROM_SELF, var3, var8);
}));
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> moveItemStackFromSlot(short var1, ItemContainer... var2) {
class="kw">return this.moveItemStackFromSlot(var1, false, true, var2);
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> moveItemStackFromSlot(short var1, boolean var2, boolean var3, @Nonnull ItemContainer... var4) {
ListTransaction var5 = this.internal_moveItemStackFromSlot(var1, var2, var3, var4);
this.sendUpdate(var5);
for (MoveTransaction var7 : var5.getList()) {
var7.getOtherContainer().sendUpdate(var7.toInverted(this));
}
class="kw">return var5;
}
@Nonnull
class="kw">private ListTransaction<MoveTransaction<ItemStackTransaction>> internal_moveItemStackFromSlot(
short var1, boolean var2, boolean var3, @Nonnull ItemContainer[] var4
) {
List var5 = new ObjectArrayList();
boolean var6 = false;
for (ItemContainer var10 : var4) {
MoveTransaction var11 = this.internal_moveItemStackFromSlot(var1, var10, var2, var3);
var5.add(var11);
if (var11.succeeded()) {
var6 = true;
ItemStackTransaction var12 = var11.getAddTransaction();
if (ItemStack.isEmpty(var12.getRemainder())) {
break;
}
}
}
class="kw">return new ListTransaction<>(var6, var5);
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> moveItemStackFromSlot(short var1, int var2, ItemContainer... var3) {
class="kw">return this.moveItemStackFromSlot(var1, var2, false, true, var3);
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> moveItemStackFromSlot(
short var1, int var2, boolean var3, boolean var4, @Nonnull ItemContainer... var5
) {
ListTransaction var6 = this.internal_moveItemStackFromSlot(var1, var2, var3, var4, var5);
this.sendUpdate(var6);
for (MoveTransaction var8 : var6.getList()) {
var8.getOtherContainer().sendUpdate(var8.toInverted(this));
}
class="kw">return var6;
}
@Nonnull
class="kw">private ListTransaction<MoveTransaction<ItemStackTransaction>> internal_moveItemStackFromSlot(
short var1, int var2, boolean var3, boolean var4, @Nonnull ItemContainer[] var5
) {
List var6 = new ObjectArrayList();
boolean var7 = false;
for (ItemContainer var11 : var5) {
MoveTransaction var12 = this.internal_moveItemStackFromSlot(var1, var2, var11, var3, var4);
var6.add(var12);
if (var12.succeeded()) {
var7 = true;
ItemStackTransaction var13 = var12.getAddTransaction();
if (ItemStack.isEmpty(var13.getRemainder())) {
break;
}
}
}
class="kw">return new ListTransaction<>(var7, var6);
}
@Nonnull
class="kw">public MoveTransaction<SlotTransaction> moveItemStackFromSlotToSlot(short var1, int var2, @Nonnull ItemContainer var3, short var4) {
class="kw">return this.moveItemStackFromSlotToSlot(var1, var2, var3, var4, true);
}
@Nonnull
class="kw">public MoveTransaction<SlotTransaction> moveItemStackFromSlotToSlot(short var1, int var2, @Nonnull ItemContainer var3, short var4, boolean var5) {
MoveTransaction var6 = this.internal_moveItemStackFromSlot(var1, var2, var3, var4, var5);
this.sendUpdate(var6);
var3.sendUpdate(var6.toInverted(this));
class="kw">return var6;
}
class="kw">protected MoveTransaction<SlotTransaction> internal_moveItemStackFromSlot(short var1, int var2, @Nonnull ItemContainer var3, short var4, boolean var5) {
validateSlotIndex(var1, this.getCapacity());
validateSlotIndex(var4, var3.getCapacity());
validateQuantity(var2);
class="kw">return this.writeAction(
() -> var3.writeAction(
() -> {
if (var5 && this.cantRemoveFromSlot(var1)) {
ItemStack var15 = this.internal_getSlot(var1);
SlotTransaction var17 = new SlotTransaction(false, ActionType.REMOVE, var1, var15, var15, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var17, MoveType.MOVE_FROM_SELF, var3, SlotTransaction.FAILED_ADD);
}
if (var5 && var3.cantMoveToSlot(this, var1)) {
ItemStack var14 = this.internal_getSlot(var1);
SlotTransaction var16 = new SlotTransaction(false, ActionType.REMOVE, var1, var14, var14, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var16, MoveType.MOVE_FROM_SELF, var3, SlotTransaction.FAILED_ADD);
}
ItemStackSlotTransaction var6 = this.internal_removeItemStack(var1, var2);
if (!var6.succeeded()) {
class="kw">return new MoveTransaction<>(false, var6, MoveType.MOVE_FROM_SELF, var3, SlotTransaction.FAILED_ADD);
}
ItemStack var7 = var6.getOutput();
if (ItemStack.isEmpty(var7)) {
class="kw">return new MoveTransaction<>(true, var6, MoveType.MOVE_FROM_SELF, var3, SlotTransaction.FAILED_ADD);
}
ItemStack var8 = var3.getItemStack(var4);
if (var5 && var3.cantAddToSlot(var4, var7, var8)) {
this.internal_setSlot(var1, var6.getSlotBefore());
SlotTransaction var22 = new SlotTransaction(
true, ActionType.REMOVE, var1, var6.getSlotBefore(), var6.getSlotAfter(), null, false, false, var5
);
SlotTransaction var26 = new SlotTransaction(false, ActionType.ADD, var4, var8, var8, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var22, MoveType.MOVE_FROM_SELF, var3, var26);
}
if (ItemStack.isEmpty(var8)) {
ItemStackSlotTransaction var21 = InternalContainerUtilItemStack.internal_setItemStackForSlot(var3, var4, var7, var5);
class="kw">return new MoveTransaction<>(true, var6, MoveType.MOVE_FROM_SELF, var3, var21);
}
if (!var7.isStackableWith(var8)) {
if (ItemStack.isEmpty(var6.getSlotAfter())) {
if (var5 && this.cantAddToSlot(var1, var8, var7)) {
this.internal_setSlot(var1, var6.getSlotBefore());
SlotTransaction var20 = new SlotTransaction(
true, ActionType.REMOVE, var1, var6.getSlotBefore(), var6.getSlotAfter(), null, false, false, var5
);
SlotTransaction var25 = new SlotTransaction(false, ActionType.ADD, var4, var8, var8, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var20, MoveType.MOVE_FROM_SELF, var3, var25);
} else {
this.internal_setSlot(var1, var8);
var3.internal_setSlot(var4, var7);
SlotTransaction var19 = new SlotTransaction(true, ActionType.REPLACE, var1, var7, var8, null, false, false, var5);
SlotTransaction var24 = new SlotTransaction(true, ActionType.REPLACE, var4, var8, var7, null, false, false, var5);
class="kw">return new MoveTransaction<>(true, var19, MoveType.MOVE_FROM_SELF, var3, var24);
}
} else {
this.internal_setSlot(var1, var6.getSlotBefore());
SlotTransaction var18 = new SlotTransaction(
true, ActionType.REMOVE, var1, var6.getSlotBefore(), var6.getSlotAfter(), null, false, false, var5
);
SlotTransaction var23 = new SlotTransaction(false, ActionType.ADD, var4, var8, var8, null, false, false, var5);
class="kw">return new MoveTransaction<>(false, var18, MoveType.MOVE_FROM_SELF, var3, var23);
}
} else {
int var9 = var7.getItem().getMaxStack();
int var10 = var7.getQuantity() + var8.getQuantity();
if (var10 <= var9) {
ItemStackSlotTransaction var27 = InternalContainerUtilItemStack.internal_setItemStackForSlot(var3, var4, var8.withQuantity(var10), var5);
class="kw">return new MoveTransaction<>(true, var6, MoveType.MOVE_FROM_SELF, var3, var27);
} else {
ItemStackSlotTransaction var11 = InternalContainerUtilItemStack.internal_setItemStackForSlot(var3, var4, var8.withQuantity(var9), var5);
int var12 = var10 - var9;
int var13 = !ItemStack.isEmpty(var6.getSlotAfter()) ? var6.getSlotAfter().getQuantity() : 0;
this.internal_setSlot(var1, var7.withQuantity(var12 + var13));
class="kw">return new MoveTransaction<>(true, var6, MoveType.MOVE_FROM_SELF, var3, var11);
}
}
}
)
);
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> moveAllItemStacksTo(ItemContainer... var1) {
class="kw">return this.moveAllItemStacksTo(null, var1);
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> moveAllItemStacksTo(Predicate<ItemStack> var1, ItemContainer... var2) {
ListTransaction var3 = this.internal_moveAllItemStacksTo(var1, var2);
this.sendUpdate(var3);
for (MoveTransaction var5 : var3.getList()) {
var5.getOtherContainer().sendUpdate(var5.toInverted(this));
}
class="kw">return var3;
}
@Nonnull
class="kw">protected ListTransaction<MoveTransaction<ItemStackTransaction>> internal_moveAllItemStacksTo(@Nullable Predicate<ItemStack> var1, ItemContainer[] var2) {
class="kw">return this.writeAction(() -> {
List var3 = new ObjectArrayList();
boolean var4 = false;
for (short var6 = 0; var6 < this.getCapacity(); var6++) {
if (!this.cantRemoveFromSlot(var6)) {
ItemStack var5 = this.internal_getSlot(var6);
if (!ItemStack.isEmpty(var5) && (var1 == null || var1.test(var5))) {
for (MoveTransaction var8 : this.moveItemStackFromSlot(var6, var2).getList()) {
var3.add(var8);
if (var8.succeeded()) {
var4 = true;
}
}
}
}
}
class="kw">return new ListTransaction<>(var3.isEmpty() || var4, var3);
});
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<ItemStackTransaction>> quickStackTo(@Nonnull ItemContainer... var1) {
class="kw">return this.moveAllItemStacksTo(var1x -> {
for (ItemContainer var5 : var1) {
if (var5.containsItemStacksStackableWith(var1x)) {
class="kw">return true;
}
}
class="kw">return false;
}, var1);
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<SlotTransaction>> combineItemStacksIntoSlot(@Nonnull ItemContainer var1, short var2) {
ListTransaction var3 = this.internal_combineItemStacksIntoSlot(var1, var2);
this.sendUpdate(var3);
for (MoveTransaction var5 : var3.getList()) {
var5.getOtherContainer().sendUpdate(var5.toInverted(this));
}
class="kw">return var3;
}
@Nonnull
class="kw">protected ListTransaction<MoveTransaction<SlotTransaction>> internal_combineItemStacksIntoSlot(@Nonnull ItemContainer var1, short var2) {
validateSlotIndex(var2, var1.getCapacity());
class="kw">return this.writeAction(() -> {
ItemStack var3 = var1.internal_getSlot(var2);
Item var4 = var3.getItem();
int var5 = var4.getMaxStack();
if (!ItemStack.isEmpty(var3) && var3.getQuantity() < var5) {
int var6 = 0;
int[] var7 = new int[this.getCapacity()];
int[] var8 = new int[this.getCapacity()];
for (short var9 = 0; var9 < this.getCapacity(); var9++) {
if (!this.cantRemoveFromSlot(var9)) {
ItemStack var10 = this.internal_getSlot(var9);
if (var3 != var10 && !ItemStack.isEmpty(var10) && var10.isStackableWith(var3)) {
var8[var6] = var9;
var7[var6] = var10.getQuantity();
var6++;
}
}
}
IntArrays.quickSort(var7, var8, 0, var6);
int var15 = var3.getQuantity();
List var16 = new ObjectArrayList();
for (int var11 = 0; var11 < var6 && var15 < var5; var11++) {
short var12 = (short)var8[var11];
ItemStack var13 = this.internal_getSlot(var12);
MoveTransaction var14 = this.internal_moveItemStackFromSlot(var12, var13.getQuantity(), var1, var2, true);
var16.add(var14);
var15 = !ItemStack.isEmpty(var14.getAddTransaction().getSlotAfter()) ? var14.getAddTransaction().getSlotAfter().getQuantity() : 0;
}
class="kw">return new ListTransaction<>(true, var16);
} else {
class="kw">return new ListTransaction<>(false, Collections.emptyList());
}
});
}
@Nonnull
class="kw">public ListTransaction<MoveTransaction<SlotTransaction>> swapItems(short var1, @Nonnull ItemContainer var2, short var3, short var4) {
ListTransaction var5 = this.internal_swapItems(var1, var2, var3, var4);
this.sendUpdate(var5);
for (MoveTransaction var7 : var5.getList()) {
var7.getOtherContainer().sendUpdate(var7.toInverted(this));
}
class="kw">return var5;
}
@Nonnull
class="kw">protected ListTransaction<MoveTransaction<SlotTransaction>> internal_swapItems(short var1, @Nonnull ItemContainer var2, short var3, short var4) {
if (var1 < 0) {
throw new IndexOutOfBoundsException("srcPos < 0");
} else if (var1 + var4 > this.getCapacity()) {
throw new IndexOutOfBoundsException("srcPos + length > capacity");
} else if (var3 < 0) {
throw new IndexOutOfBoundsException("destPos < 0");
} else if (var3 + var4 > var2.getCapacity()) {
throw new IndexOutOfBoundsException("destPos + length > dest.capacity");
} else {
class="kw">return this.writeAction(() -> var2.writeAction(() -> {
List var5 = new ObjectArrayList(var4);
for (short var6 = 0; var6 < var4; var6++) {
var5.add(this.internal_swapItems(var2, (short)(var1 + var6), (short)(var3 + var6)));
}
class="kw">return new ListTransaction<>(true, var5);
}));
}
}
@Nonnull
class="kw">protected MoveTransaction<SlotTransaction> internal_swapItems(@Nonnull ItemContainer var1, short var2, short var3) {
ItemStack var4 = this.internal_removeSlot(var2);
ItemStack var5 = var1.internal_removeSlot(var3);
if (var5 != null && !var5.isEmpty()) {
this.internal_setSlot(var2, var5);
}
if (var4 != null && !var4.isEmpty()) {
var1.internal_setSlot(var3, var4);
}
SlotTransaction var6 = new SlotTransaction(true, ActionType.REPLACE, var2, var4, var5, null, false, false, false);
SlotTransaction var7 = new SlotTransaction(true, ActionType.REPLACE, var3, var5, var4, null, false, false, false);
class="kw">return new MoveTransaction<>(true, var6, MoveType.MOVE_FROM_SELF, var1, var7);
}
class="kw">public boolean canAddItemStack(@Nonnull ItemStack var1) {
class="kw">return this.canAddItemStack(var1, false, true);
}
class="kw">public boolean canAddItemStack(@Nonnull ItemStack var1, boolean var2, boolean var3) {
Item var4 = var1.getItem();
if (var4 == null) {
throw new IllegalArgumentException(var1.getItemId() + " is an invalid item!");
}
int var5 = var4.getMaxStack();
class="kw">return this.readAction(() -> {
int var5 = var1.getQuantity();
if (!var2) {
var5 = InternalContainerUtilItemStack.testAddToExistingItemStacks(this, var1, var5, var5, var3);
}
var5 = InternalContainerUtilItemStack.testAddToEmptySlots(this, var1, var5, var5, var3);
class="kw">return var5 <= 0;
});
}
@Nonnull
class="kw">public ItemStackTransaction addItemStack(@Nonnull ItemStack var1) {
class="kw">return this.addItemStack(var1, false, false, true);
}
@Nonnull
class="kw">public ItemStackTransaction addItemStack(@Nonnull ItemStack var1, boolean var2, boolean var3, boolean var4) {
ItemStackTransaction var5 = InternalContainerUtilItemStack.internal_addItemStack(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
}
class="kw">public boolean canAddItemStacks(List<ItemStack> var1) {
class="kw">return this.canAddItemStacks(var1, false, true);
}
class="kw">public boolean canAddItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3) {
if (var1 != null && !var1.isEmpty()) {
List var4 = new ObjectArrayList(var1.size());
for (ItemStack var6 : var1) {
Item var7 = var6.getItem();
if (var7 == null) {
throw new IllegalArgumentException(var6.getItemId() + " is an invalid item!");
}
var4.add(new ItemContainer.TempItemData(var6, var7));
}
class="kw">return this.readAction(() -> {
for (ItemContainer.TempItemData var5 : var4) {
int var6 = var5.item().getMaxStack();
ItemStack var7 = var5.itemStack();
int var8 = var7.getQuantity();
if (!var2) {
var8 = InternalContainerUtilItemStack.testAddToExistingItemStacks(this, var7, var6, var8, var3);
}
var8 = InternalContainerUtilItemStack.testAddToEmptySlots(this, var7, var6, var8, var3);
if (var8 > 0) {
class="kw">return false;
}
}
class="kw">return true;
});
} else {
class="kw">return true;
}
}
class="kw">public ListTransaction<ItemStackTransaction> addItemStacks(List<ItemStack> var1) {
class="kw">return this.addItemStacks(var1, false, false, true);
}
class="kw">public ListTransaction<ItemStackTransaction> addItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3, boolean var4) {
if (var1 != null && !var1.isEmpty()) {
ListTransaction var5 = InternalContainerUtilItemStack.internal_addItemStacks(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
} else {
class="kw">return ListTransaction.getEmptyTransaction(true);
}
}
class="kw">public ListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(List<ItemStack> var1) {
class="kw">return this.addItemStacksOrdered(var1, false, true);
}
class="kw">public ListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(short var1, List<ItemStack> var2) {
class="kw">return this.addItemStacksOrdered(var1, var2, false, true);
}
class="kw">public ListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(List<ItemStack> var1, boolean var2, boolean var3) {
class="kw">return this.addItemStacksOrdered((short)0, var1, var2, var3);
}
class="kw">public ListTransaction<ItemStackSlotTransaction> addItemStacksOrdered(short var1, @Nullable List<ItemStack> var2, boolean var3, boolean var4) {
if (var2 != null && !var2.isEmpty()) {
ListTransaction var5 = InternalContainerUtilItemStack.internal_addItemStacksOrdered(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
} else {
class="kw">return ListTransaction.getEmptyTransaction(true);
}
}
class="kw">public boolean canRemoveItemStack(ItemStack var1) {
class="kw">return this.canRemoveItemStack(var1, true, true);
}
class="kw">public boolean canRemoveItemStack(@Nullable ItemStack var1, boolean var2, boolean var3) {
class="kw">return var1 == null ? true : this.readAction(() -> {
int var4 = InternalContainerUtilItemStack.testRemoveItemStackFromItems(this, var1, var1.getQuantity(), var3);
class="kw">return var4 > 0 ? false : !var2 || var4 >= 0;
});
}
@Nonnull
class="kw">public ItemStackTransaction removeItemStack(@Nonnull ItemStack var1) {
class="kw">return this.removeItemStack(var1, true, true);
}
@Nonnull
class="kw">public ItemStackTransaction removeItemStack(@Nonnull ItemStack var1, boolean var2, boolean var3) {
ItemStackTransaction var4 = InternalContainerUtilItemStack.internal_removeItemStack(this, var1, var2, var3);
this.sendUpdate(var4);
class="kw">return var4;
}
class="kw">public boolean canRemoveItemStacks(List<ItemStack> var1) {
class="kw">return this.canRemoveItemStacks(var1, true, true);
}
class="kw">public boolean canRemoveItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3) {
class="kw">return var1 != null && !var1.isEmpty() ? this.readAction(() -> {
for (ItemStack var5 : var1) {
int var6 = InternalContainerUtilItemStack.testRemoveItemStackFromItems(this, var5, var5.getQuantity(), var3);
if (var6 > 0) {
class="kw">return false;
}
if (var2 && var6 < 0) {
class="kw">return false;
}
}
class="kw">return true;
}) : true;
}
class="kw">public ListTransaction<ItemStackTransaction> removeItemStacks(List<ItemStack> var1) {
class="kw">return this.removeItemStacks(var1, true, true);
}
class="kw">public ListTransaction<ItemStackTransaction> removeItemStacks(@Nullable List<ItemStack> var1, boolean var2, boolean var3) {
if (var1 != null && !var1.isEmpty()) {
ListTransaction var4 = InternalContainerUtilItemStack.internal_removeItemStacks(this, var1, var2, var3);
this.sendUpdate(var4);
class="kw">return var4;
} else {
class="kw">return ListTransaction.getEmptyTransaction(true);
}
}
class="kw">public boolean canRemoveTag(int var1, int var2) {
class="kw">return this.canRemoveTag(var1, var2, true, true);
}
class="kw">public boolean canRemoveTag(int var1, int var2, boolean var3, boolean var4) {
class="kw">return this.readAction(() -> {
int var5 = InternalContainerUtilTag.testRemoveTagFromItems(this, var1, var2, var4);
class="kw">return var5 > 0 ? false : !var3 || var5 >= 0;
});
}
@Nonnull
class="kw">public TagTransaction removeTag(int var1, int var2) {
class="kw">return this.removeTag(var1, var2, true, true, true);
}
@Nonnull
class="kw">public TagTransaction removeTag(int var1, int var2, boolean var3, boolean var4, boolean var5) {
TagTransaction var6 = InternalContainerUtilTag.internal_removeTag(this, var1, var2, var3, var4, var5);
this.sendUpdate(var6);
class="kw">return var6;
}
class="kw">public boolean canRemoveResource(ResourceQuantity var1) {
class="kw">return this.canRemoveResource(var1, true, true);
}
class="kw">public boolean canRemoveResource(@Nullable ResourceQuantity var1, boolean var2, boolean var3) {
class="kw">return var1 == null ? true : this.readAction(() -> {
int var4 = InternalContainerUtilResource.testRemoveResourceFromItems(this, var1, var1.getQuantity(), var3);
class="kw">return var4 > 0 ? false : !var2 || var4 >= 0;
});
}
@Nonnull
class="kw">public ResourceTransaction removeResource(@Nonnull ResourceQuantity var1) {
class="kw">return this.removeResource(var1, true, true, true);
}
@Nonnull
class="kw">public ResourceTransaction removeResource(@Nonnull ResourceQuantity var1, boolean var2, boolean var3, boolean var4) {
ResourceTransaction var5 = InternalContainerUtilResource.internal_removeResource(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
}
class="kw">public boolean canRemoveResources(List<ResourceQuantity> var1) {
class="kw">return this.canRemoveResources(var1, true, true);
}
class="kw">public boolean canRemoveResources(@Nullable List<ResourceQuantity> var1, boolean var2, boolean var3) {
class="kw">return var1 != null && !var1.isEmpty() ? this.readAction(() -> {
for (ResourceQuantity var5 : var1) {
int var6 = InternalContainerUtilResource.testRemoveResourceFromItems(this, var5, var5.getQuantity(), var3);
if (var6 > 0) {
class="kw">return false;
}
if (var2 && var6 < 0) {
class="kw">return false;
}
}
class="kw">return true;
}) : true;
}
class="kw">public ListTransaction<ResourceTransaction> removeResources(List<ResourceQuantity> var1) {
class="kw">return this.removeResources(var1, true, true, true);
}
class="kw">public ListTransaction<ResourceTransaction> removeResources(@Nullable List<ResourceQuantity> var1, boolean var2, boolean var3, boolean var4) {
if (var1 != null && !var1.isEmpty()) {
ListTransaction var5 = InternalContainerUtilResource.internal_removeResources(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
} else {
class="kw">return ListTransaction.getEmptyTransaction(true);
}
}
class="kw">public boolean canRemoveMaterial(MaterialQuantity var1) {
class="kw">return this.canRemoveMaterial(var1, true, true);
}
class="kw">public boolean canRemoveMaterial(@Nullable MaterialQuantity var1, boolean var2, boolean var3) {
class="kw">return var1 == null ? true : this.readAction(() -> {
int var4 = InternalContainerUtilMaterial.testRemoveMaterialFromItems(this, var1, var1.getQuantity(), var3);
class="kw">return var4 > 0 ? false : !var2 || var4 >= 0;
});
}
class="kw">public int countRemovableMaterial(@Nonnull MaterialQuantity var1) {
class="kw">return this.countRemovableMaterial(var1, true);
}
class="kw">public int countRemovableMaterial(@Nonnull MaterialQuantity var1, boolean var2) {
class="kw">return this.readAction(() -> InternalContainerUtilMaterial.countMaterialFromItems(this, var1, var2));
}
@Nonnull
class="kw">public MaterialTransaction removeMaterial(@Nonnull MaterialQuantity var1) {
class="kw">return this.removeMaterial(var1, true, true, true);
}
@Nonnull
class="kw">public MaterialTransaction removeMaterial(@Nonnull MaterialQuantity var1, boolean var2, boolean var3, boolean var4) {
MaterialTransaction var5 = InternalContainerUtilMaterial.internal_removeMaterial(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
}
class="kw">public boolean canRemoveMaterials(List<MaterialQuantity> var1) {
class="kw">return this.canRemoveMaterials(var1, true, true);
}
class="kw">public boolean canRemoveMaterials(@Nullable List<MaterialQuantity> var1, boolean var2, boolean var3) {
class="kw">return var1 != null && !var1.isEmpty() ? this.readAction(() -> {
for (MaterialQuantity var5 : var1) {
int var6 = InternalContainerUtilMaterial.testRemoveMaterialFromItems(this, var5, var5.getQuantity(), var3);
if (var6 > 0) {
class="kw">return false;
}
if (var2 && var6 < 0) {
class="kw">return false;
}
}
class="kw">return true;
}) : true;
}
class="kw">public List<TestRemoveItemSlotResult> getSlotMaterialsToRemove(@Nullable List<MaterialQuantity> var1, boolean var2, boolean var3) {
List var4 = new ObjectArrayList();
class="kw">return var1 != null && !var1.isEmpty() ? this.readAction(() -> {
for (MaterialQuantity var6 : var1) {
TestRemoveItemSlotResult var7 = InternalContainerUtilMaterial.getTestRemoveMaterialFromItems(this, var6, var6.getQuantity(), var3);
if (var7.quantityRemaining > 0) {
var4.clear();
class="kw">return var4;
}
if (var2 && var7.quantityRemaining < 0) {
var4.clear();
class="kw">return var4;
}
var4.add(var7);
}
class="kw">return var4;
}) : var4;
}
class="kw">public ListTransaction<MaterialTransaction> removeMaterials(List<MaterialQuantity> var1) {
class="kw">return this.removeMaterials(var1, true, true, true);
}
class="kw">public ListTransaction<MaterialTransaction> removeMaterials(@Nullable List<MaterialQuantity> var1, boolean var2, boolean var3, boolean var4) {
if (var1 != null && !var1.isEmpty()) {
ListTransaction var5 = InternalContainerUtilMaterial.internal_removeMaterials(this, var1, var2, var3, var4);
this.sendUpdate(var5);
class="kw">return var5;
} else {
class="kw">return ListTransaction.getEmptyTransaction(true);
}
}
class="kw">public ListTransaction<MaterialSlotTransaction> removeMaterialsOrdered(short var1, List<MaterialQuantity> var2) {
class="kw">return this.removeMaterialsOrdered(var1, var2, true, true, true);
}
class="kw">public ListTransaction<MaterialSlotTransaction> removeMaterialsOrdered(List<MaterialQuantity> var1, boolean var2, boolean var3, boolean var4) {
class="kw">return this.removeMaterialsOrdered((short)0, var1, var2, var3, var4);
}
class="kw">public ListTransaction<MaterialSlotTransaction> removeMaterialsOrdered(
short var1, @Nullable List<MaterialQuantity> var2, boolean var3, boolean var4, boolean var5
) {
if (var2 != null && !var2.isEmpty()) {
if (var1 + var2.size() > this.getCapacity()) {
class="kw">return ListTransaction.getEmptyTransaction(false);
}
ListTransaction var6 = InternalContainerUtilMaterial.internal_removeMaterialsOrdered(this, var1, var2, var3, var4, var5);
this.sendUpdate(var6);
class="kw">return var6;
} else {
class="kw">return ListTransaction.getEmptyTransaction(true);
}
}
class="kw">public boolean isEmpty() {
class="kw">return this.readAction(() -> {
for (short var1 = 0; var1 < this.getCapacity(); var1++) {
ItemStack var2 = this.internal_getSlot(var1);
if (var2 != null && !var2.isEmpty()) {
class="kw">return false;
}
}
class="kw">return true;
});
}
class="kw">public int countItemStacks(@Nonnull Predicate<ItemStack> var1) {
class="kw">return this.readAction(() -> {
int var2 = 0;
for (short var3 = 0; var3 < this.getCapacity(); var3++) {
ItemStack var4 = this.internal_getSlot(var3);
if (!ItemStack.isEmpty(var4) && var1.test(var4)) {
var2 += var4.getQuantity();
}
}
class="kw">return var2;
});
}
class="kw">public boolean containsItemStacksStackableWith(@Nonnull ItemStack var1) {
class="kw">return this.readAction(() -> {
for (short var2 = 0; var2 < this.getCapacity(); var2++) {
ItemStack var3 = this.internal_getSlot(var2);
if (!ItemStack.isEmpty(var3) && var1.isStackableWith(var3)) {
class="kw">return true;
}
}
class="kw">return false;
});
}
class="kw">public void forEach(@Nonnull ShortObjectConsumer<ItemStack> var1) {
for (short var2 = 0; var2 < this.getCapacity(); var2++) {
ItemStack var3 = this.getItemStack(var2);
if (!ItemStack.isEmpty(var3)) {
var1.accept(var2, var3);
}
}
}
class="kw">public <T> void forEachWithMeta(@Nonnull Short2ObjectConcurrentHashMap.ShortBiObjConsumer<ItemStack, T> var1, T var2) {
for (short var3 = 0; var3 < this.getCapacity(); var3++) {
ItemStack var4 = this.getItemStack(var3);
if (!ItemStack.isEmpty(var4)) {
var1.accept(var3, var4, var2);
}
}
}
@Nonnull
class="kw">public List<ItemStack> removeAllItemStacks() {
List var1 = new ObjectArrayList();
ListTransaction var2 = this.writeAction(() -> {
List var2 = new ObjectArrayList();
for (short var3 = 0; var3 < this.getCapacity(); var3++) {
if (!this.cantRemoveFromSlot(var3)) {
ItemStack var4 = this.internal_removeSlot(var3);
if (!ItemStack.isEmpty(var4)) {
var1.add(var4);
var2.add(new SlotTransaction(true, ActionType.REMOVE, var3, var4, null, var4, false, false, true));
}
}
}
class="kw">return new ListTransaction<>(true, var2);
});
this.sendUpdate(var2);
class="kw">return var1;
}
@Nonnull
class="kw">public List<ItemStack> dropAllItemStacks() {
class="kw">return this.dropAllItemStacks(true);
}
@Nonnull
class="kw">public List<ItemStack> dropAllItemStacks(boolean var1) {
List var2 = new ObjectArrayList();
ListTransaction var3 = this.writeAction(() -> {
List var3 = new ObjectArrayList();
for (short var4 = 0; var4 < this.getCapacity(); var4++) {
if (!var1 || !this.cantDropFromSlot(var4)) {
ItemStack var5 = this.internal_removeSlot(var4);
if (!ItemStack.isEmpty(var5)) {
var2.add(var5);
var3.add(new SlotTransaction(true, ActionType.REMOVE, var4, var5, null, var5, false, false, true));
}
}
}
class="kw">return new ListTransaction<>(true, var3);
});
this.sendUpdate(var3);
class="kw">return var2;
}
@Nonnull
class="kw">public ListTransaction<SlotTransaction> sortItems(@Nonnull SortType var1) {
ListTransaction var2 = this.internal_sortItems(var1);
this.sendUpdate(var2);
class="kw">return var2;
}
class="kw">protected ListTransaction<SlotTransaction> internal_sortItems(@Nonnull SortType var1) {
class="kw">return this.writeAction(() -> {
ItemStack[] var2 = new ItemStack[this.getCapacity()];
int var3 = 0;
for (short var4 = 0; var4 < var2.length; var4++) {
if (!this.cantRemoveFromSlot(var4)) {
ItemStack var5 = this.internal_removeSlot(var4);
if (var5 != null) {
Item var6 = var5.getItem();
int var7 = var6.getMaxStack();
int var8 = var5.getQuantity();
if (var7 > 1) {
for (int var9 = 0; var9 < var3 && var8 > 0; var9++) {
ItemStack var10 = var2[var9];
if (var5.isStackableWith(var10)) {
int var11 = var10.getQuantity();
if (var11 < var7) {
int var12 = Math.min(var8, var7 - var11);
var8 -= var12;
var2[var9] = var10.withQuantity(var11 + var12);
}
}
}
}
if (var8 > 0) {
var2[var3++] = var8 != var5.getQuantity() ? var5.withQuantity(var8) : var5;
}
}
}
}
Arrays.sort(var2, var1.getComparator());
List var14 = new ObjectArrayList(var2.length);
var3 = 0;
for (short var15 = 0; var15 < var2.length; var15++) {
if (!this.cantRemoveFromSlot(var15)) {
ItemStack var17 = this.internal_getSlot(var15);
ItemStack var19 = var2[var3];
if (!this.cantAddToSlot(var15, var19, var17)) {
var3++;
if (var17 != var19) {
this.internal_setSlot(var15, var19);
var14.add(new SlotTransaction(true, ActionType.REMOVE, var15, var17, null, var19, false, false, true));
}
}
}
}
for (short var16 = 0; var16 < var2.length && var3 < var2.length; var16++) {
ItemStack var18 = var2[var3];
if (var18 == null) {
break;
}
if (!this.cantRemoveFromSlot(var16) && this.internal_getSlot(var16) == null) {
var3++;
this.internal_setSlot(var16, var18);
var14.add(new SlotTransaction(true, ActionType.REMOVE, var16, null, null, var18, false, false, true));
}
}
class="kw">return new ListTransaction<>(true, var14);
});
}
class="kw">protected void sendUpdate(@Nonnull Transaction var1) {
if (var1.succeeded()) {
ItemContainer.ItemContainerChangeEvent var2 = new ItemContainer.ItemContainerChangeEvent(this, var1);
this.externalChangeEventRegistry.dispatchFor(null).dispatch(var2);
this.internalChangeEventRegistry.dispatchFor(null).dispatch(var2);
}
}
class="kw">public boolean containsContainer(ItemContainer var1) {
class="kw">return var1 == this;
}
class="kw">public void doMigration(Function<String, String> var1) {
this.writeAction(var1x -> {
for (short var2 = 0; var2 < this.getCapacity(); var2++) {
ItemStack var3 = this.internal_getSlot(var2);
if (!ItemStack.isEmpty(var3)) {
String var4 = var3.getItemId();
String var5 = (String)var1x.apply(var3.getItemId());
if (!var4.equals(var5)) {
this.internal_setSlot(var2, new ItemStack(var5, var3.getQuantity(), var3.getMetadata()));
}
}
}
class="kw">return null;
}, var1);
}
@Nullable
class="kw">public class="kw">static ItemResourceType getMatchingResourceType(@Nonnull Item var0, @Nonnull String var1) {
ItemResourceType[] var2 = var0.getResourceTypes();
if (var2 == null) {
class="kw">return null;
}
for (ItemResourceType var6 : var2) {
if (var1.equals(var6.id)) {
class="kw">return var6;
}
}
class="kw">return null;
}
class="kw">public class="kw">static void validateQuantity(int var0) {
if (var0 < 0) {
throw new IllegalArgumentException("Quantity is less than zero! " + var0 + " < 0");
}
}
class="kw">public class="kw">static void validateSlotIndex(short var0, int var1) {
if (var0 < 0) {
throw new IllegalArgumentException("Slot is less than zero! " + var0 + " < 0");
}
if (var0 >= var1) {
throw new IllegalArgumentException("Slot is outside capacity! " + var0 + " >= " + var1);
}
}
@Nonnull
class="kw">public class="kw">static <T class="kw">extends ItemContainer> T copy(@Nonnull ItemContainer var0, @Nonnull T var1, @Nullable List<ItemStack> var2) {
var0.forEach((var2x, var3) -> {
if (var2x >= var1.getCapacity()) {
if (var2 != null) {
var2.add(var3);
}
} else if (!ItemStack.isEmpty(var3)) {
var1.setItemStackForSlot(var2x, var3);
}
});
class="kw">return var1;
}
class="kw">public class="kw">static <T class="kw">extends ItemContainer> T ensureContainerCapacity(
@Nullable T var0, short var1, @Nonnull Short2ObjectConcurrentHashMap.ShortFunction<T> var2, @Nullable List<ItemStack> var3
) {
if (var0 == null) {
class="kw">return var2.apply(var1);
} else {
class="kw">return var0.getCapacity() == var1 ? var0 : copy(var0, var2.apply(var1), var3);
}
}
class="kw">public class="kw">static ItemContainer getNewContainer(short var0, @Nonnull Short2ObjectConcurrentHashMap.ShortFunction<ItemContainer> var1) {
class="kw">return var0 > 0 ? var1.apply(var0) : EmptyItemContainer.INSTANCE;
}
class="kw">public record ItemContainerChangeEvent(ItemContainer container, Transaction transaction) class="kw">implements IEvent<Void> {
class="kw">public ItemContainerChangeEvent {
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "ItemContainerChangeEvent{container=" + this.container + ", transaction=" + this.transaction + "}";
}
}
class="kw">public record TempItemData(ItemStack itemStack, Item item) {
class="kw">public TempItemData {
}
}
}