From 56753fc7804baf0199df0346cdad31112dc28191 Mon Sep 17 00:00:00 2001 From: Cola Date: Wed, 30 Jun 2021 15:37:00 +0100 Subject: [PATCH 01/22] v4.2.0 - 1.17, Java 16 and Aikar Commands --- pom.xml | 16 ++- .../java/vg/civcraft/mc/citadel/Citadel.java | 47 ++++++- .../mc/citadel/CitadelConfigManager.java | 8 +- .../civcraft/mc/citadel/CitadelUtility.java | 2 +- .../mc/citadel/ReinforcementManager.java | 6 +- .../vg/civcraft/mc/citadel/command/Acid.java | 41 +++---- .../command/AdvancedFortification.java | 40 +++--- .../mc/citadel/command/AreaReinforce.java | 51 ++++---- .../civcraft/mc/citadel/command/Bypass.java | 25 ++-- .../civcraft/mc/citadel/command/EasyMode.java | 25 ++-- .../mc/citadel/command/Fortification.java | 36 +++--- .../mc/citadel/command/Information.java | 25 ++-- .../civcraft/mc/citadel/command/Insecure.java | 24 ++-- .../vg/civcraft/mc/citadel/command/Off.java | 24 ++-- .../mc/citadel/command/PatchMode.java | 24 ++-- .../mc/citadel/command/Reinforce.java | 30 ++--- .../mc/citadel/command/ReinforcementsGUI.java | 30 ++--- .../civcraft/mc/citadel/command/Reload.java | 26 ++-- .../mc/citadel/listener/BlockListener.java | 4 +- .../mc/citadel/listener/EntityListener.java | 2 +- .../mc/citadel/listener/ModeListener.java | 20 +-- .../mc/citadel/model/CitadelChunkData.java | 3 +- .../civcraft/mc/citadel/model/CitadelDAO.java | 10 +- .../citadel/model/CitadelSettingManager.java | 23 ++-- .../mc/citadel/model/Reinforcement.java | 2 +- .../playerstate/AbstractPlayerState.java | 6 +- .../mc/citadel/playerstate/PatchState.java | 2 +- .../citadel/playerstate/ReinforcingState.java | 2 +- src/main/resources/plugin.yml | 115 +----------------- 29 files changed, 276 insertions(+), 393 deletions(-) diff --git a/pom.xml b/pom.xml index a2053080..f84058cb 100644 --- a/pom.xml +++ b/pom.xml @@ -13,27 +13,27 @@ vg.civcraft.mc.citadel Citadel jar - 4.1.1 + 4.2.0 Citadel https://github.com/civclassic/Citadel - com.destroystokyo.paper - paper-api - 1.16.4-R0.1-SNAPSHOT + io.papermc.paper + paper + 1.17-R0.1-SNAPSHOT provided vg.civcraft.mc.civmodcore CivModCore - 1.8.2 + 1.9.0 provided vg.civcraft.mc.namelayer NameLayer - 2.14.1 + 2.15.0 provided @@ -49,6 +49,10 @@ codemc-repo https://repo.codemc.io/repository/maven-public/ + + papermc + https://papermc.io/repo/repository/maven-public/ + civ-github-repo https://raw.githubusercontent.com/CivClassic/artifacts/master/ diff --git a/src/main/java/vg/civcraft/mc/citadel/Citadel.java b/src/main/java/vg/civcraft/mc/citadel/Citadel.java index b092dba2..b3727cb2 100644 --- a/src/main/java/vg/civcraft/mc/citadel/Citadel.java +++ b/src/main/java/vg/civcraft/mc/citadel/Citadel.java @@ -3,6 +3,19 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; +import vg.civcraft.mc.citadel.command.Acid; +import vg.civcraft.mc.citadel.command.AdvancedFortification; +import vg.civcraft.mc.citadel.command.AreaReinforce; +import vg.civcraft.mc.citadel.command.Bypass; +import vg.civcraft.mc.citadel.command.EasyMode; +import vg.civcraft.mc.citadel.command.Fortification; +import vg.civcraft.mc.citadel.command.Information; +import vg.civcraft.mc.citadel.command.Insecure; +import vg.civcraft.mc.citadel.command.Off; +import vg.civcraft.mc.citadel.command.PatchMode; +import vg.civcraft.mc.citadel.command.Reinforce; +import vg.civcraft.mc.citadel.command.ReinforcementsGUI; +import vg.civcraft.mc.citadel.command.Reload; import vg.civcraft.mc.citadel.listener.BlockListener; import vg.civcraft.mc.citadel.listener.EntityListener; import vg.civcraft.mc.citadel.listener.InventoryListener; @@ -17,10 +30,11 @@ import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementTypeManager; import vg.civcraft.mc.civmodcore.ACivMod; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.api.BlockBasedChunkMetaView; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.api.ChunkMetaAPI; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedDataObject; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableStorageEngine; +import vg.civcraft.mc.civmodcore.commands.CommandManager; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.BlockBasedChunkMetaView; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.ChunkMetaAPI; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableStorageEngine; public class Citadel extends ACivMod { @@ -38,6 +52,7 @@ public static Citadel getInstance() { private HologramManager holoManager; private CitadelSettingManager settingManager; private CitadelDAO dao; + private CommandManager commandManager; private PlayerStateManager stateManager; @@ -114,7 +129,7 @@ public void onEnable() { Bukkit.shutdown(); return; } - BlockBasedChunkMetaView> chunkMetaData = + BlockBasedChunkMetaView> chunkMetaData = ChunkMetaAPI.registerBlockBasedPlugin(this, () -> new CitadelChunkData(false, dao),dao, true); if (chunkMetaData == null) { logger.severe("Errors setting up chunk metadata API, shutting down"); @@ -134,6 +149,9 @@ public void onEnable() { logger.info("HolographicDisplays is not loaded, no holograms available"); }}); CitadelPermissionHandler.setup(); + commandManager = new CommandManager(this); + commandManager.init(); + registerCommands(); registerListeners(); } @@ -147,4 +165,23 @@ private void registerListeners() { getServer().getPluginManager().registerEvents(new ModeListener(this), this); getServer().getPluginManager().registerEvents(new RedstoneListener(config.getMaxRedstoneDistance()), this); } + + /** + * Registers Aikar commands + */ + private void registerCommands() { + commandManager.registerCommand(new Acid()); + commandManager.registerCommand(new AdvancedFortification()); + commandManager.registerCommand(new AreaReinforce()); + commandManager.registerCommand(new Bypass()); + commandManager.registerCommand(new EasyMode()); + commandManager.registerCommand(new Fortification()); + commandManager.registerCommand(new Information()); + commandManager.registerCommand(new Insecure()); + commandManager.registerCommand(new Off()); + commandManager.registerCommand(new PatchMode()); + commandManager.registerCommand(new Reinforce()); + commandManager.registerCommand(new ReinforcementsGUI()); + commandManager.registerCommand(new Reload()); + } } diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index b64d2deb..09e6ad6a 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -10,12 +10,12 @@ import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementEffect; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; import vg.civcraft.mc.civmodcore.ACivMod; -import vg.civcraft.mc.civmodcore.CoreConfigManager; +import vg.civcraft.mc.civmodcore.config.ConfigParser; import vg.civcraft.mc.civmodcore.dao.ManagedDatasource; -import vg.civcraft.mc.civmodcore.util.ConfigParsing; -import vg.civcraft.mc.civmodcore.util.TextUtil; +import vg.civcraft.mc.civmodcore.utilities.ConfigParsing; +import vg.civcraft.mc.civmodcore.utilities.TextUtil; -public class CitadelConfigManager extends CoreConfigManager { +public class CitadelConfigManager extends ConfigParser { private ManagedDatasource database; private List reinforcementTypes; diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java index c8c79b4e..1ad57f8d 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java @@ -7,7 +7,7 @@ import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.itemHandling.ItemMap; +import vg.civcraft.mc.civmodcore.inventory.items.ItemMap; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.group.Group; diff --git a/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java b/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java index acc40a44..6d5e50bb 100644 --- a/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java @@ -4,9 +4,9 @@ import org.bukkit.block.Block; import vg.civcraft.mc.citadel.model.CitadelChunkData; import vg.civcraft.mc.citadel.model.Reinforcement; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.api.BlockBasedChunkMetaView; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedDataObject; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableStorageEngine; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.BlockBasedChunkMetaView; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableStorageEngine; public class ReinforcementManager { diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Acid.java b/src/main/java/vg/civcraft/mc/citadel/command/Acid.java index a98f1089..56e0ce6f 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Acid.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Acid.java @@ -1,8 +1,10 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import java.util.Iterator; -import java.util.List; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -21,16 +23,15 @@ import vg.civcraft.mc.citadel.events.ReinforcementAcidBlockedEvent; import vg.civcraft.mc.citadel.model.AcidManager; import vg.civcraft.mc.citadel.model.Reinforcement; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils; -import vg.civcraft.mc.civmodcore.util.TextUtil; +import vg.civcraft.mc.civmodcore.utilities.TextUtil; -@CivCommand(id = "ctacid") -public class Acid extends StandaloneCommand { +@CommandAlias("ctacid") +public class Acid extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctacid") + @Description("Removes the block above it if used on an acid block") + public void execute(CommandSender sender) { Player p = (Player) sender; Iterator itr = new BlockIterator(p, 40); // Within 2.5 chunks AcidManager acidMan = Citadel.getInstance().getAcidManager(); @@ -44,38 +45,38 @@ public boolean execute(CommandSender sender, String[] args) { if (!foundAny) { CitadelUtility.sendAndLog(p, ChatColor.RED, "That block is not a valid acid block"); } - return true; + return; } Reinforcement reinforcement = ReinforcementLogic.getReinforcementAt(block.getLocation()); if (reinforcement == null) { CitadelUtility.sendAndLog(p, ChatColor.RED, "That block is not reinforced."); - return true; + return; } if (!reinforcement.hasPermission(p, CitadelPermissionHandler.getAcidblock())) { CitadelUtility.sendAndLog(p, ChatColor.RED, "You do not have sufficient permission to use acid blocks on this group."); - return true; + return; } long neededTime = acidMan.getRemainingAcidMaturationTime(reinforcement); if (neededTime > 0) { CitadelUtility.sendAndLog(p, ChatColor.RED, "That acid block will be mature in " + TextUtil.formatDuration(neededTime, TimeUnit.MILLISECONDS)); - return true; + return; } Block topFace = block.getRelative(BlockFace.UP); if (MaterialUtils.isAir(topFace.getType())) { CitadelUtility.sendAndLog(p, ChatColor.RED, "There is no block above to acid block."); - return true; + return; } Reinforcement topRein = ReinforcementLogic.getReinforcementProtecting(topFace); if (topRein == null) { CitadelUtility.sendAndLog(p, ChatColor.RED, "The block above doesn't have a reinforcement."); - return true; + return; } if (!acidMan.canAcidBlock(reinforcement.getType(), topRein.getType())) { CitadelUtility.sendAndLog(p, ChatColor.RED, reinforcement.getType().getName() + " can not acid away " + topRein.getType().getName()); - return true; + return; } ReinforcementAcidBlockedEvent event = new ReinforcementAcidBlockedEvent(p, reinforcement, topRein); Bukkit.getPluginManager().callEvent(event); @@ -84,7 +85,7 @@ public boolean execute(CommandSender sender, String[] args) { Citadel.getInstance().getLogger().log(Level.INFO, "Acid block event cancelled for acid at " + reinforcement.getLocation()); } - return true; + return; } if (Citadel.getInstance().getConfigManager().logHostileBreaks()) { @@ -101,12 +102,6 @@ public boolean execute(CommandSender sender, String[] args) { topFace.breakNaturally(); } } - return true; - } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); } /** diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java b/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java index 9b348d97..80636eb7 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java @@ -1,5 +1,10 @@ package vg.civcraft.mc.citadel.command; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Syntax; import java.util.ArrayList; import java.util.List; import org.bukkit.ChatColor; @@ -14,82 +19,79 @@ import vg.civcraft.mc.citadel.playerstate.AdvancedFortificationState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; import vg.civcraft.mc.namelayer.group.Group; -@CivCommand(id = "cta") -public class AdvancedFortification extends StandaloneCommand { +@CommandAlias("cta") +public class AdvancedFortification extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/cta ") + @Description("Enters advanced fortification mode or adds configurations to it. Advanced configuration mode allows you to place on different groups with different reinforcement types at once") + public void execute(CommandSender sender, @Optional String targetGroup) { Player player = (Player) sender; PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = stateManager.getState(player); AdvancedFortificationState advFortState = null; if (currentState instanceof AdvancedFortificationState) { advFortState = (AdvancedFortificationState) currentState; - if (args.length == 0) { + if (targetGroup.isEmpty()) { stateManager.setState(player, null); - return true; + return; } } ItemStack mainHand = player.getInventory().getItemInMainHand(); if (mainHand.getType() == Material.AIR) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You need to hold an item in your main hand to specify the block type to reinforce"); - return true; + return; } ItemStack offHand = player.getInventory().getItemInOffHand(); if (offHand.getType() == Material.AIR) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You need to hold a reinforcement item in your off hand"); - return true; + return; } ReinforcementType type = Citadel.getInstance().getReinforcementTypeManager().getByItemStack(offHand); if (type == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You can not reinforce with the item in your off hand"); - return true; + return; } if (!type.canBeReinforced(mainHand.getType())) { CitadelUtility.sendAndLog(player, ChatColor.AQUA, type.getName() + ChatColor.RED + " can not reinforce " + mainHand.getType().name()); - return true; + return; } String groupName = null; - if (args.length == 0) { + if (targetGroup.isEmpty()) { groupName = NameAPI.getGroupManager().getDefaultGroup(player.getUniqueId()); if (groupName == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You don't have a default group and can thus not use this command without specifying a group"); - return true; + return; } } else { - groupName = args[0]; + groupName = targetGroup; } Group group = GroupManager.getGroup(groupName); if (group == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "The group " + groupName + " does not exist."); - return true; + return; } boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(), CitadelPermissionHandler.getReinforce()); if (!hasAccess) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName()); - return true; + return; } if (advFortState == null) { advFortState = new AdvancedFortificationState(player); stateManager.setState(player, advFortState); } advFortState.addSetup(mainHand, type, group); - return true; } - @Override public List tabComplete(CommandSender sender, String[] args) { if (args.length == 0) return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(), diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java index bfe5daf3..014b45a8 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java @@ -1,7 +1,10 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Syntax; import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.block.Block; @@ -12,20 +15,19 @@ import vg.civcraft.mc.citadel.ReinforcementLogic; import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.group.Group; -@CivCommand(id = "ctar") -public class AreaReinforce extends StandaloneCommand { +@CommandAlias("ctar") +public class AreaReinforce extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctar ") + @Description("Using the reinforcement item in your main hand, reinforces an area to your default or a target group.") + public void execute(CommandSender sender, String minX, String minY, String minZ, String maxX, String maxY, String maxZ, @Optional String targetGroup) { if (!(sender instanceof Player)) { sender.sendMessage("Must be a player to perform this command."); - return true; + return; } Player p = (Player) sender; UUID uuid = NameAPI.getUUID(p.getName()); @@ -33,34 +35,33 @@ public boolean execute(CommandSender sender, String[] args) { .getByItemStack(p.getInventory().getItemInMainHand()); if (reinType == null) { CitadelUtility.sendAndLog(p, ChatColor.RED, "The item you are holding is not a possible reinforcement"); - return true; + return; } String groupName = null; - if (args.length == 6) { + if (targetGroup.isEmpty()) { groupName = NameAPI.getGroupManager().getDefaultGroup(uuid); if (groupName == null) { CitadelUtility.sendAndLog(p, ChatColor.RED, "You need to set a default group \n Use /nlsdg to do so"); - return true; + return; } } else { - groupName = args[0]; + groupName = targetGroup; } Group group = GroupManager.getGroup(groupName); if (group == null) { CitadelUtility.sendAndLog(p, ChatColor.RED, "That group does not exist."); - return true; + return; } // no additional group permission check here because the player is // admin/op anyway int xMin, yMin, zMin, xMax, yMax, zMax; - int offset = args.length == 7 ? 1 : 0; try { - int x1 = Integer.parseInt(args[offset]); - int y1 = Integer.parseInt(args[offset + 1]); - int z1 = Integer.parseInt(args[offset + 2]); - int x2 = Integer.parseInt(args[offset + 3]); - int y2 = Integer.parseInt(args[offset + 4]); - int z2 = Integer.parseInt(args[offset + 5]); + int x1 = Integer.parseInt(minX); + int y1 = Integer.parseInt(minY); + int z1 = Integer.parseInt(minZ); + int x2 = Integer.parseInt(maxX); + int y2 = Integer.parseInt(maxY); + int z2 = Integer.parseInt(maxZ); xMin = Math.min(x1, x2); yMin = Math.min(y1, y2); zMin = Math.min(z1, z2); @@ -69,7 +70,7 @@ public boolean execute(CommandSender sender, String[] args) { zMax = Math.max(z1, z2); } catch (NumberFormatException e) { CitadelUtility.sendAndLog(p, ChatColor.RED, "One of the arguments you provided was not a number"); - return false; + return; } int count = 0; for (int x = xMin; x <= xMax; x++) { @@ -93,11 +94,5 @@ public boolean execute(CommandSender sender, String[] args) { } CitadelUtility.sendAndLog(p, ChatColor.GREEN, "Successfully created " + count + "reinforcements"); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java b/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java index 8e480e21..76a6ede4 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java @@ -1,21 +1,22 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelUtility; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; -@CivCommand(id = "ctb") -public class Bypass extends StandaloneCommand { +@CommandAlias("ctb") +public class Bypass extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctb") + @Description("Toggles bypass state. In bypass state you can break blocks reinforced on groups you have access to in a single break") + public void execute(CommandSender sender) { Player player = (Player) sender; BooleanSetting setting = Citadel.getInstance().getSettingManager().getBypass(); boolean enabled = setting.getValue(player); @@ -26,11 +27,5 @@ public boolean execute(CommandSender sender, String[] args) { "Bypass mode has been enabled. You will be able to break reinforced blocks if you are on the group."); } setting.toggleValue(player.getUniqueId()); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java b/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java index da0a5bf5..aa8435df 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java @@ -1,21 +1,22 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelUtility; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; -@CivCommand(id = "cte") -public class EasyMode extends StandaloneCommand { +@CommandAlias("cte") +public class EasyMode extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/cte") + @Description("Reinforces to your default group using materials from your offhand.") + public void execute(CommandSender sender) { Player player = (Player) sender; BooleanSetting setting = Citadel.getInstance().getSettingManager().getEasyMode(); boolean enabled = setting.getValue(player); @@ -26,11 +27,5 @@ public boolean execute(CommandSender sender, String[] args) { "Easy reinforcing mode has been enabled. You will be able to reinforce to your default group by placing blocks while having a reinforcement material in your off hand."); } setting.toggleValue(player.getUniqueId()); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java b/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java index 9e9198a3..e14cc2e2 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java @@ -1,5 +1,10 @@ package vg.civcraft.mc.citadel.command; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Syntax; import java.util.ArrayList; import java.util.List; import org.bukkit.ChatColor; @@ -12,70 +17,67 @@ import vg.civcraft.mc.citadel.playerstate.FortificationState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; import vg.civcraft.mc.namelayer.group.Group; -@CivCommand(id = "ctf") -public class Fortification extends StandaloneCommand { +@CommandAlias("ctf") +public class Fortification extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctf ") + @Description("Enters fortification mode. All blocks placed in fortification mode will automatically be reinforced. If no group is given, your default group will be used") + public void execute(CommandSender sender, @Optional String targetGroup) { Player player = (Player) sender; PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = stateManager.getState(player); - if (args.length == 0 && currentState instanceof FortificationState) { + if (targetGroup.isEmpty() && currentState instanceof FortificationState) { stateManager.setState(player, null); - return true; + return; } ReinforcementType type = Citadel.getInstance().getReinforcementTypeManager() .getByItemStack(player.getInventory().getItemInMainHand()); if (type == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You can not reinforce with this item"); stateManager.setState(player, null); - return true; + return; } String groupName = null; - if (args.length == 0) { + if (targetGroup.isEmpty()) { groupName = NameAPI.getGroupManager().getDefaultGroup(player.getUniqueId()); if (groupName == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You need to fortify to a group! Try /fortify groupname. \n Or use /create groupname if you don't have a group yet."); - return true; + return; } } else { - groupName = args[0]; + groupName = targetGroup; } Group group = GroupManager.getGroup(groupName); if (group == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "The group " + groupName + " does not exist."); stateManager.setState(player, null); - return true; + return; } boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(), CitadelPermissionHandler.getReinforce()); if (!hasAccess) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName()); stateManager.setState(player, null); - return true; + return; } if (currentState instanceof FortificationState) { FortificationState fortState = (FortificationState) currentState; if (fortState.getGroup() == group && fortState.getType() == type) { stateManager.setState(player, null); - return true; + return; } } stateManager.setState(player, new FortificationState(player, type, group)); - return true; } - @Override public List tabComplete(CommandSender sender, String[] args) { if (args.length == 0) return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(), diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Information.java b/src/main/java/vg/civcraft/mc/citadel/command/Information.java index b91b8e8f..f9dd5829 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Information.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Information.java @@ -1,30 +1,25 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; -@CivCommand(id = "cti") -public class Information extends StandaloneCommand { +@CommandAlias("cti") +public class Information extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/cti") + @Description("Enters information mode. Interacting with blocks in information mode will show information on their reinforcement") + public void execute(CommandSender sender) { Player player = (Player) sender; BooleanSetting ctiSetting = Citadel.getInstance().getSettingManager().getInformationMode(); ctiSetting.toggleValue(player.getUniqueId()); player.sendMessage(ChatColor.GREEN + "Toggled reinforcement information mode " + ChatColor.YELLOW + (ctiSetting.getValue(player.getUniqueId()) ? "on" : "off")); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java b/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java index cd59de0a..59229256 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java @@ -1,21 +1,22 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState; import vg.civcraft.mc.citadel.playerstate.InsecureState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -@CivCommand(id = "ctin") -public class Insecure extends StandaloneCommand { +@CommandAlias("ctin") +public class Insecure extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctin") + @Description("Enters insecure mode. Interacting with containers in insecure mode will switch their insecure flag. Insecure containers can interact with hoppers reinforced on a different group. All containers are secure by default") + public void execute(CommandSender sender) { Player player = (Player) sender; PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player); @@ -24,12 +25,5 @@ public boolean execute(CommandSender sender, String[] args) { } else { stateManager.setState(player, new InsecureState(player)); } - return true; } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); - } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Off.java b/src/main/java/vg/civcraft/mc/citadel/command/Off.java index 78ab6924..ff419004 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Off.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Off.java @@ -1,20 +1,21 @@ package vg.civcraft.mc.citadel.command; -import java.util.ArrayList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import java.util.UUID; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.model.CitadelSettingManager; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -@CivCommand(id = "cto") -public class Off extends StandaloneCommand { +@CommandAlias("cto") +public class Off extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/cto") + @Description("Leaves all reinforcement modes") + public void execute(CommandSender sender) { Citadel.getInstance().getStateManager().setState((Player) sender, null); CitadelSettingManager settings = Citadel.getInstance().getSettingManager(); UUID uuid = ((Player) sender).getUniqueId(); @@ -24,12 +25,5 @@ public boolean execute(CommandSender sender, String[] args) { if (settings.getBypass().getValue(uuid) && settings.shouldCtoDisableCtb(uuid)) { settings.getBypass().setValue(uuid, false); } - return true; } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new ArrayList<>(); - } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java b/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java index b9e9ccf5..5cdc726a 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java @@ -1,21 +1,22 @@ package vg.civcraft.mc.citadel.command; -import java.util.LinkedList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState; import vg.civcraft.mc.citadel.playerstate.PatchState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -@CivCommand(id = "ctp") -public class PatchMode extends StandaloneCommand{ +@CommandAlias("ctp") +public class PatchMode extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctp ") + @Description("Enters patch mode, which allows you to repair reinforcements. Note that repairing reinforcements will also reset their maturation cycle") + public void execute(CommandSender sender) { Player player = (Player) sender; PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player); @@ -24,12 +25,5 @@ public boolean execute(CommandSender sender, String[] args) { } else { stateManager.setState(player, new PatchState(player)); } - return true; } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new LinkedList<>(); - } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java index 62fdbe62..e3e29556 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java @@ -1,5 +1,10 @@ package vg.civcraft.mc.citadel.command; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Syntax; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -12,58 +17,55 @@ import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; import vg.civcraft.mc.citadel.playerstate.ReinforcingState; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; import vg.civcraft.mc.namelayer.group.Group; -@CivCommand(id = "ctr") -public class Reinforce extends StandaloneCommand { +@CommandAlias("ctr") +public class Reinforce extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/ctr ") + @Description("Enters reinforcing mode. Interacting with blocks in reinforcing mode will reinforce them or modify their reinforcement") + public void execute(CommandSender sender, @Optional String targetGroup) { Player player = (Player) sender; UUID uuid = NameAPI.getUUID(player.getName()); String groupName = null; - if (args.length == 0) { + if (targetGroup == null) { groupName = NameAPI.getGroupManager().getDefaultGroup(uuid); if (groupName == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You need to reinforce to a group! Try /reinforce groupname. \n Or use /create groupname if you don't have a group yet."); - return true; + return; } } else { - groupName = args[0]; + groupName = targetGroup; } PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); Group group = GroupManager.getGroup(groupName); if (group == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, "The group " + groupName + " does not exist."); stateManager.setState(player, null); - return true; + return; } boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(), CitadelPermissionHandler.getReinforce()); if (!hasAccess) { CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName()); stateManager.setState(player, null); - return true; + return; } AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player); if (currentState instanceof ReinforcingState) { ReinforcingState reinState = (ReinforcingState) currentState; if (reinState.getGroup() == group) { stateManager.setState(player, null); - return true; + return; } } stateManager.setState(player, new ReinforcingState(player, group)); - return true; } - @Override public List tabComplete(CommandSender sender, String[] args) { if (!(sender instanceof Player)) return null; diff --git a/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java b/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java index 38e74908..2ecd651b 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java @@ -1,5 +1,9 @@ package vg.civcraft.mc.citadel.command; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import java.text.DecimalFormat; import java.util.Collections; import java.util.LinkedList; @@ -11,21 +15,20 @@ import org.bukkit.inventory.ItemStack; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; +import vg.civcraft.mc.civmodcore.inventory.gui.DecorationStack; +import vg.civcraft.mc.civmodcore.inventory.gui.IClickable; +import vg.civcraft.mc.civmodcore.inventory.gui.MultiPageView; import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils; -import vg.civcraft.mc.civmodcore.inventorygui.DecorationStack; -import vg.civcraft.mc.civmodcore.inventorygui.IClickable; -import vg.civcraft.mc.civmodcore.inventorygui.MultiPageView; -import vg.civcraft.mc.civmodcore.util.TextUtil; +import vg.civcraft.mc.civmodcore.utilities.TextUtil; -@CivCommand(id = "ctdl") -public class ReinforcementsGUI extends StandaloneCommand { +@CommandAlias("ctdl") +public class ReinforcementsGUI extends BaseCommand { private DecimalFormat format = new DecimalFormat("##.##"); - @Override - public boolean execute(CommandSender sender, String[] arg1) { + @Syntax("/ctdl") + @Description("Opens a GUI displaying all reinforcement materials") + public void execute(CommandSender sender) { List types = new LinkedList<>( Citadel.getInstance().getReinforcementTypeManager().getAllTypes()); // sort ascending by health @@ -50,12 +53,5 @@ public boolean execute(CommandSender sender, String[] arg1) { } MultiPageView pageView = new MultiPageView((Player) sender, clicks, ChatColor.BLUE + "Reinforcements", true); pageView.showScreen(); - return true; } - - @Override - public List tabComplete(CommandSender arg0, String[] arg1) { - return null; - } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Reload.java b/src/main/java/vg/civcraft/mc/citadel/command/Reload.java index 4c8d1f4a..30d388b2 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Reload.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Reload.java @@ -1,26 +1,22 @@ package vg.civcraft.mc.citadel.command; -import java.util.LinkedList; -import java.util.List; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandPermission; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import vg.civcraft.mc.citadel.Citadel; -import vg.civcraft.mc.civmodcore.command.CivCommand; -import vg.civcraft.mc.civmodcore.command.StandaloneCommand; -@CivCommand(id = "citadelreload") -public class Reload extends StandaloneCommand { +@CommandAlias("citadelreload") +@CommandPermission("citadel.admin") +public class Reload extends BaseCommand { - @Override - public boolean execute(CommandSender sender, String[] args) { + @Syntax("/citadelreload") + @Description("Reloads Citadel entirely") + public void execute(CommandSender sender, String[] args) { Citadel.getInstance().reload(); sender.sendMessage(ChatColor.GREEN + "Reloaded Citadel"); - return true; } - - @Override - public List tabComplete(CommandSender sender, String[] args) { - return new LinkedList<>(); - } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index 6cb2a1e8..54930637 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -34,7 +34,7 @@ import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils; import vg.civcraft.mc.civmodcore.inventory.items.MoreTags; -import vg.civcraft.mc.civmodcore.util.DoubleInteractFixer; +import vg.civcraft.mc.civmodcore.utilities.DoubleInteractFixer; import vg.civcraft.mc.civmodcore.world.WorldUtils; public class BlockListener implements Listener { @@ -318,7 +318,7 @@ public void preventTillingDirtIntoFarmland(PlayerInteractEvent pie) { Block block = pie.getClickedBlock(); Material type = block.getType(); if (type != Material.GRASS_BLOCK && type != Material.DIRT && type != Material.COARSE_DIRT - && type != Material.GRASS_PATH) { + && type != Material.DIRT_PATH) { return; } EquipmentSlot hand = pie.getHand(); diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java index 41e41716..1f40564e 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java @@ -34,7 +34,7 @@ import vg.civcraft.mc.citadel.ReinforcementLogic; import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils; -import vg.civcraft.mc.civmodcore.util.MoreClassUtils; +import vg.civcraft.mc.civmodcore.utilities.MoreClassUtils; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.NameLayerPlugin; diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java index 451808c3..9a82cbc3 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java @@ -25,15 +25,15 @@ import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; -import vg.civcraft.mc.civmodcore.playersettings.PlayerSetting; -import vg.civcraft.mc.civmodcore.playersettings.SettingChangeListener; -import vg.civcraft.mc.civmodcore.playersettings.impl.DisplayLocationSetting; -import vg.civcraft.mc.civmodcore.scoreboard.bottom.BottomLine; -import vg.civcraft.mc.civmodcore.scoreboard.bottom.BottomLineAPI; -import vg.civcraft.mc.civmodcore.scoreboard.side.CivScoreBoard; -import vg.civcraft.mc.civmodcore.scoreboard.side.ScoreBoardAPI; -import vg.civcraft.mc.civmodcore.util.DoubleInteractFixer; -import vg.civcraft.mc.civmodcore.util.TextUtil; +import vg.civcraft.mc.civmodcore.players.scoreboard.bottom.BottomLine; +import vg.civcraft.mc.civmodcore.players.scoreboard.bottom.BottomLineAPI; +import vg.civcraft.mc.civmodcore.players.scoreboard.side.CivScoreBoard; +import vg.civcraft.mc.civmodcore.players.scoreboard.side.ScoreBoardAPI; +import vg.civcraft.mc.civmodcore.players.settings.PlayerSetting; +import vg.civcraft.mc.civmodcore.players.settings.SettingChangeListener; +import vg.civcraft.mc.civmodcore.players.settings.impl.DisplayLocationSetting; +import vg.civcraft.mc.civmodcore.utilities.DoubleInteractFixer; +import vg.civcraft.mc.civmodcore.utilities.TextUtil; public class ModeListener implements Listener { @@ -124,7 +124,7 @@ private void setReinModeOverlay(Player player, AbstractPlayerState state) { } private static void updateDisplaySetting(Player player, DisplayLocationSetting locSetting, boolean state, String text, - BottomLine bottomLine, CivScoreBoard scoreBoard) { + BottomLine bottomLine, CivScoreBoard scoreBoard) { if (player == null) { return; } diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java index d812c729..8e871cc0 100644 --- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java +++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java @@ -1,6 +1,7 @@ package vg.civcraft.mc.citadel.model; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedBlockChunkMeta; + +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedBlockChunkMeta; public class CitadelChunkData extends TableBasedBlockChunkMeta { diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java index afd911ef..5231d708 100644 --- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java +++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java @@ -22,11 +22,11 @@ import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementTypeManager; import vg.civcraft.mc.civmodcore.CivModCorePlugin; import vg.civcraft.mc.civmodcore.dao.ManagedDatasource; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.XZWCoord; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.BlockBasedChunkMeta; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedBlockChunkMeta; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableStorageEngine; -import vg.civcraft.mc.civmodcore.locations.global.WorldIDManager; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.XZWCoord; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.BlockBasedChunkMeta; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedBlockChunkMeta; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableStorageEngine; +import vg.civcraft.mc.civmodcore.world.locations.global.WorldIDManager; public class CitadelDAO extends TableStorageEngine { diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java index 7e9e549c..701e6a67 100644 --- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java @@ -13,15 +13,14 @@ import vg.civcraft.mc.citadel.ReinforcementLogic; import vg.civcraft.mc.citadel.listener.ModeListener; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.playersettings.PlayerSettingAPI; -import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection; -import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting; -import vg.civcraft.mc.civmodcore.playersettings.impl.BoundedIntegerSetting; -import vg.civcraft.mc.civmodcore.playersettings.impl.CommandReplySetting; -import vg.civcraft.mc.civmodcore.playersettings.impl.DecimalFormatSetting; -import vg.civcraft.mc.civmodcore.playersettings.impl.DisplayLocationSetting; -import vg.civcraft.mc.civmodcore.playersettings.impl.DisplayLocationSetting.DisplayLocation; -import vg.civcraft.mc.civmodcore.playersettings.impl.StringSetting; +import vg.civcraft.mc.civmodcore.players.settings.PlayerSettingAPI; +import vg.civcraft.mc.civmodcore.players.settings.gui.MenuSection; +import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.BoundedIntegerSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.CommandReplySetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.DecimalFormatSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.DisplayLocationSetting; +import vg.civcraft.mc.civmodcore.players.settings.impl.StringSetting; public class CitadelSettingManager { @@ -128,15 +127,15 @@ void initSettings() { 30000); PlayerSettingAPI.registerSetting(hologramDuration, menu); - ctbLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocation.NONE, "Bypass display location" + ctbLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocationSetting.DisplayLocation.NONE, "Bypass display location" , "citadelBypassDisplayLocation", new ItemStack(Material.GOLDEN_PICKAXE), "bypass"); PlayerSettingAPI.registerSetting(ctbLocationSetting, menu); - ctiLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocation.SIDEBAR, "Information mode display location" + ctiLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocationSetting.DisplayLocation.SIDEBAR, "Information mode display location" , "citadelInfoModeDisplayLocation", new ItemStack(Material.BOOKSHELF), "reinforcement info mode"); PlayerSettingAPI.registerSetting(ctiLocationSetting, menu); - modeLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocation.SIDEBAR, "Citadel mode display location" + modeLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocationSetting.DisplayLocation.SIDEBAR, "Citadel mode display location" , "citadelReinModeDisplayLocation", new ItemStack(Material.NETHER_STAR), "Citadel mode"); PlayerSettingAPI.registerSetting(modeLocationSetting, menu); diff --git a/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java b/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java index bf934274..bc7024a2 100644 --- a/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java +++ b/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java @@ -5,7 +5,7 @@ import org.bukkit.Location; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedDataObject; +import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.group.Group; diff --git a/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java b/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java index afdd4ad4..59b1fb4f 100644 --- a/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java +++ b/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java @@ -18,9 +18,9 @@ import vg.civcraft.mc.citadel.events.ReinforcementDamageEvent; import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.playersettings.PlayerSettingAPI; -import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting; -import vg.civcraft.mc.civmodcore.util.DelayedItemDrop; +import vg.civcraft.mc.civmodcore.players.settings.PlayerSettingAPI; +import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; +import vg.civcraft.mc.civmodcore.utilities.DelayedItemDrop; public abstract class AbstractPlayerState { diff --git a/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java b/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java index 0d48e368..1599a63f 100644 --- a/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java +++ b/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java @@ -12,7 +12,7 @@ import vg.civcraft.mc.citadel.events.ReinforcementRepairEvent; import vg.civcraft.mc.citadel.listener.ModeListener; import vg.civcraft.mc.citadel.model.Reinforcement; -import vg.civcraft.mc.civmodcore.itemHandling.ItemMap; +import vg.civcraft.mc.civmodcore.inventory.items.ItemMap; public class PatchState extends AbstractPlayerState { diff --git a/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java b/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java index fccbd170..1fb71e68 100644 --- a/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java +++ b/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java @@ -14,7 +14,7 @@ import vg.civcraft.mc.citadel.events.ReinforcementGroupChangeEvent; import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; -import vg.civcraft.mc.civmodcore.itemHandling.ItemMap; +import vg.civcraft.mc.civmodcore.inventory.items.ItemMap; import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.group.Group; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 95628c04..61fdbd40 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -17,120 +17,7 @@ depend: softdepend: - HolographicDisplays description: Citadel allows you to make blocks difficult to break. When a block is reinforced, it must be broken many times before it is destroyed. -api-version: 1.16 -commands: - ctr: - aliases: - - ctreinforce - - reinforce - - protect - - cprivate - - lwc - - private - usage: /ctr [group] - description: Enters reinforcing mode. Interacting with blocks in reinforcing mode will reinforce them or modify their reinforcement - min-args: 0 - max-args: 1 - player-only: true - ctacid: - usage: /ctacid - description: Removes the block above it if used on an acid block - min-args: 0 - max-args: 0 - player-only: true - ctf: - aliases: - - ctfortify - - fortify - usage: /ctf [group] - description: Enters fortification mode. All blocks placed in fortification mode will automatically be reinforced. If no group is given, your default group will be used - min-args: 0 - max-args: 1 - player-only: true - ctb: - aliases: - - ctbypass - - bypass - usage: /ctb - description: Toggles bypass state. In bypass state you can break blocks reinforced on groups you have access to in a single break - min-args: 0 - max-args: 0 - player-only: true - cti: - aliases: - - ctinformation - - info - - ctinfo - usage: /cti - description: Enters information mode. Interacting with blocks in information mode will show information on their reinforcement - min-args: 0 - max-args: 0 - player-only: true - ctin: - aliases: - - ctinsecure - - insecure - usage: /ctin - description: Enters insecure mode. Interacting with containers in insecure mode will switch their insecure flag. Insecure containers can interact with hoppers reinforced on a different group. All containers are secure by default - min-args: 0 - max-args: 0 - player-only: true - cto: - aliases: - - ctoff - - false - usage: /cto - description: Leaves all reinforcement modes - min-args: 0 - max-args: 0 - player-only: true - ctur: - permission: citadel.admin - player-only: true - ctar: - permission: citadel.admin - aliases: - - ctareareinforce - player-only: true - cte: - aliases: - - cteasy - - toggleeasymode - player-only: true - ctdl: - aliases: - - reinforcements - - rein - usage: /ctdl - description: Opens a GUI displaying all reinforcement materials - min-args: 0 - max-args: 0 - player-only: true - citadelreload: - aliases: - - reloadcitadel - usage: /citadelreload - description: Reloads Citadel entirely - min-args: 0 - max-args: 0 - permission: citadel.admin - ctp: - aliases: - - repair - - patch - - ctrepair - - ctpatch - usage: /ctp - min-args: 0 - max-args: 0 - player-only: true - description: Enters patch mode, which allows you to repair reinforcements. Note that repairing reinforcements will also reset their maturation cycle - cta: - usage: /cta [group] - description: Enters advanced fortification mode or adds configurations to it. Advanced configuration mode allows you to place on different groups with different reinforcement types at once - min-args: 0 - max-args: 1 - player-only: true +api-version: 1.17 permissions: citadel.admin: default: op From b85f821e1de9a67d9eddcc91f16172d06895d775 Mon Sep 17 00:00:00 2001 From: Cola Date: Wed, 30 Jun 2021 16:48:19 +0100 Subject: [PATCH 02/22] Ori patch --- pom.xml | 6 +++--- .../vg/civcraft/mc/citadel/CitadelConfigManager.java | 9 +++++---- .../java/vg/civcraft/mc/citadel/model/CitadelDAO.java | 3 ++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index f84058cb..fc7f064d 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ 1.0.0 - vg.civcraft.mc.citadel + com.github.civclassic Citadel jar 4.2.0 @@ -25,13 +25,13 @@ provided - vg.civcraft.mc.civmodcore + com.github.civclassic CivModCore 1.9.0 provided - vg.civcraft.mc.namelayer + com.github.civclassic NameLayer 2.15.0 provided diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index 09e6ad6a..d02047c6 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -10,6 +10,7 @@ import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementEffect; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; import vg.civcraft.mc.civmodcore.ACivMod; +import vg.civcraft.mc.civmodcore.config.ConfigHelper; import vg.civcraft.mc.civmodcore.config.ConfigParser; import vg.civcraft.mc.civmodcore.dao.ManagedDatasource; import vg.civcraft.mc.civmodcore.utilities.ConfigParsing; @@ -106,7 +107,7 @@ public boolean logMessages() { } private void parseAcidMaterials(ConfigurationSection config) { - acidMaterials = parseMaterialList(config, "acidblock_material"); + acidMaterials = ConfigHelper.parseMaterialList(config, "acidblock_material"); if (acidMaterials == null) { logger.info("No valid acid materials found in config"); acidMaterials = new LinkedList<>(); @@ -119,7 +120,7 @@ private void parseAcidMaterials(ConfigurationSection config) { @Override protected boolean parseInternal(ConfigurationSection config) { database = (ManagedDatasource) config.get("database"); - globalBlackList = parseMaterialList(config, "non_reinforceables"); + globalBlackList = ConfigHelper.parseMaterialList(config, "non_reinforceables"); parseAcidMaterials(config); logHostileBreaks = config.getBoolean("logHostileBreaks", true); logFriendlyBreaks = config.getBoolean("logFriendlyBreaks", true); @@ -153,8 +154,8 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) { double maturationScale = config.getInt("scale_amount", 1); float health = (float) config.getDouble("hit_points", 100); double returnChance = config.getDouble("return_chance", 1.0); - List reinforceables = parseMaterialList(config, "reinforceables"); - List nonReinforceables = parseMaterialList(config, "non_reinforceables"); + List reinforceables = ConfigHelper.parseMaterialList(config, "reinforceables"); + List nonReinforceables = ConfigHelper.parseMaterialList(config, "non_reinforceables"); short id = (short) config.getInt("id", -1); long decayTimer = ConfigParsing .parseTime(config.getString("decay_timer", String.valueOf(globalDecayTimer / 1000L) + "s")); diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java index 5231d708..676e9656 100644 --- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java +++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java @@ -14,6 +14,7 @@ import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.inventory.meta.ItemMeta; @@ -151,7 +152,7 @@ public Boolean call() throws Exception { int maturationTime = rs.getInt(11); String lore = rs.getString(12); - short worldID = worldMan.getInternalWorldIdByName(worldName); + short worldID = worldMan.getInternalWorldId(Bukkit.getWorld(worldName)); if (worldID == -1) { logger.severe("Failed to find world id for world with name " + worldName); return false; From 78761e742bde6637925043147dd13651f44e50f1 Mon Sep 17 00:00:00 2001 From: Cola Date: Wed, 30 Jun 2021 20:00:41 +0100 Subject: [PATCH 03/22] Update holographic-displays version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fc7f064d..9b1adfaa 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ com.gmail.filoghost.holographicdisplays holographicdisplays-api - 2.4.5 + 2.4.8 provided From 59bf5c0e82c67e57b670b0dc76c00cb9f60c3dc6 Mon Sep 17 00:00:00 2001 From: Cola Date: Wed, 30 Jun 2021 21:53:29 +0100 Subject: [PATCH 04/22] POM fix --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9b1adfaa..7ad85cda 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.github.civclassic civclassic-parent - 1.0.0 + 1.0.1 com.github.civclassic From 60f01dde54e2ae45e44f10333ae035697dc23797 Mon Sep 17 00:00:00 2001 From: Cola Date: Thu, 1 Jul 2021 01:03:28 +0100 Subject: [PATCH 05/22] Fix commands + Tab completion --- .../java/vg/civcraft/mc/citadel/Citadel.java | 40 ++----------------- .../vg/civcraft/mc/citadel/command/Acid.java | 8 +--- .../command/AdvancedFortification.java | 31 ++++---------- .../mc/citadel/command/AreaReinforce.java | 16 +++----- .../civcraft/mc/citadel/command/Bypass.java | 8 +--- .../command/CitadelCommandManager.java | 39 ++++++++++++++++++ .../civcraft/mc/citadel/command/EasyMode.java | 8 +--- .../mc/citadel/command/Fortification.java | 29 ++++---------- .../mc/citadel/command/Information.java | 8 +--- .../civcraft/mc/citadel/command/Insecure.java | 8 +--- .../vg/civcraft/mc/citadel/command/Off.java | 11 ++--- .../mc/citadel/command/PatchMode.java | 10 ++--- .../mc/citadel/command/Reinforce.java | 28 +++---------- .../mc/citadel/command/ReinforcementsGUI.java | 9 ++--- .../civcraft/mc/citadel/command/Reload.java | 8 ++-- 15 files changed, 92 insertions(+), 169 deletions(-) create mode 100644 src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java diff --git a/src/main/java/vg/civcraft/mc/citadel/Citadel.java b/src/main/java/vg/civcraft/mc/citadel/Citadel.java index b3727cb2..78fde2dd 100644 --- a/src/main/java/vg/civcraft/mc/citadel/Citadel.java +++ b/src/main/java/vg/civcraft/mc/citadel/Citadel.java @@ -3,19 +3,7 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; -import vg.civcraft.mc.citadel.command.Acid; -import vg.civcraft.mc.citadel.command.AdvancedFortification; -import vg.civcraft.mc.citadel.command.AreaReinforce; -import vg.civcraft.mc.citadel.command.Bypass; -import vg.civcraft.mc.citadel.command.EasyMode; -import vg.civcraft.mc.citadel.command.Fortification; -import vg.civcraft.mc.citadel.command.Information; -import vg.civcraft.mc.citadel.command.Insecure; -import vg.civcraft.mc.citadel.command.Off; -import vg.civcraft.mc.citadel.command.PatchMode; -import vg.civcraft.mc.citadel.command.Reinforce; -import vg.civcraft.mc.citadel.command.ReinforcementsGUI; -import vg.civcraft.mc.citadel.command.Reload; +import vg.civcraft.mc.citadel.command.CitadelCommandManager; import vg.civcraft.mc.citadel.listener.BlockListener; import vg.civcraft.mc.citadel.listener.EntityListener; import vg.civcraft.mc.citadel.listener.InventoryListener; @@ -30,7 +18,6 @@ import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementTypeManager; import vg.civcraft.mc.civmodcore.ACivMod; -import vg.civcraft.mc.civmodcore.commands.CommandManager; import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.BlockBasedChunkMetaView; import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.ChunkMetaAPI; import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject; @@ -52,7 +39,7 @@ public static Citadel getInstance() { private HologramManager holoManager; private CitadelSettingManager settingManager; private CitadelDAO dao; - private CommandManager commandManager; + private CitadelCommandManager commandManager; private PlayerStateManager stateManager; @@ -148,10 +135,8 @@ public void onEnable() { else { logger.info("HolographicDisplays is not loaded, no holograms available"); }}); + commandManager = new CitadelCommandManager(this); CitadelPermissionHandler.setup(); - commandManager = new CommandManager(this); - commandManager.init(); - registerCommands(); registerListeners(); } @@ -165,23 +150,4 @@ private void registerListeners() { getServer().getPluginManager().registerEvents(new ModeListener(this), this); getServer().getPluginManager().registerEvents(new RedstoneListener(config.getMaxRedstoneDistance()), this); } - - /** - * Registers Aikar commands - */ - private void registerCommands() { - commandManager.registerCommand(new Acid()); - commandManager.registerCommand(new AdvancedFortification()); - commandManager.registerCommand(new AreaReinforce()); - commandManager.registerCommand(new Bypass()); - commandManager.registerCommand(new EasyMode()); - commandManager.registerCommand(new Fortification()); - commandManager.registerCommand(new Information()); - commandManager.registerCommand(new Insecure()); - commandManager.registerCommand(new Off()); - commandManager.registerCommand(new PatchMode()); - commandManager.registerCommand(new Reinforce()); - commandManager.registerCommand(new ReinforcementsGUI()); - commandManager.registerCommand(new Reload()); - } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Acid.java b/src/main/java/vg/civcraft/mc/citadel/command/Acid.java index 56e0ce6f..44b6bb3d 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Acid.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Acid.java @@ -3,7 +3,6 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import java.util.Iterator; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -12,7 +11,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Container; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.util.BlockIterator; @@ -26,13 +24,11 @@ import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils; import vg.civcraft.mc.civmodcore.utilities.TextUtil; -@CommandAlias("ctacid") public class Acid extends BaseCommand { - @Syntax("/ctacid") + @CommandAlias("ctacid|acid") @Description("Removes the block above it if used on an acid block") - public void execute(CommandSender sender) { - Player p = (Player) sender; + public void execute(Player p) { Iterator itr = new BlockIterator(p, 40); // Within 2.5 chunks AcidManager acidMan = Citadel.getInstance().getAcidManager(); boolean foundAny = false; diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java b/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java index 80636eb7..2235cd93 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java @@ -2,14 +2,12 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Syntax; -import java.util.ArrayList; -import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import vg.civcraft.mc.citadel.Citadel; @@ -21,16 +19,15 @@ import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; -import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; import vg.civcraft.mc.namelayer.group.Group; -@CommandAlias("cta") public class AdvancedFortification extends BaseCommand { - @Syntax("/cta ") + @CommandAlias("cta|advfort") + @Syntax("") @Description("Enters advanced fortification mode or adds configurations to it. Advanced configuration mode allows you to place on different groups with different reinforcement types at once") - public void execute(CommandSender sender, @Optional String targetGroup) { - Player player = (Player) sender; + @CommandCompletion("@CT_Groups") + public void execute(Player player, @Optional String targetGroup) { PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = stateManager.getState(player); AdvancedFortificationState advFortState = null; @@ -82,26 +79,14 @@ public void execute(CommandSender sender, @Optional String targetGroup) { boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(), CitadelPermissionHandler.getReinforce()); if (!hasAccess) { - CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName()); + CitadelUtility + .sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName()); return; } if (advFortState == null) { - advFortState = new AdvancedFortificationState(player); + advFortState = new AdvancedFortificationState(player); stateManager.setState(player, advFortState); } advFortState.addSetup(mainHand, type, group); } - - public List tabComplete(CommandSender sender, String[] args) { - if (args.length == 0) - return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(), - (Player) sender); - else if (args.length == 1) - return GroupTabCompleter.complete(args[0], CitadelPermissionHandler.getReinforce(), - (Player) sender); - else { - return new ArrayList<>(); - } - } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java index 014b45a8..269dc660 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java @@ -2,13 +2,13 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Syntax; import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.block.Block; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelUtility; @@ -19,17 +19,13 @@ import vg.civcraft.mc.namelayer.NameAPI; import vg.civcraft.mc.namelayer.group.Group; -@CommandAlias("ctar") public class AreaReinforce extends BaseCommand { - @Syntax("/ctar ") + @CommandAlias("ctar") + @Syntax(" ") @Description("Using the reinforcement item in your main hand, reinforces an area to your default or a target group.") - public void execute(CommandSender sender, String minX, String minY, String minZ, String maxX, String maxY, String maxZ, @Optional String targetGroup) { - if (!(sender instanceof Player)) { - sender.sendMessage("Must be a player to perform this command."); - return; - } - Player p = (Player) sender; + @CommandCompletion("@nothing @nothing @nothing @nothing @nothing @nothing @CT_Groups") + public void execute(Player p, String minX, String minY, String minZ, String maxX, String maxY, String maxZ, @Optional String targetGroup) { UUID uuid = NameAPI.getUUID(p.getName()); ReinforcementType reinType = Citadel.getInstance().getReinforcementTypeManager() .getByItemStack(p.getInventory().getItemInMainHand()); @@ -38,7 +34,7 @@ public void execute(CommandSender sender, String minX, String minY, String minZ, return; } String groupName = null; - if (targetGroup.isEmpty()) { + if (targetGroup == null) { groupName = NameAPI.getGroupManager().getDefaultGroup(uuid); if (groupName == null) { CitadelUtility.sendAndLog(p, ChatColor.RED, "You need to set a default group \n Use /nlsdg to do so"); diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java b/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java index 76a6ede4..165b733e 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java @@ -3,21 +3,17 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelUtility; import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; -@CommandAlias("ctb") public class Bypass extends BaseCommand { - @Syntax("/ctb") + @CommandAlias("ctb|bypass") @Description("Toggles bypass state. In bypass state you can break blocks reinforced on groups you have access to in a single break") - public void execute(CommandSender sender) { - Player player = (Player) sender; + public void execute(Player player) { BooleanSetting setting = Citadel.getInstance().getSettingManager().getBypass(); boolean enabled = setting.getValue(player); if (enabled) { diff --git a/src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java b/src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java new file mode 100644 index 00000000..ba4c3461 --- /dev/null +++ b/src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java @@ -0,0 +1,39 @@ +package vg.civcraft.mc.citadel.command; + +import co.aikar.commands.BukkitCommandCompletionContext; +import co.aikar.commands.CommandCompletions; +import javax.annotation.Nonnull; +import org.bukkit.plugin.Plugin; +import vg.civcraft.mc.civmodcore.commands.CommandManager; +import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; + +public class CitadelCommandManager extends CommandManager { + + public CitadelCommandManager(Plugin plugin) { + super(plugin); + init(); + } + + @Override + public void registerCommands() { + registerCommand(new Acid()); + registerCommand(new AdvancedFortification()); + registerCommand(new AreaReinforce()); + registerCommand(new Bypass()); + registerCommand(new EasyMode()); + registerCommand(new Fortification()); + registerCommand(new Information()); + registerCommand(new Insecure()); + registerCommand(new Off()); + registerCommand(new PatchMode()); + registerCommand(new Reinforce()); + registerCommand(new ReinforcementsGUI()); + registerCommand(new Reload()); + } + + @Override + public void registerCompletions(@Nonnull CommandCompletions completions) { + super.registerCompletions(completions); + completions.registerCompletion("CT_Groups", (context) -> GroupTabCompleter.complete(context.getInput(), null, context.getPlayer())); + } +} diff --git a/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java b/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java index aa8435df..becefda3 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java @@ -3,21 +3,17 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelUtility; import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; -@CommandAlias("cte") public class EasyMode extends BaseCommand { - @Syntax("/cte") + @CommandAlias("cte|easymode") @Description("Reinforces to your default group using materials from your offhand.") - public void execute(CommandSender sender) { - Player player = (Player) sender; + public void execute(Player player) { BooleanSetting setting = Citadel.getInstance().getSettingManager().getEasyMode(); boolean enabled = setting.getValue(player); if (enabled) { diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java b/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java index e14cc2e2..258f0323 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java @@ -2,13 +2,11 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Syntax; -import java.util.ArrayList; -import java.util.List; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelPermissionHandler; @@ -19,19 +17,18 @@ import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; -import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; import vg.civcraft.mc.namelayer.group.Group; -@CommandAlias("ctf") public class Fortification extends BaseCommand { - @Syntax("/ctf ") + @CommandAlias("ctf|reinforce|fortify") + @Syntax("") @Description("Enters fortification mode. All blocks placed in fortification mode will automatically be reinforced. If no group is given, your default group will be used") - public void execute(CommandSender sender, @Optional String targetGroup) { - Player player = (Player) sender; + @CommandCompletion("@CT_Groups") + public void execute(Player player, @Optional String targetGroup) { PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = stateManager.getState(player); - if (targetGroup.isEmpty() && currentState instanceof FortificationState) { + if (targetGroup == null && currentState instanceof FortificationState) { stateManager.setState(player, null); return; } @@ -44,7 +41,7 @@ public void execute(CommandSender sender, @Optional String targetGroup) { } String groupName = null; - if (targetGroup.isEmpty()) { + if (targetGroup == null) { groupName = NameAPI.getGroupManager().getDefaultGroup(player.getUniqueId()); if (groupName == null) { CitadelUtility.sendAndLog(player, ChatColor.RED, @@ -77,16 +74,4 @@ public void execute(CommandSender sender, @Optional String targetGroup) { } stateManager.setState(player, new FortificationState(player, type, group)); } - - public List tabComplete(CommandSender sender, String[] args) { - if (args.length == 0) - return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(), - (Player) sender); - else if (args.length == 1) - return GroupTabCompleter.complete(args[0], CitadelPermissionHandler.getReinforce(), - (Player) sender); - else { - return new ArrayList<>(); - } - } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Information.java b/src/main/java/vg/civcraft/mc/citadel/command/Information.java index f9dd5829..de5ee849 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Information.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Information.java @@ -3,20 +3,16 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting; -@CommandAlias("cti") public class Information extends BaseCommand { - @Syntax("/cti") + @CommandAlias("cti|ctinfo|info") @Description("Enters information mode. Interacting with blocks in information mode will show information on their reinforcement") - public void execute(CommandSender sender) { - Player player = (Player) sender; + public void execute(Player player) { BooleanSetting ctiSetting = Citadel.getInstance().getSettingManager().getInformationMode(); ctiSetting.toggleValue(player.getUniqueId()); player.sendMessage(ChatColor.GREEN + "Toggled reinforcement information mode " + ChatColor.YELLOW diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java b/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java index 59229256..75d0cb3d 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java @@ -3,21 +3,17 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState; import vg.civcraft.mc.citadel.playerstate.InsecureState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; -@CommandAlias("ctin") public class Insecure extends BaseCommand { - @Syntax("/ctin") + @CommandAlias("ctin|insecure") @Description("Enters insecure mode. Interacting with containers in insecure mode will switch their insecure flag. Insecure containers can interact with hoppers reinforced on a different group. All containers are secure by default") - public void execute(CommandSender sender) { - Player player = (Player) sender; + public void execute(Player player) { PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player); if (currentState instanceof InsecureState) { diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Off.java b/src/main/java/vg/civcraft/mc/citadel/command/Off.java index ff419004..cab93ced 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Off.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Off.java @@ -3,22 +3,19 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import java.util.UUID; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.model.CitadelSettingManager; -@CommandAlias("cto") public class Off extends BaseCommand { - @Syntax("/cto") + @CommandAlias("cto") @Description("Leaves all reinforcement modes") - public void execute(CommandSender sender) { - Citadel.getInstance().getStateManager().setState((Player) sender, null); + public void execute(Player sender) { + Citadel.getInstance().getStateManager().setState(sender, null); CitadelSettingManager settings = Citadel.getInstance().getSettingManager(); - UUID uuid = ((Player) sender).getUniqueId(); + UUID uuid = sender.getUniqueId(); if (settings.getInformationMode().getValue(uuid) && settings.shouldCtoDisableCti(uuid)) { settings.getInformationMode().setValue(uuid, false); } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java b/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java index 5cdc726a..367b0715 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java @@ -2,22 +2,20 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState; import vg.civcraft.mc.citadel.playerstate.PatchState; import vg.civcraft.mc.citadel.playerstate.PlayerStateManager; -@CommandAlias("ctp") public class PatchMode extends BaseCommand { - @Syntax("/ctp ") + @CommandAlias("ctp|patchmode|patch") @Description("Enters patch mode, which allows you to repair reinforcements. Note that repairing reinforcements will also reset their maturation cycle") - public void execute(CommandSender sender) { - Player player = (Player) sender; + @CommandCompletion("@CT_Groups") + public void execute(Player player) { PlayerStateManager stateManager = Citadel.getInstance().getStateManager(); AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player); if (currentState instanceof PatchState) { diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java index e3e29556..53863f3a 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java @@ -2,14 +2,12 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Syntax; -import java.util.ArrayList; -import java.util.List; import java.util.UUID; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelPermissionHandler; @@ -19,16 +17,15 @@ import vg.civcraft.mc.citadel.playerstate.ReinforcingState; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.NameAPI; -import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter; import vg.civcraft.mc.namelayer.group.Group; -@CommandAlias("ctr") public class Reinforce extends BaseCommand { - @Syntax("/ctr ") + @CommandAlias("ctr") + @Syntax("") @Description("Enters reinforcing mode. Interacting with blocks in reinforcing mode will reinforce them or modify their reinforcement") - public void execute(CommandSender sender, @Optional String targetGroup) { - Player player = (Player) sender; + @CommandCompletion("@CT_Groups") + public void execute(Player player, @Optional String targetGroup) { UUID uuid = NameAPI.getUUID(player.getName()); String groupName = null; if (targetGroup == null) { @@ -65,19 +62,4 @@ public void execute(CommandSender sender, @Optional String targetGroup) { } stateManager.setState(player, new ReinforcingState(player, group)); } - - public List tabComplete(CommandSender sender, String[] args) { - if (!(sender instanceof Player)) - return null; - - if (args.length == 0) - return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(), - (Player) sender); - else if (args.length == 1) - return GroupTabCompleter.complete(args[0], CitadelPermissionHandler.getReinforce(), - (Player) sender); - else { - return new ArrayList<>(); - } - } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java b/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java index 2ecd651b..c1506bed 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java @@ -3,14 +3,12 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import java.text.DecimalFormat; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import vg.civcraft.mc.citadel.Citadel; @@ -21,14 +19,13 @@ import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils; import vg.civcraft.mc.civmodcore.utilities.TextUtil; -@CommandAlias("ctdl") public class ReinforcementsGUI extends BaseCommand { private DecimalFormat format = new DecimalFormat("##.##"); - @Syntax("/ctdl") + @CommandAlias("ctdl|reinforcements") @Description("Opens a GUI displaying all reinforcement materials") - public void execute(CommandSender sender) { + public void execute(Player sender) { List types = new LinkedList<>( Citadel.getInstance().getReinforcementTypeManager().getAllTypes()); // sort ascending by health @@ -51,7 +48,7 @@ public void execute(CommandSender sender) { IClickable click = new DecorationStack(is); clicks.add(click); } - MultiPageView pageView = new MultiPageView((Player) sender, clicks, ChatColor.BLUE + "Reinforcements", true); + MultiPageView pageView = new MultiPageView(sender, clicks, ChatColor.BLUE + "Reinforcements", true); pageView.showScreen(); } } diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Reload.java b/src/main/java/vg/civcraft/mc/citadel/command/Reload.java index 30d388b2..9cc35018 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/Reload.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/Reload.java @@ -4,18 +4,16 @@ import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Syntax; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import vg.civcraft.mc.citadel.Citadel; -@CommandAlias("citadelreload") -@CommandPermission("citadel.admin") public class Reload extends BaseCommand { - @Syntax("/citadelreload") + @CommandAlias("citadelreload") + @CommandPermission("citadel.admin") @Description("Reloads Citadel entirely") - public void execute(CommandSender sender, String[] args) { + public void execute(CommandSender sender) { Citadel.getInstance().reload(); sender.sendMessage(ChatColor.GREEN + "Reloaded Citadel"); } From 84567224c2576566b912faf84a90027c18ed25dc Mon Sep 17 00:00:00 2001 From: Cola Date: Fri, 2 Jul 2021 17:52:20 +0100 Subject: [PATCH 06/22] Add 1.17 plants & hopefully prevent moss spread to reinforced stuff --- .../civcraft/mc/citadel/CitadelUtility.java | 6 +++ .../mc/citadel/ReinforcementLogic.java | 42 ++++++++++++++----- .../mc/citadel/listener/BlockListener.java | 11 +++++ 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java index 1ad57f8d..b7cf0c3a 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java @@ -39,6 +39,7 @@ public static boolean isPlant(Block plant) { case JUNGLE_SAPLING: case OAK_SAPLING: case SPRUCE_SAPLING: + case FLOWERING_AZALEA: case WHEAT: case CARROTS: case POTATOES: @@ -61,6 +62,11 @@ public static boolean isPlant(Block plant) { case WEEPING_VINES_PLANT: case KELP: case KELP_PLANT: + case BIG_DRIPLEAF: + case BIG_DRIPLEAF_STEM: + case CAVE_VINES: + case CAVE_VINES_PLANT: + case SMALL_DRIPLEAF: return true; default: return false; diff --git a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java index 684fc0ee..54afa9cd 100644 --- a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java +++ b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java @@ -6,6 +6,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.data.type.AmethystCluster; import org.bukkit.block.data.type.Bed; import org.bukkit.block.data.type.Chest; import org.bukkit.block.data.type.CoralWallFan; @@ -172,6 +173,7 @@ public static Block getResponsibleBlock(Block block) { case WARPED_FUNGUS: case CRIMSON_FUNGUS: case BAMBOO_SAPLING: + case FLOWERING_AZALEA: case WHEAT: case CARROTS: case POTATOES: @@ -212,17 +214,10 @@ public static Block getResponsibleBlock(Block block) { case DEAD_FIRE_CORAL_FAN: case DEAD_HORN_CORAL: case DEAD_HORN_CORAL_FAN: + case SMALL_DRIPLEAF: case NETHER_WART: { return block.getRelative(BlockFace.DOWN); } - case TWISTING_VINES: { - // scan downwards for first different block - Block below = block.getRelative(BlockFace.DOWN); - while (below.getType() == block.getType() || below.getType() == Material.TWISTING_VINES_PLANT) { - below = below.getRelative(BlockFace.DOWN); - } - return below; - } case SUGAR_CANE: case BAMBOO: case ROSE_BUSH: @@ -242,6 +237,9 @@ public static Block getResponsibleBlock(Block block) { } return below; } + case HANGING_ROOTS: { + return block.getRelative(BlockFace.UP); + } case ACACIA_DOOR: case BIRCH_DOOR: case DARK_OAK_DOOR: @@ -292,6 +290,12 @@ public static Block getResponsibleBlock(Block block) { CoralWallFan cwf = (CoralWallFan) block.getBlockData(); return block.getRelative(cwf.getFacing().getOppositeFace()); } + case SMALL_AMETHYST_BUD: + case MEDIUM_AMETHYST_BUD: + case LARGE_AMETHYST_BUD: { + AmethystCluster amethyst = (AmethystCluster) block.getBlockData(); + return block.getRelative(amethyst.getFacing().getOppositeFace()); + } case WEEPING_VINES: { // scan upwards Block above = block.getRelative(BlockFace.UP); @@ -300,14 +304,30 @@ public static Block getResponsibleBlock(Block block) { } return above; } - case WEEPING_VINES_PLANT: { - // scan upwards + case CAVE_VINES: { + // scan upwards for first different block Block above = block.getRelative(BlockFace.UP); - while (above.getType() == block.getType()) { + while (above.getType() == block.getType() || above.getType() == Material.CAVE_VINES_PLANT) { above = above.getRelative(BlockFace.UP); } return above; } + case TWISTING_VINES: { + // scan downwards for first different block + Block below = block.getRelative(BlockFace.DOWN); + while (below.getType() == block.getType() || below.getType() == Material.TWISTING_VINES_PLANT) { + below = below.getRelative(BlockFace.DOWN); + } + return below; + } + case BIG_DRIPLEAF: { + // scan downwards for first different block + Block below = block.getRelative(BlockFace.DOWN); + while (below.getType() == block.getType() || below.getType() == Material.BIG_DRIPLEAF_STEM) { + below = below.getRelative(BlockFace.DOWN); + } + return below; + } default: { return block; } diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index 54930637..7f222434 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -18,6 +18,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockFertilizeEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockPlaceEvent; @@ -447,4 +448,14 @@ private void INTERNAL_checkLecternModificationPermission(final Cancellable event CitadelUtility.sendAndLog(clicker, ChatColor.RED, "You cannot modify that lectern."); } + @EventHandler(ignoreCancelled = true) + public void onMossSpread(BlockFertilizeEvent event) { + for (BlockState block : event.getBlocks()) { + if (Citadel.getInstance().getReinforcementManager().getReinforcement(block.getBlock()) != null) { + event.setCancelled(true); + return; + } + } + } + } From 0a07e3b97163d47f97206ab8d5cf4cd35b671715 Mon Sep 17 00:00:00 2001 From: Cola Date: Fri, 2 Jul 2021 18:05:28 +0100 Subject: [PATCH 07/22] Fixes to plants --- .../vg/civcraft/mc/citadel/ReinforcementLogic.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java index 54afa9cd..651ee745 100644 --- a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java +++ b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java @@ -222,6 +222,7 @@ public static Block getResponsibleBlock(Block block) { case BAMBOO: case ROSE_BUSH: case TWISTING_VINES_PLANT: + case BIG_DRIPLEAF_STEM: case CACTUS: case SUNFLOWER: case LILAC: @@ -237,6 +238,7 @@ public static Block getResponsibleBlock(Block block) { } return below; } + case SPORE_BLOSSOM: case HANGING_ROOTS: { return block.getRelative(BlockFace.UP); } @@ -312,6 +314,15 @@ public static Block getResponsibleBlock(Block block) { } return above; } + case CAVE_VINES_PLANT: + case WEEPING_VINES_PLANT: { + // scan upwards for first different block + Block above = block.getRelative(BlockFace.UP); + while (above.getType() == block.getType()) { + above = above.getRelative(BlockFace.UP); + } + return above; + } case TWISTING_VINES: { // scan downwards for first different block Block below = block.getRelative(BlockFace.DOWN); From 8ff033fa5fe752c07790c07341d73c13dd4f1e4f Mon Sep 17 00:00:00 2001 From: Cola Date: Fri, 2 Jul 2021 18:13:00 +0100 Subject: [PATCH 08/22] Add message to moss prevention --- .../java/vg/civcraft/mc/citadel/listener/BlockListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index 7f222434..737e590c 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -1,6 +1,8 @@ package vg.civcraft.mc.citadel.listener; import com.destroystokyo.paper.MaterialTags; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -452,6 +454,7 @@ private void INTERNAL_checkLecternModificationPermission(final Cancellable event public void onMossSpread(BlockFertilizeEvent event) { for (BlockState block : event.getBlocks()) { if (Citadel.getInstance().getReinforcementManager().getReinforcement(block.getBlock()) != null) { + event.getPlayer().sendMessage(Component.text("You can't do that while their are reinforced blocks around!").color(NamedTextColor.RED)); event.setCancelled(true); return; } From 25da63dbfedc8ce0195fbf6d1d03f15406832c54 Mon Sep 17 00:00:00 2001 From: Cola Date: Fri, 2 Jul 2021 18:44:05 +0100 Subject: [PATCH 09/22] Fix dripleafs --- .../java/vg/civcraft/mc/citadel/listener/BlockListener.java | 3 +-- .../java/vg/civcraft/mc/citadel/listener/EntityListener.java | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index 737e590c..72777caa 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -157,7 +157,7 @@ public void liquidDumpEvent(PlayerBucketEmptyEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockFromToEvent(BlockFromToEvent event) { // prevent water/lava from spilling reinforced blocks away - if (event.getToBlock().getY() < 0) { + if (event.getToBlock().getY() < event.getToBlock().getWorld().getMinHeight()) { return; } Reinforcement rein = ReinforcementLogic.getReinforcementProtecting(event.getToBlock()); @@ -460,5 +460,4 @@ public void onMossSpread(BlockFertilizeEvent event) { } } } - } diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java index 1f40564e..407f3b73 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java @@ -82,6 +82,9 @@ public void changeBlock(EntityChangeBlockEvent ecbe) { if (rein == null || ecbe.getEntityType() == EntityType.FALLING_BLOCK) { return; } + if (ecbe.getBlock().getType() == Material.BIG_DRIPLEAF) { + return; + } ReinforcementLogic.damageReinforcement(rein, ReinforcementLogic.getDamageApplied(rein), ecbe.getEntity()); if (rein.isBroken()) { return; From 4b32c968e7f4997c3cce5bf8b3944322601269ae Mon Sep 17 00:00:00 2001 From: Cola Date: Fri, 2 Jul 2021 19:24:38 +0100 Subject: [PATCH 10/22] Prevent candle modification --- .../mc/citadel/listener/BlockListener.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index 72777caa..161dfbc4 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -9,6 +9,7 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Container; +import org.bukkit.block.data.Lightable; import org.bukkit.block.data.Openable; import org.bukkit.block.data.type.Comparator; import org.bukkit.block.data.type.Lectern; @@ -386,6 +387,57 @@ public void preventHarvestingHoney(PlayerInteractEvent pie) { } } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void preventLightingCandles(PlayerInteractEvent pie) { + if (!pie.hasBlock()) { + return; + } + if (pie.getAction() != Action.RIGHT_CLICK_BLOCK) { + return; + } + Block block = pie.getClickedBlock(); + Material type = block.getType(); + if (!MoreTags.LIGHTABLE_CANDLES.isTagged(type)) { + return; + } + if (!pie.hasItem()) { + Lightable candles = (Lightable) block.getBlockData(); + if (candles.isLit()) { + Reinforcement rein = Citadel.getInstance().getReinforcementManager().getReinforcement(block); + if (rein == null) { + return; + } + if (!rein.hasPermission(pie.getPlayer(), CitadelPermissionHandler.getModifyBlocks())) { + pie.getPlayer().sendMessage(ChatColor.RED + "You do not have permission to modify this block"); + pie.setCancelled(true); + return; + } + } + } + EquipmentSlot hand = pie.getHand(); + if (hand != EquipmentSlot.HAND && hand != EquipmentSlot.OFF_HAND) { + return; + } + ItemStack relevant; + Player p = pie.getPlayer(); + if (hand == EquipmentSlot.HAND) { + relevant = p.getInventory().getItemInMainHand(); + } else { + relevant = p.getInventory().getItemInOffHand(); + } + if (relevant.getType() != Material.FLINT_AND_STEEL) { + return; + } + Reinforcement rein = Citadel.getInstance().getReinforcementManager().getReinforcement(block); + if (rein == null) { + return; + } + if (!rein.hasPermission(p, CitadelPermissionHandler.getModifyBlocks())) { + p.sendMessage(ChatColor.RED + "You do not have permission to modify this block"); + pie.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = false) public void openBeacon(PlayerInteractEvent pie) { if (!pie.hasBlock()) { From 0fe4d4119fbcbbd938784650908e859892618396 Mon Sep 17 00:00:00 2001 From: Cola Date: Sat, 3 Jul 2021 17:55:36 +0100 Subject: [PATCH 11/22] Turns out dripstone can grow --- .../java/vg/civcraft/mc/citadel/ReinforcementLogic.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java index 651ee745..3d6e1160 100644 --- a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java +++ b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java @@ -10,6 +10,7 @@ import org.bukkit.block.data.type.Bed; import org.bukkit.block.data.type.Chest; import org.bukkit.block.data.type.CoralWallFan; +import org.bukkit.block.data.type.PointedDripstone; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; @@ -339,6 +340,13 @@ public static Block getResponsibleBlock(Block block) { } return below; } + case POINTED_DRIPSTONE: + PointedDripstone dripstone = (PointedDripstone) block.getBlockData(); + Block direction = block.getRelative(dripstone.getVerticalDirection().getOppositeFace()); + while (direction.getType() == block.getType()) { + direction = direction.getRelative(dripstone.getVerticalDirection().getOppositeFace()); + } + return direction; default: { return block; } From 98872b77bb465a1dbb86fc5de64b0360f1425db6 Mon Sep 17 00:00:00 2001 From: Cola Date: Sat, 3 Jul 2021 19:14:27 +0100 Subject: [PATCH 12/22] Handle powdered snow with citadel --- .../mc/citadel/listener/EntityListener.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java index 407f3b73..498c7c9c 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java @@ -4,6 +4,8 @@ import java.util.Iterator; import java.util.List; import java.util.UUID; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -26,12 +28,14 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.scheduler.BukkitRunnable; import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelPermissionHandler; import vg.civcraft.mc.citadel.ReinforcementLogic; +import vg.civcraft.mc.citadel.events.ReinforcementBypassEvent; import vg.civcraft.mc.citadel.model.Reinforcement; import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils; import vg.civcraft.mc.civmodcore.utilities.MoreClassUtils; @@ -148,6 +152,30 @@ public void run() { }.runTaskAsynchronously(Citadel.getInstance()); } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void powderedSnowPickup(PlayerBucketFillEvent event) { + if (event.getBlockClicked().getType() != Material.POWDER_SNOW) { + return; + } + + Block clickedBlock = event.getBlockClicked(); + Reinforcement reinforcement = Citadel.getInstance().getReinforcementManager().getReinforcement(clickedBlock); + Player player = event.getPlayer(); + + if (!reinforcement.hasPermission(player, CitadelPermissionHandler.getBypass())) { + player.sendMessage(Component.text("You do not have permission to bypass this block!").color(NamedTextColor.RED)); + event.setCancelled(true); + return; + } + ReinforcementBypassEvent bypassEvent = new ReinforcementBypassEvent(player, reinforcement); + Bukkit.getPluginManager().callEvent(bypassEvent); + if (event.isCancelled()) { + event.setCancelled(true); + return; + } + reinforcement.setHealth(-1); + } + // prevent creating golems from reinforced blocks @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void spawn(CreatureSpawnEvent cse) { From 472e622260ccf0c7e2a679919b5784791344b815 Mon Sep 17 00:00:00 2001 From: Cola Date: Mon, 5 Jul 2021 19:47:50 +0100 Subject: [PATCH 13/22] Latest CMC --- .../mc/citadel/CitadelConfigManager.java | 14 +++++------ src/main/resources/config.yml | 24 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index d02047c6..f89c8a38 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -12,8 +12,8 @@ import vg.civcraft.mc.civmodcore.ACivMod; import vg.civcraft.mc.civmodcore.config.ConfigHelper; import vg.civcraft.mc.civmodcore.config.ConfigParser; +import vg.civcraft.mc.civmodcore.dao.DatabaseCredentials; import vg.civcraft.mc.civmodcore.dao.ManagedDatasource; -import vg.civcraft.mc.civmodcore.utilities.ConfigParsing; import vg.civcraft.mc.civmodcore.utilities.TextUtil; public class CitadelConfigManager extends ConfigParser { @@ -119,7 +119,7 @@ private void parseAcidMaterials(ConfigurationSection config) { @Override protected boolean parseInternal(ConfigurationSection config) { - database = (ManagedDatasource) config.get("database"); + database = ManagedDatasource.construct((ACivMod) plugin, (DatabaseCredentials) config.get("database")); globalBlackList = ConfigHelper.parseMaterialList(config, "non_reinforceables"); parseAcidMaterials(config); logHostileBreaks = config.getBoolean("logHostileBreaks", true); @@ -129,7 +129,7 @@ protected boolean parseInternal(ConfigurationSection config) { logMessages = config.getBoolean("logMessages", true); redstoneRange = config.getDouble("redstoneDistance", 3); globalDecayMultiplier = config.getDouble("global_decay_multiplier", 2.0); - globalDecayTimer = ConfigParsing.parseTime(config.getString("global_decay_timer", "0")); + globalDecayTimer = ConfigHelper.parseTime(config.getString("global_decay_timer", "0")); parseReinforcementTypes(config.getConfigurationSection("reinforcements")); hangersInheritReinforcements = config.getBoolean("hangers_inherit_reinforcement", false); return true; @@ -146,9 +146,9 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) { ReinforcementEffect damageEffect = getReinforcementEffect(config.getConfigurationSection("damage_effect")); ReinforcementEffect destructionEffect = getReinforcementEffect( config.getConfigurationSection("destruction_effect")); - long gracePeriod = ConfigParsing.parseTime(config.getString("grace_period", "0"), TimeUnit.MILLISECONDS); - long maturationTime = ConfigParsing.parseTime(config.getString("mature_time", "0"), TimeUnit.MILLISECONDS); - long acidTime = ConfigParsing.parseTime(config.getString("acid_time", "-1"), TimeUnit.MILLISECONDS); + long gracePeriod = ConfigHelper.parseTime(config.getString("grace_period", "0"), TimeUnit.MILLISECONDS); + long maturationTime = ConfigHelper.parseTime(config.getString("mature_time", "0"), TimeUnit.MILLISECONDS); + long acidTime = ConfigHelper.parseTime(config.getString("acid_time", "-1"), TimeUnit.MILLISECONDS); int acidPriority = config.getInt("acid_priority", 0); String name = config.getString("name"); double maturationScale = config.getInt("scale_amount", 1); @@ -157,7 +157,7 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) { List reinforceables = ConfigHelper.parseMaterialList(config, "reinforceables"); List nonReinforceables = ConfigHelper.parseMaterialList(config, "non_reinforceables"); short id = (short) config.getInt("id", -1); - long decayTimer = ConfigParsing + long decayTimer = ConfigHelper .parseTime(config.getString("decay_timer", String.valueOf(globalDecayTimer / 1000L) + "s")); double decayMultiplier = config.getDouble("decay_multiplier", globalDecayMultiplier); double multiplerOnDeletedGroup = config.getDouble("deleted_group_multipler", 4); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c4909cfe..4c415119 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -197,15 +197,15 @@ hangers_inherit_reinforcement: false # reinforcement_damageMultiplier is m where BlockDamage = 2 ^ (n/m) where n is equal to the number of days the group has been inactive reinforcement_damageMultiplier: 365 -#database: -# ==: vg.civcraft.mc.civmodcore.dao.ManagedDatasource -# plugin: Citadel -# user: 'mc_namelayer' -# password: 'minecraft' -# host: localhost -# port: 3306 -# database: namelayer -# poolsize: 5 -# connection_timeout: 10000 -# idle_timeout: 600000 -# max_lifetime: 7200000 +database: + ==: vg.civcraft.mc.civmodcore.dao.DatabaseCredentials + plugin: Citadel + user: 'mc_namelayer' + password: 'minecraft' + host: localhost + port: 3306 + database: namelayer + poolsize: 5 + connection_timeout: 10000 + idle_timeout: 600000 + max_lifetime: 7200000 From e417d3c205f7272e84bb6553d91ff5e195554169 Mon Sep 17 00:00:00 2001 From: Cola Date: Mon, 5 Jul 2021 21:32:20 +0100 Subject: [PATCH 14/22] Fix copper waxing/stripping --- .../mc/citadel/listener/BlockListener.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index 161dfbc4..a545e286 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -275,6 +275,27 @@ public void preventStrippingLogs(PlayerInteractEvent pie) { } } + /* + For some stupid reason, Waxing / Stripping copper blocks calls a BlockPlaceEvent instead of PlayerInteractEvent, + this obviously might change in future so heres a warning note + Reminder: This is retarded + */ + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void preventWaxingCopper(BlockPlaceEvent event) { + if (!MoreTags.COPPER_BLOCKS.isTagged(event.getBlockPlaced().getType())) { + return; + } + Reinforcement reinforcement = Citadel.getInstance().getReinforcementManager().getReinforcement(event.getBlockPlaced()); + if (reinforcement == null) { + return; + } + Player player = event.getPlayer(); + if (!reinforcement.hasPermission(player, CitadelPermissionHandler.getModifyBlocks())) { + player.sendMessage(ChatColor.RED + "You do not have permission to modify this block"); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void preventTilingGrass(PlayerInteractEvent pie) { if (!pie.hasBlock()) { From 9e4ec42263a581180d3faede431993cf2a9f6e63 Mon Sep 17 00:00:00 2001 From: Cola Date: Mon, 5 Jul 2021 22:06:12 +0100 Subject: [PATCH 15/22] Logic fix --- .../java/vg/civcraft/mc/citadel/listener/EntityListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java index 498c7c9c..2544b828 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java @@ -160,8 +160,10 @@ public void powderedSnowPickup(PlayerBucketFillEvent event) { Block clickedBlock = event.getBlockClicked(); Reinforcement reinforcement = Citadel.getInstance().getReinforcementManager().getReinforcement(clickedBlock); + if (reinforcement == null) { + return; + } Player player = event.getPlayer(); - if (!reinforcement.hasPermission(player, CitadelPermissionHandler.getBypass())) { player.sendMessage(Component.text("You do not have permission to bypass this block!").color(NamedTextColor.RED)); event.setCancelled(true); From c76f153f186b35ed4232fb42277119c89230739c Mon Sep 17 00:00:00 2001 From: Cola Date: Thu, 8 Jul 2021 13:05:17 +0100 Subject: [PATCH 16/22] Fix sweet berry and cave vines --- .../mc/citadel/listener/BlockListener.java | 14 ++++++++++++++ .../mc/citadel/listener/EntityListener.java | 3 +++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index a545e286..c60035e0 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -26,6 +26,7 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerHarvestBlockEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerTakeLecternBookEvent; import org.bukkit.event.world.StructureGrowEvent; @@ -275,6 +276,19 @@ public void preventStrippingLogs(PlayerInteractEvent pie) { } } + @EventHandler(priority = EventPriority.NORMAL) + public void rightClickCaveVines(PlayerHarvestBlockEvent event) { + Block harvestedBlock = event.getHarvestedBlock(); + Reinforcement reinforcement = ReinforcementLogic.getReinforcementProtecting(harvestedBlock); + if (reinforcement == null) { + return; + } + if (!reinforcement.hasPermission(event.getPlayer(), CitadelPermissionHandler.getCrops())) { + event.getPlayer().sendMessage(Component.text("You do not have permission to harvest this crop").color(NamedTextColor.RED)); + event.setCancelled(true); + } + } + /* For some stupid reason, Waxing / Stripping copper blocks calls a BlockPlaceEvent instead of PlayerInteractEvent, this obviously might change in future so heres a warning note diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java index 2544b828..76d03df1 100644 --- a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java +++ b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java @@ -89,6 +89,9 @@ public void changeBlock(EntityChangeBlockEvent ecbe) { if (ecbe.getBlock().getType() == Material.BIG_DRIPLEAF) { return; } + if (ecbe.getBlock().getType() == Material.CAVE_VINES || ecbe.getBlock().getType() == Material.CAVE_VINES_PLANT) { + return; + } ReinforcementLogic.damageReinforcement(rein, ReinforcementLogic.getDamageApplied(rein), ecbe.getEntity()); if (rein.isBroken()) { return; From 8dcaa59d064b8aae969850d79302e271c481e6ba Mon Sep 17 00:00:00 2001 From: Cola Date: Sun, 18 Jul 2021 23:45:29 +0100 Subject: [PATCH 17/22] 1.17.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7ad85cda..006e8c11 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ io.papermc.paper paper - 1.17-R0.1-SNAPSHOT + 1.17.1-R0.1-SNAPSHOT provided From 0e1853ff5f927c913b13290be22ca7e5e8503d03 Mon Sep 17 00:00:00 2001 From: Cola Date: Sun, 5 Sep 2021 23:21:26 +0100 Subject: [PATCH 18/22] Fix arg order for ctar --- .../java/vg/civcraft/mc/citadel/command/AreaReinforce.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java index 269dc660..ed8c0204 100644 --- a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java +++ b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java @@ -22,10 +22,10 @@ public class AreaReinforce extends BaseCommand { @CommandAlias("ctar") - @Syntax(" ") + @Syntax(" ") @Description("Using the reinforcement item in your main hand, reinforces an area to your default or a target group.") - @CommandCompletion("@nothing @nothing @nothing @nothing @nothing @nothing @CT_Groups") - public void execute(Player p, String minX, String minY, String minZ, String maxX, String maxY, String maxZ, @Optional String targetGroup) { + @CommandCompletion("@CT_Groups @nothing @nothing @nothing @nothing @nothing @nothing") + public void execute(Player p, @Optional String targetGroup, String minX, String minY, String minZ, String maxX, String maxY, String maxZ) { UUID uuid = NameAPI.getUUID(p.getName()); ReinforcementType reinType = Citadel.getInstance().getReinforcementTypeManager() .getByItemStack(p.getInventory().getItemInMainHand()); From 18ec78baf0dc1c58875d8f8444e0ff6b65dda3b9 Mon Sep 17 00:00:00 2001 From: Cola Date: Tue, 14 Sep 2021 23:33:07 +0100 Subject: [PATCH 19/22] Update citadel config to handle CMC update --- src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index f89c8a38..730f6d5d 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -170,7 +170,7 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) { logger.warning("Reinforcement type at " + config.getCurrentPath() + " had no id, it was ignored"); return null; } - if (reinforceables != null && nonReinforceables != null) { + if (!reinforceables.isEmpty() && !nonReinforceables.isEmpty()) { logger.warning("Both blacklist and whitelist specified for reinforcement type at " + config.getCurrentPath() + ". This does not make sense and the type will be ignored"); return null; From 4df29caa97ab099042f0ba96b1b7f2253521ed7e Mon Sep 17 00:00:00 2001 From: Cola Date: Tue, 14 Sep 2021 23:33:07 +0100 Subject: [PATCH 20/22] Revert "Update citadel config to handle CMC update" This reverts commit 18ec78baf0dc1c58875d8f8444e0ff6b65dda3b9. --- src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index 730f6d5d..f89c8a38 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -170,7 +170,7 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) { logger.warning("Reinforcement type at " + config.getCurrentPath() + " had no id, it was ignored"); return null; } - if (!reinforceables.isEmpty() && !nonReinforceables.isEmpty()) { + if (reinforceables != null && nonReinforceables != null) { logger.warning("Both blacklist and whitelist specified for reinforcement type at " + config.getCurrentPath() + ". This does not make sense and the type will be ignored"); return null; From 7e6c5f3ab5043686e5381f7d051927b9104e86eb Mon Sep 17 00:00:00 2001 From: Cola Date: Sun, 19 Sep 2021 15:34:13 +0100 Subject: [PATCH 21/22] Change parseMaterialList usage to account for CMC updates to method CMC updates means this method now returns an empty ArrayList vs null --- .../java/vg/civcraft/mc/citadel/CitadelConfigManager.java | 2 +- .../mc/citadel/reinforcementtypes/ReinforcementType.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index f89c8a38..730f6d5d 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -170,7 +170,7 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) { logger.warning("Reinforcement type at " + config.getCurrentPath() + " had no id, it was ignored"); return null; } - if (reinforceables != null && nonReinforceables != null) { + if (!reinforceables.isEmpty() && !nonReinforceables.isEmpty()) { logger.warning("Both blacklist and whitelist specified for reinforcement type at " + config.getCurrentPath() + ". This does not make sense and the type will be ignored"); return null; diff --git a/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java b/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java index b4d57aa6..29c86007 100644 --- a/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java +++ b/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java @@ -47,16 +47,16 @@ public ReinforcementType(float health, double returnChance, ItemStack item, long this.destructionEffect = destructionEffect; this.gracePeriod = gracePeriod; this.deletedGroupMulitplier = deletedGroupMulitplier; - if (allowsReinforceables != null) { + if (!allowsReinforceables.isEmpty()) { this.allowedReinforceables = new TreeSet<>(allowsReinforceables); } else { // can only black list OR white list - if (disallowedReinforceables != null) { + if (!disallowedReinforceables.isEmpty()) { this.disallowedReinforceables = new TreeSet<>(disallowedReinforceables); } } this.globalBlackList = new TreeSet<>(); - if (globalBlackList != null) { + if (!globalBlackList.isEmpty()) { this.globalBlackList.addAll(globalBlackList); } this.id = id; From 7d687287757f6b89443a185ded55f53cd14a0095 Mon Sep 17 00:00:00 2001 From: Cola Date: Sun, 19 Sep 2021 22:26:01 +0100 Subject: [PATCH 22/22] Add Sweet Berry bush to plant check --- src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java index b7cf0c3a..c107ccbe 100644 --- a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java +++ b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java @@ -67,6 +67,7 @@ public static boolean isPlant(Block plant) { case CAVE_VINES: case CAVE_VINES_PLANT: case SMALL_DRIPLEAF: + case SWEET_BERRY_BUSH: return true; default: return false;