From 81ac63c99834ab6532c72201251946540638ad77 Mon Sep 17 00:00:00 2001 From: oko Date: Fri, 22 Apr 2022 18:09:49 -0700 Subject: [PATCH] A silly little update by a silly little developer --- src/main/java/moe/oko/opennaw/OpenNAW.java | 3 ++ .../moe/oko/opennaw/command/CityCommand.java | 4 +- src/main/java/moe/oko/opennaw/model/City.java | 4 +- .../java/moe/oko/opennaw/model/CityState.java | 8 ++++ .../moe/oko/opennaw/model/action/Action.java | 17 ++++++++ .../model/action/CityAttackAction.java | 22 ++++++++++ .../moe/oko/opennaw/util/ActionLogger.java | 43 +++++++++++++++++++ src/main/resources/config.yml | 2 + src/main/resources/plugin.yml | 3 ++ 9 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 src/main/java/moe/oko/opennaw/model/CityState.java create mode 100644 src/main/java/moe/oko/opennaw/model/action/Action.java create mode 100644 src/main/java/moe/oko/opennaw/model/action/CityAttackAction.java create mode 100644 src/main/java/moe/oko/opennaw/util/ActionLogger.java create mode 100644 src/main/resources/config.yml diff --git a/src/main/java/moe/oko/opennaw/OpenNAW.java b/src/main/java/moe/oko/opennaw/OpenNAW.java index 334650b..cf5a983 100644 --- a/src/main/java/moe/oko/opennaw/OpenNAW.java +++ b/src/main/java/moe/oko/opennaw/OpenNAW.java @@ -1,5 +1,6 @@ package moe.oko.opennaw; +import moe.oko.opennaw.command.CityCommand; import moe.oko.opennaw.command.NationCommand; import moe.oko.opennaw.util.ChatHandler; import moe.oko.opennaw.util.CityHandler; @@ -34,12 +35,14 @@ public final class OpenNAW extends JavaPlugin { instance = this; this.luckPerms = getServer().getServicesManager().load(LuckPerms.class); nationHandler = new NationHandler(); + cityHandler = new CityHandler(); groupHandler = new GroupHandler(this.luckPerms); info("OpenNAW is enabled!"); // Register Commands & Events this.getCommand("nation").setExecutor(new NationCommand()); + this.getCommand("city").setExecutor(new CityCommand()); getServer().getPluginManager().registerEvents(new ChatHandler(), this); } diff --git a/src/main/java/moe/oko/opennaw/command/CityCommand.java b/src/main/java/moe/oko/opennaw/command/CityCommand.java index 6869645..8c3b010 100644 --- a/src/main/java/moe/oko/opennaw/command/CityCommand.java +++ b/src/main/java/moe/oko/opennaw/command/CityCommand.java @@ -27,19 +27,21 @@ public class CityCommand implements TabExecutor { var location = ((Player) sender).getLocation(); OpenNAW.getInstance().getCityHandler().addCity(args[1], args[2], location); sender.sendMessage("Created city " + args[1] + " at " + location.getBlockX() + " " + location.getBlockY() + " " + location.getBlockZ()); + return true; } case "remove": { OpenNAW.getInstance().getCityHandler().removeCity(args[1]); sender.sendMessage("Removed city " + args[1]); + return true; } case "list": { final var msg = cityList.size() == 0 ? "There are no cities" : "There are " + cityList.size() + " cities: " + cityList; sender.sendMessage(msg); + return true; } } - return true; } diff --git a/src/main/java/moe/oko/opennaw/model/City.java b/src/main/java/moe/oko/opennaw/model/City.java index c83a2fa..0f156ce 100644 --- a/src/main/java/moe/oko/opennaw/model/City.java +++ b/src/main/java/moe/oko/opennaw/model/City.java @@ -5,6 +5,7 @@ import org.bukkit.Location; public class City { private String name; private String resource; + private CityState state; private Nation owner; private Location point; private short health; @@ -13,8 +14,9 @@ public class City { this.name = name; this.resource = resource; this.owner = null; + this.state = CityState.NORMAL; this.point = location; - this.health = 500; + this.health = 300; } public String getName() { diff --git a/src/main/java/moe/oko/opennaw/model/CityState.java b/src/main/java/moe/oko/opennaw/model/CityState.java new file mode 100644 index 0000000..a614f05 --- /dev/null +++ b/src/main/java/moe/oko/opennaw/model/CityState.java @@ -0,0 +1,8 @@ +package moe.oko.opennaw.model; + +public enum CityState { + + NORMAL, + + SIEGE +} diff --git a/src/main/java/moe/oko/opennaw/model/action/Action.java b/src/main/java/moe/oko/opennaw/model/action/Action.java new file mode 100644 index 0000000..56522e6 --- /dev/null +++ b/src/main/java/moe/oko/opennaw/model/action/Action.java @@ -0,0 +1,17 @@ +package moe.oko.opennaw.model.action; + +public abstract class Action { + public long timeOfAction; + + public boolean cancelled; + + public long timeOfAction() { + return timeOfAction; + } + public boolean isCancelled() { + return cancelled; + } + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} diff --git a/src/main/java/moe/oko/opennaw/model/action/CityAttackAction.java b/src/main/java/moe/oko/opennaw/model/action/CityAttackAction.java new file mode 100644 index 0000000..170fd1d --- /dev/null +++ b/src/main/java/moe/oko/opennaw/model/action/CityAttackAction.java @@ -0,0 +1,22 @@ +package moe.oko.opennaw.model.action; + +import moe.oko.opennaw.model.City; +import org.bukkit.OfflinePlayer; + +public class CityAttackAction extends Action{ + public static final long DELAY = 10000L; + public OfflinePlayer player; + + public OfflinePlayer getPlayer() { + return player; + } + + public CityAttackAction(OfflinePlayer player, City city) { + this.timeOfAction = System.currentTimeMillis(); + this.player = player; + } + + public void completion() { + + } +} diff --git a/src/main/java/moe/oko/opennaw/util/ActionLogger.java b/src/main/java/moe/oko/opennaw/util/ActionLogger.java new file mode 100644 index 0000000..ffdef2e --- /dev/null +++ b/src/main/java/moe/oko/opennaw/util/ActionLogger.java @@ -0,0 +1,43 @@ +package moe.oko.opennaw.util; + +import moe.oko.opennaw.OpenNAW; +import moe.oko.opennaw.model.action.Action; +import moe.oko.opennaw.model.action.CityAttackAction; +import org.bukkit.Bukkit; + +import java.util.HashMap; +import java.util.UUID; + +public class ActionLogger { + HashMap actionByUuid = new HashMap<>(); + + public ActionLogger() { + } + + public boolean tryAction(Action action) { + if(action instanceof CityAttackAction) { + //City attack logic + if(enoughTimeElapsed(action.timeOfAction, CityAttackAction.DELAY)) { + CityAttackAction CAA = (CityAttackAction) action; + if (actionByUuid.containsKey(CAA.getPlayer().getUniqueId())) { + actionByUuid.remove(CAA.getPlayer().getUniqueId()); + } + actionByUuid.put(CAA.getPlayer().getUniqueId(), action); + Bukkit.getScheduler().scheduleSyncDelayedTask(OpenNAW.getInstance(), () -> { + var actionCallback = actionByUuid.get(CAA.getPlayer().getUniqueId()); + if (!actionCallback.isCancelled()) { + CAA.completion(); + } + actionByUuid.remove(CAA.getPlayer().getUniqueId()); + }, CityAttackAction.DELAY); + return true; + } + return false; + } + return false; + } + + private boolean enoughTimeElapsed(long timestamp, long delay) { + return (System.currentTimeMillis() - timestamp) > delay; + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..7ee6f17 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,2 @@ +# OpenNAW Configuration + diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 79302b2..03c4ad6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -10,3 +10,6 @@ commands: nation: description: Manages nations usage: / + city: + description: Manages cities + usage: /