Skip to content

Commit 3ff1251

Browse files
Avoid static references to the plugin instance
1 parent ce55b7b commit 3ff1251

File tree

10 files changed

+84
-65
lines changed

10 files changed

+84
-65
lines changed

src/main/java/org/strassburger/serverlinksz/ServerLinksZ.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,26 @@
66
import org.strassburger.serverlinksz.util.bStats.Metrics;
77

88
public final class ServerLinksZ extends JavaPlugin {
9-
private static ServerLinksZ instance;
10-
119
private CommandManager commandManager;
1210
private LanguageManager languageManager;
1311
private EventManager eventManager;
12+
private LinkManager linkManager;
1413

1514
@Override
1615
public void onEnable() {
17-
instance = this;
18-
1916
getConfig().options().copyDefaults(true);
2017
saveDefaultConfig();
2118

22-
languageManager = new LanguageManager();
19+
languageManager = new LanguageManager(this);
20+
21+
linkManager = new LinkManager(this);
22+
linkManager.updateLinks();
2323

2424
eventManager = new EventManager(this);
2525
eventManager.registerListeners();
2626
commandManager = new CommandManager(this);
2727
commandManager.registerCommands();
2828

29-
LinkManager.updateLinks();
30-
3129
initializeBStats();
3230

3331
getLogger().info("ServerLinksZ has been enabled!");
@@ -39,7 +37,7 @@ public void onDisable() {
3937
}
4038

4139
public static ServerLinksZ getInstance() {
42-
return instance;
40+
return JavaPlugin.getPlugin(ServerLinksZ.class);
4341
}
4442

4543
public LanguageManager getLanguageManager() {
@@ -54,6 +52,10 @@ public EventManager getEventManager() {
5452
return eventManager;
5553
}
5654

55+
public LinkManager getLinkManager() {
56+
return linkManager;
57+
}
58+
5759
private void initializeBStats() {
5860
final int pluginId = 22795;
5961
Metrics metrics = new Metrics(this, pluginId);

src/main/java/org/strassburger/serverlinksz/commands/LinkCommand.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,26 @@
55
import org.bukkit.command.CommandSender;
66
import org.bukkit.command.TabCompleter;
77
import org.jetbrains.annotations.NotNull;
8+
import org.strassburger.serverlinksz.ServerLinksZ;
89
import org.strassburger.serverlinksz.util.LinkManager;
910
import org.strassburger.serverlinksz.util.MessageUtils;
1011

1112
import java.util.List;
1213

1314
public class LinkCommand implements CommandExecutor, TabCompleter {
15+
private final ServerLinksZ plugin;
16+
17+
public LinkCommand(ServerLinksZ plugin) {
18+
this.plugin = plugin;
19+
}
20+
1421
@Override
1522
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
1623
List<String> linkCommands = List.of(
1724
"discord", "website", "store", "teamspeak", "twitter", "youtube", "instagram", "facebook", "tiktok", "vote"
1825
);
1926

20-
String linkID = linkCommands.contains(command.getName()) | LinkManager.getLinkKeys().contains(command.getName())
27+
String linkID = linkCommands.contains(command.getName()) | plugin.getLinkManager().getLinkKeys().contains(command.getName())
2128
? command.getName()
2229
: args.length > 0
2330
? args[0]
@@ -28,7 +35,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
2835
return false;
2936
}
3037

31-
if (!LinkManager.getLinkKeys().contains(linkID)) {
38+
if (!plugin.getLinkManager().getLinkKeys().contains(linkID)) {
3239
sender.sendMessage(MessageUtils.getAndFormatMsg(
3340
false,
3441
"linkNotFound",
@@ -38,7 +45,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
3845
return false;
3946
}
4047

41-
LinkManager.Link link = LinkManager.getLink(linkID);
48+
LinkManager.Link link = plugin.getLinkManager().getLink(linkID);
4249

4350
if (link == null) return false;
4451

@@ -64,7 +71,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
6471
@Override
6572
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) {
6673
if (args.length == 1) {
67-
return LinkManager.getLinkKeys(LinkManager.Link::allowCommand).stream().toList();
74+
return plugin.getLinkManager().getLinkKeys(LinkManager.Link::allowCommand).stream().toList();
6875
}
6976
return null;
7077
}

src/main/java/org/strassburger/serverlinksz/commands/maincommand/MainTabCompleter.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@
55
import org.bukkit.command.TabCompleter;
66
import org.jetbrains.annotations.NotNull;
77
import org.jetbrains.annotations.Nullable;
8+
import org.strassburger.serverlinksz.ServerLinksZ;
89
import org.strassburger.serverlinksz.util.LinkManager;
910

1011
import java.util.ArrayList;
1112
import java.util.List;
1213

1314
public class MainTabCompleter implements TabCompleter {
15+
private final ServerLinksZ plugin;
16+
17+
public MainTabCompleter(ServerLinksZ plugin) {
18+
this.plugin = plugin;
19+
}
1420

1521
@Override
1622
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) {
@@ -48,7 +54,7 @@ public List<String> getSecondArgOptions(String[] args) {
4854
}
4955

5056
if (args[0].equals("remove")) {
51-
List<String> linkKeys = LinkManager.getLinkKeys().stream().toList();
57+
List<String> linkKeys = plugin.getLinkManager().getLinkKeys().stream().toList();
5258
List<String> suggestions = new ArrayList<>();
5359
for (String linkKey : linkKeys) {
5460
if (linkKey.startsWith(args[1].toLowerCase()) || args[1].equalsIgnoreCase(linkKey)) {

src/main/java/org/strassburger/serverlinksz/commands/maincommand/subcommands/AddSubCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public boolean execute(CommandSender sender, String[] args) {
4646
return false;
4747
}
4848

49-
LinkManager.addLink(id, name, url, allowCommand);
49+
plugin.getLinkManager().addLink(id, name, url, allowCommand);
5050
sender.sendMessage(MessageUtils.getAndFormatMsg(true, "addLinkMsg", "&7Successfully added link with id %id%!", new MessageUtils.Replaceable("%id%", id)));
5151
if (showHints) {
5252
sender.sendMessage(MessageUtils.getAndFormatMsg(false, "rejoinHint", "<#E9D502>⚠ To update the Serverlinks, please rejoin the server!"));

src/main/java/org/strassburger/serverlinksz/commands/maincommand/subcommands/ReloadSubCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public boolean execute(CommandSender sender, String[] args) {
2525

2626
plugin.reloadConfig();
2727
plugin.getLanguageManager().reload();
28-
LinkManager.updateLinks();
28+
plugin.getLinkManager().updateLinks();
2929
sender.sendMessage(MessageUtils.getAndFormatMsg(
3030
true,
3131
"reloadMsg",

src/main/java/org/strassburger/serverlinksz/commands/maincommand/subcommands/RemoveSubCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public boolean execute(CommandSender sender, String[] args) {
3030

3131
String id = args[1];
3232

33-
boolean linkExists = LinkManager.getLinkKeys().contains(id);
33+
boolean linkExists = plugin.getLinkManager().getLinkKeys().contains(id);
3434

3535
if (!linkExists) {
3636
sender.sendMessage(MessageUtils.getAndFormatMsg(
@@ -42,7 +42,7 @@ public boolean execute(CommandSender sender, String[] args) {
4242
return false;
4343
}
4444

45-
LinkManager.removeLink(id);
45+
plugin.getLinkManager().removeLink(id);
4646
sender.sendMessage(MessageUtils.getAndFormatMsg(
4747
true,
4848
"removeLinkMsg",

src/main/java/org/strassburger/serverlinksz/util/CommandManager.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,23 @@ private CommandMap getCommandMap() {
3939
* Registers all commands
4040
*/
4141
public void registerCommands() {
42-
registerCommand("serverlinksz", new MainCommandHandler(plugin), new MainTabCompleter());
42+
registerCommand("serverlinksz", new MainCommandHandler(plugin), new MainTabCompleter(plugin));
4343

44-
if (ServerLinksZ.getInstance().getConfig().getBoolean("linkCommand")) {
45-
registerCommand("link", new LinkCommand(), new LinkCommand());
44+
if (plugin.getConfig().getBoolean("linkCommand")) {
45+
registerCommand("link", new LinkCommand(plugin), new LinkCommand(plugin));
4646
}
4747

4848
for (String linkCommand : defaultLinkCommands) {
49-
registerCommand(linkCommand, new LinkCommand(), new LinkCommand());
49+
registerCommand(linkCommand, new LinkCommand(plugin), new LinkCommand(plugin));
5050
}
5151

5252
CommandMap commandMap = getCommandMap();
5353

5454
if (commandMap == null || !plugin.getConfig().getBoolean("dynamicCommands")) return;
5555

56-
for (String linkKey : LinkManager.getLinkKeys()) {
56+
for (String linkKey : plugin.getLinkManager().getLinkKeys()) {
5757
if (defaultLinkCommands.contains(linkKey)) continue;
58-
LinkManager.Link link = LinkManager.getLink(linkKey);
58+
LinkManager.Link link = plugin.getLinkManager().getLink(linkKey);
5959
if (link == null || !link.allowCommand()) continue;
6060
commandMap.register(linkKey, link.getCommand());
6161
}

src/main/java/org/strassburger/serverlinksz/util/LanguageManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22

33
import org.bukkit.configuration.file.FileConfiguration;
44
import org.bukkit.configuration.file.YamlConfiguration;
5-
import org.bukkit.plugin.java.JavaPlugin;
65
import org.strassburger.serverlinksz.ServerLinksZ;
76

87
import java.io.File;
98
import java.util.HashMap;
109
import java.util.List;
1110

1211
public class LanguageManager {
13-
private final JavaPlugin plugin = ServerLinksZ.getInstance();
12+
private final ServerLinksZ plugin;
1413
public static final List<String> defaultLangs = List.of("en-US", "de-DE", "zh-CN", "ru-RU", "zh-TW");
1514

1615
private HashMap<String, String> translationMap;
1716
private FileConfiguration langConfig;
1817

19-
public LanguageManager() {
18+
public LanguageManager(ServerLinksZ plugin) {
19+
this.plugin = plugin;
2020
loadLanguageConfig();
2121
}
2222

src/main/java/org/strassburger/serverlinksz/util/LinkManager.java

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,20 @@
2222
import java.util.stream.Collectors;
2323

2424
public class LinkManager {
25-
private static final ServerLinks serverLinks = Bukkit.getServer().getServerLinks();
26-
private static final Logger logger = ServerLinksZ.getInstance().getLogger();
25+
private final ServerLinksZ plugin;
2726

28-
public record Link(String id, String name, String url, boolean allowCommand) {
29-
/**
30-
* Get a BukkitCommand for a link
31-
* @return The BukkitCommand
32-
*/
33-
public @NotNull Command getCommand() {
34-
LinkCommand executor = new LinkCommand();
35-
return new BukkitCommand(id()) {
36-
@Override
37-
public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, String[] args) {
38-
return executor.onCommand(sender, this, commandLabel, args);
39-
}
27+
private final ServerLinks serverLinks = Bukkit.getServer().getServerLinks();
28+
private final Logger logger;
4029

41-
@Override
42-
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, String[] args) throws IllegalArgumentException {
43-
List<String> completions = executor.onTabComplete(sender, this, alias, args);
44-
return completions == null ? List.of() : completions;
45-
}
46-
};
47-
}
30+
public LinkManager(ServerLinksZ plugin) {
31+
this.plugin = plugin;
32+
this.logger = plugin.getLogger();
4833
}
4934

50-
private LinkManager() {}
51-
5235
/**
5336
* Updates the links
5437
*/
55-
public static void updateLinks() {
38+
public void updateLinks() {
5639
final FileConfiguration config = getLinksConfig();
5740

5841
clearLinks();
@@ -70,7 +53,7 @@ public static void updateLinks() {
7053
* @param name The name of the link
7154
* @param url The URL of the link
7255
*/
73-
private static void registerLink(String name, String url) {
56+
private void registerLink(String name, String url) {
7457
try {
7558
URI uri = new URI(url);
7659
serverLinks.addLink(MessageUtils.formatMsg(name), uri);
@@ -87,7 +70,7 @@ private static void registerLink(String name, String url) {
8770
* @param url The URL of the link
8871
* @param command Whether the link should allow commands
8972
*/
90-
public static void addLink(String key, String name, String url, boolean command) {
73+
public void addLink(String key, String name, String url, boolean command) {
9174
final FileConfiguration config = getLinksConfig();
9275
config.set(key + ".name", name);
9376
config.set(key + ".url", url);
@@ -100,7 +83,7 @@ public static void addLink(String key, String name, String url, boolean command)
10083
* Removes a link from the config and updates the links
10184
* @param key The key of the link
10285
*/
103-
public static void removeLink(String key) {
86+
public void removeLink(String key) {
10487
final FileConfiguration config = getLinksConfig();
10588
config.set(key, null);
10689
saveLinksConfig(config);
@@ -110,7 +93,7 @@ public static void removeLink(String key) {
11093
/**
11194
* Clears all links from the server
11295
*/
113-
public static void clearLinks() {
96+
public void clearLinks() {
11497
for (ServerLinks.ServerLink link : serverLinks.getLinks()) {
11598
serverLinks.removeLink(link);
11699
}
@@ -122,20 +105,20 @@ public static void clearLinks() {
122105
* @return The link
123106
*/
124107
@Nullable
125-
public static Link getLink(String key) {
108+
public Link getLink(String key) {
126109
final FileConfiguration config = getLinksConfig();
127110
String name = config.getString(key + ".name");
128111
String url = config.getString(key + ".url");
129112
boolean allowCommand = config.getBoolean(key + ".allowCommand");
130113
if (name == null || url == null) return null;
131-
return new Link(key, name, url, allowCommand);
114+
return new Link(key, name, url, allowCommand, plugin);
132115
}
133116

134117
/**
135118
* Gets all link keys from the config
136119
* @return All link keys
137120
*/
138-
public static Set<String> getLinkKeys() {
121+
public Set<String> getLinkKeys() {
139122
return getLinksConfig().getKeys(false);
140123
}
141124

@@ -144,7 +127,7 @@ public static Set<String> getLinkKeys() {
144127
* @param predicate The predicate to match
145128
* @return All link keys that match the predicate
146129
*/
147-
public static Set<String> getLinkKeys(Predicate<Link> predicate) {
130+
public Set<String> getLinkKeys(Predicate<Link> predicate) {
148131
return getLinkKeys().stream().filter(
149132
key -> {
150133
Link link = getLink(key);
@@ -153,22 +136,44 @@ public static Set<String> getLinkKeys(Predicate<Link> predicate) {
153136
).collect(Collectors.toSet());
154137
}
155138

156-
private static FileConfiguration getLinksConfig() {
157-
File linksFile = new File(ServerLinksZ.getInstance().getDataFolder(), "links.yml");
139+
private FileConfiguration getLinksConfig() {
140+
File linksFile = new File(plugin.getDataFolder(), "links.yml");
158141
if (!linksFile.exists()) {
159142
linksFile.getParentFile().mkdirs();
160-
ServerLinksZ.getInstance().saveResource("links.yml", false);
143+
plugin.saveResource("links.yml", false);
161144
}
162145
return YamlConfiguration.loadConfiguration(linksFile);
163146
}
164147

165-
private static void saveLinksConfig(FileConfiguration config) {
166-
File linksFile = new File(ServerLinksZ.getInstance().getDataFolder(), "links.yml");
148+
private void saveLinksConfig(FileConfiguration config) {
149+
File linksFile = new File(plugin.getDataFolder(), "links.yml");
167150
try {
168151
config.save(linksFile);
169152
} catch (Exception e) {
170153
logger.severe("Failed to save links.yml!");
171154
e.printStackTrace();
172155
}
173156
}
157+
158+
public record Link(String id, String name, String url, boolean allowCommand, ServerLinksZ plugin) {
159+
/**
160+
* Get a BukkitCommand for a link
161+
* @return The BukkitCommand
162+
*/
163+
public @NotNull Command getCommand() {
164+
LinkCommand executor = new LinkCommand(plugin);
165+
return new BukkitCommand(id()) {
166+
@Override
167+
public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, String[] args) {
168+
return executor.onCommand(sender, this, commandLabel, args);
169+
}
170+
171+
@Override
172+
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, String[] args) throws IllegalArgumentException {
173+
List<String> completions = executor.onTabComplete(sender, this, alias, args);
174+
return completions == null ? List.of() : completions;
175+
}
176+
};
177+
}
178+
}
174179
}

0 commit comments

Comments
 (0)