Compare commits

...

5 Commits

Author SHA1 Message Date
Len 1f88f6ea0d Stub for SavedInventory 2025-11-12 23:18:24 +01:00
Len 798946b386 Refactor Events 2025-11-12 23:17:44 +01:00
Len c32bd21f0f Refactor Events 2025-11-12 23:16:56 +01:00
Len 99dcb318ad Use reflection to load feature event listeners 2025-06-29 17:03:11 +02:00
Len fa289a8737 Only add player equipment to EquipmentArgumentType 2025-06-29 16:34:18 +02:00
23 changed files with 116 additions and 29 deletions

View File

@ -0,0 +1,40 @@
package com.alttd.essentia.api.events.player;
import com.alttd.essentia.api.events.EssentiaEvent;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class PlayerRandomTeleportEvent extends EssentiaEvent {
private static final HandlerList handlerList = new HandlerList();
private final Player player;
private final Location location;
public PlayerRandomTeleportEvent(Player player, Location location) {
this.player = player;
this.location = location;
}
public Player getPlayer() {
return player;
}
public Location getLocation() {
return location;
}
@NotNull
@Override
public HandlerList getHandlers() {
return handlerList;
}
@NotNull
public static HandlerList getHandlerList() {
return handlerList;
}
}

View File

@ -1,5 +1,6 @@
package com.alttd.essentia.api.events; package com.alttd.essentia.api.events.player;
import com.alttd.essentia.api.events.EssentiaEvent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@ -1,5 +1,6 @@
package com.alttd.essentia.api.events; package com.alttd.essentia.api.events.player;
import com.alttd.essentia.api.events.EssentiaEvent;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;

View File

@ -1,5 +1,6 @@
package com.alttd.essentia.api.events; package com.alttd.essentia.api.events.player;
import com.alttd.essentia.api.events.EssentiaEvent;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;

View File

@ -1,5 +1,6 @@
package com.alttd.essentia.api.events; package com.alttd.essentia.api.events.player;
import com.alttd.essentia.api.events.EssentiaEvent;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;

View File

@ -1,5 +1,6 @@
package com.alttd.essentia.api.events; package com.alttd.essentia.api.events.player;
import com.alttd.essentia.api.events.EssentiaEvent;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;

View File

