OnAddRemove class

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

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

extends: RefSystem<ChunkStore>

Поля (19)

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

Методы (7)

МодификаторыВозвратСигнатура
private static void forgetMarkerprivate static void forgetMarker(@Nonnull World var0, @Nonnull String var1)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var2 == RemoveReason.REMOVE)
if if(var7 != null)
if if(var8 != null)
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)

Исходный код

Показать/скрыть
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;
      }
   }
}