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;
}
}
}