Skip to content

Commit a20cccf

Browse files
committed
Update for Plex 2.0
1 parent e742047 commit a20cccf

5 files changed

Lines changed: 97 additions & 33 deletions

File tree

build.gradle.kts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ repositories {
1616
}
1717

1818
dependencies {
19-
compileOnly("org.projectlombok:lombok:1.18.38")
20-
annotationProcessor("org.projectlombok:lombok:1.18.38")
21-
compileOnly("io.papermc.paper:paper-api:1.21.7-R0.1-SNAPSHOT")
22-
compileOnly("dev.plex:server:1.5")
19+
compileOnly("org.projectlombok:lombok:1.18.46")
20+
annotationProcessor("org.projectlombok:lombok:1.18.46")
21+
compileOnly("io.papermc.paper:paper-api:26.1.2.build.+")
22+
compileOnly("dev.plex:api:2.0-SNAPSHOT")
2323
}
2424

2525
group = "dev.plex"
26-
version = "1.0"
26+
version = "2.0-SNAPSHOT"
2727
description = "ExampleModule"
2828

2929
java {
30-
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
30+
toolchain.languageVersion.set(JavaLanguageVersion.of(25))
3131
}
3232

3333
publishing {
@@ -53,4 +53,4 @@ tasks {
5353
processResources {
5454
filteringCharset = Charsets.UTF_8.name()
5555
}
56-
}
56+
}

src/main/java/dev/plex/ExampleModule.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ public class ExampleModule extends PlexModule
1010
public void enable()
1111
{
1212
registerCommand(new ExampleCommand());
13-
registerListener(new ExampleListener());
13+
registerListener(new ExampleListener(this));
14+
api().logging().info("{0} enabled with Plex API compatibility {1}",
15+
getPlexModuleFile().getName(),
16+
api().compatibility().version());
1417
}
1518

1619
@Override
Lines changed: 70 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,91 @@
11
package dev.plex.command;
22

3-
import dev.plex.command.annotation.CommandParameters;
4-
import dev.plex.command.annotation.CommandPermissions;
5-
import java.util.Arrays;
6-
import java.util.Collections;
73
import java.util.List;
4+
import java.util.Locale;
5+
import java.util.concurrent.atomic.AtomicInteger;
86
import net.kyori.adventure.text.Component;
7+
import org.bukkit.Location;
8+
import org.bukkit.Particle;
9+
import org.bukkit.Sound;
910
import org.bukkit.command.CommandSender;
1011
import org.bukkit.entity.Player;
1112
import org.jetbrains.annotations.NotNull;
1213
import org.jetbrains.annotations.Nullable;
1314

14-
@CommandParameters(name = "examplemodule", description = "An example command provided by Plex's example module")
15-
@CommandPermissions(permission = "plex.module.command")
16-
public class ExampleCommand extends PlexCommand
15+
public class ExampleCommand extends SimplePlexCommand
1716
{
17+
public ExampleCommand()
18+
{
19+
super(command("examplemodule")
20+
.description("An example command provided by Plex's example module")
21+
.usage("/<command> [info | sparkle]")
22+
.aliases("example")
23+
.build());
24+
}
25+
1826
@Override
19-
protected Component execute(@NotNull CommandSender commandSender, @Nullable Player player, @NotNull String[] strings)
27+
protected Component execute(@NotNull CommandSender sender, @Nullable Player player, @NotNull String[] args)
2028
{
21-
return Component.text("Example module command");
29+
if (args.length == 0)
30+
{
31+
return help();
32+
}
33+
34+
return switch (args[0].toLowerCase(Locale.ROOT))
35+
{
36+
case "info" -> info();
37+
case "sparkle" -> sparkle(player);
38+
default -> usage();
39+
};
2240
}
2341

2442
@Override
25-
public @NotNull List<String> smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException
43+
protected @NotNull List<String> suggestions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args)
2644
{
27-
if (silentCheckPermission(sender, this.getPermission()))
45+
if (args.length == 1)
2846
{
29-
if (args.length == 1)
30-
{
31-
return Arrays.asList("option1", "option2", "option3");
32-
}
47+
return List.of("info", "sparkle");
48+
}
49+
return List.of();
50+
}
51+
52+
private Component help()
53+
{
54+
return mmString("""
55+
<gold><bold>Plex Example Module</bold></gold>
56+
<gray>Try <yellow>/example info</yellow> or <light_purple>/example sparkle</light_purple>.</gray>
57+
""");
58+
}
59+
60+
private Component info()
61+
{
62+
int compatibility = api().compatibility().version();
63+
int loadedModules = api().modules().loadedModules().size();
64+
return mmString("<gold>Plex API compatibility:</gold> <yellow>" + compatibility
65+
+ "</yellow> <dark_gray>•</dark_gray> <gold>Loaded modules:</gold> <yellow>"
66+
+ loadedModules + "</yellow>");
67+
}
68+
69+
private Component sparkle(@Nullable Player player)
70+
{
71+
if (player == null)
72+
{
73+
return mmString("<red>Only players can sparkle.</red>");
74+
}
3375

34-
if (args.length == 2)
76+
AtomicInteger bursts = new AtomicInteger();
77+
api().scheduler().runEntityTimer(player, task ->
78+
{
79+
int burst = bursts.incrementAndGet();
80+
Location origin = player.getLocation().add(0, 1, 0);
81+
player.getWorld().spawnParticle(Particle.END_ROD, origin, 12, 0.6, 0.7, 0.6, 0.02);
82+
player.playSound(origin, Sound.BLOCK_NOTE_BLOCK_CHIME, 0.7f, 1.2f + burst * 0.15f);
83+
if (burst >= 4)
3584
{
36-
return Arrays.asList("option3", "option4");
85+
task.cancel();
3786
}
38-
return Collections.emptyList();
39-
}
40-
return Collections.emptyList();
87+
}, null, 1L, 5L);
88+
89+
return mmString("<rainbow>A tiny celebration!</rainbow>");
4190
}
42-
}
91+
}
Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
package dev.plex.listener;
22

3-
import net.kyori.adventure.text.Component;
4-
import net.kyori.adventure.text.format.NamedTextColor;
3+
import dev.plex.ExampleModule;
54
import org.bukkit.entity.Player;
65
import org.bukkit.event.EventHandler;
76
import org.bukkit.event.player.PlayerJoinEvent;
87

98
public class ExampleListener extends PlexListener
109
{
10+
private final ExampleModule module;
11+
12+
public ExampleListener(ExampleModule module)
13+
{
14+
this.module = module;
15+
}
16+
1117
@EventHandler
1218
public void onPlayerJoin(PlayerJoinEvent event)
1319
{
1420
Player player = event.getPlayer();
15-
player.sendMessage(Component.text("This is a message from Plex's example module!").color(NamedTextColor.GOLD));
21+
player.sendMessage(module.api().messages().miniMessage(
22+
"<gold>ExampleModule is awake!</gold> "
23+
+ "<click:run_command:'/examplemodule sparkle'>"
24+
+ "<hover:show_text:'<gray>Click for a tiny celebration</gray>'>"
25+
+ "<aqua>[Try a sparkle]</aqua>"
26+
+ "</hover></click>"));
1627
}
1728
}

src/main/resources/module.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
name: Module-Example
22
main: dev.plex.ExampleModule
33
description: An example module for Plex
4-
version: 1.0
4+
version: 2.0-SNAPSHOT
5+
apiCompatibility: 1

0 commit comments

Comments
 (0)