Skip to content

Commit b3b8165

Browse files
authored
Merge pull request #119 from TheNextLvl-net/custom-links
Support custom server links
2 parents 4cb4216 + ddfab26 commit b3b8165

File tree

2 files changed

+83
-67
lines changed

2 files changed

+83
-67
lines changed

src/main/java/net/thenextlvl/tweaks/TweaksPlugin.java

Lines changed: 61 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.papermc.paper.command.brigadier.Commands;
1313
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
1414
import net.kyori.adventure.key.Key;
15+
import net.kyori.adventure.text.Component;
1516
import net.kyori.adventure.text.minimessage.MiniMessage;
1617
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
1718
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@@ -232,48 +233,62 @@ private void registerWarpCommands(Commands registrar) {
232233
}
233234

234235
private void registerLinkCommands(Commands registrar) {
235-
if (commands().discord.enabled) new DiscordCommand(this).register(registrar);
236-
if (commands().reddit.enabled) new RedditCommand(this).register(registrar);
237-
if (commands().teamspeak.enabled) new TeamSpeakCommand(this).register(registrar);
238-
if (commands().tiktok.enabled) new TikTokCommand(this).register(registrar);
239-
if (commands().twitch.enabled) new TwitchCommand(this).register(registrar);
240-
if (commands().website.enabled) new WebsiteCommand(this).register(registrar);
241-
if (commands().x.enabled) new XCommand(this).register(registrar);
242-
if (commands().youtube.enabled) new YouTubeCommand(this).register(registrar);
236+
if (commands().discord.enabled && isLinkEnabled("discord")) new DiscordCommand(this).register(registrar);
237+
if (commands().reddit.enabled && isLinkEnabled("reddit")) new RedditCommand(this).register(registrar);
238+
if (commands().teamspeak.enabled && isLinkEnabled("teamspeak")) new TeamSpeakCommand(this).register(registrar);
239+
if (commands().tiktok.enabled && isLinkEnabled("tiktok")) new TikTokCommand(this).register(registrar);
240+
if (commands().twitch.enabled && isLinkEnabled("twitch")) new TwitchCommand(this).register(registrar);
241+
if (commands().website.enabled && isLinkEnabled("website")) new WebsiteCommand(this).register(registrar);
242+
if (commands().x.enabled && isLinkEnabled("x")) new XCommand(this).register(registrar);
243+
if (commands().youtube.enabled && isLinkEnabled("youtube")) new YouTubeCommand(this).register(registrar);
244+
}
245+
246+
private boolean isLinkEnabled(String string) {
247+
var url = config().links.get(string);
248+
return url != null && !url.isBlank() && !url.equals(PluginConfig.LINK_DEFAULTS.get(string));
243249
}
244250

245251
private void registerLinks() {
246252
var social = config().features.social;
247253
if (!social.serverLinks) return;
248254

249-
if (social.discord) registerLink("url.discord", config().links.discord);
250-
if (social.reddit) registerLink("url.reddit", config().links.reddit);
251-
if (social.teamspeak) registerLink("url.teamspeak", config().links.teamspeak);
252-
if (social.tiktok) registerLink("url.tiktok", config().links.tiktok);
253-
if (social.twitch) registerLink("url.twitch", config().links.twitch);
254-
if (social.x) registerLink("url.x", config().links.x);
255-
if (social.youtube) registerLink("url.youtube", config().links.youtube);
256-
257-
if (social.announcements) registerLink(ANNOUNCEMENTS, config().links.announcements);
258-
if (social.community) registerLink(COMMUNITY, config().links.community);
259-
if (social.feedback) registerLink(FEEDBACK, config().links.feedback);
260-
if (social.forum) registerLink(FORUMS, config().links.forum);
261-
if (social.guidelines) registerLink(COMMUNITY_GUIDELINES, config().links.guidelines);
262-
if (social.issues) registerLink(REPORT_BUG, config().links.issues);
263-
if (social.news) registerLink(NEWS, config().links.news);
264-
if (social.status) registerLink(STATUS, config().links.status);
265-
if (social.support) registerLink(SUPPORT, config().links.support);
266-
if (social.website) registerLink(WEBSITE, config().links.website);
255+
if (social.discord) registerLink("url.discord", "discord");
256+
if (social.reddit) registerLink("url.reddit", "reddit");
257+
if (social.teamspeak) registerLink("url.teamspeak", "teamspeak");
258+
if (social.tiktok) registerLink("url.tiktok", "tiktok");
259+
if (social.twitch) registerLink("url.twitch", "twitch");
260+
if (social.x) registerLink("url.x", "x");
261+
if (social.youtube) registerLink("url.youtube", "youtube");
262+
263+
if (social.announcements) registerLink(ANNOUNCEMENTS, "announcements");
264+
if (social.community) registerLink(COMMUNITY, "community");
265+
if (social.feedback) registerLink(FEEDBACK, "feedback");
266+
if (social.forum) registerLink(FORUMS, "forum");
267+
if (social.guidelines) registerLink(COMMUNITY_GUIDELINES, "guidelines");
268+
if (social.issues) registerLink(REPORT_BUG, "issues");
269+
if (social.news) registerLink(NEWS, "news");
270+
if (social.status) registerLink(STATUS, "status");
271+
if (social.support) registerLink(SUPPORT, "support");
272+
if (social.website) registerLink(WEBSITE, "website");
273+
274+
config().links.forEach((name, url) -> {
275+
if (url.isBlank() || PluginConfig.LINK_DEFAULTS.containsKey(name)) return;
276+
getServer().getServerLinks().addLink(Component.text(name), URI.create(url));
277+
});
267278
}
268279

