90 lines
2.4 KiB
Java

package com.hbm.inventory;
import cpw.mods.fml.common.FMLCommonHandler;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.stats.AchievementList;
import net.minecraft.util.MathHelper;
public class SlotSmelting extends Slot {
private EntityPlayer thePlayer;
private int itemCountBuffer;
public SlotSmelting(EntityPlayer player, IInventory inv, int id, int x, int y) {
super(inv, id, x, y);
this.thePlayer = player;
}
public boolean isItemValid(ItemStack stack) {
return false;
}
public ItemStack decrStackSize(int amount) {
if(this.getHasStack()) {
this.itemCountBuffer += Math.min(amount, this.getStack().stackSize);
}
return super.decrStackSize(amount);
}
public void onPickupFromSlot(EntityPlayer player, ItemStack stack) {
this.onCrafting(stack);
super.onPickupFromSlot(player, stack);
}
protected void onCrafting(ItemStack stack, int amount) {
this.itemCountBuffer += amount;
this.onCrafting(stack);
}
protected void onCrafting(ItemStack stack) {
stack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.itemCountBuffer);
if(!this.thePlayer.worldObj.isRemote) {
int buffer = this.itemCountBuffer;
float exp = FurnaceRecipes.smelting().func_151398_b(stack);
int remainingExp;
if(exp == 0.0F) {
buffer = 0;
} else if(exp < 1.0F) {
remainingExp = MathHelper.floor_float((float) buffer * exp);
if(remainingExp < MathHelper.ceiling_float_int((float) buffer * exp) && (float) Math.random() < (float) buffer * exp - (float) remainingExp) {
++remainingExp;
}
buffer = remainingExp;
}
while(buffer > 0) {
remainingExp = EntityXPOrb.getXPSplit(buffer);
buffer -= remainingExp;
this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, remainingExp));
}
}
this.itemCountBuffer = 0;
FMLCommonHandler.instance().firePlayerSmeltedEvent(thePlayer, stack);
if(stack.getItem() == Items.iron_ingot) {
this.thePlayer.addStat(AchievementList.acquireIron, 1);
}
if(stack.getItem() == Items.cooked_fished) {
this.thePlayer.addStat(AchievementList.cookFish, 1);
}
}
}