StashPlugin class

Пакет: com.hypixel.hytale.builtin.adventure.stash

Файл: com/hypixel/hytale/builtin/adventure/stash/StashPlugin.java

extends: JavaPlugin

Поля (26)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
private final ComponentType<ChunkStore, ItemContainerBlock> itemContainerStateComponentType
private final Query<ChunkStore> query
int var10
int var11
int var12
int var13
int var14
long var15
Random var17
boolean var18
var18
short var20
ItemStackSlotTransaction var21
ChunkSection var22
String var3
List var4
SimpleItemContainer var5
World var5
short var6
ItemContainerBlock var6
ShortArrayList var7
BlockModule.BlockStateInfo var7
StashGameplayConfig var8
int var9
boolean var9

Методы (8)

МодификаторыВозвратСигнатура
public StashSystempublic StashSystem(@Nonnull ComponentType<ChunkStore, ItemContainerBlock> var1)
for for(short var8 = 0; var8 < var6; var8++)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var3 == null)
if if(var2 && var18)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
abstract super super(var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.stash;

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer;
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.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.block.components.ItemContainerBlock;
class="kw">import com.hypixel.hytale.server.core.modules.item.ItemModule;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortArrayList;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortLists;
class="kw">import java.util.List;
class="kw">import java.util.Random;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StashPlugin class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

   class="kw">public StashPlugin(@Nonnull JavaPluginInit var1) {
      super(var1);
   }

   @Override
   class="kw">protected void setup() {
      this.getChunkStoreRegistry().registerSystem(new StashPlugin.StashSystem(ItemContainerBlock.getComponentType()));
      this.getCodecRegistry(GameplayConfig.PLUGIN_CODEC).register(StashGameplayConfig.class, "Stash", StashGameplayConfig.CODEC);
   }

   @Nullable
   class="kw">public class="kw">static ListTransaction<ItemStackTransaction> stash(@Nonnull BlockModule.BlockStateInfo var0, @Nonnull ItemContainerBlock var1, boolean var2) {
      String var3 = var1.getDroplist();
      if (var3 == null) {
         class="kw">return null;
      }

      List var4 = ItemModule.get().getRandomItemDrops(var3);
      if (var4.isEmpty()) {
         class="kw">return ListTransaction.getEmptyTransaction(true);
      }

      SimpleItemContainer var5 = var1.getItemContainer();
      short var6 = var5.getCapacity();
      ShortArrayList var7 = new ShortArrayList(var6);

      for (short var8 = 0; var8 < var6; var8++) {
         var7.add(var8);
      }

      ChunkSection var22 = var0.getSectionRef().getStore().getComponent(var0.getSectionRef(), ChunkSection.getComponentType());
      int var9 = ChunkUtil.xFromIndex(var0.getIndex());
      int var10 = ChunkUtil.yFromIndex(var0.getIndex());
      int var11 = ChunkUtil.zFromIndex(var0.getIndex());
      int var12 = ChunkUtil.worldCoordFromLocalCoord(var22.getX(), var9);
      int var13 = ChunkUtil.worldCoordFromLocalCoord(var22.getY(), var10);
      int var14 = ChunkUtil.worldCoordFromLocalCoord(var22.getZ(), var11);
      long var15 = HashUtil.hash(var12, var13, var14);
      Random var17 = new Random(var15);
      ShortLists.shuffle(var7, var17);
      boolean var18 = false;

      for (int var19 = 0; var19 < var4.size() && var19 < var7.size(); var19++) {
         short var20 = var7.getShort(var19);
         ItemStackSlotTransaction var21 = var5.addItemStackToSlot(var20, var4.get(var19));
         if (var21.getRemainder() != null && !var21.getRemainder().isEmpty()) {
            LOGGER.at(Level.WARNING).log("Could not add Item to Stash at %d, %d, %d: %s", var12, var10, var14, var21.getRemainder());
         } else {
            var18 = true;
         }
      }

      if (var2 && var18) {
         var1.setDroplist(null);
         var0.markNeedsSaving();
      }

      class="kw">return new ListTransaction<>(var18, new ObjectArrayList());
   }

   class="kw">private class="kw">static class StashSystem class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerStateComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public StashSystem(@Nonnull ComponentType<ChunkStore, ItemContainerBlock> var1) {
         this.itemContainerStateComponentType = var1;
         this.query = Query.and(var1, this.blockStateInfoComponentType);
      }

      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         World var5 = var3.getExternalData().getWorld();
         if (var5.getWorldConfig().isBlockSpawnersResolved()) {
            ItemContainerBlock var6 = var3.getComponent(var1, this.itemContainerStateComponentType);
            assert var6 != null;
            BlockModule.BlockStateInfo var7 = var3.getComponent(var1, this.blockStateInfoComponentType);
            assert var7 != null;
            StashGameplayConfig var8 = StashGameplayConfig.getOrDefault(var5.getGameplayConfig());
            boolean var9 = var8.isClearContainerDropList();
            StashPlugin.stash(var7, var6, var9);
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
      }
   }
}