RoleChangeQueue class
Пакет: com.hypixel.hytale.server.npc.systems
Файл: com/hypixel/hytale/server/npc/systems/RoleChangeSystem.java
implements: Resource<EntityStore>
Поля (2)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final Deque<RoleChangeSystem.RoleChangeRequest> |
requests |
|
RoleChangeSystem.RoleChangeQueue |
var1 |
Методы (2)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Resource<EntityStore> |
clonepublic Resource<EntityStore> clone() |
|
public static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> |
getResourceTypepublic static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceType() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.systems;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.RemoveReason;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.system.tick.TickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.modules.entity.repulsion.Repulsion;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.components.Timers;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.BeaconSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.NPCBlockEventSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.NPCEntityEventSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.PlayerBlockEventSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.PlayerEntityEventSupport;
class="kw">import com.hypixel.hytale.server.npc.decisionmaker.stateevaluator.StateEvaluator;
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.role.support.StateSupport;
class="kw">import com.hypixel.hytale.server.npc.valuestore.ValueStore;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.Deque;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class RoleChangeSystem class="kw">extends TickingSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> roleChangeQueueResourceType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, BeaconSupport> beaconSupportComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PlayerBlockEventSupport> playerBlockEventSupportComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, NPCBlockEventSupport> npcBlockEventSupportComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PlayerEntityEventSupport> playerEntityEventSupportComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, NPCEntityEventSupport> npcEntityEventSupportComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, Timers> timersComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, StateEvaluator> stateEvaluatorComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, ValueStore> valueStoreComponentType;
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, NewSpawnStartTickingSystem.class));
class="kw">public RoleChangeSystem(
@Nonnull ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> var1,
@Nonnull ComponentType<EntityStore, BeaconSupport> var2,
@Nonnull ComponentType<EntityStore, PlayerBlockEventSupport> var3,
@Nonnull ComponentType<EntityStore, NPCBlockEventSupport> var4,
@Nonnull ComponentType<EntityStore, PlayerEntityEventSupport> var5,
@Nonnull ComponentType<EntityStore, NPCEntityEventSupport> var6,
@Nonnull ComponentType<EntityStore, Timers> var7,
@Nonnull ComponentType<EntityStore, StateEvaluator> var8,
@Nonnull ComponentType<EntityStore, ValueStore> var9
) {
this.roleChangeQueueResourceType = var1;
this.beaconSupportComponentType = var2;
this.playerBlockEventSupportComponentType = var3;
this.npcBlockEventSupportComponentType = var4;
this.playerEntityEventSupportComponentType = var5;
this.npcEntityEventSupportComponentType = var6;
this.timersComponentType = var7;
this.stateEvaluatorComponentType = var8;
this.valueStoreComponentType = var9;
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
RoleChangeSystem.RoleChangeQueue var4 = var3.getResource(this.roleChangeQueueResourceType);
Deque var5 = var4.requests;
while (true) {
RoleChangeSystem.RoleChangeRequest var6;
NPCEntity var8;
Ref var9;
while (true) {
if (var5.isEmpty()) {
class="kw">return;
}
var6 = var5.poll();
if (var6.reference.isValid()) {
Holder var7 = var3.removeEntity(var6.reference, RemoveReason.UNLOAD);
var8 = var7.getComponent(NPCEntity.getComponentType());
assert var8 != null;
var8.setRole(null);
var7.tryRemoveComponent(this.beaconSupportComponentType);
var7.tryRemoveComponent(this.playerBlockEventSupportComponentType);
var7.tryRemoveComponent(this.npcBlockEventSupportComponentType);
var7.tryRemoveComponent(this.playerEntityEventSupportComponentType);
var7.tryRemoveComponent(this.npcEntityEventSupportComponentType);
var7.tryRemoveComponent(this.timersComponentType);
var7.tryRemoveComponent(this.stateEvaluatorComponentType);
var7.tryRemoveComponent(this.valueStoreComponentType);
var7.tryRemoveComponent(Repulsion.getComponentType());
var8.setRoleName(NPCPlugin.get().getName(var6.roleIndex));
var8.setRoleIndex(var6.roleIndex);
if (var6.detachFromSpawning) {
var8.setSpawnConfiguration(Integer.MIN_VALUE);
var8.setEnvironment(Integer.MIN_VALUE);
var8.setSpawnRoleIndex(Integer.MIN_VALUE);
}
try {
var9 = var3.addEntity(var7, AddReason.LOAD);
break;
} catch (Exception var11) {
LOGGER.at(Level.SEVERE).log("Failed to change role: %s", var11.getMessage());
}
}
}
if (var9 != null && var9.isValid()) {
if (var6.changeAppearance) {
Role var10 = var8.getRole();
NPCEntity.setAppearance(var9, var10.getAppearanceName(), var3);
}
if (var6.state != null) {
Role var12 = var8.getRole();
if (var12 != null) {
StateSupport.get(var9, var3).setState(var9, var6.state, var6.subState, var3);
}
}
} else {
LOGGER.at(Level.SEVERE).log("Failed to change role: Could not re-add NPC entity to store");
}
}
}
class="kw">public class="kw">static void requestRoleChange(@Nonnull Ref<EntityStore> var0, @Nonnull Role var1, int var2, boolean var3, @Nonnull Store<EntityStore> var4) {
requestRoleChange(var0, var1, var2, var3, null, null, var4);
}
class="kw">public class="kw">static void requestRoleChange(
@Nonnull Ref<EntityStore> var0,
@Nonnull Role var1,
int var2,
boolean var3,
@Nullable String var4,
@Nullable String var5,
@Nonnull ComponentAccessor<EntityStore> var6
) {
requestRoleChange(var0, var1, var2, var3, var4, var5, false, var6);
}
class="kw">public class="kw">static void requestRoleChange(
@Nonnull Ref<EntityStore> var0,
@Nonnull Role var1,
int var2,
boolean var3,
@Nullable String var4,
@Nullable String var5,
boolean var6,
@Nonnull ComponentAccessor<EntityStore> var7
) {
RoleChangeSystem.RoleChangeQueue var8 = var7.getResource(RoleChangeSystem.RoleChangeQueue.getResourceType());
Deque var9 = var8.requests;
var9.add(new RoleChangeSystem.RoleChangeRequest(var0, var2, var3, var4, var5, var6));
var1.setRoleChangeRequested();
}
class="kw">public class="kw">static class RoleChangeQueue class="kw">implements Resource<EntityStore> {
@Nonnull
class="kw">private class="kw">final Deque<RoleChangeSystem.RoleChangeRequest> requests = new ArrayDeque<>();
class="kw">public RoleChangeQueue() {
}
@Nonnull
class="kw">public class="kw">static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceType() {
class="kw">return NPCPlugin.get().getRoleChangeQueueResourceType();
}
@Nonnull
@Override
class="kw">public Resource<EntityStore> clone() {
RoleChangeSystem.RoleChangeQueue var1 = new RoleChangeSystem.RoleChangeQueue();
var1.requests.addAll(this.requests);
class="kw">return var1;
}
}
class="kw">private class="kw">static class RoleChangeRequest {
@Nonnull
class="kw">private class="kw">final Ref<EntityStore> reference;
class="kw">private class="kw">final int roleIndex;
class="kw">private class="kw">final boolean changeAppearance;
@Nullable
class="kw">private class="kw">final String state;
@Nullable
class="kw">private class="kw">final String subState;
class="kw">private class="kw">final boolean detachFromSpawning;
class="kw">private RoleChangeRequest(@Nonnull Ref<EntityStore> var1, int var2, boolean var3, @Nullable String var4, @Nullable String var5, boolean var6) {
this.reference = var1;
this.roleIndex = var2;
this.changeAppearance = var3;
this.state = var4;
this.subState = var5;
this.detachFromSpawning = var6;
}
}
}