From 0f776931815845c609ea50ff3a6c3806105c6f04 Mon Sep 17 00:00:00 2001
From: iambibi_ <89582596+iambibi@users.noreply.github.com>
Date: Thu, 9 Jul 2026 15:55:22 +0200
Subject: [PATCH 01/10] feat: english translations (made IA)
---
.../translations/en_GB/adminshop.properties | 41 +
.../translations/en_GB/api.properties | 46 +-
.../translations/en_GB/city.properties | 1390 +++++++++++++++++
.../translations/en_GB/commands.properties | 68 +-
.../translations/en_GB/contest.properties | 128 ++
.../translations/en_GB/core.properties | 42 +
.../translations/en_GB/credits.properties | 46 +
.../translations/en_GB/cube.properties | 14 +
.../translations/en_GB/dailyevents.properties | 102 ++
.../translations/en_GB/displays.properties | 35 +
.../translations/en_GB/dream.properties | 386 +++++
.../translations/en_GB/economy.properties | 83 +
.../translations/en_GB/events.properties | 53 +
.../translations/en_GB/friend.properties | 46 +
.../translations/en_GB/homes.properties | 97 ++
.../translations/en_GB/itemsadder.properties | 5 +
.../en_GB/leaderboards.properties | 28 +
.../translations/en_GB/mailboxes.properties | 52 +
.../translations/en_GB/main.properties | 37 +
.../translations/en_GB/mainmenu.properties | 52 +
.../translations/en_GB/milestones.properties | 96 ++
.../en_GB/privatemessage.properties | 17 +
.../translations/en_GB/quests.properties | 72 +
.../translations/en_GB/settings.properties | 55 +
.../translations/en_GB/tickets.properties | 33 +
.../translations/en_GB/tpa.properties | 36 +
.../translations/en_GB/updates.properties | 6 +
.../translations/en_GB/utils.properties | 3 +
.../translations/en_US/adminshop.properties | 41 +
.../translations/en_US/api.properties | 46 +-
.../translations/en_US/city.properties | 1390 +++++++++++++++++
.../translations/en_US/commands.properties | 68 +-
.../translations/en_US/contest.properties | 128 ++
.../translations/en_US/core.properties | 42 +
.../translations/en_US/credits.properties | 46 +
.../translations/en_US/cube.properties | 14 +
.../translations/en_US/dailyevents.properties | 102 ++
.../translations/en_US/displays.properties | 35 +
.../translations/en_US/dream.properties | 386 +++++
.../translations/en_US/economy.properties | 83 +
.../translations/en_US/events.properties | 53 +
.../translations/en_US/friend.properties | 46 +
.../translations/en_US/homes.properties | 97 ++
.../translations/en_US/itemsadder.properties | 5 +
.../en_US/leaderboards.properties | 28 +
.../translations/en_US/mailboxes.properties | 52 +
.../translations/en_US/main.properties | 37 +
.../translations/en_US/mainmenu.properties | 52 +
.../translations/en_US/milestones.properties | 96 ++
.../en_US/privatemessage.properties | 17 +
.../translations/en_US/quests.properties | 72 +
.../translations/en_US/settings.properties | 55 +
.../translations/en_US/tickets.properties | 33 +
.../translations/en_US/tpa.properties | 36 +
.../translations/en_US/updates.properties | 6 +
.../translations/en_US/utils.properties | 3 +
56 files changed, 6134 insertions(+), 4 deletions(-)
create mode 100644 src/main/resources/translations/en_GB/adminshop.properties
create mode 100644 src/main/resources/translations/en_GB/city.properties
create mode 100644 src/main/resources/translations/en_GB/contest.properties
create mode 100644 src/main/resources/translations/en_GB/core.properties
create mode 100644 src/main/resources/translations/en_GB/credits.properties
create mode 100644 src/main/resources/translations/en_GB/cube.properties
create mode 100644 src/main/resources/translations/en_GB/dailyevents.properties
create mode 100644 src/main/resources/translations/en_GB/displays.properties
create mode 100644 src/main/resources/translations/en_GB/dream.properties
create mode 100644 src/main/resources/translations/en_GB/economy.properties
create mode 100644 src/main/resources/translations/en_GB/events.properties
create mode 100644 src/main/resources/translations/en_GB/friend.properties
create mode 100644 src/main/resources/translations/en_GB/homes.properties
create mode 100644 src/main/resources/translations/en_GB/itemsadder.properties
create mode 100644 src/main/resources/translations/en_GB/leaderboards.properties
create mode 100644 src/main/resources/translations/en_GB/mailboxes.properties
create mode 100644 src/main/resources/translations/en_GB/main.properties
create mode 100644 src/main/resources/translations/en_GB/mainmenu.properties
create mode 100644 src/main/resources/translations/en_GB/milestones.properties
create mode 100644 src/main/resources/translations/en_GB/privatemessage.properties
create mode 100644 src/main/resources/translations/en_GB/quests.properties
create mode 100644 src/main/resources/translations/en_GB/settings.properties
create mode 100644 src/main/resources/translations/en_GB/tickets.properties
create mode 100644 src/main/resources/translations/en_GB/tpa.properties
create mode 100644 src/main/resources/translations/en_GB/updates.properties
create mode 100644 src/main/resources/translations/en_GB/utils.properties
create mode 100644 src/main/resources/translations/en_US/adminshop.properties
create mode 100644 src/main/resources/translations/en_US/city.properties
create mode 100644 src/main/resources/translations/en_US/contest.properties
create mode 100644 src/main/resources/translations/en_US/core.properties
create mode 100644 src/main/resources/translations/en_US/credits.properties
create mode 100644 src/main/resources/translations/en_US/cube.properties
create mode 100644 src/main/resources/translations/en_US/dailyevents.properties
create mode 100644 src/main/resources/translations/en_US/displays.properties
create mode 100644 src/main/resources/translations/en_US/dream.properties
create mode 100644 src/main/resources/translations/en_US/economy.properties
create mode 100644 src/main/resources/translations/en_US/events.properties
create mode 100644 src/main/resources/translations/en_US/friend.properties
create mode 100644 src/main/resources/translations/en_US/homes.properties
create mode 100644 src/main/resources/translations/en_US/itemsadder.properties
create mode 100644 src/main/resources/translations/en_US/leaderboards.properties
create mode 100644 src/main/resources/translations/en_US/mailboxes.properties
create mode 100644 src/main/resources/translations/en_US/main.properties
create mode 100644 src/main/resources/translations/en_US/mainmenu.properties
create mode 100644 src/main/resources/translations/en_US/milestones.properties
create mode 100644 src/main/resources/translations/en_US/privatemessage.properties
create mode 100644 src/main/resources/translations/en_US/quests.properties
create mode 100644 src/main/resources/translations/en_US/settings.properties
create mode 100644 src/main/resources/translations/en_US/tickets.properties
create mode 100644 src/main/resources/translations/en_US/tpa.properties
create mode 100644 src/main/resources/translations/en_US/updates.properties
create mode 100644 src/main/resources/translations/en_US/utils.properties
diff --git a/src/main/resources/translations/en_GB/adminshop.properties b/src/main/resources/translations/en_GB/adminshop.properties
new file mode 100644
index 000000000..867cf25fe
--- /dev/null
+++ b/src/main/resources/translations/en_GB/adminshop.properties
@@ -0,0 +1,41 @@
+# ** ADMINSHOP **
+feature.adminshop.menu.category.name=Menu of an adminshop category
+feature.adminshop.right_click_choice=■Left click to choose the item
+feature.adminshop.lore_item.buy=Buy : %1$s
+feature.adminshop.lore_item.sell=Sell : %1$s
+feature.adminshop.right_click_buy=■Left click to buy
+feature.adminshop.left_click_sell=■Right click to sell
+
+feature.adminshop.menu.main.name=AdminShop Main Menu
+
+feature.adminshop.menu.color_variants.name=Color variants menu for %1$s
+
+feature.adminshop.menu.confirm.name=AdminShop Confirmation Menu
+feature.adminshop.menu.confirm.lore=■Quantity :%1$s(%2$s stack%3$s)\
+ ■Unit price:%4$s%5$s \
+ ■Total price:%6$s%7$s \
+ \
+ ■Click the wheel to define the quantity manually
+feature.adminshop.menu.confirm.input=Please enter the desired quantity:
+feature.adminshop.menu.confirm.quantity=%1$s %2$s
+feature.adminshop.menu.confirm.add=Add
+feature.adminshop.menu.confirm.remove=Withdraw
+
+feature.adminshop.menu.leaves_variants.name=Leaf Variants Menu
+feature.adminshop.menu.leaves_variants.leaves=Leaves
+
+feature.adminshop.menu.log_variants.name=Menu of log variations
+feature.adminshop.menu.log_variants.log=Logs
+
+feature.adminshop.have_enough_item=You do not have this item in your inventory!
+feature.adminshop.have_enough_money=You don't have enough money!
+feature.adminshop.inventory_full=Your inventory is full!
+feature.adminshop.item_not_sellable=This product is not for sale!
+feature.adminshop.item_not_buyable=This product is not purchasable!
+feature.adminshop.player_not_enough_item=You don't have enough of this item in your inventory!
+feature.adminshop.item_not_found=This product does not exist!
+feature.adminshop.isnt_in_category=Please open a store category first!
+
+feature.adminshop.player_buy_item=You bought %1$s %2$s For %3$s
+feature.adminshop.player_sell_item=You sold %1$s %2$s For %3$s
+
diff --git a/src/main/resources/translations/en_GB/api.properties b/src/main/resources/translations/en_GB/api.properties
index a64b637e4..faae7390a 100644
--- a/src/main/resources/translations/en_GB/api.properties
+++ b/src/main/resources/translations/en_GB/api.properties
@@ -1,2 +1,46 @@
-api.dialoginput.type_string=input english du texte
+# ** API **
+api.chronometer.chronometer_not_found=No timers found for the group %1$s
+api.chronometer.chronometer_on=Active stopwatches:
+api.chronometer.chronometer_on_list= - %1$s: %2$ss
+api.chronometer.none_chronometer_player=This player has no active timer.
+
+# | Le temps restant en secondes
+# | Le temps restant en millisecondes
+api.cooldown.must_wait=You have to wait %s
+
+api.iteminteraction.not_egnough_space=You don't have enough space in your inventory! The action was canceled
+api.iteminteraction.have_already_item=You already have this item in your inventory! The action was canceled
+api.iteminteraction.cant_move_item=You cannot move this object here
+api.iteminteraction.cant_move_item_by_shiftclick=You cannot move this object by shift-click
+api.iteminteraction.cant_throw_item=You cannot throw this item away
+
+api.chatinput.cancel=You canceled the action
+
+api.dialoginput.type_string=Enter text
+api.dialoginput.type_string.here=Enter text here
+
+api.dialoginput.type_float=Enter a number
+api.dialoginput.type_float.here=Enter a number here
+
+api.dialoginput.button.save=Save
+api.dialoginput.button.confirm=Confirm
+api.dialoginput.button.cancel=Cancel
+api.dialoginput.button.back=Back
+api.dialoginput.button.next=Next
+api.dialoginput.button.previous=Previous
+api.dialoginput.button.finish=Finish
+api.dialoginput.button.ignore=Ignore
+
+api.menulib.an_error_occurred=An error has occurred, please contact the Staff
+api.menulib.no_permission=You do not have permission to open this menu.
+
+api.menulib.menu.back.title=Back
+api.menulib.menu.back=Previous Menu
+api.menulib.menu.back.lore=You will return to %1$s.\
+ CLICK HERE TO CONFIRM
+api.menulib.menu.confirm.title=Confirmation Menu
+api.menulib.menu.confirm.accept.title=Accept
+api.menulib.menu.confirm.accept.lore=CLICK HERE TO VALIDATE
+api.menulib.menu.confirm.deny.title=Refuse
+api.menulib.menu.confirm.deny.lore=CLICK HERE TO REFUSE
diff --git a/src/main/resources/translations/en_GB/city.properties b/src/main/resources/translations/en_GB/city.properties
new file mode 100644
index 000000000..67629df8b
--- /dev/null
+++ b/src/main/resources/translations/en_GB/city.properties
@@ -0,0 +1,1390 @@
+# ** CITY **
+# * COMMANDS
+# - Global / Shared
+messages.city.player_no_in_city=You're not in a city.
+messages.city.player_already_in_city=You are already in a city.
+messages.city.target_in_other_city=This player is not in your city.
+messages.city.target_no_city=This player is not in a city.
+messages.city.player_no_permission_access=You do not have permission to access the permissions of this city.
+messages.city.not_found=This city does not exist.
+messages.city.havent_unlocked_feature=You have not unlocked this feature! Please upgrade your city to the level %1$s!
+messages.city.city_not_enough_money=Your city doesn't have enough money (%1$s necessary)
+
+# - Player Commands
+feature.city.commands.menu.must_place_mascot=You cannot open the cities menu without having placed the mascot
+feature.city.commands.create.enter_city_name=Enter the city name
+feature.city.commands.rename.invalid_name=The city name is invalid, it must contain only alphanumeric characters and maximum %1$s characters.
+feature.city.commands.rename.success=The city was renamed to %1$s
+feature.city.commands.list.empty=No city exists
+feature.city.commands.top.empty=No cities are created at the moment
+
+# - Admin Commands
+feature.city.admin.commands.delete.success=The city was deleted
+feature.city.admin.commands.list.header=—— Cities (page %1$s / %2$s) ——
+feature.city.admin.commands.list.copy_label= [copy]
+feature.city.admin.commands.list.copy_uuid_hover=Click to copy the UUID
+feature.city.admin.commands.list.nav.prev=« Previous
+feature.city.admin.commands.list.nav.next=Next »
+feature.city.admin.commands.info.not_found=This city does not exist
+feature.city.admin.commands.rename.name_already_used=A city already has the name you want to put
+feature.city.admin.commands.rename.success=The city was renamed
+feature.city.admin.commands.balance.set_success=City balance has been changed
+feature.city.admin.commands.balance.get_success=The city's balance is %1$s
+feature.city.admin.commands.add_player.already_in_city=This player is already in a city
+feature.city.admin.commands.add_player.success=The player has been added
+feature.city.admin.commands.remove_player.not_in_city=This player is not in a city
+feature.city.admin.commands.remove_player.is_owner=This player is the owner of the city
+feature.city.admin.commands.remove_player.success=The player has been removed
+feature.city.admin.commands.getcity.not_in_city=The player is not in a city
+feature.city.admin.commands.getcity.success=The player is in the city %1$s (%2$s)
+feature.city.admin.commands.claim_bypass.disabled=You have disabled claims bypass
+feature.city.admin.commands.claim_bypass.enabled=You have activated claims bypass
+
+# - Invite Commands
+feature.city.invite.commands.invite.success=You invited %1$s in your city
+feature.city.invite.commands.invite.received=You have been invited by %1$s in the city %2$s
+feature.city.invite.commands.invite.accept=Do /city accept to accept
+feature.city.invite.commands.invite.deny=Do /city deny to refuse
+feature.city.invite.commands.invite.accept_hover=Accept the invitation
+feature.city.invite.commands.invite.deny_hover=Refuse the invitation
+feature.city.invite.commands.accept.none_pending=You have no pending invitations
+feature.city.invite.commands.accept.not_invited=%1$s didn't invite you
+feature.city.invite.commands.accept.joined=You joined %1$s
+feature.city.invite.commands.accept.inviter_notified=%1$s accepted your invitation!
+feature.city.invite.commands.deny.inviter_notified=%1$s refused your invitation
+
+# - Permissions Commands
+feature.city.perms.commands.switch.removed=%1$s lost permission "%2$s"
+feature.city.perms.commands.switch.added=%1$s received permission "%2$s"
+feature.city.perms.commands.add.already_has=%1$s already has this permission
+feature.city.perms.commands.remove.does_not_have=%1$s does not have this permission
+feature.city.perms.commands.modified=The permissions of %1$s have been modified
+
+# - City View Command
+feature.city.view.commands.no_city=No towns were found in the surrounding area.
+feature.city.view.commands.visiualizing=Viewing current city claims for 30 seconds
+
+# * ACTIONS
+# - Type Change
+feature.city.type.in_peace=in peace
+feature.city.type.in_war=at war
+feature.city.type.confirm_change=Are you sure you want to change the type of your city
+feature.city.type.change_type_to_type=You will go from one city %1$s to acity %2$s
+feature.city.type.warning_war=⚠ You may be exposed to wars against other cities at any time!
+feature.city.type.mascot_losing_level=⚠ Your mascot will lose 1 level!
+feature.city.type.not_change_type=Do not change thetype of city
+feature.city.type.mascot_not_exist_change_type=You do not have a mascot to change the type of your city (contact the staff)
+feature.city.type.mascot_must_by_alive_change_type=Your mascot must be alive to change the city type
+feature.city.type.must_wait_before_change_type=You have to wait %1$s before changing city type
+feature.city.type.change_type_success=You have changed the type of your city from %1$s has %2$s
+
+# - Chest
+feature.city.chest.upgraded=The trunk has been improved
+
+# - Claim
+feature.city.claim.cant_claim_here=You can't expand your city here
+feature.city.claim.isnt_adjacent=This chunk is not adjacent to your city
+feature.city.claim.is_in_region=This chunk is in a protected region
+feature.city.claim.already_claim=This chunk is already claimed by %1$s.
+feature.city.claim.claim_success=Your city has been expanded
+feature.city.claim.already_claim_in_adjacent=One of the plots around this chunk is claim
+
+# - Create
+feature.city.create.success=Your city has been created: %1$s
+feature.city.create.free_claim=+ %1$s free chunks
+
+# - Delete
+feature.city.delete.confirm.lore=Do you really want to dissolve the city? %1$s ?
+feature.city.delete.confirm.warning=This action is IRREVERSIBLE
+feature.city.delete.confirm.deny=Don't delete the city
+feature.city.delete.success=Your city has been deleted
+
+# - Kick
+feature.city.kick.success=You excluded %1$s of the city %2$s
+feature.city.kick.info=You were kicked out of town %1$s
+
+# - Leave
+feature.city.leave.success=You left %1$s
+feature.city.leave.info=%1$s left town %2$s
+
+# - Transfer
+feature.city.transfer.confirm.accept=Do you really want to give the city to %1$s ?
+feature.city.transfer.confirm.deny=You are not going to give the city to %1$s
+feature.city.transfer.success=The new owner is %1$s
+feature.city.transfer.info=You became the owner of the city
+
+# - Unclaim
+feature.city.unclaim.must_own_claim=You must own this claim for unclaim
+feature.city.unclaim.cant_unclaim_mascot_claim=You cannot unclaim the mascot's claim
+feature.city.unclaim.success=You have just shrunk your city by deleting this claim
+
+# * CONDITIONS
+# - Permissions / Access
+feature.city.player_cannot_claim=You don't have permission to expand your city.
+feature.city.player_cannot_kick=You do not have permission to exclude this member.
+feature.city.player_cannot_kick_himself=You can't exclude yourself.
+
+feature.city.player_isnt_owner=You are not the owner of the city
+feature.city.player_is_owner=The owner has all the powers.
+feature.city.only_owner_can_do_this=Only the city owner can do this.
+feature.city.cant_do_this=You do not have permission to do this!
+
+
+# - Manage
+feature.city.conditions.manage.rename.no_permission=You don't have permission to rename your city.
+feature.city.conditions.manage.transfer.self=You can't transfer the city to yourself
+feature.city.conditions.manage.transfer.already_owner=This player is already the owner of the city
+feature.city.conditions.manage.delete.must_wait=You have to wait before you can delete your city (%1$s seconds)
+feature.city.conditions.manage.delete.cant_in_war=You cannot delete your city during a war
+
+# - Claim / Unclaim
+feature.city.conditions.claim.no_permission=You don't have permission to claim
+feature.city.conditions.unclaim.no_permission=You do not have permission to unclaim
+feature.city.conditions.claim.not_enough_city_money=You don't have enough money in your bank to claim (%1$s necessary)
+
+# - Create
+feature.city.conditions.create.must_wait=You have to wait before you can create your city (%1$s seconds)
+feature.city.conditions.create.not_enough_player_money=You don't have enough money to create your city (%1$s necessary)
+
+# - Resources
+feature.city.conditions.resource.not_enough_aywenite=You don't have enough Aywenite (%1$s necessary)
+
+# - Chest
+feature.city.conditions.chest.open.no_permission=You do not have permissions to view the vault
+feature.city.conditions.chest.open.already_opened_by=The trunk is already opened by %1$s
+feature.city.conditions.chest.upgrade.no_permission=You do not have permissions to upgrade the city chest
+feature.city.conditions.chest.upgrade.max_level=The city chest is already at the maximum level (%1$s maximum page(s). To improve this limit, upgrade to a higher city level
+
+# - Invite
+feature.city.conditions.invite.no_permission=You don't have permission to invite players into the city
+feature.city.conditions.invite.target_already_in_city=This person is already in a city
+feature.city.conditions.invite.target_cant_receive=This person cannot receive an invitation
+feature.city.conditions.invite.member_limit_reached=You have reached the member limit which is %1$s. Upgrade your city to the next level!
+feature.city.conditions.invite.expired=The invitation has expired
+feature.city.conditions.invite.city_member_limit_reached=The city has reached its membership limit
+
+# - Type
+feature.city.conditions.type.no_permission=You do not have permission to change the status of your city
+feature.city.conditions.type.already_in_type=You are already in %1$s
+feature.city.conditions.type.must_wait=You have to wait %1$s to change city type
+feature.city.conditions.type.not_enough_city_money=You must have at least %1$s in your bank to change the type of your city
+
+# - Leave
+feature.city.conditions.leave.owner_cant_leave=You cannot leave the city because you own it, delete the city or transfer ownership
+
+# * LISTENERS
+feature.city.listeners.tnt_explode=You took a TNT in your city by the city %1$s and posed by %2$s ! (%3$s/%4$s daily tnt)
+
+# * MENUS
+feature.city.menus.main.name=Cities Menu
+feature.city.menus.main.bank.title=The bank
+feature.city.menus.main.bank.lore.unlocked=Store your money and that of your city \
+ Contribute to the development of your city \
+ CLICK HERE TO ACCESS THE ACCOUNTS
+feature.city.menus.main.bank.lore.locked=Store your money and that of your city \
+ Contribute to the development of your city \
+ You must be level %1$s to unlock this
+feature.city.menus.main.map.title=Size of your city
+feature.city.menus.main.map.no_permission=You do not have permission to view the claims
+feature.city.menus.main.map.lore.access=Your city has an area of %1$s \
+ CLICK HERE TO ACCESS THE MAP
+feature.city.menus.main.map.lore.view=Your city has an area of %1$s
+feature.city.menus.main.leave.title=Leave the city
+feature.city.menus.main.leave.confirm.accept=Do you really want to leave %1$s ?
+feature.city.menus.main.leave.confirm.deny=Stay in the city %1$s
+feature.city.menus.main.leave.lore.leave=You go to leave %1$s \
+ CLICK HERE TO GO
+feature.city.menus.main.leave.lore.owner_cant=You can't to leave %1$s because you are owner
+feature.city.menus.main.chest.title=The city chest
+feature.city.menus.main.chest.lore.locked=Access your city's vault to \
+ store items in common \
+ You must be level %1$s to unlock this
+feature.city.menus.main.chest.lore.opened=Access your city's vault to \
+ store items in common \
+ This chest is already opened by %1$s
+feature.city.menus.main.chest.lore.click=Access your city's vault to \
+ store items in common \
+ CLICK HERE TO ACCESS THE CHEST
+feature.city.menus.main.chest.lore.no_permission=You do not have the right to view the chest!
+feature.city.menus.main.milestone.title=Milestone of your city
+feature.city.menus.main.milestone.lore=Access the city progression route! \
+ Important for unlocking the different city features! \
+ Level: %1$s \
+ CLICK HERE TO ACCESS THE MILESTONE
+feature.city.menus.main.notation.title=The rating of your city
+feature.city.menus.main.notation.lore=City rating: %1$s/%2$s \
+ Money won: %3$s %4$s \
+ CLICK HERE TO VIEW RATING
+feature.city.menus.main.notation.lore.none=You have no rating
+feature.city.menus.main.notation.lore.locked=You must be level %1$s to unlock this
+feature.city.notation.dialog.title=Ranking of Cities - Week %1$s of %2$s
+feature.city.notation.header.city=City
+feature.city.notation.header.activity=Activ.
+feature.city.notation.header.economy=Econo.
+feature.city.notation.header.military=Milit.
+feature.city.notation.header.architectural=Arch.
+feature.city.notation.header.coherence=Oh.
+feature.city.notation.header.total=Total
+feature.city.notation.header.money=Money
+feature.city.notation.table.none=No rating
+feature.city.notation.hover.city.mascot_level=Mascot level: %1$s
+feature.city.notation.hover.city.status=Status : %1$s
+feature.city.notation.hover.city.members=Members: %1$s
+feature.city.notation.hover.city.more_info=Click here for more information about the city
+feature.city.notation.hover.total.none=No total for you
+feature.city.notation.hover.total.title=Details
+feature.city.notation.hover.total.activity=Activity %1$s
+feature.city.notation.hover.total.economy=Economy %1$s
+feature.city.notation.hover.total.military=Military %1$s
+feature.city.notation.hover.total.architecture=Architecture %1$s
+feature.city.notation.hover.total.coherence=Consistency %1$s
+feature.city.notation.hover.total.justification=Rationale for rating
+feature.city.notation.hover.activity=Rating ranging from 0 to %1$s points, which includes, the number of active players in the city per a city's playing time. \
+ Note on %1$s points
+feature.city.notation.hover.economy=Note which includes, the wealth of the city and the GDP per capita of the city. \
+ Note on %1$s points
+feature.city.notation.hover.military=Rating which is based on the quantity of power points in your city, recoverable through wars \
+ Note on %1$s points
+feature.city.notation.hover.coherence=Coherence note which includes, the coherence of the constructions between them, the harmony of the colors, the transition between 2 themes, ... \
+ Note on %1$s points
+feature.city.notation.hover.architectural=Architectural note which includes the diversity of blocks used, the architecture of the builds as well as the vegetation. \
+ Note on %1$s points
+feature.city.notation.join.title=RATING!
+feature.city.notation.join.message=Your city has been rated and is placed no.%1$s of the best cities!
+feature.city.notation.join.hover=Click to see your city's rating!
+feature.city.notation.command.none=No ratings have been posted for this week!
+feature.city.notation.admin.edit.example=Example: this week we are %1$s and next week, the %2$s
+feature.city.notation.admin.edit.prompt=Enter the week format (%1$s)
+feature.city.notation.admin.edit.invalid=Wrong entry! %1$s
+feature.city.notation.admin.edit.none=No city to edit
+feature.city.notation.admin.edit.error=Error opening menu
+feature.city.notation.admin.publish.missing=You must do /admcity notation edit and edit the week %1$s
+feature.city.notation.admin.publish.success=The week %1$s was published, the savings and activity scores as well as the gains were calculated and given
+feature.city.notation.edit.teleport=Teleport to the city in question.
+feature.city.notation.edit.teleport.success=You have been teleported to the city %1$s. Click on the message to continue editing.
+feature.city.notation.edit.input.architectural=Architectural Note
+feature.city.notation.edit.input.architectural.hover=Note on %1$s points \
+ which takes into account the buildings, infrastructure and aesthetics of the city
+feature.city.notation.edit.input.coherence=Rating Consistency
+feature.city.notation.edit.input.coherence.hover=Note on %1$s points \
+ which takes into account the consistency of builds and the gradual change of theme.
+feature.city.notation.edit.input.justification=Rationale for rating
+feature.city.notation.edit.input.justification.hover=A justification of the grade is mandatory
+feature.city.notation.edit.title=Ranking of weekly ratings %1$s - City Edition: %2$s (%3$s/%4$s)
+feature.city.notation.edit.completed=The ratings for the %1$s were completely done
+feature.city.menus.main.ranks.title=City Ranks
+feature.city.menus.main.ranks.lore.unlocked=Manage your city's ranks \
+ Your Rank: %1$s \
+ CLICK HERE TO ACCESS THE GRADES
+feature.city.menus.main.ranks.lore.locked=Manage your city's ranks \
+ You must be Level %1$s to unlock this
+feature.city.menus.main.type.title=The status of your city
+feature.city.menus.main.type.lore.status=Your city is in %1$s
+feature.city.menus.main.type.lore.war_command=You can start a war with /war
+feature.city.menus.main.type.lore.cooldown=Cooldown: %1$s
+feature.city.menus.main.type.lore.click=CLICK HERE TO CHANGE IT
+feature.city.menus.main.mayor.title=The elections
+feature.city.menus.main.mayor.locked.phase2=At the moment, the mayors are all diligent in the cities! \
+ Except yours! \
+ You must be level %1$s to unlock this
+feature.city.menus.main.mayor.locked.phase1=The elections are currently open \
+ Closure in %1$s \
+ But you can't access it! \
+ You must be level %2$s to unlock this
+feature.city.menus.main.mayor.locked.error=Error \
+ You must be level %1$s to unlock this
+feature.city.menus.main.mayor.election.phase2=Your city has a mayor ! \
+ Mayor: %1$s \
+ CLICK HERE TO ACCESS THE INFORMATION
+feature.city.menus.main.mayor.election.phase1=The elections are currently open \
+ Closure in %1$s \
+ CLICK HERE TO ACCESS THE ELECTIONS
+feature.city.menus.main.mayor.election.error=Error
+feature.city.menus.main.mayor.owner.phase2=Your city has a mayor ! \
+ Mayor: %1$s \
+ Opening of elections in %2$s \
+ CLICK HERE TO ACCESS THE INFORMATION
+feature.city.menus.main.mayor.owner.phase1.has_mayor=The elections are disabled \
+ You need at least %1$s members \
+ You have already chosen your reforms ! \
+ However you can change your color! \
+ Closure in %2$s
+feature.city.menus.main.mayor.owner.phase1.no_mayor=The elections are disabled \
+ You need at least %1$s members \
+ Only the owner can choose the reforms that he wants. \
+ Closure in %2$s \
+ CLICK HERE TO CHOOSE YOUR REFORMS
+feature.city.menus.main.mayor.owner.phase1.viewer=The elections are disabled \
+ You need at least %1$s members \
+ Only the owner can choose the reforms that he wants. \
+ Closure in %2$s
+feature.city.menus.main.mayor.owner.error=Error
+feature.city.menus.main.mascots.title=Your Mascot
+feature.city.menus.main.mascots.lore.dead=Life : %1$s/%2$s \
+ Status :Dead \
+ Reappears in: %3$s \
+ Level : %4$s \
+ CLICK HERE TO INTERACT WITH
+feature.city.menus.main.mascots.lore.alive=Life : %1$s/%2$s \
+ Status :Envy \
+ Level : %3$s \
+ CLICK HERE TO INTERACT WITH
+feature.city.menus.main.mascots.lore.not_found=Mascot not found
+feature.city.menus.main.mascots.lore.missing=Mascot non-existent (contact the staff)
+feature.city.menus.main.manage.title=%1$s
+feature.city.menus.main.manage.lore.edit=City owner: %1$s \
+ Mayor of the city: %2$s \
+ Member(s): %3$s/%4$s \
+ CLICK HERE TO CHANGE THE CITY
+feature.city.menus.main.manage.lore.view=City owner: %1$s \
+ Mayor of the city: %2$s \
+ Member(s): %3$s/%4$s
+feature.city.menus.main.members.title=List of Members
+feature.city.menus.main.members.lore=There is currently %1$s member(s) in your city \
+ You have a member limit of %2$s member(s) \
+ CLICK HERE TO SEE THE LIST OF PLAYERS
+feature.city.menus.no_city.name=Cities Menu - None
+feature.city.menus.no_city.invitations.none.title=You have no invitation
+feature.city.menus.no_city.invitations.none.lore=An inhabitant of a city owes you invite \
+ via /city invite
+feature.city.menus.no_city.invitations.count.title=You have %1$s invitation%2$s
+feature.city.menus.no_city.invitations.count.lore=CLICK HERE TO SEE YOUR INVITATIONS
+feature.city.menus.no_city.create.title=Create your city
+feature.city.menus.no_city.create.lore.cooldown=You can also create your city \
+ Do /city create [name] or click here! \
+ You have to wait %1$s before you can create a city
+feature.city.menus.no_city.create.lore.ready=You can also create your city \
+ Do /city create [name] or click here! \
+ Costs: \
+ - %1$s %2$s \
+ - %3$s of Aywenite \
+ CLICK HERE TO CREATE YOUR CITY
+feature.city.menus.invitations.name=Menu of cities - Invitations
+feature.city.menus.invitations.item.name=%1$s invited you to %2$s
+feature.city.menus.invitations.item.lore=CLICK HERE TO JOIN THE CITY
+feature.city.menus.invitations.confirm.deny=Refuse %1$s
+feature.city.menus.type.name=Cities Menu - Type
+feature.city.menus.type.peace.title=City at peace
+feature.city.menus.type.peace.lore=Your safety is assured! \
+ TIPS: Perfect for building, and trading with complete peace of mind!
+feature.city.menus.type.war.title=City at war
+feature.city.menus.type.war.lore=A world of war and competition. \
+ ⚠ WARNING \
+ -Cities being in the same status as you can declare war on you! \
+ TIPS: Ideal for tryhards and competitive riders
+feature.city.menus.type.war.lore.locked=A world of war and competition. \
+ ⚠ WARNING \
+ -Cities being in the same status as you can declare war on you! \
+ TIPS: Ideal for tryhards and competitive riders \
+ You must be level %1$s to unlock this
+feature.city.menus.transfer.name=Cities Menu - Transfer
+feature.city.menus.transfer.item.lore=Do you want to transfer the city to %1$s ? \
+ CLICK HERE TO CONFIRM
+feature.city.menus.modify.name=Cities Menu - Edit
+feature.city.menus.modify.rename.title=Rename your city
+feature.city.menus.modify.rename.lore=You can rename your city. \
+ Current name: %1$s \
+ CLICK HERE TO EDIT IT
+feature.city.menus.modify.rename.invalid=Please enter correct entry
+feature.city.menus.modify.transfer.title=Transfer the city
+feature.city.menus.modify.transfer.lore=The Citywill be transferred to the person you select \
+ CLICK HERE TO CHOOSE
+feature.city.menus.modify.transfer.no_member=There is no member to whom you can transfer the city
+feature.city.menus.modify.delete.title=Delete city
+feature.city.menus.modify.delete.lore.wait=You will definitely delete the city! \
+ You have to wait %1$s before you can delete your city
+feature.city.menus.modify.delete.lore.click=You will definitely delete the city! \
+ CLICK HERE TO CONFIRM
+feature.city.menus.perms.name=Permissions %1$s
+feature.city.menus.perms.permission.remove=Withdraw %1$s
+feature.city.menus.perms.permission.add=Add %1$s
+feature.city.menus.perms.permission=%1$s
+feature.city.menus.perms.permission.lore.remove=CLICK TO REMOVE THIS PERMISSION
+feature.city.menus.perms.permission.lore.add=CLICK TO ADD THIS PERMISSION
+feature.city.menus.perms.bulk.title=Manage all member permissions
+feature.city.menus.perms.bulk.lore=Left click to remove everything \
+ Right click to add all
+feature.city.menus.chest.name=Safe menu %1$s - Page %2$s
+feature.city.menus.chest.upgrade.title=Upgrade the trunk
+feature.city.menus.chest.upgrade.lore.click=Your city must have: \
+ - %1$s %2$s \
+ - %3$s of Aywenite \
+ CLICK HERE TO IMPROVE THE CHEST
+feature.city.menus.chest.upgrade.lore.max=Your city must have: \
+ - %1$s %2$s \
+ - %3$s of Aywenite \
+ Limit reached
+feature.city.menus.chunks.name=Cities menu - The map
+feature.city.menus.chunks.loading.title=Loading...
+feature.city.menus.chunks.loading.lore=Loading chunk data in progress
+feature.city.menus.chunks.free_claim.title=Claim free
+feature.city.menus.chunks.free_claim.lore=You have %1$s free claim!
+feature.city.menus.chunks.refresh.title=Refresh map
+feature.city.menus.chunks.refresh.lore=To update claims displayed
+feature.city.menus.chunks.protected.title=Claim in a protected region
+feature.city.menus.chunks.protected.lore=This area is protected by a WorldGuard region \
+ Position : %1$s
+feature.city.menus.chunks.player_claim.title=Claim your city
+feature.city.menus.chunks.player_claim.lore.reward=City : %1$s \
+ Position : %2$s \
+ Brings you: \
+ - %3$s %4$s \
+ - %5$s of Aywenite \
+ CLICK TO UNCLAIM
+feature.city.menus.chunks.player_claim.lore.basic=City : %1$s \
+ Position : %2$s \
+ CLICK TO UNCLAIM
+feature.city.menus.chunks.other_claim.title=Claim from an opposing city
+feature.city.menus.chunks.other_claim.lore=City : %1$s \
+ Position : %2$s
+feature.city.menus.chunks.unclaimed.title=Free claim
+feature.city.menus.chunks.unclaimed.lore.free=Position : %1$s \
+ Costs: \
+ - Claim free \
+ CLICK TO CLAIM
+feature.city.menus.chunks.unclaimed.lore.cost=Position : %1$s \
+ Costs: \
+ - %2$s %3$s \
+ - %4$s of Aywenite \
+ CLICK TO CLAIM
+feature.city.menus.chunks.confirm_claim.accept=Do you really want to claim this chunk?
+feature.city.menus.chunks.confirm_claim.deny=Cancel the claim procedure
+feature.city.menus.chunks.confirm_unclaim.accept=Do you really want to unclaim this chunk?
+feature.city.menus.chunks.confirm_unclaim.deny=Cancel the unclaim procedure
+feature.city.menus.top.name=City ranking menu
+feature.city.menus.top.sort.title=Sort
+feature.city.menus.top.sort.header=Click to sort by
+feature.city.menus.top.sort.selected_prefix=➢
+feature.city.menus.top.sort.unselected_prefix=
+feature.city.menus.top.sort.global=Overall
+feature.city.menus.top.sort.power=Powers
+feature.city.menus.top.sort.money=Riches
+feature.city.menus.top.sort.claim=Area
+feature.city.menus.top.sort.population=Population
+feature.city.menus.top.item.title=no.%1$s %2$s
+feature.city.menus.top.item.lore=Owner : %1$s \
+ Level : %2$s \
+ Members: %3$s/%4$s \
+ Area: %5$s chunks \
+ Riches: %6$s %7$s \
+ Power points: %8$s
+feature.city.menus.top.item.lore.with_mayor=Owner : %1$s \
+ Mayor: %2$s \
+ Level : %3$s \
+ Members: %4$s/%5$s \
+ Area: %6$s chunks \
+ Riches: %7$s %8$s \
+ Power points: %9$s
+feature.city.menus.list.name=City list menu
+feature.city.menus.list.sort.title=Sort
+feature.city.menus.list.sort.header=Click to sort by
+feature.city.menus.list.sort.selected_prefix=➢
+feature.city.menus.list.sort.unselected_prefix=
+feature.city.menus.list.sort.name=Name
+feature.city.menus.list.sort.wealth=Riches
+feature.city.menus.list.sort.population=Population
+feature.city.menus.list.sort.peace_war=Peace/Guerre
+feature.city.menus.list.item.title=%1$s
+feature.city.menus.list.item.lore=Owner : %1$s \
+ Level : %2$s \
+ Members: %3$s/%4$s member%5$s \
+ Kind : %6$s \
+ Riches: %7$s %8$s
+feature.city.menus.list.item.lore.with_mayor=Owner : %1$s \
+ Mayor: %2$s \
+ Level : %3$s \
+ Members: %4$s/%5$s member%6$s \
+ Kind : %7$s \
+ Riches: %8$s %9$s
+feature.city.menus.list.details.name=City details menu %1$s
+feature.city.menus.list.details.level=Level : %1$s
+feature.city.menus.list.details.owner=Owner : %1$s
+feature.city.menus.list.details.mayor=Mayor: %1$s
+feature.city.menus.list.details.mascot.level=Mascot Level: %1$s
+feature.city.menus.list.details.mascot.missing=No mascot found (bug)
+feature.city.menus.list.details.size=Size : %1$s chunks
+feature.city.menus.list.details.wealth=Riches: %1$s %2$s
+feature.city.menus.list.details.population=Population : %1$s/%2$s player%3$s
+feature.city.menus.list.details.population.lore=CLICK HERE TO VIEW MEMBERS
+feature.city.menus.list.details.type=Kind : %1$s
+feature.city.menus.list.members.name=Member detail menu %1$s
+feature.city.menus.list.members.back_lore=CLICK HERE TO RETURN
+feature.city.menus.members.name=Cities Menu - Members
+feature.city.menus.members.owner.lore=The owner of the city.
+feature.city.menus.members.cant_edit_owner.lore=You cannot edit the owner
+feature.city.menus.members.manage.lore=You can manage this player likeexpelor modifyhis permissions \
+ CLICK HERE TO MANAGE THIS PLAYER
+feature.city.menus.members.perms.lore=You can modify the permissions of this player \
+ CLICK HERE TO MODIFY YOUR PERMISSIONS
+feature.city.menus.members.cant_self_kick.lore=You can't exclude yourself
+feature.city.menus.members.cant_kick_owner.lore=You can't exclude the owner
+feature.city.menus.members.kick.lore=You can exclude this player \
+ CLICK HERE TO EXCLUDE IT
+feature.city.menus.members.member.lore=A member like you
+feature.city.menus.members.kick.confirm=Do you really want to evict? %1$s ?
+feature.city.menus.members.kick.deny=Do not expel %1$s
+feature.city.menus.members.invite.title=Invite people
+feature.city.menus.members.invite.lore=You can invite people to your city to fill it \
+ You are at %1$s/%2$s
+feature.city.menus.members.invite.prompt=Enter player name
+feature.city.menus.members.invite.invalid=Please enter correct entry
+feature.city.menus.members.manage.name=Cities Menu - Edit Player
+feature.city.menus.members.manage.kick.self=You can't deport yourself
+feature.city.menus.members.manage.kick.owner=You can't evict the owner
+feature.city.menus.members.manage.kick.info=You can expel %1$s of your city. \
+ CLICK HERE TO EXPEL
+feature.city.menus.members.manage.kick.title=Expel %1$s
+feature.city.menus.members.manage.target.lore=You are modifying its status in the city
+feature.city.menus.members.manage.target.title=Player %1$s
+feature.city.menus.members.manage.perms.lore=You will modify his permissions \
+ CLICK HERE TO EDIT
+feature.city.menus.members.manage.perms.title=Change permissions
+feature.city.menus.members.manage.back_lore=You will return to the previous menu \
+ CLICK HERE TO CONFIRM
+
+# * SUB FEATURES
+# - Bank
+feature.city.bank.menu.name=Cities menu - Bank
+feature.city.bank.menu.deposit.title=Deposit money
+feature.city.bank.menu.deposit.lore=Your money will be placed in the bank of the city \
+ CLICK HERE TO DEPOSIT
+
+feature.city.bank.menu.withdraw.title=Withdraw money
+feature.city.bank.menu.withdraw.lore=The money will be taken from the bank of the city \
+ CLICK HERE TO INDICATE THE AMOUNT
+
+feature.city.bank.menu.balance.title=Your city's money
+feature.city.bank.menu.balance.lore=The city currently has %1$s %2$s \
+ Your next interest is to %3$s%In %4$s
+feature.city.bank.menu.back_lore=You will return to the previous menu \
+ CLICK HERE TO CONFIRM
+
+feature.city.bank.menu.deposit.name=City Bank Menu - Fill
+feature.city.bank.menu.deposit.all.title=Drop off all your money
+feature.city.bank.menu.deposit.all.lore=All your money will be placed in the bank of the city \
+ Amount that will be deposited: %1$s %2$s \
+ CLICK HERE TO DEPOSIT
+
+feature.city.bank.menu.deposit.half.title=Deposit half of your money
+feature.city.bank.menu.deposit.half.lore=Half of your money will be placed in the bank of the city \
+ Amount that will be deposited: %1$s %2$s \
+ CLICK HERE TO DEPOSIT
+
+feature.city.bank.menu.deposit.input.title=Drop a specific amount
+feature.city.bank.menu.deposit.input.lore=Your money will be placed in the bank of the city \
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.city.bank.menu.deposit.input.prompt=Enter the amount you want to deposit
+
+feature.city.bank.menu.withdraw.name=City Bank Menu - Withdraw
+feature.city.bank.menu.withdraw.all.title=Take themoney from your city
+feature.city.bank.menu.withdraw.all.lore=All the money placed in the bank of the city will be given to you \
+ Amount that will be given to you: %1$s %2$s \
+ CLICK HERE TO TAKE
+
+feature.city.bank.menu.withdraw.half.title=Take half of themoney of the city
+feature.city.bank.menu.withdraw.half.lore=Half of the money will be taken from the bank from your city to give it to you \
+ Amount that will be given to you: %1$s %2$s \
+ CLICK HERE TO TAKE
+
+feature.city.bank.menu.withdraw.input.title=Take a specific amount
+feature.city.bank.menu.withdraw.input.lore=The money requested will be taken from the bank from the city to give it to you \
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.city.bank.menu.withdraw.input.prompt=Enter the amount you want to withdraw
+
+feature.city.bank.errors.feature_locked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+feature.city.bank.errors.no_permission_deposit=You don't have permission to give money to your city
+feature.city.bank.errors.no_permission_balance=You don't have permission to look at the city's money
+feature.city.bank.errors.no_permission_withdraw=You don't have permission to take money from your city
+feature.city.bank.errors.war_blocked=Your city is in a war situation, you cannot do this
+feature.city.bank.errors.min_level=To use the city bank, your city must be level 2 minimum!
+feature.city.bank.errors.not_enough_city_money=Your town bank doesn't have enough money.
+feature.city.bank.deposit.success=You filed %1$s in your city bank.
+feature.city.bank.withdraw.success=%1$s %2$s have been transferred to your account.
+
+# - City Chat
+feature.city.chat.entered=You have joined the city chat
+feature.city.chat.leaved=You left the town chat
+feature.city.chat.prefix=#city
+
+# - City Permission
+feature.city.permission.owner=Owner
+feature.city.permission.invite=Invite
+feature.city.permission.kick=Expel
+feature.city.permission.place=Place blocks
+feature.city.permission.break=Break blocks
+feature.city.permission.open_chest=Open chests
+feature.city.permission.interact=Interact with blocks (except chests)
+feature.city.permission.claim=Claim
+feature.city.permission.see_claim=View claims
+feature.city.permission.rename=Rename
+feature.city.permission.money_deposit=Deposit money in the city bank
+feature.city.permission.money_see=See the city money
+feature.city.permission.money_withdraw=Withdraw money from the city bank
+feature.city.permission.manage_perm=Manage member permissions
+feature.city.permission.access_city_chest=Access the city vault
+feature.city.permission.upgrade_chest=Upgrade the Town Chest
+feature.city.permission.change_type=Change city type
+feature.city.permission.move_mascot=Move the mascot
+feature.city.permission.change_mascot_skin=Change the mascot skin
+feature.city.permission.upgrade_mascot=Improve the mascot
+feature.city.permission.heal_mascot=Take care of the mascot
+feature.city.permission.launch_war=Starting wars
+feature.city.permission.manage_grade=Manage grades
+feature.city.permission.assign_grade=Assign grades
+
+# - City Grades
+feature.city.grade.cannot_exist=This grade does not exist.
+feature.city.grade.name_cannot_be_null=Rank name cannot be empty
+feature.city.grade.priority_must_be_0_17=The priority must be contained between 0 and 17
+feature.city.grade.icon_cannot_be_null=The grade icon cannot be zero (notify the staff)
+feature.city.grade.cannot_assign=You don't have permission to assign ranks.
+feature.city.grade.cannot_modify_sup_role=You cannot modify a rank greater than or equal to yours.
+feature.city.grade.max_reach=The maximum number of ranks has been reached, you cannot add more.
+feature.city.grade.already_exist=This grade already exists.
+feature.city.grade.remove_grade=You removed the rank %1$s of %2$s
+feature.city.grade.assign_grade=You have assigned the rank %1$s has %2$s
+feature.city.rank.menu.list.title=City Menu - Grades
+feature.city.rank.menu.list.rank.title=Grade %1$s
+feature.city.rank.menu.list.rank.lore.priority=Priority : %1$s
+feature.city.rank.menu.list.rank.lore.permissions=Permissions: %1$s
+feature.city.rank.menu.list.rank.lore.click_edit=CLICK TO EDIT ROLE
+feature.city.rank.menu.list.rank.lore.click_info=CLICK FOR INFORMATION
+feature.city.rank.menu.list.assign.title=Assign grades
+feature.city.rank.menu.list.assign.lore.empty=No grades have been created in this city. \
+ Create a rank so you can assign it to members.
+feature.city.rank.menu.list.assign.lore.available=You can assign ranks to town members. \
+ \
+ CLICK TO ASSIGN A GRADE
+feature.city.rank.menu.list.create.title=Add a rank
+feature.city.rank.menu.list.create.lore=You can make a rank, a set of permissions! \
+ \
+ CLICK TO CREATE A GRADE
+feature.city.rank.menu.details.title.edit=Rank details menu %1$s
+feature.city.rank.menu.details.title.create=Rank creation menu %1$s
+feature.city.rank.menu.details.priority.title.create=Insert grade priority
+feature.city.rank.menu.details.priority.lore.create=Priority determines rank order \
+ Lower priority means higher grade \
+ Editable later \
+ Current priority: %1$s
+feature.city.rank.menu.details.name.title=Rank name
+feature.city.rank.menu.details.name.undefined=Undefined
+feature.city.rank.menu.details.name.lore.create=The name of the grade is given when it is created \
+ Editable later \
+ Current name: %1$s
+feature.city.rank.menu.details.icon.title=Rank icon
+feature.city.rank.menu.details.icon.lore.create=Click to change an icon \
+ Editable later
+feature.city.rank.menu.details.perms.title=Rank permissions
+feature.city.rank.menu.details.perms.none=None
+feature.city.rank.menu.details.perms.lore.create=Click to select permissions \
+ Editable later \
+ Current permissions: %1$s
+feature.city.rank.menu.details.cancel_create.title=Cancel and delete
+feature.city.rank.menu.details.cancel_create.lore=Click to cancel the creation of the grade
+feature.city.rank.menu.details.create.title=Create the grade
+feature.city.rank.menu.details.create.lore=Click to create the grade with the defined parameters
+feature.city.rank.menu.details.priority.lore.current=Current priority: %1$s
+feature.city.rank.menu.details.priority.lore.add=LEFT CLICK TO ADD 1
+feature.city.rank.menu.details.priority.lore.remove=RIGHT CLICK TO REMOVE 1
+feature.city.rank.menu.details.priority.title.edit=Priority
+feature.city.rank.menu.details.name.lore.current=Current name: %1$s
+feature.city.rank.menu.details.name.lore.edit=CLICK TO EDIT NAME
+feature.city.rank.menu.details.icon.lore.current=Here is your current icon: %1$s
+feature.city.rank.menu.details.icon.lore.edit=CLICK TO CHANGE ICON
+feature.city.rank.menu.details.perms.lore.current=Current permissions: %1$s
+feature.city.rank.menu.details.perms.lore.edit_manage=CLICK TO MANAGE PERMISSIONS
+feature.city.rank.menu.details.perms.lore.edit_view=CLICK TO VIEW PERMISSIONS
+feature.city.rank.menu.details.cancel_edit.title=Cancel
+feature.city.rank.menu.details.cancel_edit.lore=Click to cancel changes \
+ No changes will be saved
+feature.city.rank.menu.details.delete.title=Remove grade
+feature.city.rank.menu.details.delete.lore=Click to remove this rank \
+ This action is irreversible
+feature.city.rank.menu.details.save.title=Save changes
+feature.city.rank.menu.details.save.lore=Click to save rank changes
+feature.city.rank.menu.perms.item.add=Add %1$s
+feature.city.rank.menu.perms.item.remove=Withdraw %1$s
+feature.city.rank.menu.perms.item.lore.add=CLICK TO ADD THIS PERMISSION
+feature.city.rank.menu.perms.item.lore.remove=CLICK TO REMOVE THIS PERMISSION
+feature.city.rank.menu.perms.manage_all.title=Manage all grade permissions
+feature.city.rank.menu.perms.manage_all.lore=Left click to remove everything \
+ Right click to add all
+feature.city.rank.menu.perms.title=Rank Permissions %1$s
+feature.city.rank.menu.icon.item.lore=Click to select this icon
+feature.city.rank.menu.icon.search.title=Find an icon
+feature.city.rank.menu.icon.search.lore=Click to enter a keyword
+feature.city.rank.menu.icon.search.prompt=Enter a keyword name for the icon
+feature.city.rank.menu.icon.clear.title=Clear filter
+feature.city.rank.menu.icon.clear.lore=CLICK TO CLEAR FILTER
+feature.city.rank.menu.icon.title=Menu for choosing an icon - Page %1$s
+feature.city.rank.menu.members.item.rank=Grade : %1$s
+feature.city.rank.menu.members.item.click_assign=CLICK HERE TO ASSIGN A GRADE
+feature.city.rank.menu.members.item.name_unknown=Unknown player
+feature.city.rank.menu.members.title=Members' Choice Menu - Ranks
+feature.city.rank.menu.assign.title=Cities Menu - Assign a rank
+feature.city.rank.menu.assign.item.lore.count=Permissions: %1$s permission(s)
+feature.city.rank.menu.assign.item.lore.none=None
+feature.city.rank.prompt.create=Enter your rank name
+feature.city.rank.prompt.rename=Enter your new rank name
+feature.city.rank.rename.success=The rank name has been updated: %1$s → %2$s
+feature.city.rank.create.success=Grade %1$s created successfully!
+feature.city.rank.update.cancelled=Changes canceled, no changes were saved.
+feature.city.rank.update.success=Grade %1$s modified successfully!
+feature.city.rank.delete.confirm.lore=This action is irreversible
+feature.city.rank.delete.success=Grade %1$s successfully deleted!
+feature.city.rank.delete.error=Unable to delete rank: %1$s
+
+# - Mascots
+# Menus
+feature.city.mascots.menu.main.name=Pet Menu (Lvl. %1$s)
+feature.city.mascots.menu.main.skin.title=The skin of the mascot
+feature.city.mascots.menu.main.skin.lore=You can change the appearance of your mascot \
+ CLICK HERE TO CHANGE SKIN
+
+feature.city.mascots.menu.main.move.title=Move your mascot
+feature.city.mascots.menu.main.move.lore.ready=You can change the position of your mascot \
+ CLICK HERE TO CHANGE IT POSITION
+feature.city.mascots.menu.main.move.lore.cooldown=You cannot change the position of your mascot \
+ Cooldown: %1$s
+feature.city.mascots.menu.main.move.item.title=Move your mascot
+feature.city.mascots.menu.main.move.item.lore=Your mascot will be placed in the location of the chest \
+ This safe is not removable
+feature.city.mascots.menu.main.move.interaction.remaining=Time remaining: %%sdry%%s
+feature.city.mascots.menu.main.move.interaction.cancelled=Mascot move canceled
+feature.city.mascots.menu.main.move.error.inventory_space=Free up space in your inventory
+feature.city.mascots.menu.main.move.error.invalid_chunk=Cannot move the mascot here because this chunk does not belong to you or is adjacent to another city
+
+feature.city.mascots.menu.main.upgrade.title=Improve your Mascot
+feature.city.mascots.menu.main.upgrade.max_level=Max level reached
+feature.city.mascots.menu.main.upgrade.level_required=You must be level %1$s to improve the mascot
+feature.city.mascots.menu.main.upgrade.cost=Need %1$s of Aywenites
+feature.city.mascots.menu.main.upgrade.success=You have improved your mascot to the level %1$s
+feature.city.mascots.menu.main.upgrade.not_enough_aywenite=You don't have enough Aywenite
+
+feature.city.mascots.menu.main.immunity.title=Your mascot East immune !
+feature.city.mascots.menu.main.immunity.lore=You have a immunity on your mascot \
+ Time remaining: %1$s \
+ To reduce the time by 1 hour, you must have: \
+ - %2$s of Aywenite \
+ CLICK HERE TO REDUCE IMMUNITY TIME
+feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour
+
+feature.city.mascots.menu.dead.name=Mascot menu [DEAD]
+feature.city.mascots.menu.dead.title=Your mascot is dead
+feature.city.mascots.menu.dead.lore=Your pet is dead, you can reduce the reanimation time \
+ which is currently: %1$s \
+ To reduce the time by 1 hour, you must have: \
+ - %2$s of Aywenite \
+ CLICK HERE TO REDUCE RESUSCITATION TIME
+feature.city.mascots.menu.dead.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour
+
+feature.city.mascots.menu.skin.name=Pet Skin Menu
+feature.city.mascots.menu.skin.lore.level_required=You must be level %1$s to unlock this skin
+feature.city.mascots.menu.skin.lore.price_required=You must have %1$s Aywenite
+feature.city.mascots.menu.skin.error.level_required=You do not have the required city level to put on this skin
+feature.city.mascots.menu.skin.error.not_enough_aywenite=You don't have enough Aywenite
+
+feature.city.mascots.skin.requirement=Need %1$s of Aywenites
+
+feature.city.mascots.skin.error.space_above=Free up space above the mascot to change its skin
+feature.city.mascots.skin.error.space_around=Free up space around the mascot to change its skin
+
+feature.city.mascots.interaction.error.not_found=No mascots found - Please contact the staff
+feature.city.mascots.interaction.error.not_owner=This mascot does not belong to you
+feature.city.mascots.rename.error=You cannot rename this mascot
+
+feature.city.mascots.name.alive=%1$s %2$s%3$s
+feature.city.mascots.name.dead=☠Dead Mascot
+
+feature.city.mascots.admin.remove.success=Mascot removed
+
+feature.city.mascots.damage.error.enemy_city_unknown=Error: The enemy city was not recognized
+feature.city.mascots.damage.error.city_type_unknown=Error: Your city type was not recognized
+feature.city.mascots.damage.error.enemy_city_type_unknown=Error: The enemy city type was not recognized
+feature.city.mascots.damage.error.self_mascot=You cannot attack your mascot
+feature.city.mascots.damage.error.enemy_city_peace=This city is in peace
+feature.city.mascots.damage.error.city_peace=Your city is in peace
+feature.city.mascots.damage.error.immune=This mascot is immune for the moment
+feature.city.mascots.damage.error.not_in_war=You are not at war with %1$s
+feature.city.mascots.damage.error.not_in_combat=You can only attack the pet during the combat phase
+feature.city.mascots.damage.error.not_selected_for_war=You cannot attack the mascot because you have not been selected for war
+
+## Mascot Wand
+feature.city.mascot.mascot_wand.claim_mascot_wand=You received a stick to pose your mascot
+feature.city.mascot.mascot_wand.create_cancelled=Creation canceled
+
+feature.city.mascot.mascot_wand.lore=Your mascot will be placed in the location of the chest\
+ This stick is not removable
+
+feature.city.mascot.mascot_wand.can_only_place_mascot=You can only pose your pet in the main world
+feature.city.mascot.mascot_wand.hasnot_block_above=No block should be above the mascot
+
+feature.city.mascot.mascot=Mascot
+
+# - War
+feature.city.war.peace=Peace
+feature.city.war.war=War
+feature.city.war.command.type_required=Your city is not in a war status! Change the type of your city with/city typeor from the main cities menu
+feature.city.war.command.city_immune=Your city is currently in immunity period, you cannot start a war at this time. \
+ Time remaining: %1$s
+feature.city.war.command.no_permission_launch=You do not have permission to start a war for the city
+feature.city.war.command.already_declared=You have already been declared at war!
+feature.city.war.command.already_in_war=You are already at war!
+feature.city.war.command.defense.none=No war being prepared.
+feature.city.war.command.defense.full=The maximum number of defenders has been reached.
+feature.city.war.command.defense.accepted=You are now participating in the defense! No more going back possible.
+feature.city.war.begin.type_required=Your city is not in a war status! Change the type of your city with/city typeor in the main menu of cities
+feature.city.war.begin.target_not_war=The city you are trying to attack is not in war status!
+feature.city.war.begin.no_permission_launch=You do not have permission to start a war for the city
+feature.city.war.begin.already_declared=You have already been declared at war!
+feature.city.war.begin.already_in_war=Your city is already at war!
+feature.city.war.begin.target_preparing=The city you are trying to attack is already preparing troops
+feature.city.war.begin.target_in_war=The city you are trying to attack is already at war!
+feature.city.war.begin.target_immune=The city you are trying to attack is in immunity period!
+feature.city.war.begin.city_immune=Your city is in immunity period!
+feature.city.war.begin.target_no_online=The city you are trying to attack has no members connected!
+feature.city.war.begin.no_combat=No combat possible (not enough players connected)
+feature.city.war.begin.not_enough_members=Not enough members connected to start a fight %1$s vs. %1$s
+feature.city.war.begin.city_already_in_war=One of the cities is already at war!
+feature.city.war.begin.confirm.lore=ATTENTION \
+ You are about to start a war against %1$s \
+ with %2$s players from your city.
+feature.city.war.begin.confirm.cancel=Do not start a war against %1$s
+feature.city.war.begin.defense.attacked=⚔ Your city is attacked by %1$s , you need %2$s player(s)!
+feature.city.war.begin.defense.click_to_join=Click here to join the defense!
+feature.city.war.begin.defense.hover_join=Click to join the war
+feature.city.war.begin.attacker.chosen=⚔ You have been chosen to fight against %1$s
+feature.city.war.begin.waiting_defense=Please wait until %1$s react, the game will still be started in 2 min
+feature.city.war.begin.cancel_not_enough_defenders=The war was called off because the enemy city did not have enough required defenders.
+feature.city.war.preparation.message= \
+ \
+ WAR !Preparation for war begins \
+ Prepare yourself for the fight against %1$s \
+ You have %2$s minutes to equip yourself. \
+ You will be in %3$s VS %4$s \
+ When the fight begins you will be teleported to your pet. \
+ \
+
+feature.city.war.combat.message= \
+ \
+ WAR !The fight is imminent! \
+ Fight against %1$s \
+ You have %2$s minutes of combat. \
+ If you kill the opposing city's mascot, you win the war. \
+ \
+
+feature.city.war.result.draw= \
+ \
+ WAR !It's the end of the fighting! \
+ There was a tie! \
+ \
+ Overall statistics: \
+ -Kills %3$s : %4$s \
+ -Kills %5$s : %6$s \
+ \
+
+feature.city.war.result.reason.win.mascot_death=You have killed the opposing mascot!
+feature.city.war.result.reason.win.mascot_hp=Your mascot had the most life points!
+feature.city.war.result.reason.win.kills=Your city has killed the most opponents!
+feature.city.war.result.reason.win.draw=It's a tie!
+feature.city.war.result.reason.lose.mascot_death=Your mascot has been killed!
+feature.city.war.result.reason.lose.mascot_hp=Your mascot had the fewest life points!
+feature.city.war.result.reason.lose.kills=The opponent has killed the most people!
+feature.city.war.result.reason.lose.draw=It's a tie!
+feature.city.war.result.winner= \
+ \
+ WAR !It's the end of the fighting! \
+ You won against %1$s ! \
+ %2$s \
+ \
+ Overall statistics: \
+ -Kills %3$s : %4$s \
+ -Kills %5$s : %6$s \
+ \
+ Awards \
+ %7$s \
+ %8$s \
+ %9$s \
+ \
+
+feature.city.war.result.loser= \
+ \
+ WAR !It's the end of the fighting! \
+ You lost to %1$s ! \
+ %2$s \
+ \
+ Overall statistics: \
+ -Kills %3$s : %4$s \
+ -Kills %5$s : %6$s \
+ \
+ Losses \
+ %7$s \
+ %8$s \
+ %9$s \
+ \
+
+feature.city.war.result.reward.power=+ %1$s power points
+feature.city.war.result.reward.money=+ %1$s stolen from the adversary
+feature.city.war.result.reward.money_bonus=+ %1$s stolen from the opponent + %2$s bonuses
+feature.city.war.result.reward.claims=+ %1$s conquered territory(ies)
+feature.city.war.result.loss.power=- %1$s power points
+feature.city.war.result.loss.money=- %1$s lost
+feature.city.war.result.loss.claims=- %1$s lost territory(ies)
+feature.city.war.admin.not_in_preparation=This city is not preparing for war!
+feature.city.war.tnt.limit_reached=The city %1$s has reached its daily TNT limit!(%2$s/%3$sdaily TNT)
+feature.city.war.menu.main.title=Menu of Wars
+feature.city.war.menu.main.owner=Owner : %1$s
+feature.city.war.menu.main.population_online=Population (online): %1$s
+feature.city.war.menu.main.mascot_level=Mascot:lv. %1$s
+feature.city.war.menu.main.mascot_location=Location: %1$s
+feature.city.war.menu.main.reforms=Reforms:
+feature.city.war.menu.main.wealth=Riches: %1$s
+feature.city.war.menu.main.click_details=RIGHT CLICK FOR MORE INFORMATION ABOUT THE CITY
+feature.city.war.menu.main.click_launch=LEFT CLICK TO START A WAR
+feature.city.war.menu.more_info.title=More info!
+feature.city.war.menu.more_info.lore=Learn more about the Wars! \
+ The preparation, the fight,... \
+ CLICK HERE TO LEARN MORE!
+feature.city.war.menu.more_info.menu_title=Menu des Guerres - More info
+feature.city.war.menu.more_info.prep.title=The preparation - %1$s min
+feature.city.war.menu.more_info.prep.lore=Choose a city to attack! \
+ The number of fighters will be the same everywhere! \
+ ex. If you are 5 players connected and 2 opposite, \
+ then you will have the choice to do a 1vs1 or a 2vs2 \
+ \
+ When you come to declare war on a city, the people affected will be informed \
+ You will have %1$s min preparation \
+ which gives you time to equip yourself and go to the front!
+feature.city.war.menu.more_info.combat.title=The fight - %1$s min
+feature.city.war.menu.more_info.combat.lore=The fight begins, the game will end %1$s min after the start. \
+ It can be finished before if the enemy pet is killed. \
+ And during this time you can do everything in the enemy city.
+feature.city.war.menu.more_info.result.title=The results
+feature.city.war.menu.more_info.result.lore=The end of the war, peace is imposed between the two camps. \
+ The winner is chosen, the reward is given. \
+ And both cities get 2 days immunity!
+feature.city.war.menu.details.title=War Menu - Details %1$s
+feature.city.war.menu.details.mascot.level=Mascot level: %1$s
+feature.city.war.menu.details.mascot.location=Mascot location: %1$s
+feature.city.war.menu.details.size=Size : %1$s chunks
+feature.city.war.menu.details.wealth=Riches: %1$s
+feature.city.war.menu.details.population=Population : %1$s %2$s
+feature.city.war.menu.details.population_online=Connected population: %1$s %2$s
+feature.city.war.menu.details.population.player=player
+feature.city.war.menu.details.population.players=players
+feature.city.war.menu.details.type=Kind : %1$s
+feature.city.war.menu.players.title=War Menu - Members
+feature.city.war.menu.players.role.owner=Owner
+feature.city.war.menu.players.role.mayor=Mayor
+feature.city.war.menu.players.role.member=Member
+feature.city.war.menu.players.back_lore=You will return to the details menu of the city at war \
+ CLICK HERE TO CONFIRM
+feature.city.war.menu.size.menu_title=Menu of Wars - Selection
+feature.city.war.menu.size.title=%1$s vs. %1$s
+feature.city.war.menu.size.lore=Clash between %1$s players from each city. \
+ \
+ CLICK TO CONTINUE
+feature.city.war.menu.participants.title=Wars Menu - Participants
+feature.city.war.menu.participants.selected_prefix=✔
+feature.city.war.menu.participants.click_remove=CLICK TO REMOVE
+feature.city.war.menu.participants.click_select=CLICK TO SELECT
+feature.city.war.menu.participants.already_selected=You have already selected %1$s player(s).
+feature.city.war.menu.participants.confirm.title=Validate selection
+feature.city.war.menu.participants.confirm.lore=Selected participants: %1$s/%2$s
+feature.city.war.menu.participants.must_select=You must select %1$s player(s).
+
+# - Mayor
+feature.city.mayor.perk.category.military=Military reforms
+feature.city.mayor.perk.category.strategy=Strategy reforms
+feature.city.mayor.perk.category.agricultural=Agricultural reforms
+feature.city.mayor.perk.category.economic=Economic reforms
+feature.city.mayor.perk.category.onirique=Dream Reforms
+feature.city.mayor.perk.none.name=Empty Reform
+feature.city.mayor.perk.fou_de_rage.name=Mad with rage
+feature.city.mayor.perk.fou_de_rage.lore=In your city:Resistance \
+ Outside your city:Strength
+feature.city.mayor.perk.impot.name=Tax Withholding
+feature.city.mayor.perk.impot.lore=Collectors levy tax on players \
+ Fixed amount per attack
+feature.city.mayor.perk.miner.name=Dedicated Minor
+feature.city.mayor.perk.miner.lore=Grants a mining bonus \
+ Permanent speed
+feature.city.mayor.perk.demon_fruit.name=Devil Fruit
+feature.city.mayor.perk.demon_fruit.lore=Increases interaction range \
+ Blocks and entities
+feature.city.mayor.perk.business_man.name=Businessman
+feature.city.mayor.perk.business_man.lore=Increases the bank's interest \
+ Interest bonus
+feature.city.mayor.perk.iron_man.name=Iron in the Blood
+feature.city.mayor.perk.iron_man.lore=A golem defends the mascot in case of attack
+feature.city.mayor.perk.city_hunter.name=Urban Hunter
+feature.city.mayor.perk.city_hunter.lore=Increases your damage against players and monsters \
+ Bonuses outside of opposing cities
+feature.city.mayor.perk.ayweniter.name=Ayweniteur
+feature.city.mayor.perk.ayweniter.lore=Chance of finding Aywenite by mining stone
+feature.city.mayor.perk.gps_tracker.name=GPS tracker
+feature.city.mayor.perk.gps_tracker.lore=Intruders are highlighted in your city \
+ Alert on entry
+feature.city.mayor.perk.symbiosis.name=Symbiosis
+feature.city.mayor.perk.symbiosis.lore=Reduces damage near your pet \
+ 10 block radius
+feature.city.mayor.perk.agricultural_essor.name=Agricultural Boom
+feature.city.mayor.perk.agricultural_essor.lore=Double the harvests during the event \
+ Limited time
+feature.city.mayor.perk.mineral_rush.name=Mining Rush/bold>
+feature.city.mayor.perk.mineral_rush.lore=Double the minerals during the event \
+ Bonuses on rare ores
+feature.city.mayor.perk.military_dissuasion.name=Military Deterrence
+feature.city.mayor.perk.military_dissuasion.lore=Spawn golems in your town \
+ Temporary effect
+feature.city.mayor.perk.idyllic_rain.name=Idyllic rain
+feature.city.mayor.perk.idyllic_rain.lore=Makes it rain Aywenite in your city \
+ Reserved for members
+feature.city.mayor.perk.mascots_friendly.name=Company Mascot
+feature.city.mayor.perk.mascots_friendly.lore=Grants pet level bonuses to members
+feature.city.mayor.perk.great_sleeper.name=Big Sleeper
+feature.city.mayor.perk.great_sleeper.lore=Increases the chance of entering a dream \
+ Significant bonus
+feature.city.mayor.perk.great_dream.name=Big Dreamer
+feature.city.mayor.perk.great_dream.lore=Increases time spent in dreams \
+ Time bonus
+feature.city.mayor.perk.chaos_dream.name=Chaotic Dream
+feature.city.mayor.perk.chaos_dream.lore=Teleport the limbs into the dream \
+ City event
+
+feature.city.menus.common.error=Error of reform
+feature.city.mayor.menu.common.back.name=Back
+feature.city.mayor.menu.common.back.lore=You will return to the previous menu \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.common.more_info.name=More info!
+feature.city.mayor.menu.common.more_info.lore=Learn more about mayors! \
+ The course..., the elections,... \
+ CLICK HERE TO SEE MORE!
+
+feature.city.mayor.label.mayor=mayor
+feature.city.mayor.label.color=color
+feature.city.mayor.label.this_one=this one
+
+feature.city.mayor.error.not_in_city=This object is not in a city
+feature.city.mayor.error.feature_locked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+
+feature.city.mayor.urne.interact.mysterious=*Mysterious object... This must surely be used for elections...*
+feature.city.mayor.urne.interact.not_your_urne=*Mhh... It's not your urn*
+feature.city.mayor.urne.interact.need_members=*you must have at least %1$s members in order to be able to make an election*
+feature.city.mayor.urne.interact.election_already=*The elections have already taken place!*
+feature.city.mayor.urne.interact.no_candidate=*no one showed up! Introduce yourself! /city*
+feature.city.mayor.urne.place.must_be_overworld=You must be in overworld to pose this!
+feature.city.mayor.urne.place.need_city=You must have a city to post this!
+feature.city.mayor.urne.place.must_be_in_city=You need to put this in your city!
+feature.city.mayor.urne.place.require_level=You must be level %1$s of town to place the urn
+feature.city.mayor.urne.place.not_owner=You are not the owner!
+feature.city.mayor.urne.place.already_has_npc=You can't put this down because you already have NPCs
+feature.city.mayor.urne.break.not_owner=You cannot post this because you are not the owner
+
+feature.city.mayor.npc.display.mayor=Mayor %1$s
+feature.city.mayor.npc.display.unknown=Unknown
+feature.city.mayor.npc.display.owner=Owner %1$s
+feature.city.mayor.npc.error.feature_locked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+feature.city.mayor.npc.info.no_mayor_yet=*mhh this city has not yet elected a mayor*
+feature.city.mayor.npc.info.no_election_unlocked=*mhh this city has not yet unblocked the elections*
+feature.city.mayor.npc.move.prompt=*Good morning ? Do you want to move me? Click here!*
+feature.city.mayor.npc.move.hover=Move this NPC
+feature.city.mayor.npc.move.item.lore=Click on where you want to move the NPC
+feature.city.mayor.npc.move.item.name=Location of NPC
+feature.city.mayor.npc.move.interaction.remaining=You have %1$s to select your location
+feature.city.mayor.npc.move.interaction.timeout=You didn't have time to move your NPC
+feature.city.mayor.npc.move.error.outside_city=Cannot put NPC outside your city
+
+feature.city.mayor.menu.more_info.name=Mayors' menu - More info
+feature.city.mayor.menu.more_info.elections.title=Elections - Wednesday
+feature.city.mayor.menu.more_info.reforms.title=Reforms - Thursday
+feature.city.mayor.menu.more_info.elections.lore=All the Wednesdays, THE elections begin \
+ If you have more than %1$s members, \
+ you can elect a mayor for your city \
+ Otherwise, the owner will choose the reforms what he wants!
+feature.city.mayor.menu.more_info.reforms.lore=All the Thursdays, the mayor is elected! \
+ THE reforms chosen by the mayor are applied \
+ You can take a look at /city mayor
+
+feature.city.mayor.menu.owner.name=Mayors' menu - Owner's mandate
+feature.city.mayor.menu.owner.lore.header=Owner of %1$s
+feature.city.mayor.menu.owner.title=Owner %1$s
+feature.city.mayor.menu.mayor.name=Mayors' Menu - Mayor's Mandate
+feature.city.mayor.menu.mayor.lore.header=Mayor of %1$s
+feature.city.mayor.menu.mayor.title=Mayor %1$s
+feature.city.mayor.menu.npc.move.name=Move this NPC
+feature.city.mayor.menu.npc.move.lore=You will be able to move this NPC \
+ CLICK HERE TO CONTINUE
+
+feature.city.mayor.menu.mandate.name=Mayors Menu - Mandate
+feature.city.mayor.menu.mandate.mayor.lore.header=Mayor of %1$s
+feature.city.mayor.menu.mandate.owner.lore.header=Owner of %1$s
+feature.city.mayor.menu.mandate.mayor.title=Mayor %1$s
+feature.city.mayor.menu.mandate.owner.title=Owner %1$s
+feature.city.mayor.menu.mandate.law.lore=You are the %1$s! \
+
You can change the laws and launch events! \
+
CLICK HERE TO OPEN A MENU
+feature.city.mayor.menu.mandate.law.name=The Laws
+
+feature.city.mayor.command.warp.not_set.phase2=The city warp is not yet defined! Ask the mayor current to put one! \
+ *via /city setwarp or with the menu of laws*
+feature.city.mayor.command.warp.not_set.no_mayor=The city warp is not yet defined! You have to wait until a mayor is elected to put a warp
+
+feature.city.mayor.warp.error.not_mayor=You are not the mayor of the city
+feature.city.mayor.warp.interaction.remaining=You have %1$s to select your spawn point
+feature.city.mayor.warp.interaction.timeout=You didn't have time to place your warp
+feature.city.mayor.warp.error.outside_city=Can't warp here because it's not in your city
+feature.city.mayor.warp.success=You just put the warp from your city in: \
+ -x=%1$s \
+ -y=%2$s \
+ -z=%3$s
+feature.city.mayor.warp.wand.lore=Click on where you want to put the warp
+feature.city.mayor.warp.wand.name=Selection of warp
+
+feature.city.mayor.broadcast.phase1= \
+ \
+ MAYOR!The elections are open! \
+ Introduce yourself, vote for mayors,... \
+ See if you have enough members! \
+ \
+
+feature.city.mayor.broadcast.phase2= \
+ \
+ MAYOR!Your reforms are active! \
+ Make your strategies, farm, and lots of other things! \
+ \
+
+
+feature.city.mayor.menu.law.name=Menu of laws
+feature.city.mayor.menu.law.pvp.name.disable=DisablePVP
+feature.city.mayor.menu.law.pvp.name.enable=EnablePVP
+feature.city.mayor.menu.law.pvp.lore.active=This lawactivePVP throughoutcity
+feature.city.mayor.menu.law.pvp.lore.inactive=This lawdisabledPVP throughoutcity
+feature.city.mayor.menu.law.pvp.lore.members=between the members!
+feature.city.mayor.menu.law.pvp.click.enable=CLICK HERE TO ACTIVATE PVP
+feature.city.mayor.menu.law.pvp.click.disable=CLICK HERE TO DISABLE PVP
+feature.city.mayor.menu.law.pvp.message.enable=You have activatedPVP in your city
+feature.city.mayor.menu.law.pvp.message.disable=You have disabledPVP in your city
+feature.city.mayor.menu.law.warp.name=Change sound warp
+feature.city.mayor.menu.law.warp.lore.unset=This lawis not effective! \
+ You need to choose a location where members can \
+ arrive
+feature.city.mayor.menu.law.warp.lore.set=Members can teleport to your warp! \
+ Here is the position of warp :
+feature.city.mayor.menu.law.warp.lore.x=-x=%1$s
+feature.city.mayor.menu.law.warp.lore.y=-y=%1$s
+feature.city.mayor.menu.law.warp.lore.z=-z=%1$s
+feature.city.mayor.menu.law.warp.click=CLICK HERE TO CHOOSE A LOCATION
+feature.city.mayor.menu.law.announce.name=Make an announcement
+feature.city.mayor.menu.law.announce.lore=This lawallows you to send a message throughout the city!
+feature.city.mayor.menu.law.announce.click=CLICK HERE TO WRITE THE MESSAGE
+feature.city.mayor.menu.law.announce.prompt=You can enter your message that you want to spread throughout the city! Type cancel to cancel the action
+feature.city.mayor.menu.law.announce.header=-- Mayor's announcement --
+feature.city.mayor.menu.law.announce.success=You sent the message to everyone in town
+feature.city.mayor.menu.law.cooldown=Cooldown: %1$s
+feature.city.mayor.menu.law.perk_event.click=CLICK HERE TO USE THE REFORM
+feature.city.mayor.menu.law.perk_event.wait=You must wait before you can use this reform
+feature.city.mayor.menu.law.perk_event.impot.trigger=THE mayor triggered the Tax Withholding !
+feature.city.mayor.menu.law.perk_event.agricultural.trigger=THE mayor triggered theAgricultural Boom !
+feature.city.mayor.menu.law.perk_event.mineral.trigger=THE mayor triggered the Mining Rush !
+feature.city.mayor.menu.law.perk_event.military.trigger=THE mayor triggered the Military Deterrence !
+feature.city.mayor.menu.law.perk_event.idyllic.trigger=THE mayor triggered the Idyllic rain !
+feature.city.mayor.menu.law.perk_event.dream.trigger=THE mayor triggered the Chaotic Dream !
+
+feature.city.mayor.menu.vote.name=Mayors' menu - Votes
+feature.city.mayor.menu.vote.lore.header=Candidate for mayor of %1$s
+feature.city.mayor.menu.vote.lore.votes=Votes: %1$s
+feature.city.mayor.menu.vote.lore.progress=[%1$s](%2$s%%)
+feature.city.mayor.menu.vote.lore.click=CLICK HERE TO VOTE
+feature.city.mayor.menu.vote.mayor.title=Mayor %1$s
+feature.city.mayor.menu.vote.message.already_voted=You have already voted for this mayor
+feature.city.mayor.menu.vote.message.voted=You voted for the %1$s
+
+feature.city.mayor.menu.election.name=Elections menu
+feature.city.mayor.menu.election.item.name=The elections
+feature.city.mayor.menu.election.item.lore.voted=The elections are open! \
+ You can change your vote! \
+ \
+ Current vote: %1$s \
+ Closure in %2$s \
+ \
+ CLICK HERE TO ACCESS THE MENU
+feature.city.mayor.menu.election.item.lore.not_voted=The elections are open! \
+ Choose the mayor you like! \
+ \
+ Closure in %1$s \
+ \
+ CLICK HERE TO REGISTER
+feature.city.mayor.menu.election.error.no_candidate=There are no volunteers to be mayor
+feature.city.mayor.menu.election.candidature.lore.already=You have already presented ! \
+ Change your color and watch the reforms that you have chosen \
+ \
+ CLICK HERE TO ACCESS THE MENU
+feature.city.mayor.menu.election.candidature.lore.new=You can register to be mayor! \
+ Select your reforms and your color! \
+ \
+ CLICK HERE TO REGISTER
+feature.city.mayor.menu.election.candidature.name=Your candidacy
+feature.city.mayor.menu.election.owner_reform.name=Choice of one reform
+feature.city.mayor.menu.election.owner_reform.lore.chosen=You have already chosen your reform !
+feature.city.mayor.menu.election.owner_reform.lore.choice=You are the owner of the city ! \
+ You can choose a event reform ! \
+ \
+ CLICK HERE TO CHOOSE THE REFORM
+
+feature.city.mayor.menu.create.name=Mayors' menu - Creation
+feature.city.mayor.menu.create.perk.choose.lore=Choose your reform that you want to see! \
+ \
+ CLICK HERE TO CHOOSE THE REFORM
+feature.city.mayor.menu.create.perk.change.lore=CLICK HERE TO CHANGE THE REFORM
+feature.city.mayor.menu.create.back.election=You will return to the elections menu \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.create.back.city=You will return to the menu of your city \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.create.confirm.name.ready=Confirm
+feature.city.mayor.menu.create.confirm.name.blocked=Confirm
+feature.city.mayor.menu.create.confirm.lore.ready=You have chosen all the reforms necessary \
+ \
+ CLICK HERE TO CONTINUE THE APPLICATION
+feature.city.mayor.menu.create.confirm.lore.blocked=You didn't choose all the reforms necessary
+feature.city.mayor.menu.create.confirm.owner.success=You added the Reformation: %1$s
+
+feature.city.mayor.menu.modify.name=Mayors' menu - Modification
+feature.city.mayor.menu.modify.color.lore=You can change the color of your name! \
+ \
+ CLICK HERE TO CHANGE COLOR
+feature.city.mayor.menu.modify.color.name=Change your %1$s
+feature.city.mayor.menu.modify.back.lore=You will return to the menu of your city \
+ CLICK HERE TO CONFIRM
+
+feature.city.mayor.menu.color.name=Mayors Menu - Color
+feature.city.mayor.menu.color.option.lore=Your name will be displayed in %1$s \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.color.option.name=Put some %1$s
+feature.city.mayor.menu.color.confirm.lore=You will introduce yourself as mayor of %1$s
+feature.city.mayor.menu.color.confirm.final=NO RETURN POSSIBLE!
+feature.city.mayor.menu.color.confirm.cancel=Do not present yourself as Mayor of %1$s
+feature.city.mayor.menu.color.candidate.announce=%1$s introduced himself as mayor!
+feature.city.mayor.menu.color.candidate.success=You introduced yourself with success!
+feature.city.mayor.menu.color.error.no_mayor=Your city has no mayor!
+feature.city.mayor.menu.color.change.success=You changed your %1$s in %2$s
+feature.city.mayor.menu.color.change.confirm=Change your %1$s in %2$s
+feature.city.mayor.menu.color.change.cancel=Don't change it %1$s in %2$s
+
+feature.city.mayor.menu.perk_choice.name=Mayors' menu - Reforms
+feature.city.mayor.menu.perk_choice.locked=You must be level %1$s to unlock this
+feature.city.mayor.menu.perk_choice.error.event_duplicate=You cannot choose 2 event-type reforms!
+feature.city.mayor.menu.perk_choice.button.back=Go back
+feature.city.mayor.menu.perk_choice.button.prev=Previous page
+feature.city.mayor.menu.perk_choice.button.next=Next page
+
+feature.city.mayor.perk.basic.ayweniter.blessing=*the blessing!*
+feature.city.mayor.perk.basic.iron_blood.tremor=*tremor* Something seems to be happening...
+feature.city.mayor.perk.basic.gps_tracker.entered=You just entered the city %1$s who has the GPS Tracker ! Be on your guard.
+feature.city.mayor.perk.event.agricultural.start=The Essor Agricole event reform has been launched and all that remains is %1$s
+feature.city.mayor.perk.event.agricultural.end=The Essor Agricole event reform is complete!
+feature.city.mayor.perk.event.mineral.start=The Ruée Minière event reform has been launched and all that remains is %1$s
+feature.city.mayor.perk.event.mineral.end=The Mining Rush event reform is complete!
+feature.city.mayor.perk.event.impot.zombie.name=Servant of %1$s
+feature.city.mayor.perk.event.impot.victim.lucky=*grr you're lucky!*
+feature.city.mayor.perk.event.impot.victim.lost=You lost %1$s because of the mayor %2$s
+feature.city.mayor.perk.event.impot.mayor.collected=You have just taken %1$s has %2$s
+feature.city.mayor.perk.event.impot.zombies.done=*the zombies got everything they wanted*
+feature.city.mayor.perk.event.military.golem.name=Defendant of %1$s
+
+feature.city.mayor.admin.changeelection.usage=/adminmayor changeelection cityUUID electionType
+feature.city.mayor.admin.changeelection.success=You just put: %1$s in the city %2$s
+
+# ** CITY LEVELS **
+feature.city.levels.menu.title=Cities Menu - Levels
+feature.city.levels.menu.requirements.header=Required :
+feature.city.levels.menu.rewards.header=Rewards:
+feature.city.levels.menu.rewards.item=Awards
+feature.city.levels.menu.status.unlocked=UNBLOCKED
+feature.city.levels.menu.unlock.remaining=He's staying %1$s unlocking
+feature.city.levels.menu.unlock.duration=%1$s unlocking
+feature.city.levels.menu.click.start_upgrade=CLICK HERE TO START IMPROVEMENT
+feature.city.levels.menu.click.contribute=CLICK HERE TO CONTRIBUTE
+feature.city.levels.menu.deposit.click_one=CLICK TO DEPOSIT A
+feature.city.levels.menu.deposit.click_all=SHIFT-CLICK TO DROP ALL
+
+feature.city.levels.rewards.none=None
+feature.city.levels.rewards.unlock=Unblocked %1$s
+feature.city.levels.rewards.list.separator=,
+feature.city.levels.rewards.list.last_separator=And
+feature.city.levels.rewards.feature.chest=/city chest
+feature.city.levels.rewards.feature.city_bank=/city bank
+feature.city.levels.rewards.feature.player_bank=/bank
+feature.city.levels.rewards.feature.notation=/city notation
+feature.city.levels.rewards.feature.rank=/city ranks
+feature.city.levels.rewards.feature.mayor=/city mayor
+feature.city.levels.rewards.feature.perk_agricultural=agricultural reforms
+feature.city.levels.rewards.feature.perk_economy=economic reforms
+feature.city.levels.rewards.feature.type_war=the type of war city
+feature.city.levels.rewards.feature.war=/war
+feature.city.levels.rewards.feature.perk_dream=dreamlike reforms
+feature.city.levels.rewards.feature.perk_military=military reforms
+feature.city.levels.rewards.feature.perk_strategy=strategy reforms
+feature.city.levels.rewards.mascot_level_max=Level %1$s maximum for the mascot
+feature.city.levels.rewards.member_limit=%1$s maximum members
+feature.city.levels.rewards.rank_limit=%1$s maximum grades
+feature.city.levels.rewards.chest_page_limit=%1$s maximum vault pages
+feature.city.levels.rewards.player_bank_limit=Limit to %1$s money in the %2$s
+feature.city.levels.rewards.player_bank_label=personal bank
+feature.city.levels.rewards.interest=+ %1$s%% interest
+feature.city.levels.rewards.mascot_skin.single=the mascot %1$s
+feature.city.levels.rewards.mascot_skin.multiple=the mascots %1$s
+
+feature.city.levels.requirements.deposit=Deposit %1$s %2$s
+feature.city.levels.requirements.deposit.progress=Deposit %1$s %2$s (%3$s/%1$s)
+feature.city.levels.requirements.deposit.description=CLICK HERE TO DEPOSIT
+feature.city.levels.requirements.deposit.success=You filed %1$s %2$s
+feature.city.levels.requirements.command=Execute %1$s times %2$s
+feature.city.levels.requirements.command.progress=Execute %1$s times %2$s (%3$s/%1$s)
+
+feature.city.levels.upgrade.broadcast=The city %1$s has moved to the Level %2$s ! Maximum GG!
+feature.city.levels.admin.skip_upgrade.success=Skip Level Upgrade
+feature.city.levels.admin.set_level.success=Level %1$s applied to the city
+feature.city.levels.level_1.name=Level 1
+feature.city.levels.level_1.description=Urban era
+feature.city.levels.level_2.name=Level 2
+feature.city.levels.level_2.description=The foundations
+feature.city.levels.level_3.name=Level 3
+feature.city.levels.level_3.description=Undeveloped city
+feature.city.levels.level_4.name=Level 4
+feature.city.levels.level_4.description=Democracy
+feature.city.levels.level_5.name=Level 5
+feature.city.levels.level_5.description=Economic development
+feature.city.levels.level_6.name=Level 6
+feature.city.levels.level_6.description=Capital
+feature.city.levels.level_7.name=Level 7
+feature.city.levels.level_7.description=Kingdom?
+feature.city.levels.level_8.name=Level 8
+feature.city.levels.level_8.description=Empire?
+feature.city.levels.level_9.name=Level 9
+feature.city.levels.level_9.description=Military power
+feature.city.levels.level_10.name=Level 10
+feature.city.levels.level_10.description=Metropolis
+
+feature.city.levels.rewards.free_claims=%1$s claimsfree
+
+feature.city.levels.requirements.claims=To have %1$s claims
+feature.city.levels.requirements.claims.progress=To have %1$s claims (%2$s/%1$s)
+feature.city.levels.requirements.setwarp=Ask a /city setwarp
+feature.city.levels.requirements.bank=To have %1$s in the bank
+feature.city.levels.requirements.bank.progress=To have %1$s in the bank (%2$s/%1$s)
+feature.city.levels.requirements.members=To have %1$s members
+feature.city.levels.requirements.members.progress=To have %1$s members (%2$s/%1$s)
+feature.city.levels.requirements.mascot_level=Have the mascot level %1$s
+feature.city.levels.requirements.notation.receive=Receive a rating
+feature.city.levels.requirements.ranks=To have %1$s grades (/city rank)
+feature.city.levels.requirements.ranks.progress=To have %1$s grades (%2$s/%1$s)
+feature.city.levels.requirements.craft_urne=Craft an urn
+feature.city.levels.requirements.place_urne=Place the urn
+feature.city.levels.requirements.notation.points=Minimum credit %1$s points on one of the ratings
+feature.city.levels.requirements.war.count=Have done %1$s wars
+feature.city.levels.requirements.war.count.progress=Have done %1$s wars (%2$s/%1$s)
+feature.city.levels.requirements.war.win=Win a war
+feature.city.levels.requirements.war.win.count=Earn %1$s wars
+feature.city.levels.requirements.war.win.count.progress=Earn %1$s wars (%2$s/%1$s)
+feature.city.levels.requirements.notation.top10=Be in the top 10 of the ratings on one of the ratings
diff --git a/src/main/resources/translations/en_GB/commands.properties b/src/main/resources/translations/en_GB/commands.properties
index 9c99899e7..cfb9370ba 100644
--- a/src/main/resources/translations/en_GB/commands.properties
+++ b/src/main/resources/translations/en_GB/commands.properties
@@ -1,2 +1,68 @@
-command.fun.playtime.success=You have %s of playtime.
+command.fun.playtime.success=You have %1$s of playing time.
+command.fun.diceroll.success=The result is: %1$s
+command.admin.freeze.title=You are frozen
+command.admin.freeze.subtitle=If you log out you will be banned
+command.admin.freeze.player_freezed=You have been freezing
+command.admin.freeze.player_not_found=Player not found
+command.admin.freeze.player_unfreeze=You have unfreeze %1$s
+command.admin.freeze.target_unfreeze=You've been unfreeze
+command.admin.freeze.player_freeze=You have frozen %1$s
+command.admin.freeze.target_freeze=You have been freezing
+command.admin.freeze.quit_reason.kicked=The player was kicked
+command.admin.freeze.quit_reason.timeout=The player was timed out
+command.admin.freeze.quit_reason.error=The player had a connection error
+command.admin.freeze.quit_reason.default=The player has been disconnected
+
+command.debug.chronometer.cant_90s_chronometer=Do not exceed more than 90s for debugging
+
+command.debug.cooldown.success=Success, cooldown is activated
+command.debug.cooldown.error=Error, you can redo the order
+
+command.registry.custom_ambient.apply.null=Error, the id entered is null
+command.registry.custom_ambient.apply.success=The atmosphere %1$s has been correctly applied to %2$s !
+command.registry.custom_ambient.reset.player_havnt_ambient=Error, the player has no atmosphere applied
+command.registry.custom_ambient.reset.success=The ambiance was correctly removed on %1$s !
+
+command.registry.custom_mobs.summon.not_found=This mob does not exist
+
+command.registry.custom_items_debug.test=Test %1$s: %2$s
+command.registry.custom_items_debug.test.passed=pass
+command.registry.custom_items_debug.test.failed=failed
+command.registry.custom_items_debug.hand.empty=You don't hold anything in your hand.
+command.registry.custom_items_debug.hand.not_custom=The item in hand is not a custom item.
+command.registry.custom_items_debug.list.title=List of custom items:
+command.registry.custom_items_debug.list.item=- %1$s
+command.registry.custom_items_debug.get.not_found=This item does not exist.
+
+command.utils.cooldowns.no_cooldown=You have no active cooldown.
+command.utils.cooldowns.list_cooldowns=List of active cooldowns:
+command.utils.cooldowns.list=- %1$s : %2$s
+
+command.utils.restart.cannot_open_city_chest=The vault is inaccessible during a scheduled reboot
+command.utils.restart.redem=🔄 Server restart 🔄 \
+
+command.utils.restart.server_restarting=The server is restarting. \
+
+command.utils.restart.thanks=Thank you for your patience!
+command.utils.restart.restarting_in=Restarting the server in %1$s second%2$s
+command.utils.restart.restart=Reboot
+command.utils.restart.in=%1$s second%2$s
+
+command.utils.rtp.must_wait=You have to wait before you can rtp (%3$s)
+command.utils.rtp.fail=RTP failed. Try again later...
+command.utils.rtp.try=RTP: Attempt %1$s/%2$s Failure...
+command.utils.rtp.success=You have been teleported to X: %1$s, Y: %2$s, Z: %3$s
+
+command.utils.setspawn.success=You changed the spawn point to X: %1$s, Y: %2$s, Z: %3$s
+
+command.utils.spawn.got_sent=You have been sent to spawn
+command.utils.spawn.have_sent=You sent %1$s at spawn
+command.utils.spawn.have_sent_by=You were sent to spawn by %1$s
+
+command.utils.socials.hover_access=Click to access
+command.utils.socials.discord=Discord:
+command.utils.socials.site=Site:
+command.utils.socials.wiki=Wiki:
+command.utils.socials.github=Github:
+command.utils.socials.blog=Blog:
diff --git a/src/main/resources/translations/en_GB/contest.properties b/src/main/resources/translations/en_GB/contest.properties
new file mode 100644
index 000000000..2b11911f2
--- /dev/null
+++ b/src/main/resources/translations/en_GB/contest.properties
@@ -0,0 +1,128 @@
+feature.events.contest.vote.menu.title=Contests Menu - Voting
+feature.events.contest.vote.lore.vote_team=Vote for the team %1$s
+feature.events.contest.vote.lore.win=Win it by depositing the most points
+feature.events.contest.vote.lore.warning_choice=ATTENTION ! The choice is final!
+feature.events.contest.vote.lore.voted_for=You voted for the team %1$s
+feature.events.contest.vote.lore.win_exclaim=Win it by depositing the most points!
+feature.events.contest.vote.lore.lose_team=Make the team lose %1$s
+feature.events.contest.vote.lore.lose_detail=By bringing in as many points as you can!
+feature.events.contest.vote.info.lore=Learn more about contests!\
+ The process, the results, ...\
+ CLICK HERE TO SEE MORE!
+feature.events.contest.vote.confirm.join.lore=You will join %1$s\
+ ATTENTION ! You will not be able to change your choice!
+feature.events.contest.vote.confirm.cancel.lore=You will cancel your choice: %1$s\
+ ATTENTION ! You will not be able to change your choice!
+feature.events.contest.vote.joined=You have successfully joined: %1$s
+feature.events.contest.vote.info.name=More info!
+feature.events.contest.team.label=The Team %1$s
+feature.events.contest.trade.menu.title=Contests Menu - Exchanges
+feature.events.contest.trade.main.name=The exchanges
+feature.events.contest.trade.main.lore=Sell as many resources as possible\
+ Against contest shells\
+ To win the %1$s
+feature.events.contest.trade.info.lore=Learn more about contests!\
+ The process, the results, ...\
+ CLICK HERE TO SEE MORE!
+feature.events.contest.trade.offer.lore=Sell %1$s For %2$s shell(s)\
+ LEFT CLICK TO SELL ONCE\
+ SHIFT-LEFT-CLICK TO SELL ALL THIS RESOURCE
+feature.events.contest.trade.unavailable=Functionality blocked. Contact the administration.
+feature.events.contest.trade.success=You exchanged %1$s %2$s against %3$s contest shell(s)
+feature.events.contest.trade.not_enough=You don't have enough of this resource to exchange it!
+feature.events.contest.phase.vote.name=The votes
+feature.events.contest.phase.vote.lore=Every Friday, the contest begins\
+ And the votes open, and you have to choose\
+ Between 2 camps, an atmosphere is created in the spawn...
+feature.events.contest.phase.trade.name=The confrontation
+feature.events.contest.phase.trade.lore=Night falls on the spawn for 2 days\
+ Let the party begin!\
+ Trades are available\
+ Giving away contest shells!
+feature.events.contest.phase.end.name=The results
+feature.events.contest.phase.end.lore=Sunrise over the spawn!\
+ The results fall, and a camp\
+ will be a winner. And rewards will be awarded\
+ to everyone.
+feature.events.contest.command.no_event=There is no Contest! Come back in %1$s days).
+feature.events.contest.command.ended_phase=The Contest is in its finished phase, please contact the staff.
+feature.events.contest.command.setcontest.not_active=You cannot define a contest when it is not active
+feature.events.contest.command.setcontest.started=You cannot define a contest when it has started
+feature.events.contest.command.setcontest.saved=The Contest: %1$s VS %2$s has been successfully saved\
+Please wait for the cached data to refresh.
+feature.events.contest.command.setcontest.invalid_color=/contest setcontest <camp1> <color1> <camp2> <color2> and color must be valid
+feature.events.contest.command.addpoints.not_started=You cannot give points when the contest has not started
+feature.events.contest.command.addpoints.not_registered=You cannot give points to this player because he did not register
+feature.events.contest.command.addpoints.invalid=You cannot give negative points or equal to 0
+feature.events.contest.command.addpoints.success=You added %1$s point(s) to %2$s
+feature.events.contest.more_info.title=Contests Menu - More info
+feature.events.contest.more_info.vote.name=Votes - Friday
+feature.events.contest.more_info.trade.name=The clash - Saturday-Sunday
+feature.events.contest.more_info.end.name=Results - Monday
+feature.events.contest.broadcast.phase1= \
+ \
+ CONTEST! Votes are open!\
+ *we meet at the spawn to be able to vote or /contest...*\
+ \
+
+feature.events.contest.broadcast.phase2= \
+ \ CONTEST! The contributions have started!\
+ Exchange resources for Contest Shells. Collect as many as possible and place them\
+ via the contest terminal or /contest\
+ \
+
+feature.events.contest.broadcast.phase3= \
+ \ CONTEST! Time over!\
+ End of the contest, find your rewards and the results of this Contest\
+ in book form\
+ */contest pour see when the next contest is coming*\
+ \
+
+feature.events.contest.contribution.title=Contests Menu - Contributions
+feature.events.contest.contribution.lore.contribute=Give your contest shells\
+ To win your %1$s\
+ Click to pour all your shellfish
+feature.events.contest.contribution.lore.trade=Trade for contest shells\
+ Useful to win your %1$s\
+ Click to access the exchanges menu
+feature.events.contest.contribution.lore.rank=%1$s\
+ Progress : %2$s/%3$s\
+ INCREASE TITLE TO GET BETTER REWARDS
+feature.events.contest.contribution.title.name=Your title
+feature.events.contest.contribution.button.name=Contribute for the %1$s
+feature.events.contest.contribution.unavailable=Functionality blocked. Please contact the administration
+feature.events.contest.contribution.success=You filed %1$s contest shell(s) for your team!
+feature.events.contest.contribution.no_shells=You don't have a contest shell
+feature.events.contest.book.title=The results of the contest
+feature.events.contest.book.author=The contests
+feature.events.contest.book.lore=%1$s VS %2$s\
+ Open this book to learn more!
+feature.events.contest.book.page.global=Overall statistics\
+ Winner: %1$s\
+ Voting rate: %2$s\
+ Point rate: %3$s\
+ \
+ Loser: %4$s\
+ Voting rate: %5$s\
+ Point rate: %6$s\
+ Inferiority multiplier: x%7$s\
+ Next page: ranking of the 10 best contributors
+feature.events.contest.book.page.ranking.title=The ranking of the contest (up to 10th)
+feature.events.contest.mail.received=You have received the contest letter
+feature.events.contest.mail.click=Click here
+feature.events.contest.mail.hover=Open mailbox
+feature.events.contest.mail.open_mailbox= to open the mailbox
+feature.events.contest.book.page.personal=Personal statistics\
+ Your side: %1$s\
+ Your title on the contest: %2$s\
+ Your rank in the contest: #%3$s\
+ Points submitted: %4$s
+feature.events.contest.book.page.rewards.title=Awards
+feature.events.contest.book.page.rewards.money.prefix=\
++
+feature.events.contest.book.page.rewards.money.suffix=$
+feature.events.contest.book.page.rewards.aywenite.prefix=\
++
+feature.events.contest.book.page.rewards.aywenite.suffix= of Aywenite
+feature.events.contest.book.page.rewards.boost.prefix=\
+Boost
\ No newline at end of file
diff --git a/src/main/resources/translations/en_GB/core.properties b/src/main/resources/translations/en_GB/core.properties
new file mode 100644
index 000000000..f89d392d1
--- /dev/null
+++ b/src/main/resources/translations/en_GB/core.properties
@@ -0,0 +1,42 @@
+core.player.death.message=You just died with %1$s, you lost %2$s\n*consider putting your money in the bank*
+
+core.player.join.welcome=Welcome to OpenMC!
+core.player.join.friend_online=Your friend %1$s logged in
+core.player.join.quest_reward=You have %1$s Pending quest reward(s).
+core.player.join.quest_reward_click=Click here to collect them.
+
+core.player.quit.friend_offline=Your friend %1$s disconnected
+
+core.player.tpa.expired_target=The request for teleportation %1$s was canceled because he disconnected
+core.player.tpa.expired_requester=Your teleport request to %1$s was canceled because he disconnected
+
+core.color.name.black=Black
+core.color.name.dark_blue=Dark blue
+core.color.name.dark_green=Dark green
+core.color.name.dark_aqua=Dark Aqua
+core.color.name.dark_red=Dark red
+core.color.name.dark_purple=Purple
+core.color.name.gold=Orange
+core.color.name.gray=Gray
+core.color.name.dark_gray=Dark gray
+core.color.name.blue=Blue
+core.color.name.green=Light green
+core.color.name.aqua=Light blue
+core.color.name.red=Red
+core.color.name.light_purple=Pink
+core.color.name.yellow=YELLOW
+core.color.name.white=White
+core.color.name.none=None
+
+core.date.relative.just_now=Right now
+core.date.relative.minute=There is %1$s minute
+core.date.relative.minutes=There is %1$s minutes
+core.date.relative.hour=There is %1$s hour
+core.date.relative.hours=There is %1$s hours
+core.date.relative.day=There is %1$s day
+core.date.relative.days=There is %1$s days
+core.date.relative.absolute=THE %1$s has %2$s
+
+
+
+
diff --git a/src/main/resources/translations/en_GB/credits.properties b/src/main/resources/translations/en_GB/credits.properties
new file mode 100644
index 000000000..b21828181
--- /dev/null
+++ b/src/main/resources/translations/en_GB/credits.properties
@@ -0,0 +1,46 @@
+feature.credits.menu.title=Server credits
+feature.credits.menu.lore.developers=Developer(s): %1$s
+feature.credits.menu.lore.graphists=Graphic designer(s): %1$s
+feature.credits.menu.lore.builders=Builder(s): %1$s
+feature.credits.menu.close=Close menu
+feature.credits.feature.adminshop=Adminshop
+feature.credits.feature.animations=Entertainment
+feature.credits.feature.cube=The Cube
+feature.credits.feature.city=Cities
+feature.credits.feature.dream=The Dimension of Dreams
+feature.credits.feature.dream_milestone=The Milestone of Dreams
+feature.credits.feature.mascots=Mascots
+feature.credits.feature.mayor=The Mayors
+feature.credits.feature.city_milestone=The Cities Milestone
+feature.credits.feature.war=Wars
+feature.credits.feature.notation=Ratings
+feature.credits.feature.rank=The Ranks
+feature.credits.feature.contest=The Contests
+feature.credits.feature.weekly_events=Weekly Events
+feature.credits.feature.holograms=Holograms
+feature.credits.feature.economy=Economy
+feature.credits.feature.friends=The friend system
+feature.credits.feature.homes=The Home System
+feature.credits.feature.leaderboard=Rankings
+feature.credits.feature.mailbox=The Mailbox
+feature.credits.feature.mainmenu=The Main Menu
+feature.credits.feature.milestones=The Milestones
+feature.credits.feature.privatemessage=Private messages
+feature.credits.feature.quest=Quests
+feature.credits.feature.settings=Settings
+feature.credits.feature.tickets=V1 Tickets
+feature.credits.feature.tpa=The Tpa
+feature.credits.feature.rtp=The RTP
+feature.credits.feature.versionning=Versioning
+feature.credits.feature.omcregistry=WTO Registers
+feature.credits.feature.customitems=Custom Items
+feature.credits.feature.customlootbox=Custom Lootboxes
+feature.credits.feature.chronometer=Stopwatch
+feature.credits.feature.cooldown=Cooldown
+feature.credits.feature.menu_lib=Menu System
+feature.credits.feature.packet_menu_lib=Packet Menu System
+feature.credits.feature.errorhandler=The error handling system
+feature.credits.feature.unittest=Unit tests
+feature.credits.feature.orm=Database system
+
+
diff --git a/src/main/resources/translations/en_GB/cube.properties b/src/main/resources/translations/en_GB/cube.properties
new file mode 100644
index 000000000..4877c656e
--- /dev/null
+++ b/src/main/resources/translations/en_GB/cube.properties
@@ -0,0 +1,14 @@
+feature.cube.bossbar.title=The Cube
+feature.cube.command.start_shock=Electro-magnetic shock launched
+feature.cube.command.start_bubble=Corrupted bubble launched
+feature.cube.command.stop_shock=Electro-magnetic shock stopped
+feature.cube.command.stop_bubble=Corrupt bubble stopped
+feature.cube.command.reproduce=Reproduction of the cube launched!
+feature.cube.command.reproduce_force.unavailable=Reproduction is not in progress, use %1$s
+feature.cube.command.reproduce_force.success=Forced reproduction of the cube!
+feature.cube.command.invalid_format=Invalid format!
+feature.cube.command.world_not_found=World not found
+feature.cube.command.invalid_coords=Invalid coordinates
+feature.cube.command.not_found=No cubes found
+feature.cube.command.not_cube=It's not a cube
+
diff --git a/src/main/resources/translations/en_GB/dailyevents.properties b/src/main/resources/translations/en_GB/dailyevents.properties
new file mode 100644
index 000000000..610370f93
--- /dev/null
+++ b/src/main/resources/translations/en_GB/dailyevents.properties
@@ -0,0 +1,102 @@
+feature.dailyevents.bloodynight.name=Bloody Night
+feature.dailyevents.goldenharvest.name=Golden Harvest
+feature.dailyevents.miraculousfishing.name=Miraculous fishing
+
+feature.dailyevents.bloodynight.lore=The night remains to be bloody... \
+ Protect yourself, fight, you will experience different waves \
+ and you will surely have a big boss to beat with several
+feature.dailyevents.goldenharvest.lore=It risks being sporty \
+ Expect farms to be running at full capacity! \
+ Benefit from several new resources and many surprises
+feature.dailyevents.miraculousfishing.lore=Live a great fishing session ! \
+ Be careful Sea Monsters we will wait for you impatiently \
+ for you to jump on! \
+ But you risk having several good surprises if you are lucky
+
+feature.dailyevents.bloodynight.toast.start=There Bloody Night has started!
+feature.dailyevents.bloodynight.toast.end=The ordeal of the Bloody Night stopped
+
+feature.dailyevents.goldenharvest.toast.start=ThereGolden Harvestis coming to your barns!
+feature.dailyevents.goldenharvest.toast.end=ThereGolden Harvesthas stopped!
+
+feature.dailyevents.miraculousfishing.toast.start=ThereMiraculous fishingis open!
+feature.dailyevents.miraculousfishing.toast.end=ThereMiraculous fishingleft
+
+feature.dailyevents.toast.beginning_event_in_world=An event will begin in your world in %1$ss!
+feature.dailyevents.toast.beginning_event_out_world=An event will start in %1$ss!
+
+feature.dailyevents.broadcast.soon=*an event begins to come closer to our world...*
+
+feature.dailyevents.miraculousfishing.broadcast.start= \
+ \
+ MIRACLE FISHING! The big session has begun!\
+ *take out your fishing rod and discover the mysteries of the lakes*\
+ \
+ Effects:\
+ + %1$s%fishing speed\
+ +Special and rare loots\
+ +Sea Monsters\
+ \
+
+feature.dailyevents.miraculousfishing.broadcast.end= \
+ \
+ MIRACLE FISHING! The blessing is over! \
+ *rejoice in your captures!*\
+ \
+
+
+feature.dailyevents.bloodynight.broadcast.start= \
+ \
+ BLOODY NIGHT! The bloodbath begins!\
+ *take out your weapons and fight the waves of monsters*\
+ \
+
+feature.dailyevents.bloodynight.broadcast.end= \
+ \
+ BLOODY NIGHT! The calamity has ended! \
+ *return to a calm and peaceful world*\
+ \
+
+
+feature.dailyevents.goldenharvest.broadcast.start= \
+ \
+ GOLDEN HARVEST! Crops are now blessed!\
+ *find crop mutations, and other surprises...*\
+ \
+
+feature.dailyevents.goldenharvest.broadcast.end= \
+ \
+ GOLDEN HARVEST! Crop productivity stops! \
+ *store, sell your resources that you could farm with*\
+ \
+
+
+# ** Pêche miraculeuse **
+feature.dailyevents.miraculousfishing.lootbox.fishing_furniture.name=Fishing equipment box
+feature.dailyevents.miraculousfishing.lootbox.rare_fishing_treasure.name=Rare fishing treasure
+feature.dailyevents.miraculousfishing.lootbox.epic_fishing_treasure.name=Epic Fishing Treasure
+feature.dailyevents.miraculousfishing.lootbox.legendary_fishing_treasure.name=Legendary fishing treasure
+
+feature.dailyevents.miraculousfishing.loot_table.get=You fished %1$s objects!
+feature.dailyevents.miraculousfishing.loot_table.get.double_hook=*Double grip applied*
+feature.dailyevents.miraculousfishing.loot_table.basic_fishing=Basic Fishing Loot
+feature.dailyevents.miraculousfishing.loot_table.miraculous_fishing=Miraculous Catch Loots
+feature.dailyevents.miraculousfishing.loot_table.sea_creature=Sea Monsters
+
+feature.dailyevents.miraculousfishing.eat_kebab_fermented.smelt=Ugh, it stinks!
+feature.dailyevents.miraculousfishing.eat_kebab_fermented.boat=Your boat has sunk.
+feature.dailyevents.miraculousfishing.eat_kebab_fermented.broadcast=[has] PROUT !!! %1$s has farted. Yuck !
+
+feature.dailyevents.miraculousfishing.menu.info.fishing_speed.name=Fishing Speed Boost
+feature.dailyevents.miraculousfishing.menu.info.fishing_speed.lore=Fishing speed is reduced by %1$s%
+
+feature.dailyevents.miraculousfishing.menu.loot_info.sea_creature=Sea Monster Loots
+feature.dailyevents.miraculousfishing.menu.info.sea_creature.name=Sea Monsters
+feature.dailyevents.miraculousfishing.menu.info.sea_creature.lore=Sea monsters are rare creatures and \
+ powerful, which can give you quite special loots\
+ CLICK HERE TO VIEW SPAWNABLE CREATURES
+
+feature.dailyevents.miraculousfishing.menu.info.loot_table.name=Unique and special loots
+feature.dailyevents.miraculousfishing.menu.info.loot_table.lore=Benefit from a miraculous blessing \
+ leaving you with new rewards and loot\
+ CLICK HERE TO SEE SINABLE ITEMS
\ No newline at end of file
diff --git a/src/main/resources/translations/en_GB/displays.properties b/src/main/resources/translations/en_GB/displays.properties
new file mode 100644
index 000000000..c401c7ecb
--- /dev/null
+++ b/src/main/resources/translations/en_GB/displays.properties
@@ -0,0 +1,35 @@
+feature.displays.tablist.header.default=\n\n\n\n\n\n\n%1$s\n\n Online players: %2$s/%3$s \n
+feature.displays.tablist.header.dream=\n\n\n\n\n\n\n%1$s\n\n
+feature.displays.tablist.footer.default=\nplay.openmc.fr\n
+feature.displays.tablist.footer.dream=\nplay.openmc.fr\n
+feature.displays.scoreboard.title.text=OPEN™
+feature.displays.scoreboard.footer.text=play.openmc.fr
+feature.displays.scoreboard.contest.title=contest
+feature.displays.scoreboard.contest.vs= VS
+feature.displays.scoreboard.contest.ends=END:
+feature.displays.scoreboard.rank.label=rank:
+feature.displays.scoreboard.rank.none=none
+feature.displays.scoreboard.city.label=city:
+feature.displays.scoreboard.city.none=None
+feature.displays.scoreboard.balance.label=money:
+feature.displays.scoreboard.location.label=rental:
+feature.displays.scoreboard.location.wilderness=Nature
+feature.displays.scoreboard.location.protected=Protected Region
+feature.displays.scoreboard.pumpkins.label=pumpkins:
+feature.displays.scoreboard.citywar.title=ONGOING WAR
+feature.displays.scoreboard.citywar.enemy.label=enemy:
+feature.displays.scoreboard.citywar.phase.label=phase:
+feature.displays.scoreboard.citywar.distance.label=distance:
+feature.displays.scoreboard.citywar.starts_in.label=start in:
+feature.displays.scoreboard.citywar.mascot.label=mascot:
+feature.displays.scoreboard.citywar.ends_in.label=end in:
+feature.displays.scoreboard.citywar.state.label=state:
+feature.displays.scoreboard.citywar.state.ended=finished
+feature.displays.scoreboard.citywar.mascot.dead=%1$s DEAD
+feature.displays.scoreboard.restart.in=Reboot in
+feature.displays.holograms.command.setpos.success=Hologram position %1$s update.
+feature.displays.holograms.command.setpos.error=Error updating hologram position %1$s : %2$s
+feature.displays.holograms.command.setpos.invalid=Please specify a valid hologram: %1$s
+feature.displays.holograms.command.disable=Holograms successfully disabled.
+feature.displays.holograms.command.enable=Holograms activated successfully.
+
diff --git a/src/main/resources/translations/en_GB/dream.properties b/src/main/resources/translations/en_GB/dream.properties
new file mode 100644
index 000000000..dbb173e26
--- /dev/null
+++ b/src/main/resources/translations/en_GB/dream.properties
@@ -0,0 +1,386 @@
+# ** DREAM **
+
+# * COMMANDS
+feature.dream.commands.leave.not_in_dream=You are not in a dream
+feature.dream.commands.leave.success=You have successfully left your dream.
+feature.dream.commands.item.not_found=This item does not exist
+feature.dream.admin.commands.showdialog.invalid_step=The step name is invalid!
+feature.dream.admin.commands.showdialog.no_dialogs=This step has no dialogs!
+
+# * MESSAGES
+feature.dream.message.time_lost_damage=You lost %1$s because you took damage!
+feature.dream.message.great_dream_bonus=You received 60% extra time!
+
+feature.dream.scoreboard.time=time:
+feature.dream.scoreboard.cold=cold:
+feature.dream.scoreboard.biome=biome:
+feature.dream.scoreboard.location=location:
+
+# * ITEMS
+feature.dream.item.ame_orb.name=Soul Orb
+feature.dream.item.cloud_orb.name=Cloud Orb
+feature.dream.item.glacite_orb.name=Frozen Orb
+feature.dream.item.mud_orb.name=Mud Orb
+feature.dream.item.unknown_orb.name=Unknown orb
+
+feature.dream.item.message.cannot_drop=You cannot throw this item away!
+
+feature.dream.item.rarity.common=COMMON ITEM
+feature.dream.item.rarity.rare=RARE ITEM
+feature.dream.item.rarity.epic=EPIC ITEM
+feature.dream.item.rarity.legendary=LEGENDARY ITEM
+feature.dream.item.rarity.onirisme=ITEM ONIRISM
+
+feature.dream.item.metal_detector.message.must_be_dream=You have to be in a dream to use the metal detector!
+feature.dream.item.metal_detector.message.reset_cooldown=The cooldown was reset because you changed world or you are no longer in a dream.
+feature.dream.item.meteo_wand.message.must_be_overworld=You must be in the Overworld to use the Weather Wand!
+feature.dream.item.meteo_wand.message.cooldown=You have to wait %1$s before using the weather wand!
+feature.dream.item.meteo_wand.message.success=You have successfully changed the weather!
+
+# * BIOMES
+feature.dream.biome.sculk_plains=Sculk Plain
+feature.dream.biome.soul_forest=Forest of Souls
+feature.dream.biome.mud_beach=Mud beach
+feature.dream.biome.cloud_land=Valley of Clouds
+feature.dream.biome.glacite_grotto=Frozen cave
+feature.dream.biome.message.not_unlocked=Warning, you are in a biome you have not unlocked yet, you need %1$s
+feature.dream.biome.progression.soul_forest=the Forest of Souls
+feature.dream.biome.progression.cloud_land=Cloud Castle
+feature.dream.biome.progression.mud_beach=Mud Beach
+feature.dream.biome.progression.glacite_grotto=the Glacite Cave
+feature.dream.biome.progression.unknown=Unknown
+feature.dream.biome.message.unlocked=You have unlocked %1$s !
+
+# * STRUCTURES
+feature.dream.structure.base_camp=Cave Camp
+feature.dream.structure.cube_temple=Temple of the Cube
+feature.dream.structure.cloud_castle=Cloud Castle
+feature.dream.structure.message.exit=You come out of: %1$s
+feature.dream.structure.message.enter=You enter: %1$s
+
+# * MOBS
+feature.dream.mob.breezy=Breezy
+feature.dream.mob.corrupted_tadpole=Corrupted tadpole
+feature.dream.mob.crazy_frog=Crazy Frog
+feature.dream.mob.dream_creaking=Dream Creaking
+feature.dream.mob.dream_phantom=Phantom Awakened
+feature.dream.mob.dream_spider=Dream Spider
+feature.dream.mob.dream_stray=Dream Stray
+feature.dream.mob.soul=Soul
+feature.dream.mob.soul.display=Soul
+feature.dream.mob.soul.skull=Soul
+
+# * ENCHANTMENTS
+feature.dream.enchantment.dream_sleeper.name=Sleepy
+feature.dream.enchantment.experientastic.name=Experientastic
+feature.dream.enchantment.soulbound.name=Soulbound
+feature.dream.enchantment.soulbound.message.effect=Your Soulbound enchantment has taken effect! Next use in %1$s
+
+# * MECHANISMS
+feature.dream.altar.message.must_hold_item=You must hold an item in your hand!
+feature.dream.altar.message.unusable_item=This item cannot be used on the altar!
+feature.dream.altar.message.no_recipe=No recipe was found for this item!
+feature.dream.altar.message.bound=The item has been linked to the altar.
+feature.dream.altar.message.already_bound=This item is already linked to the altar!
+feature.dream.altar.message.must_hold_bound_item=You must hold the linked item in your hand!
+feature.dream.altar.message.soul_not_found=No souls bound to this altar have been found!
+feature.dream.altar.message.not_enough_souls=You need %1$s souls to perform this ritual!
+feature.dream.altar.message.ritual_complete=The ritual is complete!
+
+feature.dream.cold.message.level_1=You start to feel the cold...
+feature.dream.cold.message.level_2=The cold is becoming difficult to bear...
+feature.dream.cold.message.level_3=You are frozen!
+feature.dream.cold.message.level_4=The cold is killing you!
+
+feature.dream.rng.prefix.crazy_rare=INCREDIBLY RARE!
+feature.dream.rng.prefix.wow=WOW!
+feature.dream.rng.prefix.pretty_nice=PRETTY NICE!
+feature.dream.rng.prefix.nice=NICE !
+feature.dream.rng.prefix.good=GOOD !
+feature.dream.rng.message.chance=(%1$s)
+feature.dream.rng.message.loot=%1$s %2$s got %3$s %4$s
+
+feature.dream.actionbar.distance=Distance : %1$s
+feature.dream.actionbar.cube_distance=Cube Distance: %1$s
+
+feature.dream.orb.message.obtained=%1$s got %2$s
+
+# * TRADER
+feature.dream.trader.npc.name=Frozen Wanderer
+feature.dream.trader.menu.name=Wanderer's Trades
+feature.dream.trader.time.one_minute=1 minute of time
+feature.dream.trader.menu.time.name=1 min Time
+feature.dream.trader.menu.time.lore=Buy time so you can stay longer!\
+ Cost :\
+ %1$s Ewenite
+feature.dream.trader.menu.trade.lore.cost=Cost :
+feature.dream.trader.menu.trade.lore.glacite= %1$s Glacite
+feature.dream.trader.menu.trade.lore.ewenite= %1$s Ewenite
+feature.dream.trader.menu.trade.lore.click=LEFT CLICK TO BUY
+feature.dream.trader.message.not_enough_resources=You don't have enough resources to make this purchase!
+feature.dream.trader.message.time_trade_success=You exchanged %1$s of Eweniteagainst %2$s
+feature.dream.trader.message.cost.glacite=%1$s of Glacite
+feature.dream.trader.message.cost.ewenite=%1$s of Ewenite
+feature.dream.trader.message.cost.separator=And
+feature.dream.trader.message.trade_success=You exchanged %1$s against %2$s
+feature.dream.trader.trade.glacite_orb=Glacite Orb
+feature.dream.trader.trade.soulbound_book=Soulbound II Book
+feature.dream.trader.trade.somnifere=Sleeping pill
+feature.dream.trader.trade.eternal_campfire=Eternal Campfire
+feature.dream.trader.trade.ewenite=Ewenite
+
+# * SINGULARITY
+feature.dream.singularity.menu.name=Singularity
+feature.dream.singularity.message.crafted=%1$s made the %2$s
+
+# * MILESTONES
+feature.dream.milestone.name=Dream
+feature.dream.milestone.description=Explore the dimension of dreams,\
+ collect the orbs and break through\
+ the mystery of this world.\
+ Good night.
+
+feature.dream.milestone.quest.altar.name=Start of the ritual
+feature.dream.milestone.quest.cloud_castle.name=Laputa
+feature.dream.milestone.quest.cloud_valley.name=Rise to seventh heaven
+feature.dream.milestone.quest.craft_domination_orb.name=Dominating is cool
+feature.dream.milestone.quest.craft_eternal_fire.name=The Ice Age
+feature.dream.milestone.quest.crafting_table.name=A new survival?
+feature.dream.milestone.quest.craft_singularity.name=The purpose?
+feature.dream.milestone.quest.crafts.name=Learn new crafts
+feature.dream.milestone.quest.creaking_heart.name=Resin has no heart
+feature.dream.milestone.quest.crystallized_pickaxe.name=Good pick
+feature.dream.milestone.quest.cube_temple.name=Worship the Soul Cube
+feature.dream.milestone.quest.ewenite.name=Aywenite, Awyenito or Ewenite?
+feature.dream.milestone.quest.find_cube.name=A little detour
+feature.dream.milestone.quest.glacite_orb.name=Finally the last one?
+feature.dream.milestone.quest.grotto_camp.name=Survival in end-of-the-world mode?
+feature.dream.milestone.quest.illusionist.name=Is there anyone?
+feature.dream.milestone.quest.kill_breezy.name=The air of the wind
+feature.dream.milestone.quest.metal_detector.name=Cooooooooaaaaaaa
+feature.dream.milestone.quest.mud_beach.name=I prefer the beach
+feature.dream.milestone.quest.mud_orb.name=Beep Beep Beep
+feature.dream.milestone.quest.old_axe.name=The first tool! Finally !
+feature.dream.milestone.quest.sleep.name=Sleep is life
+feature.dream.milestone.quest.soul_orb.name=A sacrifice is necessary!
+feature.dream.milestone.quest.souls.name=My friends come from beyond
+feature.dream.milestone.quest.transferable_object.name=Was it just a dream?
+feature.dream.milestone.quest.altar.description=Drop theOrb of Domination on theAltar\
+ Let's begin the orb conversion ritual
+feature.dream.milestone.quest.cloud_castle.description=Enter the %1$s\
+ A new castle to conquer?
+feature.dream.milestone.quest.cloud_valley.description=Discover the %1$s\
+ These clouds in this dream must be hiding something...
+feature.dream.milestone.quest.craft_domination_orb.description=Make theOrb of Domination\
+ 1 in 5 to dominate them all!
+feature.dream.milestone.quest.craft_eternal_fire.description=Make it eternal fire\
+ Will we find fossilized dinosaurs or Sid?
+feature.dream.milestone.quest.craft_singularity.description=Craft it Singularity\
+ Wouldn't the orbs have a final use?
+feature.dream.milestone.quest.crafting_table.description=Make a craft table\
+ Strange this night survival...\
+ we don't see except the full of sculks
+feature.dream.milestone.quest.crafts.description=Do /crafts to see the available crafts\
+ This dimension has its own rules,\
+ I have to learn them to survive
+feature.dream.milestone.quest.creaking_heart.description=Recover a Creaking Heart\
+ Are we looking for the resin or the heart?
+feature.dream.milestone.quest.crystallized_pickaxe.description=Get the Crystallized Pickaxe\
+ Sometimes you have to rack your brains
+feature.dream.milestone.quest.cube_temple.description=Enter the %1$s\
+ In search of the Cube of Souls monument...\
+ we are still in Minecraft, even in a dream!
+feature.dream.milestone.quest.ewenite.description=GetEwenite\
+ A new ore to exploit.\
+ Strange, this name is familiar to me.
+feature.dream.milestone.quest.find_cube.description=Find the Cube\
+ Mystery and explanations
+feature.dream.milestone.quest.glacite_orb.description=Exchange theIce Orb\
+ Final stretch to collect them all.
+feature.dream.milestone.quest.grotto_camp.description=Find a cave camp\
+ There is no Transperceneige but,\
+ Would there be a protected area?
+feature.dream.milestone.quest.illusionist.description=Find and see the merchant\
+ If there are fires lit,\
+ there is life in the area.
+feature.dream.milestone.quest.kill_breezy.description=Beat Breezy\
+ We're going to tame one of the mountain spirits\
+ from Poncahontas, or is it Elsa?
+feature.dream.milestone.quest.metal_detector.description=Recover the metal detector\
+ Why are tadpoles so big?
+feature.dream.milestone.quest.mud_beach.description=Enter the %1$s\
+ Let's take advantage of this dream to go and bask in the Sun.\
+ Hey, why is there no water, but only mud?\
+ And still no Sun!? So this place is only night?
+feature.dream.milestone.quest.mud_orb.description=Find theMud Orb\
+ Well, not sand, but mud.\
+ Possible that people still lose\
+ things. Oh hey, 6 blocks to the right.
+feature.dream.milestone.quest.old_axe.description=Make a Old Creaking Ax\
+ Our best friend in this world!
+feature.dream.milestone.quest.sleep.description=Enter the dimension of dreams\
+ How good it is to sleep for\
+ rest from the hard life of the cities...
+feature.dream.milestone.quest.soul_orb.description=Get theSoul Orb\
+ Souls in the pocket, allow me, by your power,\
+ to obtain your orb with the sacrifice of the Orb of Domination.
+feature.dream.milestone.quest.souls.description=To recover %1$s souls\
+ I seem to have seen creatures\
+ flies prowling towards the tall dark trees.
+feature.dream.milestone.quest.transferable_object.description=Retrieve an item transferable in the Overworld\
+ This world still seems real to me.\
+ Wouldn't the singularity be a portal?\
+ dimensional for loot?
+
+feature.dream.milestone.quest.altar.dialog=Traveler: To obtain the Soul Orb, you will need...\
+ Souls?!\
+ Traveler: Yes! That's it! You will need some %1$s\
+ Traveler: But be careful, they love the weather even more than the creakings\
+ How can I find them, and how do I recognize them?\
+ Traveler: Look around the altar, towards the trees. Souls wander outside the building.\
+ Traveler: Just like the "Creaking" armor, it is possible to have the armor of "Souls". This will give you %2$s additional seconds per equipped armor piece.\
+ Traveler: You can also transform your ax at the altar with a few extra souls.
+feature.dream.milestone.quest.cloud_castle.dialog=This castle is nothing like anything I know. How come it stays suspended in the clouds?\
+ Traveler: As said before, these ancient people have tamed the power of the winds. But with what happened, I think the power turned in on itself to protect the treasure.\
+ The Orb...\
+ Traveler: Correct! This castle should remind you of trial chambers of your world.\
+ So you know my world?\
+ Traveler: ...
+feature.dream.milestone.quest.cloud_valley.dialog=We are in a full... of clouds???\
+ Traveler: This is a story of an ancient people who had tamed the forces of the wind.\
+ Traveler: You should be able to find some remains of their civilization.\
+ That's to say ?\
+ Traveler: You have found the %1$s No ?
+feature.dream.milestone.quest.craft_domination_orb.dialog=Here is the orb, what should I do with it?\
+ Traveler: This orb is the first in a series of 5 scattered in this world. Each orb is unique and has the ability to move you forward in the world and in my...our quest!\
+ So we need to explore the new area unlocked by the orb?\
+ Traveler: That's right! We will have to find the Temple of the master of the place. You shouldn't miss it, I think...
+feature.dream.milestone.quest.craft_eternal_fire.dialog=Traveler: Good! This fire will be useful to you.\
+ It's a fire, will it allow me to cook something?\
+ Traveler: In this world, this fire will serve you to limit the effects of cold depths. You're going to enter a freezing world, every second spent in it will slow you down and will end up kill you.\
+ Traveler: By placing this fire on the ground and staying close to it, you will warm yourself and avoid this.\
+ Like when you come out of powder snow.\
+ Traveler: Yes. Now that you understand the principle, let's go looking for camps present in the deep caves.
+feature.dream.milestone.quest.craft_singularity.dialog=So ! What must we do to be able to turn back time now?\
+ Traveler: ...\
+ Traveler: I... I'm going to tell you something. It was never a question of going back in time in this dimension, but of being able to transfer myself to another dimension in order to escape the misfortunes of this world. My goal has always been to help people, but that has not been possible in this dimension.\
+ Traveler: I didn't want to talk to you about it at the risk of appearing selfish.\
+ Traveler: Unfortunately for me, the singularity we have is not powerful enough to be able to transfer life into your dimension in order to be able to make a fresh start and be able to help people.\
+ Traveler: But that doesn't matter, I liked it to help you explore this world and especially to be able to recover objects that will undoubtedly be useful to you in your world.\
+ ...\
+ Traveler: I failed to save this dimension, but I still managed to help "you" in this dimension.\
+ Traveler: Whatever happens, you will be able to recover enchantments of this dimension thanks to the singularity and even thearmor if you wish.\
+ Traveler: The singularity is not powerful enough for me, but more than enough for new weapons or armor.\
+ Traveler: Just like the previous orbs, you have the ability to craft new armor. This one, on the other hand, will require redoing all the orbs, but it's worth it, because it adds %1$s seconds more per piece worn, but also effects.\
+ ... THANKS !\
+ Traveler: No! It's me who thanks you. Because one day, someone I respected as a person said to me: “Thank the person you helped, because they allowed you to do a good deed.”\
+ Will you stay with me?\
+ Traveler: No, I can't. Other players are getting lost here, and they need me. So I bid you farewell...
+feature.dream.milestone.quest.crafting_table.dialog=Okay, now that I have the table, let's look for something to make some tools and... how come there are Crackers here!?\
+ Traveler: You have a good eye. This world is full of amazing creatures that have one thing in common: they feed on time, in you flying.\
+ So that’s that bar up there?\
+ Traveler: Yes, and this time is not infinite, which is why we must act quickly. Let's take advantage of being among these creatures to recover their hearts.
+feature.dream.milestone.quest.crafts.dialog=Sounds like normal survival, right?\
+ Traveler: Indeed, this world may be dark, new and complex, but it is not that different from the Overworld. But a dimension is added: the time ! For the moment, you can only access the %1$s, but the other biomes will soon be accessible.\
+ Hmmm, that intrigues me. But you said we're short on time, so let's not hang around. I need one craft table.
+feature.dream.milestone.quest.creaking_heart.dialog=Ah! But it's true that they protect their hearts.\
+ Traveler: Yes, and these will be useful to us later, the crafts of this world use a lot of them. Whether for tools, armor, or various objects of this world. Start by making yourself a ax.\
+ But what is the purpose of this world??\
+ Traveler: I'll explain to you soon, I don't want you to end up like me...\
+ What does it mean to “end up like you”?\
+ Traveler: You will understand. To avoid this, you must continue, make yourself an ax for the moment.
+feature.dream.milestone.quest.crystallized_pickaxe.dialog=Traveler: This one will be your best friend in the caves, replacing your axe.\
+ Traveler: From now on, you'll mainly have to mine. The depths of this world are full of useful minerals for the last step of this quest.\
+ So let's not hang around, let's go to the cave.\
+ Traveler: No! Before going to get the last orb, take a detour to the coordinates X: %1$s Z: %2$s. As promised, I owe you an explanation.
+feature.dream.milestone.quest.cube_temple.dialog=Traveler: Know that this is an altar that was erected to...\
+ For ?\
+ Traveler: ...\
+ Traveler: Let's move on, now is not the time. Let's stick to the fact that he is the master of the place.\
+ What does the master of the place mean?\
+ Traveler: No matter, now that you understand the principle of this dimension, I will be able to talk to you about its aim and what we do here.\
+ Traveler: Start by going to the center of the temple and drop the orb.
+feature.dream.milestone.quest.ewenite.dialog=The beginning of wealth. Whether it's mining or trading them, I have a feeling it's going to be a long search.\
+ Traveler: The ore is not common, but you can find several quickly.\
+ Isn't there a way to go faster?\
+ Traveler: You can make your own Clockwork Pickaxe If you want, it will be faster.
+feature.dream.milestone.quest.find_cube.dialog=Traveler: This is the origin of the catastrophe of this world. This is the "Cube", the master of the place. He was worshiped by the people of this dimension who built the temples you saw. His name: Bobby.\
+ But what did he do and why is there no sculk around him?\
+ Traveler: In the beginning, this one brought us peace and prosperity. But one day, a violent storm would have come, a lightning would have struck it and damaged it. \
+ Traveler: The cube, after having regenerated for a long period of time, would have started to move and little by little, corrupt the world, but by installing a self-sufficient ecosystem for his new state. That is to say, it protects itself and propagates alone, feeding on the life of the world.\
+ Traveler: This led to the anhilation or the corruption of all life in this place.\
+ And you in all this, who are you? Since the beginning of our adventure, you have been talking to me, but you are not really there.\
+ Traveler: It is very likely that I am no longer in this world, at least physically. When the cube corrupted the card, instead of fighting against it, I used it to destroy my body, by forcing the survival of my mind. Since I used the cube to survive, it can't take me out without killing itself.\
+ Traveler: I am then here to help everyone get back to your old life. When I saw you coming, I followed you so that you could realize in my place, the quest I was supposed to carry out.\
+ ...\
+ Traveler: Now that you know a little more, we must move forward in the quest that is now yours. Direction : the caves.
+feature.dream.milestone.quest.glacite_orb.dialog=Traveler: Finally, we have reached our goal. Much more than just one step to finally be free from this situation.\
+ What should I do?\
+ Traveler: They need to be combine.\
+ Combine them? No incantation this time?\
+ Traveler: No, I promise. Combine them in the craft table that we both made at the start of our adventure. We can then use the power of singularity.
+feature.dream.milestone.quest.grotto_camp.dialog=This is a camp.\
+ Traveler: Let's see if we can find the last keeper of the orb. He must be around.\
+ But if the Cube corrupted and killed everything, how can the merchant still be alive?\
+ Traveler: The orb, my friend. Before, he was a traveling merchant who traveled the world to trade his goods.\
+ Traveler: And each orb has a power, and I think that of theIce Orb allowed this merchant to survive, but at what cost...
+feature.dream.milestone.quest.illusionist.dialog=There's the merchant. He doesn't seem to want to move anymore.\
+ Traveler: As I said before, corruption has amended deeply, even if the orb has it protected of death.\
+ Traveler: I haven't told you about this until now, but haven't you noticed anything in each place where we found an orb?\
+ ...\
+ Traveler: The orbs have preserved the lives around them. Creakings, Spiders, Souls, Breeze, Phantom, Wanderer, Frogs, Tadpoles, and here the merchant.\
+ Traveler: But it's up to us to really bring her back. So go ahead, do itexchange for the Orb.
+feature.dream.milestone.quest.kill_breezy.dialog=But this Breeze is crazy!!\
+ Traveler: Yes, that's what I feared...even here, everything has been corrupted.\
+ How is that corrupt?\
+ Traveler: Explanations will arrive in due time. For now, come back down to earth, and head towards the beaches. I wish I could say fine sand...\
+ Traveler: But before leaving, you can collect theCloud Armor, who will give you %1$s seconds of extra time per piece of armor. You can also recover a cloud fishing rod, and a enchanted book.\
+ A fishing rod? But to fish for what? Cloud droplets?!\
+ Traveler: Exactly! This will allow you to fish in the clouds as if it were a lake. In particular, you will be able to recover sleeping pills which allow you to stay asleep longer, or to fall asleep effectively, if you are awake.
+feature.dream.milestone.quest.metal_detector.dialog=Traveler: Ah, finally the detector. We will be able to search for the orb in this mud more easily.\
+ Traveler: These beaches used to be sand and water. But with the disaster, frogs And tadpoles have transformed. This transformation resulted, for them, in a great thirst.\
+ Hence the absence of water.
+feature.dream.milestone.quest.mud_beach.dialog=Finally on the beach, and indeed, there is no warm sand, no radiant sun, just mud and... nothing else actually.\
+ Traveler: Very well, sit there, I owe you an explanation.\
+ Traveler: This world has undergone a disaster, hence its appearance. Before, he was so...if only I could see him again.\
+ You told me about five orbs. Would these make it possible to bring back the old world, with the power of terraforming?\
+ Traveler: No, it's much more powerful than that. They allow you to create a wormhole between this dimension and yours. We can then use part of theenergy of your size for go back in time in it, and restore its balance.\
+ Use part of the energy? But, is this without risk for my dimension??\
+ Traveler: Yes, of course, otherwise I wouldn't take the risk. Each block of your world would give a small pearl of its energy.\
+ What energy?\
+ Traveler: We must move forward now. Looking for frogs, they will be useful to us.
+feature.dream.milestone.quest.mud_orb.dialog=It reminds me of my vacation searching for treasures on the beach. Even if it's for a better cause. And now that the 4th orb is with us, what should I do?\
+ Traveler: More than one. As we have done all the surface and the clouds, then all we have to do is search underground. You will need to prepare well, and in particular good fire. As for the detector, you should have seen that we obtained several things.\
+ Yes, my inventory is full.\
+ Traveler: Just like the fishing rod, you can obtain various items there like chips, even if some are very rare, sleeping pills, another enchanted book, or even a pickaxe which will be useful to you later... I'm going to check if you don't already have one.
+feature.dream.milestone.quest.old_axe.dialog=Traveler: Good! This will be useful to us. The next objective is going to be to get theOrb of Domination.\
+ What will it be used for?\
+ Traveler: I'll explain it to you when you get it. It will be easy to recover with the axe.\
+ Do I need anything else?\
+ Traveler: It's not obligatory, but it would allow you to stay longer in this world. There is armor “Creaking” that you can make. This will give you %1$s additional seconds per equipped armor piece.
+feature.dream.milestone.quest.sleep.dialog=ZZZzzz...what's happening!? Am I dreaming? This... world looks so different from the Overworld!\
+ Traveler: What...? How is this possible??! I thought I was the only one here. And it's been so long since I've seen anyone...\
+ But, who are you? Where are you? and why are you talking to me??\
+ Traveler: Well, welcome. But everything in its time. Time which we will miss, we must act quickly, I will explain everything to you as we go along. For now, I suggest you discover what you will need to discover this world with the command /crafts.\
+ Traveler: Please know that if you do not wish to stay until the end of time, you can wake up with the command /leave.\nConversely, you can come back here more frequently by making yourself a Pyjamas. This allows you to increase your chances of passing into this world while sleeping.
+feature.dream.milestone.quest.soul_orb.dialog=And two! On the other hand, I no longer have the Orb of Domination...\
+ Traveler: Yes, you will have to do one again. But that's not the most complicated thing.\
+ Traveler: Now that you have the Soul Orb, you will be able to access the new area which, you will see, does not at all resemble the current world...\
+ Traveler: You must climb into the sky, into the clouds.\
+ Can you tell me a little about the purpose of this quest?\
+ Traveler: The orbs are numbered 5, and each of them contains a power. Alone, they are of no use. But together they could help this world.\
+ And... who are you anyway?\
+ Traveler: I was...\
+ Traveler: I'm a gamer just like you, but a gamer this world.
+feature.dream.milestone.quest.souls.dialog=And of %1$s ! What should I do now? Is there a specific orb craft to do?\
+ Traveler: No, you simply have to repeat the following incantation twice: Ashkara no thari fu laq to\
+ Ashkara no thari fu laq to! Ashkara no thari fu laq to!\
+ ...not easy to say...\
+ Traveler: Ahah, actually, you just need to interact with theOrb of Domination onAltar.
+
+# * QUESTS
+feature.dream.milestone.quest.transferable_object.reward=There is a link between this dimension and the real world. And this is just the beginning of a new adventure!
+
+feature.dream.loot_table.cloud_fishing=Cloud Fishing Loots
+feature.dream.loot_table.cloud_vault=Cloud Chest Loot
+feature.dream.loot_table.metal_detector=Metal Detector Loot
\ No newline at end of file
diff --git a/src/main/resources/translations/en_GB/economy.properties b/src/main/resources/translations/en_GB/economy.properties
new file mode 100644
index 000000000..74b61e86c
--- /dev/null
+++ b/src/main/resources/translations/en_GB/economy.properties
@@ -0,0 +1,83 @@
+feature.economy.transactions.menu.title=Transactions menu %1$s
+feature.economy.transaction.outgoing.name=Outgoing transaction
+feature.economy.transaction.incoming.name=Incoming transaction
+feature.economy.transaction.outgoing.lore=Destination : %1$s\
+ Amount : %2$s\
+ Reason : %3$s
+feature.economy.transaction.incoming.lore=Sender: %1$s\
+ Amount : %2$s\
+ Reason : %3$s
+feature.economy.bank.menu.title=Banks Menu
+feature.economy.bank.menu.deposit.name=Drop offmoney
+feature.economy.bank.menu.deposit.lore=Your money will be placed in your bank\
+ CLICK HERE TO DEPOSIT
+feature.economy.bank.menu.need_city=To have a personal bank, you must belong to a minimum level 2 city!
+feature.economy.bank.menu.balance.name=Your money
+feature.economy.bank.menu.balance.lore=You currently have %1$s %2$s\
+ Your money limit in your bank is %3$s %4$s\
+ \
+ Your next interest is to %5$s In %6$s
+feature.economy.bank.menu.withdraw.name=Remove frommoney
+feature.economy.bank.menu.withdraw.lore=The money will be taken from your bank\
+ CLICK HERE TO WITHDRAW
+feature.economy.bank.deposit.menu.title=Banks Menu - Deposit
+feature.economy.bank.deposit.all.name=Drop off all your money
+feature.economy.bank.deposit.all.lore=All your money will be placed in your bank\
+ \
+ Amount that will be deposited: %1$s %2$s\
+ \
+ CLICK HERE TO DEPOSIT
+feature.economy.bank.deposit.half.name=Deposit half of your money
+feature.economy.bank.deposit.half.lore=Half of your money will be placed in your bank\
+ \
+ Amount that will be deposited: %1$s %2$s\
+ \
+ CLICK HERE TO DEPOSIT
+feature.economy.bank.deposit.input.name=Drop a specific amount
+feature.economy.bank.deposit.input.lore=Your money will be placed in your bank\
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.economy.bank.deposit.limit_reached=Your bank's limit is %1$s
+feature.economy.bank.deposit.partial=Only %1$s have been deposited (ceiling reached).
+feature.economy.bank.deposit.success=You filed %1$s.
+feature.economy.bank.deposit.input.prompt=Enter the amount you want to deposit
+feature.economy.bank.withdraw.input.prompt=Enter the amount you want to withdraw
+feature.economy.bank.withdraw.menu.title=Banks Menu - Withdraw
+feature.economy.bank.withdraw.all.name=Take themoney from your bank
+feature.economy.bank.withdraw.all.lore=All the money placed in your bank will be given to you\
+ \
+ Amount that will be given to you: %1$s %2$s\
+ \
+ CLICK HERE TO TAKE
+feature.economy.bank.withdraw.half.name=Take half of themoney from your bank
+feature.economy.bank.withdraw.half.lore=Half of the money will be taken from your bank to give it to you\
+ \
+ Amount that will be given to you: %1$s %2$s\
+ \
+ CLICK HERE TO TAKE
+feature.economy.bank.withdraw.input.name=Take a specific amount
+feature.economy.bank.withdraw.input.lore=The money requested will be taken from your bank to give it to you\
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.economy.bank.back.lore=You will return to your bank menu\
+ CLICK HERE TO CONFIRM
+feature.economy.bank.withdraw.not_enough=You don't have enough money in the bank
+feature.economy.bank.withdraw.transferred=%1$s%2$s have been transferred to your account
+feature.economy.bank.interest.received=You have just noticed %1$s of interest, or %2$s%3$s
+feature.economy.bank.command.not_unlocked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+feature.economy.bank.command.balance=There is %1$s%2$s in your bank
+feature.economy.bank.interest.apply.start=Distribution of interests in progress...
+feature.economy.bank.interest.apply.success=Successful distribution of interests.
+feature.economy.money.self=You have %1$s
+feature.economy.money.others=%1$s has %2$s
+feature.economy.money.set.success=You have defined the money %1$s has %2$s
+feature.economy.money.set.target=Your money has been set to %1$s
+feature.economy.money.add.success=You added %1$s has %2$s
+feature.economy.money.add.target=You have received %1$s
+feature.economy.money.remove.success=You removed %1$s has %2$s
+feature.economy.money.remove.target=You lost %1$s
+feature.economy.money.remove.not_enough=The player does not have enough money
+feature.economy.money.reset.success=You have reset the money from %1$s has %2$s
+feature.economy.money.reset.target=Your money has been reset to %1$s
+feature.economy.pay.self=You can't pay yourself
+feature.economy.pay.success=You paid %1$s of %2$s
+feature.economy.pay.received=You have received %1$s of %2$s
+feature.economy.pay.not_enough=You don't have enough money
diff --git a/src/main/resources/translations/en_GB/events.properties b/src/main/resources/translations/en_GB/events.properties
new file mode 100644
index 000000000..8c183a70a
--- /dev/null
+++ b/src/main/resources/translations/en_GB/events.properties
@@ -0,0 +1,53 @@
+feature.events.menu.main_event.title=Events
+feature.events.menu.main_event.title.calendar.lore=View the events calendar\
+ you will be able to see the events that are scheduled
+feature.events.menu.main_event.event.click_here=CLICK HERE TO LEARN MORE
+
+feature.events.calendar.unknown_name=Event
+feature.events.calendar.daily_event_name=Daily Event
+
+feature.events.calendar.unknown_phase=Unknown
+feature.events.calendar.title=Event Calendar
+feature.events.calendar.weekend_event_name=Weekend Event
+feature.events.calendar.start_in=Starts in %1$s
+feature.events.calendar.start_date=Start date: %1$s at %2$s
+feature.events.calendar.end_date=End date: %1$s at %2$s
+feature.events.calendar.phases=Phases:
+feature.events.calendar.phase.line=- %1$s THE %2$s has %3$s
+
+feature.events.contest.name=Contest
+feature.events.contest.description=2 camps clash during the weekend\
+ Vote for your side, and take part in the clash!\
+ The winning side will win exclusive rewards!
+feature.events.contest.command.settrade.updated=The trade of %1$s has been updated with %2$s For %3$s contest shells.
+feature.events.contest.command.settrade.not_found=The trade does not exist.\
+ /contest settrade <mat> <amount> <amount_shell>
+
+feature.events.halloween.menu.deposit.title=Place your pumpkins
+feature.events.halloween.menu.deposit.button.name=<#ff6b25>Place your pumpkins#ff6b25>
+feature.events.halloween.menu.deposit.button.lore=Click here to drop off your pumpkins and\
+ get rewards!
+feature.events.halloween.menu.deposit.no_pumpkin=You don't have to drop any pumpkins!
+feature.events.halloween.menu.deposit.success=You filed %1$s pumpkins!
+feature.events.halloween.reward.rank1.name=<#ff6b25>Victory Pie (2025)#ff6b25>
+feature.events.halloween.reward.rank1.lore=Reward for the player who collected the most pumpkins\
+ during the Halloween 2025 event.\
+ \
+ Obtained by %1$s
+feature.events.halloween.reward.rank2.name=<#ff6b25>The Pie of Excellence (2025)#ff6b25>
+feature.events.halloween.reward.rank2.lore=Reward for the player who collected the second most\
+ large quantity of pumpkins during the event\
+ Halloween 2025.\
+ \
+ Obtained by %1$s
+feature.events.halloween.reward.rank3.name=<#ff6b25>The Pie of Merit (2025)#ff6b25>
+feature.events.halloween.reward.rank3.lore=Reward for the player who collected the third most\
+ large quantity of pumpkins during the event\
+ Halloween 2025.\
+ \
+ Obtained by %1$s
+feature.events.halloween.unknown_player=Unknown
+feature.events.halloween.event.end.broadcast=<#ff6b25>The Halloween 2025 event is now over!#ff6b25>\
+ <#ff6b25>You can find your rewards in your#ff6b25><#ff6b25> mailbox#ff6b25><#ff6b25>.#ff6b25>\
+ <#ffd580>Thank you everyone for your participation!#ffd580>
+
diff --git a/src/main/resources/translations/en_GB/friend.properties b/src/main/resources/translations/en_GB/friend.properties
new file mode 100644
index 000000000..504386e5a
--- /dev/null
+++ b/src/main/resources/translations/en_GB/friend.properties
@@ -0,0 +1,46 @@
+feature.friend.request.expired=The friend request has expired.
+feature.friend.add.self=You cannot add yourself as a friend.
+feature.friend.add.disabled=This player has disabled friend requests.
+feature.friend.add.already_sent=You have already sent a request to this player.
+feature.friend.add.already_friend=You are already friends with this player.
+feature.friend.add.sent=Friend request sent to %1$s.
+feature.friend.add.error=An error occurred while sending the friend request.
+feature.friend.request.ignored=You ignored friend request from %1$s.
+feature.friend.request.received=%1$s sent you a friend request.
+feature.friend.player_not_found=This player does not exist.
+feature.friend.remove.not_friend=You are not friends with this player.
+feature.friend.remove.error=An error occurred while deleting the friend.
+feature.friend.remove.success=You deleted %1$s from your friends list.
+feature.friend.remove.removed_by=You have been removed from the friends list of %1$s.
+feature.friend.list.none=You don't have any friends at the moment.
+feature.friend.list.page_invalid=The page %1$s does not exist. Total: %2$s pages
+feature.friend.list.hover=City : %1$s\
+ Money : %2$s\
+ Status : %3$s
+feature.friend.list.error=An error occurred while retrieving your friends.
+feature.friend.request.not_received=You have not received a friend request from this player.
+feature.friend.request.accepted=You are now friends with %1$s.
+feature.friend.request.accept_error=An error occurred while accepting the friend request.
+feature.friend.request.denied=You declined friend request from %1$s.
+feature.friend.request.denied_by=Your friend request has been rejected by %1$s.
+feature.friend.request.deny_error=An error occurred while declining the friend request.
+feature.friend.button.accept= [Accept]
+feature.friend.button.accept_hover=Click to accept friend request
+feature.friend.button.ignore= [Ignore]
+feature.friend.button.ignore_hover=Click to ignore friend request
+feature.friend.button.deny= [Refuse]
+feature.friend.button.deny_hover=Click to decline friend request
+feature.friend.list.header= ✦ Friends list (%1$s/%2$s) ✦
+feature.friend.list.city.none=None
+feature.friend.status.online=Online
+feature.friend.status.offline=Offline
+feature.friend.list.date_since=Since the %1$s
+feature.friend.list.action.remove= [✖]
+feature.friend.list.action.remove_hover=Remove this friend
+feature.friend.list.fetch_error=Error retrieving information from %1$s
+feature.friend.list.navigation.previous= « Previous page
+feature.friend.list.navigation.next=Next page »
+feature.friend.list.navigation.separator= |
+feature.friend.list.navigation.page=Page %1$s
+feature.friend.unknown_player=Unknown
+
diff --git a/src/main/resources/translations/en_GB/homes.properties b/src/main/resources/translations/en_GB/homes.properties
new file mode 100644
index 000000000..456b55968
--- /dev/null
+++ b/src/main/resources/translations/en_GB/homes.properties
@@ -0,0 +1,97 @@
+feature.homes.location.invalid=Invalid rental
+feature.homes.location.format=%1$s (%2$s, %3$s, %4$s)
+feature.homes.home.name=%1$s
+feature.homes.home.lore=Position:\
+ W: %1$s\
+ X: %2$s\
+ Y: %3$s\
+ Z: %4$s
+feature.homes.menu.title=Homes Menu
+feature.homes.menu.item.lore=■ Click LEFT to teleport you\
+ ■ Click right to configure the home
+feature.homes.menu.teleport.success=You have been teleported to your home %1$s.
+feature.homes.menu.error=An error has occurred, please contact the staff
+feature.homes.menu.upgrade.name=●Improve homes(Click here)
+feature.homes.menu.upgrade.lore=Click to improve your homes
+feature.homes.upgrade.menu.title=Homes Menu - Improvement
+feature.homes.upgrade.item.name=●Improve homes(Left click)
+feature.homes.upgrade.lore.max=Current number of homes: %1$s\
+ You have reached the maximum number of homes
+feature.homes.upgrade.lore.available=Current number of homes: %1$s\
+ Price : %2$s %3$s\
+ Aywenite: %4$s\
+ Number of homes on the next level: %5$s\
+ → Left click to improve
+feature.homes.delete.menu.title=Homes Menu - Confirmation
+feature.homes.delete.confirm.name=Confirm deletion
+feature.homes.delete.confirm.lore=■ Click LEFT to confirm the deletion
+feature.homes.delete.success=Home %1$s successfully deleted!
+feature.homes.delete.cancel.name=Undo deletion
+feature.homes.command.player_not_found=This player does not exist.
+feature.homes.command.other_no_home=This player has no home.
+feature.homes.command.teleport.other.success=You have been teleported home %1$s of %2$s.
+feature.homes.command.other_no_home_with_name=This player does not have a home with this name.
+feature.homes.command.no_home=You don't have a home.
+feature.homes.command.teleport.self.success=You have been teleported to your home %1$s.
+feature.homes.command.no_home_with_name=You don't have a home with that name.
+feature.homes.command.disabled_world=You cannot define home in this world.
+feature.homes.command.invalid_name=The home name must be valid.
+feature.homes.command.other_already_has=This player already has a home with this name.
+feature.homes.command.set.other.success=The home %1$s was defined for %2$s.
+feature.homes.command.set.by_admin=An admin has defined a home for you %1$s.
+feature.homes.command.home_limit_reached=You have reached the limit of homes.
+feature.homes.command.already_has=You already have a home with this name.
+feature.homes.command.set.self.success=Your home %1$s has been defined.
+feature.homes.command.rename.other.success=The home %1$s was renamed to %2$s.
+feature.homes.command.rename.already_has=You already have a home with that name.
+feature.homes.command.rename.self.success=Your home %1$s was renamed to %2$s.
+feature.homes.command.self_no_home_with_name=You don't have a man with that name.
+feature.homes.command.delete.other.success=The home %1$s was deleted.
+feature.homes.command.delete.self.success=Your home %1$s was deleted.
+feature.homes.command.relocate.other.success=The home %1$s was moved.
+feature.homes.command.relocate.protected_region=You can't define a home here, you are in a protected region.
+feature.homes.command.relocate.self.success=Your home %1$s was moved.
+feature.homes.world.not_found=This world does not exist.
+feature.homes.world.already_disabled=The world %1$s is already in the list of worlds where homes are disabled.
+feature.homes.world.added=The world %1$s has been added to the list of worlds where men are disabled.
+feature.homes.world.remove.not_found=The world %1$s does not exist.
+feature.homes.world.removed=The world %1$s has been removed from the list of worlds where men are disabled.
+feature.homes.world.not_disabled=The world %1$s is not in the list of worlds where homes are disabled.
+feature.homes.world.list.empty=No worlds are in the list of worlds where homes are disabled.
+feature.homes.world.list.title=List of worlds where homes are disabled:
+feature.homes.world.list.item= - %1$s (%2$s)
+feature.homes.world.info=Added by %1$s THE %2$s
+feature.homes.upgrade.not_reached_limit=You have not reached the house limit to purchase this improvement.
+feature.homes.upgrade.not_enough_aywenite=You don't have enough Aywenite (%1$s necessary)
+feature.homes.upgrade.not_enough_money=You don't have enough money on you! (%1$s%2$s necessary)
+feature.homes.upgrade.success=You have improved your house limit to %1$s For %2$s$ and to %3$s of Aywenite
+feature.homes.upgrade.max=You have reached the maximum limit of homes.
+feature.homes.icon.name=%1$s
+feature.homes.icon.normal_lore=■ Click LEFT to change the icon
+feature.homes.icon.selected_lore=[✔] Current icon
+feature.homes.icon.changed=Your home icon %1$s was changed to %2$s !
+feature.homes.icon.menu.title=Homes Menu - Change icon
+feature.homes.icon.search.name=Research
+feature.homes.icon.search.current=Current search: %1$s
+feature.homes.icon.search.left=■ Click LEFT to search
+feature.homes.icon.search.right=■ Click right to reset
+feature.homes.icon.search.prompt=Enter your search for an item
+feature.homes.icon.category.name=Category
+feature.homes.icon.category.selection=Category selection
+feature.homes.icon.category.available=Categories available:
+feature.homes.icon.category.all=All
+feature.homes.icon.category.vanilla=Vanilla
+feature.homes.icon.category.custom=Customized
+feature.homes.icon.category.left=■ Click LEFT to go to the next category
+feature.homes.icon.category.right=■ Click right to go to the previous category
+feature.homes.icon.category.spam=Please don't spam the category change.
+feature.homes.config.title=Homes Menu - Configuration
+feature.homes.config.change_icon.name=Change icon
+feature.homes.config.change_icon.lore=■ Click LEFT to change your home icon
+feature.homes.config.rename.name=Change name
+feature.homes.config.rename.lore=■ Click LEFT to change the name of your home
+feature.homes.config.rename.prompt=Enter your new home name
+feature.homes.config.rename.success=Your home %1$s was renamed to %2$s.
+feature.homes.config.delete.name=Delete home
+feature.homes.config.delete.lore=■ Click LEFT to delete your home
+
diff --git a/src/main/resources/translations/en_GB/itemsadder.properties b/src/main/resources/translations/en_GB/itemsadder.properties
new file mode 100644
index 000000000..bb6a45f7d
--- /dev/null
+++ b/src/main/resources/translations/en_GB/itemsadder.properties
@@ -0,0 +1,5 @@
+feature.itemsadder.spawner_extractor.fail=Extraction failed! The spawner broke.
+feature.itemsadder.spawner_extractor.display_name=Spawner at %1$s
+feature.itemsadder.spawner_extractor.success_extract=You have extracted a spawner at %1$s !
+feature.itemsadder.spawner_extractor.success_place=Spawner at %1$s place !
+
diff --git a/src/main/resources/translations/en_GB/leaderboards.properties b/src/main/resources/translations/en_GB/leaderboards.properties
new file mode 100644
index 000000000..a6e92040f
--- /dev/null
+++ b/src/main/resources/translations/en_GB/leaderboards.properties
@@ -0,0 +1,28 @@
+feature.leaderboards.empty.contributors=No contributors found yet.
+feature.leaderboards.empty.players=No players found yet.
+feature.leaderboards.empty.cities=No cities found yet.
+
+feature.leaderboards.header.contributors=--- GitHub Contributor Leaderboard ---
+feature.leaderboards.header.money=--- Players Money Leaderboard ---
+feature.leaderboards.header.city_money=--- Cities Money Leaderboard ---
+feature.leaderboards.header.playtime=------- Game Time Leaderboard -------
+feature.leaderboards.header.pumpkin=--- Pumpkin Leaderboard ---
+
+feature.leaderboards.footer=-----------------------------------------
+
+feature.leaderboards.line.contributors=%1$s %2$s + %3$s - %4$s
+feature.leaderboards.line.money=%1$s %2$s - %3$s
+feature.leaderboards.line.city_money=%1$s %2$s - %3$s
+feature.leaderboards.line.playtime=%1$s %2$s - %3$s
+feature.leaderboards.line.pumpkin=%1$s %2$s - %3$s pumpkins
+
+feature.leaderboards.command.invalid=Please specify a valid leaderboard. (Ex: /leaderboard contributeurs)
+feature.leaderboards.command.position_updated=Leaderboard position %1$s update.
+feature.leaderboards.command.position_update_failed=Error updating leaderboard position %1$s : %2$s
+feature.leaderboards.command.invalid_list=Please specify a valid leaderboard: contributors, money, city-money, playtime, pumpkin-count
+feature.leaderboards.command.holograms_disabled=Holograms successfully disabled.
+feature.leaderboards.command.holograms_enabled=Holograms activated successfully.
+feature.leaderboards.command.holograms_updated=Holograms updated successfully.
+feature.leaderboards.command.scale_changed=Size of holograms changed to %1$s
+feature.leaderboards.command.scale_update_failed=Error updating hologram size: %1$s
+
diff --git a/src/main/resources/translations/en_GB/mailboxes.properties b/src/main/resources/translations/en_GB/mailboxes.properties
new file mode 100644
index 000000000..6a1f11c5f
--- /dev/null
+++ b/src/main/resources/translations/en_GB/mailboxes.properties
@@ -0,0 +1,52 @@
+feature.mailboxes.player.unknown=Unknown
+
+feature.mailboxes.menu.title.home=Mailbox
+feature.mailboxes.menu.title.player=Mailbox
+feature.mailboxes.menu.title.pending=Mail awaiting cancellation
+feature.mailboxes.menu.title.players_list=List of players
+feature.mailboxes.menu.title.letter=Letter from %1$s
+feature.mailboxes.menu.title.sending=Send a letter to %1$s
+
+feature.mailboxes.menu.pending.item=On hold
+feature.mailboxes.menu.player.item=My mailbox
+feature.mailboxes.menu.send.item=Send
+
+feature.mailboxes.menu.button.cancel=Cancel
+feature.mailboxes.menu.button.accept=Accept
+feature.mailboxes.menu.button.send=Send
+feature.mailboxes.menu.button.refuse=Refuse
+feature.mailboxes.menu.button.home_arrow=⬅Home
+feature.mailboxes.menu.button.next_page_arrow=Next page ➡
+feature.mailboxes.menu.button.previous_page_arrow=⬅ Previous page
+
+feature.mailboxes.menu.refuse_warning=If you do this, the items will be deleted
+feature.mailboxes.menu.cancel.success=You have canceled the mailbox #%1$s
+feature.mailboxes.menu.cancel.confirm=Confirm mailbox cancellation #%1$s
+feature.mailboxes.menu.cancel.cancel=Undo mailbox cancellation #%1$s
+
+feature.mailboxes.message.letter_not_found=The letter with the id %1$s does not exist.
+feature.mailboxes.message.cancel_success_sender=%1$s canceled the letter. You have received %2$s%3$s
+feature.mailboxes.message.refuse_success=You refused the letter #%1$s.
+feature.mailboxes.message.items_received=You have received %1$s %2$s
+feature.mailboxes.message.cancel_letter=You canceled the letter #%1$s.
+feature.mailboxes.message.empty_letter=You cannot send an empty letter
+feature.mailboxes.message.player_not_found=The player %1$s does not exist or was never connected!
+feature.mailboxes.message.send_to_self=You can't send it to yourself!
+feature.mailboxes.message.cannot_send=You do not have the rights to send to %1$s !
+
+feature.mailboxes.message.send_error=An error appeared while sending items to %1$s
+feature.mailboxes.message.one_letter=a
+feature.mailboxes.message.new_letters.line1=You have received %1$s %2$s.
+feature.mailboxes.message.new_letters.click=Click here
+feature.mailboxes.message.new_letters.suffix=to open letters
+feature.mailboxes.message.new_letters.hover=Open my mailbox
+feature.mailboxes.message.letter_received.line1=You have received %1$s%2$s from %3$s
+feature.mailboxes.message.letter_received.click=Click here
+feature.mailboxes.message.letter_received.suffix=to open the letter
+feature.mailboxes.message.letter_received.hover=Open letter #%1$s
+feature.mailboxes.message.sent_word=sent
+feature.mailboxes.message.send_success=%1$s %2$s %3$s has %4$s
+
+feature.mailboxes.letter.contains=➤ Contains %1$s %2$s
+feature.mailboxes.title.new_letter=New letter!
+feature.mailboxes.title.new_letter.subtitle=%1$s sent you %2$s%3$s
diff --git a/src/main/resources/translations/en_GB/main.properties b/src/main/resources/translations/en_GB/main.properties
new file mode 100644
index 000000000..f9c01fea1
--- /dev/null
+++ b/src/main/resources/translations/en_GB/main.properties
@@ -0,0 +1,37 @@
+# Language file for the plugin
+# Native language: French
+# Do not use color codes in this file if there is an agument
+# * KEY DE TEST
+test=TESTTTT
+
+# ** UTILS **
+utils.world.overworld=the Overworld
+utils.world.nether=the Nether
+utils.world.end=the End
+utils.world.dream=Dreams
+
+# ** MESSAGES **
+messages.global.cannot_do_this=You have no right to do this.
+messages.global.missing_arg=You must specify an argument.
+messages.global.player_not_found=The player was not found.
+messages.global.invalid_input=Please enter correct entry
+
+messages.global.player_missing_money=You don't have enough money.
+messages.global.cancel=Cancel
+messages.global.accept=Accept
+messages.menus.back=Back
+messages.menus.back_lore=Return to previous menu
+messages.menus.previous_page=Previous page
+messages.menus.previous_page_lore=Click to go to previous page
+messages.menus.next_page=Next page
+messages.menus.next_page_lore=Click to go to the next page
+messages.menus.close=Close
+messages.menus.none=None
+
+registries.menu.lootbox.name=Lootbox
+registries.menu.chance=Chance : %1$s
+registries.menu.sub_loots.click_here=CLICK HERE TO VIEW THE SUBLOTS
+
+feature.tickets.loot.won=You won:
+feature.tickets.loot.broadcast=✦ CONGRATULATIONS has %1$s who just won %2$s at the ball machine! ✦
+feature.tickets.loot.gg=CONGRATULATIONS !
\ No newline at end of file
diff --git a/src/main/resources/translations/en_GB/mainmenu.properties b/src/main/resources/translations/en_GB/mainmenu.properties
new file mode 100644
index 000000000..a236cc99a
--- /dev/null
+++ b/src/main/resources/translations/en_GB/mainmenu.properties
@@ -0,0 +1,52 @@
+feature.mainmenu.item.city.lore=/city
+feature.mainmenu.item.city.name=City : %1$s
+feature.mainmenu.item.city.no_city=You are not part of a city.
+
+feature.mainmenu.item.advancements.name=Show progress
+
+feature.mainmenu.item.quests.name=Quests
+feature.mainmenu.item.quests.lore=/quest
+
+feature.mainmenu.item.milestones.name=Milestones
+feature.mainmenu.item.milestones.lore=Discover the features in progression routes!
+feature.mainmenu.item.milestones.command=/milestones
+
+feature.mainmenu.item.contest.ends_in=End in %1$s
+feature.mainmenu.item.contest.name=Competition
+feature.mainmenu.item.contest.command=/contest
+
+feature.mainmenu.item.shop.name=Shop
+feature.mainmenu.item.shop.command=/adminshop
+
+feature.mainmenu.item.home.name=Homes
+feature.mainmenu.item.home.command=/home
+
+feature.mainmenu.item.profile.name=Profile
+feature.mainmenu.item.profile.lore=In development
+
+feature.mainmenu.item.next_page=Next page
+feature.mainmenu.item.previous_page=Previous page
+
+feature.mainmenu.item.settings.name=Settings
+feature.mainmenu.item.settings.command=/settings
+
+feature.mainmenu.item.mailbox.name=Mailbox
+feature.mainmenu.item.mailbox.command=/mailbox home
+
+feature.mainmenu.item.shops_disabled=Shops (Disabled)
+feature.mainmenu.item.company_disabled=Businesses (Disabled)
+feature.mainmenu.item.leaderboard.name=Leaderboard
+feature.mainmenu.item.leaderboard.command=/leaderboard
+feature.mainmenu.item.bank.name=Bank
+feature.mainmenu.item.bank.command=/banque
+feature.mainmenu.item.coming_soon.name=Future
+feature.mainmenu.item.coming_soon.lore=This feature is under development.
+
+feature.mainmenu.message.dream_world=You cannot interact with the main menu from the dream world.
+feature.mainmenu.message.profile_dev=Player profiles are still in development :sad:.
+feature.mainmenu.message.advancements_hint=Press the ' key%1$s' to open the Advancements menu.
+feature.mainmenu.message.shops_disabled=Businesses and shops have been disabled :sad:.
+feature.mainmenu.message.leaderboard_dev=The leaderboard menu is still under development :sad:.\nYou can still use the /lb ou look at the holograms in the spawn.
+feature.mainmenu.message.coming_soon=This feature is under development and will be available soon!
+feature.mainmenu.advancements.loading=Loading...
+
diff --git a/src/main/resources/translations/en_GB/milestones.properties b/src/main/resources/translations/en_GB/milestones.properties
new file mode 100644
index 000000000..7af1e1df0
--- /dev/null
+++ b/src/main/resources/translations/en_GB/milestones.properties
@@ -0,0 +1,96 @@
+feature.milestones.menu.title.main=Milestones menu - More info
+feature.milestones.menu.title.milestone=Milestones menu - %1$s
+feature.milestones.menu.page.previous=◀ Previous page
+feature.milestones.menu.page.next=Next page ▶
+feature.milestones.menu.close=Close
+feature.milestones.menu.back=Back
+feature.milestones.menu.coming_soon=sComing soone
+
+feature.milestones.menu.city.name=Cities Milestone
+feature.milestones.menu.city.lore.intro_1=Discover the full cities
+feature.milestones.menu.city.lore.intro_2=Via this road of progression !
+feature.milestones.menu.city.lore.details=Claims, Mascots, Mayors, Wars, ...
+feature.milestones.menu.city.lore.need_city=Create or join a city to access this!
+feature.milestones.menu.city.lore.level=Level of your city: %1$s
+feature.milestones.menu.city.lore.click=CLICK HERE TO ACCESS YOUR MILESTONE
+
+feature.milestones.tutorial.name=OpenMC Tutorial
+feature.milestones.tutorial.description.1=Discover OpenMC !
+feature.milestones.tutorial.description.2=Review the features
+feature.milestones.tutorial.description.3=Cities, contests, the adminshop, quests, ...
+feature.milestones.tutorial.description.4=Ideal for embarking on an adventure!
+
+feature.milestones.tutorial.hologram.icon=%1$s
+feature.milestones.tutorial.hologram.welcome=Welcome to OpenMC V2!
+feature.milestones.tutorial.hologram.based_on=This version is based on the cities
+feature.milestones.tutorial.hologram.how_to=To access the tutorial, use the command /milestones.
+feature.milestones.tutorial.hologram.server=It's your server!
+feature.milestones.tutorial.hologram.separator=
+feature.milestones.tutorial.hologram.links=Useful links: /socials
+
+feature.milestones.tutorial.quest.spare_bank.name=Deposit money in the bank
+feature.milestones.tutorial.quest.spare_bank.description=Type /bank or go to the main menu (/menu) to be able to open the menu\
+ A competitive way to win big rewards!
+feature.milestones.tutorial.quest.spare_bank.reward=Well done! You finished thestage %1$s ! THE banks can store an infinite amount of money and protect it if you die! Now let's personalize the gaming experience using settings!
+
+feature.milestones.tutorial.quest.sell_buy.name=Buy or sell a resource in the adminshop
+feature.milestones.tutorial.quest.sell_buy.description=Type /adminshop or go to the main menu /menu to be able to sell or buy a resource\
+ This is the beginning of wealth!
+feature.milestones.tutorial.quest.sell_buy.reward=Well done! You finished thestage %1$s ! L'adminshop offers various items so you can build, or make money! However, when you die you lose %2$s% of your money! It is therefore important to pay attention to your skin, or else deposit money in your bank!
+
+feature.milestones.tutorial.quest.open_settings.name=Open settings menu
+feature.milestones.tutorial.quest.open_settings.description=Type /settings or go to the main menu (/menu) to be able to open the menu\
+ This will allow you to configure your gaming experience!
+feature.milestones.tutorial.quest.open_settings.reward=Well done! You finished thestage %1$s ! THE settings customize your game, they can be useful in certain cases, such as blocking friend requests, ... On a separate subject, you can switch to competition mode thanks to the contests, a sort of weekly competition!
+
+feature.milestones.tutorial.quest.open_quest.name=Open the quest menu
+feature.milestones.tutorial.quest.open_quest.description=Type /quests or go to the main menu (/menu) to be able to open the menu and see what quests you can complete\
+ This will launch you into adventure and give you challenges in order to diversify!
+feature.milestones.tutorial.quest.open_quest.reward=Well done! You finished thestage %1$s ! THE quests will help you get money easily for the start of game ! You can attempt to accomplish the stain whatever you want!
+
+feature.milestones.tutorial.quest.open_contest.name=Open the contests menu
+feature.milestones.tutorial.quest.open_contest.description=Type /contest or go to the main menu (/menu) to be able to open the menu\
+ A competitive way to win big rewards!
+feature.milestones.tutorial.quest.open_contest.reward=Well done! You finished thestage %1$s ! THE contests pit 2 groups against each other on a theme, the winners win a big reward! And here the tutorial is now finished, go and collect your reward in the mailbox, a letter system for receiving or sending letters!
+
+feature.milestones.tutorial.quest.open_adminshop.name=Open the adminshop menu
+feature.milestones.tutorial.quest.open_adminshop.description=Type /adminshop or go to the main menu (/menu) to be able to open the menu\
+ The market which varies according to supply and demand!
+feature.milestones.tutorial.quest.open_adminshop.reward=Well done! You finished thestage %1$s ! L'adminshop will help you get money and blocks! You can now sell or buy a resource in the adminshop!
+
+feature.milestones.tutorial.quest.home_upgrade.name=Improve your house limit
+feature.milestones.tutorial.quest.home_upgrade.description=Type /upgradehome or go to the menu of the homes (/homes)\
+ to be able to improve your house limit\
+ This will allow you to have more homes!
+feature.milestones.tutorial.quest.home_upgrade.reward=Well done! You finished thestage %1$s ! THE homes will be very useful for moving quickly between your bases! Now I think you need challenges! Open the menu of quests.
+
+feature.milestones.tutorial.quest.home_create.name=Place a home
+feature.milestones.tutorial.quest.home_create.description=Type /sethome by being where you want to put your home\
+ It's very useful to make one to teleport to your base!
+feature.milestones.tutorial.quest.home_create.reward=Well done! You finished thestage %1$s ! Homes are often used to avoid losing your base! You are limited to only having 1 home at the start. We will have to think about improving them...
+
+feature.milestones.tutorial.quest.finish_quest.name=Complete a quest
+feature.milestones.tutorial.quest.finish_quest.description=Complete a quest of your choice\
+ This will be able to give you money or certain resources!
+feature.milestones.tutorial.quest.finish_quest.reward=Well done! You finished thestage %1$s ! And here is a reward ! Practical, right? Let's discover another method of producing money and consuming it! Go into theadminshop, a place where several items can be purchased at varying prices depending on thesupply and demand !
+
+feature.milestones.tutorial.quest.claim_letter.name=Open the rewards letter
+feature.milestones.tutorial.quest.claim_letter.description=Type /mailbox or go to the main menu (/menu) to be able to open the mailbox menu\
+ An efficient way to send items to other players!
+feature.milestones.tutorial.quest.claim_letter.reward=Well done! You finished thestage %1$s ! You have discovered the basics of OpenMC. And now, you're free to discover the features for yourself! With that, we wish you the best in your adventure on OpenMC !
+
+feature.milestones.tutorial.quest.city_create.name=Create/Rejoindre une city
+feature.milestones.tutorial.quest.city_create.description=Do /city to start creating your city\
+ or join a city using an invitation!
+feature.milestones.tutorial.quest.city_create.reward=Well done! You finished thestage %1$s ! This version of OpenMC is centered around cities. There you will find a special milestone for cities (/city milestone) who will guide you in this unique adventure! And if you passed your city to level 2 ?
+
+feature.milestones.tutorial.quest.city_level_two.name=Have a level 2 city
+feature.milestones.tutorial.quest.city_level_two.description=Do /city milestone to find out more how\
+ improve your city!
+feature.milestones.tutorial.quest.city_level_two.reward=Well done! You finished thestage %1$s ! You're well on your way to discovering all the features hidden in cities! But before that, I would like you to ask a home.
+
+feature.milestones.tutorial.quest.break_aywenite.name=Break 30 Aywenites
+feature.milestones.tutorial.quest.break_aywenite.description=The new ore of V2, found in caves\
+ It will be to you useful in many features
+feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite is an ore, valuable for features. Besides, you can use it to make your city!
+
diff --git a/src/main/resources/translations/en_GB/privatemessage.properties b/src/main/resources/translations/en_GB/privatemessage.properties
new file mode 100644
index 000000000..fb9483ca7
--- /dev/null
+++ b/src/main/resources/translations/en_GB/privatemessage.properties
@@ -0,0 +1,17 @@
+feature.privatemessage.msg.cannot_message_yourself=You cannot send a private message to yourself.
+feature.privatemessage.msg.private_messages_disabled=You have disabled private messages.
+feature.privatemessage.msg.player_private_messages_disabled=The player %1$s Disabled private messages.
+feature.privatemessage.msg.format.sender=[You → %1$s] %2$s
+feature.privatemessage.msg.format.receiver=[%1$s →You] %2$s
+
+feature.privatemessage.socialspy.toggled_off=Social Spy disabled.
+feature.privatemessage.socialspy.toggled_on=Social Spy enabled.
+feature.privatemessage.socialspy.status_changed=Social Spy %1$s For %2$s.
+feature.privatemessage.socialspy.status.enabled=activated
+feature.privatemessage.socialspy.status.disabled=disabled
+feature.privatemessage.socialspy.format=[SPY] %1$s → %2$s: %3$s
+feature.privatemessage.socialspy.no_players=No player has social spy enabled.
+feature.privatemessage.socialspy.list_title=Players with Social Spy enabled:
+feature.privatemessage.socialspy.list_item=- %1$s
+feature.privatemessage.socialspy.list_total=Total: %1$s player(s)
+
diff --git a/src/main/resources/translations/en_GB/quests.properties b/src/main/resources/translations/en_GB/quests.properties
new file mode 100644
index 000000000..a98c5e661
--- /dev/null
+++ b/src/main/resources/translations/en_GB/quests.properties
@@ -0,0 +1,72 @@
+feature.quests.menu.title=Quest menu
+feature.quests.menu.page.previous=Previous page
+feature.quests.menu.page.next=Next page
+feature.quests.menu.tier_display=[%1$s/%2$s]
+feature.quests.menu.quest_item.name=%1$s %2$s %3$s
+feature.quests.menu.pending_rewards.title=Pending Rewards:
+feature.quests.menu.pending_rewards.tier=Landing %1$s:
+feature.quests.menu.rewards.title=Rewards:
+feature.quests.menu.completed=Quest completed!
+feature.quests.menu.progress=Progress: %1$s/%2$s (%3$s%%)
+feature.quests.menu.current_objective=Current goal:
+feature.quests.menu.steps.title=Advancement:
+feature.quests.menu.next_tier.title=Next tier:
+
+feature.quests.actionbar.progress_label=Quest progress
+
+feature.quests.title.completed=Quest complete!
+feature.quests.title.tier_completed=Landing %1$s finished !
+
+feature.quests.message.money_reward=You have received %1$s
+feature.quests.message.inventory_full_reward=You don't have enough space in your inventory to receive the reward!
+feature.quests.message.completed=★ Quest complete! %1$s is now complete!
+feature.quests.message.tier_completed=★ Bearing %1$s of %2$s valid !
+feature.quests.message.rewards_claimed=You have collected all the rewards of the tier %1$s of the quest %2$s !
+feature.quests.message.inventory_full_claim=You don't have enough space in your inventory to collect all the rewards. Free up some space and try again.
+feature.quests.message.step_completed=✓ Step %1$s of %2$s validated!
+
+feature.quests.break_log.lore.line=%1$s : %2$s points
+
+feature.quests.break_diamond.name=Richou
+feature.quests.break_diamond.description=Break diamond {target} ore{s}
+feature.quests.break_log.name=Extreme lumberjack
+feature.quests.break_log.description=Break {target} logs
+feature.quests.break_stone.name=Stone Breaker
+feature.quests.break_stone.description=Miner {target} stone blocks
+feature.quests.break_wheat.name=Dedicated farmer
+feature.quests.break_wheat.description=Harvest {target} wheat
+feature.quests.chicken_thrower.name=Chicken thrower
+feature.quests.chicken_thrower.description=Throw {target} eggs
+feature.quests.consume_kebab.name=Yum yum
+feature.quests.consume_kebab.description=Eat {target} kebab{s}
+feature.quests.craft_cake.name=The pastry chef
+feature.quests.craft_cake.description=Craft {target} cakes
+feature.quests.craft_diamond_armor.name=Precious armor
+feature.quests.craft_diamond_armor.description=Craft Full Diamond Armor
+feature.quests.craft_diamond_armor.step.helmet=Diamond Helmet
+feature.quests.craft_diamond_armor.step.chestplate=Diamond breastplate
+feature.quests.craft_diamond_armor.step.leggings=Diamond pants
+feature.quests.craft_diamond_armor.step.boots=Diamond Boots
+feature.quests.craft_the_mixture.name=The Mixture
+feature.quests.craft_the_mixture.description=Make {target} The Mixture{s}
+feature.quests.enchant_first_item.name=Abracadabra
+feature.quests.enchant_first_item.description=Enchant an item for the first time
+feature.quests.fishing.name=Experienced fisherman
+feature.quests.fishing.description=Catch {target} fish
+feature.quests.kill_players.name=Hitman
+feature.quests.kill_players.description=Kill {target} players
+feature.quests.kill_super_creeper.name=The creeper boss
+feature.quests.kill_super_creeper.description=Kill {target} Super Charged Creepers
+feature.quests.kill_zombie.name=Zombie Apocalypse?
+feature.quests.kill_zombie.description=Kill {target} zombies
+feature.quests.mine_aywenite.name=Ohhh... is that precious?
+feature.quests.mine_aywenite.description=Miner {target} Aywenite{s}
+feature.quests.save_the_earth.name=Let's save the planet
+feature.quests.save_the_earth.description=Plant {target} trees and make them grow with bone meal
+feature.quests.smelt_iron.name=Hot in front!
+feature.quests.smelt_iron.description=Melt {target} iron ingots
+feature.quests.walk.name=The hiker
+feature.quests.walk.description=Walk {target} blocks
+feature.quests.win_contest.name=Choose your side
+feature.quests.win_contest.description=Win {target} contest
+
diff --git a/src/main/resources/translations/en_GB/settings.properties b/src/main/resources/translations/en_GB/settings.properties
new file mode 100644
index 000000000..6106bb8ab
--- /dev/null
+++ b/src/main/resources/translations/en_GB/settings.properties
@@ -0,0 +1,55 @@
+feature.settings.menu.title=Settings menu
+feature.settings.reset.title=Reset settings
+feature.settings.reset.confirm_message=Are you sure you want to reset all settings?
+feature.settings.reset.warning=This action is irreversible.
+feature.settings.reset.cancel=Click to cancel
+feature.settings.reset.success=All settings have been reset.
+
+feature.settings.item.status_enabled=Enabled
+feature.settings.item.status_disabled=Disabled
+feature.settings.item.change=Click to change
+feature.settings.item.changed=%1$s %2$s
+feature.settings.item.updated=%1$s updated.
+
+feature.settings.error.set=Error : %1$s
+feature.settings.error.parse=Error during parsing: %1$s
+
+feature.settings.type.friend_requests.name=Friend Request Policy
+feature.settings.type.friend_requests.description=Who can send you friend requests:
+feature.settings.type.city_join_requests.name=City Join Request Policy
+feature.settings.type.city_join_requests.description=Who can ask you to join a city:
+feature.settings.type.mascot_play_sound.name=Receive sounds from mascots
+feature.settings.type.mascot_play_sound.description=Turn pet sounds on or off
+feature.settings.type.mailbox_receive.name=Mailbox reception policy
+feature.settings.type.mailbox_receive.description=Who can send you mailboxes:
+feature.settings.type.private_message.name=Receive private messages
+feature.settings.type.private_message.description=Who can send you private messages:
+feature.settings.type.notifications_sound.name=Message sounds
+feature.settings.type.notifications_sound.description=Turn private message sounds on or off
+feature.settings.type.teleport_title_fade.name=Title fade during teleports
+feature.settings.type.teleport_title_fade.description=Enable or disable title fading during teleports
+feature.settings.type.join_animation.name=Connection animation
+feature.settings.type.join_animation.description=Enable or disable login animation
+
+feature.settings.policy.global.everyone.name=Everyone
+feature.settings.policy.global.everyone.description=Visible to all players
+feature.settings.policy.global.friends.name=Friends only
+feature.settings.policy.global.friends.description=Visible only to my friends
+feature.settings.policy.global.city_members.name=Members of my city
+feature.settings.policy.global.city_members.description=Visible to members of my city
+feature.settings.policy.global.nobody.name=Person
+feature.settings.policy.global.nobody.description=Information hidden from everyone
+
+feature.settings.policy.friend.everyone.name=Everyone
+feature.settings.policy.friend.everyone.description=Accept friend requests from all players
+feature.settings.policy.friend.city_members_only.name=Members of my city
+feature.settings.policy.friend.city_members_only.description=Only accept requests from members in my city
+feature.settings.policy.friend.nobody.name=Person
+feature.settings.policy.friend.nobody.description=Decline all friend requests
+
+feature.settings.policy.city.everyone.name=Everyone
+feature.settings.policy.city.everyone.description=Accept requests from all players
+feature.settings.policy.city.friends.name=Friends only
+feature.settings.policy.city.friends.description=Only accept requests from my friends
+feature.settings.policy.city.nobody.name=Person
+feature.settings.policy.city.nobody.description=Refuse all requests
diff --git a/src/main/resources/translations/en_GB/tickets.properties b/src/main/resources/translations/en_GB/tickets.properties
new file mode 100644
index 000000000..bd46a1056
--- /dev/null
+++ b/src/main/resources/translations/en_GB/tickets.properties
@@ -0,0 +1,33 @@
+feature.tickets.machine.title=Ball machine
+feature.tickets.machine.hologram_line1=Ball machine V1
+feature.tickets.machine.hologram_line2=Click to play!
+feature.tickets.machine.hologram_line3=Good luck !
+
+feature.tickets.menu.get_tickets.title=Collect my tickets
+feature.tickets.menu.get_tickets.lore1=Collect the tickets that
+feature.tickets.menu.get_tickets.lore2=you have collected thanks to your
+feature.tickets.menu.get_tickets.lore3=playing time on OpenMC V1.
+feature.tickets.menu.no_stats=You do not have statistics to recover tickets.
+feature.tickets.menu.already_claimed=You have already collected your tickets!
+feature.tickets.menu.no_tickets=You don't have any tickets to collect!
+feature.tickets.menu.claimed=You have received %1$stickets!
+
+feature.tickets.menu.open_ticket.title=Open a ticket
+feature.tickets.menu.open_ticket.lore1=Open a box with 1 ticket.
+feature.tickets.menu.open_ticket.lore2=You currently have %1$stickets.
+feature.tickets.menu.not_enough_tickets=You don't have enough tickets!
+feature.tickets.loot.limit_reached=You have already reached the limit of this item:
+feature.tickets.loot.machine_ball.seinyy.name=Seinyy plush
+feature.tickets.loot.machine_ball.seinyy.lore=A little plush like Seinyy!
+feature.tickets.loot.machine_ball.diamond.name=Diamonds
+feature.tickets.loot.machine_ball.diamond.lore=Ohhhh but how precious is this thing!?
+feature.tickets.loot.machine_ball.iron.name=Iron Ingots
+feature.tickets.loot.machine_ball.iron.lore=Just iron, nothing crazy...
+feature.tickets.loot.machine_ball.netherite.name=Netherite Ingot
+feature.tickets.loot.machine_ball.netherite.lore=The rarest thing in the game!
+feature.tickets.loot.machine_ball.oak_log.name=Oak Logs
+feature.tickets.loot.machine_ball.oak_log.lore=Enough to make you a little house hehe
+feature.tickets.loot.machine_ball.steak.name=Steaks
+feature.tickets.loot.machine_ball.steak.lore=Yum yum, good meat!
+feature.tickets.loot.machine_ball.coal.name=Coal
+feature.tickets.loot.machine_ball.coal.lore=Something to make a fire
diff --git a/src/main/resources/translations/en_GB/tpa.properties b/src/main/resources/translations/en_GB/tpa.properties
new file mode 100644
index 000000000..88810f6a1
--- /dev/null
+++ b/src/main/resources/translations/en_GB/tpa.properties
@@ -0,0 +1,36 @@
+feature.tpa.already_pending=You already have a pending teleport request
+feature.tpa.already_pending_usage=Type /tpacancelto cancel your current TP request
+feature.tpa.player_not_found=The player does not exist or is not online
+feature.tpa.cannot_tp_yourself=You cannot send a teleport request to yourself
+feature.tpa.already_have_pending=You already have a teleport request awaiting your acceptance
+
+feature.tpa.request.target_message=The player %1$s wants to teleport to you
+feature.tpa.request.target_accept=Type /tpacceptto accept
+feature.tpa.request.target_deny=And /tpadenyto refuse
+feature.tpa.request.sender_message=You sent a teleport request to %1$s
+feature.tpa.request.sender_cancel=Type /tpacancelto cancel your tp request
+feature.tpa.request.hover.accept=Accept the TP request
+feature.tpa.request.hover.deny=Refuse the TP request
+feature.tpa.request.hover.cancel=Cancel the TP request
+
+feature.tpa.accept.no_pending=You have no current teleport requests
+feature.tpa.accept.multiple_requests=You have several teleport requests in progress, use /tpaccept
+feature.tpa.accept.no_request_from=You do not have a teleport request from %1$s
+feature.tpa.accept.falling=The player is falling, teleportation impossible
+feature.tpa.accept.you_falling=You are falling, teleportation impossible
+feature.tpa.accept.player_not_online=The player is not online or does not exist
+feature.tpa.accept.success=Teleport successful
+
+feature.tpa.deny.no_pending=You have no current teleport requests
+feature.tpa.deny.multiple_requests=You have several teleport requests in progress, use /tpadeny
+feature.tpa.deny.no_request_from=You do not have a teleport request from %1$s
+feature.tpa.deny.success=You refused the teleport request from %1$s
+feature.tpa.deny.denied=%1$s refused your teleport request
+
+feature.tpa.cancel.no_pending=You have no current teleport requests
+feature.tpa.cancel.player_not_online=The player is not online or does not exist
+feature.tpa.cancel.success=You canceled your teleport request to %1$s
+feature.tpa.cancel.cancelled=%1$s canceled his teleport request
+
+feature.tpa.expire.sender=Your teleport request to %1$s expired
+feature.tpa.expire.target=The request for teleportation %1$s expired
diff --git a/src/main/resources/translations/en_GB/updates.properties b/src/main/resources/translations/en_GB/updates.properties
new file mode 100644
index 000000000..dbcbeaf46
--- /dev/null
+++ b/src/main/resources/translations/en_GB/updates.properties
@@ -0,0 +1,6 @@
+feature.updates.message.broadcast_version= \
+ \
+ You are currently playing on the version %1$s of the plugin OpenMC. \
+ \
+
+
diff --git a/src/main/resources/translations/en_GB/utils.properties b/src/main/resources/translations/en_GB/utils.properties
new file mode 100644
index 000000000..a48eee6bc
--- /dev/null
+++ b/src/main/resources/translations/en_GB/utils.properties
@@ -0,0 +1,3 @@
+core.utils.fade_title.teleporting=Teleport...
+core.utils.aywenite.not_enough=You don't have enough%1$s (%2$s necessary)
+core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s of%2$s. Aywenite is available in your mailbox
diff --git a/src/main/resources/translations/en_US/adminshop.properties b/src/main/resources/translations/en_US/adminshop.properties
new file mode 100644
index 000000000..867cf25fe
--- /dev/null
+++ b/src/main/resources/translations/en_US/adminshop.properties
@@ -0,0 +1,41 @@
+# ** ADMINSHOP **
+feature.adminshop.menu.category.name=Menu of an adminshop category
+feature.adminshop.right_click_choice=■Left click to choose the item
+feature.adminshop.lore_item.buy=Buy : %1$s
+feature.adminshop.lore_item.sell=Sell : %1$s
+feature.adminshop.right_click_buy=■Left click to buy
+feature.adminshop.left_click_sell=■Right click to sell
+
+feature.adminshop.menu.main.name=AdminShop Main Menu
+
+feature.adminshop.menu.color_variants.name=Color variants menu for %1$s
+
+feature.adminshop.menu.confirm.name=AdminShop Confirmation Menu
+feature.adminshop.menu.confirm.lore=■Quantity :%1$s(%2$s stack%3$s)\
+ ■Unit price:%4$s%5$s \
+ ■Total price:%6$s%7$s \
+ \
+ ■Click the wheel to define the quantity manually
+feature.adminshop.menu.confirm.input=Please enter the desired quantity:
+feature.adminshop.menu.confirm.quantity=%1$s %2$s
+feature.adminshop.menu.confirm.add=Add
+feature.adminshop.menu.confirm.remove=Withdraw
+
+feature.adminshop.menu.leaves_variants.name=Leaf Variants Menu
+feature.adminshop.menu.leaves_variants.leaves=Leaves
+
+feature.adminshop.menu.log_variants.name=Menu of log variations
+feature.adminshop.menu.log_variants.log=Logs
+
+feature.adminshop.have_enough_item=You do not have this item in your inventory!
+feature.adminshop.have_enough_money=You don't have enough money!
+feature.adminshop.inventory_full=Your inventory is full!
+feature.adminshop.item_not_sellable=This product is not for sale!
+feature.adminshop.item_not_buyable=This product is not purchasable!
+feature.adminshop.player_not_enough_item=You don't have enough of this item in your inventory!
+feature.adminshop.item_not_found=This product does not exist!
+feature.adminshop.isnt_in_category=Please open a store category first!
+
+feature.adminshop.player_buy_item=You bought %1$s %2$s For %3$s
+feature.adminshop.player_sell_item=You sold %1$s %2$s For %3$s
+
diff --git a/src/main/resources/translations/en_US/api.properties b/src/main/resources/translations/en_US/api.properties
index 2236c4fce..faae7390a 100644
--- a/src/main/resources/translations/en_US/api.properties
+++ b/src/main/resources/translations/en_US/api.properties
@@ -1,2 +1,46 @@
-api.dialoginput.type_string=input english
+# ** API **
+api.chronometer.chronometer_not_found=No timers found for the group %1$s
+api.chronometer.chronometer_on=Active stopwatches:
+api.chronometer.chronometer_on_list= - %1$s: %2$ss
+api.chronometer.none_chronometer_player=This player has no active timer.
+
+# | Le temps restant en secondes
+# | Le temps restant en millisecondes
+api.cooldown.must_wait=You have to wait %s
+
+api.iteminteraction.not_egnough_space=You don't have enough space in your inventory! The action was canceled
+api.iteminteraction.have_already_item=You already have this item in your inventory! The action was canceled
+api.iteminteraction.cant_move_item=You cannot move this object here
+api.iteminteraction.cant_move_item_by_shiftclick=You cannot move this object by shift-click
+api.iteminteraction.cant_throw_item=You cannot throw this item away
+
+api.chatinput.cancel=You canceled the action
+
+api.dialoginput.type_string=Enter text
+api.dialoginput.type_string.here=Enter text here
+
+api.dialoginput.type_float=Enter a number
+api.dialoginput.type_float.here=Enter a number here
+
+api.dialoginput.button.save=Save
+api.dialoginput.button.confirm=Confirm
+api.dialoginput.button.cancel=Cancel
+api.dialoginput.button.back=Back
+api.dialoginput.button.next=Next
+api.dialoginput.button.previous=Previous
+api.dialoginput.button.finish=Finish
+api.dialoginput.button.ignore=Ignore
+
+api.menulib.an_error_occurred=An error has occurred, please contact the Staff
+api.menulib.no_permission=You do not have permission to open this menu.
+
+api.menulib.menu.back.title=Back
+api.menulib.menu.back=Previous Menu
+api.menulib.menu.back.lore=You will return to %1$s.\
+ CLICK HERE TO CONFIRM
+api.menulib.menu.confirm.title=Confirmation Menu
+api.menulib.menu.confirm.accept.title=Accept
+api.menulib.menu.confirm.accept.lore=CLICK HERE TO VALIDATE
+api.menulib.menu.confirm.deny.title=Refuse
+api.menulib.menu.confirm.deny.lore=CLICK HERE TO REFUSE
diff --git a/src/main/resources/translations/en_US/city.properties b/src/main/resources/translations/en_US/city.properties
new file mode 100644
index 000000000..67629df8b
--- /dev/null
+++ b/src/main/resources/translations/en_US/city.properties
@@ -0,0 +1,1390 @@
+# ** CITY **
+# * COMMANDS
+# - Global / Shared
+messages.city.player_no_in_city=You're not in a city.
+messages.city.player_already_in_city=You are already in a city.
+messages.city.target_in_other_city=This player is not in your city.
+messages.city.target_no_city=This player is not in a city.
+messages.city.player_no_permission_access=You do not have permission to access the permissions of this city.
+messages.city.not_found=This city does not exist.
+messages.city.havent_unlocked_feature=You have not unlocked this feature! Please upgrade your city to the level %1$s!
+messages.city.city_not_enough_money=Your city doesn't have enough money (%1$s necessary)
+
+# - Player Commands
+feature.city.commands.menu.must_place_mascot=You cannot open the cities menu without having placed the mascot
+feature.city.commands.create.enter_city_name=Enter the city name
+feature.city.commands.rename.invalid_name=The city name is invalid, it must contain only alphanumeric characters and maximum %1$s characters.
+feature.city.commands.rename.success=The city was renamed to %1$s
+feature.city.commands.list.empty=No city exists
+feature.city.commands.top.empty=No cities are created at the moment
+
+# - Admin Commands
+feature.city.admin.commands.delete.success=The city was deleted
+feature.city.admin.commands.list.header=—— Cities (page %1$s / %2$s) ——
+feature.city.admin.commands.list.copy_label= [copy]
+feature.city.admin.commands.list.copy_uuid_hover=Click to copy the UUID
+feature.city.admin.commands.list.nav.prev=« Previous
+feature.city.admin.commands.list.nav.next=Next »
+feature.city.admin.commands.info.not_found=This city does not exist
+feature.city.admin.commands.rename.name_already_used=A city already has the name you want to put
+feature.city.admin.commands.rename.success=The city was renamed
+feature.city.admin.commands.balance.set_success=City balance has been changed
+feature.city.admin.commands.balance.get_success=The city's balance is %1$s
+feature.city.admin.commands.add_player.already_in_city=This player is already in a city
+feature.city.admin.commands.add_player.success=The player has been added
+feature.city.admin.commands.remove_player.not_in_city=This player is not in a city
+feature.city.admin.commands.remove_player.is_owner=This player is the owner of the city
+feature.city.admin.commands.remove_player.success=The player has been removed
+feature.city.admin.commands.getcity.not_in_city=The player is not in a city
+feature.city.admin.commands.getcity.success=The player is in the city %1$s (%2$s)
+feature.city.admin.commands.claim_bypass.disabled=You have disabled claims bypass
+feature.city.admin.commands.claim_bypass.enabled=You have activated claims bypass
+
+# - Invite Commands
+feature.city.invite.commands.invite.success=You invited %1$s in your city
+feature.city.invite.commands.invite.received=You have been invited by %1$s in the city %2$s
+feature.city.invite.commands.invite.accept=Do /city accept to accept
+feature.city.invite.commands.invite.deny=Do /city deny to refuse
+feature.city.invite.commands.invite.accept_hover=Accept the invitation
+feature.city.invite.commands.invite.deny_hover=Refuse the invitation
+feature.city.invite.commands.accept.none_pending=You have no pending invitations
+feature.city.invite.commands.accept.not_invited=%1$s didn't invite you
+feature.city.invite.commands.accept.joined=You joined %1$s
+feature.city.invite.commands.accept.inviter_notified=%1$s accepted your invitation!
+feature.city.invite.commands.deny.inviter_notified=%1$s refused your invitation
+
+# - Permissions Commands
+feature.city.perms.commands.switch.removed=%1$s lost permission "%2$s"
+feature.city.perms.commands.switch.added=%1$s received permission "%2$s"
+feature.city.perms.commands.add.already_has=%1$s already has this permission
+feature.city.perms.commands.remove.does_not_have=%1$s does not have this permission
+feature.city.perms.commands.modified=The permissions of %1$s have been modified
+
+# - City View Command
+feature.city.view.commands.no_city=No towns were found in the surrounding area.
+feature.city.view.commands.visiualizing=Viewing current city claims for 30 seconds
+
+# * ACTIONS
+# - Type Change
+feature.city.type.in_peace=in peace
+feature.city.type.in_war=at war
+feature.city.type.confirm_change=Are you sure you want to change the type of your city
+feature.city.type.change_type_to_type=You will go from one city %1$s to acity %2$s
+feature.city.type.warning_war=⚠ You may be exposed to wars against other cities at any time!
+feature.city.type.mascot_losing_level=⚠ Your mascot will lose 1 level!
+feature.city.type.not_change_type=Do not change thetype of city
+feature.city.type.mascot_not_exist_change_type=You do not have a mascot to change the type of your city (contact the staff)
+feature.city.type.mascot_must_by_alive_change_type=Your mascot must be alive to change the city type
+feature.city.type.must_wait_before_change_type=You have to wait %1$s before changing city type
+feature.city.type.change_type_success=You have changed the type of your city from %1$s has %2$s
+
+# - Chest
+feature.city.chest.upgraded=The trunk has been improved
+
+# - Claim
+feature.city.claim.cant_claim_here=You can't expand your city here
+feature.city.claim.isnt_adjacent=This chunk is not adjacent to your city
+feature.city.claim.is_in_region=This chunk is in a protected region
+feature.city.claim.already_claim=This chunk is already claimed by %1$s.
+feature.city.claim.claim_success=Your city has been expanded
+feature.city.claim.already_claim_in_adjacent=One of the plots around this chunk is claim
+
+# - Create
+feature.city.create.success=Your city has been created: %1$s
+feature.city.create.free_claim=+ %1$s free chunks
+
+# - Delete
+feature.city.delete.confirm.lore=Do you really want to dissolve the city? %1$s ?
+feature.city.delete.confirm.warning=This action is IRREVERSIBLE
+feature.city.delete.confirm.deny=Don't delete the city
+feature.city.delete.success=Your city has been deleted
+
+# - Kick
+feature.city.kick.success=You excluded %1$s of the city %2$s
+feature.city.kick.info=You were kicked out of town %1$s
+
+# - Leave
+feature.city.leave.success=You left %1$s
+feature.city.leave.info=%1$s left town %2$s
+
+# - Transfer
+feature.city.transfer.confirm.accept=Do you really want to give the city to %1$s ?
+feature.city.transfer.confirm.deny=You are not going to give the city to %1$s
+feature.city.transfer.success=The new owner is %1$s
+feature.city.transfer.info=You became the owner of the city
+
+# - Unclaim
+feature.city.unclaim.must_own_claim=You must own this claim for unclaim
+feature.city.unclaim.cant_unclaim_mascot_claim=You cannot unclaim the mascot's claim
+feature.city.unclaim.success=You have just shrunk your city by deleting this claim
+
+# * CONDITIONS
+# - Permissions / Access
+feature.city.player_cannot_claim=You don't have permission to expand your city.
+feature.city.player_cannot_kick=You do not have permission to exclude this member.
+feature.city.player_cannot_kick_himself=You can't exclude yourself.
+
+feature.city.player_isnt_owner=You are not the owner of the city
+feature.city.player_is_owner=The owner has all the powers.
+feature.city.only_owner_can_do_this=Only the city owner can do this.
+feature.city.cant_do_this=You do not have permission to do this!
+
+
+# - Manage
+feature.city.conditions.manage.rename.no_permission=You don't have permission to rename your city.
+feature.city.conditions.manage.transfer.self=You can't transfer the city to yourself
+feature.city.conditions.manage.transfer.already_owner=This player is already the owner of the city
+feature.city.conditions.manage.delete.must_wait=You have to wait before you can delete your city (%1$s seconds)
+feature.city.conditions.manage.delete.cant_in_war=You cannot delete your city during a war
+
+# - Claim / Unclaim
+feature.city.conditions.claim.no_permission=You don't have permission to claim
+feature.city.conditions.unclaim.no_permission=You do not have permission to unclaim
+feature.city.conditions.claim.not_enough_city_money=You don't have enough money in your bank to claim (%1$s necessary)
+
+# - Create
+feature.city.conditions.create.must_wait=You have to wait before you can create your city (%1$s seconds)
+feature.city.conditions.create.not_enough_player_money=You don't have enough money to create your city (%1$s necessary)
+
+# - Resources
+feature.city.conditions.resource.not_enough_aywenite=You don't have enough Aywenite (%1$s necessary)
+
+# - Chest
+feature.city.conditions.chest.open.no_permission=You do not have permissions to view the vault
+feature.city.conditions.chest.open.already_opened_by=The trunk is already opened by %1$s
+feature.city.conditions.chest.upgrade.no_permission=You do not have permissions to upgrade the city chest
+feature.city.conditions.chest.upgrade.max_level=The city chest is already at the maximum level (%1$s maximum page(s). To improve this limit, upgrade to a higher city level
+
+# - Invite
+feature.city.conditions.invite.no_permission=You don't have permission to invite players into the city
+feature.city.conditions.invite.target_already_in_city=This person is already in a city
+feature.city.conditions.invite.target_cant_receive=This person cannot receive an invitation
+feature.city.conditions.invite.member_limit_reached=You have reached the member limit which is %1$s. Upgrade your city to the next level!
+feature.city.conditions.invite.expired=The invitation has expired
+feature.city.conditions.invite.city_member_limit_reached=The city has reached its membership limit
+
+# - Type
+feature.city.conditions.type.no_permission=You do not have permission to change the status of your city
+feature.city.conditions.type.already_in_type=You are already in %1$s
+feature.city.conditions.type.must_wait=You have to wait %1$s to change city type
+feature.city.conditions.type.not_enough_city_money=You must have at least %1$s in your bank to change the type of your city
+
+# - Leave
+feature.city.conditions.leave.owner_cant_leave=You cannot leave the city because you own it, delete the city or transfer ownership
+
+# * LISTENERS
+feature.city.listeners.tnt_explode=You took a TNT in your city by the city %1$s and posed by %2$s ! (%3$s/%4$s daily tnt)
+
+# * MENUS
+feature.city.menus.main.name=Cities Menu
+feature.city.menus.main.bank.title=The bank
+feature.city.menus.main.bank.lore.unlocked=Store your money and that of your city \
+ Contribute to the development of your city \
+ CLICK HERE TO ACCESS THE ACCOUNTS
+feature.city.menus.main.bank.lore.locked=Store your money and that of your city \
+ Contribute to the development of your city \
+ You must be level %1$s to unlock this
+feature.city.menus.main.map.title=Size of your city
+feature.city.menus.main.map.no_permission=You do not have permission to view the claims
+feature.city.menus.main.map.lore.access=Your city has an area of %1$s \
+ CLICK HERE TO ACCESS THE MAP
+feature.city.menus.main.map.lore.view=Your city has an area of %1$s
+feature.city.menus.main.leave.title=Leave the city
+feature.city.menus.main.leave.confirm.accept=Do you really want to leave %1$s ?
+feature.city.menus.main.leave.confirm.deny=Stay in the city %1$s
+feature.city.menus.main.leave.lore.leave=You go to leave %1$s \
+ CLICK HERE TO GO
+feature.city.menus.main.leave.lore.owner_cant=You can't to leave %1$s because you are owner
+feature.city.menus.main.chest.title=The city chest
+feature.city.menus.main.chest.lore.locked=Access your city's vault to \
+ store items in common \
+ You must be level %1$s to unlock this
+feature.city.menus.main.chest.lore.opened=Access your city's vault to \
+ store items in common \
+ This chest is already opened by %1$s
+feature.city.menus.main.chest.lore.click=Access your city's vault to \
+ store items in common \
+ CLICK HERE TO ACCESS THE CHEST
+feature.city.menus.main.chest.lore.no_permission=You do not have the right to view the chest!
+feature.city.menus.main.milestone.title=Milestone of your city
+feature.city.menus.main.milestone.lore=Access the city progression route! \
+ Important for unlocking the different city features! \
+ Level: %1$s \
+ CLICK HERE TO ACCESS THE MILESTONE
+feature.city.menus.main.notation.title=The rating of your city
+feature.city.menus.main.notation.lore=City rating: %1$s/%2$s \
+ Money won: %3$s %4$s \
+ CLICK HERE TO VIEW RATING
+feature.city.menus.main.notation.lore.none=You have no rating
+feature.city.menus.main.notation.lore.locked=You must be level %1$s to unlock this
+feature.city.notation.dialog.title=Ranking of Cities - Week %1$s of %2$s
+feature.city.notation.header.city=City
+feature.city.notation.header.activity=Activ.
+feature.city.notation.header.economy=Econo.
+feature.city.notation.header.military=Milit.
+feature.city.notation.header.architectural=Arch.
+feature.city.notation.header.coherence=Oh.
+feature.city.notation.header.total=Total
+feature.city.notation.header.money=Money
+feature.city.notation.table.none=No rating
+feature.city.notation.hover.city.mascot_level=Mascot level: %1$s
+feature.city.notation.hover.city.status=Status : %1$s
+feature.city.notation.hover.city.members=Members: %1$s
+feature.city.notation.hover.city.more_info=Click here for more information about the city
+feature.city.notation.hover.total.none=No total for you
+feature.city.notation.hover.total.title=Details
+feature.city.notation.hover.total.activity=Activity %1$s
+feature.city.notation.hover.total.economy=Economy %1$s
+feature.city.notation.hover.total.military=Military %1$s
+feature.city.notation.hover.total.architecture=Architecture %1$s
+feature.city.notation.hover.total.coherence=Consistency %1$s
+feature.city.notation.hover.total.justification=Rationale for rating
+feature.city.notation.hover.activity=Rating ranging from 0 to %1$s points, which includes, the number of active players in the city per a city's playing time. \
+ Note on %1$s points
+feature.city.notation.hover.economy=Note which includes, the wealth of the city and the GDP per capita of the city. \
+ Note on %1$s points
+feature.city.notation.hover.military=Rating which is based on the quantity of power points in your city, recoverable through wars \
+ Note on %1$s points
+feature.city.notation.hover.coherence=Coherence note which includes, the coherence of the constructions between them, the harmony of the colors, the transition between 2 themes, ... \
+ Note on %1$s points
+feature.city.notation.hover.architectural=Architectural note which includes the diversity of blocks used, the architecture of the builds as well as the vegetation. \
+ Note on %1$s points
+feature.city.notation.join.title=RATING!
+feature.city.notation.join.message=Your city has been rated and is placed no.%1$s of the best cities!
+feature.city.notation.join.hover=Click to see your city's rating!
+feature.city.notation.command.none=No ratings have been posted for this week!
+feature.city.notation.admin.edit.example=Example: this week we are %1$s and next week, the %2$s
+feature.city.notation.admin.edit.prompt=Enter the week format (%1$s)
+feature.city.notation.admin.edit.invalid=Wrong entry! %1$s
+feature.city.notation.admin.edit.none=No city to edit
+feature.city.notation.admin.edit.error=Error opening menu
+feature.city.notation.admin.publish.missing=You must do /admcity notation edit and edit the week %1$s
+feature.city.notation.admin.publish.success=The week %1$s was published, the savings and activity scores as well as the gains were calculated and given
+feature.city.notation.edit.teleport=Teleport to the city in question.
+feature.city.notation.edit.teleport.success=You have been teleported to the city %1$s. Click on the message to continue editing.
+feature.city.notation.edit.input.architectural=Architectural Note
+feature.city.notation.edit.input.architectural.hover=Note on %1$s points \
+ which takes into account the buildings, infrastructure and aesthetics of the city
+feature.city.notation.edit.input.coherence=Rating Consistency
+feature.city.notation.edit.input.coherence.hover=Note on %1$s points \
+ which takes into account the consistency of builds and the gradual change of theme.
+feature.city.notation.edit.input.justification=Rationale for rating
+feature.city.notation.edit.input.justification.hover=A justification of the grade is mandatory
+feature.city.notation.edit.title=Ranking of weekly ratings %1$s - City Edition: %2$s (%3$s/%4$s)
+feature.city.notation.edit.completed=The ratings for the %1$s were completely done
+feature.city.menus.main.ranks.title=City Ranks
+feature.city.menus.main.ranks.lore.unlocked=Manage your city's ranks \
+ Your Rank: %1$s \
+ CLICK HERE TO ACCESS THE GRADES
+feature.city.menus.main.ranks.lore.locked=Manage your city's ranks \
+ You must be Level %1$s to unlock this
+feature.city.menus.main.type.title=The status of your city
+feature.city.menus.main.type.lore.status=Your city is in %1$s
+feature.city.menus.main.type.lore.war_command=You can start a war with /war
+feature.city.menus.main.type.lore.cooldown=Cooldown: %1$s
+feature.city.menus.main.type.lore.click=CLICK HERE TO CHANGE IT
+feature.city.menus.main.mayor.title=The elections
+feature.city.menus.main.mayor.locked.phase2=At the moment, the mayors are all diligent in the cities! \
+ Except yours! \
+ You must be level %1$s to unlock this
+feature.city.menus.main.mayor.locked.phase1=The elections are currently open \
+ Closure in %1$s \
+ But you can't access it! \
+ You must be level %2$s to unlock this
+feature.city.menus.main.mayor.locked.error=Error \
+ You must be level %1$s to unlock this
+feature.city.menus.main.mayor.election.phase2=Your city has a mayor ! \
+ Mayor: %1$s \
+ CLICK HERE TO ACCESS THE INFORMATION
+feature.city.menus.main.mayor.election.phase1=The elections are currently open \
+ Closure in %1$s \
+ CLICK HERE TO ACCESS THE ELECTIONS
+feature.city.menus.main.mayor.election.error=Error
+feature.city.menus.main.mayor.owner.phase2=Your city has a mayor ! \
+ Mayor: %1$s \
+ Opening of elections in %2$s \
+ CLICK HERE TO ACCESS THE INFORMATION
+feature.city.menus.main.mayor.owner.phase1.has_mayor=The elections are disabled \
+ You need at least %1$s members \
+ You have already chosen your reforms ! \
+ However you can change your color! \
+ Closure in %2$s
+feature.city.menus.main.mayor.owner.phase1.no_mayor=The elections are disabled \
+ You need at least %1$s members \
+ Only the owner can choose the reforms that he wants. \
+ Closure in %2$s \
+ CLICK HERE TO CHOOSE YOUR REFORMS
+feature.city.menus.main.mayor.owner.phase1.viewer=The elections are disabled \
+ You need at least %1$s members \
+ Only the owner can choose the reforms that he wants. \
+ Closure in %2$s
+feature.city.menus.main.mayor.owner.error=Error
+feature.city.menus.main.mascots.title=Your Mascot
+feature.city.menus.main.mascots.lore.dead=Life : %1$s/%2$s \
+ Status :Dead \
+ Reappears in: %3$s \
+ Level : %4$s \
+ CLICK HERE TO INTERACT WITH
+feature.city.menus.main.mascots.lore.alive=Life : %1$s/%2$s \
+ Status :Envy \
+ Level : %3$s \
+ CLICK HERE TO INTERACT WITH
+feature.city.menus.main.mascots.lore.not_found=Mascot not found
+feature.city.menus.main.mascots.lore.missing=Mascot non-existent (contact the staff)
+feature.city.menus.main.manage.title=%1$s
+feature.city.menus.main.manage.lore.edit=City owner: %1$s \
+ Mayor of the city: %2$s \
+ Member(s): %3$s/%4$s \
+ CLICK HERE TO CHANGE THE CITY
+feature.city.menus.main.manage.lore.view=City owner: %1$s \
+ Mayor of the city: %2$s \
+ Member(s): %3$s/%4$s
+feature.city.menus.main.members.title=List of Members
+feature.city.menus.main.members.lore=There is currently %1$s member(s) in your city \
+ You have a member limit of %2$s member(s) \
+ CLICK HERE TO SEE THE LIST OF PLAYERS
+feature.city.menus.no_city.name=Cities Menu - None
+feature.city.menus.no_city.invitations.none.title=You have no invitation
+feature.city.menus.no_city.invitations.none.lore=An inhabitant of a city owes you invite \
+ via /city invite
+feature.city.menus.no_city.invitations.count.title=You have %1$s invitation%2$s
+feature.city.menus.no_city.invitations.count.lore=CLICK HERE TO SEE YOUR INVITATIONS
+feature.city.menus.no_city.create.title=Create your city
+feature.city.menus.no_city.create.lore.cooldown=You can also create your city \
+ Do /city create [name] or click here! \
+ You have to wait %1$s before you can create a city
+feature.city.menus.no_city.create.lore.ready=You can also create your city \
+ Do /city create [name] or click here! \
+ Costs: \
+ - %1$s %2$s \
+ - %3$s of Aywenite \
+ CLICK HERE TO CREATE YOUR CITY
+feature.city.menus.invitations.name=Menu of cities - Invitations
+feature.city.menus.invitations.item.name=%1$s invited you to %2$s
+feature.city.menus.invitations.item.lore=CLICK HERE TO JOIN THE CITY
+feature.city.menus.invitations.confirm.deny=Refuse %1$s
+feature.city.menus.type.name=Cities Menu - Type
+feature.city.menus.type.peace.title=City at peace
+feature.city.menus.type.peace.lore=Your safety is assured! \
+ TIPS: Perfect for building, and trading with complete peace of mind!
+feature.city.menus.type.war.title=City at war
+feature.city.menus.type.war.lore=A world of war and competition. \
+ ⚠ WARNING \
+ -Cities being in the same status as you can declare war on you! \
+ TIPS: Ideal for tryhards and competitive riders
+feature.city.menus.type.war.lore.locked=A world of war and competition. \
+ ⚠ WARNING \
+ -Cities being in the same status as you can declare war on you! \
+ TIPS: Ideal for tryhards and competitive riders \
+ You must be level %1$s to unlock this
+feature.city.menus.transfer.name=Cities Menu - Transfer
+feature.city.menus.transfer.item.lore=Do you want to transfer the city to %1$s ? \
+ CLICK HERE TO CONFIRM
+feature.city.menus.modify.name=Cities Menu - Edit
+feature.city.menus.modify.rename.title=Rename your city
+feature.city.menus.modify.rename.lore=You can rename your city. \
+ Current name: %1$s \
+ CLICK HERE TO EDIT IT
+feature.city.menus.modify.rename.invalid=Please enter correct entry
+feature.city.menus.modify.transfer.title=Transfer the city
+feature.city.menus.modify.transfer.lore=The Citywill be transferred to the person you select \
+ CLICK HERE TO CHOOSE
+feature.city.menus.modify.transfer.no_member=There is no member to whom you can transfer the city
+feature.city.menus.modify.delete.title=Delete city
+feature.city.menus.modify.delete.lore.wait=You will definitely delete the city! \
+ You have to wait %1$s before you can delete your city
+feature.city.menus.modify.delete.lore.click=You will definitely delete the city! \
+ CLICK HERE TO CONFIRM
+feature.city.menus.perms.name=Permissions %1$s
+feature.city.menus.perms.permission.remove=Withdraw %1$s
+feature.city.menus.perms.permission.add=Add %1$s
+feature.city.menus.perms.permission=%1$s
+feature.city.menus.perms.permission.lore.remove=CLICK TO REMOVE THIS PERMISSION
+feature.city.menus.perms.permission.lore.add=CLICK TO ADD THIS PERMISSION
+feature.city.menus.perms.bulk.title=Manage all member permissions
+feature.city.menus.perms.bulk.lore=Left click to remove everything \
+ Right click to add all
+feature.city.menus.chest.name=Safe menu %1$s - Page %2$s
+feature.city.menus.chest.upgrade.title=Upgrade the trunk
+feature.city.menus.chest.upgrade.lore.click=Your city must have: \
+ - %1$s %2$s \
+ - %3$s of Aywenite \
+ CLICK HERE TO IMPROVE THE CHEST
+feature.city.menus.chest.upgrade.lore.max=Your city must have: \
+ - %1$s %2$s \
+ - %3$s of Aywenite \
+ Limit reached
+feature.city.menus.chunks.name=Cities menu - The map
+feature.city.menus.chunks.loading.title=Loading...
+feature.city.menus.chunks.loading.lore=Loading chunk data in progress
+feature.city.menus.chunks.free_claim.title=Claim free
+feature.city.menus.chunks.free_claim.lore=You have %1$s free claim!
+feature.city.menus.chunks.refresh.title=Refresh map
+feature.city.menus.chunks.refresh.lore=To update claims displayed
+feature.city.menus.chunks.protected.title=Claim in a protected region
+feature.city.menus.chunks.protected.lore=This area is protected by a WorldGuard region \
+ Position : %1$s
+feature.city.menus.chunks.player_claim.title=Claim your city
+feature.city.menus.chunks.player_claim.lore.reward=City : %1$s \
+ Position : %2$s \
+ Brings you: \
+ - %3$s %4$s \
+ - %5$s of Aywenite \
+ CLICK TO UNCLAIM
+feature.city.menus.chunks.player_claim.lore.basic=City : %1$s \
+ Position : %2$s \
+ CLICK TO UNCLAIM
+feature.city.menus.chunks.other_claim.title=Claim from an opposing city
+feature.city.menus.chunks.other_claim.lore=City : %1$s \
+ Position : %2$s
+feature.city.menus.chunks.unclaimed.title=Free claim
+feature.city.menus.chunks.unclaimed.lore.free=Position : %1$s \
+ Costs: \
+ - Claim free \
+ CLICK TO CLAIM
+feature.city.menus.chunks.unclaimed.lore.cost=Position : %1$s \
+ Costs: \
+ - %2$s %3$s \
+ - %4$s of Aywenite \
+ CLICK TO CLAIM
+feature.city.menus.chunks.confirm_claim.accept=Do you really want to claim this chunk?
+feature.city.menus.chunks.confirm_claim.deny=Cancel the claim procedure
+feature.city.menus.chunks.confirm_unclaim.accept=Do you really want to unclaim this chunk?
+feature.city.menus.chunks.confirm_unclaim.deny=Cancel the unclaim procedure
+feature.city.menus.top.name=City ranking menu
+feature.city.menus.top.sort.title=Sort
+feature.city.menus.top.sort.header=Click to sort by
+feature.city.menus.top.sort.selected_prefix=➢
+feature.city.menus.top.sort.unselected_prefix=
+feature.city.menus.top.sort.global=Overall
+feature.city.menus.top.sort.power=Powers
+feature.city.menus.top.sort.money=Riches
+feature.city.menus.top.sort.claim=Area
+feature.city.menus.top.sort.population=Population
+feature.city.menus.top.item.title=no.%1$s %2$s
+feature.city.menus.top.item.lore=Owner : %1$s \
+ Level : %2$s \
+ Members: %3$s/%4$s \
+ Area: %5$s chunks \
+ Riches: %6$s %7$s \
+ Power points: %8$s
+feature.city.menus.top.item.lore.with_mayor=Owner : %1$s \
+ Mayor: %2$s \
+ Level : %3$s \
+ Members: %4$s/%5$s \
+ Area: %6$s chunks \
+ Riches: %7$s %8$s \
+ Power points: %9$s
+feature.city.menus.list.name=City list menu
+feature.city.menus.list.sort.title=Sort
+feature.city.menus.list.sort.header=Click to sort by
+feature.city.menus.list.sort.selected_prefix=➢
+feature.city.menus.list.sort.unselected_prefix=
+feature.city.menus.list.sort.name=Name
+feature.city.menus.list.sort.wealth=Riches
+feature.city.menus.list.sort.population=Population
+feature.city.menus.list.sort.peace_war=Peace/Guerre
+feature.city.menus.list.item.title=%1$s
+feature.city.menus.list.item.lore=Owner : %1$s \
+ Level : %2$s \
+ Members: %3$s/%4$s member%5$s \
+ Kind : %6$s \
+ Riches: %7$s %8$s
+feature.city.menus.list.item.lore.with_mayor=Owner : %1$s \
+ Mayor: %2$s \
+ Level : %3$s \
+ Members: %4$s/%5$s member%6$s \
+ Kind : %7$s \
+ Riches: %8$s %9$s
+feature.city.menus.list.details.name=City details menu %1$s
+feature.city.menus.list.details.level=Level : %1$s
+feature.city.menus.list.details.owner=Owner : %1$s
+feature.city.menus.list.details.mayor=Mayor: %1$s
+feature.city.menus.list.details.mascot.level=Mascot Level: %1$s
+feature.city.menus.list.details.mascot.missing=No mascot found (bug)
+feature.city.menus.list.details.size=Size : %1$s chunks
+feature.city.menus.list.details.wealth=Riches: %1$s %2$s
+feature.city.menus.list.details.population=Population : %1$s/%2$s player%3$s
+feature.city.menus.list.details.population.lore=CLICK HERE TO VIEW MEMBERS
+feature.city.menus.list.details.type=Kind : %1$s
+feature.city.menus.list.members.name=Member detail menu %1$s
+feature.city.menus.list.members.back_lore=CLICK HERE TO RETURN
+feature.city.menus.members.name=Cities Menu - Members
+feature.city.menus.members.owner.lore=The owner of the city.
+feature.city.menus.members.cant_edit_owner.lore=You cannot edit the owner
+feature.city.menus.members.manage.lore=You can manage this player likeexpelor modifyhis permissions \
+ CLICK HERE TO MANAGE THIS PLAYER
+feature.city.menus.members.perms.lore=You can modify the permissions of this player \
+ CLICK HERE TO MODIFY YOUR PERMISSIONS
+feature.city.menus.members.cant_self_kick.lore=You can't exclude yourself
+feature.city.menus.members.cant_kick_owner.lore=You can't exclude the owner
+feature.city.menus.members.kick.lore=You can exclude this player \
+ CLICK HERE TO EXCLUDE IT
+feature.city.menus.members.member.lore=A member like you
+feature.city.menus.members.kick.confirm=Do you really want to evict? %1$s ?
+feature.city.menus.members.kick.deny=Do not expel %1$s
+feature.city.menus.members.invite.title=Invite people
+feature.city.menus.members.invite.lore=You can invite people to your city to fill it \
+ You are at %1$s/%2$s
+feature.city.menus.members.invite.prompt=Enter player name
+feature.city.menus.members.invite.invalid=Please enter correct entry
+feature.city.menus.members.manage.name=Cities Menu - Edit Player
+feature.city.menus.members.manage.kick.self=You can't deport yourself
+feature.city.menus.members.manage.kick.owner=You can't evict the owner
+feature.city.menus.members.manage.kick.info=You can expel %1$s of your city. \
+ CLICK HERE TO EXPEL
+feature.city.menus.members.manage.kick.title=Expel %1$s
+feature.city.menus.members.manage.target.lore=You are modifying its status in the city
+feature.city.menus.members.manage.target.title=Player %1$s
+feature.city.menus.members.manage.perms.lore=You will modify his permissions \
+ CLICK HERE TO EDIT
+feature.city.menus.members.manage.perms.title=Change permissions
+feature.city.menus.members.manage.back_lore=You will return to the previous menu \
+ CLICK HERE TO CONFIRM
+
+# * SUB FEATURES
+# - Bank
+feature.city.bank.menu.name=Cities menu - Bank
+feature.city.bank.menu.deposit.title=Deposit money
+feature.city.bank.menu.deposit.lore=Your money will be placed in the bank of the city \
+ CLICK HERE TO DEPOSIT
+
+feature.city.bank.menu.withdraw.title=Withdraw money
+feature.city.bank.menu.withdraw.lore=The money will be taken from the bank of the city \
+ CLICK HERE TO INDICATE THE AMOUNT
+
+feature.city.bank.menu.balance.title=Your city's money
+feature.city.bank.menu.balance.lore=The city currently has %1$s %2$s \
+ Your next interest is to %3$s%In %4$s
+feature.city.bank.menu.back_lore=You will return to the previous menu \
+ CLICK HERE TO CONFIRM
+
+feature.city.bank.menu.deposit.name=City Bank Menu - Fill
+feature.city.bank.menu.deposit.all.title=Drop off all your money
+feature.city.bank.menu.deposit.all.lore=All your money will be placed in the bank of the city \
+ Amount that will be deposited: %1$s %2$s \
+ CLICK HERE TO DEPOSIT
+
+feature.city.bank.menu.deposit.half.title=Deposit half of your money
+feature.city.bank.menu.deposit.half.lore=Half of your money will be placed in the bank of the city \
+ Amount that will be deposited: %1$s %2$s \
+ CLICK HERE TO DEPOSIT
+
+feature.city.bank.menu.deposit.input.title=Drop a specific amount
+feature.city.bank.menu.deposit.input.lore=Your money will be placed in the bank of the city \
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.city.bank.menu.deposit.input.prompt=Enter the amount you want to deposit
+
+feature.city.bank.menu.withdraw.name=City Bank Menu - Withdraw
+feature.city.bank.menu.withdraw.all.title=Take themoney from your city
+feature.city.bank.menu.withdraw.all.lore=All the money placed in the bank of the city will be given to you \
+ Amount that will be given to you: %1$s %2$s \
+ CLICK HERE TO TAKE
+
+feature.city.bank.menu.withdraw.half.title=Take half of themoney of the city
+feature.city.bank.menu.withdraw.half.lore=Half of the money will be taken from the bank from your city to give it to you \
+ Amount that will be given to you: %1$s %2$s \
+ CLICK HERE TO TAKE
+
+feature.city.bank.menu.withdraw.input.title=Take a specific amount
+feature.city.bank.menu.withdraw.input.lore=The money requested will be taken from the bank from the city to give it to you \
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.city.bank.menu.withdraw.input.prompt=Enter the amount you want to withdraw
+
+feature.city.bank.errors.feature_locked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+feature.city.bank.errors.no_permission_deposit=You don't have permission to give money to your city
+feature.city.bank.errors.no_permission_balance=You don't have permission to look at the city's money
+feature.city.bank.errors.no_permission_withdraw=You don't have permission to take money from your city
+feature.city.bank.errors.war_blocked=Your city is in a war situation, you cannot do this
+feature.city.bank.errors.min_level=To use the city bank, your city must be level 2 minimum!
+feature.city.bank.errors.not_enough_city_money=Your town bank doesn't have enough money.
+feature.city.bank.deposit.success=You filed %1$s in your city bank.
+feature.city.bank.withdraw.success=%1$s %2$s have been transferred to your account.
+
+# - City Chat
+feature.city.chat.entered=You have joined the city chat
+feature.city.chat.leaved=You left the town chat
+feature.city.chat.prefix=#city
+
+# - City Permission
+feature.city.permission.owner=Owner
+feature.city.permission.invite=Invite
+feature.city.permission.kick=Expel
+feature.city.permission.place=Place blocks
+feature.city.permission.break=Break blocks
+feature.city.permission.open_chest=Open chests
+feature.city.permission.interact=Interact with blocks (except chests)
+feature.city.permission.claim=Claim
+feature.city.permission.see_claim=View claims
+feature.city.permission.rename=Rename
+feature.city.permission.money_deposit=Deposit money in the city bank
+feature.city.permission.money_see=See the city money
+feature.city.permission.money_withdraw=Withdraw money from the city bank
+feature.city.permission.manage_perm=Manage member permissions
+feature.city.permission.access_city_chest=Access the city vault
+feature.city.permission.upgrade_chest=Upgrade the Town Chest
+feature.city.permission.change_type=Change city type
+feature.city.permission.move_mascot=Move the mascot
+feature.city.permission.change_mascot_skin=Change the mascot skin
+feature.city.permission.upgrade_mascot=Improve the mascot
+feature.city.permission.heal_mascot=Take care of the mascot
+feature.city.permission.launch_war=Starting wars
+feature.city.permission.manage_grade=Manage grades
+feature.city.permission.assign_grade=Assign grades
+
+# - City Grades
+feature.city.grade.cannot_exist=This grade does not exist.
+feature.city.grade.name_cannot_be_null=Rank name cannot be empty
+feature.city.grade.priority_must_be_0_17=The priority must be contained between 0 and 17
+feature.city.grade.icon_cannot_be_null=The grade icon cannot be zero (notify the staff)
+feature.city.grade.cannot_assign=You don't have permission to assign ranks.
+feature.city.grade.cannot_modify_sup_role=You cannot modify a rank greater than or equal to yours.
+feature.city.grade.max_reach=The maximum number of ranks has been reached, you cannot add more.
+feature.city.grade.already_exist=This grade already exists.
+feature.city.grade.remove_grade=You removed the rank %1$s of %2$s
+feature.city.grade.assign_grade=You have assigned the rank %1$s has %2$s
+feature.city.rank.menu.list.title=City Menu - Grades
+feature.city.rank.menu.list.rank.title=Grade %1$s
+feature.city.rank.menu.list.rank.lore.priority=Priority : %1$s
+feature.city.rank.menu.list.rank.lore.permissions=Permissions: %1$s
+feature.city.rank.menu.list.rank.lore.click_edit=CLICK TO EDIT ROLE
+feature.city.rank.menu.list.rank.lore.click_info=CLICK FOR INFORMATION
+feature.city.rank.menu.list.assign.title=Assign grades
+feature.city.rank.menu.list.assign.lore.empty=No grades have been created in this city. \
+ Create a rank so you can assign it to members.
+feature.city.rank.menu.list.assign.lore.available=You can assign ranks to town members. \
+ \
+ CLICK TO ASSIGN A GRADE
+feature.city.rank.menu.list.create.title=Add a rank
+feature.city.rank.menu.list.create.lore=You can make a rank, a set of permissions! \
+ \
+ CLICK TO CREATE A GRADE
+feature.city.rank.menu.details.title.edit=Rank details menu %1$s
+feature.city.rank.menu.details.title.create=Rank creation menu %1$s
+feature.city.rank.menu.details.priority.title.create=Insert grade priority
+feature.city.rank.menu.details.priority.lore.create=Priority determines rank order \
+ Lower priority means higher grade \
+ Editable later \
+ Current priority: %1$s
+feature.city.rank.menu.details.name.title=Rank name
+feature.city.rank.menu.details.name.undefined=Undefined
+feature.city.rank.menu.details.name.lore.create=The name of the grade is given when it is created \
+ Editable later \
+ Current name: %1$s
+feature.city.rank.menu.details.icon.title=Rank icon
+feature.city.rank.menu.details.icon.lore.create=Click to change an icon \
+ Editable later
+feature.city.rank.menu.details.perms.title=Rank permissions
+feature.city.rank.menu.details.perms.none=None
+feature.city.rank.menu.details.perms.lore.create=Click to select permissions \
+ Editable later \
+ Current permissions: %1$s
+feature.city.rank.menu.details.cancel_create.title=Cancel and delete
+feature.city.rank.menu.details.cancel_create.lore=Click to cancel the creation of the grade
+feature.city.rank.menu.details.create.title=Create the grade
+feature.city.rank.menu.details.create.lore=Click to create the grade with the defined parameters
+feature.city.rank.menu.details.priority.lore.current=Current priority: %1$s
+feature.city.rank.menu.details.priority.lore.add=LEFT CLICK TO ADD 1
+feature.city.rank.menu.details.priority.lore.remove=RIGHT CLICK TO REMOVE 1
+feature.city.rank.menu.details.priority.title.edit=Priority
+feature.city.rank.menu.details.name.lore.current=Current name: %1$s
+feature.city.rank.menu.details.name.lore.edit=CLICK TO EDIT NAME
+feature.city.rank.menu.details.icon.lore.current=Here is your current icon: %1$s
+feature.city.rank.menu.details.icon.lore.edit=CLICK TO CHANGE ICON
+feature.city.rank.menu.details.perms.lore.current=Current permissions: %1$s
+feature.city.rank.menu.details.perms.lore.edit_manage=CLICK TO MANAGE PERMISSIONS
+feature.city.rank.menu.details.perms.lore.edit_view=CLICK TO VIEW PERMISSIONS
+feature.city.rank.menu.details.cancel_edit.title=Cancel
+feature.city.rank.menu.details.cancel_edit.lore=Click to cancel changes \
+ No changes will be saved
+feature.city.rank.menu.details.delete.title=Remove grade
+feature.city.rank.menu.details.delete.lore=Click to remove this rank \
+ This action is irreversible
+feature.city.rank.menu.details.save.title=Save changes
+feature.city.rank.menu.details.save.lore=Click to save rank changes
+feature.city.rank.menu.perms.item.add=Add %1$s
+feature.city.rank.menu.perms.item.remove=Withdraw %1$s
+feature.city.rank.menu.perms.item.lore.add=CLICK TO ADD THIS PERMISSION
+feature.city.rank.menu.perms.item.lore.remove=CLICK TO REMOVE THIS PERMISSION
+feature.city.rank.menu.perms.manage_all.title=Manage all grade permissions
+feature.city.rank.menu.perms.manage_all.lore=Left click to remove everything \
+ Right click to add all
+feature.city.rank.menu.perms.title=Rank Permissions %1$s
+feature.city.rank.menu.icon.item.lore=Click to select this icon
+feature.city.rank.menu.icon.search.title=Find an icon
+feature.city.rank.menu.icon.search.lore=Click to enter a keyword
+feature.city.rank.menu.icon.search.prompt=Enter a keyword name for the icon
+feature.city.rank.menu.icon.clear.title=Clear filter
+feature.city.rank.menu.icon.clear.lore=CLICK TO CLEAR FILTER
+feature.city.rank.menu.icon.title=Menu for choosing an icon - Page %1$s
+feature.city.rank.menu.members.item.rank=Grade : %1$s
+feature.city.rank.menu.members.item.click_assign=CLICK HERE TO ASSIGN A GRADE
+feature.city.rank.menu.members.item.name_unknown=Unknown player
+feature.city.rank.menu.members.title=Members' Choice Menu - Ranks
+feature.city.rank.menu.assign.title=Cities Menu - Assign a rank
+feature.city.rank.menu.assign.item.lore.count=Permissions: %1$s permission(s)
+feature.city.rank.menu.assign.item.lore.none=None
+feature.city.rank.prompt.create=Enter your rank name
+feature.city.rank.prompt.rename=Enter your new rank name
+feature.city.rank.rename.success=The rank name has been updated: %1$s → %2$s
+feature.city.rank.create.success=Grade %1$s created successfully!
+feature.city.rank.update.cancelled=Changes canceled, no changes were saved.
+feature.city.rank.update.success=Grade %1$s modified successfully!
+feature.city.rank.delete.confirm.lore=This action is irreversible
+feature.city.rank.delete.success=Grade %1$s successfully deleted!
+feature.city.rank.delete.error=Unable to delete rank: %1$s
+
+# - Mascots
+# Menus
+feature.city.mascots.menu.main.name=Pet Menu (Lvl. %1$s)
+feature.city.mascots.menu.main.skin.title=The skin of the mascot
+feature.city.mascots.menu.main.skin.lore=You can change the appearance of your mascot \
+ CLICK HERE TO CHANGE SKIN
+
+feature.city.mascots.menu.main.move.title=Move your mascot
+feature.city.mascots.menu.main.move.lore.ready=You can change the position of your mascot \
+ CLICK HERE TO CHANGE IT POSITION
+feature.city.mascots.menu.main.move.lore.cooldown=You cannot change the position of your mascot \
+ Cooldown: %1$s
+feature.city.mascots.menu.main.move.item.title=Move your mascot
+feature.city.mascots.menu.main.move.item.lore=Your mascot will be placed in the location of the chest \
+ This safe is not removable
+feature.city.mascots.menu.main.move.interaction.remaining=Time remaining: %%sdry%%s
+feature.city.mascots.menu.main.move.interaction.cancelled=Mascot move canceled
+feature.city.mascots.menu.main.move.error.inventory_space=Free up space in your inventory
+feature.city.mascots.menu.main.move.error.invalid_chunk=Cannot move the mascot here because this chunk does not belong to you or is adjacent to another city
+
+feature.city.mascots.menu.main.upgrade.title=Improve your Mascot
+feature.city.mascots.menu.main.upgrade.max_level=Max level reached
+feature.city.mascots.menu.main.upgrade.level_required=You must be level %1$s to improve the mascot
+feature.city.mascots.menu.main.upgrade.cost=Need %1$s of Aywenites
+feature.city.mascots.menu.main.upgrade.success=You have improved your mascot to the level %1$s
+feature.city.mascots.menu.main.upgrade.not_enough_aywenite=You don't have enough Aywenite
+
+feature.city.mascots.menu.main.immunity.title=Your mascot East immune !
+feature.city.mascots.menu.main.immunity.lore=You have a immunity on your mascot \
+ Time remaining: %1$s \
+ To reduce the time by 1 hour, you must have: \
+ - %2$s of Aywenite \
+ CLICK HERE TO REDUCE IMMUNITY TIME
+feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour
+
+feature.city.mascots.menu.dead.name=Mascot menu [DEAD]
+feature.city.mascots.menu.dead.title=Your mascot is dead
+feature.city.mascots.menu.dead.lore=Your pet is dead, you can reduce the reanimation time \
+ which is currently: %1$s \
+ To reduce the time by 1 hour, you must have: \
+ - %2$s of Aywenite \
+ CLICK HERE TO REDUCE RESUSCITATION TIME
+feature.city.mascots.menu.dead.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour
+
+feature.city.mascots.menu.skin.name=Pet Skin Menu
+feature.city.mascots.menu.skin.lore.level_required=You must be level %1$s to unlock this skin
+feature.city.mascots.menu.skin.lore.price_required=You must have %1$s Aywenite
+feature.city.mascots.menu.skin.error.level_required=You do not have the required city level to put on this skin
+feature.city.mascots.menu.skin.error.not_enough_aywenite=You don't have enough Aywenite
+
+feature.city.mascots.skin.requirement=Need %1$s of Aywenites
+
+feature.city.mascots.skin.error.space_above=Free up space above the mascot to change its skin
+feature.city.mascots.skin.error.space_around=Free up space around the mascot to change its skin
+
+feature.city.mascots.interaction.error.not_found=No mascots found - Please contact the staff
+feature.city.mascots.interaction.error.not_owner=This mascot does not belong to you
+feature.city.mascots.rename.error=You cannot rename this mascot
+
+feature.city.mascots.name.alive=%1$s %2$s%3$s
+feature.city.mascots.name.dead=☠Dead Mascot
+
+feature.city.mascots.admin.remove.success=Mascot removed
+
+feature.city.mascots.damage.error.enemy_city_unknown=Error: The enemy city was not recognized
+feature.city.mascots.damage.error.city_type_unknown=Error: Your city type was not recognized
+feature.city.mascots.damage.error.enemy_city_type_unknown=Error: The enemy city type was not recognized
+feature.city.mascots.damage.error.self_mascot=You cannot attack your mascot
+feature.city.mascots.damage.error.enemy_city_peace=This city is in peace
+feature.city.mascots.damage.error.city_peace=Your city is in peace
+feature.city.mascots.damage.error.immune=This mascot is immune for the moment
+feature.city.mascots.damage.error.not_in_war=You are not at war with %1$s
+feature.city.mascots.damage.error.not_in_combat=You can only attack the pet during the combat phase
+feature.city.mascots.damage.error.not_selected_for_war=You cannot attack the mascot because you have not been selected for war
+
+## Mascot Wand
+feature.city.mascot.mascot_wand.claim_mascot_wand=You received a stick to pose your mascot
+feature.city.mascot.mascot_wand.create_cancelled=Creation canceled
+
+feature.city.mascot.mascot_wand.lore=Your mascot will be placed in the location of the chest\
+ This stick is not removable
+
+feature.city.mascot.mascot_wand.can_only_place_mascot=You can only pose your pet in the main world
+feature.city.mascot.mascot_wand.hasnot_block_above=No block should be above the mascot
+
+feature.city.mascot.mascot=Mascot
+
+# - War
+feature.city.war.peace=Peace
+feature.city.war.war=War
+feature.city.war.command.type_required=Your city is not in a war status! Change the type of your city with/city typeor from the main cities menu
+feature.city.war.command.city_immune=Your city is currently in immunity period, you cannot start a war at this time. \
+ Time remaining: %1$s
+feature.city.war.command.no_permission_launch=You do not have permission to start a war for the city
+feature.city.war.command.already_declared=You have already been declared at war!
+feature.city.war.command.already_in_war=You are already at war!
+feature.city.war.command.defense.none=No war being prepared.
+feature.city.war.command.defense.full=The maximum number of defenders has been reached.
+feature.city.war.command.defense.accepted=You are now participating in the defense! No more going back possible.
+feature.city.war.begin.type_required=Your city is not in a war status! Change the type of your city with/city typeor in the main menu of cities
+feature.city.war.begin.target_not_war=The city you are trying to attack is not in war status!
+feature.city.war.begin.no_permission_launch=You do not have permission to start a war for the city
+feature.city.war.begin.already_declared=You have already been declared at war!
+feature.city.war.begin.already_in_war=Your city is already at war!
+feature.city.war.begin.target_preparing=The city you are trying to attack is already preparing troops
+feature.city.war.begin.target_in_war=The city you are trying to attack is already at war!
+feature.city.war.begin.target_immune=The city you are trying to attack is in immunity period!
+feature.city.war.begin.city_immune=Your city is in immunity period!
+feature.city.war.begin.target_no_online=The city you are trying to attack has no members connected!
+feature.city.war.begin.no_combat=No combat possible (not enough players connected)
+feature.city.war.begin.not_enough_members=Not enough members connected to start a fight %1$s vs. %1$s
+feature.city.war.begin.city_already_in_war=One of the cities is already at war!
+feature.city.war.begin.confirm.lore=ATTENTION \
+ You are about to start a war against %1$s \
+ with %2$s players from your city.
+feature.city.war.begin.confirm.cancel=Do not start a war against %1$s
+feature.city.war.begin.defense.attacked=⚔ Your city is attacked by %1$s , you need %2$s player(s)!
+feature.city.war.begin.defense.click_to_join=Click here to join the defense!
+feature.city.war.begin.defense.hover_join=Click to join the war
+feature.city.war.begin.attacker.chosen=⚔ You have been chosen to fight against %1$s
+feature.city.war.begin.waiting_defense=Please wait until %1$s react, the game will still be started in 2 min
+feature.city.war.begin.cancel_not_enough_defenders=The war was called off because the enemy city did not have enough required defenders.
+feature.city.war.preparation.message= \
+ \
+ WAR !Preparation for war begins \
+ Prepare yourself for the fight against %1$s \
+ You have %2$s minutes to equip yourself. \
+ You will be in %3$s VS %4$s \
+ When the fight begins you will be teleported to your pet. \
+ \
+
+feature.city.war.combat.message= \
+ \
+ WAR !The fight is imminent! \
+ Fight against %1$s \
+ You have %2$s minutes of combat. \
+ If you kill the opposing city's mascot, you win the war. \
+ \
+
+feature.city.war.result.draw= \
+ \
+ WAR !It's the end of the fighting! \
+ There was a tie! \
+ \
+ Overall statistics: \
+ -Kills %3$s : %4$s \
+ -Kills %5$s : %6$s \
+ \
+
+feature.city.war.result.reason.win.mascot_death=You have killed the opposing mascot!
+feature.city.war.result.reason.win.mascot_hp=Your mascot had the most life points!
+feature.city.war.result.reason.win.kills=Your city has killed the most opponents!
+feature.city.war.result.reason.win.draw=It's a tie!
+feature.city.war.result.reason.lose.mascot_death=Your mascot has been killed!
+feature.city.war.result.reason.lose.mascot_hp=Your mascot had the fewest life points!
+feature.city.war.result.reason.lose.kills=The opponent has killed the most people!
+feature.city.war.result.reason.lose.draw=It's a tie!
+feature.city.war.result.winner= \
+ \
+ WAR !It's the end of the fighting! \
+ You won against %1$s ! \
+ %2$s \
+ \
+ Overall statistics: \
+ -Kills %3$s : %4$s \
+ -Kills %5$s : %6$s \
+ \
+ Awards \
+ %7$s \
+ %8$s \
+ %9$s \
+ \
+
+feature.city.war.result.loser= \
+ \
+ WAR !It's the end of the fighting! \
+ You lost to %1$s ! \
+ %2$s \
+ \
+ Overall statistics: \
+ -Kills %3$s : %4$s \
+ -Kills %5$s : %6$s \
+ \
+ Losses \
+ %7$s \
+ %8$s \
+ %9$s \
+ \
+
+feature.city.war.result.reward.power=+ %1$s power points
+feature.city.war.result.reward.money=+ %1$s stolen from the adversary
+feature.city.war.result.reward.money_bonus=+ %1$s stolen from the opponent + %2$s bonuses
+feature.city.war.result.reward.claims=+ %1$s conquered territory(ies)
+feature.city.war.result.loss.power=- %1$s power points
+feature.city.war.result.loss.money=- %1$s lost
+feature.city.war.result.loss.claims=- %1$s lost territory(ies)
+feature.city.war.admin.not_in_preparation=This city is not preparing for war!
+feature.city.war.tnt.limit_reached=The city %1$s has reached its daily TNT limit!(%2$s/%3$sdaily TNT)
+feature.city.war.menu.main.title=Menu of Wars
+feature.city.war.menu.main.owner=Owner : %1$s
+feature.city.war.menu.main.population_online=Population (online): %1$s
+feature.city.war.menu.main.mascot_level=Mascot:lv. %1$s
+feature.city.war.menu.main.mascot_location=Location: %1$s
+feature.city.war.menu.main.reforms=Reforms:
+feature.city.war.menu.main.wealth=Riches: %1$s
+feature.city.war.menu.main.click_details=RIGHT CLICK FOR MORE INFORMATION ABOUT THE CITY
+feature.city.war.menu.main.click_launch=LEFT CLICK TO START A WAR
+feature.city.war.menu.more_info.title=More info!
+feature.city.war.menu.more_info.lore=Learn more about the Wars! \
+ The preparation, the fight,... \
+ CLICK HERE TO LEARN MORE!
+feature.city.war.menu.more_info.menu_title=Menu des Guerres - More info
+feature.city.war.menu.more_info.prep.title=The preparation - %1$s min
+feature.city.war.menu.more_info.prep.lore=Choose a city to attack! \
+ The number of fighters will be the same everywhere! \
+ ex. If you are 5 players connected and 2 opposite, \
+ then you will have the choice to do a 1vs1 or a 2vs2 \
+ \
+ When you come to declare war on a city, the people affected will be informed \
+ You will have %1$s min preparation \
+ which gives you time to equip yourself and go to the front!
+feature.city.war.menu.more_info.combat.title=The fight - %1$s min
+feature.city.war.menu.more_info.combat.lore=The fight begins, the game will end %1$s min after the start. \
+ It can be finished before if the enemy pet is killed. \
+ And during this time you can do everything in the enemy city.
+feature.city.war.menu.more_info.result.title=The results
+feature.city.war.menu.more_info.result.lore=The end of the war, peace is imposed between the two camps. \
+ The winner is chosen, the reward is given. \
+ And both cities get 2 days immunity!
+feature.city.war.menu.details.title=War Menu - Details %1$s
+feature.city.war.menu.details.mascot.level=Mascot level: %1$s
+feature.city.war.menu.details.mascot.location=Mascot location: %1$s
+feature.city.war.menu.details.size=Size : %1$s chunks
+feature.city.war.menu.details.wealth=Riches: %1$s
+feature.city.war.menu.details.population=Population : %1$s %2$s
+feature.city.war.menu.details.population_online=Connected population: %1$s %2$s
+feature.city.war.menu.details.population.player=player
+feature.city.war.menu.details.population.players=players
+feature.city.war.menu.details.type=Kind : %1$s
+feature.city.war.menu.players.title=War Menu - Members
+feature.city.war.menu.players.role.owner=Owner
+feature.city.war.menu.players.role.mayor=Mayor
+feature.city.war.menu.players.role.member=Member
+feature.city.war.menu.players.back_lore=You will return to the details menu of the city at war \
+ CLICK HERE TO CONFIRM
+feature.city.war.menu.size.menu_title=Menu of Wars - Selection
+feature.city.war.menu.size.title=%1$s vs. %1$s
+feature.city.war.menu.size.lore=Clash between %1$s players from each city. \
+ \
+ CLICK TO CONTINUE
+feature.city.war.menu.participants.title=Wars Menu - Participants
+feature.city.war.menu.participants.selected_prefix=✔
+feature.city.war.menu.participants.click_remove=CLICK TO REMOVE
+feature.city.war.menu.participants.click_select=CLICK TO SELECT
+feature.city.war.menu.participants.already_selected=You have already selected %1$s player(s).
+feature.city.war.menu.participants.confirm.title=Validate selection
+feature.city.war.menu.participants.confirm.lore=Selected participants: %1$s/%2$s
+feature.city.war.menu.participants.must_select=You must select %1$s player(s).
+
+# - Mayor
+feature.city.mayor.perk.category.military=Military reforms
+feature.city.mayor.perk.category.strategy=Strategy reforms
+feature.city.mayor.perk.category.agricultural=Agricultural reforms
+feature.city.mayor.perk.category.economic=Economic reforms
+feature.city.mayor.perk.category.onirique=Dream Reforms
+feature.city.mayor.perk.none.name=Empty Reform
+feature.city.mayor.perk.fou_de_rage.name=Mad with rage
+feature.city.mayor.perk.fou_de_rage.lore=In your city:Resistance \
+ Outside your city:Strength
+feature.city.mayor.perk.impot.name=Tax Withholding
+feature.city.mayor.perk.impot.lore=Collectors levy tax on players \
+ Fixed amount per attack
+feature.city.mayor.perk.miner.name=Dedicated Minor
+feature.city.mayor.perk.miner.lore=Grants a mining bonus \
+ Permanent speed
+feature.city.mayor.perk.demon_fruit.name=Devil Fruit
+feature.city.mayor.perk.demon_fruit.lore=Increases interaction range \
+ Blocks and entities
+feature.city.mayor.perk.business_man.name=Businessman
+feature.city.mayor.perk.business_man.lore=Increases the bank's interest \
+ Interest bonus
+feature.city.mayor.perk.iron_man.name=Iron in the Blood
+feature.city.mayor.perk.iron_man.lore=A golem defends the mascot in case of attack
+feature.city.mayor.perk.city_hunter.name=Urban Hunter
+feature.city.mayor.perk.city_hunter.lore=Increases your damage against players and monsters \
+ Bonuses outside of opposing cities
+feature.city.mayor.perk.ayweniter.name=Ayweniteur
+feature.city.mayor.perk.ayweniter.lore=Chance of finding Aywenite by mining stone
+feature.city.mayor.perk.gps_tracker.name=GPS tracker
+feature.city.mayor.perk.gps_tracker.lore=Intruders are highlighted in your city \
+ Alert on entry
+feature.city.mayor.perk.symbiosis.name=Symbiosis
+feature.city.mayor.perk.symbiosis.lore=Reduces damage near your pet \
+ 10 block radius
+feature.city.mayor.perk.agricultural_essor.name=Agricultural Boom
+feature.city.mayor.perk.agricultural_essor.lore=Double the harvests during the event \
+ Limited time
+feature.city.mayor.perk.mineral_rush.name=Mining Rush/bold>
+feature.city.mayor.perk.mineral_rush.lore=Double the minerals during the event \
+ Bonuses on rare ores
+feature.city.mayor.perk.military_dissuasion.name=Military Deterrence
+feature.city.mayor.perk.military_dissuasion.lore=Spawn golems in your town \
+ Temporary effect
+feature.city.mayor.perk.idyllic_rain.name=Idyllic rain
+feature.city.mayor.perk.idyllic_rain.lore=Makes it rain Aywenite in your city \
+ Reserved for members
+feature.city.mayor.perk.mascots_friendly.name=Company Mascot
+feature.city.mayor.perk.mascots_friendly.lore=Grants pet level bonuses to members
+feature.city.mayor.perk.great_sleeper.name=Big Sleeper
+feature.city.mayor.perk.great_sleeper.lore=Increases the chance of entering a dream \
+ Significant bonus
+feature.city.mayor.perk.great_dream.name=Big Dreamer
+feature.city.mayor.perk.great_dream.lore=Increases time spent in dreams \
+ Time bonus
+feature.city.mayor.perk.chaos_dream.name=Chaotic Dream
+feature.city.mayor.perk.chaos_dream.lore=Teleport the limbs into the dream \
+ City event
+
+feature.city.menus.common.error=Error of reform
+feature.city.mayor.menu.common.back.name=Back
+feature.city.mayor.menu.common.back.lore=You will return to the previous menu \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.common.more_info.name=More info!
+feature.city.mayor.menu.common.more_info.lore=Learn more about mayors! \
+ The course..., the elections,... \
+ CLICK HERE TO SEE MORE!
+
+feature.city.mayor.label.mayor=mayor
+feature.city.mayor.label.color=color
+feature.city.mayor.label.this_one=this one
+
+feature.city.mayor.error.not_in_city=This object is not in a city
+feature.city.mayor.error.feature_locked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+
+feature.city.mayor.urne.interact.mysterious=*Mysterious object... This must surely be used for elections...*
+feature.city.mayor.urne.interact.not_your_urne=*Mhh... It's not your urn*
+feature.city.mayor.urne.interact.need_members=*you must have at least %1$s members in order to be able to make an election*
+feature.city.mayor.urne.interact.election_already=*The elections have already taken place!*
+feature.city.mayor.urne.interact.no_candidate=*no one showed up! Introduce yourself! /city*
+feature.city.mayor.urne.place.must_be_overworld=You must be in overworld to pose this!
+feature.city.mayor.urne.place.need_city=You must have a city to post this!
+feature.city.mayor.urne.place.must_be_in_city=You need to put this in your city!
+feature.city.mayor.urne.place.require_level=You must be level %1$s of town to place the urn
+feature.city.mayor.urne.place.not_owner=You are not the owner!
+feature.city.mayor.urne.place.already_has_npc=You can't put this down because you already have NPCs
+feature.city.mayor.urne.break.not_owner=You cannot post this because you are not the owner
+
+feature.city.mayor.npc.display.mayor=Mayor %1$s
+feature.city.mayor.npc.display.unknown=Unknown
+feature.city.mayor.npc.display.owner=Owner %1$s
+feature.city.mayor.npc.error.feature_locked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+feature.city.mayor.npc.info.no_mayor_yet=*mhh this city has not yet elected a mayor*
+feature.city.mayor.npc.info.no_election_unlocked=*mhh this city has not yet unblocked the elections*
+feature.city.mayor.npc.move.prompt=*Good morning ? Do you want to move me? Click here!*
+feature.city.mayor.npc.move.hover=Move this NPC
+feature.city.mayor.npc.move.item.lore=Click on where you want to move the NPC
+feature.city.mayor.npc.move.item.name=Location of NPC
+feature.city.mayor.npc.move.interaction.remaining=You have %1$s to select your location
+feature.city.mayor.npc.move.interaction.timeout=You didn't have time to move your NPC
+feature.city.mayor.npc.move.error.outside_city=Cannot put NPC outside your city
+
+feature.city.mayor.menu.more_info.name=Mayors' menu - More info
+feature.city.mayor.menu.more_info.elections.title=Elections - Wednesday
+feature.city.mayor.menu.more_info.reforms.title=Reforms - Thursday
+feature.city.mayor.menu.more_info.elections.lore=All the Wednesdays, THE elections begin \
+ If you have more than %1$s members, \
+ you can elect a mayor for your city \
+ Otherwise, the owner will choose the reforms what he wants!
+feature.city.mayor.menu.more_info.reforms.lore=All the Thursdays, the mayor is elected! \
+ THE reforms chosen by the mayor are applied \
+ You can take a look at /city mayor
+
+feature.city.mayor.menu.owner.name=Mayors' menu - Owner's mandate
+feature.city.mayor.menu.owner.lore.header=Owner of %1$s
+feature.city.mayor.menu.owner.title=Owner %1$s
+feature.city.mayor.menu.mayor.name=Mayors' Menu - Mayor's Mandate
+feature.city.mayor.menu.mayor.lore.header=Mayor of %1$s
+feature.city.mayor.menu.mayor.title=Mayor %1$s
+feature.city.mayor.menu.npc.move.name=Move this NPC
+feature.city.mayor.menu.npc.move.lore=You will be able to move this NPC \
+ CLICK HERE TO CONTINUE
+
+feature.city.mayor.menu.mandate.name=Mayors Menu - Mandate
+feature.city.mayor.menu.mandate.mayor.lore.header=Mayor of %1$s
+feature.city.mayor.menu.mandate.owner.lore.header=Owner of %1$s
+feature.city.mayor.menu.mandate.mayor.title=Mayor %1$s
+feature.city.mayor.menu.mandate.owner.title=Owner %1$s
+feature.city.mayor.menu.mandate.law.lore=You are the %1$s! \
+
You can change the laws and launch events! \
+
CLICK HERE TO OPEN A MENU
+feature.city.mayor.menu.mandate.law.name=The Laws
+
+feature.city.mayor.command.warp.not_set.phase2=The city warp is not yet defined! Ask the mayor current to put one! \
+ *via /city setwarp or with the menu of laws*
+feature.city.mayor.command.warp.not_set.no_mayor=The city warp is not yet defined! You have to wait until a mayor is elected to put a warp
+
+feature.city.mayor.warp.error.not_mayor=You are not the mayor of the city
+feature.city.mayor.warp.interaction.remaining=You have %1$s to select your spawn point
+feature.city.mayor.warp.interaction.timeout=You didn't have time to place your warp
+feature.city.mayor.warp.error.outside_city=Can't warp here because it's not in your city
+feature.city.mayor.warp.success=You just put the warp from your city in: \
+ -x=%1$s \
+ -y=%2$s \
+ -z=%3$s
+feature.city.mayor.warp.wand.lore=Click on where you want to put the warp
+feature.city.mayor.warp.wand.name=Selection of warp
+
+feature.city.mayor.broadcast.phase1= \
+ \
+ MAYOR!The elections are open! \
+ Introduce yourself, vote for mayors,... \
+ See if you have enough members! \
+ \
+
+feature.city.mayor.broadcast.phase2= \
+ \
+ MAYOR!Your reforms are active! \
+ Make your strategies, farm, and lots of other things! \
+ \
+
+
+feature.city.mayor.menu.law.name=Menu of laws
+feature.city.mayor.menu.law.pvp.name.disable=DisablePVP
+feature.city.mayor.menu.law.pvp.name.enable=EnablePVP
+feature.city.mayor.menu.law.pvp.lore.active=This lawactivePVP throughoutcity
+feature.city.mayor.menu.law.pvp.lore.inactive=This lawdisabledPVP throughoutcity
+feature.city.mayor.menu.law.pvp.lore.members=between the members!
+feature.city.mayor.menu.law.pvp.click.enable=CLICK HERE TO ACTIVATE PVP
+feature.city.mayor.menu.law.pvp.click.disable=CLICK HERE TO DISABLE PVP
+feature.city.mayor.menu.law.pvp.message.enable=You have activatedPVP in your city
+feature.city.mayor.menu.law.pvp.message.disable=You have disabledPVP in your city
+feature.city.mayor.menu.law.warp.name=Change sound warp
+feature.city.mayor.menu.law.warp.lore.unset=This lawis not effective! \
+ You need to choose a location where members can \
+ arrive
+feature.city.mayor.menu.law.warp.lore.set=Members can teleport to your warp! \
+ Here is the position of warp :
+feature.city.mayor.menu.law.warp.lore.x=-x=%1$s
+feature.city.mayor.menu.law.warp.lore.y=-y=%1$s
+feature.city.mayor.menu.law.warp.lore.z=-z=%1$s
+feature.city.mayor.menu.law.warp.click=CLICK HERE TO CHOOSE A LOCATION
+feature.city.mayor.menu.law.announce.name=Make an announcement
+feature.city.mayor.menu.law.announce.lore=This lawallows you to send a message throughout the city!
+feature.city.mayor.menu.law.announce.click=CLICK HERE TO WRITE THE MESSAGE
+feature.city.mayor.menu.law.announce.prompt=You can enter your message that you want to spread throughout the city! Type cancel to cancel the action
+feature.city.mayor.menu.law.announce.header=-- Mayor's announcement --
+feature.city.mayor.menu.law.announce.success=You sent the message to everyone in town
+feature.city.mayor.menu.law.cooldown=Cooldown: %1$s
+feature.city.mayor.menu.law.perk_event.click=CLICK HERE TO USE THE REFORM
+feature.city.mayor.menu.law.perk_event.wait=You must wait before you can use this reform
+feature.city.mayor.menu.law.perk_event.impot.trigger=THE mayor triggered the Tax Withholding !
+feature.city.mayor.menu.law.perk_event.agricultural.trigger=THE mayor triggered theAgricultural Boom !
+feature.city.mayor.menu.law.perk_event.mineral.trigger=THE mayor triggered the Mining Rush !
+feature.city.mayor.menu.law.perk_event.military.trigger=THE mayor triggered the Military Deterrence !
+feature.city.mayor.menu.law.perk_event.idyllic.trigger=THE mayor triggered the Idyllic rain !
+feature.city.mayor.menu.law.perk_event.dream.trigger=THE mayor triggered the Chaotic Dream !
+
+feature.city.mayor.menu.vote.name=Mayors' menu - Votes
+feature.city.mayor.menu.vote.lore.header=Candidate for mayor of %1$s
+feature.city.mayor.menu.vote.lore.votes=Votes: %1$s
+feature.city.mayor.menu.vote.lore.progress=[%1$s](%2$s%%)
+feature.city.mayor.menu.vote.lore.click=CLICK HERE TO VOTE
+feature.city.mayor.menu.vote.mayor.title=Mayor %1$s
+feature.city.mayor.menu.vote.message.already_voted=You have already voted for this mayor
+feature.city.mayor.menu.vote.message.voted=You voted for the %1$s
+
+feature.city.mayor.menu.election.name=Elections menu
+feature.city.mayor.menu.election.item.name=The elections
+feature.city.mayor.menu.election.item.lore.voted=The elections are open! \
+ You can change your vote! \
+ \
+ Current vote: %1$s \
+ Closure in %2$s \
+ \
+ CLICK HERE TO ACCESS THE MENU
+feature.city.mayor.menu.election.item.lore.not_voted=The elections are open! \
+ Choose the mayor you like! \
+ \
+ Closure in %1$s \
+ \
+ CLICK HERE TO REGISTER
+feature.city.mayor.menu.election.error.no_candidate=There are no volunteers to be mayor
+feature.city.mayor.menu.election.candidature.lore.already=You have already presented ! \
+ Change your color and watch the reforms that you have chosen \
+ \
+ CLICK HERE TO ACCESS THE MENU
+feature.city.mayor.menu.election.candidature.lore.new=You can register to be mayor! \
+ Select your reforms and your color! \
+ \
+ CLICK HERE TO REGISTER
+feature.city.mayor.menu.election.candidature.name=Your candidacy
+feature.city.mayor.menu.election.owner_reform.name=Choice of one reform
+feature.city.mayor.menu.election.owner_reform.lore.chosen=You have already chosen your reform !
+feature.city.mayor.menu.election.owner_reform.lore.choice=You are the owner of the city ! \
+ You can choose a event reform ! \
+ \
+ CLICK HERE TO CHOOSE THE REFORM
+
+feature.city.mayor.menu.create.name=Mayors' menu - Creation
+feature.city.mayor.menu.create.perk.choose.lore=Choose your reform that you want to see! \
+ \
+ CLICK HERE TO CHOOSE THE REFORM
+feature.city.mayor.menu.create.perk.change.lore=CLICK HERE TO CHANGE THE REFORM
+feature.city.mayor.menu.create.back.election=You will return to the elections menu \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.create.back.city=You will return to the menu of your city \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.create.confirm.name.ready=Confirm
+feature.city.mayor.menu.create.confirm.name.blocked=Confirm
+feature.city.mayor.menu.create.confirm.lore.ready=You have chosen all the reforms necessary \
+ \
+ CLICK HERE TO CONTINUE THE APPLICATION
+feature.city.mayor.menu.create.confirm.lore.blocked=You didn't choose all the reforms necessary
+feature.city.mayor.menu.create.confirm.owner.success=You added the Reformation: %1$s
+
+feature.city.mayor.menu.modify.name=Mayors' menu - Modification
+feature.city.mayor.menu.modify.color.lore=You can change the color of your name! \
+ \
+ CLICK HERE TO CHANGE COLOR
+feature.city.mayor.menu.modify.color.name=Change your %1$s
+feature.city.mayor.menu.modify.back.lore=You will return to the menu of your city \
+ CLICK HERE TO CONFIRM
+
+feature.city.mayor.menu.color.name=Mayors Menu - Color
+feature.city.mayor.menu.color.option.lore=Your name will be displayed in %1$s \
+ CLICK HERE TO CONFIRM
+feature.city.mayor.menu.color.option.name=Put some %1$s
+feature.city.mayor.menu.color.confirm.lore=You will introduce yourself as mayor of %1$s
+feature.city.mayor.menu.color.confirm.final=NO RETURN POSSIBLE!
+feature.city.mayor.menu.color.confirm.cancel=Do not present yourself as Mayor of %1$s
+feature.city.mayor.menu.color.candidate.announce=%1$s introduced himself as mayor!
+feature.city.mayor.menu.color.candidate.success=You introduced yourself with success!
+feature.city.mayor.menu.color.error.no_mayor=Your city has no mayor!
+feature.city.mayor.menu.color.change.success=You changed your %1$s in %2$s
+feature.city.mayor.menu.color.change.confirm=Change your %1$s in %2$s
+feature.city.mayor.menu.color.change.cancel=Don't change it %1$s in %2$s
+
+feature.city.mayor.menu.perk_choice.name=Mayors' menu - Reforms
+feature.city.mayor.menu.perk_choice.locked=You must be level %1$s to unlock this
+feature.city.mayor.menu.perk_choice.error.event_duplicate=You cannot choose 2 event-type reforms!
+feature.city.mayor.menu.perk_choice.button.back=Go back
+feature.city.mayor.menu.perk_choice.button.prev=Previous page
+feature.city.mayor.menu.perk_choice.button.next=Next page
+
+feature.city.mayor.perk.basic.ayweniter.blessing=*the blessing!*
+feature.city.mayor.perk.basic.iron_blood.tremor=*tremor* Something seems to be happening...
+feature.city.mayor.perk.basic.gps_tracker.entered=You just entered the city %1$s who has the GPS Tracker ! Be on your guard.
+feature.city.mayor.perk.event.agricultural.start=The Essor Agricole event reform has been launched and all that remains is %1$s
+feature.city.mayor.perk.event.agricultural.end=The Essor Agricole event reform is complete!
+feature.city.mayor.perk.event.mineral.start=The Ruée Minière event reform has been launched and all that remains is %1$s
+feature.city.mayor.perk.event.mineral.end=The Mining Rush event reform is complete!
+feature.city.mayor.perk.event.impot.zombie.name=Servant of %1$s
+feature.city.mayor.perk.event.impot.victim.lucky=*grr you're lucky!*
+feature.city.mayor.perk.event.impot.victim.lost=You lost %1$s because of the mayor %2$s
+feature.city.mayor.perk.event.impot.mayor.collected=You have just taken %1$s has %2$s
+feature.city.mayor.perk.event.impot.zombies.done=*the zombies got everything they wanted*
+feature.city.mayor.perk.event.military.golem.name=Defendant of %1$s
+
+feature.city.mayor.admin.changeelection.usage=/adminmayor changeelection cityUUID electionType
+feature.city.mayor.admin.changeelection.success=You just put: %1$s in the city %2$s
+
+# ** CITY LEVELS **
+feature.city.levels.menu.title=Cities Menu - Levels
+feature.city.levels.menu.requirements.header=Required :
+feature.city.levels.menu.rewards.header=Rewards:
+feature.city.levels.menu.rewards.item=Awards
+feature.city.levels.menu.status.unlocked=UNBLOCKED
+feature.city.levels.menu.unlock.remaining=He's staying %1$s unlocking
+feature.city.levels.menu.unlock.duration=%1$s unlocking
+feature.city.levels.menu.click.start_upgrade=CLICK HERE TO START IMPROVEMENT
+feature.city.levels.menu.click.contribute=CLICK HERE TO CONTRIBUTE
+feature.city.levels.menu.deposit.click_one=CLICK TO DEPOSIT A
+feature.city.levels.menu.deposit.click_all=SHIFT-CLICK TO DROP ALL
+
+feature.city.levels.rewards.none=None
+feature.city.levels.rewards.unlock=Unblocked %1$s
+feature.city.levels.rewards.list.separator=,
+feature.city.levels.rewards.list.last_separator=And
+feature.city.levels.rewards.feature.chest=/city chest
+feature.city.levels.rewards.feature.city_bank=/city bank
+feature.city.levels.rewards.feature.player_bank=/bank
+feature.city.levels.rewards.feature.notation=/city notation
+feature.city.levels.rewards.feature.rank=/city ranks
+feature.city.levels.rewards.feature.mayor=/city mayor
+feature.city.levels.rewards.feature.perk_agricultural=agricultural reforms
+feature.city.levels.rewards.feature.perk_economy=economic reforms
+feature.city.levels.rewards.feature.type_war=the type of war city
+feature.city.levels.rewards.feature.war=/war
+feature.city.levels.rewards.feature.perk_dream=dreamlike reforms
+feature.city.levels.rewards.feature.perk_military=military reforms
+feature.city.levels.rewards.feature.perk_strategy=strategy reforms
+feature.city.levels.rewards.mascot_level_max=Level %1$s maximum for the mascot
+feature.city.levels.rewards.member_limit=%1$s maximum members
+feature.city.levels.rewards.rank_limit=%1$s maximum grades
+feature.city.levels.rewards.chest_page_limit=%1$s maximum vault pages
+feature.city.levels.rewards.player_bank_limit=Limit to %1$s money in the %2$s
+feature.city.levels.rewards.player_bank_label=personal bank
+feature.city.levels.rewards.interest=+ %1$s%% interest
+feature.city.levels.rewards.mascot_skin.single=the mascot %1$s
+feature.city.levels.rewards.mascot_skin.multiple=the mascots %1$s
+
+feature.city.levels.requirements.deposit=Deposit %1$s %2$s
+feature.city.levels.requirements.deposit.progress=Deposit %1$s %2$s (%3$s/%1$s)
+feature.city.levels.requirements.deposit.description=CLICK HERE TO DEPOSIT
+feature.city.levels.requirements.deposit.success=You filed %1$s %2$s
+feature.city.levels.requirements.command=Execute %1$s times %2$s
+feature.city.levels.requirements.command.progress=Execute %1$s times %2$s (%3$s/%1$s)
+
+feature.city.levels.upgrade.broadcast=The city %1$s has moved to the Level %2$s ! Maximum GG!
+feature.city.levels.admin.skip_upgrade.success=Skip Level Upgrade
+feature.city.levels.admin.set_level.success=Level %1$s applied to the city
+feature.city.levels.level_1.name=Level 1
+feature.city.levels.level_1.description=Urban era
+feature.city.levels.level_2.name=Level 2
+feature.city.levels.level_2.description=The foundations
+feature.city.levels.level_3.name=Level 3
+feature.city.levels.level_3.description=Undeveloped city
+feature.city.levels.level_4.name=Level 4
+feature.city.levels.level_4.description=Democracy
+feature.city.levels.level_5.name=Level 5
+feature.city.levels.level_5.description=Economic development
+feature.city.levels.level_6.name=Level 6
+feature.city.levels.level_6.description=Capital
+feature.city.levels.level_7.name=Level 7
+feature.city.levels.level_7.description=Kingdom?
+feature.city.levels.level_8.name=Level 8
+feature.city.levels.level_8.description=Empire?
+feature.city.levels.level_9.name=Level 9
+feature.city.levels.level_9.description=Military power
+feature.city.levels.level_10.name=Level 10
+feature.city.levels.level_10.description=Metropolis
+
+feature.city.levels.rewards.free_claims=%1$s claimsfree
+
+feature.city.levels.requirements.claims=To have %1$s claims
+feature.city.levels.requirements.claims.progress=To have %1$s claims (%2$s/%1$s)
+feature.city.levels.requirements.setwarp=Ask a /city setwarp
+feature.city.levels.requirements.bank=To have %1$s in the bank
+feature.city.levels.requirements.bank.progress=To have %1$s in the bank (%2$s/%1$s)
+feature.city.levels.requirements.members=To have %1$s members
+feature.city.levels.requirements.members.progress=To have %1$s members (%2$s/%1$s)
+feature.city.levels.requirements.mascot_level=Have the mascot level %1$s
+feature.city.levels.requirements.notation.receive=Receive a rating
+feature.city.levels.requirements.ranks=To have %1$s grades (/city rank)
+feature.city.levels.requirements.ranks.progress=To have %1$s grades (%2$s/%1$s)
+feature.city.levels.requirements.craft_urne=Craft an urn
+feature.city.levels.requirements.place_urne=Place the urn
+feature.city.levels.requirements.notation.points=Minimum credit %1$s points on one of the ratings
+feature.city.levels.requirements.war.count=Have done %1$s wars
+feature.city.levels.requirements.war.count.progress=Have done %1$s wars (%2$s/%1$s)
+feature.city.levels.requirements.war.win=Win a war
+feature.city.levels.requirements.war.win.count=Earn %1$s wars
+feature.city.levels.requirements.war.win.count.progress=Earn %1$s wars (%2$s/%1$s)
+feature.city.levels.requirements.notation.top10=Be in the top 10 of the ratings on one of the ratings
diff --git a/src/main/resources/translations/en_US/commands.properties b/src/main/resources/translations/en_US/commands.properties
index 9c99899e7..cfb9370ba 100644
--- a/src/main/resources/translations/en_US/commands.properties
+++ b/src/main/resources/translations/en_US/commands.properties
@@ -1,2 +1,68 @@
-command.fun.playtime.success=You have %s of playtime.
+command.fun.playtime.success=You have %1$s of playing time.
+command.fun.diceroll.success=The result is: %1$s
+command.admin.freeze.title=You are frozen
+command.admin.freeze.subtitle=If you log out you will be banned
+command.admin.freeze.player_freezed=You have been freezing
+command.admin.freeze.player_not_found=Player not found
+command.admin.freeze.player_unfreeze=You have unfreeze %1$s
+command.admin.freeze.target_unfreeze=You've been unfreeze
+command.admin.freeze.player_freeze=You have frozen %1$s
+command.admin.freeze.target_freeze=You have been freezing
+command.admin.freeze.quit_reason.kicked=The player was kicked
+command.admin.freeze.quit_reason.timeout=The player was timed out
+command.admin.freeze.quit_reason.error=The player had a connection error
+command.admin.freeze.quit_reason.default=The player has been disconnected
+
+command.debug.chronometer.cant_90s_chronometer=Do not exceed more than 90s for debugging
+
+command.debug.cooldown.success=Success, cooldown is activated
+command.debug.cooldown.error=Error, you can redo the order
+
+command.registry.custom_ambient.apply.null=Error, the id entered is null
+command.registry.custom_ambient.apply.success=The atmosphere %1$s has been correctly applied to %2$s !
+command.registry.custom_ambient.reset.player_havnt_ambient=Error, the player has no atmosphere applied
+command.registry.custom_ambient.reset.success=The ambiance was correctly removed on %1$s !
+
+command.registry.custom_mobs.summon.not_found=This mob does not exist
+
+command.registry.custom_items_debug.test=Test %1$s: %2$s
+command.registry.custom_items_debug.test.passed=pass
+command.registry.custom_items_debug.test.failed=failed
+command.registry.custom_items_debug.hand.empty=You don't hold anything in your hand.
+command.registry.custom_items_debug.hand.not_custom=The item in hand is not a custom item.
+command.registry.custom_items_debug.list.title=List of custom items:
+command.registry.custom_items_debug.list.item=- %1$s
+command.registry.custom_items_debug.get.not_found=This item does not exist.
+
+command.utils.cooldowns.no_cooldown=You have no active cooldown.
+command.utils.cooldowns.list_cooldowns=List of active cooldowns:
+command.utils.cooldowns.list=- %1$s : %2$s
+
+command.utils.restart.cannot_open_city_chest=The vault is inaccessible during a scheduled reboot
+command.utils.restart.redem=🔄 Server restart 🔄 \
+
+command.utils.restart.server_restarting=The server is restarting. \
+
+command.utils.restart.thanks=Thank you for your patience!
+command.utils.restart.restarting_in=Restarting the server in %1$s second%2$s
+command.utils.restart.restart=Reboot
+command.utils.restart.in=%1$s second%2$s
+
+command.utils.rtp.must_wait=You have to wait before you can rtp (%3$s)
+command.utils.rtp.fail=RTP failed. Try again later...
+command.utils.rtp.try=RTP: Attempt %1$s/%2$s Failure...
+command.utils.rtp.success=You have been teleported to X: %1$s, Y: %2$s, Z: %3$s
+
+command.utils.setspawn.success=You changed the spawn point to X: %1$s, Y: %2$s, Z: %3$s
+
+command.utils.spawn.got_sent=You have been sent to spawn
+command.utils.spawn.have_sent=You sent %1$s at spawn
+command.utils.spawn.have_sent_by=You were sent to spawn by %1$s
+
+command.utils.socials.hover_access=Click to access
+command.utils.socials.discord=Discord:
+command.utils.socials.site=Site:
+command.utils.socials.wiki=Wiki:
+command.utils.socials.github=Github:
+command.utils.socials.blog=Blog:
diff --git a/src/main/resources/translations/en_US/contest.properties b/src/main/resources/translations/en_US/contest.properties
new file mode 100644
index 000000000..2b11911f2
--- /dev/null
+++ b/src/main/resources/translations/en_US/contest.properties
@@ -0,0 +1,128 @@
+feature.events.contest.vote.menu.title=Contests Menu - Voting
+feature.events.contest.vote.lore.vote_team=Vote for the team %1$s
+feature.events.contest.vote.lore.win=Win it by depositing the most points
+feature.events.contest.vote.lore.warning_choice=ATTENTION ! The choice is final!
+feature.events.contest.vote.lore.voted_for=You voted for the team %1$s
+feature.events.contest.vote.lore.win_exclaim=Win it by depositing the most points!
+feature.events.contest.vote.lore.lose_team=Make the team lose %1$s
+feature.events.contest.vote.lore.lose_detail=By bringing in as many points as you can!
+feature.events.contest.vote.info.lore=Learn more about contests!\
+ The process, the results, ...\
+ CLICK HERE TO SEE MORE!
+feature.events.contest.vote.confirm.join.lore=You will join %1$s\
+ ATTENTION ! You will not be able to change your choice!
+feature.events.contest.vote.confirm.cancel.lore=You will cancel your choice: %1$s\
+ ATTENTION ! You will not be able to change your choice!
+feature.events.contest.vote.joined=You have successfully joined: %1$s
+feature.events.contest.vote.info.name=More info!
+feature.events.contest.team.label=The Team %1$s
+feature.events.contest.trade.menu.title=Contests Menu - Exchanges
+feature.events.contest.trade.main.name=The exchanges
+feature.events.contest.trade.main.lore=Sell as many resources as possible\
+ Against contest shells\
+ To win the %1$s
+feature.events.contest.trade.info.lore=Learn more about contests!\
+ The process, the results, ...\
+ CLICK HERE TO SEE MORE!
+feature.events.contest.trade.offer.lore=Sell %1$s For %2$s shell(s)\
+ LEFT CLICK TO SELL ONCE\
+ SHIFT-LEFT-CLICK TO SELL ALL THIS RESOURCE
+feature.events.contest.trade.unavailable=Functionality blocked. Contact the administration.
+feature.events.contest.trade.success=You exchanged %1$s %2$s against %3$s contest shell(s)
+feature.events.contest.trade.not_enough=You don't have enough of this resource to exchange it!
+feature.events.contest.phase.vote.name=The votes
+feature.events.contest.phase.vote.lore=Every Friday, the contest begins\
+ And the votes open, and you have to choose\
+ Between 2 camps, an atmosphere is created in the spawn...
+feature.events.contest.phase.trade.name=The confrontation
+feature.events.contest.phase.trade.lore=Night falls on the spawn for 2 days\
+ Let the party begin!\
+ Trades are available\
+ Giving away contest shells!
+feature.events.contest.phase.end.name=The results
+feature.events.contest.phase.end.lore=Sunrise over the spawn!\
+ The results fall, and a camp\
+ will be a winner. And rewards will be awarded\
+ to everyone.
+feature.events.contest.command.no_event=There is no Contest! Come back in %1$s days).
+feature.events.contest.command.ended_phase=The Contest is in its finished phase, please contact the staff.
+feature.events.contest.command.setcontest.not_active=You cannot define a contest when it is not active
+feature.events.contest.command.setcontest.started=You cannot define a contest when it has started
+feature.events.contest.command.setcontest.saved=The Contest: %1$s VS %2$s has been successfully saved\
+Please wait for the cached data to refresh.
+feature.events.contest.command.setcontest.invalid_color=/contest setcontest <camp1> <color1> <camp2> <color2> and color must be valid
+feature.events.contest.command.addpoints.not_started=You cannot give points when the contest has not started
+feature.events.contest.command.addpoints.not_registered=You cannot give points to this player because he did not register
+feature.events.contest.command.addpoints.invalid=You cannot give negative points or equal to 0
+feature.events.contest.command.addpoints.success=You added %1$s point(s) to %2$s
+feature.events.contest.more_info.title=Contests Menu - More info
+feature.events.contest.more_info.vote.name=Votes - Friday
+feature.events.contest.more_info.trade.name=The clash - Saturday-Sunday
+feature.events.contest.more_info.end.name=Results - Monday
+feature.events.contest.broadcast.phase1= \
+ \
+ CONTEST! Votes are open!\
+ *we meet at the spawn to be able to vote or /contest...*\
+ \
+
+feature.events.contest.broadcast.phase2= \
+ \ CONTEST! The contributions have started!\
+ Exchange resources for Contest Shells. Collect as many as possible and place them\
+ via the contest terminal or /contest\
+ \
+
+feature.events.contest.broadcast.phase3= \
+ \ CONTEST! Time over!\
+ End of the contest, find your rewards and the results of this Contest\
+ in book form\
+ */contest pour see when the next contest is coming*\
+ \
+
+feature.events.contest.contribution.title=Contests Menu - Contributions
+feature.events.contest.contribution.lore.contribute=Give your contest shells\
+ To win your %1$s\
+ Click to pour all your shellfish
+feature.events.contest.contribution.lore.trade=Trade for contest shells\
+ Useful to win your %1$s\
+ Click to access the exchanges menu
+feature.events.contest.contribution.lore.rank=%1$s\
+ Progress : %2$s/%3$s\
+ INCREASE TITLE TO GET BETTER REWARDS
+feature.events.contest.contribution.title.name=Your title
+feature.events.contest.contribution.button.name=Contribute for the %1$s
+feature.events.contest.contribution.unavailable=Functionality blocked. Please contact the administration
+feature.events.contest.contribution.success=You filed %1$s contest shell(s) for your team!
+feature.events.contest.contribution.no_shells=You don't have a contest shell
+feature.events.contest.book.title=The results of the contest
+feature.events.contest.book.author=The contests
+feature.events.contest.book.lore=%1$s VS %2$s\
+ Open this book to learn more!
+feature.events.contest.book.page.global=Overall statistics\
+ Winner: %1$s\
+ Voting rate: %2$s\
+ Point rate: %3$s\
+ \
+ Loser: %4$s\
+ Voting rate: %5$s\
+ Point rate: %6$s\
+ Inferiority multiplier: x%7$s\
+ Next page: ranking of the 10 best contributors
+feature.events.contest.book.page.ranking.title=The ranking of the contest (up to 10th)
+feature.events.contest.mail.received=You have received the contest letter
+feature.events.contest.mail.click=Click here
+feature.events.contest.mail.hover=Open mailbox
+feature.events.contest.mail.open_mailbox= to open the mailbox
+feature.events.contest.book.page.personal=Personal statistics\
+ Your side: %1$s\
+ Your title on the contest: %2$s\
+ Your rank in the contest: #%3$s\
+ Points submitted: %4$s
+feature.events.contest.book.page.rewards.title=Awards
+feature.events.contest.book.page.rewards.money.prefix=\
++
+feature.events.contest.book.page.rewards.money.suffix=$
+feature.events.contest.book.page.rewards.aywenite.prefix=\
++
+feature.events.contest.book.page.rewards.aywenite.suffix= of Aywenite
+feature.events.contest.book.page.rewards.boost.prefix=\
+Boost
\ No newline at end of file
diff --git a/src/main/resources/translations/en_US/core.properties b/src/main/resources/translations/en_US/core.properties
new file mode 100644
index 000000000..f89d392d1
--- /dev/null
+++ b/src/main/resources/translations/en_US/core.properties
@@ -0,0 +1,42 @@
+core.player.death.message=You just died with %1$s, you lost %2$s\n*consider putting your money in the bank*
+
+core.player.join.welcome=Welcome to OpenMC!
+core.player.join.friend_online=Your friend %1$s logged in
+core.player.join.quest_reward=You have %1$s Pending quest reward(s).
+core.player.join.quest_reward_click=Click here to collect them.
+
+core.player.quit.friend_offline=Your friend %1$s disconnected
+
+core.player.tpa.expired_target=The request for teleportation %1$s was canceled because he disconnected
+core.player.tpa.expired_requester=Your teleport request to %1$s was canceled because he disconnected
+
+core.color.name.black=Black
+core.color.name.dark_blue=Dark blue
+core.color.name.dark_green=Dark green
+core.color.name.dark_aqua=Dark Aqua
+core.color.name.dark_red=Dark red
+core.color.name.dark_purple=Purple
+core.color.name.gold=Orange
+core.color.name.gray=Gray
+core.color.name.dark_gray=Dark gray
+core.color.name.blue=Blue
+core.color.name.green=Light green
+core.color.name.aqua=Light blue
+core.color.name.red=Red
+core.color.name.light_purple=Pink
+core.color.name.yellow=YELLOW
+core.color.name.white=White
+core.color.name.none=None
+
+core.date.relative.just_now=Right now
+core.date.relative.minute=There is %1$s minute
+core.date.relative.minutes=There is %1$s minutes
+core.date.relative.hour=There is %1$s hour
+core.date.relative.hours=There is %1$s hours
+core.date.relative.day=There is %1$s day
+core.date.relative.days=There is %1$s days
+core.date.relative.absolute=THE %1$s has %2$s
+
+
+
+
diff --git a/src/main/resources/translations/en_US/credits.properties b/src/main/resources/translations/en_US/credits.properties
new file mode 100644
index 000000000..b21828181
--- /dev/null
+++ b/src/main/resources/translations/en_US/credits.properties
@@ -0,0 +1,46 @@
+feature.credits.menu.title=Server credits
+feature.credits.menu.lore.developers=Developer(s): %1$s
+feature.credits.menu.lore.graphists=Graphic designer(s): %1$s
+feature.credits.menu.lore.builders=Builder(s): %1$s
+feature.credits.menu.close=Close menu
+feature.credits.feature.adminshop=Adminshop
+feature.credits.feature.animations=Entertainment
+feature.credits.feature.cube=The Cube
+feature.credits.feature.city=Cities
+feature.credits.feature.dream=The Dimension of Dreams
+feature.credits.feature.dream_milestone=The Milestone of Dreams
+feature.credits.feature.mascots=Mascots
+feature.credits.feature.mayor=The Mayors
+feature.credits.feature.city_milestone=The Cities Milestone
+feature.credits.feature.war=Wars
+feature.credits.feature.notation=Ratings
+feature.credits.feature.rank=The Ranks
+feature.credits.feature.contest=The Contests
+feature.credits.feature.weekly_events=Weekly Events
+feature.credits.feature.holograms=Holograms
+feature.credits.feature.economy=Economy
+feature.credits.feature.friends=The friend system
+feature.credits.feature.homes=The Home System
+feature.credits.feature.leaderboard=Rankings
+feature.credits.feature.mailbox=The Mailbox
+feature.credits.feature.mainmenu=The Main Menu
+feature.credits.feature.milestones=The Milestones
+feature.credits.feature.privatemessage=Private messages
+feature.credits.feature.quest=Quests
+feature.credits.feature.settings=Settings
+feature.credits.feature.tickets=V1 Tickets
+feature.credits.feature.tpa=The Tpa
+feature.credits.feature.rtp=The RTP
+feature.credits.feature.versionning=Versioning
+feature.credits.feature.omcregistry=WTO Registers
+feature.credits.feature.customitems=Custom Items
+feature.credits.feature.customlootbox=Custom Lootboxes
+feature.credits.feature.chronometer=Stopwatch
+feature.credits.feature.cooldown=Cooldown
+feature.credits.feature.menu_lib=Menu System
+feature.credits.feature.packet_menu_lib=Packet Menu System
+feature.credits.feature.errorhandler=The error handling system
+feature.credits.feature.unittest=Unit tests
+feature.credits.feature.orm=Database system
+
+
diff --git a/src/main/resources/translations/en_US/cube.properties b/src/main/resources/translations/en_US/cube.properties
new file mode 100644
index 000000000..4877c656e
--- /dev/null
+++ b/src/main/resources/translations/en_US/cube.properties
@@ -0,0 +1,14 @@
+feature.cube.bossbar.title=The Cube
+feature.cube.command.start_shock=Electro-magnetic shock launched
+feature.cube.command.start_bubble=Corrupted bubble launched
+feature.cube.command.stop_shock=Electro-magnetic shock stopped
+feature.cube.command.stop_bubble=Corrupt bubble stopped
+feature.cube.command.reproduce=Reproduction of the cube launched!
+feature.cube.command.reproduce_force.unavailable=Reproduction is not in progress, use %1$s
+feature.cube.command.reproduce_force.success=Forced reproduction of the cube!
+feature.cube.command.invalid_format=Invalid format!
+feature.cube.command.world_not_found=World not found
+feature.cube.command.invalid_coords=Invalid coordinates
+feature.cube.command.not_found=No cubes found
+feature.cube.command.not_cube=It's not a cube
+
diff --git a/src/main/resources/translations/en_US/dailyevents.properties b/src/main/resources/translations/en_US/dailyevents.properties
new file mode 100644
index 000000000..610370f93
--- /dev/null
+++ b/src/main/resources/translations/en_US/dailyevents.properties
@@ -0,0 +1,102 @@
+feature.dailyevents.bloodynight.name=Bloody Night
+feature.dailyevents.goldenharvest.name=Golden Harvest
+feature.dailyevents.miraculousfishing.name=Miraculous fishing
+
+feature.dailyevents.bloodynight.lore=The night remains to be bloody... \
+ Protect yourself, fight, you will experience different waves \
+ and you will surely have a big boss to beat with several
+feature.dailyevents.goldenharvest.lore=It risks being sporty \
+ Expect farms to be running at full capacity! \
+ Benefit from several new resources and many surprises
+feature.dailyevents.miraculousfishing.lore=Live a great fishing session ! \
+ Be careful Sea Monsters we will wait for you impatiently \
+ for you to jump on! \
+ But you risk having several good surprises if you are lucky
+
+feature.dailyevents.bloodynight.toast.start=There Bloody Night has started!
+feature.dailyevents.bloodynight.toast.end=The ordeal of the Bloody Night stopped
+
+feature.dailyevents.goldenharvest.toast.start=ThereGolden Harvestis coming to your barns!
+feature.dailyevents.goldenharvest.toast.end=ThereGolden Harvesthas stopped!
+
+feature.dailyevents.miraculousfishing.toast.start=ThereMiraculous fishingis open!
+feature.dailyevents.miraculousfishing.toast.end=ThereMiraculous fishingleft
+
+feature.dailyevents.toast.beginning_event_in_world=An event will begin in your world in %1$ss!
+feature.dailyevents.toast.beginning_event_out_world=An event will start in %1$ss!
+
+feature.dailyevents.broadcast.soon=*an event begins to come closer to our world...*
+
+feature.dailyevents.miraculousfishing.broadcast.start= \
+ \
+ MIRACLE FISHING! The big session has begun!\
+ *take out your fishing rod and discover the mysteries of the lakes*\
+ \
+ Effects:\
+ + %1$s%fishing speed\
+ +Special and rare loots\
+ +Sea Monsters\
+ \
+
+feature.dailyevents.miraculousfishing.broadcast.end= \
+ \
+ MIRACLE FISHING! The blessing is over! \
+ *rejoice in your captures!*\
+ \
+
+
+feature.dailyevents.bloodynight.broadcast.start= \
+ \
+ BLOODY NIGHT! The bloodbath begins!\
+ *take out your weapons and fight the waves of monsters*\
+ \
+
+feature.dailyevents.bloodynight.broadcast.end= \
+ \
+ BLOODY NIGHT! The calamity has ended! \
+ *return to a calm and peaceful world*\
+ \
+
+
+feature.dailyevents.goldenharvest.broadcast.start= \
+ \
+ GOLDEN HARVEST! Crops are now blessed!\
+ *find crop mutations, and other surprises...*\
+ \
+
+feature.dailyevents.goldenharvest.broadcast.end= \
+ \
+ GOLDEN HARVEST! Crop productivity stops! \
+ *store, sell your resources that you could farm with*\
+ \
+
+
+# ** Pêche miraculeuse **
+feature.dailyevents.miraculousfishing.lootbox.fishing_furniture.name=Fishing equipment box
+feature.dailyevents.miraculousfishing.lootbox.rare_fishing_treasure.name=Rare fishing treasure
+feature.dailyevents.miraculousfishing.lootbox.epic_fishing_treasure.name=Epic Fishing Treasure
+feature.dailyevents.miraculousfishing.lootbox.legendary_fishing_treasure.name=Legendary fishing treasure
+
+feature.dailyevents.miraculousfishing.loot_table.get=You fished %1$s objects!
+feature.dailyevents.miraculousfishing.loot_table.get.double_hook=*Double grip applied*
+feature.dailyevents.miraculousfishing.loot_table.basic_fishing=Basic Fishing Loot
+feature.dailyevents.miraculousfishing.loot_table.miraculous_fishing=Miraculous Catch Loots
+feature.dailyevents.miraculousfishing.loot_table.sea_creature=Sea Monsters
+
+feature.dailyevents.miraculousfishing.eat_kebab_fermented.smelt=Ugh, it stinks!
+feature.dailyevents.miraculousfishing.eat_kebab_fermented.boat=Your boat has sunk.
+feature.dailyevents.miraculousfishing.eat_kebab_fermented.broadcast=[has] PROUT !!! %1$s has farted. Yuck !
+
+feature.dailyevents.miraculousfishing.menu.info.fishing_speed.name=Fishing Speed Boost
+feature.dailyevents.miraculousfishing.menu.info.fishing_speed.lore=Fishing speed is reduced by %1$s%
+
+feature.dailyevents.miraculousfishing.menu.loot_info.sea_creature=Sea Monster Loots
+feature.dailyevents.miraculousfishing.menu.info.sea_creature.name=Sea Monsters
+feature.dailyevents.miraculousfishing.menu.info.sea_creature.lore=Sea monsters are rare creatures and \
+ powerful, which can give you quite special loots\
+ CLICK HERE TO VIEW SPAWNABLE CREATURES
+
+feature.dailyevents.miraculousfishing.menu.info.loot_table.name=Unique and special loots
+feature.dailyevents.miraculousfishing.menu.info.loot_table.lore=Benefit from a miraculous blessing \
+ leaving you with new rewards and loot\
+ CLICK HERE TO SEE SINABLE ITEMS
\ No newline at end of file
diff --git a/src/main/resources/translations/en_US/displays.properties b/src/main/resources/translations/en_US/displays.properties
new file mode 100644
index 000000000..c401c7ecb
--- /dev/null
+++ b/src/main/resources/translations/en_US/displays.properties
@@ -0,0 +1,35 @@
+feature.displays.tablist.header.default=\n\n\n\n\n\n\n%1$s\n\n Online players: %2$s/%3$s \n
+feature.displays.tablist.header.dream=\n\n\n\n\n\n\n%1$s\n\n
+feature.displays.tablist.footer.default=\nplay.openmc.fr\n
+feature.displays.tablist.footer.dream=\nplay.openmc.fr\n
+feature.displays.scoreboard.title.text=OPEN™
+feature.displays.scoreboard.footer.text=play.openmc.fr
+feature.displays.scoreboard.contest.title=contest
+feature.displays.scoreboard.contest.vs= VS
+feature.displays.scoreboard.contest.ends=END:
+feature.displays.scoreboard.rank.label=rank:
+feature.displays.scoreboard.rank.none=none
+feature.displays.scoreboard.city.label=city:
+feature.displays.scoreboard.city.none=None
+feature.displays.scoreboard.balance.label=money:
+feature.displays.scoreboard.location.label=rental:
+feature.displays.scoreboard.location.wilderness=Nature
+feature.displays.scoreboard.location.protected=Protected Region
+feature.displays.scoreboard.pumpkins.label=pumpkins:
+feature.displays.scoreboard.citywar.title=ONGOING WAR
+feature.displays.scoreboard.citywar.enemy.label=enemy:
+feature.displays.scoreboard.citywar.phase.label=phase:
+feature.displays.scoreboard.citywar.distance.label=distance:
+feature.displays.scoreboard.citywar.starts_in.label=start in:
+feature.displays.scoreboard.citywar.mascot.label=mascot:
+feature.displays.scoreboard.citywar.ends_in.label=end in:
+feature.displays.scoreboard.citywar.state.label=state:
+feature.displays.scoreboard.citywar.state.ended=finished
+feature.displays.scoreboard.citywar.mascot.dead=%1$s DEAD
+feature.displays.scoreboard.restart.in=Reboot in
+feature.displays.holograms.command.setpos.success=Hologram position %1$s update.
+feature.displays.holograms.command.setpos.error=Error updating hologram position %1$s : %2$s
+feature.displays.holograms.command.setpos.invalid=Please specify a valid hologram: %1$s
+feature.displays.holograms.command.disable=Holograms successfully disabled.
+feature.displays.holograms.command.enable=Holograms activated successfully.
+
diff --git a/src/main/resources/translations/en_US/dream.properties b/src/main/resources/translations/en_US/dream.properties
new file mode 100644
index 000000000..dbb173e26
--- /dev/null
+++ b/src/main/resources/translations/en_US/dream.properties
@@ -0,0 +1,386 @@
+# ** DREAM **
+
+# * COMMANDS
+feature.dream.commands.leave.not_in_dream=You are not in a dream
+feature.dream.commands.leave.success=You have successfully left your dream.
+feature.dream.commands.item.not_found=This item does not exist
+feature.dream.admin.commands.showdialog.invalid_step=The step name is invalid!
+feature.dream.admin.commands.showdialog.no_dialogs=This step has no dialogs!
+
+# * MESSAGES
+feature.dream.message.time_lost_damage=You lost %1$s because you took damage!
+feature.dream.message.great_dream_bonus=You received 60% extra time!
+
+feature.dream.scoreboard.time=time:
+feature.dream.scoreboard.cold=cold:
+feature.dream.scoreboard.biome=biome:
+feature.dream.scoreboard.location=location:
+
+# * ITEMS
+feature.dream.item.ame_orb.name=Soul Orb
+feature.dream.item.cloud_orb.name=Cloud Orb
+feature.dream.item.glacite_orb.name=Frozen Orb
+feature.dream.item.mud_orb.name=Mud Orb
+feature.dream.item.unknown_orb.name=Unknown orb
+
+feature.dream.item.message.cannot_drop=You cannot throw this item away!
+
+feature.dream.item.rarity.common=COMMON ITEM
+feature.dream.item.rarity.rare=RARE ITEM
+feature.dream.item.rarity.epic=EPIC ITEM
+feature.dream.item.rarity.legendary=LEGENDARY ITEM
+feature.dream.item.rarity.onirisme=ITEM ONIRISM
+
+feature.dream.item.metal_detector.message.must_be_dream=You have to be in a dream to use the metal detector!
+feature.dream.item.metal_detector.message.reset_cooldown=The cooldown was reset because you changed world or you are no longer in a dream.
+feature.dream.item.meteo_wand.message.must_be_overworld=You must be in the Overworld to use the Weather Wand!
+feature.dream.item.meteo_wand.message.cooldown=You have to wait %1$s before using the weather wand!
+feature.dream.item.meteo_wand.message.success=You have successfully changed the weather!
+
+# * BIOMES
+feature.dream.biome.sculk_plains=Sculk Plain
+feature.dream.biome.soul_forest=Forest of Souls
+feature.dream.biome.mud_beach=Mud beach
+feature.dream.biome.cloud_land=Valley of Clouds
+feature.dream.biome.glacite_grotto=Frozen cave
+feature.dream.biome.message.not_unlocked=Warning, you are in a biome you have not unlocked yet, you need %1$s
+feature.dream.biome.progression.soul_forest=the Forest of Souls
+feature.dream.biome.progression.cloud_land=Cloud Castle
+feature.dream.biome.progression.mud_beach=Mud Beach
+feature.dream.biome.progression.glacite_grotto=the Glacite Cave
+feature.dream.biome.progression.unknown=Unknown
+feature.dream.biome.message.unlocked=You have unlocked %1$s !
+
+# * STRUCTURES
+feature.dream.structure.base_camp=Cave Camp
+feature.dream.structure.cube_temple=Temple of the Cube
+feature.dream.structure.cloud_castle=Cloud Castle
+feature.dream.structure.message.exit=You come out of: %1$s
+feature.dream.structure.message.enter=You enter: %1$s
+
+# * MOBS
+feature.dream.mob.breezy=Breezy
+feature.dream.mob.corrupted_tadpole=Corrupted tadpole
+feature.dream.mob.crazy_frog=Crazy Frog
+feature.dream.mob.dream_creaking=Dream Creaking
+feature.dream.mob.dream_phantom=Phantom Awakened
+feature.dream.mob.dream_spider=Dream Spider
+feature.dream.mob.dream_stray=Dream Stray
+feature.dream.mob.soul=Soul
+feature.dream.mob.soul.display=Soul
+feature.dream.mob.soul.skull=Soul
+
+# * ENCHANTMENTS
+feature.dream.enchantment.dream_sleeper.name=Sleepy
+feature.dream.enchantment.experientastic.name=Experientastic
+feature.dream.enchantment.soulbound.name=Soulbound
+feature.dream.enchantment.soulbound.message.effect=Your Soulbound enchantment has taken effect! Next use in %1$s
+
+# * MECHANISMS
+feature.dream.altar.message.must_hold_item=You must hold an item in your hand!
+feature.dream.altar.message.unusable_item=This item cannot be used on the altar!
+feature.dream.altar.message.no_recipe=No recipe was found for this item!
+feature.dream.altar.message.bound=The item has been linked to the altar.
+feature.dream.altar.message.already_bound=This item is already linked to the altar!
+feature.dream.altar.message.must_hold_bound_item=You must hold the linked item in your hand!
+feature.dream.altar.message.soul_not_found=No souls bound to this altar have been found!
+feature.dream.altar.message.not_enough_souls=You need %1$s souls to perform this ritual!
+feature.dream.altar.message.ritual_complete=The ritual is complete!
+
+feature.dream.cold.message.level_1=You start to feel the cold...
+feature.dream.cold.message.level_2=The cold is becoming difficult to bear...
+feature.dream.cold.message.level_3=You are frozen!
+feature.dream.cold.message.level_4=The cold is killing you!
+
+feature.dream.rng.prefix.crazy_rare=INCREDIBLY RARE!
+feature.dream.rng.prefix.wow=WOW!
+feature.dream.rng.prefix.pretty_nice=PRETTY NICE!
+feature.dream.rng.prefix.nice=NICE !
+feature.dream.rng.prefix.good=GOOD !
+feature.dream.rng.message.chance=(%1$s)
+feature.dream.rng.message.loot=%1$s %2$s got %3$s %4$s
+
+feature.dream.actionbar.distance=Distance : %1$s
+feature.dream.actionbar.cube_distance=Cube Distance: %1$s
+
+feature.dream.orb.message.obtained=%1$s got %2$s
+
+# * TRADER
+feature.dream.trader.npc.name=Frozen Wanderer
+feature.dream.trader.menu.name=Wanderer's Trades
+feature.dream.trader.time.one_minute=1 minute of time
+feature.dream.trader.menu.time.name=1 min Time
+feature.dream.trader.menu.time.lore=Buy time so you can stay longer!\
+ Cost :\
+ %1$s Ewenite
+feature.dream.trader.menu.trade.lore.cost=Cost :
+feature.dream.trader.menu.trade.lore.glacite= %1$s Glacite
+feature.dream.trader.menu.trade.lore.ewenite= %1$s Ewenite
+feature.dream.trader.menu.trade.lore.click=LEFT CLICK TO BUY
+feature.dream.trader.message.not_enough_resources=You don't have enough resources to make this purchase!
+feature.dream.trader.message.time_trade_success=You exchanged %1$s of Eweniteagainst %2$s
+feature.dream.trader.message.cost.glacite=%1$s of Glacite
+feature.dream.trader.message.cost.ewenite=%1$s of Ewenite
+feature.dream.trader.message.cost.separator=And
+feature.dream.trader.message.trade_success=You exchanged %1$s against %2$s
+feature.dream.trader.trade.glacite_orb=Glacite Orb
+feature.dream.trader.trade.soulbound_book=Soulbound II Book
+feature.dream.trader.trade.somnifere=Sleeping pill
+feature.dream.trader.trade.eternal_campfire=Eternal Campfire
+feature.dream.trader.trade.ewenite=Ewenite
+
+# * SINGULARITY
+feature.dream.singularity.menu.name=Singularity
+feature.dream.singularity.message.crafted=%1$s made the %2$s
+
+# * MILESTONES
+feature.dream.milestone.name=Dream
+feature.dream.milestone.description=Explore the dimension of dreams,\
+ collect the orbs and break through\
+ the mystery of this world.\
+ Good night.
+
+feature.dream.milestone.quest.altar.name=Start of the ritual
+feature.dream.milestone.quest.cloud_castle.name=Laputa
+feature.dream.milestone.quest.cloud_valley.name=Rise to seventh heaven
+feature.dream.milestone.quest.craft_domination_orb.name=Dominating is cool
+feature.dream.milestone.quest.craft_eternal_fire.name=The Ice Age
+feature.dream.milestone.quest.crafting_table.name=A new survival?
+feature.dream.milestone.quest.craft_singularity.name=The purpose?
+feature.dream.milestone.quest.crafts.name=Learn new crafts
+feature.dream.milestone.quest.creaking_heart.name=Resin has no heart
+feature.dream.milestone.quest.crystallized_pickaxe.name=Good pick
+feature.dream.milestone.quest.cube_temple.name=Worship the Soul Cube
+feature.dream.milestone.quest.ewenite.name=Aywenite, Awyenito or Ewenite?
+feature.dream.milestone.quest.find_cube.name=A little detour
+feature.dream.milestone.quest.glacite_orb.name=Finally the last one?
+feature.dream.milestone.quest.grotto_camp.name=Survival in end-of-the-world mode?
+feature.dream.milestone.quest.illusionist.name=Is there anyone?
+feature.dream.milestone.quest.kill_breezy.name=The air of the wind
+feature.dream.milestone.quest.metal_detector.name=Cooooooooaaaaaaa
+feature.dream.milestone.quest.mud_beach.name=I prefer the beach
+feature.dream.milestone.quest.mud_orb.name=Beep Beep Beep
+feature.dream.milestone.quest.old_axe.name=The first tool! Finally !
+feature.dream.milestone.quest.sleep.name=Sleep is life
+feature.dream.milestone.quest.soul_orb.name=A sacrifice is necessary!
+feature.dream.milestone.quest.souls.name=My friends come from beyond
+feature.dream.milestone.quest.transferable_object.name=Was it just a dream?
+feature.dream.milestone.quest.altar.description=Drop theOrb of Domination on theAltar\
+ Let's begin the orb conversion ritual
+feature.dream.milestone.quest.cloud_castle.description=Enter the %1$s\
+ A new castle to conquer?
+feature.dream.milestone.quest.cloud_valley.description=Discover the %1$s\
+ These clouds in this dream must be hiding something...
+feature.dream.milestone.quest.craft_domination_orb.description=Make theOrb of Domination\
+ 1 in 5 to dominate them all!
+feature.dream.milestone.quest.craft_eternal_fire.description=Make it eternal fire\
+ Will we find fossilized dinosaurs or Sid?
+feature.dream.milestone.quest.craft_singularity.description=Craft it Singularity\
+ Wouldn't the orbs have a final use?
+feature.dream.milestone.quest.crafting_table.description=Make a craft table\
+ Strange this night survival...\
+ we don't see except the full of sculks
+feature.dream.milestone.quest.crafts.description=Do /crafts to see the available crafts\
+ This dimension has its own rules,\
+ I have to learn them to survive
+feature.dream.milestone.quest.creaking_heart.description=Recover a Creaking Heart\
+ Are we looking for the resin or the heart?
+feature.dream.milestone.quest.crystallized_pickaxe.description=Get the Crystallized Pickaxe\
+ Sometimes you have to rack your brains
+feature.dream.milestone.quest.cube_temple.description=Enter the %1$s\
+ In search of the Cube of Souls monument...\
+ we are still in Minecraft, even in a dream!
+feature.dream.milestone.quest.ewenite.description=GetEwenite\
+ A new ore to exploit.\
+ Strange, this name is familiar to me.
+feature.dream.milestone.quest.find_cube.description=Find the Cube\
+ Mystery and explanations
+feature.dream.milestone.quest.glacite_orb.description=Exchange theIce Orb\
+ Final stretch to collect them all.
+feature.dream.milestone.quest.grotto_camp.description=Find a cave camp\
+ There is no Transperceneige but,\
+ Would there be a protected area?
+feature.dream.milestone.quest.illusionist.description=Find and see the merchant\
+ If there are fires lit,\
+ there is life in the area.
+feature.dream.milestone.quest.kill_breezy.description=Beat Breezy\
+ We're going to tame one of the mountain spirits\
+ from Poncahontas, or is it Elsa?
+feature.dream.milestone.quest.metal_detector.description=Recover the metal detector\
+ Why are tadpoles so big?
+feature.dream.milestone.quest.mud_beach.description=Enter the %1$s\
+ Let's take advantage of this dream to go and bask in the Sun.\
+ Hey, why is there no water, but only mud?\
+ And still no Sun!? So this place is only night?
+feature.dream.milestone.quest.mud_orb.description=Find theMud Orb\
+ Well, not sand, but mud.\
+ Possible that people still lose\
+ things. Oh hey, 6 blocks to the right.
+feature.dream.milestone.quest.old_axe.description=Make a Old Creaking Ax\
+ Our best friend in this world!
+feature.dream.milestone.quest.sleep.description=Enter the dimension of dreams\
+ How good it is to sleep for\
+ rest from the hard life of the cities...
+feature.dream.milestone.quest.soul_orb.description=Get theSoul Orb\
+ Souls in the pocket, allow me, by your power,\
+ to obtain your orb with the sacrifice of the Orb of Domination.
+feature.dream.milestone.quest.souls.description=To recover %1$s souls\
+ I seem to have seen creatures\
+ flies prowling towards the tall dark trees.
+feature.dream.milestone.quest.transferable_object.description=Retrieve an item transferable in the Overworld\
+ This world still seems real to me.\
+ Wouldn't the singularity be a portal?\
+ dimensional for loot?
+
+feature.dream.milestone.quest.altar.dialog=Traveler: To obtain the Soul Orb, you will need...\
+ Souls?!\
+ Traveler: Yes! That's it! You will need some %1$s\
+ Traveler: But be careful, they love the weather even more than the creakings\
+ How can I find them, and how do I recognize them?\
+ Traveler: Look around the altar, towards the trees. Souls wander outside the building.\
+ Traveler: Just like the "Creaking" armor, it is possible to have the armor of "Souls". This will give you %2$s additional seconds per equipped armor piece.\
+ Traveler: You can also transform your ax at the altar with a few extra souls.
+feature.dream.milestone.quest.cloud_castle.dialog=This castle is nothing like anything I know. How come it stays suspended in the clouds?\
+ Traveler: As said before, these ancient people have tamed the power of the winds. But with what happened, I think the power turned in on itself to protect the treasure.\
+ The Orb...\
+ Traveler: Correct! This castle should remind you of trial chambers of your world.\
+ So you know my world?\
+ Traveler: ...
+feature.dream.milestone.quest.cloud_valley.dialog=We are in a full... of clouds???\
+ Traveler: This is a story of an ancient people who had tamed the forces of the wind.\
+ Traveler: You should be able to find some remains of their civilization.\
+ That's to say ?\
+ Traveler: You have found the %1$s No ?
+feature.dream.milestone.quest.craft_domination_orb.dialog=Here is the orb, what should I do with it?\
+ Traveler: This orb is the first in a series of 5 scattered in this world. Each orb is unique and has the ability to move you forward in the world and in my...our quest!\
+ So we need to explore the new area unlocked by the orb?\
+ Traveler: That's right! We will have to find the Temple of the master of the place. You shouldn't miss it, I think...
+feature.dream.milestone.quest.craft_eternal_fire.dialog=Traveler: Good! This fire will be useful to you.\
+ It's a fire, will it allow me to cook something?\
+ Traveler: In this world, this fire will serve you to limit the effects of cold depths. You're going to enter a freezing world, every second spent in it will slow you down and will end up kill you.\
+ Traveler: By placing this fire on the ground and staying close to it, you will warm yourself and avoid this.\
+ Like when you come out of powder snow.\
+ Traveler: Yes. Now that you understand the principle, let's go looking for camps present in the deep caves.
+feature.dream.milestone.quest.craft_singularity.dialog=So ! What must we do to be able to turn back time now?\
+ Traveler: ...\
+ Traveler: I... I'm going to tell you something. It was never a question of going back in time in this dimension, but of being able to transfer myself to another dimension in order to escape the misfortunes of this world. My goal has always been to help people, but that has not been possible in this dimension.\
+ Traveler: I didn't want to talk to you about it at the risk of appearing selfish.\
+ Traveler: Unfortunately for me, the singularity we have is not powerful enough to be able to transfer life into your dimension in order to be able to make a fresh start and be able to help people.\
+ Traveler: But that doesn't matter, I liked it to help you explore this world and especially to be able to recover objects that will undoubtedly be useful to you in your world.\
+ ...\
+ Traveler: I failed to save this dimension, but I still managed to help "you" in this dimension.\
+ Traveler: Whatever happens, you will be able to recover enchantments of this dimension thanks to the singularity and even thearmor if you wish.\
+ Traveler: The singularity is not powerful enough for me, but more than enough for new weapons or armor.\
+ Traveler: Just like the previous orbs, you have the ability to craft new armor. This one, on the other hand, will require redoing all the orbs, but it's worth it, because it adds %1$s seconds more per piece worn, but also effects.\
+ ... THANKS !\
+ Traveler: No! It's me who thanks you. Because one day, someone I respected as a person said to me: “Thank the person you helped, because they allowed you to do a good deed.”\
+ Will you stay with me?\
+ Traveler: No, I can't. Other players are getting lost here, and they need me. So I bid you farewell...
+feature.dream.milestone.quest.crafting_table.dialog=Okay, now that I have the table, let's look for something to make some tools and... how come there are Crackers here!?\
+ Traveler: You have a good eye. This world is full of amazing creatures that have one thing in common: they feed on time, in you flying.\
+ So that’s that bar up there?\
+ Traveler: Yes, and this time is not infinite, which is why we must act quickly. Let's take advantage of being among these creatures to recover their hearts.
+feature.dream.milestone.quest.crafts.dialog=Sounds like normal survival, right?\
+ Traveler: Indeed, this world may be dark, new and complex, but it is not that different from the Overworld. But a dimension is added: the time ! For the moment, you can only access the %1$s, but the other biomes will soon be accessible.\
+ Hmmm, that intrigues me. But you said we're short on time, so let's not hang around. I need one craft table.
+feature.dream.milestone.quest.creaking_heart.dialog=Ah! But it's true that they protect their hearts.\
+ Traveler: Yes, and these will be useful to us later, the crafts of this world use a lot of them. Whether for tools, armor, or various objects of this world. Start by making yourself a ax.\
+ But what is the purpose of this world??\
+ Traveler: I'll explain to you soon, I don't want you to end up like me...\
+ What does it mean to “end up like you”?\
+ Traveler: You will understand. To avoid this, you must continue, make yourself an ax for the moment.
+feature.dream.milestone.quest.crystallized_pickaxe.dialog=Traveler: This one will be your best friend in the caves, replacing your axe.\
+ Traveler: From now on, you'll mainly have to mine. The depths of this world are full of useful minerals for the last step of this quest.\
+ So let's not hang around, let's go to the cave.\
+ Traveler: No! Before going to get the last orb, take a detour to the coordinates X: %1$s Z: %2$s. As promised, I owe you an explanation.
+feature.dream.milestone.quest.cube_temple.dialog=Traveler: Know that this is an altar that was erected to...\
+ For ?\
+ Traveler: ...\
+ Traveler: Let's move on, now is not the time. Let's stick to the fact that he is the master of the place.\
+ What does the master of the place mean?\
+ Traveler: No matter, now that you understand the principle of this dimension, I will be able to talk to you about its aim and what we do here.\
+ Traveler: Start by going to the center of the temple and drop the orb.
+feature.dream.milestone.quest.ewenite.dialog=The beginning of wealth. Whether it's mining or trading them, I have a feeling it's going to be a long search.\
+ Traveler: The ore is not common, but you can find several quickly.\
+ Isn't there a way to go faster?\
+ Traveler: You can make your own Clockwork Pickaxe If you want, it will be faster.
+feature.dream.milestone.quest.find_cube.dialog=Traveler: This is the origin of the catastrophe of this world. This is the "Cube", the master of the place. He was worshiped by the people of this dimension who built the temples you saw. His name: Bobby.\
+ But what did he do and why is there no sculk around him?\
+ Traveler: In the beginning, this one brought us peace and prosperity. But one day, a violent storm would have come, a lightning would have struck it and damaged it. \
+ Traveler: The cube, after having regenerated for a long period of time, would have started to move and little by little, corrupt the world, but by installing a self-sufficient ecosystem for his new state. That is to say, it protects itself and propagates alone, feeding on the life of the world.\
+ Traveler: This led to the anhilation or the corruption of all life in this place.\
+ And you in all this, who are you? Since the beginning of our adventure, you have been talking to me, but you are not really there.\
+ Traveler: It is very likely that I am no longer in this world, at least physically. When the cube corrupted the card, instead of fighting against it, I used it to destroy my body, by forcing the survival of my mind. Since I used the cube to survive, it can't take me out without killing itself.\
+ Traveler: I am then here to help everyone get back to your old life. When I saw you coming, I followed you so that you could realize in my place, the quest I was supposed to carry out.\
+ ...\
+ Traveler: Now that you know a little more, we must move forward in the quest that is now yours. Direction : the caves.
+feature.dream.milestone.quest.glacite_orb.dialog=Traveler: Finally, we have reached our goal. Much more than just one step to finally be free from this situation.\
+ What should I do?\
+ Traveler: They need to be combine.\
+ Combine them? No incantation this time?\
+ Traveler: No, I promise. Combine them in the craft table that we both made at the start of our adventure. We can then use the power of singularity.
+feature.dream.milestone.quest.grotto_camp.dialog=This is a camp.\
+ Traveler: Let's see if we can find the last keeper of the orb. He must be around.\
+ But if the Cube corrupted and killed everything, how can the merchant still be alive?\
+ Traveler: The orb, my friend. Before, he was a traveling merchant who traveled the world to trade his goods.\
+ Traveler: And each orb has a power, and I think that of theIce Orb allowed this merchant to survive, but at what cost...
+feature.dream.milestone.quest.illusionist.dialog=There's the merchant. He doesn't seem to want to move anymore.\
+ Traveler: As I said before, corruption has amended deeply, even if the orb has it protected of death.\
+ Traveler: I haven't told you about this until now, but haven't you noticed anything in each place where we found an orb?\
+ ...\
+ Traveler: The orbs have preserved the lives around them. Creakings, Spiders, Souls, Breeze, Phantom, Wanderer, Frogs, Tadpoles, and here the merchant.\
+ Traveler: But it's up to us to really bring her back. So go ahead, do itexchange for the Orb.
+feature.dream.milestone.quest.kill_breezy.dialog=But this Breeze is crazy!!\
+ Traveler: Yes, that's what I feared...even here, everything has been corrupted.\
+ How is that corrupt?\
+ Traveler: Explanations will arrive in due time. For now, come back down to earth, and head towards the beaches. I wish I could say fine sand...\
+ Traveler: But before leaving, you can collect theCloud Armor, who will give you %1$s seconds of extra time per piece of armor. You can also recover a cloud fishing rod, and a enchanted book.\
+ A fishing rod? But to fish for what? Cloud droplets?!\
+ Traveler: Exactly! This will allow you to fish in the clouds as if it were a lake. In particular, you will be able to recover sleeping pills which allow you to stay asleep longer, or to fall asleep effectively, if you are awake.
+feature.dream.milestone.quest.metal_detector.dialog=Traveler: Ah, finally the detector. We will be able to search for the orb in this mud more easily.\
+ Traveler: These beaches used to be sand and water. But with the disaster, frogs And tadpoles have transformed. This transformation resulted, for them, in a great thirst.\
+ Hence the absence of water.
+feature.dream.milestone.quest.mud_beach.dialog=Finally on the beach, and indeed, there is no warm sand, no radiant sun, just mud and... nothing else actually.\
+ Traveler: Very well, sit there, I owe you an explanation.\
+ Traveler: This world has undergone a disaster, hence its appearance. Before, he was so...if only I could see him again.\
+ You told me about five orbs. Would these make it possible to bring back the old world, with the power of terraforming?\
+ Traveler: No, it's much more powerful than that. They allow you to create a wormhole between this dimension and yours. We can then use part of theenergy of your size for go back in time in it, and restore its balance.\
+ Use part of the energy? But, is this without risk for my dimension??\
+ Traveler: Yes, of course, otherwise I wouldn't take the risk. Each block of your world would give a small pearl of its energy.\
+ What energy?\
+ Traveler: We must move forward now. Looking for frogs, they will be useful to us.
+feature.dream.milestone.quest.mud_orb.dialog=It reminds me of my vacation searching for treasures on the beach. Even if it's for a better cause. And now that the 4th orb is with us, what should I do?\
+ Traveler: More than one. As we have done all the surface and the clouds, then all we have to do is search underground. You will need to prepare well, and in particular good fire. As for the detector, you should have seen that we obtained several things.\
+ Yes, my inventory is full.\
+ Traveler: Just like the fishing rod, you can obtain various items there like chips, even if some are very rare, sleeping pills, another enchanted book, or even a pickaxe which will be useful to you later... I'm going to check if you don't already have one.
+feature.dream.milestone.quest.old_axe.dialog=Traveler: Good! This will be useful to us. The next objective is going to be to get theOrb of Domination.\
+ What will it be used for?\
+ Traveler: I'll explain it to you when you get it. It will be easy to recover with the axe.\
+ Do I need anything else?\
+ Traveler: It's not obligatory, but it would allow you to stay longer in this world. There is armor “Creaking” that you can make. This will give you %1$s additional seconds per equipped armor piece.
+feature.dream.milestone.quest.sleep.dialog=ZZZzzz...what's happening!? Am I dreaming? This... world looks so different from the Overworld!\
+ Traveler: What...? How is this possible??! I thought I was the only one here. And it's been so long since I've seen anyone...\
+ But, who are you? Where are you? and why are you talking to me??\
+ Traveler: Well, welcome. But everything in its time. Time which we will miss, we must act quickly, I will explain everything to you as we go along. For now, I suggest you discover what you will need to discover this world with the command /crafts.\
+ Traveler: Please know that if you do not wish to stay until the end of time, you can wake up with the command /leave.\nConversely, you can come back here more frequently by making yourself a Pyjamas. This allows you to increase your chances of passing into this world while sleeping.
+feature.dream.milestone.quest.soul_orb.dialog=And two! On the other hand, I no longer have the Orb of Domination...\
+ Traveler: Yes, you will have to do one again. But that's not the most complicated thing.\
+ Traveler: Now that you have the Soul Orb, you will be able to access the new area which, you will see, does not at all resemble the current world...\
+ Traveler: You must climb into the sky, into the clouds.\
+ Can you tell me a little about the purpose of this quest?\
+ Traveler: The orbs are numbered 5, and each of them contains a power. Alone, they are of no use. But together they could help this world.\
+ And... who are you anyway?\
+ Traveler: I was...\
+ Traveler: I'm a gamer just like you, but a gamer this world.
+feature.dream.milestone.quest.souls.dialog=And of %1$s ! What should I do now? Is there a specific orb craft to do?\
+ Traveler: No, you simply have to repeat the following incantation twice: Ashkara no thari fu laq to\
+ Ashkara no thari fu laq to! Ashkara no thari fu laq to!\
+ ...not easy to say...\
+ Traveler: Ahah, actually, you just need to interact with theOrb of Domination onAltar.
+
+# * QUESTS
+feature.dream.milestone.quest.transferable_object.reward=There is a link between this dimension and the real world. And this is just the beginning of a new adventure!
+
+feature.dream.loot_table.cloud_fishing=Cloud Fishing Loots
+feature.dream.loot_table.cloud_vault=Cloud Chest Loot
+feature.dream.loot_table.metal_detector=Metal Detector Loot
\ No newline at end of file
diff --git a/src/main/resources/translations/en_US/economy.properties b/src/main/resources/translations/en_US/economy.properties
new file mode 100644
index 000000000..74b61e86c
--- /dev/null
+++ b/src/main/resources/translations/en_US/economy.properties
@@ -0,0 +1,83 @@
+feature.economy.transactions.menu.title=Transactions menu %1$s
+feature.economy.transaction.outgoing.name=Outgoing transaction
+feature.economy.transaction.incoming.name=Incoming transaction
+feature.economy.transaction.outgoing.lore=Destination : %1$s\
+ Amount : %2$s\
+ Reason : %3$s
+feature.economy.transaction.incoming.lore=Sender: %1$s\
+ Amount : %2$s\
+ Reason : %3$s
+feature.economy.bank.menu.title=Banks Menu
+feature.economy.bank.menu.deposit.name=Drop offmoney
+feature.economy.bank.menu.deposit.lore=Your money will be placed in your bank\
+ CLICK HERE TO DEPOSIT
+feature.economy.bank.menu.need_city=To have a personal bank, you must belong to a minimum level 2 city!
+feature.economy.bank.menu.balance.name=Your money
+feature.economy.bank.menu.balance.lore=You currently have %1$s %2$s\
+ Your money limit in your bank is %3$s %4$s\
+ \
+ Your next interest is to %5$s In %6$s
+feature.economy.bank.menu.withdraw.name=Remove frommoney
+feature.economy.bank.menu.withdraw.lore=The money will be taken from your bank\
+ CLICK HERE TO WITHDRAW
+feature.economy.bank.deposit.menu.title=Banks Menu - Deposit
+feature.economy.bank.deposit.all.name=Drop off all your money
+feature.economy.bank.deposit.all.lore=All your money will be placed in your bank\
+ \
+ Amount that will be deposited: %1$s %2$s\
+ \
+ CLICK HERE TO DEPOSIT
+feature.economy.bank.deposit.half.name=Deposit half of your money
+feature.economy.bank.deposit.half.lore=Half of your money will be placed in your bank\
+ \
+ Amount that will be deposited: %1$s %2$s\
+ \
+ CLICK HERE TO DEPOSIT
+feature.economy.bank.deposit.input.name=Drop a specific amount
+feature.economy.bank.deposit.input.lore=Your money will be placed in your bank\
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.economy.bank.deposit.limit_reached=Your bank's limit is %1$s
+feature.economy.bank.deposit.partial=Only %1$s have been deposited (ceiling reached).
+feature.economy.bank.deposit.success=You filed %1$s.
+feature.economy.bank.deposit.input.prompt=Enter the amount you want to deposit
+feature.economy.bank.withdraw.input.prompt=Enter the amount you want to withdraw
+feature.economy.bank.withdraw.menu.title=Banks Menu - Withdraw
+feature.economy.bank.withdraw.all.name=Take themoney from your bank
+feature.economy.bank.withdraw.all.lore=All the money placed in your bank will be given to you\
+ \
+ Amount that will be given to you: %1$s %2$s\
+ \
+ CLICK HERE TO TAKE
+feature.economy.bank.withdraw.half.name=Take half of themoney from your bank
+feature.economy.bank.withdraw.half.lore=Half of the money will be taken from your bank to give it to you\
+ \
+ Amount that will be given to you: %1$s %2$s\
+ \
+ CLICK HERE TO TAKE
+feature.economy.bank.withdraw.input.name=Take a specific amount
+feature.economy.bank.withdraw.input.lore=The money requested will be taken from your bank to give it to you\
+ CLICK HERE TO INDICATE THE AMOUNT
+feature.economy.bank.back.lore=You will return to your bank menu\
+ CLICK HERE TO CONFIRM
+feature.economy.bank.withdraw.not_enough=You don't have enough money in the bank
+feature.economy.bank.withdraw.transferred=%1$s%2$s have been transferred to your account
+feature.economy.bank.interest.received=You have just noticed %1$s of interest, or %2$s%3$s
+feature.economy.bank.command.not_unlocked=You have not unlocked this feature! Please upgrade your city to the level %1$s !
+feature.economy.bank.command.balance=There is %1$s%2$s in your bank
+feature.economy.bank.interest.apply.start=Distribution of interests in progress...
+feature.economy.bank.interest.apply.success=Successful distribution of interests.
+feature.economy.money.self=You have %1$s
+feature.economy.money.others=%1$s has %2$s
+feature.economy.money.set.success=You have defined the money %1$s has %2$s
+feature.economy.money.set.target=Your money has been set to %1$s
+feature.economy.money.add.success=You added %1$s has %2$s
+feature.economy.money.add.target=You have received %1$s
+feature.economy.money.remove.success=You removed %1$s has %2$s
+feature.economy.money.remove.target=You lost %1$s
+feature.economy.money.remove.not_enough=The player does not have enough money
+feature.economy.money.reset.success=You have reset the money from %1$s has %2$s
+feature.economy.money.reset.target=Your money has been reset to %1$s
+feature.economy.pay.self=You can't pay yourself
+feature.economy.pay.success=You paid %1$s of %2$s
+feature.economy.pay.received=You have received %1$s of %2$s
+feature.economy.pay.not_enough=You don't have enough money
diff --git a/src/main/resources/translations/en_US/events.properties b/src/main/resources/translations/en_US/events.properties
new file mode 100644
index 000000000..8c183a70a
--- /dev/null
+++ b/src/main/resources/translations/en_US/events.properties
@@ -0,0 +1,53 @@
+feature.events.menu.main_event.title=Events
+feature.events.menu.main_event.title.calendar.lore=View the events calendar\
+ you will be able to see the events that are scheduled
+feature.events.menu.main_event.event.click_here=CLICK HERE TO LEARN MORE
+
+feature.events.calendar.unknown_name=Event
+feature.events.calendar.daily_event_name=Daily Event
+
+feature.events.calendar.unknown_phase=Unknown
+feature.events.calendar.title=Event Calendar
+feature.events.calendar.weekend_event_name=Weekend Event
+feature.events.calendar.start_in=Starts in %1$s
+feature.events.calendar.start_date=Start date: %1$s at %2$s
+feature.events.calendar.end_date=End date: %1$s at %2$s
+feature.events.calendar.phases=Phases:
+feature.events.calendar.phase.line=- %1$s THE %2$s has %3$s
+
+feature.events.contest.name=Contest
+feature.events.contest.description=2 camps clash during the weekend\
+ Vote for your side, and take part in the clash!\
+ The winning side will win exclusive rewards!
+feature.events.contest.command.settrade.updated=The trade of %1$s has been updated with %2$s For %3$s contest shells.
+feature.events.contest.command.settrade.not_found=The trade does not exist.\
+ /contest settrade <mat> <amount> <amount_shell>
+
+feature.events.halloween.menu.deposit.title=Place your pumpkins
+feature.events.halloween.menu.deposit.button.name=<#ff6b25>Place your pumpkins#ff6b25>
+feature.events.halloween.menu.deposit.button.lore=Click here to drop off your pumpkins and\
+ get rewards!
+feature.events.halloween.menu.deposit.no_pumpkin=You don't have to drop any pumpkins!
+feature.events.halloween.menu.deposit.success=You filed %1$s pumpkins!
+feature.events.halloween.reward.rank1.name=<#ff6b25>Victory Pie (2025)#ff6b25>
+feature.events.halloween.reward.rank1.lore=Reward for the player who collected the most pumpkins\
+ during the Halloween 2025 event.\
+ \
+ Obtained by %1$s
+feature.events.halloween.reward.rank2.name=<#ff6b25>The Pie of Excellence (2025)#ff6b25>
+feature.events.halloween.reward.rank2.lore=Reward for the player who collected the second most\
+ large quantity of pumpkins during the event\
+ Halloween 2025.\
+ \
+ Obtained by %1$s
+feature.events.halloween.reward.rank3.name=<#ff6b25>The Pie of Merit (2025)#ff6b25>
+feature.events.halloween.reward.rank3.lore=Reward for the player who collected the third most\
+ large quantity of pumpkins during the event\
+ Halloween 2025.\
+ \
+ Obtained by %1$s
+feature.events.halloween.unknown_player=Unknown
+feature.events.halloween.event.end.broadcast=<#ff6b25>The Halloween 2025 event is now over!#ff6b25>\
+ <#ff6b25>You can find your rewards in your#ff6b25><#ff6b25> mailbox#ff6b25><#ff6b25>.#ff6b25>\
+ <#ffd580>Thank you everyone for your participation!#ffd580>
+
diff --git a/src/main/resources/translations/en_US/friend.properties b/src/main/resources/translations/en_US/friend.properties
new file mode 100644
index 000000000..504386e5a
--- /dev/null
+++ b/src/main/resources/translations/en_US/friend.properties
@@ -0,0 +1,46 @@
+feature.friend.request.expired=The friend request has expired.
+feature.friend.add.self=You cannot add yourself as a friend.
+feature.friend.add.disabled=This player has disabled friend requests.
+feature.friend.add.already_sent=You have already sent a request to this player.
+feature.friend.add.already_friend=You are already friends with this player.
+feature.friend.add.sent=Friend request sent to %1$s.
+feature.friend.add.error=An error occurred while sending the friend request.
+feature.friend.request.ignored=You ignored friend request from %1$s.
+feature.friend.request.received=%1$s sent you a friend request.
+feature.friend.player_not_found=This player does not exist.
+feature.friend.remove.not_friend=You are not friends with this player.
+feature.friend.remove.error=An error occurred while deleting the friend.
+feature.friend.remove.success=You deleted %1$s from your friends list.
+feature.friend.remove.removed_by=You have been removed from the friends list of %1$s.
+feature.friend.list.none=You don't have any friends at the moment.
+feature.friend.list.page_invalid=The page %1$s does not exist. Total: %2$s pages
+feature.friend.list.hover=City : %1$s\
+ Money : %2$s\
+ Status : %3$s
+feature.friend.list.error=An error occurred while retrieving your friends.
+feature.friend.request.not_received=You have not received a friend request from this player.
+feature.friend.request.accepted=You are now friends with %1$s.
+feature.friend.request.accept_error=An error occurred while accepting the friend request.
+feature.friend.request.denied=You declined friend request from %1$s.
+feature.friend.request.denied_by=Your friend request has been rejected by %1$s.
+feature.friend.request.deny_error=An error occurred while declining the friend request.
+feature.friend.button.accept= [Accept]
+feature.friend.button.accept_hover=Click to accept friend request
+feature.friend.button.ignore= [Ignore]
+feature.friend.button.ignore_hover=Click to ignore friend request
+feature.friend.button.deny= [Refuse]
+feature.friend.button.deny_hover=Click to decline friend request
+feature.friend.list.header= ✦ Friends list (%1$s/%2$s) ✦
+feature.friend.list.city.none=None
+feature.friend.status.online=Online
+feature.friend.status.offline=Offline
+feature.friend.list.date_since=Since the %1$s
+feature.friend.list.action.remove= [✖]
+feature.friend.list.action.remove_hover=Remove this friend
+feature.friend.list.fetch_error=Error retrieving information from %1$s
+feature.friend.list.navigation.previous= « Previous page
+feature.friend.list.navigation.next=Next page »
+feature.friend.list.navigation.separator= |
+feature.friend.list.navigation.page=Page %1$s
+feature.friend.unknown_player=Unknown
+
diff --git a/src/main/resources/translations/en_US/homes.properties b/src/main/resources/translations/en_US/homes.properties
new file mode 100644
index 000000000..456b55968
--- /dev/null
+++ b/src/main/resources/translations/en_US/homes.properties
@@ -0,0 +1,97 @@
+feature.homes.location.invalid=Invalid rental
+feature.homes.location.format=%1$s (%2$s, %3$s, %4$s)
+feature.homes.home.name=%1$s
+feature.homes.home.lore=Position:\
+ W: %1$s\
+ X: %2$s\
+ Y: %3$s\
+ Z: %4$s
+feature.homes.menu.title=Homes Menu
+feature.homes.menu.item.lore=■ Click LEFT to teleport you\
+ ■ Click right to configure the home
+feature.homes.menu.teleport.success=You have been teleported to your home %1$s.
+feature.homes.menu.error=An error has occurred, please contact the staff
+feature.homes.menu.upgrade.name=●Improve homes(Click here)
+feature.homes.menu.upgrade.lore=Click to improve your homes
+feature.homes.upgrade.menu.title=Homes Menu - Improvement
+feature.homes.upgrade.item.name=●Improve homes(Left click)
+feature.homes.upgrade.lore.max=Current number of homes: %1$s\
+ You have reached the maximum number of homes
+feature.homes.upgrade.lore.available=Current number of homes: %1$s\
+ Price : %2$s %3$s\
+ Aywenite: %4$s\
+ Number of homes on the next level: %5$s\
+ → Left click to improve
+feature.homes.delete.menu.title=Homes Menu - Confirmation
+feature.homes.delete.confirm.name=Confirm deletion
+feature.homes.delete.confirm.lore=■ Click LEFT to confirm the deletion
+feature.homes.delete.success=Home %1$s successfully deleted!
+feature.homes.delete.cancel.name=Undo deletion
+feature.homes.command.player_not_found=This player does not exist.
+feature.homes.command.other_no_home=This player has no home.
+feature.homes.command.teleport.other.success=You have been teleported home %1$s of %2$s.
+feature.homes.command.other_no_home_with_name=This player does not have a home with this name.
+feature.homes.command.no_home=You don't have a home.
+feature.homes.command.teleport.self.success=You have been teleported to your home %1$s.
+feature.homes.command.no_home_with_name=You don't have a home with that name.
+feature.homes.command.disabled_world=You cannot define home in this world.
+feature.homes.command.invalid_name=The home name must be valid.
+feature.homes.command.other_already_has=This player already has a home with this name.
+feature.homes.command.set.other.success=The home %1$s was defined for %2$s.
+feature.homes.command.set.by_admin=An admin has defined a home for you %1$s.
+feature.homes.command.home_limit_reached=You have reached the limit of homes.
+feature.homes.command.already_has=You already have a home with this name.
+feature.homes.command.set.self.success=Your home %1$s has been defined.
+feature.homes.command.rename.other.success=The home %1$s was renamed to %2$s.
+feature.homes.command.rename.already_has=You already have a home with that name.
+feature.homes.command.rename.self.success=Your home %1$s was renamed to %2$s.
+feature.homes.command.self_no_home_with_name=You don't have a man with that name.
+feature.homes.command.delete.other.success=The home %1$s was deleted.
+feature.homes.command.delete.self.success=Your home %1$s was deleted.
+feature.homes.command.relocate.other.success=The home %1$s was moved.
+feature.homes.command.relocate.protected_region=You can't define a home here, you are in a protected region.
+feature.homes.command.relocate.self.success=Your home %1$s was moved.
+feature.homes.world.not_found=This world does not exist.
+feature.homes.world.already_disabled=The world %1$s is already in the list of worlds where homes are disabled.
+feature.homes.world.added=The world %1$s has been added to the list of worlds where men are disabled.
+feature.homes.world.remove.not_found=The world %1$s does not exist.
+feature.homes.world.removed=The world %1$s has been removed from the list of worlds where men are disabled.
+feature.homes.world.not_disabled=The world %1$s is not in the list of worlds where homes are disabled.
+feature.homes.world.list.empty=No worlds are in the list of worlds where homes are disabled.
+feature.homes.world.list.title=List of worlds where homes are disabled:
+feature.homes.world.list.item= - %1$s (%2$s)
+feature.homes.world.info=Added by %1$s THE %2$s
+feature.homes.upgrade.not_reached_limit=You have not reached the house limit to purchase this improvement.
+feature.homes.upgrade.not_enough_aywenite=You don't have enough Aywenite (%1$s necessary)
+feature.homes.upgrade.not_enough_money=You don't have enough money on you! (%1$s%2$s necessary)
+feature.homes.upgrade.success=You have improved your house limit to %1$s For %2$s$ and to %3$s of Aywenite
+feature.homes.upgrade.max=You have reached the maximum limit of homes.
+feature.homes.icon.name=%1$s
+feature.homes.icon.normal_lore=■ Click LEFT to change the icon
+feature.homes.icon.selected_lore=[✔] Current icon
+feature.homes.icon.changed=Your home icon %1$s was changed to %2$s !
+feature.homes.icon.menu.title=Homes Menu - Change icon
+feature.homes.icon.search.name=Research
+feature.homes.icon.search.current=Current search: %1$s
+feature.homes.icon.search.left=■ Click LEFT to search
+feature.homes.icon.search.right=■ Click right to reset
+feature.homes.icon.search.prompt=Enter your search for an item
+feature.homes.icon.category.name=Category
+feature.homes.icon.category.selection=Category selection
+feature.homes.icon.category.available=Categories available:
+feature.homes.icon.category.all=All
+feature.homes.icon.category.vanilla=Vanilla
+feature.homes.icon.category.custom=Customized
+feature.homes.icon.category.left=■ Click LEFT to go to the next category
+feature.homes.icon.category.right=■ Click right to go to the previous category
+feature.homes.icon.category.spam=Please don't spam the category change.
+feature.homes.config.title=Homes Menu - Configuration
+feature.homes.config.change_icon.name=Change icon
+feature.homes.config.change_icon.lore=■ Click LEFT to change your home icon
+feature.homes.config.rename.name=Change name
+feature.homes.config.rename.lore=■ Click LEFT to change the name of your home
+feature.homes.config.rename.prompt=Enter your new home name
+feature.homes.config.rename.success=Your home %1$s was renamed to %2$s.
+feature.homes.config.delete.name=Delete home
+feature.homes.config.delete.lore=■ Click LEFT to delete your home
+
diff --git a/src/main/resources/translations/en_US/itemsadder.properties b/src/main/resources/translations/en_US/itemsadder.properties
new file mode 100644
index 000000000..bb6a45f7d
--- /dev/null
+++ b/src/main/resources/translations/en_US/itemsadder.properties
@@ -0,0 +1,5 @@
+feature.itemsadder.spawner_extractor.fail=Extraction failed! The spawner broke.
+feature.itemsadder.spawner_extractor.display_name=Spawner at %1$s
+feature.itemsadder.spawner_extractor.success_extract=You have extracted a spawner at %1$s !
+feature.itemsadder.spawner_extractor.success_place=Spawner at %1$s place !
+
diff --git a/src/main/resources/translations/en_US/leaderboards.properties b/src/main/resources/translations/en_US/leaderboards.properties
new file mode 100644
index 000000000..a6e92040f
--- /dev/null
+++ b/src/main/resources/translations/en_US/leaderboards.properties
@@ -0,0 +1,28 @@
+feature.leaderboards.empty.contributors=No contributors found yet.
+feature.leaderboards.empty.players=No players found yet.
+feature.leaderboards.empty.cities=No cities found yet.
+
+feature.leaderboards.header.contributors=--- GitHub Contributor Leaderboard ---
+feature.leaderboards.header.money=--- Players Money Leaderboard ---
+feature.leaderboards.header.city_money=--- Cities Money Leaderboard ---
+feature.leaderboards.header.playtime=------- Game Time Leaderboard -------
+feature.leaderboards.header.pumpkin=--- Pumpkin Leaderboard ---
+
+feature.leaderboards.footer=-----------------------------------------
+
+feature.leaderboards.line.contributors=%1$s %2$s + %3$s - %4$s
+feature.leaderboards.line.money=%1$s %2$s - %3$s
+feature.leaderboards.line.city_money=%1$s %2$s - %3$s
+feature.leaderboards.line.playtime=%1$s %2$s - %3$s
+feature.leaderboards.line.pumpkin=%1$s %2$s - %3$s pumpkins
+
+feature.leaderboards.command.invalid=Please specify a valid leaderboard. (Ex: /leaderboard contributeurs)
+feature.leaderboards.command.position_updated=Leaderboard position %1$s update.
+feature.leaderboards.command.position_update_failed=Error updating leaderboard position %1$s : %2$s
+feature.leaderboards.command.invalid_list=Please specify a valid leaderboard: contributors, money, city-money, playtime, pumpkin-count
+feature.leaderboards.command.holograms_disabled=Holograms successfully disabled.
+feature.leaderboards.command.holograms_enabled=Holograms activated successfully.
+feature.leaderboards.command.holograms_updated=Holograms updated successfully.
+feature.leaderboards.command.scale_changed=Size of holograms changed to %1$s
+feature.leaderboards.command.scale_update_failed=Error updating hologram size: %1$s
+
diff --git a/src/main/resources/translations/en_US/mailboxes.properties b/src/main/resources/translations/en_US/mailboxes.properties
new file mode 100644
index 000000000..6a1f11c5f
--- /dev/null
+++ b/src/main/resources/translations/en_US/mailboxes.properties
@@ -0,0 +1,52 @@
+feature.mailboxes.player.unknown=Unknown
+
+feature.mailboxes.menu.title.home=Mailbox
+feature.mailboxes.menu.title.player=Mailbox
+feature.mailboxes.menu.title.pending=Mail awaiting cancellation
+feature.mailboxes.menu.title.players_list=List of players
+feature.mailboxes.menu.title.letter=Letter from %1$s
+feature.mailboxes.menu.title.sending=Send a letter to %1$s
+
+feature.mailboxes.menu.pending.item=On hold
+feature.mailboxes.menu.player.item=My mailbox
+feature.mailboxes.menu.send.item=Send
+
+feature.mailboxes.menu.button.cancel=Cancel
+feature.mailboxes.menu.button.accept=Accept
+feature.mailboxes.menu.button.send=Send
+feature.mailboxes.menu.button.refuse=Refuse
+feature.mailboxes.menu.button.home_arrow=⬅Home
+feature.mailboxes.menu.button.next_page_arrow=Next page ➡
+feature.mailboxes.menu.button.previous_page_arrow=⬅ Previous page
+
+feature.mailboxes.menu.refuse_warning=If you do this, the items will be deleted
+feature.mailboxes.menu.cancel.success=You have canceled the mailbox #%1$s
+feature.mailboxes.menu.cancel.confirm=Confirm mailbox cancellation #%1$s
+feature.mailboxes.menu.cancel.cancel=Undo mailbox cancellation #%1$s
+
+feature.mailboxes.message.letter_not_found=The letter with the id %1$s does not exist.
+feature.mailboxes.message.cancel_success_sender=%1$s canceled the letter. You have received %2$s%3$s
+feature.mailboxes.message.refuse_success=You refused the letter #%1$s.
+feature.mailboxes.message.items_received=You have received %1$s %2$s
+feature.mailboxes.message.cancel_letter=You canceled the letter #%1$s.
+feature.mailboxes.message.empty_letter=You cannot send an empty letter
+feature.mailboxes.message.player_not_found=The player %1$s does not exist or was never connected!
+feature.mailboxes.message.send_to_self=You can't send it to yourself!
+feature.mailboxes.message.cannot_send=You do not have the rights to send to %1$s !
+
+feature.mailboxes.message.send_error=An error appeared while sending items to %1$s
+feature.mailboxes.message.one_letter=a
+feature.mailboxes.message.new_letters.line1=You have received %1$s %2$s.
+feature.mailboxes.message.new_letters.click=Click here
+feature.mailboxes.message.new_letters.suffix=to open letters
+feature.mailboxes.message.new_letters.hover=Open my mailbox
+feature.mailboxes.message.letter_received.line1=You have received %1$s%2$s from %3$s
+feature.mailboxes.message.letter_received.click=Click here
+feature.mailboxes.message.letter_received.suffix=to open the letter
+feature.mailboxes.message.letter_received.hover=Open letter #%1$s
+feature.mailboxes.message.sent_word=sent
+feature.mailboxes.message.send_success=%1$s %2$s %3$s has %4$s
+
+feature.mailboxes.letter.contains=➤ Contains %1$s %2$s
+feature.mailboxes.title.new_letter=New letter!
+feature.mailboxes.title.new_letter.subtitle=%1$s sent you %2$s%3$s
diff --git a/src/main/resources/translations/en_US/main.properties b/src/main/resources/translations/en_US/main.properties
new file mode 100644
index 000000000..f9c01fea1
--- /dev/null
+++ b/src/main/resources/translations/en_US/main.properties
@@ -0,0 +1,37 @@
+# Language file for the plugin
+# Native language: French
+# Do not use color codes in this file if there is an agument
+# * KEY DE TEST
+test=TESTTTT
+
+# ** UTILS **
+utils.world.overworld=the Overworld
+utils.world.nether=the Nether
+utils.world.end=the End
+utils.world.dream=Dreams
+
+# ** MESSAGES **
+messages.global.cannot_do_this=You have no right to do this.
+messages.global.missing_arg=You must specify an argument.
+messages.global.player_not_found=The player was not found.
+messages.global.invalid_input=Please enter correct entry
+
+messages.global.player_missing_money=You don't have enough money.
+messages.global.cancel=Cancel
+messages.global.accept=Accept
+messages.menus.back=Back
+messages.menus.back_lore=Return to previous menu
+messages.menus.previous_page=Previous page
+messages.menus.previous_page_lore=Click to go to previous page
+messages.menus.next_page=Next page
+messages.menus.next_page_lore=Click to go to the next page
+messages.menus.close=Close
+messages.menus.none=None
+
+registries.menu.lootbox.name=Lootbox
+registries.menu.chance=Chance : %1$s
+registries.menu.sub_loots.click_here=CLICK HERE TO VIEW THE SUBLOTS
+
+feature.tickets.loot.won=You won:
+feature.tickets.loot.broadcast=✦ CONGRATULATIONS has %1$s who just won %2$s at the ball machine! ✦
+feature.tickets.loot.gg=CONGRATULATIONS !
\ No newline at end of file
diff --git a/src/main/resources/translations/en_US/mainmenu.properties b/src/main/resources/translations/en_US/mainmenu.properties
new file mode 100644
index 000000000..a236cc99a
--- /dev/null
+++ b/src/main/resources/translations/en_US/mainmenu.properties
@@ -0,0 +1,52 @@
+feature.mainmenu.item.city.lore=/city
+feature.mainmenu.item.city.name=City : %1$s
+feature.mainmenu.item.city.no_city=You are not part of a city.
+
+feature.mainmenu.item.advancements.name=Show progress
+
+feature.mainmenu.item.quests.name=Quests
+feature.mainmenu.item.quests.lore=/quest
+
+feature.mainmenu.item.milestones.name=Milestones
+feature.mainmenu.item.milestones.lore=Discover the features in progression routes!
+feature.mainmenu.item.milestones.command=/milestones
+
+feature.mainmenu.item.contest.ends_in=End in %1$s
+feature.mainmenu.item.contest.name=Competition
+feature.mainmenu.item.contest.command=/contest
+
+feature.mainmenu.item.shop.name=Shop
+feature.mainmenu.item.shop.command=/adminshop
+
+feature.mainmenu.item.home.name=Homes
+feature.mainmenu.item.home.command=/home
+
+feature.mainmenu.item.profile.name=Profile
+feature.mainmenu.item.profile.lore=In development
+
+feature.mainmenu.item.next_page=Next page
+feature.mainmenu.item.previous_page=Previous page
+
+feature.mainmenu.item.settings.name=Settings
+feature.mainmenu.item.settings.command=/settings
+
+feature.mainmenu.item.mailbox.name=Mailbox
+feature.mainmenu.item.mailbox.command=/mailbox home
+
+feature.mainmenu.item.shops_disabled=Shops (Disabled)
+feature.mainmenu.item.company_disabled=Businesses (Disabled)
+feature.mainmenu.item.leaderboard.name=Leaderboard
+feature.mainmenu.item.leaderboard.command=/leaderboard
+feature.mainmenu.item.bank.name=Bank
+feature.mainmenu.item.bank.command=/banque
+feature.mainmenu.item.coming_soon.name=Future
+feature.mainmenu.item.coming_soon.lore=This feature is under development.
+
+feature.mainmenu.message.dream_world=You cannot interact with the main menu from the dream world.
+feature.mainmenu.message.profile_dev=Player profiles are still in development :sad:.
+feature.mainmenu.message.advancements_hint=Press the ' key%1$s' to open the Advancements menu.
+feature.mainmenu.message.shops_disabled=Businesses and shops have been disabled :sad:.
+feature.mainmenu.message.leaderboard_dev=The leaderboard menu is still under development :sad:.\nYou can still use the /lb ou look at the holograms in the spawn.
+feature.mainmenu.message.coming_soon=This feature is under development and will be available soon!
+feature.mainmenu.advancements.loading=Loading...
+
diff --git a/src/main/resources/translations/en_US/milestones.properties b/src/main/resources/translations/en_US/milestones.properties
new file mode 100644
index 000000000..7af1e1df0
--- /dev/null
+++ b/src/main/resources/translations/en_US/milestones.properties
@@ -0,0 +1,96 @@
+feature.milestones.menu.title.main=Milestones menu - More info
+feature.milestones.menu.title.milestone=Milestones menu - %1$s
+feature.milestones.menu.page.previous=◀ Previous page
+feature.milestones.menu.page.next=Next page ▶
+feature.milestones.menu.close=Close
+feature.milestones.menu.back=Back
+feature.milestones.menu.coming_soon=sComing soone
+
+feature.milestones.menu.city.name=Cities Milestone
+feature.milestones.menu.city.lore.intro_1=Discover the full cities
+feature.milestones.menu.city.lore.intro_2=Via this road of progression !
+feature.milestones.menu.city.lore.details=Claims, Mascots, Mayors, Wars, ...
+feature.milestones.menu.city.lore.need_city=Create or join a city to access this!
+feature.milestones.menu.city.lore.level=Level of your city: %1$s
+feature.milestones.menu.city.lore.click=CLICK HERE TO ACCESS YOUR MILESTONE
+
+feature.milestones.tutorial.name=OpenMC Tutorial
+feature.milestones.tutorial.description.1=Discover OpenMC !
+feature.milestones.tutorial.description.2=Review the features
+feature.milestones.tutorial.description.3=Cities, contests, the adminshop, quests, ...
+feature.milestones.tutorial.description.4=Ideal for embarking on an adventure!
+
+feature.milestones.tutorial.hologram.icon=%1$s
+feature.milestones.tutorial.hologram.welcome=Welcome to OpenMC V2!
+feature.milestones.tutorial.hologram.based_on=This version is based on the cities
+feature.milestones.tutorial.hologram.how_to=To access the tutorial, use the command /milestones.
+feature.milestones.tutorial.hologram.server=It's your server!
+feature.milestones.tutorial.hologram.separator=
+feature.milestones.tutorial.hologram.links=Useful links: /socials
+
+feature.milestones.tutorial.quest.spare_bank.name=Deposit money in the bank
+feature.milestones.tutorial.quest.spare_bank.description=Type /bank or go to the main menu (/menu) to be able to open the menu\
+ A competitive way to win big rewards!
+feature.milestones.tutorial.quest.spare_bank.reward=Well done! You finished thestage %1$s ! THE banks can store an infinite amount of money and protect it if you die! Now let's personalize the gaming experience using settings!
+
+feature.milestones.tutorial.quest.sell_buy.name=Buy or sell a resource in the adminshop
+feature.milestones.tutorial.quest.sell_buy.description=Type /adminshop or go to the main menu /menu to be able to sell or buy a resource\
+ This is the beginning of wealth!
+feature.milestones.tutorial.quest.sell_buy.reward=Well done! You finished thestage %1$s ! L'adminshop offers various items so you can build, or make money! However, when you die you lose %2$s% of your money! It is therefore important to pay attention to your skin, or else deposit money in your bank!
+
+feature.milestones.tutorial.quest.open_settings.name=Open settings menu
+feature.milestones.tutorial.quest.open_settings.description=Type /settings or go to the main menu (/menu) to be able to open the menu\
+ This will allow you to configure your gaming experience!
+feature.milestones.tutorial.quest.open_settings.reward=Well done! You finished thestage %1$s ! THE settings customize your game, they can be useful in certain cases, such as blocking friend requests, ... On a separate subject, you can switch to competition mode thanks to the contests, a sort of weekly competition!
+
+feature.milestones.tutorial.quest.open_quest.name=Open the quest menu
+feature.milestones.tutorial.quest.open_quest.description=Type /quests or go to the main menu (/menu) to be able to open the menu and see what quests you can complete\
+ This will launch you into adventure and give you challenges in order to diversify!
+feature.milestones.tutorial.quest.open_quest.reward=Well done! You finished thestage %1$s ! THE quests will help you get money easily for the start of game ! You can attempt to accomplish the stain whatever you want!
+
+feature.milestones.tutorial.quest.open_contest.name=Open the contests menu
+feature.milestones.tutorial.quest.open_contest.description=Type /contest or go to the main menu (/menu) to be able to open the menu\
+ A competitive way to win big rewards!
+feature.milestones.tutorial.quest.open_contest.reward=Well done! You finished thestage %1$s ! THE contests pit 2 groups against each other on a theme, the winners win a big reward! And here the tutorial is now finished, go and collect your reward in the mailbox, a letter system for receiving or sending letters!
+
+feature.milestones.tutorial.quest.open_adminshop.name=Open the adminshop menu
+feature.milestones.tutorial.quest.open_adminshop.description=Type /adminshop or go to the main menu (/menu) to be able to open the menu\
+ The market which varies according to supply and demand!
+feature.milestones.tutorial.quest.open_adminshop.reward=Well done! You finished thestage %1$s ! L'adminshop will help you get money and blocks! You can now sell or buy a resource in the adminshop!
+
+feature.milestones.tutorial.quest.home_upgrade.name=Improve your house limit
+feature.milestones.tutorial.quest.home_upgrade.description=Type /upgradehome or go to the menu of the homes (/homes)\
+ to be able to improve your house limit\
+ This will allow you to have more homes!
+feature.milestones.tutorial.quest.home_upgrade.reward=Well done! You finished thestage %1$s ! THE homes will be very useful for moving quickly between your bases! Now I think you need challenges! Open the menu of quests.
+
+feature.milestones.tutorial.quest.home_create.name=Place a home
+feature.milestones.tutorial.quest.home_create.description=Type /sethome by being where you want to put your home\
+ It's very useful to make one to teleport to your base!
+feature.milestones.tutorial.quest.home_create.reward=Well done! You finished thestage %1$s ! Homes are often used to avoid losing your base! You are limited to only having 1 home at the start. We will have to think about improving them...
+
+feature.milestones.tutorial.quest.finish_quest.name=Complete a quest
+feature.milestones.tutorial.quest.finish_quest.description=Complete a quest of your choice\
+ This will be able to give you money or certain resources!
+feature.milestones.tutorial.quest.finish_quest.reward=Well done! You finished thestage %1$s ! And here is a reward ! Practical, right? Let's discover another method of producing money and consuming it! Go into theadminshop, a place where several items can be purchased at varying prices depending on thesupply and demand !
+
+feature.milestones.tutorial.quest.claim_letter.name=Open the rewards letter
+feature.milestones.tutorial.quest.claim_letter.description=Type /mailbox or go to the main menu (/menu) to be able to open the mailbox menu\
+ An efficient way to send items to other players!
+feature.milestones.tutorial.quest.claim_letter.reward=Well done! You finished thestage %1$s ! You have discovered the basics of OpenMC. And now, you're free to discover the features for yourself! With that, we wish you the best in your adventure on OpenMC !
+
+feature.milestones.tutorial.quest.city_create.name=Create/Rejoindre une city
+feature.milestones.tutorial.quest.city_create.description=Do /city to start creating your city\
+ or join a city using an invitation!
+feature.milestones.tutorial.quest.city_create.reward=Well done! You finished thestage %1$s ! This version of OpenMC is centered around cities. There you will find a special milestone for cities (/city milestone) who will guide you in this unique adventure! And if you passed your city to level 2 ?
+
+feature.milestones.tutorial.quest.city_level_two.name=Have a level 2 city
+feature.milestones.tutorial.quest.city_level_two.description=Do /city milestone to find out more how\
+ improve your city!
+feature.milestones.tutorial.quest.city_level_two.reward=Well done! You finished thestage %1$s ! You're well on your way to discovering all the features hidden in cities! But before that, I would like you to ask a home.
+
+feature.milestones.tutorial.quest.break_aywenite.name=Break 30 Aywenites
+feature.milestones.tutorial.quest.break_aywenite.description=The new ore of V2, found in caves\
+ It will be to you useful in many features
+feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite is an ore, valuable for features. Besides, you can use it to make your city!
+
diff --git a/src/main/resources/translations/en_US/privatemessage.properties b/src/main/resources/translations/en_US/privatemessage.properties
new file mode 100644
index 000000000..fb9483ca7
--- /dev/null
+++ b/src/main/resources/translations/en_US/privatemessage.properties
@@ -0,0 +1,17 @@
+feature.privatemessage.msg.cannot_message_yourself=You cannot send a private message to yourself.
+feature.privatemessage.msg.private_messages_disabled=You have disabled private messages.
+feature.privatemessage.msg.player_private_messages_disabled=The player %1$s Disabled private messages.
+feature.privatemessage.msg.format.sender=[You → %1$s] %2$s
+feature.privatemessage.msg.format.receiver=[%1$s →You] %2$s
+
+feature.privatemessage.socialspy.toggled_off=Social Spy disabled.
+feature.privatemessage.socialspy.toggled_on=Social Spy enabled.
+feature.privatemessage.socialspy.status_changed=Social Spy %1$s For %2$s.
+feature.privatemessage.socialspy.status.enabled=activated
+feature.privatemessage.socialspy.status.disabled=disabled
+feature.privatemessage.socialspy.format=[SPY] %1$s → %2$s: %3$s
+feature.privatemessage.socialspy.no_players=No player has social spy enabled.
+feature.privatemessage.socialspy.list_title=Players with Social Spy enabled:
+feature.privatemessage.socialspy.list_item=- %1$s
+feature.privatemessage.socialspy.list_total=Total: %1$s player(s)
+
diff --git a/src/main/resources/translations/en_US/quests.properties b/src/main/resources/translations/en_US/quests.properties
new file mode 100644
index 000000000..a98c5e661
--- /dev/null
+++ b/src/main/resources/translations/en_US/quests.properties
@@ -0,0 +1,72 @@
+feature.quests.menu.title=Quest menu
+feature.quests.menu.page.previous=Previous page
+feature.quests.menu.page.next=Next page
+feature.quests.menu.tier_display=[%1$s/%2$s]
+feature.quests.menu.quest_item.name=%1$s %2$s %3$s
+feature.quests.menu.pending_rewards.title=Pending Rewards:
+feature.quests.menu.pending_rewards.tier=Landing %1$s:
+feature.quests.menu.rewards.title=Rewards:
+feature.quests.menu.completed=Quest completed!
+feature.quests.menu.progress=Progress: %1$s/%2$s (%3$s%%)
+feature.quests.menu.current_objective=Current goal:
+feature.quests.menu.steps.title=Advancement:
+feature.quests.menu.next_tier.title=Next tier:
+
+feature.quests.actionbar.progress_label=Quest progress
+
+feature.quests.title.completed=Quest complete!
+feature.quests.title.tier_completed=Landing %1$s finished !
+
+feature.quests.message.money_reward=You have received %1$s
+feature.quests.message.inventory_full_reward=You don't have enough space in your inventory to receive the reward!
+feature.quests.message.completed=★ Quest complete! %1$s is now complete!
+feature.quests.message.tier_completed=★ Bearing %1$s of %2$s valid !
+feature.quests.message.rewards_claimed=You have collected all the rewards of the tier %1$s of the quest %2$s !
+feature.quests.message.inventory_full_claim=You don't have enough space in your inventory to collect all the rewards. Free up some space and try again.
+feature.quests.message.step_completed=✓ Step %1$s of %2$s validated!
+
+feature.quests.break_log.lore.line=%1$s : %2$s points
+
+feature.quests.break_diamond.name=Richou
+feature.quests.break_diamond.description=Break diamond {target} ore{s}
+feature.quests.break_log.name=Extreme lumberjack
+feature.quests.break_log.description=Break {target} logs
+feature.quests.break_stone.name=Stone Breaker
+feature.quests.break_stone.description=Miner {target} stone blocks
+feature.quests.break_wheat.name=Dedicated farmer
+feature.quests.break_wheat.description=Harvest {target} wheat
+feature.quests.chicken_thrower.name=Chicken thrower
+feature.quests.chicken_thrower.description=Throw {target} eggs
+feature.quests.consume_kebab.name=Yum yum
+feature.quests.consume_kebab.description=Eat {target} kebab{s}
+feature.quests.craft_cake.name=The pastry chef
+feature.quests.craft_cake.description=Craft {target} cakes
+feature.quests.craft_diamond_armor.name=Precious armor
+feature.quests.craft_diamond_armor.description=Craft Full Diamond Armor
+feature.quests.craft_diamond_armor.step.helmet=Diamond Helmet
+feature.quests.craft_diamond_armor.step.chestplate=Diamond breastplate
+feature.quests.craft_diamond_armor.step.leggings=Diamond pants
+feature.quests.craft_diamond_armor.step.boots=Diamond Boots
+feature.quests.craft_the_mixture.name=The Mixture
+feature.quests.craft_the_mixture.description=Make {target} The Mixture{s}
+feature.quests.enchant_first_item.name=Abracadabra
+feature.quests.enchant_first_item.description=Enchant an item for the first time
+feature.quests.fishing.name=Experienced fisherman
+feature.quests.fishing.description=Catch {target} fish
+feature.quests.kill_players.name=Hitman
+feature.quests.kill_players.description=Kill {target} players
+feature.quests.kill_super_creeper.name=The creeper boss
+feature.quests.kill_super_creeper.description=Kill {target} Super Charged Creepers
+feature.quests.kill_zombie.name=Zombie Apocalypse?
+feature.quests.kill_zombie.description=Kill {target} zombies
+feature.quests.mine_aywenite.name=Ohhh... is that precious?
+feature.quests.mine_aywenite.description=Miner {target} Aywenite{s}
+feature.quests.save_the_earth.name=Let's save the planet
+feature.quests.save_the_earth.description=Plant {target} trees and make them grow with bone meal
+feature.quests.smelt_iron.name=Hot in front!
+feature.quests.smelt_iron.description=Melt {target} iron ingots
+feature.quests.walk.name=The hiker
+feature.quests.walk.description=Walk {target} blocks
+feature.quests.win_contest.name=Choose your side
+feature.quests.win_contest.description=Win {target} contest
+
diff --git a/src/main/resources/translations/en_US/settings.properties b/src/main/resources/translations/en_US/settings.properties
new file mode 100644
index 000000000..6106bb8ab
--- /dev/null
+++ b/src/main/resources/translations/en_US/settings.properties
@@ -0,0 +1,55 @@
+feature.settings.menu.title=Settings menu
+feature.settings.reset.title=Reset settings
+feature.settings.reset.confirm_message=Are you sure you want to reset all settings?
+feature.settings.reset.warning=This action is irreversible.
+feature.settings.reset.cancel=Click to cancel
+feature.settings.reset.success=All settings have been reset.
+
+feature.settings.item.status_enabled=Enabled
+feature.settings.item.status_disabled=Disabled
+feature.settings.item.change=Click to change
+feature.settings.item.changed=%1$s %2$s
+feature.settings.item.updated=%1$s updated.
+
+feature.settings.error.set=Error : %1$s
+feature.settings.error.parse=Error during parsing: %1$s
+
+feature.settings.type.friend_requests.name=Friend Request Policy
+feature.settings.type.friend_requests.description=Who can send you friend requests:
+feature.settings.type.city_join_requests.name=City Join Request Policy
+feature.settings.type.city_join_requests.description=Who can ask you to join a city:
+feature.settings.type.mascot_play_sound.name=Receive sounds from mascots
+feature.settings.type.mascot_play_sound.description=Turn pet sounds on or off
+feature.settings.type.mailbox_receive.name=Mailbox reception policy
+feature.settings.type.mailbox_receive.description=Who can send you mailboxes:
+feature.settings.type.private_message.name=Receive private messages
+feature.settings.type.private_message.description=Who can send you private messages:
+feature.settings.type.notifications_sound.name=Message sounds
+feature.settings.type.notifications_sound.description=Turn private message sounds on or off
+feature.settings.type.teleport_title_fade.name=Title fade during teleports
+feature.settings.type.teleport_title_fade.description=Enable or disable title fading during teleports
+feature.settings.type.join_animation.name=Connection animation
+feature.settings.type.join_animation.description=Enable or disable login animation
+
+feature.settings.policy.global.everyone.name=Everyone
+feature.settings.policy.global.everyone.description=Visible to all players
+feature.settings.policy.global.friends.name=Friends only
+feature.settings.policy.global.friends.description=Visible only to my friends
+feature.settings.policy.global.city_members.name=Members of my city
+feature.settings.policy.global.city_members.description=Visible to members of my city
+feature.settings.policy.global.nobody.name=Person
+feature.settings.policy.global.nobody.description=Information hidden from everyone
+
+feature.settings.policy.friend.everyone.name=Everyone
+feature.settings.policy.friend.everyone.description=Accept friend requests from all players
+feature.settings.policy.friend.city_members_only.name=Members of my city
+feature.settings.policy.friend.city_members_only.description=Only accept requests from members in my city
+feature.settings.policy.friend.nobody.name=Person
+feature.settings.policy.friend.nobody.description=Decline all friend requests
+
+feature.settings.policy.city.everyone.name=Everyone
+feature.settings.policy.city.everyone.description=Accept requests from all players
+feature.settings.policy.city.friends.name=Friends only
+feature.settings.policy.city.friends.description=Only accept requests from my friends
+feature.settings.policy.city.nobody.name=Person
+feature.settings.policy.city.nobody.description=Refuse all requests
diff --git a/src/main/resources/translations/en_US/tickets.properties b/src/main/resources/translations/en_US/tickets.properties
new file mode 100644
index 000000000..bd46a1056
--- /dev/null
+++ b/src/main/resources/translations/en_US/tickets.properties
@@ -0,0 +1,33 @@
+feature.tickets.machine.title=Ball machine
+feature.tickets.machine.hologram_line1=Ball machine V1
+feature.tickets.machine.hologram_line2=Click to play!
+feature.tickets.machine.hologram_line3=Good luck !
+
+feature.tickets.menu.get_tickets.title=Collect my tickets
+feature.tickets.menu.get_tickets.lore1=Collect the tickets that
+feature.tickets.menu.get_tickets.lore2=you have collected thanks to your
+feature.tickets.menu.get_tickets.lore3=playing time on OpenMC V1.
+feature.tickets.menu.no_stats=You do not have statistics to recover tickets.
+feature.tickets.menu.already_claimed=You have already collected your tickets!
+feature.tickets.menu.no_tickets=You don't have any tickets to collect!
+feature.tickets.menu.claimed=You have received %1$stickets!
+
+feature.tickets.menu.open_ticket.title=Open a ticket
+feature.tickets.menu.open_ticket.lore1=Open a box with 1 ticket.
+feature.tickets.menu.open_ticket.lore2=You currently have %1$stickets.
+feature.tickets.menu.not_enough_tickets=You don't have enough tickets!
+feature.tickets.loot.limit_reached=You have already reached the limit of this item:
+feature.tickets.loot.machine_ball.seinyy.name=Seinyy plush
+feature.tickets.loot.machine_ball.seinyy.lore=A little plush like Seinyy!
+feature.tickets.loot.machine_ball.diamond.name=Diamonds
+feature.tickets.loot.machine_ball.diamond.lore=Ohhhh but how precious is this thing!?
+feature.tickets.loot.machine_ball.iron.name=Iron Ingots
+feature.tickets.loot.machine_ball.iron.lore=Just iron, nothing crazy...
+feature.tickets.loot.machine_ball.netherite.name=Netherite Ingot
+feature.tickets.loot.machine_ball.netherite.lore=The rarest thing in the game!
+feature.tickets.loot.machine_ball.oak_log.name=Oak Logs
+feature.tickets.loot.machine_ball.oak_log.lore=Enough to make you a little house hehe
+feature.tickets.loot.machine_ball.steak.name=Steaks
+feature.tickets.loot.machine_ball.steak.lore=Yum yum, good meat!
+feature.tickets.loot.machine_ball.coal.name=Coal
+feature.tickets.loot.machine_ball.coal.lore=Something to make a fire
diff --git a/src/main/resources/translations/en_US/tpa.properties b/src/main/resources/translations/en_US/tpa.properties
new file mode 100644
index 000000000..88810f6a1
--- /dev/null
+++ b/src/main/resources/translations/en_US/tpa.properties
@@ -0,0 +1,36 @@
+feature.tpa.already_pending=You already have a pending teleport request
+feature.tpa.already_pending_usage=Type /tpacancelto cancel your current TP request
+feature.tpa.player_not_found=The player does not exist or is not online
+feature.tpa.cannot_tp_yourself=You cannot send a teleport request to yourself
+feature.tpa.already_have_pending=You already have a teleport request awaiting your acceptance
+
+feature.tpa.request.target_message=The player %1$s wants to teleport to you
+feature.tpa.request.target_accept=Type /tpacceptto accept
+feature.tpa.request.target_deny=And /tpadenyto refuse
+feature.tpa.request.sender_message=You sent a teleport request to %1$s
+feature.tpa.request.sender_cancel=Type /tpacancelto cancel your tp request
+feature.tpa.request.hover.accept=Accept the TP request
+feature.tpa.request.hover.deny=Refuse the TP request
+feature.tpa.request.hover.cancel=Cancel the TP request
+
+feature.tpa.accept.no_pending=You have no current teleport requests
+feature.tpa.accept.multiple_requests=You have several teleport requests in progress, use /tpaccept
+feature.tpa.accept.no_request_from=You do not have a teleport request from %1$s
+feature.tpa.accept.falling=The player is falling, teleportation impossible
+feature.tpa.accept.you_falling=You are falling, teleportation impossible
+feature.tpa.accept.player_not_online=The player is not online or does not exist
+feature.tpa.accept.success=Teleport successful
+
+feature.tpa.deny.no_pending=You have no current teleport requests
+feature.tpa.deny.multiple_requests=You have several teleport requests in progress, use /tpadeny
+feature.tpa.deny.no_request_from=You do not have a teleport request from %1$s
+feature.tpa.deny.success=You refused the teleport request from %1$s
+feature.tpa.deny.denied=%1$s refused your teleport request
+
+feature.tpa.cancel.no_pending=You have no current teleport requests
+feature.tpa.cancel.player_not_online=The player is not online or does not exist
+feature.tpa.cancel.success=You canceled your teleport request to %1$s
+feature.tpa.cancel.cancelled=%1$s canceled his teleport request
+
+feature.tpa.expire.sender=Your teleport request to %1$s expired
+feature.tpa.expire.target=The request for teleportation %1$s expired
diff --git a/src/main/resources/translations/en_US/updates.properties b/src/main/resources/translations/en_US/updates.properties
new file mode 100644
index 000000000..dbcbeaf46
--- /dev/null
+++ b/src/main/resources/translations/en_US/updates.properties
@@ -0,0 +1,6 @@
+feature.updates.message.broadcast_version= \
+ \
+ You are currently playing on the version %1$s of the plugin OpenMC. \
+ \
+
+
diff --git a/src/main/resources/translations/en_US/utils.properties b/src/main/resources/translations/en_US/utils.properties
new file mode 100644
index 000000000..a48eee6bc
--- /dev/null
+++ b/src/main/resources/translations/en_US/utils.properties
@@ -0,0 +1,3 @@
+core.utils.fade_title.teleporting=Teleport...
+core.utils.aywenite.not_enough=You don't have enough%1$s (%2$s necessary)
+core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s of%2$s. Aywenite is available in your mailbox
From 615742517ed4f25cb6057ccdb107fc8090fdbc5c Mon Sep 17 00:00:00 2001
From: iambibi_ <89582596+iambibi@users.noreply.github.com>
Date: Thu, 9 Jul 2026 18:04:43 +0200
Subject: [PATCH 02/10] fix: transalationLore with fallback
---
.../contents/contest/menu/VoteMenu.java | 2 +-
.../text/messages/TranslationManager.java | 33 ++++++++++++++-----
2 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/VoteMenu.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/VoteMenu.java
index f3d381093..380ddb6dc 100644
--- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/VoteMenu.java
+++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/VoteMenu.java
@@ -262,7 +262,7 @@ public void onInventoryClick(InventoryClickEvent event) {
inventory.put(35, new ItemMenuBuilder(this, Material.EMERALD, itemMeta -> {
itemMeta.displayName(TranslationManager.translation("feature.events.contest.vote.info.name"));
itemMeta.lore(loreInfo);
- }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(player).open()));
+ }).setOnClick(_ -> new MoreInfoMenu(player).open()));
return inventory;
}
diff --git a/src/main/java/fr/openmc/core/utils/text/messages/TranslationManager.java b/src/main/java/fr/openmc/core/utils/text/messages/TranslationManager.java
index 4c92818ab..ddb0ba5d5 100644
--- a/src/main/java/fr/openmc/core/utils/text/messages/TranslationManager.java
+++ b/src/main/java/fr/openmc/core/utils/text/messages/TranslationManager.java
@@ -128,19 +128,23 @@ public static String translationString(String key, ComponentLike... args) {
* @return Une liste de composants, un par ligne (italique désactivé)
*/
public static List translationLore(String key, ComponentLike... componentsArgs) {
- String fallback = fallbackTranslations.getOrDefault(key, key);
-
+ String fallback = getFallbackTranslation(key);
ComponentLike[] normalizedArgs = ComponentUtils.normalizeComponent(componentsArgs);
- TranslatableComponent translatable = Component.translatable(key, normalizedArgs).fallback(fallback);
-
- String legacy = LegacyComponentSerializer.legacySection().serialize(translatable);
+ String[] lines = fallback.split("\n");
- String[] lines = legacy.split("\n");
+ if (lines.length == 1) {
+ TranslatableComponent translatable = Component.translatable(key, normalizedArgs).fallback(fallback);
+ return List.of(translatable.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE));
+ }
List lore = new ArrayList<>();
- for (String line : lines) {
- lore.add(LegacyComponentSerializer.legacySection().deserialize(line).decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE));
+ for (int i = 0; i < lines.length; i++) {
+ lore.add(Component.translatable(
+ getLoreLineKey(key, i),
+ lines[i],
+ normalizedArgs
+ ).decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE));
}
return lore;
@@ -188,6 +192,15 @@ private static void injectLangs(Path resourcePackFolder, Map tra
for (Map.Entry entry : translations.entrySet()) {
root.addProperty(entry.getKey(), entry.getValue());
+
+ String[] lines = entry.getValue().split("\n");
+ if (lines.length == 1) {
+ continue;
+ }
+
+ for (int i = 0; i < lines.length; i++) {
+ root.addProperty(getLoreLineKey(entry.getKey(), i), lines[i]);
+ }
}
Files.writeString(
@@ -195,4 +208,8 @@ private static void injectLangs(Path resourcePackFolder, Map tra
GSON.toJson(root)
);
}
+
+ private static String getLoreLineKey(String key, int line) {
+ return key + "." + line;
+ }
}
From 415b8e36f6ced6efad1cce65b2180c3f3330b4dc Mon Sep 17 00:00:00 2001
From: iambibi_ <89582596+iambibi@users.noreply.github.com>
Date: Thu, 9 Jul 2026 19:15:02 +0200
Subject: [PATCH 03/10] remove translationString
---
.../sub/war/menu/main/WarPlayerListMenu.java | 15 +++---
.../selection/WarChooseParticipantsMenu.java | 13 +++--
.../core/features/displays/TabList.java | 31 ++++++------
.../dream/milestone/DreamMilestone.java | 4 +-
.../contest/managers/ContestManager.java | 2 +-
.../friend/commands/FriendCommand.java | 38 ++++++++-------
.../core/features/homes/utils/HomeUtil.java | 47 -------------------
.../features/mailboxes/MailboxManager.java | 24 +++++-----
.../mailboxes/letter/SenderLetter.java | 13 +++--
.../mailboxes/utils/MailboxUtils.java | 4 +-
.../mainmenu/listeners/MainMenuListener.java | 3 +-
.../milestones/menus/MainMilestonesMenu.java | 10 ++--
.../milestones/menus/MilestoneMenu.java | 2 +-
.../features/milestones/models/Milestone.java | 2 +-
.../core/utils/cache/PlayerNameCache.java | 2 +-
.../fr/openmc/core/utils/text/InputUtils.java | 9 ++--
.../translations/default/mailboxes.properties | 1 +
.../translations/default/main.properties | 1 +
.../translations/en_GB/mailboxes.properties | 1 +
.../translations/en_GB/main.properties | 1 +
.../translations/en_US/mailboxes.properties | 1 +
.../translations/en_US/main.properties | 1 +
22 files changed, 99 insertions(+), 126 deletions(-)
diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java
index 680a76837..61abe2ee0 100644
--- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java
+++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java
@@ -70,19 +70,22 @@ else if (MayorManager.cityMayor.get(city.getUniqueId()).getMayorUUID().equals(uu
for (UUID memberUUID : sortedMembers) {
OfflinePlayer playerOffline = CacheOfflinePlayer.getOfflinePlayer(memberUUID);
+ if (playerOffline == null) continue;
+ String playerName = playerOffline.getName() != null ? playerOffline.getName() : "null";
boolean hasPermissionOwner = city.hasPermission(memberUUID, CityPermission.OWNER);
- String title;
+ Component title;
if (hasPermissionOwner) {
- title = TranslationManager.translationString("feature.city.war.menu.players.role.owner");
+ title = TranslationManager.translation("feature.city.war.menu.players.role.owner");
} else if (MayorManager.cityMayor.get(city.getUniqueId()).getMayorUUID().equals(memberUUID)) {
- title = TranslationManager.translationString("feature.city.war.menu.players.role.mayor");
+ title = TranslationManager.translation("feature.city.war.menu.players.role.mayor");
} else {
- title = TranslationManager.translationString("feature.city.war.menu.players.role.member");
+ title = TranslationManager.translation("feature.city.war.menu.players.role.member");
}
- String finalTitle = title;
- items.add(new ItemMenuBuilder(this, SkullUtils.getPlayerSkull(memberUUID), itemMeta -> itemMeta.displayName(Component.text(finalTitle + playerOffline.getName()).decoration(TextDecoration.ITALIC, false))));
+
+ items.add(new ItemMenuBuilder(this, SkullUtils.getPlayerSkull(memberUUID), itemMeta -> itemMeta.displayName(title
+ .append(Component.text(playerName).decoration(TextDecoration.ITALIC, false)))));
}
return items;
diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java
index 94bfa54db..14d079351 100644
--- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java
+++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java
@@ -82,23 +82,26 @@ else if (MayorManager.cityMayor.get(cityLaunch.getUniqueId()) != null && (MayorM
for (UUID memberUUID : sortedMembers) {
OfflinePlayer offline = CacheOfflinePlayer.getOfflinePlayer(memberUUID);
+ if (offline == null) continue;
+ String playerName = offline.getName() != null ? offline.getName() : "null";
+
boolean isSelected = selected.contains(memberUUID);
boolean isOwner = cityLaunch.hasPermission(memberUUID, CityPermission.OWNER);
boolean isMayor = MayorManager.phaseMayor == 2
&& cityLaunch.getMayor() != null
&& cityLaunch.getMayor().getMayorUUID().equals(memberUUID);
- String prefix = isOwner
- ? TranslationManager.translationString("feature.city.war.menu.players.role.owner")
+ Component prefix = isOwner
+ ? TranslationManager.translation("feature.city.war.menu.players.role.owner")
: isMayor
- ? TranslationManager.translationString("feature.city.war.menu.players.role.mayor")
- : TranslationManager.translationString("feature.city.war.menu.players.role.member");
+ ? TranslationManager.translation("feature.city.war.menu.players.role.mayor")
+ : TranslationManager.translation("feature.city.war.menu.players.role.member");
ItemMenuBuilder item = new ItemMenuBuilder(this, SkullUtils.getPlayerSkull(memberUUID), meta -> {
Component prefixComponent = isSelected
? TranslationManager.translation("feature.city.war.menu.participants.selected_prefix")
: Component.empty();
- meta.displayName(prefixComponent.append(Component.text(prefix + offline.getName()))
+ meta.displayName(prefixComponent.append(prefix.append(Component.text(playerName)))
.decoration(TextDecoration.ITALIC, false));
meta.lore(List.of(TranslationManager.translation(
isSelected ? "feature.city.war.menu.participants.click_remove" : "feature.city.war.menu.participants.click_select"
diff --git a/src/main/java/fr/openmc/core/features/displays/TabList.java b/src/main/java/fr/openmc/core/features/displays/TabList.java
index 057fbb475..05764e3d2 100644
--- a/src/main/java/fr/openmc/core/features/displays/TabList.java
+++ b/src/main/java/fr/openmc/core/features/displays/TabList.java
@@ -7,7 +7,6 @@
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
-import com.comphenix.protocol.wrappers.WrappedChatComponent;
import dev.lone.itemsadder.api.FontImages.FontImageWrapper;
import fr.openmc.core.OMCPlugin;
import fr.openmc.core.bootstrap.features.Feature;
@@ -17,9 +16,13 @@
import fr.openmc.core.hooks.ProtocolLibHook;
import fr.openmc.core.hooks.itemsadder.ItemsAdderHook;
import fr.openmc.core.utils.text.messages.TranslationManager;
+import io.papermc.paper.adventure.PaperAdventure;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
+import net.minecraft.network.protocol.game.ClientboundTabListPacket;
+import net.minecraft.server.level.ServerPlayer;
import org.bukkit.Bukkit;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Player;
import java.util.EnumSet;
@@ -72,16 +75,10 @@ public void onPacketSending(PacketEvent event) {
});
}
- public static void updateHeaderFooter(Player player, String header, String footer) {
- try {
- if (protocolManager == null) return;
- PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.PLAYER_LIST_HEADER_FOOTER);
- packet.getChatComponents().write(0, WrappedChatComponent.fromText(header))
- .write(1, WrappedChatComponent.fromText(footer));
- protocolManager.sendServerPacket(player, packet);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ public static void updateHeaderFooter(Player player, Component header, Component footer) {
+ ServerPlayer nmsPlayer = ((CraftPlayer) player).getHandle();
+ nmsPlayer.connection.send(new ClientboundTabListPacket(
+ PaperAdventure.asVanilla(header), PaperAdventure.asVanilla(footer)));
}
public static void updateTabList(Player player) {
@@ -100,20 +97,20 @@ public static void updateTabList(Player player) {
logo = "OPEN MC";
}
- String header = !isInDream
- ? TranslationManager.translationString(
+ Component header = !isInDream
+ ? TranslationManager.translation(
"feature.displays.tablist.header.default",
Component.text(logo),
Component.text(visibleOnlinePlayers).color(NamedTextColor.GOLD),
Component.text(Bukkit.getMaxPlayers()).color(NamedTextColor.YELLOW)
)
- : TranslationManager.translationString(
+ : TranslationManager.translation(
"feature.displays.tablist.header.dream",
Component.text(logo)
);
- String footer = isInDream
- ? TranslationManager.translationString("feature.displays.tablist.footer.dream")
- : TranslationManager.translationString("feature.displays.tablist.footer.default");
+ Component footer = isInDream
+ ? TranslationManager.translation("feature.displays.tablist.footer.dream")
+ : TranslationManager.translation("feature.displays.tablist.footer.default");
updateHeaderFooter(player, header, footer);
}
diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java
index cc53eccb2..04c0f4a4e 100644
--- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java
+++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java
@@ -30,8 +30,8 @@ public HashMap getPlayerData() {
}
@Override
- public String getName() {
- return TranslationManager.translationString("feature.dream.milestone.name");
+ public Component getName() {
+ return TranslationManager.translation("feature.dream.milestone.name");
}
@Override
diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java
index 8ff1758a6..b4fd92172 100644
--- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java
+++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java
@@ -412,7 +412,7 @@ public static void initPhase3() {
.appendNewline()
.append(TranslationManager.translation("feature.events.contest.mail.click"))
.clickEvent(ClickEvent.runCommand("mailbox"))
- .hoverEvent(getHoverEvent(TranslationManager.translationString("feature.events.contest.mail.hover")))
+ .hoverEvent(getHoverEvent(TranslationManager.translation("feature.events.contest.mail.hover")))
.append(TranslationManager.translation("feature.events.contest.mail.open_mailbox"));
player.sendMessage(messageMail);
diff --git a/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java b/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java
index 2dd088f35..6be28551f 100644
--- a/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java
+++ b/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java
@@ -128,6 +128,8 @@ public void removeCommand(
) {
try {
OfflinePlayer target = Bukkit.getOfflinePlayer(targetName);
+ String playerName = target.getName() != null ? target.getName() : "null";
+
if (!target.hasPlayedBefore()) {
MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.player_not_found"), Prefix.OPENMC, MessageType.ERROR, true);
return;
@@ -140,14 +142,14 @@ public void removeCommand(
MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.remove.error"), Prefix.FRIEND, MessageType.ERROR, true);
return;
}
- String targetDisplayName = target.getName() != null
- ? target.getName()
- : TranslationManager.translationString("feature.friend.unknown_player");
+ Component targetDisplayName = target.getName() != null
+ ? Component.text(playerName)
+ : TranslationManager.translation("feature.friend.unknown_player");
MessagesManager.sendMessage(
player,
TranslationManager.translation(
"feature.friend.remove.success",
- Component.text(targetDisplayName).color(NamedTextColor.YELLOW)
+ targetDisplayName.color(NamedTextColor.YELLOW)
),
Prefix.FRIEND,
MessageType.INFO,
@@ -218,9 +220,10 @@ public void listCommand(
for (int i = startIndex; i < endIndex; i++) {
UUID friendUUID = friendsList.get(i);
OfflinePlayer friend = CacheOfflinePlayer.getOfflinePlayer(friendUUID);
- String friendName = friend.getName() != null
- ? friend.getName()
- : TranslationManager.translationString("feature.friend.unknown_player");
+ String friendName = friend.getName() != null ? friend.getName() : "null";
+ Component friendNameComponent = friend.getName() != null
+ ? Component.text(friendName)
+ : TranslationManager.translation("feature.friend.unknown_player");
try {
Timestamp timestamp = FriendManager.getTimestamp(player.getUniqueId(), friend.getUniqueId());
@@ -230,7 +233,8 @@ public void listCommand(
City city = CityManager.getPlayerCity(friend.getUniqueId());
String formattedMoney = EconomyManager.getFormattedBalance(friend.getUniqueId());
- Component cityComponent = Component.text(city != null ? city.getName() : TranslationManager.translationString("feature.friend.list.city.none")).color(NamedTextColor.YELLOW);
+ Component cityComponent = city != null ? Component.text(city.getName()).color(NamedTextColor.YELLOW) :
+ TranslationManager.translation("feature.friend.list.city.none").color(NamedTextColor.YELLOW);
Component moneyComponent = Component.text(formattedMoney).color(NamedTextColor.YELLOW);
Component statusComponent = isOnline
? TranslationManager.translation("feature.friend.status.online").color(NamedTextColor.GREEN)
@@ -238,7 +242,7 @@ public void listCommand(
TextComponent friendComponent = Component.text(" " + (i+1) + ". ")
.color(NamedTextColor.GRAY)
- .append(Component.text(friendName)
+ .append(friendNameComponent
.color(isOnline ? NamedTextColor.GREEN : NamedTextColor.YELLOW)
.decoration(TextDecoration.BOLD, isOnline))
.hoverEvent(HoverEvent.showText(
@@ -342,14 +346,14 @@ public void acceptCommand(
return;
}
FriendManager.addFriend(player.getUniqueId(), target.getUniqueId());
- String targetDisplayName = target.getName() != null
- ? target.getName()
- : TranslationManager.translationString("feature.friend.unknown_player");
+ Component targetDisplayName = target.getName() != null
+ ? Component.text(targetName)
+ : TranslationManager.translation("feature.friend.unknown_player");
MessagesManager.sendMessage(
player,
TranslationManager.translation(
"feature.friend.request.accepted",
- Component.text(targetDisplayName).color(NamedTextColor.YELLOW)
+ targetDisplayName.color(NamedTextColor.YELLOW)
),
Prefix.FRIEND,
MessageType.INFO,
@@ -390,14 +394,14 @@ public void denyCommand(
return;
}
FriendManager.removeRequest(FriendManager.getRequest(target.getUniqueId()));
- String targetDisplayName = target.getName() != null
- ? target.getName()
- : TranslationManager.translationString("feature.friend.unknown_player");
+ Component targetDisplayName = target.getName() != null
+ ? Component.text(target.getName())
+ : TranslationManager.translation("feature.friend.unknown_player");
MessagesManager.sendMessage(
player,
TranslationManager.translation(
"feature.friend.request.denied",
- Component.text(targetDisplayName).color(NamedTextColor.YELLOW)
+ targetDisplayName.color(NamedTextColor.YELLOW)
),
Prefix.FRIEND,
MessageType.INFO,
diff --git a/src/main/java/fr/openmc/core/features/homes/utils/HomeUtil.java b/src/main/java/fr/openmc/core/features/homes/utils/HomeUtil.java
index d15512e91..8f64aaaa0 100644
--- a/src/main/java/fr/openmc/core/features/homes/utils/HomeUtil.java
+++ b/src/main/java/fr/openmc/core/features/homes/utils/HomeUtil.java
@@ -76,51 +76,4 @@ public static boolean isValidHomeName(String name) {
return name.matches("^[a-zA-Z0-9_-]+$");
}
-
- public static String sanitizeHomeName(String name) {
- if (name == null) {
- return "home";
- }
-
- String sanitized = name.replaceAll("[^a-zA-Z0-9_-]", "_");
-
- if (sanitized.length() > 32) sanitized = sanitized.substring(0, 32);
- if (sanitized.trim().isEmpty()) sanitized = "home";
-
- return sanitized;
- }
-
- public static String formatLocation(org.bukkit.Location location) {
- if (location == null || location.getWorld() == null) {
- return TranslationManager.translationString("feature.homes.location.invalid");
- }
-
- return TranslationManager.translationString(
- "feature.homes.location.format",
- Component.text(location.getWorld().getName()).color(NamedTextColor.YELLOW),
- Component.text(location.getBlockX()).color(NamedTextColor.GOLD),
- Component.text(location.getBlockY()).color(NamedTextColor.GOLD),
- Component.text(location.getBlockZ()).color(NamedTextColor.GOLD)
- );
- }
-
- public static boolean isSafeLocation(org.bukkit.Location location) {
- if (location == null || location.getWorld() == null) {
- return false;
- }
-
- Block headBlock = location.getWorld().getBlockAt(
- location.getBlockX(),
- location.getBlockY() + 1,
- location.getBlockZ()
- );
-
- Block feetBlock = location.getWorld().getBlockAt(
- location.getBlockX(),
- location.getBlockY(),
- location.getBlockZ()
- );
-
- return feetBlock.getType().isAir() && headBlock.getType().isAir();
- }
}
diff --git a/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java b/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java
index 2ea40f10b..bc09e63ab 100644
--- a/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java
+++ b/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java
@@ -153,18 +153,18 @@ public static void sendMailNotification(Player player) {
if (count == 0) return;
- String countLabel = count > 1
- ? Long.toString(count)
- : TranslationManager.translationString("feature.mailboxes.message.one_letter");
+ Component countLabel = count > 1
+ ? Component.text(count)
+ : TranslationManager.translation("feature.mailboxes.message.one_letter");
Component line1 = TranslationManager.translation(
"feature.mailboxes.message.new_letters.line1",
- Component.text(countLabel).color(NamedTextColor.GREEN),
- Component.text(pluralize("lettre", count)).color(NamedTextColor.DARK_GREEN)
+ countLabel.color(NamedTextColor.GREEN),
+ pluralize(TranslationManager.translation("feature.mailboxes.letter"), count).color(NamedTextColor.DARK_GREEN)
).color(NamedTextColor.DARK_GREEN);
Component clickComponent = TranslationManager.translation("feature.mailboxes.message.new_letters.click")
.color(NamedTextColor.YELLOW)
.clickEvent(ClickEvent.runCommand("/mailbox"))
- .hoverEvent(getHoverEvent(TranslationManager.translationString("feature.mailboxes.message.new_letters.hover")));
+ .hoverEvent(getHoverEvent(TranslationManager.translation("feature.mailboxes.message.new_letters.hover")));
Component line2 = clickComponent
.append(Component.space())
.append(TranslationManager.translation("feature.mailboxes.message.new_letters.suffix")
@@ -219,13 +219,14 @@ private static void sendLetterReceivedNotification(Player receiver, int numItems
Component line1 = TranslationManager.translation(
"feature.mailboxes.message.letter_received.line1",
Component.text(numItems).color(NamedTextColor.GREEN),
- Component.text(pluralize(" item", numItems)).color(NamedTextColor.DARK_GREEN),
+ pluralize(Component.space()
+ .append(TranslationManager.translation("global.item")), numItems).color(NamedTextColor.DARK_GREEN),
Component.text(name).color(NamedTextColor.GREEN)
).color(NamedTextColor.DARK_GREEN);
Component clickComponent = TranslationManager.translation("feature.mailboxes.message.letter_received.click")
.color(NamedTextColor.YELLOW)
.clickEvent(ClickEvent.runCommand("/mailbox open " + id))
- .hoverEvent(getHoverEvent(TranslationManager.translationString(
+ .hoverEvent(getHoverEvent(TranslationManager.translation(
"feature.mailboxes.message.letter_received.hover",
Component.text(id)
)));
@@ -253,7 +254,8 @@ private static void sendLetterReceivedNotification(Player receiver, int numItems
"feature.mailboxes.title.new_letter.subtitle",
Component.text(name).color(NamedTextColor.GOLD),
Component.text(numItems).color(NamedTextColor.GOLD),
- Component.text(pluralize(" item", numItems)).color(NamedTextColor.YELLOW)
+ pluralize(Component.space()
+ .append(TranslationManager.translation("global.item")), numItems).color(NamedTextColor.YELLOW)
).color(NamedTextColor.YELLOW);
Component title = TranslationManager.translation("feature.mailboxes.title.new_letter")
.color(NamedTextColor.GREEN);
@@ -264,8 +266,8 @@ private static void sendSuccessSendingMessage(Player player, String receiverName
Component message = TranslationManager.translation(
"feature.mailboxes.message.send_success",
Component.text(numItems).color(NamedTextColor.GREEN),
- Component.text(pluralize("item", numItems)).color(NamedTextColor.DARK_GREEN),
- Component.text(pluralize(TranslationManager.translationString("feature.mailboxes.message.sent_word"), numItems)).color(NamedTextColor.DARK_GREEN),
+ pluralize(TranslationManager.translation("global.item"), numItems).color(NamedTextColor.DARK_GREEN),
+ pluralize(TranslationManager.translation("feature.mailboxes.message.sent_word"), numItems).color(NamedTextColor.DARK_GREEN),
Component.text(receiverName).color(NamedTextColor.GREEN)
).color(NamedTextColor.DARK_GREEN);
diff --git a/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java b/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java
index 5ac10e750..fcca11d0a 100644
--- a/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java
+++ b/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java
@@ -4,6 +4,7 @@
import lombok.Getter;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;
@@ -12,7 +13,8 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
-import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.*;
+import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.getPlayerName;
+import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.nonItalic;
import static fr.openmc.core.utils.text.DateUtils.formatRelativeDate;
import static fr.openmc.core.utils.text.InputUtils.pluralize;
@@ -25,14 +27,15 @@ public SenderLetter(OfflinePlayer player, int itemsCount, LocalDateTime sentAt,
skullMeta.setOwningPlayer(player);
skullMeta.displayName(getStatus(refused));
ArrayList lore = new ArrayList<>();
- lore.add(colorText(TranslationManager.translationString("feature.mailboxes.letter.cancel_hint"), NamedTextColor.YELLOW, true));
+ lore.add(TranslationManager.translation("feature.mailboxes.letter.cancel_hint")
+ .color(NamedTextColor.YELLOW).decoration(TextDecoration.ITALIC, false));
lore.add(getPlayerName(player));
- lore.add(colorText(TranslationManager.translationString(
+ lore.add(TranslationManager.translation(
"feature.mailboxes.letter.sent_info",
formatRelativeDate(sentAt),
Component.text(itemsCount),
- Component.text(pluralize("item", itemsCount))
- ), NamedTextColor.DARK_GRAY, true));
+ pluralize(TranslationManager.translation("global.item"), itemsCount)
+ ).color(NamedTextColor.DARK_GRAY).decoration(TextDecoration.ITALIC, false));
skullMeta.lore(lore);
this.setItemMeta(skullMeta);
}
diff --git a/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java b/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java
index b88b8dba3..91d53b7b0 100644
--- a/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java
+++ b/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java
@@ -41,8 +41,8 @@ public static Component nonItalic(Component name) {
return name.decoration(TextDecoration.ITALIC, false);
}
- public static @NotNull HoverEvent getHoverEvent(String message) {
- return HoverEvent.showText(Component.text(message, NamedTextColor.GRAY));
+ public static @NotNull HoverEvent getHoverEvent(Component message) {
+ return HoverEvent.showText(message.color(NamedTextColor.GRAY));
}
public static ItemStack getHead(OfflinePlayer player) {
diff --git a/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java b/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java
index 4816b95f5..4dfbe0678 100644
--- a/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java
+++ b/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java
@@ -7,6 +7,7 @@
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
+import io.papermc.paper.adventure.PaperAdventure;
import lombok.Getter;
import net.minecraft.advancements.*;
import net.minecraft.network.chat.Component;
@@ -52,7 +53,7 @@ private static ClientboundUpdateAdvancementsPacket createEmptyAdvancementPacket(
// Rien de très important ici, on crée justes les instances nécessaires pour le packet avec le minimum requis.
DisplayInfo displayInfo = new DisplayInfo(
ItemStackTemplate.fromNonEmptyStack(ItemStack.fromBukkitCopy(getInvisibleItem())),
- Component.literal(TranslationManager.translationString("feature.mainmenu.advancements.loading")),
+ PaperAdventure.asVanilla(TranslationManager.translation("feature.mainmenu.advancements.loading")),
Component.empty(),
Optional.empty(),
AdvancementType.GOAL,
diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java b/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java
index d0701905a..00b6bcadb 100644
--- a/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java
+++ b/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java
@@ -56,13 +56,13 @@ public void onInventoryClick(InventoryClickEvent click) {
Map inventory = new HashMap<>();
Player player = getOwner();
- Milestone tutoMilestone = MilestoneType.TUTORIAL.getMilestone();
+ Milestone> tutoMilestone = MilestoneType.TUTORIAL.getMilestone();
inventory.put(10, new ItemMenuBuilder(this, tutoMilestone.getIcon(), itemMeta -> {
- itemMeta.displayName(Component.text(tutoMilestone.getName()).decoration(TextDecoration.ITALIC, false));
+ itemMeta.displayName(tutoMilestone.getName().decoration(TextDecoration.ITALIC, false));
itemMeta.lore(tutoMilestone.getDescription());
itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(tutoMilestone.getType(), player) + 1 >= tutoMilestone.getSteps().size());
- }).setOnClick(inventoryClickEvent -> tutoMilestone.getMenu(player).open()));
+ }).setOnClick(_ -> tutoMilestone.getMenu(player).open()));
List loreMilestoneVille = new ArrayList<>();
@@ -97,10 +97,10 @@ public void onInventoryClick(InventoryClickEvent click) {
}
}));
- Milestone dreamMilestone = MilestoneType.DREAM.getMilestone();
+ Milestone> dreamMilestone = MilestoneType.DREAM.getMilestone();
inventory.put(14, new ItemMenuBuilder(this, dreamMilestone.getIcon(), itemMeta -> {
- itemMeta.displayName(Component.text(dreamMilestone.getName()).decoration(TextDecoration.ITALIC, false));
+ itemMeta.displayName(dreamMilestone.getName().decoration(TextDecoration.ITALIC, false));
itemMeta.lore(dreamMilestone.getDescription());
itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(dreamMilestone.getType(), player) + 1 >= dreamMilestone.getSteps().size());
}).setOnClick(inventoryClickEvent -> dreamMilestone.getMenu(player).open()));
diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java
index 8b73af586..e59454ffa 100644
--- a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java
+++ b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java
@@ -54,7 +54,7 @@ public MilestoneMenu(Player owner, Milestone milestone) {
public @NotNull Component getName() {
return TranslationManager.translation(
"feature.milestones.menu.title.milestone",
- Component.text(milestone.getName())
+ milestone.getName()
);
}
diff --git a/src/main/java/fr/openmc/core/features/milestones/models/Milestone.java b/src/main/java/fr/openmc/core/features/milestones/models/Milestone.java
index 76c22021f..2574ace02 100644
--- a/src/main/java/fr/openmc/core/features/milestones/models/Milestone.java
+++ b/src/main/java/fr/openmc/core/features/milestones/models/Milestone.java
@@ -27,7 +27,7 @@ public interface Milestone & MilestoneStep> {
*
* @return The name of the milestone.
*/
- String getName();
+ Component getName();
/**
* Returns the description of the milestone.
diff --git a/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java b/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java
index 4d36ca128..154bf1fbd 100644
--- a/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java
+++ b/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java
@@ -17,7 +17,7 @@ public static Component name(UUID uuid) {
public static String getName(UUID uuid) {
return nameCache.computeIfAbsent(uuid, id -> {
OfflinePlayer player = CacheOfflinePlayer.getOfflinePlayer((UUID) id);
- return player.getName() != null ? player.getName() : "Inconnu";
+ return player.getName() != null ? player.getName() : "null";
});
}
diff --git a/src/main/java/fr/openmc/core/utils/text/InputUtils.java b/src/main/java/fr/openmc/core/utils/text/InputUtils.java
index 976d56984..09ecc072e 100644
--- a/src/main/java/fr/openmc/core/utils/text/InputUtils.java
+++ b/src/main/java/fr/openmc/core/utils/text/InputUtils.java
@@ -2,6 +2,7 @@
import fr.openmc.core.features.city.City;
import fr.openmc.core.features.city.CityManager;
+import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
public class InputUtils {
@@ -107,11 +108,11 @@ public static boolean isInputPlayer(String input) {
return Bukkit.getPlayer(input) != null;
}
- public static String pluralize(String word, int count) {
- return word + (count > 1 ? "s" : "");
+ public static Component pluralize(Component word, int count) {
+ return word.append(Component.text((count > 1 ? "s" : "")));
}
- public static String pluralize(String word, long count) {
- return word + (count > 1 ? "s" : "");
+ public static Component pluralize(Component word, long count) {
+ return word.append(Component.text((count > 1 ? "s" : "")));
}
}
diff --git a/src/main/resources/translations/default/mailboxes.properties b/src/main/resources/translations/default/mailboxes.properties
index 689ff665a..7846c6902 100644
--- a/src/main/resources/translations/default/mailboxes.properties
+++ b/src/main/resources/translations/default/mailboxes.properties
@@ -1,4 +1,5 @@
feature.mailboxes.player.unknown=Inconnu
+feature.mailboxes.letter=lettre
feature.mailboxes.menu.title.home=Boite aux lettres
feature.mailboxes.menu.title.player=Boite aux lettres
diff --git a/src/main/resources/translations/default/main.properties b/src/main/resources/translations/default/main.properties
index a6835c357..7d4b6eb70 100644
--- a/src/main/resources/translations/default/main.properties
+++ b/src/main/resources/translations/default/main.properties
@@ -3,6 +3,7 @@
# Do not use color codes in this file if there is an agument
# * KEY DE TEST
test=TESTTTT
+global.item=item
# ** UTILS **
utils.world.overworld=l'Overworld
diff --git a/src/main/resources/translations/en_GB/mailboxes.properties b/src/main/resources/translations/en_GB/mailboxes.properties
index 6a1f11c5f..667ad5b06 100644
--- a/src/main/resources/translations/en_GB/mailboxes.properties
+++ b/src/main/resources/translations/en_GB/mailboxes.properties
@@ -1,4 +1,5 @@
feature.mailboxes.player.unknown=Unknown
+feature.mailboxes.letter=letter
feature.mailboxes.menu.title.home=Mailbox
feature.mailboxes.menu.title.player=Mailbox
diff --git a/src/main/resources/translations/en_GB/main.properties b/src/main/resources/translations/en_GB/main.properties
index f9c01fea1..6b07e6c53 100644
--- a/src/main/resources/translations/en_GB/main.properties
+++ b/src/main/resources/translations/en_GB/main.properties
@@ -3,6 +3,7 @@
# Do not use color codes in this file if there is an agument
# * KEY DE TEST
test=TESTTTT
+global.item=item
# ** UTILS **
utils.world.overworld=the Overworld
diff --git a/src/main/resources/translations/en_US/mailboxes.properties b/src/main/resources/translations/en_US/mailboxes.properties
index 6a1f11c5f..c29635f50 100644
--- a/src/main/resources/translations/en_US/mailboxes.properties
+++ b/src/main/resources/translations/en_US/mailboxes.properties
@@ -1,4 +1,5 @@
feature.mailboxes.player.unknown=Unknown
+feature.mailboxes.letter=lettre
feature.mailboxes.menu.title.home=Mailbox
feature.mailboxes.menu.title.player=Mailbox
diff --git a/src/main/resources/translations/en_US/main.properties b/src/main/resources/translations/en_US/main.properties
index f9c01fea1..6b07e6c53 100644
--- a/src/main/resources/translations/en_US/main.properties
+++ b/src/main/resources/translations/en_US/main.properties
@@ -3,6 +3,7 @@
# Do not use color codes in this file if there is an agument
# * KEY DE TEST
test=TESTTTT
+global.item=item
# ** UTILS **
utils.world.overworld=the Overworld
From f33329fdb9f034b8f8a6a856f82e877ad74ea9f6 Mon Sep 17 00:00:00 2001
From: iambibi_ <89582596+iambibi@users.noreply.github.com>
Date: Fri, 10 Jul 2026 11:33:08 +0200
Subject: [PATCH 04/10] remove translationString (part 2), add .to_small
---
.../sub/mayor/menu/create/MayorColorMenu.java | 6 +--
.../displays/scoreboards/BaseScoreboard.java | 9 ++--
.../scoreboards/sb/CityWarScoreboard.java | 43 ++++++++++-------
.../scoreboards/sb/MainScoreboard.java | 47 ++++++++++---------
.../scoreboards/sb/RestartScoreboard.java | 10 ++--
.../dream/displays/DreamScoreboard.java | 21 +++++----
.../features/dream/registries/DreamBiome.java | 9 +++-
.../features/mailboxes/letter/LetterHead.java | 3 +-
.../mailboxes/menu/PendingMailbox.java | 2 +-
.../mailboxes/menu/letter/LetterMenu.java | 2 +-
.../core/features/mainmenu/menus/Page1.java | 10 +++-
.../core/features/mainmenu/menus/Page2.java | 17 +++++--
.../tutorial/TutorialMilestone.java | 4 +-
.../command/SocialSpyCommand.java | 16 +++++--
.../fr/openmc/core/utils/text/ColorUtils.java | 5 +-
.../utils/text/messages/MessagesManager.java | 4 +-
.../text/messages/TranslationManager.java | 22 +++++++--
.../translations/default/displays.properties | 24 ++++++++++
.../translations/default/dream.properties | 11 ++++-
.../translations/default/mainmenu.properties | 6 +--
.../translations/en_GB/displays.properties | 24 ++++++++++
.../translations/en_GB/dream.properties | 11 ++++-
.../translations/en_GB/mainmenu.properties | 6 +--
.../translations/en_US/displays.properties | 24 ++++++++++
.../translations/en_US/dream.properties | 11 ++++-
.../translations/en_US/mainmenu.properties | 6 +--
26 files changed, 253 insertions(+), 100 deletions(-)
diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java
index 5be3e674b..1aa0a8579 100644
--- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java
+++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java
@@ -94,12 +94,12 @@ public void onClose(InventoryCloseEvent event) {
colorSlot.forEach((color, slot) -> {
List loreColor = TranslationManager.translationLore(
"feature.city.mayor.menu.color.option.lore",
- Component.text(ColorUtils.getNameFromColor(color)).color(color)
+ ColorUtils.getNameFromColor(color).color(color)
);
inventory.put(slot, new ItemMenuBuilder(this, ColorUtils.getMaterialFromColor(color), itemMeta -> {
itemMeta.displayName(TranslationManager.translation(
"feature.city.mayor.menu.color.option.name",
- Component.text(ColorUtils.getNameFromColor(color)).color(color)
+ ColorUtils.getNameFromColor(color).color(color)
));
itemMeta.lore(loreColor);
}).setOnClick(inventoryClickEvent -> {
@@ -232,4 +232,4 @@ public void onClose(InventoryCloseEvent event) {
public List getTakableSlot() {
return List.of();
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java
index 57369cf70..fa5fe15cb 100644
--- a/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java
+++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java
@@ -7,10 +7,9 @@
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.entity.Player;
-import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmall;
-
public abstract class BaseScoreboard {
protected static final boolean canShowLogo = ItemsAdderHook.isEnable();
@@ -74,7 +73,7 @@ public Component getTitle() {
* @return Un {@link Component} pour le footer
*/
public static Component getFooter() {
- String footerText = textToSmall(TranslationManager.translationString("feature.displays.scoreboard.footer.text"));
- return MiniMessage.miniMessage().deserialize(" %s".formatted(footerText));
+ Component footerText = TranslationManager.translation("feature.displays.scoreboard.footer.text.to_small");
+ return MiniMessage.miniMessage().deserialize(" ", Placeholder.component("name", footerText));
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/CityWarScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/CityWarScoreboard.java
index 4ed86dfed..d6165518a 100644
--- a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/CityWarScoreboard.java
+++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/CityWarScoreboard.java
@@ -16,6 +16,7 @@
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
@@ -26,8 +27,8 @@
import java.util.ArrayList;
import java.util.List;
-import static fr.openmc.core.utils.text.messages.MessagesManager.keyToSmall;
import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmall;
+import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmallComponent;
import static net.kyori.adventure.text.Component.empty;
import static net.kyori.adventure.text.Component.text;
@@ -49,26 +50,32 @@ public void update(Player player, SternalBoard board) {
List lines = new ArrayList<>(MainScoreboard.getDefaultLines(player));
lines.add(MiniMessage.miniMessage()
- .deserialize("%s".formatted(keyToSmall("feature.displays.scoreboard.citywar.title")))
+ .deserialize(
+ "",
+ Placeholder.component("title", TranslationManager.translation("feature.displays.scoreboard.citywar.title.to_small"))
+ )
.decoration(TextDecoration.BOLD, true));
lines.add(text(" • ", net.kyori.adventure.text.format.NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.enemy.label"), TextColor.color(0xAAAAAA)))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.enemy.label.to_small").color(TextColor.color(0xAAAAAA)))
.appendSpace()
- .append(text(textToSmall(enemyCity.getName()), TextColor.color(0xFF0634)))
+ .append(textToSmallComponent(enemyCity.getName()).color(TextColor.color(0xFF0634)))
);
Component phaseComponent;
switch (war.getPhase()) {
case PREPARATION -> phaseComponent = MiniMessage.miniMessage()
.deserialize("%s".formatted(textToSmall(WarManager.getFormattedPhase(war.getPhase()))));
- case COMBAT -> phaseComponent = text(textToSmall(WarManager.getFormattedPhase(war.getPhase())), TextColor.color(0xFC1C1C));
- case ENDED -> phaseComponent = text(textToSmall(WarManager.getFormattedPhase(war.getPhase())), NamedTextColor.GRAY);
- default -> phaseComponent = text(textToSmall(WarManager.getFormattedPhase(war.getPhase())), NamedTextColor.WHITE);
+ case COMBAT -> phaseComponent = textToSmallComponent(WarManager.getFormattedPhase(war.getPhase()))
+ .color(TextColor.color(0xFC1C1C));
+ case ENDED -> phaseComponent = textToSmallComponent(WarManager.getFormattedPhase(war.getPhase()))
+ .color(NamedTextColor.GRAY);
+ default -> phaseComponent = textToSmallComponent((WarManager.getFormattedPhase(war.getPhase())))
+ .color(NamedTextColor.WHITE);
}
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.phase.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.phase.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(phaseComponent)
);
@@ -88,7 +95,7 @@ public void update(Player player, SternalBoard board) {
int rounded = (int) Math.round(distance);
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.distance.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.distance.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(text(direction, TextColor.color(0xFFE206)))
.appendSpace()
@@ -98,7 +105,7 @@ public void update(Player player, SternalBoard board) {
switch (war.getPhase()) {
case PREPARATION -> lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.starts_in.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.starts_in.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(text(DateUtils.convertSecondToTime(war.getPreparationTimeRemaining()), TextColor.color(0xF52727)))
);
@@ -106,29 +113,29 @@ public void update(Player player, SternalBoard board) {
case COMBAT -> {
if (mascot != null)
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.mascot.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.mascot.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(getColoredHealth(mascot))
);
if (enemyMascot != null)
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.enemy.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.enemy.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(getColoredHealth(enemyMascot))
);
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.ends_in.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.ends_in.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(text(DateUtils.convertSecondToTime(war.getCombatTimeRemaining()), TextColor.color(0xF52727)))
);
}
case ENDED -> lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.state.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.state.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(text(keyToSmall("feature.displays.scoreboard.citywar.state.ended"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.citywar.state.ended.to_small").color(NamedTextColor.GRAY))
);
}
@@ -157,10 +164,10 @@ protected int updateInterval() {
private Component getColoredHealth(LivingEntity entity) {
if (entity.isDead())
- return text(textToSmall(TranslationManager.translationString(
- "feature.displays.scoreboard.citywar.mascot.dead",
+ return TranslationManager.translation(
+ "feature.displays.scoreboard.citywar.mascot.dead.to_small",
Component.text(FontImageWrapper.replaceFontImages(":dead1:"))
- )), TextColor.color(0xFF3246));
+ ).color(TextColor.color(0xFF3246));
double health = entity.getHealth();
double maxHealth = entity.getAttribute(Attribute.MAX_HEALTH).getValue();
diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java
index 0057d6d57..59f409367 100644
--- a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java
+++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java
@@ -24,14 +24,15 @@
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.entity.Player;
import java.time.DayOfWeek;
import java.util.ArrayList;
import java.util.List;
-import static fr.openmc.core.utils.text.messages.MessagesManager.keyToSmall;
import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmall;
+import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmallComponent;
import static net.kyori.adventure.text.Component.*;
public class MainScoreboard extends BaseScoreboard {
@@ -48,16 +49,18 @@ public void update(Player player, SternalBoard board) {
if (WeeklyEventsManager.getCurrentEvent() instanceof Contest) {
ContestData data = ContestManager.data;
if (WeeklyEventsManager.getCurrentPhase() != ContestPhase.VOTE_CAMP.getPhase()) {
- lines.add(MiniMessage.miniMessage().deserialize("%s".formatted(
- keyToSmall("feature.displays.scoreboard.contest.title"))).decoration(TextDecoration.BOLD, true));
+ lines.add(MiniMessage.miniMessage().deserialize(
+ "",
+ Placeholder.component("title", TranslationManager.translation("feature.displays.scoreboard.contest.title.to_small"))
+ ).decoration(TextDecoration.BOLD, true));
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(textToSmall(data.getCamp1()), data.getColor1AsNamedTextColor()))
+ .append(textToSmallComponent(data.getCamp1()).color(data.getColor1AsNamedTextColor()))
.appendSpace()
- .append(text(keyToSmall("feature.displays.scoreboard.contest.vs"), NamedTextColor.GRAY))
- .append(text(textToSmall(data.getCamp2()), data.getColor2AsNamedTextColor()))
+ .append(TranslationManager.translation("feature.displays.scoreboard.contest.vs.to_small").color(NamedTextColor.GRAY))
+ .append(textToSmallComponent(data.getCamp2()).color(data.getColor2AsNamedTextColor()))
);
lines.add(Component.text(" • ", NamedTextColor.DARK_GRAY)
- .append(Component.text(keyToSmall("feature.displays.scoreboard.contest.ends"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.contest.ends.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(text(DateUtils.getTimeUntilNextDay(DayOfWeek.MONDAY), TextColor.color(0xFF8F06)))
);
@@ -73,16 +76,16 @@ public void update(Player player, SternalBoard board) {
public static List getDefaultLines(Player player) {
Component rank = LuckPermsHook.isEnable()
? Component.text(LuckPermsHook.getFormattedPAPIPrefix(player))
- : Component.text(keyToSmall("feature.displays.scoreboard.rank.none")).color(TextColor.color(0xFF1FCC));
+ : TranslationManager.translation("feature.displays.scoreboard.rank.none.to_small").color(TextColor.color(0xFF1FCC));
City city = CityManager.getPlayerCity(player.getUniqueId());
City chunkCity = CityManager.getCityFromChunk(player.getChunk().getX(), player.getChunk().getZ());
boolean isInRegion = WorldGuardHook.isRegionConflict(player.getLocation());
- String location = isInRegion
- ? TranslationManager.translationString("feature.displays.scoreboard.location.protected")
- : TranslationManager.translationString("feature.displays.scoreboard.location.wilderness");
- location = (chunkCity != null) ? chunkCity.getName() : location;
+ Component location = isInRegion
+ ? TranslationManager.translation("feature.displays.scoreboard.location.protected.to_small")
+ : TranslationManager.translation("feature.displays.scoreboard.location.wilderness.to_small");
+ location = (chunkCity != null) ? textToSmallComponent(chunkCity.getName()) : location;
String balance = EconomyManager.getMiniBalance(player.getUniqueId());
@@ -91,26 +94,28 @@ public static List getDefaultLines(Player player) {
lines.add(empty());
lines.add(MiniMessage.miniMessage().deserialize("%s".formatted(textToSmall(player.getName()))).decoration(TextDecoration.BOLD, true));
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.rank.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.rank.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(rank)
);
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.city.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.city.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(text(textToSmall(city != null ? city.getName() : TranslationManager.translationString("feature.displays.scoreboard.city.none"))).color(TextColor.color(0xFF06DC)))
+ .append(city != null
+ ? textToSmallComponent(city.getName()).color(TextColor.color(0xFF06DC))
+ : TranslationManager.translation("feature.displays.scoreboard.city.none.to_small").color(TextColor.color(0xFF06DC)))
);
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.balance.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.balance.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(text(textToSmall(balance)).color(TextColor.color(0xFF06DC)))
+ .append(textToSmallComponent(balance).color(TextColor.color(0xFF06DC)))
.appendSpace()
.append(text(EconomyManager.getEconomyIcon()))
);
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.location.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.location.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(text(textToSmall(location)).color(TextColor.color(0xFF06DC)))
+ .append(location.color(TextColor.color(0xFF06DC)))
);
if (FancyNpcsHook.isEnable()) {
@@ -121,9 +126,9 @@ public static List getDefaultLines(Player player) {
if (halloweenNPC != null) {
String pumpkinCount = EconomyManager.getFormattedSimplifiedNumber(HalloweenManager.getPumpkinCount(player.getUniqueId()));
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(keyToSmall("feature.displays.scoreboard.pumpkins.label"), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.displays.scoreboard.pumpkins.label.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(text(textToSmall(pumpkinCount)).color(TextColor.color(0xFF7518)))
+ .append(textToSmallComponent(pumpkinCount).color(TextColor.color(0xFF7518)))
);
}
}
diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/RestartScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/RestartScoreboard.java
index 519a2bf2a..11783c3e9 100644
--- a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/RestartScoreboard.java
+++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/RestartScoreboard.java
@@ -12,7 +12,6 @@
import java.util.ArrayList;
import java.util.List;
-import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmall;
import static net.kyori.adventure.text.Component.empty;
import static net.kyori.adventure.text.Component.text;
@@ -27,11 +26,10 @@ public void update(Player player, SternalBoard board) {
List lines = new ArrayList<>();
lines.add(empty());
- lines.add(text(
- "%s %s".formatted(textToSmall(
- TranslationManager.translationString("feature.displays.scoreboard.restart.in")),
- DateUtils.convertSecondToTime(Restart.remainingTime)
- ), NamedTextColor.RED));
+ lines.add(TranslationManager.translation("feature.displays.scoreboard.restart.in.to_small")
+ .appendSpace()
+ .append(text(DateUtils.convertSecondToTime(Restart.remainingTime)))
+ .color(NamedTextColor.RED));
lines.add(empty());
lines.add(getFooter());
diff --git a/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java b/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java
index 72cba6d77..4e7bdeda0 100644
--- a/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java
+++ b/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java
@@ -15,6 +15,7 @@
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.entity.Player;
@@ -22,6 +23,7 @@
import java.util.List;
import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmall;
+import static fr.openmc.core.utils.text.messages.MessagesManager.textToSmallComponent;
import static net.kyori.adventure.text.Component.empty;
import static net.kyori.adventure.text.Component.text;
@@ -55,14 +57,14 @@ public void update(Player player, SternalBoard board) {
int cold = dreamPlayer.getCold();
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(textToSmall(TranslationManager.translationString("feature.dream.scoreboard.time")), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.dream.scoreboard.time.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(text(textToSmall(DateUtils.convertSecondToTime(time))).color(TextColor.color(0x00CC34)))
+ .append(textToSmallComponent(DateUtils.convertSecondToTime(time)).color(TextColor.color(0x00CC34)))
);
if (cold > 0)
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(textToSmall(TranslationManager.translationString("feature.dream.scoreboard.cold")), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.dream.scoreboard.cold.to_small").color(NamedTextColor.GRAY))
.appendSpace()
.append(text(dreamPlayer.getCold()).color(TextColor.color(0x44EBDA)))
);
@@ -72,9 +74,9 @@ public void update(Player player, SternalBoard board) {
if (dreamBiome != null) {
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(textToSmall(TranslationManager.translationString("feature.dream.scoreboard.biome")), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.dream.scoreboard.biome.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(Component.text(textToSmall(dreamBiome.getName())))
+ .append(dreamBiome.getSmallName())
);
}
@@ -82,14 +84,17 @@ public void update(Player player, SternalBoard board) {
if (dreamStructure != null) {
String nameLocation = PlainTextComponentSerializer.plainText().serialize(dreamStructure.getName());
lines.add(text(" • ", NamedTextColor.DARK_GRAY)
- .append(text(textToSmall(TranslationManager.translationString("feature.dream.scoreboard.location")), NamedTextColor.GRAY))
+ .append(TranslationManager.translation("feature.dream.scoreboard.location.to_small").color(NamedTextColor.GRAY))
.appendSpace()
- .append(Component.text(textToSmall(nameLocation)))
+ .append(textToSmallComponent(nameLocation))
);
}
lines.add(empty());
- lines.add(MiniMessage.miniMessage().deserialize(" %s".formatted(textToSmall("play.openmc.fr"))));
+ lines.add(MiniMessage.miniMessage().deserialize(
+ "