269280
private void registerLink(ServerLinks.Type type, String string) {
270-
if (!string.isBlank()) getServer().getServerLinks().addLink(type, URI.create(string));
281+
var url = config().links.get(string);
282+
if (url == null || url.isBlank() || url.equals(PluginConfig.LINK_DEFAULTS.get(string))) return;
283+
getServer().getServerLinks().addLink(type, URI.create(url));
271284
}
272285

273286
private void registerLink(String translationKey, String string) {
274287
var translation = bundle().translate(translationKey, Locale.US);
275-
if (translation == null || string.isBlank()) return;
276-
getServer().getServerLinks().addLink(translation, URI.create(string));
288+
if (translation == null) return;
289+
var url = config().links.get(string);
290+
if (url == null || url.isBlank() || url.equals(PluginConfig.LINK_DEFAULTS.get(string))) return;
291+
getServer().getServerLinks().addLink(translation, URI.create(url));
277292
}
278293

279294
public void saveConfig() {
@@ -304,23 +319,23 @@ private void initTranslations() {
304319
.placeholder("prefix", "prefix")
305320
.miniMessage(MiniMessage.builder().tags(TagResolver.resolver(
306321
TagResolver.standard(),
307-
Placeholder.parsed("announcements", config().links.announcements),
308-
Placeholder.parsed("community", config().links.community),
309-
Placeholder.parsed("discord", config().links.discord),
310-
Placeholder.parsed("feedback", config().links.feedback),
311-
Placeholder.parsed("forum", config().links.forum),
312-
Placeholder.parsed("guidelines", config().links.guidelines),
313-
Placeholder.parsed("issues", config().links.issues),
314-
Placeholder.parsed("news", config().links.news),
315-
Placeholder.parsed("reddit", config().links.reddit),
316-
Placeholder.parsed("status", config().links.status),
317-
Placeholder.parsed("support", config().links.support),
318-
Placeholder.parsed("teamspeak", config().links.teamspeak),
319-
Placeholder.parsed("tiktok", config().links.tiktok),
320-
Placeholder.parsed("twitch", config().links.twitch),
321-
Placeholder.parsed("website", config().links.website),
322-
Placeholder.parsed("x", config().links.x),
323-
Placeholder.parsed("youtube", config().links.youtube)
322+
Placeholder.parsed("announcements", String.valueOf(config().links.get("announcements"))),
323+
Placeholder.parsed("community", String.valueOf(config().links.get("community"))),
324+
Placeholder.parsed("discord", String.valueOf(config().links.get("discord"))),
325+
Placeholder.parsed("feedback", String.valueOf(config().links.get("feedback"))),
326+
Placeholder.parsed("forum", String.valueOf(config().links.get("forum"))),
327+
Placeholder.parsed("guidelines", String.valueOf(config().links.get("guidelines"))),
328+
Placeholder.parsed("issues", String.valueOf(config().links.get("issues"))),
329+
Placeholder.parsed("news", String.valueOf(config().links.get("news"))),
330+
Placeholder.parsed("reddit", String.valueOf(config().links.get("reddit"))),
331+
Placeholder.parsed("status", String.valueOf(config().links.get("status"))),
332+
Placeholder.parsed("support", String.valueOf(config().links.get("support"))),
333+
Placeholder.parsed("teamspeak", String.valueOf(config().links.get("teamspeak"))),
334+
Placeholder.parsed("tiktok", String.valueOf(config().links.get("tiktok"))),
335+
Placeholder.parsed("twitch", String.valueOf(config().links.get("twitch"))),
336+
Placeholder.parsed("website", String.valueOf(config().links.get("website"))),
337+
Placeholder.parsed("x", String.valueOf(config().links.get("x"))),
338+
Placeholder.parsed("youtube", String.valueOf(config().links.get("youtube")))
324339
)).build()).build();
325340
}
326341

src/main/java/net/thenextlvl/tweaks/model/PluginConfig.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.jspecify.annotations.NullMarked;
77
import org.jspecify.annotations.Nullable;
88

9+
import java.util.HashMap;
910
import java.util.Map;
1011
import java.util.concurrent.TimeUnit;
1112

@@ -14,11 +15,12 @@ public class PluginConfig {
1415
public @SerializedName("features") FeatureConfig features = new FeatureConfig();
1516
public @SerializedName("general") GeneralConfig general = new GeneralConfig();
1617
public @SerializedName("guis") GUIConfig guis = new GUIConfig();
17-
public @SerializedName("links") LinkConfig links = new LinkConfig();
1818
public @SerializedName("spawn") SpawnConfig spawn = new SpawnConfig();
1919
public @SerializedName("homes") HomeConfig homes = new HomeConfig();
2020
public @SerializedName("teleportation") TeleportConfig teleport = new TeleportConfig();
2121
public @SerializedName("animals") AnimalConfig vanilla = new AnimalConfig();
22+
23+
public @SerializedName("links") Map<String, String> links = new HashMap<>(LINK_DEFAULTS);
2224

2325
public static class GeneralConfig {
2426
public @SerializedName("message-deletion-timeout") long messageDeletionTimeout = TimeUnit.MINUTES.toMillis(10);
@@ -142,24 +144,23 @@ public static class SocialConfig {
142144
}
143145
}
144146

145-
public static class LinkConfig {
146-
public @SerializedName("announcements") String announcements = "https://announcements.example.com";
147-
public @SerializedName("community") String community = "https://community.example.com";
148-
public @SerializedName("feedback") String feedback = "https://feedback.example.com";
149-
public @SerializedName("forum") String forum = "https://forum.example.com";
150-
public @SerializedName("guidelines") String guidelines = "https://guidelines.example.com";
151-
public @SerializedName("issues") String issues = "https://issues.example.com";
152-
public @SerializedName("news") String news = "https://news.example.com";
153-
public @SerializedName("status") String status = "https://status.example.com";
154-
public @SerializedName("support") String support = "https://support.example.com";
155-
public @SerializedName("website") String website = "https://example.com";
156-
157-
public @SerializedName("discord") String discord = "https://discord.gg/invite/example";
158-
public @SerializedName("reddit") String reddit = "https://www.reddit.com/r/example";
159-
public @SerializedName("teamspeak") String teamspeak = "teamspeak.example.com";
160-
public @SerializedName("tiktok") String tiktok = "https://www.tiktok.com/@example";
161-
public @SerializedName("twitch") String twitch = "https://www.twitch.tv/example";
162-
public @SerializedName("x") String x = "https://x.com/example";
163-
public @SerializedName("youtube") String youtube = "https://www.youtube.com/example";
164-
}
147+
public static final Map<String, String> LINK_DEFAULTS = Map.ofEntries(
148+
Map.entry("announcements", "https://announcements.example.com"),
149+
Map.entry("community", "https://community.example.com"),
150+
Map.entry("discord", "https://discord.gg/invite/example"),
151+
Map.entry("feedback", "https://feedback.example.com"),
152+
Map.entry("forum", "https://forum.example.com"),
153+
Map.entry("guidelines", "https://guidelines.example.com"),
154+
Map.entry("issues", "https://issues.example.com"),
155+
Map.entry("news", "https://news.example.com"),
156+
Map.entry("reddit", "https://www.reddit.com/r/example"),
157+
Map.entry("status", "https://status.example.com"),
158+
Map.entry("support", "https://support.example.com"),
159+
Map.entry("teamspeak", "teamspeak.example.com"),
160+
Map.entry("tiktok", "https://www.tiktok.com/@example"),
161+
Map.entry("twitch", "https://www.twitch.tv/example"),
162+
Map.entry("website", "https://example.com"),
163+
Map.entry("x", "https://x.com/example"),
164+
Map.entry("youtube", "https://www.youtube.com/example")
165+
);
165166
}

0 commit comments

Comments
 (0)