From 4fb335b7d32cdff6b38298b09201ffdb8ab5741e Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Thu, 16 Jan 2014 19:00:53 -0500 Subject: [PATCH] Lay down framework for gas-based advanced machines --- common/mekanism/api/gas/Gas.java | 23 ++++++++++++++ .../client/render/MekanismRenderer.java | 2 ++ common/mekanism/common/IFactory.java | 8 ----- common/mekanism/common/Mekanism.java | 3 +- .../common/item/ItemBlockGasTank.java | 9 ++++-- .../TileEntityAdvancedElectricMachine.java | 30 +++++++++++++++++- .../common/tile/TileEntityFactory.java | 29 ++++++++++++++++- resources/assets/mekanism/lang/en_US.lang | 2 ++ .../mekanism/textures/blocks/LiquidOsmium.png | Bin 0 -> 12007 bytes .../textures/blocks/LiquidOsmium.png.mcmeta | 5 +++ .../mekanism/textures/blocks/LiquidStone.png | Bin 0 -> 9860 bytes .../textures/blocks/LiquidStone.png.mcmeta | 5 +++ 12 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 resources/assets/mekanism/textures/blocks/LiquidOsmium.png create mode 100644 resources/assets/mekanism/textures/blocks/LiquidOsmium.png.mcmeta create mode 100644 resources/assets/mekanism/textures/blocks/LiquidStone.png create mode 100644 resources/assets/mekanism/textures/blocks/LiquidStone.png.mcmeta diff --git a/common/mekanism/api/gas/Gas.java b/common/mekanism/api/gas/Gas.java index 0d1edca12..e1aafbfeb 100644 --- a/common/mekanism/api/gas/Gas.java +++ b/common/mekanism/api/gas/Gas.java @@ -21,6 +21,8 @@ public class Gas private Icon icon; + private boolean visible = true; + /** * Creates a new Gas object with a defined name or key value. * @param s - name or key to associate this Gas with @@ -39,6 +41,27 @@ public class Gas return name; } + /** + * Whether or not this is a visible gas. + * @return if this gas is visible + */ + public boolean isVisible() + { + return visible; + } + + /** + * Sets this gas's "visible" state to a new value. Setting it to 'false' will treat this gas as an internal gas, and it will not be displayed or accessed by other mods. + * @param v - new visible state + * @return this Gas object + */ + public Gas setVisible(boolean v) + { + visible = v; + + return this; + } + /** * Gets the unlocalized name of this Gas. * @return this Gas's unlocalized name diff --git a/common/mekanism/client/render/MekanismRenderer.java b/common/mekanism/client/render/MekanismRenderer.java index 37dcb2c54..ed9b1662b 100644 --- a/common/mekanism/client/render/MekanismRenderer.java +++ b/common/mekanism/client/render/MekanismRenderer.java @@ -74,6 +74,8 @@ public class MekanismRenderer GasRegistry.getGas("sulfurTrioxideGas").setIcon(event.map.registerIcon("mekanism:LiquidSulfurTrioxide")); GasRegistry.getGas("sulfuricAcid").setIcon(event.map.registerIcon("mekanism:LiquidSulfuricAcid")); GasRegistry.getGas("hydrogenChloride").setIcon(event.map.registerIcon("mekanism:LiquidHydrogenChloride")); + GasRegistry.getGas("liquidOsmium").setIcon(event.map.registerIcon("mekanism:LiquidOsmium")); + GasRegistry.getGas("liquidStone").setIcon(event.map.registerIcon("mekanism:LiquidStone")); FluidRegistry.getFluid("brine").setIcons(event.map.registerIcon("mekanism:LiquidBrine")); } diff --git a/common/mekanism/common/IFactory.java b/common/mekanism/common/IFactory.java index d5bfd6824..444a4e08d 100644 --- a/common/mekanism/common/IFactory.java +++ b/common/mekanism/common/IFactory.java @@ -121,14 +121,6 @@ public interface IFactory public int getMaxSecondaryEnergy() { - if(usesFuel) - { - MachineType type = MachineType.get(getStack().itemID, getStack().getItemDamage()); - TileEntityAdvancedElectricMachine machine = (TileEntityAdvancedElectricMachine)type.create(); - - return machine.MAX_SECONDARY_ENERGY; - } - return 200; } diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 9bb011f51..5e7fe17e1 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -116,7 +116,6 @@ import mekanism.common.util.MekanismUtils.ResourceType; import mekanism.common.voice.VoiceServerManager; import net.minecraft.block.Block; import net.minecraft.item.Item; -import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.FurnaceRecipes; @@ -1067,6 +1066,8 @@ public class Mekanism GasRegistry.register(new Gas("sulfurTrioxideGas")).registerFluid(); GasRegistry.register(new Gas("sulfuricAcid")).registerFluid(); GasRegistry.register(new Gas("hydrogenChloride")).registerFluid(); + GasRegistry.register(new Gas("liquidOsmium").setVisible(false)); + GasRegistry.register(new Gas("liquidStone").setVisible(false)); FluidRegistry.registerFluid(new Fluid("brine")); diff --git a/common/mekanism/common/item/ItemBlockGasTank.java b/common/mekanism/common/item/ItemBlockGasTank.java index 95ad1fdc0..24dfe9169 100644 --- a/common/mekanism/common/item/ItemBlockGasTank.java +++ b/common/mekanism/common/item/ItemBlockGasTank.java @@ -166,9 +166,12 @@ public class ItemBlockGasTank extends ItemBlock implements IGasItem, ISustainedI for(Gas type : GasRegistry.getRegisteredGasses()) { - ItemStack filled = new ItemStack(this); - setGas(filled, new GasStack(type, ((IGasItem)filled.getItem()).getMaxGas(filled))); - list.add(filled); + if(type.isVisible()) + { + ItemStack filled = new ItemStack(this); + setGas(filled, new GasStack(type, ((IGasItem)filled.getItem()).getMaxGas(filled))); + list.add(filled); + } } } diff --git a/common/mekanism/common/tile/TileEntityAdvancedElectricMachine.java b/common/mekanism/common/tile/TileEntityAdvancedElectricMachine.java index ce1f34bae..3be8891ba 100644 --- a/common/mekanism/common/tile/TileEntityAdvancedElectricMachine.java +++ b/common/mekanism/common/tile/TileEntityAdvancedElectricMachine.java @@ -3,6 +3,8 @@ package mekanism.common.tile; import java.util.ArrayList; import mekanism.api.EnumColor; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.GasTank; import mekanism.common.Mekanism; import mekanism.common.SideData; import mekanism.common.recipe.RecipeHandler; @@ -31,6 +33,8 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM /** How much secondary energy (fuel) is stored in this machine. */ public int secondaryEnergyStored = 0; + public GasTank gasTank; + /** * Advanced Electric Machine -- a machine like this has a total of 4 slots. Input slot (0), fuel slot (1), output slot (2), * energy slot (3), and the upgrade slot (4). The machine will not run if it does not have enough electricity, or if it doesn't have enough @@ -58,6 +62,8 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM sideConfig = new byte[] {2, 1, 0, 4, 5, 3}; + gasTank = new GasTank(maxSecondaryEnergy); + inventory = new ItemStack[5]; SECONDARY_ENERGY_PER_TICK = secondaryPerTick; @@ -94,7 +100,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM secondaryEnergyStored -= SECONDARY_ENERGY_PER_TICK; electricityStored -= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK); - if((operatingTicks) >= MekanismUtils.getTicks(getSpeedMultiplier(), TICKS_REQUIRED)) + if(operatingTicks >= MekanismUtils.getTicks(getSpeedMultiplier(), TICKS_REQUIRED)) { operate(); @@ -228,13 +234,33 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM { super.handlePacketData(dataStream); secondaryEnergyStored = dataStream.readInt(); + + if(dataStream.readBoolean()) + { + gasTank.setGas(new GasStack(dataStream.readInt(), dataStream.readInt())); + } + else { + gasTank.setGas(null); + } } @Override public ArrayList getNetworkedData(ArrayList data) { super.getNetworkedData(data); + data.add(secondaryEnergyStored); + + if(gasTank.getGas() != null) + { + data.add(true); + data.add(gasTank.getGas().getGas().getID()); + data.add(gasTank.getStored()); + } + else { + data.add(false); + } + return data; } @@ -244,6 +270,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM super.readFromNBT(nbtTags); secondaryEnergyStored = nbtTags.getInteger("secondaryEnergyStored"); + gasTank.read(nbtTags.getCompoundTag("gasTank")); } @Override @@ -252,6 +279,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM super.writeToNBT(nbtTags); nbtTags.setInteger("secondaryEnergyStored", secondaryEnergyStored); + nbtTags.setCompoundTag("gasTank", gasTank.write(new NBTTagCompound())); } /** diff --git a/common/mekanism/common/tile/TileEntityFactory.java b/common/mekanism/common/tile/TileEntityFactory.java index 70500f51c..aa934eebb 100644 --- a/common/mekanism/common/tile/TileEntityFactory.java +++ b/common/mekanism/common/tile/TileEntityFactory.java @@ -3,11 +3,12 @@ package mekanism.common.tile; import java.util.ArrayList; import java.util.List; -import mekanism.api.EnumColor; import mekanism.api.Coord4D; +import mekanism.api.EnumColor; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; import mekanism.api.gas.GasStack; +import mekanism.api.gas.GasTank; import mekanism.api.gas.GasTransmission; import mekanism.api.gas.IGasHandler; import mekanism.api.gas.IGasItem; @@ -83,6 +84,8 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IPerip /** This machine's previous amount of energy. */ public double prevEnergy; + public GasTank gasTank; + public boolean sorting; public int secondaryEnergyStored; @@ -115,6 +118,8 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IPerip inventory = new ItemStack[5+type.processes*2]; progress = new int[type.processes]; isActive = false; + + gasTank = new GasTank(getMaxSecondaryEnergy()); } @Override @@ -591,6 +596,14 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IPerip sideConfig[i] = dataStream.readByte(); } + if(dataStream.readBoolean()) + { + gasTank.setGas(new GasStack(dataStream.readInt(), dataStream.readInt())); + } + else { + gasTank.setGas(null); + } + if(updateDelay == 0 && clientActive != isActive) { updateDelay = Mekanism.UPDATE_DELAY; @@ -623,6 +636,8 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IPerip sideConfig[i] = nbtTags.getByte("config"+i); } } + + gasTank.read(nbtTags.getCompoundTag("gasTank")); } @Override @@ -648,6 +663,8 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IPerip { nbtTags.setByte("config"+i, sideConfig[i]); } + + nbtTags.setCompoundTag("gasTank", gasTank.write(new NBTTagCompound())); } @Override @@ -664,6 +681,16 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IPerip data.add(progress); data.add(sideConfig); + if(gasTank.getGas() != null) + { + data.add(true); + data.add(gasTank.getGas().getGas().getID()); + data.add(gasTank.getStored()); + } + else { + data.add(false); + } + return data; } diff --git a/resources/assets/mekanism/lang/en_US.lang b/resources/assets/mekanism/lang/en_US.lang index 690762e5e..897cf1fd1 100644 --- a/resources/assets/mekanism/lang/en_US.lang +++ b/resources/assets/mekanism/lang/en_US.lang @@ -175,6 +175,8 @@ fluid.sulfurTrioxideGas=Liquid Sulfur Trioxide fluid.sulfuricAcid=Liquid Sulfuric Acid fluid.hydrogenChloride=Liquid Hydrogen Chloride fluid.brine=Brine +fluid.liquidOsmium=Liquid Osmium +fluid.liquidStone=Liquid Stone //Gui text gui.removeSpeedUpgrade=Remove speed upgrade diff --git a/resources/assets/mekanism/textures/blocks/LiquidOsmium.png b/resources/assets/mekanism/textures/blocks/LiquidOsmium.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbb3b2975468c2a05ac3289c6b43580495b1078 GIT binary patch literal 12007 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 FV1ffB0<8c5 literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/textures/blocks/LiquidOsmium.png.mcmeta b/resources/assets/mekanism/textures/blocks/LiquidOsmium.png.mcmeta new file mode 100644 index 000000000..4b721e09a --- /dev/null +++ b/resources/assets/mekanism/textures/blocks/LiquidOsmium.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/resources/assets/mekanism/textures/blocks/LiquidStone.png b/resources/assets/mekanism/textures/blocks/LiquidStone.png new file mode 100644 index 0000000000000000000000000000000000000000..5232608d676d924d797f4244f5be29b2fb7f6ad5 GIT binary patch literal 9860 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