StashSystem class
Пакет: com.hypixel.hytale.builtin.adventure.stash
Файл: com/hypixel/hytale/builtin/adventure/stash/StashPlugin.java
extends: RefSystem<ChunkStore>
Поля (8)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> |
blockStateInfoComponentType |
|
private final ComponentType<ChunkStore, ItemContainerBlock> |
itemContainerStateComponentType |
|
private final Query<ChunkStore> |
query |
|
World |
var5 |
|
ItemContainerBlock |
var6 |
|
BlockModule.BlockStateInfo |
var7 |
|
StashGameplayConfig |
var8 |
|
boolean |
var9 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
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) |
Исходный код
Показать/скрыть
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
) {
}
}
}