101 lines
3.7 KiB
Java
101 lines
3.7 KiB
Java
package net.minecraft.advancements.critereon;
|
|
|
|
import com.google.gson.JsonArray;
|
|
import com.google.gson.JsonSyntaxException;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.util.GsonHelper;
|
|
import net.minecraft.core.Registry;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonNull;
|
|
import com.google.gson.JsonElement;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import javax.annotation.Nullable;
|
|
import net.minecraft.world.item.enchantment.Enchantment;
|
|
|
|
public class EnchantmentPredicate {
|
|
public static final EnchantmentPredicate ANY;
|
|
public static final EnchantmentPredicate[] NONE;
|
|
private final Enchantment enchantment;
|
|
private final MinMaxBounds.Ints level;
|
|
|
|
public EnchantmentPredicate() {
|
|
this.enchantment = null;
|
|
this.level = MinMaxBounds.Ints.ANY;
|
|
}
|
|
|
|
public EnchantmentPredicate(@Nullable final Enchantment bhx, final MinMaxBounds.Ints d) {
|
|
this.enchantment = bhx;
|
|
this.level = d;
|
|
}
|
|
|
|
public boolean containedIn(final Map<Enchantment, Integer> map) {
|
|
if (this.enchantment != null) {
|
|
if (!map.containsKey(this.enchantment)) {
|
|
return false;
|
|
}
|
|
final int integer3 = map.get(this.enchantment);
|
|
if (this.level != null && !this.level.matches(integer3)) {
|
|
return false;
|
|
}
|
|
}
|
|
else if (this.level != null) {
|
|
for (final Integer integer4 : map.values()) {
|
|
if (this.level.matches(integer4)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public JsonElement serializeToJson() {
|
|
if (this == EnchantmentPredicate.ANY) {
|
|
return JsonNull.INSTANCE;
|
|
}
|
|
final JsonObject jsonObject2 = new JsonObject();
|
|
if (this.enchantment != null) {
|
|
jsonObject2.addProperty("enchantment", Registry.ENCHANTMENT.getKey(this.enchantment).toString());
|
|
}
|
|
jsonObject2.add("levels", this.level.serializeToJson());
|
|
return jsonObject2;
|
|
}
|
|
|
|
public static EnchantmentPredicate fromJson(@Nullable final JsonElement jsonElement) {
|
|
if (jsonElement == null || jsonElement.isJsonNull()) {
|
|
return EnchantmentPredicate.ANY;
|
|
}
|
|
final JsonObject jsonObject2 = GsonHelper.convertToJsonObject(jsonElement, "enchantment");
|
|
Enchantment bhx3 = null;
|
|
if (jsonObject2.has("enchantment")) {
|
|
final ResourceLocation sm4 = new ResourceLocation(GsonHelper.getAsString(jsonObject2, "enchantment"));
|
|
final Object o;
|
|
final Object obj;
|
|
bhx3 = Registry.ENCHANTMENT.getOptional(sm4).<Throwable>orElseThrow(() -> {
|
|
new JsonSyntaxException("Unknown enchantment '" + obj + "'");
|
|
return o;
|
|
});
|
|
}
|
|
final MinMaxBounds.Ints d4 = MinMaxBounds.Ints.fromJson(jsonObject2.get("levels"));
|
|
return new EnchantmentPredicate(bhx3, d4);
|
|
}
|
|
|
|
public static EnchantmentPredicate[] fromJsonArray(@Nullable final JsonElement jsonElement) {
|
|
if (jsonElement == null || jsonElement.isJsonNull()) {
|
|
return EnchantmentPredicate.NONE;
|
|
}
|
|
final JsonArray jsonArray2 = GsonHelper.convertToJsonArray(jsonElement, "enchantments");
|
|
final EnchantmentPredicate[] arr3 = new EnchantmentPredicate[jsonArray2.size()];
|
|
for (int integer4 = 0; integer4 < arr3.length; ++integer4) {
|
|
arr3[integer4] = fromJson(jsonArray2.get(integer4));
|
|
}
|
|
return arr3;
|
|
}
|
|
|
|
static {
|
|
ANY = new EnchantmentPredicate();
|
|
NONE = new EnchantmentPredicate[0];
|
|
}
|
|
}
|