Commits

md_5 authored c1b529eddc7
SPIGOT-2683: Missing BlockDispenseEvents
No tags

nms-patches/DispenserRegistry.patch

Modified
354 354 + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null);
355 355 + // CraftBukkit end
356 356
357 357 world.addEntity(entitytntprimed);
358 358 world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gz, SoundCategory.BLOCKS, 1.0F, 1.0F);
359 359 - --itemstack.count;
360 360 + // --itemstack.count; // CraftBukkit - handled above
361 361 return itemstack;
362 362 }
363 363 });
364 -@@ -437,12 +677,40 @@
364 +@@ -296,6 +536,30 @@
365 + BlockPosition blockposition = isourceblock.getBlockPosition().shift(enumdirection);
366 + BlockSkull blockskull = Blocks.SKULL;
367 +
368 ++ // CraftBukkit start
369 ++ org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
370 ++ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack);
371 ++
372 ++ BlockDispenseEvent event = new BlockDispenseEvent(bukkitBlock, craftItem.clone(), new org.bukkit.util.Vector(blockposition.getX(), blockposition.getY(), blockposition.getZ()));
373 ++ if (!BlockDispenser.eventFired) {
374 ++ world.getServer().getPluginManager().callEvent(event);
375 ++ }
376 ++
377 ++ if (event.isCancelled()) {
378 ++ return itemstack;
379 ++ }
380 ++
381 ++ if (!event.getItem().equals(craftItem)) {
382 ++ // Chain to handler for new item
383 ++ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
384 ++ IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.REGISTRY.get(eventStack.getItem());
385 ++ if (idispensebehavior != IDispenseBehavior.NONE && idispensebehavior != this) {
386 ++ idispensebehavior.a(isourceblock, eventStack);
387 ++ return itemstack;
388 ++ }
389 ++ }
390 ++ // CraftBukkit end
391 ++
392 + if (world.isEmpty(blockposition) && blockskull.b(world, blockposition, itemstack)) {
393 + if (!world.isClientSide) {
394 + world.setTypeAndData(blockposition, blockskull.getBlockData().set(BlockSkull.FACING, EnumDirection.UP), 3);
395 +@@ -354,6 +618,30 @@
396 + BlockPosition blockposition = isourceblock.getBlockPosition().shift((EnumDirection) isourceblock.e().get(BlockDispenser.FACING));
397 + BlockPumpkin blockpumpkin = (BlockPumpkin) Blocks.PUMPKIN;
398 +
399 ++ // CraftBukkit start
400 ++ org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
401 ++ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack);
402 ++
403 ++ BlockDispenseEvent event = new BlockDispenseEvent(bukkitBlock, craftItem.clone(), new org.bukkit.util.Vector(blockposition.getX(), blockposition.getY(), blockposition.getZ()));
404 ++ if (!BlockDispenser.eventFired) {
405 ++ world.getServer().getPluginManager().callEvent(event);
406 ++ }
407 ++
408 ++ if (event.isCancelled()) {
409 ++ return itemstack;
410 ++ }
411 ++
412 ++ if (!event.getItem().equals(craftItem)) {
413 ++ // Chain to handler for new item
414 ++ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
415 ++ IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.REGISTRY.get(eventStack.getItem());
416 ++ if (idispensebehavior != IDispenseBehavior.NONE && idispensebehavior != this) {
417 ++ idispensebehavior.a(isourceblock, eventStack);
418 ++ return itemstack;
419 ++ }
420 ++ }
421 ++ // CraftBukkit end
422 ++
423 + if (world.isEmpty(blockposition) && blockpumpkin.b(world, blockposition)) {
424 + if (!world.isClientSide) {
425 + world.setTypeAndData(blockposition, blockpumpkin.getBlockData(), 3);
426 +@@ -437,12 +725,40 @@
365 427 d3 = 0.0D;
366 428 }
367 429
368 430 - EntityBoat entityboat = new EntityBoat(world, d0, d1 + d3, d2);
369 431 + // EntityBoat entityboat = new EntityBoat(world, d0, d1 + d3, d2);
370 432 + // CraftBukkit start
371 433 + ItemStack itemstack1 = itemstack.cloneAndSubtract(1);
372 434 + org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
373 435 + CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack1);
374 436 +

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut