From 41c5725ea85bc66f9f1d9444c2a89fea65dc6879 Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Sun, 16 Jun 2024 16:15:11 +0200 Subject: [PATCH] Add API and beans for User and UserManager. --- .../events/PlayerRemoveHomeEvent.java | 1 - .../java/com/alttd/essentia/user/User.java | 44 +++++ .../com/alttd/essentia/user/UserManager.java | 24 +++ .../com/alttd/essentia/EssentiaPlugin.java | 17 +- .../com/alttd/essentia/user/EssentiaUser.java | 151 ++++++++++++++++++ .../essentia/user/EssentiaUserManager.java | 53 ++++++ 6 files changed, 284 insertions(+), 6 deletions(-) create mode 100644 api/src/main/java/com/alttd/essentia/user/User.java create mode 100644 api/src/main/java/com/alttd/essentia/user/UserManager.java create mode 100644 plugin/src/main/java/com/alttd/essentia/user/EssentiaUser.java create mode 100644 plugin/src/main/java/com/alttd/essentia/user/EssentiaUserManager.java diff --git a/api/src/main/java/com/alttd/essentia/events/PlayerRemoveHomeEvent.java b/api/src/main/java/com/alttd/essentia/events/PlayerRemoveHomeEvent.java index 5f6d3a2..25cfc45 100644 --- a/api/src/main/java/com/alttd/essentia/events/PlayerRemoveHomeEvent.java +++ b/api/src/main/java/com/alttd/essentia/events/PlayerRemoveHomeEvent.java @@ -1,6 +1,5 @@ package com.alttd.essentia.events; -import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; diff --git a/api/src/main/java/com/alttd/essentia/user/User.java b/api/src/main/java/com/alttd/essentia/user/User.java new file mode 100644 index 0000000..7268605 --- /dev/null +++ b/api/src/main/java/com/alttd/essentia/user/User.java @@ -0,0 +1,44 @@ +package com.alttd.essentia.user; + +import org.bukkit.Location; +import org.jetbrains.annotations.ApiStatus; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +public interface User { + + UUID getUUID(); + + Location getBackLocation(boolean death); + + void setBackLocation(boolean death, Location location); + + boolean hasHome(String name); + + Location getHome(String name); + + void setHome(String name, Location location); + + void removeHome(String name); + + int getHomeCount(); + + List getMatchingHomeNames(String homeName); + + Map getHomeData(); + + Set getHomes(); + + boolean allowTeleports(); + + void setAllowTeleports(boolean allowTeleports); + + @ApiStatus.Internal + boolean saving(); + + @ApiStatus.Internal + void saving(boolean saving); +} diff --git a/api/src/main/java/com/alttd/essentia/user/UserManager.java b/api/src/main/java/com/alttd/essentia/user/UserManager.java new file mode 100644 index 0000000..32f76ef --- /dev/null +++ b/api/src/main/java/com/alttd/essentia/user/UserManager.java @@ -0,0 +1,24 @@ +package com.alttd.essentia.user; + +import org.bukkit.entity.Player; + +import java.util.Map; +import java.util.UUID; + +public interface UserManager { + + User getUser(Player player); + + User getUser(UUID uuid); + + void addUser(User user); + + void removeUser(UUID uuid); + + boolean hasUser(UUID uuid); + + Map getUsers(); + + User createNewUser(UUID uuid); + +} diff --git a/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java b/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java index a69c3ce..4ebd787 100644 --- a/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java +++ b/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java @@ -4,18 +4,20 @@ import com.alttd.essentia.commands.admin.*; import com.alttd.essentia.commands.player.*; import com.alttd.essentia.configuration.Config; import com.alttd.essentia.listeners.PlayerListener; +import com.alttd.essentia.user.EssentiaUserManager; +import com.alttd.essentia.user.UserManager; import lombok.Getter; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; -import org.slf4j.Logger; - -import java.nio.file.Path; public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI { @Getter private static EssentiaPlugin instance; + @Getter + private UserManager userManager; + @Override public void onLoad() { instance = this; @@ -27,6 +29,7 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI { loadConfiguration(); loadCommands(); loadEventListeners(); + loadManagers(); } @Override @@ -38,7 +41,7 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI { Config.init(); } - public void loadCommands() { + void loadCommands() { getCommand("essentia").setExecutor(new EssentiaCommand(this)); getCommand("teleportaccept").setExecutor(new TeleportAcceptCommand(this)); getCommand("teleportdeny").setExecutor(new TeleportDenyCommand(this)); @@ -60,9 +63,13 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI { getCommand("spawn").setExecutor(new SpawnCommand(this)); } - public void loadEventListeners() { + void loadEventListeners() { final PluginManager pluginManager = getServer().getPluginManager(); pluginManager.registerEvents(new PlayerListener(this), this); } + void loadManagers() { + userManager = new EssentiaUserManager(); + } + } diff --git a/plugin/src/main/java/com/alttd/essentia/user/EssentiaUser.java b/plugin/src/main/java/com/alttd/essentia/user/EssentiaUser.java new file mode 100644 index 0000000..45f61f0 --- /dev/null +++ b/plugin/src/main/java/com/alttd/essentia/user/EssentiaUser.java @@ -0,0 +1,151 @@ +package com.alttd.essentia.user; + +import com.alttd.essentia.request.Request; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.Location; + +import java.util.*; +import java.util.stream.Collectors; + +public class EssentiaUser implements User { + + protected final UUID uuid; + + protected Location backLocation; + protected Location deathLocation; + protected Map homes; + protected boolean allowTeleports; + + @Getter @Setter + private Request request; + private boolean saving; + + private EssentiaUser(Builder builder) { + this.uuid = builder.uuid; + this.backLocation = builder.backLocation; + this.deathLocation = builder.deathLocation; + this.homes = builder.homes; + this.allowTeleports = builder.allowTeleports; + } + + @Override + public UUID getUUID() { + return uuid; + } + + @Override + public Location getBackLocation(boolean death) { + return death ? deathLocation : backLocation; + } + + @Override + public void setBackLocation(boolean death, Location location) { + if (death) { + deathLocation = location; + return; + } + backLocation = location; + } + + @Override + public boolean hasHome(String name) { + return homes.containsKey(name); + } + + @Override + public Location getHome(String name) { + return homes.get(name); + } + + @Override + public void setHome(String name, Location location) { + homes.put(name, location); + } + + @Override + public void removeHome(String name) { + homes.remove(name); + } + + @Override + public int getHomeCount() { + return homes.size(); + } + + @Override + public List getMatchingHomeNames(String homeName) { + return getHomes().stream() + .filter(home -> home.toLowerCase().startsWith(homeName.toLowerCase())) + .collect(Collectors.toList()); + } + + @Override + public Map getHomeData() { + return homes; + } + + @Override + public Set getHomes() { + return homes.keySet(); + } + + @Override + public boolean allowTeleports() { + return allowTeleports; + } + + @Override + public void setAllowTeleports(boolean allowTeleports) { + this.allowTeleports = allowTeleports; + } + + @Override + public boolean saving() { + return saving; + } + + @Override + public void saving(boolean saving) { + this.saving = saving; + } + + public static class Builder { + + protected UUID uuid; + protected Location backLocation = null; + protected Location deathLocation = null; + protected Map homes = new HashMap<>(); + protected boolean allowTeleports; + + public Builder uuid(UUID uuid) { + this.uuid = uuid; + return this; + } + + public Builder backLocation(Location location) { + this.backLocation = location; + return this; + } + + public Builder deathLocation(Location location) { + this.deathLocation = location; + return this; + } + + public Builder homes(Map homes) { + this.homes = homes; + return this; + } + + public Builder allowTeleports(boolean allowTeleports) { + this.allowTeleports = allowTeleports; + return this; + } + + public EssentiaUser build() { + return new EssentiaUser(this); + } + + } +} diff --git a/plugin/src/main/java/com/alttd/essentia/user/EssentiaUserManager.java b/plugin/src/main/java/com/alttd/essentia/user/EssentiaUserManager.java new file mode 100644 index 0000000..bcd81be --- /dev/null +++ b/plugin/src/main/java/com/alttd/essentia/user/EssentiaUserManager.java @@ -0,0 +1,53 @@ +package com.alttd.essentia.user; + +import org.bukkit.entity.Player; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class EssentiaUserManager implements UserManager { + + private final Map essentiaPlayers = new ConcurrentHashMap<>(); + + @Override + public User getUser(Player player) { + return getUser(player.getUniqueId()); + } + + @Override + public User getUser(UUID uuid) { + User user = essentiaPlayers.get(uuid); + if (user != null) { + return user; + } else { + return createNewUser(uuid); + } + } + + @Override + public void addUser(User user) { + essentiaPlayers.put(user.getUUID(), user); + } + + @Override + public void removeUser(UUID uuid) { + essentiaPlayers.remove(uuid); + } + + @Override + public boolean hasUser(UUID uuid) { + return essentiaPlayers.containsKey(uuid); + } + + @Override + public Map getUsers() { + return essentiaPlayers; + } + + @Override + public User createNewUser(UUID uuid) { + return null; + } + +}