mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-02 17:32:03 +01:00
68b25624d8
The PluginManager incorrectly used synchronization on firing any event that was marked as synchronous. This synchronized did not even protect any concurrency risk as handlers were already thread safe in terms of mutations during event dispatch. The way it was used, has commonly led to deadlocks on the server, which results in a hard crash. This change removes the synchronize and adds some protection around enable/disable
59 lines
No EOL
2.1 KiB
Diff
59 lines
No EOL
2.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Sotr <i@omc.hk>
|
|
Date: Thu, 23 Aug 2018 16:14:25 +0800
|
|
Subject: [PATCH] Add source block to BlockPhysicsEvent
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java b/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java
|
|
index 01a545b42..57568cd02 100644
|
|
--- a/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java
|
|
@@ -0,0 +0,0 @@ public class BlockPhysicsEvent extends BlockEvent implements Cancellable {
|
|
private static final HandlerList handlers = new HandlerList();
|
|
private final int changed;
|
|
private boolean cancel = false;
|
|
+ // Paper start - add source block
|
|
+ private int sourceX;
|
|
+ private int sourceY;
|
|
+ private int sourceZ;
|
|
+ private Block sourceBlock;
|
|
+
|
|
+ /**
|
|
+ *
|
|
+ * @deprecated Magic value
|
|
+ * @param block the block involved in this event
|
|
+ * @param changed the changed block's type id
|
|
+ * @param sourceX the x of the source block
|
|
+ * @param sourceY the y of the source block
|
|
+ * @param sourceZ the z of the source block
|
|
+ */
|
|
+ @Deprecated
|
|
+ public BlockPhysicsEvent(final Block block, final int changed, final int sourceX, final int sourceY, final int sourceZ) {
|
|
+ this(block, changed);
|
|
+ this.sourceX = sourceX;
|
|
+ this.sourceY = sourceY;
|
|
+ this.sourceZ = sourceZ;
|
|
+ this.sourceBlock = null;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the source block, causing this event
|
|
+ *
|
|
+ * @return Source block
|
|
+ */
|
|
+ public Block getSourceBlock() {
|
|
+ return sourceBlock == null ? (sourceBlock = block.getWorld().getBlockAt(sourceX, sourceY, sourceZ)) : sourceBlock;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
/**
|
|
*
|
|
@@ -0,0 +0,0 @@ public class BlockPhysicsEvent extends BlockEvent implements Cancellable {
|
|
public BlockPhysicsEvent(final Block block, final int changed) {
|
|
super(block);
|
|
this.changed = changed;
|
|
+ this.sourceBlock = block; // Paper - add source block
|
|
}
|
|
|
|
/**
|
|
--
|