Fixed mixture fluids not showing their color

This commit is contained in:
Calclavia 2014-01-28 20:48:19 +08:00
parent 053236fa1f
commit 4acf402225
7 changed files with 41 additions and 19 deletions

View file

@ -105,7 +105,7 @@ public class RecipeUtils
@Override @Override
public ItemStack getItemStack() public ItemStack getItemStack()
{ {
return OreDictionary.getOres(name).get(0); return OreDictionary.getOres(name).get(0).copy();
} }
} }

View file

@ -7,6 +7,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fluids.BlockFluidClassic; import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.BlockFluidFinite;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
@ -18,7 +19,7 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia * @author Calclavia
* *
*/ */
public class BlockFluidMixture extends BlockFluidClassic implements ITileEntityProvider public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityProvider
{ {
public BlockFluidMixture(int id, Fluid fluid) public BlockFluidMixture(int id, Fluid fluid)
{ {
@ -29,7 +30,7 @@ public class BlockFluidMixture extends BlockFluidClassic implements ITileEntityP
public void setQuanta(World world, int x, int y, int z, int quanta) public void setQuanta(World world, int x, int y, int z, int quanta)
{ {
if (quanta > 0) if (quanta > 0)
world.setBlockMetadataWithNotify(x, y, z, 0, 3); world.setBlockMetadataWithNotify(x, y, z, quanta, 3);
else else
world.setBlockToAir(x, y, z); world.setBlockToAir(x, y, z);
} }

View file

@ -3,13 +3,19 @@ package resonantinduction.core.resource.fluid;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.google.common.io.ByteArrayDataInput;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.packet.Packet;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import resonantinduction.api.recipe.MachineRecipes; import resonantinduction.api.recipe.MachineRecipes;
import resonantinduction.api.recipe.MachineRecipes.RecipeType; import resonantinduction.api.recipe.MachineRecipes.RecipeType;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.resource.ResourceGenerator; import resonantinduction.core.resource.ResourceGenerator;
import calclavia.lib.network.IPacketReceiver;
import calclavia.lib.prefab.tile.TileAdvanced; import calclavia.lib.prefab.tile.TileAdvanced;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -18,11 +24,13 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia * @author Calclavia
* *
*/ */
public class TileLiquidMixture extends TileAdvanced public class TileLiquidMixture extends TileAdvanced implements IPacketReceiver
{ {
public final Set<ItemStack> items = new HashSet<ItemStack>(); public final Set<ItemStack> items = new HashSet<ItemStack>();
public final Set<FluidStack> fluids = new HashSet<FluidStack>(); public final Set<FluidStack> fluids = new HashSet<FluidStack>();
private int clientColor = 0xFFFFFF;
@Override @Override
public boolean canUpdate() public boolean canUpdate()
{ {
@ -63,18 +71,30 @@ public class TileLiquidMixture extends TileAdvanced
} }
} }
@Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
{
clientColor = data.readInt();
worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord);
}
@Override
public Packet getDescriptionPacket()
{
for (ItemStack item : items)
{
return ResonantInduction.PACKET_TILE.getPacket(this, ResourceGenerator.getAverageColor(item));
}
return null;
}
/** /**
* @return The color of the liquid based on the fluidStacks stored. * @return The color of the liquid based on the fluidStacks stored.
*/ */
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public int getColor() public int getColor()
{ {
for (ItemStack item : items) return clientColor;
{
return ResourceGenerator.getAverageColor(item);
}
return 0xFFFFFF;
} }
@Override @Override
@ -137,4 +157,5 @@ public class TileLiquidMixture extends TileAdvanced
nbt.setTag("Items", itemList); nbt.setTag("Items", itemList);
} }
} }

View file

@ -279,7 +279,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
currentWorldEdits++; currentWorldEdits++;
iterator.remove(); iterator.remove();
if (resultStack.amount >= maxDrain) if (resultStack != null && resultStack.amount >= maxDrain)
{ {
break; break;
} }

View file

@ -2,6 +2,7 @@ package resonantinduction.mechanical.process;
import java.util.Random; import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.ITileEntityProvider;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@ -56,26 +57,25 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider
{ {
world.spawnParticle("dripWater", x + 0.5, y, z + 0.5, 0, 0, 0); world.spawnParticle("dripWater", x + 0.5, y, z + 0.5, 0, 0, 0);
if (((TileLiquidMixture) tileAbove).items.size() > 0 && random.nextFloat() > 0.9f) if (((TileLiquidMixture) tileAbove).items.size() > 0)
{ {
/** /**
* Leak the fluid down. * Leak the fluid down.
*/ */
BlockFluidMixture fluidBlock = (BlockFluidMixture) ResonantInduction.blockFluidMixture; BlockFluidMixture fluidBlock = (BlockFluidMixture) ResonantInduction.blockFluidMixture;
int amount = fluidBlock.getQuantaValue(world, x, y, z); int amount = fluidBlock.getQuantaValue(world, x, y, z);
System.out.println(amount);
/** /**
* All fluid is filtered out, spawn all the items. * All fluid is filtered out, spawn all the items.
*/ */
//if (amount <= 1) if (amount <= 1)
{ {
System.out.println("filter dropped"); System.out.println("filter dropped");
for (ItemStack itemStack : ((TileLiquidMixture) tileAbove).items) for (ItemStack itemStack : ((TileLiquidMixture) tileAbove).items)
{ {
for (Resource resoure : MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack)) for (Resource resoure : MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack))
{ {
InventoryUtility.dropItemStack(world, checkAbove.clone().add(0.5), resoure.getItemStack()); InventoryUtility.dropItemStack(world, checkAbove.clone().add(0.5), resoure.getItemStack().copy());
} }
} }
} }
@ -104,7 +104,7 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider
} }
else else
{ {
checkBelow.setBlock(world, ResonantInduction.blockFluidMixture.blockID); checkBelow.setBlock(world, Block.waterStill.blockID, 3);
} }
} }
} }

View file

@ -63,7 +63,7 @@ public class TileMixer extends TileMechanical
{ {
Vector3 checkVector = new Vector3(this).translate(x, 0, z); Vector3 checkVector = new Vector3(this).translate(x, 0, z);
if (checkVector.getBlockID(worldObj) == Block.waterStill.blockID) if (checkVector.getBlockID(worldObj) == Block.waterStill.blockID || checkVector.getBlockID(worldObj) == Block.waterMoving.blockID)
{ {
checkVector.setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID, 8, 3); checkVector.setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID, 8, 3);
} }

View file

@ -24,7 +24,7 @@ tile.resonantinduction\:material.0.name=Industrial Brick
tile.resonantinduction\:material.1.name=Industrial Brick tile.resonantinduction\:material.1.name=Industrial Brick
tile.resonantinduction\:material.2.name=Industrial Chiseled Brick tile.resonantinduction\:material.2.name=Industrial Chiseled Brick
tile.resonantinduction\:material.3.name=Industrial Cobblestone tile.resonantinduction\:material.3.name=Industrial Cobblestone
tile.resonantinduction\:material.4.name=Indutrial Cracked Stone tile.resonantinduction\:material.4.name=Industrial Cracked Stone
tile.resonantinduction\:material.5.name=Industrial Stone tile.resonantinduction\:material.5.name=Industrial Stone
tile.resonantinduction\:material.6.name=Industrial Stone Slab tile.resonantinduction\:material.6.name=Industrial Stone Slab
tile.resonantinduction\:material.7.name=Industrial Mossy Stone tile.resonantinduction\:material.7.name=Industrial Mossy Stone