From 5fbe2ff16f64e832f944aae703819ffe404a85ad Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Sun, 6 Jul 2014 21:49:46 +0200 Subject: [PATCH 1/9] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3a532e26..efccda39 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,6 @@ More info: http://www.minecraftforum.net/topic/2776217-better-foliage/ Download ======== -[BetterFoliage 0.9.3-beta] (http://goo.gl/Rm1QRx) (MC 1.7.2) +[BetterFoliage 0.9.4-beta] (http://goo.gl/pNBE23) (MC 1.7.2) -[BetterFoliage 0.9.3-beta] (http://goo.gl/BFFr6w) (MC 1.7.10) +[BetterFoliage 0.9.4-beta] (http://goo.gl/ywT6Xg) (MC 1.7.10) From aee6e5caca23a3d348d221b22360667cf65c0bd3 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 11 Jul 2014 14:42:51 +0200 Subject: [PATCH 2/9] solve issue with null passed into ClassTransformer --- src/main/java/mods/betterfoliage/loader/EZTransformerBase.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/mods/betterfoliage/loader/EZTransformerBase.java b/src/main/java/mods/betterfoliage/loader/EZTransformerBase.java index dba9c7b2..0ca66cdf 100644 --- a/src/main/java/mods/betterfoliage/loader/EZTransformerBase.java +++ b/src/main/java/mods/betterfoliage/loader/EZTransformerBase.java @@ -42,6 +42,9 @@ public static interface IInstructionMatch { protected Logger logger = LogManager.getLogger(getClass().getSimpleName()); public byte[] transform(String name, String transformedName, byte[] basicClass) { + // ??? + if (basicClass == null) return null; + // read class ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(basicClass); From 32c4dc60358b7b59b8e096d91b44af95f6c6da13 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 11 Jul 2014 15:13:38 +0200 Subject: [PATCH 3/9] new feature: use pre-drawn leaf textures if available some refactoring --- .../client/render/FakeRenderBlockAOBase.java | 3 +++ .../client/render/IRenderBlockDecorator.java | 3 +++ .../betterfoliage/client/render/IconSet.java | 18 +++++-------- .../render/impl/RenderBlockBetterLeaves.java | 4 +-- .../render/impl/RenderBlockBetterReed.java | 3 +++ .../resource/BlockTextureGenerator.java | 9 ++++--- .../client/resource/LeafTextureGenerator.java | 25 ++++++++++++++++--- .../util/{ReflectionUtil.java => Utils.java} | 16 ++++++++++-- 8 files changed, 58 insertions(+), 23 deletions(-) rename src/main/java/mods/betterfoliage/common/util/{ReflectionUtil.java => Utils.java} (80%) diff --git a/src/main/java/mods/betterfoliage/client/render/FakeRenderBlockAOBase.java b/src/main/java/mods/betterfoliage/client/render/FakeRenderBlockAOBase.java index e17d302b..207c5711 100644 --- a/src/main/java/mods/betterfoliage/client/render/FakeRenderBlockAOBase.java +++ b/src/main/java/mods/betterfoliage/client/render/FakeRenderBlockAOBase.java @@ -1,11 +1,14 @@ package mods.betterfoliage.client.render; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.util.IIcon; /** Same as {@link RenderBlockAOBase}, but does not actually render anything. * @author octarine-noise */ +@SideOnly(Side.CLIENT) public class FakeRenderBlockAOBase extends RenderBlockAOBase { @Override diff --git a/src/main/java/mods/betterfoliage/client/render/IRenderBlockDecorator.java b/src/main/java/mods/betterfoliage/client/render/IRenderBlockDecorator.java index 2fd71a4c..74012351 100644 --- a/src/main/java/mods/betterfoliage/client/render/IRenderBlockDecorator.java +++ b/src/main/java/mods/betterfoliage/client/render/IRenderBlockDecorator.java @@ -1,9 +1,12 @@ package mods.betterfoliage.client.render; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.world.IBlockAccess; +@SideOnly(Side.CLIENT) public interface IRenderBlockDecorator extends ISimpleBlockRenderingHandler { public void init(); diff --git a/src/main/java/mods/betterfoliage/client/render/IconSet.java b/src/main/java/mods/betterfoliage/client/render/IconSet.java index 5fe36aee..a9076e51 100644 --- a/src/main/java/mods/betterfoliage/client/render/IconSet.java +++ b/src/main/java/mods/betterfoliage/client/render/IconSet.java @@ -1,17 +1,16 @@ package mods.betterfoliage.client.render; -import java.io.IOException; - -import net.minecraft.client.Minecraft; +import mods.betterfoliage.common.util.Utils; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.resources.IResource; -import net.minecraft.client.resources.IResourceManager; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; /** Loads an indexed set of textures * @author octarine-noise */ +@SideOnly(Side.CLIENT) public class IconSet { /** Icon array */ @@ -33,18 +32,13 @@ public IconSet(String domain, String path) { public void registerIcons(IIconRegister register) { numLoaded = 0; - IResourceManager manager = Minecraft.getMinecraft().getResourceManager(); - for (int idx = 0; idx < 16; idx++) { icons[idx] = null; // 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); - try { - IResource resource = manager.getResource(new ResourceLocation(resolvedDomain, resolvedPath)); - if (resource != null) icons[numLoaded++] = register.registerIcon(domain + ":" + String.format(path, idx)); - } catch (IOException e) { - } + if (Utils.resourceExists(new ResourceLocation(resolvedDomain, resolvedPath))) + icons[numLoaded++] = register.registerIcon(domain + ":" + String.format(path, idx)); } } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLeaves.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLeaves.java index 1cbe7906..d9d9f3c3 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLeaves.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLeaves.java @@ -5,7 +5,7 @@ import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.RenderBlockAOBase; import mods.betterfoliage.common.util.Double3; -import mods.betterfoliage.common.util.ReflectionUtil; +import mods.betterfoliage.common.util.Utils; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; @@ -37,7 +37,7 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b if (block.getRenderType() == 0) { renderStandardBlock(block, x, y, z); } else { - ISimpleBlockRenderingHandler handler = ReflectionUtil.getRenderingHandler(block.getRenderType()); + ISimpleBlockRenderingHandler handler = Utils.getRenderingHandler(block.getRenderType()); handler.renderWorldBlock(world, x, y, z, block, block.getRenderType(), this); } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterReed.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterReed.java index 15b20832..780559c3 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterReed.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterReed.java @@ -20,7 +20,10 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.world.WorldEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +@SideOnly(Side.CLIENT) public class RenderBlockBetterReed extends RenderBlockAOBase implements IRenderBlockDecorator { public IconSet reedBottomIcons = new IconSet("bf_reed_bottom", "bettergrassandleaves:better_reed_%d"); diff --git a/src/main/java/mods/betterfoliage/client/resource/BlockTextureGenerator.java b/src/main/java/mods/betterfoliage/client/resource/BlockTextureGenerator.java index c937e3c5..5f730f02 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.Set; import mods.betterfoliage.BetterFoliage; -import mods.betterfoliage.common.util.ReflectionUtil; +import mods.betterfoliage.common.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.resources.IResource; @@ -18,7 +18,10 @@ import com.google.common.collect.ImmutableSet; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +@SideOnly(Side.CLIENT) public abstract class BlockTextureGenerator implements IResourceManager { /** Resource domain name of generated textures */ @@ -48,7 +51,7 @@ public void handleTextureReload(TextureStitchEvent.Pre event) { blockTextures = event.map; counter = 0; - Map domainManagers = ReflectionUtil.getDomainResourceManagers(); + Map domainManagers = Utils.getDomainResourceManagers(); if (domainManagers == null) { BetterFoliage.log.warn("Failed to inject texture generator"); return; @@ -64,7 +67,7 @@ public void endTextureReload(TextureStitchEvent.Post event) { if (event.map.getTextureType() != 0) return; // don't leave a mess - Map domainManagers = ReflectionUtil.getDomainResourceManagers(); + Map domainManagers = Utils.getDomainResourceManagers(); if (domainManagers != null) domainManagers.remove(domainName); onStitchEnd(event); diff --git a/src/main/java/mods/betterfoliage/client/resource/LeafTextureGenerator.java b/src/main/java/mods/betterfoliage/client/resource/LeafTextureGenerator.java index 76b24791..a36cd450 100644 --- a/src/main/java/mods/betterfoliage/client/resource/LeafTextureGenerator.java +++ b/src/main/java/mods/betterfoliage/client/resource/LeafTextureGenerator.java @@ -9,8 +9,9 @@ import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.BetterFoliageClient; import mods.betterfoliage.common.util.DeobfNames; -import mods.betterfoliage.common.util.ReflectionUtil; +import mods.betterfoliage.common.util.Utils; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.IResource; @@ -31,6 +32,10 @@ @SideOnly(Side.CLIENT) public class LeafTextureGenerator extends BlockTextureGenerator implements IIconRegister { + public String nonGeneratedDomain = "betterfoliage"; + + public int nonGeneratedCounter = 0; + public LeafTextureGenerator() { super("bf_leaves_autogen", new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png")); } @@ -39,7 +44,17 @@ public LeafTextureGenerator() { public List recognizers = Lists.newLinkedList(); public IResource getResource(ResourceLocation resourceLocation) throws IOException { - LeafTextureResource result = new LeafTextureResource(unwrapResource(resourceLocation), getMissingResource()); + ResourceLocation original = unwrapResource(resourceLocation); + + // check for provided texture + ResourceLocation handDrawnLocation = new ResourceLocation(nonGeneratedDomain, String.format("textures/blocks/%s/%s", original.getResourceDomain(), original.getResourcePath())); + if (Utils.resourceExists(handDrawnLocation)) { + nonGeneratedCounter++; + return Minecraft.getMinecraft().getResourceManager().getResource(handDrawnLocation); + } + + // generate our own + LeafTextureResource result = new LeafTextureResource(original, getMissingResource()); if (result.data != null) counter++; return result; } @@ -62,6 +77,7 @@ public IIcon registerIcon(String resourceLocation) { @SuppressWarnings("unchecked") @Override public void onStitchStart(Pre event) { + nonGeneratedCounter = 0; BetterFoliage.log.info("Reloading leaf textures"); // register simple block textures @@ -76,8 +92,8 @@ public void onStitchStart(Pre event) { // enumerate all registered textures, find leaf textures among them Map mapAtlas = null; - mapAtlas = ReflectionUtil.getField(blockTextures, DeobfNames.TM_MRS_SRG, Map.class); - if (mapAtlas == null) mapAtlas = ReflectionUtil.getField(blockTextures, DeobfNames.TM_MRS_MCP, Map.class); + mapAtlas = Utils.getField(blockTextures, DeobfNames.TM_MRS_SRG, Map.class); + if (mapAtlas == null) mapAtlas = Utils.getField(blockTextures, DeobfNames.TM_MRS_MCP, Map.class); if (mapAtlas == null) { BetterFoliage.log.warn("Failed to reflect texture atlas, textures may be missing"); } else { @@ -95,6 +111,7 @@ public void onStitchStart(Pre event) { @Override public void onStitchEnd(Post event) { + BetterFoliage.log.info(String.format("Found %d pre-drawn leaf textures", nonGeneratedCounter)); BetterFoliage.log.info(String.format("Generated %d leaf textures", counter)); } diff --git a/src/main/java/mods/betterfoliage/common/util/ReflectionUtil.java b/src/main/java/mods/betterfoliage/common/util/Utils.java similarity index 80% rename from src/main/java/mods/betterfoliage/common/util/ReflectionUtil.java rename to src/main/java/mods/betterfoliage/common/util/Utils.java index c46319e6..9fb87355 100644 --- a/src/main/java/mods/betterfoliage/common/util/ReflectionUtil.java +++ b/src/main/java/mods/betterfoliage/common/util/Utils.java @@ -1,16 +1,19 @@ package mods.betterfoliage.common.util; +import java.io.IOException; import java.lang.reflect.Field; import java.util.Map; import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IResource; import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; -public class ReflectionUtil { +public class Utils { - private ReflectionUtil() {} + private Utils() {} @SuppressWarnings("unchecked") public static Map getDomainResourceManagers() { @@ -55,4 +58,13 @@ public static ISimpleBlockRenderingHandler getRenderingHandler(int renderType) { return null; } } + + public static boolean resourceExists(ResourceLocation resourceLocation) { + try { + IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation); + if (resource != null) return true; + } catch (IOException e) { + } + return false; + } } From fad662443d6d844467f84c98ec70c775a8ddaf59 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 11 Jul 2014 15:34:23 +0200 Subject: [PATCH 4/9] id cache clearing derp --- src/main/java/mods/betterfoliage/client/BlockMatcher.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/mods/betterfoliage/client/BlockMatcher.java b/src/main/java/mods/betterfoliage/client/BlockMatcher.java index cebd10b3..f03aee5b 100644 --- a/src/main/java/mods/betterfoliage/client/BlockMatcher.java +++ b/src/main/java/mods/betterfoliage/client/BlockMatcher.java @@ -106,6 +106,7 @@ public void saveDefaults(File file) { @SuppressWarnings("unchecked") @SubscribeEvent public void handleWorldLoad(WorldEvent.Load event) { + blockIDs.clear(); Iterator iter = Block.blockRegistry.iterator(); while (iter.hasNext()) { Block block = iter.next(); From d38f556bde92512db2c73592a4a4f7343a626038 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 11 Jul 2014 19:26:10 +0200 Subject: [PATCH 5/9] actually use random seed --- .../mods/betterfoliage/client/render/RenderBlockAOBase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java b/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java index 52c1523f..e4c65bd3 100644 --- a/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java +++ b/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java @@ -104,8 +104,8 @@ protected int getSemiRandomFromPos(double x, double y, double z, int seed) { long lx = MathHelper.floor_double(x); long ly = MathHelper.floor_double(y); long lz = MathHelper.floor_double(z); - long value = (lx * lx + ly * ly + lz * lz + lx * ly + ly * lz + lz * lx) & 63; - value = (3 * lx * value + 5 * ly * value + 7 * lz * value) & 63; + long value = (lx * lx + ly * ly + lz * lz + lx * ly + ly * lz + lz * lx + seed * seed) & 63; + value = (3 * lx * value + 5 * ly * value + 7 * lz * value + 11 * seed) & 63; return (int) value; } From f236ef64ad674c8ce8641bb2969713a068d9300f Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 11 Jul 2014 19:28:06 +0200 Subject: [PATCH 6/9] missing i18n for some strings --- .../mods/betterfoliage/client/gui/ConfigGuiGrass.java | 3 ++- .../mods/betterfoliage/client/gui/ConfigGuiLeaves.java | 3 ++- .../mods/betterfoliage/client/gui/ConfigGuiLilypad.java | 3 ++- .../mods/betterfoliage/client/gui/ConfigGuiMain.java | 3 ++- src/main/resources/assets/betterfoliage/lang/en_US.lang | 9 ++++++--- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java index f9a31ca7..637e81dd 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java @@ -4,6 +4,7 @@ import mods.betterfoliage.client.gui.widget.OptionDoubleWidget; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; import cpw.mods.fml.client.FMLClientHandler; public class ConfigGuiGrass extends ConfigGuiScreenBase { @@ -20,7 +21,7 @@ public ConfigGuiGrass(GuiScreen parent) { @SuppressWarnings("unchecked") @Override public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, "Close")); + buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, I18n.format("message.betterfoliage.back"))); } @Override diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java index 4489dfc9..0988e97a 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java @@ -4,6 +4,7 @@ import mods.betterfoliage.client.gui.widget.OptionDoubleWidget; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; import cpw.mods.fml.client.FMLClientHandler; public class ConfigGuiLeaves extends ConfigGuiScreenBase { @@ -21,7 +22,7 @@ public ConfigGuiLeaves(GuiScreen parent) { @SuppressWarnings("unchecked") @Override public void addButtons(int x, int y) { - buttonList.add(new GuiButton(Button.CLOSE.ordinal(), x - 50, y + 50, 100, 20, "Close")); + buttonList.add(new GuiButton(Button.CLOSE.ordinal(), x - 50, y + 50, 100, 20, I18n.format("message.betterfoliage.back"))); buttonList.add(new GuiButton(Button.LEAVES_OFFSET_MODE.ordinal(), x - 100, y - 40, 200, 20, "")); } diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java index bac32c11..4670b5d0 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java @@ -5,6 +5,7 @@ import mods.betterfoliage.client.gui.widget.OptionIntegerWidget; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; import cpw.mods.fml.client.FMLClientHandler; public class ConfigGuiLilypad extends ConfigGuiScreenBase { @@ -19,7 +20,7 @@ public ConfigGuiLilypad(GuiScreen parent) { @SuppressWarnings("unchecked") @Override public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, "Close")); + buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, I18n.format("message.betterfoliage.back"))); } @Override diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java index bcf835b9..384175a3 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java @@ -27,7 +27,8 @@ public ConfigGuiMain(GuiScreen parent) { @SuppressWarnings("unchecked") @Override protected void addButtons(int x, int y) { - buttonList.add(new GuiButton(Button.CLOSE.ordinal(), x - 50, y + 80, 100, 20, "Close")); + buttonList.add(new GuiButton(Button.CLOSE.ordinal(), x - 50, y + 80, 100, 20, I18n.format("message.betterfoliage.close"))); + buttonList.add(new GuiButton(Button.TOGGLE_LEAVES.ordinal(), x - 100, y - 100, 150, 20, "")); buttonList.add(new GuiButton(Button.CONFIG_LEAVES.ordinal(), x + 60, y - 100, 40, 20, I18n.format("message.betterfoliage.config"))); diff --git a/src/main/resources/assets/betterfoliage/lang/en_US.lang b/src/main/resources/assets/betterfoliage/lang/en_US.lang index f1a46c49..c61e48f4 100644 --- a/src/main/resources/assets/betterfoliage/lang/en_US.lang +++ b/src/main/resources/assets/betterfoliage/lang/en_US.lang @@ -4,12 +4,15 @@ message.betterfoliage.optionOn=ON message.betterfoliage.optionOff=OFF message.betterfoliage.config=Config +message.betterfoliage.back=Back message.betterfoliage.close=Close -message.betterfoliage.betterLeaves=Better Leaves: %s -message.betterfoliage.betterGrass=Better Grass: %s + +message.betterfoliage.betterLeaves=Extra Leaves: %s +message.betterfoliage.betterGrass=Short Grass: %s message.betterfoliage.betterCactus=Better Cactus: %s message.betterfoliage.betterLilypad=Better Lilypad: %s -message.betterfoliage.betterReed=Better Reeds: %s +message.betterfoliage.betterReed=Reeds: %s +message.betterfoliage.betterAlgae=Algae: %s message.betterfoliage.size=Size message.betterfoliage.hOffset=H.Offset From c72e93aedf2f1270a61bf2cf7688ce1cc8281293 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 11 Jul 2014 19:28:26 +0200 Subject: [PATCH 7/9] new feature: algae --- .../client/BetterFoliageClient.java | 2 + .../client/gui/ConfigGuiAlgae.java | 36 +++++++++ .../client/gui/ConfigGuiMain.java | 9 ++- .../client/gui/ConfigGuiReed.java | 3 +- .../render/impl/RenderBlockBetterAlgae.java | 78 +++++++++++++++++++ .../common/config/BetterFoliageConfig.java | 18 +++++ .../assets/betterfoliage/lang/en_US.lang | 4 +- src/main/resources/mcmod.info | 2 +- 8 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java create mode 100644 src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java diff --git a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java index 5ec0e80e..7d94953e 100644 --- a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java +++ b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java @@ -6,6 +6,7 @@ import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.render.IRenderBlockDecorator; +import mods.betterfoliage.client.render.impl.RenderBlockBetterAlgae; import mods.betterfoliage.client.render.impl.RenderBlockBetterCactus; import mods.betterfoliage.client.render.impl.RenderBlockBetterGrass; import mods.betterfoliage.client.render.impl.RenderBlockBetterLeaves; @@ -52,6 +53,7 @@ public static void preInit() { registerRenderer(new RenderBlockBetterCactus()); registerRenderer(new RenderBlockBetterLilypad()); registerRenderer(new RenderBlockBetterReed()); + registerRenderer(new RenderBlockBetterAlgae()); leaves = new BlockMatcher(BlockLeavesBase.class.getName(), "forestry.arboriculture.gadgets.BlockLeaves", diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java new file mode 100644 index 00000000..f6595a0b --- /dev/null +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java @@ -0,0 +1,36 @@ +package mods.betterfoliage.client.gui; + +import mods.betterfoliage.BetterFoliage; +import mods.betterfoliage.client.gui.widget.OptionDoubleWidget; +import mods.betterfoliage.client.gui.widget.OptionIntegerWidget; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import cpw.mods.fml.client.FMLClientHandler; + +public class ConfigGuiAlgae extends ConfigGuiScreenBase { + + public ConfigGuiAlgae(GuiScreen parent) { + super(parent); + int id = 10; + widgets.add(new OptionDoubleWidget(BetterFoliage.config.algaeHOffset, -100, -70, 200, 50, id++, id++, "message.betterfoliage.hOffset", "%.3f")); + widgets.add(new OptionDoubleWidget(BetterFoliage.config.algaeSize, -100, -40, 200, 50, id++, id++, "message.betterfoliage.size", "%.2f")); + widgets.add(new OptionDoubleWidget(BetterFoliage.config.algaeHeightMin, -100, -10, 200, 50, id++, id++, "message.betterfoliage.minHeight", "%.2f")); + widgets.add(new OptionDoubleWidget(BetterFoliage.config.algaeHeightMax, -100, 20, 200, 50, id++, id++, "message.betterfoliage.maxHeight", "%.2f")); + widgets.add(new OptionIntegerWidget(BetterFoliage.config.algaeChance, -100, 50, 200, 50, id++, id++, "message.betterfoliage.algaeChance")); + } + + @SuppressWarnings("unchecked") + @Override + public void addButtons(int x, int y) { + buttonList.add(new GuiButton(0, x - 50, y + 100, 100, 20, I18n.format("message.betterfoliage.back"))); + } + + @Override + protected void onButtonPress(int id) { + if (id == 0) FMLClientHandler.instance().showGuiScreen(parent); + + if (BetterFoliage.config.algaeHeightMin.value > BetterFoliage.config.algaeHeightMax.value) BetterFoliage.config.algaeHeightMin.value = BetterFoliage.config.algaeHeightMax.value; + } + +} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java index 384175a3..e95e4b94 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java @@ -17,7 +17,8 @@ public enum Button {CLOSE, TOGGLE_GRASS, CONFIG_GRASS, TOGGLE_CACTUS, CONFIG_CACTUS, TOGGLE_LILYPAD, CONFIG_LILYPAD, - TOGGLE_REED, CONFIG_REED} + TOGGLE_REED, CONFIG_REED, + TOGGLE_ALGAE, CONFIG_ALGAE} public ConfigGuiMain(GuiScreen parent) { super(parent); @@ -43,6 +44,9 @@ protected void addButtons(int x, int y) { buttonList.add(new GuiButton(Button.TOGGLE_REED.ordinal(), x - 100, y + 20, 150, 20, "")); buttonList.add(new GuiButton(Button.CONFIG_REED.ordinal(), x + 60, y + 20, 40, 20, I18n.format("message.betterfoliage.config"))); + + buttonList.add(new GuiButton(Button.TOGGLE_ALGAE.ordinal(), x - 100, y + 50, 150, 20, "")); + buttonList.add(new GuiButton(Button.CONFIG_ALGAE.ordinal(), x + 60, y + 50, 40, 20, I18n.format("message.betterfoliage.config"))); } protected void updateButtons() { @@ -51,6 +55,7 @@ protected void updateButtons() { setButtonOptionBoolean(Button.TOGGLE_CACTUS.ordinal(), "message.betterfoliage.betterCactus", BetterFoliage.config.cactusEnabled); setButtonOptionBoolean(Button.TOGGLE_LILYPAD.ordinal(), "message.betterfoliage.betterLilypad", BetterFoliage.config.lilypadEnabled); setButtonOptionBoolean(Button.TOGGLE_REED.ordinal(), "message.betterfoliage.betterReed", BetterFoliage.config.reedEnabled); + setButtonOptionBoolean(Button.TOGGLE_ALGAE.ordinal(), "message.betterfoliage.betterAlgae", BetterFoliage.config.algaeEnabled); ((GuiButton) buttonList.get(Button.CONFIG_CACTUS.ordinal())).enabled = false; } @@ -66,11 +71,13 @@ protected void onButtonPress(int id) { if (id == Button.TOGGLE_CACTUS.ordinal()) BetterFoliage.config.cactusEnabled = !BetterFoliage.config.cactusEnabled; if (id == Button.TOGGLE_LILYPAD.ordinal()) BetterFoliage.config.lilypadEnabled = !BetterFoliage.config.lilypadEnabled; if (id == Button.TOGGLE_REED.ordinal()) BetterFoliage.config.reedEnabled = !BetterFoliage.config.reedEnabled; + if (id == Button.TOGGLE_ALGAE.ordinal()) BetterFoliage.config.algaeEnabled = !BetterFoliage.config.algaeEnabled; if (id== Button.CONFIG_LEAVES.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiLeaves(this)); if (id== Button.CONFIG_GRASS.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiGrass(this)); if (id== Button.CONFIG_LILYPAD.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiLilypad(this)); if (id== Button.CONFIG_REED.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiReed(this)); + if (id== Button.CONFIG_ALGAE.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiAlgae(this)); } } diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java index aae6f364..a2fb98b2 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java @@ -5,6 +5,7 @@ import mods.betterfoliage.client.gui.widget.OptionIntegerWidget; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; import cpw.mods.fml.client.FMLClientHandler; public class ConfigGuiReed extends ConfigGuiScreenBase { @@ -21,7 +22,7 @@ public ConfigGuiReed(GuiScreen parent) { @SuppressWarnings("unchecked") @Override public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, "Close")); + buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, I18n.format("message.betterfoliage.back"))); } @Override diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java new file mode 100644 index 00000000..8e6ceb39 --- /dev/null +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java @@ -0,0 +1,78 @@ +package mods.betterfoliage.client.render.impl; + +import java.util.Random; + +import mods.betterfoliage.BetterFoliage; +import mods.betterfoliage.client.render.IRenderBlockDecorator; +import mods.betterfoliage.client.render.IconSet; +import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.util.Double3; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.gen.NoiseGeneratorSimplex; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.world.WorldEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderBlockBetterAlgae extends RenderBlockAOBase implements IRenderBlockDecorator { + + public IconSet algaeIcons = new IconSet("bettergrassandleaves", "better_algae_%d"); + public NoiseGeneratorSimplex noise; + + public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { + if (!BetterFoliage.config.algaeEnabled) return false; + if (y >= 254 || !(block instanceof BlockDirt)) return false; + if (blockAccess.getBlock(x, y + 1, z).getMaterial() != Material.water) return false; + if (blockAccess.getBlock(x, y + 2, z).getMaterial() != Material.water) return false; + if (blockAccess.getBiomeGenForCoords(x, z).temperature < 0.4f) return false; + int terrainVariation = MathHelper.floor_double((noise.func_151605_a(x, z) + 1.0) * 32.0); + return terrainVariation < BetterFoliage.config.algaeChance.value; + } + + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + // store world for later use + blockAccess = world; + + // render grass block + setPassCounters(1); + setRenderBoundsFromBlock(block); + renderStandardBlock(block, x, y, z); + + int variation = getSemiRandomFromPos(x, y, z, 0); + int heightVariation = getSemiRandomFromPos(x, y, z, 1); + + IIcon renderIcon = algaeIcons.get(variation); + if (renderIcon == null) return true; + + double scale = BetterFoliage.config.algaeSize.value * 0.5; + double halfHeight = 0.5 * (BetterFoliage.config.algaeHeightMin.value + pRand[heightVariation] * (BetterFoliage.config.algaeHeightMax.value - BetterFoliage.config.algaeHeightMin.value)); + Tessellator.instance.setBrightness(getBrightness(block, x, y + 1, z)); + renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 - 0.125 * halfHeight, z + 0.5), ForgeDirection.UP, scale, halfHeight, pRot[variation], BetterFoliage.config.algaeHOffset.value, renderIcon, 0, false); + + return true; + } + + @SubscribeEvent + public void handleTextureReload(TextureStitchEvent.Pre event) { + if (event.map.getTextureType() != 0) return; + + algaeIcons.registerIcons(event.map); + BetterFoliage.log.info(String.format("Found %d algae textures", algaeIcons.numLoaded)); + } + + @SubscribeEvent + public void handleWorldLoad(WorldEvent.Load event) { + noise = new NoiseGeneratorSimplex(new Random(event.world.getWorldInfo().getSeed() + 1)); + } + +} diff --git a/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java b/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java index 2041e489..8816ddf1 100644 --- a/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java +++ b/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java @@ -20,6 +20,9 @@ public class BetterFoliageConfig extends ConfigBase { @CfgElement(category="reed", key="enabled") public boolean reedEnabled = true; + @CfgElement(category="algae", key="enabled") + public boolean algaeEnabled = true; + @CfgElement(category="leaves", key="horizontalOffset") public OptionDouble leavesHOffset = new OptionDouble(0.0, 0.4, 0.025, 0.2); @@ -61,4 +64,19 @@ public class BetterFoliageConfig extends ConfigBase { @CfgElement(category="reed", key="chance") public OptionInteger reedChance = new OptionInteger(0, 64, 1, 32); + @CfgElement(category="algae", key="horizontalOffset") + public OptionDouble algaeHOffset = new OptionDouble(0.0, 0.25, 0.025, 0.1); + + @CfgElement(category="algae", key="size") + public OptionDouble algaeSize = new OptionDouble(0.5, 1.5, 0.05, 1.0); + + @CfgElement(category="algae", key="heightMin") + @Limit(max="algaeHeightMax") + public OptionDouble algaeHeightMin = new OptionDouble(0.1, 1.5, 0.05, 0.5); + + @CfgElement(category="algae", key="heightMax") + public OptionDouble algaeHeightMax = new OptionDouble(0.1, 1.5, 0.05, 1.0); + + @CfgElement(category="algae", key="chance") + public OptionInteger algaeChance = new OptionInteger(0, 64, 1, 48); } diff --git a/src/main/resources/assets/betterfoliage/lang/en_US.lang b/src/main/resources/assets/betterfoliage/lang/en_US.lang index c61e48f4..184d5e1e 100644 --- a/src/main/resources/assets/betterfoliage/lang/en_US.lang +++ b/src/main/resources/assets/betterfoliage/lang/en_US.lang @@ -3,7 +3,6 @@ key.betterfoliage.gui=Open Settings message.betterfoliage.optionOn=ON message.betterfoliage.optionOff=OFF message.betterfoliage.config=Config - message.betterfoliage.back=Back message.betterfoliage.close=Close @@ -23,4 +22,5 @@ message.betterfoliage.flowerChance=Flower Chance message.betterfoliage.reedChance=Reed Chance message.betterfoliage.leavesMode=Leaves Offset: %s message.betterfoliage.leavesSkew=Skew -message.betterfoliage.leavesTranslate=Translate \ No newline at end of file +message.betterfoliage.leavesTranslate=Translate +message.betterfoliage.algaeChance=Algae Chance \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 10edf6c4..3c2c36eb 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -4,5 +4,5 @@ "version": "$version", "mcversion": "$mcversion", "description": "Leafier leaves and grassier grass", - "credits": "Made by octarine-noise" + "authorList" : ["octarine-noise"] }] \ No newline at end of file From 43e7fb830bc3fb80cb144f30ef45e46e8ec63d22 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Sat, 12 Jul 2014 00:18:22 +0200 Subject: [PATCH 8/9] change missing generated leaf texture to full black solves specular reflection issue with ShaderMod --- .../textures/blocks/missing_leaf.png | Bin 139 -> 102 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/betterfoliage/textures/blocks/missing_leaf.png b/src/main/resources/assets/betterfoliage/textures/blocks/missing_leaf.png index 0ab18df39074e4efec226a8399ec45dc5a915e89..ef4b7402b7a45dd88e55ee8253dcad8276662fe2 100644 GIT binary patch delta 86 zcmeBXOjGO(@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4*E#D4{Fi>Eak-aXL96A>oI= kqMT{Mm4-m(wsuB_*=PPUelwkP5U7^H)78&qol`;+0A#)w@Bjb+ delta 123 zcmYf6W>oA9@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=iEAlnAo*ba4!cIQ;g?MqUO3 z4ra&xbI(q)g#>Esc;vlgap9yn>%6ww?qFwNkYKC%v4Nj~AwedAlaYZzN0H$`)dAL( XoB#M+k*>W4G?2m5)z4*}Q$iB}G&3dH From 0a05a67eda70974ea0e25d5175c640d58891349b Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Sat, 12 Jul 2014 00:18:42 +0200 Subject: [PATCH 9/9] bump to 0.9.5b --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 274b2db0..3916ccbc 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ minecraft { jar.baseName = 'BetterFoliage-1.7.2' group = 'com.github.octarine-noise' -version='0.9.4b' +version='0.9.5b' processResources { inputs.property "version", project.version