From c20bf42c367f99848cb506eedaeea2c522c9dea3 Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Fri, 24 Apr 2026 18:07:34 +0200 Subject: [PATCH] refactor(command): simplify region lookup in GravityFlip commands - Replaced manual region search loops with a new `find` method in RegionRegistry for improved readability and efficiency. - Updated `GravityFlipToggleSubCommand` and `GravityFlipTpSubCommand` to utilize the new method for finding regions by name. - Enhanced the `add` method in RegionRegistry to use the `find` method for checking existing region names. --- .../command/GravityFlipToggleSubCommand.java | 8 +------- .../command/GravityFlipTpSubCommand.java | 8 +------- .../gravityflip/region/RegionRegistry.java | 15 +++++++++++---- .../mythlane/gravityflip/tick/RegionTickLoop.java | 9 ++++----- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/mythlane/gravityflip/command/GravityFlipToggleSubCommand.java b/src/main/java/com/mythlane/gravityflip/command/GravityFlipToggleSubCommand.java index b616206..143c9d8 100644 --- a/src/main/java/com/mythlane/gravityflip/command/GravityFlipToggleSubCommand.java +++ b/src/main/java/com/mythlane/gravityflip/command/GravityFlipToggleSubCommand.java @@ -27,13 +27,7 @@ public final class GravityFlipToggleSubCommand extends CommandBase { @Override protected void executeSync(@Nonnull CommandContext ctx) { String name = nameArg.get(ctx); - GravityFlipRegion found = null; - for (GravityFlipRegion r : plugin.regions().all()) { - if (r.getName().equals(name)) { - found = r; - break; - } - } + GravityFlipRegion found = plugin.regions().find(name); if (found == null) { ctx.sendMessage(Message.raw("[gravityflip] Region '" + name + "' not found.")); return; diff --git a/src/main/java/com/mythlane/gravityflip/command/GravityFlipTpSubCommand.java b/src/main/java/com/mythlane/gravityflip/command/GravityFlipTpSubCommand.java index 606c1e2..2577818 100644 --- a/src/main/java/com/mythlane/gravityflip/command/GravityFlipTpSubCommand.java +++ b/src/main/java/com/mythlane/gravityflip/command/GravityFlipTpSubCommand.java @@ -40,13 +40,7 @@ public final class GravityFlipTpSubCommand extends AbstractPlayerCommand { @Nonnull PlayerRef playerRef, @Nonnull World world) { String name = nameArg.get(ctx); - GravityFlipRegion target = null; - for (GravityFlipRegion r : plugin.regions().all()) { - if (r.getName().equals(name)) { - target = r; - break; - } - } + GravityFlipRegion target = plugin.regions().find(name); if (target == null) { ctx.sendMessage(Message.raw("[gravityflip] Region '" + name + "' not found.")); return; diff --git a/src/main/java/com/mythlane/gravityflip/region/RegionRegistry.java b/src/main/java/com/mythlane/gravityflip/region/RegionRegistry.java index dea0dca..0153196 100644 --- a/src/main/java/com/mythlane/gravityflip/region/RegionRegistry.java +++ b/src/main/java/com/mythlane/gravityflip/region/RegionRegistry.java @@ -78,13 +78,20 @@ public final class RegionRegistry { return out; } + /** Returns the region with the given name from the current snapshot, or null. */ + public GravityFlipRegion find(String name) { + if (name == null) return null; + for (GravityFlipRegion x : regionsSnapshot.get()) { + if (x.getName().equals(name)) return x; + } + return null; + } + /** Adds a region; throws IllegalArgumentException if the name already exists. */ public void add(GravityFlipRegion r) { synchronized (mutationLock) { - for (GravityFlipRegion x : regionsSnapshot.get()) { - if (x.getName().equals(r.getName())) { - throw new IllegalArgumentException("region name already exists: " + r.getName()); - } + if (find(r.getName()) != null) { + throw new IllegalArgumentException("region name already exists: " + r.getName()); } config.getRegions().add(r); regionsSnapshot.set(List.copyOf(config.getRegions())); diff --git a/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java b/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java index 98c5c8d..3dbc209 100644 --- a/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java +++ b/src/main/java/com/mythlane/gravityflip/tick/RegionTickLoop.java @@ -65,11 +65,10 @@ public final class RegionTickLoop { World w = worldSupplier.get(); if (w == null) return; registry.refreshFor(w); - if (gravityApplier != null) { - gravityApplier.apply(w, registry.currentSnapshot(w)); - } - if (regionVisualizer != null) { - regionVisualizer.visualize(w, registry.currentSnapshot(w)); + if (gravityApplier != null || regionVisualizer != null) { + var snapshot = registry.currentSnapshot(w); + if (gravityApplier != null) gravityApplier.apply(w, snapshot); + if (regionVisualizer != null) regionVisualizer.visualize(w, snapshot); } }; scheduleGuarded(initialDelayMs, tick);