new feature: algae
This commit is contained in:
@@ -6,6 +6,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import mods.betterfoliage.BetterFoliage;
|
import mods.betterfoliage.BetterFoliage;
|
||||||
import mods.betterfoliage.client.render.IRenderBlockDecorator;
|
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.RenderBlockBetterCactus;
|
||||||
import mods.betterfoliage.client.render.impl.RenderBlockBetterGrass;
|
import mods.betterfoliage.client.render.impl.RenderBlockBetterGrass;
|
||||||
import mods.betterfoliage.client.render.impl.RenderBlockBetterLeaves;
|
import mods.betterfoliage.client.render.impl.RenderBlockBetterLeaves;
|
||||||
@@ -52,6 +53,7 @@ public class BetterFoliageClient implements ILeafTextureRecognizer {
|
|||||||
registerRenderer(new RenderBlockBetterCactus());
|
registerRenderer(new RenderBlockBetterCactus());
|
||||||
registerRenderer(new RenderBlockBetterLilypad());
|
registerRenderer(new RenderBlockBetterLilypad());
|
||||||
registerRenderer(new RenderBlockBetterReed());
|
registerRenderer(new RenderBlockBetterReed());
|
||||||
|
registerRenderer(new RenderBlockBetterAlgae());
|
||||||
|
|
||||||
leaves = new BlockMatcher(BlockLeavesBase.class.getName(),
|
leaves = new BlockMatcher(BlockLeavesBase.class.getName(),
|
||||||
"forestry.arboriculture.gadgets.BlockLeaves",
|
"forestry.arboriculture.gadgets.BlockLeaves",
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -17,7 +17,8 @@ public class ConfigGuiMain extends ConfigGuiScreenBase {
|
|||||||
TOGGLE_GRASS, CONFIG_GRASS,
|
TOGGLE_GRASS, CONFIG_GRASS,
|
||||||
TOGGLE_CACTUS, CONFIG_CACTUS,
|
TOGGLE_CACTUS, CONFIG_CACTUS,
|
||||||
TOGGLE_LILYPAD, CONFIG_LILYPAD,
|
TOGGLE_LILYPAD, CONFIG_LILYPAD,
|
||||||
TOGGLE_REED, CONFIG_REED}
|
TOGGLE_REED, CONFIG_REED,
|
||||||
|
TOGGLE_ALGAE, CONFIG_ALGAE}
|
||||||
|
|
||||||
public ConfigGuiMain(GuiScreen parent) {
|
public ConfigGuiMain(GuiScreen parent) {
|
||||||
super(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.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.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() {
|
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_CACTUS.ordinal(), "message.betterfoliage.betterCactus", BetterFoliage.config.cactusEnabled);
|
||||||
setButtonOptionBoolean(Button.TOGGLE_LILYPAD.ordinal(), "message.betterfoliage.betterLilypad", BetterFoliage.config.lilypadEnabled);
|
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_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;
|
((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_CACTUS.ordinal()) BetterFoliage.config.cactusEnabled = !BetterFoliage.config.cactusEnabled;
|
||||||
if (id == Button.TOGGLE_LILYPAD.ordinal()) BetterFoliage.config.lilypadEnabled = !BetterFoliage.config.lilypadEnabled;
|
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_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_LEAVES.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiLeaves(this));
|
||||||
if (id== Button.CONFIG_GRASS.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiGrass(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_LILYPAD.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiLilypad(this));
|
||||||
if (id== Button.CONFIG_REED.ordinal()) FMLClientHandler.instance().showGuiScreen(new ConfigGuiReed(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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import mods.betterfoliage.client.gui.widget.OptionDoubleWidget;
|
|||||||
import mods.betterfoliage.client.gui.widget.OptionIntegerWidget;
|
import mods.betterfoliage.client.gui.widget.OptionIntegerWidget;
|
||||||
import net.minecraft.client.gui.GuiButton;
|
import net.minecraft.client.gui.GuiButton;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import net.minecraft.client.resources.I18n;
|
||||||
import cpw.mods.fml.client.FMLClientHandler;
|
import cpw.mods.fml.client.FMLClientHandler;
|
||||||
|
|
||||||
public class ConfigGuiReed extends ConfigGuiScreenBase {
|
public class ConfigGuiReed extends ConfigGuiScreenBase {
|
||||||
@@ -21,7 +22,7 @@ public class ConfigGuiReed extends ConfigGuiScreenBase {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void addButtons(int x, int y) {
|
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
|
@Override
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,6 +20,9 @@ public class BetterFoliageConfig extends ConfigBase {
|
|||||||
@CfgElement(category="reed", key="enabled")
|
@CfgElement(category="reed", key="enabled")
|
||||||
public boolean reedEnabled = true;
|
public boolean reedEnabled = true;
|
||||||
|
|
||||||
|
@CfgElement(category="algae", key="enabled")
|
||||||
|
public boolean algaeEnabled = true;
|
||||||
|
|
||||||
@CfgElement(category="leaves", key="horizontalOffset")
|
@CfgElement(category="leaves", key="horizontalOffset")
|
||||||
public OptionDouble leavesHOffset = new OptionDouble(0.0, 0.4, 0.025, 0.2);
|
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")
|
@CfgElement(category="reed", key="chance")
|
||||||
public OptionInteger reedChance = new OptionInteger(0, 64, 1, 32);
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ key.betterfoliage.gui=Open Settings
|
|||||||
message.betterfoliage.optionOn=ON
|
message.betterfoliage.optionOn=ON
|
||||||
message.betterfoliage.optionOff=OFF
|
message.betterfoliage.optionOff=OFF
|
||||||
message.betterfoliage.config=Config
|
message.betterfoliage.config=Config
|
||||||
|
|
||||||
message.betterfoliage.back=Back
|
message.betterfoliage.back=Back
|
||||||
message.betterfoliage.close=Close
|
message.betterfoliage.close=Close
|
||||||
|
|
||||||
@@ -24,3 +23,4 @@ message.betterfoliage.reedChance=Reed Chance
|
|||||||
message.betterfoliage.leavesMode=Leaves Offset: %s
|
message.betterfoliage.leavesMode=Leaves Offset: %s
|
||||||
message.betterfoliage.leavesSkew=Skew
|
message.betterfoliage.leavesSkew=Skew
|
||||||
message.betterfoliage.leavesTranslate=Translate
|
message.betterfoliage.leavesTranslate=Translate
|
||||||
|
message.betterfoliage.algaeChance=Algae Chance
|
||||||
@@ -4,5 +4,5 @@
|
|||||||
"version": "$version",
|
"version": "$version",
|
||||||
"mcversion": "$mcversion",
|
"mcversion": "$mcversion",
|
||||||
"description": "Leafier leaves and grassier grass",
|
"description": "Leafier leaves and grassier grass",
|
||||||
"credits": "Made by octarine-noise"
|
"authorList" : ["octarine-noise"]
|
||||||
}]
|
}]
|
||||||
Reference in New Issue
Block a user