@ -104,12 +104,21 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI {
void loadEventListeners() { void loadEventListeners() {
final PluginManager pluginManager = getServer().getPluginManager(); final PluginManager pluginManager = getServer().getPluginManager();
Reflections reflections = new Reflections("com.alttd.essentia.listeners"); Reflections reflections = new Reflections("com.alttd.essentia.listeners"); // These are plugin required listeners eg player data loading on login.
Set<Class<?>> subTypes = reflections.get(Scanners.SubTypes.of(Listener.class).asClass()); Set<Class<?>> subTypes = reflections.get(Scanners.SubTypes.of(Listener.class).asClass());
reflections = new Reflections("com.alttd.essentia.feature"); // These are them listeners for the features.
subTypes.addAll(reflections.get(Scanners.SubTypes.of(Listener.class).asClass()));
subTypes.forEach(clazz -> { subTypes.forEach(clazz -> {
try { try {
Listener listener = (Listener) clazz.getDeclaredConstructor().newInstance(); Listener listener = (Listener) clazz.getDeclaredConstructor().newInstance();
final Depends depends = clazz.getAnnotation(Depends.class);
if (depends != null) {
if (!features.isEnabled(depends.value())) {
return;
}
}
pluginManager.registerEvents(listener, this); pluginManager.registerEvents(listener, this);
} catch (Exception e) { } catch (Exception e) {
EssentiaPlugin.instance().getLogger().severe("Failed to register event listener " + clazz.getSimpleName()); EssentiaPlugin.instance().getLogger().severe("Failed to register event listener " + clazz.getSimpleName());

View File

@ -42,6 +42,9 @@ public class EquipmentArgumentType implements CustomArgumentType.Converted<Equip
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) { public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
Collection<String> possibleValues = new ArrayList<>(); Collection<String> possibleValues = new ArrayList<>();
for (EquipmentSlot equipmentSlot : EquipmentSlot.values()) { for (EquipmentSlot equipmentSlot : EquipmentSlot.values()) {
if (!equipmentSlot.isHand() || !equipmentSlot.isArmor())
continue;
possibleValues.add(equipmentSlot.name().toLowerCase()); possibleValues.add(equipmentSlot.name().toLowerCase());
} }

View File

@ -8,7 +8,6 @@ import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestion;
import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import io.papermc.paper.command.brigadier.MessageComponentSerializer; import io.papermc.paper.command.brigadier.MessageComponentSerializer;

View File

@ -2,7 +2,7 @@ package com.alttd.essentia.commands.player;
import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.api.events.EssentiaEvent; import com.alttd.essentia.api.events.EssentiaEvent;
import com.alttd.essentia.api.events.PlayerTeleportBackEvent; import com.alttd.essentia.api.events.player.PlayerTeleportBackEvent;
import com.alttd.essentia.api.user.User; import com.alttd.essentia.api.user.User;
import com.alttd.essentia.commands.EssentiaCommand; import com.alttd.essentia.commands.EssentiaCommand;
import com.alttd.essentia.configuration.Config; import com.alttd.essentia.configuration.Config;

View File

@ -4,7 +4,7 @@ import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.commands.EssentiaCommand; import com.alttd.essentia.commands.EssentiaCommand;
import com.alttd.essentia.configuration.Config; import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.api.events.EssentiaEvent; import com.alttd.essentia.api.events.EssentiaEvent;
import com.alttd.essentia.api.events.PlayerTeleportBackEvent; import com.alttd.essentia.api.events.player.PlayerTeleportBackEvent;
import com.alttd.essentia.tasks.TeleportSounds; import com.alttd.essentia.tasks.TeleportSounds;
import com.alttd.essentia.api.user.User; import com.alttd.essentia.api.user.User;
import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder;

View File

@ -5,7 +5,7 @@ import com.alttd.essentia.commands.EssentiaCommand;
import com.alttd.essentia.commands.argumement.OfflinePlayerArgument; import com.alttd.essentia.commands.argumement.OfflinePlayerArgument;
import com.alttd.essentia.configuration.Config; import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.api.events.EssentiaEvent; import com.alttd.essentia.api.events.EssentiaEvent;
import com.alttd.essentia.api.events.PlayerRemoveHomeEvent; import com.alttd.essentia.api.events.player.PlayerRemoveHomeEvent;
import com.alttd.essentia.api.user.User; import com.alttd.essentia.api.user.User;
import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder;

View File

@ -2,7 +2,7 @@ package com.alttd.essentia.commands.player;
import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.api.events.EssentiaEvent; import com.alttd.essentia.api.events.EssentiaEvent;
import com.alttd.essentia.api.events.PlayerTeleportHomeEvent; import com.alttd.essentia.api.events.player.PlayerTeleportHomeEvent;
import com.alttd.essentia.api.model.Home; import com.alttd.essentia.api.model.Home;
import com.alttd.essentia.commands.EssentiaCommand; import com.alttd.essentia.commands.EssentiaCommand;
import com.alttd.essentia.configuration.Config; import com.alttd.essentia.configuration.Config;

View File

@ -2,7 +2,7 @@ package com.alttd.essentia.commands.player;
import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.api.events.EssentiaEvent; import com.alttd.essentia.api.events.EssentiaEvent;
import com.alttd.essentia.api.events.PlayerSetHomeEvent; import com.alttd.essentia.api.events.player.PlayerSetHomeEvent;
import com.alttd.essentia.api.user.User; import com.alttd.essentia.api.user.User;
import com.alttd.essentia.commands.EssentiaCommand; import com.alttd.essentia.commands.EssentiaCommand;
import com.alttd.essentia.commands.argumement.OfflinePlayerArgument; import com.alttd.essentia.commands.argumement.OfflinePlayerArgument;

View File

@ -1,7 +1,7 @@
package com.alttd.essentia.commands.player; package com.alttd.essentia.commands.player;
import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.api.events.PlayerTeleportSpawnEvent; import com.alttd.essentia.api.events.player.PlayerTeleportSpawnEvent;
import com.alttd.essentia.commands.EssentiaCommand; import com.alttd.essentia.commands.EssentiaCommand;
import com.alttd.essentia.configuration.Config; import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.api.events.EssentiaEvent; import com.alttd.essentia.api.events.EssentiaEvent;

View File

@ -2,7 +2,6 @@ package com.alttd.essentia.feature.cuff;
import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.feature.EssentiaFeature; import com.alttd.essentia.feature.EssentiaFeature;
import org.bukkit.plugin.PluginManager;
public class CuffFeature implements EssentiaFeature { public class CuffFeature implements EssentiaFeature {
@ -21,9 +20,6 @@ public class CuffFeature implements EssentiaFeature {
@Override @Override
public void register() { public void register() {
final PluginManager pluginManager = plugin.getServer().getPluginManager();
pluginManager.registerEvents(new CuffListener(), plugin);
this.enabled = true; this.enabled = true;
} }

View File

@ -2,7 +2,6 @@ package com.alttd.essentia.feature.flight;
import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.feature.EssentiaFeature; import com.alttd.essentia.feature.EssentiaFeature;
import org.bukkit.plugin.PluginManager;
public class FlightFeature implements EssentiaFeature { public class FlightFeature implements EssentiaFeature {
@ -21,9 +20,6 @@ public class FlightFeature implements EssentiaFeature {
@Override @Override
public void register() { public void register() {
final PluginManager pluginManager = plugin.getServer().getPluginManager();
pluginManager.registerEvents(new FlightListener(), plugin);
this.enabled = true; this.enabled = true;
} }

View File

@ -6,7 +6,6 @@ import com.alttd.essentia.api.user.User;
import com.alttd.essentia.api.user.UserManager; import com.alttd.essentia.api.user.UserManager;
import com.alttd.essentia.feature.EssentiaFeature; import com.alttd.essentia.feature.EssentiaFeature;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
public class GodModeFeature implements EssentiaFeature { public class GodModeFeature implements EssentiaFeature {
@ -25,9 +24,6 @@ public class GodModeFeature implements EssentiaFeature {
@Override @Override
public void register() { public void register() {
final PluginManager pluginManager = plugin.getServer().getPluginManager();
pluginManager.registerEvents(new GodModeListener(this), plugin);
this.enabled = true; this.enabled = true;
} }

View File

@ -0,0 +1,4 @@
package com.alttd.essentia.feature.savedinventory;
public class SavedInventoryFeature {
}

View File

@ -0,0 +1,27 @@
package com.alttd.essentia.feature.savedinventory;
import com.alttd.essentia.EssentiaPlugin;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class SavedInventoryListener implements Listener {
private final EssentiaPlugin plugin;
public SavedInventoryListener() {
this.plugin = EssentiaPlugin.instance();
}
@EventHandler(ignoreCancelled = true)
public void onPlayerDeath(PlayerDeathEvent event) {
// TODO -- add config value to save on death
}
@EventHandler()
public void onPlayerQuit(PlayerQuitEvent event) {
// TODO -- add config value to save on leave
}
}

View File

@ -0,0 +1,8 @@
package com.alttd.essentia.feature.savedinventory.gui;
public class SavedInventoryPreviewGUI {
// preview saved inventory, also acts as the live preview of another player's inventory/ec
}

View File

@ -1,4 +0,0 @@
package com.alttd.essentia.model;
public record PlayerInventory() {
}

View File

@ -0,0 +1,8 @@
package com.alttd.essentia.model;
import org.bukkit.Location;
import org.bukkit.inventory.ItemStack;
import java.util.UUID;
public record SavedInventory(int id, ItemStack[] storageContents, ItemStack[] armorContents, UUID ownerUUID, String saveReason, Location location, long date) { }