BlockMapMarker class

Пакет: com.hypixel.hytale.server.core.universe.world.meta.state

Файл: com/hypixel/hytale/server/core/universe/world/meta/state/BlockMapMarker.java

implements: Component<ChunkStore>

Поля (26)

МодификаторыТипИмя
private static final ResourceType<ChunkStore, BlockMapMarkersResource> BLOCK_MAP_MARKERS_RESOURCE_TYPE
final BuilderCodec<BlockMapMarker> CODEC
private static final ComponentType<ChunkStore, BlockMapMarker> COMPONENT_TYPE
public static final BlockMapMarker.MarkerProvider INSTANCE
BlockMapMarkersResource var10
BlockMapMarkersResource.BlockMapMarkerData var10
ObjectSet var2
String var2
Store var3
BlockMapMarkersResource var4
Int3ObjectOpenHashMap var5
BlockModule.BlockStateInfo var5
BlockModule.BlockStateInfo var5
PlayerWorldData var6
MapMarker var6
Ref var6
Ref var6
Ref var6
BlockMapMarker var7
ChunkSection var7
Player var7
ChunkSection var8
Vector3i var8
PlayerWorldData var8
Vector3i var9
BlockMapMarkersResource var9

Методы (16)

МодификаторыВозвратСигнатура
public MarkerProviderpublic MarkerProvider()
public OnAddRemovepublic OnAddRemove()
private static void forgetMarkerprivate static void forgetMarker(@Nonnull World var0, @Nonnull String var1)
static ComponentType<ChunkStore, BlockMapMarker> getComponentTypeComponentType<ChunkStore, BlockMapMarker> getComponentType()
public String getIconString getIcon()
public String getNameString getName()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var2 == RemoveReason.REMOVE)
if if(var7 != null)
if if(var8 != null)
public boolean isDiscoverableboolean isDiscoverable()
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
static int retainRevealedMarkersint retainRevealedMarkers(@Nonnull World var0, @Nonnull PlayerWorldData var1)
abstract this this(var1, var2, false)
public void updatepublic void update(@Nonnull World var1, @Nonnull Player var2, @Nonnull MarkersCollector var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.meta.state;

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.validation.Validators;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Component;
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.ResourceType;
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.data.Int3ObjectOpenHashMap;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.protocol.packets.worldmap.MapMarker;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerWorldData;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
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.universe.world.worldmap.WorldMapManager;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldmap.markers.DiscoverableMapMarkers;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldmap.markers.MapMarkerBuilder;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldmap.markers.MarkersCollector;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectSet;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class BlockMapMarker class="kw">implements Component<ChunkStore> {
   class="kw">public class="kw">static class="kw">final BuilderCodec<BlockMapMarker> CODEC = BuilderCodec.builder(BlockMapMarker.class, BlockMapMarker::new)
      .append(new KeyedCodec<>("Name", Codec.STRING), (var0, var1) -> var0.name = var1, var0 -> var0.name)
      .addValidator(Validators.nonNull())
      .add()
      .<String>append(new KeyedCodec<>("Icon", Codec.STRING), (var0, var1) -> var0.icon = var1, var0 -> var0.icon)
      .addValidator(Validators.nonNull())
      .add()
      .<Boolean>append(
         new KeyedCodec<>("Discoverable", Codec.BOOLEAN),
         (var0, var1) -> var0.discoverable = var1 != null && var1,
         var0 -> var0.discoverable ? Boolean.TRUE : null
      )
      .documentation("Whether the marker stays hidden until a gameplay system reveals it to a player.")
      .add()
      .build();
   class="kw">private String name;
   class="kw">private String icon;
   class="kw">private boolean discoverable;

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

   class="kw">public BlockMapMarker(String var1, String var2) {
      this(var1, var2, false);
   }

   class="kw">public BlockMapMarker(String var1, String var2, boolean var3) {
      this.name = var1;
      this.icon = var2;
      this.discoverable = var3;
   }

   class="kw">public class="kw">static ComponentType<ChunkStore, BlockMapMarker> getComponentType() {
      class="kw">return BlockModule.get().getBlockMapMarkerComponentType();
   }

   class="kw">public String getName() {
      class="kw">return this.name;
   }

   class="kw">public String getIcon() {
      class="kw">return this.icon;
   }

   class="kw">public boolean isDiscoverable() {
      class="kw">return this.discoverable;
   }

   @Nullable
   @Override
   class="kw">public Component<ChunkStore> clone() {
      class="kw">return new BlockMapMarker(this.name, this.icon, this.discoverable);
   }

   class="kw">public class="kw">static int retainRevealedMarkers(@Nonnull World var0, @Nonnull PlayerWorldData var1) {
      if (!var1.hasRevealedMarkers()) {
         class="kw">return 0;
      }

      ObjectSet var2 = DiscoverableMapMarkers.getThreadLocalMarkerIdSet();
      BlockMapMarkersResource.of(var0).getMarkers().forEach((var1x, var2x, var3, var4) -> {
         if (var4.getMarkerId() != null && var4.isDiscoverable()) {
            var2.add(var4.getMarkerId());
         }
      });
      class="kw">return var1.retainRevealedMarkers(var2);
   }

   class="kw">public class="kw">static class MarkerProvider class="kw">implements WorldMapManager.MarkerProvider {
      class="kw">public class="kw">static class="kw">final BlockMapMarker.MarkerProvider INSTANCE = new BlockMapMarker.MarkerProvider();

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

      @Override
      class="kw">public void update(@Nonnull World var1, @Nonnull Player var2, @Nonnull MarkersCollector var3) {
         BlockMapMarkersResource var4 = BlockMapMarkersResource.of(var1);
         Int3ObjectOpenHashMap var5 = var4.getMarkers();
         PlayerWorldData var6 = var2.getPlayerConfigData().getPerWorldData(var1.getName());
         var5.forEach(
            (var2x, var3x, var4x, var5x) -> {
               if (var5x.getMarkerId() != null) {
                  if (!var5x.isDiscoverable() || var6.isMarkerRevealed(var5x.getMarkerId())) {
                     MapMarker var6 = new MapMarkerBuilder(var5x.getMarkerId(), var5x.getIcon(), new Transform(var2x, var3x, var4x))
                        .withName(Message.translation(var5x.getName()))
                        .build();
                     var3.add(var6);
                  }
               }
            }
         );
      }
   }

   class="kw">public class="kw">static class OnAddRemove class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">static class="kw">final ComponentType<ChunkStore, BlockMapMarker> COMPONENT_TYPE = BlockMapMarker.getComponentType();
      class="kw">private class="kw">static class="kw">final ResourceType<ChunkStore, BlockMapMarkersResource> BLOCK_MAP_MARKERS_RESOURCE_TYPE = BlockMapMarkersResource.getResourceType();

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         BlockModule.BlockStateInfo var5 = var4.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
         assert var5 != null;
         Ref var6 = var5.getSectionRef();
         if (var6.isValid()) {
            BlockMapMarker var7 = var4.getComponent(var1, COMPONENT_TYPE);
            assert var7 != null;
            ChunkSection var8 = var4.getComponent(var6, ChunkSection.getComponentType());
            Vector3i var9 = new Vector3i(
               ChunkUtil.worldCoordFromLocalCoord(var8.getX(), ChunkUtil.xFromIndex(var5.getIndex())),
               ChunkUtil.worldCoordFromLocalCoord(var8.getY(), ChunkUtil.yFromIndex(var5.getIndex())),
               ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), ChunkUtil.zFromIndex(var5.getIndex()))
            );
            BlockMapMarkersResource var10 = var4.getResource(BLOCK_MAP_MARKERS_RESOURCE_TYPE);
            var10.addMarker(var9, var7.getName(), var7.getIcon(), var7.isDiscoverable());
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         if (var2 == RemoveReason.REMOVE) {
            BlockModule.BlockStateInfo var5 = var4.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
            assert var5 != null;
            Ref var6 = var5.getSectionRef();
            if (var6.isValid()) {
               ChunkSection var7 = var4.getComponent(var6, ChunkSection.getComponentType());
               Vector3i var8 = new Vector3i(
                  ChunkUtil.worldCoordFromLocalCoord(var7.getX(), ChunkUtil.xFromIndex(var5.getIndex())),
                  ChunkUtil.worldCoordFromLocalCoord(var7.getY(), ChunkUtil.yFromIndex(var5.getIndex())),
                  ChunkUtil.worldCoordFromLocalCoord(var7.getZ(), ChunkUtil.zFromIndex(var5.getIndex()))
               );
               BlockMapMarkersResource var9 = var4.getResource(BLOCK_MAP_MARKERS_RESOURCE_TYPE);
               BlockMapMarkersResource.BlockMapMarkerData var10 = var9.removeMarker(var8);
               if (var10 != null && var10.isDiscoverable() && var10.getMarkerId() != null) {
                  forgetMarker(var3.getExternalData().getWorld(), var10.getMarkerId());
               }
            }
         }
      }

      class="kw">private class="kw">static void forgetMarker(@Nonnull World var0, @Nonnull String var1) {
         String var2 = var0.getName();
         Store var3 = var0.getEntityStore().getStore();

         for (PlayerRef var5 : var0.getPlayerRefs()) {
            Ref var6 = var5.getReference();
            if (var6 != null && var6.isValid()) {
               Player var7 = var3.getComponent(var6, Player.getComponentType());
               if (var7 != null) {
                  PlayerWorldData var8 = var7.getPlayerConfigData().getPerWorldData().get(var2);
                  if (var8 != null) {
                     var8.hideMarker(var1);
                  }
               }
            }
         }
      }

      @Nullable
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return COMPONENT_TYPE;
      }
   }
}