2828import com .sk89q .worldedit .event .platform .PlatformReadyEvent ;
2929import com .sk89q .worldedit .event .platform .PlatformUnreadyEvent ;
3030import com .sk89q .worldedit .event .platform .PlatformsRegisteredEvent ;
31- import com .sk89q .worldedit .event .platform .SessionIdleEvent ;
3231import com .sk89q .worldedit .extension .platform .Actor ;
3332import com .sk89q .worldedit .extension .platform .Capability ;
3433import com .sk89q .worldedit .extension .platform .Platform ;
3534import com .sk89q .worldedit .extension .platform .PlatformManager ;
3635import com .sk89q .worldedit .internal .anvil .ChunkDeleter ;
3736import com .sk89q .worldedit .internal .command .CommandUtil ;
38- import com .sk89q .worldedit .internal .event .InteractionDebouncer ;
3937import com .sk89q .worldedit .sponge .config .SpongeConfiguration ;
4038import com .sk89q .worldedit .world .biome .BiomeCategory ;
4139import com .sk89q .worldedit .world .biome .BiomeType ;
4745import org .spongepowered .api .ResourceKey ;
4846import org .spongepowered .api .Server ;
4947import org .spongepowered .api .Sponge ;
50- import org .spongepowered .api .block .BlockSnapshot ;
5148import org .spongepowered .api .block .BlockType ;
5249import org .spongepowered .api .block .entity .BlockEntity ;
5350import org .spongepowered .api .block .entity .CommandBlock ;
5754import org .spongepowered .api .command .CommandResult ;
5855import org .spongepowered .api .command .parameter .ArgumentReader ;
5956import org .spongepowered .api .config .ConfigDir ;
60- import org .spongepowered .api .data .type .HandTypes ;
6157import org .spongepowered .api .entity .living .player .server .ServerPlayer ;
62- import org .spongepowered .api .event .EventContextKeys ;
6358import org .spongepowered .api .event .Listener ;
64- import org .spongepowered .api .event .action .InteractEvent ;
65- import org .spongepowered .api .event .block .InteractBlockEvent ;
66- import org .spongepowered .api .event .filter .cause .Root ;
67- import org .spongepowered .api .event .item .inventory .InteractItemEvent ;
6859import org .spongepowered .api .event .lifecycle .ConstructPluginEvent ;
6960import org .spongepowered .api .event .lifecycle .RegisterCommandEvent ;
7061import org .spongepowered .api .event .lifecycle .StartedEngineEvent ;
7162import org .spongepowered .api .event .lifecycle .StartingEngineEvent ;
7263import org .spongepowered .api .event .lifecycle .StoppingEngineEvent ;
73- import org .spongepowered .api .event .network .ServerSideConnectionEvent ;
7464import org .spongepowered .api .registry .RegistryTypes ;
7565import org .spongepowered .api .scheduler .Task ;
7666import org .spongepowered .api .world .LocatableBlock ;
77- import org .spongepowered .api .world .server .ServerLocation ;
7867import org .spongepowered .api .world .server .ServerWorld ;
79- import org .spongepowered .math .vector .Vector3d ;
8068import org .spongepowered .plugin .PluginContainer ;
8169import org .spongepowered .plugin .builtin .jvm .Plugin ;
8270
@@ -113,7 +101,6 @@ public static SpongeWorldEdit inst() {
113101 private final SpongeConfiguration config ;
114102 private final Path workingDir ;
115103
116- private InteractionDebouncer debouncer ;
117104 private SpongePermissionsProvider provider ;
118105 private SpongePlatform platform ;
119106
@@ -135,7 +122,6 @@ public SpongeWorldEdit(Logger logger,
135122 @ Listener
136123 public void onPluginConstruction (ConstructPluginEvent event ) {
137124 this .platform = new SpongePlatform (this );
138- debouncer = new InteractionDebouncer (platform );
139125
140126 WorldEdit .getInstance ().getPlatformManager ().register (platform );
141127
@@ -146,6 +132,13 @@ public void onPluginConstruction(ConstructPluginEvent event) {
146132 new CUIChannelHandler .RegistrationHandler (),
147133 MethodHandles .lookup ()
148134 );
135+
136+ event .game ().eventManager ().registerListeners (
137+ container ,
138+ new SpongeWorldEditListener (this ),
139+ MethodHandles .lookup ()
140+ );
141+
149142 logger .info ("WorldEdit for Sponge (version " + getInternalVersion () + ") is loaded" );
150143 }
151144
@@ -310,123 +303,6 @@ public List<CommandCompletion> complete(CommandCause cause, ArgumentReader.Mutab
310303 );
311304 }
312305
313- private boolean skipEvents () {
314- return platform == null || !platform .isHookingEvents ();
315- }
316-
317- private boolean skipInteractionEvent (InteractEvent event ) {
318- return skipEvents () || event .context ().get (EventContextKeys .USED_HAND ).orElse (null ) != HandTypes .MAIN_HAND .get ();
319- }
320-
321- @ Listener
322- public void onPlayerInteractItemPrimary (InteractItemEvent .Primary event , @ Root ServerPlayer spongePlayer ) {
323- if (skipInteractionEvent (event )) {
324- return ;
325- }
326-
327- WorldEdit we = WorldEdit .getInstance ();
328- SpongePlayer player = SpongeAdapter .adapt (spongePlayer );
329-
330- Optional <Boolean > previousResult = debouncer .getDuplicateInteractionResult (player );
331- if (previousResult .isPresent ()) {
332- return ;
333- }
334-
335- boolean result = we .handleArmSwing (player );
336- debouncer .setLastInteraction (player , result );
337- }
338-
339- @ Listener
340- public void onPlayerInteractItemSecondary (InteractItemEvent .Secondary event , @ Root ServerPlayer spongePlayer ) {
341- if (skipInteractionEvent (event )) {
342- return ;
343- }
344-
345- WorldEdit we = WorldEdit .getInstance ();
346- SpongePlayer player = SpongeAdapter .adapt (spongePlayer );
347-
348- Optional <Boolean > previousResult = debouncer .getDuplicateInteractionResult (player );
349- if (previousResult .isPresent ()) {
350- if (previousResult .get ()) {
351- event .setCancelled (true );
352- }
353- return ;
354- }
355-
356- boolean result = we .handleRightClick (player );
357- debouncer .setLastInteraction (player , result );
358-
359- if (result ) {
360- event .setCancelled (true );
361- }
362- }
363-
364- @ Listener
365- public void onPlayerInteractBlockPrimary (InteractBlockEvent .Primary .Start event , @ Root ServerPlayer spongePlayer ) {
366- if (skipInteractionEvent (event )) {
367- return ;
368- }
369-
370- WorldEdit we = WorldEdit .getInstance ();
371- SpongePlayer player = SpongeAdapter .adapt (spongePlayer );
372-
373- BlockSnapshot targetBlock = event .block ();
374- Optional <ServerLocation > optLoc = targetBlock .location ();
375-
376- boolean result = false ;
377- if (optLoc .isPresent ()) {
378- ServerLocation loc = optLoc .get ();
379- com .sk89q .worldedit .util .Location pos = SpongeAdapter .adapt (loc , Vector3d .ZERO );
380-
381- result = we .handleBlockLeftClick (player , pos , SpongeAdapter .adapt (event .targetSide ()));
382- }
383-
384- result = we .handleArmSwing (player ) || result ;
385- debouncer .setLastInteraction (player , result );
386-
387- if (result ) {
388- event .setCancelled (true );
389- }
390- }
391-
392- @ Listener
393- public void onPlayerInteractBlockSecondary (InteractBlockEvent .Secondary event , @ Root ServerPlayer spongePlayer ) {
394- if (skipInteractionEvent (event )) {
395- return ;
396- }
397-
398- WorldEdit we = WorldEdit .getInstance ();
399- SpongePlayer player = SpongeAdapter .adapt (spongePlayer );
400-
401- BlockSnapshot targetBlock = event .block ();
402- Optional <ServerLocation > optLoc = targetBlock .location ();
403-
404- boolean result = false ;
405- if (optLoc .isPresent ()) {
406- ServerLocation loc = optLoc .get ();
407- com .sk89q .worldedit .util .Location pos = SpongeAdapter .adapt (loc , Vector3d .ZERO );
408-
409- result = we .handleBlockRightClick (player , pos , SpongeAdapter .adapt (event .targetSide ()));
410- }
411-
412- result = we .handleRightClick (player ) || result ;
413- debouncer .setLastInteraction (player , result );
414-
415- if (result ) {
416- event .setCancelled (true );
417- }
418- }
419-
420- @ Listener
421- public void onPlayerQuit (ServerSideConnectionEvent .Disconnect event ) {
422- event .profile ().ifPresent (profile -> {
423- debouncer .clearInteraction (profile ::uniqueId );
424-
425- WorldEdit .getInstance ().getEventBus ()
426- .post (new SessionIdleEvent (new SpongePlayer .SessionKeyImpl (profile .uniqueId (), profile .name ().orElseThrow ())));
427- });
428- }
429-
430306 public PluginContainer getPluginContainer () {
431307 return container ;
432308 }
@@ -500,5 +376,4 @@ public void setPermissionsProvider(SpongePermissionsProvider provider) {
500376 public SpongePermissionsProvider getPermissionsProvider () {
501377 return provider ;
502378 }
503-
504379}
0 commit comments