Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-17 05:20:05 +01:00
[Bleeding] Fixed item duping in certain occasions. Fixes BUKKIT-1310
Dieser Commit ist enthalten in:
Ursprung
0c9b59e071
Commit
c30e339af6
@ -164,7 +164,7 @@ public class Block {
|
|||||||
public final Material material;
|
public final Material material;
|
||||||
public float frictionFactor;
|
public float frictionFactor;
|
||||||
private String name;
|
private String name;
|
||||||
protected ArrayList<ItemStack> dropList = new ArrayList<ItemStack>(); // CraftBukkit
|
public ArrayList<ItemStack> dropList = new ArrayList<ItemStack>(1); // CraftBukkit
|
||||||
|
|
||||||
protected Block(int i, Material material) {
|
protected Block(int i, Material material) {
|
||||||
this.bR = true;
|
this.bR = true;
|
||||||
@ -338,6 +338,7 @@ public class Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void b(World world, int i, int j, int k, int l, int i1) {
|
public final void b(World world, int i, int j, int k, int l, int i1) {
|
||||||
|
this.dropList.clear(); // CraftBukkit
|
||||||
this.dropNaturally(world, i, j, k, l, 1.0F, i1);
|
this.dropNaturally(world, i, j, k, l, 1.0F, i1);
|
||||||
this.doActualDrop(world, i, j, k); // CraftBukkit
|
this.doActualDrop(world, i, j, k); // CraftBukkit
|
||||||
}
|
}
|
||||||
@ -549,10 +550,6 @@ public class Block {
|
|||||||
this.dropList.clear();
|
this.dropList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDrops(ArrayList<ItemStack> drops) {
|
|
||||||
this.dropList = drops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<ItemStack> calculateDrops(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
|
public ArrayList<ItemStack> calculateDrops(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
if (this.h() && EnchantmentManager.hasSilkTouchEnchantment(entityhuman.inventory)) {
|
if (this.h() && EnchantmentManager.hasSilkTouchEnchantment(entityhuman.inventory)) {
|
||||||
|
@ -300,9 +300,8 @@ public class BlockVine extends Block {
|
|||||||
// CraftBukkit start - Calculate drops
|
// CraftBukkit start - Calculate drops
|
||||||
public ArrayList<ItemStack> calculateDrops(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
|
public ArrayList<ItemStack> calculateDrops(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
|
||||||
if (!world.isStatic && entityhuman.U() != null && entityhuman.U().id == Item.SHEARS.id) {
|
if (!world.isStatic && entityhuman.U() != null && entityhuman.U().id == Item.SHEARS.id) {
|
||||||
super.dropList = new ArrayList<ItemStack>();
|
|
||||||
this.a(world, i, j, k, new ItemStack(Block.VINE, 1, 0));
|
this.a(world, i, j, k, new ItemStack(Block.VINE, 1, 0));
|
||||||
return super.dropList;
|
return this.dropList;
|
||||||
} else {
|
} else {
|
||||||
return super.calculateDrops(world, entityhuman, i, j, k, l);
|
return super.calculateDrops(world, entityhuman, i, j, k, l);
|
||||||
}
|
}
|
||||||
|
@ -528,9 +528,10 @@ public class CraftEventFactory {
|
|||||||
((EntityPlayer) player).netServerHandler.sendPacket(packet);
|
((EntityPlayer) player).netServerHandler.sendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<org.bukkit.inventory.ItemStack> drops = new ArrayList<org.bukkit.inventory.ItemStack>();
|
List<ItemStack> calculatedDrops = blockType.calculateDrops(world, player, x, y, z, data);
|
||||||
|
List<org.bukkit.inventory.ItemStack> drops = new ArrayList<org.bukkit.inventory.ItemStack>(calculatedDrops.size());
|
||||||
if (!creative && player.b(blockType)) {
|
if (!creative && player.b(blockType)) {
|
||||||
for (ItemStack stack : blockType.calculateDrops(world, player, x, y, z, data)) {
|
for (ItemStack stack : calculatedDrops) {
|
||||||
drops.add(new CraftItemStack(stack));
|
drops.add(new CraftItemStack(stack));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -539,17 +540,17 @@ public class CraftEventFactory {
|
|||||||
world.getServer().getPluginManager().callEvent(event);
|
world.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
blockType.setDrops(new ArrayList<ItemStack>());
|
blockType.dropList.clear();
|
||||||
// Let the client know the block still exists
|
// Let the client know the block still exists
|
||||||
((EntityPlayer) player).netServerHandler.sendPacket(new Packet53BlockChange(x, y, z, world));
|
((EntityPlayer) player).netServerHandler.sendPacket(new Packet53BlockChange(x, y, z, world));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<ItemStack> toDrop = new ArrayList<ItemStack>();
|
ArrayList<ItemStack> toDrop = new ArrayList<ItemStack>(drops.size());
|
||||||
for (org.bukkit.inventory.ItemStack stack : drops) {
|
for (org.bukkit.inventory.ItemStack stack : drops) {
|
||||||
toDrop.add(CraftItemStack.createNMSItemStack(stack));
|
toDrop.add(CraftItemStack.createNMSItemStack(stack));
|
||||||
}
|
}
|
||||||
blockType.setDrops(toDrop);
|
blockType.dropList = toDrop;
|
||||||
|
|
||||||
return false; // Event not cancelled
|
return false; // Event not cancelled
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren