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);
}
}
}
}
}
}