Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
da8ef6e
Rough Inventory Framework impl.
Manu585 Jul 1, 2025
28566df
Custom GUI Framework update, still far from ready; Better Dependency …
Manu585 Jul 3, 2025
26622b3
Gui update, `plugin` is now also a param for WorldEventScheduler for …
Manu585 Jul 13, 2025
25201d7
Added NullSafety, Removed deprecated usages, code formatting
Manu585 Jul 13, 2025
3a6d75f
More updated Java usages and formatting
Manu585 Jul 13, 2025
74bf0e2
Small fix
Manu585 Jul 13, 2025
cd722c1
Finished up GUI Framework, removed IF from pom.xml, Cleaned up code
Manu585 Jul 14, 2025
d27beff
Added Lore option
Manu585 Jul 14, 2025
b8ea6d6
Cleanup introduced a new Menu interface to handle UI in a cleaner fas…
Manu585 Jul 14, 2025
8a8b494
Added ChatUtil.color() to UI create method
Manu585 Jul 14, 2025
2c1fb90
Added Enabled check
Manu585 Jul 14, 2025
f223389
Reverted enable and disable module changes
Manu585 Jul 14, 2025
1c7e3a2
Small formatting changes, added helper methods, converted RpgPlayer t…
Manu585 Jul 14, 2025
c6a537f
Cleaner
Manu585 Jul 14, 2025
eab38bb
Small cleanup
Manu585 Jul 14, 2025
1185898
Yet another cleanup
Manu585 Jul 14, 2025
cf9834b
Updated org.apache.commons lang3 version
Manu585 Jul 18, 2025
5e9799a
CrashCringle Review changes
Manu585 Jul 28, 2025
617680f
Huge code overhaul, many possible bug fixes. Implementing Bukkit `Key…
Manu585 Aug 11, 2025
7222cee
Renamed Interfaces. Introduced new ViewerDisplay interface. Handling …
Manu585 Aug 11, 2025
4f28701
Added small documentation. Updated interfaces to remove redundancies
Manu585 Aug 11, 2025
4b06fde
HUGE OVERHAUL
Manu585 Aug 13, 2025
61eb327
Fixed command tab completion
Manu585 Aug 13, 2025
9c513e5
Removed "test" in tab completion (oops)
Manu585 Aug 13, 2025
c2674a0
QOL Tab completion
Manu585 Aug 13, 2025
3b05780
Improved searching for world events in Commands to be O(1)
Manu585 Aug 13, 2025
a13c633
package changes
Manu585 Aug 15, 2025
19566a6
Removed both start and stop events and put contents in Manager start …
Manu585 Aug 15, 2025
23ba3dc
Added unregistering of WorldEventManager
Manu585 Aug 15, 2025
e6ed09e
Fixed typo in comment
Manu585 Aug 18, 2025
978df29
ANOTHER HUGE OVERHAUL
Manu585 Aug 18, 2025
7328652
Structure update
Manu585 Aug 19, 2025
697175a
Yet another update
Manu585 Aug 19, 2025
731998f
Formatting / Commenting / Small Improvements
Manu585 Aug 20, 2025
f61bf1f
Formatting / Optimization | CurrentlyRunningMessage added
Manu585 Aug 20, 2025
bfd1157
Better logging
Manu585 Aug 20, 2025
9b80296
Better logging
Manu585 Aug 20, 2025
69f3a4f
GUI Test
Manu585 Aug 20, 2025
5fda4df
Advanced Tab Completion
Manu585 Aug 20, 2025
c176a5f
Introduced to be implemented temp classes for better attribution
Manu585 Aug 20, 2025
736a7a1
Changes from Review
Manu585 Aug 22, 2025
e60fc5c
Deleted duplicate AvatarManager and removed AvatarPlayer since it has…
Manu585 Aug 22, 2025
a610774
Downgraded Spigot API version, made AvatarManager#grantTempElements n…
Manu585 Aug 22, 2025
678f6c2
Improved readability in ActiveWorldEventIndex#rebuildSnapshot and JDK…
Manu585 Aug 22, 2025
d19bbd5
More readability improvements and comments
Manu585 Aug 22, 2025
0048dac
Applied Alex's review
Manu585 Aug 22, 2025
54806e1
Structure changes for simplification of packages
Manu585 Aug 23, 2025
654590f
Safe copying active worldevents before usage in listener
Manu585 Aug 26, 2025
bc35ac2
Added reload message and immutability modifiers in params
Manu585 Aug 26, 2025
36b25e4
Moved reload message
Manu585 Aug 26, 2025
75a752b
Made classes final, module enable and disable logic redone
Manu585 Sep 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 6 additions & 24 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,13 @@
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<!--Bukkit API-->
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.21.5-R0.1-SNAPSHOT</version>
<version>1.21-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- ProjectKorra Core -->
Expand All @@ -48,14 +44,14 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.17.0</version>
<version>3.18.0</version>
<scope>provided</scope>
</dependency>
<!-- Inventory Framework -->
<dependency>
<groupId>com.github.stefvanschie.inventoryframework</groupId>
<artifactId>IF</artifactId>
<version>0.11.0</version>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>26.0.2</version>
<scope>compile</scope>
</dependency>
</dependencies>

Expand Down Expand Up @@ -87,21 +83,7 @@
<version>3.6.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>com.github.stefvanschie.inventoryframework</pattern>
<shadedPattern>com.projectkorra.rpg.inventoryframework</shadedPattern>
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Expand Down
16 changes: 13 additions & 3 deletions src/main/java/com/projectkorra/rpg/ProjectKorraRPG.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.projectkorra.rpg.metrics.MetricsLite;
import com.projectkorra.rpg.modules.ModuleManager;
import com.projectkorra.rpg.storage.TableCreator;
import com.projectkorra.rpg.ui.service.InventoryEventListener;
import com.projectkorra.rpg.ui.service.InventoryService;
import net.luckperms.api.LuckPerms;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
Expand All @@ -18,6 +20,7 @@ public class ProjectKorraRPG extends JavaPlugin {
public static LuckPerms luckPermsAPI;

private ModuleManager moduleManager;
private InventoryService inventoryService;

@Override
public void onEnable() {
Expand All @@ -26,9 +29,11 @@ public void onEnable() {
new ConfigManager();
new TableCreator();

moduleManager = new ModuleManager();
moduleManager = new ModuleManager(this);
inventoryService = new InventoryService();

Bukkit.getServer().getPluginManager().registerEvents(new RPGListener(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new InventoryEventListener(inventoryService), this);
Bukkit.getServer().getPluginManager().registerEvents(new RPGListener(this), this);

RegisteredServiceProvider<LuckPerms> provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class);
if (provider != null) {
Expand All @@ -44,7 +49,7 @@ public void onEnable() {

// Metrics
try {
MetricsLite metrics = new MetricsLite(plugin);
MetricsLite metrics = new MetricsLite(this);
metrics.start();
} catch (IOException e) {
getLogger().severe("Failed to submit stats to bStats!" + e.getMessage());
Expand All @@ -54,6 +59,7 @@ public void onEnable() {
@Override
public void onDisable() {
moduleManager.disableModules();
inventoryService.closeAll();
}

public static ProjectKorraRPG getPlugin() {
Expand All @@ -64,6 +70,10 @@ public static LuckPerms getLuckPermsAPI() {
return luckPermsAPI;
}

public InventoryService getInventoryService() {
return inventoryService;
}

public ModuleManager getModuleManager() {
return moduleManager;
}
Expand Down
21 changes: 15 additions & 6 deletions src/main/java/com/projectkorra/rpg/RPGListener.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.projectkorra.rpg;

import com.projectkorra.projectkorra.event.BendingReloadEvent;
import com.projectkorra.projectkorra.util.ChatUtil;
import com.projectkorra.rpg.commands.HelpCommand;
import com.projectkorra.rpg.commands.RPGCommandBase;
import com.projectkorra.rpg.configuration.ConfigManager;
Expand All @@ -9,10 +10,16 @@
import org.bukkit.scheduler.BukkitRunnable;

public class RPGListener implements Listener {
private final ProjectKorraRPG plugin;

public RPGListener(final ProjectKorraRPG plugin) {
this.plugin = plugin;
}

@EventHandler
public void onBendingConfigReload(BendingReloadEvent event) {
public void onBendingConfigReload(final BendingReloadEvent event) {
// Disable all enabled modules for clean module start
ProjectKorraRPG.getPlugin().getModuleManager().disableModules();
plugin.getModuleManager().disableModules();

// Reload configs
ConfigManager.defaultConfig.reload();
Expand All @@ -24,10 +31,12 @@ public void onBendingConfigReload(BendingReloadEvent event) {
public void run() {
new RPGCommandBase();
new HelpCommand();
}
}.runTaskLater(ProjectKorraRPG.getPlugin(), 20);
}
}.runTaskLater(plugin, 20);

// Re-Enable all modules for clean start
ProjectKorraRPG.getPlugin().getModuleManager().enableModules();
}
plugin.getModuleManager().enableModules();

event.getSender().sendMessage(ChatUtil.color("&bRPG Addon reloaded!"));
}
}
54 changes: 49 additions & 5 deletions src/main/java/com/projectkorra/rpg/RPGMethods.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package com.projectkorra.rpg;

import net.luckperms.api.node.Node;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.Sound;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;

import java.time.Duration;
import java.util.Arrays;
import java.util.Locale;

import static com.projectkorra.rpg.ProjectKorraRPG.luckPermsAPI;

public class RPGMethods {
private static final ProjectKorraRPG plugin = ProjectKorraRPG.getPlugin();

/**
* @param player Player who will lose permission
Expand All @@ -17,7 +24,7 @@ public class RPGMethods {
* @Description This method is a simplified way of removing
* Permissions to players via LuckPerms
*/
public static void removePermission(Player player, String permission) {
public static void removePermission(final Player player, final String permission) {
if (luckPermsAPI == null)
return;

Expand All @@ -34,25 +41,62 @@ public static void removePermission(Player player, String permission) {
* @Description This method is a simplified way of adding
* Permissions to players via LuckPerms
*/
public static void addPermission(Player player, String permission) {
public static void addPermission(final Player player, final String permission) {
if (luckPermsAPI == null)
return;

luckPermsAPI.getUserManager().getUser(player.getUniqueId()).data()
.add(Node.builder(permission).build());
luckPermsAPI.getUserManager().saveUser(luckPermsAPI.getUserManager().getUser(player.getUniqueId()));
}

public static BarColor convertStringToBarColor(final String colorStr) {
if (colorStr == null) {
return BarColor.RED;
}

try {
return BarColor.valueOf(colorStr.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException exception) {
ProjectKorraRPG.getPlugin().getLogger().warning("Failed BarColor conversion for String: '" + colorStr + "'! Possible values: " + Arrays.toString(BarColor.values()));
return null;
}
}

public static BarStyle convertStringToBarStyle(final String styleStr) {
if (styleStr == null) {
return BarStyle.SOLID;
}

try {
return BarStyle.valueOf(styleStr.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException exception) {
ProjectKorraRPG.getPlugin().getLogger().warning("Failed BarColor conversion for String: '" + styleStr + "'! Possible values: " + Arrays.toString(BarStyle.values()));
return null;
}
}

public static @Nullable Sound resolveSound(final String raw) {
if (raw == null) return null;
String soundId = raw.trim().toLowerCase(Locale.ROOT);
if (soundId.isEmpty()) return null;

NamespacedKey key = soundId.contains(":") ? NamespacedKey.fromString(soundId) : NamespacedKey.minecraft(soundId);

return (key == null) ? null : Registry.SOUNDS.get(key);
}

/**
* @param period String to convert to duration
* @return Duration in the period string
* @author CrashCringle
* @Description This method converts a period string like 3d4h to a duration object
*/
public static Duration periodStringToDuration(String period) {
public static Duration periodStringToDuration(final String period) {
// Can be in the formats like: 1s, 1m, 1h, 1d, 2d1h10s etc etc.
Duration duration = Duration.ZERO;
if (period == null || period.isEmpty()) {
plugin.getLogger().info("Invalid period string: " + period);
ProjectKorraRPG.getPlugin().getLogger().info("Invalid period string: " + period);
return duration;
}
String[] parts = period.split("(?<=\\D)(?=\\d)");
Expand Down
37 changes: 19 additions & 18 deletions src/main/java/com/projectkorra/rpg/configuration/ConfigManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import com.projectkorra.projectkorra.Element;
import com.projectkorra.projectkorra.configuration.ConfigType;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.configuration.file.FileConfiguration;

import java.io.File;
import java.util.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ConfigManager {
private static final ConfigType DEFAULT = new ConfigType("Default");
Expand Down Expand Up @@ -239,37 +241,36 @@ public void configCheck(ConfigType type) {
} else if (type == WORLDEVENTS) {
config = sozinsCometConfig.get();

List<String> disabledWorlds = new ArrayList<>();
disabledWorlds.add("none");

config.addDefault("Title", "&cSozins Comet");
config.addDefault("Title", "&cSozin's Comet");
config.addDefault("Duration", 5000);
config.addDefault("World", "world");

config.addDefault("Worlds", List.of("world"));

config.addDefault("Schedule.At", "7am");
config.addDefault("Schedule.Repeat", "7d");
config.addDefault("Schedule.Calendar", "REALTIME");
config.addDefault("Schedule.Offset", "3d12h");
config.addDefault("Schedule.TriggerChance", "0.1");
config.addDefault("Schedule.TriggerChance", 0.1);
config.addDefault("Schedule.Cooldown", "60d");

config.addDefault("DisplayMethods.BossBar.Enabled", true);
config.addDefault("DisplayMethods.BossBar.Color", "RED");
config.addDefault("DisplayMethods.BossBar.Style", "SOLID");
config.addDefault("DisplayMethods.BossBar.Smooth", true);
config.addDefault("DisplayMethods.Chat.Enabled", true);
config.addDefault("DisplayMethods.Chat.EventStartMessage", "&cSozins Comet has entered the world's atmosphere. Firebenders bending has been extremely hightened");
config.addDefault("DisplayMethods.Chat.EventStopMessage", "&cSozins Comet has left the world's atmosphere. Firebenders bending has been normalized");
config.addDefault("DisplayMethods.ScoreBoard.Enabled", false);
config.addDefault("DisplayMethods.Chat.EventStartMessage", "&cSozin's Comet has entered the world's atmosphere. Fire benders bending has been extremely heightened!");
config.addDefault("DisplayMethods.Chat.EventStopMessage", "&cSozin's Comet has left the world's atmosphere. Fire benders bending has been normalized!");
config.addDefault("DisplayMethods.Chat.EventCurrentlyRunning", "&cSozin's Comet is currently in the world's atmosphere. Fire benders bending is extremely heightened!");
config.addDefault("DisplayMethods.Scoreboard.Enabled", false);
config.addDefault("PlayEventStartSound", true);
config.addDefault("EventStart.Sound", Sound.ENTITY_ENDER_DRAGON_GROWL.toString());
config.addDefault("EventStart.Volume", "1F");
config.addDefault("EventStart.Pitch", "0.5F");
config.addDefault("EventStart.Sound", "entity.ender_dragon.growl");
config.addDefault("EventStart.Volume", 1);
config.addDefault("EventStart.Pitch", 0.5);
config.addDefault("PlayEventStopSound", true);
config.addDefault("EventStop.Sound", Sound.ENTITY_ENDER_DRAGON_AMBIENT.toString());
config.addDefault("EventStop.Volume", "1F");
config.addDefault("EventStop.Pitch", "0.5F");
config.addDefault("DisabledWorlds", disabledWorlds);
config.addDefault("EventStop.Sound", "entity.ender_dragon.growl");
config.addDefault("EventStop.Volume", 1);
config.addDefault("EventStop.Pitch", 0.5);
config.addDefault("DisabledWorlds", List.of("none"));
config.addDefault("Abilities.Fire._All.Damage", "x2.0");
config.addDefault("Abilities.Fire._All.Speed", "x2.0");
config.addDefault("Abilities.Fire._All.Cooldown", "x0.5");
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/projectkorra/rpg/modules/Module.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
import org.bukkit.event.Listener;

public abstract class Module {
private final ProjectKorraRPG plugin = ProjectKorraRPG.getPlugin();
private final ProjectKorraRPG plugin;
private final String name;

public Module(String name) {
public Module(ProjectKorraRPG plugin, String name) {
this.plugin = plugin;
this.name = name;
}

Expand All @@ -18,7 +19,7 @@ public Module(String name) {

public void registerListeners(Listener... l) {
for (Listener listener : l) {
Comment thread
Manu585 marked this conversation as resolved.
ProjectKorraRPG.getPlugin().getServer().getPluginManager().registerEvents(listener, ProjectKorraRPG.getPlugin());
this.plugin.getServer().getPluginManager().registerEvents(listener, this.plugin);
}
}

Expand Down
Loading