MusicEmitterSystems class

Пакет: com.hypixel.hytale.builtin.audio.systems

Файл: com/hypixel/hytale/builtin/audio/systems/MusicEmitterSystems.java

Поля (29)

МодификаторыТипИмя
private final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType
private final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType
private final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType
private final ResourceType<EntityStore, TimeResource> timeResourceType
private final ResourceType<EntityStore, TimeResource> timeResourceType
private final ResourceType<EntityStore, TimeResource> timeResourceType
Ref var2
long var2
ChunkSection var3
int var4
MusicEmitterBlock var4
MusicEmitterSystems.EmitterLocation var4
World var4
int var5
World var5
SetBlockMusicEmitter var5
MusicEmitterSystems.EmitterLocation var5
Instant var5
int var6
Instant var6
SetBlockMusicEmitter var6
MusicEmitterSystems.EmitterLocation var6
int var7
MusicEmitterSystems.EmitterLocation var7
MusicEmitterBlock var7
SetBlockMusicEmitter var7
SetBlockMusicEmitter var8
MusicEmitterSystems.EmitterLocation var8
Instant var9

Методы (29)

МодификаторыВозвратСигнатура
record EmitterLocationrecord EmitterLocation(@Nonnull BlockPosition position, long chunkIndex)
public Lifecyclepublic Lifecycle(@Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var1)
public PacketSystempublic PacketSystem(@Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var1)
public Replicationpublic Replication(@Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var1)
public ComponentType<ChunkStore, MusicEmitterBlock> componentTypepublic ComponentType<ChunkStore, MusicEmitterBlock> componentType()
public void fetchpublic void fetch(int var1, @Nonnull ArchetypeChunk<ChunkStore> var2, @Nonnull Store<ChunkStore> var3, CommandBuffer<ChunkStore> var4, PlayerRef var5, @Nonnull List<ToClientPacket> var6)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var0 == null)
if if(var3 == null)
if if(var2 == AddReason.SPAWN)
if if(var4 != null)
if if(var7 != null)
if if(var2 == RemoveReason.REMOVE)
if if(var4 != null)
if if(var7 != null)
if if(var8 != null)
if if(var5 != null)
if if(var6 != null)
public boolean isParallelpublic boolean isParallel()
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onComponentSetpublic void onComponentSet(@Nonnull Ref<ChunkStore> var1, @Nullable MusicEmitterBlock var2, @Nonnull MusicEmitterBlock var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)
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)
static long playbackOffsetMillislong playbackOffsetMillis(@Nonnull MusicEmitterBlock var0, @Nonnull Instant var1)
private void pushAddprivate void pushAdd(@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock var2, @Nonnull Store<ChunkStore> var3)
static void pushToViewersvoid pushToViewers(@Nonnull World var0, long var1, @Nonnull SetBlockMusicEmitter 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);
         }
      }
   }
}