AugmentProgressionRestoreSystem class
Пакет: com.hypixel.hytale.builtin.augmentblocks.progression
Файл: com/hypixel/hytale/builtin/augmentblocks/progression/AugmentProgressionRestoreSystem.java
extends: RefSystem<ChunkStore>
Поля (19)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
return |
|
|
return |
|
AugmentBlockUpgradeLevel |
var10 |
|
Vector3i |
var11 |
|
Ref |
var12 |
|
AugmentBlockUpgradeLevel |
var3 |
|
BenchBlock |
var4 |
|
World |
var5 |
|
AugmentBlock |
var5 |
|
String |
var5 |
|
int |
var5 |
|
AugmentBlock |
var6 |
|
String |
var6 |
|
Vector3i |
var6 |
|
int |
var7 |
|
WorldChunk |
var7 |
|
int |
var8 |
|
BlockType |
var8 |
|
BlockType |
var9 |
Методы (18)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
applyLevelsvoid applyLevels(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull AugmentBlock var3, int var4) |
abstract |
|
applyLevels applyLevels(var1, var2, var3, var5, var9 - 1) |
abstract |
|
applyLevels applyLevels(var1, var2, var3, var5, var8) |
|
|
for for(int var2 = var1; var2 >= 1; var2--) |
|
|
if if(var2 == AddReason.LOAD) |
|
|
if if(var5 != null) |
|
|
if if(var6 != null) |
|
|
if if(var7 > 0) |
|
|
if if(var10 == null) |
|
|
if if(var11 != null) |
|
|
if if(var5 != null) |
|
|
if if(var4 != null) |
|
|
if if(var6 != null) |
|
|
if if(var7 != null) |
|
|
if if(var8 != null) |
private |
void |
restorevoid restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3) |
private |
void |
restorevoid restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3, int var4) |
static |
void |
restoreBenchTiervoid restoreBenchTier(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, int var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.augmentblocks.progression;
class="kw">import com.hypixel.hytale.builtin.augmentblocks.AugmentBlock;
class="kw">import com.hypixel.hytale.builtin.augmentblocks.AugmentBlocksUtils;
class="kw">import com.hypixel.hytale.builtin.augmentblocks.config.AugmentBlockUpgradeLevel;
class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
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.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">public class AugmentProgressionRestoreSystem class="kw">extends RefSystem<ChunkStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, AugmentBlock> augmentBlockComponentType;
@Nonnull
class="kw">private class="kw">final Query<ChunkStore> query;
class="kw">private class="kw">static class="kw">final int MAX_REPLACEMENT_DEPTH = 8;
class="kw">public AugmentProgressionRestoreSystem(@Nonnull ComponentType<ChunkStore, AugmentBlock> var1) {
this.augmentBlockComponentType = var1;
this.query = Query.and(var1, BlockModule.BlockStateInfo.getComponentType());
}
@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) {
if (var2 == AddReason.LOAD) {
World var5 = var3.getExternalData().getWorld();
if (AugmentProgression.participates(var5)) {
AugmentBlock var6 = var4.getComponent(var1, this.augmentBlockComponentType);
if (var6 != null && var6.getProgressionKey() != null) {
var5.execute(() -> this.restore(var5, var3, var1));
}
}
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
}
class="kw">private void restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3) {
this.restore(var1, var2, var3, 0);
}
class="kw">private void restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3, int var4) {
if (var4 <= 8 && var3.isValid()) {
AugmentBlock var5 = var2.getComponent(var3, this.augmentBlockComponentType);
if (var5 != null) {
String var6 = var5.getProgressionKey();
if (var6 != null) {
int var7 = AugmentProgression.getLevel(var6) - var5.getProgressionLevelOffset();
if (var7 > 0) {
int var8 = Math.min(var7, var5.getMaxLevel());
for (int var9 = var5.getCurrentLevel() + 1; var9 <= var8; var9++) {
AugmentBlockUpgradeLevel var10 = var5.getLevel(var9);
if (var10 == null) {
class="kw">return;
}
if (var10.getReplaceBlock() != null) {
applyLevels(var1, var2, var3, var5, var9 - 1);
Vector3i var11 = AugmentBlocksUtils.worldPos(var2, var3);
AugmentBlocksUtils.replaceBlock(var1, var2, var3, var10.getReplaceBlock());
if (var11 != null) {
Ref var12 = BlockModule.getBlockEntity(var1, var11.x, var11.y, var11.z);
if (var12 != null && var12.isValid()) {
this.restore(var1, var2, var12, var4 + 1);
}
}
class="kw">return;
}
}
applyLevels(var1, var2, var3, var5, var8);
if (var7 > var5.getMaxLevel()) {
restoreBenchTier(var1, var2, var3, var7 - var5.getMaxLevel());
}
}
}
}
}
}
class="kw">private class="kw">static void applyLevels(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull AugmentBlock var3, int var4) {
if (var4 > var3.getCurrentLevel()) {
var3.setCurrentLevel(var4);
String var5 = latestStateUpTo(var3, var4);
if (var5 != null) {
AugmentBlocksUtils.applyState(var0, var1, var2, var5);
}
}
}
@Nullable
class="kw">private class="kw">static String latestStateUpTo(@Nonnull AugmentBlock var0, int var1) {
for (int var2 = var1; var2 >= 1; var2--) {
AugmentBlockUpgradeLevel var3 = var0.getLevel(var2);
if (var3 != null && var3.getState() != null) {
class="kw">return var3.getState();
}
}
class="kw">return null;
}
class="kw">private class="kw">static void restoreBenchTier(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, int var3) {
BenchBlock var4 = var1.getComponent(var2, BenchBlock.getComponentType());
if (var4 != null) {
int var5 = 1 + var3;
if (var4.getTierLevel() > 0 && var4.getTierLevel() < var5) {
Vector3i var6 = AugmentBlocksUtils.worldPos(var1, var2);
if (var6 != null) {
WorldChunk var7 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var6.x, var6.z));
if (var7 != null) {
BlockType var8 = BlockType.getAssetMap().getAsset(var7.getBlock(var6.x, var6.y, var6.z));
if (var8 != null) {
BlockType var9 = BenchBlock.getBaseBlockType(var8);
if (var9.getBench() != null && var9.getBench().getTierLevel(var5) != null) {
var4.setTierLevel(var5);
var7.setBlockInteractionState(var6.x, var6.y, var6.z, var9, var4.getTierStateName(), true);
}
}
}
}
}
}
}
}