@@ -74,11 +74,10 @@ public void onClick(PlayerInteractEvent event) {
7474 event .setCancelled (true );
7575 }
7676
77- private static void handleInteract (Player player , BrushSettings settings ) {
78- var session = player .getSession ();
79- var blockTrace = player .getBlockTrace (250 , true , session .getMask ());
80- if (blockTrace != null ) player .queueAction (() -> {
77+ private void handleInteract (BukkitPlayer player , BrushSettings settings ) {
8178 player .runAsyncIfFree (() -> {
79+ var session = player .getSession ();
80+
8281 try (var editSession = session .createEditSession (player )) {
8382
8483 var blockTrace = player .getSolidBlockTrace (250 );
@@ -91,15 +90,24 @@ private static void handleInteract(Player player, BrushSettings settings) {
9190 var bag = session .getBlockBag (player );
9291
9392 try {
94- settings .getBrush ().paint (editSession , blockTrace .toBlockPoint (), player , settings );
93+ Request .request ().setEditSession (editSession );
94+
95+ var position = blockTrace .toBlockPoint ();
96+ var mask = MaskIntersection .of (new InverseMask (new AirMask (player .getWorld ())),
97+ settings .getMask (session ), settings .getSurfaceMask (player ));
98+ var pattern = settings .getBrush ().buildPattern (editSession , position , player , settings );
99+
100+ editSession .setMask (mask );
101+
102+ settings .getBrush ().build (editSession , position , pattern , settings .getBrushSize () / 2d );
103+
95104 } finally {
96105
97106 if (bag != null ) bag .flushChanges ();
98107
99108 session .remember (editSession );
109+ Request .reset ();
100110 }
101- } finally {
102- Request .reset ();
103111 }
104112 });
105113 }
0 commit comments