mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 15:08:27 +02:00
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 3284612a SPIGOT-5853: Add DragonBattle#generateEndPortal() e4db04ae SPIGOT-5841: New map colours broken CraftBukkit Changes:d4243510
SPIGOT-5853: DragonBattle#getEndPortalLocation() throws NPE on new world1601ec31
SPIGOT-5845: ChatColor.RESET does not work in ItemMeta to reset italics4d92db6f
CraftChatMessageTest does not need AbstractTestingBase71045d3d
SPIGOT-5828: Unlock worlds on unloaddbc347b9
SPIGOT-5841: New map colours broken14053c70
SPIGOT-5847: BlockFadeEvent cannot be triggered asynchronously from another thread Spigot Changes: 6f4ff1b6 SPIGOT-5851: ChatColor (HEX) doesn't appear correctly in the ActionBar d94a518a SPIGOT-5848: PlayerSpawnLocationEvent throws NPE when setting a location of another world
141 lines
7.5 KiB
Diff
141 lines
7.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Mark Vainomaa <mikroskeem@mikroskeem.eu>
|
|
Date: Mon, 16 Jul 2018 00:05:05 +0300
|
|
Subject: [PATCH] Add TNTPrimeEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockFire.java b/src/main/java/net/minecraft/server/BlockFire.java
|
|
index 9c3b79c1314dedae06278328b6ca722d5ff1e60d..a11a775a929c5f868f1b84c56d7e1715a91db236 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockFire.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockFire.java
|
|
@@ -2,6 +2,7 @@ package net.minecraft.server;
|
|
|
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
|
+import com.destroystokyo.paper.event.block.TNTPrimeEvent; // Paper - TNTPrimeEvent
|
|
import java.util.Map;
|
|
import java.util.Random;
|
|
|
|
@@ -253,7 +254,7 @@ public class BlockFire extends BlockFireAbstract {
|
|
|
|
world.setTypeAndData(blockposition, this.a(world, blockposition, l), 3);
|
|
} else {
|
|
- world.a(blockposition, false);
|
|
+ if(iblockdata.getBlock() != Blocks.TNT) world.a(blockposition, false); // Paper - TNTPrimeEvent - We might be cancelling it below, move the setAir down
|
|
}
|
|
|
|
Block block = iblockdata.getBlock();
|
|
@@ -261,6 +262,13 @@ public class BlockFire extends BlockFireAbstract {
|
|
if (block instanceof BlockTNT) {
|
|
BlockTNT blocktnt = (BlockTNT) block;
|
|
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = MCUtil.toBukkitBlock(world, blockposition);
|
|
+ if (!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.FIRE, null).callEvent()) {
|
|
+ return;
|
|
+ }
|
|
+ world.setAir(blockposition, false);
|
|
+ // Paper end
|
|
BlockTNT.a(world, blockposition);
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java
|
|
index c6fe9c1f7ef06c4524533130b493ca5e72bd1693..7b601955f3fd36f06c838b896b455a606954d980 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockTNT.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockTNT.java
|
|
@@ -1,6 +1,7 @@
|
|
package net.minecraft.server;
|
|
|
|
import javax.annotation.Nullable;
|
|
+import com.destroystokyo.paper.event.block.TNTPrimeEvent; // Paper - TNTPrimeEvent
|
|
|
|
public class BlockTNT extends Block {
|
|
|
|
@@ -15,6 +16,11 @@ public class BlockTNT extends Block {
|
|
public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) {
|
|
if (!iblockdata1.a(iblockdata.getBlock())) {
|
|
if (world.isBlockIndirectlyPowered(blockposition)) {
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = MCUtil.toBukkitBlock(world, blockposition);;
|
|
+ if(!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.REDSTONE, null).callEvent())
|
|
+ return;
|
|
+ // Paper end
|
|
a(world, blockposition);
|
|
world.a(blockposition, false);
|
|
}
|
|
@@ -25,6 +31,11 @@ public class BlockTNT extends Block {
|
|
@Override
|
|
public void doPhysics(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1, boolean flag) {
|
|
if (world.isBlockIndirectlyPowered(blockposition)) {
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = MCUtil.toBukkitBlock(world, blockposition);;
|
|
+ if(!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.REDSTONE, null).callEvent())
|
|
+ return;
|
|
+ // Paper end
|
|
a(world, blockposition);
|
|
world.a(blockposition, false);
|
|
}
|
|
@@ -43,6 +54,12 @@ public class BlockTNT extends Block {
|
|
@Override
|
|
public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
|
|
if (!world.isClientSide) {
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = MCUtil.toBukkitBlock(world, blockposition);
|
|
+ org.bukkit.entity.Entity source = explosion.source != null ? explosion.source.getBukkitEntity() : null;
|
|
+ if(!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.EXPLOSION, source).callEvent())
|
|
+ return;
|
|
+ // Paper end
|
|
EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, explosion.getSource());
|
|
|
|
entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8));
|
|
@@ -71,6 +88,11 @@ public class BlockTNT extends Block {
|
|
if (item != Items.FLINT_AND_STEEL && item != Items.FIRE_CHARGE) {
|
|
return super.interact(iblockdata, world, blockposition, entityhuman, enumhand, movingobjectpositionblock);
|
|
} else {
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = MCUtil.toBukkitBlock(world, blockposition);
|
|
+ if(!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.ITEM, entityhuman.getBukkitEntity()).callEvent())
|
|
+ return EnumInteractionResult.FAIL;
|
|
+ // Paper end
|
|
a(world, blockposition, (EntityLiving) entityhuman);
|
|
world.setTypeAndData(blockposition, Blocks.AIR.getBlockData(), 11);
|
|
if (!entityhuman.isCreative()) {
|
|
@@ -100,6 +122,13 @@ public class BlockTNT extends Block {
|
|
}
|
|
// CraftBukkit end
|
|
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = MCUtil.toBukkitBlock(world, blockposition);
|
|
+ if (!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.PROJECTILE, iprojectile.getBukkitEntity()).callEvent()) {
|
|
+ return;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
a(world, blockposition, entity instanceof EntityLiving ? (EntityLiving) entity : null);
|
|
world.a(blockposition, false);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
|
index 05b7cdb33b45a4f503cd7fe4130b54d59e7b6452..3cb8ce58c4675564fb239338d6c40ea511a9a97c 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
|
@@ -11,6 +11,7 @@ import org.bukkit.craftbukkit.block.CraftBlock;
|
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
|
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
|
// CraftBukkit end
|
|
+import com.destroystokyo.paper.event.block.TNTPrimeEvent; // Paper - TNTPrimeEvent
|
|
|
|
// PAIL: Fixme
|
|
public class EntityEnderDragon extends EntityInsentient implements IMonster {
|
|
@@ -466,6 +467,11 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster {
|
|
});
|
|
craftBlock.getNMS().dropNaturally(world, blockposition, ItemStack.b);
|
|
}
|
|
+ // Paper start - TNTPrimeEvent
|
|
+ org.bukkit.block.Block tntBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ());
|
|
+ if(!new TNTPrimeEvent(tntBlock, TNTPrimeEvent.PrimeReason.EXPLOSION, explosionSource.getSource().getBukkitEntity()).callEvent())
|
|
+ continue;
|
|
+ // Paper end
|
|
nmsBlock.wasExploded(world, blockposition, explosionSource);
|
|
|
|
this.world.a(blockposition, false);
|