MarkerProvider class

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

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

implements: WorldMapManager.MarkerProvider

Поля (5)

МодификаторыТипИмя
public static final BlockMapMarker.MarkerProvider INSTANCE
BlockMapMarkersResource var4
Int3ObjectOpenHashMap var5
PlayerWorldData var6
MapMarker var6

Методы (1)

МодификаторыВозвратСигнатура
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;
      }
   }
}