--- a/net/minecraft/world/level/block/BlockSign.java
+++ b/net/minecraft/world/level/block/BlockSign.java
@@ -140,7 +140,7 @@
             } else if (flag1) {
                 return EnumInteractionResult.SUCCESS_SERVER;
             } else if (!this.otherPlayerIsEditingSign(entityhuman, tileentitysign) && entityhuman.mayBuild() && this.hasEditableText(entityhuman, tileentitysign, flag)) {
-                this.openTextEdit(entityhuman, tileentitysign, flag);
+                this.openTextEdit(entityhuman, tileentitysign, flag, org.bukkit.event.player.PlayerSignOpenEvent.Cause.INTERACT); // CraftBukkit
                 return EnumInteractionResult.SUCCESS_SERVER;
             } else {
                 return EnumInteractionResult.PASS;
@@ -186,6 +186,15 @@
     }
 
     public void openTextEdit(EntityHuman entityhuman, TileEntitySign tileentitysign, boolean flag) {
+        // Craftbukkit start
+        openTextEdit(entityhuman, tileentitysign, flag, org.bukkit.event.player.PlayerSignOpenEvent.Cause.UNKNOWN);
+    }
+
+    public void openTextEdit(EntityHuman entityhuman, TileEntitySign tileentitysign, boolean flag, org.bukkit.event.player.PlayerSignOpenEvent.Cause cause) {
+        if (!org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerSignOpenEvent(entityhuman, tileentitysign, flag, cause)) {
+            return;
+        }
+        // Craftbukkit end
         tileentitysign.setAllowedPlayerEditor(entityhuman.getUUID());
         entityhuman.openTextEdit(tileentitysign, flag);
     }
@@ -199,6 +208,6 @@
     @Nullable
     @Override
     public <T extends TileEntity> BlockEntityTicker<T> getTicker(World world, IBlockData iblockdata, TileEntityTypes<T> tileentitytypes) {
-        return createTickerHelper(tileentitytypes, TileEntityTypes.SIGN, TileEntitySign::tick);
+        return null; // Craftbukkit - remove unnecessary sign ticking
     }
 }
