From 8e7c82a31d69d8893464ffaf539b5e9626361497 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 14 Aug 2024 16:51:35 +0200 Subject: [PATCH] game stuff --- pom.xml | 16 +++- ...sageUtils.java => SimpleChatMessages.java} | 2 +- .../lunarakai/lunarutils/games/GameArena.java | 94 ++++++++++++++++++ .../lunarutils/games/GameArenaList.java | 96 +++++++++++++++++++ .../lunarutils/games/GameArenaStatus.java | 8 ++ .../lunarutils/games/GameManager.java | 24 +++++ .../lunarutils/games/GameObject.java | 36 +++++++ .../lunarutils/inventory/GUIItem.java | 31 ++++++ .../URIValidation.java} | 4 +- 9 files changed, 305 insertions(+), 6 deletions(-) rename src/main/java/de/lunarakai/lunarutils/chat/{MessageUtils.java => SimpleChatMessages.java} (97%) create mode 100644 src/main/java/de/lunarakai/lunarutils/games/GameArena.java create mode 100644 src/main/java/de/lunarakai/lunarutils/games/GameArenaList.java create mode 100644 src/main/java/de/lunarakai/lunarutils/games/GameArenaStatus.java create mode 100644 src/main/java/de/lunarakai/lunarutils/games/GameManager.java create mode 100644 src/main/java/de/lunarakai/lunarutils/games/GameObject.java create mode 100644 src/main/java/de/lunarakai/lunarutils/inventory/GUIItem.java rename src/main/java/de/lunarakai/lunarutils/{StringUtils.java => other/URIValidation.java} (77%) 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 {