PrefabBufferValidator class
Пакет: com.hypixel.hytale.builtin.blockphysics
Файл: com/hypixel/hytale/builtin/blockphysics/PrefabBufferValidator.java
Поля (17)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
break |
|
|
break |
|
Set |
var1 |
|
UnknownComponents |
var11 |
|
IEventDispatcher |
var15 |
|
FillerBlockUtil.ValidationResult |
var16 |
|
BlockType |
var17 |
|
BlockType |
var18 |
|
List |
var2 |
|
IPrefabBuffer |
var2 |
|
ComponentType |
var2 |
|
String |
var3 |
|
StringBuilder |
var3 |
|
int |
var4 |
|
int |
var5 |
|
int |
var6 |
|
IPrefabBuffer.RawBlockConsumer |
var7 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(Holder var10 : var5x) |
|
public int |
getBlockpublic int getBlock(@Nonnull IPrefabBuffer var1, Void var2, int var3, int var4, int var5) |
|
public int |
getFillerpublic int getFiller(@Nonnull IPrefabBuffer var1, Void var2, int var3, int var4, int var5) |
|
public int |
getRotationIndexpublic int getRotationIndex(@Nonnull IPrefabBuffer var1, Void var2, int var3, int var4, int var5) |
|
|
if if(var5x != null) |
|
|
switch switch(var16) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.blockphysics;
class="kw">import com.hypixel.hytale.common.util.ExceptionUtil;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.data.unknown.UnknownComponents;
class="kw">import com.hypixel.hytale.event.IEvent;
class="kw">import com.hypixel.hytale.event.IEventDispatcher;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.PrefabBufferUtil;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.IPrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.universe.world.ValidationOption;
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 com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.ArrayList;
class="kw">import java.util.EnumSet;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.stream.Collectors;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class PrefabBufferValidator {
@Nonnull
class="kw">private class="kw">static class="kw">final FillerBlockUtil.FillerFetcher<IPrefabBuffer, Void> FILLER_FETCHER = new FillerBlockUtil.FillerFetcher<IPrefabBuffer, Void>() {
class="kw">public int getBlock(@Nonnull IPrefabBuffer var1, Void var2, int var3, int var4, int var5) {
class="kw">return var1.getBlockId(var3, var4, var5);
}
class="kw">public int getFiller(@Nonnull IPrefabBuffer var1, Void var2, int var3, int var4, int var5) {
class="kw">return var1.getFiller(var3, var4, var5);
}
class="kw">public int getRotationIndex(@Nonnull IPrefabBuffer var1, Void var2, int var3, int var4, int var5) {
class="kw">return var1.getRotationIndex(var3, var4, var5);
}
};
class="kw">public PrefabBufferValidator() {
}
@Nonnull
class="kw">public class="kw">static List<String> validateAllPrefabs(@Nonnull List<ValidationOption> var0) {
Set var1 = !var0.isEmpty()
? EnumSet.copyOf(var0)
: EnumSet.of(ValidationOption.BLOCK_STATES, ValidationOption.ENTITIES, ValidationOption.BLOCKS, ValidationOption.BLOCK_FILLER);
List var2 = validatePrefabsInPath(PrefabStore.get().getWorldGenPrefabsPath(), var1);
var2.addAll(validatePrefabsInPath(PrefabStore.get().getAssetPrefabsPath(), var1));
var2.addAll(validatePrefabsInPath(PrefabStore.get().getServerPrefabsPath(), var1));
class="kw">return var2;
}
@Nonnull
class="kw">public class="kw">static List<String> validatePrefabsInPath(@Nonnull Path var0, @Nonnull Set<ValidationOption> var1) {
if (!Files.exists(var0)) {
class="kw">return new ArrayList<>();
}
try (Stream var2 = Files.walk(var0, FileUtil.DEFAULT_WALK_TREE_OPTIONS_ARRAY)) {
class="kw">return var2.<String>map(var1x -> {
if (Files.isRegularFile(var1x) && PrefabStore.PREFAB_FILTER.test(var1x)) {
try {
IPrefabBuffer var2 = PrefabBufferUtil.getCached(var1x);
String var3 = validate(var2, var1);
class="kw">return var3 != null ? var1x + "\n" + var3 : null;
} catch (Throwable var4) {
class="kw">return var1x + "\n\t" + ExceptionUtil.combineMessages(var4, "\n\t");
}
} else {
class="kw">return null;
}
}).filter(Objects::nonNull).collect(Collectors.toList());
} catch (IOException var7) {
throw SneakyThrow.sneakyThrow(var7);
}
}
@Nullable
class="kw">public class="kw">static String validate(@Nonnull IPrefabBuffer var0, @Nonnull Set<ValidationOption> var1) {
ComponentType var2 = EntityStore.REGISTRY.getUnknownComponentType();
StringBuilder var3 = new StringBuilder();
int var4 = var0.getAnchorX();
int var5 = var0.getAnchorY();
int var6 = var0.getAnchorZ();
IPrefabBuffer.RawBlockConsumer var7 = WorldValidationUtil.blockValidator(var4, var5, var6, var3, var1);
var0.forEachRaw(
IPrefabBuffer.iterateAllColumns(),
(var4x, var5x, var6x, var7x, var8, var9, var10, var11, var12, var13, var14) -> {
var7.accept(var4x, var5x, var6x, var7x, var8, var9, var10, var11, var12, var13, null);
IEventDispatcher var15 = HytaleServer.get().getEventBus().dispatchFor(PrefabBufferValidator.ValidateBlockEvent.class);
if (var15.hasListener()) {
var15.dispatch(new PrefabBufferValidator.ValidateBlockEvent(var4x, var5x, var6x, var8, var11, var12, var13, var10, var3));
}
if (var1.contains(ValidationOption.BLOCK_FILLER)) {
FillerBlockUtil.ValidationResult var16 = FillerBlockUtil.validateBlock(var4x, var5x, var6x, var8, var12, var13, var0, null, FILLER_FETCHER);
class="kw">switch (var16) {
case OK:
class="kw">default:
break;
case INVALID_BLOCK: {
BlockType var18 = BlockType.getAssetMap().getAsset(var8);
var3.append("\tBlock ")
.append(var18 != null ? var18.getId() : "<missing>")
.append(" at ")
.append(var4x)
.append(", ")
.append(var5x)
.append(", ")
.append(var6x)
.append(" is not valid filler")
.append('\n');
break;
}
case INVALID_FILLER: {
BlockType var17 = BlockType.getAssetMap().getAsset(var8);
var3.append("\tBlock ")
.append(var17 != null ? var17.getId() : "<missing>")
.append(" at ")
.append(var4x)
.append(", ")
.append(var5x)
.append(", ")
.append(var6x)
.append(" has invalid/missing filler blocks")
.append('\n');
}
}
}
},
(var0x, var1x, var2x, var3x, var4x, var5x) -> {},
(var3x, var4x, var5x, var6x) -> {
if (var5x != null) {
if (var1.contains(ValidationOption.ENTITIES)) {
for (Holder var10 : var5x) {
UnknownComponents var11 = var10.getComponent(var2);
if (var11 != null && !var11.getUnknownComponents().isEmpty()) {
var3.append("\tUnknown Entity Components: ").append(var11.getUnknownComponents()).append("\n");
}
}
}
}
},
(Void)null
);
class="kw">return !var3.isEmpty() ? var3.toString() : null;
}
class="kw">public record ValidateBlockEvent(
int x, int y, int z, int blockId, int support, int rotation, int filler, @Nullable Holder<ChunkStore> holder, StringBuilder reason
) class="kw">implements IEvent<Void> {
class="kw">public ValidateBlockEvent {
}
}
}