ActionSpawnParticles class

Пакет: com.hypixel.hytale.server.npc.corecomponents.audiovisual

Файл: com/hypixel/hytale/server/npc/corecomponents/audiovisual/ActionSpawnParticles.java

extends: DeferrableAction

Поля (11)

МодификаторыТипИмя
final String particleSystem
PlayerRef var10
com.hypixel.hytale.server.core.asset.type.model.config.ModelParticle var3
TransformComponent var3
SpatialResource var4
List var5
NetworkId var6
IPositionProvider var7
SpawnModelParticles var7
SpatialResource var8
List var9

Методы (9)

МодификаторыВозвратСигнатура
private void emitModelParticlevoid emitModelParticle(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2)
private void emitWorldParticlevoid emitWorldParticle(double var1, double var3, double var5, @Nonnull Store<EntityStore> var7)
for for(Ref var9 : var5)
if if(this.positionSource == PositionSource.Sensor)
if if(this.positionSource == PositionSource.Sensor)
if if(var3 != null)
if if(var6 != null)
if if(var10 != null)
abstract super super(var1, var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.audiovisual;

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.protocol.ModelParticle;
class="kw">import com.hypixel.hytale.protocol.packets.entities.SpawnModelParticles;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.DeferrableAction;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.PositionSource;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.audiovisual.builders.BuilderActionSpawnParticles;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.IPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;

class="kw">public class ActionSpawnParticles class="kw">extends DeferrableAction {
   class="kw">protected class="kw">final String particleSystem;
   class="kw">protected class="kw">final double range;
   class="kw">protected class="kw">final float scale;
   class="kw">protected class="kw">final Vector3d offset;
   class="kw">protected class="kw">final PositionSource positionSource;
   class="kw">protected class="kw">final ModelParticle[] modelParticlesProtocol;

   class="kw">public ActionSpawnParticles(@Nonnull BuilderActionSpawnParticles var1, @Nonnull BuilderSupport var2) {
      super(var1, var2);
      this.particleSystem = var1.getParticleSystem(var2);
      this.offset = var1.getOffset(var2);
      this.range = var1.getRange(var2);
      this.scale = var1.getScale(var2);
      this.positionSource = var1.getPositionSource();
      com.hypixel.hytale.server.core.asset.type.model.config.ModelParticle var3 = new com.hypixel.hytale.server.core.asset.type.model.config.ModelParticle();
      var3.setSystemId(this.particleSystem);
      var3.setPositionOffset(new Vector3f((float)this.offset.x, (float)this.offset.y, (float)this.offset.z));
      var3.setTargetNodeName(var1.getTargetNodeName(var2));
      var3.setDetachedFromModel(var1.isDetachedFromModel(var2));
      var3.setScale(this.scale);
      this.modelParticlesProtocol = new ModelParticle[]{var3.toPacket()};
   }

   @Override
   class="kw">public boolean execute(
      @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
   ) {
      super.execute(var1, var2, var3, var4, var6);
      if (this.positionSource == PositionSource.Sensor) {
         IPositionProvider var7 = var3 != null ? var3.getPositionProvider() : null;
         if (var7 == null || !var7.providePosition(this.scratch)) {
            class="kw">return true;
         }

         this.scratch.add(this.offset);
         this.scheduleOrFire(var2, var1, this.scratch.x, this.scratch.y, this.scratch.z, var6);
      } else {
         this.scheduleOrFire(var2, var1, 0.0, 0.0, 0.0, var6);
      }

      class="kw">return true;
   }

   @Override
   class="kw">protected void fire(@Nonnull Ref<EntityStore> var1, double var2, double var4, double var6, @Nullable Rotation3f var8, @Nonnull Store<EntityStore> var9) {
      if (this.positionSource == PositionSource.Sensor) {
         this.emitWorldParticle(var2, var4, var6, var9);
      } else {
         this.emitModelParticle(var1, var9);
      }
   }

   class="kw">private void emitWorldParticle(double var1, double var3, double var5, @Nonnull Store<EntityStore> var7) {
      this.scratch.set(var1, var3, var5);
      SpatialResource var8 = var7.getResource(EntityModule.get().getPlayerSpatialResourceType());
      List var9 = SpatialResource.getThreadLocalReferenceList();
      var8.getSpatialStructure().collect(this.scratch, this.range, var9);
      ParticleUtil.spawnParticleEffect(
         this.particleSystem, this.scratch.x, this.scratch.y, this.scratch.z, 0.0F, 0.0F, 0.0F, this.scale, null, null, var9, var7
      );
   }

   class="kw">private void emitModelParticle(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      TransformComponent var3 = var2.getComponent(var1, TransformComponent.getComponentType());
      if (var3 != null) {
         this.scratch.set(this.offset).rotateY(var3.getRotation().yaw()).add(var3.getPosition());
         SpatialResource var4 = var2.getResource(EntityModule.get().getPlayerSpatialResourceType());
         List var5 = SpatialResource.getThreadLocalReferenceList();
         var4.getSpatialStructure().collect(this.scratch, this.range, var5);
         NetworkId var6 = var2.getComponent(var1, NetworkId.getComponentType());
         if (var6 != null) {
            SpawnModelParticles var7 = new SpawnModelParticles(var6.getId(), this.modelParticlesProtocol);

            for (Ref var9 : var5) {
               PlayerRef var10 = var2.getComponent(var9, PlayerRef.getComponentType());
               if (var10 != null) {
                  var10.getPacketHandler().write(var7);
               }
            }
         }
      }
   }
}