Lifecycle class
Пакет: com.hypixel.hytale.builtin.audio.systems
Файл: com/hypixel/hytale/builtin/audio/systems/MusicEmitterSystems.java
extends: HolderSystem<ChunkStore>
Поля (9)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final ComponentType<ChunkStore, MusicEmitterBlock> |
musicEmitterBlockComponentType |
|
private final ResourceType<EntityStore, TimeResource> |
timeResourceType |
|
MusicEmitterBlock |
var4 |
|
MusicEmitterSystems.EmitterLocation |
var4 |
|
World |
var5 |
|
SetBlockMusicEmitter |
var5 |
|
Instant |
var6 |
|
MusicEmitterSystems.EmitterLocation |
var7 |
|
SetBlockMusicEmitter |
var8 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
|
if if(var2 == AddReason.SPAWN) |
|
|
if if(var4 != null) |
|
|
if if(var7 != null) |
|
|
if if(var2 == RemoveReason.REMOVE) |
|
|
if if(var4 != null) |
|
public void |
onEntityAddpublic void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3) |
|
public void |
onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.audio.systems;
class="kw">import com.hypixel.hytale.builtin.audio.components.MusicEmitterBlock;
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.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.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.ToClientPacket;
class="kw">import com.hypixel.hytale.protocol.packets.world.SetBlockMusicEmitter;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
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 java.time.Instant;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class MusicEmitterSystems {
class="kw">private MusicEmitterSystems() {
}
@Nullable
class="kw">static MusicEmitterSystems.EmitterLocation resolveLocation(@Nullable BlockModule.BlockStateInfo var0, @Nonnull Store<ChunkStore> var1) {
if (var0 == null) {
class="kw">return null;
}
Ref var2 = var0.getSectionRef();
if (!var2.isValid()) {
class="kw">return null;
}
ChunkSection var3 = var1.getComponent(var2, ChunkSection.getComponentType());
if (var3 == null) {
class="kw">return null;
}
int var4 = var0.getIndex();
int var5 = ChunkUtil.worldCoordFromLocalCoord(var3.getX(), ChunkUtil.xFromIndex(var4));
int var6 = ChunkUtil.worldCoordFromLocalCoord(var3.getY(), ChunkUtil.yFromIndex(var4));
int var7 = ChunkUtil.worldCoordFromLocalCoord(var3.getZ(), ChunkUtil.zFromIndex(var4));
class="kw">return new MusicEmitterSystems.EmitterLocation(new BlockPosition(var5, var6, var7), ChunkUtil.indexChunk(var3.getX(), var3.getZ()));
}
class="kw">private class="kw">static void pushToViewers(@Nonnull World var0, long var1, @Nonnull SetBlockMusicEmitter var3) {
for (PlayerRef var5 : var0.getPlayerRefs()) {
if (var5.getChunkTracker().isLoaded(var1)) {
var5.getPacketHandler().writeNoCache(var3);
}
}
}
class="kw">private class="kw">static long playbackOffsetMillis(@Nonnull MusicEmitterBlock var0, @Nonnull Instant var1) {
long var2 = var0.getOriginEpochMillis();
class="kw">return var2 == 0L ? 0L : Math.max(0L, var1.toEpochMilli() - var2);
}
record EmitterLocation(@Nonnull BlockPosition position, long chunkIndex) {
EmitterLocation {
}
}
class="kw">public class="kw">static class Lifecycle class="kw">extends HolderSystem<ChunkStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType;
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, TimeResource> timeResourceType;
class="kw">public Lifecycle(@Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var1) {
this.musicEmitterBlockComponentType = var1;
this.timeResourceType = TimeResource.getResourceType();
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.musicEmitterBlockComponentType;
}
@Override
class="kw">public void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3) {
if (var2 == AddReason.SPAWN) {
MusicEmitterBlock var4 = var1.getComponent(this.musicEmitterBlockComponentType);
if (var4 != null) {
World var5 = var3.getExternalData().getWorld();
Instant var6 = var5.getEntityStore().getStore().getResource(this.timeResourceType).getNow();
if (var4.getOriginEpochMillis() == 0L) {
var4.setOriginEpochMillis(var6.toEpochMilli());
}
MusicEmitterSystems.EmitterLocation var7 = MusicEmitterSystems.resolveLocation(
var1.getComponent(BlockModule.BlockStateInfo.getComponentType()), var3
);
if (var7 != null) {
SetBlockMusicEmitter var8 = new SetBlockMusicEmitter(
var7.position(), var4.toEmitterConfigPacket(), MusicEmitterSystems.playbackOffsetMillis(var4, var6)
);
MusicEmitterSystems.pushToViewers(var5, var7.chunkIndex(), var8);
}
}
}
}
@Override
class="kw">public void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3) {
if (var2 == RemoveReason.REMOVE) {
MusicEmitterSystems.EmitterLocation var4 = MusicEmitterSystems.resolveLocation(
var1.getComponent(BlockModule.BlockStateInfo.getComponentType()), var3
);
if (var4 != null) {
SetBlockMusicEmitter var5 = new SetBlockMusicEmitter(var4.position(), null, 0L);
MusicEmitterSystems.pushToViewers(var3.getExternalData().getWorld(), var4.chunkIndex(), var5);
}
}
}
}
class="kw">public class="kw">static class PacketSystem class="kw">extends ChunkStore.LoadPacketDataQuerySystem {
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType;
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, TimeResource> timeResourceType;
class="kw">public PacketSystem(@Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var1) {
this.musicEmitterBlockComponentType = var1;
this.timeResourceType = TimeResource.getResourceType();
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.musicEmitterBlockComponentType;
}
@Override
class="kw">public boolean isParallel() {
class="kw">return true;
}
class="kw">public void fetch(
int var1,
@Nonnull ArchetypeChunk<ChunkStore> var2,
@Nonnull Store<ChunkStore> var3,
CommandBuffer<ChunkStore> var4,
PlayerRef var5,
@Nonnull List<ToClientPacket> var6
) {
MusicEmitterBlock var7 = var2.getComponent(var1, this.musicEmitterBlockComponentType);
if (var7 != null) {
MusicEmitterSystems.EmitterLocation var8 = MusicEmitterSystems.resolveLocation(
var2.getComponent(var1, BlockModule.BlockStateInfo.getComponentType()), var3
);
if (var8 != null) {
Instant var9 = var3.getExternalData().getWorld().getEntityStore().getStore().getResource(this.timeResourceType).getNow();
var6.add(new SetBlockMusicEmitter(var8.position(), var7.toEmitterConfigPacket(), MusicEmitterSystems.playbackOffsetMillis(var7, var9)));
}
}
}
}
class="kw">public class="kw">static class Replication class="kw">extends RefChangeSystem<ChunkStore, MusicEmitterBlock> {
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType;
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, TimeResource> timeResourceType;
class="kw">public Replication(@Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var1) {
this.musicEmitterBlockComponentType = var1;
this.timeResourceType = TimeResource.getResourceType();
}
@Nonnull
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.musicEmitterBlockComponentType;
}
@Nonnull
@Override
class="kw">public ComponentType<ChunkStore, MusicEmitterBlock> componentType() {
class="kw">return this.musicEmitterBlockComponentType;
}
class="kw">public void onComponentAdded(
@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
this.pushAdd(var1, var2, var3);
}
class="kw">public void onComponentSet(
@Nonnull Ref<ChunkStore> var1,
@Nullable MusicEmitterBlock var2,
@Nonnull MusicEmitterBlock var3,
@Nonnull Store<ChunkStore> var4,
@Nonnull CommandBuffer<ChunkStore> var5
) {
this.pushAdd(var1, var3, var4);
}
class="kw">public void onComponentRemoved(
@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
MusicEmitterSystems.EmitterLocation var5 = MusicEmitterSystems.resolveLocation(
var3.getComponent(var1, BlockModule.BlockStateInfo.getComponentType()), var3
);
if (var5 != null) {
SetBlockMusicEmitter var6 = new SetBlockMusicEmitter(var5.position(), null, 0L);
MusicEmitterSystems.pushToViewers(var3.getExternalData().getWorld(), var5.chunkIndex(), var6);
}
}
class="kw">private void pushAdd(@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock var2, @Nonnull Store<ChunkStore> var3) {
World var4 = var3.getExternalData().getWorld();
Instant var5 = var4.getEntityStore().getStore().getResource(this.timeResourceType).getNow();
if (var2.getOriginEpochMillis() == 0L) {
var2.setOriginEpochMillis(var5.toEpochMilli());
}
MusicEmitterSystems.EmitterLocation var6 = MusicEmitterSystems.resolveLocation(
var3.getComponent(var1, BlockModule.BlockStateInfo.getComponentType()), var3
);
if (var6 != null) {
SetBlockMusicEmitter var7 = new SetBlockMusicEmitter(
var6.position(), var2.toEmitterConfigPacket(), MusicEmitterSystems.playbackOffsetMillis(var2, var5)
);
MusicEmitterSystems.pushToViewers(var4, var6.chunkIndex(), var7);
}
}
}
}