PastePrefabEffect class

Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/PastePrefabEffect.java

extends: TriggerEffect

Поля (21)

МодификаторыТипИмя
return
return
return
String var1
int var10
int var11
PrefabBuffer var15
boolean var2
PrefabStore var2
int var3
boolean var3
Path var3
var3
Path var4
var4
var4
PrefabListAsset var5
Store var6
World var7
Vector3d var8
Vector3i var9

Методы (11)

МодификаторыВозвратСигнатура
if if(this.origin == EffectOrigin.VOLUME_ORIGIN)
if if(this.position != null)
if if(var3 > 0)
if if(var2 || var3)
if if(var3)
if if(var4 == null)
if if(var5 == null)
if if(var4 == null)
if if(var15 != null)
if if(var7 != null)
if if(var3 != null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.YawRotation;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.EffectOrigin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.PrefabListAsset;
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.PrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.PrefabUtil;
class="kw">import java.nio.file.Path;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class PastePrefabEffect class="kw">extends TriggerEffect {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<PastePrefabEffect> CODEC = BuilderCodec.builder(PastePrefabEffect.class, PastePrefabEffect::new, BASE_CODEC)
      .append(new KeyedCodec<>("PrefabList", Codec.STRING, false), (var0, var1) -> var0.prefabListId = var1, var0 -> var0.prefabListId)
      .add()
      .append(new KeyedCodec<>("Prefab", Codec.STRING, false), (var0, var1) -> var0.prefabRelPath = var1, var0 -> var0.prefabRelPath)
      .add()
      .append(new KeyedCodec<>("Position", Vector3dUtil.CODEC, false), (var0, var1) -> var0.position = var1, var0 -> var0.position)
      .add()
      .append(new KeyedCodec<>("Origin", new EnumCodec<>(EffectOrigin.class), false), (var0, var1) -> var0.origin = var1, var0 -> var0.origin)
      .add()
      .append(new KeyedCodec<>("Rotation", new EnumCodec<>(Rotation.class), false), (var0, var1) -> var0.rotation = var1, var0 -> var0.rotation)
      .add()
      .append(new KeyedCodec<>("ShowParticles", Codec.BOOLEAN, false), (var0, var1) -> var0.showParticles = var1, var0 -> var0.showParticles)
      .add()
      .build();
   @Nullable
   class="kw">private String prefabListId;
   @Nullable
   class="kw">private String prefabRelPath;
   @Nullable
   class="kw">private Vector3d position;
   @Nonnull
   class="kw">private EffectOrigin origin = EffectOrigin.VOLUME_ORIGIN;
   @Nonnull
   class="kw">private Rotation rotation = Rotation.None;
   class="kw">private boolean showParticles;

   class="kw">public PastePrefabEffect() {
   }

   @Nullable
   class="kw">public String getPrefabListId() {
      class="kw">return this.prefabListId;
   }

   @Nullable
   class="kw">public String getPrefabRelPath() {
      class="kw">return this.prefabRelPath;
   }

   @Nullable
   class="kw">public Vector3d getPosition() {
      class="kw">return this.position != null ? new Vector3d(this.position) : null;
   }

   @Nonnull
   class="kw">public EffectOrigin getOrigin() {
      class="kw">return this.origin;
   }

   @Nonnull
   class="kw">public Rotation getRotation() {
      class="kw">return this.rotation;
   }

   @Override
   class="kw">public void rotateInPlace(float var1, @Nonnull Vector3d var2) {
      if (this.origin == EffectOrigin.VOLUME_ORIGIN) {
         if (this.position != null) {
            YawRotation.rotate(this.position, var1);
         }

         int var3 = YawRotation.quarterTurns(var1);
         if (var3 > 0) {
            this.rotation = YawRotation.rotate(this.rotation, var3);
         }
      }
   }

   @Override
   class="kw">public void execute(@Nonnull TriggerContext var1) {
      boolean var2 = this.prefabListId != null && !this.prefabListId.isBlank();
      boolean var3 = this.prefabRelPath != null && !this.prefabRelPath.isBlank();
      if (var2 || var3) {
         Path var4 = null;
         if (var3) {
            var4 = resolveDirectPrefabPath(this.prefabRelPath.trim());
            if (var4 == null) {
               LOGGER.at(Level.WARNING).log("PastePrefabEffect: Prefab '%s' not found", this.prefabRelPath);
               class="kw">return;
            }
         } else {
            PrefabListAsset var5 = PrefabListAsset.getAssetMap().getAsset(this.prefabListId);
            if (var5 == null) {
               LOGGER.at(Level.WARNING).log("PastePrefabEffect: PrefabList '%s' not found", this.prefabListId);
               class="kw">return;
            }

            var4 = var5.getRandomPrefab();
            if (var4 == null) {
               class="kw">return;
            }
         }

         PrefabBuffer var15 = loadPrefabBuffer(var4);
         if (var15 != null) {
            Store var6 = var1.getStore();
            World var7 = var6.getExternalData().getWorld();
            if (var7 != null) {
               Vector3d var8 = var1.resolveOrigin(this.origin, this.position, TriggerContext.MissingActor.FALLBACK_TO_VOLUME);
               Vector3i var9 = new Vector3i((int)Math.floor(var8.x()), (int)Math.floor(var8.y()), (int)Math.floor(var8.z()));
               int var10 = 1;
               int var11 = this.showParticles ? 0 : 4;

               try {
                  PrefabUtil.paste(var15.newAccess(), var7, var9, this.rotation, new FastRandom(), 1, var11, var6);
               } catch (Exception var13) {
                  ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var13)).log("PastePrefabEffect: Failed to paste prefab '%s'", var4);
               }
            }
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static PrefabBuffer loadPrefabBuffer(@Nonnull Path var0) {
      try {
         class="kw">return PrefabBufferUtil.loadBuffer(var0);
      } catch (Exception var2) {
         ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var2)).log("PastePrefabEffect: Failed to load prefab '%s'", var0);
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">public class="kw">static Path resolveDirectPrefabPath(@Nonnull String var0) {
      String var1 = var0.replace('\\', '/').trim();
      PrefabStore var2 = PrefabStore.get();
      Path var3 = var2.findAssetPrefabPath(var1);
      if (var3 != null) {
         class="kw">return var3;
      }

      if (!var1.endsWith(".prefab.json")) {
         var3 = var2.findAssetPrefabPath(var1 + ".prefab.json");
      }

      class="kw">return var3;
   }
}