diff --git a/src/main/java/com/minelittlepony/unicopia/ability/data/tree/TreeTypeLoader.java b/src/main/java/com/minelittlepony/unicopia/ability/data/tree/TreeTypeLoader.java index cb58a19a..b8fa4bb1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/data/tree/TreeTypeLoader.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/data/tree/TreeTypeLoader.java @@ -6,12 +6,10 @@ import java.util.Objects; import java.util.Set; import java.util.function.Supplier; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; -import com.minelittlepony.common.util.settings.ToStringAdapter; import com.minelittlepony.unicopia.util.PosHelper; +import com.minelittlepony.unicopia.util.Resources; import com.minelittlepony.unicopia.util.Weighted; import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; @@ -30,9 +28,6 @@ import net.minecraft.world.World; public class TreeTypeLoader extends JsonDataLoader implements IdentifiableResourceReloadListener { private static final Identifier ID = new Identifier("unicopia", "data/tree_type"); - public static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Identifier.class, new ToStringAdapter<>(Identifier::new)) - .create(); public static final TreeTypeLoader INSTANCE = new TreeTypeLoader(); @@ -42,7 +37,7 @@ public class TreeTypeLoader extends JsonDataLoader implements IdentifiableResour private final TreeType any2x = createDynamic(true); TreeTypeLoader() { - super(GSON, "tree_types"); + super(Resources.GSON, "tree_types"); } @Override @@ -109,7 +104,7 @@ public class TreeTypeLoader extends JsonDataLoader implements IdentifiableResour for (Map.Entry entry : resources.entrySet()) { try { - TreeTypeDef typeDef = GSON.fromJson(entry.getValue(), TreeTypeDef.class); + TreeTypeDef typeDef = Resources.GSON.fromJson(entry.getValue(), TreeTypeDef.class); if (typeDef != null) { entries.add(new TreeTypeImpl( diff --git a/src/main/java/com/minelittlepony/unicopia/item/enchantment/PoisonedJokeEnchantment.java b/src/main/java/com/minelittlepony/unicopia/item/enchantment/PoisonedJokeEnchantment.java index f64f3dfc..330f2808 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/enchantment/PoisonedJokeEnchantment.java +++ b/src/main/java/com/minelittlepony/unicopia/item/enchantment/PoisonedJokeEnchantment.java @@ -1,7 +1,5 @@ package com.minelittlepony.unicopia.item.enchantment; -import java.io.IOException; -import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -13,14 +11,12 @@ import java.util.stream.Stream; import org.apache.commons.lang3.reflect.TypeUtils; -import com.google.gson.JsonParseException; import com.minelittlepony.unicopia.Unicopia; -import com.minelittlepony.unicopia.ability.data.tree.TreeTypeLoader; import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.util.Resources; import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; import net.minecraft.entity.EquipmentSlot; -import net.minecraft.resource.Resource; import net.minecraft.resource.ResourceManager; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; @@ -76,8 +72,8 @@ public class PoisonedJokeEnchantment extends SimpleEnchantment implements Identi clientProfiler.startTick(); clientProfiler.push("Loading poisoned joke sound options"); - sounds = getResources(manager, FILE) - .flatMap(this::loadFile) + sounds = Resources.getResources(manager, FILE) + .flatMap(r -> Resources.loadFile(r, TYPE, "Failed to load sounds file at ")) .distinct() .flatMap(this::findSound) .collect(Collectors.toList()); @@ -87,29 +83,10 @@ public class PoisonedJokeEnchantment extends SimpleEnchantment implements Identi }, clientExecutor); } - private Stream getResources(ResourceManager manager, Identifier id) { - try { - return manager.getAllResources(id).stream(); - } catch (IOException ignored) { } - return Stream.empty(); - } - - private Stream loadFile(Resource res) throws JsonParseException { - try (Resource resource = res) { - return (TreeTypeLoader.GSON.>fromJson(new InputStreamReader(resource.getInputStream()), TYPE)).stream(); - } catch (JsonParseException e) { - Unicopia.LOGGER.warn("Failed to load sounds file at " + res.getResourcePackName(), e); - } catch (IOException ignored) {} - - return Stream.empty(); - } - private Stream findSound(Identifier id) { - SoundEvent value = Registry.SOUND_EVENT.getOrEmpty(id).orElse(null); - if (value == null) { + return Registry.SOUND_EVENT.getOrEmpty(id).map(Stream::of).orElseGet(() -> { Unicopia.LOGGER.warn("Could not find sound with id {}", id); return Stream.empty(); - } - return Stream.of(value); + }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/util/Registries.java b/src/main/java/com/minelittlepony/unicopia/util/Registries.java index efcee7a1..e7cb56b2 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/Registries.java +++ b/src/main/java/com/minelittlepony/unicopia/util/Registries.java @@ -4,7 +4,6 @@ import com.mojang.serialization.Lifecycle; import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.DefaultedRegistry; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.util.registry.SimpleRegistry; diff --git a/src/main/java/com/minelittlepony/unicopia/util/Resources.java b/src/main/java/com/minelittlepony/unicopia/util/Resources.java new file mode 100644 index 00000000..5e84d25d --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/util/Resources.java @@ -0,0 +1,40 @@ +package com.minelittlepony.unicopia.util; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.reflect.Type; +import java.util.List; +import java.util.stream.Stream; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; +import com.minelittlepony.common.util.settings.ToStringAdapter; +import com.minelittlepony.unicopia.Unicopia; + +import net.minecraft.resource.Resource; +import net.minecraft.resource.ResourceManager; +import net.minecraft.util.Identifier; + +public interface Resources { + Gson GSON = new GsonBuilder() + .registerTypeAdapter(Identifier.class, new ToStringAdapter<>(Identifier::new)) + .create(); + + static Stream getResources(ResourceManager manager, Identifier id) { + try { + return manager.getAllResources(id).stream(); + } catch (IOException ignored) { } + return Stream.empty(); + } + + static Stream loadFile(Resource res, Type type, String msg) throws JsonParseException { + try (Resource resource = res) { + return (GSON.>fromJson(new InputStreamReader(resource.getInputStream()), type)).stream(); + } catch (JsonParseException e) { + Unicopia.LOGGER.warn(msg + res.getResourcePackName(), e); + } catch (IOException ignored) {} + + return Stream.empty(); + } +}