PrefabPreviewEntityTrackerRemove class
Пакет: com.hypixel.hytale.server.core.modules.entity.prefabpreview
Файл: com/hypixel/hytale/server/core/modules/entity/prefabpreview/PrefabPreviewSystems.java
extends: RefChangeSystem<EntityStore, PrefabPreview>
Поля (2)
| Модификаторы | Тип | Имя |
|---|---|---|
|
EntityTrackerSystems.Visible |
var5 |
|
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> |
visibleComponentType |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public ComponentType<EntityStore, PrefabPreview> |
componentTypepublic ComponentType<EntityStore, PrefabPreview> componentType() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
|
if if(var5 != null) |
|
public void |
onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull PrefabPreview var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<EntityStore> var1, @Nonnull PrefabPreview var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onComponentSetpublic void onComponentSet(@Nonnull Ref<EntityStore> var1,
PrefabPreview var2,
@Nonnull PrefabPreview var3,
@Nonnull Store<EntityStore> var4,
@Nonnull CommandBuffer<EntityStore> var5) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.prefabpreview;
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.SystemGroup;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
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.util.MathUtil;
class="kw">import com.hypixel.hytale.protocol.Color;
class="kw">import com.hypixel.hytale.protocol.ComponentUpdateType;
class="kw">import com.hypixel.hytale.protocol.PrefabPreviewUpdate;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.BlockChange;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.EditorBlocksChange;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.FluidChange;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentPrefabPreview;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PrefabPreview;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class PrefabPreviewSystems {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">static class="kw">final int DEFAULT_BIOME_TINT = 6004264;
class="kw">private class="kw">static class="kw">final int DEFAULT_WATER_TINT = 668501;
class="kw">public PrefabPreviewSystems() {
}
@Nonnull
class="kw">private class="kw">static PrefabPreviewSystems.Tint deriveTint(@Nonnull Store<EntityStore> var0, @Nonnull Holder<EntityStore> var1) {
TransformComponent var2 = var1.getComponent(TransformComponent.getComponentType());
if (var2 != null && var2.getPosition() != null) {
Vector3d var3 = var2.getPosition();
int var4 = MathUtil.floor(var3.x());
int var5 = MathUtil.floor(var3.y());
int var6 = MathUtil.floor(var3.z());
WorldChunk var7 = var0.getExternalData().getWorld().getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var4, var6));
if (var7 != null && var7.getBlockChunk() != null) {
BlockChunk var8 = var7.getBlockChunk();
int var9 = 668501;
Environment var10 = Environment.getAssetMap().getAsset(var8.getEnvironment(var4, var5, var6));
if (var10 != null && var10.getWaterTint() != null) {
Color var11 = var10.getWaterTint();
var9 = (var11.red & 255) << 16 | (var11.green & 255) << 8 | var11.blue & 255;
}
class="kw">return new PrefabPreviewSystems.Tint(var8.getTint(var4, var6), var9);
} else {
class="kw">return new PrefabPreviewSystems.Tint(6004264, 668501);
}
} else {
class="kw">return new PrefabPreviewSystems.Tint(6004264, 668501);
}
}
class="kw">public class="kw">static class PrefabPreviewEntityTrackerRemove class="kw">extends RefChangeSystem<EntityStore, PrefabPreview> {
class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
class="kw">public PrefabPreviewEntityTrackerRemove(ComponentType<EntityStore, EntityTrackerSystems.Visible> var1) {
this.visibleComponentType = var1;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.visibleComponentType;
}
@Nonnull
@Override
class="kw">public ComponentType<EntityStore, PrefabPreview> componentType() {
class="kw">return PrefabPreview.getComponentType();
}
class="kw">public void onComponentAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull PrefabPreview var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
class="kw">public void onComponentSet(
@Nonnull Ref<EntityStore> var1,
PrefabPreview var2,
@Nonnull PrefabPreview var3,
@Nonnull Store<EntityStore> var4,
@Nonnull CommandBuffer<EntityStore> var5
) {
}
class="kw">public void onComponentRemoved(
@Nonnull Ref<EntityStore> var1, @Nonnull PrefabPreview var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
EntityTrackerSystems.Visible var5 = var4.getComponent(var1, this.visibleComponentType);
if (var5 != null) {
for (EntityTrackerSystems.EntityViewer var7 : var5.visibleTo.values()) {
var7.queueRemove(var1, ComponentUpdateType.PrefabPreview);
}
}
}
}
class="kw">public class="kw">static class PrefabPreviewSetup class="kw">extends HolderSystem<EntityStore> {
class="kw">private class="kw">final ComponentType<EntityStore, PrefabPreview> prefabPreviewType = PrefabPreview.getComponentType();
class="kw">private class="kw">final ComponentType<EntityStore, PersistentPrefabPreview> persistentType = PersistentPrefabPreview.getComponentType();
class="kw">private class="kw">final Query<EntityStore> query = Query.and(this.persistentType, Query.not(this.prefabPreviewType));
class="kw">public PrefabPreviewSetup() {
}
@Override
class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
PersistentPrefabPreview var4 = var1.getComponent(this.persistentType);
String var5 = var4.getPrefabKey();
Path var6 = PrefabStore.get().findBrowsablePrefabPath(var5);
if (var6 == null) {
((HytaleLogger.Api)PrefabPreviewSystems.LOGGER.atWarning()).log("Prefab '%s' not found for prefab preview; skipping.", var5);
} else {
BlockSelection var7;
try {
var7 = PrefabStore.get().getPrefab(var6);
} catch (Exception var12) {
((HytaleLogger.Api)((HytaleLogger.Api)PrefabPreviewSystems.LOGGER.atWarning()).withCause(var12))
.log("Failed to load prefab '%s' for prefab preview; skipping.", var5);
class="kw">return;
}
EditorBlocksChange var8 = var7.toPacket();
BlockChange[] var9 = var8.blocksChange != null ? var8.blocksChange : new BlockChange[0];
FluidChange[] var10 = var8.fluidsChange != null ? var8.fluidsChange : new FluidChange[0];
PrefabPreviewSystems.Tint var11 = var4.hasTintOverride()
? new PrefabPreviewSystems.Tint(var4.getBiomeTint(), var4.getWaterTint())
: PrefabPreviewSystems.deriveTint(var3, var1);
var1.putComponent(this.prefabPreviewType, new PrefabPreview(var9, var10, var4.getVisibleLayerCount(), var11.biome(), var11.water()));
}
}
@Override
class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
}
class="kw">public class="kw">static class PrefabPreviewTracker class="kw">extends EntityTickingSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PrefabPreview> prefabPreviewType;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public PrefabPreviewTracker(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1) {
this.visibleComponentType = var1;
this.prefabPreviewType = PrefabPreview.getComponentType();
this.query = Query.and(var1, this.prefabPreviewType);
}
@Nullable
@Override
class="kw">public SystemGroup<EntityStore> getGroup() {
class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public boolean isParallel(int var1, int var2) {
class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
}
@Override
class="kw">public void tick(
float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
) {
EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
assert var6 != null;
PrefabPreview var7 = var3.getComponent(var2, this.prefabPreviewType);
assert var7 != null;
Ref var8 = var3.getReferenceTo(var2);
boolean var9 = var7.consumeNetworkOutdated();
if (!var6.newlyVisibleTo.isEmpty()) {
PrefabPreviewUpdate var10 = fullUpdate(var7);
for (EntityTrackerSystems.EntityViewer var12 : var6.newlyVisibleTo.values()) {
var12.queueUpdate(var8, var10);
}
}
if (var9) {
PrefabPreviewUpdate var13 = layerUpdate(var7);
for (Entry var15 : var6.visibleTo.entrySet()) {
if (!var6.newlyVisibleTo.containsKey(var15.getKey())) {
var15.getValue().queueUpdate(var8, var13);
}
}
}
}
@Nonnull
class="kw">private class="kw">static PrefabPreviewUpdate fullUpdate(@Nonnull PrefabPreview var0) {
class="kw">return new PrefabPreviewUpdate(var0.getBlocks(), var0.getFluids(), var0.getVisibleLayerCount(), var0.getBiomeTint(), var0.getWaterTint());
}
@Nonnull
class="kw">private class="kw">static PrefabPreviewUpdate layerUpdate(@Nonnull PrefabPreview var0) {
class="kw">return new PrefabPreviewUpdate(null, null, var0.getVisibleLayerCount(), var0.getBiomeTint(), var0.getWaterTint());
}
}
class="kw">private record Tint(int biome, int water) {
class="kw">private Tint {
}
}
}