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 {
      }
   }
}