CraftingRecipe class
Пакет: com.hypixel.hytale.server.core.asset.type.item.config
Файл: com/hypixel/hytale/server/core/asset/type/item/config/CraftingRecipe.java
implements: JsonAssetWithMap<String, DefaultAssetMap<String, CraftingRecipe>>
Поля (5)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
ASSET_STORE |
final |
String |
FIELDCRAFT_REQUIREMENT |
|
Set |
var1 |
|
BenchRequirement[] |
var2 |
|
com.hypixel.hytale.protocol.CraftingRecipe |
var2 |
Методы (24)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
void |
applyOutputExclusionsvoid applyOutputExclusions() |
|
|
for for(BenchRequirement var6 : var2) |
|
|
for for(MaterialQuantity var5 : this.outputs) |
|
|
for for(MaterialQuantity var9 : this.input) |
|
|
for for(BenchRequirement var6 : this.benchRequirement) |
static |
String |
generateIdFromItemRecipeString generateIdFromItemRecipe(Item var0, int var1) |
static |
DefaultAssetMap<String, CraftingRecipe> |
getAssetMapDefaultAssetMap<String, CraftingRecipe> getAssetMap() |
static |
AssetStore<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> |
getAssetStoreAssetStore<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> getAssetStore() |
public |
BenchRequirement[] |
getBenchRequirementBenchRequirement[] getBenchRequirement() |
public |
String |
getIdString getId() |
public |
MaterialQuantity[] |
getInputMaterialQuantity[] getInput() |
public |
MaterialQuantity[] |
getOutputsMaterialQuantity[] getOutputs() |
public |
int |
getRequiredMemoriesLevelint getRequiredMemoriesLevel() |
public |
float |
getTimeSecondsfloat getTimeSeconds() |
|
|
if if(var2 != null) |
|
|
if if(ASSET_STORE == null) |
|
|
if if(this.input != null && this.input.length > 0) |
|
|
if if(this.outputs != null && this.outputs.length > 0) |
|
|
if if(this.benchRequirement != null && this.benchRequirement.length > 0) |
|
|
if if(this.outputs != null) |
|
|
if if(this.benchRequirement == null) |
public |
boolean |
isKnowledgeRequiredboolean isKnowledgeRequired() |
public |
boolean |
isRestrictedByBenchTierLevelboolean isRestrictedByBenchTierLevel(String var1, int var2) |
private |
void |
processConfigvoid processConfig() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.type.item.config;
class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.protocol.BenchRequirement;
class="kw">import com.hypixel.hytale.protocol.BenchType;
class="kw">import com.hypixel.hytale.server.core.inventory.MaterialQuantity;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
class="kw">import java.util.HashSet;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class CraftingRecipe class="kw">implements JsonAssetWithMap<String, DefaultAssetMap<String, CraftingRecipe>> {
class="kw">public class="kw">static class="kw">final String FIELDCRAFT_REQUIREMENT = "Fieldcraft";
class="kw">public class="kw">static class="kw">final AssetBuilderCodec<String, CraftingRecipe> CODEC = AssetBuilderCodec.builder(
CraftingRecipe.class,
CraftingRecipe::new,
Codec.STRING,
(var0, var1) -> var0.id = var1,
var0 -> var0.id,
(var0, var1) -> var0.data = var1,
var0 -> var0.data
)
.append(
new KeyedCodec<>("Input", new ArrayCodec<>(MaterialQuantity.CODEC, MaterialQuantity[]::new)), (var0, var1) -> var0.input = var1, var0 -> var0.input
)
.addValidator(Validators.nonNull())
.addValidator(Validators.nonEmptyArray())
.add()
.append(
new KeyedCodec<>("Output", new ArrayCodec<>(MaterialQuantity.CODEC, MaterialQuantity[]::new)),
(var0, var1) -> var0.outputs = var1,
var0 -> var0.outputs
)
.add()
.append(new KeyedCodec<>("PrimaryOutput", MaterialQuantity.CODEC), (var0, var1) -> var0.primaryOutput = var1, var0 -> var0.primaryOutput)
.add()
.append(new KeyedCodec<>("OutputQuantity", Codec.INTEGER), (var0, var1) -> var0.primaryOutputQuantity = var1, var0 -> var0.primaryOutputQuantity)
.add()
.append(
new KeyedCodec<>(
"BenchRequirement",
new ArrayCodec<>(
BuilderCodec.builder(BenchRequirement.class, BenchRequirement::new)
.append(new KeyedCodec<>("Type", new EnumCodec<>(BenchType.class)), (var0, var1) -> var0.type = var1, var0 -> var0.type)
.addValidator(Validators.nonNull())
.add()
.<String>append(new KeyedCodec<>("Id", Codec.STRING), (var0, var1) -> var0.id = var1, var0 -> var0.id)
.addValidator(Validators.nonNull())
.add()
.append(new KeyedCodec<>("Categories", Codec.STRING_ARRAY), (var0, var1) -> var0.categories = var1, var0 -> var0.categories)
.add()
.appendInherited(
new KeyedCodec<>("RequiredTierLevel", Codec.INTEGER),
(var0, var1) -> var0.requiredTierLevel = var1,
var0 -> var0.requiredTierLevel,
(var0, var1) -> var0.requiredTierLevel = var1.requiredTierLevel
)
.add()
.append(
new KeyedCodec<>("RequiredAugmentTags", Codec.STRING_ARRAY),
(var0, var1) -> var0.requiredAugmentTags = var1,
var0 -> var0.requiredAugmentTags
)
.add()
.build(),
BenchRequirement[]::new
)
),
(var0, var1) -> var0.benchRequirement = var1,
var0 -> var0.benchRequirement
)
.add()
.<Double>append(new KeyedCodec<>("TimeSeconds", Codec.DOUBLE), (var0, var1) -> var0.timeSeconds = var1.floatValue(), var0 -> (double)var0.timeSeconds)
.addValidator(Validators.min(0.0))
.add()
.append(new KeyedCodec<>("KnowledgeRequired", Codec.BOOLEAN), (var0, var1) -> var0.knowledgeRequired = var1, var0 -> var0.knowledgeRequired)
.add()
.<Integer>append(
new KeyedCodec<>("RequiredMemoriesLevel", Codec.INTEGER), (var0, var1) -> var0.requiredMemoriesLevel = var1, var0 -> var0.requiredMemoriesLevel
)
.documentation("The level of Memories starts from 1, meaning a recipe with a RequiredMemoriesLevel set at 1 will always be available to players.")
.addValidator(Validators.greaterThanOrEqual(1))
.add()
.validator((var0, var1) -> {
BenchRequirement[] var2 = var0.getBenchRequirement();
if (var2 != null) {
for (BenchRequirement var6 : var2) {
if (var0.isKnowledgeRequired() && var6.type != BenchType.Crafting && var6.type != BenchType.DiagramCrafting) {
var1.fail("KnowledgeRequired in recipe can't be set for non crafting recipes");
}
if (var6.type == BenchType.DiagramCrafting && var0.getOutputs() != null && var0.getOutputs().length > 1) {
var1.fail("DiagramCrafting in recipe can only have 1 output");
}
if ("Fieldcraft".equals(var6.id) && var0.getTimeSeconds() > 0.0F) {
var1.warn(String.format("Bench Requirement in recipe for '%s' should not have a delay (TimeSeconds) set!", "Fieldcraft"));
}
}
}
})
.afterDecode(CraftingRecipe::processConfig)
.build();
class="kw">private class="kw">static class="kw">final MaterialQuantity[] EMPTY_OUTPUT = MaterialQuantity.EMPTY_ARRAY;
class="kw">private class="kw">static AssetStore<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> ASSET_STORE;
class="kw">private AssetExtraInfo.Data data;
class="kw">protected String id;
class="kw">protected MaterialQuantity[] input;
class="kw">protected MaterialQuantity[] outputs = EMPTY_OUTPUT;
@Nullable
class="kw">protected MaterialQuantity primaryOutput;
class="kw">protected int primaryOutputQuantity = 1;
class="kw">protected BenchRequirement[] benchRequirement;
class="kw">protected float timeSeconds;
class="kw">protected boolean knowledgeRequired;
class="kw">protected int requiredMemoriesLevel = 1;
class="kw">private Set<String> outputItemIds = Collections.emptySet();
class="kw">public class="kw">static AssetStore<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> getAssetStore() {
if (ASSET_STORE == null) {
ASSET_STORE = AssetRegistry.getAssetStore(CraftingRecipe.class);
}
class="kw">return ASSET_STORE;
}
class="kw">public class="kw">static DefaultAssetMap<String, CraftingRecipe> getAssetMap() {
class="kw">return (DefaultAssetMap<String, CraftingRecipe>)getAssetStore().getAssetMap();
}
class="kw">public CraftingRecipe(
MaterialQuantity[] var1, @Nullable MaterialQuantity var2, MaterialQuantity[] var3, int var4, BenchRequirement[] var5, float var6, boolean var7, int var8
) {
this.input = var1;
this.primaryOutput = var2;
this.outputs = var3;
this.primaryOutputQuantity = var4;
this.benchRequirement = var5;
this.timeSeconds = var6;
this.knowledgeRequired = var7;
this.requiredMemoriesLevel = var8;
}
class="kw">public CraftingRecipe(CraftingRecipe var1) {
this.input = var1.input;
this.primaryOutput = var1.primaryOutput;
this.outputs = var1.outputs;
this.primaryOutputQuantity = var1.primaryOutputQuantity;
this.benchRequirement = var1.benchRequirement;
this.timeSeconds = var1.timeSeconds;
this.knowledgeRequired = var1.knowledgeRequired;
this.requiredMemoriesLevel = var1.requiredMemoriesLevel;
}
class="kw">protected CraftingRecipe() {
}
class="kw">public class="kw">static String generateIdFromItemRecipe(Item var0, int var1) {
class="kw">return var0.id + "_Recipe_Generated_" + var1;
}
@Nonnull
class="kw">public com.hypixel.hytale.protocol.CraftingRecipe toPacket(String var1) {
com.hypixel.hytale.protocol.CraftingRecipe var2 = new com.hypixel.hytale.protocol.CraftingRecipe();
var2.id = var1;
if (this.input != null && this.input.length > 0) {
var2.inputs = ArrayUtil.copyAndMutate(this.input, MaterialQuantity::toPacket, com.hypixel.hytale.protocol.MaterialQuantity[]::new);
}
var2.primaryOutput = this.primaryOutput != null ? this.primaryOutput.toPacket() : null;
if (this.outputs != null && this.outputs.length > 0) {
var2.outputs = ArrayUtil.copyAndMutate(this.outputs, MaterialQuantity::toPacket, com.hypixel.hytale.protocol.MaterialQuantity[]::new);
}
if (this.benchRequirement != null && this.benchRequirement.length > 0) {
var2.benchRequirement = this.benchRequirement;
}
var2.knowledgeRequired = this.knowledgeRequired;
var2.timeSeconds = this.timeSeconds;
var2.requiredMemoriesLevel = this.requiredMemoriesLevel;
class="kw">return var2;
}
class="kw">private void processConfig() {
if ((this.outputs == null || this.outputs.length == 0) && this.primaryOutput != null) {
this.outputs = new MaterialQuantity[]{this.primaryOutput};
}
this.applyOutputExclusions();
}
void applyOutputExclusions() {
Set var1 = new HashSet<>();
if (this.outputs != null) {
for (MaterialQuantity var5 : this.outputs) {
if (var5 != null && var5.getItemId() != null) {
var1.add(var5.getItemId());
}
}
}
if (this.primaryOutput != null && this.primaryOutput.getItemId() != null) {
var1.add(this.primaryOutput.getItemId());
}
this.outputItemIds = var1.isEmpty() ? Collections.emptySet() : Set.copyOf(var1);
if (this.input != null && !this.outputItemIds.isEmpty()) {
for (MaterialQuantity var9 : this.input) {
if (var9 != null && var9.getItemId() == null) {
var9.withExcludedItemIds(this.outputItemIds);
}
}
}
}
class="kw">public MaterialQuantity[] getInput() {
class="kw">return this.input;
}
class="kw">public MaterialQuantity[] getOutputs() {
class="kw">return this.outputs;
}
class="kw">public BenchRequirement[] getBenchRequirement() {
class="kw">return this.benchRequirement;
}
class="kw">public float getTimeSeconds() {
class="kw">return this.timeSeconds;
}
class="kw">public boolean isKnowledgeRequired() {
class="kw">return this.knowledgeRequired;
}
class="kw">public int getRequiredMemoriesLevel() {
class="kw">return this.requiredMemoriesLevel;
}
@Nullable
class="kw">public MaterialQuantity getPrimaryOutput() {
class="kw">return this.primaryOutput;
}
class="kw">public boolean isRestrictedByBenchTierLevel(String var1, int var2) {
if (this.benchRequirement == null) {
class="kw">return false;
}
for (BenchRequirement var6 : this.benchRequirement) {
if (var1.equals(var6.id) && var2 < var6.requiredTierLevel) {
class="kw">return true;
}
}
class="kw">return false;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "CraftingRecipe{input="
+ Arrays.toString(this.input)
+ ", extraOutputs="
+ Arrays.toString(this.outputs)
+ ", primaryOutput="
+ this.primaryOutput
+ ", outputQuantity="
+ this.primaryOutputQuantity
+ ", benchRequirement="
+ Arrays.toString(this.benchRequirement)
+ ", timeSeconds="
+ this.timeSeconds
+ ", knowledgeRequired="
+ this.knowledgeRequired
+ ", requiredMemoriesLevel="
+ this.requiredMemoriesLevel
+ "}";
}
class="kw">public String getId() {
class="kw">return this.id;
}
}