From 020d347ee3cc4ec4ce184d409a95e2dfa55ba139 Mon Sep 17 00:00:00 2001 From: Byron Shelden Date: Sat, 2 Aug 2014 12:56:41 -0700 Subject: [PATCH 1/6] Added additional power generation configuration (#1164) * Can now configure heat generator power from adjacent lava * Can now configure heat generator power from the nether * Wind power is now configured by specifying minimal and maximal Y levels and generation values. * Defaults to 60J/t at Y 24 and 480J/t at Y 255 --- .../generators/client/gui/GuiWindTurbine.java | 7 ++++-- .../common/GeneratorsCommonProxy.java | 25 ++++++++++++++++++- .../generators/common/MekanismGenerators.java | 23 ++++++++++++++--- .../common/tile/TileEntityHeatGenerator.java | 22 ++++++++-------- .../common/tile/TileEntityWindTurbine.java | 23 ++++++++++++++--- 5 files changed, 80 insertions(+), 20 deletions(-) diff --git a/src/main/java/mekanism/generators/client/gui/GuiWindTurbine.java b/src/main/java/mekanism/generators/client/gui/GuiWindTurbine.java index eb8204a26..751a22956 100644 --- a/src/main/java/mekanism/generators/client/gui/GuiWindTurbine.java +++ b/src/main/java/mekanism/generators/client/gui/GuiWindTurbine.java @@ -1,5 +1,6 @@ package mekanism.generators.client.gui; +import java.text.DecimalFormat; import java.util.List; import mekanism.api.EnumColor; @@ -29,6 +30,8 @@ public class GuiWindTurbine extends GuiMekanism { public TileEntityWindTurbine tileEntity; + private DecimalFormat powerFormat = new DecimalFormat("0.##"); + public GuiWindTurbine(InventoryPlayer inventory, TileEntityWindTurbine tentity) { super(new ContainerWindTurbine(inventory, tentity)); @@ -40,7 +43,7 @@ public class GuiWindTurbine extends GuiMekanism public List getInfo() { return ListUtils.asList( - "Producing: " + MekanismUtils.getEnergyDisplay(tileEntity.isActive ? MekanismGenerators.windGeneration*tileEntity.getMultiplier() : 0) + "/t", + "Producing: " + MekanismUtils.getEnergyDisplay(tileEntity.isActive ? MekanismGenerators.windGenerationMin*tileEntity.getMultiplier() : 0) + "/t", "Storing: " + MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()), "Max Output: " + MekanismUtils.getEnergyDisplay(tileEntity.getMaxOutput()) + "/t"); } @@ -57,7 +60,7 @@ public class GuiWindTurbine extends GuiMekanism fontRendererObj.drawString(tileEntity.getInventoryName(), 45, 6, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040); fontRendererObj.drawString(MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()), 51, 26, 0x00CD00); - fontRendererObj.drawString(MekanismUtils.localize("gui.power") + ": " + MekanismGenerators.windGeneration*tileEntity.getMultiplier(), 51, 35, 0x00CD00); + fontRendererObj.drawString(MekanismUtils.localize("gui.power") + ": " + powerFormat.format(MekanismGenerators.windGenerationMin*tileEntity.getMultiplier()), 51, 35, 0x00CD00); fontRendererObj.drawString(MekanismUtils.localize("gui.out") + ": " + MekanismUtils.getEnergyDisplay(tileEntity.getMaxOutput()) + "/t", 51, 44, 0x00CD00); int size = 44; diff --git a/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java b/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java index cb833cfb9..724b7e45d 100644 --- a/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java +++ b/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java @@ -51,13 +51,36 @@ public class GeneratorsCommonProxy MekanismGenerators.advancedSolarGeneration = Mekanism.configuration.get("generation", "AdvancedSolarGeneration", 300D).getDouble(300D); MekanismGenerators.bioGeneration = Mekanism.configuration.get("generation", "BioGeneration", 350D).getDouble(350D); MekanismGenerators.heatGeneration = Mekanism.configuration.get("generation", "HeatGeneration", 150D).getDouble(150D); + MekanismGenerators.heatGenerationLava = Mekanism.configuration.get("generation", "HeatGenerationLava", 5D).getDouble(5D); + MekanismGenerators.heatGenerationNether = Mekanism.configuration.get("generation", "HeatGenerationNether", 100D).getDouble(100D); MekanismGenerators.solarGeneration = Mekanism.configuration.get("generation", "SolarGeneration", 50D).getDouble(50D); - MekanismGenerators.windGeneration = Mekanism.configuration.get("generation", "WindGeneration", 60D).getDouble(60D); + loadWindConfiguration(); if(Mekanism.configuration.hasChanged()) Mekanism.configuration.save(); } + private void loadWindConfiguration() { + if (Mekanism.configuration.hasKey("generation", "WindGeneration")) { + // Migrate the old wind generation config + final double legacyWindGeneration = Mekanism.configuration.get("generation", "WindGeneration", 60D).getDouble(60D); + final double windGenerationMax = legacyWindGeneration * 8D; + Mekanism.configuration.getCategory("generation").remove("WindGeneration"); + + MekanismGenerators.windGenerationMin = Mekanism.configuration.get("generation", "WindGenerationMin", legacyWindGeneration).getDouble(legacyWindGeneration); + MekanismGenerators.windGenerationMax = Mekanism.configuration.get("generation", "WindGenerationMax", windGenerationMax).getDouble(windGenerationMax); + } else { + MekanismGenerators.windGenerationMin = Mekanism.configuration.get("generation", "WindGenerationMin", 60D).getDouble(60D); + MekanismGenerators.windGenerationMax = Mekanism.configuration.get("generation", "WindGenerationMax", 480D).getDouble(480D); + } + + // Ensure max > min to avoid division by zero later + final int minY = Mekanism.configuration.get("generation", "WindGenerationMinY", 24).getInt(24); + final int maxY = Mekanism.configuration.get("generation", "WindGenerationMaxY", 255).getInt(255); + MekanismGenerators.windGenerationMinY = minY; + MekanismGenerators.windGenerationMaxY = Math.max(minY + 1, maxY); + } + /** * Get the actual interface for a GUI. Client-only. * @param ID - gui ID diff --git a/src/main/java/mekanism/generators/common/MekanismGenerators.java b/src/main/java/mekanism/generators/common/MekanismGenerators.java index ebff7db50..d27c48063 100644 --- a/src/main/java/mekanism/generators/common/MekanismGenerators.java +++ b/src/main/java/mekanism/generators/common/MekanismGenerators.java @@ -59,8 +59,15 @@ public class MekanismGenerators implements IModule public static double advancedSolarGeneration; public static double bioGeneration; public static double heatGeneration; + public static double heatGenerationLava; + public static double heatGenerationNether; public static double solarGeneration; - public static double windGeneration; + + public static double windGenerationMin; + public static double windGenerationMax; + + public static int windGenerationMinY; + public static int windGenerationMaxY; @EventHandler public void postInit(FMLPostInitializationEvent event) @@ -168,8 +175,13 @@ public class MekanismGenerators implements IModule dataStream.writeDouble(advancedSolarGeneration); dataStream.writeDouble(bioGeneration); dataStream.writeDouble(heatGeneration); + dataStream.writeDouble(heatGenerationLava); + dataStream.writeDouble(heatGenerationNether); dataStream.writeDouble(solarGeneration); - dataStream.writeDouble(windGeneration); + dataStream.writeDouble(windGenerationMin); + dataStream.writeDouble(windGenerationMax); + dataStream.writeInt(windGenerationMinY); + dataStream.writeInt(windGenerationMaxY); } @Override @@ -178,8 +190,13 @@ public class MekanismGenerators implements IModule advancedSolarGeneration = dataStream.readDouble(); bioGeneration = dataStream.readDouble(); heatGeneration = dataStream.readDouble(); + heatGenerationLava = dataStream.readDouble(); + heatGenerationNether = dataStream.readDouble(); solarGeneration = dataStream.readDouble(); - windGeneration = dataStream.readDouble(); + windGenerationMin = dataStream.readDouble(); + windGenerationMax = dataStream.readDouble(); + windGenerationMinY = dataStream.readInt(); + windGenerationMaxY = dataStream.readInt(); } @SubscribeEvent diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java index 84216e171..5cd64cd3b 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java @@ -182,24 +182,26 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu public double getBoost() { - int boost = 0; + int lavaBoost = 0; + double netherBoost = 0D; if(isLava(xCoord+1, yCoord, zCoord)) - boost+=5; + lavaBoost+=1; if(isLava(xCoord-1, yCoord, zCoord)) - boost+=5; + lavaBoost+=1; if(isLava(xCoord, yCoord+1, zCoord)) - boost+=5; + lavaBoost+=1; if(isLava(xCoord, yCoord-1, zCoord)) - boost+=5; + lavaBoost+=1; if(isLava(xCoord, yCoord, zCoord+1)) - boost+=5; + lavaBoost+=1; if(isLava(xCoord, yCoord, zCoord-1)) - boost+=5; - if(worldObj.provider.dimensionId == -1) - boost+=100; + lavaBoost+=1; - return boost; + if(worldObj.provider.dimensionId == -1) + netherBoost = MekanismGenerators.heatGenerationNether; + + return (MekanismGenerators.heatGenerationLava * lavaBoost) + netherBoost; } private boolean isLava(int x, int y, int z) diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java b/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java index f423f951b..45e899318 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java @@ -18,7 +18,7 @@ public class TileEntityWindTurbine extends TileEntityGenerator implements IBound public TileEntityWindTurbine() { - super("WindTurbine", 200000, (MekanismGenerators.windGeneration*8)*2); + super("WindTurbine", 200000, (MekanismGenerators.windGenerationMax)*2); inventory = new ItemStack[1]; } @@ -34,7 +34,7 @@ public class TileEntityWindTurbine extends TileEntityGenerator implements IBound if(canOperate()) { setActive(true); - setEnergy(electricityStored + (MekanismGenerators.windGeneration*getMultiplier())); + setEnergy(electricityStored + (MekanismGenerators.windGenerationMin*getMultiplier())); } else { setActive(false); @@ -42,10 +42,25 @@ public class TileEntityWindTurbine extends TileEntityGenerator implements IBound } } - /** 0 - 8 **/ + /** Determines the current output multiplier, taking sky visibility and height into account. **/ public float getMultiplier() { - return worldObj.canBlockSeeTheSky(xCoord, yCoord+4, zCoord) ? (((float)yCoord+4)/(float)256)*8 : 0; + if (worldObj.canBlockSeeTheSky(xCoord, yCoord+4, zCoord)) { + final float minY = (float) MekanismGenerators.windGenerationMinY; + final float maxY = (float) MekanismGenerators.windGenerationMaxY; + final float minG = (float) MekanismGenerators.windGenerationMin; + final float maxG = (float) MekanismGenerators.windGenerationMax; + + final float slope = (maxG - minG) / (maxY - minY); + final float intercept = minG - slope * minY; + + final float clampedY = Math.min(maxY, Math.max(minY, (float)(yCoord+4))); + final float toGen = slope * clampedY + intercept; + + return toGen / minG; + } else { + return 0; + } } @Override From 79ce886df221b756ad784a03e642b734a969382a Mon Sep 17 00:00:00 2001 From: jstockwin Date: Sun, 3 Aug 2014 00:47:18 +0100 Subject: [PATCH 2/6] Fixed some Electric Chest bugs Electric Chest was not updating when it was (un)locked, meaning that mechanical pipes would not (dis)connect and reconnect. Also noticed that Electric Chest won't accept transporters connecting to the bottom, which I thought was odd, however it looked intentional so I left it alone. (..?) Also made it so electric chests will not open if there is a solid block above them. --- src/main/java/mekanism/common/block/BlockMachine.java | 2 +- src/main/java/mekanism/common/network/PacketElectricChest.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index 8cac64014..fcfafe0f6 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -722,7 +722,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer { TileEntityElectricChest electricChest = (TileEntityElectricChest)tileEntity; - if(!entityplayer.isSneaking()) + if(!(entityplayer.isSneaking() || world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN))) { if(electricChest.canAccess()) { diff --git a/src/main/java/mekanism/common/network/PacketElectricChest.java b/src/main/java/mekanism/common/network/PacketElectricChest.java index 574347b45..74d50e407 100644 --- a/src/main/java/mekanism/common/network/PacketElectricChest.java +++ b/src/main/java/mekanism/common/network/PacketElectricChest.java @@ -102,6 +102,7 @@ public class PacketElectricChest implements IMessageHandler Date: Mon, 4 Aug 2014 20:15:10 +0100 Subject: [PATCH 3/6] Allow top/bottom to interact with charging slot Might add side configuration and ejectors and stuff later, but fixes #1281. (Sorry it took so long.) --- src/main/java/mekanism/common/tile/TileEntityEnergyCube.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mekanism/common/tile/TileEntityEnergyCube.java b/src/main/java/mekanism/common/tile/TileEntityEnergyCube.java index c57ac3b97..32cfe4cf9 100644 --- a/src/main/java/mekanism/common/tile/TileEntityEnergyCube.java +++ b/src/main/java/mekanism/common/tile/TileEntityEnergyCube.java @@ -133,7 +133,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IPe @Override public int[] getAccessibleSlotsFromSide(int side) { - return side == 1 ? new int[] {0} : new int[] {1}; + return side <= 1 ? new int[] {0} : new int[] {1}; } @Override From 8509ebab1893c9eebbbcf9fc647290036b10ea18 Mon Sep 17 00:00:00 2001 From: jstockwin Date: Mon, 4 Aug 2014 20:18:57 +0100 Subject: [PATCH 4/6] Stop pipes connecting to front of Heat Generator. Prevents Mechanical Pipes connecting to the front (energy output) side of the Heat Generator. Currently they physically connect, leading you to assume they are transferring the lava, however they are not as this is the energy output side and it does not accept lava. --- .../generators/common/tile/TileEntityHeatGenerator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java index 84216e171..cd696e217 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java @@ -322,7 +322,7 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu @Override public boolean canFill(ForgeDirection from, Fluid fluid) { - return fluid == FluidRegistry.LAVA; + return (fluid == FluidRegistry.LAVA) && (from != ForgeDirection.getOrientation(facing)); } @Override @@ -334,6 +334,9 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { + if(from == ForgeDirection.getOrientation(facing)){ + return new FluidTankInfo[0]; + } return new FluidTankInfo[] {lavaTank.getInfo()}; } From 27b61e288a173c2ae28db29c62d017d9a640da1d Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 5 Aug 2014 16:53:40 -0400 Subject: [PATCH 5/6] Fixed a few bugs --- .../container/ContainerChemicalOxidizer.java | 14 ++++++++++++-- .../common/tile/TileEntityHeatGenerator.java | 9 ++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/mekanism/common/inventory/container/ContainerChemicalOxidizer.java b/src/main/java/mekanism/common/inventory/container/ContainerChemicalOxidizer.java index d4a659825..fb8b10ae8 100644 --- a/src/main/java/mekanism/common/inventory/container/ContainerChemicalOxidizer.java +++ b/src/main/java/mekanism/common/inventory/container/ContainerChemicalOxidizer.java @@ -74,9 +74,19 @@ public class ContainerChemicalOxidizer extends Container if(RecipeHandler.getItemToGasOutput(slotStack, false, Recipe.CHEMICAL_OXIDIZER.get()) != null) { - if(!mergeItemStack(slotStack, 0, 1, true)) + if(slotID != 0) { - return null; + if(!mergeItemStack(slotStack, 0, 1, true)) + { + return null; + } + } + else if(slotID == 0) + { + if(!mergeItemStack(slotStack, 4, inventorySlots.size(), true)) + { + return null; + } } } else if(ChargeUtils.canBeDischarged(slotStack)) diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java index cd696e217..36baa1f8d 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java @@ -9,6 +9,7 @@ import mekanism.common.Mekanism; import mekanism.common.util.ChargeUtils; import mekanism.common.util.FluidContainerUtils; import mekanism.common.util.MekanismUtils; +import mekanism.common.util.PipeUtils; import mekanism.generators.common.MekanismGenerators; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -322,7 +323,7 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu @Override public boolean canFill(ForgeDirection from, Fluid fluid) { - return (fluid == FluidRegistry.LAVA) && (from != ForgeDirection.getOrientation(facing)); + return fluid == FluidRegistry.LAVA && from != ForgeDirection.getOrientation(facing); } @Override @@ -334,9 +335,11 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { - if(from == ForgeDirection.getOrientation(facing)){ - return new FluidTankInfo[0]; + if(from == ForgeDirection.getOrientation(facing)) + { + return PipeUtils.EMPTY; } + return new FluidTankInfo[] {lavaTank.getInfo()}; } From 873af4be2ed0f0809ecf8dc4fc96f636e58c526d Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 5 Aug 2014 16:55:55 -0400 Subject: [PATCH 6/6] Cleanup --- .../generators/common/GeneratorsCommonProxy.java | 16 +++++++++++----- .../common/tile/TileEntityWindTurbine.java | 6 ++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java b/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java index 724b7e45d..ebf9ae3e8 100644 --- a/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java +++ b/src/main/java/mekanism/generators/common/GeneratorsCommonProxy.java @@ -57,26 +57,32 @@ public class GeneratorsCommonProxy loadWindConfiguration(); if(Mekanism.configuration.hasChanged()) + { Mekanism.configuration.save(); + } } - private void loadWindConfiguration() { - if (Mekanism.configuration.hasKey("generation", "WindGeneration")) { - // Migrate the old wind generation config + private void loadWindConfiguration() + { + if(Mekanism.configuration.hasKey("generation", "WindGeneration")) + { + //Migrate the old wind generation config final double legacyWindGeneration = Mekanism.configuration.get("generation", "WindGeneration", 60D).getDouble(60D); final double windGenerationMax = legacyWindGeneration * 8D; Mekanism.configuration.getCategory("generation").remove("WindGeneration"); MekanismGenerators.windGenerationMin = Mekanism.configuration.get("generation", "WindGenerationMin", legacyWindGeneration).getDouble(legacyWindGeneration); MekanismGenerators.windGenerationMax = Mekanism.configuration.get("generation", "WindGenerationMax", windGenerationMax).getDouble(windGenerationMax); - } else { + } + else { MekanismGenerators.windGenerationMin = Mekanism.configuration.get("generation", "WindGenerationMin", 60D).getDouble(60D); MekanismGenerators.windGenerationMax = Mekanism.configuration.get("generation", "WindGenerationMax", 480D).getDouble(480D); } - // Ensure max > min to avoid division by zero later + //Ensure max > min to avoid division by zero later final int minY = Mekanism.configuration.get("generation", "WindGenerationMinY", 24).getInt(24); final int maxY = Mekanism.configuration.get("generation", "WindGenerationMaxY", 255).getInt(255); + MekanismGenerators.windGenerationMinY = minY; MekanismGenerators.windGenerationMaxY = Math.max(minY + 1, maxY); } diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java b/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java index 45e899318..b8ea7fbe8 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java @@ -45,7 +45,8 @@ public class TileEntityWindTurbine extends TileEntityGenerator implements IBound /** Determines the current output multiplier, taking sky visibility and height into account. **/ public float getMultiplier() { - if (worldObj.canBlockSeeTheSky(xCoord, yCoord+4, zCoord)) { + if(worldObj.canBlockSeeTheSky(xCoord, yCoord+4, zCoord)) + { final float minY = (float) MekanismGenerators.windGenerationMinY; final float maxY = (float) MekanismGenerators.windGenerationMaxY; final float minG = (float) MekanismGenerators.windGenerationMin; @@ -58,7 +59,8 @@ public class TileEntityWindTurbine extends TileEntityGenerator implements IBound final float toGen = slope * clampedY + intercept; return toGen / minG; - } else { + } + else { return 0; } }