FlockPlugin class
Пакет: com.hypixel.hytale.server.flock
Файл: com/hypixel/hytale/server/flock/FlockPlugin.java
extends: JavaPlugin
Поля (36)
| Модификаторы | Тип | Имя |
|---|---|---|
static |
FlockPlugin |
instance |
|
|
instance |
|
private final FlockPlugin |
plugin |
|
ComponentRegistryProxy |
var1 |
|
Role |
var10 |
|
FlockMembership |
var11 |
|
Ref |
var12 |
|
BoundingBox |
var13 |
|
TransformComponent |
var14 |
|
Box |
var15 |
|
Rotation3f |
var16 |
|
double |
var17 |
|
int |
var19 |
|
FlockMembership |
var2 |
|
FlockMembership |
var2 |
|
FlockMembership |
var2 |
|
double |
var20 |
|
double |
var22 |
|
boolean |
var24 |
|
int[] |
var25 |
|
int |
var26 |
|
int |
var27 |
|
|
var27 |
|
int |
var28 |
|
|
var28 |
|
|
var28 |
|
Ref |
var3 |
|
Holder |
var3 |
|
Pair |
var30 |
|
Ref |
var31 |
|
BoundingBox |
var32 |
|
TransformComponent |
var33 |
|
HeadRotation |
var34 |
|
double |
var35 |
|
Ref |
var4 |
|
int |
var8 |
Методы (20)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
PrefabPasteEventSystem PrefabPasteEventSystem(@Nonnull FlockPlugin var1) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Not implemented") |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unable to handle non-spawned flock!") |
|
|
for for(int var29 = 1; var29 < var5; var29++) |
static |
FlockPlugin |
getFlockPlugin get() |
public |
ComponentType<EntityStore, Flock> |
getFlockComponentTypeComponentType<EntityStore, Flock> getFlockComponentType() |
public |
ComponentType<EntityStore, FlockMembership> |
getFlockMembershipComponentTypeComponentType<EntityStore, FlockMembership> getFlockMembershipComponentType() |
public |
ComponentType<EntityStore, PersistentFlockData> |
getPersistentFlockDataComponentTypeComponentType<EntityStore, PersistentFlockData> getPersistentFlockDataComponentType() |
|
public void |
handlepublic void handle(@Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull PrefabPasteEvent var3) |
|
|
if if(var11 == null) |
|
|
if if(var26 > 0) |
|
|
if if(var24) |
|
|
if if(var30 != null) |
|
|
if if(var2 == null) |
|
|
if if(var4 == null) |
static |
boolean |
isFlockMemberboolean isFlockMember(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) |
abstract |
|
super super(var1) |
abstract |
|
super super(PrefabPasteEvent.class) |
abstract |
return |
trySpawnFlockreturn trySpawnFlock(var0, var1, var3, var4, var5, var8, var6, null, var7, var2) |
abstract |
return |
trySpawnFlockreturn trySpawnFlock(var0, var1, var3, var4, var5, var6, null, null, var7, var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.flock;
class="kw">import com.hypixel.fastutil.ints.Int2ObjectConcurrentHashMap;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentRegistryProxy;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.system.WorldEventSystem;
class="kw">import com.hypixel.hytale.function.consumer.TriConsumer;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.group.EntityGroup;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.prefab.event.PrefabPasteEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.config.FlockAsset;
class="kw">import com.hypixel.hytale.server.flock.config.RangeSizeFlockAsset;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockBeacon;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockJoin;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockLeave;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockSetTarget;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockState;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderBodyMotionFlock;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderEntityFilterFlock;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorFlockCombatDamage;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorFlockLeader;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorInflictedDamage;
class="kw">import com.hypixel.hytale.server.flock.decisionmaker.conditions.FlockSizeCondition;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.decisionmaker.core.conditions.base.Condition;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.systems.PositionCacheSystems;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3dc;
class="kw">public class FlockPlugin class="kw">extends JavaPlugin {
class="kw">private class="kw">static FlockPlugin instance;
class="kw">private class="kw">final Int2ObjectConcurrentHashMap<Map<UUID, UUID>> prefabFlockRemappings = new Int2ObjectConcurrentHashMap<>();
class="kw">private ComponentType<EntityStore, Flock> flockComponentType;
class="kw">private ComponentType<EntityStore, FlockMembership> flockMembershipComponentType;
class="kw">private ComponentType<EntityStore, PersistentFlockData> persistentFlockDataComponentType;
class="kw">public class="kw">static FlockPlugin get() {
class="kw">return instance;
}
class="kw">public FlockPlugin(@Nonnull JavaPluginInit var1) {
super(var1);
}
@Override
class="kw">public void setup() {
instance = this;
ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
AssetRegistry.register(
((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(
FlockAsset.class, new IndexedLookupTableAssetMap<>(FlockAsset[]::new)
)
.setPath("NPC/Flocks"))
.setCodec(FlockAsset.CODEC))
.setKeyFunction(FlockAsset::getId))
.setReplaceOnRemove(RangeSizeFlockAsset::getUnknownFor))
.build()
);
this.getEntityStoreRegistry().registerSystem(new FlockPlugin.PrefabPasteEventSystem(this));
NPCPlugin.get()
.registerCoreComponentType("Flock", BuilderBodyMotionFlock::new)
.registerCoreComponentType("JoinFlock", BuilderActionFlockJoin::new)
.registerCoreComponentType("LeaveFlock", BuilderActionFlockLeave::new)
.registerCoreComponentType("FlockState", BuilderActionFlockState::new)
.registerCoreComponentType("FlockTarget", BuilderActionFlockSetTarget::new)
.registerCoreComponentType("FlockBeacon", BuilderActionFlockBeacon::new)
.registerCoreComponentType("Flock", BuilderEntityFilterFlock::new)
.registerCoreComponentType("FlockCombatDamage", BuilderSensorFlockCombatDamage::new)
.registerCoreComponentType("InflictedDamage", BuilderSensorInflictedDamage::new)
.registerCoreComponentType("FlockLeader", BuilderSensorFlockLeader::new);
Condition.CODEC.register("FlockSize", FlockSizeCondition.class, FlockSizeCondition.CODEC);
this.flockComponentType = var1.registerComponent(Flock.class, () -> {
throw new UnsupportedOperationException("Not implemented");
});
var1.registerSystem(new FlockSystems.EntityRemoved(this.flockComponentType));
var1.registerSystem(new FlockSystems.Ticking(this.flockComponentType));
var1.registerSystem(new FlockSystems.FlockDebugSystem(this.flockComponentType));
var1.registerSystem(new FlockSystems.PlayerChangeGameModeEventSystem());
this.flockMembershipComponentType = var1.registerComponent(FlockMembership.class, "FlockMembership", FlockMembership.CODEC);
this.persistentFlockDataComponentType = var1.registerComponent(PersistentFlockData.class, "FlockData", PersistentFlockData.CODEC);
var1.registerSystem(new FlockMembershipSystems.EntityRef(this.flockMembershipComponentType));
var1.registerSystem(new FlockMembershipSystems.RefChange(this.flockMembershipComponentType));
var1.registerSystem(new PositionCacheSystems.OnFlockJoinSystem(NPCEntity.getComponentType(), this.flockMembershipComponentType));
var1.registerSystem(new FlockDeathSystems.EntityDeath());
var1.registerSystem(new FlockDeathSystems.PlayerDeath());
var1.registerSystem(new FlockMembershipSystems.FilterPlayerFlockDamageSystem());
var1.registerSystem(new FlockMembershipSystems.OnDamageReceived());
var1.registerSystem(new FlockMembershipSystems.OnDamageDealt());
var1.registerSystem(new FlockMembershipSystems.NPCAddedFromWorldGen());
}
@Override
class="kw">public void start() {
}
@Override
class="kw">public void shutdown() {
}
class="kw">public ComponentType<EntityStore, Flock> getFlockComponentType() {
class="kw">return this.flockComponentType;
}
class="kw">public ComponentType<EntityStore, FlockMembership> getFlockMembershipComponentType() {
class="kw">return this.flockMembershipComponentType;
}
class="kw">public ComponentType<EntityStore, PersistentFlockData> getPersistentFlockDataComponentType() {
class="kw">return this.persistentFlockDataComponentType;
}
@Nonnull
class="kw">public UUID getPrefabRemappedFlockReference(int var1, UUID var2) {
class="kw">return this.prefabFlockRemappings.get(var1).computeIfAbsent(var2, var0 -> UUID.randomUUID());
}
@Nullable
class="kw">public class="kw">static Ref<EntityStore> trySpawnFlock(
@Nonnull Ref<EntityStore> var0,
@Nonnull NPCEntity var1,
@Nonnull Store<EntityStore> var2,
int var3,
@Nonnull Vector3dc var4,
Rotation3fc var5,
@Nullable FlockAsset var6,
TriConsumer<NPCEntity, Ref<EntityStore>, Store<EntityStore>> var7
) {
int var8 = var6 != null ? var6.pickFlockSize() : 1;
class="kw">return trySpawnFlock(var0, var1, var3, var4, var5, var8, var6, null, var7, var2);
}
@Nullable
class="kw">public class="kw">static Ref<EntityStore> trySpawnFlock(
@Nonnull Ref<EntityStore> var0,
@Nonnull NPCEntity var1,
@Nonnull Store<EntityStore> var2,
int var3,
@Nonnull Vector3dc var4,
Rotation3fc var5,
int var6,
TriConsumer<NPCEntity, Ref<EntityStore>, Store<EntityStore>> var7
) {
class="kw">return trySpawnFlock(var0, var1, var3, var4, var5, var6, null, null, var7, var2);
}
@Nullable
class="kw">public class="kw">static Ref<EntityStore> trySpawnFlock(
@Nonnull Ref<EntityStore> var0,
@Nonnull NPCEntity var1,
int var2,
@Nonnull Vector3dc var3,
Rotation3fc var4,
int var5,
FlockAsset var6,
TriConsumer<NPCEntity, Holder<EntityStore>, Store<EntityStore>> var7,
@Nullable TriConsumer<NPCEntity, Ref<EntityStore>, Store<EntityStore>> var8,
@Nonnull Store<EntityStore> var9
) {
if (var5 > 1 && var0.isValid()) {
Role var10 = var1.getRole();
assert var10 != null;
FlockMembership var11 = var9.getComponent(var0, FlockMembership.getComponentType());
Ref var12 = var11 != null ? var11.getFlockRef() : createFlock(var9, var6, var10.getFlockAllowedRoles());
if (var11 == null) {
FlockMembershipSystems.join(var0, var12, var9);
}
BoundingBox var13 = var9.getComponent(var0, BoundingBox.getComponentType());
assert var13 != null;
TransformComponent var14 = var9.getComponent(var0, TransformComponent.getComponentType());
assert var14 != null;
Box var15 = var13.getBoundingBox();
Rotation3f var16 = var14.getRotation();
double var17 = var3.x();
int var19 = MathUtil.floor(var3.y() + var15.min.y + 1.0E-6);
double var20 = var3.z();
double var22 = var16.yaw();
boolean var24 = var10.isFlockSpawnTypesRandom();
int[] var25 = var10.getFlockSpawnTypes();
int var26 = var25 == null ? 0 : var25.length;
int var27 = 0;
int var28 = var2;
for (int var29 = 1; var29 < var5; var29++) {
if (var26 > 0) {
if (var24) {
var28 = var25[RandomExtra.randomRange(var26)];
} else {
var28 = var25[var27];
var27 = (var27 + 1) % var26;
}
}
Pair var30 = NPCPlugin.get().spawnEntity(var9, var28, var3, var4, null, var7, var8);
if (var30 != null) {
Ref var31 = (Ref<EntityStore>)var30.first();
if (var31 != null && var31.isValid()) {
BoundingBox var32 = var9.getComponent(var31, BoundingBox.getComponentType());
assert var32 != null;
TransformComponent var33 = var9.getComponent(var31, TransformComponent.getComponentType());
assert var33 != null;
HeadRotation var34 = var9.getComponent(var31, HeadRotation.getComponentType());
assert var34 != null;
double var35 = var19 - var32.getBoundingBox().min.y;
var33.getRotation().setYaw((float)(var22 + RandomExtra.randomRange((float) (-Math.PI / 4), (float) (Math.PI / 4))));
var34.getRotation().setPitch(0.0F);
var33.getPosition().set(var17 + RandomExtra.randomRange(-0.5, 0.5), var35, var20 + RandomExtra.randomRange(-0.5, 0.5));
FlockMembershipSystems.join(var31, var12, var9);
}
}
}
class="kw">return var12;
} else {
class="kw">return null;
}
}
@Nullable
@Deprecated
class="kw">public class="kw">static Flock getFlock(@Nonnull ComponentAccessor<EntityStore> var0, @Nonnull Ref<EntityStore> var1) {
FlockMembership var2 = var0.getComponent(var1, FlockMembership.getComponentType());
if (var2 == null) {
class="kw">return null;
}
Ref var3 = var2.getFlockRef();
class="kw">return var3 != null && var3.isValid() ? var0.getComponent(var3, Flock.getComponentType()) : null;
}
@Nonnull
class="kw">public class="kw">static Ref<EntityStore> createFlock(@Nonnull Store<EntityStore> var0, @Nonnull Role var1) {
class="kw">return createFlock(var0, null, var1.getFlockAllowedRoles());
}
@Nonnull
class="kw">public class="kw">static Ref<EntityStore> createFlock(@Nonnull Store<EntityStore> var0, @Nullable FlockAsset var1, @Nonnull String[] var2) {
Holder var3 = EntityStore.REGISTRY.newHolder();
var3.addComponent(UUIDComponent.getComponentType(), UUIDComponent.randomUUID());
var3.addComponent(EntityGroup.getComponentType(), new EntityGroup());
var3.addComponent(Flock.getComponentType(), new Flock(var1, var2));
Ref var4 = var0.addEntity(var3, AddReason.SPAWN);
if (var4 == null) {
throw new UnsupportedOperationException("Unable to handle non-spawned flock!");
} else {
class="kw">return var4;
}
}
@Nullable
class="kw">public class="kw">static Ref<EntityStore> getFlockReference(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
FlockMembership var2 = var1.getComponent(var0, FlockMembership.getComponentType());
class="kw">return var2 == null ? null : var2.getFlockRef();
}
class="kw">public class="kw">static boolean isFlockMember(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) {
FlockMembership var2 = var1.getComponent(var0, FlockMembership.getComponentType());
class="kw">return var2 != null;
}
class="kw">private class="kw">static class="kw">final class PrefabPasteEventSystem class="kw">extends WorldEventSystem<EntityStore, PrefabPasteEvent> {
class="kw">private class="kw">final FlockPlugin plugin;
PrefabPasteEventSystem(@Nonnull FlockPlugin var1) {
super(PrefabPasteEvent.class);
this.plugin = var1;
}
class="kw">public void handle(@Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull PrefabPasteEvent var3) {
if (var3.isPasteStart()) {
this.plugin.prefabFlockRemappings.put(var3.getPrefabId(), new HashMap<>());
} else {
this.plugin.prefabFlockRemappings.remove(var3.getPrefabId());
}
}
}
}