ProcessingBenchLifecycle class
Пакет: com.hypixel.hytale.builtin.crafting.system
Файл: com/hypixel/hytale/builtin/crafting/system/BenchSystems.java
extends: RefSystem<ChunkStore>
Поля (35)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final ComponentType<ChunkStore, BenchBlock> |
benchBlockComponentType |
|
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> |
blockStateInfoComponentType |
|
private final ComponentType<ChunkStore, ProcessingBenchBlock> |
componentType |
|
BlockSection |
var10 |
|
int |
var10 |
|
int |
var11 |
|
int |
var11 |
|
int |
var12 |
|
int |
var12 |
|
int |
var13 |
|
CombinedItemContainer |
var13 |
|
int |
var14 |
|
List |
var14 |
|
int |
var15 |
|
World |
var15 |
|
int |
var16 |
|
Store |
var16 |
|
int |
var17 |
|
Vector3d |
var17 |
|
int |
var18 |
|
Holder[] |
var18 |
|
BlockType |
var19 |
|
BlockModule.BlockStateInfo |
var19 |
|
int |
var20 |
|
World |
var21 |
|
ProcessingBenchBlock |
var5 |
|
ProcessingBenchBlock |
var5 |
|
BenchBlock |
var6 |
|
BlockModule.BlockStateInfo |
var6 |
|
BlockModule.BlockStateInfo |
var7 |
|
Ref |
var7 |
|
Ref |
var8 |
|
ChunkSection |
var8 |
|
ChunkSection |
var9 |
|
int |
var9 |
Методы (14)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
|
if if(var5 != null && var6 != null && var7 != null) |
|
|
if if(var9 != null) |
|
|
if if(var10 != null) |
|
|
if if(var19 != null) |
|
|
if if(var2 == RemoveReason.UNLOAD) |
|
|
if if(var19 != null) |
|
|
if if(var5 != null) |
|
|
if if(var6 != null) |
|
|
if if(var8 != null) |
|
|
if if(var13 != null) |
|
|
if if(var18.length > 0) |
|
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.crafting.system;
class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
class="kw">import com.hypixel.hytale.builtin.crafting.component.CraftingManager;
class="kw">import com.hypixel.hytale.builtin.crafting.component.ProcessingBenchBlock;
class="kw">import com.hypixel.hytale.builtin.crafting.window.BenchWindow;
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.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
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.asset.type.blocktype.config.bench.Bench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.ProcessingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.CraftingRecipe;
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.MaterialQuantity;
class="kw">import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.TestRemoveItemSlotResult;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
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 java.time.Instant;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class BenchSystems {
class="kw">public BenchSystems() {
}
class="kw">private class="kw">static void dropUpgradeItems(CommandBuffer<ChunkStore> var0, @Nullable BlockType var1, BenchBlock var2, int var3, int var4, int var5, int var6) {
ItemStack[] var7 = var2.getUpgradeItems();
if (var7.length != 0) {
World var8 = var0.getExternalData().getWorld();
Store var9 = var8.getEntityStore().getStore();
Vector3d var10 = new Vector3d();
if (var1 != null) {
var1.getBlockCenter(var3, var10);
} else {
var10.set(0.5, 0.5, 0.5);
}
var10.add(var4, var5, var6);
Holder[] var11 = ItemComponent.generateItemDrops(var9, List.of(var7), var10, Rotation3f.IDENTITY);
if (var11.length > 0) {
var8.execute(() -> var9.addEntities(var11, AddReason.SPAWN));
}
var2.setUpgradeItems(ItemStack.EMPTY_ARRAY);
}
}
class="kw">public class="kw">static class OnAddOrRemoved 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, BenchBlock> benchBlockComponentType = BenchBlock.getComponentType();
class="kw">private class="kw">final Query<ChunkStore> query = Query.and(this.benchBlockComponentType, this.blockStateInfoComponentType);
class="kw">public OnAddOrRemoved() {
}
@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;
BenchBlock var6 = var4.getComponent(var1, this.benchBlockComponentType);
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) {
Bench var16 = var15.getBench();
if (var16 == null) {
BenchSystems.dropUpgradeItems(
var4,
var15,
var6,
var13.getRotationIndex(var10, var11, var12),
ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
);
}
}
}
}
@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;
BenchBlock var6 = var4.getComponent(var1, this.benchBlockComponentType);
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);
WindowManager.closeAndRemoveAll(var6.getWindows());
BenchSystems.dropUpgradeItems(
var4,
null,
var6,
0,
ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
);
}
}
}
@Nullable
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.query;
}
}
class="kw">public class="kw">static class ProcessingBenchLifecycle class="kw">extends RefSystem<ChunkStore> {
class="kw">private class="kw">final ComponentType<ChunkStore, ProcessingBenchBlock> componentType;
class="kw">private class="kw">final ComponentType<ChunkStore, BenchBlock> benchBlockComponentType;
class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
class="kw">public ProcessingBenchLifecycle(@Nonnull ComponentType<ChunkStore, ProcessingBenchBlock> var1, @Nonnull ComponentType<ChunkStore, BenchBlock> var2) {
this.componentType = var1;
this.benchBlockComponentType = var2;
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.componentType;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
ProcessingBenchBlock var5 = var4.getComponent(var1, this.componentType);
BenchBlock var6 = var4.getComponent(var1, this.benchBlockComponentType);
BlockModule.BlockStateInfo var7 = var4.getComponent(var1, this.blockStateInfoComponentType);
if (var5 != null && var6 != null && var7 != null) {
Ref var8 = var7.getSectionRef();
if (var8.isValid()) {
ChunkSection var9 = var4.getComponent(var8, ChunkSection.getComponentType());
if (var9 != null) {
BlockSection var10 = var4.getComponent(var8, BlockSection.getComponentType());
if (var10 != null) {
int var11 = var7.getIndex();
int var12 = ChunkUtil.xFromIndex(var11);
int var13 = ChunkUtil.yFromIndex(var11);
int var14 = ChunkUtil.zFromIndex(var11);
int var15 = ChunkUtil.worldCoordFromLocalCoord(var9.getX(), var12);
int var16 = ChunkUtil.worldCoordFromLocalCoord(var9.getY(), var13);
int var17 = ChunkUtil.worldCoordFromLocalCoord(var9.getZ(), var14);
int var18 = var10.get(var12, var13, var14);
BlockType var19 = BlockType.getAssetMap().getAsset(var18);
if (var19 != null) {
int var20 = var10.getRotationIndex(var12, var13, var14);
if (var5.initializeBenchConfig(var19)) {
World var21 = var4.getExternalData().getWorld();
var5.setupSlots(var21, var6, var7, var15, var16, var17, var19, var20);
}
}
}
}
}
}
}
@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 var19 = var4.getComponent(var1, this.blockStateInfoComponentType);
if (var19 != null) {
var19.markNeedsSaving();
}
} else {
ProcessingBenchBlock var5 = var4.getComponent(var1, this.componentType);
if (var5 != null) {
BlockModule.BlockStateInfo var6 = var4.getComponent(var1, this.blockStateInfoComponentType);
if (var6 != null) {
Ref var7 = var6.getSectionRef();
if (var7.isValid()) {
ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
if (var8 != null) {
int var9 = var6.getIndex();
int var10 = ChunkUtil.worldCoordFromLocalCoord(var8.getX(), ChunkUtil.xFromIndex(var9));
int var11 = ChunkUtil.worldCoordFromLocalCoord(var8.getY(), ChunkUtil.yFromIndex(var9));
int var12 = ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), ChunkUtil.zFromIndex(var9));
CombinedItemContainer var13 = var5.getItemContainer();
if (var13 != null) {
List var14 = var13.dropAllItemStacks();
var5.dropFuelItems(var14);
World var15 = var4.getExternalData().getWorld();
Store var16 = var15.getEntityStore().getStore();
Vector3d var17 = new Vector3d(var10 + 0.5, var11, var12 + 0.5);
Holder[] var18 = ItemComponent.generateItemDrops(var16, var14, var17, Rotation3f.IDENTITY);
if (var18.length > 0) {
var15.execute(() -> var16.addEntities(var18, AddReason.SPAWN));
}
}
}
}
}
}
}
}
}
class="kw">public class="kw">static class ProcessingBenchTick class="kw">extends EntityTickingSystem<ChunkStore> {
class="kw">private class="kw">final ComponentType<ChunkStore, ProcessingBenchBlock> componentType;
class="kw">private class="kw">final ComponentType<ChunkStore, BenchBlock> benchBlockComponentType;
class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
class="kw">public ProcessingBenchTick(@Nonnull ComponentType<ChunkStore, ProcessingBenchBlock> var1, @Nonnull ComponentType<ChunkStore, BenchBlock> var2) {
this.componentType = var1;
this.benchBlockComponentType = var2;
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.componentType;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
ProcessingBenchBlock var6 = var3.getComponent(var2, this.componentType);
BenchBlock var7 = var3.getComponent(var2, this.benchBlockComponentType);
BlockModule.BlockStateInfo var8 = var3.getComponent(var2, this.blockStateInfoComponentType);
if (var7 != null && var8 != null) {
Ref var9 = var8.getSectionRef();
if (var9.isValid()) {
ChunkSection var10 = var4.getComponent(var9, ChunkSection.getComponentType());
if (var10 != null) {
BlockSection var11 = var4.getComponent(var9, BlockSection.getComponentType());
if (var11 != null) {
int var12 = var8.getIndex();
int var13 = ChunkUtil.xFromIndex(var12);
int var14 = ChunkUtil.yFromIndex(var12);
int var15 = ChunkUtil.zFromIndex(var12);
int var16 = ChunkUtil.worldCoordFromLocalCoord(var10.getX(), var13);
int var17 = ChunkUtil.worldCoordFromLocalCoord(var10.getY(), var14);
int var18 = ChunkUtil.worldCoordFromLocalCoord(var10.getZ(), var15);
int var19 = var11.get(var13, var14, var15);
BlockType var20 = BlockType.getAssetMap().getAsset(var19);
if (var20 != null) {
int var21 = var11.getRotationIndex(var13, var14, var15);
World var22 = var4.getExternalData().getWorld();
Store var23 = var22.getEntityStore().getStore();
ProcessingBench var24 = var6.getProcessingBench();
if (var24 != null) {
Instant var25 = var23.getResource(WorldTimeResource.getResourceType()).getGameTime();
float var26;
if (var6.getLastTickGameTime() != null && var25 != null && !var25.equals(var6.getLastTickGameTime())) {
float var27 = (float)Math.max(0L, var25.toEpochMilli() - var6.getLastTickGameTime().toEpochMilli()) / 1000.0F;
var26 = (float)(var27 / WorldTimeResource.getSecondsPerTick(var22));
} else {
var26 = 0.0F;
}
String var37 = var20.getCurrentInteractionState();
Map var28 = var7.getWindows();
var6.getProcessingSlots().clear();
var6.checkForRecipeUpdate(var7);
boolean var29 = var24.getFuel() != null;
boolean var30 = false;
CraftingRecipe var31 = var6.getRecipe();
if (var31 != null) {
List var32 = CraftingManager.getOutputItemStacks(var31);
if (!var6.getOutputContainer().canAddItemStacks(var32, false, false)) {
if ("Processing".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
} else if ("ProcessCompleted".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
}
var6.setActive(false, var7, var8);
var6.setLastTickGameTime(var25);
class="kw">return;
}
List var33 = CraftingManager.getInputMaterials(var31);
List var34 = var6.getInputContainer().getSlotMaterialsToRemove(var33, true, true);
if (var34.isEmpty()) {
if ("Processing".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
} else if ("ProcessCompleted".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
}
var6.setInputProgress(0.0F);
var6.setActive(false, var7, var8);
var6.clearCurrentRecipe();
var6.setLastTickGameTime(var25);
class="kw">return;
}
for (TestRemoveItemSlotResult var36 : var34) {
var6.getProcessingSlots().addAll(var36.getPickedSlots());
}
var6.sendProcessingSlots(var28);
var30 = true;
} else {
if (!var29) {
if ("Processing".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
} else if ("ProcessCompleted".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
}
var6.setLastTickGameTime(var25);
class="kw">return;
}
boolean var38 = var24.shouldAllowNoInputProcessing();
if (!var38 && "Processing".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
} else if ("ProcessCompleted".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
var6.setActive(false, var7, var8);
var6.sendProgress(0.0F, var28);
var6.setLastTickGameTime(var25);
class="kw">return;
}
var6.sendProgress(0.0F, var28);
if (!var38) {
var6.setActive(false, var7, var8);
var6.setLastTickGameTime(var25);
class="kw">return;
}
}
int var39 = var6.advanceProcessing(var26, var23, var7, var8, var16, var17, var18, var20, var21);
if (!var30 && var6.isActive()) {
var6.consumeFuelForDuration(var26, var23, var16, var17, var18, var20, var21);
}
var6.getProcessingFuelSlots().clear();
if (var29) {
ProcessingBench.ProcessingSlot[] var40 = var24.getFuel();
if (var6.isActive() && var6.getFuelTime() > 0.0F && var40 != null) {
for (int var42 = 0; var42 < var40.length; var42++) {
if (var6.getFuelContainer().getItemStack((short)var42) != null) {
var6.getProcessingFuelSlots().add((short)var42);
break;
}
}
}
if (!var6.isActive() || var6.getFuelTime() <= 0.0F) {
var6.setLastConsumedFuelTotal(0);
if ("Processing".equals(var37) || "ProcessCompleted".equals(var37)) {
var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
var6.setActive(false, var7, var8);
}
var6.setLastTickGameTime(var25);
class="kw">return;
}
var6.updateFuelValues(var28);
}
if (var39 > 0) {
var6.setBlockInteractionState("ProcessCompleted", var20, var22, var16, var17, var18);
var6.playSound(var6.getBench().getCompletedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
} else {
if (!"Processing".equals(var37)) {
var6.setBlockInteractionState("Processing", var20, var22, var16, var17, var18);
}
if (var30) {
int var41 = var7.getTierLevel();
float var43 = var6.getRecipeTimeSeconds(var41);
if (var6.getRecipe() != null && var43 > 0.0F) {
var6.sendProgress(var6.getInputProgress() / var43, var28);
} else {
var6.sendProgress(0.0F, var28);
}
}
}
var6.setLastTickGameTime(var25);
}
}
}
}
}
}
}
}
}