diff --git a/pom.xml b/pom.xml
index b13933e..2649a2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
de.lunarakai
LunarUtils
- 0.0.1
+ 0.0.2
jar
LunarUtils
@@ -24,8 +24,8 @@
maven-compiler-plugin
3.8.1
- ${java.version}
- ${java.version}
+ 14
+ 14
@@ -59,6 +59,10 @@
sonatype
https://oss.sonatype.org/content/groups/public/
+
+ brokkonaut
+ https://www.iani.de/nexus/content/groups/public
+
@@ -68,5 +72,11 @@
1.21-R0.1-SNAPSHOT
provided
+
+ de.iani.cubeside
+ CubesideUtilsBukkit
+ 1.16-SNAPSHOT
+ compile
+
diff --git a/src/main/java/de/lunarakai/lunarutils/chat/MessageUtils.java b/src/main/java/de/lunarakai/lunarutils/chat/SimpleChatMessages.java
similarity index 97%
rename from src/main/java/de/lunarakai/lunarutils/chat/MessageUtils.java
rename to src/main/java/de/lunarakai/lunarutils/chat/SimpleChatMessages.java
index 7598da7..8449f29 100644
--- a/src/main/java/de/lunarakai/lunarutils/chat/MessageUtils.java
+++ b/src/main/java/de/lunarakai/lunarutils/chat/SimpleChatMessages.java
@@ -5,7 +5,7 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.entity.Player;
-public abstract class MessageUtils {
+public abstract class SimpleChatMessages {
static Pattern langKeyPattern = Pattern.compile("^\\w+\\.\\w+\\.\\w+$");
diff --git a/src/main/java/de/lunarakai/lunarutils/games/GameArena.java b/src/main/java/de/lunarakai/lunarutils/games/GameArena.java
new file mode 100644
index 0000000..98107d9
--- /dev/null
+++ b/src/main/java/de/lunarakai/lunarutils/games/GameArena.java
@@ -0,0 +1,94 @@
+package de.lunarakai.lunarutils.games;
+
+import com.google.common.base.Preconditions;
+import java.util.UUID;
+import org.bukkit.Location;
+import org.bukkit.block.BlockFace;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.java.JavaPlugin;
+
+public class GameArena {
+ private final T plugin;
+ private final String name;
+ private final Location location;
+ private BlockFace orientation;
+ private GameArenaStatus gameArenaStatus = GameArenaStatus.INACTIVE;
+ private Player currentPlayer;
+
+ public GameArena(T plugin, ConfigurationSection arenaSection) {
+ this.plugin = plugin;
+ this.name = Preconditions.checkNotNull(arenaSection.getString("name"));
+ this.location = Preconditions.checkNotNull(arenaSection.getLocation("location"));
+ }
+
+ public GameArena(T plugin, String name, Location location, BlockFace orientation) {
+ this.plugin = plugin;
+ this.name = Preconditions.checkNotNull(name, "name");
+ this.location = Preconditions.checkNotNull(location, "location");
+ }
+
+ public void save(ConfigurationSection arenaSection) {
+ arenaSection.set("name", name);
+ arenaSection.set("location", location);
+ arenaSection.set("orientation", orientation);
+ }
+
+ public void startNewGame() {
+ }
+
+ public void addJoiningPlayer(Player player) {
+ Preconditions.checkNotNull(player);
+ Preconditions.checkState(gameArenaStatus == GameArenaStatus.INACTIVE);
+ this.gameArenaStatus = GameArenaStatus.PRESTART;
+ this.currentPlayer = player;
+ }
+
+ public void removePlayer() {
+ this.gameArenaStatus = GameArenaStatus.INACTIVE;
+ this.currentPlayer = null;
+ }
+
+ public boolean isTooFarAway(Player player) {
+ return false;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean hasPlayer() {
+ return currentPlayer != null;
+ }
+
+ public Player getCurrentPlayer() {
+ return currentPlayer;
+ }
+
+ public Location getLocation() {
+ return location;
+ }
+
+ public GameArenaStatus getArenaStatus() {
+ return gameArenaStatus;
+ }
+
+ public void setArenaStatus(GameArenaStatus gameArenaStatus) {
+ this.gameArenaStatus = gameArenaStatus;
+ }
+
+ public Plugin getPlugin() {
+ return plugin;
+ }
+
+ private int getRotationYaw() {
+ return switch (orientation) {
+ case EAST -> 90;
+ case SOUTH -> 180;
+ case WEST -> 270;
+ default -> 0;
+ };
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/lunarakai/lunarutils/games/GameArenaList.java b/src/main/java/de/lunarakai/lunarutils/games/GameArenaList.java
new file mode 100644
index 0000000..d9680ae
--- /dev/null
+++ b/src/main/java/de/lunarakai/lunarutils/games/GameArenaList.java
@@ -0,0 +1,96 @@
+package de.lunarakai.lunarutils.games;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.UUID;
+import java.util.logging.Level;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.InvalidConfigurationException;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+public class GameArenaList {
+ private static final String ARENAS_FILENAME = "arenas.yml";
+ private final Plugin plugin;
+ private File arenaFile;
+
+ private final HashMap arenas;
+ private final HashMap playersInArena;
+
+ public GameArenaList(T plugin) {
+ this.plugin = plugin;
+ this.arenas = new HashMap<>();
+ this.playersInArena = new HashMap<>();
+ }
+
+ public void load() {
+ arenas.clear();
+ if(!this.arenaFile.isFile()) {
+ return;
+ }
+ YamlConfiguration conf = new YamlConfiguration();
+ try {
+ conf.load(this.arenaFile);
+ } catch (IOException | InvalidConfigurationException e) {
+ plugin.getLogger().log(Level.SEVERE, "Could not load arenas file", e);
+ }
+ ConfigurationSection arenasSection = conf.getConfigurationSection("arenas");
+ if(arenasSection != null) {
+ for (String arenaName : arenasSection.getKeys(false)) {
+ ConfigurationSection arenaSection = arenasSection.getConfigurationSection(arenaName);
+ if(arenaSection != null) {
+ GameArena gameArena = new GameArena(plugin, arenaSection);
+ this.arenas.put(gameArena.getName(), gameArena);
+ }
+ }
+ }
+ }
+
+ public void save() {
+ YamlConfiguration conf = new YamlConfiguration();
+ ConfigurationSection arenasSection = conf.createSection("arenas");
+ int i = 0;
+ for(GameArena gameArena : this.arenas.values()) {
+ gameArena.save(arenasSection.createSection(Integer.toString(i++)));
+ }
+ this.arenaFile.getParentFile().mkdirs();
+ try {
+ conf.save(this.arenaFile);
+ } catch (IOException e) {
+ plugin.getLogger().log(Level.SEVERE, "Could not save arenas file", e);
+ }
+ }
+
+ public GameArena getArena(String name) {
+ return arenas.get(name);
+ }
+
+ public Collection getArnas() {
+ return arenas.values();
+ }
+
+ public void addArena(GameArena gameArena) {
+ this.arenas.put(gameArena.getName(), gameArena);
+ save();
+ }
+
+ public void setArenaForPlayer(Player player, GameArena gameArena) {
+ if(gameArena != null) {
+ playersInArena.put(player.getUniqueId(), gameArena);
+ } else {
+ playersInArena.remove(player.getUniqueId());
+ }
+ }
+
+ public GameArena getPlayerArena(Player player) {
+ return playersInArena.get(player.getUniqueId());
+ }
+
+ public void removeArena(GameArena gameArena) {
+ arenas.remove(gameArena.getName());
+ save();
+ }
+}
diff --git a/src/main/java/de/lunarakai/lunarutils/games/GameArenaStatus.java b/src/main/java/de/lunarakai/lunarutils/games/GameArenaStatus.java
new file mode 100644
index 0000000..4fa01d4
--- /dev/null
+++ b/src/main/java/de/lunarakai/lunarutils/games/GameArenaStatus.java
@@ -0,0 +1,8 @@
+package de.lunarakai.lunarutils.games;
+
+public enum GameArenaStatus {
+ INACTIVE,
+ PRESTART,
+ PLAYING,
+ COMPLETED
+}
diff --git a/src/main/java/de/lunarakai/lunarutils/games/GameManager.java b/src/main/java/de/lunarakai/lunarutils/games/GameManager.java
new file mode 100644
index 0000000..009f558
--- /dev/null
+++ b/src/main/java/de/lunarakai/lunarutils/games/GameManager.java
@@ -0,0 +1,24 @@
+package de.lunarakai.lunarutils.games;
+
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+public class GameManager {
+ private final Plugin plugin;
+
+ public GameManager(T plugin) {
+ this.plugin = plugin;
+ }
+
+ public void joinArena(Player player, GameArena gameArena) {
+ }
+
+ public void leaveArena(Player player, boolean message, boolean reset) {
+ }
+
+ public void startGame(Player player) {
+ }
+
+ public void clearAllArenas() {
+ }
+}
diff --git a/src/main/java/de/lunarakai/lunarutils/games/GameObject.java b/src/main/java/de/lunarakai/lunarutils/games/GameObject.java
new file mode 100644
index 0000000..cbc91b8
--- /dev/null
+++ b/src/main/java/de/lunarakai/lunarutils/games/GameObject.java
@@ -0,0 +1,36 @@
+package de.lunarakai.lunarutils.games;
+
+import org.bukkit.Location;
+import org.bukkit.World;
+
+public abstract class GameObject {
+ private String name;
+ private World world;
+ private Location location;
+
+ public abstract void spawn(Location location);
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public World getWorld() {
+ return world;
+ }
+
+ public void setWorld(World world) {
+ this.world = world;
+ }
+
+ public Location getLocation() {
+ return location;
+ }
+
+ public void setLocation(Location location) {
+ this.location = location;
+ }
+}
diff --git a/src/main/java/de/lunarakai/lunarutils/inventory/GUIItem.java b/src/main/java/de/lunarakai/lunarutils/inventory/GUIItem.java
new file mode 100644
index 0000000..c6e3c69
--- /dev/null
+++ b/src/main/java/de/lunarakai/lunarutils/inventory/GUIItem.java
@@ -0,0 +1,31 @@
+package de.lunarakai.lunarutils.inventory;
+
+import de.iani.cubesideutils.bukkit.items.ItemBuilder;
+import net.kyori.adventure.text.Component;
+import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.inventory.ItemFlag;
+import org.bukkit.inventory.ItemStack;
+
+public class GUIItem {
+ public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, Component.text(" "), true, true);
+
+ public static ItemStack createGuiItem(Material material, Component name, String... lore) {
+ return createGuiItem(material, name, false, lore);
+ }
+
+ public static ItemStack createGuiItem(Material material, Component name, boolean glowing, boolean showTooltip, String... lore) {
+ ItemBuilder builder = ItemBuilder.fromMaterial(material).displayName(name).lore(lore);
+ if (glowing) {
+ builder.enchantment(Enchantment.UNBREAKING, 1, true).flag(ItemFlag.HIDE_ENCHANTS);
+ }
+ if (!showTooltip) {
+ builder.flag(ItemFlag.HIDE_ADDITIONAL_TOOLTIP);
+ }
+ return builder.build();
+ }
+
+ public static ItemStack createGuiItem(Material material, Component name, boolean glowing, String... lore) {
+ return createGuiItem(material, name, glowing, true, lore);
+ }
+}
diff --git a/src/main/java/de/lunarakai/lunarutils/StringUtils.java b/src/main/java/de/lunarakai/lunarutils/other/URIValidation.java
similarity index 77%
rename from src/main/java/de/lunarakai/lunarutils/StringUtils.java
rename to src/main/java/de/lunarakai/lunarutils/other/URIValidation.java
index f137958..07776b2 100644
--- a/src/main/java/de/lunarakai/lunarutils/StringUtils.java
+++ b/src/main/java/de/lunarakai/lunarutils/other/URIValidation.java
@@ -1,8 +1,8 @@
-package de.lunarakai.lunarutils;
+package de.lunarakai.lunarutils.other;
import java.net.URL;
-public abstract class StringUtils {
+public abstract class URIValidation {
public static boolean isValidURL(String urlString) {
try {