StateSupport class
Пакет: com.hypixel.hytale.server.npc.role.support
Файл: com/hypixel/hytale/server/npc/role/support/StateSupport.java
implements: Component<EntityStore>
Поля (34)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
NO_STATE |
|
|
break |
|
|
return |
|
boolean |
var1 |
|
IntSet |
var1 |
|
StateSupport |
var2 |
|
String |
var2 |
|
Iterator |
var2 |
|
int |
var2 |
|
Ref |
var3 |
|
int |
var3 |
|
|
var3 |
|
int |
var3 |
|
String |
var3 |
|
int |
var4 |
|
Player |
var4 |
|
int |
var4 |
|
Store |
var4 |
|
|
var4 |
|
int |
var5 |
|
int |
var5 |
|
int |
var5 |
|
Ref |
var5 |
|
NPCEntity |
var5 |
|
EntityTrackerSystems.EntityViewer |
var5 |
|
int |
var6 |
|
EntityGroup |
var6 |
|
InteractableUpdate |
var6 |
|
String |
var7 |
|
boolean |
var7 |
|
NPCEntity |
var8 |
|
boolean |
var8 |
|
boolean |
var9 |
|
|
var9 |
Методы (62)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Querying for a component index that doesn't exist") |
public |
void |
activatevoid activate() |
public |
void |
addContextualInteractionvoid addContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2) |
public |
void |
addInteractionvoid addInteraction(@Nonnull Ref<EntityStore> var1) |
public |
void |
appendStateNamevoid appendStateName(@Nonnull StringBuilder var1) |
public |
boolean |
consumeInteractionboolean consumeInteraction(@Nonnull Ref<EntityStore> var1) |
public |
void |
flockSetStatevoid flockSetState(Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) |
|
|
for for(int var6 = 0; var6 <= var5; var6++) |
abstract |
|
for for(int var1 = this.localStateMachineAutoResetStates.nextSetBit(0) |
public |
StateMappingHelper |
getStateHelperStateMappingHelper getStateHelper() |
public |
int |
getStateIndexint getStateIndex() |
public |
int |
getSubStateIndexint getSubStateIndex() |
public |
boolean |
hasContextualInteractionboolean hasContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2) |
|
|
if if(this.busyStates != null) |
|
|
if if(this.contextualInteractions != null) |
|
|
if if(this.interactablePlayers != null) |
|
|
if if(var4 == null) |
|
|
if if(var3 < 0) |
|
|
if if(var3) |
|
|
if if(!var4 && var5 != var1 && this.stateTransitionController != null) |
|
|
if if(var5 >= 0) |
|
|
if if(var3 == null) |
|
|
if if(var6 >= 0) |
|
|
if if(var2 >= 0) |
|
|
if if(var3 == Integer.MIN_VALUE) |
|
|
if if(this.localStateMachineAutoResetStates != null) |
|
|
if if(var1 == Integer.MAX_VALUE) |
|
|
if if(var5 != null) |
|
|
if if(var5 != null) |
|
|
if if(this.busyStates == null) |
|
|
if if(this.contextualInteractions != null) |
|
|
if if(var2) |
|
|
if if(var3) |
|
|
if if(var3) |
|
|
if if(!var5) |
|
|
if if(!var8) |
|
|
if if(var9) |
public |
boolean |
inStateboolean inState(int var1) |
public |
boolean |
inStateboolean inState(int var1, int var2) |
public |
boolean |
inStateboolean inState(String var1, String var2) |
public |
boolean |
inSubStateboolean inSubState(int var1) |
public |
boolean |
isClearBodyMotionboolean isClearBodyMotion() |
public |
boolean |
isClearHeadMotionboolean isClearHeadMotion() |
public |
boolean |
isComponentInStateboolean isComponentInState(int var1, int var2) |
public |
boolean |
isInBusyStateboolean isInBusyState() |
public |
boolean |
isRunningTransitionActionsboolean isRunningTransitionActions() |
public |
boolean |
pollNeedClearOnceboolean pollNeedClearOnce() |
public |
void |
postRoleBuiltvoid postRoleBuilt(@Nonnull BuilderSupport var1) |
public |
void |
resetLocalStateMachinesvoid resetLocalStateMachines() |
public |
boolean |
runTransitionActionsboolean runTransitionActions(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) |
private |
void |
sendInteractionHintToPlayervoid sendInteractionHintToPlayer(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull String var3, @Nonnull Store<EntityStore> var4) |
public |
void |
setClearBodyMotionvoid setClearBodyMotion(boolean var1) |
public |
void |
setClearHeadMotionvoid setClearHeadMotion(boolean var1) |
public |
void |
setComponentStatevoid setComponentState(int var1, int var2) |
public |
void |
setInteractablevoid setInteractable(@Nonnull Ref<EntityStore> var1, boolean var2) |
public |
void |
setInteractablevoid setInteractable(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, boolean var3, @Nullable String var4, boolean var5, @Nonnull Store<EntityStore> var6) |
public |
void |
setInteractionIterationTargetvoid setInteractionIterationTarget(@Nullable Ref<EntityStore> var1) |
public |
void |
setStatevoid setState(int var1, int var2, boolean var3, boolean var4) |
public |
void |
setStatevoid setState(@Nonnull Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) |
public |
void |
setSubStatevoid setSubState(String var1) |
public |
void |
updatevoid update(@Nonnull ComponentAccessor<EntityStore> var1) |
public |
boolean |
willInteractWithboolean willInteractWith(@Nonnull Ref<EntityStore> var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.role.support;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.protocol.InteractableUpdate;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.group.EntityGroup;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.FlockPlugin;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.StateMappingHelper;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.SupportConfigBuilder;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.statetransition.StateTransitionController;
class="kw">import com.hypixel.hytale.server.npc.util.EntityDetectionUtil;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
class="kw">import java.util.BitSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.Iterator;
class="kw">import java.util.Map;
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 StateSupport class="kw">implements Component<EntityStore> {
class="kw">public class="kw">static class="kw">final int NO_STATE = Integer.MIN_VALUE;
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, NPCEntity> NPC_COMPONENT_TYPE = NPCEntity.getComponentType();
class="kw">protected class="kw">final StateMappingHelper stateHelper;
class="kw">protected class="kw">final int startState;
class="kw">protected class="kw">final int startSubState;
class="kw">protected int state;
class="kw">protected int subState;
class="kw">protected Int2IntMap componentLocalStateMachines;
class="kw">protected BitSet localStateMachineAutoResetStates;
class="kw">protected class="kw">final Int2ObjectMap<IntSet> busyStates;
class="kw">protected class="kw">final HashSet<String> missingStates = new HashSet<>();
class="kw">protected boolean needClearOnce;
class="kw">protected boolean clearHeadMotion;
class="kw">protected boolean clearBodyMotion;
class="kw">protected Set<Ref<EntityStore>> interactablePlayers;
class="kw">protected Set<Ref<EntityStore>> interactedPlayers;
class="kw">protected Map<Ref<EntityStore>, String> contextualInteractions;
class="kw">protected String lastHint;
@Nullable
class="kw">protected Ref<EntityStore> interactionIterationTarget;
@Nullable
class="kw">protected class="kw">final StateTransitionController stateTransitionController;
@Nonnull
class="kw">public class="kw">static ComponentType<EntityStore, StateSupport> getComponentType() {
class="kw">return NPCPlugin.get().getStateSupportComponentType();
}
@Nonnull
class="kw">public class="kw">static StateSupport get(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
StateSupport var2 = var1.getComponent(var0, getComponentType());
assert var2 != null : "Missing StateSupport on entity " + var0;
class="kw">return var2;
}
class="kw">public StateSupport(@Nonnull SupportConfigBuilder<?> var1, @Nonnull BuilderSupport var2) {
this.stateHelper = var1.getStateMappingHelper();
this.busyStates = var1.getBusyStates();
this.stateTransitionController = var1.getStateTransitionController(var2);
this.startState = var1.getStartStateIndex();
this.startSubState = var1.getStartSubStateIndex();
}
@Nullable
class="kw">public StateTransitionController getStateTransitionController() {
class="kw">return this.stateTransitionController;
}
class="kw">public StateMappingHelper getStateHelper() {
class="kw">return this.stateHelper;
}
class="kw">public void postRoleBuilt(@Nonnull BuilderSupport var1) {
if (var1.hasComponentLocalStateMachines()) {
this.componentLocalStateMachines = var1.getComponentLocalStateMachines();
this.localStateMachineAutoResetStates = var1.getLocalStateMachineAutoResetStates();
}
if (var1.isTrackInteractions()) {
this.interactedPlayers = new ReferenceOpenHashSet();
this.interactablePlayers = new ReferenceOpenHashSet();
this.contextualInteractions = new Reference2ObjectOpenHashMap();
}
if (this.busyStates != null) {
String var2 = this.stateHelper.getDefaultSubState();
this.busyStates.forEach((var2x, var3) -> {
int var4 = this.stateHelper.getSubStateIndex(var2x, var2);
if (var3.contains(var4) && var3.size() == 1) {
int var5 = this.stateHelper.getHighestSubStateIndex(var2x);
for (int var6 = 0; var6 <= var5; var6++) {
var3.add(var6);
}
}
});
}
}
class="kw">public void update(@Nonnull ComponentAccessor<EntityStore> var1) {
if (this.contextualInteractions != null) {
this.contextualInteractions.clear();
}
if (this.interactablePlayers != null) {
Iterator var2 = this.interactablePlayers.iterator();
while (var2.hasNext()) {
Ref var3 = var2.next();
if (var3.isValid()) {
Player var4 = var1.getComponent(var3, Player.getComponentType());
if (var4 == null) {
var2.remove();
} else if (!EntityDetectionUtil.isDetectableByNPCs(var3, var1, var4)) {
var2.remove();
}
}
}
}
}
class="kw">public boolean pollNeedClearOnce() {
boolean var1 = this.needClearOnce;
this.needClearOnce = false;
class="kw">return var1;
}
class="kw">public boolean inState(int var1) {
class="kw">return this.state == var1;
}
class="kw">public boolean inSubState(int var1) {
class="kw">return this.subState == var1;
}
class="kw">public boolean inState(int var1, int var2) {
class="kw">return this.inState(var1) && (var2 == Integer.MIN_VALUE || this.inSubState(var2));
}
class="kw">public boolean inState(String var1, String var2) {
int var3 = this.stateHelper.getStateIndex(var1);
if (var3 < 0) {
class="kw">return false;
}
int var4 = this.stateHelper.getSubStateIndex(var3, var2);
class="kw">return var4 >= 0 && this.inState(var3, var4);
}
@Nonnull
class="kw">public String getStateName() {
class="kw">return this.getStateName(this.state, this.subState);
}
@Nonnull
class="kw">public String getStateName(int var1, int var2) {
class="kw">return this.stateHelper.getStateName(var1) + "." + this.stateHelper.getSubStateName(var1, var2);
}
class="kw">public int getStateIndex() {
class="kw">return this.state;
}
class="kw">public int getSubStateIndex() {
class="kw">return this.subState;
}
class="kw">public void appendStateName(@Nonnull StringBuilder var1) {
var1.append(this.stateHelper.getStateName(this.state)).append('.').append(this.stateHelper.getSubStateName(this.state, this.subState));
}
class="kw">public void setState(int var1, int var2, boolean var3, boolean var4) {
int var5 = this.state;
this.state = var1;
this.subState = var2;
if (var3) {
this.needClearOnce = true;
}
if (!var4 && var5 != var1 && this.stateTransitionController != null) {
this.stateTransitionController.initiateStateTransition(var5, var1);
}
}
class="kw">public void setState(@Nonnull Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) {
int var5 = this.stateHelper.getStateIndex(var2);
if (var5 >= 0) {
if (var3 == null) {
var3 = this.stateHelper.getDefaultSubState();
}
int var6 = this.stateHelper.getSubStateIndex(var5, var3);
if (var6 >= 0) {
this.setState(var5, var6, true, false);
class="kw">return;
}
}
if (!this.missingStates.add(var2)) {
NPCEntity var8 = var4.getComponent(var1, NPCEntity.getComponentType());
String var7 = var8 != null ? var8.getRoleName() : String.valueOf(var1);
NPCPlugin.get().getLogger().at(Level.WARNING).log("State '%s.%s' in '%s' does not exist and was set by an external call", var2, var3, var7);
}
}
class="kw">public void setSubState(String var1) {
int var2 = this.stateHelper.getSubStateIndex(this.state, var1);
if (var2 >= 0) {
this.setState(this.state, var2, true, true);
}
}
class="kw">public boolean isClearBodyMotion() {
class="kw">return this.clearBodyMotion;
}
class="kw">public void setClearBodyMotion(boolean var1) {
this.clearBodyMotion = var1;
}
class="kw">public boolean isClearHeadMotion() {
class="kw">return this.clearHeadMotion;
}
class="kw">public void setClearHeadMotion(boolean var1) {
this.clearHeadMotion = var1;
}
class="kw">public boolean isComponentInState(int var1, int var2) {
int var3 = this.componentLocalStateMachines.get(var1);
if (var3 == Integer.MIN_VALUE) {
throw new IllegalArgumentException("Querying for a component index that doesn't exist");
} else {
class="kw">return var3 == var2;
}
}
class="kw">public void setComponentState(int var1, int var2) {
this.componentLocalStateMachines.put(var1, var2);
}
class="kw">public void resetLocalStateMachines() {
if (this.localStateMachineAutoResetStates != null) {
for (int var1 = this.localStateMachineAutoResetStates.nextSetBit(0); var1 >= 0; var1 = this.localStateMachineAutoResetStates.nextSetBit(var1 + 1)) {
this.componentLocalStateMachines.put(var1, 0);
if (var1 == Integer.MAX_VALUE) {
break;
}
}
}
}
class="kw">public void flockSetState(Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) {
Ref var5 = FlockPlugin.getFlockReference(var1, var4);
if (var5 != null) {
EntityGroup var6 = var4.getComponent(var5, EntityGroup.getComponentType());
assert var6 != null;
var6.forEachMemberExcludingSelf((var0, var1x, var2x, var3x) -> {
Store var4 = var0.getStore();
NPCEntity var5 = var4.getComponent(var0, NPC_COMPONENT_TYPE);
if (var5 != null) {
var5.onFlockSetState(var0, var2x, var3x, var4);
}
}, var1, var2, var3);
}
}
class="kw">public boolean isInBusyState() {
if (this.busyStates == null) {
class="kw">return false;
}
IntSet var1 = (IntSet)this.busyStates.get(this.state);
class="kw">return var1 != null && var1.contains(this.subState);
}
class="kw">public void addContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2) {
if (this.contextualInteractions != null) {
this.contextualInteractions.put(var1, var2);
}
}
class="kw">public boolean hasContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2) {
String var3 = this.contextualInteractions.get(var1);
class="kw">return var3 == null ? false : var3.equals(var2);
}
class="kw">public void addInteraction(@Nonnull Ref<EntityStore> var1) {
this.interactedPlayers.add(var1);
}
class="kw">public boolean consumeInteraction(@Nonnull Ref<EntityStore> var1) {
class="kw">return this.interactedPlayers.remove(var1);
}
class="kw">public void setInteractable(@Nonnull Ref<EntityStore> var1, boolean var2) {
if (var2) {
this.interactablePlayers.add(var1);
} else {
this.interactablePlayers.remove(var1);
}
}
class="kw">public void setInteractable(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, boolean var3, @Nullable String var4, boolean var5, @Nonnull Store<EntityStore> var6
) {
boolean var7 = this.interactablePlayers.contains(var2);
if (var3) {
this.interactablePlayers.add(var2);
} else {
this.interactablePlayers.remove(var2);
}
boolean var8 = var6.getArchetype(var1).contains(Interactable.getComponentType());
if (var3) {
if (!var5) {
var4 = "";
}
boolean var9 = var4 != null && !var4.equals(this.lastHint);
if (!var8) {
var6.ensureComponent(var1, Interactable.getComponentType());
var9 = var4 != null && !var4.isEmpty();
}
if (var9) {
this.sendInteractionHintToPlayer(var1, var2, var4, var6);
this.lastHint = var4;
}
} else if (var8 && this.interactablePlayers.isEmpty()) {
var6.removeComponent(var1, Interactable.getComponentType());
}
}
class="kw">private void sendInteractionHintToPlayer(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull String var3, @Nonnull Store<EntityStore> var4
) {
EntityTrackerSystems.EntityViewer var5 = var4.getComponent(var2, EntityTrackerSystems.EntityViewer.getComponentType());
if (var5 != null && var5.visible.contains(var1)) {
InteractableUpdate var6 = new InteractableUpdate(var3);
var5.queueUpdate(var1, var6);
}
}
class="kw">public void setInteractionIterationTarget(@Nullable Ref<EntityStore> var1) {
this.interactionIterationTarget = var1;
}
@Nullable
class="kw">public Ref<EntityStore> getInteractionIterationTarget() {
class="kw">return this.interactionIterationTarget;
}
class="kw">public boolean willInteractWith(@Nonnull Ref<EntityStore> var1) {
class="kw">return this.interactablePlayers != null && this.interactablePlayers.contains(var1) && !this.isInBusyState();
}
class="kw">public boolean runTransitionActions(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
class="kw">return this.stateTransitionController == null ? false : this.stateTransitionController.runTransitionActions(var1, var2, var3, var5);
}
class="kw">public boolean isRunningTransitionActions() {
class="kw">return this.stateTransitionController != null && this.stateTransitionController.isRunningTransitionActions();
}
class="kw">public void activate() {
this.setState(this.startState, this.startSubState, true, true);
}
@Override
class="kw">public Component<EntityStore> clone() {
class="kw">return this;
}
}