From a7620c09f86fba7beb4bc48a501787016211d9d0 Mon Sep 17 00:00:00 2001 From: Laura Date: Sun, 15 Feb 2026 13:25:50 +0100 Subject: [PATCH] refactor --- pom.xml | 14 ++-- .../softwarerat/API/builder/SpigotItem.java | 20 ++--- .../softwarerat/API/commands/Navigator.java | 13 ++- .../com/softwarerat/API/data/GameData.java | 19 +++-- .../API/data/gameState/GameStateManager.java | 39 +++++++++ .../API/data/gameState/IGameState.java | 8 ++ .../API/{ => data}/gameType/GameType.java | 2 +- .../API/{ => data}/location/LocationAPI.java | 2 +- .../location/PlayerSpawnLocation.java | 14 ++-- .../API/data/player/GamePlayer.java | 83 +++++++++++++++++++ .../API/{ => data}/player/PlayerAPI.java | 7 +- .../API/data/player/PlayerFlag.java | 7 ++ .../API/data/player/PlayerFlags.java | 26 ++++++ .../API/data/player/PlayerManager.java | 74 +++++++++++++++++ .../API/{ => data}/prefix/PrefixAPI.java | 5 +- .../API/{ => data}/scoreboard/ScoreAPI.java | 8 +- .../API/data/store/CacheManager.java | 27 ++++++ .../com/softwarerat/API/data/store/Flag.java | 6 ++ .../API/data/store/FlagManager.java | 9 ++ .../API/{ => data}/world/WorldAPI.java | 2 +- .../API/event/PlayerFlagUpdateEvent.java | 58 +++++++++++++ .../listener/BuildBreakListener.java | 2 +- .../{ => event}/listener/ChatListener.java | 2 +- .../{ => event}/listener/JoinListener.java | 2 +- .../listener/LobbyInventoryClickListener.java | 2 +- .../listener/LobbyJoinListener.java | 15 ++-- .../API/event/listener/QuitListener.java | 4 + .../SpectatorFoodLevelChangeListener.java | 42 ++++++++++ .../softwarerat/API/gameState/GameState.java | 7 -- .../softwarerat/API/gameState/IGameState.java | 8 -- .../API/listener/QuitListener.java | 4 - src/main/java/com/softwarerat/GameAPI.java | 15 ++-- 32 files changed, 455 insertions(+), 91 deletions(-) create mode 100644 src/main/java/com/softwarerat/API/data/gameState/GameStateManager.java create mode 100644 src/main/java/com/softwarerat/API/data/gameState/IGameState.java rename src/main/java/com/softwarerat/API/{ => data}/gameType/GameType.java (70%) rename src/main/java/com/softwarerat/API/{ => data}/location/LocationAPI.java (95%) rename src/main/java/com/softwarerat/API/{ => data}/location/PlayerSpawnLocation.java (73%) create mode 100644 src/main/java/com/softwarerat/API/data/player/GamePlayer.java rename src/main/java/com/softwarerat/API/{ => data}/player/PlayerAPI.java (91%) create mode 100644 src/main/java/com/softwarerat/API/data/player/PlayerFlag.java create mode 100644 src/main/java/com/softwarerat/API/data/player/PlayerFlags.java create mode 100644 src/main/java/com/softwarerat/API/data/player/PlayerManager.java rename src/main/java/com/softwarerat/API/{ => data}/prefix/PrefixAPI.java (94%) rename src/main/java/com/softwarerat/API/{ => data}/scoreboard/ScoreAPI.java (70%) create mode 100644 src/main/java/com/softwarerat/API/data/store/CacheManager.java create mode 100644 src/main/java/com/softwarerat/API/data/store/Flag.java create mode 100644 src/main/java/com/softwarerat/API/data/store/FlagManager.java rename src/main/java/com/softwarerat/API/{ => data}/world/WorldAPI.java (93%) create mode 100644 src/main/java/com/softwarerat/API/event/PlayerFlagUpdateEvent.java rename src/main/java/com/softwarerat/API/{ => event}/listener/BuildBreakListener.java (92%) rename src/main/java/com/softwarerat/API/{ => event}/listener/ChatListener.java (54%) rename src/main/java/com/softwarerat/API/{ => event}/listener/JoinListener.java (52%) rename src/main/java/com/softwarerat/API/{ => event}/listener/LobbyInventoryClickListener.java (89%) rename src/main/java/com/softwarerat/API/{ => event}/listener/LobbyJoinListener.java (97%) create mode 100644 src/main/java/com/softwarerat/API/event/listener/QuitListener.java create mode 100644 src/main/java/com/softwarerat/API/event/listener/spectator/SpectatorFoodLevelChangeListener.java delete mode 100644 src/main/java/com/softwarerat/API/gameState/GameState.java delete mode 100644 src/main/java/com/softwarerat/API/gameState/IGameState.java delete mode 100644 src/main/java/com/softwarerat/API/listener/QuitListener.java diff --git a/pom.xml b/pom.xml index 8528282..cc96aca 100644 --- a/pom.xml +++ b/pom.xml @@ -10,15 +10,11 @@ - - gitea - http://heimserver.local:36107/api/packages/minecraft/maven - - - - gitea - http://heimserver.local:36107/api/packages/minecraft/maven - + + forgejo + Forgejo Maven + http://heimserver.local:36107/api/packages/minecraft/maven + 21 diff --git a/src/main/java/com/softwarerat/API/builder/SpigotItem.java b/src/main/java/com/softwarerat/API/builder/SpigotItem.java index 8007b92..e28f3ab 100644 --- a/src/main/java/com/softwarerat/API/builder/SpigotItem.java +++ b/src/main/java/com/softwarerat/API/builder/SpigotItem.java @@ -1,14 +1,5 @@ package com.softwarerat.API.builder; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.FireworkEffectMeta; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.SkullMeta; - -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -17,11 +8,20 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import javax.annotation.Nonnull; + import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.DyeColor; import org.bukkit.FireworkEffect; import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.FireworkEffectMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; // Another Item Builder public class SpigotItem { private ItemStack itemStack; @@ -29,7 +29,7 @@ public class SpigotItem { private String colorCode(@Nonnull String message) { return ChatColor.translateAlternateColorCodes('&', message); } - public SpigotItem(@Nonnull Material material, @Nonnull int amount) { + public SpigotItem(@Nonnull Material material, int amount) { this.itemStack = new ItemStack(material, amount); diff --git a/src/main/java/com/softwarerat/API/commands/Navigator.java b/src/main/java/com/softwarerat/API/commands/Navigator.java index 60f59eb..8cf3f75 100644 --- a/src/main/java/com/softwarerat/API/commands/Navigator.java +++ b/src/main/java/com/softwarerat/API/commands/Navigator.java @@ -1,12 +1,5 @@ package com.softwarerat.API.commands; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import com.softwarerat.API.builder.SpigotInventory; -import com.softwarerat.API.builder.SpigotItem; -import com.softwarerat.API.builder.SpigotUI; -import com.softwarerat.GameAPI; -import lombok.AllArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.Command; @@ -16,6 +9,12 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import com.softwarerat.API.builder.SpigotInventory; +import com.softwarerat.API.builder.SpigotItem; +import com.softwarerat.API.builder.SpigotUI; + //Default Navigator public class Navigator implements CommandExecutor { JavaPlugin javaPlugin; diff --git a/src/main/java/com/softwarerat/API/data/GameData.java b/src/main/java/com/softwarerat/API/data/GameData.java index 6a86f58..809fe31 100644 --- a/src/main/java/com/softwarerat/API/data/GameData.java +++ b/src/main/java/com/softwarerat/API/data/GameData.java @@ -1,19 +1,19 @@ package com.softwarerat.API.data; -import com.softwarerat.API.gameState.GameState; -import com.softwarerat.API.gameType.GameType; -import com.softwarerat.API.location.PlayerSpawnLocation; -import com.softwarerat.GameAPI; -import lombok.Getter; -import lombok.Setter; +import java.util.List; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; -import java.util.List; +import com.softwarerat.API.data.gameState.GameStateManager; +import com.softwarerat.API.data.gameType.GameType; +import com.softwarerat.API.data.location.PlayerSpawnLocation; +import com.softwarerat.GameAPI; + +import lombok.Getter; +import lombok.Setter; // Server related Data // made possible with Lombok @Getter @@ -22,7 +22,7 @@ public class GameData { List spawnLocations; PlayerSpawnLocation defaultSpawnLocation; GameAPI gameapi; - GameState currentGameState; + GameStateManager gameStateManager; Location mapLocation; String primaryKit; String secondaryKit; @@ -33,6 +33,7 @@ public class GameData { Scoreboard scoreboard; public GameData(GameAPI gameapi) { this.gameapi = gameapi; + this.gameStateManager = new GameStateManager(); } public String getGameHost(JavaPlugin javaPlugin){ diff --git a/src/main/java/com/softwarerat/API/data/gameState/GameStateManager.java b/src/main/java/com/softwarerat/API/data/gameState/GameStateManager.java new file mode 100644 index 0000000..6c7280c --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/gameState/GameStateManager.java @@ -0,0 +1,39 @@ +package com.softwarerat.API.data.gameState; + +import java.util.Arrays; + +public class GameStateManager { + + + + private final IGameState[] gameStates; + + private int currentStateId; + + public GameStateManager(IGameState... gameStates) { + this.gameStates = gameStates; + } + + public IGameState getCurrentState() { + if (this.currentStateId < 0 || this.currentStateId >= this.gameStates.length) + return null; + return this.gameStates[this.currentStateId]; + } + + public IGameState nextState() { + if (this.currentStateId + 1 == this.gameStates.length) + throw new IllegalStateException("No states remaining"); + + IGameState oldState = getCurrentState(); + this.currentStateId++; + IGameState newState = getCurrentState(); + oldState.Stop(); + newState.Start(this); + return newState; + } + + @SafeVarargs + public final boolean isCurrentGameState(Class... states) { + return Arrays.>stream(states).anyMatch(state -> state.isInstance(getCurrentState())); + } +} diff --git a/src/main/java/com/softwarerat/API/data/gameState/IGameState.java b/src/main/java/com/softwarerat/API/data/gameState/IGameState.java new file mode 100644 index 0000000..91f1ade --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/gameState/IGameState.java @@ -0,0 +1,8 @@ +package com.softwarerat.API.data.gameState; + +public interface IGameState { + +public void Start(GameStateManager manager); +public void Stop(); + +} diff --git a/src/main/java/com/softwarerat/API/gameType/GameType.java b/src/main/java/com/softwarerat/API/data/gameType/GameType.java similarity index 70% rename from src/main/java/com/softwarerat/API/gameType/GameType.java rename to src/main/java/com/softwarerat/API/data/gameType/GameType.java index 7a66449..ec13745 100644 --- a/src/main/java/com/softwarerat/API/gameType/GameType.java +++ b/src/main/java/com/softwarerat/API/data/gameType/GameType.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.gameType; +package com.softwarerat.API.data.gameType; public enum GameType { GAME_TYPE_MINIGAME, diff --git a/src/main/java/com/softwarerat/API/location/LocationAPI.java b/src/main/java/com/softwarerat/API/data/location/LocationAPI.java similarity index 95% rename from src/main/java/com/softwarerat/API/location/LocationAPI.java rename to src/main/java/com/softwarerat/API/data/location/LocationAPI.java index 5e70b5d..6c8ff04 100644 --- a/src/main/java/com/softwarerat/API/location/LocationAPI.java +++ b/src/main/java/com/softwarerat/API/data/location/LocationAPI.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.location; +package com.softwarerat.API.data.location; import com.softwarerat.API.data.GameData; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/softwarerat/API/location/PlayerSpawnLocation.java b/src/main/java/com/softwarerat/API/data/location/PlayerSpawnLocation.java similarity index 73% rename from src/main/java/com/softwarerat/API/location/PlayerSpawnLocation.java rename to src/main/java/com/softwarerat/API/data/location/PlayerSpawnLocation.java index 01f3e75..b5ba078 100644 --- a/src/main/java/com/softwarerat/API/location/PlayerSpawnLocation.java +++ b/src/main/java/com/softwarerat/API/data/location/PlayerSpawnLocation.java @@ -1,12 +1,14 @@ -package com.softwarerat.API.location; - -import com.softwarerat.API.gameType.GameType; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.Location; +package com.softwarerat.API.data.location; import java.util.UUID; +import org.bukkit.Location; + +import com.softwarerat.API.data.gameType.GameType; + +import lombok.Getter; +import lombok.Setter; + // Game related Player spawn Location @Getter diff --git a/src/main/java/com/softwarerat/API/data/player/GamePlayer.java b/src/main/java/com/softwarerat/API/data/player/GamePlayer.java new file mode 100644 index 0000000..824e66b --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/player/GamePlayer.java @@ -0,0 +1,83 @@ +package com.softwarerat.API.data.player; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.jetbrains.annotations.Nullable; + +import com.softwarerat.API.data.store.CacheManager; +import com.softwarerat.API.data.store.FlagManager; +import com.softwarerat.API.event.PlayerFlagUpdateEvent; + + + +public class GamePlayer extends CacheManager implements FlagManager { + private static final String FLAG_KEY = "__flag__"; + + private final org.bukkit.entity.Player bukkitPlayer; + + private Location enterSpectateLocation; + + private Location leaveSpectateLocation; + + GamePlayer(org.bukkit.entity.Player bukkitPlayer, Location enterSpectateLocation, Location leaveSpectateLocation) { + this.bukkitPlayer = bukkitPlayer; + this.enterSpectateLocation = enterSpectateLocation; + this.leaveSpectateLocation = leaveSpectateLocation; + } + + public void setFlag(PlayerFlag flag) { + PlayerFlag currentFlag = getCurrentFlag(); + PlayerFlagUpdateEvent event = new PlayerFlagUpdateEvent(this, currentFlag, flag); + Bukkit.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + removeFromCache("__flag__"); + addToCache("__flag__", flag.getInt()); + } + } + + public void removeFlag(PlayerFlag flag) { + setFlag(PlayerFlags.PLAYER); + } + + public boolean hasFlag(PlayerFlag... flag) { + return ((Boolean)Arrays.stream(flag) + .map(playerFlag -> Boolean.valueOf(getValueFromCache("__flag__").equals(playerFlag.getInt()))) + .filter(aBoolean -> aBoolean.booleanValue()) + .findFirst() + .orElse(Boolean.valueOf(false))).booleanValue(); + } + + public boolean isSpectator() { + return hasFlag(new PlayerFlag[] { PlayerFlags.SPECTATOR, PlayerFlags.SPECTATOR_TARGET }); + } + + public org.bukkit.entity.Player getBukkitPlayer() { + return this.bukkitPlayer; + } + + public void setEnterSpectateLocation(Location enterSpectateLocation) { + this.enterSpectateLocation = enterSpectateLocation; + } + + public void setLeaveSpectateLocation(Location leaveSpectateLocation) { + this.leaveSpectateLocation = leaveSpectateLocation; + } + + public Location getEnterSpectateLocation() { + return this.enterSpectateLocation; + } + + public Location getLeaveSpectateLocation() { + return this.leaveSpectateLocation; + } + + @Nullable + private PlayerFlag getCurrentFlag() { + return Arrays.stream((PlayerFlag[])PlayerFlags.values()) + .filter(playerFlag -> !getValueFromCache("__flag__").equals(playerFlag.getInt())) + .findFirst() + .orElse(null); + } +} diff --git a/src/main/java/com/softwarerat/API/player/PlayerAPI.java b/src/main/java/com/softwarerat/API/data/player/PlayerAPI.java similarity index 91% rename from src/main/java/com/softwarerat/API/player/PlayerAPI.java rename to src/main/java/com/softwarerat/API/data/player/PlayerAPI.java index f7116ec..870c187 100644 --- a/src/main/java/com/softwarerat/API/player/PlayerAPI.java +++ b/src/main/java/com/softwarerat/API/data/player/PlayerAPI.java @@ -1,9 +1,10 @@ -package com.softwarerat.API.player; +package com.softwarerat.API.data.player; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; import com.softwarerat.API.data.GameData; import com.softwarerat.GameAPI; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; // Game related PlayerAPI for checking if a player is the GameHost diff --git a/src/main/java/com/softwarerat/API/data/player/PlayerFlag.java b/src/main/java/com/softwarerat/API/data/player/PlayerFlag.java new file mode 100644 index 0000000..56b56da --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/player/PlayerFlag.java @@ -0,0 +1,7 @@ +package com.softwarerat.API.data.player; + +import com.softwarerat.API.data.store.Flag; + +public interface PlayerFlag extends Flag { + +} diff --git a/src/main/java/com/softwarerat/API/data/player/PlayerFlags.java b/src/main/java/com/softwarerat/API/data/player/PlayerFlags.java new file mode 100644 index 0000000..55dc347 --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/player/PlayerFlags.java @@ -0,0 +1,26 @@ +package com.softwarerat.API.data.player; + +public enum PlayerFlags implements PlayerFlag { + PLAYER("default flag for players", Integer.valueOf(1)), + SPECTATOR("if player is spectator", Integer.valueOf(2)), + SPECTATOR_TARGET("if player is spectator and views player", Integer.valueOf(3)); + + private final String description; + + private final Integer number; + + PlayerFlags(String description, Integer number) { + this.description = description; + this.number = number; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public Integer getInt() { + return this.number; + } +} diff --git a/src/main/java/com/softwarerat/API/data/player/PlayerManager.java b/src/main/java/com/softwarerat/API/data/player/PlayerManager.java new file mode 100644 index 0000000..a28a71f --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/player/PlayerManager.java @@ -0,0 +1,74 @@ +package com.softwarerat.API.data.player; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class PlayerManager { + + private final List playerList = new ArrayList<>(); + private final Location enterSpectateLocation; + private final Location leaveSpectateLocation; + + public PlayerManager(Location enterSpectateLocation, Location leaveSpectateLocation) { + this.enterSpectateLocation = enterSpectateLocation; + this.leaveSpectateLocation = leaveSpectateLocation; + } + + protected void addPlayer(Player bukkitPlayer) { + if (getPlayer(bukkitPlayer) != null) + return; + + GamePlayer player = new GamePlayer(bukkitPlayer, enterSpectateLocation, leaveSpectateLocation); + player.setFlag(PlayerFlags.PLAYER); + playerList.add(player); + } + + protected void removePlayer(Player bukkitPlayer) { + GamePlayer player = getPlayer(bukkitPlayer); + if (player != null) + playerList.remove(player); + } + + public GamePlayer getPlayer(Player bukkitPlayer) { + return playerList.stream() + .filter(player -> player.getBukkitPlayer().getUniqueId() + .equals(bukkitPlayer.getUniqueId())) + .findFirst() + .orElse(null); + } + + public List players() { + return Collections.unmodifiableList(playerList); + } + + public List playersWithFlag(PlayerFlag... flags) { + return playerList.stream() + .filter(player -> player.hasFlag(flags)) + .collect(Collectors.toList()); + } + + public List bukkitPlayersWithFlag(PlayerFlag... flags) { + return playerList.stream() + .filter(player -> player.hasFlag(flags)) + .map(GamePlayer::getBukkitPlayer) + .collect(Collectors.toList()); + } + + public List playersWithNoFlag(PlayerFlag... flags) { + return playerList.stream() + .filter(player -> !player.hasFlag(flags)) + .collect(Collectors.toList()); + } + + public List bukkitPlayersWithNoFlag(PlayerFlag... flags) { + return playerList.stream() + .filter(player -> !player.hasFlag(flags)) + .map(GamePlayer::getBukkitPlayer) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/com/softwarerat/API/prefix/PrefixAPI.java b/src/main/java/com/softwarerat/API/data/prefix/PrefixAPI.java similarity index 94% rename from src/main/java/com/softwarerat/API/prefix/PrefixAPI.java rename to src/main/java/com/softwarerat/API/data/prefix/PrefixAPI.java index 49479fd..6bb4c8d 100644 --- a/src/main/java/com/softwarerat/API/prefix/PrefixAPI.java +++ b/src/main/java/com/softwarerat/API/data/prefix/PrefixAPI.java @@ -1,12 +1,9 @@ -package com.softwarerat.API.prefix; +package com.softwarerat.API.data.prefix; -import com.softwarerat.API.data.GameData; import org.bukkit.entity.Player; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Team; -import java.util.List; - public class PrefixAPI { /* PrefixSystem of the whole Network * this will be the future way to add Tablist Prefixes, and will depend on GameData Settings like wich GameType and diff --git a/src/main/java/com/softwarerat/API/scoreboard/ScoreAPI.java b/src/main/java/com/softwarerat/API/data/scoreboard/ScoreAPI.java similarity index 70% rename from src/main/java/com/softwarerat/API/scoreboard/ScoreAPI.java rename to src/main/java/com/softwarerat/API/data/scoreboard/ScoreAPI.java index 0978b7b..46354fe 100644 --- a/src/main/java/com/softwarerat/API/scoreboard/ScoreAPI.java +++ b/src/main/java/com/softwarerat/API/data/scoreboard/ScoreAPI.java @@ -1,9 +1,11 @@ -package com.softwarerat.API.scoreboard; +package com.softwarerat.API.data.scoreboard; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.*; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.ScoreboardManager; public class ScoreAPI { diff --git a/src/main/java/com/softwarerat/API/data/store/CacheManager.java b/src/main/java/com/softwarerat/API/data/store/CacheManager.java new file mode 100644 index 0000000..d2764e5 --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/store/CacheManager.java @@ -0,0 +1,27 @@ +package com.softwarerat.API.data.store; + +import java.util.LinkedHashMap; + +public class CacheManager { + private final LinkedHashMap cache = new LinkedHashMap<>(); + + public void addToCache(String key, Object value) { + this.cache.put(key, value); + } + + public void removeFromCache(String key) { + this.cache.remove(key); + } + + public void changeValueFromCache(String key, Object value) { + this.cache.replace(key, value); + } + + public Object getValueFromCache(String key) { + return this.cache.getOrDefault(key, (Object)null); + } + + public boolean containsCache(String key) { + return this.cache.containsKey(key); + } +} diff --git a/src/main/java/com/softwarerat/API/data/store/Flag.java b/src/main/java/com/softwarerat/API/data/store/Flag.java new file mode 100644 index 0000000..a62d0f8 --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/store/Flag.java @@ -0,0 +1,6 @@ +package com.softwarerat.API.data.store; + +public interface Flag { + String getDescription(); + Integer getInt(); +} diff --git a/src/main/java/com/softwarerat/API/data/store/FlagManager.java b/src/main/java/com/softwarerat/API/data/store/FlagManager.java new file mode 100644 index 0000000..b88f46c --- /dev/null +++ b/src/main/java/com/softwarerat/API/data/store/FlagManager.java @@ -0,0 +1,9 @@ +package com.softwarerat.API.data.store; + +public interface FlagManager { + void setFlag(T paramT); + + void removeFlag(T paramT); + + boolean hasFlag(T... paramVarArgs); +} diff --git a/src/main/java/com/softwarerat/API/world/WorldAPI.java b/src/main/java/com/softwarerat/API/data/world/WorldAPI.java similarity index 93% rename from src/main/java/com/softwarerat/API/world/WorldAPI.java rename to src/main/java/com/softwarerat/API/data/world/WorldAPI.java index f0039b6..4da22e1 100644 --- a/src/main/java/com/softwarerat/API/world/WorldAPI.java +++ b/src/main/java/com/softwarerat/API/data/world/WorldAPI.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.world; +package com.softwarerat.API.data.world; import org.bukkit.Bukkit; import org.bukkit.Location; diff --git a/src/main/java/com/softwarerat/API/event/PlayerFlagUpdateEvent.java b/src/main/java/com/softwarerat/API/event/PlayerFlagUpdateEvent.java new file mode 100644 index 0000000..21acccc --- /dev/null +++ b/src/main/java/com/softwarerat/API/event/PlayerFlagUpdateEvent.java @@ -0,0 +1,58 @@ +package com.softwarerat.API.event; + + + +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import com.softwarerat.API.data.player.GamePlayer; +import com.softwarerat.API.data.player.PlayerFlag; + +public final class PlayerFlagUpdateEvent extends Event implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final GamePlayer player; + + private final PlayerFlag previousFlag; + + private final PlayerFlag newFlag; + + private boolean cancelled; + + public PlayerFlagUpdateEvent(GamePlayer player, PlayerFlag previousFlag, PlayerFlag newFlag) { + this.player = player; + this.previousFlag = previousFlag; + this.newFlag = newFlag; + } + + public boolean isCancelled() { + return this.cancelled; + } + + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + public GamePlayer getPlayer() { + return this.player; + } + + public PlayerFlag getNewFlag() { + return this.newFlag; + } + + public PlayerFlag getPreviousFlag() { + return this.previousFlag; + } + + @NotNull + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/src/main/java/com/softwarerat/API/listener/BuildBreakListener.java b/src/main/java/com/softwarerat/API/event/listener/BuildBreakListener.java similarity index 92% rename from src/main/java/com/softwarerat/API/listener/BuildBreakListener.java rename to src/main/java/com/softwarerat/API/event/listener/BuildBreakListener.java index fc86572..cf935ae 100644 --- a/src/main/java/com/softwarerat/API/listener/BuildBreakListener.java +++ b/src/main/java/com/softwarerat/API/event/listener/BuildBreakListener.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.listener; +package com.softwarerat.API.event.listener; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/softwarerat/API/listener/ChatListener.java b/src/main/java/com/softwarerat/API/event/listener/ChatListener.java similarity index 54% rename from src/main/java/com/softwarerat/API/listener/ChatListener.java rename to src/main/java/com/softwarerat/API/event/listener/ChatListener.java index a651bd9..05c470b 100644 --- a/src/main/java/com/softwarerat/API/listener/ChatListener.java +++ b/src/main/java/com/softwarerat/API/event/listener/ChatListener.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.listener; +package com.softwarerat.API.event.listener; // Chat Listener public class ChatListener { diff --git a/src/main/java/com/softwarerat/API/listener/JoinListener.java b/src/main/java/com/softwarerat/API/event/listener/JoinListener.java similarity index 52% rename from src/main/java/com/softwarerat/API/listener/JoinListener.java rename to src/main/java/com/softwarerat/API/event/listener/JoinListener.java index ff79e95..8b01b5c 100644 --- a/src/main/java/com/softwarerat/API/listener/JoinListener.java +++ b/src/main/java/com/softwarerat/API/event/listener/JoinListener.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.listener; +package com.softwarerat.API.event.listener; // Join Listener public class JoinListener { diff --git a/src/main/java/com/softwarerat/API/listener/LobbyInventoryClickListener.java b/src/main/java/com/softwarerat/API/event/listener/LobbyInventoryClickListener.java similarity index 89% rename from src/main/java/com/softwarerat/API/listener/LobbyInventoryClickListener.java rename to src/main/java/com/softwarerat/API/event/listener/LobbyInventoryClickListener.java index 0713894..cc5b474 100644 --- a/src/main/java/com/softwarerat/API/listener/LobbyInventoryClickListener.java +++ b/src/main/java/com/softwarerat/API/event/listener/LobbyInventoryClickListener.java @@ -1,4 +1,4 @@ -package com.softwarerat.API.listener; +package com.softwarerat.API.event.listener; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/softwarerat/API/listener/LobbyJoinListener.java b/src/main/java/com/softwarerat/API/event/listener/LobbyJoinListener.java similarity index 97% rename from src/main/java/com/softwarerat/API/listener/LobbyJoinListener.java rename to src/main/java/com/softwarerat/API/event/listener/LobbyJoinListener.java index 00512ca..eb4b635 100644 --- a/src/main/java/com/softwarerat/API/listener/LobbyJoinListener.java +++ b/src/main/java/com/softwarerat/API/event/listener/LobbyJoinListener.java @@ -1,16 +1,17 @@ -package com.softwarerat.API.listener; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import com.softwarerat.API.builder.SpigotInventory; -import com.softwarerat.API.builder.SpigotItem; -import com.softwarerat.API.builder.SpigotUI; +package com.softwarerat.API.event.listener; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.ChatColor; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import com.softwarerat.API.builder.SpigotInventory; +import com.softwarerat.API.builder.SpigotItem; +import com.softwarerat.API.builder.SpigotUI; // Lobby join magic including the navigator public class LobbyJoinListener implements Listener{ diff --git a/src/main/java/com/softwarerat/API/event/listener/QuitListener.java b/src/main/java/com/softwarerat/API/event/listener/QuitListener.java new file mode 100644 index 0000000..2999892 --- /dev/null +++ b/src/main/java/com/softwarerat/API/event/listener/QuitListener.java @@ -0,0 +1,4 @@ +package com.softwarerat.API.event.listener; + +public class QuitListener { +} diff --git a/src/main/java/com/softwarerat/API/event/listener/spectator/SpectatorFoodLevelChangeListener.java b/src/main/java/com/softwarerat/API/event/listener/spectator/SpectatorFoodLevelChangeListener.java new file mode 100644 index 0000000..423c34f --- /dev/null +++ b/src/main/java/com/softwarerat/API/event/listener/spectator/SpectatorFoodLevelChangeListener.java @@ -0,0 +1,42 @@ +package com.softwarerat.API.event.listener.spectator; + +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.FoodLevelChangeEvent; + +import com.softwarerat.API.data.player.PlayerManager; + + + +public class SpectatorFoodLevelChangeListener { + + + private final PlayerManager playerManager; + + + public SpectatorFoodLevelChangeListener(PlayerManager playerManager) { + this.playerManager = playerManager; + } + + + public PlayerManager playerManager() { + return this.playerManager; + } + + @EventHandler + public void onSpectatorFoodLevelChange(FoodLevelChangeEvent event) { + Player player; + HumanEntity humanEntity = event.getEntity(); + if (humanEntity instanceof Player) { + player = (Player)humanEntity; + } else { + return; + } + if (!this.playerManager.getPlayer(player).isSpectator()) + return; + event.setFoodLevel(20); + event.setCancelled(true); + } + +} diff --git a/src/main/java/com/softwarerat/API/gameState/GameState.java b/src/main/java/com/softwarerat/API/gameState/GameState.java deleted file mode 100644 index 5e57a0d..0000000 --- a/src/main/java/com/softwarerat/API/gameState/GameState.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.softwarerat.API.gameState; - - -public enum GameState { - GAME_STATE_LOBBY, - GAME_STATE_INGAME; -} diff --git a/src/main/java/com/softwarerat/API/gameState/IGameState.java b/src/main/java/com/softwarerat/API/gameState/IGameState.java deleted file mode 100644 index 04ae079..0000000 --- a/src/main/java/com/softwarerat/API/gameState/IGameState.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.softwarerat.API.gameState; - -public interface IGameState { - -public void Start(); -public void Stop(); - -} diff --git a/src/main/java/com/softwarerat/API/listener/QuitListener.java b/src/main/java/com/softwarerat/API/listener/QuitListener.java deleted file mode 100644 index 9cee962..0000000 --- a/src/main/java/com/softwarerat/API/listener/QuitListener.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.softwarerat.API.listener; - -public class QuitListener { -} diff --git a/src/main/java/com/softwarerat/GameAPI.java b/src/main/java/com/softwarerat/GameAPI.java index 69205b7..6f10536 100644 --- a/src/main/java/com/softwarerat/GameAPI.java +++ b/src/main/java/com/softwarerat/GameAPI.java @@ -1,16 +1,17 @@ package com.softwarerat; -import com.softwarerat.API.commands.Navigator; -import com.softwarerat.API.data.GameData; -import com.softwarerat.API.location.LocationAPI; -import com.softwarerat.API.prefix.PrefixAPI; -import lombok.Getter; -import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; -import com.softwarerat.API.world.WorldAPI; + +import com.softwarerat.API.data.GameData; +import com.softwarerat.API.data.location.LocationAPI; +import com.softwarerat.API.data.prefix.PrefixAPI; +import com.softwarerat.API.data.world.WorldAPI; + +import lombok.Getter; +import lombok.Setter; @Getter @Setter