Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

GingaNinja042

Members
  • Joined

  • Last visited

  1. I have been doing a bit of experimenting with some mod creation and a custom furnace. My problem is that when I put something into the smelting slot [Slot 0] it just moves over to the fuel slot [Slot 1] and replaces the item already there. Any help would be wonderful. Thanks. ContainerGingaFurnace.java package net.gingacraft.mod.container; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.gingacraft.mod.Gingacraft; import net.gingacraft.mod.tileentity.TileEntityGingaFurnace; import net.minecraft.client.resources.I18n; 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.inventory.SlotFurnace; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.ResourceLocation; public class ContainerGingaFurnace extends Container{ private TileEntityGingaFurnace gingaFurnace; public int lastBurnTime; public int lastCurrentItemBurnTime; public int lastCookTime; public ContainerGingaFurnace(InventoryPlayer inventory, TileEntityGingaFurnace tileentity){ this.gingaFurnace = tileentity; this.addSlotToContainer(new Slot(tileentity, 0, 56, 35)); this.addSlotToContainer(new Slot(tileentity, 1, 8, 62)); this.addSlotToContainer(new SlotFurnace(inventory.player, tileentity, 2, 116, 35)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for(int i = 0; i < 9; i++){ this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142)); } } public void addCraftingToCrafters (ICrafting icrafting){ super.addCraftingToCrafters(icrafting); icrafting.sendProgressBarUpdate(this, 0, this.gingaFurnace.cookTime); icrafting.sendProgressBarUpdate(this, 1, this.gingaFurnace.burnTime); icrafting.sendProgressBarUpdate(this, 2, this.gingaFurnace.currentItemBurnTime); } public void detectAndSendChanges(){ super.detectAndSendChanges(); for(int i = 0; i < this.crafters.size(); i++){ ICrafting icrafting = (ICrafting) this.crafters.get(i); if(this.lastCookTime != this.gingaFurnace.cookTime){ icrafting.sendProgressBarUpdate(this, 0, this.gingaFurnace.cookTime); } if(this.lastBurnTime != this.gingaFurnace.burnTime){ icrafting.sendProgressBarUpdate(this, 1, this.gingaFurnace.burnTime); } if(this.lastCurrentItemBurnTime != this.gingaFurnace.currentItemBurnTime){ icrafting.sendProgressBarUpdate(this, 2, this.gingaFurnace.currentItemBurnTime); } } this.lastCookTime = this.gingaFurnace.cookTime; this.lastBurnTime = this.gingaFurnace.burnTime; this.lastCurrentItemBurnTime = this.gingaFurnace.currentItemBurnTime; } @SideOnly(Side.CLIENT) public void updateProgressBar(int slot, int par2){ if (slot == 0){ this.gingaFurnace.cookTime = par2; } if (slot == 1){ this.gingaFurnace.burnTime = par2; } if (slot == 2){ this.gingaFurnace.currentItemBurnTime = par2; } } public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2){ ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(par2); if (slot != null && slot.getHasStack()){ ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (par2 == 2){ if (!this.mergeItemStack(itemstack1, 3, 39, true)){ return null; } slot.onSlotChange(itemstack1, itemstack); } else if (par2 != 1 && par2 != 0){ if (FurnaceRecipes.smelting().getSmeltingResult(itemstack1) != null){ if (!this.mergeItemStack(itemstack1, 0, 1, false)){ return null; } } else if (TileEntityGingaFurnace.isItemFuel(itemstack1)){ if (!this.mergeItemStack(itemstack1, 1, 2, false)){ return null; } } else if (par2 >= 3 && par2 < 30){ if (!this.mergeItemStack(itemstack1, 30, 39, false)){ return null; } } else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(itemstack1, 3, 30, false)){ return null; } } else if (!this.mergeItemStack(itemstack1, 3, 39, false)){ return null; } if (itemstack1.stackSize == 0){ slot.putStack((ItemStack)null); } else{ slot.onSlotChanged(); } if (itemstack1.stackSize == itemstack.stackSize){ return null; } slot.onPickupFromSlot(par1EntityPlayer, itemstack1); } return itemstack; } @Override public boolean canInteractWith(EntityPlayer var1) { return true; } } TileEntityGingaFurnace.java package net.gingacraft.mod.tileentity; import cpw.mods.fml.common.registry.GameRegistry; import net.gingacraft.mod.Gingacraft; import net.gingacraft.mod.blocks.GingaFurnace; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.WeightedRandom.Item; public class TileEntityGingaFurnace extends TileEntity implements ISidedInventory{ private String localizedName; private static final int[] slots_top = new int[]{0}; private static final int[] slots_bottom = new int[]{2, 1}; private static final int[] slots_side = new int[]{1}; private ItemStack[] slots = new ItemStack [3]; public int furnaceSpeed = 150; public int burnTime; public int currentItemBurnTime; public int cookTime; public void setGuiDisplayName(String displayName){ this.localizedName = displayName; } public String getInventoryName(){ return this.hasCustomInventoryName() ? this.localizedName : "container.gingaFurnace"; } public boolean hasCustomInventoryName() { return this.localizedName != null && this.localizedName.length() > 0; } public int getSizeInventory(){ return this.slots.length; } @Override public ItemStack getStackInSlot(int var1) { return this.slots[var1]; } @Override public ItemStack decrStackSize(int var1, int var2){ if(this.slots[var1] != null){ ItemStack itemstack; if(this.slots[var1].stackSize <= var2 ){ itemstack = this.slots[var1]; this.slots[var1] = null; return itemstack; }else{ itemstack = this.slots[var1].splitStack(var2); if(this.slots[var1].stackSize == 0){ this.slots[var1] = null; } return itemstack; } } else{ return null; } } @Override public ItemStack getStackInSlotOnClosing(int i){ if(this.slots[i] != null){ ItemStack itemstack = this.slots[i]; this.slots[i] = null; return itemstack; } return null; } @Override public void setInventorySlotContents(int i, ItemStack itemstack){ this.slots[1] = itemstack; if(itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()){ itemstack.stackSize = this.getInventoryStackLimit(); } } @Override public int getInventoryStackLimit(){ return 64; } @Override public boolean isUseableByPlayer(EntityPlayer entityplayer){ return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : entityplayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; } public void openInventory() {} public void closeInventory() {} @Override public boolean isItemValidForSlot(int i, ItemStack itemstack){ return i == 2 ? false : (i == 1 ? isItemFuel(itemstack) : true); } public static boolean isItemFuel (ItemStack itemstack){ return getItemBurnTime(itemstack) > 0; } private static int getItemBurnTime(ItemStack itemstack){ if(itemstack == null){ return 0; }else{ //net.minecraft.item.Item net.minecraft.item.Item item = itemstack.getItem(); if(item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air){ Block block = Block.getBlockFromItem(item); if(block == Blocks.sapling) return 100; if(block == Blocks.coal_block) return 14400; } if(item == Gingacraft.itemTreePitch) return 800; if(item == Items.coal) return 1600; if(item == Items.stick) return 100; if(item == Items.lava_bucket) return 20000; if(item == Items.blaze_rod) return 2400; } return GameRegistry.getFuelValue(itemstack); } public boolean isBurning(){ return this.burnTime > 0; } public void updateEntity(){ boolean flag = this.burnTime > 0; boolean flag1 = false; if(this.isBurning()){ this.burnTime--; } if(!this.worldObj.isRemote){ if(this.burnTime == 0 && this.canSmelt()){ this.currentItemBurnTime = this.burnTime = getItemBurnTime(this.slots[1]); if(this.isBurning()){ flag1 = true; if(this.slots[1] != null){ this.slots[1].stackSize--; if(this.slots[1].stackSize == 0){ this.slots[1] = this.slots[1].getItem().getContainerItem(this.slots[1]); } } } } if(this.isBurning() && this.canSmelt()){ this.cookTime++; if(this.cookTime == this.furnaceSpeed){ this.cookTime = 0; this.smeltItem(); flag1 = true; } }else{ this.cookTime = 0; } if(flag != this.isBurning()){ flag1 = true; GingaFurnace.updateGingaFurnaceBlockState(this.burnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); } } if(flag1){ this.markDirty(); } } public boolean canSmelt(){ if(this.slots[0] == null){ return false; }else{ ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); if(itemstack == null) return false; if(this.slots[2] == null) return true; if(this.slots[2].isItemEqual(itemstack)) return false; int result = this.slots[2].stackSize + itemstack.stackSize; return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize()); } } public void smeltItem(){ if(this.canSmelt()){ ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); if(this.slots[2] == null) { this.slots[2] = itemstack.copy(); }else if (this.slots[2].isItemEqual(itemstack)){ this.slots[2].stackSize += itemstack.stackSize; } this.slots[0].stackSize--; if(this.slots[0].stackSize <= 0){ this.slots[0] = null; } } } @Override public int[] getAccessibleSlotsFromSide(int var1) { return var1 == 0 ? slots_bottom : (var1 == 1 ? slots_top : slots_side); } @Override public boolean canInsertItem(int i, ItemStack itemStack, int j) { return this.isItemValidForSlot(i, itemStack); } @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { return j != 0 || i != 1 || itemStack.getItem() == Items.bucket; } public int getBurnTimeRemainingScaled(int i){ if(this.currentItemBurnTime == 0){ this.currentItemBurnTime = this.furnaceSpeed; } return this.burnTime * i / this.currentItemBurnTime; } public int getCookProgressScaled(int i){ return this.cookTime * i / this.furnaceSpeed; } public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList list = nbt.getTagList("Items", 10); this.slots = new ItemStack[this.getSizeInventory()]; for(int i = 0; i < list.tagCount(); i++) { NBTTagCompound compound = (NBTTagCompound) list.getCompoundTagAt(i); byte b = compound.getByte("Slot"); if(b >= 0 && b < this.slots.length) { this.slots[b] = ItemStack.loadItemStackFromNBT(compound); } } this.burnTime = (int)nbt.getShort("BurnTime"); this.cookTime = (int)nbt.getShort("CookTime"); this.currentItemBurnTime = (int)nbt.getShort("CurrentBurnTime"); if(nbt.hasKey("CustomName")) { this.localizedName = nbt.getString("CustomName"); } } public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setShort("BurnTime", (short)this.burnTime); nbt.setShort("CookTime", (short)this.cookTime); nbt.setShort("CurrentBurnTime", (short)this.currentItemBurnTime); NBTTagList list = new NBTTagList(); for (int i = 0; i < this.slots.length; i++) { if(this.slots[i] != null) { NBTTagCompound compound = new NBTTagCompound(); compound.setByte("Slot", (byte)i); this.slots[i].writeToNBT(compound); list.appendTag(compound); } } nbt.setTag("Items", list); if (this.hasCustomInventoryName()) { nbt.setString("CustomName", this.localizedName); } } } GuiGingaFurnace.java package net.gingacraft.mod.gui; import org.lwjgl.opengl.GL11; import net.gingacraft.mod.Gingacraft; import net.gingacraft.mod.container.ContainerGingaFurnace; import net.gingacraft.mod.tileentity.TileEntityGingaFurnace; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.ResourceLocation; public class GuiGingaFurnace extends GuiContainer{ public static final ResourceLocation bground = new ResourceLocation(Gingacraft.modid + ":" + "textures/gui/GuiGingaFurnace.png"); public TileEntityGingaFurnace gingaFurnace; public GuiGingaFurnace(InventoryPlayer inventoryPlayer, TileEntityGingaFurnace entity) { super(new ContainerGingaFurnace(inventoryPlayer, entity)); this.gingaFurnace = entity; this.xSize = 176; this.ySize = 166; } public void drawGuiContainerForegroundLayer(int par1, int par2){ String name = this.gingaFurnace.hasCustomInventoryName() ? this.gingaFurnace.getInventoryName() : I18n.format(this.gingaFurnace.getInventoryName(), new Object[0]); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 10, 16093987); this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 118, this.ySize - 96 + 2, 16093987); } @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GL11.glColor4f(1F, 1F, 1F, 1F); Minecraft.getMinecraft().getTextureManager().bindTexture(bground); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); if(this.gingaFurnace.isBurning()){ int k = this.gingaFurnace.getBurnTimeRemainingScaled(40); int j = 40 - k; drawTexturedModalRect(guiLeft + 29, guiTop + 65, 176, 0, 40 - j, 10); } int k = this.gingaFurnace.getCookProgressScaled(24); drawTexturedModalRect(guiLeft + 79, guiTop + 34, 176, 10, k + 1, 16); } } GingaFurnace.java package net.gingacraft.mod.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.gingacraft.mod.Gingacraft; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; public class GingaBlock extends Block { public GingaBlock(Material material){ super(material); this.setStepSound(soundTypeMetal); this.setCreativeTab(Gingacraft.gingacraftTab); } @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { this.blockIcon = iconRegister.registerIcon(Gingacraft.modid + ":" + this.getUnlocalizedName().substring(5)); } }

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.