SpawnMarkerAddedFromExternal class
Пакет: com.hypixel.hytale.server.spawning.blockstates
Файл: com/hypixel/hytale/server/spawning/blockstates/SpawnMarkerBlockStateSystems.java
extends: RefSystem<EntityStore>
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final Query<EntityStore> |
query |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public void |
onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.blockstates;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
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.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.nameplate.Nameplate;
class="kw">import com.hypixel.hytale.server.core.entity.reference.PersistentRef;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.FromPrefab;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.FromWorldGen;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HiddenFromAdventurePlayers;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentModel;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
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.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class SpawnMarkerBlockStateSystems {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public SpawnMarkerBlockStateSystems() {
}
class="kw">private class="kw">static void createMarker(
@Nonnull Ref<ChunkStore> var0,
@Nonnull SpawnMarkerBlock var1,
@Nonnull BlockModule.BlockStateInfo var2,
@Nonnull Store<EntityStore> var3,
@Nonnull CommandBuffer<ChunkStore> var4
) {
if (var2.getSectionRef().isValid()) {
BlockSection var5 = var4.getComponent(var2.getSectionRef(), BlockSection.getComponentType());
if (var5 != null) {
ChunkSection var6 = var4.getComponent(var2.getSectionRef(), ChunkSection.getComponentType());
if (var6 != null) {
int var7 = ChunkUtil.xFromIndex(var2.getIndex());
int var8 = ChunkUtil.yFromIndex(var2.getIndex());
int var9 = ChunkUtil.zFromIndex(var2.getIndex());
BlockType var10 = BlockType.getAssetMap().getAsset(var5.get(var7, var8, var9));
if (var10 != null && var10.getBlockEntity() != null) {
SpawnMarkerBlock var11 = var10.getBlockEntity().getComponent(SpawnMarkerBlock.getComponentType());
if (var11 != null) {
SpawnMarkerBlock.Data var12 = var11.getConfig();
if (var12 != null) {
SpawnMarker var13 = SpawnMarker.getAssetMap().getAsset(var12.getSpawnMarker());
if (var13 == null) {
LOGGER.at(Level.SEVERE).log("Marker %s does not exist!", var12.getSpawnMarker());
var4.removeEntity(var0, RemoveReason.REMOVE);
} else {
Vector3i var14 = new Vector3i(
ChunkUtil.worldCoordFromLocalCoord(var6.getX(), var7),
ChunkUtil.worldCoordFromLocalCoord(var6.getY(), var8),
ChunkUtil.worldCoordFromLocalCoord(var6.getZ(), var9)
);
Vector3i var15 = new Vector3i(var14);
Vector3i var16 = var12.getMarkerOffset();
if (var16 != null) {
var14.add(var16);
}
SpawnMarkerEntity var17 = new SpawnMarkerEntity();
var17.setSpawnMarker(var13);
Holder var18 = EntityStore.REGISTRY.newHolder();
var18.addComponent(SpawnMarkerEntity.getComponentType(), var17);
var18.addComponent(SpawnMarkerBlockReference.getComponentType(), new SpawnMarkerBlockReference(var15));
Vector3d var19 = Vector3iUtil.toVector3d(var14);
var19.add(0.5, 0.0, 0.5);
var18.addComponent(Nameplate.getComponentType(), new Nameplate(var13.getId()));
var18.addComponent(TransformComponent.getComponentType(), new TransformComponent(var19, Rotation3f.IDENTITY));
UUIDComponent var20 = var18.ensureAndGetComponent(UUIDComponent.getComponentType());
Model var21 = SpawnMarkerEntity.getModel(var13);
var18.addComponent(ModelComponent.getComponentType(), new ModelComponent(var21));
var18.addComponent(PersistentModel.getComponentType(), new PersistentModel(var21.toReference()));
var18.ensureComponent(HiddenFromAdventurePlayers.getComponentType());
Ref var22 = var3.addEntity(var18, AddReason.SPAWN);
PersistentRef var23 = new PersistentRef();
var23.setEntity(var22, var20.getUuid());
var1.setSpawnMarkerReference(var23);
}
}
}
}
}
}
}
}
class="kw">public class="kw">static class AddOrRemove class="kw">extends RefSystem<ChunkStore> {
class="kw">private class="kw">final ComponentType<ChunkStore, SpawnMarkerBlock> componentType;
class="kw">public AddOrRemove(ComponentType<ChunkStore, SpawnMarkerBlock> var1) {
this.componentType = var1;
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.componentType;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
}
@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) {
SpawnMarkerBlock var5 = var3.getComponent(var1, this.componentType);
PersistentRef var6 = var5.getSpawnMarkerReference();
if (var6 == null) {
class="kw">return;
}
World var7 = var3.getExternalData().getWorld();
var7.execute(() -> {
Store var2 = var7.getEntityStore().getStore();
Ref var3 = var6.getEntity(var2);
if (var3 != null) {
var2.removeEntity(var3, RemoveReason.REMOVE);
}
});
}
}
}
class="kw">public class="kw">static class SpawnMarkerAddedFromExternal class="kw">extends RefSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public SpawnMarkerAddedFromExternal(ComponentType<EntityStore, SpawnMarkerBlockReference> var1) {
this.query = Query.and(var1, Query.or(FromWorldGen.getComponentType(), FromPrefab.getComponentType()));
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
var4.removeEntity(var1, RemoveReason.REMOVE);
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
}
class="kw">public class="kw">static class SpawnMarkerTickHeartbeat class="kw">extends EntityTickingSystem<EntityStore> {
class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerBlockReference> componentType;
class="kw">public SpawnMarkerTickHeartbeat(ComponentType<EntityStore, SpawnMarkerBlockReference> var1) {
this.componentType = var1;
}
@Override
class="kw">public boolean isParallel(int var1, int var2) {
class="kw">return false;
}
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.componentType;
}
@Override
class="kw">public void tick(
float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
) {
SpawnMarkerBlockReference var6 = var3.getComponent(var2, this.componentType);
Vector3i var7 = var6.getBlockPosition();
ChunkStore var8 = var4.getExternalData().getWorld().getChunkStore();
long var9 = ChunkUtil.indexChunkFromBlock(var7.x, var7.z);
Ref var11 = var8.getChunkReference(var9);
WorldChunk var12 = var11 != null && var11.isValid() ? var8.getStore().getComponent(var11, WorldChunk.getComponentType()) : null;
if (var12 != null) {
Ref var13 = var12.getBlockComponentEntity(var7.x, var7.y, var7.z);
if (var13 != null && var13.getStore().getComponent(var13, SpawnMarkerBlock.getComponentType()) == null) {
Ref var14 = var3.getReferenceTo(var2);
var5.removeEntity(var14, RemoveReason.REMOVE);
SpawnMarkerBlockStateSystems.LOGGER.at(Level.SEVERE).log("Removing block spawn marker due to blockstate mismatch: %s", var14);
} else {
var6.refreshOriginLostTimeout();
}
} else if (var6.tickOriginLostTimeout(var1)) {
Ref var15 = var3.getReferenceTo(var2);
var5.removeEntity(var15, RemoveReason.REMOVE);
SpawnMarkerBlockStateSystems.LOGGER.at(Level.SEVERE).log("Removing block spawn marker due to origin chunk being unloaded: %s", var15);
}
}
}
class="kw">public class="kw">static class TickHeartbeat class="kw">extends EntityTickingSystem<ChunkStore> {
class="kw">private class="kw">final ComponentType<ChunkStore, SpawnMarkerBlock> componentType;
class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
class="kw">private class="kw">final Query<ChunkStore> query;
class="kw">public TickHeartbeat(ComponentType<ChunkStore, SpawnMarkerBlock> var1) {
this.componentType = var1;
this.query = Query.and(var1, this.blockStateInfoComponentType);
}
@Override
class="kw">public boolean isParallel(int var1, int var2) {
class="kw">return false;
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
SpawnMarkerBlock var6 = var3.getComponent(var2, this.componentType);
assert var6 != null;
BlockModule.BlockStateInfo var7 = var3.getComponent(var2, this.blockStateInfoComponentType);
assert var7 != null;
if (var6.getSpawnMarkerReference() == null) {
Ref var8 = var3.getReferenceTo(var2);
SpawnMarkerBlockStateSystems.createMarker(var8, var6, var7, var4.getExternalData().getWorld().getEntityStore().getStore(), var5);
}
if (var6.getSpawnMarkerReference().getEntity(var4.getExternalData().getWorld().getEntityStore().getStore()) != null) {
var6.refreshMarkerLostTimeout();
} else if (var6.tickMarkerLostTimeout(var1)) {
Ref var9 = var3.getReferenceTo(var2);
SpawnMarkerBlockStateSystems.LOGGER.at(Level.SEVERE).log("Creating new spawn marker due to desync with entity: %s", var9);
SpawnMarkerBlockStateSystems.createMarker(var9, var6, var7, var4.getExternalData().getWorld().getEntityStore().getStore(), var5);
}
}
}
}