diff --git a/gradle.properties b/gradle.properties index bc7e40c..fccec1b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ loader_version_range=[2,) mod_id=l2core mod_name=L2Core mod_license=LGPL-2.1 -mod_version=3.0.7+31 +mod_version=3.0.7+33 mod_group_id=dev.xkmc mod_authors=lcy0x1 mod_description=Core Library mod for all L2 mods diff --git a/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarHolder.java b/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarHolder.java index e2e0344..fa8836b 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarHolder.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarHolder.java @@ -3,9 +3,10 @@ package dev.xkmc.l2core.init.reg.varitem; import com.tterrag.registrate.util.entry.ItemEntry; import net.minecraft.world.item.Item; import net.minecraft.world.level.ItemLike; -import org.jetbrains.annotations.Nullable; -public class VarHolder implements VarEntry, ItemLike { +import java.util.function.Supplier; + +public class VarHolder implements VarEntry, ItemLike, Supplier { private final String str; private final VarBuilder builder; @@ -25,6 +26,11 @@ public class VarHolder implements VarEntry, ItemLike { return item.asItem(); } + @Override + public T get() { + return item.get(); + } + @Override public String id() { return str; diff --git a/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarItemInit.java b/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarItemInit.java index e3d039c..ba6507f 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarItemInit.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/varitem/VarItemInit.java @@ -2,7 +2,6 @@ package dev.xkmc.l2core.init.reg.varitem; import com.google.gson.*; import com.mojang.datafixers.util.Pair; -import com.tterrag.registrate.util.OneTimeEventReceiver; import com.tterrag.registrate.util.entry.ItemEntry; import dev.xkmc.l2core.init.L2Core; import dev.xkmc.l2core.init.reg.registrate.L2Registrate; @@ -14,12 +13,10 @@ import net.neoforged.fml.loading.FMLPaths; import net.neoforged.neoforge.registries.RegisterEvent; import org.apache.logging.log4j.Level; +import javax.annotation.Nullable; import java.io.FileReader; import java.io.FileWriter; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.function.Function; @@ -41,7 +38,7 @@ public class VarItemInit { private final Function func; private final VarBuilder builder; private final Map> defaults = new LinkedHashMap<>(); - private final List registered = new ArrayList<>(); + private final Set registered = new LinkedHashSet<>(); private final Map> results = new ConcurrentHashMap<>(); private VarItemInit(L2Registrate reg, ResourceLocation id, Function func, VarBuilder builder) { @@ -49,7 +46,7 @@ public class VarItemInit { this.id = id; this.func = func; this.builder = builder; - reg.getModEventBus().addListener( EventPriority.HIGH, RegisterEvent.class, this::init); + reg.getModEventBus().addListener(EventPriority.HIGH, RegisterEvent.class, this::init); } public synchronized void add(List defaults) { @@ -61,6 +58,11 @@ public class VarItemInit { return e; } + @Nullable + public ItemEntry get(String str) { + return results.get(str); + } + private synchronized void init(RegisterEvent event) { if (event.getRegistry() != BuiltInRegistries.ITEM) return; load(); @@ -119,17 +121,24 @@ public class VarItemInit { private Pair> parseFile(JsonElement elem) { if (!elem.isJsonArray()) return Pair.of(true, List.of()); - List ans = new ArrayList<>(); + Set ans = new LinkedHashSet<>(defaults.keySet()); + Set checker = new HashSet<>(); boolean err = false; for (var e : elem.getAsJsonArray()) { var rl = e.getAsString(); - if (ResourceLocation.isValidPath(rl)) ans.add(rl); - else { + if (ResourceLocation.isValidPath(rl)) { + ans.add(rl); + checker.add(rl); + } else { L2Core.LOGGER.error("Item ID {} for varitem type {} is invalid. Skipped", rl, id); err = true; } } - return Pair.of(err, ans); + if (checker.size() != ans.size()) { + L2Core.LOGGER.error("Found missing default items for varitem type {}. Filling", id); + err = true; + } + return Pair.of(err, new ArrayList<>(ans)); } private record SimpleVarEntry(String id) implements VarEntry {