PrefabEditSession class

Пакет: com.hypixel.hytale.builtin.buildertools.prefabeditor

Файл: com/hypixel/hytale/builtin/buildertools/prefabeditor/PrefabEditSession.java

implements: Resource<EntityStore>

Поля (17)

МодификаторыТипИмя
return
UUID var1
String var1
PrefabEditSessionManager var2
UUID var2
Transform var2
UUIDComponent var3
PrefabEditingMetadata var4
UUIDComponent var4
UUID var4
Player var5
PlayerRef var5
PrefabEditingMetadata var6
PlayerRef var6
Player var6
UUID var7
BlockSelection var8

Методы (14)

МодификаторыВозвратСигнатура
public void addPrefabvoid addPrefab(@Nonnull Path var1, @Nonnull Vector3i var2, @Nonnull Vector3i var3, @Nonnull Vector3i var4, @Nonnull Vector3i var5)
static boolean boundsIntersectboolean boundsIntersect(@Nonnull Vector3i var0, @Nonnull Vector3i var1, @Nonnull Vector3i var2, @Nonnull Vector3i var3)
public boolean clearSelectedPrefabboolean clearSelectedPrefab(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
for for(PrefabEditingMetadata var5 : var1)
public UUID getWorldArrivedFromUUID getWorldArrivedFrom()
public UUID getWorldCreatorUUID getWorldCreator()
public void hidePrefabAnchorsvoid hidePrefabAnchors(@Nonnull PacketHandler var1)
if if(var1 != null)
if if(var4 == null)
public void markPrefabsDirtyAtPositionvoid markPrefabsDirtyAtPosition(@Nonnull Vector3i var1)
public void markPrefabsDirtyInBoundsvoid markPrefabsDirtyInBounds(@Nonnull Vector3i var1, @Nonnull Vector3i var2)
public void setSelectedPrefabvoid setSelectedPrefab(@Nonnull Ref<EntityStore> var1, @Nonnull PrefabEditingMetadata var2, @Nonnull ComponentAccessor<EntityStore> var3)
public void setTransformArrivedFromvoid setTransformArrivedFrom(Transform var1)
public void setWorldArrivedFromvoid setWorldArrivedFrom(UUID var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
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.array.ArrayCodec;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.math.codec.Vector3iArrayCodec;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.protocol.packets.buildertools.BuilderToolHideAnchors;
class="kw">import com.hypixel.hytale.protocol.packets.worldmap.MapMarker;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.io.PacketHandler;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldmap.markers.MapMarkerBuilder;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import java.nio.file.Path;
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.Vector3i;

class="kw">public class PrefabEditSession class="kw">implements Resource<EntityStore> {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<PrefabEditSession> CODEC = BuilderCodec.builder(PrefabEditSession.class, PrefabEditSession::new)
      .append(new KeyedCodec<>("WorldName", Codec.STRING, true), (var0, var1) -> var0.worldName = var1, var0 -> var0.worldName)
      .add()
      .append(new KeyedCodec<>("WorldArrivedFrom", Codec.UUID_STRING, true), (var0, var1) -> var0.worldArrivedFrom = var1, var0 -> var0.worldArrivedFrom)
      .add()
      .append(
         new KeyedCodec<>("TransformArrivedFrom", Transform.CODEC, true), (var0, var1) -> var0.transformArrivedFrom = var1, var0 -> var0.transformArrivedFrom
      )
      .add()
      .append(new KeyedCodec<>("WorldCreatorUUID", Codec.UUID_STRING, true), (var0, var1) -> var0.worldCreator = var1, var0 -> var0.worldCreator)
      .add()
      .append(new KeyedCodec<>("SpawnPoint", new Vector3iArrayCodec(), true), (var0, var1) -> var0.spawnPoint = var1, var0 -> var0.spawnPoint)
      .add()
      .append(new KeyedCodec<>("LoadedPrefabMetadata", new ArrayCodec<>(PrefabEditingMetadata.CODEC, PrefabEditingMetadata[]::new), false), (var0, var1) -> {
         for (PrefabEditingMetadata var5 : var1) {
            var0.loadedPrefabMetadata.put(var5.getUuid(), var5);
         }
      }, var0 -> var0.loadedPrefabMetadata.values().toArray(PrefabEditingMetadata[]::new))
      .add()
      .afterDecode(var0 -> {
         UUID var1 = var0.getWorldCreator();
         if (var1 != null) {
            PrefabEditSessionManager var2 = BuilderToolsPlugin.get().getPrefabEditSessionManager();
            var2.populateActiveEditSession(var1, var0);

            for (PrefabEditingMetadata var4 : var0.loadedPrefabMetadata.values()) {
               var2.populatePrefabsBeingEdited(var4.getPrefabPath());
            }

            var2.scheduleAnchorEntityRecreation(var0);
         }
      })
      .build();
   class="kw">private String worldName;
   class="kw">private UUID worldArrivedFrom;
   @Nullable
   class="kw">private Transform transformArrivedFrom;
   class="kw">private UUID worldCreator;
   @Nonnull
   class="kw">private class="kw">final Map<UUID, PrefabEditingMetadata> loadedPrefabMetadata = new Object2ObjectOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Map<UUID, UUID> selectedPrefab = new Object2ObjectOpenHashMap();
   @Nonnull
   class="kw">private Vector3i spawnPoint = new Vector3i(0, 0, 0);

   @Nonnull
   class="kw">public class="kw">static ResourceType<EntityStore, PrefabEditSession> getResourceType() {
      class="kw">return BuilderToolsPlugin.get().getPrefabEditSessionResourceType();
   }

   class="kw">private PrefabEditSession() {
   }

   class="kw">public PrefabEditSession(@Nonnull String var1, @Nonnull UUID var2, @Nonnull UUID var3, @Nonnull Transform var4) {
      this.worldName = var1;
      this.worldCreator = var2;
      this.worldArrivedFrom = var3;
      this.transformArrivedFrom = var4;
   }

   class="kw">public PrefabEditSession(@Nonnull PrefabEditSession var1) {
      this.worldName = var1.worldName;
      this.worldArrivedFrom = var1.worldArrivedFrom;
      this.transformArrivedFrom = var1.transformArrivedFrom;
      this.worldCreator = var1.worldCreator;
      this.spawnPoint = var1.spawnPoint;
   }

   class="kw">public void addPrefab(@Nonnull Path var1, @Nonnull Vector3i var2, @Nonnull Vector3i var3, @Nonnull Vector3i var4, @Nonnull Vector3i var5) {
      if (this.loadedPrefabMetadata.isEmpty()) {
         this.spawnPoint.set(var3);
      }

      PrefabEditingMetadata var6 = new PrefabEditingMetadata(var1, var2, var3, var4, var5, Universe.get().getWorld(this.worldName));
      this.loadedPrefabMetadata.put(var6.getUuid(), var6);
   }

   @Nullable
   class="kw">public PrefabEditingMetadata updatePrefabBounds(@Nonnull UUID var1, @Nonnull Vector3i var2, @Nonnull Vector3i var3) {
      PrefabEditingMetadata var4 = this.loadedPrefabMetadata.get(var1);
      if (var4 == null) {
         class="kw">return null;
      }

      var4.setMaxPoint(var3);
      var4.setMinPoint(var2);
      var4.setDirty(true);
      class="kw">return var4;
   }

   class="kw">public void setSelectedPrefab(@Nonnull Ref<EntityStore> var1, @Nonnull PrefabEditingMetadata var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      UUIDComponent var4 = var3.getComponent(var1, UUIDComponent.getComponentType());
      assert var4 != null;
      Player var5 = var3.getComponent(var1, Player.getComponentType());
      assert var5 != null;
      PlayerRef var6 = var3.getComponent(var1, PlayerRef.getComponentType());
      assert var6 != null;
      UUID var7 = var4.getUuid();
      if (this.selectedPrefab.get(var7) != null && this.selectedPrefab.get(var7).equals(var2.getUuid())) {
         BlockSelection var8 = BuilderToolsPlugin.getState(var5, var6).getSelection();
         if (var8 != null && var2.getMinPoint().equals(var8.getSelectionMin()) && var2.getMaxPoint().equals(var8.getSelectionMax())) {
            class="kw">return;
         }
      }

      this.selectedPrefab.put(var7, var2.getUuid());
      var2.sendAnchorHighlightingPacket(var6.getPacketHandler());
      BuilderToolsPlugin.addToQueue(var5, var6, (var1x, var2x, var3x) -> var2x.select(var2.getMinPoint(), var2.getMaxPoint(), null, var3x));
   }

   class="kw">public void hidePrefabAnchors(@Nonnull PacketHandler var1) {
      var1.writeNoCache(new BuilderToolHideAnchors());
   }

   @Nullable
   class="kw">public PrefabEditingMetadata getSelectedPrefab(@Nonnull UUID var1) {
      UUID var2 = this.selectedPrefab.get(var1);
      class="kw">return var2 == null ? null : this.loadedPrefabMetadata.get(var2);
   }

   class="kw">public boolean clearSelectedPrefab(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      UUIDComponent var3 = var2.getComponent(var1, UUIDComponent.getComponentType());
      assert var3 != null;
      UUID var4 = var3.getUuid();
      if (this.selectedPrefab.remove(var4) == null) {
         class="kw">return false;
      }

      PlayerRef var5 = var2.getComponent(var1, PlayerRef.getComponentType());
      assert var5 != null;
      Player var6 = var2.getComponent(var1, Player.getComponentType());
      assert var6 != null;
      this.hidePrefabAnchors(var5.getPacketHandler());
      BuilderToolsPlugin.addToQueue(var6, var5, (var0, var1x, var2x) -> var1x.deselect(var2x));
      class="kw">return true;
   }

   @Nonnull
   class="kw">public String getWorldName() {
      class="kw">return this.worldName;
   }

   class="kw">public UUID getWorldArrivedFrom() {
      class="kw">return this.worldArrivedFrom;
   }

   class="kw">public void setWorldArrivedFrom(UUID var1) {
      this.worldArrivedFrom = var1;
   }

   @Nullable
   class="kw">public Transform getTransformArrivedFrom() {
      class="kw">return this.transformArrivedFrom;
   }

   class="kw">public void setTransformArrivedFrom(Transform var1) {
      this.transformArrivedFrom = var1;
   }

   class="kw">public UUID getWorldCreator() {
      class="kw">return this.worldCreator;
   }

   @Nonnull
   class="kw">public Vector3i getSpawnPoint() {
      class="kw">return this.spawnPoint;
   }

   @Nonnull
   class="kw">public Map<UUID, PrefabEditingMetadata> getLoadedPrefabMetadata() {
      class="kw">return this.loadedPrefabMetadata;
   }

   class="kw">public void markPrefabsDirtyAtPosition(@Nonnull Vector3i var1) {
      for (PrefabEditingMetadata var3 : this.loadedPrefabMetadata.values()) {
         if (var3.isLocationWithinPrefabBoundingBox(var1)) {
            var3.setDirty(true);
         }
      }
   }

   class="kw">public void markPrefabsDirtyInBounds(@Nonnull Vector3i var1, @Nonnull Vector3i var2) {
      for (PrefabEditingMetadata var4 : this.loadedPrefabMetadata.values()) {
         if (boundsIntersect(var4.getMinPoint(), var4.getMaxPoint(), var1, var2)) {
            var4.setDirty(true);
         }
      }
   }

   class="kw">private class="kw">static boolean boundsIntersect(@Nonnull Vector3i var0, @Nonnull Vector3i var1, @Nonnull Vector3i var2, @Nonnull Vector3i var3) {
      class="kw">return var0.x <= var3.x && var1.x >= var2.x && var0.y <= var3.y && var1.y >= var2.y && var0.z <= var3.z && var1.z >= var2.z;
   }

   @Nonnull
   class="kw">public MapMarker[] createPrefabMarkers() {
      class="kw">return this.loadedPrefabMetadata.values().stream().map(PrefabEditSession::createPrefabMarker).toArray(MapMarker[]::new);
   }

   @Nonnull
   class="kw">public class="kw">static MapMarker createPrefabMarker(@Nonnull PrefabEditingMetadata var0) {
      String var1 = PrefabStore.stripPrefabSuffix(var0.getPrefabPath().getFileName().toString());
      Transform var2 = new Transform(var0.getAnchorEntityPosition());
      class="kw">return new MapMarkerBuilder("prefab-" + var0.getUuid(), "Prefab.png", var2).withCustomName(var1).build();
   }

   @Nonnull
   class="kw">public PrefabEditSession clone() {
      class="kw">return new PrefabEditSession(this);
   }
}