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
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.World;
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;
@ -18,7 +19,7 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia
*
*/
public class BlockFluidMixture extends BlockFluidClassic implements ITileEntityProvider
public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityProvider
{
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)
{
if (quanta > 0)
world.setBlockMetadataWithNotify(x, y, z, 0, 3);
world.setBlockMetadataWithNotify(x, y, z, quanta, 3);
else
world.setBlockToAir(x, y, z);
}

View file

@ -3,13 +3,19 @@ package resonantinduction.core.resource.fluid;
import java.util.HashSet;
import java.util.Set;
import com.google.common.io.ByteArrayDataInput;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.packet.Packet;
import net.minecraftforge.fluids.FluidStack;
import resonantinduction.api.recipe.MachineRecipes;
import resonantinduction.api.recipe.MachineRecipes.RecipeType;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.resource.ResourceGenerator;
import calclavia.lib.network.IPacketReceiver;
import calclavia.lib.prefab.tile.TileAdvanced;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -18,11 +24,13 @@ import cpw.mods.fml.relauncher.SideOnly;
* @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<FluidStack> fluids = new HashSet<FluidStack>();
private int clientColor = 0xFFFFFF;
@Override
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.
*/
@SideOnly(Side.CLIENT)
public int getColor()
{
for (ItemStack item : items)
{
return ResourceGenerator.getAverageColor(item);
}
return 0xFFFFFF;
return clientColor;
}
@Override
@ -137,4 +157,5 @@ public class TileLiquidMixture extends TileAdvanced
nbt.setTag("Items", itemList);
}
}

View file

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

View file

@ -2,6 +2,7 @@ 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;
@ -56,26 +57,25 @@ public class BlockFilter extends BlockRI implements ITileEntityProvider
{
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.
*/
BlockFluidMixture fluidBlock = (BlockFluidMixture) ResonantInduction.blockFluidMixture;
int amount = fluidBlock.getQuantaValue(world, x, y, z);
System.out.println(amount);
/**
* All fluid is filtered out, spawn all the items.
*/
//if (amount <= 1)
if (amount <= 1)
{
System.out.println("filter dropped");
for (ItemStack itemStack : ((TileLiquidMixture) tileAbove).items)
{
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
{
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);
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);
}

View file

@ -24,7 +24,7 @@ tile.resonantinduction\:material.0.name=Industrial Brick
tile.resonantinduction\:material.1.name=Industrial Brick
tile.resonantinduction\:material.2.name=Industrial Chiseled Brick
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.6.name=Industrial Stone Slab
tile.resonantinduction\:material.7.name=Industrial Mossy Stone