package ru.bclib.client.models; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import com.google.common.collect.Maps; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; public class PatternsHelper { public static Optional createItemGenerated(ResourceLocation itemId) { return createJson(BasePatterns.ITEM_GENERATED, itemId); } public static Optional createItemHandheld(ResourceLocation itemId) { return createJson(BasePatterns.ITEM_HANDHELD, itemId); } public static Optional createBlockSimple(ResourceLocation blockId) { return createJson(BasePatterns.BLOCK_BASE, blockId); } public static Optional createBlockEmpty(ResourceLocation blockId) { return createJson(BasePatterns.BLOCK_EMPTY, blockId); } public static Optional createBlockPillar(ResourceLocation blockId) { return createJson(BasePatterns.BLOCK_PILLAR, blockId); } public static Optional createBlockBottomTop(ResourceLocation blockId) { return createJson(BasePatterns.BLOCK_BOTTOM_TOP, blockId); } public static Optional createBlockColored(ResourceLocation blockId) { return createJson(BasePatterns.BLOCK_COLORED, blockId); } public static Optional createJson(ResourceLocation patternId, ResourceLocation blockId) { Map textures = Maps.newHashMap(); textures.put("%modid%", blockId.getNamespace()); textures.put("%texture%", blockId.getPath()); return createJson(patternId, textures); } public static Optional createJson(ResourceLocation patternId, Map textures) { ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { String json = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) .lines().collect(Collectors.joining()); for (Map.Entry texture : textures.entrySet()) { json = json.replace(texture.getKey(), texture.getValue()); } return Optional.of(json); } catch (Exception ex) { return Optional.empty(); } } }