From 85b48803911bfaceedb2840755499aa9e7fc419e Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Thu, 21 Aug 2014 15:23:28 +0200 Subject: [PATCH] store only biome IDs not instances reorganized utility methods --- .../client/gui/BiomeListConfigEntry.java | 27 +-- .../client/gui/NonVerboseArrayEntry.java | 4 +- .../client/gui/SelectListConfigEntry.java | 4 +- .../betterfoliage/client/render/IconSet.java | 4 +- .../client/render/RenderBlockAOBase.java | 4 +- .../resource/BlockTextureGenerator.java | 6 +- .../client/resource/LeafGeneratorBase.java | 6 +- .../resource/LeafTextureEnumerator.java | 33 ++-- .../betterfoliage/common/config/Config.java | 35 +--- .../betterfoliage/common/util/BiomeUtils.java | 87 ++++++++++ .../common/util/RenderUtils.java | 45 +++++ .../common/util/ResourceUtils.java | 72 ++++++++ .../mods/betterfoliage/common/util/Utils.java | 157 ------------------ 13 files changed, 247 insertions(+), 237 deletions(-) create mode 100644 src/main/java/mods/betterfoliage/common/util/BiomeUtils.java create mode 100644 src/main/java/mods/betterfoliage/common/util/RenderUtils.java create mode 100644 src/main/java/mods/betterfoliage/common/util/ResourceUtils.java delete mode 100644 src/main/java/mods/betterfoliage/common/util/Utils.java diff --git a/src/main/java/mods/betterfoliage/client/gui/BiomeListConfigEntry.java b/src/main/java/mods/betterfoliage/client/gui/BiomeListConfigEntry.java index eb30ca8..4daa14f 100644 --- a/src/main/java/mods/betterfoliage/client/gui/BiomeListConfigEntry.java +++ b/src/main/java/mods/betterfoliage/client/gui/BiomeListConfigEntry.java @@ -1,13 +1,11 @@ package mods.betterfoliage.client.gui; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; import java.util.List; +import mods.betterfoliage.common.config.Config; +import mods.betterfoliage.common.util.BiomeUtils; import net.minecraft.world.biome.BiomeGenBase; -import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -19,31 +17,20 @@ import cpw.mods.fml.client.config.IConfigElement; public class BiomeListConfigEntry extends SelectListConfigEntry { - public static List reedBiomeList = Lists.newArrayList(); - public static List algaeBiomeList = Lists.newArrayList(); - public static List coralBiomeList = Lists.newArrayList(); - public BiomeListConfigEntry(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement configElement) { super(owningScreen, owningEntryList, configElement); } @Override - protected List getBaseSet(String qualifiedName) { - List biomes = Lists.newArrayList(Collections2.filter(Arrays.asList(BiomeGenBase.getBiomeGenArray()), Predicates.notNull())); - Collections.sort(biomes, new Comparator() { - @Override - public int compare(BiomeGenBase o1, BiomeGenBase o2) { - return o1.biomeName.compareTo(o2.biomeName); - } - }); - return biomes; + protected List getBaseSet(String name) { + return BiomeUtils.getAllBiomes(); } @Override protected List getDefaultSelected(String name) { - if (name.equals("reedBiomeList")) return reedBiomeList; - if (name.equals("algaeBiomeList")) return algaeBiomeList; - if (name.equals("coralBiomeList")) return coralBiomeList; + if (name.equals("reedBiomeList")) return Lists.newArrayList(Collections2.filter(getBaseSet(name), BiomeUtils.biomeIdFilter(Config.reedBiomeList))); + if (name.equals("algaeBiomeList")) return Lists.newArrayList(Collections2.filter(getBaseSet(name), BiomeUtils.biomeIdFilter(Config.algaeBiomeList))); + if (name.equals("coralBiomeList")) return Lists.newArrayList(Collections2.filter(getBaseSet(name), BiomeUtils.biomeIdFilter(Config.coralBiomeList))); return ImmutableList.of(); } diff --git a/src/main/java/mods/betterfoliage/client/gui/NonVerboseArrayEntry.java b/src/main/java/mods/betterfoliage/client/gui/NonVerboseArrayEntry.java index fd67794..d22fb3b 100644 --- a/src/main/java/mods/betterfoliage/client/gui/NonVerboseArrayEntry.java +++ b/src/main/java/mods/betterfoliage/client/gui/NonVerboseArrayEntry.java @@ -1,6 +1,6 @@ package mods.betterfoliage.client.gui; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.RenderUtils; import net.minecraft.client.resources.I18n; import net.minecraft.util.EnumChatFormatting; import cpw.mods.fml.client.config.GuiConfig; @@ -14,7 +14,7 @@ public class NonVerboseArrayEntry extends GuiConfigEntries.ArrayEntry { public NonVerboseArrayEntry(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement configElement) { super(owningScreen, owningEntryList, configElement); - Utils.stripTooltipDefaultText(toolTip); + RenderUtils.stripTooltipDefaultText(toolTip); String shortDefaults = I18n.format("betterfoliage.arrayEntryDisplay", configElement.getDefaults().length); toolTip.addAll(this.mc.fontRenderer.listFormattedStringToWidth(EnumChatFormatting.AQUA + I18n.format("fml.configgui.tooltip.default", shortDefaults),300)); } diff --git a/src/main/java/mods/betterfoliage/client/gui/SelectListConfigEntry.java b/src/main/java/mods/betterfoliage/client/gui/SelectListConfigEntry.java index 87b3fbd..e6963f1 100644 --- a/src/main/java/mods/betterfoliage/client/gui/SelectListConfigEntry.java +++ b/src/main/java/mods/betterfoliage/client/gui/SelectListConfigEntry.java @@ -4,7 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.RenderUtils; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; import net.minecraft.util.EnumChatFormatting; @@ -28,7 +28,7 @@ public abstract class SelectListConfigEntry extends CategoryEntry { @SuppressWarnings("unchecked") public SelectListConfigEntry(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement configElement) { super(owningScreen, owningEntryList, configElement); - Utils.stripTooltipDefaultText(toolTip); + RenderUtils.stripTooltipDefaultText(toolTip); } @Override diff --git a/src/main/java/mods/betterfoliage/client/render/IconSet.java b/src/main/java/mods/betterfoliage/client/render/IconSet.java index 1135f93..81dc86c 100644 --- a/src/main/java/mods/betterfoliage/client/render/IconSet.java +++ b/src/main/java/mods/betterfoliage/client/render/IconSet.java @@ -1,6 +1,6 @@ package mods.betterfoliage.client.render; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.ResourceUtils; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; @@ -37,7 +37,7 @@ public class IconSet { // if the path contains a domain, use that to check if the resource exists String resolvedDomain = path.contains(":") ? new ResourceLocation(path).getResourceDomain() : domain; String resolvedPath = String.format("textures/blocks/" + (path.contains(":") ? new ResourceLocation(path).getResourcePath() : path) + ".png", idx); - if (Utils.resourceExists(new ResourceLocation(resolvedDomain, resolvedPath))) + if (ResourceUtils.resourceExists(new ResourceLocation(resolvedDomain, resolvedPath))) icons[numLoaded++] = register.registerIcon(domain + ":" + String.format(path, idx)); } } diff --git a/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java b/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java index b308faa..09953d3 100644 --- a/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java +++ b/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java @@ -6,7 +6,7 @@ import java.util.Iterator; import java.util.List; import mods.betterfoliage.common.util.Double3; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.RenderUtils; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; @@ -138,7 +138,7 @@ public class RenderBlockAOBase extends RenderBlocks { // render block setPassCounters(1); setRenderBoundsFromBlock(block); - ISimpleBlockRenderingHandler handler = Utils.getRenderingHandler(block.getRenderType()); + ISimpleBlockRenderingHandler handler = RenderUtils.getRenderingHandler(block.getRenderType()); if (handler != null) { handler.renderWorldBlock(world, x, y, z, block, block.getRenderType(), this); } else { diff --git a/src/main/java/mods/betterfoliage/client/resource/BlockTextureGenerator.java b/src/main/java/mods/betterfoliage/client/resource/BlockTextureGenerator.java index 584f66b..81b45a3 100644 --- a/src/main/java/mods/betterfoliage/client/resource/BlockTextureGenerator.java +++ b/src/main/java/mods/betterfoliage/client/resource/BlockTextureGenerator.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.Set; import mods.betterfoliage.BetterFoliage; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.ResourceUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.resources.IResource; @@ -47,7 +47,7 @@ public abstract class BlockTextureGenerator implements IResourceManager { if (event.map.getTextureType() != 0) return; blockTextures = event.map; - Map domainManagers = Utils.getDomainResourceManagers(); + Map domainManagers = ResourceUtils.getDomainResourceManagers(); if (domainManagers == null) { BetterFoliage.log.warn("Failed to inject texture generator"); return; @@ -61,7 +61,7 @@ public abstract class BlockTextureGenerator implements IResourceManager { if (event.map.getTextureType() != 0) return; // don't leave a mess - Map domainManagers = Utils.getDomainResourceManagers(); + Map domainManagers = ResourceUtils.getDomainResourceManagers(); if (domainManagers != null) domainManagers.remove(domainName); } diff --git a/src/main/java/mods/betterfoliage/client/resource/LeafGeneratorBase.java b/src/main/java/mods/betterfoliage/client/resource/LeafGeneratorBase.java index 789d8f4..e6e4dc3 100644 --- a/src/main/java/mods/betterfoliage/client/resource/LeafGeneratorBase.java +++ b/src/main/java/mods/betterfoliage/client/resource/LeafGeneratorBase.java @@ -6,7 +6,7 @@ import java.io.IOException; import javax.imageio.ImageIO; import mods.betterfoliage.client.resource.LeafTextureEnumerator.LeafTextureFoundEvent; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.ResourceUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.IResource; import net.minecraft.client.resources.IResourceManager; @@ -58,13 +58,13 @@ public abstract class LeafGeneratorBase extends BlockTextureGenerator { // check for provided texture ResourceLocation handDrawnLocation = new ResourceLocation(nonGeneratedDomain, String.format(handDrawnLocationFormat, originalNoDirs.getResourceDomain(), originalNoDirs.getResourcePath())); - if (Utils.resourceExists(handDrawnLocation)) { + if (ResourceUtils.resourceExists(handDrawnLocation)) { drawnCounter++; return resourceManager.getResource(handDrawnLocation); } // generate our own - if (!Utils.resourceExists(originalWithDirs)) return getMissingResource(); + if (!ResourceUtils.resourceExists(originalWithDirs)) return getMissingResource(); BufferedImage result; try { diff --git a/src/main/java/mods/betterfoliage/client/resource/LeafTextureEnumerator.java b/src/main/java/mods/betterfoliage/client/resource/LeafTextureEnumerator.java index e9bd69f..9b0c7c2 100644 --- a/src/main/java/mods/betterfoliage/client/resource/LeafTextureEnumerator.java +++ b/src/main/java/mods/betterfoliage/client/resource/LeafTextureEnumerator.java @@ -7,7 +7,6 @@ import java.util.Set; import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.BetterFoliageClient; import mods.betterfoliage.common.config.Config; -import mods.betterfoliage.common.util.Utils; import mods.betterfoliage.loader.DeobfHelper; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; @@ -22,6 +21,8 @@ import com.google.common.collect.Sets; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.ReflectionHelper; +import cpw.mods.fml.relauncher.ReflectionHelper.UnableToAccessFieldException; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -83,21 +84,21 @@ public class LeafTextureEnumerator implements IIconRegister { } // enumerate all registered textures, find leaf textures among them - Map mapAtlas = null; - mapAtlas = Utils.getField(blockTextures, DeobfHelper.transformElementSearge("mapRegisteredSprites"), Map.class); - if (mapAtlas == null) mapAtlas = Utils.getField(blockTextures, "mapRegisteredSprites", Map.class); - - if (mapAtlas == null) { - BetterFoliage.log.warn("Failed to reflect texture atlas, textures may be missing"); - } else { - Set foundLeafTextures = Sets.newHashSet(); - for (TextureAtlasSprite icon : mapAtlas.values()) - if (BetterFoliageClient.isLeafTexture(icon)) foundLeafTextures.add(icon); - for (TextureAtlasSprite icon : foundLeafTextures) { - BetterFoliage.log.debug(String.format("Found non-block-registered leaf texture: %s", icon.getIconName())); - MinecraftForge.EVENT_BUS.post(new LeafTextureFoundEvent(blockTextures, icon)); - } - } + try { + Map mapAtlas = ReflectionHelper., TextureMap> getPrivateValue( + TextureMap.class, blockTextures, DeobfHelper.transformElementSearge("mapRegisteredSprites"), "mapRegisteredSprites" + ); + + Set foundLeafTextures = Sets.newHashSet(); + for (TextureAtlasSprite icon : mapAtlas.values()) + if (BetterFoliageClient.isLeafTexture(icon)) foundLeafTextures.add(icon); + for (TextureAtlasSprite icon : foundLeafTextures) { + BetterFoliage.log.debug(String.format("Found non-block-registered leaf texture: %s", icon.getIconName())); + MinecraftForge.EVENT_BUS.post(new LeafTextureFoundEvent(blockTextures, icon)); + } + } catch (UnableToAccessFieldException e) { + BetterFoliage.log.warn("Failed to reflect texture atlas, textures may be missing"); + } } @SubscribeEvent diff --git a/src/main/java/mods/betterfoliage/common/config/Config.java b/src/main/java/mods/betterfoliage/common/config/Config.java index 99434f1..972d1ca 100644 --- a/src/main/java/mods/betterfoliage/common/config/Config.java +++ b/src/main/java/mods/betterfoliage/common/config/Config.java @@ -8,7 +8,7 @@ import mods.betterfoliage.client.BlockMatcher; import mods.betterfoliage.client.gui.AlternateTextBooleanEntry; import mods.betterfoliage.client.gui.BiomeListConfigEntry; import mods.betterfoliage.client.gui.NonVerboseArrayEntry; -import mods.betterfoliage.common.util.Utils; +import mods.betterfoliage.common.util.BiomeUtils; import net.minecraft.client.Minecraft; import net.minecraft.util.ResourceLocation; import net.minecraft.world.biome.BiomeGenBase; @@ -17,9 +17,6 @@ import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import cpw.mods.fml.client.config.IConfigElement; @@ -190,32 +187,10 @@ public class Config { } public static void getDefaultBiomes() { - for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { - if (biome == null) continue; - if (Utils.biomeTempRainFilter(0.4f, null, 0.4f, null).apply(biome)) { - reedBiomeList.add(biome.biomeID); - BiomeListConfigEntry.reedBiomeList.add(biome); - } - if (Utils.biomeClassNameFilter("river", "ocean").apply(biome)) { - algaeBiomeList.add(biome.biomeID); - BiomeListConfigEntry.algaeBiomeList.add(biome); - } - if (Utils.biomeClassNameFilter("river", "ocean", "beach").apply(biome)) { - coralBiomeList.add(biome.biomeID); - BiomeListConfigEntry.coralBiomeList.add(biome); - } - } - } - - protected static List getFilteredBiomeIds(List biomes, Predicate filter) { - return Lists.newArrayList(Collections2.transform( - Collections2.filter(biomes, filter), - new Function() { - public Integer apply(BiomeGenBase input) { - return input.biomeID; - } - } - )); + List biomes = BiomeUtils.getAllBiomes(); + reedBiomeList = BiomeUtils.getFilteredBiomeIds(biomes, BiomeUtils.biomeTempRainFilter(0.4f, null, 0.4f, null)); + algaeBiomeList = BiomeUtils.getFilteredBiomeIds(biomes, BiomeUtils.biomeClassNameFilter("river", "ocean")); + algaeBiomeList = BiomeUtils.getFilteredBiomeIds(biomes, BiomeUtils.biomeClassNameFilter("river", "ocean", "beach")); } @SuppressWarnings("rawtypes") diff --git a/src/main/java/mods/betterfoliage/common/util/BiomeUtils.java b/src/main/java/mods/betterfoliage/common/util/BiomeUtils.java new file mode 100644 index 0000000..4eff30a --- /dev/null +++ b/src/main/java/mods/betterfoliage/common/util/BiomeUtils.java @@ -0,0 +1,87 @@ +package mods.betterfoliage.common.util; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.minecraft.world.biome.BiomeGenBase; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; + + +public class BiomeUtils { + + /** Hide constructor */ + private BiomeUtils() {} + + public static List getAllBiomes() { + List biomes = Lists.newArrayList(Collections2.filter(Arrays.asList(BiomeGenBase.getBiomeGenArray()), Predicates.notNull())); + Collections.sort(biomes, new Comparator() { + @Override + public int compare(BiomeGenBase o1, BiomeGenBase o2) { + return o1.biomeName.compareTo(o2.biomeName); + } + }); + return biomes; + } + + public static Predicate biomeIdFilter(final List biomeIdList) { + return new Predicate() { + public boolean apply(BiomeGenBase biome) { + return biomeIdList.contains(biome.biomeID); + } + }; + } + + public static Function biomeIdTransform() { + return new Function() { + public Integer apply(BiomeGenBase input) { + return input.biomeID; + } + }; + } + + public static Predicate biomeTempRainFilter(final Float minTemp, final Float maxTemp, final Float minRain, final Float maxRain) { + return new Predicate() { + public boolean apply(BiomeGenBase biome) { + if (minTemp != null && biome.temperature < minTemp) return false; + if (maxTemp != null && biome.temperature > maxTemp) return false; + if (minRain != null && biome.rainfall < minRain) return false; + if (maxRain != null && biome.rainfall > maxRain) return false; + return true; + } + }; + } + + public static Predicate biomeClassFilter(final Class... classList) { + return new Predicate() { + public boolean apply(BiomeGenBase biome) { + for (Class clazz : classList) + if (clazz.isAssignableFrom(biome.getClass()) || clazz.equals(biome.getClass())) + return true; + return false; + } + }; + } + + public static Predicate biomeClassNameFilter(final String... names) { + return new Predicate() { + public boolean apply(BiomeGenBase biome) { + for (String name : names) if (biome.getClass().getName().toLowerCase().contains(name.toLowerCase())) return true; + return false; + } + }; + } + + public static List getFilteredBiomeIds(Collection biomes, Predicate filter) { + return Lists.newArrayList(Collections2.transform(Collections2.filter(biomes, filter), biomeIdTransform())); + } + + +} diff --git a/src/main/java/mods/betterfoliage/common/util/RenderUtils.java b/src/main/java/mods/betterfoliage/common/util/RenderUtils.java new file mode 100644 index 0000000..da8f809 --- /dev/null +++ b/src/main/java/mods/betterfoliage/common/util/RenderUtils.java @@ -0,0 +1,45 @@ +package mods.betterfoliage.common.util; + +import java.lang.reflect.Field; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import net.minecraft.util.EnumChatFormatting; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; + + +public class RenderUtils { + + /** Hide constructor */ + private RenderUtils() {} + + /** Retrieve a specific rendering handler from the registry + * @param renderType render type of block + * @return {@link ISimpleBlockRenderingHandler} if defined, null otherwise + */ + @SuppressWarnings("unchecked") + public static ISimpleBlockRenderingHandler getRenderingHandler(int renderType) { + try { + Field field = RenderingRegistry.class.getDeclaredField("INSTANCE"); + field.setAccessible(true); + RenderingRegistry inst = (RenderingRegistry) field.get(null); + field = RenderingRegistry.class.getDeclaredField("blockRenderers"); + field.setAccessible(true); + return ((Map) field.get(inst)).get(renderType); + } catch (Exception e) { + return null; + } + } + + public static void stripTooltipDefaultText(List tooltip) { + boolean defaultRows = false; + Iterator iter = tooltip.iterator(); + while(iter.hasNext()) { + if (iter.next().startsWith(EnumChatFormatting.AQUA.toString())) defaultRows = true; + if (defaultRows) iter.remove(); + } + } + +} diff --git a/src/main/java/mods/betterfoliage/common/util/ResourceUtils.java b/src/main/java/mods/betterfoliage/common/util/ResourceUtils.java new file mode 100644 index 0000000..7e801d2 --- /dev/null +++ b/src/main/java/mods/betterfoliage/common/util/ResourceUtils.java @@ -0,0 +1,72 @@ +package mods.betterfoliage.common.util; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Map; + +import mods.betterfoliage.loader.DeobfHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.SimpleReloadableResourceManager; +import net.minecraft.util.ResourceLocation; + +import com.google.common.base.Charsets; + +import cpw.mods.fml.relauncher.ReflectionHelper; +import cpw.mods.fml.relauncher.ReflectionHelper.UnableToAccessFieldException; + +public class ResourceUtils { + + /** Hide constructor */ + private ResourceUtils() {} + + /** + * @return (({@link SimpleReloadableResourceManager}) Minecraft.getMinecraft().getResourceManager()).domainResourceManagers + */ + public static Map getDomainResourceManagers() { + try { + return ReflectionHelper., SimpleReloadableResourceManager> getPrivateValue( + SimpleReloadableResourceManager.class, (SimpleReloadableResourceManager) Minecraft.getMinecraft().getResourceManager(), DeobfHelper.transformElementSearge("domainResourceManagers"), "domainResourceManagers" + ); + } catch (UnableToAccessFieldException e) { + return null; + } + } + + /** Check for the existence of a {@link IResource} + * @param resourceLocation + * @return true if the resource exists + */ + public static boolean resourceExists(ResourceLocation resourceLocation) { + try { + IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation); + if (resource != null) return true; + } catch (IOException e) { + } + return false; + } + + /** Copy a text file from a resource to the filesystem + * @param resourceLocation resource location of text file + * @param target target file + * @throws IOException + */ + public static void copyFromTextResource(ResourceLocation resourceLocation, File target) throws IOException { + IResource defaults = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation); + BufferedReader reader = new BufferedReader(new InputStreamReader(defaults.getInputStream(), Charsets.UTF_8)); + FileWriter writer = new FileWriter(target); + + String line = reader.readLine(); + while(line != null) { + writer.write(line + System.lineSeparator()); + line = reader.readLine(); + } + + reader.close(); + writer.close(); + } +} diff --git a/src/main/java/mods/betterfoliage/common/util/Utils.java b/src/main/java/mods/betterfoliage/common/util/Utils.java deleted file mode 100644 index bd165b2..0000000 --- a/src/main/java/mods/betterfoliage/common/util/Utils.java +++ /dev/null @@ -1,157 +0,0 @@ -package mods.betterfoliage.common.util; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.reflect.Field; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import mods.betterfoliage.loader.DeobfHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.IResource; -import net.minecraft.client.resources.IResourceManager; -import net.minecraft.client.resources.SimpleReloadableResourceManager; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.biome.BiomeGenBase; - -import com.google.common.base.Charsets; -import com.google.common.base.Predicate; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; - -public class Utils { - - /** Hide constructor */ - private Utils() {} - - /** - * @return (({@link SimpleReloadableResourceManager}) Minecraft.getMinecraft().getResourceManager()).domainResourceManagers - */ - @SuppressWarnings("unchecked") - public static Map getDomainResourceManagers() { - IResourceManager manager = Minecraft.getMinecraft().getResourceManager(); - Map result = getField(manager, DeobfHelper.transformElementSearge("domainResourceManagers"), Map.class); - if (result == null) result = getField(manager, "domainResourceManagers", Map.class); - return result; - } - - @SuppressWarnings("unchecked") - public static T getField(Object target, String fieldName, Class resultClass) { - try { - Field field = target.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - return (T) field.get(target); - } catch (Exception e) { - return null; - } - } - - @SuppressWarnings("unchecked") - public static T getStaticField(Class clazz, String fieldName, Class resultClass) { - try { - Field field = clazz.getDeclaredField(fieldName); - field.setAccessible(true); - return (T) field.get(null); - } catch (Exception e) { - return null; - } - } - - /** Retrieve a specific rendering handler from the registry - * @param renderType render type of block - * @return {@link ISimpleBlockRenderingHandler} if defined, null otherwise - */ - @SuppressWarnings("unchecked") - public static ISimpleBlockRenderingHandler getRenderingHandler(int renderType) { - try { - Field field = RenderingRegistry.class.getDeclaredField("INSTANCE"); - field.setAccessible(true); - RenderingRegistry inst = (RenderingRegistry) field.get(null); - field = RenderingRegistry.class.getDeclaredField("blockRenderers"); - field.setAccessible(true); - return ((Map) field.get(inst)).get(renderType); - } catch (Exception e) { - return null; - } - } - - /** Check for the existence of a {@link IResource} - * @param resourceLocation - * @return true if the resource exists - */ - public static boolean resourceExists(ResourceLocation resourceLocation) { - try { - IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation); - if (resource != null) return true; - } catch (IOException e) { - } - return false; - } - - /** Copy a text file from a resource to the filesystem - * @param resourceLocation resource location of text file - * @param target target file - * @throws IOException - */ - public static void copyFromTextResource(ResourceLocation resourceLocation, File target) throws IOException { - IResource defaults = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation); - BufferedReader reader = new BufferedReader(new InputStreamReader(defaults.getInputStream(), Charsets.UTF_8)); - FileWriter writer = new FileWriter(target); - - String line = reader.readLine(); - while(line != null) { - writer.write(line + System.lineSeparator()); - line = reader.readLine(); - } - - reader.close(); - writer.close(); - } - - public static void stripTooltipDefaultText(List tooltip) { - boolean defaultRows = false; - Iterator iter = tooltip.iterator(); - while(iter.hasNext()) { - if (iter.next().startsWith(EnumChatFormatting.AQUA.toString())) defaultRows = true; - if (defaultRows) iter.remove(); - } - } - - public static Predicate biomeTempRainFilter(final Float minTemp, final Float maxTemp, final Float minRain, final Float maxRain) { - return new Predicate() { - public boolean apply(BiomeGenBase biome) { - if (minTemp != null && biome.temperature < minTemp) return false; - if (maxTemp != null && biome.temperature > maxTemp) return false; - if (minRain != null && biome.rainfall < minRain) return false; - if (maxRain != null && biome.rainfall > maxRain) return false; - return true; - } - }; - } - - public static Predicate biomeClassFilter(final Class... classList) { - return new Predicate() { - public boolean apply(BiomeGenBase biome) { - for (Class clazz : classList) - if (clazz.isAssignableFrom(biome.getClass()) || clazz.equals(biome.getClass())) - return true; - return false; - } - }; - } - - public static Predicate biomeClassNameFilter(final String... names) { - return new Predicate() { - public boolean apply(BiomeGenBase biome) { - for (String name : names) if (biome.getClass().getName().toLowerCase().contains(name.toLowerCase())) return true; - return false; - } - }; - } -}