package org.dynmap.fabric_1_18.event;

import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class BlockEvents {
    private BlockEvents() {
    }

    public static Event<BlockCallback> BLOCK_EVENT = EventFactory.createArrayBacked(BlockCallback.class,
            (listeners) -> (world, pos) -> {
                for (BlockCallback callback : listeners) {
                    callback.onBlockEvent(world, pos);
                }
            }
    );

    @FunctionalInterface
    public interface BlockCallback {
        void onBlockEvent(World world, BlockPos pos);
    }
}

@@ -127,16 +127,156 @@
 actory;%0A
+import net.minecraft.block.Material;%0Aimport net.minecraft.server.network.ServerPlayerEntity;%0Aimport net.minecraft.server.world.ServerWorld;%0A
 import n
@@ -717,117 +717,688 @@
     
-@FunctionalInterface%0A    public interface BlockCallback %7B%0A        void onBlockEvent(World world, BlockPos pos
+public static Event%3CSignChangeCallback%3E SIGN_CHANGE_EVENT = EventFactory.createArrayBacked(SignChangeCallback.class,%0A            (listeners) -%3E (world, pos, lines, material, player) -%3E %7B%0A                for (SignChangeCallback callback : listeners) %7B%0A                    callback.onSignChange(world, pos, lines, material, player);%0A                %7D%0A            %7D%0A    );%0A%0A    @FunctionalInterface%0A    public interface BlockCallback %7B%0A        void onBlockEvent(World world, BlockPos pos);%0A    %7D%0A%0A    @FunctionalInterface%0A    public interface SignChangeCallback %7B%0A        void onSignChange(ServerWorld world, BlockPos pos, String%5B%5D lines, Material material, ServerPlayerEntity player
 );%0A 

add BlockEvents.SIGN_CHANGE_EVENT