diff --git a/src/main/java/mods/betterfoliage/BetterFoliage.java b/src/main/java/mods/betterfoliage/BetterFoliage.java index c454445..c44939b 100644 --- a/src/main/java/mods/betterfoliage/BetterFoliage.java +++ b/src/main/java/mods/betterfoliage/BetterFoliage.java @@ -4,7 +4,7 @@ import java.io.File; import java.util.Map; import mods.betterfoliage.client.BetterFoliageClient; -import mods.betterfoliage.common.config.BetterFoliageConfig; +import mods.betterfoliage.common.config.Config; import org.apache.logging.log4j.Logger; @@ -24,8 +24,6 @@ public class BetterFoliage { @Mod.Instance public static BetterFoliage instance; - public static BetterFoliageConfig config = new BetterFoliageConfig(); - public static Logger log; public static File configDir; @@ -36,7 +34,7 @@ public class BetterFoliage { if (event.getSide() == Side.CLIENT) { configDir = new File(event.getModConfigurationDirectory(), MOD_ID); configDir.mkdir(); - config.load(new File(configDir, "betterfoliage.cfg")); + Config.readConfig(new File(configDir, "betterfoliage.cfg")); BetterFoliageClient.preInit(); } } diff --git a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java index c56f397..5804d40 100644 --- a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java +++ b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java @@ -20,6 +20,7 @@ import mods.betterfoliage.client.resource.LeafParticleTextures; import mods.betterfoliage.client.resource.LeafTextureEnumerator; import mods.betterfoliage.client.resource.ReedGenerator; import mods.betterfoliage.client.resource.ShortGrassGenerator; +import mods.betterfoliage.common.config.Config; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -49,6 +50,7 @@ public class BetterFoliageClient { public static void preInit() { FMLCommonHandler.instance().bus().register(new KeyHandler()); + FMLCommonHandler.instance().bus().register(new Config()); BetterFoliage.log.info("Registering renderers"); registerRenderer(new RenderBlockBetterCactus()); @@ -107,9 +109,9 @@ public class BetterFoliageClient { } public static void onRandomDisplayTick(Block block, World world, int x, int y, int z) { - if (!BetterFoliage.config.fallingLeavesEnabled) return; + if (!Config.leafFXEnabled) return; if (!leaves.matchesID(block) || !world.isAirBlock(x, y - 1, z)) return; - if (Math.random() > BetterFoliage.config.fallingLeavesChance.value) return; + if (Math.random() > Config.leafFXChance) return; Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFXFallingLeaves(world, x, y, z)); } diff --git a/src/main/java/mods/betterfoliage/client/KeyHandler.java b/src/main/java/mods/betterfoliage/client/KeyHandler.java index 967b75c..2cdb567 100644 --- a/src/main/java/mods/betterfoliage/client/KeyHandler.java +++ b/src/main/java/mods/betterfoliage/client/KeyHandler.java @@ -1,14 +1,14 @@ package mods.betterfoliage.client; +import mods.betterfoliage.BetterFoliage; +import mods.betterfoliage.client.gui.ConfigGuiFactory; +import net.minecraft.client.settings.KeyBinding; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import mods.betterfoliage.BetterFoliage; -import mods.betterfoliage.client.gui.ConfigGuiMain; -import net.minecraft.client.settings.KeyBinding; @SideOnly(Side.CLIENT) public class KeyHandler { @@ -22,6 +22,6 @@ public class KeyHandler { @SubscribeEvent public void handleKeyPress(InputEvent.KeyInputEvent event) { - if (guiBinding.isPressed()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiMain(null)); + if (guiBinding.isPressed()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiFactory.ConfigGuiBetterFoliage(null)); } } diff --git a/src/main/java/mods/betterfoliage/client/WindTracker.java b/src/main/java/mods/betterfoliage/client/WindTracker.java index 95f9e29..f82ca53 100644 --- a/src/main/java/mods/betterfoliage/client/WindTracker.java +++ b/src/main/java/mods/betterfoliage/client/WindTracker.java @@ -2,7 +2,7 @@ package mods.betterfoliage.client; import java.util.Random; -import mods.betterfoliage.BetterFoliage; +import mods.betterfoliage.common.config.Config; import net.minecraft.client.Minecraft; import net.minecraft.world.World; import net.minecraftforge.event.world.WorldEvent; @@ -27,8 +27,8 @@ public class WindTracker { nextChange = world.getWorldInfo().getWorldTime() + changeTime; double direction = 2.0 * Math.PI * random.nextDouble(); - double speed = Math.abs(random.nextGaussian()) * BetterFoliage.config.fallingLeavesWindStrength.value; - if (world.isRaining()) speed += Math.abs(random.nextGaussian()) * BetterFoliage.config.fallingLeavesStormStrength.value; + double speed = Math.abs(random.nextGaussian()) * Config.leafFXWindStrength; + if (world.isRaining()) speed += Math.abs(random.nextGaussian()) * Config.leafFXStormStrength; targetX = Math.cos(direction) * speed; targetZ = Math.sin(direction) * speed; diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java deleted file mode 100644 index 30be0b9..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiAlgae.java +++ /dev/null @@ -1,39 +0,0 @@ -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; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -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/ConfigGuiCoral.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiCoral.java deleted file mode 100644 index 98bd7ff..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiCoral.java +++ /dev/null @@ -1,34 +0,0 @@ -package mods.betterfoliage.client.gui; - -import cpw.mods.fml.client.FMLClientHandler; -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; - -public class ConfigGuiCoral extends ConfigGuiScreenBase { - - public ConfigGuiCoral(GuiScreen parent) { - super(parent); - int id = 10; - widgets.add(new OptionDoubleWidget(BetterFoliage.config.coralCrustSize, -100, -100, 200, 50, id++, id++, "message.betterfoliage.crustSize", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.coralVOffset, -100, -70, 200, 50, id++, id++, "message.betterfoliage.vOffset", "%.3f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.coralSize, -100, -40, 200, 50, id++, id++, "message.betterfoliage.size", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.coralHOffset, -100, -10, 200, 50, id++, id++, "message.betterfoliage.hOffset", "%.3f")); - widgets.add(new OptionIntegerWidget(BetterFoliage.config.coralPopulation, -100, 20, 200, 50, id++, id++, "message.betterfoliage.coralPopulation")); - widgets.add(new OptionIntegerWidget(BetterFoliage.config.coralChance, -100, 50, 200, 50, id++, id++, "message.betterfoliage.coralChance")); - } - - @SuppressWarnings("unchecked") - @Override - public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 80, 100, 20, I18n.format("message.betterfoliage.back"))); - } - - @Override - protected void onButtonPress(int id) { - if (id == 0) FMLClientHandler.instance().showGuiScreen(parent); - } -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFactory.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFactory.java index 2ab200a..aaa2cbc 100644 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFactory.java +++ b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFactory.java @@ -2,11 +2,15 @@ package mods.betterfoliage.client.gui; import java.util.Set; -import com.google.common.collect.ImmutableSet; - +import mods.betterfoliage.BetterFoliage; +import mods.betterfoliage.common.config.Config; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; + +import com.google.common.collect.ImmutableSet; + import cpw.mods.fml.client.IModGuiFactory; +import cpw.mods.fml.client.config.GuiConfig; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -18,7 +22,7 @@ public class ConfigGuiFactory implements IModGuiFactory { } public Class mainConfigGuiClass() { - return ConfigGuiMain.class; + return ConfigGuiBetterFoliage.class; } public Set runtimeGuiCategories() { @@ -29,4 +33,9 @@ public class ConfigGuiFactory implements IModGuiFactory { return null; } + public static class ConfigGuiBetterFoliage extends GuiConfig { + public ConfigGuiBetterFoliage(GuiScreen parentScreen) { + super(parentScreen, Config.getConfigRootCategories(), BetterFoliage.MOD_ID, null, false, false, BetterFoliage.MOD_NAME); + } + } } diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFallingLeaves.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFallingLeaves.java deleted file mode 100644 index 9027af0..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiFallingLeaves.java +++ /dev/null @@ -1,34 +0,0 @@ -package mods.betterfoliage.client.gui; - -import mods.betterfoliage.BetterFoliage; -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 ConfigGuiFallingLeaves extends ConfigGuiScreenBase { - - public ConfigGuiFallingLeaves(GuiScreen parent) { - super(parent); - int id = 10; - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesSize, -100, -100, 200, 50, id++, id++, "message.betterfoliage.size", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesSpeed, -100, -70, 200, 50, id++, id++, "message.betterfoliage.speed", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesWindStrength, -100, -40, 200, 50, id++, id++, "message.betterfoliage.windStrength", "%.1f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesStormStrength, -100, -10, 200, 50, id++, id++, "message.betterfoliage.stormStrength", "%.1f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesPerturb, -100, 20, 200, 50, id++, id++, "message.betterfoliage.fallingLeafPerturbation", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesChance, -100, 50, 200, 50, id++, id++, "message.betterfoliage.fallingLeafChance", "%.3f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.fallingLeavesLifetime, -100, 80, 200, 50, id++, id++, "message.betterfoliage.fallingLeafLifetime", "%.2f")); - } - - @SuppressWarnings("unchecked") - @Override - public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 110, 100, 20, I18n.format("message.betterfoliage.back"))); - } - - @Override - protected void onButtonPress(int id) { - if (id == 0) FMLClientHandler.instance().showGuiScreen(parent); - } -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java deleted file mode 100644 index 42fb544..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiGrass.java +++ /dev/null @@ -1,45 +0,0 @@ -package mods.betterfoliage.client.gui; - -import mods.betterfoliage.BetterFoliage; -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; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigGuiGrass extends ConfigGuiScreenBase { - - public enum Button {CLOSE, GRASS_USE_GENERATED} - - public ConfigGuiGrass(GuiScreen parent) { - super(parent); - int id = 10; - widgets.add(new OptionDoubleWidget(BetterFoliage.config.grassSize, -100, -70, 200, 50, id++, id++, "message.betterfoliage.size", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.grassHOffset, -100, -10, 200, 50, id++, id++, "message.betterfoliage.hOffset", "%.3f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.grassHeightMin, -100, 20, 200, 50, id++, id++, "message.betterfoliage.minHeight", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.grassHeightMax, -100, 50, 200, 50, id++, id++, "message.betterfoliage.maxHeight", "%.2f")); - } - - @SuppressWarnings("unchecked") - @Override - public void addButtons(int x, int y) { - buttonList.add(new GuiButton(Button.CLOSE.ordinal(), x - 50, y + 80, 100, 20, I18n.format("message.betterfoliage.back"))); - buttonList.add(new GuiButton(Button.GRASS_USE_GENERATED.ordinal(), x - 100, y - 40, 200, 20, "")); - } - - protected void updateButtons() { - setButtonOptionBoolean(Button.GRASS_USE_GENERATED.ordinal(), "message.betterfoliage.genShortgrass", BetterFoliage.config.grassUseGenerated); - } - - @Override - protected void onButtonPress(int id) { - if (id == Button.CLOSE.ordinal()) FMLClientHandler.instance().showGuiScreen(parent); - if (id == Button.GRASS_USE_GENERATED.ordinal()) BetterFoliage.config.grassUseGenerated = !BetterFoliage.config.grassUseGenerated; - - if (BetterFoliage.config.grassHeightMin.value > BetterFoliage.config.grassHeightMax.value) BetterFoliage.config.grassHeightMin.value = BetterFoliage.config.grassHeightMax.value; - } - -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java deleted file mode 100644 index bfd5a22..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLeaves.java +++ /dev/null @@ -1,42 +0,0 @@ -package mods.betterfoliage.client.gui; - -import mods.betterfoliage.BetterFoliage; -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; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigGuiLeaves extends ConfigGuiScreenBase { - - public enum Button {CLOSE, LEAVES_OFFSET_MODE} - - public ConfigGuiLeaves(GuiScreen parent) { - super(parent); - int id = 10; - widgets.add(new OptionDoubleWidget(BetterFoliage.config.leavesSize, -100, -70, 200, 50, id++, id++, "message.betterfoliage.size", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.leavesHOffset, -100, -10, 200, 50, id++, id++, "message.betterfoliage.hOffset", "%.3f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.leavesVOffset, -100, 20, 200, 50, id++, id++, "message.betterfoliage.vOffset", "%.3f")); - } - - @SuppressWarnings("unchecked") - @Override - public void addButtons(int x, int y) { - 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, "")); - } - - protected void updateButtons() { - setButtonOptionBoolean(Button.LEAVES_OFFSET_MODE.ordinal(), "message.betterfoliage.leavesMode", BetterFoliage.config.leavesSkew ? "message.betterfoliage.leavesSkew" : "message.betterfoliage.leavesTranslate"); - } - - @Override - protected void onButtonPress(int id) { - if (id == Button.CLOSE.ordinal()) FMLClientHandler.instance().showGuiScreen(parent); - if (id == Button.LEAVES_OFFSET_MODE.ordinal()) BetterFoliage.config.leavesSkew = !BetterFoliage.config.leavesSkew; - } - -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java deleted file mode 100644 index 5ea61bf..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiLilypad.java +++ /dev/null @@ -1,34 +0,0 @@ -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; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigGuiLilypad extends ConfigGuiScreenBase { - - public ConfigGuiLilypad(GuiScreen parent) { - super(parent); - int id = 10; - widgets.add(new OptionDoubleWidget(BetterFoliage.config.lilypadHOffset, -100, -40, 200, 50, id++, id++, "message.betterfoliage.hOffset", "%.3f")); - widgets.add(new OptionIntegerWidget(BetterFoliage.config.lilypadChance, -100, -10, 200, 50, id++, id++, "message.betterfoliage.flowerChance")); - } - - @SuppressWarnings("unchecked") - @Override - public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, I18n.format("message.betterfoliage.back"))); - } - - @Override - protected void onButtonPress(int id) { - if (id == 0) FMLClientHandler.instance().showGuiScreen(parent); - } - -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java deleted file mode 100644 index 81ab035..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiMain.java +++ /dev/null @@ -1,97 +0,0 @@ -package mods.betterfoliage.client.gui; - -import mods.betterfoliage.BetterFoliage; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.I18n; -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigGuiMain extends ConfigGuiScreenBase { - - public enum Button {CLOSE, - TOGGLE_LEAVES, CONFIG_LEAVES, - TOGGLE_FALLING_LEAVES, CONFIG_FALLING_LEAVES, - TOGGLE_GRASS, CONFIG_GRASS, - TOGGLE_CACTUS, CONFIG_CACTUS, - TOGGLE_LILYPAD, CONFIG_LILYPAD, - TOGGLE_REED, CONFIG_REED, - TOGGLE_ALGAE, CONFIG_ALGAE, - TOGGLE_CORAL, CONFIG_CORAL} - - public ConfigGuiMain(GuiScreen parent) { - super(parent); - - } - - @SuppressWarnings("unchecked") - @Override - protected void addButtons(int x, int y) { - buttonList.add(new GuiButton(Button.CLOSE.ordinal(), x - 50, y + 110, 100, 20, I18n.format("message.betterfoliage.close"))); - - buttonList.add(new GuiButton(Button.TOGGLE_LEAVES.ordinal(), x - 100, y - 130, 150, 20, "")); - buttonList.add(new GuiButton(Button.CONFIG_LEAVES.ordinal(), x + 60, y - 130, 40, 20, I18n.format("message.betterfoliage.config"))); - - buttonList.add(new GuiButton(Button.TOGGLE_FALLING_LEAVES.ordinal(), x - 100, y - 100, 150, 20, "")); - buttonList.add(new GuiButton(Button.CONFIG_FALLING_LEAVES.ordinal(), x + 60, y - 100, 40, 20, I18n.format("message.betterfoliage.config"))); - - buttonList.add(new GuiButton(Button.TOGGLE_GRASS.ordinal(), x - 100, y - 70, 150, 20, "")); - buttonList.add(new GuiButton(Button.CONFIG_GRASS.ordinal(), x + 60, y - 70, 40, 20, I18n.format("message.betterfoliage.config"))); - - buttonList.add(new GuiButton(Button.TOGGLE_CACTUS.ordinal(), x - 100, y - 40, 150, 20, "")); - buttonList.add(new GuiButton(Button.CONFIG_CACTUS.ordinal(), x + 60, y - 40, 40, 20, I18n.format("message.betterfoliage.config"))); - - buttonList.add(new GuiButton(Button.TOGGLE_LILYPAD.ordinal(), x - 100, y - 10, 150, 20, "")); - buttonList.add(new GuiButton(Button.CONFIG_LILYPAD.ordinal(), x + 60, y - 10, 40, 20, I18n.format("message.betterfoliage.config"))); - - 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"))); - - buttonList.add(new GuiButton(Button.TOGGLE_CORAL.ordinal(), x - 100, y + 80, 150, 20, "")); - buttonList.add(new GuiButton(Button.CONFIG_CORAL.ordinal(), x + 60, y + 80, 40, 20, I18n.format("message.betterfoliage.config"))); - } - - protected void updateButtons() { - setButtonOptionBoolean(Button.TOGGLE_LEAVES.ordinal(), "message.betterfoliage.betterLeaves", BetterFoliage.config.leavesEnabled); - setButtonOptionBoolean(Button.TOGGLE_FALLING_LEAVES.ordinal(), "message.betterfoliage.fallingLeaves", BetterFoliage.config.fallingLeavesEnabled); - setButtonOptionBoolean(Button.TOGGLE_GRASS.ordinal(), "message.betterfoliage.betterGrass", BetterFoliage.config.grassEnabled); - 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); - setButtonOptionBoolean(Button.TOGGLE_CORAL.ordinal(), "message.betterfoliage.betterCoral", BetterFoliage.config.coralEnabled); - ((GuiButton) buttonList.get(Button.CONFIG_CACTUS.ordinal())).enabled = false; - } - - @Override - protected void onButtonPress(int id) { - if (id == Button.CLOSE.ordinal()) { - BetterFoliage.config.save(); - Minecraft.getMinecraft().renderGlobal.loadRenderers(); - FMLClientHandler.instance().showGuiScreen(parent); - } - if (id == Button.TOGGLE_LEAVES.ordinal()) BetterFoliage.config.leavesEnabled = !BetterFoliage.config.leavesEnabled; - if (id == Button.TOGGLE_FALLING_LEAVES.ordinal()) BetterFoliage.config.fallingLeavesEnabled = !BetterFoliage.config.fallingLeavesEnabled; - if (id == Button.TOGGLE_GRASS.ordinal()) BetterFoliage.config.grassEnabled = !BetterFoliage.config.grassEnabled; - 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.TOGGLE_CORAL.ordinal()) BetterFoliage.config.coralEnabled = !BetterFoliage.config.coralEnabled; - - if (id== Button.CONFIG_LEAVES.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiLeaves(this)); - if (id== Button.CONFIG_FALLING_LEAVES.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiFallingLeaves(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)); - if (id== Button.CONFIG_CORAL.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiCoral(this)); - } - -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java deleted file mode 100644 index 283377c..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiReed.java +++ /dev/null @@ -1,38 +0,0 @@ -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; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigGuiReed extends ConfigGuiScreenBase { - - public ConfigGuiReed(GuiScreen parent) { - super(parent); - int id = 10; - widgets.add(new OptionDoubleWidget(BetterFoliage.config.reedHOffset, -100, -70, 200, 50, id++, id++, "message.betterfoliage.hOffset", "%.3f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.reedHeightMin, -100, -40, 200, 50, id++, id++, "message.betterfoliage.minHeight", "%.2f")); - widgets.add(new OptionDoubleWidget(BetterFoliage.config.reedHeightMax, -100, -10, 200, 50, id++, id++, "message.betterfoliage.maxHeight", "%.2f")); - widgets.add(new OptionIntegerWidget(BetterFoliage.config.reedChance, -100, 20, 200, 50, id++, id++, "message.betterfoliage.reedChance")); - } - - @SuppressWarnings("unchecked") - @Override - public void addButtons(int x, int y) { - buttonList.add(new GuiButton(0, x - 50, y + 50, 100, 20, I18n.format("message.betterfoliage.back"))); - } - - @Override - protected void onButtonPress(int id) { - if (id == 0) FMLClientHandler.instance().showGuiScreen(parent); - - if (BetterFoliage.config.reedHeightMin.value > BetterFoliage.config.reedHeightMax.value) BetterFoliage.config.reedHeightMin.value = BetterFoliage.config.reedHeightMax.value; - } - -} diff --git a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiScreenBase.java b/src/main/java/mods/betterfoliage/client/gui/ConfigGuiScreenBase.java deleted file mode 100644 index 38cbb60..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/ConfigGuiScreenBase.java +++ /dev/null @@ -1,81 +0,0 @@ -package mods.betterfoliage.client.gui; - -import java.util.List; - -import org.lwjgl.input.Keyboard; - -import mods.betterfoliage.client.gui.widget.IOptionWidget; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.EnumChatFormatting; - -import com.google.common.collect.Lists; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigGuiScreenBase extends GuiScreen { - - protected GuiScreen parent; - protected List widgets = Lists.newLinkedList(); - - public ConfigGuiScreenBase(GuiScreen parent) { - this.parent = parent; - } - - @Override - public void drawScreen(int par1, int par2, float par3) { - this.drawDefaultBackground(); - int x = width / 2; - int y = height / 2; - for (IOptionWidget widget : widgets) widget.drawStrings(this, fontRendererObj, x, y, 14737632, 16777120); - super.drawScreen(par1, par2, par3); - } - - @SuppressWarnings("unchecked") - @Override - public void initGui() { - int x = width / 2; - int y = height / 2; - for (IOptionWidget widget : widgets) widget.addButtons(buttonList, x, y); - addButtons(x, y); - updateButtons(); - } - - protected void addButtons(int x, int y) {} - - protected void updateButtons() {} - - protected void onButtonPress(int id) {} - - @Override - protected void actionPerformed(GuiButton button) { - super.actionPerformed(button); - for (IOptionWidget widget : widgets) widget.onAction(button.id, Keyboard.isKeyDown(42)); - onButtonPress(button.id); - updateButtons(); - } - - @SuppressWarnings("unchecked") - protected void setButtonOptionBoolean(int id, String msgKey, boolean option) { - for (GuiButton button : (List) buttonList) { - if (button.id == id) { - String optionText = option ? (EnumChatFormatting.GREEN + I18n.format("message.betterfoliage.optionOn")) : (EnumChatFormatting.RED + I18n.format("message.betterfoliage.optionOff")); - button.displayString = I18n.format(msgKey, optionText); - break; - } - } - } - - @SuppressWarnings("unchecked") - protected void setButtonOptionBoolean(int id, String msgKey, String optionKey) { - for (GuiButton button : (List) buttonList) { - if (button.id == id) { - button.displayString = I18n.format(msgKey, I18n.format(optionKey)); - break; - } - } - } -} diff --git a/src/main/java/mods/betterfoliage/client/gui/widget/IOptionWidget.java b/src/main/java/mods/betterfoliage/client/gui/widget/IOptionWidget.java deleted file mode 100644 index 2e75f7e..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/widget/IOptionWidget.java +++ /dev/null @@ -1,19 +0,0 @@ -package mods.betterfoliage.client.gui.widget; - -import java.util.List; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; - -@SideOnly(Side.CLIENT) -public interface IOptionWidget { - - public void addButtons(List buttonList, int xOffset, int yOffset); - public void drawStrings(GuiScreen screen, FontRenderer fontRenderer, int xOffset, int yOffset, int labelColor, int numColor); - public void onAction(int buttonId, boolean shiftPressed); - -} \ No newline at end of file diff --git a/src/main/java/mods/betterfoliage/client/gui/widget/OptionDoubleWidget.java b/src/main/java/mods/betterfoliage/client/gui/widget/OptionDoubleWidget.java deleted file mode 100644 index 53cba52..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/widget/OptionDoubleWidget.java +++ /dev/null @@ -1,53 +0,0 @@ -package mods.betterfoliage.client.gui.widget; - -import java.util.List; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -import mods.betterfoliage.common.config.OptionDouble; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.I18n; - -@SideOnly(Side.CLIENT) -public class OptionDoubleWidget implements IOptionWidget { - - public OptionDouble option; - public int x; - public int y; - public int width; - public int numWidth; - public int idDecrement; - public int idIncrement; - public String keyLabel; - public String formatString; - - public OptionDoubleWidget(OptionDouble option, int x, int y, int width, int numWidth, int idDecrement, int idIncrement, String keyLabel, String formatString) { - this.option = option; - this.x = x; - this.y = y; - this.width = width; - this.numWidth = numWidth; - this.idDecrement = idDecrement; - this.idIncrement = idIncrement; - this.keyLabel = keyLabel; - this.formatString = formatString; - } - - public void addButtons(List buttonList, int xOffset, int yOffset) { - buttonList.add(new GuiButton(idDecrement, xOffset + x + width - numWidth - 40, yOffset + y, 20, 20, "-")); - buttonList.add(new GuiButton(idIncrement, xOffset + x + width - 20, yOffset + y, 20, 20, "+")); - } - - public void drawStrings(GuiScreen screen, FontRenderer fontRenderer, int xOffset, int yOffset, int labelColor, int numColor) { - screen.drawString(fontRenderer, I18n.format(keyLabel), xOffset + x, yOffset + y + 5, labelColor); - screen.drawCenteredString(fontRenderer, String.format(formatString, option.value), xOffset + x + width - 20 - numWidth / 2, yOffset + y + 5, numColor); - } - - public void onAction(int buttonId, boolean shiftPressed) { - if (buttonId == idDecrement) option.decrement(shiftPressed ? 5 :1); - if (buttonId == idIncrement) option.increment(shiftPressed ? 5 :1); - } -} diff --git a/src/main/java/mods/betterfoliage/client/gui/widget/OptionIntegerWidget.java b/src/main/java/mods/betterfoliage/client/gui/widget/OptionIntegerWidget.java deleted file mode 100644 index 498ec07..0000000 --- a/src/main/java/mods/betterfoliage/client/gui/widget/OptionIntegerWidget.java +++ /dev/null @@ -1,50 +0,0 @@ -package mods.betterfoliage.client.gui.widget; - -import java.util.List; - -import mods.betterfoliage.common.config.OptionInteger; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.I18n; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class OptionIntegerWidget implements IOptionWidget { - - public OptionInteger option; - public int x; - public int y; - public int width; - public int numWidth; - public int idDecrement; - public int idIncrement; - public String keyLabel; - - public OptionIntegerWidget(OptionInteger option, int x, int y, int width, int numWidth, int idDecrement, int idIncrement, String keyLabel) { - this.option = option; - this.x = x; - this.y = y; - this.width = width; - this.numWidth = numWidth; - this.idDecrement = idDecrement; - this.idIncrement = idIncrement; - this.keyLabel = keyLabel; - } - - public void addButtons(List buttonList, int xOffset, int yOffset) { - buttonList.add(new GuiButton(idDecrement, xOffset + x + width - numWidth - 40, yOffset + y, 20, 20, "-")); - buttonList.add(new GuiButton(idIncrement, xOffset + x + width - 20, yOffset + y, 20, 20, "+")); - } - - public void drawStrings(GuiScreen screen, FontRenderer fontRenderer, int xOffset, int yOffset, int labelColor, int numColor) { - screen.drawString(fontRenderer, I18n.format(keyLabel), xOffset + x, yOffset + y + 5, labelColor); - screen.drawCenteredString(fontRenderer, Integer.toString(option.value), xOffset + x + width - 20 - numWidth / 2, yOffset + y + 5, numColor); - } - - public void onAction(int buttonId, boolean shiftPressed) { - if (buttonId == idDecrement) option.decrement(shiftPressed ? 5 :1); - if (buttonId == idIncrement) option.increment(shiftPressed ? 5 :1); - } -} diff --git a/src/main/java/mods/betterfoliage/client/render/IconSet.java b/src/main/java/mods/betterfoliage/client/render/IconSet.java index b56dec5..1135f93 100644 --- a/src/main/java/mods/betterfoliage/client/render/IconSet.java +++ b/src/main/java/mods/betterfoliage/client/render/IconSet.java @@ -16,7 +16,7 @@ public class IconSet { /** Icon array */ public IIcon[] icons = new IIcon[16]; - /** Number of successfully loaded icons*/ + /** Number of successfully loaded icons */ public int numLoaded = 0; /** Resource domain of icons */ diff --git a/src/main/java/mods/betterfoliage/client/render/impl/EntityFXFallingLeaves.java b/src/main/java/mods/betterfoliage/client/render/impl/EntityFXFallingLeaves.java index 29351dd..5b378ba 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/EntityFXFallingLeaves.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/EntityFXFallingLeaves.java @@ -2,8 +2,8 @@ package mods.betterfoliage.client.render.impl; import java.awt.Color; -import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.BetterFoliageClient; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.client.particle.EntityFX; @@ -36,12 +36,12 @@ public class EntityFXFallingLeaves extends EntityFX { public EntityFXFallingLeaves(World world, int x, int y, int z) { super(world, x + 0.5, y, z + 0.5); - particleMaxAge = MathHelper.floor_double((0.6 + 0.4 * rand.nextDouble()) * BetterFoliage.config.fallingLeavesLifetime.value * 20.0); + particleMaxAge = MathHelper.floor_double((0.6 + 0.4 * rand.nextDouble()) * Config.leafFXLifetime * 20.0); isMirrored = (rand.nextInt() & 1) == 1; - motionY = -BetterFoliage.config.fallingLeavesSpeed.value; + motionY = -Config.leafFXSpeed; particleRotation = rand.nextInt(64); - particleScale = (float) BetterFoliage.config.fallingLeavesSize.value; + particleScale = (float) Config.leafFXSize; particleIcon = BetterFoliageClient.leafParticles.icons.get(rand.nextInt(1024)); Block block = world.getBlock(x, y, z); @@ -53,7 +53,7 @@ public class EntityFXFallingLeaves extends EntityFX { public void onUpdate() { super.onUpdate(); - particleScale = (float) BetterFoliage.config.fallingLeavesSize.value; + particleScale = (float) Config.leafFXSize; if (rand.nextFloat() > 0.95f) rotationPositive = !rotationPositive; if (particleAge > particleMaxAge - 20) particleAlpha = 0.05f * (particleMaxAge - particleAge); @@ -66,9 +66,9 @@ public class EntityFXFallingLeaves extends EntityFX { } wasOnGround = true; } else { - motionX = (BetterFoliageClient.wind.currentX + cos[particleRotation] * BetterFoliage.config.fallingLeavesPerturb.value) * BetterFoliage.config.fallingLeavesSpeed.value; - motionZ = (BetterFoliageClient.wind.currentZ + sin[particleRotation] * BetterFoliage.config.fallingLeavesPerturb.value) * BetterFoliage.config.fallingLeavesSpeed.value; - motionY = -BetterFoliage.config.fallingLeavesSpeed.value; + motionX = (BetterFoliageClient.wind.currentX + cos[particleRotation] * Config.leafFXPerturb) * Config.leafFXSpeed; + motionZ = (BetterFoliageClient.wind.currentZ + sin[particleRotation] * Config.leafFXPerturb) * Config.leafFXSpeed; + motionY = -Config.leafFXSpeed; particleRotation = (particleRotation + (rotationPositive ? 1 : -1)) & 63; } } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java index 6c370a1..7dd6dbb 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterAlgae.java @@ -7,6 +7,7 @@ import mods.betterfoliage.client.BetterFoliageClient; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.IconSet; import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -30,13 +31,13 @@ public class RenderBlockBetterAlgae extends RenderBlockAOBase implements IRender 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 (!Config.algaeEnabled) return false; if (!(BetterFoliageClient.dirt.matchesID(block))) 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; + return terrainVariation < Config.algaePopulation; } public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { @@ -61,10 +62,10 @@ public class RenderBlockBetterAlgae extends RenderBlockAOBase implements IRender 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)); + double scale = Config.algaeSize * 0.5; + double halfHeight = 0.5 * (Config.algaeHeightMin + pRand[heightVariation] * (Config.algaeHeightMax - Config.algaeHeightMin)); 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); + renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 - 0.125 * halfHeight, z + 0.5), ForgeDirection.UP, scale, halfHeight, pRot[variation], Config.algaeHOffset, renderIcon, 0, false); return true; } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCactus.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCactus.java index 0226ed0..1f4804e 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCactus.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCactus.java @@ -4,6 +4,7 @@ import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.render.FakeRenderBlockAOBase; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.IconSet; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; @@ -31,7 +32,7 @@ public class RenderBlockBetterCactus extends FakeRenderBlockAOBase implements IR public static double cactusRadius = 0.4375; public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - return BetterFoliage.config.cactusEnabled && block == Blocks.cactus; + return Config.cactusEnabled && block == Blocks.cactus; } public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCoral.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCoral.java index ae65abc..7528061 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCoral.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterCoral.java @@ -6,6 +6,7 @@ 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.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -29,10 +30,10 @@ public class RenderBlockBetterCoral extends RenderBlockAOBase implements IRender public NoiseGeneratorSimplex noise; public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - if (!BetterFoliage.config.coralEnabled) return false; + if (!Config.coralEnabled) return false; if (block != Blocks.sand) return false; int terrainVariation = MathHelper.floor_double((noise.func_151605_a(x * 0.1, z * 0.1) + 1.0) * 32.0); - return terrainVariation < BetterFoliage.config.coralPopulation.value; + return terrainVariation < Config.coralPopulation; } public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { @@ -40,9 +41,9 @@ public class RenderBlockBetterCoral extends RenderBlockAOBase implements IRender renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer); Double3 blockCenter = new Double3(x + 0.5, y + 0.5, z + 0.5); - double offset = pRand[getSemiRandomFromPos(x, y, z, 6)] * BetterFoliage.config.coralVOffset.value; - double halfSize = BetterFoliage.config.coralSize.value * 0.5; - double halfCrustSize = BetterFoliage.config.coralCrustSize.value * 0.5; + double offset = pRand[getSemiRandomFromPos(x, y, z, 6)] * Config.coralVOffset; + double halfSize = Config.coralSize * 0.5; + double halfCrustSize = Config.coralCrustSize * 0.5; Tessellator.instance.setBrightness(getBrightness(block, x, y, z)); for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { @@ -50,13 +51,13 @@ public class RenderBlockBetterCoral extends RenderBlockAOBase implements IRender if (blockAccess.isAirBlock(x + dir.offsetX, y + dir.offsetY + 1, z + dir.offsetZ)) continue; int variation = getSemiRandomFromPos(x, y, z, dir.ordinal()); - if (variation < BetterFoliage.config.coralChance.value) { + if (variation < Config.coralChance) { IIcon crustIcon = coralCrustIcons.get(variation); IIcon coralIcon = coralCrossIcons.get(variation); if (crustIcon != null) renderCoralCrust(blockCenter, dir, offset, halfCrustSize, crustIcon, variation); if (coralIcon != null) renderCrossedSideQuads(blockCenter.add(new Double3(dir).scale(0.5)), dir, halfSize, halfSize, - pRot[variation], BetterFoliage.config.coralHOffset.value, + pRot[variation], Config.coralHOffset, coralIcon, 0, false); } } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterGrass.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterGrass.java index b05cf57..32c502b 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterGrass.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterGrass.java @@ -6,6 +6,7 @@ import mods.betterfoliage.client.ShadersModIntegration; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.IconSet; import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -42,7 +43,7 @@ public class RenderBlockBetterGrass extends RenderBlockAOBase implements IRender grassTopIcon = block.getIcon(blockAccess, x, y, z, ForgeDirection.UP.ordinal()); renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer); - if (!BetterFoliage.config.grassEnabled) return true; + if (!Config.grassEnabled) return true; boolean isSnowTop = blockAccess.getBlock(x, y + 1, z) == Blocks.snow_layer; boolean isAirTop = blockAccess.isAirBlock(x, y + 1, z); @@ -52,36 +53,36 @@ public class RenderBlockBetterGrass extends RenderBlockAOBase implements IRender int iconVariation = getSemiRandomFromPos(x, y, z, 0); int heightVariation = getSemiRandomFromPos(x, y, z, 1); - double scale = BetterFoliage.config.grassSize.value * 0.5; - double halfHeight = 0.5 * (BetterFoliage.config.grassHeightMin.value + pRand[heightVariation] * (BetterFoliage.config.grassHeightMax.value - BetterFoliage.config.grassHeightMin.value)); + double scale = Config.grassSize * 0.5; + double halfHeight = 0.5 * (Config.grassHeightMin + pRand[heightVariation] * (Config.grassHeightMax - Config.grassHeightMin)); IIcon shortGrassIcon = null; if (isSnowTop) { // clear biome colors aoYPXZNN.setGray(0.9f); aoYPXZNP.setGray(0.9f); aoYPXZPN.setGray(0.9f); aoYPXZPP.setGray(0.9f); Tessellator.instance.setColorOpaque(230, 230, 230); - shortGrassIcon = BetterFoliage.config.grassUseGenerated ? snowGrassGenIcon : snowGrassIcons.get(iconVariation); + shortGrassIcon = Config.grassUseGenerated ? snowGrassGenIcon : snowGrassIcons.get(iconVariation); } else { Tessellator.instance.setColorOpaque_I(block.colorMultiplier(blockAccess, x, y, z)); - shortGrassIcon = BetterFoliage.config.grassUseGenerated ? grassGenIcon : grassIcons.get(iconVariation); + shortGrassIcon = Config.grassUseGenerated ? grassGenIcon : grassIcons.get(iconVariation); } if (shortGrassIcon == null) return true; ShadersModIntegration.startGrassQuads(); Tessellator.instance.setBrightness(getBrightness(block, x, y + 1, z)); - renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 + (isSnowTop ? 0.0625 : 0.0), z + 0.5), ForgeDirection.UP, scale, halfHeight, pRot[iconVariation], BetterFoliage.config.grassHOffset.value, shortGrassIcon, 0, false); + renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 + (isSnowTop ? 0.0625 : 0.0), z + 0.5), ForgeDirection.UP, scale, halfHeight, pRot[iconVariation], Config.grassHOffset, shortGrassIcon, 0, false); } return true; } protected void checkConnectedGrass(int x, int y, int z) { Block blockBelow = blockAccess.getBlock(x, y - 1, z); - if (BetterFoliage.config.ctxGrassAggressiveEnabled && (BetterFoliageClient.grass.matchesID(blockBelow) || BetterFoliageClient.dirt.matchesID(blockBelow))) { + if (Config.ctxGrassAggressiveEnabled && (BetterFoliageClient.grass.matchesID(blockBelow) || BetterFoliageClient.dirt.matchesID(blockBelow))) { connectXP = true; connectXN = true; connectZP = true; connectZN = true; - } else if (BetterFoliage.config.ctxGrassClassicEnabled) { + } else if (Config.ctxGrassClassicEnabled) { connectXP = BetterFoliageClient.grass.matchesID(blockAccess.getBlock(x + 1, y - 1, z)); connectXN = BetterFoliageClient.grass.matchesID(blockAccess.getBlock(x - 1, y - 1, z)); connectZP = BetterFoliageClient.grass.matchesID(blockAccess.getBlock(x, y - 1, z + 1)); 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 aa01b7f..e1caf5f 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLeaves.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLeaves.java @@ -4,6 +4,7 @@ import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.BetterFoliageClient; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -22,7 +23,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class RenderBlockBetterLeaves extends RenderBlockAOBase implements IRenderBlockDecorator { public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - if (!BetterFoliage.config.leavesEnabled) return false; + if (!Config.leavesEnabled) return false; if (original > 0 && original < 42) return false; return BetterFoliageClient.leaves.matchesID(block) && !isBlockSurrounded(blockAccess, x, y, z); } @@ -50,21 +51,21 @@ public class RenderBlockBetterLeaves extends RenderBlockAOBase implements IRende int offsetVariation = getSemiRandomFromPos(x, y, z, 0); int uvVariation = getSemiRandomFromPos(x, y, z, 1); - double halfSize = 0.5 * BetterFoliage.config.leavesSize.value; + double halfSize = 0.5 * Config.leavesSize; boolean isAirTop = y == 255 || blockAccess.isAirBlock(x, y + 1, z); boolean isAirBottom = y == 0 || blockAccess.isAirBlock(x, y - 1, z); Tessellator.instance.setBrightness(isAirTop ? getBrightness(block, x, y + 1, z) : (isAirBottom ? getBrightness(block, x, y - 1, z) : getBrightness(block, x, y, z))); Tessellator.instance.setColorOpaque_I(block.colorMultiplier(blockAccess, x, y, z)); - if (BetterFoliage.config.leavesSkew) { + if (Config.leavesSkew) { renderCrossedBlockQuadsSkew(new Double3(x + 0.5, y + 0.5, z + 0.5), halfSize, - pRot[offsetVariation].scaleAxes(BetterFoliage.config.leavesHOffset.value, BetterFoliage.config.leavesVOffset.value, BetterFoliage.config.leavesHOffset.value), - pRot[(offsetVariation + 1) & 63].scaleAxes(BetterFoliage.config.leavesHOffset.value, BetterFoliage.config.leavesVOffset.value, BetterFoliage.config.leavesHOffset.value), + pRot[offsetVariation].scaleAxes(Config.leavesHOffset, Config.leavesVOffset, Config.leavesHOffset), + pRot[(offsetVariation + 1) & 63].scaleAxes(Config.leavesHOffset, Config.leavesVOffset, Config.leavesHOffset), crossLeafIcon, uvVariation, isAirTop, isAirBottom); } else { renderCrossedBlockQuadsTranslate(new Double3(x + 0.5, y + 0.5, z + 0.5), halfSize, - pRot[offsetVariation].scaleAxes(BetterFoliage.config.leavesHOffset.value, BetterFoliage.config.leavesVOffset.value, BetterFoliage.config.leavesHOffset.value), + pRot[offsetVariation].scaleAxes(Config.leavesHOffset, Config.leavesVOffset, Config.leavesHOffset), crossLeafIcon, uvVariation, isAirTop, isAirBottom); } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLilypad.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLilypad.java index df544af..175a8cc 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLilypad.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterLilypad.java @@ -4,6 +4,7 @@ import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.render.FakeRenderBlockAOBase; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.IconSet; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -23,7 +24,7 @@ public class RenderBlockBetterLilypad extends FakeRenderBlockAOBase implements I public IconSet lilypadRoots = new IconSet("bettergrassandleaves", "better_lilypad_roots_%d"); public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - return BetterFoliage.config.lilypadEnabled && block == Blocks.waterlily; + return Config.lilypadEnabled && block == Blocks.waterlily; } public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { @@ -50,10 +51,10 @@ public class RenderBlockBetterLilypad extends FakeRenderBlockAOBase implements I null, 0.0, lilypadRoots.get(iconVariation), 2, true); - if (chanceVariation < BetterFoliage.config.lilypadChance.value && lilypadFlowers.hasIcons()) + if (chanceVariation < Config.lilypadChance && lilypadFlowers.hasIcons()) renderCrossedSideQuads(new Double3(x + 0.5, y + 0.02, z + 0.5), ForgeDirection.UP, 0.2, 0.3, - pRot[offsetVariation], BetterFoliage.config.lilypadHOffset.value, + pRot[offsetVariation], Config.lilypadHOffset, lilypadFlowers.get(iconVariation), 0, true); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterMycelium.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterMycelium.java index 4ac4416..ad1ce57 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterMycelium.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterMycelium.java @@ -5,6 +5,7 @@ import mods.betterfoliage.client.ShadersModIntegration; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.IconSet; import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -24,7 +25,7 @@ public class RenderBlockBetterMycelium extends RenderBlockAOBase implements IRen public IconSet myceliumIcons = new IconSet("bettergrassandleaves", "better_mycel_%d"); public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - if (!BetterFoliage.config.grassEnabled) return false; + if (!Config.grassEnabled) return false; if (block != Blocks.mycelium) return false; if (!blockAccess.isAirBlock(x, y + 1, z) && blockAccess.getBlock(x, y + 1, z) != Blocks.snow_layer) return false; return true; @@ -41,8 +42,8 @@ public class RenderBlockBetterMycelium extends RenderBlockAOBase implements IRen if (isSnowed || renderIcon == null) return true; int heightVariation = getSemiRandomFromPos(x, y, z, 1); - double scale = BetterFoliage.config.grassSize.value * 0.5; - double halfHeight = 0.5 * (BetterFoliage.config.grassHeightMin.value + pRand[heightVariation] * (BetterFoliage.config.grassHeightMax.value - BetterFoliage.config.grassHeightMin.value)); + double scale = Config.grassSize * 0.5; + double halfHeight = 0.5 * (Config.grassHeightMin + pRand[heightVariation] * (Config.grassHeightMax - Config.grassHeightMin)); if (isSnowed) { aoYPXZNN.setGray(0.9f); aoYPXZNP.setGray(0.9f); aoYPXZPN.setGray(0.9f); aoYPXZPP.setGray(0.9f); @@ -53,7 +54,7 @@ public class RenderBlockBetterMycelium extends RenderBlockAOBase implements IRen ShadersModIntegration.startGrassQuads(); Tessellator.instance.setBrightness(getBrightness(block, x, y + 1, z)); Tessellator.instance.setColorOpaque_I(block.colorMultiplier(blockAccess, x, y, z)); - renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 + (isSnowed ? 0.0625 : 0.0), z + 0.5), ForgeDirection.UP, scale, halfHeight, pRot[iconVariation], BetterFoliage.config.grassHOffset.value, renderIcon, 0, false); + renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 + (isSnowed ? 0.0625 : 0.0), z + 0.5), ForgeDirection.UP, scale, halfHeight, pRot[iconVariation], Config.grassHOffset, renderIcon, 0, false); return true; } 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 9370884..404a7b0 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterReed.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterReed.java @@ -8,6 +8,7 @@ import mods.betterfoliage.client.ShadersModIntegration; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.IconSet; import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.Double3; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -32,13 +33,13 @@ public class RenderBlockBetterReed extends RenderBlockAOBase implements IRenderB public NoiseGeneratorSimplex noise; public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - if (!BetterFoliage.config.reedEnabled) return false; + if (!Config.reedEnabled) return false; if (!(BetterFoliageClient.dirt.matchesID(block))) return false; if (blockAccess.getBlock(x, y + 1, z).getMaterial() != Material.water) return false; if (!blockAccess.isAirBlock(x, y + 2, z)) return false; if (blockAccess.getBiomeGenForCoords(x, z).temperature < 0.4f || blockAccess.getBiomeGenForCoords(x, z).rainfall < 0.4f) return false; int terrainVariation = MathHelper.floor_double((noise.func_151605_a(x, z) + 1.0) * 32.0); - return terrainVariation < BetterFoliage.config.reedChance.value; + return terrainVariation < Config.reedChance; } public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { @@ -52,14 +53,14 @@ public class RenderBlockBetterReed extends RenderBlockAOBase implements IRenderB IIcon topIcon = reedTopIcons.get(iconVariation); if (bottomIcon == null || topIcon == null) return true; - double quarterHeight = 0.25 * (BetterFoliage.config.reedHeightMin.value + pRand[heightVariation] * (BetterFoliage.config.reedHeightMax.value - BetterFoliage.config.reedHeightMin.value)); + double quarterHeight = 0.25 * (Config.reedHeightMin + pRand[heightVariation] * (Config.reedHeightMax - Config.reedHeightMin)); Tessellator.instance.setBrightness(getBrightness(block, x, y + 2, z)); Tessellator.instance.setColorOpaque(255, 255, 255); // render reeds ShadersModIntegration.startGrassQuads(); - renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0, z + 0.5), ForgeDirection.UP, 0.5, quarterHeight, pRot[iconVariation], BetterFoliage.config.reedHOffset.value, bottomIcon, 0, true); - renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 + 2.0 * quarterHeight, z + 0.5), ForgeDirection.UP, 0.5, quarterHeight, pRot[iconVariation], BetterFoliage.config.reedHOffset.value, topIcon, 0, true); + renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0, z + 0.5), ForgeDirection.UP, 0.5, quarterHeight, pRot[iconVariation], Config.reedHOffset, bottomIcon, 0, true); + renderCrossedSideQuads(new Double3(x + 0.5, y + 1.0 + 2.0 * quarterHeight, z + 0.5), ForgeDirection.UP, 0.5, quarterHeight, pRot[iconVariation], Config.reedHOffset, topIcon, 0, true); return true; } diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlocksBetterGrassSide.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlocksBetterGrassSide.java index 8decb35..a67dcf4 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlocksBetterGrassSide.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlocksBetterGrassSide.java @@ -1,9 +1,9 @@ package mods.betterfoliage.client.render.impl; -import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.BetterFoliageClient; import mods.betterfoliage.client.render.FakeRenderBlockAOBase; import mods.betterfoliage.client.render.IRenderBlockDecorator; +import mods.betterfoliage.common.config.Config; import mods.betterfoliage.common.util.OffsetBlockAccess; import mods.betterfoliage.common.util.Utils; import net.minecraft.block.Block; @@ -22,7 +22,7 @@ public class RenderBlocksBetterGrassSide extends FakeRenderBlockAOBase implement @Override public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - return BetterFoliage.config.ctxGrassAggressiveEnabled && + return Config.ctxGrassAggressiveEnabled && BetterFoliageClient.dirt.matchesID(block) && BetterFoliageClient.grass.matchesID(blockAccess.getBlock(x, y + 1, z)); } diff --git a/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java b/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java deleted file mode 100644 index fb9f639..0000000 --- a/src/main/java/mods/betterfoliage/common/config/BetterFoliageConfig.java +++ /dev/null @@ -1,136 +0,0 @@ -package mods.betterfoliage.common.config; - -public class BetterFoliageConfig extends ConfigBase { - - @CfgElement(category="leaves", key="enabled") - public boolean leavesEnabled = true; - - @CfgElement(category="leaves", key="skewMode") - public boolean leavesSkew = false; - - @CfgElement(category="grass", key="enabled") - public boolean grassEnabled = true; - - @CfgElement(category="grass", key="useGenerated") - public boolean grassUseGenerated = false; - - @CfgElement(category="cactus", key="enabled") - public boolean cactusEnabled = true; - - @CfgElement(category="lilypad", key="enabled") - public boolean lilypadEnabled = true; - - @CfgElement(category="reed", key="enabled") - public boolean reedEnabled = true; - - @CfgElement(category="algae", key="enabled") - public boolean algaeEnabled = true; - - @CfgElement(category="coral", key="enabled") - public boolean coralEnabled = true; - - @CfgElement(category="connectedGrass", key="classic") - public boolean ctxGrassClassicEnabled = true; - - @CfgElement(category="connectedGrass", key="aggressive") - public boolean ctxGrassAggressiveEnabled = true; - - @CfgElement(category="fallingLeaves", key="enabled") - public boolean fallingLeavesEnabled = true; - - @CfgElement(category="leaves", key="horizontalOffset") - public OptionDouble leavesHOffset = new OptionDouble(0.0, 0.4, 0.025, 0.2); - - @CfgElement(category="leaves", key="verticalOffset") - public OptionDouble leavesVOffset = new OptionDouble(0.0, 0.4, 0.025, 0.1); - - @CfgElement(category="leaves", key="size") - public OptionDouble leavesSize = new OptionDouble(0.75, 1.8, 0.05, 1.4); - - @CfgElement(category="grass", key="horizontalOffset") - public OptionDouble grassHOffset = new OptionDouble(0.0, 0.4, 0.025, 0.2); - - @CfgElement(category="grass", key="heightMin") - @Limit(max="grassHeightMax") - public OptionDouble grassHeightMin = new OptionDouble(0.1, 1.5, 0.05, 0.8); - - @CfgElement(category="grass", key="heightMax") - public OptionDouble grassHeightMax = new OptionDouble(0.1, 1.5, 0.05, 1.0); - - @CfgElement(category="grass", key="size") - public OptionDouble grassSize = new OptionDouble(0.5, 1.5, 0.05, 1.0); - - @CfgElement(category="lilypad", key="horizontalOffset") - public OptionDouble lilypadHOffset = new OptionDouble(0.0, 0.25, 0.025, 0.1); - - @CfgElement(category="lilypad", key="chance") - public OptionInteger lilypadChance = new OptionInteger(0, 64, 1, 16); - - @CfgElement(category="reed", key="horizontalOffset") - public OptionDouble reedHOffset = new OptionDouble(0.0, 0.25, 0.025, 0.1); - - @CfgElement(category="reed", key="heightMin") - @Limit(max="reedHeightMax") - public OptionDouble reedHeightMin = new OptionDouble(1.5, 3.5, 0.1, 2.0); - - @CfgElement(category="reed", key="heightMax") - public OptionDouble reedHeightMax = new OptionDouble(1.5, 3.5, 0.1, 2.5); - - @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); - - @CfgElement(category="coral", key="population") - public OptionInteger coralPopulation = new OptionInteger(0, 64, 1, 32); - - @CfgElement(category="coral", key="chance") - public OptionInteger coralChance = new OptionInteger(0, 64, 1, 32); - - @CfgElement(category="coral", key="verticalOffset") - public OptionDouble coralVOffset = new OptionDouble(0.0, 0.25, 0.025, 0.1); - - @CfgElement(category="coral", key="horizontalOffset") - public OptionDouble coralHOffset = new OptionDouble(0.0, 0.4, 0.025, 0.2); - - @CfgElement(category="coral", key="crustSize") - public OptionDouble coralCrustSize = new OptionDouble(0.75, 1.75, 0.05, 1.4); - - @CfgElement(category="coral", key="size") - public OptionDouble coralSize = new OptionDouble(0.25, 1.0, 0.05, 0.7); - - @CfgElement(category="fallingLeaves", key="speed") - public OptionDouble fallingLeavesSpeed = new OptionDouble(0.01, 0.15, 0.01, 0.05); - - @CfgElement(category="fallingLeaves", key="windStrength") - public OptionDouble fallingLeavesWindStrength = new OptionDouble(0.1, 2.0, 0.1, 0.5); - - @CfgElement(category="fallingLeaves", key="stormStrength") - public OptionDouble fallingLeavesStormStrength = new OptionDouble(0.1, 2.0, 0.1, 0.8); - - @CfgElement(category="fallingLeaves", key="size") - public OptionDouble fallingLeavesSize = new OptionDouble(0.25, 1.5, 0.05, 0.75); - - @CfgElement(category="fallingLeaves", key="chance") - public OptionDouble fallingLeavesChance = new OptionDouble(0.005, 1.0, 0.005, 0.05); - - @CfgElement(category="fallingLeaves", key="perturbation") - public OptionDouble fallingLeavesPerturb = new OptionDouble(0.05, 1.0, 0.05, 0.25); - - @CfgElement(category="fallingLeaves", key="lifetime") - public OptionDouble fallingLeavesLifetime = new OptionDouble(1.0, 10.0, 0.1, 5.0); -} diff --git a/src/main/java/mods/betterfoliage/common/config/Config.java b/src/main/java/mods/betterfoliage/common/config/Config.java new file mode 100644 index 0000000..1b8d5b6 --- /dev/null +++ b/src/main/java/mods/betterfoliage/common/config/Config.java @@ -0,0 +1,186 @@ +package mods.betterfoliage.common.config; + +import java.io.File; +import java.util.List; + +import mods.betterfoliage.BetterFoliage; +import net.minecraft.client.Minecraft; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import com.google.common.collect.Lists; + +import cpw.mods.fml.client.config.IConfigElement; +import cpw.mods.fml.client.event.ConfigChangedEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; + +public class Config { + + public enum Category { + extraLeaves, shortGrass, cactus, lilypad, reed, algae, coral, fallingLeaves, connectedGrass; + } + + public static Configuration rawConfig; + + public static boolean leavesEnabled; + public static boolean leavesSkew; + public static double leavesHOffset; + public static double leavesVOffset; + public static double leavesSize; + + public static boolean grassEnabled; + public static boolean grassUseGenerated; + public static double grassHOffset; + public static double grassHeightMin; + public static double grassHeightMax; + public static double grassSize; + + public static boolean cactusEnabled; + + public static boolean lilypadEnabled; + public static double lilypadHOffset; + public static int lilypadChance; + + public static boolean reedEnabled; + public static double reedHOffset; + public static double reedHeightMin; + public static double reedHeightMax; + public static int reedChance; + + public static boolean algaeEnabled; + public static double algaeHOffset; + public static double algaeSize; + public static double algaeHeightMin; + public static double algaeHeightMax; + public static int algaePopulation; + + public static boolean coralEnabled; + public static int coralPopulation; + public static int coralChance; + public static double coralVOffset; + public static double coralHOffset; + public static double coralCrustSize; + public static double coralSize; + + public static boolean leafFXEnabled; + public static double leafFXSpeed; + public static double leafFXWindStrength; + public static double leafFXStormStrength; + public static double leafFXSize; + public static double leafFXChance; + public static double leafFXPerturb; + public static double leafFXLifetime; + + public static boolean ctxGrassClassicEnabled; + public static boolean ctxGrassAggressiveEnabled; + + public static void readConfig(File configFile) { + rawConfig = new Configuration(configFile, true); + updateValues(); + if (rawConfig.hasChanged()) rawConfig.save(); + } + + public static void updateValues() { + leavesEnabled = getBoolean(Category.extraLeaves, "enabled", true, "betterfoliage.enabled"); + leavesSkew = getBoolean(Category.extraLeaves, "skewMode", true, "betterfoliage.leavesMode"); + leavesHOffset = getDouble(Category.extraLeaves, "hOffset", 0.2, 0.0, 0.4, "betterfoliage.hOffset"); + leavesVOffset = getDouble(Category.extraLeaves, "vOffset", 0.1, 0.0, 0.4, "betterfoliage.vOffset"); + leavesSize = getDouble(Category.extraLeaves, "size", 1.4, 0.75, 1.8, "betterfoliage.size"); + + grassEnabled = getBoolean(Category.shortGrass, "enabled", true, "betterfoliage.enabled"); + grassHOffset = getDouble(Category.shortGrass, "hOffset", 0.2, 0.0, 0.4, "betterfoliage.hOffset"); + grassHeightMin = getDouble(Category.shortGrass, "heightMin", 0.8, 0.1, 1.5, "betterfoliage.minHeight"); + grassHeightMax = getDouble(Category.shortGrass, "heightMax", 0.8, 0.1, 1.5, "betterfoliage.maxHeight"); + grassSize = getDouble(Category.shortGrass, "size", 1.0, 0.5, 1.5, "betterfoliage.size"); + grassUseGenerated = getBoolean(Category.shortGrass, "useGenerated", false, "betterfoliage.shortGrass.useGenerated"); + + cactusEnabled = getBoolean(Category.cactus, "enabled", true, "betterfoliage.enabled"); + + lilypadEnabled = getBoolean(Category.lilypad, "enabled", true, "betterfoliage.enabled"); + lilypadHOffset = getDouble(Category.lilypad, "hOffset", 0.1, 0.0, 0.25, "betterfoliage.hOffset"); + lilypadChance = getInt(Category.lilypad, "flowerChance", 16, 0, 64, "betterfoliage.lilypad.flowerChance"); + + reedEnabled = getBoolean(Category.reed, "enabled", true, "betterfoliage.enabled"); + reedHOffset = getDouble(Category.reed, "hOffset", 0.2, 0.0, 0.4, "betterfoliage.hOffset"); + reedHeightMin = getDouble(Category.reed, "heightMin", 2.0, 1.5, 3.5, "betterfoliage.minHeight"); + reedHeightMax = getDouble(Category.reed, "heightMax", 2.5, 1.5, 3.5, "betterfoliage.maxHeight"); + reedChance = getInt(Category.reed, "chance", 32, 0, 64, "betterfoliage.chance"); + + algaeEnabled = getBoolean(Category.algae, "enabled", true, "betterfoliage.enabled"); + algaeHOffset = getDouble(Category.algae, "hOffset", 0.1, 0.0, 0.25, "betterfoliage.hOffset"); + algaeSize = getDouble(Category.algae, "size", 1.0, 0.5, 1.5, "betterfoliage.size"); + algaeHeightMin = getDouble(Category.algae, "heightMin", 0.5, 0.1, 1.5, "betterfoliage.minHeight"); + algaeHeightMax = getDouble(Category.algae, "heightMax", 1.0, 0.1, 1.5, "betterfoliage.maxHeight"); + algaePopulation = getInt(Category.algae, "population", 48, 0, 64, "betterfoliage.population"); + + coralEnabled = getBoolean(Category.coral, "enabled", true, "betterfoliage.enabled"); + coralHOffset = getDouble(Category.coral, "hOffset", 0.2, 0.0, 0.4, "betterfoliage.hOffset"); + coralVOffset = getDouble(Category.coral, "vOffset", 0.1, 0.0, 0.4, "betterfoliage.vOffset"); + coralSize = getDouble(Category.coral, "size", 1.0, 0.5, 1.5, "betterfoliage.coral.size"); + coralCrustSize = getDouble(Category.coral, "crustSize", 1.0, 0.5, 1.5, "betterfoliage.coral.crustSize"); + coralChance = getInt(Category.coral, "chance", 48, 0, 64, "betterfoliage.coral.chance"); + coralPopulation = getInt(Category.coral, "population", 48, 0, 64, "betterfoliage.population"); + + leafFXEnabled = getBoolean(Category.fallingLeaves, "enabled", true, "betterfoliage.enabled"); + leafFXSpeed = getDouble(Category.fallingLeaves, "speed", 0.05, 0.01, 0.15, "betterfoliage.fallingLeaves.speed"); + leafFXWindStrength = getDouble(Category.fallingLeaves, "windStrength", 0.5, 0.1, 2.0, "betterfoliage.fallingLeaves.windStrength"); + leafFXStormStrength = getDouble(Category.fallingLeaves, "stormStrength", 0.8, 0.1, 2.0, "betterfoliage.fallingLeaves.stormStrength"); + leafFXSize = getDouble(Category.fallingLeaves, "size", 0.75, 0.25, 1.5, "betterfoliage.fallingLeaves.size"); + leafFXChance = getDouble(Category.fallingLeaves, "chance", 0.05, 0.001, 1.0, "betterfoliage.fallingLeaves.chance"); + leafFXPerturb = getDouble(Category.fallingLeaves, "perturb", 0.25, 0.01, 1.0, "betterfoliage.fallingLeaves.perturb"); + leafFXLifetime = getDouble(Category.fallingLeaves, "lifetime", 5.0, 1.0, 10.0, "betterfoliage.fallingLeaves.lifetime"); + + ctxGrassClassicEnabled = getBoolean(Category.connectedGrass, "classic", true, "betterfoliage.connectedGrass.classic"); + ctxGrassAggressiveEnabled= getBoolean(Category.connectedGrass, "aggressive", true, "betterfoliage.connectedGrass.aggressive"); + + for (Category category : Category.values()) rawConfig.setCategoryLanguageKey(category.toString(), String.format("betterfoliage.%s", category.toString())); + setOrder(Category.extraLeaves, "enabled", "skewMode", "hOffset", "vOffset", "size"); + setOrder(Category.shortGrass, "enabled", "useGenerated", "hOffset", "heightMin", "heightMax", "size"); + } + + @SuppressWarnings("rawtypes") + public static List getConfigRootCategories() { + List result = Lists.newLinkedList(); + for (Category category : Category.values()) { + ConfigElement element = new ConfigElement(rawConfig.getCategory(category.toString())); + result.add(element); + } + return result; + } + + protected static double getDouble(Category category, String key, double defaultValue, double min, double max, String langKey) { + Property prop = rawConfig.get(category.toString(), key, defaultValue); + prop.setMinValue(min); + prop.setMaxValue(max); + prop.setLanguageKey(langKey); + return prop.getDouble(); + } + + protected static int getInt(Category category, String key, int defaultValue, int min, int max, String langKey) { + Property prop = rawConfig.get(category.toString(), key, defaultValue); + prop.setMinValue(min); + prop.setMaxValue(max); + prop.setLanguageKey(langKey); + return prop.getInt(); + } + + protected static boolean getBoolean(Category category, String key, boolean defaultValue, String langKey) { + Property prop = rawConfig.get(category.toString(), key, defaultValue); + prop.setLanguageKey(langKey); + return prop.getBoolean(); + } + + protected static void setOrder(Category category, String... properties) { + rawConfig.setCategoryPropertyOrder(category.toString(), Lists.newArrayList(properties)); + } + + @SubscribeEvent + public void handleConfigChange(ConfigChangedEvent.OnConfigChangedEvent event) { + if (event.modID.equals(BetterFoliage.MOD_ID)) { + rawConfig.save(); + updateValues(); + Minecraft.getMinecraft().renderGlobal.loadRenderers(); + } + } +} diff --git a/src/main/java/mods/betterfoliage/common/config/ConfigBase.java b/src/main/java/mods/betterfoliage/common/config/ConfigBase.java deleted file mode 100644 index 5aed96c..0000000 --- a/src/main/java/mods/betterfoliage/common/config/ConfigBase.java +++ /dev/null @@ -1,137 +0,0 @@ -package mods.betterfoliage.common.config; - -import java.io.File; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.reflect.Field; - -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - -/** Config base class using annotations - * @author octarine-noise - */ -public class ConfigBase { - - /** Annotates a field linked to a config file property - * @author octarine-noise - */ - @Target(ElementType.FIELD) - @Retention(RetentionPolicy.RUNTIME) - public static @interface CfgElement { - String category(); - String key(); - String comment() default ""; - } - - /** Declares a min/max limit on another field - * @author octarine-noise - */ - @Target(ElementType.FIELD) - @Retention(RetentionPolicy.RUNTIME) - public static @interface Limit { - String min() default ""; - String max() default ""; - } - - protected Configuration config; - - public void load(File configFile) { - config = new Configuration(configFile); - config.load(); - - for (Field field : getClass().getDeclaredFields()) { - CfgElement annot = field.getAnnotation(CfgElement.class); - if (annot == null) continue; - - field.setAccessible(true); - if (field.getType().equals(boolean.class) || field.getType().equals(Boolean.class)) { - try { - Property prop = config.get(annot.category(), annot.key(), field.getBoolean(this)); - field.setBoolean(this, prop.getBoolean(field.getBoolean(this))); - } catch (Exception e) { - } - } else if (field.getType().equals(OptionInteger.class)) { - try { - OptionInteger option = (OptionInteger) field.get(this); - Property prop = config.get(annot.category(), annot.key(), option.value); - option.value = prop.getInt(option.value); - } catch (Exception e) { - } - } else if (field.getType().equals(OptionDouble.class)) { - try { - OptionDouble option = (OptionDouble) field.get(this); - Property prop = config.get(annot.category(), annot.key(), option.value); - option.value = prop.getDouble(option.value); - } catch (Exception e) { - } - } - } - - validateLimits(); - if (config.hasChanged()) config.save(); - } - - protected void validateLimits() { - for (Field fieldThis : getClass().getDeclaredFields()) { - Limit annot = fieldThis.getAnnotation(Limit.class); - if (annot == null) continue; - - try { - Field fieldMin = annot.min().isEmpty() ? null : getClass().getDeclaredField(annot.min()); - Field fieldMax = annot.max().isEmpty() ? null : getClass().getDeclaredField(annot.max()); - fieldThis.setAccessible(true); - fieldMin.setAccessible(true); - fieldMax.setAccessible(true); - - if (fieldThis.getType().equals(OptionInteger.class)) { - OptionInteger optionThis = (OptionInteger) fieldThis.get(this); - OptionInteger optionMin = fieldMin == null ? null : (OptionInteger) fieldMin.get(this); - OptionInteger optionMax = fieldMax == null ? null : (OptionInteger) fieldMax.get(this); - if (optionMin != null) optionThis.value = Math.max(optionThis.value, optionMin.value); - if (optionMax != null) optionThis.value = Math.min(optionThis.value, optionMax.value); - } else if (fieldThis.getType().equals(OptionDouble.class)) { - OptionDouble optionThis = (OptionDouble) fieldThis.get(this); - OptionDouble optionMin = fieldMin == null ? null : (OptionDouble) fieldMin.get(this); - OptionDouble optionMax = fieldMax == null ? null : (OptionDouble) fieldMax.get(this); - if (optionMin != null) optionThis.value = Math.max(optionThis.value, optionMin.value); - if (optionMax != null) optionThis.value = Math.min(optionThis.value, optionMax.value); - } - } catch (Exception e) {} - } - } - - public void save() { - for (Field field : getClass().getDeclaredFields()) { - CfgElement annot = field.getAnnotation(CfgElement.class); - if (annot == null) continue; - - field.setAccessible(true); - if (field.getType().equals(boolean.class) || field.getType().equals(Boolean.class)) { - try { - Property prop = config.get(annot.category(), annot.key(), field.getBoolean(this)); - prop.set(field.getBoolean(this)); - } catch (Exception e) { - } - } else if (field.getType().equals(OptionInteger.class)) { - try { - OptionInteger option = (OptionInteger) field.get(this); - Property prop = config.get(annot.category(), annot.key(), option.value); - prop.set(option.value); - } catch (Exception e) { - } - } else if (field.getType().equals(OptionDouble.class)) { - try { - OptionDouble option = (OptionDouble) field.get(this); - Property prop = config.get(annot.category(), annot.key(), option.value); - prop.set(option.value); - } catch (Exception e) { - } - } - } - - config.save(); - } -} diff --git a/src/main/java/mods/betterfoliage/common/config/OptionDouble.java b/src/main/java/mods/betterfoliage/common/config/OptionDouble.java deleted file mode 100644 index 91d60dc..0000000 --- a/src/main/java/mods/betterfoliage/common/config/OptionDouble.java +++ /dev/null @@ -1,26 +0,0 @@ -package mods.betterfoliage.common.config; - -public class OptionDouble { - - public double min; - public double max; - public double step; - public double value; - - public OptionDouble(double min, double max, double step, double value) { - this.min = min; - this.max = max; - this.step = step; - this.value = value; - } - - public void increment(int times) { - value += times * step; - if (value > max) value = max; - } - - public void decrement(int times) { - value -= times * step; - if (value < min) value = min; - } -} diff --git a/src/main/java/mods/betterfoliage/common/config/OptionInteger.java b/src/main/java/mods/betterfoliage/common/config/OptionInteger.java deleted file mode 100644 index f2448ad..0000000 --- a/src/main/java/mods/betterfoliage/common/config/OptionInteger.java +++ /dev/null @@ -1,26 +0,0 @@ -package mods.betterfoliage.common.config; - -public class OptionInteger { - - public int min; - public int max; - public int step; - public int value; - - public OptionInteger(int min, int max, int step, int value) { - this.min = min; - this.max = max; - this.step = step; - this.value = value; - } - - public void increment(int times) { - value += times * step; - if (value > max) value = max; - } - - public void decrement(int times) { - value -= times * step; - if (value < min) value = min; - } -} diff --git a/src/main/resources/assets/betterfoliage/lang/en_US.lang b/src/main/resources/assets/betterfoliage/lang/en_US.lang index f4ec5cc..8fb56fe 100644 --- a/src/main/resources/assets/betterfoliage/lang/en_US.lang +++ b/src/main/resources/assets/betterfoliage/lang/en_US.lang @@ -1,39 +1,69 @@ 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 +betterfoliage.enabled=Enable +betterfoliage.enabled.tooltip=Is this feature enabled? +betterfoliage.hOffset=Horizontal offset +betterfoliage.hOffset.tooltip=Distance feature is shifted horizontally, in blocks +betterfoliage.vOffset=Vertical offset +betterfoliage.vOffset.tooltip=Distance feature is shifted vertically, in blocks +betterfoliage.size=Size +betterfoliage.size.tooltip=Size of element +betterfoliage.minHeight=Minimum height +betterfoliage.minHeight.tooltip=Minimum height of element +betterfoliage.minHeight=Maximum height +betterfoliage.minHeight.tooltip=Maximum height of element +betterfoliage.population=Population +betterfoliage.population.tooltip=Chance (N in 64) that an eligible block will have this feature -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=Reeds: %s -message.betterfoliage.betterAlgae=Algae: %s -message.betterfoliage.betterCoral=Coral: %s -message.betterfoliage.fallingLeaves=Falling Leaves: %s +betterfoliage.extraLeaves=Extra Leaves +betterfoliage.extraLeaves.tooltip=Extra round leaves on leaf blocks +message.betterfoliage.leavesMode=Leaves offset mode +message.betterfoliage.leavesMode.tooltip="true" means leaf quads are skewed, "false" means translated -message.betterfoliage.size=Size -message.betterfoliage.hOffset=H.Offset -message.betterfoliage.vOffset=V.Offset -message.betterfoliage.minHeight=Min.Height -message.betterfoliage.maxHeight=Max.Height -message.betterfoliage.flowerChance=Flower Chance -message.betterfoliage.reedChance=Reed Population -message.betterfoliage.leavesMode=Leaves Offset: %s -message.betterfoliage.genShortgrass=Use generated: %s -message.betterfoliage.leavesSkew=Skew -message.betterfoliage.leavesTranslate=Translate -message.betterfoliage.algaeChance=Algae Population -message.betterfoliage.crustSize=Crust Size -message.betterfoliage.coralChance=Coral Chance -message.betterfoliage.coralPopulation=Coral Population +betterfoliage.shortGrass=Short Grass +betterfoliage.shortGrass.tooltip=Tufts of grass on top of grass blocks +betterfoliage.shortGrass.useGenerated=Use generated texture +betterfoliage.shortGrass.useGenerated.tooltip=Generated texture is made by slicing the tallgrass texture from the active resource pack set -message.betterfoliage.speed=Speed -message.betterfoliage.windStrength=Wind Strength -message.betterfoliage.stormStrength=Storm Strength -message.betterfoliage.fallingLeafChance=Particle Chance -message.betterfoliage.fallingLeafPerturbation=Perturbation -message.betterfoliage.fallingLeafLifetime=Max. lifetime \ No newline at end of file +betterfoliage.cactus=Better Cactus +betterfoliage.cactus.tooltip=Enhance cactus with extra bits and smooth shading + +betterfoliage.lilypad=Better Lilypad +betterfoliage.lilypad.tooltip=Enhance lilypad with roots and occasional flowers +betterfoliage.lilypad.flowerChance=Flower chance +betterfoliage.lilypad.flowerChance.tooltip=Chance (N in 64) of a lilypad having a flower on it + +betterfoliage.reed=Reeds +betterfoliage.reed.tooltip=Reeds on dirt blocks in shallow water + +betterfoliage.algae=Algae +betterfoliage.algae.tooltip=Algae on dirt blocks in deep water + +betterfoliage.coral=Coral +betterfoliage.coral.tooltip=Coral on sand blocks in deep water +betterfoliage.coral.size=Coral size +betterfoliage.coral.size.tooltip=Size of coral bits sticking out +betterfoliage.coral.crustSize=Crust size +betterfoliage.coral.crustSize.tooltip=Size of the flat coral part +betterfoliage.coral.chance=Coral chance +betterfoliage.coral.chance.tooltip=Chance (N in 64) of a specific face of the block to show coral + +betterfoliage.fallingLeaves=Falling leaves +betterfoliage.fallingLeaves.tooltip=Falling leaf particle FX emitted from the bottom of leaf blocks +betterfoliage.fallingLeaves.speed=Particle speed +betterfoliage.fallingLeaves.speed.tooltip=Overall particle speed +betterfoliage.fallingLeaves.windStrength=Wind strength +betterfoliage.fallingLeaves.windStrength.tooltip=Magnitude of wind effects in good weather (spread of normal distribution centered on 0) +betterfoliage.fallingLeaves.stormStrength=Storm strength +betterfoliage.fallingLeaves.stormStrength.tooltip=Additional magnitude of wind effects in rainy weather (spread of normal distribution centered on 0) +betterfoliage.fallingLeaves.size=Particle size +betterfoliage.fallingLeaves.chance=Particle chance +betterfoliage.fallingLeaves.chance.tooltip=Chance of each random render tick hitting a leaf block to spawn a particle +betterfoliage.fallingLeaves.perturb=Perturbation +betterfoliage.fallingLeaves.perturb.tooltip=Magnitude of perturbation effect. Adds a corkscrew-like motion to the particle synchronized to its rotation +betterfoliage.fallingLeaves.lifetime=Maximum lifetime +betterfoliage.fallingLeaves.lifetime.tooltip=Maximum lifetime of particle in seconds. Minimum lifetime is 60% of this value + +betterfoliage.connectedGrass=Connected grass textures +betterfoliage.connectedGrass.classic=Classic connected grass +betterfoliage.connectedGrass.aggressive=Aggressive connected grass