CombatInteractionValidator class
Пакет: com.hypixel.hytale.server.npc.asset.builder.validators.asset
Файл: com/hypixel/hytale/server/npc/asset/builder/validators/asset/CombatInteractionValidator.java
extends: AssetValidator
Поля (9)
| Модификаторы | Тип | Имя |
|---|---|---|
|
IndexedLookupTableAssetMap |
var1 |
|
RootInteraction |
var2 |
|
boolean |
var2 |
|
Set |
var3 |
|
StringBuilder |
var3 |
|
boolean |
var3 |
|
Set |
var4 |
|
boolean |
var4 |
|
ListCollector |
var5 |
Методы (9)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(!this.assetExists) |
|
|
if if(!this.assetExists) |
|
|
if if(!this.attackTag) |
|
|
if if(!this.onlyOneAttackType) |
|
|
if if(!this.onlyOneAimingReference) |
|
|
if if(!var2) |
abstract |
|
super super(var1) |
static |
boolean |
testAttackTagboolean testAttackTag(@Nonnull RootInteraction var0) |
static |
boolean |
testOnlyOneAttackTypeboolean testOnlyOneAttackType(@Nonnull RootInteraction var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.asset.builder.validators.asset;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.BreakBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.ChangeBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.MovementConditionInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.PlaceBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.ListCollector;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AssetValidator;
class="kw">import com.hypixel.hytale.server.npc.role.support.CombatSupport;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.EnumSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">public class CombatInteractionValidator class="kw">extends AssetValidator {
class="kw">private class="kw">static class="kw">final Set<Class<? class="kw">extends Interaction>> DISALLOWED_INTERACTION_TYPES = Set.of(
BreakBlockInteraction.class, PlaceBlockInteraction.class, ChangeBlockInteraction.class, MovementConditionInteraction.class
);
class="kw">private class="kw">final List<String> disallowedInteractions = new ObjectArrayList();
class="kw">private boolean assetExists;
class="kw">private boolean attackTag;
class="kw">private boolean onlyOneAttackType;
class="kw">private boolean onlyOneAimingReference;
class="kw">private CombatInteractionValidator() {
}
class="kw">private CombatInteractionValidator(EnumSet<AssetValidator.Config> var1) {
super(var1);
}
@Nonnull
@Override
class="kw">public String getDomain() {
class="kw">return "Interaction";
}
@Override
class="kw">public boolean test(String var1) {
RootInteraction var2 = RootInteraction.getAssetMap().getAsset(var1);
this.assetExists = var2 != null;
if (!this.assetExists) {
class="kw">return false;
}
this.attackTag = testAttackTag(var2);
this.onlyOneAttackType = testOnlyOneAttackType(var2);
Set var3 = new HashSet<>();
this.disallowedInteractions.clear();
Set var4 = Interaction.getAssetMap().getKeysForTag(CombatSupport.AIMING_REFERENCE_TAG_INDEX);
ListCollector var5 = new ListCollector<>((var3x, var4x, var5x) -> {
if (var4.contains(var5x.getId())) {
var3.add(var5x.getId());
}
if (DISALLOWED_INTERACTION_TYPES.contains(var5x.getClass())) {
this.disallowedInteractions.add(var5x.getClass().getSimpleName());
}
class="kw">return null;
});
InteractionManager.walkChain(var5, InteractionType.Primary, InteractionContext.withoutEntity(), var2);
this.onlyOneAimingReference = var3.size() <= 1;
class="kw">return this.attackTag && this.onlyOneAttackType && this.onlyOneAimingReference && this.disallowedInteractions.isEmpty();
}
@Nonnull
@Override
class="kw">public String errorMessage(String var1, String var2) {
if (!this.assetExists) {
class="kw">return "Interaction \"" + var1 + "\" does not exist for attribute \"" + var2 + "\"";
}
StringBuilder var3 = new StringBuilder("Attribute \"").append(var2).append("\" uses interaction with name \"").append(var1).append("\" which:");
if (!this.attackTag) {
var3.append("\n - Is not marked with the \"").append("Attack").append("\" tag");
}
if (!this.onlyOneAttackType) {
var3.append("\n - Has too many attack types (only one may be defined)");
}
if (!this.onlyOneAimingReference) {
var3.append("\n - Has too many ").append("AimingReference").append(" tags");
}
if (!this.disallowedInteractions.isEmpty()) {
var3.append("\n - Contains the following disallowed interaction types: ").append(String.join(", ", this.disallowedInteractions));
}
class="kw">return var3.toString();
}
@Nonnull
@Override
class="kw">public String getAssetName() {
class="kw">return RootInteraction.class.getSimpleName();
}
class="kw">public class="kw">static boolean testAttackTag(@Nonnull RootInteraction var0) {
class="kw">return RootInteraction.getAssetMap().getKeysForTag(CombatSupport.ATTACK_TAG_INDEX).contains(var0.getId());
}
class="kw">public class="kw">static boolean testOnlyOneAttackType(@Nonnull RootInteraction var0) {
IndexedLookupTableAssetMap var1 = RootInteraction.getAssetMap();
boolean var2 = var1.getKeysForTag(CombatSupport.MELEE_TAG_INDEX).contains(var0.getId());
boolean var3 = var1.getKeysForTag(CombatSupport.RANGED_TAG_INDEX).contains(var0.getId());
boolean var4 = var1.getKeysForTag(CombatSupport.BLOCK_TAG_INDEX).contains(var0.getId());
if (!var2) {
class="kw">return var3 ? !var4 : true;
} else {
class="kw">return !var3 && !var4;
}
}
@Nonnull
class="kw">public class="kw">static CombatInteractionValidator required() {
class="kw">return new CombatInteractionValidator();
}
@Nonnull
class="kw">public class="kw">static CombatInteractionValidator withConfig(EnumSet<AssetValidator.Config> var0) {
class="kw">return new CombatInteractionValidator(var0);
}
}