Work on getting the Aludel working - to be continued on my desktop

This commit is contained in:
pahimar 2014-01-19 11:18:16 -05:00
parent baf7d501a4
commit eed4a7bdaa
17 changed files with 372 additions and 125 deletions

View file

@ -15,6 +15,7 @@ import com.pahimar.ee3.lib.Reference;
import com.pahimar.ee3.lib.Strings;
import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.proxy.IProxy;
import com.pahimar.ee3.recipe.RecipesAludel;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
@ -159,6 +160,7 @@ public class EquivalentExchange3
public void postInit(FMLPostInitializationEvent event)
{
// NOOP
RecipesAludel.getInstance().debugDumpMap();
}
@EventHandler

View file

@ -2,6 +2,7 @@ package com.pahimar.ee3.block;
import com.pahimar.ee3.EquivalentExchange3;
import com.pahimar.ee3.lib.GuiIds;
import com.pahimar.ee3.lib.Particles;
import com.pahimar.ee3.lib.RenderIds;
import com.pahimar.ee3.lib.Strings;
import com.pahimar.ee3.tileentity.TileAludel;
@ -16,6 +17,8 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import java.util.Random;
/**
* Equivalent-Exchange-3
* <p/>
@ -59,6 +62,14 @@ public class BlockAludelBase extends BlockEE implements ITileEntityProvider
return RenderIds.aludelRender;
}
@Override
public boolean onBlockEventReceived(World par1World, int par2, int par3, int par4, int par5, int par6)
{
super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6);
TileEntity tileentity = par1World.getBlockTileEntity(par2, par3, par4);
return tileentity != null ? tileentity.receiveClientEvent(par5, par6) : false;
}
@Override
public void breakBlock(World world, int x, int y, int z, int id, int meta)
{
@ -126,7 +137,31 @@ public class BlockAludelBase extends BlockEE implements ITileEntityProvider
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z)
{
// TODO Vary light levels depending on if we are burning or not
return 0;
if (world.getBlockTileEntity(x, y, z) instanceof TileAludel)
{
if (((TileAludel) world.getBlockTileEntity(x, y, z)).getState() == 1)
{
return 15;
}
}
return super.getLightValue(world, x, y, z);
}
@Override
public void randomDisplayTick(World world, int x, int y, int z, Random random)
{
if (world.getBlockTileEntity(x, y, z) instanceof TileAludel)
{
if (((TileAludel) world.getBlockTileEntity(x, y, z)).getState() == 1)
{
world.spawnParticle(Particles.FLAME, (double) x + 0.175F, (double) y + 0.33F, (double) z + 0.5F, 0.0D, 0.0D, 0.0D);
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 0.5F, (double) y + 0.7F, (double) z + 0.0F, 0.0D, 0.05D, 0.0D);
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 0.5F, (double) y + 0.7F, (double) z + 1.0F, 0.0D, 0.05D, 0.0D);
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 0.0F, (double) y + 0.7F, (double) z + 0.5F, 0.0D, 0.05D, 0.0D);
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 1.0F, (double) y + 0.7F, (double) z + 0.5F, 0.0D, 0.05D, 0.0D);
}
}
}
}

View file

@ -109,12 +109,8 @@ public class BlockCalcinator extends BlockEE implements ITileEntityProvider
if (((TileCalcinator) world.getBlockTileEntity(x, y, z)).getState() == 1)
{
// Fire pot particles
// TODO TileEntity.onClientEvent to update particles
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 0.5F, (double) y + 0.4F, (double) ((z + 0.5F) + (random.nextFloat() * 0.5F - 0.3F)), 0.0D, 0.0D, 0.0D);
world.spawnParticle(Particles.FLAME, (double) x + 0.5F, (double) y + 0.4F, (double) z + 0.5F, 0.0D, 0.0D, 0.0D);
// Bowl particle effects
// TODO Decide if the bowl should have particle effects
}
}
}

View file

@ -21,12 +21,10 @@ import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class GuiAludel extends GuiContainer
{
private TileAludel tileAludel;
public GuiAludel(InventoryPlayer inventoryPlayer, TileAludel tileAludel)
{
super(new ContainerAludel(inventoryPlayer, tileAludel));
this.tileAludel = tileAludel;
xSize = 176;
@ -36,7 +34,6 @@ public class GuiAludel extends GuiContainer
@Override
protected void drawGuiContainerForegroundLayer(int x, int y)
{
String containerName = tileAludel.isInvNameLocalized() ? tileAludel.getInvName() : StatCollector.translateToLocal(tileAludel.getInvName());
fontRenderer.drawString(containerName, xSize / 2 - fontRenderer.getStringWidth(containerName) / 2, 6, 4210752);
fontRenderer.drawString(StatCollector.translateToLocal(Strings.CONTAINER_INVENTORY), 8, ySize - 93, 4210752);
@ -45,11 +42,22 @@ public class GuiAludel extends GuiContainer
@Override
protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3)
{
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.getTextureManager().bindTexture(Textures.GUI_ALUDEL);
int xStart = (width - xSize) / 2;
int yStart = (height - ySize) / 2;
this.drawTexturedModalRect(xStart, yStart, 0, 0, xSize, ySize);
int scaleAdjustment;
if (this.tileAludel.getState() == 1)
{
scaleAdjustment = this.tileAludel.getBurnTimeRemainingScaled(12);
this.drawTexturedModalRect(xStart + 45, yStart + 36 + 34 - scaleAdjustment, 176, 12 - scaleAdjustment, 14, scaleAdjustment + 2);
}
scaleAdjustment = this.tileAludel.getCookProgressScaled(24);
this.drawTexturedModalRect(xStart + 76, yStart + 39, 176, 14, scaleAdjustment + 1, 16);
}
}

View file

@ -100,7 +100,6 @@ public class TileEntityAludelRenderer extends TileEntitySpecialRenderer
private void scaleTranslateRotate(double x, double y, double z, ForgeDirection orientation)
{
if (orientation == ForgeDirection.NORTH)
{
GL11.glTranslated(x + 1, y, z);
@ -129,7 +128,6 @@ public class TileEntityAludelRenderer extends TileEntitySpecialRenderer
private float getGhostItemScaleFactor(ItemStack itemStack)
{
float scaleFactor = 1.0F;
if (itemStack != null)

View file

@ -2,9 +2,12 @@ package com.pahimar.ee3.inventory;
import com.pahimar.ee3.item.ItemAlchemicalDust;
import com.pahimar.ee3.tileentity.TileAludel;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
@ -18,12 +21,16 @@ import net.minecraft.tileentity.TileEntityFurnace;
*/
public class ContainerAludel extends Container
{
private TileAludel tileAludel;
private final int PLAYER_INVENTORY_ROWS = 3;
private final int PLAYER_INVENTORY_COLUMNS = 9;
private int lastDeviceCookTime;
private int lastFuelBurnTime;
private int lastItemCookTime;
public ContainerAludel(InventoryPlayer inventoryPlayer, TileAludel tileAludel)
{
this.tileAludel = tileAludel;
this.addSlotToContainer(new Slot(tileAludel, TileAludel.FUEL_INVENTORY_INDEX, 44, 74));
this.addSlotToContainer(new Slot(tileAludel, TileAludel.INPUT_INVENTORY_INDEX, 44, 18));
@ -49,20 +56,17 @@ public class ContainerAludel extends Container
@Override
public boolean canInteractWith(EntityPlayer var1)
{
return true;
}
@Override
public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex)
{
ItemStack itemStack = null;
Slot slot = (Slot) inventorySlots.get(slotIndex);
if (slot != null && slot.getHasStack())
{
ItemStack slotItemStack = slot.getStack();
itemStack = slotItemStack.copy();
@ -73,7 +77,6 @@ public class ContainerAludel extends Container
*/
if (slotIndex < TileAludel.INVENTORY_SIZE)
{
if (!this.mergeItemStack(slotItemStack, TileAludel.INVENTORY_SIZE, inventorySlots.size(), false))
{
return null;
@ -81,7 +84,6 @@ public class ContainerAludel extends Container
}
else
{
/**
* If the stack being shift-clicked into the Aludel's container
* is a fuel, first try to put it in the fuel slot. If it cannot
@ -131,4 +133,62 @@ public class ContainerAludel extends Container
return itemStack;
}
@Override
public void addCraftingToCrafters(ICrafting iCrafting)
{
super.addCraftingToCrafters(iCrafting);
iCrafting.sendProgressBarUpdate(this, 0, this.tileAludel.deviceCookTime);
iCrafting.sendProgressBarUpdate(this, 1, this.tileAludel.fuelBurnTime);
iCrafting.sendProgressBarUpdate(this, 2, this.tileAludel.itemCookTime);
}
@Override
public void detectAndSendChanges()
{
super.detectAndSendChanges();
for (Object crafter : this.crafters)
{
ICrafting icrafting = (ICrafting) crafter;
if (this.lastDeviceCookTime != this.tileAludel.deviceCookTime)
{
icrafting.sendProgressBarUpdate(this, 0, this.tileAludel.deviceCookTime);
}
if (this.lastFuelBurnTime != this.tileAludel.fuelBurnTime)
{
icrafting.sendProgressBarUpdate(this, 1, this.tileAludel.fuelBurnTime);
}
if (this.lastItemCookTime != this.tileAludel.itemCookTime)
{
icrafting.sendProgressBarUpdate(this, 2, this.tileAludel.itemCookTime);
}
}
this.lastDeviceCookTime = this.tileAludel.deviceCookTime;
this.lastFuelBurnTime = this.tileAludel.fuelBurnTime;
this.lastItemCookTime = this.tileAludel.itemCookTime;
}
@SideOnly(Side.CLIENT)
public void updateProgressBar(int valueType, int updatedValue)
{
if (valueType == 0)
{
this.tileAludel.deviceCookTime = updatedValue;
}
if (valueType == 1)
{
this.tileAludel.fuelBurnTime = updatedValue;
}
if (valueType == 2)
{
this.tileAludel.itemCookTime = updatedValue;
}
}
}

View file

@ -0,0 +1,32 @@
package com.pahimar.ee3.item.crafting;
import net.minecraft.item.ItemStack;
import java.util.List;
public class RecipeAludel
{
private ItemStack recipeOutput;
private List<ItemStack> recipeInputs;
public RecipeAludel(ItemStack recipeOutput, List<ItemStack> recipeInputs)
{
this.recipeOutput = recipeOutput;
this.recipeInputs = recipeInputs;
}
public boolean matches(RecipeAludel recipeAludel)
{
return false;
}
public ItemStack getRecipeOutput()
{
return this.recipeOutput;
}
public List<ItemStack> getRecipeInputs()
{
return this.recipeInputs;
}
}

View file

@ -29,19 +29,19 @@ public class Textures
// GUI textures
public static final ResourceLocation GUI_CALCINATOR = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "calcinator.png");
public static final ResourceLocation GUI_ALUDEL = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "aludel.png");
public static final ResourceLocation GUI_ALCHEMICAL_STORAGE_SMALL = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalStorage_Small.png");
public static final ResourceLocation GUI_ALCHEMICAL_STORAGE_MEDIUM = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalStorage_Medium.png");
public static final ResourceLocation GUI_ALCHEMICAL_STORAGE_LARGE = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalStorage_Large.png");
public static final ResourceLocation GUI_ALCHEMICAL_STORAGE_SMALL = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalStorage_small.png");
public static final ResourceLocation GUI_ALCHEMICAL_STORAGE_MEDIUM = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalStorage_medium.png");
public static final ResourceLocation GUI_ALCHEMICAL_STORAGE_LARGE = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalStorage_large.png");
public static final ResourceLocation GUI_PORTABLE_CRAFTING = new ResourceLocation("textures/gui/container/crafting_table.png");
public static final ResourceLocation GUI_GLASS_BELL = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "glassBell.png");
// Model textures
public static final ResourceLocation MODEL_CALCINATOR_IDLE = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "calcinator.png");
public static final ResourceLocation MODEL_CALCINATOR_ACTIVE = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "calcinator_Active.png");
public static final ResourceLocation MODEL_CALCINATOR_IDLE = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "calcinator_idle.png");
public static final ResourceLocation MODEL_CALCINATOR_ACTIVE = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "calcinator_active.png");
public static final ResourceLocation MODEL_ALUDEL = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "aludel.png");
public static final ResourceLocation MODEL_ALCHEMICAL_CHEST_SMALL = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "alchemicalChest_Small.png");
public static final ResourceLocation MODEL_ALCHEMICAL_CHEST_MEDIUM = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "alchemicalChest_Medium.png");
public static final ResourceLocation MODEL_ALCHEMICAL_CHEST_LARGE = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "alchemicalChest_Large.png");
public static final ResourceLocation MODEL_ALCHEMICAL_CHEST_SMALL = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "alchemicalChest_small.png");
public static final ResourceLocation MODEL_ALCHEMICAL_CHEST_MEDIUM = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "alchemicalChest_medium.png");
public static final ResourceLocation MODEL_ALCHEMICAL_CHEST_LARGE = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "alchemicalChest_large.png");
public static final ResourceLocation MODEL_GLASS_BELL = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "aludel.png");
public static final ResourceLocation MODEL_RESEARCH_STATION = ResourceLocationHelper.getResourceLocation(MODEL_TEXTURE_LOCATION + "researchStation.png");

View file

@ -1,9 +1,10 @@
package com.pahimar.ee3.recipe;
import com.pahimar.ee3.api.OreStack;
import com.pahimar.ee3.helper.ItemHelper;
import com.pahimar.ee3.helper.LogHelper;
import com.pahimar.ee3.item.ItemAlchemicalDust;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
public class AludelRecipeInputPair
{
@ -19,7 +20,28 @@ public class AludelRecipeInputPair
@Override
public boolean equals(Object object)
{
return object instanceof AludelRecipeInputPair && ItemHelper.equals(((AludelRecipeInputPair) object).inputStack, this.inputStack) && ItemHelper.equals(((AludelRecipeInputPair) object).dustStack, this.dustStack);
if (object instanceof AludelRecipeInputPair)
{
AludelRecipeInputPair recipeInputPair = (AludelRecipeInputPair) object;
LogHelper.debug(String.format("input - this.itemId: %s, object.inputStack.itemId: %s", this.inputStack.itemID, recipeInputPair.inputStack.itemID));
LogHelper.debug(String.format("input - this.meta: %s, object.inputStack.meta: %s", this.inputStack.getItemDamage(), recipeInputPair.inputStack.getItemDamage()));
LogHelper.debug(String.format("input - this.stackSize: %s, object.inputStack.stackSize: %s", this.inputStack.stackSize, recipeInputPair.inputStack.stackSize));
LogHelper.debug(String.format("dust - this.itemId: %s, object.inputStack.itemId: %s", this.dustStack.itemID, recipeInputPair.dustStack.itemID));
LogHelper.debug(String.format("dust - this.meta: %s, object.inputStack.meta: %s", this.dustStack.getItemDamage(), recipeInputPair.dustStack.getItemDamage()));
LogHelper.debug(String.format("dust - this.stackSize: %s, object.inputStack.stackSize: %s", this.dustStack.stackSize, recipeInputPair.dustStack.stackSize));
if (this.inputStack.itemID == recipeInputPair.inputStack.itemID && (this.inputStack.getItemDamage() == recipeInputPair.inputStack.getItemDamage() || this.inputStack.getItemDamage() == OreDictionary.WILDCARD_VALUE || recipeInputPair.inputStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) && this.inputStack.stackSize <= recipeInputPair.inputStack.stackSize)
{
if (this.dustStack.itemID == recipeInputPair.dustStack.itemID && this.dustStack.getItemDamage() == recipeInputPair.dustStack.getItemDamage() && this.dustStack.stackSize <= recipeInputPair.dustStack.stackSize)
{
return true;
}
}
}
return false;
}
public boolean isValid()
@ -27,43 +49,9 @@ public class AludelRecipeInputPair
return inputStack != null && dustStack != null && dustStack.getItem() instanceof ItemAlchemicalDust;
}
public boolean equalsIgnoreStackSize(AludelRecipeInputPair inputPair)
@Override
public String toString()
{
if (this.isValid() && inputPair.isValid())
{
return equalsIgnoreStackSize(this.inputStack, inputPair.inputStack) && equalsIgnoreStackSize(this.dustStack, inputPair.dustStack);
}
return false;
}
private static boolean equalsIgnoreStackSize(ItemStack itemStack1, ItemStack itemStack2)
{
if (itemStack1 != null && itemStack2 != null)
{
if (itemStack1.itemID == itemStack2.itemID && itemStack1.getItemDamage() == itemStack2.getItemDamage())
{
if (itemStack1.hasTagCompound() && itemStack2.hasTagCompound())
{
return itemStack1.getTagCompound().equals(itemStack2.getTagCompound());
}
else
{
return true;
}
}
else
{
OreStack oreStack1 = OreStack.getOreStackFromList(itemStack1);
OreStack oreStack2 = OreStack.getOreStackFromList(itemStack2);
if (oreStack1 != null && oreStack2 != null)
{
return OreStack.compareOreNames(oreStack1, oreStack2);
}
}
}
return false;
return String.format("Input stack: %s, Dust stack: %s", ItemHelper.toString(this.inputStack), ItemHelper.toString(this.dustStack));
}
}

View file

@ -1,26 +1,26 @@
package com.pahimar.ee3.recipe;
import com.pahimar.ee3.block.ModBlocks;
import com.pahimar.ee3.helper.ItemHelper;
import com.pahimar.ee3.helper.LogHelper;
import com.pahimar.ee3.item.ModItems;
import com.pahimar.ee3.item.crafting.RecipeAludel;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
public class RecipesAludel
{
private static RecipesAludel aludelRegistry = null;
private Map<AludelRecipeInputPair, ItemStack> aludelRecipes;
private List<RecipeAludel> aludelRecipes;
private RecipesAludel()
{
aludelRecipes = new HashMap<AludelRecipeInputPair, ItemStack>();
aludelRecipes = new ArrayList<RecipeAludel>();
}
public static RecipesAludel getInstance()
@ -68,71 +68,31 @@ public class RecipesAludel
public void addRecipe(ItemStack recipeOutput, ItemStack recipeInputStack, ItemStack recipeInputDust)
{
AludelRecipeInputPair recipeInputPair = new AludelRecipeInputPair(recipeInputStack, recipeInputDust);
if (recipeInputPair.isValid() && recipeOutput != null)
{
boolean similiarRecipeExists = false;
for (AludelRecipeInputPair existingRecipeInput : aludelRecipes.keySet())
{
if (existingRecipeInput.equalsIgnoreStackSize(recipeInputPair))
{
similiarRecipeExists = true;
}
}
if (!similiarRecipeExists)
{
aludelRecipes.put(recipeInputPair, recipeOutput);
}
}
// TODO Finish
}
public ItemStack getResult(ItemStack recipeInputStack, ItemStack recipeInputDust)
{
AludelRecipeInputPair recipeInputPair = new AludelRecipeInputPair(recipeInputStack, recipeInputDust);
if (recipeInputPair.isValid())
{
for (AludelRecipeInputPair recipeInputs : aludelRecipes.keySet())
{
if (recipeInputPair.equalsIgnoreStackSize(recipeInputPair))
{
if (recipeInputPair.inputStack.stackSize >= recipeInputs.inputStack.stackSize && recipeInputPair.dustStack.stackSize >= recipeInputs.dustStack.stackSize)
{
return aludelRecipes.get(recipeInputs);
}
}
}
}
// TODO Finish
return null;
}
public AludelRecipeInputPair getRecipeInputs(ItemStack itemStack)
{
for (AludelRecipeInputPair recipeInputPair : aludelRecipes.keySet())
{
if (ItemHelper.equals(aludelRecipes.get(recipeInputPair), itemStack))
{
return recipeInputPair;
}
}
// TODO Finish
return null;
}
public Map<AludelRecipeInputPair, ItemStack> getRecipeMap()
public List<RecipeAludel> getRecipeMap()
{
return aludelRecipes;
}
public void debugDumpMap()
{
for (AludelRecipeInputPair recipeInputPair : aludelRecipes.keySet())
for (RecipeAludel recipeAludel : aludelRecipes)
{
LogHelper.debug(String.format("Output: %s, Input Stack: %s, Dust Stack: %s", ItemHelper.toString(aludelRecipes.get(recipeInputPair)), ItemHelper.toString(recipeInputPair.inputStack), ItemHelper.toString(recipeInputPair.dustStack)));
LogHelper.debug(String.format("Output: %s, Input Stacks: %s", recipeAludel.getRecipeOutput(), recipeAludel.getRecipeInputs()));
}
}
}

View file

@ -4,11 +4,16 @@ import com.pahimar.ee3.helper.ItemHelper;
import com.pahimar.ee3.lib.Strings;
import com.pahimar.ee3.network.PacketTypeHandler;
import com.pahimar.ee3.network.packet.PacketTileWithItemUpdate;
import com.pahimar.ee3.recipe.AludelRecipeInputPair;
import com.pahimar.ee3.recipe.RecipesAludel;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.packet.Packet;
import net.minecraft.tileentity.TileEntityFurnace;
/**
* Equivalent-Exchange-3
@ -43,7 +48,6 @@ public class TileAludel extends TileEE implements IInventory
@Override
public int getSizeInventory()
{
return inventory.length;
}
@ -109,6 +113,21 @@ public class TileAludel extends TileEE implements IInventory
return 64;
}
@Override
public boolean receiveClientEvent(int eventId, int eventData)
{
if (eventId == 1)
{
this.state = (byte) eventData;
this.worldObj.updateAllLightTypes(this.xCoord, this.yCoord, this.zCoord);
return true;
}
else
{
return super.receiveClientEvent(eventId, eventData);
}
}
@Override
public void openChest()
{
@ -138,6 +157,10 @@ public class TileAludel extends TileEE implements IInventory
inventory[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound);
}
}
deviceCookTime = nbtTagCompound.getInteger("deviceCookTime");
fuelBurnTime = nbtTagCompound.getInteger("fuelBurnTime");
itemCookTime = nbtTagCompound.getInteger("itemCookTime");
}
@Override
@ -158,6 +181,9 @@ public class TileAludel extends TileEE implements IInventory
}
}
nbtTagCompound.setTag("Items", tagList);
nbtTagCompound.setInteger("deviceCookTime", deviceCookTime);
nbtTagCompound.setInteger("fuelBurnTime", fuelBurnTime);
nbtTagCompound.setInteger("itemCookTime", itemCookTime);
}
@Override
@ -172,6 +198,145 @@ public class TileAludel extends TileEE implements IInventory
return true;
}
@Override
public void updateEntity()
{
boolean isBurning = this.deviceCookTime > 0;
boolean sendUpdate = false;
// If the Aludel still has burn time, decrement it
if (this.deviceCookTime > 0)
{
this.deviceCookTime--;
}
if (!this.worldObj.isRemote)
{
// Start "cooking" a new item, if we can
if (this.deviceCookTime == 0 && this.canInfuse())
{
this.fuelBurnTime = this.deviceCookTime = TileEntityFurnace.getItemBurnTime(this.inventory[FUEL_INVENTORY_INDEX]);
if (this.deviceCookTime > 0)
{
sendUpdate = true;
if (this.inventory[FUEL_INVENTORY_INDEX] != null)
{
--this.inventory[FUEL_INVENTORY_INDEX].stackSize;
if (this.inventory[FUEL_INVENTORY_INDEX].stackSize == 0)
{
this.inventory[FUEL_INVENTORY_INDEX] = this.inventory[FUEL_INVENTORY_INDEX].getItem().getContainerItemStack(inventory[FUEL_INVENTORY_INDEX]);
}
}
}
}
// Continue "cooking" the same item, if we can
if (this.deviceCookTime > 0 && this.canInfuse())
{
this.itemCookTime++;
if (this.itemCookTime == 200)
{
this.itemCookTime = 0;
this.infuseItem();
sendUpdate = true;
}
}
else
{
this.itemCookTime = 0;
}
// If the state has changed, catch that something changed
if (isBurning != this.deviceCookTime > 0)
{
sendUpdate = true;
}
}
if (sendUpdate)
{
this.onInventoryChanged();
this.state = this.deviceCookTime > 0 ? (byte) 1 : (byte) 0;
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 1, this.state);
this.worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID);
}
}
@SideOnly(Side.CLIENT)
public int getCookProgressScaled(int scale)
{
return this.itemCookTime * scale / 200;
}
@SideOnly(Side.CLIENT)
public int getBurnTimeRemainingScaled(int scale)
{
if (this.fuelBurnTime > 0)
{
return this.deviceCookTime * scale / this.fuelBurnTime;
}
return 0;
}
private boolean canInfuse()
{
if (inventory[INPUT_INVENTORY_INDEX] == null || inventory[DUST_INVENTORY_INDEX] == null)
{
return false;
}
else
{
ItemStack infusedItemStack = RecipesAludel.getInstance().getResult(inventory[INPUT_INVENTORY_INDEX], inventory[DUST_INVENTORY_INDEX]);
if (infusedItemStack == null)
{
return false;
}
if (inventory[OUTPUT_INVENTORY_INDEX] == null)
{
return true;
}
else
{
boolean outputEquals = this.inventory[OUTPUT_INVENTORY_INDEX].isItemEqual(infusedItemStack);
int mergedOutputStackSize = this.inventory[OUTPUT_INVENTORY_INDEX].stackSize + infusedItemStack.stackSize;
if (outputEquals)
{
return mergedOutputStackSize <= getInventoryStackLimit() && mergedOutputStackSize <= infusedItemStack.getMaxStackSize();
}
}
}
return false;
}
public void infuseItem()
{
if (this.canInfuse())
{
ItemStack infusedItemStack = RecipesAludel.getInstance().getResult(inventory[INPUT_INVENTORY_INDEX], inventory[DUST_INVENTORY_INDEX]);
AludelRecipeInputPair inputPair = RecipesAludel.getInstance().getRecipeInputs(infusedItemStack);
if (this.inventory[OUTPUT_INVENTORY_INDEX] == null)
{
this.inventory[OUTPUT_INVENTORY_INDEX] = infusedItemStack.copy();
}
else if (this.inventory[OUTPUT_INVENTORY_INDEX].isItemEqual(infusedItemStack))
{
inventory[OUTPUT_INVENTORY_INDEX].stackSize += infusedItemStack.stackSize;
}
decrStackSize(INPUT_INVENTORY_INDEX, inputPair.inputStack.stackSize);
decrStackSize(DUST_INVENTORY_INDEX, inputPair.dustStack.stackSize);
}
}
@Override
public Packet getDescriptionPacket()
{

View file

@ -440,9 +440,12 @@ public class TileCalcinator extends TileEE implements IInventory
private void sendDustPileData()
{
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 2, getLeftStackSize());
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 3, getLeftStackMeta());
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 4, getRightStackSize());
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 5, getRightStackMeta());
if (this.getBlockType() != null)
{
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 2, getLeftStackSize());
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 3, getLeftStackMeta());
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 4, getRightStackSize());
this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 5, getRightStackMeta());
}
}
}

View file

@ -21,11 +21,11 @@ item.ee3:stoneMinium.name=Minium Stone [WIP]
item.ee3:stonePhilosophers.name=Philosopher's Stone [WIP]
# Block localizations
tile.ee3:alchemicalChest.name=Alchemical Chest [WIP]
tile.ee3:alchemicalChest.name=Alchemical Chest
tile.ee3:alchemicalFuelBlock.alchemicalCoal.name=Alchemical Coal Block
tile.ee3:alchemicalFuelBlock.mobiusFuel.name=Mobius Fuel Block
tile.ee3:alchemicalFuelBlock.aeternalisFuel.name=Aeternalis Fuel Block
tile.ee3:aludel.name=Aludel [WIP]
tile.ee3:aludel.name=Aludel Base
tile.ee3:calcinator.name=Calcinator
tile.ee3:chalk.name=Chalk
tile.ee3:glassBell.name=Glass Bell
@ -36,8 +36,8 @@ tile.ee3:infusedPlanks.name=Infused Wood Planks
# GUI localizations
container.ee3:alchemicalBag=Alchemical Bag [WIP]
container.ee3:alchemicalChest=Alchemical Chest [WIP]
container.ee3:aludel=Aludel [WIP]
container.ee3:alchemicalChest=Alchemical Chest
container.ee3:aludel=Aludel
container.ee3:calcinator=Calcinator
container.ee3:glassBell=Glass Bell
container.ee3:researchStation=Research Station [WIP]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB