Skip to content

Commit f60342c

Browse files
committed
Implemented most classes
1 parent 8708ed1 commit f60342c

36 files changed

+1320
-370
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
- name: Set up JDK 21
99
uses: actions/[email protected]
1010
with:
11-
java-version: 21.0.5
11+
java-version: 21.0.6
1212
distribution: 'temurin'
1313
- name: Configure Git
1414
run: |

build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ repositories {
1111
maven {
1212
name = "papermc"
1313
url = uri("https://repo.papermc.io/repository/maven-public/")
14+
url = uri("https://repo.extendedclip.com/releases/")
1415
}
1516
}
1617

1718
dependencies {
18-
testImplementation(platform("org.junit:junit-bom:5.10.0"))
19+
testImplementation(platform("org.junit:junit-bom:5.12.0"))
1920
testImplementation("org.junit.jupiter:junit-jupiter")
2021
implementation("net.kyori:adventure-text-minimessage:4.19.0")
22+
compileOnly("me.clip:placeholderapi:2.11.6")
2123
paperweight.paperDevBundle("1.21.4-R0.1-SNAPSHOT")
2224
}
2325

gradle/wrapper/gradle-wrapper.jar

122 Bytes
Binary file not shown.

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

gradlew

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ fi
205205
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
206206

207207
# Collect all arguments for the java command:
208-
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
208+
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
209209
# and any embedded shellness will be escaped.
210210
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
211211
# treated as '${Hostname}' itself on the command line.

src/main/java/de/pascalpex/pexnpc/Main.java

Lines changed: 0 additions & 68 deletions
This file was deleted.
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package de.pascalpex.pexnpc;
2+
3+
import de.pascalpex.pexnpc.events.PacketReader;
4+
import de.pascalpex.pexnpc.events.listener.*;
5+
import de.pascalpex.pexnpc.files.Config;
6+
import de.pascalpex.pexnpc.files.NPCData;
7+
import de.pascalpex.pexnpc.npc.NPC;
8+
import de.pascalpex.pexnpc.npc.NPCSender;
9+
import de.pascalpex.pexnpc.npc.PlaceableNPC;
10+
import de.pascalpex.pexnpc.util.MessageHandler;
11+
import de.pascalpex.pexnpc.util.external.Metrics;
12+
import de.pascalpex.pexnpc.util.VersionChecker;
13+
import de.pascalpex.pexnpc.util.external.PlaceholderAPIAdapter;
14+
import org.bukkit.Bukkit;
15+
import org.bukkit.entity.Player;
16+
import org.bukkit.plugin.java.JavaPlugin;
17+
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
import java.util.logging.Level;
21+
import java.util.logging.Logger;
22+
23+
public class PexNPC extends JavaPlugin {
24+
25+
private static VersionChecker versionChecker;
26+
private static PexNPC instance;
27+
private static Logger logger;
28+
private static List<PlaceableNPC> placedNPCs;
29+
private static PacketReader packetReader;
30+
private static String pluginVersion;
31+
32+
@Override
33+
public void onEnable() {
34+
instance = this;
35+
pluginVersion = getPluginMeta().getVersion();
36+
logger = getLogger();
37+
placedNPCs = new ArrayList<>();
38+
packetReader = new PacketReader();
39+
versionChecker = new VersionChecker(pluginVersion);
40+
41+
new Metrics(this, 14923);
42+
43+
Config.load();
44+
NPCData.load();
45+
46+
MessageHandler.prefix = MessageHandler.parse(Config.getPrefix());
47+
PlaceholderAPIAdapter.startup();
48+
49+
versionChecker.clearUpdateNotified();
50+
if (Config.getUpdateChecker()) {
51+
versionChecker.fetchNewestVersion();
52+
}
53+
54+
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
55+
56+
loadAllNPCs();
57+
58+
for (Player player : Bukkit.getOnlinePlayers()) {
59+
try {
60+
packetReader.inject(player);
61+
} catch (NoSuchFieldException | IllegalAccessException e) {
62+
logger.log(Level.SEVERE, "Could not inject the PacketReader!");
63+
}
64+
}
65+
66+
// Listeners
67+
this.getServer().getPluginManager().registerEvents(new JoinEventListener(), this);
68+
this.getServer().getPluginManager().registerEvents(new QuitEventListener(), this);
69+
this.getServer().getPluginManager().registerEvents(new NPCClickListener(), this);
70+
this.getServer().getPluginManager().registerEvents(new TeleportEventListener(), this);
71+
this.getServer().getPluginManager().registerEvents(new RespawnEventListener(), this);
72+
73+
Bukkit.getConsoleSender().sendMessage(MessageHandler.prefixedMini("<green>PexNPC " + pluginVersion + " von Pascalpex wurde aktiviert."));
74+
}
75+
76+
@Override
77+
public void onDisable() {
78+
for (Player player : Bukkit.getOnlinePlayers()) {
79+
packetReader.uninject(player);
80+
}
81+
NPCSender.removeEverything();
82+
placedNPCs.clear();
83+
84+
this.getServer().getMessenger().unregisterOutgoingPluginChannel(this);
85+
Bukkit.getConsoleSender().sendMessage(MessageHandler.prefixedMini("<red>PexNPC " + pluginVersion + " von Pascalpex wurde deaktiviert."));
86+
}
87+
88+
public static PexNPC getInstance() {
89+
return instance;
90+
}
91+
92+
public static Logger logger() {
93+
return logger;
94+
}
95+
96+
public static List<PlaceableNPC> getPlacedNpcs() {
97+
return placedNPCs;
98+
}
99+
100+
public static VersionChecker getVersionChecker() {
101+
return versionChecker;
102+
}
103+
104+
public static PacketReader getPacketReader() {
105+
return packetReader;
106+
}
107+
108+
public static PlaceableNPC findNPCbyMinecraftID(int id) {
109+
for(PlaceableNPC placeableNPC : PexNPC.getPlacedNpcs()) {
110+
if(placeableNPC.getServerPlayer().getId() == id) {
111+
return placeableNPC;
112+
}
113+
}
114+
return null;
115+
}
116+
117+
private static void loadAllNPCs() {
118+
List<NPC> npcs = NPCData.getAllNpcs();
119+
for(NPC npc : npcs) {
120+
PlaceableNPC placeableNPC = new PlaceableNPC(npc);
121+
NPCSender.sendNpcToPlayers(placeableNPC);
122+
placedNPCs.add(placeableNPC);
123+
}
124+
}
125+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package de.pascalpex.pexnpc;
2+
3+
import de.pascalpex.pexnpc.commands.PexNPCCommand;
4+
import io.papermc.paper.plugin.bootstrap.BootstrapContext;
5+
import io.papermc.paper.plugin.bootstrap.PluginBootstrap;
6+
import io.papermc.paper.plugin.bootstrap.PluginProviderContext;
7+
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
8+
import org.bukkit.plugin.java.JavaPlugin;
9+
10+
public class PexNPCBootstrap implements PluginBootstrap {
11+
@Override
12+
public void bootstrap(BootstrapContext context) {
13+
context.getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> {
14+
commands.registrar().register("pexnpc", new PexNPCCommand());
15+
});
16+
}
17+
18+
@Override
19+
public JavaPlugin createPlugin(PluginProviderContext context) {
20+
return new PexNPC();
21+
}
22+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package de.pascalpex.pexnpc;
2+
3+
import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
4+
import io.papermc.paper.plugin.loader.PluginLoader;
5+
6+
public class PexNPCLoader implements PluginLoader {
7+
@Override
8+
public void classloader(PluginClasspathBuilder pluginClasspathBuilder) {
9+
10+
}
11+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package de.pascalpex.pexnpc.commands;
2+
3+
import de.pascalpex.pexnpc.PexNPC;
4+
import de.pascalpex.pexnpc.files.NPCData;
5+
import io.papermc.paper.command.brigadier.BasicCommand;
6+
import io.papermc.paper.command.brigadier.CommandSourceStack;
7+
import org.bukkit.Bukkit;
8+
import org.bukkit.command.CommandSender;
9+
import org.bukkit.entity.Player;
10+
11+
import java.util.ArrayList;
12+
import java.util.Collection;
13+
import java.util.Collections;
14+
import java.util.List;
15+
16+
public class PexNPCCommand implements BasicCommand {
17+
@Override
18+
public void execute(CommandSourceStack commandSourceStack, String[] strings) {
19+
CommandSender sender = commandSourceStack.getSender();
20+
}
21+
22+
@Override
23+
public Collection<String> suggest(CommandSourceStack commandSourceStack, String[] args) {
24+
CommandSender sender = commandSourceStack.getSender();
25+
final List<String> completions = new ArrayList<>();
26+
27+
if (sender instanceof Player) {
28+
if (sender.hasPermission("pexnpc.command")) {
29+
if (args.length == 1) {
30+
completions.add("help");
31+
completions.add("reload");
32+
completions.add("create");
33+
completions.add("list");
34+
completions.add("delete");
35+
completions.add("name");
36+
completions.add("movehere");
37+
completions.add("tp");
38+
completions.add("skin");
39+
completions.add("cmd");
40+
completions.add("msg");
41+
completions.add("item");
42+
completions.add("clear");
43+
completions.removeIf(s -> !s.startsWith(args[0].toLowerCase()));
44+
}
45+
if (args.length == 2) {
46+
if (args[0].equalsIgnoreCase("clear") || args[0].equalsIgnoreCase("delete") || args[0].equalsIgnoreCase("name") || args[0].equalsIgnoreCase("tp") || args[0].equalsIgnoreCase("movehere") || args[0].equalsIgnoreCase("skin") || args[0].equalsIgnoreCase("cmd") || args[0].equalsIgnoreCase("msg") || args[0].equalsIgnoreCase("item")) {
47+
for (int i = 1; i <= PexNPC.getPlacedNpcs().size(); i++) {
48+
completions.add(String.valueOf(i));
49+
}
50+
completions.removeIf(s -> !s.startsWith(args[1]));
51+
}
52+
}
53+
if (args.length == 3) {
54+
if (args[0].equalsIgnoreCase("item")) {
55+
completions.add("HAND");
56+
completions.add("OFFHAND");
57+
completions.add("HELMET");
58+
completions.add("CHESTPLATE");
59+
completions.add("LEGGINGS");
60+
completions.add("BOOTS");
61+
completions.removeIf(s -> !s.startsWith(args[2].toUpperCase()));
62+
}
63+
if (args[0].equalsIgnoreCase("skin")) {
64+
for (Player player : Bukkit.getOnlinePlayers()) {
65+
completions.add(player.getName());
66+
}
67+
completions.removeIf(s -> !s.toLowerCase().startsWith(args[2].toLowerCase()));
68+
}
69+
}
70+
Collections.sort(completions);
71+
return completions;
72+
}
73+
}
74+
return Collections.emptyList();
75+
}
76+
}

0 commit comments

Comments
 (0)