From 06c66d5fbe5c7d2240a013ae6ac32e957fe23af6 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 5 Aug 2014 17:07:09 -0400 Subject: [PATCH 1/6] Tiny cleanup --- .../generators/common/tile/TileEntityWindTurbine.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java b/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java index b8ea7fbe8..d6e6c4a4b 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityWindTurbine.java @@ -47,10 +47,10 @@ public class TileEntityWindTurbine extends TileEntityGenerator implements IBound { 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 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; From 12215490f0a1bd2200301db07aa66d3484ff0c40 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 5 Aug 2014 20:58:22 -0400 Subject: [PATCH 2/6] Fixed a Digital Miner oversight, fixed Bins losing NBT data and allow Bins to accept items with varying item damage --- .../java/mekanism/common/PacketHandler.java | 74 +++++++++++++++++++ .../mekanism/common/block/BlockBasic.java | 6 +- .../common/inventory/InventoryBin.java | 26 ++----- .../common/tile/TileEntityBasicBlock.java | 6 +- .../mekanism/common/tile/TileEntityBin.java | 12 +-- .../common/tile/TileEntityDigitalMiner.java | 2 +- 6 files changed, 89 insertions(+), 37 deletions(-) diff --git a/src/main/java/mekanism/common/PacketHandler.java b/src/main/java/mekanism/common/PacketHandler.java index 6db11b87f..bbb5f0079 100644 --- a/src/main/java/mekanism/common/PacketHandler.java +++ b/src/main/java/mekanism/common/PacketHandler.java @@ -61,6 +61,11 @@ import mekanism.common.network.PacketWalkieTalkieState; import mekanism.common.network.PacketWalkieTalkieState.WalkieTalkieStateMessage; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTSizeTracker; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; @@ -151,6 +156,14 @@ public class PacketHandler { output.writeByte((Byte)data); } + else if(data instanceof ItemStack) + { + writeStack(output, (ItemStack)data); + } + else if(data instanceof NBTTagCompound) + { + writeNBT(output, (NBTTagCompound)data); + } else if(data instanceof int[]) { for(int i : (int[])data) @@ -187,6 +200,67 @@ public class PacketHandler return new String(input.readBytes(input.readInt()).array()); } + public static void writeStack(ByteBuf output, ItemStack stack) + { + output.writeInt(stack != null ? Item.getIdFromItem(stack.getItem()) : -1); + + if(stack != null) + { + output.writeInt(stack.stackSize); + output.writeInt(stack.getItemDamage()); + + if(stack.getTagCompound() != null && stack.getItem().getShareTag()) + { + output.writeBoolean(true); + writeNBT(output, stack.getTagCompound()); + } + else { + output.writeBoolean(false); + } + } + } + + public static ItemStack readStack(ByteBuf input) + { + int id = input.readInt(); + + if(id >= 0) + { + ItemStack stack = new ItemStack(Item.getItemById(id), input.readInt(), input.readInt()); + + if(input.readBoolean()) + { + stack.setTagCompound(readNBT(input)); + } + + return stack; + } + + return null; + } + + public static void writeNBT(ByteBuf output, NBTTagCompound nbtTags) + { + try { + byte[] buffer = CompressedStreamTools.compress(nbtTags); + + output.writeInt(buffer.length); + output.writeBytes(buffer); + } catch(Exception e) {} + } + + public static NBTTagCompound readNBT(ByteBuf input) + { + try { + byte[] buffer = new byte[input.readInt()]; + input.readBytes(buffer); + + return CompressedStreamTools.func_152457_a(buffer, new NBTSizeTracker(2097152L)); + } catch(Exception e) { + return null; + } + } + public static EntityPlayer getPlayer(MessageContext context) { return Mekanism.proxy.getPlayer(context); diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index 13a08c2a3..38400a179 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -380,7 +380,7 @@ public class BlockBasic extends Block if(bin.getItemCount() < bin.MAX_STORAGE) { - if(bin.addTicks == 0) + if(bin.addTicks == 0 && entityplayer.getCurrentEquippedItem() != null) { if(entityplayer.getCurrentEquippedItem() != null) { @@ -389,7 +389,8 @@ public class BlockBasic extends Block bin.addTicks = 5; } } - else { + else if(bin.addTicks > 0 && bin.getItemCount() > 0) + { ItemStack[] inv = entityplayer.inventory.mainInventory; for(int i = 0; i < inv.length; i++) @@ -403,6 +404,7 @@ public class BlockBasic extends Block { ItemStack remain = bin.add(inv[i]); inv[i] = remain; + bin.addTicks = 5; } ((EntityPlayerMP)entityplayer).sendContainerAndContentsToPlayer(entityplayer.openContainer, entityplayer.openContainer.getInventory()); diff --git a/src/main/java/mekanism/common/inventory/InventoryBin.java b/src/main/java/mekanism/common/inventory/InventoryBin.java index a9c02a76d..3b8bf5d72 100644 --- a/src/main/java/mekanism/common/inventory/InventoryBin.java +++ b/src/main/java/mekanism/common/inventory/InventoryBin.java @@ -1,5 +1,6 @@ package mekanism.common.inventory; +import mekanism.api.StackUtils; import mekanism.common.item.ItemBlockBasic; import mekanism.common.util.MekanismUtils; import net.minecraft.item.Item; @@ -77,11 +78,6 @@ public class InventoryBin return false; } - if(stack.isItemStackDamageable() && stack.isItemDamaged()) - { - return false; - } - if(stack.getItem() instanceof ItemBlockBasic && stack.getItemDamage() == 6) { return false; @@ -132,16 +128,7 @@ public class InventoryBin return null; } - int id = bin.stackTagCompound.getInteger("itemID"); - int meta = bin.stackTagCompound.getInteger("itemMeta"); - - if(getItemCount() == 0 || id == 0) - { - setItemType(null); - return null; - } - - return new ItemStack(Item.getItemById(id), 1, meta); + return ItemStack.loadItemStackFromNBT(bin.stackTagCompound.getCompoundTag("storedItem")); } public void setItemType(ItemStack stack) @@ -153,15 +140,12 @@ public class InventoryBin if(stack == null) { - bin.stackTagCompound.removeTag("itemID"); - bin.stackTagCompound.removeTag("itemMeta"); + bin.stackTagCompound.removeTag("storedItem"); return; } - ItemStack ret = stack.copy(); - ret.stackSize = 1; + ItemStack ret = StackUtils.size(stack, 1); - bin.stackTagCompound.setInteger("itemID", MekanismUtils.getID(stack)); - bin.stackTagCompound.setInteger("itemMeta", stack.getItemDamage()); + bin.stackTagCompound.setTag("storedItem", StackUtils.size(stack, 1).writeToNBT(new NBTTagCompound())); } } diff --git a/src/main/java/mekanism/common/tile/TileEntityBasicBlock.java b/src/main/java/mekanism/common/tile/TileEntityBasicBlock.java index 882b84736..ce53b7421 100644 --- a/src/main/java/mekanism/common/tile/TileEntityBasicBlock.java +++ b/src/main/java/mekanism/common/tile/TileEntityBasicBlock.java @@ -4,10 +4,8 @@ import ic2.api.tile.IWrenchable; import io.netty.buffer.ByteBuf; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Set; import mekanism.api.Coord4D; import mekanism.common.ITileComponent; @@ -33,10 +31,10 @@ public abstract class TileEntityBasicBlock extends TileEntity implements IWrench public int clientFacing; - public Set openedThisTick = Collections.synchronizedSet(new HashSet()); + public HashSet openedThisTick = new HashSet(); /** The players currently using this block. */ - public Set playersUsing = Collections.synchronizedSet(new HashSet()); + public HashSet playersUsing = new HashSet(); /** A timer used to send packets to clients. */ public int ticker; diff --git a/src/main/java/mekanism/common/tile/TileEntityBin.java b/src/main/java/mekanism/common/tile/TileEntityBin.java index b8114a473..a756a064b 100644 --- a/src/main/java/mekanism/common/tile/TileEntityBin.java +++ b/src/main/java/mekanism/common/tile/TileEntityBin.java @@ -9,6 +9,7 @@ import mekanism.api.IConfigurable; import mekanism.common.IActiveState; import mekanism.common.ILogisticalTransporter; import mekanism.common.Mekanism; +import mekanism.common.PacketHandler; import mekanism.common.item.ItemBlockBasic; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.transporter.TransporterManager; @@ -25,7 +26,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.common.Optional.Interface; - import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; @Interface(iface = "powercrystals.minefactoryreloaded.api.IDeepStorageUnit", modid = "MineFactoryReloaded") @@ -95,11 +95,6 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento return false; } - if(stack.isItemStackDamageable() && stack.isItemDamaged()) - { - return false; - } - if(stack.getItem() instanceof ItemBlockBasic && stack.getItemDamage() == 6) { return false; @@ -273,8 +268,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento if(getItemCount() > 0) { - data.add(MekanismUtils.getID(itemType)); - data.add(itemType.getItemDamage()); + data.add(itemType); } return data; @@ -290,7 +284,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento if(clientAmount > 0) { - itemType = new ItemStack(Item.getItemById(dataStream.readInt()), 1, dataStream.readInt()); + itemType = PacketHandler.readStack(dataStream); } else { itemType = null; diff --git a/src/main/java/mekanism/common/tile/TileEntityDigitalMiner.java b/src/main/java/mekanism/common/tile/TileEntityDigitalMiner.java index 205f4a3eb..f1d449534 100644 --- a/src/main/java/mekanism/common/tile/TileEntityDigitalMiner.java +++ b/src/main/java/mekanism/common/tile/TileEntityDigitalMiner.java @@ -118,7 +118,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I if(getActive()) { - for(EntityPlayer player : playersUsing) + for(EntityPlayer player : (HashSet)playersUsing.clone()) { if(player.openContainer instanceof ContainerNull || player.openContainer instanceof ContainerFilter) { From 7a67fbf7ca1261e4468a0281b046bed20d034b7b Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 5 Aug 2014 21:27:10 -0400 Subject: [PATCH 3/6] Fluidic Plenisher now detects block updates directly below it, and will replace the block if necessary. Will also no longer replace other source blocks. --- .../tile/TileEntityFluidicPlenisher.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/mekanism/common/tile/TileEntityFluidicPlenisher.java b/src/main/java/mekanism/common/tile/TileEntityFluidicPlenisher.java index 81ad6aa03..8282d29c6 100644 --- a/src/main/java/mekanism/common/tile/TileEntityFluidicPlenisher.java +++ b/src/main/java/mekanism/common/tile/TileEntityFluidicPlenisher.java @@ -17,6 +17,7 @@ import mekanism.common.util.ChargeUtils; import mekanism.common.util.FluidContainerUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.PipeUtils; +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -126,11 +127,28 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen } } - if(getEnergy() >= Mekanism.fluidicPlenisherUsage && worldObj.getWorldTime() % 10 == 0 && fluidTank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME && !finishedCalc) + if(getEnergy() >= Mekanism.fluidicPlenisherUsage && worldObj.getWorldTime() % 10 == 0 && fluidTank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME) { if(fluidTank.getFluid().getFluid().canBePlacedInWorld()) { - doPlenish(); + if(!finishedCalc) + { + doPlenish(); + } + else { + Coord4D below = Coord4D.get(this).getFromSide(ForgeDirection.DOWN); + + if(canReplace(below, false) && getEnergy() >= Mekanism.fluidicPlenisherUsage && fluidTank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME) + { + if(fluidTank.getFluid().getFluid().canBePlacedInWorld()) + { + worldObj.setBlock(below.xCoord, below.yCoord, below.zCoord, MekanismUtils.getFlowingBlock(fluidTank.getFluid().getFluid()), 0, 3); + + setEnergy(getEnergy() - Mekanism.fluidicPlenisherUsage); + fluidTank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); + } + } + } } } } @@ -150,7 +168,7 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen { Coord4D below = Coord4D.get(this).getFromSide(ForgeDirection.DOWN); - if(!canReplace(below)) + if(!canReplace(below, true)) { finishedCalc = true; return; @@ -168,7 +186,7 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen for(Coord4D coord : activeNodes) { - if(coord.exists(worldObj) && canReplace(coord)) + if(coord.exists(worldObj) && canReplace(coord, true)) { worldObj.setBlock(coord.xCoord, coord.yCoord, coord.zCoord, MekanismUtils.getFlowingBlock(fluidTank.getFluid().getFluid()), 0, 3); @@ -179,7 +197,7 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen { Coord4D sideCoord = coord.getFromSide(dir); - if(coord.exists(worldObj) && canReplace(coord)) + if(coord.exists(worldObj) && canReplace(coord, true)) { activeNodes.add(sideCoord); } @@ -205,9 +223,9 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen return yCoord-1; } - public boolean canReplace(Coord4D coord) + public boolean canReplace(Coord4D coord, boolean checkNodes) { - if(usedNodes.contains(coord)) + if(checkNodes && usedNodes.contains(coord)) { return false; } @@ -217,6 +235,11 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen return true; } + if(MekanismUtils.isFluid(worldObj, coord.xCoord, coord.yCoord, coord.zCoord)) + { + return false; + } + return coord.getBlock(worldObj).isReplaceable(worldObj, coord.xCoord, coord.yCoord, coord.zCoord); } @@ -400,7 +423,7 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen @Override public FluidTankInfo[] getTankInfo(ForgeDirection direction) { - if(direction == ForgeDirection.getOrientation(1)) + if(direction == ForgeDirection.UP) { return new FluidTankInfo[] {fluidTank.getInfo()}; } From a865a1934005b8a041209ef8f920db0a09c62257 Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Wed, 6 Aug 2014 02:49:45 +0100 Subject: [PATCH 4/6] Implement canConnectEnergy so RF cables don't connect when they shouldn't --- .../mekanism/common/multipart/PartUniversalCable.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/mekanism/common/multipart/PartUniversalCable.java b/src/main/java/mekanism/common/multipart/PartUniversalCable.java index 119060a92..7d967f718 100644 --- a/src/main/java/mekanism/common/multipart/PartUniversalCable.java +++ b/src/main/java/mekanism/common/multipart/PartUniversalCable.java @@ -288,7 +288,16 @@ public class PartUniversalCable extends PartTransmitter implement @Method(modid = "CoFHAPI|energy") public boolean canConnectEnergy(ForgeDirection from) { - return true; + if(redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z())) + { + return false; + } + + testingSide = from; + boolean unblocked = tile().canReplacePart(this, this); + testingSide = null; + + return unblocked; } @Override From 1896a42afa3e35141829ca91a872dbeb7fc1d57f Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Tue, 5 Aug 2014 22:31:57 -0400 Subject: [PATCH 5/6] Cleaned up that fix --- .../mekanism/common/multipart/PartUniversalCable.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/mekanism/common/multipart/PartUniversalCable.java b/src/main/java/mekanism/common/multipart/PartUniversalCable.java index 7d967f718..1a7c04065 100644 --- a/src/main/java/mekanism/common/multipart/PartUniversalCable.java +++ b/src/main/java/mekanism/common/multipart/PartUniversalCable.java @@ -288,16 +288,7 @@ public class PartUniversalCable extends PartTransmitter implement @Method(modid = "CoFHAPI|energy") public boolean canConnectEnergy(ForgeDirection from) { - if(redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z())) - { - return false; - } - - testingSide = from; - boolean unblocked = tile().canReplacePart(this, this); - testingSide = null; - - return unblocked; + return canReceiveEnergy(from); } @Override From 20dc1ae28ad8b17136911ec8f9e21c29ded00644 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Wed, 6 Aug 2014 12:51:48 -0400 Subject: [PATCH 6/6] Bump version to 7.1.0. --- build.properties | 2 +- src/main/java/mekanism/common/Mekanism.java | 4 ++-- .../java/mekanism/generators/common/MekanismGenerators.java | 4 ++-- src/main/java/mekanism/tools/common/MekanismTools.java | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.properties b/build.properties index 6db716acb..7001cc727 100644 --- a/build.properties +++ b/build.properties @@ -3,4 +3,4 @@ forge_version=10.13.0.1180 FMP_version=1.1.0.297 CCLIB_version=1.1.1.93 NEI_version=1.0.2.15 -mod_version=7.0.0 +mod_version=7.1.0 diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index 2d9ea7c9f..16e2ec492 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -159,7 +159,7 @@ import cpw.mods.fml.common.registry.GameRegistry; * @author AidanBrady * */ -@Mod(modid = "Mekanism", name = "Mekanism", version = "7.0.0", guiFactory = "mekanism.client.gui.ConfigGuiFactory", +@Mod(modid = "Mekanism", name = "Mekanism", version = "7.1.0", guiFactory = "mekanism.client.gui.ConfigGuiFactory", dependencies = "after:ForgeMultipart;after:BuildCraftAPI|power;after:BuildCraftAPI|tools;after:BuildCraftAPI|transport;after:IC2API;after:CoFHAPI|energy;after:ComputerCraft;after:Galacticraft API;" + "after:MineFactoryReloaded;after:MetallurgyCore;after:EnderIO;after:ExtraUtilities;after:Railcraft") public class Mekanism @@ -188,7 +188,7 @@ public class Mekanism public static Configuration configuration; /** Mekanism version number */ - public static Version versionNumber = new Version(7, 0, 0); + public static Version versionNumber = new Version(7, 1, 0); /** Map of Teleporters */ public static Map> teleporters = new HashMap>(); diff --git a/src/main/java/mekanism/generators/common/MekanismGenerators.java b/src/main/java/mekanism/generators/common/MekanismGenerators.java index d27c48063..4fbedcbb7 100644 --- a/src/main/java/mekanism/generators/common/MekanismGenerators.java +++ b/src/main/java/mekanism/generators/common/MekanismGenerators.java @@ -37,7 +37,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "7.0.0", dependencies = "required-after:Mekanism", guiFactory = "mekanism.generators.client.gui.GeneratorsGuiFactory") +@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "7.1.0", dependencies = "required-after:Mekanism", guiFactory = "mekanism.generators.client.gui.GeneratorsGuiFactory") public class MekanismGenerators implements IModule { @SidedProxy(clientSide = "mekanism.generators.client.GeneratorsClientProxy", serverSide = "mekanism.generators.common.GeneratorsCommonProxy") @@ -47,7 +47,7 @@ public class MekanismGenerators implements IModule public static MekanismGenerators instance; /** MekanismGenerators version number */ - public static Version versionNumber = new Version(7, 0, 0); + public static Version versionNumber = new Version(7, 1, 0); //Items public static Item SolarPanel; diff --git a/src/main/java/mekanism/tools/common/MekanismTools.java b/src/main/java/mekanism/tools/common/MekanismTools.java index 930303c33..35bb0d094 100644 --- a/src/main/java/mekanism/tools/common/MekanismTools.java +++ b/src/main/java/mekanism/tools/common/MekanismTools.java @@ -36,7 +36,7 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "MekanismTools", name = "MekanismTools", version = "7.0.0", dependencies = "required-after:Mekanism", guiFactory = "mekanism.tools.client.gui.ToolsGuiFactory") +@Mod(modid = "MekanismTools", name = "MekanismTools", version = "7.1.0", dependencies = "required-after:Mekanism", guiFactory = "mekanism.tools.client.gui.ToolsGuiFactory") public class MekanismTools implements IModule { @SidedProxy(clientSide = "mekanism.tools.client.ToolsClientProxy", serverSide = "mekanism.tools.common.ToolsCommonProxy") @@ -46,7 +46,7 @@ public class MekanismTools implements IModule public static MekanismTools instance; /** MekanismTools version number */ - public static Version versionNumber = new Version(7, 0, 0); + public static Version versionNumber = new Version(7, 1, 0); //Enums: Tools public static ToolMaterial toolOBSIDIAN;