Mixer starting to work
This commit is contained in:
parent
7a5075e323
commit
4652c40538
8 changed files with 194 additions and 126 deletions
|
@ -15,7 +15,7 @@ public final class MachineRecipes
|
||||||
{
|
{
|
||||||
public static enum RecipeType
|
public static enum RecipeType
|
||||||
{
|
{
|
||||||
GRINDER, SAWMILL, SMELTER;
|
CRUSHER, GRINDER, MIXER, SMELTER, SAWMILL;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Map<RecipeType, Map<Resource[], Resource[]>> recipes = new HashMap<RecipeType, Map<Resource[], Resource[]>>();
|
private final Map<RecipeType, Map<Resource[], Resource[]>> recipes = new HashMap<RecipeType, Map<Resource[], Resource[]>>();
|
||||||
|
@ -45,6 +45,23 @@ public final class MachineRecipes
|
||||||
this.addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, new ItemStackResource[] { new ItemStackResource(output) });
|
this.addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, new ItemStackResource[] { new ItemStackResource(output) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addRecipe(RecipeType machine, String input, String... oreNameOutputs)
|
||||||
|
{
|
||||||
|
OreDictResource[] outputs = new OreDictResource[oreNameOutputs.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < outputs.length; i++)
|
||||||
|
{
|
||||||
|
outputs[i] = new OreDictResource(oreNameOutputs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, outputs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addRecipe(RecipeType machine, String input, OreDictResource... output)
|
||||||
|
{
|
||||||
|
this.addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, output);
|
||||||
|
}
|
||||||
|
|
||||||
public void removeRecipe(RecipeType machine, Resource[] input)
|
public void removeRecipe(RecipeType machine, Resource[] input)
|
||||||
{
|
{
|
||||||
this.recipes.get(machine).remove(input);
|
this.recipes.get(machine).remove(input);
|
||||||
|
|
|
@ -16,7 +16,7 @@ import resonantinduction.core.handler.LinkEventHandler;
|
||||||
import resonantinduction.core.prefab.part.PacketMultiPart;
|
import resonantinduction.core.prefab.part.PacketMultiPart;
|
||||||
import resonantinduction.core.resource.ResourceGenerator;
|
import resonantinduction.core.resource.ResourceGenerator;
|
||||||
import resonantinduction.core.resource.fluid.BlockFluidMixture;
|
import resonantinduction.core.resource.fluid.BlockFluidMixture;
|
||||||
import resonantinduction.core.resource.fluid.TileFluidMixture;
|
import resonantinduction.core.resource.fluid.TileLiquidMixture;
|
||||||
import resonantinduction.core.resource.item.ItemOreResource;
|
import resonantinduction.core.resource.item.ItemOreResource;
|
||||||
import calclavia.lib.content.ContentRegistry;
|
import calclavia.lib.content.ContentRegistry;
|
||||||
import calclavia.lib.network.PacketHandler;
|
import calclavia.lib.network.PacketHandler;
|
||||||
|
@ -105,7 +105,7 @@ public class ResonantInduction
|
||||||
GameRegistry.registerItem(itemRefinedDust, itemRefinedDust.getUnlocalizedName());
|
GameRegistry.registerItem(itemRefinedDust, itemRefinedDust.getUnlocalizedName());
|
||||||
|
|
||||||
GameRegistry.registerBlock(blockFluidMixture, blockFluidMixture.getUnlocalizedName());
|
GameRegistry.registerBlock(blockFluidMixture, blockFluidMixture.getUnlocalizedName());
|
||||||
GameRegistry.registerTileEntity(TileFluidMixture.class, blockFluidMixture.getUnlocalizedName());
|
GameRegistry.registerTileEntity(TileLiquidMixture.class, blockFluidMixture.getUnlocalizedName());
|
||||||
|
|
||||||
blockDebug = contentRegistry.createBlock(BlockDebug.class, ItemBlockHolder.class);
|
blockDebug = contentRegistry.createBlock(BlockDebug.class, ItemBlockHolder.class);
|
||||||
|
|
||||||
|
|
|
@ -73,10 +73,12 @@ public class ResourceGenerator
|
||||||
OreDictionary.registerOre("dustRefined" + name, ResonantInduction.itemRefinedDust.getStackFromDust(materialName));
|
OreDictionary.registerOre("dustRefined" + name, ResonantInduction.itemRefinedDust.getStackFromDust(materialName));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add to machine recipes
|
// Add rubble to crushing recipes
|
||||||
ItemStack dust = OreDictionary.getOres("rubble" + name).get(0).copy();
|
// TODO: Change this to CRUSHING when the crusher is finished.
|
||||||
dust.stackSize = 2;
|
MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "ore" + name, "rubble" + name, "rubble" + name);
|
||||||
MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "ore" + name, dust);
|
|
||||||
|
// Add dust to mixer recipes, dummy item because mixer doesn't produce any items.
|
||||||
|
MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, "rubble" + name, "dust" + name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,17 +23,11 @@ public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityPr
|
||||||
this.setTextureName("water_flow");
|
this.setTextureName("water_flow");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity)
|
|
||||||
{
|
|
||||||
// If this item can be smelted into another fluid, add it to the mixture.
|
|
||||||
}
|
|
||||||
|
|
||||||
/* IFluidBlock */
|
/* IFluidBlock */
|
||||||
@Override
|
@Override
|
||||||
public FluidStack drain(World world, int x, int y, int z, boolean doDrain)
|
public FluidStack drain(World world, int x, int y, int z, boolean doDrain)
|
||||||
{
|
{
|
||||||
TileFluidMixture tileFluid = (TileFluidMixture) world.getBlockTileEntity(x, y, z);
|
TileLiquidMixture tileFluid = (TileLiquidMixture) world.getBlockTileEntity(x, y, z);
|
||||||
FluidStack stack = new FluidStack(ResonantInduction.MIXTURE, (int) (FluidContainerRegistry.BUCKET_VOLUME * this.getFilledPercentage(world, x, y, z)));
|
FluidStack stack = new FluidStack(ResonantInduction.MIXTURE, (int) (FluidContainerRegistry.BUCKET_VOLUME * this.getFilledPercentage(world, x, y, z)));
|
||||||
tileFluid.writeFluidToNBT(stack.tag);
|
tileFluid.writeFluidToNBT(stack.tag);
|
||||||
return stack;
|
return stack;
|
||||||
|
@ -48,6 +42,6 @@ public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityPr
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createNewTileEntity(World world)
|
public TileEntity createNewTileEntity(World world)
|
||||||
{
|
{
|
||||||
return new TileFluidMixture();
|
return new TileLiquidMixture();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
package resonantinduction.core.resource.fluid;
|
|
||||||
|
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.nbt.NBTTagList;
|
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
|
||||||
import calclavia.lib.prefab.tile.TileAdvanced;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Calclavia
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class TileFluidMixture extends TileAdvanced
|
|
||||||
{
|
|
||||||
public final TreeSet<FluidStack> fluids = new TreeSet<FluidStack>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canUpdate()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mix(FluidStack fluid)
|
|
||||||
{
|
|
||||||
if (fluids.contains(fluid))
|
|
||||||
{
|
|
||||||
for (FluidStack checkFluid : fluids)
|
|
||||||
{
|
|
||||||
if (fluid.equals(checkFluid))
|
|
||||||
{
|
|
||||||
checkFluid.amount += fluid.amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fluids.add(fluid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The color of the liquid based on the fluidStacks stored.
|
|
||||||
*/
|
|
||||||
public int getColor()
|
|
||||||
{
|
|
||||||
return 0xFFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFromNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.readFromNBT(nbt);
|
|
||||||
readFluidFromNBT(nbt);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeToNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.writeToNBT(nbt);
|
|
||||||
writeFluidToNBT(nbt);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void readFluidFromNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
fluids.clear();
|
|
||||||
|
|
||||||
NBTTagList nbtList = nbt.getTagList("fluids");
|
|
||||||
|
|
||||||
for (int i = 0; i < nbtList.tagCount(); ++i)
|
|
||||||
{
|
|
||||||
NBTTagCompound fluidNBT = (NBTTagCompound) nbtList.tagAt(i);
|
|
||||||
fluids.add(FluidStack.loadFluidStackFromNBT(fluidNBT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeFluidToNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
NBTTagList nbtList = new NBTTagList();
|
|
||||||
|
|
||||||
for (FluidStack fluid : fluids)
|
|
||||||
{
|
|
||||||
NBTTagCompound nbtElement = new NBTTagCompound();
|
|
||||||
fluid.writeToNBT(nbtElement);
|
|
||||||
nbtList.appendTag(nbtElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
nbt.setTag("fluids", nbtList);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
package resonantinduction.core.resource.fluid;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.nbt.NBTTagList;
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
import resonantinduction.api.recipe.MachineRecipes;
|
||||||
|
import resonantinduction.api.recipe.MachineRecipes.RecipeType;
|
||||||
|
import calclavia.lib.prefab.tile.TileAdvanced;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Calclavia
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TileLiquidMixture extends TileAdvanced
|
||||||
|
{
|
||||||
|
public final Set<ItemStack> items = new HashSet<ItemStack>();
|
||||||
|
public final Set<FluidStack> fluids = new HashSet<FluidStack>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canUpdate()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean mix(ItemStack itemStack)
|
||||||
|
{
|
||||||
|
if (MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack).length > 0)
|
||||||
|
{
|
||||||
|
System.out.println("Mixed");
|
||||||
|
// TODO: Maybe we need to merge the stacks?
|
||||||
|
items.add(itemStack);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mix(FluidStack fluid)
|
||||||
|
{
|
||||||
|
if (!fluid.getFluid().isGaseous())
|
||||||
|
{
|
||||||
|
if (fluids.contains(fluid))
|
||||||
|
{
|
||||||
|
for (FluidStack checkFluid : fluids)
|
||||||
|
{
|
||||||
|
if (fluid.equals(checkFluid))
|
||||||
|
{
|
||||||
|
checkFluid.amount += fluid.amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fluids.add(fluid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The color of the liquid based on the fluidStacks stored.
|
||||||
|
*/
|
||||||
|
public int getColor()
|
||||||
|
{
|
||||||
|
return 0xFFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromNBT(NBTTagCompound nbt)
|
||||||
|
{
|
||||||
|
super.readFromNBT(nbt);
|
||||||
|
readFluidFromNBT(nbt);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToNBT(NBTTagCompound nbt)
|
||||||
|
{
|
||||||
|
super.writeToNBT(nbt);
|
||||||
|
writeFluidToNBT(nbt);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readFluidFromNBT(NBTTagCompound nbt)
|
||||||
|
{
|
||||||
|
fluids.clear();
|
||||||
|
items.clear();
|
||||||
|
|
||||||
|
NBTTagList fluidList = nbt.getTagList("Fluids");
|
||||||
|
|
||||||
|
for (int i = 0; i < fluidList.tagCount(); ++i)
|
||||||
|
{
|
||||||
|
NBTTagCompound fluidNBT = (NBTTagCompound) fluidList.tagAt(i);
|
||||||
|
fluids.add(FluidStack.loadFluidStackFromNBT(fluidNBT));
|
||||||
|
}
|
||||||
|
|
||||||
|
NBTTagList itemList = nbt.getTagList("Items");
|
||||||
|
|
||||||
|
for (int i = 0; i < itemList.tagCount(); ++i)
|
||||||
|
{
|
||||||
|
NBTTagCompound stackTag = (NBTTagCompound) itemList.tagAt(i);
|
||||||
|
items.add(ItemStack.loadItemStackFromNBT(stackTag));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeFluidToNBT(NBTTagCompound nbt)
|
||||||
|
{
|
||||||
|
NBTTagList fluidList = new NBTTagList();
|
||||||
|
|
||||||
|
for (FluidStack fluid : fluids)
|
||||||
|
{
|
||||||
|
NBTTagCompound nbtElement = new NBTTagCompound();
|
||||||
|
fluid.writeToNBT(nbtElement);
|
||||||
|
fluidList.appendTag(nbtElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
nbt.setTag("Fluids", fluidList);
|
||||||
|
|
||||||
|
NBTTagList itemList = new NBTTagList();
|
||||||
|
|
||||||
|
for (ItemStack itemStack : items)
|
||||||
|
{
|
||||||
|
NBTTagCompound var4 = new NBTTagCompound();
|
||||||
|
itemStack.writeToNBT(var4);
|
||||||
|
itemList.appendTag(var4);
|
||||||
|
}
|
||||||
|
|
||||||
|
nbt.setTag("Items", itemList);
|
||||||
|
}
|
||||||
|
}
|
|
@ -131,11 +131,11 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
||||||
|
|
||||||
for (Resource resource : results)
|
for (Resource resource : results)
|
||||||
{
|
{
|
||||||
if (resource instanceof ItemStackResource)
|
ItemStack outputStack = resource.getItemStack();
|
||||||
{
|
|
||||||
if (!this.worldObj.isRemote)
|
if (!this.worldObj.isRemote)
|
||||||
{
|
{
|
||||||
EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, ((ItemStackResource) resource).itemStack.copy());
|
EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, outputStack.copy());
|
||||||
entityItem.delayBeforeCanPickup = 20;
|
entityItem.delayBeforeCanPickup = 20;
|
||||||
entityItem.motionX = 0;
|
entityItem.motionX = 0;
|
||||||
entityItem.motionY = 0;
|
entityItem.motionY = 0;
|
||||||
|
@ -144,7 +144,7 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -7,11 +7,14 @@ import java.util.Set;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import resonantinduction.api.recipe.MachineRecipes;
|
import resonantinduction.api.recipe.MachineRecipes;
|
||||||
|
import resonantinduction.api.recipe.MachineRecipes.RecipeType;
|
||||||
import resonantinduction.core.Reference;
|
import resonantinduction.core.Reference;
|
||||||
import resonantinduction.core.resource.item.ItemOreResource;
|
import resonantinduction.core.ResonantInduction;
|
||||||
|
import resonantinduction.core.resource.fluid.TileLiquidMixture;
|
||||||
import resonantinduction.mechanical.network.TileMechanical;
|
import resonantinduction.mechanical.network.TileMechanical;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
|
|
||||||
|
@ -72,8 +75,7 @@ public class TileMixer extends TileMechanical
|
||||||
|
|
||||||
if (entity instanceof EntityItem)
|
if (entity instanceof EntityItem)
|
||||||
{
|
{
|
||||||
// TODO: Use machine recipe
|
if (MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, ((EntityItem) entity).getEntityItem()).length > 0)
|
||||||
if (((EntityItem) entity).getEntityItem().getItem() instanceof ItemOreResource)
|
|
||||||
{
|
{
|
||||||
processItems.add((EntityItem) entity);
|
processItems.add((EntityItem) entity);
|
||||||
}
|
}
|
||||||
|
@ -135,8 +137,20 @@ public class TileMixer extends TileMechanical
|
||||||
|
|
||||||
private boolean doneWork(EntityItem entity)
|
private boolean doneWork(EntityItem entity)
|
||||||
{
|
{
|
||||||
ItemStack itemStack = entity.getEntityItem();
|
TileEntity tileEntity = new Vector3(entity).getTileEntity(worldObj);
|
||||||
entity.setDead();
|
|
||||||
|
if (tileEntity instanceof TileLiquidMixture)
|
||||||
|
{
|
||||||
|
System.out.println("MIXING!");
|
||||||
|
ItemStack itemStack = entity.getEntityItem().copy();
|
||||||
|
return ((TileLiquidMixture) tileEntity).mix(itemStack);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("transformed block!");
|
||||||
|
new Vector3(entity).setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue