BuilderRoleVariant class
Пакет: com.hypixel.hytale.server.npc.role.builders
Файл: com/hypixel/hytale/server/npc/role/builders/BuilderRoleVariant.java
extends: DependencyTrackingBuilder<Role>
implements: ISpawnableWithModel, RoleBuilder
Поля (40)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
StringHolder |
reference |
|
Builder |
var1 |
|
BuilderInfo |
var1 |
|
Scope |
var10 |
|
Scope |
var10 |
|
Scope |
var11 |
|
Map |
var11 |
|
Map |
var12 |
|
Object |
var12 |
|
boolean |
var13 |
|
Map |
var2 |
|
Scope |
var2 |
|
Role |
var3 |
|
StringSchema |
var3 |
|
Builder |
var3 |
|
|
var3 |
|
Boolean |
var3 |
|
Scope |
var4 |
|
|
var4 |
|
Builder |
var4 |
|
Builder |
var4 |
|
BuilderRoleVariant |
var5 |
|
BuilderParameters |
var5 |
|
ExecutionContext |
var5 |
|
Builder |
var5 |
|
Builder |
var5 |
|
Builder |
var6 |
|
Scope |
var6 |
|
Scope |
var6 |
|
Scope |
var6 |
|
Scope |
var6 |
|
String |
var7 |
|
ExecutionContext |
var7 |
|
Object |
var7 |
|
Object |
var7 |
|
int |
var7 |
|
Map |
var8 |
|
String |
var8 |
|
BuilderParameters |
var9 |
|
Map |
var9 |
Методы (9)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Variant super role missing or does not implement RoleBuilder") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Computable component references are not supported for Role Variants") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Cannot instantiate a variant of something that isn't a spawnable role!") |
protected |
<V> V |
executeOnSuperRole<V> V executeOnSuperRole(@Nonnull BuilderSupport var1, @Nonnull BiFunction<Builder<Role>, BuilderSupport, V> var2, @Nonnull Supplier<V> var3) |
protected |
<V> V |
executeOnSuperRole<V> V executeOnSuperRole(@Nonnull SpawningContext var1, @Nonnull BiFunction<Builder<Role>, SpawningContext, V> var2, @Nonnull Supplier<V> var3) |
protected |
<V> V |
executeOnSuperRole<V> V executeOnSuperRole(@Nonnull ExecutionContext var1, Scope var2, @Nonnull TriFunction<Builder<Role>, ExecutionContext, Scope, V> var3, @Nonnull Supplier<V> var4) |
protected |
int |
executeOnSuperRoleint executeOnSuperRole(@Nonnull ExecutionContext var1, Scope var2, @Nonnull TriToIntFunction<Builder<Role>, ExecutionContext, Scope> var3, int var4) |
public |
int |
getReferenceIndexint getReferenceIndex() |
|
|
if if(var3 == null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.role.builders;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.schema.config.StringSchema;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.function.function.TriFunction;
class="kw">import com.hypixel.hytale.function.function.TriToIntFunction;
class="kw">import com.hypixel.hytale.logger.sentry.SkipSentryException;
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.asset.builder.Builder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderModifier;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderParameters;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.DependencyTrackingBuilder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.StateMappingHelper;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.StringHolder;
class="kw">import com.hypixel.hytale.server.npc.movement.MovementMode;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ForwardedModifier;
class="kw">import com.hypixel.hytale.server.npc.util.expression.Scope;
class="kw">import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
class="kw">import com.hypixel.hytale.server.spawning.ISpawnableWithModel;
class="kw">import com.hypixel.hytale.server.spawning.SpawnTestResult;
class="kw">import com.hypixel.hytale.server.spawning.SpawningContext;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.function.BiFunction;
class="kw">import java.util.function.Supplier;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BuilderRoleVariant class="kw">extends DependencyTrackingBuilder<Role> class="kw">implements ISpawnableWithModel, RoleBuilder {
class="kw">protected class="kw">final StringHolder reference = new StringHolder();
class="kw">protected int referenceIndex;
class="kw">protected BuilderModifier modifier;
class="kw">public BuilderRoleVariant() {
}
@Override
class="kw">public boolean isSpawnable() {
class="kw">return true;
}
@Nullable
class="kw">public Role build(@Nonnull BuilderSupport var1) {
class="kw">return this.executeOnSuperRole(var1, Builder::build, () -> null);
}
@Nonnull
@Override
class="kw">public Role createAndAttach(@Nonnull Holder<EntityStore> var1, @Nonnull BuilderSupport var2) {
Role var3 = this.executeOnSuperRole(var2, (var1x, var2x) -> ((RoleBuilder)var1x).createAndAttach(var1, var2x), () -> null);
if (var3 == null) {
throw new IllegalStateException("Variant super role missing or does not implement RoleBuilder");
} else {
class="kw">return var3;
}
}
@Override
class="kw">public StateMappingHelper getStateMappingHelper() {
Builder var1 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
class="kw">return var1.getStateMappingHelper();
}
@Override
class="kw">public boolean validate(String var1, @Nonnull NPCLoadTimeValidationHelper var2, @Nonnull ExecutionContext var3, Scope var4, List<String> var5) {
Builder var6 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
if (!(var6 class="kw">instanceof ISpawnableWithModel)) {
NPCPlugin.get().getLogger().at(Level.SEVERE).log("Variant %s is of a non-spawnable template!", var1);
class="kw">return false;
}
var2.setIsVariant();
String var7 = this.modifier.getCombatConfig();
if (var7 != null && var3.getCombatConfig() == null) {
var3.setCombatConfig(var7);
}
Map var8 = this.modifier.getInteractionVars();
if (var8 != null && var3.getInteractionVars() == null) {
var3.setInteractionVars(var8);
}
BuilderParameters var9 = var6.getBuilderParameters();
Scope var10 = this.modifier.createScope(var3, var9, null);
Scope var11 = var3.setScope(var10);
Map var12 = var3.setForwardedModifiers(this.modifier.getForwardedModifiers());
boolean var13 = var6.validate(var1, var2, var3, var3.getScope(), var5);
var3.setForwardedModifiers(var12);
var13 &= BuilderModifier.validateForwardedModifiers(this.modifier, var9, this.builderManager, var3, var1, var5);
var3.setScope(var11);
class="kw">return var13;
}
@Nonnull
@Override
class="kw">public Builder<Role> readConfig(@Nonnull JsonElement var1) {
if (this.isCreatingSchema()) {
Map var2 = this.builderSchema.getProperties();
StringSchema var3 = new StringSchema();
var3.setHytaleAssetRef("NPCRole");
var2.put("Reference", var3);
var2.put("Modify", BuilderModifier.toSchema(this.builderSchemaContext));
class="kw">return this;
}
if (!this.isCreatingDescriptor()) {
BuilderModifier.readModifierObject(
this.expectJsonObject(var1, this.getLabel()),
this.getBuilderParameters(),
this.reference,
var0 -> {},
var1x -> this.modifier = var1x,
this.stateHelper,
this.extraInfo
);
if (!this.reference.isStatic()) {
throw new IllegalStateException("Computable component references are not supported for Role Variants");
}
this.referenceIndex = this.getBuilderManager().getOrCreateIndex(this.reference.get(null));
this.builderParameters.addDependency(this.referenceIndex);
}
this.ignoreAttribute("Reference");
this.ignoreAttribute("Modify");
this.ignoreAttribute("$Label");
class="kw">return this;
}
@Nonnull
@Override
class="kw">public Class<Role> category() {
class="kw">return Role.class;
}
@Nonnull
@Override
class="kw">public String getIdentifier() {
BuilderInfo var1 = NPCPlugin.get().getBuilderInfo(this);
Objects.requireNonNull(var1, "Have builder but can't get builderInfo for it");
class="kw">return var1.getKeyName();
}
@Nonnull
@Override
class="kw">public SpawnTestResult canSpawn(@Nonnull SpawningContext var1) {
class="kw">return this.executeOnSuperRole(var1, (var0, var1x) -> ((ISpawnableWithModel)var0).canSpawn(var1x), () -> SpawnTestResult.FAIL_NOT_SPAWNABLE);
}
@Override
class="kw">public boolean requiresSpawnDropHeightCheck(@Nonnull SpawningContext var1) {
class="kw">return !Boolean.FALSE
.equals(this.executeOnSuperRole(var1, (var0, var1x) -> ((ISpawnableWithModel)var0).requiresSpawnDropHeightCheck(var1x), () -> Boolean.TRUE));
}
@Override
class="kw">public void getMovementModes(
@Nonnull SpawningContext var1, @Nonnull Set<MovementMode> var2, @Nonnull Set<MovementMode> var3, @Nonnull Set<MovementMode> var4
) {
this.executeOnSuperRole(var1, (var3x, var4x) -> {
((ISpawnableWithModel)var3x).getMovementModes(var4x, var2, var3, var4);
class="kw">return null;
}, () -> null);
}
@Override
class="kw">public boolean breathesInAir(@Nonnull ExecutionContext var1, @Nullable Scope var2) {
class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).breathesInAir(var1x, var2x), () -> true);
}
@Override
class="kw">public boolean breathesInWater(@Nonnull ExecutionContext var1, @Nullable Scope var2) {
class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).breathesInWater(var1x, var2x), () -> false);
}
@Nullable
@Override
class="kw">public String getSpawnModelName(@Nonnull ExecutionContext var1, Scope var2) {
class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getSpawnModelName(var1x, var2x), () -> null);
}
@Override
class="kw">public Scope createModifierScope(@Nonnull ExecutionContext var1) {
Scope var2 = var1.getScope();
Builder var3 = this;
Scope var4 = null;
do {
BuilderRoleVariant var5 = (BuilderRoleVariant)var3;
var3 = this.builderManager.getCachedBuilder(var5.referenceIndex, Role.class);
if (!(var3 class="kw">instanceof ISpawnableWithModel)) {
throw new IllegalStateException("Cannot instantiate a variant of something that isn't a spawnable role!");
}
var4 = var5.modifier.createScope(var1, var3.getBuilderParameters(), var4);
var1.setScope(var4);
} while (var3 class="kw">instanceof BuilderRoleVariant);
var1.setScope(var2);
class="kw">return var4;
}
@Nonnull
@Override
class="kw">public Scope createExecutionScope() {
class="kw">return this.getBuilderParameters().createScope();
}
@Override
class="kw">public void markNeedsReload() {
NPCPlugin.get().setRoleBuilderNeedsReload(this);
}
@Nonnull
@Override
class="kw">public String getShortDescription() {
class="kw">return "Create a variant from an existing NPC JSON file";
}
@Nonnull
@Override
class="kw">public String getLongDescription() {
class="kw">return "Create a variant from an existing NPC JSON file";
}
@Nonnull
@Override
class="kw">public BuilderDescriptorState getBuilderDescriptorState() {
class="kw">return BuilderDescriptorState.WorkInProgress;
}
@Override
class="kw">public class="kw">final boolean isEnabled(ExecutionContext var1) {
class="kw">return true;
}
class="kw">public int getReferenceIndex() {
class="kw">return this.referenceIndex;
}
@Override
class="kw">public boolean isMemory(@Nonnull ExecutionContext var1, Scope var2) {
Boolean var3 = this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).isMemory(var1x, var2x), () -> null);
class="kw">return var3 != null ? var3 : false;
}
@Nullable
@Override
class="kw">public String getMemoriesCategory(@Nonnull ExecutionContext var1, Scope var2) {
class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getMemoriesCategory(var1x, var2x), () -> null);
}
@Nullable
@Override
class="kw">public String getMemoriesNameOverride(@Nonnull ExecutionContext var1, Scope var2) {
class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getMemoriesNameOverride(var1x, var2x), () -> null);
}
@Nonnull
@Override
class="kw">public String getNameTranslationKey(ExecutionContext var1, Scope var2) {
class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getNameTranslationKey(var1x, var2x), () -> {
throw new SkipSentryException(new IllegalStateException("Failed to get translation key for role!"));
});
}
class="kw">protected <V> V executeOnSuperRole(@Nonnull BuilderSupport var1, @Nonnull BiFunction<Builder<Role>, BuilderSupport, V> var2, @Nonnull Supplier<V> var3) {
Builder var4 = var1.getBuilderManager().getCachedBuilder(this.referenceIndex, Role.class);
if (!(var4 class="kw">instanceof ISpawnableWithModel)) {
class="kw">return var3.get();
}
BuilderParameters var5 = var4.getBuilderParameters();
Scope var6 = this.modifier.createScope(var1, var5, null);
ExecutionContext var7 = var1.getExecutionContext();
String var8 = this.modifier.getCombatConfig();
if (var8 != null && var7.getCombatConfig() == null) {
var7.setCombatConfig(var8);
}
Map var9 = this.modifier.getInteractionVars();
if (var9 != null && var7.getInteractionVars() == null) {
var7.setInteractionVars(var9);
}
Scope var10 = var7.setScope(var6);
var1.setGlobalScope(var6);
Map var11 = var1.setForwardedModifiers(this.modifier.getForwardedModifiers());
Object var12 = var2.apply(var4, var1);
var1.setForwardedModifiers(var11);
var7.setScope(var10);
class="kw">return var12;
}
class="kw">protected <V> V executeOnSuperRole(@Nonnull SpawningContext var1, @Nonnull BiFunction<Builder<Role>, SpawningContext, V> var2, @Nonnull Supplier<V> var3) {
Builder var4 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
if (!(var4 class="kw">instanceof ISpawnableWithModel)) {
class="kw">return var3.get();
}
ExecutionContext var5 = var1.getExecutionContext();
Scope var6 = var5.setScope(var1.getModifierScope());
Object var7 = var2.apply(var4, var1);
var5.setScope(var6);
class="kw">return var7;
}
class="kw">protected <V> V executeOnSuperRole(
@Nonnull ExecutionContext var1, Scope var2, @Nonnull TriFunction<Builder<Role>, ExecutionContext, Scope, V> var3, @Nonnull Supplier<V> var4
) {
Builder var5 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
if (!(var5 class="kw">instanceof ISpawnableWithModel)) {
class="kw">return var4.get();
} else if (var2 != null) {
Scope var6 = var1.setScope(var2);
Object var7 = var3.apply(var5, var1, var2);
var1.setScope(var6);
class="kw">return var7;
} else {
class="kw">return var3.apply(var5, var1, null);
}
}
class="kw">protected int executeOnSuperRole(
@Nonnull ExecutionContext var1, Scope var2, @Nonnull TriToIntFunction<Builder<Role>, ExecutionContext, Scope> var3, int var4
) {
Builder var5 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
if (!(var5 class="kw">instanceof ISpawnableWithModel)) {
class="kw">return var4;
} else if (var2 != null) {
Scope var6 = var1.setScope(var2);
int var7 = var3.apply(var5, var1, var2);
var1.setScope(var6);
class="kw">return var7;
} else {
class="kw">return var3.apply(var5, var1, null);
}
}
}