diff --git a/API-Example-Plugin/pom.xml b/API-Example-Plugin/pom.xml index 71a560e6..4e90681c 100644 --- a/API-Example-Plugin/pom.xml +++ b/API-Example-Plugin/pom.xml @@ -1,12 +1,12 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 io.github.rypofalem.apiexample armorstandeditor-apitest jar 1.20.1-43.2 armorstandeditor-apitest - http://maven.apache.org + s://maven.apache.org 17 diff --git a/pom.xml b/pom.xml index cdbd7a20..f742afee 100644 --- a/pom.xml +++ b/pom.xml @@ -1,12 +1,12 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 io.github.rypofalem.armorstandeditor armorstandeditor jar - 1.20.2-44.1 + 1.20.4-45 armorstandeditor - http://maven.apache.org + https://maven.apache.org 17 @@ -106,7 +106,7 @@ org.spigotmc spigot-api - 1.20.2-R0.1-SNAPSHOT + 1.20.4-R0.1-SNAPSHOT provided diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/Metrics.java b/src/main/java/io/github/rypofalem/armorstandeditor/Metrics.java index 8a3666bb..a842cfab 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/Metrics.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/Metrics.java @@ -4,15 +4,16 @@ * * IMPORTANT: You are not allowed to modify this class, except changing the package. * - * Unallowed modifications include but are not limited to: + * Disallowed modifications include but are not limited to: * - Remove the option for users to opt-out * - Change the frequency for data submission - * - Obfuscate the code (every obfucator should allow you to make an exception for specific files) + * - Obfuscate the code (every obfuscator should allow you to make an exception for specific files) * - Reformat the code (if you use a linter, add an exception) * * Violations will result in a ban of your plugin and account from bStats. */ package io.github.rypofalem.armorstandeditor; + import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -877,4 +878,4 @@ public String toString() { } } } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java index 81c30121..9d26c0e7 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java @@ -18,6 +18,7 @@ */ package io.github.rypofalem.armorstandeditor; +import io.github.rypofalem.armorstandeditor.menu.PresetArmorPosesMenu; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; @@ -65,6 +66,7 @@ public class PlayerEditor { int targetIndex = 0; int frameTargetIndex = 0; EquipmentMenu equipMenu; + PresetArmorPosesMenu presetPoseMenu; long lastCancelled = 0; public PlayerEditor(UUID uuid, ArmorStandEditorPlugin plugin) { @@ -109,7 +111,7 @@ public void setCopySlot(byte slot) { } public void editArmorStand(ArmorStand armorStand) { - if (getPlayer().hasPermission("asedit.basic")) { + if (getPlayer().hasPermission("asedit.basic")) { armorStand = attemptTarget(armorStand); switch (eMode) { @@ -173,6 +175,9 @@ public void editArmorStand(ArmorStand armorStand) { case GLOWING: toggleGlowing(armorStand); break; + case PRESET: + choosePreset(armorStand); + break; case NONE: default: sendMessage("nomode", null); @@ -212,6 +217,12 @@ private void openEquipment(ArmorStand armorStand) { equipMenu.open(); } + private void choosePreset(ArmorStand armorStand){ + if (!getPlayer().hasPermission("asedit.basic")) return; + presetPoseMenu = new PresetArmorPosesMenu(this, armorStand); + presetPoseMenu.openMenu(); + } + public void reverseEditArmorStand(ArmorStand armorStand) { if (!getPlayer().hasPermission("asedit.basic")) return; @@ -518,6 +529,7 @@ private EulerAngle subEulerAngle(EulerAngle angle) { return angle; } + public void setTarget(ArrayList armorStands) { if (armorStands == null || armorStands.isEmpty()) { target = null; @@ -594,6 +606,7 @@ public void setFrameTarget(ArrayList itemFrames) { } + ArmorStand attemptTarget(ArmorStand armorStand) { if (target == null || !target.isValid() diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java index 9dfb5c14..aa341a88 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java @@ -38,7 +38,6 @@ import org.bukkit.event.player.*; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; import org.bukkit.persistence.PersistentDataType; import org.bukkit.util.Vector; @@ -53,6 +52,7 @@ public class PlayerEditorManager implements Listener { private HashMap players; private ASEHolder menuHolder = new ASEHolder(); //Inventory holder that owns the main ase menu inventories for the plugin private ASEHolder equipmentHolder = new ASEHolder(); //Inventory holder that owns the equipment menu + private ASEHolder presetHolder = new ASEHolder(); //Inventory Holder that owns the PresetArmorStand Post Menu double coarseAdj; double fineAdj; double coarseMov; @@ -416,8 +416,21 @@ void onPlayerMenuSelect(InventoryClickEvent e) { e.setCancelled(true); } } + + if (e.getInventory().getHolder() == presetHolder){ + e.setCancelled(true); + ItemStack item = e.getCurrentItem(); + if(item != null && item.hasItemMeta()){ + Player player = (Player) e.getWhoClicked(); + String itemName = item.getItemMeta().getDisplayName(); + PlayerEditor pe = players.get(player.getUniqueId()); + pe.presetPoseMenu.handlePresetPose(itemName, player); + } + } } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) void onPlayerMenuClose(InventoryCloseEvent e) { if (e.getInventory().getHolder() == null) return; @@ -455,10 +468,16 @@ public ASEHolder getEquipmentHolder() { return equipmentHolder; } + public ASEHolder getPresetHolder() { + return presetHolder; + } + long getTime() { return counter.ticks; } + + class TickCounter implements Runnable { long ticks = 0; //I am optimistic diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/menu/ItemFactory.java b/src/main/java/io/github/rypofalem/armorstandeditor/menu/ItemFactory.java new file mode 100644 index 00000000..b91dd127 --- /dev/null +++ b/src/main/java/io/github/rypofalem/armorstandeditor/menu/ItemFactory.java @@ -0,0 +1,130 @@ +package io.github.rypofalem.armorstandeditor.menu; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/* + * Currently not used but groundwork is now being laid for later + */ +public interface ItemFactory { + static ItemFactory getInstance() { + return new ItemFactory() {}; + } + + default ItemStack createItem(ConfigurationSection section, Inventory inventory, Function function) { + ItemStack itemStack = createItem(section, (Function) null, null); + if (itemStack == null || section == null) return itemStack; + + int slot = section.getInt("slot", -1); + if (slot != -1 && inventory != null) inventory.setItem(slot, function == null ? itemStack : function.apply(itemStack)); + return itemStack; + } + + default ItemStack createItem(ConfigurationSection section, Function nameReplacements, Function, List> loreReplacements) { + if (section == null) return null; // If the section is null, return null. + + String upper = section.getString( "material"); + if (upper == null) return null; + + Material material = Material.getMaterial(loreReplacements == null ? upper.toUpperCase() : nameReplacements.apply(upper)); // Get the material from the config. + if (material == null || material == Material.AIR) return null; // If the material is null or air, return null. + if (material == getSkullMaterial() && (section.getString("owner") != null || section.getString("texture") != null)) // If the material is a skull and the owner or texture is set, create a skull. + return createSkull(section, nameReplacements, loreReplacements); + + ItemStack itemStack = new ItemStack(material, section.getInt("amount", 1), (short) section.getInt("data")); // Create the item stack. + return addBaseItemMeta(itemStack, itemStack.getItemMeta(), section, nameReplacements, loreReplacements); // Add the base item meta. + } + + default ItemStack createSkull(ConfigurationSection section, Function nameReplacements, Function, List> loreReplacements) { + if (section == null) return null; + + ItemStack itemStack = new ItemStack(getSkullMaterial(), section.getInt("amount", 1), (short) section.getInt("data")); // Create the item stack. + return addBaseItemMeta(itemStack, applyBasicSkull(itemStack, section, nameReplacements), section, nameReplacements, loreReplacements); // Add the base item meta. + } + + default SkullMeta applyBasicSkull(ItemStack itemStack, ConfigurationSection section, Function nameReplacements) { + SkullMeta im = (SkullMeta) itemStack.getItemMeta(); // Get the item meta. + String owner = section.getString( "owner"); // Get the owner from the config. + if (owner == null) im.setOwner(nameReplacements == null ? owner : nameReplacements.apply(owner)); // If the owner is not empty, set the owner. + + String texture = section.getString("texture"); // Get the texture from the config. + if (texture == null) { + GameProfile profile = new GameProfile(UUID.randomUUID(), null); // Create a new game profile. + profile.getProperties().put("textures", new Property("textures", texture)); // Set the texture. + + try { + Field profileField = im.getClass().getDeclaredField("profile"); // Get the profile field. + profileField.setAccessible(true); // Set the field to accessible. + profileField.set(im, profile); // Set the profile. + } catch (Exception e) { + e.printStackTrace(); + } + } + return im; // Return the item meta. + } + + default ItemStack addBaseItemMeta(ItemStack itemStack, ItemMeta im, ConfigurationSection section, Function nameReplacements, Function, List> loreReplacements) { + if (section == null || itemStack.getAmount() <= 0) return null; // If the section is null or the amount is 0, return null. + + String name = ChatColor.translateAlternateColorCodes('&', section.getString("name")); // Get the name from the config. + im.setDisplayName((nameReplacements == null || name == null ? name : nameReplacements.apply(name))); // Set the display name. + + List lore = section.getStringList("lore"); // Get the lore from the config. + im.setLore((loreReplacements == null ? lore : loreReplacements.apply(lore).stream().flatMap(x -> Arrays.stream(x.split("\n"))).toList()).stream().map(x -> ChatColor.translateAlternateColorCodes('&', x)).collect(Collectors.toList())); // Set the lore. + + if (section.getBoolean("glowing")) { // If the item is glowing, + im.addEnchant(Enchantment.DURABILITY, 1, true); // Add the durability enchantment. + try { + im.addItemFlags(ItemFlag.HIDE_ENCHANTS); // Add the hide enchants flag. + } catch (NoClassDefFoundError ignored) { + } + } + try { + section.getStringList("item-flags").forEach(x -> im.addItemFlags(ItemFlag.valueOf(x))); // Add the item flags. + } catch (NoClassDefFoundError ignored) { + } + try { + section.getStringList("enchantments").forEach(x -> im.addEnchant(Enchantment.getByName(x.split(":")[0].toUpperCase()), Integer.parseInt(x.split(":")[1]), true)); // Add the enchantments. + } catch (NoClassDefFoundError ignored) { + } + try { + int customModelData = section.getInt("custom-model-data", -1); // Get the custom model data. + if (customModelData != -1) im.setCustomModelData(customModelData); // Set the custom model data. + } catch (Throwable ignored) {} + + if (im instanceof PotionMeta) { + try { + PotionEffect effect = new PotionEffect(PotionEffectType.getByName(section.getString("effect")), section.getInt("duration"), section.getInt("amplifier")); + ((PotionMeta) im).addCustomEffect(effect, true); + } catch (Throwable ignored) {} + } + itemStack.setItemMeta(im); // Set the item meta. + return itemStack; // Return the item stack. + } + + default Material getSkullMaterial() { + Material icon = Material.getMaterial("PLAYER_HEAD"); // Get the player head material. + if (icon == null) return Material.getMaterial("SKULL_ITEM"); // If the player head material is null, get the skull item material. + return icon; + } +} diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java b/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java index 5db9d701..85478910 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java @@ -78,6 +78,7 @@ private void fillInventory() { ItemStack help; ItemStack itemFrameVisible; ItemStack blankSlot; + ItemStack presetItem = null; //Variables that need to be Initialized ItemStack place = null; @@ -134,6 +135,8 @@ private void fillInventory() { showArms = createIcon(new ItemStack(Material.STICK), "showarms", "mode showarms"); + presetItem = createIcon(new ItemStack(Material.BOOKSHELF), "presetmenu", "mode preset"); + //Praise Start - Sikatsu and cowgod, Nicely spotted this being broken if (pe.getPlayer().hasPermission("asedit.togglearmorstandvisibility") || pe.plugin.getArmorStandVisibility()) { @@ -236,16 +239,17 @@ private void fillInventory() { help = createIcon(new ItemStack(Material.NETHER_STAR), "helpgui", "help"); + ItemStack[] items ={ - ItemStack[] items = { blankSlot, blankSlot, blankSlot, xAxis, yAxis, zAxis, blankSlot, blankSlot, help, copy, paste, blankSlot, playerHead, headPos, reset, blankSlot, itemFrameVisible, glowing, slot1, slot2, blankSlot, rightArmPos, bodyPos, leftArmPos, blankSlot, rotate, place, slot3, slot4, blankSlot, rightLegPos, equipment, leftLegPos, blankSlot, coarseAdj, fineAdj, - blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, - blankSlot, showArms, visibility, size, gravity, plate, toggleVulnerabilty, disableSlots, blankSlot + presetItem, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, blankSlot, disableSlots, + blankSlot, showArms, visibility, size, blankSlot, plate, toggleVulnerabilty, gravity, blankSlot }; + menuInv.setContents(items); } diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/menu/PresetArmorPosesMenu.java b/src/main/java/io/github/rypofalem/armorstandeditor/menu/PresetArmorPosesMenu.java new file mode 100644 index 00000000..80c808bb --- /dev/null +++ b/src/main/java/io/github/rypofalem/armorstandeditor/menu/PresetArmorPosesMenu.java @@ -0,0 +1,264 @@ +/* + * ArmorStandEditor: Bukkit plugin to allow editing armor stand attributes + * Copyright (C) 2016-2023 RypoFalem + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package io.github.rypofalem.armorstandeditor.menu; + +import io.github.rypofalem.armorstandeditor.PlayerEditor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.util.EulerAngle; + +import java.util.ArrayList; + +public class PresetArmorPosesMenu { + + Inventory menuInv; + private PlayerEditor pe; + private ArmorStand armorstand; + static String name; + + //PRESET NAMES + final String SITTING = "§2§nSitting"; + final String WAVING = "§2§nWaving"; + final String GREETING_1 = "§2§nGreeting 1"; + final String GREETING_2 = "§2§nGreeting 2"; + final String CHEERS = "§2§nCheers"; + final String ARCHER = "§2§nArcher"; + final String DANCING = "§2§nDancing"; + final String HANG = "§2§nHanging"; + final String PRESENT = "§2§nPresent"; + final String FISHING = "§2§nFishing"; + + //Menu Stuff + final String BACKTOMENU = "§2§nBack to Menu"; + final String HOWTO = "§2§nHow To"; + + public PresetArmorPosesMenu(PlayerEditor pe, ArmorStand as){ + this.pe = pe; + this.armorstand = as; + name = pe.plugin.getLang().getMessage("presettitle","menutitle"); + menuInv = Bukkit.createInventory(pe.getManager().getPresetHolder(), 36, name); + } + + private void fillInventory(){ + menuInv.clear(); + + /** + * Menu Set up in a similar way as to how we do it for + * the actual ArmorStand menu + */ + + //Blank Slots + ItemStack blank = createIcon(new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1), "blankslot"); + + //Presets -- Here to test things out, will get better names soon TM + ItemStack sitting = createIcon(new ItemStack(Material.ARMOR_STAND, 1), "sitting"); + ItemStack waving = createIcon(new ItemStack(Material.ARMOR_STAND, 2), "waving"); + ItemStack greet1 = createIcon(new ItemStack(Material.ARMOR_STAND, 3), "greeting 1"); + ItemStack greet2 = createIcon(new ItemStack(Material.ARMOR_STAND, 4), "greeting 2"); + ItemStack cheer = createIcon(new ItemStack(Material.ARMOR_STAND, 5), "cheers"); + ItemStack archer = createIcon(new ItemStack(Material.ARMOR_STAND, 6), "archer"); + ItemStack dancing = createIcon(new ItemStack(Material.ARMOR_STAND, 7), "dancing"); + ItemStack hanging = createIcon(new ItemStack(Material.ARMOR_STAND, 8), "hanging"); + ItemStack present = createIcon(new ItemStack(Material.ARMOR_STAND, 9), "present"); + ItemStack fishing = createIcon(new ItemStack(Material.ARMOR_STAND, 10), "fishing"); + + //Utilities + ItemStack backToMenu = createIcon(new ItemStack(Material.RED_WOOL, 1), "backtomenu"); + ItemStack howToPreset = createIcon(new ItemStack(Material.BOOK, 1), "howtopreset"); + + //Build for the Menu ---- DO NOT MODIFY THIS UNLESS YOU KNOW WHAT YOU ARE DOING! + ItemStack[] items = { + blank, blank, blank, blank, blank, blank, blank, blank, blank, + blank, backToMenu, sitting, waving, greet1, greet2, cheer, archer, blank, + blank, howToPreset, dancing, hanging, present, fishing, blank, blank, blank, + blank, blank, blank, blank, blank, blank, blank, blank, blank + }; + + menuInv.setContents(items); + } + + private ItemStack createIcon(ItemStack icon, String path) { + ItemMeta meta = icon.getItemMeta(); + assert meta != null; + meta.setDisplayName(getIconName(path)); + ArrayList loreList = new ArrayList<>(); + loreList.add(getIconDescription(path)); + meta.setLore(loreList); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + icon.setItemMeta(meta); + return icon; + } + + private String getIconName(String path) { + return pe.plugin.getLang().getMessage(path, "iconname"); + } + + private String getIconDescription(String path) { + return pe.plugin.getLang().getMessage(path + ".description", "icondescription"); + } + + public void openMenu() { + if (pe.getPlayer().hasPermission("asedit.basic")) { + fillInventory(); + pe.getPlayer().openInventory(menuInv); + } + } + + public static String getName() { + return name; + } + + public void handlePresetPose(String itemName, Player player) { + if(itemName == null) return; + if(player == null) return; + switch (itemName) { + case SITTING: + setPresetPose(player, 345, 0, 10, 350, 0, 350, 280, 20, 0, 280, 340, 0, 0, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case WAVING: + setPresetPose(player, 220, 20, 0, 350, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case GREETING_1: + setPresetPose(player, 260, 20, 0, 260, 340, 0, 340, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case GREETING_2: + setPresetPose(player, 260, 10, 0, 260, 350, 0, 320, 0, 0, 10, 0, 0, 340, 0, 350, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case CHEERS: + setPresetPose(player, 250, 60, 0, 20, 10, 0, 10, 0, 0, 350, 0, 0, 340, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case ARCHER: + setPresetPose(player, 270, 350, 0, 280, 50, 0, 340, 0, 10, 20, 0, 350, 0, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case DANCING: + setPresetPose(player, 14, 0, 110, 20, 0, 250, 250, 330, 0, 15, 330, 0, 350, 350, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case HANG: + setPresetPose(player, 1, 33, 67, -145, -33, -4, -42, 21, 1, -100, 0, -1, -29, -38, -18, 0, -4, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case PRESENT: + setPresetPose(player, 280, 330, 0, 10, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case FISHING: + setPresetPose(player, 300, 320, 0, 300, 40, 0, 280, 20, 0, 280, 340, 0, 0, 0, 0, 0, 0, 0); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + case BACKTOMENU: + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + pe.openMenu(); + break; + case HOWTO: + player.sendMessage(pe.plugin.getLang().getMessage("howtopresetmsg")); + player.sendMessage(pe.plugin.getLang().getMessage("helpurl")); + player.sendMessage(pe.plugin.getLang().getMessage("helpdiscord")); + player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 1); + player.closeInventory(); + break; + } + } + + public void setPresetPose(Player player, double rightArmRoll, double rightArmYaw, double rightArmPitch, + double leftArmRoll, double leftArmYaw, double leftArmPitch, + double rightLegRoll, double rightLegYaw, double rightLegPitch, + double leftLegRoll, double LeftLegYaw, double llp_yaw, + double headRoll, double headYaw, double headPitch, + double bodyRoll, double bodyYaw, double bodyPitch){ + + for (Entity theArmorStand : player.getNearbyEntities(1, 1, 1)) { + if (theArmorStand instanceof ArmorStand armorStand) { + if(!player.hasPermission("asedit.basic")) return; + + //Do the right positions based on what is given + rightArmRoll = Math.toRadians(rightArmRoll); + rightArmYaw = Math.toRadians(rightArmYaw); + rightArmPitch = Math.toRadians(rightArmPitch); + EulerAngle rightArmEulerAngle = new EulerAngle(rightArmRoll, rightArmYaw, rightArmPitch); + armorStand.setRightArmPose(rightArmEulerAngle); + + // Calculate and set left arm settings + leftArmRoll = Math.toRadians(leftArmRoll); + leftArmYaw = Math.toRadians(leftArmYaw); + leftArmPitch = Math.toRadians(leftArmPitch); + EulerAngle leftArmEulerAngle = new EulerAngle(leftArmRoll, leftArmYaw, leftArmPitch); + armorStand.setLeftArmPose(leftArmEulerAngle); + + // Calculate and set right leg settings + rightLegRoll = Math.toRadians(rightLegRoll); + rightLegYaw = Math.toRadians(rightLegYaw); + rightLegPitch = Math.toRadians(rightLegPitch); + EulerAngle rightLegEulerAngle = new EulerAngle(rightLegRoll, rightLegYaw, rightLegPitch); + armorStand.setRightLegPose(rightLegEulerAngle); + + // Calculate and set left leg settings + leftLegRoll = Math.toRadians(leftLegRoll); + LeftLegYaw = Math.toRadians(LeftLegYaw); + llp_yaw = Math.toRadians(llp_yaw); + EulerAngle leftLegEulerAngle = new EulerAngle(leftLegRoll, LeftLegYaw, llp_yaw); + armorStand.setLeftLegPose(leftLegEulerAngle); + + // Calculate and set body settings + bodyRoll = Math.toRadians(bodyRoll); + bodyYaw = Math.toRadians(bodyYaw); + bodyPitch = Math.toRadians(bodyPitch); + EulerAngle bodyEulerAngle = new EulerAngle(bodyRoll, bodyYaw, bodyPitch); + armorStand.setBodyPose(bodyEulerAngle); + + // Calculate and set head settings + headRoll = Math.toRadians(headRoll); + headYaw = Math.toRadians(headYaw); + headPitch = Math.toRadians(headPitch); + EulerAngle headEulerAngle = new EulerAngle(headRoll, headYaw, headPitch); + armorStand.setHeadPose(headEulerAngle); + } + } + + + } + +} diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/modes/EditMode.java b/src/main/java/io/github/rypofalem/armorstandeditor/modes/EditMode.java index 00f3488c..f1a77bb3 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/modes/EditMode.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/modes/EditMode.java @@ -20,10 +20,11 @@ package io.github.rypofalem.armorstandeditor.modes; public enum EditMode { - NONE("None"), INVISIBLE("Invisible"), SHOWARMS("ShowArms"), GRAVITY("Gravity"), BASEPLATE("BasePlate"), SIZE("Size"), COPY("Copy"), PASTE("Paste"), - HEAD("Head"), BODY("Body"), LEFTARM("LeftArm"), RIGHTARM("RightArm"), LEFTLEG("LeftLeg"), RIGHTLEG("RightLeg"), - PLACEMENT("Placement"), DISABLESLOTS("DisableSlots"), ROTATE("Rotate"), EQUIPMENT("Equipment"), RESET("Reset"), ITEMFRAME("ItemFrame"), ITEMFRAMEGLOW("ItemFrameGlow"), - VULNERABILITY("Vulnerability"), PLAYERHEAD("playerheadmenu"), GLOWING("armorstandglow"); + NONE("None"), INVISIBLE("Invisible"), SHOWARMS("ShowArms"), GRAVITY("Gravity"), BASEPLATE("BasePlate"), SIZE("Size"), + COPY("Copy"), PASTE("Paste"), HEAD("Head"), BODY("Body"), LEFTARM("LeftArm"), RIGHTARM("RightArm"), LEFTLEG("LeftLeg"), + RIGHTLEG("RightLeg"), PLACEMENT("Placement"), DISABLESLOTS("DisableSlots"), ROTATE("Rotate"), EQUIPMENT("Equipment"), PRESET("Preset"), + RESET("Reset"), ITEMFRAME("ItemFrame"), ITEMFRAMEGLOW("ItemFrameGlow"), VULNERABILITY("Vulnerability"), PLAYERHEAD("playerheadmenu"), + GLOWING("armorstandglow"); private String name; diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/protections/BentoBoxProtection.java b/src/main/java/io/github/rypofalem/armorstandeditor/protections/BentoBoxProtection.java index 1c78b52b..9940484c 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/protections/BentoBoxProtection.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/protections/BentoBoxProtection.java @@ -26,15 +26,20 @@ import world.bentobox.bentobox.managers.AddonsManager; import world.bentobox.bentobox.managers.IslandsManager; +import io.github.rypofalem.armorstandeditor.ArmorStandEditorPlugin; + import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.entity.Player; import java.util.Optional; +import java.util.logging.Level; public class BentoBoxProtection implements Protection { private final boolean bentoEnabled; + private boolean bSkyBlockEnabled; + private boolean aOneBlockEnabled; public BentoBoxProtection() { @@ -44,8 +49,8 @@ public BentoBoxProtection() { @Override public boolean checkPermission(Block block, Player player) { if (!bentoEnabled || player.isOp() || - player.hasPermission("asedit.ignoreProtection.bentobox") || - player.hasPermission("bentobox.admin")) return true; + player.hasPermission("asedit.ignoreProtection.bentobox") || + player.hasPermission("bentobox.admin")) return true; //Get the Bento Instance BentoBox myBento = BentoBox.getInstance(); @@ -56,21 +61,35 @@ public boolean checkPermission(Block block, Player player) { AddonsManager addonsManager = myBento.getAddonsManager(); //Check first if BSkyblock is enabled or if the Player is Owner of that Island - if (addonsManager.getAddonByName("BSkyblock").isEmpty()) return true; + bSkyBlockEnabled = addonsManager.getAddonByName("BSkyblock").isPresent(); + aOneBlockEnabled = addonsManager.getAddonByName("AOneBlock").isPresent(); + //Logging for Debug - NOTE will trigger each time an edit is done + + if(ArmorStandEditorPlugin.instance().isDebug()) { + if (bSkyBlockEnabled && !aOneBlockEnabled) { + Bukkit.getServer().getLogger().log(Level.INFO, "[ArmorStandEditor] BentoBox Protection for ASE is looking at: BSkyBlock."); + } + if (aOneBlockEnabled && !bSkyBlockEnabled) { + Bukkit.getServer().getLogger().log(Level.INFO, "[ArmorStandEditor] BentoBox Protection for ASE is looking at: AOneBlock."); + } + if(!bSkyBlockEnabled && !aOneBlockEnabled){ + Bukkit.getServer().getLogger().log(Level.INFO, "[ArmorStandEditor] BentoBox Protection is currently not using anything. This will automatically allow edits."); + } + } + - //Get the Location of the ArmorStand - Optional islandOptional = islandsManager.getIslandAt(block.getLocation()); + if(!bSkyBlockEnabled && !aOneBlockEnabled){ + return true; + } else{ + Optional islandOptional = islandsManager.getIslandAt(block.getLocation()); - //If there are no Islands Present - if (islandOptional.isEmpty()) return true; + if (islandOptional.isEmpty()) return true; - //Do not run this check if the player is the owner of the island - if (islandsManager.isOwner(player.getWorld(), player.getUniqueId())) return true; + if (islandsManager.isOwner(block.getWorld(), player.getUniqueId())) return true; - //Get the Island from the Island Optional - Island theIsland = islandOptional.get(); + Island theIsland = islandOptional.get(); - //Return if that User isAllowed to break blocks on that Land - return theIsland.isAllowed(User.getInstance(player), Flags.BREAK_BLOCKS); + return theIsland.isAllowed(User.getInstance(player), Flags.BREAK_BLOCKS); + } } } diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/utils/Configuration.java b/src/main/java/io/github/rypofalem/armorstandeditor/utils/Configuration.java new file mode 100644 index 00000000..3ae573d1 --- /dev/null +++ b/src/main/java/io/github/rypofalem/armorstandeditor/utils/Configuration.java @@ -0,0 +1,78 @@ +package io.github.rypofalem.armorstandeditor.utils; + +import io.github.rypofalem.armorstandeditor.ArmorStandEditorPlugin; +import io.github.rypofalem.armorstandeditor.language.Language; +import org.bukkit.ChatColor; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.lang.reflect.Field; + +/* +* Currently not used but groundwork is now being laid for later +*/ +public class Configuration { + + private static String languageFolderLocation = "lang/"; + private final ArmorStandEditorPlugin plugin; + private static FileConfiguration config; + private static FileConfiguration gui; + private Language lang; + + public Configuration(ArmorStandEditorPlugin plugin) { + this.plugin = plugin; + } + + public void load() { + try { + File dataFolder = plugin.getDataFolder(); + load(new File(dataFolder, "config.yml"), getClass().getDeclaredField("config")); + load(new File(dataFolder, "guis.yml"), getClass().getDeclaredField("gui")); + lang = new Language(Configuration.getConfig().getString("lang"), plugin); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + private void load(File file, Field field) throws Exception { + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + if (!file.exists()) { + plugin.saveResource(file.getName(), false); + } + field.set(null, YamlConfiguration.loadConfiguration(file)); + } + + public static FileConfiguration getConfig() { + return config; + } + + public static FileConfiguration getGUI() { + return gui; + } + + public static String getLanguageFolderLocation() { + return languageFolderLocation; + } + + public static String getString(ConfigurationSection section, String s) { + if (section == null) return ""; + + return section.getString(s, ""); + } + + public static String getString(YamlConfiguration config, String s) { + return config.getString(s, ""); + } + + public Language getLang() { + return lang; + } + + public static String color(String s){ + return ChatColor.translateAlternateColorCodes('&', s); + } +} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 64893269..02265bc8 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,7 +3,7 @@ #-----------------------------# #DO NOT CHANGE THIS - CHANGES AUTOMATICALLY PER UPDATE -version: "1.20.2-44.1" +version: "1.20.4-45" #----------- LANGUAGE #Name of the language file you wish to use @@ -103,5 +103,5 @@ allowedToRetrievePlayerHead: false adminOnlyNotifications: false #Debug Mode - For Development and Support Purposes ONLY! -# Do Not Enable. Will Generate ALOT OF NOISE in your Log Files +# --- Do Not Enable. Will Generate ALOT OF NOISE in your Log Files debugFlag: false diff --git a/src/main/resources/lang/de_DE.yml b/src/main/resources/lang/de_DE.yml index be6b04ee..9c7a283a 100644 --- a/src/main/resources/lang/de_DE.yml +++ b/src/main/resources/lang/de_DE.yml @@ -287,4 +287,70 @@ equipslot: pants: Hose boots: Schuhe rhand: Rechte Hand - lhand: Linke Hand \ No newline at end of file + lhand: Linke Hand + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml index 5a0e6153..69c1e635 100644 --- a/src/main/resources/lang/en_US.yml +++ b/src/main/resources/lang/en_US.yml @@ -160,6 +160,8 @@ mainmenutitle: msg: Armor Stand Editor Menu equiptitle: msg: ArmorStand Equipment +presettitle: + msg: Pre-Set ArmorStand Poses #icons xaxis: @@ -301,4 +303,70 @@ equipslot: pants: Pants boots: Feetsies rhand: Right Hand - lhand: Left Hand \ No newline at end of file + lhand: Left Hand + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/es_ES.yml b/src/main/resources/lang/es_ES.yml index 4e66c87e..2069779d 100644 --- a/src/main/resources/lang/es_ES.yml +++ b/src/main/resources/lang/es_ES.yml @@ -285,3 +285,63 @@ equipslot: boots: Pies rhand: Mano derecha lhand: Mano izquierda + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hy there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +presenting: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " \ No newline at end of file diff --git a/src/main/resources/lang/fr_FR.yml b/src/main/resources/lang/fr_FR.yml index f0f96185..a720970d 100644 --- a/src/main/resources/lang/fr_FR.yml +++ b/src/main/resources/lang/fr_FR.yml @@ -291,3 +291,63 @@ equipslot: boots: bottes rhand: éléments dans la main droite lhand: éléments dans la main gauche + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hy there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +presenting: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " \ No newline at end of file diff --git a/src/main/resources/lang/ja_JP.yml b/src/main/resources/lang/ja_JP.yml index fcdc6393..b2f68f30 100644 --- a/src/main/resources/lang/ja_JP.yml +++ b/src/main/resources/lang/ja_JP.yml @@ -284,4 +284,70 @@ equipslot: pants: レギンス boots: ブーツ rhand: 右手 - lhand: 左手 \ No newline at end of file + lhand: 左手 + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/nl_NL.yml b/src/main/resources/lang/nl_NL.yml index 183b66cf..3749e28e 100644 --- a/src/main/resources/lang/nl_NL.yml +++ b/src/main/resources/lang/nl_NL.yml @@ -285,3 +285,69 @@ equipslot: boots: Laarzen rhand: Rechterhand lhand: Linkerhand + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/pl_PL.yml b/src/main/resources/lang/pl_PL.yml index e9ecfe83..f8994727 100644 --- a/src/main/resources/lang/pl_PL.yml +++ b/src/main/resources/lang/pl_PL.yml @@ -264,3 +264,69 @@ equipslot: boots: Buty rhand: Prawa ręka lhand: Lewa ręka + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/pt_BR.yml b/src/main/resources/lang/pt_BR.yml index dbf67001..7b9c0480 100644 --- a/src/main/resources/lang/pt_BR.yml +++ b/src/main/resources/lang/pt_BR.yml @@ -286,4 +286,70 @@ equipslot: pants: Calças boots: Botas rhand: Mão direita - lhand: Mão esquerda \ No newline at end of file + lhand: Mão esquerda + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/ro_RO.yml b/src/main/resources/lang/ro_RO.yml index ae083396..622e1862 100644 --- a/src/main/resources/lang/ro_RO.yml +++ b/src/main/resources/lang/ro_RO.yml @@ -255,4 +255,70 @@ equipslot: pants: Pantaloni boots: Cizme rhand: Mana Dreapta - lhand: Mana Stanga \ No newline at end of file + lhand: Mana Stanga + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/ru_RU.yml b/src/main/resources/lang/ru_RU.yml index 1bcfe6bc..d0777d8b 100644 --- a/src/main/resources/lang/ru_RU.yml +++ b/src/main/resources/lang/ru_RU.yml @@ -253,3 +253,69 @@ equipslot: boots: Ботинки rhand: Правая рука lhand: Левая рука + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/test_NA.yml b/src/main/resources/lang/test_NA.yml index 88916e28..13a6bc31 100644 --- a/src/main/resources/lang/test_NA.yml +++ b/src/main/resources/lang/test_NA.yml @@ -1,15 +1,19 @@ +#This file will be regenerated by the plugin every time the plugin is enabled. +#Do not edit this file. Make a new language file instead. +#Any value not specified in another language file will default to the value listed here. + #formatting #A section symbol will be inserted between each character in this section #http://minecraft.gamepedia.com/Formatting_codes -iconname: bn5 -icondescription: b -info: b -warn: b -menutitle: b +iconname: 2n +icondescription: 5 +info: 6 +warn: c +menutitle: 8 #info -setmode: - msg: Setting §3mode to . +setmode: + msg: Setting mode to . head: Head Position body: Body Position leftleg: Left Leg Position @@ -21,55 +25,122 @@ setmode: invisible: Toggle Visibility size: Toggle Size disableslots: Toggle Disable Slots + vulnerability: Toggle Vulnerability gravity: Toggle Gravity baseplate: Toggle BasePlate placement: Placement rotate: Rotate - target: Target copy: Copy paste: Paste -setaxis: + reset: Reset Pose + itemframe: Toggle Itemframe Visibility + playerhead: Get a Players Head +setaxis: msg: Setting axis to . x: X y: Y z: Z -setslot: +setslot: msg: Setting copy slot to . setadj: msg: Setting adjustment to . coarse: Coarse fine: Fine -setgravity: +setgravity: msg: Gravity turned . true: on false: off -nomode: +nomode: msg: Click with the edit tool away from an armorstand to select an editing mode first! nomodeif: msg: Click with the Edit Tool away from the ItemFrame to select a mode first! -copied: +copied: msg: ArmorStand state copied to slot . -pasted: +pasted: msg: ArmorStand state pasted from slot . +disabledslots: + msg: Toggled Equipment locks +toggleinvulnerability: + msg: ArmorStand vulnerability state has been toggled to . + true: invulnerable + false: vulnerable +target: + msg: ArmorStand target locked. +notarget: + msg: target unlocked. + armorstand: ArmorStand + itemframe: ItemFrame +frametarget: + msg: Itemframe target locked. +give: + msg: Player given Item with CustomModelData +doubletarget: + msg: Please look at either an ArmorStand or an ItemFrame, not both! +nodoubletarget: + msg: Please look at an ArmorStand or an ItemFrame before switching hands! +reloaded: + msg: Configuration File has been reloaded. +playerhead: + msg: Player Head retrieved. +noplayerhead: + msg: Please turn on the ability to retrieve player heads in the config file and/or check your permissions to confirm that you have asedit.head set to true. +playerheaderror: + msg: Unable to Retrieve Player Head. +unabledestroycreative: + msg: Unable to Destroy this Invulnerable ArmorStand in Creative Mode. +notincorrectworld: + msg: Sorry but you are not in the correct world to use ArmorStandEditor. +stats: + msg: Here are the statistics for your ArmorStand. +playerheadhelp: + msg: "Please use /ase playerhead to get a players head. Ex of the command - /ase playerhead Wolfieheart_" +help: + msg: "1. Hold the editing tool() in your main hand + + 2. Left or right click away from an armor stand to open menu. + + 3. Select the labeled menu options. + + 4. Left click the armor stand with the edit tool in hand to apply those options. + + 5. Right click instead to edit in reverse!" +helptips: + msg: "Tips: + + 1. Press the \"Swap Item in Hands\" key (default F) while holding the edit tool to target a specific armor stand, if other armor stands are in the way. + + 2. You can apply NameTags to armor stands. You may use the & symbol to make colored names. + + 3. You can use crouch + scroll wheel while holding the edit tool to change Axis without opening the menu" +helpurl: + msg: "More info: https://github.com/RypoFalem/ArmorStandEditor/wiki" +helpdiscord: + msg: "or join our Discord: https://discord.gg/3BbJKWpTCj" #warn cantedit: msg: Sorry, you cannot edit armor stands here! noperm: + msg: You don't have permission to use this! +nopermoption: msg: You don't have permission to use the Option! basic: Normal ArmorStand showarms: Show Arms armorstandvisibility: Armor Stand Visibility baseplate: Set Baseplate Visibility gravity: Toggle Gravity - vulnerability: Toggle Vulnerability! + vulnerability: Toggle Vulnerability itemframevisibility: Item Frame Visibility size: Toggle ArmorStand Size disableslots: Toggle Equipment Lock paste: Paste ArmorStand Config copy: Copy ArmorStand Config reset: Reset ArmorStand Config -noslotnumcom: + stats: View ArmorStand Statistics + armorstandglow: Toggle ArmorStand Glow +norangestats: + msg: Please get next to an ArmorStand before running this command. +noslotnumcom: msg: You must specify a slot number! noadjcom: msg: You must specify Coarse or Fine adjustment! @@ -77,133 +148,153 @@ noaxiscom: msg: You must specify an Axis! nomodecom: msg: You must specify a Mode! -nodoubletarget: - msg: Please look at an ArmorStand or an ItemFrame before switching hands! -notarget: - msg: target unlocked. - armorstand: ArmorStand - itemframe: ItemFrame -toggleinvulnerability: - msg: ArmorStand vulnerability state has been toggled to . - true: invulnerable - false: vulnerable -notincorrectworld: - msg: Sorry but you are not in the correct world to use ArmorStandEditor. -unabledestroycreative: - msg: Unable to Destroy this Invulnerable ArmorStand in Creative Mode. +noreloadcom: + msg: You don't have permission to use the reload command! +nogive: + msg: "You either do not have the permission to use the give command or do not allow it in Config.yml" +noconsolecom: + msg: Sorry but this command only works from in-game and not from Console! + #menutitle mainmenutitle: msg: Armor Stand Editor Menu equiptitle: msg: ArmorStand Equipment +presettitle: + msg: Pre-Set ArmorStand Poses #icons xaxis: msg: X Axis - description: + description: msg: Rotate body parts along the X Axis -yaxis: +yaxis: msg: Y Axis - description: + description: msg: Rotate body parts along the Y Axis -zaxis: +zaxis: msg: Z Axis - description: - msg: Rotate body parts along the Z Axis -coarseadj: + description: + msg: Rotate body part s along the Z Axis +coarseadj: msg: Coarse Adjustment - description: + description: msg: Make large adjustments -fineadj: +fineadj: msg: Fine Adjustment - description: + description: msg: Make tiny adjustments -head: +head: msg: Head Position - description: + description: msg: Rotate the head -body: +body: msg: Body Position - description: + description: msg: Rotate the body -leftleg: +leftleg: msg: Left Leg Position - description: + description: msg: Rotate the left leg -rightleg: +rightleg: msg: Right Leg Position - description: + description: msg: Rotate the right leg -leftarm: +leftarm: msg: Left Arm Position - description: + description: msg: Rotate the left arm -rightarm: +rightarm: msg: Right Arm Position - description: + description: msg: Rotate the right arm -equipment: +equipment: msg: Equipment - description: + description: msg: Edit equipment -showarms: +showarms: msg: Show Arms - description: + description: msg: Turn arms on and off -invisible: +invisible: msg: Visibility - description: + description: msg: Make it visibile or invisible -size: +size: msg: Size - description: + description: msg: Make it big or small -disableslots: +disableslots: msg: Disable Slots - description: + description: msg: Enable and disable equipment lock -gravity: +vulnerability: + msg: Toggle Vulnerability + description: + msg: Toggles an ArmorStand's vulnerability state +gravity: msg: Gravity - description: + description: msg: Turn gravity on or off -baseplate: +baseplate: msg: BasePlate - description: + description: msg: Turn baseplate on or off -placement: +placement: msg: Placement - description: + description: msg: Move the entire armorstand -rotate: +rotate: msg: Rotate description: msg: Rotate the entire armorstand -target: - msg: Target - description: - msg: Target a specific armorstand -copy: +copy: msg: Copy description: msg: Copy the armorstand's settings -paste: +paste: msg: Paste - description: + description: msg: Paste the armorstand's settings -copyslot: +copyslot: msg: Copy Slot description: msg: Select a slot to store settings +reset: + msg: Reset Pose + description: + msg: Reset bodypart position to default +helpgui: + msg: Help! + description: + msg: Click here to get help! +itemframevisible: + msg: Itemframe Visibility + description: + msg: Toggles an itemframes visibility +playerheadmenu: + msg: Player Head + description: + msg: Please use /ase playerhead blankslot: msg: Nothing here description: msg: Just a placeholder item. Clicking me will not do anything. -#icons (equipment) -disabled: +armorstandglow: + msg: Toggle ArmorStand Glow + description: + msg: Turn ArmorStand Glowing on or off. +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (equipment menu) +disabled: msg: Disabled -equipslot: +equipslot: msg: Slot - description: + description: msg: Drag your into the slot below helm: Helmet chest: Chestplate @@ -216,4 +307,70 @@ equipslot: pants: Pants boots: Feetsies rhand: Right Hand - lhand: Left Hand \ No newline at end of file + lhand: Left Hand + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/uk_UA.yml b/src/main/resources/lang/uk_UA.yml index e728be8e..37981211 100644 --- a/src/main/resources/lang/uk_UA.yml +++ b/src/main/resources/lang/uk_UA.yml @@ -249,3 +249,69 @@ equipslot: boots: Черевики rhand: Права рука lhand: Ліва рука + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/lang/zh_CN.yml b/src/main/resources/lang/zh_CN.yml index 082f30ae..f275a78c 100644 --- a/src/main/resources/lang/zh_CN.yml +++ b/src/main/resources/lang/zh_CN.yml @@ -288,3 +288,69 @@ equipslot: boots: 靴子 rhand: 右手 lhand: 左手 + +#all things related to Presets +presetmenu: + msg: Preset Poses + description: + msg: Use a Preset Pose for your ArmorStand [Will Open another Menu] + +#icons (Preset Menu) +sitting: + msg: Sitting + description: + msg: Time to sit back and relax. +waving: + msg: Waving + description: + msg: Hey, Over here! +greeting 1: + msg: Greeting 1 + description: + msg: Greetings, I am your Armor Stand. +greeting 2: + msg: Greeting 2 + description: + msg: Oh Hey there, I am your Armor Stand. +archer: + msg: Archer + description: + msg: Watch out, your Armor Stand is about to shoot you :O +dancing: + msg: Dancing + description: + msg: Hey there, would you like a dance? +cheers: + msg: Cheers + description: + msg: Lets Cheers to this! +hanging: + msg: Hanging + description: + msg: Time to hang onto this mountain like our life depended on it. +present: + msg: Present + description: + msg: Your ArmorStand has a present for you <3 +fishing: + msg: Fishing + description: + msg: Time yo go on a fishing trip + +#Help for Presets +backtomenu: + msg: Back to Menu + description: + msg: Click me to go back to the main menu +howtopreset: + msg: How To + description: + msg: A short message on how to use presets. +howtopresetmsg: + msg: "1. Hold the editing tool in your main hand + + 2. Open the Menu with Preset Mode Active. + + 3. Choose one of the Armor Stand Presets that you want to select. + + 4. After choosing, your menu will close and your chosen preset will be applied. " diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0fade9b5..c9a08583 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: ArmorStandEditor main: io.github.rypofalem.armorstandeditor.ArmorStandEditorPlugin -version: 1.20.2-44.1 +version: 1.20.4-45 api-version: "1.17" folia-supported: true website: https://www.spigotmc.org/resources/94503/