Tick class

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

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

extends: EntityTickingSystem<ChunkStore>

Поля (16)

МодификаторыТипИмя
private final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType
private final ComponentType<ChunkStore, MusicPlayerBlock> musicPlayerBlockComponentType
private final Query<ChunkStore> query
private final ResourceType<EntityStore, TimeResource> timeResourceType
String var10
Instant var11
Ref var12
Instant var13
ItemMusic var14
String var15
Ref var16
Instant var17
MusicPlayerBlock var6
ItemContainerBlock var7
BlockModule.BlockStateInfo var8
ItemStack var9

Методы (5)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var6 != null && var7 != null && var8 != null)
if if(var10 == null)
if if(var15 != null)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)

Исходный код

Показать/скрыть
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.builtin.audio.components.MusicPlayerBlock;
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.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.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.SoundCategory;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.ItemMusic;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.filter.FilterActionType;
class="kw">import com.hypixel.hytale.server.core.inventory.container.filter.ItemSlotFilter;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.block.components.ItemContainerBlock;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.SoundUtil;
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 java.time.Instant;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class MusicPlayerSystems {
   class="kw">private class="kw">static class="kw">final short SLOT = 0;

   class="kw">private MusicPlayerSystems() {
   }

   @Nullable
   class="kw">private class="kw">static ItemMusic musicFor(@Nullable ItemStack var0) {
      class="kw">return var0 == null ? null : var0.getItem().getMusic();
   }

   class="kw">private class="kw">static void playSound(int var0, @Nonnull BlockModule.BlockStateInfo var1, @Nonnull Store<ChunkStore> var2) {
      if (var0 != 0) {
         Ref var3 = var1.getSectionRef();
         if (var3.isValid()) {
            ChunkSection var4 = var2.getComponent(var3, ChunkSection.getComponentType());
            BlockSection var5 = var2.getComponent(var3, BlockSection.getComponentType());
            if (var4 != null && var5 != null) {
               int var6 = var1.getIndex();
               int var7 = ChunkUtil.xFromIndex(var6);
               int var8 = ChunkUtil.yFromIndex(var6);
               int var9 = ChunkUtil.zFromIndex(var6);
               BlockType var10 = BlockType.getAssetMap().getAsset(var5.get(var7, var8, var9));
               if (var10 != null) {
                  Vector3d var11 = new Vector3d();
                  var10.getBlockCenter(var5.getRotationIndex(var7, var8, var9), var11);
                  var11.add(
                     ChunkUtil.worldCoordFromLocalCoord(var4.getX(), var7),
                     ChunkUtil.worldCoordFromLocalCoord(var4.getY(), var8),
                     ChunkUtil.worldCoordFromLocalCoord(var4.getZ(), var9)
                  );
                  Store var12 = var2.getExternalData().getWorld().getEntityStore().getStore();
                  SoundUtil.playSoundEvent3d(var0, SoundCategory.SFX, var11, var12);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class Setup class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, MusicPlayerBlock> musicPlayerBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public Setup(@Nonnull ComponentType<ChunkStore, MusicPlayerBlock> var1, @Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var2) {
         this.musicPlayerBlockComponentType = var1;
         this.musicEmitterBlockComponentType = var2;
         this.query = Query.and(var1, ItemContainerBlock.getComponentType());
      }

      @Nonnull
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         MusicPlayerBlock var5 = var3.getComponent(var1, this.musicPlayerBlockComponentType);
         ItemContainerBlock var6 = var3.getComponent(var1, ItemContainerBlock.getComponentType());
         if (var5 != null && var6 != null) {
            SimpleItemContainer var7 = var6.getItemContainer();
            var7.setSlotFilter(FilterActionType.ADD, (short)0, (ItemSlotFilter)var0 -> var0 != null && var0.getMusic() != null);
            ItemStack var8 = var7.getItemStack((short)0);
            ItemMusic var9 = MusicPlayerSystems.musicFor(var8);
            String var10 = var9 == null ? null : var9.getMusicContainerId();
            boolean var11 = var3.getComponent(var1, this.musicEmitterBlockComponentType) != null;
            if (var10 != null && !var11) {
               var4.addComponent(var1, this.musicEmitterBlockComponentType, var5.buildEmitter(var9, var10));
            } else if (var10 == null && var11) {
               var4.tryRemoveComponent(var1, this.musicEmitterBlockComponentType);
            }

            var5.setObservedItemId(var8 == null ? null : var8.getItemId());
            var5.setPendingStartDeadline(null);
            var5.setPendingRemoveSoundDeadline(null);
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
      }
   }

   class="kw">public class="kw">static class Tick class="kw">extends EntityTickingSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, MusicPlayerBlock> musicPlayerBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, MusicEmitterBlock> musicEmitterBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final ResourceType<EntityStore, TimeResource> timeResourceType;
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public Tick(@Nonnull ComponentType<ChunkStore, MusicPlayerBlock> var1, @Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var2) {
         this.musicPlayerBlockComponentType = var1;
         this.musicEmitterBlockComponentType = var2;
         this.timeResourceType = TimeResource.getResourceType();
         this.query = Query.and(var1, ItemContainerBlock.getComponentType(), BlockModule.BlockStateInfo.getComponentType());
      }

      @Nonnull
      @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) {
         MusicPlayerBlock var6 = var3.getComponent(var2, this.musicPlayerBlockComponentType);
         ItemContainerBlock var7 = var3.getComponent(var2, ItemContainerBlock.getComponentType());
         BlockModule.BlockStateInfo var8 = var3.getComponent(var2, BlockModule.BlockStateInfo.getComponentType());
         if (var6 != null && var7 != null && var8 != null) {
            ItemStack var9 = var7.getItemContainer().getItemStack((short)0);
            String var10 = var9 == null ? null : var9.getItemId();
            Instant var11 = var4.getExternalData().getWorld().getEntityStore().getStore().getResource(this.timeResourceType).getNow();
            if (!Objects.equals(var10, var6.getObservedItemId())) {
               Ref var12 = var3.getReferenceTo(var2);
               var5.tryRemoveComponent(var12, this.musicEmitterBlockComponentType);
               if (var10 == null) {
                  var6.setPendingStartDeadline(null);
                  if (var6.getStopDelaySeconds() > 0.0F) {
                     var6.setPendingRemoveSoundDeadline(var11.plusMillis((long)(var6.getStopDelaySeconds() * 1000.0F)));
                  } else {
                     MusicPlayerSystems.playSound(var6.getRemoveSoundIndex(), var8, var4);
                  }
               } else {
                  var6.setPendingRemoveSoundDeadline(null);
                  MusicPlayerSystems.playSound(var6.getInsertSoundIndex(), var8, var4);
                  var6.setPendingStartDeadline(var11.plusMillis((long)(var6.getStartDelaySeconds() * 1000.0F)));
               }

               var6.setObservedItemId(var10);
               var8.markNeedsSaving();
            }

            Instant var17 = var6.getPendingRemoveSoundDeadline();
            if (var17 != null && !var11.isBefore(var17)) {
               var6.setPendingRemoveSoundDeadline(null);
               MusicPlayerSystems.playSound(var6.getRemoveSoundIndex(), var8, var4);
            }

            Instant var13 = var6.getPendingStartDeadline();
            if (var13 != null && !var11.isBefore(var13)) {
               var6.setPendingStartDeadline(null);
               ItemMusic var14 = MusicPlayerSystems.musicFor(var9);
               String var15 = var14 == null ? null : var14.getMusicContainerId();
               if (var15 != null) {
                  Ref var16 = var3.getReferenceTo(var2);
                  var5.addComponent(var16, this.musicEmitterBlockComponentType, var6.buildEmitter(var14, var15));
                  var8.markNeedsSaving();
               }
            }
         }
      }
   }
}