TriggerSpawnMarkersInteraction class
Пакет: com.hypixel.hytale.server.spawning.interactions
Файл: com/hypixel/hytale/server/spawning/interactions/TriggerSpawnMarkersInteraction.java
extends: SimpleInstantInteraction
Поля (15)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BuilderCodec<TriggerSpawnMarkersInteraction> |
CODEC |
|
Ref |
var11 |
|
SpawnMarkerEntity |
var12 |
|
Ref |
var14 |
|
SpawnMarkerEntity |
var15 |
|
CommandBuffer |
var4 |
|
TransformComponent |
var4 |
|
Ref |
var5 |
|
Vector3d |
var5 |
|
Vector3d |
var6 |
|
SpawnMarkerEntity |
var6 |
|
SpatialResource |
var7 |
|
boolean |
var7 |
|
ReferenceArrayList |
var8 |
|
ReferenceArrayList |
var9 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
protected |
Ref<EntityStore> |
filterMarkerRef<EntityStore> filterMarker(@Nonnull Ref<EntityStore> var1, @Nonnull Vector3d var2, @Nonnull CommandBuffer<EntityStore> var3) |
abstract |
|
for for(int var13 = 0; var13 < var8.size() |
abstract |
|
for for(int var10 = 0; var10 < var9.size() |
|
|
if if(this.count == 0) |
|
|
if if(var14 != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.interactions;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class TriggerSpawnMarkersInteraction class="kw">extends SimpleInstantInteraction {
class="kw">public class="kw">static class="kw">final BuilderCodec<TriggerSpawnMarkersInteraction> CODEC = BuilderCodec.builder(
TriggerSpawnMarkersInteraction.class, TriggerSpawnMarkersInteraction::new, SimpleInstantInteraction.CODEC
)
.appendInherited(
new KeyedCodec<>("MarkerType", Codec.STRING),
(var0, var1) -> var0.markerType = var1,
var0 -> var0.markerType,
(var0, var1) -> var0.markerType = var1.markerType
)
.addValidator(SpawnMarker.VALIDATOR_CACHE.getValidator())
.documentation("The manual spawn marker type to trigger. If omitted, will trigger all manual spawners.")
.add()
.<Double>appendInherited(
new KeyedCodec<>("Range", Codec.DOUBLE), (var0, var1) -> var0.range = var1, var0 -> var0.range, (var0, var1) -> var0.range = var1.range
)
.addValidator(Validators.greaterThan(0.0))
.documentation("Range within which to trigger spawn markers.")
.add()
.<Integer>appendInherited(
new KeyedCodec<>("Count", Codec.INTEGER), (var0, var1) -> var0.count = var1, var0 -> var0.count, (var0, var1) -> var0.count = var1.count
)
.addValidator(Validators.greaterThanOrEqual(0))
.documentation("Max number of spawn markers to activate. Set to 0 to activate all spawn markers.")
.add()
.afterDecode(var0 -> var0.rangeSquared = var0.range * var0.range)
.build();
class="kw">private String markerType;
class="kw">private double range = 10.0;
class="kw">private double rangeSquared;
class="kw">private int count;
class="kw">public TriggerSpawnMarkersInteraction() {
}
@Override
class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
CommandBuffer var4 = var2.getCommandBuffer();
Ref var5 = var2.getEntity();
Vector3d var6 = var4.getComponent(var5, TransformComponent.getComponentType()).getPosition();
SpatialResource var7 = var4.getResource(SpawningPlugin.get().getSpawnMarkerSpatialResource());
ReferenceArrayList var8 = new ReferenceArrayList();
var7.getSpatialStructure().collect(var6, (int)this.range + 1, var8);
if (this.count == 0) {
for (int var13 = 0; var13 < var8.size(); var13++) {
Ref var14 = this.filterMarker((Ref<EntityStore>)var8.get(var13), var6, var4);
if (var14 != null) {
SpawnMarkerEntity var15 = var4.getComponent(var14, SpawnMarkerEntity.getComponentType());
assert var15 != null;
var4.run(var2x -> var15.trigger(var14, null, var2x));
}
}
} else {
ReferenceArrayList var9 = new ReferenceArrayList();
RandomExtra.reservoirSample(var8, (var1x, var2x, var3x) -> var2x.filterMarker(var1x, var6, var3x), this.count, var9, this, var4);
for (int var10 = 0; var10 < var9.size(); var10++) {
Ref var11 = (Ref<EntityStore>)var9.get(var10);
SpawnMarkerEntity var12 = var4.getComponent(var11, SpawnMarkerEntity.getComponentType());
assert var12 != null;
var4.run(var2x -> var12.trigger(var11, null, var2x));
}
}
}
class="kw">protected Ref<EntityStore> filterMarker(@Nonnull Ref<EntityStore> var1, @Nonnull Vector3d var2, @Nonnull CommandBuffer<EntityStore> var3) {
if (!var1.isValid()) {
class="kw">return null;
}
TransformComponent var4 = var3.getComponent(var1, TransformComponent.getComponentType());
assert var4 != null;
Vector3d var5 = var4.getPosition();
SpawnMarkerEntity var6 = var3.getComponent(var1, SpawnMarkerEntity.getComponentType());
boolean var7 = var6 != null
&& var6.isManualTrigger()
&& var2.distanceSquared(var5) <= this.rangeSquared
&& (this.markerType == null || this.markerType.equals(var6.getSpawnMarkerId()));
class="kw">return var7 ? var1 : null;
}
}