Skip to content

Commit 97ac25c

Browse files
caching the CommandSender
1 parent e434915 commit 97ac25c

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed

core/src/main/java/com/wizardlybump17/wlib/WLib.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.wizardlybump17.wlib.command.listener.BukkitCommandManagerListener;
1515
import com.wizardlybump17.wlib.command.manager.CommandManager;
1616
import com.wizardlybump17.wlib.command.registry.MethodCommandNodeFactoryRegistry;
17+
import com.wizardlybump17.wlib.command.sender.BukkitCommandSender;
1718
import com.wizardlybump17.wlib.config.holder.BukkitConfigHolderFactory;
1819
import com.wizardlybump17.wlib.config.registry.ConfigHandlerRegistry;
1920
import com.wizardlybump17.wlib.config.registry.ConfigHolderFactoryRegistry;
@@ -127,6 +128,8 @@ private void clearCommandSystem() {
127128
commandExecutor = null;
128129

129130
commandManagerListener = null;
131+
132+
BukkitCommandSender.clearCache();
130133
}
131134

132135
private void initSerializables() {

core/src/main/java/com/wizardlybump17/wlib/command/WLibCommandExecutor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public WLibCommandExecutor(@NotNull CommandManager commandManager, @NotNull Logg
3737

3838
@Override
3939
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
40-
com.wizardlybump17.wlib.command.sender.CommandSender<?> wlibSender = new BukkitCommandSender(sender);
40+
com.wizardlybump17.wlib.command.sender.CommandSender<?> wlibSender = BukkitCommandSender.from(sender);
4141

4242
String wlibArgs = command.getName() + " " + String.join(" ", args);
4343

@@ -65,7 +65,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
6565

6666
@Override
6767
public @NotNull List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
68-
com.wizardlybump17.wlib.command.sender.CommandSender<?> wlibSender = new BukkitCommandSender(sender);
68+
com.wizardlybump17.wlib.command.sender.CommandSender<?> wlibSender = BukkitCommandSender.from(sender);
6969

7070
String[] wlibArgs = new String[args.length + 1];
7171
wlibArgs[0] = command.getName();

core/src/main/java/com/wizardlybump17/wlib/command/sender/BukkitCommandSender.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
import org.bukkit.command.ConsoleCommandSender;
99
import org.bukkit.entity.Entity;
1010
import org.bukkit.entity.Player;
11+
import org.jetbrains.annotations.ApiStatus;
1112
import org.jetbrains.annotations.NotNull;
1213
import org.jetbrains.annotations.Nullable;
1314

1415
import java.util.ArrayList;
1516
import java.util.List;
17+
import java.util.Map;
1618
import java.util.UUID;
19+
import java.util.concurrent.ConcurrentHashMap;
1720

1821
public class BukkitCommandSender implements CommandSender<org.bukkit.command.CommandSender> {
1922

2023
public static final @NotNull BukkitCommandSender CONSOLE = new BukkitCommandSender(Bukkit.getConsoleSender());
24+
private static final @NotNull Map<UUID, BukkitCommandSender> SENDERS_BY_ID = new ConcurrentHashMap<>();
2125

2226
private final @NotNull org.bukkit.command.CommandSender handle;
2327

@@ -96,4 +100,22 @@ public boolean hasPermission(String permission) {
96100
public boolean hasId(@NotNull UUID id) {
97101
return handle instanceof Entity entity && entity.getUniqueId().equals(id);
98102
}
103+
104+
@ApiStatus.Internal
105+
public static void clearCache() {
106+
SENDERS_BY_ID.clear();
107+
}
108+
109+
public static @NotNull BukkitCommandSender from(@NotNull org.bukkit.command.CommandSender sender) {
110+
return switch (sender) {
111+
case ConsoleCommandSender ignored -> BukkitCommandSender.CONSOLE;
112+
case Entity entity -> SENDERS_BY_ID.computeIfAbsent(entity.getUniqueId(), $ -> new BukkitCommandSender(sender));
113+
default -> new BukkitCommandSender(sender);
114+
};
115+
}
116+
117+
@ApiStatus.Internal
118+
public static void removeFromCache(@NotNull UUID id) {
119+
SENDERS_BY_ID.remove(id);
120+
}
99121
}

core/src/main/java/com/wizardlybump17/wlib/listener/EntityListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.wizardlybump17.wlib.listener;
22

3+
import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent;
4+
import com.wizardlybump17.wlib.command.sender.BukkitCommandSender;
35
import com.wizardlybump17.wlib.inventory.CustomInventory;
46
import com.wizardlybump17.wlib.inventory.CustomInventoryHolder;
57
import com.wizardlybump17.wlib.inventory.item.ClickAction;
@@ -15,6 +17,7 @@
1517
import org.bukkit.event.inventory.InventoryDragEvent;
1618
import org.bukkit.inventory.Inventory;
1719
import org.bukkit.inventory.InventoryHolder;
20+
import org.jetbrains.annotations.NotNull;
1821

1922
@RequiredArgsConstructor
2023
public class EntityListener implements Listener {
@@ -63,4 +66,9 @@ public void onClose(InventoryCloseEvent event) {
6366

6467
paginatedInventory.stopListeners();
6568
}
69+
70+
@EventHandler
71+
public void onRemove(@NotNull EntityRemoveFromWorldEvent event) {
72+
BukkitCommandSender.removeFromCache(event.getEntity().getUniqueId());
73+
}
6674
}

0 commit comments

Comments
 (0)