MusicPlayerSystems class

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

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

Поля (37)

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

Методы (16)

МодификаторыВозвратСигнатура
public Setuppublic Setup(@Nonnull ComponentType<ChunkStore, MusicPlayerBlock> var1, @Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var2)
public Tickpublic Tick(@Nonnull ComponentType<ChunkStore, MusicPlayerBlock> var1, @Nonnull ComponentType<ChunkStore, MusicEmitterBlock> var2)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var0 != 0)
if if(var4 != null && var5 != null)
if if(var10 != null)
if if(var5 != null && var6 != null)
if if(var10 != null && !var11)
if if(var6 != null && var7 != null && var8 != null)
if if(var10 == null)
if if(var15 != null)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
static void playSoundvoid playSound(int var0, @Nonnull BlockModule.BlockStateInfo var1, @Nonnull Store<ChunkStore> var2)
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();
               }
            }
         }
      }
   }
}