Upstream Paper
This commit is contained in:
97
src/main/java/net/minecraft/server/SlotFurnaceResult.java
Normal file
97
src/main/java/net/minecraft/server/SlotFurnaceResult.java
Normal file
@@ -0,0 +1,97 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
// CraftBukkit start
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.FurnaceExtractEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
public class SlotFurnaceResult extends Slot {
|
||||
|
||||
private final EntityHuman a;public EntityHuman getPlayer() { return a; } // Paper OBFHELPER
|
||||
private int b;
|
||||
|
||||
public SlotFurnaceResult(EntityHuman entityhuman, IInventory iinventory, int i, int j, int k) {
|
||||
super(iinventory, i, j, k);
|
||||
this.a = entityhuman;
|
||||
}
|
||||
|
||||
public boolean isAllowed(ItemStack itemstack) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public ItemStack a(int i) {
|
||||
if (this.hasItem()) {
|
||||
this.b += Math.min(i, this.getItem().getCount());
|
||||
}
|
||||
|
||||
return super.a(i);
|
||||
}
|
||||
|
||||
public ItemStack a(EntityHuman entityhuman, ItemStack itemstack) {
|
||||
this.c(itemstack);
|
||||
super.a(entityhuman, itemstack);
|
||||
return itemstack;
|
||||
}
|
||||
|
||||
protected void a(ItemStack itemstack, int i) {
|
||||
this.b += i;
|
||||
this.c(itemstack);
|
||||
}
|
||||
|
||||
protected void c(ItemStack itemstack) {
|
||||
itemstack.a(this.a.world, this.a, this.b);
|
||||
if (!this.a.world.isClientSide) {
|
||||
Iterator iterator = ((TileEntityFurnace) this.inventory).q().entrySet().iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Entry<MinecraftKey, Integer> entry = (Entry) iterator.next();
|
||||
FurnaceRecipe furnacerecipe = (FurnaceRecipe) this.a.world.getCraftingManager().a((MinecraftKey) entry.getKey());
|
||||
float f;
|
||||
|
||||
if (furnacerecipe != null) {
|
||||
f = furnacerecipe.g();
|
||||
} else {
|
||||
f = 0.0F;
|
||||
}
|
||||
|
||||
int i = (Integer) entry.getValue();
|
||||
int j;
|
||||
|
||||
if (f == 0.0F) {
|
||||
i = 0;
|
||||
} else if (f < 1.0F) {
|
||||
j = MathHelper.d((float) i * f);
|
||||
if (j < MathHelper.f((float) i * f) && Math.random() < (double) ((float) i * f - (float) j)) {
|
||||
++j;
|
||||
}
|
||||
|
||||
i = j;
|
||||
}
|
||||
|
||||
// CraftBukkit start - fire FurnaceExtractEvent
|
||||
Player player = (Player) a.getBukkitEntity();
|
||||
TileEntityFurnace furnace = ((TileEntityFurnace) this.inventory);
|
||||
org.bukkit.block.Block block = a.world.getWorld().getBlockAt(furnace.position.getX(), furnace.position.getY(), furnace.position.getZ());
|
||||
|
||||
if (b != 0) {
|
||||
FurnaceExtractEvent event = new FurnaceExtractEvent(player, block, org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(itemstack.getItem()), b, i);
|
||||
a.world.getServer().getPluginManager().callEvent(event);
|
||||
i = event.getExpToDrop();
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
while (i > 0) {
|
||||
j = EntityExperienceOrb.getOrbValue(i);
|
||||
i -= j;
|
||||
this.a.world.addEntity(new EntityExperienceOrb(this.a.world, this.a.locX, this.a.locY + 0.5D, this.a.locZ + 0.5D, j, org.bukkit.entity.ExperienceOrb.SpawnReason.FURNACE, getPlayer())); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
((RecipeHolder) this.inventory).d(this.a);
|
||||
}
|
||||
|
||||
this.b = 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user