From 5b62969a6a5e8e2aade0270dcf67848dd477b603 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 23 Nov 2018 13:30:47 +0000 Subject: [PATCH] Leaderboard # Players will now have to be at an Island to add or remove a vote if Island voting is enabled. You can change the error messages in the language file. # Added 'DragonEggUse' setting to the settings menu which allows players to interact with Dragon Eggs or not or prevent them from teleporting. # Added the path in the language configuration file to change the description of the '/island leaderboard' command. # Added the option in the configuration file to change the reset time for the Leaderboard. # Fixed exception when changing the option in the configuration file to print a list of all the commands. # Fixed signature not updating in the 'Visitor Menu' when changing an Island signature. # Fixed Multiverse-Core error message when setting the generator of an Island world. # Fixed help commands printing backslash at the end of the command aliases. # Fixed skulls not displaying skin textures for the menus in 1.8-1.12. # Fixed biome not changing when creating an Island. # Fixed generators only generating one material. --- config.yml | 181 ++ generators.yml | 17 + language.yml | 2055 +++++++++++++++++ levelling.yml | 14 + plugin.yml | 12 + settings.yml | 104 + src/me/goodandevil/skyblock/Main.java | 10 + .../skyblock/biome/BiomeManager.java | 6 +- .../skyblock/command/CommandManager.java | 45 +- .../command/commands/LeaderboardCommand.java | 66 + .../skyblock/config/FileManager.java | 2 +- .../skyblock/generator/GeneratorManager.java | 4 +- .../goodandevil/skyblock/island/Island.java | 10 +- .../skyblock/island/IslandManager.java | 8 + .../skyblock/leaderboard/Leaderboard.java | 60 +- .../leaderboard/LeaderboardManager.java | 65 +- .../skyblock/leaderboard/LeaderboardTask.java | 21 + .../skyblock/listeners/Interact.java | 9 + .../skyblock/menus/ControlPanel.java | 7 +- .../skyblock/menus/Leaderboard.java | 219 ++ .../goodandevil/skyblock/menus/Settings.java | 1 + src/me/goodandevil/skyblock/menus/Visit.java | 30 +- .../skyblock/utils/item/SkullUtil.java | 3 +- .../skyblock/world/WorldManager.java | 16 +- structures.yml | 11 + 25 files changed, 2905 insertions(+), 71 deletions(-) create mode 100644 config.yml create mode 100644 generators.yml create mode 100644 language.yml create mode 100644 levelling.yml create mode 100644 plugin.yml create mode 100644 settings.yml create mode 100644 src/me/goodandevil/skyblock/command/commands/LeaderboardCommand.java create mode 100644 src/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java create mode 100644 src/me/goodandevil/skyblock/menus/Leaderboard.java create mode 100644 structures.yml diff --git a/config.yml b/config.yml new file mode 100644 index 00000000..30001f23 --- /dev/null +++ b/config.yml @@ -0,0 +1,181 @@ +Command: + Help: + # Lists all commands rather than pages. + List: false + # Shows all aliases of the commands. + Aliases: + Enable: true +Sound: + # When disabled all sounds will be disabled. + Enable: true +Island: + # The size of an Island when created. + # [!] If you go over 1000, the size of the Island will be 100. + Size: 100 + Creation: + Cooldown: + # When enabled cooldown will start when a player creates an Island. + Creation: + Enable: true + # When enabled cooldown will start when a player deletes their Island. + Deletion: + Enable: true + Time: 300 + World: + # [!] The Island height is 72 blocks. + # Delete the Island world when changing the liquid option. + Normal: + Name: "island_normal_world" + Liquid: + Enable: false + Height: 60 + Nether: + Name: "island_nether_world" + Enable: true + Liquid: + Enable: false + Height: 60 + Member: + # Max amount of players allowed to be in a team. + Capacity: 12 + WorldBorder: + # Generates a worldborder around Islands. + # [!] WorldBorders will not show in Nether world due to centring bug + # with some Spigot builds. + Enable: true + # Prevent blocks being placed that would go outside of the Island border + # Pistons | Dispensers | Liquid Flow + Block: true + Spawn: + # Prevents blocks being placed inside the location where players spawn on + # an Island. When setting the spawn points, this option when enabled will + # require the player to position themselves at the centre of the block. + # [!] Recommended to use especially to prevent players glitching in blocks + # and to prevent liquid flow at spawn point. + Protection: true + Block: + Piston: + # Prevent Piston blocks being retracted or extended when connected to a circuit + # [!] Prevents Pistons extending out of Island border bug + Connected: + Retract: false + Extent: false + Leaderboard: + Reset: + # Time until Leaderboard resets + Time: 300 + Invite: + # Time until Island invite expires + Time: 300 + Visitor: + # When an Island is unloaded if enabled players won't be able to visit the Island + # even if it's open. + # [!] Enabling will prevent possible memory leak issues affecting performance. + Unload: false + # Upon Island creation is the Island open to visit? + Open: false + # Allow players to vote for Islands. This will filter Islands with more votes first + # in the Visit Island menu. + Vote: true + Welcome: + # When disabled Island owners or operators will not be able to set a Welcome Message + # and visitors will not see the Welcome Message. + Enable: true + # Maximum lines allowed for Welcome Message + Lines: 6 + # Length allowed for each line + Length: 30 + Signature: + # When disabled Island owners or operators will not be able to set a Signature and + # a Signature will not be visible in the Island Visit menu. + Enable: true + # Maximum lines allowed for Signature + Lines: 6 + # Length allowed for each line + Length: 30 + # Max amount of players allowed at a Island. This also includes Island Members. + # [!] Set to -1 for unlimited capacity. + Capacity: 25 + # Allow Island Operators or Owners to ban players from their Island. + Banning: true + Biome: + # Default Biome set when a player creates an Island + # Biomes Available: + # PLAINS | FOREST | SWAMPLAND | DESERT | COLD_BEACH + # JUNGLE | ROOFED_JUNGLE + Default: + Type: Plains + Cooldown: 900 + Weather: + Default: + # The weather and time will operate the same weather and time as the world. + # If disabled, the weather and time will be fixed to the weather and time + # options. + Synchronised: true + # [!] Make sure the time is one of the choices below + # Choices: 0 | 1000 | 6000 | 12000 | 13000 | 18000 + Time: 6000 + Weather: Clear + # Prevents ice and snow layer blocks being set in snowy conditions. + # [!] Recommended to keep this disabled to prevent confusion if island weather + # and time is not synchronised. + IceAndSnow: false + Time: + # When the Island is not synchronised with the time of the World, should the + # time cycle or be fixed. + Cycle: false + Levelling: + # Island Level Points divided by value + Division: 100 + # Time until Island level rescan expires + Cooldown: 60 + Confirmation: + # Time until confirmation expires for island ownership and island deletion + # confirmations. + Timeout: 10 + Ownership: + Transfer: + Role: + # When Island ownership is transfer to a different player the previous + # Island owner will become an operator. + Operator: true + Password: + # When ownership has been assigned to a player the Island password will + # be reset. + Reset: true + Void: + Teleport: + # Prevents players from being killed by the Void when at an Island. + Enable: true + # The Y position that the player is teleported when reached. + Offset: 30 + Liquid: + Teleport: + # Teleports the player back to the Island if they enter the liquid if world is a + # liquid world. + Enable: true + Death: + AutoRespawn: true + Respawn: + # When a Player respawns after dying at an Island decide where they respawn. + # [!] If Enabled Players will respawn at the Island they died at. If Disabled + # Players will respawn at the Spawn location. + Island: true + Admin: + Structure: + # Item Material used to select positions for a structure. + Selector: "DIAMOND_AXE" + Scoreboard: + Enable: true + Generator: + Enable: true +# Stuff you shouldn't change +World: + Normal: + nextAvailableLocation: + x: 0.0 + z: 0.0 + Nether: + nextAvailableLocation: + x: 0.0 + z: 0.0 \ No newline at end of file diff --git a/generators.yml b/generators.yml new file mode 100644 index 00000000..ef9e4c29 --- /dev/null +++ b/generators.yml @@ -0,0 +1,17 @@ +Generators: + Default: + Name: Default + Permission: false + Materials: + COBBLESTONE: + Chance: 60 + COAL_ORE: + Chance: 15 + IRON_ORE: + Chance: 10 + GOLD_ORE: + Chance: 8 + EMERALD_ORE: + Chance: 5 + DIAMOND_ORE: + Chance: 2 \ No newline at end of file diff --git a/language.yml b/language.yml new file mode 100644 index 00000000..0394808f --- /dev/null +++ b/language.yml @@ -0,0 +1,2055 @@ +Command: + Island: + Argument: + Unrecognised: + Message: "&bSkyBlock &8| &cError&8: &eThat arugment was not recognised." + Help: + Lines: + - "&bSkyBlock &aEarth &7- &e%type Commands&8:" + - "&c&o[&f&o!&c&o] &7&oHover over commands for info." + - "&8&l* &e%commands &7- &f&o%info" + Word: + Next: "&a&lNext Page" + Previous: "&a&lPrevious Page" + Pipe: "&8|" + Integer: + Message: "&bSkyBlock &8| &cError&8: &ePlease provide a numerical value." + Page: + Message: "&bSkyBlock &8| &cError&8: &eThere are not that many pages." + ControlPanel: + Info: + Message: "&f&oOpens the Island Control Panel menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Leaderboard: + Info: + Message: "&f&oOpens the Leaderboard menu of the top 10 Islands." + Create: + Info: + Message: "&f&oOpens the Island Creator menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are already an Island owner." + Delete: + Info: + Message: "&f&oDeletes your Island." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to delete your Island." + Confirmation: + Pending: + Message: "&bSkyBlock &8| &cError&8: &eYou currently have a pending confirmation. Please try again in a few seconds!" + Confirm: + Word: + Confirm: "confirm" + Tutorial: "&7Click to &f&oconfirm &r&7Island deletion!" + Message: "&bSkyBlock &8| &aInfo&8: &eYou want to delete your Island. You have &c%time &eseconds to confirm." + Teleport: + Info: + Message: "&f&oTeleport to your Island." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island teleport []" + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to teleport to other players Islands." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Teleported: + Yourself: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been teleported to your Island." + Other: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been teleport to &a%player's &eIsland." + Island: + None: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Closed: + Message: "&bSkyBlock &8| &cError&8: &eThat players Island is not open to Visitors." + SetSpawn: + Info: + Message: "&f&oSet your Visitor and Main spawn point." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island setspawn " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Role: + Message: "&bSkyBlock &8| &cError&8: &eYou are not the correct role to set the %spawn spawn point for your Island." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to set the %spawn spawn point for your Island." + Island: + Message: "&bSkyBlock &8| &cError&8: &eYou must be at your Island to set the %spawn spawn point." + Spawn: + Message: "&bSkyBlock &8| &cError&8: &eThat is not a correct spawn type." + Protection: + Block: + Message: "&bSkyBlock &8| &cError&8: &eYou must be standing on top of a block for spawn protection." + Ground: + Message: "&bSkyBlock &8| &cError&8: &eYou must be standing on the ground for spawn protection." + Liquid: + Message: "&bSkyBlock &8| &cError&8: &eYou must not be standing in a liquid source for spawn protection." + Portal: + Message: "&bSkyBlock &8| &cError&8: &eYou must not be standing in a portal for spawn protection." + Centre: + Message: "&bSkyBlock &8| &cError&8: &eYou must be standing close to the centre of the block for spawn protection." + Set: + Message: "&bSkyBlock &8| &aInfo&8: &eThe %spawn spawn point for your Island has been set to your location." + Invite: + Info: + Message: "&f&oInvite a Player to join your Island." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island invite " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to invite players to your Island." + Capacity: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot invite any more players to your Island because your Island has reached the member capacity." + Offline: + Message: "&bSkyBlock &8| &cError&8: &eThat player could not be found." + Yourself: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot invite yourself." + Member: + Message: "&bSkyBlock &8| &cError&8: &eThat player is already a member of the Island." + Already: + Other: + Message: "&bSkyBlock &8| &cError&8: &eAnother Island has invited this player to join them." + Own: + Message: "&bSkyBlock &8| &cError&8: &eAn invite has already been sent to that player." + Invited: + Word: + Second: "second(s)" + Minute: "minute(s)" + Cancel: "cancel" + Accept: "accept" + Deny: "deny" + Resend: "resend" + Tutorial: "&7Click to &f&o%action &r&7invite!" + Sender: + Sent: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have invited the player &d%player &eto join your Island. They have &c%time &eto respond." + Expired: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &c%player's &edidn't respond to your invite in time." + Disconnected: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &c%player's &edisconnected and didn't respond to your invite." + Target: + Received: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been invited to join &d%player's &eIsland. You have &c%time &eto respond." + Expired: + Message: "&bSkyBlock &8| &aInfo&8: &eYou didn't respond to &c%player's &einvite in time." + Accept: + Info: + Message: "&f&oAccept an Island invitation." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island accept " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou must leave your Island to join another." + Invite: + Message: "&bSkyBlock &8| &cError&8: &eYou have not received an invite." + Invited: + Message: "&bSkyBlock &8| &cError&8: &eThat player hasn't invited you to their Island." + Capacity: + Broadcast: + Message: "&bSkyBlock &8| &aInfo&8: &eYour recent invite from &d%player &ehas automatically been cancelled because the Island has reached the member capacity." + Accepted: + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &d%player &eaccepted your invite." + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou accepted the player &d%player's &einvite." + Broadcast: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &6%player &ejoined your Island!" + Deny: + Info: + Message: "&f&oDeny an Island invitation." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island deny " + Invited: + Message: "&bSkyBlock &8| &cError&8: &eThat player hasn't invited you to their Island." + Denied: + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &c%player &ehas denied your invite." + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have denied the player &c%player's &einvite." + Cancel: + Info: + Message: "&f&oCancel a Player invitation." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island cancel " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to cancel invites to your Island." + Offline: + Message: "&bSkyBlock &8| &cError&8: &eThat player could not be found." + Member: + Message: "&bSkyBlock &8| &cError&8: &eThat player is a member of the Island." + Invited: + Message: "&bSkyBlock &8| &cError&8: &eThat player hasn't been invited to your Island." + Cancelled: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have cancelled the player &c%player's &einvite." + Leave: + Info: + Message: "&f&oLeave another Player's Island." + Member: + Message: "&bSkyBlock &8| &cError&8: &eYou are not a member of an Island." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot leave your own Island." + Left: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have left the Island." + Broadcast: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &c%player &ehas left your Island." + Promote: + Info: + Message: "&f&oPromotes a Member to Operator." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island promote " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to promote Island members." + Member: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a member of your Island." + Operator: + Message: "&bSkyBlock &8| &cError&8: &eThat player is already an Operator." + Promoted: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have promoted the player &d%player &eto an &dOperator&e." + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been promoted to an &dOperator&e." + Broadcast: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &d%player &ehas been promoted to an &dOperator&e." + Demote: + Info: + Message: "&f&oDemotes an Operator to Member." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island demote " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to demote Island members." + Member: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a member of your Island." + Role: + Message: "&bSkyBlock &8| &cError&8: &eThat player is already a Member." + Demoted: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have demoted the player &d%player &eto a &dMember&e." + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been demoted to a &dMember&e." + Kick: + Info: + Message: "&f&oRemove a Member or Visitor from your Island." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island kick " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Visit: + Open: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to kick Island members or visitors." + Closed: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to kick Island members." + Occupant: + Visit: + Open: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a member or visitor of your Island." + Closed: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a member of your Island." + Yourself: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick yourself from the Island." + Role: + Operator: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick a member the Island the same role as you." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick the owner from their own Island." + Kicked: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have kicked the player &c%player &efrom the Island." + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been kicked from the Island." + Ban: + Info: + Message: "&f&oBan a player from your Island." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island ban " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Disabled: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot perform this command because Island banning has been disabled." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to ban Island members." + Found: + Message: "&bSkyBlock &8| &cError&8: &eA player by that name was not found." + Yourself: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot ban yourself from the Island." + Member: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot ban that player from the Island because they are a Member of it." + Already: + Message: "&bSkyBlock &8| &cError&8: &eThat player is already banned from the Island." + Banned: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have banned the player &c%player &efrom the Island." + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been banned from the Island." + Unban: + Info: + Message: "&f&oUnban a Player from your Island." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island unban " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Disabled: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot perform this command because Island banning has been disabled." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to unban Island members." + Found: + Message: "&bSkyBlock &8| &cError&8: &eA player by that name was not found." + Yourself: + Message: "&bSkyBlock &8| &cError&8: &eYou are not banned from the Island because you are a Member of it." + Member: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not banned from the Island because they are a Member of it." + Banned: + Message: "&bSkyBlock &8| &cError&8: &eThat player has not been banned from the Island." + Unbanned: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have unbanned the player &c%player &efrom the Island." + Bans: + Info: + Message: "&f&oOpens the Island Bans menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to view your Island bans." + Bans: + Message: "&bSkyBlock &8| &cError&8: &eThere are no player bans for your Island." + Biome: + Info: + Message: "&f&oOpens the Island Biome menu." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to change your Island's biome." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Weather: + Info: + Message: "&f&oOpens the Island Weather menu." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to change your Island's weather." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Rollback: + Info: + Message: "&f&oOpens the Island Rollback menu." + Role: + Message: "&bSkyBlock &8| &cError&8: &eYou are not the correct role to access the Island Rollback menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Level: + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island level []" + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to get the level of other players Islands." + Info: + Message: "&f&oOpens the Island Level menu." + Processing: + Message: "&bSkyBlock &8| &aInfo&8: &7&oProcessing Island level request... Please wait!" + Loading: + Message: "&bSkyBlock &8| &aInfo&8: &7&oLoading Island Materials... Please wait!" + Owner: + Yourself: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Other: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Level: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &d%player's &eIsland level is &6%level&e." + Materials: + Message: "&bSkyBlock &8| &cError&8: &eThere are no significant materials on your Island." + Cooldown: + Word: + Hour: "hour(s)" + Minute: "minute(s)" + Second: "second(s)" + Message: "&bSkyBlock &8| &cError&8: &eYou must wait &c&o%time &ebefore processing an Island level request." + Settings: + Info: + Message: "&f&oOpen the Island Settings menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Role: + Message: "&bSkyBlock &8| &cError&8: &eYou are not the correct role to access the Island Settings." + Permission: + Default: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to change or access your Island's settings." + Access: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to access this setting." + Change: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to change this setting." + Members: + Info: + Message: "&f&oOpen the Island Members menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Ownership: + Info: + Message: "&f&oOpen the Island Ownership menu." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island ownership / ( / )" + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Member: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a member of your Island." + Yourself: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot assign ownership to yourself. You are already the owner." + Confirmation: + Pending: + Message: "&bSkyBlock &8| &cError&8: &eYou currently have a pending confirmation. Please try again in a few seconds!" + Confirm: + Word: + Confirm: "confirm" + Tutorial: "&7Click to &f&oconfirm &r&7ownership assignment!" + Message: "&bSkyBlock &8| &aInfo&8: &eYou want to assign ownership of the Island to the player &d%player&e. You have &c%time &eseconds to confirm." + Password: + Unset: + Message: "&bSkyBlock &8| &cError&8: &eThe owner of the Island has not set a password." + Incorrect: + Message: "&bSkyBlock &8| &cError&8: &eThe password you have entered is incorrect." + Assigned: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have assigned yourself ownership of the Island." + Broadcast: + Message: "&bSkyBlock &8| &aInfo&8: &eThe ownership of the Island has been assigned to the player &a%player&e!" + Confirmation: + Info: + Message: "&f&oConfirmation for permanent operations." + Pending: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have a pending confirmation." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot confirm your pending confirmation because you are not an Island owner." + Specified: + Message: "&bSkyBlock &8| &cError&8: &eA reason for confirmation hasn't been specified. This wasn't suppose to happen." + Role: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot confirm your pending confirmation because you are no longer the Island owner." + Ownership: + Member: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot confirm your pending confirmation because the player you assigned ownership to is no longer a Member of the Island." + Assigned: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been assigned ownership of the Island." + Deletion: + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou are no longer an Island owner." + Broadcast: + Message: "&bSkyBlock &8| &aInfo&8: &eThe Island owner has disbanded the Island." + Confirmed: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have confirmed your pending confirmation." + Chat: + Info: + Message: "&f&oCommunicate privately with Island Members." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Team: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot toggle Island chat because your Island is not a team." + Offline: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot toggle Island chat because no members are online." + Toggled: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have toggled the Island chat. Chat messages will only be visible to Island members." + Untoggled: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have untoggled the Island chat. Chat messages will now be visible for all players." + Visitors: + Info: + Message: "&f&oOpens the Island Visitors menu." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Closed: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot open the Visitors menu because your Island is closed." + Visitors: + Message: "&bSkyBlock &8| &cError&8: &eThere are no Visitors at your Island." + KickAll: + Info: + Message: "&f&oKick all Visitors from your Island." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Role: + Message: "&bSkyBlock &8| &cError&8: &eYou are not the correct role to kick visitors." + Closed: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick visitors because your Island is closed." + Visitors: + Message: "&bSkyBlock &8| &cError&8: &eThere are no visitors at your Island." + Kicked: + Target: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been kicked from the Island." + Sender: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have kicked &c%visitors &evisitors from your Island." + Current: + Info: + Message: "&f&oDisplay the current Island you are at." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island current " + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to see what Island other players are at." + Offline: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not connected to the server." + Island: + Owner: + Yourself: + Message: "&bSkyBlock &8| &aInfo&8: &eYou are at &d%player's &eIsland." + Other: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &a%target &eis at &d%owner's &eIsland." + None: + Yourself: + Message: "&bSkyBlock &8| &aInfo&8: &eYou are not at an Island." + Other: + Message: "&bSkyBlock &8| &aInfo&8: &eThat player is not at an Island." + Visit: + Info: + Message: "&f&oOpens a menu of public Islands to Visit." + Open: + Info: + Message: "&f&oOpens your Island to Visitors." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to open the Island." + Already: + Message: "&bSkyBlock &8| &cError&8: &eYour Island is already open." + Opened: + Message: "&bSkyBlock &8| &aInfo&8: &eYour Island has been opened." + Close: + Info: + Message: "&f&oCloses your Island to Visitors." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to close the Island." + Already: + Message: "&bSkyBlock &8| &cError&8: &eYour Island is already closed." + Closed: + Message: "&bSkyBlock &8| &aInfo&8: &eYour Island has been closed." + Public: + Info: + Message: "&f&oMake your Island private or public." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to make the Island public or private." + Public: + Message: "&bSkyBlock &8| &aInfo&8: &eYour Island is now &aPublic&e." + Private: + Message: "&bSkyBlock &8| &aInfo&8: &eYour Island is now &cPrivate&e." + Admin: + Create: + Info: + Message: "&f&oManage Structures for the Island Creator menu." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Generator: + Info: + Message: "&f&oManager generators for coddlestone generators." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Disabled: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot peform that command because the generator has been disabled." + Level: + Info: + Message: "&f&oChange Island level materials and points." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Structure: + Info: + Message: "&f&oCreate structures for Islands." + Tool: + Info: + Message: "&f&oGives the player the Structure tool item." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Inventory: + Message: "&bSkyBlock &8| &cError&8: &eYou already have the Structure tool in your Inventory." + Equiped: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been given the Structure tool." + Save: + Info: + Message: "&f&oSaves a selected Structure." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin structure save " + Position: + Message: "&bSkyBlock &8| &cError&8: &ePlease use the structure tool to select two positions of an area." + Complete: + Message: "&bSkyBlock &8| &cError&8: &ePlease complete the area selection by using the structure tool and selecting two positions of an area." + Selection: + World: + Message: "&bSkyBlock &8| &cError&8: &eBoth selected positions have to be in the same World." + Player: + World: + Message: "&bSkyBlock &8| &cError&8: &eYou must be in the same World as the selected positions." + Area: + Message: "&bSkyBlock &8| &cError&8: &eYou must be inside the selected area." + Saved: + Successful: + Message: "&bSkyBlock &8| &aInfo&8: &eThe structure with the name '&d%name&e' has been saved!" + Failed: + Message: "&bSkyBlock &8| &cError&8: &eAn error occured when trying to save the Structure." + SetSpawn: + Info: + Message: "&f&oSets the spawn point to your location." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + World: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot set the spawn point in an Island world." + Set: + Message: "&bSkyBlock &8| &aInfo&8: &eThe spawn point has been set to your location." + Delete: + Info: + Message: "&f&oDelete a players Island permanently." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin delete " + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not an Island owner." + Deleted: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have deleted the player &c%player's &eIsland." + Owner: + Info: + Message: "&f&oGet the owner of a player's Island." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin owner " + Island: + None: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Member: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &d%player's Island owner is &d%player&e." + Owner: + Message: "&bSkyBlock &8| &aInfo&8: &eThe player &d%player &eis an Island owner." + Reload: + Info: + Message: "&f&oReload all loaded files." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Reloaded: + Message: "&bSkyBlock &8| &aInfo&8: &eAll loaded files have been reloaded." +Island: + Creator: + Selector: + Created: + Message: "&bSkyBlock &8| &aInfo&8: &eYou are now an Island owner." + None: + Message: "&bSkyBlock &8| &cError&8: &eThere are no Structures available to use." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to use that Structure." + File: + Message: "&bSkyBlock &8| &cError&8: &eThe File for that Structure does not exist." + Cooldown: + Word: + Minute: "minute(s)" + Second: "second(s)" + Message: "&bSkyBlock &8| &cError&8: &eYou must wait &c&o%time &ebefore creating an Island." + Biome: + Cooldown: + Word: + Minute: "minute(s)" + Second: "second(s)" + Message: "&bSkyBlock &8| &cError&8: &eYou must wait &c&o%time &ebefore changing your Island biome." + Settings: + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to do that on this Island." + Visitor: + Welcome: + Disabled: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to use that feature." + Signature: + Disabled: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to use that feature." + WorldBorder: + Outside: + Message: "&bSkyBlock &8| &cError&8: &eYou went too far outside the Island WorldBorder." + Disappeared: + Message: "&bSkyBlock &8| &cError&8: &eThe Island you were on suddenly disappeared." + Visit: + Already: + Message: "&bSkyBlock &8| &cError&8: &eYou are already at that player's Island." + Exist: + Message: "&bSkyBlock &8| &cError&8: &eThat Island no longer exists." + Closed: + Menu: + Message: "&bSkyBlock &8| &cError&8: &eThat Island is no longer open for visitors." + Island: + Message: "&bSkyBlock &8| &aInfo&8: &eThe Island you were at is no longer open for visitors." + Plugin: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot teleport to the destination location because the Island isn't open for visitors." + Banned: + Island: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been banned from the Island you were at." + Teleport: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot teleport to the destination location because you are banned from that Island." + Teleported: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been teleported to &a%player's &eIsland." + Unloaded: + Message: "&bSkyBlock &8| &aInfo&8: &eThere are no Members of the Island online. You have been kicked from the Island." + Deleted: + Message: "&bSkyBlock &8| &aInfo&8: &eThe owner of the Island has deleted their Island. You have been kicked from the Island." + Vote: + Island: + Message: "&bSkyBlock &8| &cError&8: &eYou must be at that Island to vote." + Added: + Message: "&bSkyBlock &8| &aInfo&8: &eYour vote has been &a&lADDED &efor &a%player's &eIsland." + Removed: + Message: "&bSkyBlock &8| &aInfo&8: &eYour vote has been &c&lREMOVED &efor &a%player's &eIsland." + Location: + Add: + Message: "&bSkyBlock &8| &cError&8: &eYou must be at the Island to add a vote." + Remove: + Message: "&bSkyBlock &8| &cError&8: &eYou must be at the Island to remove your vote." + Banned: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been banned from the Island." + Structure: + Tool: + Position: + Message: "&bSkyBlock &8| &aInfo&8: &ePosition &b%position &ehas been selected!" + Material: + Message: "&bSkyBlock &8| &cError&8: &eThe defined material in the configuration file for the Structure selection tool could not be found." + Item: + Displayname: "&bStructure Tool" + Lore: + - "&7Select two positions of" + - "&7an area." + Chat: + Format: + Role: + Member: "&a[Member]" + Operator: "&b[Operator]" + Owner: "&c[Owner]" + Message: "&8[&bSkyBlock &8| &dChat&8] %role &e%player&8: &f%message" + Untoggled: + Message: "&bSkyBlock &8| &aInfo&8: &eThe Island chat has been untoggled because there are no Island members online. Chat messages will now be visible for all players." + Admin: + Creator: + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to do that." + Already: + Message: "&bSkyBlock &8| &cError&8: &eA structure by that name already exists." + Exist: + Message: "&bSkyBlock &8| &cError&8: &eThat structure does not exist." + Selected: + Message: "&bSkyBlock &8| &cError&8: &eYou have not selected a structure." + File: + Message: "&bSkyBlock &8| &cError&8: &eThat file does not exist in the structures directory." + Characters: + Message: "&bSkyBlock &8| &cError&8: &eThe structure name can only contain letters and numbers." + Item: + Added: + Message: "&bSkyBlock &8| &aInfo&8: &eSelect an item in your inventory." + Removed: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have been removed from the item selector." + Cancelled: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have cancelled the item selector." + Created: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have created a structure with the name '&d%structure&e'." + Removed: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have removed the structure with the name '&d%structure&e'." + Generator: + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to do that." + Disabled: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot do that because generators have been disabled." + Already: + Message: "&bSkyBlock &8| &cError&8: &eA generator by that name already exists." + Exist: + Message: "&bSkyBlock &8| &cError&8: &eThat generator does not exist." + Selected: + Message: "&bSkyBlock &8| &cError&8: &eYou have not selected a generator." + Characters: + Message: "&bSkyBlock &8| &cError&8: &eThe generator name can only contain letters and numbers." + Chance: + Numerical: + Message: "&bSkyBlock &8| &cError&8: &eYou must enter a numerical value." + Over: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot set the chance of the material to that because the overall chance total of the materials for this generator goes over 100." + Material: + Limit: + Message: "&bSkyBlock &8| &cError&8: &eYou have reached the limit of materials for that generator." + Already: + Message: "&bSkyBlock &8| &cError&8: &eThat material type has already been added to that generator." + Added: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have added the material '&d%material&e' to the generator '&d%generator&e'." + Created: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have created a generator with the name '&d%generator&e'." + Removed: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have removed the generator with the name '&d%generator&e'." + Levelling: + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to do that." + Already: + Message: "&bSkyBlock &8| &cError&8: &eThat material type has already been added." + Exist: + Message: "&bSkyBlock &8| &cError&8: &eThat material type has not been added." + Numerical: + Message: "&bSkyBlock &8| &cError&8: &ePlease provide a numerical value." + Added: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have added the material '&d%material&e'." + Removed: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have removed the material '&d%material&e'." + Points: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have set the material '&d%material&e' points to '&6%points&8'." + Division: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have set the points division to '&f%division&e'." +Placeholder: + skyblock_island_level: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_points: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_role: + Empty: + Message: "&f&oNone" + Non-empty: + Message: "&f%placeholder" + skyblock_island_owner: + Empty: + Message: "&f&oNone" + Non-empty: + Yourself: + Message: "&fYou" + Other: + Message: "&f%placeholder" + skyblock_island_biome: + Empty: + Message: "&f&oNone" + Non-empty: + Message: "&f%placeholder" + skyblock_island_time: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_weather: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_bans: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_members_total: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_members: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_operators: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" + skyblock_island_visitors: + Empty: + Message: "&c0" + Non-empty: + Message: "&f%placeholder" +Scoreboard: + Tutorial: + Displayname: " &b&lSkyBlock &7(&f%players_online&7/&f%players_max&7)" + Displaylines: + - "" + - "&bIsland&f:" + - "&cYou do not own an Island." + - " &8- &7/island create" + - "" + - "&bProfile&f:" + - " &8- &7Rank&8: &fDefault" + - " &8- &7Balance&8: &f$0" + - "" + - "&ewww.example.net" + Island: + Solo: + Displayname: " &b&lSkyBlock &7(&f%players_online&7/&f%players_max&7)" + Occupied: + Displaylines: + - "" + - "&bIsland&f:" + - " &8- &7Level&8: &f%island_level" + - " &8- &7Visitors&8: &f%island_visitors" + - "" + - "&bProfile&f:" + - " &8- &7Rank&8: &fDefault" + - " &8- &7Balance&8: &f$0" + - "" + - "&ewww.example.net" + Empty: + Displaylines: + - "" + - "&bIsland&f:" + - " &8- &7Level&8: &f%island_level" + - "" + - "&bProfile&f:" + - " &8- &7Rank&8: &fDefault" + - " &8- &7Balance&8: &f$0" + - "" + - "&ewww.example.net" + Team: + Word: + Owner: "Owner" + Operator: "Operator" + Member: "Member" + Displayname: " &b&lSkyBlock &7(&f%players_online&7/&f%players_max&7)" + Occupied: + Displaylines: + - "" + - "&bIsland&f:" + - " &8- &7Role&8: &f%island_role" + - " &8- &7Members&8: &f%island_members" + - " &8- &7Level&8: &f%island_level" + - " &8- &7Visitors&8: &f%island_visitors" + - "" + - "&bProfile&f:" + - " &8- &7Rank&8: &fDefault" + - " &8- &7Balance&8: &f$0" + - "" + - "&ewww.example.net" + Empty: + Displaylines: + - "" + - "&bIsland&f:" + - " &8- &7Role&8: &f%island_role" + - " &8- &7Members&8: &f%island_members" + - " &8- &7Level&8: &f%island_level" + - "" + - "&bProfile&f:" + - " &8- &7Rank&8: &fDefault" + - " &8- &7Balance&8: &f$0" + - "" + - "&ewww.example.net" +Menu: + Creator: + Selector: + Title: "&8Island Creator" + Item: + Island: + Word: + Empty: "&f&oEmpty" + Displayname: "%displayname &aIsland" + Lore: + - "&7Description&8:" + - "%description" + - "" + - "&eClick to create Island!" + ControlPanel: + Title: "&8Island Control Panel" + Item: + Teleport: + Displayname: "&aIsland Teleport" + Lore: + - "&7[&f!&7] Teleports you to the main" + - " &7spawn point of your Island." + - "" + - "&eClick to Teleport to your Island!" + Barrier: + Displayname: "&cIsland Control Panel" + Level: + Displayname: "&aIsland Level" + Lore: + - "&7[&f!&7] Gain Levels by expanding" + - " &7your Island and placing down" + - " &7rare blocks." + - "" + - "&eClick to calculate Island level!" + Settings: + Displayname: "&aIsland Settings" + Lore: + - "&7[&f!&7] Manage your Island settings" + - " &7and decide what permissions you" + - " &7want to give." + - "" + - "&eClick to view Island settings!" + Members: + Displayname: "&aIsland Members" + Lore: + - "&7[&f!&7] View what players are Members" + - " &7of your Island and see their" + - " &7role and statistics." + - "" + - "&eClick to view Island members!" + Biome: + Displayname: "&aIsland Biome" + Lore: + - "&7[&f!&7] Select multiple biomes for" + - " &7your Island and decide which" + - " &7one best suits it." + - "" + - "&eClick to change Island biome!" + Weather: + Displayname: "&aIsland Weather" + Lore: + - "&7[&f!&7] Change the weather for" + - " &7your Island and change the" + - " &7time." + - "" + - "&eClick to change Island weather!" + Bans: + Displayname: "&aIsland Bans" + Lore: + - "&7[&f!&7] View what players have" + - " &7been banned from entering" + - " &7your Island." + - "" + - "&eClick to view Island bans!" + Visitors: + Displayname: "&aIsland Visitors" + Lore: + - "&7[&f!&7] View what players are" + - " &7visiting your Island and" + - " &7see how long they have" + - " &7been visiting for." + - "" + - "&eClick to view Island visitors!" + Leaderboard: + Browse: + Title: "&8Select a Leaderboard" + Item: + Leaderboard: + Displayname: "&aTop Island %leaderboard" + Lore: + - "&7View the top 10 Islands." + - "" + - "&eClick to view leaderboard!" + Exit: + Displayname: "&cExit Categories" + Leaderboard: + Title: "&8Top Island %leaderboard" + Item: + Exit: + Displayname: "&cExit Leaderboard" + Return: + Displayname: "&cReturn to Categories" + Island: + Word: + Empty: "&f&oEmpty" + Displayname: "&a&lIsland Top %position" + Level: + Lore: + - "&7Owner&8: &f%owner" + - "&7Level&8: &f%level" + - "&7Members&8: &f%members" + - "" + - "&7Signature&8:" + - "%signature" + Votes: + Lore: + - "&7Owner&8: &f%owner" + - "&7Votes&8: &f%votes" + - "" + - "&7Signature&8:" + - "%signature" + Empty: + Displayname: "&a&lIsland Top %position" + Lore: + - "&f&oEmpty" + Biome: + Title: "&8Select a Biome" + Item: + Info: + Displayname: "&bCurrent Biome" + Lore: + - "&7Type&8: &e%biome_type" + Barrier: + Displayname: "&cSelect a Biome >" + Biome: + Current: + Displayname: "&a&mBiome: &e&m%biome_type" + Lore: + - "&cCurrently Set" + Select: + Displayname: "&aBiome: &e%biome_type" + Lore: + - "&7Click to Set!" + Weather: + Title: "&8Island Weather" + Item: + Info: + Displayname: "&bWeather Information" + Synchronised: + Enabled: "&atrue" + Disabled: "&cfalse" + Time: + Dawn: "dawn/sunrise" + Day: "day" + Noon: "midday/noon" + Dusk: "dusk/sunset" + Night: "night" + Midnight: "midnight" + Lore: + - "&7Synchronised&8: %synchronised" + - "&7Weather&8: &6%weather" + - "&7Time&8: &6%time &o(%time_name)" + Barrier: + Displayname: "&cIsland Weather Options >" + Time: + Displayname: "&aTime" + Choice: + Dawn: "dawn/sunrise" + Day: "day" + Noon: "midday/noon" + Dusk: "dusk/sunset" + Night: "night" + Midnight: "midnight" + Lore: + - "&7Choice&8: &b%choice" + - "" + - "&eClick to change time!" + Weather: + Displayname: "&aWeather" + Choice: + Clear: "clear" + Downfall: "downfall" + Lore: + - "&7Choice&8: &b%choice" + - "" + - "&eClick to change weather!" + Synchronised: + Displayname: "&aSynchronised" + Choice: + Enable: "Enable" + Disable: "Disable" + Lore: + - "&7When enabled, the weather" + - "&7and time will operate the" + - "&7same weather and time as" + - "&7the world. When disabled," + - "&7the weather and time will" + - "&7be fixed." + - "" + - "&eClick to %choice!" + Rollback: + Title: "&8Island Rollback" + Item: + Info: + Displayname: "&bRollback Information" + Barrier: + Displayname: "&cIsland Rollback Options >" + Save: + Displayname: "&aSave Rollback" + Lore: + - "&7Save the current Island" + - "&7state for both the normal" + - "&7and nether world." + - "" + - "&eClick to save rollback!" + Load: + Displayname: "&aLoad Rollback" + Lore: + - "&7Load the saved rollback." + - "" + - "&c&oWarning: You will not be" + - "&c&oable to recover your" + - "&c&ocurrent Island state." + - "" + - "&eClick to load rollback!" + Reset: + Displayname: "&aReset Island" + Lore: + - "&7Reset the Island back to" + - "&7its beginning state." + - "" + - "&c&oWarning: You will not be" + - "&c&oable to recover your" + - "&c&ocurrent Island state." + - "" + - "&eClick to reset Island!" + Levelling: + Title: "&8Island Levelling" + Item: + Exit: + Displayname: "&cExit Island Levelling" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cIsland Materials Below" + Rescan: + Displayname: "&aRescan Island Materials" + Lore: + - "&7Click to rescan your island" + - "&7materials to gather overall" + - "&7points and your level." + - "" + - "&cWarning: You must wait a" + - "&chour after a rescan to" + - "&cperform another one!" + Statistics: + Displayname: "&3&nIsland Materials Statistics" + Lore: + - "&bLevel:" + - "&e%level" + - "" + - "&bPoints:" + - "&e%level_points" + Nothing: + Displayname: "&c&oNothing to see here..." + Material: + Displayname: "&7%material &8(&e+%points Points&8)" + Settings: + Categories: + Title: "&8Settings - Categories" + Item: + Exit: + Displayname: "&cClick to Exit" + Visitor: + Displayname: "&aVisitor Settings" + Lore: + - "&7Edit and decide what permissions" + - "&7your want Visitors to have while" + - "&7they explore your Island." + - "" + - "&eClick to Edit Settings!" + Member: + Displayname: "&aMember Settings" + Lore: + - "&7Edit and decide what permissions" + - "&7you want Members to have when" + - "&7playing on your Island." + - "" + - "&eClick to Edit Settings!" + Operator: + Displayname: "&aOperator Settings" + Lore: + - "&7Edit and decide what permissions" + - "&7you want Operators to have when" + - "&7operating your Island." + - "" + - "&eClick to Edit Settings!" + Owner: + Displayname: "&aIsland Settings" + Lore: + - "&7Edit and decide what permissions" + - "&7are most suitable for your Island." + - "" + - "&eClick to Edit Settings!" + Visitor: + Title: "&8Visitor Settings" + Item: + Return: + Displayname: "&cClick to Return" + Statistics: + Displayname: "&aIsland Visit Statistics" + Vote: + Enabled: + Open: + Lore: + - "&7Island Visits&8: &e%visits" + - "&7Island Votes&8: &e%votes" + - "" + - "&7Current Visitors&8: &a%visitors" + - "" + - "&eClick to close Island!" + Closed: + Lore: + - "&7Island Visits&8: &e%visitors" + - "&7Island Votes&8: &e%votes" + - "" + - "&aClick to open Island!" + Disabled: + Open: + Lore: + - "&7Island Visits&8: &e%visits" + - "" + - "&7Current Visitors&8: &a%visitors" + - "" + - "&eClick to close Island!" + Closed: + Lore: + - "&7Island Visits&8: &e%visitors" + - "" + - "&eClick to open Island!" + Signature: + Displayname: "&bIsland Signature" + Lore: + - "&7Set a custom signature that is" + - "&7show in the Visit Islands menu" + - "&7when your Island is open." + - "" + - "&eClick to open panel!" + Welcome: + Displayname: "&bIsland Welcome Message" + Lore: + - "&7Set a custom welcome message" + - "&7to be sent to Visitors when" + - "&7they enter your Island." + - "" + - "&eClick to open panel!" + Panel: + Signature: + Title: "&8Set a Signature" + Item: + Return: + Displayname: "&cClick to Return" + Message: + Displayname: "&bSignature&f:" + Word: + Empty: "&7&oEmpty" + Line: + Add: + Displayname: "&aAdd a Line" + More: + Lore: + - "" + - "&7Click to add a Line!" + Limit: + Lore: + - "" + - "&cYou have reached the Limit!" + Word: + Enter: "Enter Text" + Remove: + Displayname: "&cRemove a Line" + Lines: + Lore: + - "" + - "&7Click to remove the bottom Line!" + None: + Lore: + - "" + - "&cThere are no lines to remove!" + Welcome: + Title: "&8Set a Welcome Message" + Item: + Return: + Displayname: "&cClick to Return" + Message: + Displayname: "&bWelcome Message&f:" + Word: + Empty: "&7&oEmpty" + Line: + Add: + Displayname: "&aAdd a Line" + More: + Lore: + - "" + - "&7Click to add a Line!" + Limit: + Lore: + - "" + - "&cYou have reached the Limit!" + Word: + Enter: "Enter Text" + Remove: + Displayname: "&cRemove a Line" + Lines: + Lore: + - "" + - "&7Click to remove the bottom Line!" + None: + Lore: + - "" + - "&cThere are no lines to remove!" + Member: + Title: "&8Member Settings" + Item: + Return: + Displayname: "&cClick to Return" + Operator: + Title: "&8Operator Settings" + Item: + Return: + Displayname: "&cClick to Return" + Setting: + Status: + Enabled: + Lore: + - "&7Status&8: &atrue" + Disabled: + Lore: + - "&7Status&8: &cfalse" + Invite: + Displayname: "&aSend Invites" + Kick: + Displayname: "&aKick Members & Visitors" + Ban: + Displayname: "&aBan Visitors" + Unban: + Displayname: "&aUnban Visitors" + Visitor: + Displayname: "&aEdit Visitor Settings" + Member: + Displayname: "&aEdit Member Settings" + Island: + Displayname: "&aEdit Island Settings" + MainSpawn: + Displayname: "&aSet Island Main Spawn" + VisitorSpawn: + Displayname: "&aSet Island Visitor Spawn" + Biome: + Displayname: "&aSet Biome" + Weather: + Displayname: "&aSet Weather" + Owner: + Title: "&8Island Settings" + Item: + Return: + Displayname: "&cClick to Return" + Setting: + Status: + Enabled: + Lore: + - "&7Status&8: &atrue" + Disabled: + Lore: + - "&7Status&8: &cfalse" + NaturalMobSpawning: + Displayname: "&aNatural Mob Spawning" + MobGriefing: + Displayname: "&aMob Griefing" + PvP: + Displayname: "&aPvP" + Explosions: + Displayname: "&aExplosions" + FireSpread: + Displayname: "&aFire Spread" + LeafDecay: + Displayname: "&aLeaf Decay" + KeepItemsOnDeath: + Displayname: "&aKeep Items on Death" + Default: + Item: + Setting: + Status: + Enabled: + Lore: + - "&7Status&8: &atrue" + Disabled: + Lore: + - "&7Status&8: &cfalse" + Destroy: + Displayname: "&aDestroy Blocks" + Place: + Displayname: "&aPlace Blocks" + Anvil: + Displayname: "&aAnvil Use" + ArmorStand: + Displayname: "&aArmorStand Use" + Beacon: + Displayname: "&aBeacon Use" + Bed: + Displayname: "&aBed Use" + AnimalBreeding: + Displayname: "&aAnimal Breeding" + Brewing: + Displayname: "&aBrewing Stand Use" + Bucket: + Displayname: "&aBucket Use" + WaterCollection: + Displayname: "&aWater Collection" + Storage: + Displayname: "&aAccess Storage" + Workbench: + Displayname: "&aWorkbench Use" + Crop: + Displayname: "&aCrop Trampling" + Door: + Displayname: "&aDoor Use" + Gate: + Displayname: "&aGate Use" + Projectile: + Displayname: "&aProjectile Launch" + Enchant: + Displayname: "&aEnchantment Table Use" + Fire: + Displayname: "&aFire Extinguish" + Furnace: + Displayname: "&aFurnace Use" + HorseInventory: + Displayname: "&aAccess Horse Inventory" + MobRiding: + Displayname: "&aMob Riding" + MobHurting: + Displayname: "&aMob Hurting" + MobTaming: + Displayname: "&aMob Taming" + Leash: + Displayname: "&aLeash Use" + LeverButton: + Displayname: "&aLever/Button Use" + Milking: + Displayname: "&aMilking" + Jukebox: + Displayname: "&aJukebox Use" + PressurePlate: + Displayname: "&aPressure Plate Activate" + Redstone: + Displayname: "&aRedstone Use" + Shearing: + Displayname: "&aMob Shearing" + Trading: + Displayname: "&aVillager Trading" + ItemDrop: + Displayname: "&aItem Drop" + ItemPickup: + Displayname: "&aItem Pickup" + Fishing: + Displayname: "&aFishing" + DropperDispenser: + Displayname: "&aDropper/Dispenser Use" + SpawnEgg: + Displayname: "&aSpawn Eggs" + Cake: + Displayname: "&aCake Consumption" + DragonEggUse: + Displayname: "&aDragon Egg Use" + MinecartBoat: + Displayname: "&aMinecart/Boat Use" + Portal: + Displayname: "&aPortal Use" + Hopper: + Displayname: "&aHopper Use" + Members: + Title: "&8Island Members" + Item: + Exit: + Displayname: "&cExit Island Members" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cIsland Members Below" + Type: + Displayname: "&aChange Type" + Lore: + - "&7Current Type&8: &b%type" + - "" + - "&bDefault&7: Show all Island" + - "&7members." + - "&bMembers&7: Show Members only." + - "&bOperators&7: Show Operators" + - "&7only." + - "&bOwner&7: Show the Owner only." + - "" + - "&eClick to change between all" + - "ðe available type options." + Statistics: + Displayname: "&3&nIsland Member Statistics" + Lore: + - "&bIsland Members:" + - "&e%island_members/%island_capacity" + - "" + - "&bMembers:" + - "&e%members" + - "" + - "&bOperators:" + - "&e%operators" + Sort: + Displayname: "&aChange Sort" + Lore: + - "&7Current Sort&8: &b%sort" + - "" + - "&bDefault&7: Show Island members" + - "&7ordered from highest-lowest" + - "&7role." + - "&bPlaytime&7: Show Island Members" + - "&7ordered from the most time played." + - "&bMember Since&7: Show Island Members" + - "&7ordered from member since." + - "&bLast Online&7: Show Island Members" + - "&7ordered from last online." + - "" + - "&eClick to change between all" + - "ðe available sort options." + Nothing: + Displayname: "&c&oNothing to see here..." + Member: + Displayname: "&b%player" + Word: + Days: "day(s)" + Hours: "hour(s)" + Minutes: "minute(s)" + Seconds: "second(s)" + Click: "Click" + Left-Click: "Left-Click" + Right-Click: "Right-Click" + Role: + Word: + Member: "&aMember" + Operator: "&bOperator" + Owner: "&6Owner" + Lore: + - "&7Role&8:" + - "%role" + Playtime: + Lore: + - "&7Playtime&8:" + - "&d%playtime" + Since: + Lore: + - "&7Member Since&8:" + - "&a%since" + LastOnline: + Lore: + - "&7Last Online&8:" + - "&c%last_online" + Action: + Word: + Promote: "promote" + Demote: "demote" + Kick: "kick" + Lore: "&e%click to %action player!" + Ownership: + Title: "&8Island Ownership" + Item: + Original: + Displayname: "&bOriginal Owner" + Lore: + - "&7Player&8: &e%player" + Barrier: + Displayname: "&cIsland Ownership Options >" + Assign: + Word: + Enter: "Enter a Player" + Displayname: "&aAssign Owner" + Lore: + - "&7Assign ownership to a Member" + - "&7of your Island." + - "" + - "&eClick to enter player name!" + Password: + Displayname: "&aOwnership Password" + Unset: + Lore: + - "&7Set a password that can be" + - "&7used by any Member of your" + - "&7Island to automatically" + - "&7assign them ownership." + - "" + - "&7Password&8:" + - "&c&oUnset" + - "" + - "&eClick to set password!" + Visible: + Lore: + - "&7Set a password that can be" + - "&7used by any Member of your" + - "&7Island to automatically" + - "&7assign them ownership." + - "" + - "&7Password&8:" + - "&f&o%password" + - "" + - "&eLeft-Click to set password!" + - "&eMiddle-Click to show password!" + - "&eRight-Click to reset password!" + Hidden: + Word: + Enter: "Enter a Password" + Lore: + - "&7Set a password that can be" + - "&7used by any Member of your" + - "&7Island to automatically" + - "&7assign them ownership." + - "" + - "&7Password&8:" + - "&f&oHidden" + - "" + - "&eLeft-Click to set password!" + - "&eMiddle-Click to show password!" + - "&eRight-Click to reset password!" + Visit: + Title: "&8Island Visit" + Item: + Exit: + Displayname: "&cExit Island Visit" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cOpen Islands Below" + Type: + Displayname: "&aChange Type" + Lore: + - "&7Current Type&8: &b%type" + - "" + - "&bDefault&7: Show all open Islands." + - "&bSolo&7: Show Solo Islands only." + - "&bTeam&7: Show Team Islands only." + - "" + - "&eClick to change between all" + - "ðe available type options." + Statistics: + Displayname: "&bIsland Statistics" + Lore: + - "&7Islands Open&8: &f%islands_open&7/&f%islands" + Sort: + Displayname: "&aChange Sort" + Lore: + - "&7Current Sort&8: &b%sort" + - "" + - "&bDefault&7: Show Islands ordered" + - "&7randomly." + - "&bPlayers&7: Show Islands ordered" + - "&7from most-least players at Island." + - "&bLevel&7: Show Islands ordered from" + - "&7higest-lowest Island level." + - "&bMembers&7: Show Islands ordered" + - "&7from most-least Island members." + - "&bVisits&7: Show Islands ordered from" + - "&7most-least Island visits." + - "&bVotes&7: Show Islands ordered from" + - "&7most-least Island votes." + - "" + - "&eClick to change between all" + - "ðe available sort options." + Nothing: + Displayname: "&c&oNo Islands were found..." + Island: + Displayname: "&a%player" + Vote: + Word: + Empty: "&f&oEmpty" + Enabled: + Signature: + Word: + Add: "add" + Remove: "remove" + Enabled: + Member: + Lore: + - "&7Signature&8:" + - "%signature" + - "" + - "&7Players At Island&8: &f%players&7/&f%player_capacity" + - "" + - "&7Level&8: &b%level" + - "&7Members&8: &e%members" + - "&7Visits&8: &e%visits" + - "&7Votes&8: &6%votes" + - "" + - "&eClick to visit Island!" + Visitor: + Lore: + - "&7Signature&8:" + - "%signature" + - "" + - "&7Players At Island&8: &f%players&7/&f%player_capacity" + - "" + - "&7Level&8: &b%level" + - "&7Members&8: &e%members" + - "&7Visits&8: &e%visits" + - "&7Votes&8: &6%votes" + - "" + - "&eLeft-Click to visit Island!" + - "&eRight-Click to %action vote!" + Disabled: + Member: + Lore: + - "&7Players At Island&8: &f%players&7/&f%player_capacity" + - "" + - "&7Level&8: &b%level" + - "&7Members&8: &e%members" + - "&7Visits&8: &e%visits" + - "&7Votes&8: &6%votes" + - "" + - "&eClick to visit Island!" + Visitor: + Lore: + - "&7Players At Island&8: &f%players&7/&f%player_capacity" + - "" + - "&7Level&8: &b%level" + - "&7Members&8: &e%members" + - "&7Visits&8: &e%visits" + - "&7Votes&8: &6%votes" + - "" + - "&eLeft-Click to visit Island!" + - "&eRight-Click to %action vote!" + Disabled: + Signature: + Enabled: + Lore: + - "&7Signature&8:" + - "%signature" + - "" + - "&7Players At Island&8: &f%players&7/&f%player_capacity" + - "" + - "&7Level&8: &b%level" + - "&7Members&8: &e%members" + - "&7Visits&8: &e%visits" + - "" + - "&eClick to visit Island!" + Disabled: + Lore: + - "&7Players At Island&8: &f%players&7/&f%player_capacity" + - "" + - "&7Level&8: &b%level" + - "&7Members&8: &e%members" + - "&7Visits&8: &e%visits" + - "" + - "&eClick to visit Island!" + Visitors: + Title: "&8Island Visitors" + Item: + Exit: + Displayname: "&cExit Island Visitors" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cIsland Visitors Below" + Statistics: + Displayname: "&bIsland Visitors" + Lore: + - "&7Visitors&8: &f%visitors" + Nothing: + Displayname: "&cThere are no Visitors at your Island." + Visitor: + Displayname: "&a%player" + Word: + Days: "day(s)" + Hours: "hour(s)" + Minutes: "minute(s)" + Seconds: "second(s)" + Kick: + Permission: + Ban: + Permission: + Lore: + - "&7Visit Time&8:" + - "&d%time" + - "" + - "&eLeft-Click to Kick player!" + - "&eRight-Click to Ban player!" + NoPermission: + Lore: + - "&7Visit Time&8:" + - "&d%time" + - "" + - "&eClick to Kick player!" + NoPermission: + Ban: + Permission: + Lore: + - "&7Visit Time&8:" + - "&d%time" + - "" + - "&eClick to Ban player!" + NoPermission: + Lore: + - "&7Visit Time&8:" + - "&d%time" + Bans: + Title: "&8Island Ban" + Item: + Exit: + Displayname: "&cExit Island Bans" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cIsland Bans Below" + Statistics: + Displayname: "&bIsland Bans" + Lore: + - "&7Bans&8: &f%bans" + Nothing: + Displayname: "&cThere are no Bans at your Island." + Ban: + Displayname: "&a%player" + Lore: + - "" + - "&eClick to Unban player!" + Admin: + Creator: + Title: "&8Structure Editor" + Browse: + Item: + Exit: + Displayname: "&cExit Creator Editor" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cStructures Below" + Nothing: + Displayname: "&c&oNothing to see here..." + Information: + Word: + Enter: "Enter Name" + Displayname: "&bInformation" + Lore: + - "&7Structures&8: &f%structures" + - "" + - "&eClick to create a Structure!" + Structure: + Displayname: "&a%structure" + Lore: + - "&eLeft-Click to view options!" + - "&eRight-Click to remove structure!" + Options: + Item: + Return: + Displayname: "&cReturn to browse" + Word: + Unset: "&f&oUnset" + Displayname: + Word: + Enter: "Enter Displayname" + Displayname: "&aDisplayname" + Lore: + - "&7Displayname&8:" + - "&f&o%displayname" + - "" + - "&eClick to set displayname!" + Description: + Word: + Enter: "Enter Line" + Displayname: "&aDescription" + Unset: + Lore: + - "&7Description&8:" + - "%description" + - "" + - "&eClick to add line!" + Set: + Lore: + - "&7Description&8:" + - "%description" + - "" + - "&eLeft-Click to add line!" + - "&eRight-click to remove line!" + Permission: + Displayname: "&aPermission" + Enable: + Lore: + - "&7Permission&8:" + - "&f&o%permission" + - "" + - "&eClick to enable!" + Disable: + Lore: + - "&7Permission&8:" + - "&f&o%permission" + - "" + - "&eClick to disable!" + File: + Word: + Enter: "Enter file name" + Displayname: "&aStructure File" + Lore: + - "&7File&8:" + - "&f&o%file" + - "" + - "&eClick to set file!" + Item: + Displayname: "&aItem" + Lore: + - "&7Material&8:" + - "&f&o%material" + - "" + - "&7When clicked, select" + - "&7an item in your" + - "&7inventory or click" + - "&7this item again to" + - "&7cancel." + - "" + - "&eClick to set item!" + Generator: + Title: "&8Generator Editor" + Browse: + Item: + Exit: + Displayname: "&cExit Generator Editor" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cGenerators Below" + Nothing: + Displayname: "&c&oNothing to see here..." + Information: + Word: + Enter: "Enter Name" + Displayname: "&bInformation" + Lore: + - "&7Generators&8: &f%generators" + - "" + - "&eClick to create a Generator!" + Generator: + Displayname: "&a%generator" + Lore: + - "&eLeft-Click to manager generator!" + - "&eRight-Click to remove generator!" + Generator: + Item: + Return: + Displayname: "&cReturn to browse" + Barrier: + Displayname: "&cMaterials Below" + Information: + Displayname: "&bInformation" + Permission: + Enable: + Lore: + - "&7Name&8: &f%name" + - "&7Permission&8:" + - "&f&o%permission" + - "" + - "&eClick to enable permission!" + Disable: + Lore: + - "&7Name&8: &f%name" + - "&7Permission&8:" + - "&f&o%permission" + - "" + - "&eClick to disable permission!" + Nothing: + Displayname: "&c&oNothing to see here..." + Material: + Word: + Enter: "Enter Chance" + Displayname: "&a%material" + Lore: + - "&7Chance&8: &f%chance" + - "" + - "&eLeft-Click to set chance!" + - "&eRight-Click to remove material!" + Levelling: + Title: "&8Levelling Editior" + Item: + Exit: + Displayname: "&cExit Levelling Editor" + Previous: + Displayname: "&a< Previous Page" + Next: + Displayname: "&aNext Page >" + Barrier: + Displayname: "&cLevelling Materials Below" + Nothing: + Displayname: "&c&oNothing to see here..." + Information: + Word: + Enter: "Enter Division" + Displayname: "&bInformation" + Lore: + - "&7Materials&8: &f%materials" + - "&7Division&8: &f%division" + - "" + - "&eClick to set Division!" + Material: + Word: + Enter: "Enter Points" + Displayname: "&a%material" + Lore: + - "&7Points&8: &6%points" + - "" + - "&eLeft-Click to change points!" + - "&eRight-Click to remove material!" \ No newline at end of file diff --git a/levelling.yml b/levelling.yml new file mode 100644 index 00000000..3cd9f29f --- /dev/null +++ b/levelling.yml @@ -0,0 +1,14 @@ +# Required: +# Material Name +# Points Earned +Materials: + WOOD_BUTTON: + Points: 1 + GRANITE: + Points: 10 + GRASS: + Points: 5 + OAK_LOG: + Points: 100 + ALLIUM: + Points: 30 \ No newline at end of file diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 00000000..8036eecb --- /dev/null +++ b/plugin.yml @@ -0,0 +1,12 @@ +name: SkyBlock +main: me.goodandevil.skyblock.Main +version: 21 +api-version: 1.13 +description: A unique SkyBlock plugin +author: GoodAndEvil +softdepend: [PlaceholderAPI, MVdWPlaceholderAPI] +loadbefore: [Multiverse-Core] +commands: + island: + description: Island command + aliases: [is] \ No newline at end of file diff --git a/settings.yml b/settings.yml new file mode 100644 index 00000000..a7617a41 --- /dev/null +++ b/settings.yml @@ -0,0 +1,104 @@ +Visitor: + Destroy: false + Place: false + Anvil: false + ArmorStand: false + Beacon: false + Bed: false + AnimalBreeding: false + Brewing: false + Bucket: false + WaterCollection: false + Storage: false + Workbench: false + Crop: false + Door: false + Gate: false + Projectile: false + Enchant: false + Fire: false + Furnace: false + HorseInventory: false + MobRiding: false + MobHurting: false + MobTaming: true + Leash: false + LeverButton: false + Milking: false + Jukebox: false + PressurePlate: false + Redstone: false + Shearing: false + Trading: false + ItemDrop: false + ItemPickup: false + Fishing: false + DropperDispenser: false + SpawnEgg: false + Cake: false + DragonEggUse: false + MinecartBoat: false + Portal: false + Hopper: false +Member: + Destroy: true + Place: true + Anvil: true + ArmorStand: true + Beacon: true + Bed: true + AnimalBreeding: true + Brewing: true + Bucket: true + WaterCollection: true + Storage: true + Workbench: true + Crop: true + Door: true + Gate: true + Projectile: true + Enchant: true + Fire: true + Furnace: true + HorseInventory: true + MobRiding: true + MobHurting: true + MobTaming: true + Leash: true + LeverButton: true + Milking: true + Jukebox: true + PressurePlate: true + Redstone: true + Shearing: true + Trading: true + ItemDrop: true + ItemPickup: true + Fishing: true + DropperDispenser: true + SpawnEgg: true + MinecartBoat: true + Cake: true + DragonEggUse: true + Portal: true + Hopper: true +Operator: + Invite: true + Kick: true + Ban: true + Unban: true + Visitor: true + Member: true + Island: false + MainSpawn: false + VisitorSpawn: true + Biome: true + Weather: true +Owner: + NaturalMobSpawning: true + MobGriefing: false + PvP: false + Explosions: false + FireSpread: true + LeafDecay: true + KeepItemsOnDeath: true \ No newline at end of file diff --git a/src/me/goodandevil/skyblock/Main.java b/src/me/goodandevil/skyblock/Main.java index 77a9fcef..56829310 100644 --- a/src/me/goodandevil/skyblock/Main.java +++ b/src/me/goodandevil/skyblock/Main.java @@ -14,6 +14,7 @@ import me.goodandevil.skyblock.confirmation.ConfirmationTask; import me.goodandevil.skyblock.generator.GeneratorManager; import me.goodandevil.skyblock.invite.InviteManager; import me.goodandevil.skyblock.island.IslandManager; +import me.goodandevil.skyblock.leaderboard.LeaderboardManager; import me.goodandevil.skyblock.levelling.LevellingManager; import me.goodandevil.skyblock.listeners.Block; import me.goodandevil.skyblock.listeners.Bucket; @@ -34,6 +35,7 @@ import me.goodandevil.skyblock.menus.Bans; import me.goodandevil.skyblock.menus.Biome; import me.goodandevil.skyblock.menus.ControlPanel; import me.goodandevil.skyblock.menus.Creator; +import me.goodandevil.skyblock.menus.Leaderboard; import me.goodandevil.skyblock.menus.Levelling; import me.goodandevil.skyblock.menus.Members; import me.goodandevil.skyblock.menus.Ownership; @@ -75,6 +77,7 @@ public class Main extends JavaPlugin { private SoundManager soundManager; private GeneratorManager generatorManager; private PlaceholderManager placeholderManager; + private LeaderboardManager leaderboardManager; @Override public void onEnable() { @@ -106,6 +109,8 @@ public class Main extends JavaPlugin { placeholderManager = new PlaceholderManager(this); placeholderManager.registerPlaceholders(); + leaderboardManager = new LeaderboardManager(this); + new PlaytimeTask(playerDataManager, islandManager).runTaskTimerAsynchronously(this, 0L, 20L); new VisitTask(playerDataManager).runTaskTimerAsynchronously(this, 0L, 20L); new ConfirmationTask(playerDataManager).runTaskTimerAsynchronously(this, 0L, 20L); @@ -140,6 +145,7 @@ public class Main extends JavaPlugin { pluginManager.registerEvents(new ControlPanel(), this); pluginManager.registerEvents(new Creator(), this); pluginManager.registerEvents(new Structure(), this); + pluginManager.registerEvents(new Leaderboard(), this); pluginManager.registerEvents(new me.goodandevil.skyblock.menus.admin.Levelling(), this); pluginManager.registerEvents(new me.goodandevil.skyblock.menus.admin.Creator(), this); @@ -241,6 +247,10 @@ public class Main extends JavaPlugin { return placeholderManager; } + public LeaderboardManager getLeaderboardManager() { + return leaderboardManager; + } + @Override public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) { return new VoidGenerator(); diff --git a/src/me/goodandevil/skyblock/biome/BiomeManager.java b/src/me/goodandevil/skyblock/biome/BiomeManager.java index e377ae68..adf14108 100644 --- a/src/me/goodandevil/skyblock/biome/BiomeManager.java +++ b/src/me/goodandevil/skyblock/biome/BiomeManager.java @@ -57,9 +57,13 @@ public class BiomeManager { Location location = island.getLocation(me.goodandevil.skyblock.island.Location.World.Normal, me.goodandevil.skyblock.island.Location.Environment.Island); for (Location locationList : LocationUtil.getLocations(new Location(location.getWorld(), location.getBlockX() - island.getRadius(), 0, location.getBlockZ() - island.getRadius()), new Location(location.getWorld(), location.getBlockX() + island.getRadius(), 256, location.getBlockZ() + island.getRadius()))) { - try { + try { Block block = locationList.getBlock(); + if (!block.getChunk().isLoaded()) { + block.getChunk().load(true); + } + if (block != null) { block.setBiome(biome); diff --git a/src/me/goodandevil/skyblock/command/CommandManager.java b/src/me/goodandevil/skyblock/command/CommandManager.java index caf0a2a1..0b8bcabe 100644 --- a/src/me/goodandevil/skyblock/command/CommandManager.java +++ b/src/me/goodandevil/skyblock/command/CommandManager.java @@ -33,6 +33,7 @@ import me.goodandevil.skyblock.command.commands.DenyCommand; import me.goodandevil.skyblock.command.commands.InviteCommand; import me.goodandevil.skyblock.command.commands.KickAllCommand; import me.goodandevil.skyblock.command.commands.KickCommand; +import me.goodandevil.skyblock.command.commands.LeaderboardCommand; import me.goodandevil.skyblock.command.commands.LeaveCommand; import me.goodandevil.skyblock.command.commands.LevelCommand; import me.goodandevil.skyblock.command.commands.MembersCommand; @@ -83,6 +84,7 @@ public class CommandManager implements CommandExecutor, TabCompleter { List subCommands = new ArrayList<>(); subCommands.add(new VisitCommand(plugin).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Visit.Info.Message")))); subCommands.add(new ControlPanelCommand(plugin).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.ControlPanel.Info.Message")))); + subCommands.add(new LeaderboardCommand(plugin).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Leaderboard.Info.Message")))); subCommands.add(new CreateCommand(plugin).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Create.Info.Message")))); subCommands.add(new DeleteCommand(plugin).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Delete.Info.Message")))); subCommands.add(new TeleportCommand(plugin).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Teleport.Info.Message")))); @@ -277,10 +279,6 @@ public class CommandManager implements CommandExecutor, TabCompleter { int pageSize = 7; - if (page == -1) { - pageSize = 1000; - } - int nextEndIndex = subCommands.get(type).size() - page * pageSize, index = page * pageSize - pageSize, endIndex = index >= subCommands.get(type).size() ? subCommands.get(type).size() - 1 : index + pageSize; boolean showAlises = fileManager.getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Command.Help.Aliases.Enable"); @@ -307,27 +305,50 @@ public class CommandManager implements CommandExecutor, TabCompleter { suffix = ChatColor.translateAlternateColorCodes('&', sections[1]); } - for (; index < endIndex; index++) { - if (subCommands.get(type).size() > index) { - SubCommand subCommandFromIndex = subCommands.get(type).get(index); + if (page == -1) { + for (int i = 0; i < subCommands.get(type).size(); i++) { + SubCommand subCommandFromIndex = subCommands.get(type).get(i); String commandAliases = ""; if (showAlises) { - for (int i = 0; i < subCommandFromIndex.getAliases().length; i++) { - if (i == 0) { + for (int i1 = 0; i1 < subCommandFromIndex.getAliases().length; i1++) { + if (i1 == 0) { commandAliases = "/"; } - if (i == subCommandFromIndex.getAliases().length) { - commandAliases = commandAliases + subCommandFromIndex.getAliases()[i]; + if (i1 == subCommandFromIndex.getAliases().length-1) { + commandAliases = commandAliases + subCommandFromIndex.getAliases()[i1]; } else { - commandAliases = commandAliases + subCommandFromIndex.getAliases()[i] + "/"; + commandAliases = commandAliases + subCommandFromIndex.getAliases()[i1] + "/"; } } } player.spigot().sendMessage(new ChatComponent(prefix.replace("%info", subCommandFromIndex.getInfo()) + "/island " + subCommandText + subCommandFromIndex.getName() + commandAliases + suffix.replace("%info", subCommandFromIndex.getInfo()), false, null, null, new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(subCommandFromIndex.getInfo()).create())).getTextComponent()); } + } else { + for (; index < endIndex; index++) { + if (subCommands.get(type).size() > index) { + SubCommand subCommandFromIndex = subCommands.get(type).get(index); + String commandAliases = ""; + + if (showAlises) { + for (int i = 0; i < subCommandFromIndex.getAliases().length; i++) { + if (i == 0) { + commandAliases = "/"; + } + + if (i == subCommandFromIndex.getAliases().length) { + commandAliases = commandAliases + subCommandFromIndex.getAliases()[i]; + } else { + commandAliases = commandAliases + subCommandFromIndex.getAliases()[i] + "/"; + } + } + } + + player.spigot().sendMessage(new ChatComponent(prefix.replace("%info", subCommandFromIndex.getInfo()) + "/island " + subCommandText + subCommandFromIndex.getName() + commandAliases + suffix.replace("%info", subCommandFromIndex.getInfo()), false, null, null, new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(subCommandFromIndex.getInfo()).create())).getTextComponent()); + } + } } } else { player.sendMessage(ChatColor.translateAlternateColorCodes('&', helpLines)); diff --git a/src/me/goodandevil/skyblock/command/commands/LeaderboardCommand.java b/src/me/goodandevil/skyblock/command/commands/LeaderboardCommand.java new file mode 100644 index 00000000..c8e53e53 --- /dev/null +++ b/src/me/goodandevil/skyblock/command/commands/LeaderboardCommand.java @@ -0,0 +1,66 @@ +package me.goodandevil.skyblock.command.commands; + +import java.io.File; + +import org.bukkit.entity.Player; + +import me.goodandevil.skyblock.Main; +import me.goodandevil.skyblock.command.CommandManager; +import me.goodandevil.skyblock.command.SubCommand; +import me.goodandevil.skyblock.command.CommandManager.Type; +import me.goodandevil.skyblock.menus.Leaderboard; +import me.goodandevil.skyblock.playerdata.PlayerDataManager; +import me.goodandevil.skyblock.utils.version.Sounds; + +public class LeaderboardCommand extends SubCommand { + + private final Main plugin; + private String info; + + public LeaderboardCommand(Main plugin) { + this.plugin = plugin; + } + + @Override + public void onCommand(Player player, String[] args) { + PlayerDataManager playerDataManager = plugin.getPlayerDataManager(); + + if (playerDataManager.hasPlayerData(player)) { + if (plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Vote")) { + playerDataManager.getPlayerData(player).setViewer(new Leaderboard.Viewer(Leaderboard.Viewer.Type.Browse)); + } else { + playerDataManager.getPlayerData(player).setViewer(new Leaderboard.Viewer(Leaderboard.Viewer.Type.Level)); + } + + Leaderboard.getInstance().open(player); + plugin.getSoundManager().playSound(player, Sounds.CHEST_OPEN.bukkitSound(), 1.0F, 1.0F); + } + } + + @Override + public String getName() { + return "leaderboard"; + } + + @Override + public String getInfo() { + return info; + } + + @Override + public SubCommand setInfo(String info) { + this.info = info; + + return this; + } + + @Override + public String[] getAliases() { + return new String[] { "lb", "top" }; + } + + @Override + public Type getType() { + return CommandManager.Type.Default; + } +} diff --git a/src/me/goodandevil/skyblock/config/FileManager.java b/src/me/goodandevil/skyblock/config/FileManager.java index 7c69b71d..ca220bf3 100644 --- a/src/me/goodandevil/skyblock/config/FileManager.java +++ b/src/me/goodandevil/skyblock/config/FileManager.java @@ -51,7 +51,7 @@ public class FileManager { File configFile = configFiles.get(configFileList); if (configFile.exists()) { - if (configFileList.equals("config.yml") || configFileList.equals("language.yml")) { + if (configFileList.equals("config.yml") || configFileList.equals("language.yml") || configFileList.equals("settings.yml")) { FileChecker fileChecker = new FileChecker(plugin, configFileList); fileChecker.loadSections(); fileChecker.compareFiles(); diff --git a/src/me/goodandevil/skyblock/generator/GeneratorManager.java b/src/me/goodandevil/skyblock/generator/GeneratorManager.java index 8c3a7a0e..7ad96f2e 100644 --- a/src/me/goodandevil/skyblock/generator/GeneratorManager.java +++ b/src/me/goodandevil/skyblock/generator/GeneratorManager.java @@ -142,8 +142,8 @@ public class GeneratorManager { for (int index = 0; index < generator.getGeneratorMaterials().size(); index++) { GeneratorMaterial generatorMaterial = generator.getGeneratorMaterials().get(index); - for (int i = 0; i < generatorMaterial.getChance(); i++ ) { - chances.put(i, index); + for (int i = 0; i < generatorMaterial.getChance(); i++) { + chances.put(chances.size() + 1, index); } } diff --git a/src/me/goodandevil/skyblock/island/Island.java b/src/me/goodandevil/skyblock/island/Island.java index 465255b7..728373b8 100644 --- a/src/me/goodandevil/skyblock/island/Island.java +++ b/src/me/goodandevil/skyblock/island/Island.java @@ -78,10 +78,12 @@ public class Island { islandLocations.add(new Location(Location.World.Normal, Location.Environment.Visitor, fileManager.getLocation(config, "Location.Normal.Spawn.Visitor", true))); islandLocations.add(new Location(Location.World.Nether, Location.Environment.Visitor, fileManager.getLocation(config, "Location.Nether.Spawn.Visitor", true))); + Config settingsConfig = fileManager.getConfig(new File(plugin.getDataFolder(), "settings.yml")); + for (Settings.Role roleList : Settings.Role.values()) { HashMap roleSettings = new HashMap<>(); - for (String settingList : configLoad.getConfigurationSection("Settings." + roleList.name()).getKeys(false)) { + for (String settingList : settingsConfig.getFileConfiguration().getConfigurationSection(WordUtils.capitalize(roleList.name().toLowerCase())).getKeys(false)) { roleSettings.put(settingList, new Settings(configLoad.getBoolean("Settings." + roleList.name() + "." + settingList))); } @@ -142,8 +144,6 @@ public class Island { islandManager.setSpawnProtection(islandNetherLocation); } }.runTask(plugin); - - //plugin.getBiomeManager().setBiome(null, islandNormalLocation, Biome.valueOf(mainConfigLoad.getString("Island.Biome.Default.Type").toUpperCase())); } level = new Level(this, plugin); @@ -441,6 +441,10 @@ public class Island { FileConfiguration configLoad = config.getFileConfiguration(); configLoad.set("Visitor." + message.name() + ".Message", islandMessage); configLoad.set("Visitor." + message.name() + ".Author", author); + + if (message == Message.Signature) { + getVisit().setSignature(islandMessage); + } } } diff --git a/src/me/goodandevil/skyblock/island/IslandManager.java b/src/me/goodandevil/skyblock/island/IslandManager.java index 5732e8f5..261e72ce 100644 --- a/src/me/goodandevil/skyblock/island/IslandManager.java +++ b/src/me/goodandevil/skyblock/island/IslandManager.java @@ -11,6 +11,7 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.block.Biome; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -183,6 +184,13 @@ public class IslandManager { player.teleport(island.getLocation(Location.World.Normal, Location.Environment.Main)); } }.runTask(plugin); + + Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() { + @Override + public void run() { + plugin.getBiomeManager().setBiome(null, island, Biome.valueOf(fileManager.getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration().getString("Island.Biome.Default.Type").toUpperCase())); + } + }, 20L); } public void giveIslandOwnership(UUID uuid) { diff --git a/src/me/goodandevil/skyblock/leaderboard/Leaderboard.java b/src/me/goodandevil/skyblock/leaderboard/Leaderboard.java index 48fdf91d..8e10333e 100644 --- a/src/me/goodandevil/skyblock/leaderboard/Leaderboard.java +++ b/src/me/goodandevil/skyblock/leaderboard/Leaderboard.java @@ -1,47 +1,35 @@ package me.goodandevil.skyblock.leaderboard; -import java.util.ArrayList; -import java.util.List; +import me.goodandevil.skyblock.visit.Visit; public class Leaderboard { - private String playerName; + private Type type; + private final Visit visit; + private int position; - private int level; - private int points; - private int votes; + public Leaderboard(Type type, Visit visit, int position) { + this.type = type; + this.visit = visit; + this.position = position; + } - private List members; + public Type getType() { + return type; + } - public Leaderboard(String playerName, int level, int points, int votes, List members) { - this.playerName = playerName; - this.level = level; - this.points = points; - this.votes = votes; - this.members = members; + public Visit getVisit() { + return visit; + } + + public int getPosition() { + return position; + } + + public enum Type { + + Level, + Votes; - if (members == null) { - this.members = new ArrayList<>(); - } - } - - public String getPlayerName() { - return playerName; - } - - public int getLevel() { - return level; - } - - public int getPoints() { - return points; - } - - public int getVotes() { - return votes; - } - - public List getMembers() { - return members; } } diff --git a/src/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java b/src/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java index 3092c3ca..89c4192e 100644 --- a/src/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java +++ b/src/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java @@ -1,10 +1,71 @@ package me.goodandevil.skyblock.leaderboard; -public class LeaderboardManager { +import java.io.File; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import me.goodandevil.skyblock.Main; +import me.goodandevil.skyblock.visit.Visit; +import me.goodandevil.skyblock.visit.VisitManager; + +public class LeaderboardManager { + private final Main plugin; - public LeaderboardManager() { + private List leaderboardStorage = new ArrayList<>(); + + public LeaderboardManager(Main plugin) { + this.plugin = plugin; + new LeaderboardTask(plugin).runTaskTimerAsynchronously(plugin, 0L, plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration().getInt("Island.Leaderboard.Reset.Time") * 20); + + resetLeaderboard(); + } + + public void resetLeaderboard() { + VisitManager visitManager = plugin.getVisitManager(); + + Map islandLevels = new LinkedHashMap<>(); + Map islandVotes = new LinkedHashMap<>(); + + for (int i = 0; i < visitManager.getIslands().size(); i++) { + UUID ownerUUID = (UUID) visitManager.getIslands().keySet().toArray()[i]; + Visit visit = visitManager.getIslands().get(ownerUUID); + islandLevels.put(ownerUUID, visit.getLevel()); + islandVotes.put(ownerUUID, visit.getVoters().size()); + } + + for (int i = 0; i < 10; i++) { + if (islandLevels.size() != 0 && i <= islandLevels.size()-1) { + leaderboardStorage.add(new Leaderboard(Leaderboard.Type.Level, visitManager.getIsland((UUID) islandLevels.keySet().toArray()[i]), i)); + } + + if (islandVotes.size() != 0 && i <= islandVotes.size()-1) { + leaderboardStorage.add(new Leaderboard(Leaderboard.Type.Votes, visitManager.getIsland((UUID) islandLevels.keySet().toArray()[i]), i)); + } + } + } + + public void clearLeaderboard() { + leaderboardStorage.clear(); + } + + public List getLeaderboard(Leaderboard.Type type) { + List leaderboardIslands = new ArrayList<>(); + + for (Leaderboard leaderboardList : leaderboardStorage) { + if (leaderboardList.getType() == type) { + leaderboardIslands.add(leaderboardList); + } + } + + return leaderboardIslands; + } + + public List getLeaderboards() { + return leaderboardStorage; } } diff --git a/src/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java b/src/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java new file mode 100644 index 00000000..c22dd72a --- /dev/null +++ b/src/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java @@ -0,0 +1,21 @@ +package me.goodandevil.skyblock.leaderboard; + +import org.bukkit.scheduler.BukkitRunnable; + +import me.goodandevil.skyblock.Main; + +public class LeaderboardTask extends BukkitRunnable { + + private final Main plugin; + + public LeaderboardTask(Main plugin) { + this.plugin = plugin; + } + + @Override + public void run() { + LeaderboardManager leaderboardManager = plugin.getLeaderboardManager(); + leaderboardManager.clearLeaderboard(); + leaderboardManager.resetLeaderboard(); + } +} diff --git a/src/me/goodandevil/skyblock/listeners/Interact.java b/src/me/goodandevil/skyblock/listeners/Interact.java index db6d292f..9bd501f6 100644 --- a/src/me/goodandevil/skyblock/listeners/Interact.java +++ b/src/me/goodandevil/skyblock/listeners/Interact.java @@ -178,6 +178,15 @@ public class Interact implements Listener { return; } + } else if (event.getClickedBlock().getType() == Material.DRAGON_EGG) { + if (!islandManager.hasPermission(player, "DragonEggUse")) { + event.setCancelled(true); + + player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "language.yml")).getFileConfiguration().getString("Island.Settings.Permission.Message"))); + soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + + return; + } } else if (event.getClickedBlock().getType() == Material.HOPPER) { if (!islandManager.hasPermission(player, "Hopper")) { event.setCancelled(true); diff --git a/src/me/goodandevil/skyblock/menus/ControlPanel.java b/src/me/goodandevil/skyblock/menus/ControlPanel.java index 85eaef42..adcdb448 100644 --- a/src/me/goodandevil/skyblock/menus/ControlPanel.java +++ b/src/me/goodandevil/skyblock/menus/ControlPanel.java @@ -14,7 +14,6 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import me.goodandevil.skyblock.Main; -import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.config.FileManager.Config; import me.goodandevil.skyblock.utils.item.InventoryUtil; import me.goodandevil.skyblock.utils.version.Materials; @@ -35,10 +34,8 @@ public class ControlPanel implements Listener { public void open(Player player) { Main plugin = Main.getInstance(); - FileManager fileManager = plugin.getFileManager(); - - Config languageConfig = fileManager.getConfig(new File(plugin.getDataFolder(), "language.yml")); - FileConfiguration configLoad = languageConfig.getFileConfiguration(); + Config config = plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "language.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); InventoryUtil inv = new InventoryUtil(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.ControlPanel.Title")), null, 1); inv.addItem(inv.createItem(Materials.OAK_DOOR.parseItem(), configLoad.getString("Menu.ControlPanel.Item.Teleport.Displayname"), configLoad.getStringList("Menu.ControlPanel.Item.Teleport.Lore"), null, null, null), 0); diff --git a/src/me/goodandevil/skyblock/menus/Leaderboard.java b/src/me/goodandevil/skyblock/menus/Leaderboard.java new file mode 100644 index 00000000..5dc4c7dc --- /dev/null +++ b/src/me/goodandevil/skyblock/menus/Leaderboard.java @@ -0,0 +1,219 @@ +package me.goodandevil.skyblock.menus; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +import me.goodandevil.skyblock.Main; +import me.goodandevil.skyblock.config.FileManager; +import me.goodandevil.skyblock.config.FileManager.Config; +import me.goodandevil.skyblock.playerdata.PlayerDataManager; +import me.goodandevil.skyblock.sound.SoundManager; +import me.goodandevil.skyblock.utils.OfflinePlayer; +import me.goodandevil.skyblock.utils.item.InventoryUtil; +import me.goodandevil.skyblock.utils.item.SkullUtil; +import me.goodandevil.skyblock.utils.version.Materials; +import me.goodandevil.skyblock.utils.version.Sounds; + +public class Leaderboard implements Listener { + + private static Leaderboard instance; + + public static Leaderboard getInstance(){ + if(instance == null) { + instance = new Leaderboard(); + } + + return instance; + } + + public void open(Player player) { + Main plugin = Main.getInstance(); + + PlayerDataManager playerDataManager = plugin.getPlayerDataManager(); + FileManager fileManager = plugin.getFileManager(); + + Config config = fileManager.getConfig(new File(plugin.getDataFolder(), "language.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + Viewer viewer = (Viewer) playerDataManager.getPlayerData(player).getViewer(); + + InventoryUtil inv; + + if (viewer.getType() == Viewer.Type.Browse) { + inv = new InventoryUtil(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Title")), InventoryType.HOPPER, 1); + inv.addItem(inv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Exit.Displayname"), null, null, null, null), 0, 4); + inv.addItem(inv.createItem(new ItemStack(Material.DIAMOND), configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname").replace("%leaderboard", Viewer.Type.Level.name()), configLoad.getStringList("Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"), inv.createItemLoreVariable(new String[] { "%leaderboard#" + Viewer.Type.Level.name() }), null, null), 1); + inv.addItem(inv.createItem(new ItemStack(Material.EMERALD), configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname").replace("%leaderboard", Viewer.Type.Votes.name()), configLoad.getStringList("Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"), inv.createItemLoreVariable(new String[] { "%leaderboard#" + Viewer.Type.Votes.name() }), null, null), 3); + } else { + inv = new InventoryUtil(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard.Leaderboard.Title").replace("%leaderboard", viewer.getType().name())), null, 6); + + if (fileManager.getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Vote")) { + inv.addItem(inv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Return.Displayname"), null, null, null, null), 0, 8); + } else { + inv.addItem(inv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Exit.Displayname"), null, null, null, null), 0, 8); + } + + List leaderboardIslands = plugin.getLeaderboardManager().getLeaderboard(me.goodandevil.skyblock.leaderboard.Leaderboard.Type.valueOf(viewer.getType().name())); + + for (int i = 0; i < leaderboardIslands.size(); i++) { + me.goodandevil.skyblock.leaderboard.Leaderboard leaderboard = leaderboardIslands.get(i); + me.goodandevil.skyblock.visit.Visit visit = leaderboard.getVisit(); + + int itemSlot = 0; + + String playerName; + String[] playerTexture; + + Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID()); + + if (targetPlayer == null) { + OfflinePlayer offlinePlayer = new OfflinePlayer(visit.getOwnerUUID()); + playerName = offlinePlayer.getName(); + playerTexture = offlinePlayer.getTexture(); + } else { + playerName = targetPlayer.getName(); + playerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture(); + } + + if (leaderboard.getPosition() == 0) { + itemSlot = 13; + } else if (leaderboard.getPosition() == 1) { + itemSlot = 21; + } else if (leaderboard.getPosition() == 2) { + itemSlot = 22; + } else if (leaderboard.getPosition() == 3) { + itemSlot = 23; + } else if (leaderboard.getPosition() == 4) { + itemSlot = 29; + } else if (leaderboard.getPosition() == 5) { + itemSlot = 31; + } else if (leaderboard.getPosition() == 6) { + itemSlot = 33; + } else if (leaderboard.getPosition() == 7) { + itemSlot = 37; + } else if (leaderboard.getPosition() == 8) { + itemSlot = 40; + } else if (leaderboard.getPosition() == 9) { + itemSlot = 43; + } + + List itemLore = new ArrayList<>(); + + for (String itemLoreList : configLoad.getStringList("Menu.Leaderboard.Leaderboard.Item.Island." + viewer.getType().name() + ".Lore")) { + if (itemLoreList.contains("%signature")) { + if (visit.getSiganture() == null || visit.getSiganture().size() == 0) { + itemLore.add(configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Word.Empty")); + } else { + for (String signatureList : visit.getSiganture()) { + itemLore.add(signatureList); + } + } + } else { + itemLore.add(itemLoreList); + } + } + + inv.addItem(inv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Displayname").replace("%position", "" + (leaderboard.getPosition() + 1)), itemLore, inv.createItemLoreVariable(new String[] { "%position#" + (leaderboard.getPosition() + 1), "%owner#" + playerName, "%level#" + visit.getLevel(), "%votes#" + visit.getVoters().size(), "%members#" + visit.getMembers() }), null, null), itemSlot); + } + + int[] itemSlots = new int[] { 13, 21, 22, 23, 29, 31, 33, 37, 40, 43 }; + + for (int i = 0; i < itemSlots.length; i++) { + if (inv.getInventory().getItem(itemSlots[i]) == null) { + inv.addItem(inv.createItem(SkullUtil.create("gi+wnQt/y4Z6E9rn65iDWmt8vUOM2WXY66XvtydqDJZTzwgFrjVcx2c5YwdzvtOIRtiX2nZt4n2uWesUFKb59xS24YWbxCDXnalHhCpPFcIP58SQbCm9AYp3UPzkcRNWzuV4BddrS608QQZGyIFOUaLPOPasGITZu51VLcOKcTyFOCKu1QE2yRo1orTH8bWfdpE769BB/VYGdny0qJtm1amc12wGiVifMJRutZmYo2ZdA0APhIJVaNsPppNESVcbeBCvk60l4QK43C/p98/QEe5U6UJ6Z6N01pBQcswubMu8lCuPLasep+vX3v2K+Ui9jnTQNreGNIZPWVjf6V1GH4xMbbUVQJsoPdcaXG855VdzyoW+kyHdWYEojSn0qAY/moH6JCLnx6PLCv9mITSvOIUHq8ITet0M7Z9KALY5s6eg6VdA8TvClRy2TTm9tIRt//TJo5JxBoTYujawGNSR7ryODj2UEDQ2xOyWSagxAXZpispdrO5jHxRmBZUwX9vxnAp+CNWxifpu9sINJTlqYsT/KlGOJQC483gv5B6Nm5VBB1DRFmQkohzO6Wc2eDixgEbaU795GlLxrNaFfNjVH6Bwr1e7df2H3nE0P0bexs4wYdWplijn4gPyHwjT2LDBPGFQK3Vo2SlaXfPYbkIHX21c9qaz3eWHpLEXUBQfnWc=", "eyJ0aW1lc3RhbXAiOjE1MzE3MTcxNjY3MDAsInByb2ZpbGVJZCI6IjYwNmUyZmYwZWQ3NzQ4NDI5ZDZjZTFkMzMyMWM3ODM4IiwicHJvZmlsZU5hbWUiOiJNSEZfUXVlc3Rpb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2QzNGUwNjNjYWZiNDY3YTVjOGRlNDNlYzc4NjE5Mzk5ZjM2OWY0YTUyNDM0ZGE4MDE3YTk4M2NkZDkyNTE2YTAifX19"), configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Empty.Displayname").replace("%position", "" + (i + 1)), configLoad.getStringList("Menu.Leaderboard.Leaderboard.Item.Empty.Lore"), inv.createItemLoreVariable(new String[] { "%position#" + (i + 1) }), null, null), itemSlots[i]); + } + } + } + + player.openInventory(inv.getInventory()); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + ItemStack is = event.getCurrentItem(); + + if (event.getCurrentItem() != null && event.getCurrentItem().getType() != Material.AIR) { + Main plugin = Main.getInstance(); + + PlayerDataManager playerDataManager = plugin.getPlayerDataManager(); + SoundManager soundManager = plugin.getSoundManager(); + FileManager fileManager = plugin.getFileManager(); + + Config config = fileManager.getConfig(new File(plugin.getDataFolder(), "language.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + if (event.getInventory().getName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard." + Viewer.Type.Browse.name() + ".Title")))) { + event.setCancelled(true); + + if ((event.getCurrentItem().getType() == Materials.OAK_FENCE_GATE.parseMaterial()) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard." + Viewer.Type.Browse.name() + ".Item.Exit.Displayname"))))) { + soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F); + player.closeInventory(); + } else if ((event.getCurrentItem().getType() == Material.DIAMOND) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard." + Viewer.Type.Browse.name() + ".Item.Leaderboard.Displayname").replace("%leaderboard", Viewer.Type.Level.name()))))) { + playerDataManager.getPlayerData(player).setViewer(new Viewer(Viewer.Type.Level)); + open(player); + soundManager.playSound(player, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F); + } else if ((event.getCurrentItem().getType() == Material.EMERALD) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard." + Viewer.Type.Browse.name() + ".Item.Leaderboard.Displayname").replace("%leaderboard", Viewer.Type.Votes.name()))))) { + playerDataManager.getPlayerData(player).setViewer(new Viewer(Viewer.Type.Votes)); + open(player); + soundManager.playSound(player, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F); + } + } else if (event.getInventory().getName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard.Leaderboard.Title").replace("%leaderboard", Viewer.Type.Level.name()))) || event.getInventory().getName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard.Leaderboard.Title").replace("%leaderboard", Viewer.Type.Votes.name())))) { + event.setCancelled(true); + + if ((event.getCurrentItem().getType() == Materials.OAK_FENCE_GATE.parseMaterial()) && (is.hasItemMeta())) { + if (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Exit.Displayname")))) { + soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F); + player.closeInventory(); + } else if (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Return.Displayname")))) { + if (plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Vote")) { + playerDataManager.getPlayerData(player).setViewer(new Viewer(Viewer.Type.Browse)); + open(player); + soundManager.playSound(player, Sounds.ARROW_HIT.bukkitSound(), 1.0F, 1.0F); + } else { + soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F); + player.closeInventory(); + } + + return; + } + } + + soundManager.playSound(player, Sounds.CHICKEN_EGG_POP.bukkitSound(), 1.0F, 1.0F); + } + } + } + + public static class Viewer { + + private Type type; + + public Viewer(Type type) { + this.type = type; + } + + public Type getType() { + return type; + } + + public enum Type { + + Browse, + Level, + Votes; + + } + } +} diff --git a/src/me/goodandevil/skyblock/menus/Settings.java b/src/me/goodandevil/skyblock/menus/Settings.java index fcbacf19..b8bd7436 100644 --- a/src/me/goodandevil/skyblock/menus/Settings.java +++ b/src/me/goodandevil/skyblock/menus/Settings.java @@ -129,6 +129,7 @@ public class Settings implements Listener { inv.addItemStack(createItem(island, role, "DropperDispenser", Material.DISPENSER), 46); inv.addItemStack(createItem(island, role, "SpawnEgg", Material.EGG), 47); inv.addItemStack(createItem(island, role, "Cake", Material.CAKE), 48); + inv.addItemStack(createItem(island, role, "DragonEggUse", Material.DRAGON_EGG), 49); inv.addItemStack(createItem(island, role, "MinecartBoat", Material.MINECART), 50); inv.addItemStack(createItem(island, role, "Portal", Material.ENDER_PEARL), 51); inv.addItemStack(createItem(island, role, "Hopper", Material.HOPPER), 52); diff --git a/src/me/goodandevil/skyblock/menus/Visit.java b/src/me/goodandevil/skyblock/menus/Visit.java index 108a8a73..691282e9 100644 --- a/src/me/goodandevil/skyblock/menus/Visit.java +++ b/src/me/goodandevil/skyblock/menus/Visit.java @@ -337,13 +337,31 @@ public class Visit implements Listener { List islandVotes = visit.getVoters(); if (islandVotes.contains(player.getUniqueId())) { - visit.removeVoter(player.getUniqueId()); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Island.Visit.Vote.Removed.Message").replace("%player", targetPlayerName))); - soundManager.playSound(player, Sounds.EXPLODE.bukkitSound(), 1.0F, 1.0F); + for (Location.World worldList : Location.World.values()) { + if (LocationUtil.isLocationAtLocationRadius(player.getLocation(), island.getLocation(worldList, Location.Environment.Island), island.getRadius())) { + visit.removeVoter(player.getUniqueId()); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Island.Visit.Vote.Removed.Message").replace("%player", targetPlayerName))); + soundManager.playSound(player, Sounds.EXPLODE.bukkitSound(), 1.0F, 1.0F); + + return; + } + } + + player.sendMessage(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Island.Visit.Vote.Location.Remove.Message"))); + soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); } else { - visit.addVoter(player.getUniqueId()); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Island.Visit.Vote.Added.Message").replace("%player", targetPlayerName))); - soundManager.playSound(player, Sounds.LEVEL_UP.bukkitSound(), 1.0F, 1.0F); + for (Location.World worldList : Location.World.values()) { + if (LocationUtil.isLocationAtLocationRadius(player.getLocation(), island.getLocation(worldList, Location.Environment.Island), island.getRadius())) { + visit.addVoter(player.getUniqueId()); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Island.Visit.Vote.Added.Message").replace("%player", targetPlayerName))); + soundManager.playSound(player, Sounds.LEVEL_UP.bukkitSound(), 1.0F, 1.0F); + + return; + } + } + + player.sendMessage(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Island.Visit.Vote.Location.Add.Message"))); + soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); } open(player, (Visit.Type) playerData.getType(), (Visit.Sort) playerData.getSort()); diff --git a/src/me/goodandevil/skyblock/utils/item/SkullUtil.java b/src/me/goodandevil/skyblock/utils/item/SkullUtil.java index cb031354..290194c3 100644 --- a/src/me/goodandevil/skyblock/utils/item/SkullUtil.java +++ b/src/me/goodandevil/skyblock/utils/item/SkullUtil.java @@ -11,6 +11,7 @@ import org.bukkit.inventory.meta.SkullMeta; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; +import me.goodandevil.skyblock.utils.version.Materials; import me.goodandevil.skyblock.utils.version.NMSUtil; public final class SkullUtil { @@ -67,7 +68,7 @@ public final class SkullUtil { if (NMSUtil.getVersionNumber() > 12) { is = new ItemStack(Material.valueOf("PLAYER_HEAD")); } else { - is = new ItemStack(Material.valueOf("SKULL_ITEM"), 3); + is = Materials.LEGACY_SKULL_ITEM.getPostItem(); } return is; diff --git a/src/me/goodandevil/skyblock/world/WorldManager.java b/src/me/goodandevil/skyblock/world/WorldManager.java index 0ce2f2a8..d13b867a 100644 --- a/src/me/goodandevil/skyblock/world/WorldManager.java +++ b/src/me/goodandevil/skyblock/world/WorldManager.java @@ -39,13 +39,25 @@ public class WorldManager { if (normalWorld == null) { Bukkit.getServer().getConsoleSender().sendMessage("SkyBlock | Info: Generating VoidWorld '" + normalWorldName + "'."); normalWorld = WorldCreator.name(normalWorldName).type(WorldType.FLAT).environment(World.Environment.NORMAL).generator(new VoidGenerator()).createWorld(); - registerMultiverse(normalWorldName, World.Environment.NORMAL); + + Bukkit.getServer().getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + registerMultiverse(normalWorldName, World.Environment.NORMAL); + } + }); } if (netherWorld == null) { Bukkit.getServer().getConsoleSender().sendMessage("SkyBlock | Info: Generating VoidWorld '" + netherWorldName + "'."); netherWorld = WorldCreator.name(netherWorldName).type(WorldType.FLAT).environment(World.Environment.NETHER).generator(new VoidGenerator()).createWorld(); - registerMultiverse(netherWorldName, World.Environment.NETHER); + + Bukkit.getServer().getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + registerMultiverse(netherWorldName, World.Environment.NETHER); + } + }); } } diff --git a/structures.yml b/structures.yml new file mode 100644 index 00000000..5c641190 --- /dev/null +++ b/structures.yml @@ -0,0 +1,11 @@ +Structures: + Default: + File: "default.structure" + Name: "Default" + Displayname: "&a&lDefault" + Description: + - "&f&oDefault Island as an" + - "&f&oexample." + Permission: false + Item: + Material: GRASS_BLOCK \ No newline at end of file