InternalContainerUtilResource class

Пакет: com.hypixel.hytale.server.core.inventory.container

Файл: com/hypixel/hytale/server/core/inventory/container/InternalContainerUtilResource.java

Поля (37)

МодификаторыТипИмя
int var10
ResourceSlotTransaction var10
int var10
int var11
List var11
int var11
int var12
int var12
int var13
int var14
ItemStack var15
ItemStack var16
ItemStack var17
var2
long var3
TestRemoveItemSlotResult var4
ItemStack var4
ItemStack var5
int var5
ItemStack var5
ItemResourceType var5
Item var6
int var6
int var6
Item var6
int var7
int var7
var7
int var7
int var7
ItemResourceType var7
ItemResourceType var8
List var8
int var8
int var9
ResourceQuantity var9
int var9

Методы (24)

МодификаторыВозвратСигнатура
abstract return new ResourceSlotTransactionreturn new ResourceSlotTransaction(true, ActionType.REMOVE, var1, var5, var15, var16, var3, false, var4, var2, var10, var14)
static int countResourceFromItemsint countResourceFromItems(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, boolean var2)
static int countResourceFromSlotint countResourceFromSlot(@Nonnull ItemContainer var0, short var1, @Nonnull ResourceQuantity var2, boolean var3)
for for(ResourceQuantity var6 : var1)
for for(ResourceQuantity var10 : var1)
abstract for for(short var5 = 0; var5 < var0.getCapacity()
if if(var5 == null)
if if(var8 == null)
if if(var3 && var10 > 0)
if if(var14 <= 0)
if if(var2 || var3)
if if(var5 > 0)
if if(var3 && var5 < 0)
if if(var2 || var3)
if if(var7 > 0)
if if(var3 && var7 < 0)
if if(var6 != var4.quantityRemaining)
if if(var7 == null)
static ResourceTransaction internal_removeResourceResourceTransaction internal_removeResource(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, boolean var2, boolean var3, boolean var4)
static ResourceSlotTransaction internal_removeResourceFromSlotResourceSlotTransaction internal_removeResourceFromSlot(@Nonnull ItemContainer var0, short var1, @Nonnull ResourceQuantity var2, boolean var3, boolean var4)
static ListTransaction<ResourceTransaction> internal_removeResourcesListTransaction<ResourceTransaction> internal_removeResources(@Nonnull ItemContainer var0, @Nullable List<ResourceQuantity> var1, boolean var2, boolean var3, boolean var4)
static int testRemoveResourceFromItemsint testRemoveResourceFromItems(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, int var2, boolean var3)
static int testRemoveResourceFromSlotint testRemoveResourceFromSlot(@Nonnull ItemContainer var0, short var1, @Nonnull ResourceQuantity var2, int var3, boolean var4)
static TestRemoveItemSlotResult testRemoveResourceSlotFromItemsTestRemoveItemSlotResult testRemoveResourceSlotFromItems(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, int var2, boolean var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.inventory.container;

class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.protocol.ItemResourceType;
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.ResourceQuantity;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ActionType;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ListTransaction;
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 it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class InternalContainerUtilResource {
   class="kw">public InternalContainerUtilResource() {
   }

   class="kw">protected class="kw">static ResourceSlotTransaction internal_removeResourceFromSlot(
      @Nonnull ItemContainer var0, short var1, @Nonnull ResourceQuantity var2, boolean var3, boolean var4
   ) {
      ItemContainer.validateSlotIndex(var1, var0.getCapacity());
      ItemContainer.validateQuantity(var2.getQuantity());
      class="kw">return var0.writeAction(() -> {
         if (var4 && var0.cantRemoveFromSlot(var1)) {
            ItemStack var17 = var0.internal_getSlot(var1);
            class="kw">return new ResourceSlotTransaction(false, ActionType.REMOVE, var1, var17, var17, null, var3, false, var4, var2, var2.getQuantity(), 0);
         }

         ItemStack var5 = var0.internal_getSlot(var1);
         if (var5 == null) {
            class="kw">return new ResourceSlotTransaction(false, ActionType.REMOVE, var1, null, null, null, var3, false, var4, var2, var2.getQuantity(), 0);
         }

         Item var6 = var5.getItem();
         int var7 = var5.getQuantity();
         ItemResourceType var8 = var2.getResourceType(var6);
         if (var8 == null) {
            class="kw">return new ResourceSlotTransaction(false, ActionType.REMOVE, var1, var5, var5, null, var3, false, var4, var2, var2.getQuantity(), 0);
         }

         int var9 = var8.quantity;
         int var10 = var2.getQuantity();
         int var11 = MathUtil.ceil((double)var10 / var9);
         int var12 = Math.min(var7, var11);
         int var13 = Math.max(var7 - var12, 0);
         int var14 = var12 * var9;
         var10 -= var14;
         if (var3 && var10 > 0) {
            class="kw">return new ResourceSlotTransaction(false, ActionType.REMOVE, var1, var5, var5, null, var3, false, var4, var2, var2.getQuantity(), 0);
         }

         if (var14 <= 0) {
            class="kw">return new ResourceSlotTransaction(false, ActionType.REMOVE, var1, var5, var5, null, var3, false, var4, var2, var2.getQuantity(), 0);
         }

         ItemStack var15 = var5.withQuantity(var13);
         var0.internal_setSlot(var1, var15);
         ItemStack var16 = var5.withQuantity(var12);
         class="kw">return new ResourceSlotTransaction(true, ActionType.REMOVE, var1, var5, var15, var16, var3, false, var4, var2, var10, var14);
      });
   }

   class="kw">protected class="kw">static ResourceTransaction internal_removeResource(
      @Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, boolean var2, boolean var3, boolean var4
   ) {
      class="kw">return var0.writeAction(() -> {
         if (var2 || var3) {
            int var5 = testRemoveResourceFromItems(var0, var1, var1.getQuantity(), var4);
            if (var5 > 0) {
               class="kw">return new ResourceTransaction(false, ActionType.REMOVE, var1, var1.getQuantity(), 0, var2, var3, var4, Collections.emptyList());
            }

            if (var3 && var5 < 0) {
               class="kw">return new ResourceTransaction(false, ActionType.REMOVE, var1, var1.getQuantity(), 0, var2, var3, var4, Collections.emptyList());
            }
         }

         List var11 = new ObjectArrayList();
         int var6 = 0;
         int var7 = var1.getQuantity();

         for (short var8 = 0; var8 < var0.getCapacity() && var7 > 0; var8++) {
            ResourceQuantity var9 = var1.clone(var7);
            ResourceSlotTransaction var10 = internal_removeResourceFromSlot(var0, var8, var9, false, var4);
            if (var10.succeeded()) {
               var11.add(var10);
               var7 = var10.getRemainder();
               var6 += var10.getConsumed();
            }
         }

         class="kw">return new ResourceTransaction(var7 != var1.getQuantity(), ActionType.REMOVE, var1, var7, var6, var2, var3, var4, var11);
      });
   }

   class="kw">protected class="kw">static ListTransaction<ResourceTransaction> internal_removeResources(
      @Nonnull ItemContainer var0, @Nullable List<ResourceQuantity> var1, boolean var2, boolean var3, boolean var4
   ) {
      class="kw">return var1 != null && !var1.isEmpty()
         ? var0.writeAction(
            () -> {
               if (var2 || var3) {
                  for (ResourceQuantity var6 : var1) {
                     int var7 = testRemoveResourceFromItems(var0, var6, var6.getQuantity(), var4);
                     if (var7 > 0) {
                        class="kw">return new ListTransaction<>(
                           false,
                           var1.stream()
                              .map(
                                 var4x -> new ResourceTransaction(
                                    false, ActionType.REMOVE, var6, var6.getQuantity(), 0, var2, var3, var4, Collections.emptyList()
                                 )
                              )
                              .collect(Collectors.toList())
                        );
                     }

                     if (var3 && var7 < 0) {
                        class="kw">return new ListTransaction<>(
                           false,
                           var1.stream()
                              .map(
                                 var4x -> new ResourceTransaction(
                                    false, ActionType.REMOVE, var6, var6.getQuantity(), 0, var2, var3, var4, Collections.emptyList()
                                 )
                              )
                              .collect(Collectors.toList())
                        );
                     }
                  }
               }

               List var8 = new ObjectArrayList();

               for (ResourceQuantity var10 : var1) {
                  var8.add(internal_removeResource(var0, var10, var2, var3, var4));
               }

               class="kw">return new ListTransaction<>(true, var8);
            }
         )
         : ListTransaction.getEmptyTransaction(true);
   }

   class="kw">public class="kw">static int testRemoveResourceFromItems(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, int var2, boolean var3) {
      for (short var4 = 0; var4 < var0.getCapacity() && var2 > 0; var4++) {
         var2 = testRemoveResourceFromSlot(var0, var4, var1, var2, var3);
      }

      class="kw">return var2;
   }

   class="kw">public class="kw">static TestRemoveItemSlotResult testRemoveResourceSlotFromItems(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, int var2, boolean var3) {
      TestRemoveItemSlotResult var4 = new TestRemoveItemSlotResult(var2);

      for (short var5 = 0; var5 < var0.getCapacity() && var4.quantityRemaining > 0; var5++) {
         int var6 = testRemoveResourceFromSlot(var0, var5, var1, var4.quantityRemaining, var3);
         if (var6 != var4.quantityRemaining) {
            int var7 = var4.quantityRemaining - var6;
            var4.quantityRemaining = var6;
            var4.picked.put(var5, var7);
         }
      }

      class="kw">return var4;
   }

   class="kw">public class="kw">static int testRemoveResourceFromSlot(@Nonnull ItemContainer var0, short var1, @Nonnull ResourceQuantity var2, int var3, boolean var4) {
      if (var4 && var0.cantRemoveFromSlot(var1)) {
         class="kw">return var3;
      }

      ItemStack var5 = var0.internal_getSlot(var1);
      if (ItemStack.isEmpty(var5)) {
         class="kw">return var3;
      }

      Item var6 = var5.getItem();
      ItemResourceType var7 = var2.getResourceType(var6);
      if (var7 == null) {
         class="kw">return var3;
      }

      int var8 = var7.quantity;
      int var9 = MathUtil.ceil((double)var3 / var8);
      int var10 = var5.getQuantity();
      int var11 = Math.min(var10, var9);
      int var12 = var11 * var8;
      class="kw">return var3 - var12;
   }

   class="kw">protected class="kw">static int countResourceFromSlot(@Nonnull ItemContainer var0, short var1, @Nonnull ResourceQuantity var2, boolean var3) {
      if (var3 && var0.cantRemoveFromSlot(var1)) {
         class="kw">return 0;
      }

      ItemStack var4 = var0.internal_getSlot(var1);
      if (ItemStack.isEmpty(var4)) {
         class="kw">return 0;
      }

      ItemResourceType var5 = var2.getResourceType(var4.getItem());
      class="kw">return var5 == null ? 0 : (int)Math.min((long)var4.getQuantity() * var5.quantity, 2147483647L);
   }

   class="kw">protected class="kw">static int countResourceFromItems(@Nonnull ItemContainer var0, @Nonnull ResourceQuantity var1, boolean var2) {
      long var3 = 0L;

      for (short var5 = 0; var5 < var0.getCapacity(); var5++) {
         var3 += countResourceFromSlot(var0, var5, var1, var2);
      }

      class="kw">return (int)Math.min(var3, 2147483647L);
   }
}