Replication class

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

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

extends: RefChangeSystem<ChunkStore, MusicEmitterBlock>

Поля (8)

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

Методы (8)

МодификаторыВозвратСигнатура
public ComponentType<ChunkStore, MusicEmitterBlock> componentTypepublic ComponentType<ChunkStore, MusicEmitterBlock> componentType()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var5 != null)
if if(var6 != null)
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)
private void pushAddprivate void pushAdd(@Nonnull Ref<ChunkStore> var1, @Nonnull MusicEmitterBlock 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);
         }
      }
   }
}