HyCodeYourTale
classpublicPriority 3

StateCombatAction

com.hypixel.hytale.builtin.npccombatactionevaluator.evaluator.combatactions.StateCombatAction

extends CombatActionOption

3

Methods

3

Public Methods

2

Fields

1

Constructors

Constants

BuilderCodec<StateCombatAction>CODEC= BuilderCodec.builder( StateCombatAction.class, StateCombatAction::new, CombatActionOptio...

Constructors

public
StateCombatAction()

Methods

Public Methods (3)

public
String getState()
public
String getSubState()
public
String toString()
@Nonnull@Override

Fields

Protected Fields (2)

protectedString state
protectedString subState

Inheritance

Parent
Current
Interface
Child

Use mouse wheel to zoom, drag to pan. Click nodes to navigate.

Related Classes

Source Code

package com.hypixel.hytale.builtin.npccombatactionevaluator.evaluator.combatactions;

import com.hypixel.hytale.builtin.npccombatactionevaluator.evaluator.CombatActionEvaluator;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.component.ArchetypeChunk;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.logger.HytaleLogger;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.server.npc.role.Role;
import com.hypixel.hytale.server.npc.valuestore.ValueStore;
import java.util.logging.Level;
import javax.annotation.Nonnull;

public class StateCombatAction extends CombatActionOption {
   public static final BuilderCodec<StateCombatAction> CODEC = BuilderCodec.builder(
         StateCombatAction.class, StateCombatAction::new, CombatActionOption.BASE_CODEC
      )
      .documentation(
         "A combat action which switches the NPCs state. Using substate only will switch between combat substates, whereas including the main state can be used to transition out of combat."
      )
      .<String>append(new KeyedCodec<>("State", Codec.STRING), (option, s) -> option.state = s, option -> option.state)
      .documentation("The main state name.")
      .addValidator(Validators.nonNull())
      .addValidator(Validators.nonEmptyString())
      .add()
      .<String>append(new KeyedCodec<>("SubState", Codec.STRING), (option, s) -> option.subState = s, option -> option.subState)
      .documentation("The substate name.")
      .add()
      .build();
   protected String state;
   protected String subState;

   public StateCombatAction() {
   }

   public String getState() {
      return this.state;
   }

   public String getSubState() {
      return this.subState;
   }

   @Override
   public void execute(
      int index,
      @Nonnull ArchetypeChunk<EntityStore> archetypeChunk,
      CommandBuffer<EntityStore> commandBuffer,
      @Nonnull Role role,
      @Nonnull CombatActionEvaluator evaluator,
      ValueStore valueStore
   ) {
      Ref<EntityStore> ref = archetypeChunk.getReferenceTo(index);
      role.getStateSupport().setState(ref, this.state, this.subState, commandBuffer);
      evaluator.completeCurrentAction(true, true);
      evaluator.clearTimeout();
      HytaleLogger.Api ctx = CombatActionEvaluator.LOGGER.at(Level.FINEST);
      if (ctx.isEnabled()) {
         ctx.log("%s: Set state to %s.%s", archetypeChunk.getReferenceTo(index), this.state, this.subState == null ? "Default" : this.subState);
      }
   }

   @Override
   public boolean isBasicAttackAllowed(
      int selfIndex, ArchetypeChunk<EntityStore> archetypeChunk, CommandBuffer<EntityStore> commandBuffer, CombatActionEvaluator evaluator
   ) {
      return false;
   }

   @Nonnull
   @Override
   public String toString() {
      return "StateCombatAction{state='" + this.state + "', subState='" + this.subState + "'}" + super.toString();
   }
}