diff --git a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java index 5ec0e80..7d94953 100644 --- a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java +++ b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java @@ -6,6 +6,7 @@ import java.util.Map; 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 class BetterFoliageClient implements ILeafTextureRecognizer { 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 0000000..f6595a0 --- /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 384175a..e95e4b9 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 class ConfigGuiMain extends ConfigGuiScreenBase { 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 @@ public class ConfigGuiMain extends ConfigGuiScreenBase { 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 @@ public class ConfigGuiMain extends ConfigGuiScreenBase { 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 @@ public class ConfigGuiMain extends ConfigGuiScreenBase { 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 aae6f36..a2fb98b 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.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 ConfigGuiReed extends ConfigGuiScreenBase { @@ -21,7 +22,7 @@ public class ConfigGuiReed extends ConfigGuiScreenBase { @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 0000000..8e6ceb3 --- /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 2041e48..8816ddf 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 c61e48f..184d5e1 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 10edf6c..3c2c36e 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