From 0023ddedd108beb0d82c5b4e089b681753f6ab23 Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 18 Jul 2021 19:07:23 +0800 Subject: [PATCH] v4.0.2 --- LICENSE | 2 +- README.md | 4 +- pom.xml | 2 +- .../St3venAU/plugins/ArmorStandTools/AST.java | 17 ++++---- .../ArmorStandTools/ArmorStandGUI.java | 36 ++++++++++++---- .../ArmorStandTools/ArmorStandTool.java | 41 +++++++++++-------- .../plugins/ArmorStandTools/Commands.java | 23 ++++++++++- .../plugins/ArmorStandTools/Config.java | 12 +++--- .../plugins/ArmorStandTools/MainListener.java | 12 ++++-- .../ArmorStandTools/PlotSquaredHook.java | 8 +--- .../plugins/ArmorStandTools/Utils.java | 1 + src/main/resources/config.yml | 6 +++ src/main/resources/language.yml | 26 ++++++++++-- src/main/resources/plugin.yml | 2 +- 14 files changed, 134 insertions(+), 58 deletions(-) diff --git a/LICENSE b/LICENSE index b60c405..062ac95 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2019 St3venAU +Copyright (c) 2021 St3venAU Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f77b551..0fbb879 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,8 @@ WorldGuard Integration Permissions ----------- -- astools.use : Permission for using any of the tools, except for those that have a custom permission below +- astools.use: Permission for using any of the tools, except for those that have a custom permission below +- astools.new: Permission to use "/astools new" command to summon a new armor stand - astools.clone: Permission to use the clone tool - astools.head: Permission to use the player head tool (Ability to specify a player head for an armor stand) - astools.summon: Permission to use the summon tool (Summons an armor stand without requiring the materials) @@ -66,6 +67,7 @@ Permissions - astools.ascmd.assign.player: Permission to assign a player command to an armor stand - astools.ascmd.remove: Permission to remove a command from an armor stand - astools.ascmd.view: Permission to view the command assigned to an armor stand +- astools.ascmd.cooldown: Permission to add a cooldown to commands assigned to an armor stand - astools.ascmd.execute: Permission to execute a command assigned to an armor stand by (on right click) - astools.bypass-wg-flag: Permission to bypass the WorldGuard ast flag, allowing the player to use AST even in regions that ast flag is set to deny. diff --git a/pom.xml b/pom.xml index 2fd6870..4cf7d36 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.gmail.St3venAU.plugins ArmorStandTools -4.0.1 +4.0.2 ArmorStandTools diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/AST.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/AST.java index 41b061a..e38d240 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/AST.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/AST.java @@ -172,9 +172,7 @@ public class AST extends JavaPlugin { static boolean checkBlockPermission(Player p, Block b) { if(b == null) return true; if (PlotSquaredHook.api != null) { - debug("PlotSquaredHook.api: " + PlotSquaredHook.api); Location l = b.getLocation(); - debug("PlotSquaredHook.isPlotWorld(l): " + PlotSquaredHook.isPlotWorld(l)); if(PlotSquaredHook.isPlotWorld(l)) { Boolean hasPermission = PlotSquaredHook.checkPermission(p, l); if(hasPermission != null) { @@ -205,17 +203,18 @@ public class AST extends JavaPlugin { } static boolean playerHasPermission(Player p, Block b, ArmorStandTool tool) { - debug("tool: " + tool); - if(tool != null) { - debug("en: " + tool.isEnabled()); - debug("perm: " + Utils.hasPermissionNode(p, tool.getPermission())); + String permNode = tool == null ? "astools.use" : tool.getPermission(); + boolean enabled = tool == null || tool.isEnabled(); + boolean hasNode = Utils.hasPermissionNode(p, permNode); + boolean blockPerm = checkBlockPermission(p, b); + if(Config.debug) { + AST.debug("Plr: " + p.getName() + ", Tool: " + tool + ", Tool En: " + enabled + ", Perm: " + permNode + ", Has Perm: " + hasNode + ", Location Perm: " + blockPerm); } - String permission = tool == null ? "astools.use" : tool.getPermission(); - return (tool == null || tool.isEnabled()) && Utils.hasPermissionNode(p, permission) && checkBlockPermission(p, b); + return enabled && hasNode && blockPerm; } static void debug(String msg) { if(!Config.debug) return; - Bukkit.getLogger().log(Level.INFO, "[DEBUG] " + msg); + Bukkit.getLogger().log(Level.INFO, "[AST DEBUG] " + msg); } } \ No newline at end of file diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandGUI.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandGUI.java index 712751e..280e456 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandGUI.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandGUI.java @@ -3,6 +3,7 @@ package com.gmail.st3venau.plugins.armorstandtools; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; @@ -24,12 +25,12 @@ import java.util.UUID; class ArmorStandGUI implements Listener { - private static final int INV_SLOT_HELMET = 2; - private static final int INV_SLOT_CHEST = 11; - private static final int INV_SLOT_PANTS = 20; - private static final int INV_SLOT_BOOTS = 29; - private static final int INV_SLOT_R_HAND = 10; - private static final int INV_SLOT_L_HAND = 12; + private static final int INV_SLOT_HELMET = 1; + private static final int INV_SLOT_CHEST = 10; + private static final int INV_SLOT_PANTS = 19; + private static final int INV_SLOT_BOOTS = 28; + private static final int INV_SLOT_R_HAND = 9; + private static final int INV_SLOT_L_HAND = 11; private static final HashSet inUse = new HashSet<>(); private static final HashSet invSlots = new HashSet<>(); @@ -106,10 +107,12 @@ class ArmorStandGUI implements Listener { event.setCancelled(true); return; } + boolean rightClick = event.getClick() == ClickType.RIGHT; int slot = event.getRawSlot(); if(slot > i.getSize()) return; + Location l = as.getLocation(); if(invSlots.contains(slot)) { - if(AST.checkBlockPermission(p, as.getLocation().getBlock())) { + if(AST.checkBlockPermission(p, l.getBlock())) { updateArmorStandInventory(); } else { event.setCancelled(true); @@ -121,7 +124,7 @@ class ArmorStandGUI implements Listener { if(!(event.getWhoClicked() instanceof Player)) return; ArmorStandTool t = ArmorStandTool.get(event.getCurrentItem()); if(t == null) return; - if (!AST.playerHasPermission(p, as.getLocation().getBlock(), t)) { + if (!AST.playerHasPermission(p, l.getBlock(), t)) { p.sendMessage(ChatColor.RED + Config.generalNoPerm); return; } @@ -193,6 +196,23 @@ class ArmorStandGUI implements Listener { AST.pickUpArmorStand(as, p); Utils.title(p, Config.carrying); break; + case UP: + case DOWN: + double dist = (t == ArmorStandTool.UP ? 1 : -1) * (rightClick ? 1 : 0.1); + l.add(0, dist,0); + if (!AST.playerHasPermission(p, l.getBlock(), null)) { + p.closeInventory(); + p.sendMessage(ChatColor.RED + Config.wgNoPerm); + break; + } + as.setGravity(false); + as.teleport(l); + break; + case ROTATE: + float yaw = l.getYaw() + (rightClick ? -5 : 5); + l.setYaw(yaw); + as.teleport(l); + break; case GLOW: boolean glowing = !as.isGlowing(); as.setGlowing(glowing); diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandTool.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandTool.java index 7e02942..153e491 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandTool.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/ArmorStandTool.java @@ -16,25 +16,30 @@ import java.util.UUID; public enum ArmorStandTool { - HEAD ("gui_head", Material.PLAYER_HEAD, 6, "astools.use", false), - BODY ("gui_body", Material.NETHER_BRICKS, 15, "astools.use", false), - RARM ("gui_rarm", Material.REDSTONE_TORCH, 14, "astools.use", true), - LARM ("gui_larm", Material.TORCH, 16, "astools.use", true), - RLEG ("gui_rleg", Material.BLAZE_ROD, 23, "astools.use", true), - LLEG ("gui_lleg", Material.BONE, 25, "astools.use", true), - MOVE ("gui_move", Material.FEATHER, 24, "astools.use", false), - CLONE ("gui_clone", Material.GLOWSTONE_DUST, 33, "astools.clone", false), - SAVE ("gui_save", Material.DIAMOND, 43, "astools.cmdblock",false), - SLOTS ("gui_slots", Material.IRON_HOE, 44, "astools.use", false), + HEAD ("gui_head", Material.PLAYER_HEAD, 7, "astools.use", false), + BODY ("gui_body", Material.NETHER_BRICKS, 16, "astools.use", false), + RARM ("gui_rarm", Material.REDSTONE_TORCH, 15, "astools.use", true), + LARM ("gui_larm", Material.TORCH, 17, "astools.use", true), + RLEG ("gui_rleg", Material.BLAZE_ROD, 24, "astools.use", true), + LLEG ("gui_lleg", Material.BONE, 26, "astools.use", true), + MOVE ("gui_move", Material.FEATHER, 25, "astools.use", false), + CLONE ("gui_clone", Material.GLOWSTONE_DUST, 34, "astools.clone", false), + + UP ("gui_moveup", Material.LIGHTNING_ROD, 4, "astools.use", false), + DOWN ("gui_movedown",Material.LEVER, 13, "astools.use", false), + ROTATE ("gui_rotate", Material.ENDER_PEARL, 22, "astools.use", false), + + PHEAD ("gui_pHead", Material.PLAYER_HEAD, 36, "astools.head", false), NAME ("gui_name", Material.NAME_TAG, 45, "astools.use", false), - PHEAD ("gui_pHead", Material.PLAYER_HEAD, 46, "astools.head", false), - INVIS ("gui_invis", Material.GOLD_NUGGET, 47, "astools.use", false), - ARMS ("gui_arms", Material.ARROW, 48, "astools.use", false), - BASE ("gui_base", Material.STONE_SLAB, 49, "astools.use", false), - SIZE ("gui_size", Material.EMERALD, 50, "astools.use", false), - GRAV ("gui_grav", Material.GHAST_TEAR, 51, "astools.use", false), - INVUL ("gui_invul", Material.GLISTERING_MELON_SLICE, 52, "astools.use", false), - GLOW ("gui_glow", Material.GLOWSTONE, 53, "astools.glow", false); + INVIS ("gui_invis", Material.GOLD_NUGGET, 46, "astools.use", false), + ARMS ("gui_arms", Material.ARROW, 47, "astools.use", false), + BASE ("gui_base", Material.STONE_SLAB, 48, "astools.use", false), + SIZE ("gui_size", Material.EMERALD, 49, "astools.use", false), + GRAV ("gui_grav", Material.GHAST_TEAR, 50, "astools.use", false), + INVUL ("gui_invul", Material.GLISTERING_MELON_SLICE, 51, "astools.use", false), + SLOTS ("gui_slots", Material.IRON_HOE, 52, "astools.use", false), + GLOW ("gui_glow", Material.GLOWSTONE, 53, "astools.glow", false), + SAVE ("gui_save", Material.DIAMOND, 44, "astools.cmdblock",false); private final ItemStack item; private final String config_id; diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Commands.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Commands.java index 6c7b124..bcd26fb 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Commands.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Commands.java @@ -1,12 +1,14 @@ package com.gmail.st3venau.plugins.armorstandtools; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -29,7 +31,22 @@ class Commands implements CommandExecutor, TabCompleter { p.sendMessage(ChatColor.RED + Config.noCommandPerm); return true; } - p.sendMessage(ChatColor.AQUA + Config.instructions); + if(args.length > 0 && args[0].equalsIgnoreCase("new")) { + // astools new + if (!Utils.hasPermissionNode(p, "astools.new")) { + p.sendMessage(ChatColor.RED + Config.noCommandPerm); + return true; + } + Location l = Utils.getLocationFacing(p.getLocation()); + if(l.getWorld() == null) { + p.sendMessage(ChatColor.RED + Config.error); + return true; + } + ArmorStand as = (ArmorStand) l.getWorld().spawnEntity(l, EntityType.ARMOR_STAND); + AST.pickUpArmorStand(as, p); + Utils.title(p, Config.carrying); + } + p.sendMessage(ChatColor.AQUA + Config.instructions1 + ChatColor.GREEN + " /ast new " + ChatColor.AQUA + Config.instructions2); return true; } else if(cmd.equals("ascmd")) { ArmorStand as = getNearbyArmorStand(p); @@ -111,6 +128,10 @@ class Commands implements CommandExecutor, TabCompleter { p.sendMessage("\n" + Config.assignCmdError + name); } } else if(args.length >= 2 && args[0].equalsIgnoreCase("cooldown")) { //ascmd cooldown /remove + if (!Utils.hasPermissionNode(p, "astools.ascmd.cooldown")) { + p.sendMessage(ChatColor.RED + Config.noCommandPerm); + return true; + } ArmorStandCmd asCmd = new ArmorStandCmd(as); if(asCmd.getCommand() == null) { p.sendMessage(Config.closestAS + name + Config.hasNoCmd); diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Config.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Config.java index 7eafd21..89029ee 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Config.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Config.java @@ -37,9 +37,9 @@ class Config { ascmdHelp, viewCmd, removeCmd, assignConsole, assignPlayer, executeCmdError, cmdOnCooldown, cooldownRemovedFrom, isAnInvalidCooldown, - cooldownSetTo, ticksFor, setCooldown, - removeCooldown, glow, instructions, crouch, click, - finish; + cooldownSetTo, ticksFor, setCooldown, glow, + removeCooldown, instructions1, instructions2, + crouch, click, finish, error; static void reload(AST main) { plugin = main; @@ -57,7 +57,7 @@ class Config { requireCreative = config.getBoolean("requireCreativeForSaveAsCmdBlock"); defaultASCmdCooldownTicks = config.getInt("defaultASCmdCooldownTicks"); ignoreWGForASCmdExecution = config.getBoolean("bypassWorldguardForASCmdExecution"); - debug = config.getBoolean("debug", false); + debug = config.getBoolean("showDebugMessages", false); AST.activeTool.clear(); AST.selectedArmorStand.clear(); @@ -159,10 +159,12 @@ class Config { removeCooldown = languageConfig.getString("removeCooldown"); ticksFor = languageConfig.getString("ticksFor"); glow = languageConfig.getString("glow"); - instructions = languageConfig.getString("instructions"); + instructions1 = languageConfig.getString("instructions1"); + instructions2 = languageConfig.getString("instructions2"); crouch = languageConfig.getString("crouch"); click = languageConfig.getString("click"); finish = languageConfig.getString("finish"); + error = languageConfig.getString("error"); } } diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/MainListener.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/MainListener.java index edb7ddf..2cf12ad 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/MainListener.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/MainListener.java @@ -25,6 +25,7 @@ import org.bukkit.metadata.MetadataValue; import java.util.UUID; import java.util.regex.Pattern; +@SuppressWarnings("CommentedOutCode") public class MainListener implements Listener { private static final Pattern MC_USERNAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_]{3,16}$"); @@ -34,9 +35,14 @@ public class MainListener implements Listener { Player p = event.getPlayer(); if(stopEditing(p, false)) { event.setCancelled(true); + AST.debug("Interaction cancelled as player is already editing"); } if(!(event.getRightClicked() instanceof ArmorStand)) return; ArmorStand as = (ArmorStand) event.getRightClicked(); + AST.debug(p.getName() + " right-clicked " + as.getName() + ", Crouching: " + p.isSneaking()); + if(event.isCancelled()) { + AST.debug("Interaction with Armor Stand was cancelled by a plugin"); + } if(!event.isCancelled() && ArmorStandGUI.isInUse(as)) { Utils.title(p, Config.guiInUse); event.setCancelled(true); @@ -66,9 +72,7 @@ public class MainListener implements Listener { ArmorStand getCarryingArmorStand(Player p) { UUID uuid = p.getUniqueId(); - return ArmorStandTool.MOVE == AST.activeTool.get(uuid) - ? AST.selectedArmorStand.get(uuid) - : null; + return ArmorStandTool.MOVE == AST.activeTool.get(uuid) ? AST.selectedArmorStand.get(uuid) : null; } @EventHandler(priority = EventPriority.LOWEST) @@ -247,7 +251,9 @@ public class MainListener implements Listener { attachment.setPermission("astools.ascmd.remove", true); attachment.setPermission("astools.ascmd.assign.player", true); attachment.setPermission("astools.ascmd.assign.console", true); + attachment.setPermission("astools.ascmd.cooldown", true); attachment.setPermission("astools.ascmd.execute", true); + attachment.setPermission("astools.new", true); //attachment.setPermission("astools.bypass-wg-flag", true); }*/ diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/PlotSquaredHook.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/PlotSquaredHook.java index 9af6133..2ce334a 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/PlotSquaredHook.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/PlotSquaredHook.java @@ -25,24 +25,18 @@ class PlotSquaredHook { public static Boolean checkPermission(Player p, Location l) { if(l.getWorld() == null) return null; - com.plotsquared.core.location.Location plotLocation - = com.plotsquared.core.location.Location.at(l.getWorld().getName(), BlockVector3.at(l.getBlockX(), l.getBlockY(), l.getBlockZ())); + com.plotsquared.core.location.Location plotLocation = com.plotsquared.core.location.Location.at(l.getWorld().getName(), BlockVector3.at(l.getBlockX(), l.getBlockY(), l.getBlockZ())); PlotArea plotArea = plotLocation.getPlotArea(); if(plotArea == null) { - AST.debug("plots.admin.build.road: " + p.hasPermission("plots.admin.build.road")); return p.hasPermission("plots.admin.build.road"); } Plot plot = plotArea.getPlot(plotLocation); PlotPlayer pp = api.wrapPlayer(p.getUniqueId()); if(pp == null) return null; - AST.debug("Plot: " + plot); if (plot == null) { - AST.debug("plots.admin.build.road: " + pp.hasPermission("plots.admin.build.road")); return pp.hasPermission("plots.admin.build.road"); } UUID uuid = pp.getUUID(); - AST.debug("plot.isAdded: " + plot.isAdded(uuid)); - AST.debug("plots.admin.build.other: " + pp.hasPermission("plots.admin.build.other")); return plot.isAdded(uuid) || pp.hasPermission("plots.admin.build.other"); } } diff --git a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Utils.java b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Utils.java index eac6f5b..d4a5bbe 100644 --- a/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Utils.java +++ b/src/main/java/com/gmail/St3venAU/plugins/ArmorStandTools/Utils.java @@ -232,6 +232,7 @@ class Utils { sb.append(",Count:").append(is.getAmount()); } String itemStackTags = getItemStackTags(is); + @SuppressWarnings("deprecation") short durability = is.getDurability(); String skullOwner = skullOwner(is); int n = 0; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d3a1543..d83efb6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -31,6 +31,7 @@ # # Permissions: # astools.use Permission to using any of the tools, except the ones below that have their own separate permissions (see below) +# astools.new Permission to use "/astools new" command to summon a new armor stand # astools.clone Permission to use the clone tool (Clones an armor stand without requiring the materials) # astools.summon Permission to use the summon tool (Summons an armor stand without requiring the materials) # astools.head Permission to use the player head tool (Ability to specify a player head for an armor stand) @@ -40,6 +41,7 @@ # astools.ascmd.remove Permission to remove a command from an armor stand # astools.ascmd.view Permission to view the command assigned to an armor stand # astools.ascmd.execute Permission to execute a command assigned to an armor stand by (on right click) +# astools.ascmd.cooldown Permission to add a cooldown to commands assigned to an armor stand # astools.bypass-wg-flag Permission to bypass AST's custom worldguard flag (see below for more details) # # WorldGuard Integration: @@ -50,6 +52,7 @@ # this permission can use AST in worldguard regions even if the ast flag for that region is set to Deny. # - The ast worldguard flag is also ignored for players that have op. # +showDebugMessages: false integrateWithWorldGuard: true allowMovingStandsBetweenWorlds: false requireCreativeForSaveAsCmdBlock: false @@ -68,6 +71,9 @@ enableTool: gui_pHead: true gui_invul: true gui_move: true + gui_moveup: true + gui_movedown: true + gui_rotate: true gui_glow: true gui_head: true gui_body: true diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml index 1dbf409..81b580b 100644 --- a/src/main/resources/language.yml +++ b/src/main/resources/language.yml @@ -84,19 +84,39 @@ removeCooldown: 'Remove the cooldown for the command' # New since v3.4.1 glow: 'Glow' #New since v4.0.0 -instructions: 'Crouch + right-click an armor stand to use Armor Stand Tools' crouch: 'Crouch' click: 'Click' finish: 'Finish' +#New since v4.0.2 +instructions1: 'Crouch + right-click an armor stand to edit, or use command' +instructions2: 'to summon a new armor stand' +error: 'An error occured. Try again.' # ############################# # Tool names & descriptions # ############################# tool: gui_move: - name: 'Pick Up (Move/Rotate)' + name: 'Pick Up (Move)' lore: - - 'Pick up this armor stand to move or rotate it' + - 'Pick up this armor stand to move it' + gui_moveup: + name: 'Move Up' + lore: + - 'Left click: Move up 0.1 block' + - 'Right click: Move up 1 block' + - '(Automatically disables gravity)' + gui_movedown: + name: 'Move Down' + lore: + - 'Left click: Move down 0.1 block' + - 'Right click: Move down 1 block' + - '(Automatically disables gravity)' + gui_rotate: + name: 'Rotate' + lore: + - 'Left click: Rotate clockwise 5°' + - 'Right click: Rotate anti-clockwise 5°' gui_clone: name: 'Clone' lore: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3699737..9a49e15 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -9,7 +9,7 @@ commands: astools: description: Provides player instructions on how to use AST aliases: ast - usage: Usage /astools or /ast + usage: Usage /astools or /ast, /ast new ascmd: description: View/Remove/Assign the command assigned to the nearest armor stand usage: Usage /ascmd view, /ascmd remove, /ascmd assign \ No newline at end of file