OnReplaced class
Пакет: com.hypixel.hytale.server.core.modules.block.system
Файл: com/hypixel/hytale/server/core/modules/block/system/ItemContainerSystems.java
extends: EntityEventSystem<ChunkStore, BlockReplaceEvent>
Поля (3)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final ComponentType<ChunkStore, ItemContainerBlock> |
itemContainerBlockComponentType |
|
ItemContainerBlock |
var6 |
|
ItemContainerBlock |
var7 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
public void |
handlepublic void handle(int var1,
@Nonnull ArchetypeChunk<ChunkStore> var2,
@Nonnull Store<ChunkStore> var3,
@Nonnull CommandBuffer<ChunkStore> var4,
@Nonnull BlockReplaceEvent var5) |
|
|
if if(var6 != null) |
abstract |
|
super super(BlockReplaceEvent.class) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.block.system;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
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.EntityEventSystem;
class="kw">import com.hypixel.hytale.component.system.EntityHolderEventSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.event.EventPriority;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.windows.WindowManager;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockReplaceEvent;
class="kw">import com.hypixel.hytale.server.core.modules.block.components.ItemContainerBlock;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
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 com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class ItemContainerSystems {
class="kw">public ItemContainerSystems() {
}
class="kw">public class="kw">static class OnAddedOrRemoved class="kw">extends RefSystem<ChunkStore> {
class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType = ItemContainerBlock.getComponentType();
class="kw">private class="kw">final Query<ChunkStore> query = Query.and(this.itemContainerBlockComponentType, this.blockStateInfoComponentType);
class="kw">public OnAddedOrRemoved() {
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
assert var5 != null;
ItemContainerBlock var6 = var4.getComponent(var1, this.itemContainerBlockComponentType);
assert var6 != null;
Ref var7 = var5.getSectionRef();
if (var7.isValid()) {
ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
assert var8 != null;
int var9 = var5.getIndex();
int var10 = ChunkUtil.xFromIndex(var9);
int var11 = ChunkUtil.yFromIndex(var9);
int var12 = ChunkUtil.zFromIndex(var9);
BlockSection var13 = var4.getComponent(var7, BlockSection.getComponentType());
assert var13 != null;
int var14 = var13.get(var10, var11, var12);
BlockType var15 = BlockType.getAssetMap().getAsset(var14);
if (var15 != null && var15.getBlockEntity() != null) {
SimpleItemContainer var16 = var6.getItemContainer();
ItemContainerBlock var17 = var15.getBlockEntity().getComponent(this.itemContainerBlockComponentType);
if (var17 != null) {
short var18 = var17.getCapacity();
ObjectArrayList var19 = new ObjectArrayList();
var16 = ItemContainer.ensureContainerCapacity(var16, var18, SimpleItemContainer::new, var19);
var6.setItemContainer(var16);
if (!var19.isEmpty()) {
Store var20 = var3.getExternalData().getWorld().getEntityStore().getStore();
Vector3d var21 = new Vector3d(
ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
);
Holder[] var22 = ItemComponent.generateItemDrops(var20, var19, var21, Rotation3f.IDENTITY);
var20.addEntities(var22, AddReason.SPAWN);
}
}
var16.registerChangeEvent(EventPriority.LAST, var2x -> {
World var3 = var1.getStore().getExternalData().getWorld();
if (var3.isInThread()) {
var5.markNeedsSaving();
} else {
var3.execute(var5::markNeedsSaving);
}
});
}
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
if (var2 != RemoveReason.UNLOAD) {
BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
assert var5 != null;
ItemContainerBlock var6 = var4.getComponent(var1, this.itemContainerBlockComponentType);
assert var6 != null;
WindowManager.closeAndRemoveAll(var6.getWindows());
Ref var7 = var5.getSectionRef();
if (var7.isValid()) {
ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
assert var8 != null;
int var9 = var5.getIndex();
int var10 = ChunkUtil.xFromIndex(var9);
int var11 = ChunkUtil.yFromIndex(var9);
int var12 = ChunkUtil.zFromIndex(var9);
World var13 = var3.getExternalData().getWorld();
Store var14 = var13.getEntityStore().getStore();
Vector3d var15 = new Vector3d(
ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
);
List var16 = var6.getItemContainer().dropAllItemStacks();
Vector3d var17 = var15.add(0.5, 0.0, 0.5);
Holder[] var18 = ItemComponent.generateItemDrops(var14, var16, var17, Rotation3f.IDENTITY);
if (var18.length > 0) {
var13.execute(() -> var14.addEntities(var18, AddReason.SPAWN));
}
}
}
}
@Nullable
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.query;
}
}
class="kw">public class="kw">static class OnReplaced class="kw">extends EntityEventSystem<ChunkStore, BlockReplaceEvent> {
class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType = ItemContainerBlock.getComponentType();
class="kw">public OnReplaced() {
super(BlockReplaceEvent.class);
}
class="kw">public void handle(
int var1,
@Nonnull ArchetypeChunk<ChunkStore> var2,
@Nonnull Store<ChunkStore> var3,
@Nonnull CommandBuffer<ChunkStore> var4,
@Nonnull BlockReplaceEvent var5
) {
ItemContainerBlock var6 = var5.getNewEntity().getComponent(this.itemContainerBlockComponentType);
if (var6 != null) {
ItemContainerBlock var7 = var2.getComponent(var1, this.itemContainerBlockComponentType);
assert var7 != null;
var7.getItemContainer().moveAllItemStacksTo(var6.getItemContainer());
}
}
@Nullable
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.itemContainerBlockComponentType;
}
}
class="kw">public class="kw">static class OnReplacedHolder class="kw">extends EntityHolderEventSystem<ChunkStore, BlockReplaceEvent> {
class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType = ItemContainerBlock.getComponentType();
class="kw">public OnReplacedHolder() {
super(BlockReplaceEvent.class);
}
class="kw">public void handle(
@Nonnull Holder<ChunkStore> var1, @Nonnull Store<ChunkStore> var2, @Nonnull CommandBuffer<ChunkStore> var3, @Nonnull BlockReplaceEvent var4
) {
ItemContainerBlock var5 = var4.getNewEntity().getComponent(this.itemContainerBlockComponentType);
if (var5 != null) {
ItemContainerBlock var6 = var1.getComponent(this.itemContainerBlockComponentType);
assert var6 != null;
var6.getItemContainer().moveAllItemStacksTo(var5.getItemContainer());
}
}
@Nullable
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.itemContainerBlockComponentType;
}
}
}