diff --git a/src/main/java/resonantinduction/core/ResonantInduction.java b/src/main/java/resonantinduction/core/ResonantInduction.java index ff533908..8f7693b0 100644 --- a/src/main/java/resonantinduction/core/ResonantInduction.java +++ b/src/main/java/resonantinduction/core/ResonantInduction.java @@ -11,6 +11,7 @@ import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; import org.modstats.ModstatInfo; import org.modstats.Modstats; @@ -21,6 +22,9 @@ import resonantinduction.core.prefab.part.PacketMultiPart; import resonantinduction.core.resource.BlockDust; import resonantinduction.core.resource.ResourceGenerator; import resonantinduction.core.resource.TileMaterial; +import resonantinduction.core.resource.fluid.BlockFluidMaterial; +import resonantinduction.core.resource.fluid.BlockFluidMixture; +import resonantinduction.core.resource.fluid.TileFluidMixture; import resonantinduction.core.resource.item.ItemOreResource; import calclavia.components.tool.ToolMode; import calclavia.lib.content.ContentRegistry; @@ -77,11 +81,12 @@ public class ResonantInduction public static ItemOreResource itemDust; public static ItemOreResource itemRefinedDust; public static Block blockDust; + public static Block blockFluidMixture; public static List blockFluidMaterial = new ArrayList(); public static Block blockGas; - public static List fluidDustMixtures = new ArrayList(); - public static List fluidMaterials = new ArrayList(); + public static Fluid fluidMixture; + public static List fluidMaterial = new ArrayList(); public static final ContentRegistry contentRegistry = new ContentRegistry(Settings.CONFIGURATION, ID); @@ -100,6 +105,10 @@ public class ResonantInduction MinecraftForge.EVENT_BUS.register(ResourceGenerator.INSTANCE); MinecraftForge.EVENT_BUS.register(new FluidEventHandler()); + fluidMixture = new Fluid("water"); + FluidRegistry.registerFluid(fluidMixture); + blockFluidMixture = contentRegistry.createTile(BlockFluidMixture.class, TileFluidMixture.class); + /** * Melting dusts */ @@ -157,7 +166,7 @@ public class ResonantInduction @SideOnly(Side.CLIENT) public void postTextureHook(TextureStitchEvent.Post event) { - for (Fluid fluid : fluidMaterials) + for (Fluid fluid : fluidMaterial) fluid.setIcons(loadedIconMap.get(Reference.PREFIX + "molten_flow")); } } diff --git a/src/main/java/resonantinduction/core/handler/FluidEventHandler.java b/src/main/java/resonantinduction/core/handler/FluidEventHandler.java index 5835093e..2f2e49dd 100644 --- a/src/main/java/resonantinduction/core/handler/FluidEventHandler.java +++ b/src/main/java/resonantinduction/core/handler/FluidEventHandler.java @@ -37,6 +37,6 @@ public class FluidEventHandler @SideOnly(Side.CLIENT) public void textureHook(TextureStitchEvent.Post event) { - //ResonantInduction.fluidMixture.setIcons(fluidIconMap.get(Reference.PREFIX + "mixture")); + ResonantInduction.fluidMixture.setIcons(fluidIconMap.get(Reference.PREFIX + "mixture")); } } diff --git a/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java b/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java new file mode 100644 index 00000000..dc5f390b --- /dev/null +++ b/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java @@ -0,0 +1,71 @@ +package resonantinduction.core.resource.fluid; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.Configuration; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.BlockFluidFinite; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import resonantinduction.core.Reference; +import resonantinduction.core.ResonantInduction; +import resonantinduction.core.Settings; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * @author Calclavia + * + */ +public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityProvider +{ + public BlockFluidMixture() + { + super(Settings.CONFIGURATION.get(Configuration.CATEGORY_BLOCK, "fluidMixture", Settings.getNextBlockID()).getInt(), ResonantInduction.fluidMixture, Material.water); + setTextureName(Reference.PREFIX + "mixture_flow"); + this.setUnlocalizedName(Reference.PREFIX + "fluidMixture"); + } + + public void setQuanta(World world, int x, int y, int z, int quanta) + { + if (quanta > 0) + world.setBlockMetadataWithNotify(x, y, z, quanta, 3); + else + world.setBlockToAir(x, y, z); + } + + /* IFluidBlock */ + @Override + public FluidStack drain(World world, int x, int y, int z, boolean doDrain) + { + TileFluidMixture tileFluid = (TileFluidMixture) world.getBlockTileEntity(x, y, z); + FluidStack stack = new FluidStack(ResonantInduction.fluidMixture, (int) (FluidContainerRegistry.BUCKET_VOLUME * this.getFilledPercentage(world, x, y, z))); + tileFluid.writeFluidToNBT(stack.tag != null ? stack.tag : new NBTTagCompound()); + return stack; + } + + @SideOnly(Side.CLIENT) + @Override + public int colorMultiplier(IBlockAccess access, int x, int y, int z) + { + TileFluidMixture tileFluid = (TileFluidMixture) access.getBlockTileEntity(x, y, z); + return tileFluid.getColor(); + } + + @Override + public boolean canDrain(World world, int x, int y, int z) + { + return true; + } + + @Override + public TileEntity createNewTileEntity(World world) + { + return new TileFluidMixture(); + } +} diff --git a/src/main/java/resonantinduction/electrical/generator/RenderGenerator.java b/src/main/java/resonantinduction/electrical/generator/RenderGenerator.java index 7f05148c..47f3c968 100644 --- a/src/main/java/resonantinduction/electrical/generator/RenderGenerator.java +++ b/src/main/java/resonantinduction/electrical/generator/RenderGenerator.java @@ -79,6 +79,6 @@ public class RenderGenerator extends TileEntitySpecialRenderer implements ICusto @Override public void renderDynamic(TileEntity tile, Block block, int metadata, int modelID, RenderBlocks renderer) { - doRender(tile, 2, 0, 0, 0, 0); + doRender(tile, metadata, 0, 0, 0, 0); } } diff --git a/src/main/java/resonantinduction/mechanical/process/BlockFilter.java b/src/main/java/resonantinduction/mechanical/process/BlockFilter.java index 3d0d072b..e3e59f3d 100644 --- a/src/main/java/resonantinduction/mechanical/process/BlockFilter.java +++ b/src/main/java/resonantinduction/mechanical/process/BlockFilter.java @@ -2,13 +2,21 @@ package resonantinduction.mechanical.process; import java.util.Random; +import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; +import resonantinduction.api.recipe.RecipeUtils.Resource; +import resonantinduction.core.ResonantInduction; import resonantinduction.core.prefab.block.BlockRI; +import resonantinduction.core.resource.fluid.BlockFluidMixture; import resonantinduction.core.resource.fluid.TileFluidMixture; import universalelectricity.api.vector.Vector3; +import calclavia.lib.utility.inventory.InventoryUtility; /** * Used for filtering liquid mixtures @@ -54,13 +62,12 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider /** * Leak the fluid down. */ - /* BlockFluidMixture fluidBlock = (BlockFluidMixture) ResonantInduction.blockFluidMixture; int amount = fluidBlock.getQuantaValue(world, x, y, z); /** * All fluid is filtered out, spawn all the items. - * + */ if (amount <= 1) { System.out.println("filter dropped"); @@ -77,7 +84,7 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider /** * Remove liquid from top. - * + */ if (remaining > 0) { fluidBlock.setQuanta(world, checkAbove.intX(), checkAbove.intY(), checkAbove.intZ(), remaining); @@ -90,7 +97,7 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider /** * Add liquid to bottom. - * + */ if (checkBelow.getBlockID(world) == ResonantInduction.blockFluidMixture.blockID) { fluidBlock.setQuanta(world, checkBelow.intX(), checkBelow.intY(), checkBelow.intZ(), fluidBlock.getQuantaValue(world, checkBelow.intX(), checkBelow.intY(), checkBelow.intZ()) + 1); @@ -98,7 +105,7 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider else { checkBelow.setBlock(world, Block.waterStill.blockID, 3); - }*/ + } } } } diff --git a/src/main/java/resonantinduction/mechanical/process/TileMixer.java b/src/main/java/resonantinduction/mechanical/process/TileMixer.java index eee05be1..189fab3a 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileMixer.java +++ b/src/main/java/resonantinduction/mechanical/process/TileMixer.java @@ -4,6 +4,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; @@ -15,7 +16,6 @@ import resonantinduction.api.recipe.MachineRecipes.RecipeType; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import resonantinduction.core.resource.fluid.TileFluidMixture; -import resonantinduction.mechanical.fluid.tank.TileTank; import resonantinduction.mechanical.network.TileMechanical; import universalelectricity.api.vector.Vector3; @@ -57,24 +57,19 @@ public class TileMixer extends TileMechanical /** * Transform all water blocks into mixture blocks */ - boolean foundTanks = true; - for (int x = -1; x < 1; x++) { for (int z = -1; z < 1; z++) { Vector3 checkVector = new Vector3(this).translate(x, 0, z); - if (!(checkVector.getTileEntity(worldObj) instanceof TileTank)) + if (checkVector.getBlockID(worldObj) == Block.waterStill.blockID || checkVector.getBlockID(worldObj) == Block.waterMoving.blockID) { - foundTanks = false; + checkVector.setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID, 8, 3); } } } - if (!foundTanks) - return; - // Search for an item to "process" AxisAlignedBB aabb = AxisAlignedBB.getAABBPool().getAABB(this.xCoord - 1, this.yCoord, this.zCoord - 1, this.xCoord + 2, this.yCoord + 1, this.zCoord + 2); List entities = this.worldObj.getEntitiesWithinAABB(Entity.class, aabb);