HyCodeYourTale
classpublicPriority 3

StatCondition

com.hypixel.hytale.server.core.modules.entitystats.asset.condition.StatCondition

extends EntityStatBoundCondition

4

Methods

4

Public Methods

2

Fields

2

Constructors

Constants

BuilderCodec<StatCondition>CODEC= BuilderCodec.builder(StatCondition.class, StatCondition::new, EntityStatBoundCondition.CODEC) ...

Constructors

protected
StatCondition()
public
StatCondition(boolean inverse, int stat, float amount)

Methods

Public Methods (4)

public
boolean eval0(Ref<EntityStore> ref, Instant currentTime, EntityStatValue statValue)
@Override
public
String getPrefix()
public
boolean satisfies(float compareTo, float f)
public
String toString()
@Nonnull@Override

Fields

Protected Fields (2)

protectedfloat amount
protectedStatCondition.StatComparisonType comparison

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.server.core.modules.entitystats.asset.condition;

import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.EnumCodec;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.function.predicate.BiFloatPredicate;
import com.hypixel.hytale.server.core.modules.entitystats.EntityStatValue;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import java.time.Instant;
import javax.annotation.Nonnull;

public class StatCondition extends EntityStatBoundCondition {
   @Nonnull
   public static final BuilderCodec<StatCondition> CODEC = BuilderCodec.builder(StatCondition.class, StatCondition::new, EntityStatBoundCondition.CODEC)
      .append(new KeyedCodec<>("Amount", Codec.FLOAT), (condition, value) -> condition.amount = value, condition -> condition.amount)
      .documentation("The amount to compare the entity's stat against.")
      .addValidator(Validators.nonNull())
      .add()
      .<StatCondition.StatComparisonType>appendInherited(
         new KeyedCodec<>("Comparison", new EnumCodec<>(StatCondition.StatComparisonType.class)),
         (condition, o) -> condition.comparison = o,
         condition -> condition.comparison,
         (condition, parent) -> condition.comparison = parent.comparison
      )
      .documentation("The comparison type used for evaluating the stat condition.")
      .add()
      .build();
   protected StatCondition.StatComparisonType comparison = StatCondition.StatComparisonType.GTE;
   protected float amount;

   protected StatCondition() {
   }

   public StatCondition(boolean inverse, int stat, float amount) {
      super(inverse, stat);
      this.amount = amount;
   }

   @Override
   public boolean eval0(@Nonnull Ref<EntityStore> ref, @Nonnull Instant currentTime, @Nonnull EntityStatValue statValue) {
      return this.comparison.satisfies(statValue.get(), this.amount);
   }

   @Nonnull
   @Override
   public String toString() {
      return "StatCondition{amount=" + this.amount + "comparison=" + this.comparison.name() + "} " + super.toString();
   }

   public static enum StatComparisonType {
      GTE(">=", (v1, v2) -> v1 >= v2),
      GT(">", (v1, v2) -> v1 > v2),
      LTE("<=", (v1, v2) -> v1 <= v2),
      LT("<", (v1, v2) -> v1 < v2),
      EQUAL("=", (v1, v2) -> v1 == v2);

      private final String prefix;
      private final BiFloatPredicate satisfies;

      private StatComparisonType(String prefix, BiFloatPredicate satisfies) {
         this.prefix = prefix;
         this.satisfies = satisfies;
      }

      public String getPrefix() {
         return this.prefix;
      }

      public boolean satisfies(float compareTo, float f) {
         return this.satisfies.test(compareTo, f);
      }
   }
}