mirror of
https://github.com/md5sha256/AreaShop.git
synced 2026-11-07 01:42:34 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21340af89f | ||
|
|
db06eae6c9 | ||
|
|
5bae5ecf67 | ||
|
|
679ffe2145 | ||
|
|
e6c5653073 | ||
|
|
ea31dfdd65 | ||
|
|
9da31fed1f | ||
|
|
9baf0b7eec | ||
|
|
a14dc4e541 | ||
|
|
00d3256716 | ||
|
|
40338b66df |
No files matched your search
+6
-2
@@ -30,6 +30,9 @@ signTags:
|
||||
add: '[as]'
|
||||
## Enable sending stats to http://mcstats.org/ (Metrics plugin)
|
||||
sendStats: true
|
||||
## If enabled it will check for updates when loading the plugin, it will never download files, it will only notify about it
|
||||
## A message will be printed in the console when an update is available and OPs will be notified when joining the server
|
||||
checkForUpdates: true
|
||||
## Use colors when sending messages to console and log files
|
||||
useColorsInConsole: false
|
||||
## Post error messages in the console when a command run from the config fails (from the 'runCommands' section for example)
|
||||
@@ -37,7 +40,7 @@ postCommandErrors: true
|
||||
## Enables / disables debug messages in the console, could be useful to figure out where errors come from
|
||||
debug: false
|
||||
## Version of the config, do not change!
|
||||
version: 2.1.1
|
||||
version: 2.1.2
|
||||
|
||||
|
||||
# ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||
@@ -225,6 +228,7 @@ schematicProfiles:
|
||||
restore: ''
|
||||
## Flag profiles to specify what flags should be set on the WorldGuard regions
|
||||
## All normal region flags as present in WorldGuard can be used, and also members, owners, priority and parent
|
||||
## Each line represents a WorldGuard setting that should be set to a certain value when the region is in the specified state
|
||||
## The members and owners flag normally take a list of UUID's separated by 'comma space', adding by name is possible with 'n:<name>'
|
||||
## You can add groups by using 'g:<groupname>', so in total you could use: '%uuid%, %friendsuuid%, g:vip, n:cool-guy'
|
||||
## For flags like 'entry' and 'exit' you can add group setting by using 'g:<scope>' behind it, <scope> is one of the following:
|
||||
@@ -247,7 +251,7 @@ flagProfiles:
|
||||
greeting: '%lang:prefix%%lang:greeting-bought%'
|
||||
resale:
|
||||
members: '%uuid%, %friendsuuid%'
|
||||
greetin: '%lang:prefix%%lang:greeting-resale%'
|
||||
greeting: '%lang:prefix%%lang:greeting-resale%'
|
||||
## Profiles that specify when players should get messages about rent that almost run out
|
||||
## The numbers that start sections in the profile specify how time before it actually runs out it should be executed
|
||||
## When warnPlayer is set to true a message will be send that is specified in the language file
|
||||
|
||||
+45
-7
@@ -1,6 +1,6 @@
|
||||
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
|
||||
# ║ Language: German, Version: V2.1.0, Percentage translated: 88%, author(s): Androkai ║
|
||||
# ║ Language: German, Version: V2.1.2, Percentage translated: 100%, author(s): Androkai, Baummann ║
|
||||
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
|
||||
# ║ 1: Make a copy of this file ║
|
||||
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
|
||||
@@ -8,7 +8,7 @@
|
||||
# ║ 4: Change the strings in the new file to your liking and save the file ║
|
||||
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
|
||||
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
|
||||
total-maximum: "Du kannst nicht mehr als zusammen %0% Region(en) mieten/kaufen (Du hast bereits %1% in Gruppe '%2%')"
|
||||
total-maximum: "Du kannst nicht mehr als %0% Region(en) mieten/kaufen (Du hast bereits %1% in Gruppe '%2%')"
|
||||
cmd-notValid: "Der Befehl ist ungültig, nutze '/as help' für weitere Informationen"
|
||||
cmd-onlyByPlayer: "Dieser Befehl kann nur von einem Spieler ausgeführt werden"
|
||||
cmd-weOnlyByPlayer: "Eine WorldEdit-Selektion kann nur von einem Spieler gewählt werden, gib die Region als extra Argument an"
|
||||
@@ -30,15 +30,15 @@ help-unrentOwn: "&6/as unrent &7-&r Kündige den Mietvertrag deiner Region"
|
||||
help-sell: "&6/as sell &7-&r Verkaufe eine Region"
|
||||
help-sellOwn: "&6/as sell &7-&r Verkaufe deine Region"
|
||||
help-updaterents: "&6/as updaterents &7-&r Aktualisiere alle Mietschilder und -regionen"
|
||||
help-updatebuys: "&6/as updatebuys &7-&r Aktualisiere alle Verkaufsschilder und -regionen"
|
||||
help-reload: "&6/as reload &7-&r Lade die Konfigurations- und Sprachdateien neu ein"
|
||||
help-updatebuys: "&6/as updatebuys &7-&r Aktualisiere alle Verkaufsschilder und Regionen"
|
||||
help-reload: "&6/as reload &7-&r Lädt die Konfigurations- und Sprachdateien neu."
|
||||
help-setrestore: "&6/as setrestore &7-&r Setze Wiederherstellung an/aus und wähle Profil"
|
||||
help-setprice: "&6/as setprice &7-&r Ändere den Preis einer Region"
|
||||
help-setduration: "&6/as setduration &7-&r Ändere die Mietdauer einer Region"
|
||||
help-teleport: "&6/as tp &7-&r Teleportiere zu deiner gekauften/gemieteten Region"
|
||||
help-teleportAll: "&6/as tp &7-&r Teleportiere zu einer gekauften/gemieteten Region"
|
||||
help-setteleport: "&6/as settp &7-&r Erstelle Teleport-Punkt für eine gekaufte/gemietete Region"
|
||||
help-setteleportAll: "&6/as settp &7-&r Erstelle Teleportpunkt für eine Region"
|
||||
help-setteleport: "&6/as settp &7-&r Erstelle einen Teleport-Punkt für eine gekaufte/gemietete Region"
|
||||
help-setteleportAll: "&6/as settp &7-&r Erstellt einen Teleportpunkt für eine Region"
|
||||
help-find: "&6/as find &7-&r Finde eine Region, welche gekauft oder gemietet werden kann"
|
||||
help-groupadd: "&6/as groupadd &7-&r Füge eine Region einer Gruppe hinzu"
|
||||
help-groupdel: "&6/as groupdel &7-&r Entferne eine Region aus einer Gruppe"
|
||||
@@ -52,7 +52,7 @@ help-delsign: "&6/as delsign &7-&r Lösche das Schild einer Region, welches du g
|
||||
help-me: "&6/as me &7-&r Überprüfe, welche Regionen du besitzt (+Verfallsdatum)"
|
||||
help-setowner: "&6/as setowner &7-&r Lege den Besitzer der Region fest oder verlängere die Mietdauer"
|
||||
help-resell: "&6/as resell &7-&r Aktiviere den Weiterverkaufs-Modus für eine deiner Regionen"
|
||||
help-resellAll: "&6/as resell &7-&r Aktiviere Weiterverkaufs-Modus für eine Region"
|
||||
help-resellAll: "&6/as resell &7-&r Aktiviere den Weiterverkaufs-Modus für eine Region"
|
||||
help-stopResell: "&6/as stopresell &7-&r Stoppe den Weiterverkauf deiner Region"
|
||||
help-stopResellAll: "&6/as stopresell &7-&r Stoppe den Weiterverkauf einer Region"
|
||||
help-addFriend: "&6/as addfriend &7-&r Füge einen Freund zu deiner Region hinzu"
|
||||
@@ -131,7 +131,35 @@ info-playerNoRents: "%0% hat bisher keine Region(en) gemietet"
|
||||
info-playerBuys: "Von %0% verkaufte Regionen: &7%1%"
|
||||
info-playerNoBuys: "%0% hat bisher keine Region(en) gekauft"
|
||||
info-regionHelp: "/as info region [Region], Wenn kein Regionsname angegeben wird, wird die Region genutzt, in der du dich gerade befindest"
|
||||
info-regionHeaderRent: "&2Informationen über %region%:"
|
||||
info-regionHeaderBuy: "&2Informationen über %region%:"
|
||||
info-regionRented: "&2&l►&r Gemietet von %player% bis: &7%until%"
|
||||
info-regionBought: "&2&l►&r Gekauft von %player%"
|
||||
info-regionExtending: "&2&l►&r Preis zum Verlängern: &7%price% für %duration%"
|
||||
info-regionCanBeRented: "&2&l►&r Preis zum Mieten: &7%price% für %duration%"
|
||||
info-regionCanBeBought: "&2&l►&r Kaufpreis: &7%price%"
|
||||
info-regionFriends: "&2&l►&r Freunde hinzugefügt: &7%friends%"
|
||||
info-regionMoneyBackBuy: "&2&l►&r Verkaufpreis: &7%moneyback% (%moneybackpercent%% des Kaufpreises)"
|
||||
info-regionMoneyBackRent: "&2&l►&r Rückzahlung bei Mietkündigung: &7%moneyback% (%moneybackpercent%% der verbleibenden Zeit)"
|
||||
info-regionMaxExtends: "&2&l►&r Maximale Anzahl an Mietverlängerungen: &7%maxextends% mal"
|
||||
info-regionNoExtending: "&2&l►&r Miete kann nicht verlängert werden"
|
||||
info-regionExtendsLeft: "&2&l►&r Verbleibende Mietverlängerungen: &7%extendsleft% von %maxextends% mal"
|
||||
info-regionMaxRentTime: "&2&l►&r Miete im Voraus: &7Maximal %maxrenttime%"
|
||||
info-regionNoTeleport: "&2&l►&r Teleport-Position nicht gesetzt%0%"
|
||||
info-regionTeleportHint: " &7(Benutze '/as settp' für einen bessere Position)"
|
||||
info-regionTeleportAt: "&2&l►&r Teleport-Punkt bei: &7(%0%, %1%, %2%, %3%, Neigung:%4%, Drehung:%5%)"
|
||||
info-regionSigns: "&2&l►&r Verbundene Schilder: &7%0%"
|
||||
info-regionSignLocation: "&7(%0%, %1%, %2%, %3%)&r"
|
||||
info-regionGroups: "&2&l►&r Zugewiesene Gruppen: &7%0%"
|
||||
info-regionInactiveUnrent: "&2&l►&r Automatische Mietkündigung nach: &7%inactivetime% Inaktivität des Spielers"
|
||||
info-regionInactiveSell: "&2&l►&r Automatischer Verkauf nach: &7%inactivetime% Inaktivität des Spielers"
|
||||
info-regionRestrictedRegionRent: "&2&l►&r Um diese Region zu mieten, musst du dich in ihr befinden."
|
||||
info-regionRestrictedWorldRent: "&2&l►&r Um diese Region zu mieten, musst du dich in der Welt '%world%' befinden."
|
||||
info-regionRestrictedRegionBuy: "&2&l►&r Um diese Region zu kaufen, musst du dich in ihr befinden."
|
||||
info-regionRestrictedWorldBuy: "&2&l►&r Um diese Region zu kaufen, musst du dich in der Welt '%world%' befinden."
|
||||
info-regionRestoringRent: "&2&l►&r Die Wiederherstellung ist aktiviert. &7(Region wird bei Mietkündigung zurückgesetzt)%0%"
|
||||
info-regionRestoringBuy: "&2&l►&r Die Wiederherstellung ist aktiviert. &7(Region wird beim Verkauf zurückgesetzt)%0%"
|
||||
info-regionRestoringProfile: " (Profil: %0%)"
|
||||
info-regionNoSign: "Für diese Region gibt es bisher kein Schild"
|
||||
info-regionPriceDuration: "Preis: &7%0% pro %1%"
|
||||
info-regionPrice: "Preis: &7%0%"
|
||||
@@ -144,6 +172,8 @@ setrestore-help: "/as setrestore <Region> <true|false|general> [Profil]"
|
||||
setrestore-noPermission: "Du bist nicht berechtigt, die Wiederherstellungs-Einstellungen zu verändern"
|
||||
setrestore-notRegistered: "%0% ist nicht eingetragen"
|
||||
setrestore-invalidSetting: "'%0%' ist kein gültiger Status, kann true sein, false oder general"
|
||||
setrestore-success: "Wiederherstellungs-Einstellungen erfolgreich von %0% zu '%1%' geändert."
|
||||
setrestore-successProfile: "Wiederherstellungs-Einstellung erfolgreich von %0% zu '%1%' und das Profil zu '%2%' geändert."
|
||||
setprice-noPermission: "Du bist nicht berechtigt, den Preis einer Region zu ändern"
|
||||
setprice-help: "/as setprice <Preis> [Region], Wenn kein Regionsname angegeben wird, wird die Region genutzt, in der du dich gerade befindest"
|
||||
setprice-notRegistered: "%0% ist nicht in AreaShop eingetragen"
|
||||
@@ -179,6 +209,8 @@ teleport-noPermission: "Du hast keine Rechte um dich zu dieser Region zu telepor
|
||||
teleport-noPermissionOther: "Du bist nicht berechtigt, dich zu einer Region zu teleportieren, welche du nicht besitzt"
|
||||
teleport-noPermissionSign: "Du hast keine Rechte um dich zu diesem Schild in deiner Region zu teleportieren"
|
||||
teleport-noPermissionOtherSign: "Du fehlt die Berechtigung, dich zu Schildern von Regionen, die du nicht besitzt, zu teleportieren"
|
||||
teleport-noPermissionFriend: "Du hast keine Berechtigungen zu Regionen zu teleporten, in denen du als Freund hinzugefügt worden bist."
|
||||
teleport-noPermissionFriendSign: "Du hast keine Berechtigungen um zu dem Schild einer Region zu teleporten, in denen du als Freund hinzugefügt worden bist."
|
||||
teleport-success: "Du wurdest zu %0% teleportiert"
|
||||
teleport-successSign: "Du wurdest zu %0% teleportiert"
|
||||
teleport-noSafe: "Keine sichere Position in %0% gefunden, kein Boden vorhanden oder maximale Anzahl an Versuchen erreicht (%1%/%2%)"
|
||||
@@ -191,6 +223,7 @@ setteleport-success: "Teleport-Punkt von %0% erfolgreich gesetzt"
|
||||
setteleport-notInside: "Der Teleportpunkt muss sich innerhalb einer Region befinden"
|
||||
setteleport-reset: "Teleport-Punkt von %0% erfolgreich zurückgesetzt"
|
||||
find-help: "/as find <buy|rent> [maximaler Preis] [Gruppe]"
|
||||
find-noPermission: "Du hast keine Berechtigungen nach Regionen zu suchen und zu ihnen zu teleporten."
|
||||
find-success: "%0% Region gefunden: %1%, bei Suche nach max. Preis in Höhe deines Guthabens: %2%%3%"
|
||||
find-successMax: "%0% Region gefunden: %1%, bei Suche nach max. Preis in Höhe von %2%%3%"
|
||||
find-wrongMaxPrice: "Der angegebene Maximal-Preis ist kein korrekter Betrag: %0%"
|
||||
@@ -257,6 +290,11 @@ me-noRentRegions: "Du hast aktuell keine Regionen angemietet"
|
||||
me-noBuyRegions: "Du hast aktuell keine Regionen im Besitz"
|
||||
me-rentRegions: "Du hast die folgenden Regionen angemietet:"
|
||||
me-buyRegions: "Du bist Eigentümer der folgenden Regionen:"
|
||||
me-rentLine: "&2&l►&r %region% bis %until% &7(noch %timeleft% verbleibend)"
|
||||
me-buyLine: "&2&l►&r %region%"
|
||||
me-noFriendRegions: "Du wurdest noch nicht als Freund zu einer Region hinzugefügt."
|
||||
me-friendRegions: "Du bist in folgenden Regionen als Freund hinzugefügt:"
|
||||
me-friendLine: "&2&l►&r %region% &7(Besitzer: %player%)"
|
||||
setowner-help: "/as setowner <Spieler> [Region], wenn kein Regionsname angegeben wird, wird die Region genutzt, in der du dich gerade befindest"
|
||||
setowner-noPermission: "Dir fehlt die Berechtigung den Besitzer einer Region festzulegen."
|
||||
setowner-noPermissionRent: "Dir fehlt die Berechtigung den Mieter einer Region festzulegen."
|
||||
|
||||
+6
-2
@@ -1,6 +1,6 @@
|
||||
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
|
||||
# ║ Language: English, Version: V2.1.0, Percentage translated: 100% (source), author(s): NLThijs48 ║
|
||||
# ║ Language: English, Version: V2.1.2, Percentage translated: 100% (source), author(s): NLThijs48 ║
|
||||
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
|
||||
# ║ 1: Make a copy of this file ║
|
||||
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
|
||||
@@ -147,9 +147,11 @@ info-regionFooterRent: ""
|
||||
info-regionFooterBuy: ""
|
||||
info-regionRented: "&2&l►&r Rented by %player% until: &7%until%"
|
||||
info-regionBought: "&2&l►&r Bought by %player%"
|
||||
info-regionReselling: "&2&l►&r Bought by %player%, currently reselling"
|
||||
info-regionExtending: "&2&l►&r Price to extend: &7%price% per %duration%"
|
||||
info-regionCanBeRented: "&2&l►&r Price to rent: &7%price% per %duration%"
|
||||
info-regionCanBeBought: "&2&l►&r Price to buy: &7%price%"
|
||||
info-regionReselPrice: "&2&l►&r Resell price: &7%resellprice% (you can buy it from %player%)"
|
||||
info-regionFriends: "&2&l►&r Added friends: &7%friends%"
|
||||
info-regionMoneyBackBuy: "&2&l►&r Selling payback: &7%moneyback% (%moneybackpercent%% of the price)"
|
||||
info-regionMoneyBackRent: "&2&l►&r Unrenting payback: &7%moneyback% (%moneybackpercent%% of the remaining time)"
|
||||
@@ -384,4 +386,6 @@ greeting-forrent: "%region% can be rented for %price% per %duration%"
|
||||
greeting-rented: "%region% is rented by %player% until %until%"
|
||||
greeting-forsale: "%region% can be bought for %price%"
|
||||
greeting-bought: "%region% is bought by %player%"
|
||||
greeting-resale: "%region% can be bought for %resaleprice% from %player%"
|
||||
greeting-resale: "%region% can be bought for %resaleprice% from %player%"
|
||||
|
||||
update-playerNotify: "&2Update from AreaShop V%0% to %1% available, get the latest version at http://dev.bukkit.org/bukkit-plugins/regionbuyandrent/"
|
||||
+323
-323
@@ -1,6 +1,6 @@
|
||||
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
|
||||
# ║ Language: French (Français), Version: V2.1.0, Percentage translated: 100%, author(s): BlaZingHope, Yaelknown ║
|
||||
# ║ Language: French (Français), Version: V2.1.2, Percentage translated: 100%, author(s): BlaZingHope, Yaelknown, Dydy69 ║
|
||||
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
|
||||
# ║ 1: Make a copy of this file ║
|
||||
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
|
||||
@@ -8,342 +8,342 @@
|
||||
# ║ 4: Change the strings in the new file to your liking and save the file ║
|
||||
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
|
||||
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
|
||||
total-maximum: "Vous ne pouvez pas louer ou acheter plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')"
|
||||
cmd-notValid: "Cette commande est incorrecte, utilisez '/as help' pour plus de détails"
|
||||
cmd-onlyByPlayer: "Cette commande ne peut être utilisé que par un joueur"
|
||||
cmd-weOnlyByPlayer: "Utiliser une séléction WorldEdit n'est possible qu'en tant que joueur. Spécifiez le nom de la région en argument supplémentaire."
|
||||
cmd-noSelection: "Vous n'avez pas de séléction WorldEdit"
|
||||
cmd-noRegionsFound: "Aucune région enregistré dans AreaShop n'a été trouvé dans votre séléction"
|
||||
cmd-noWERegionsFound: "Aucun région WorldEdit croisant votre séléction n'a été trouvé"
|
||||
cmd-notRegistered: "%0% n'est pas enregistré dans AreaShop"
|
||||
cmd-noRegionsAtLocation: "Aucun région trouvée à votre emplacement, spécifiez la région comme un argument"
|
||||
cmd-moreRegionsAtLocation: "Plus d'une région ont été trouvées à votre emplacement, spécifiez la région comme un argument"
|
||||
cmd-automaticRegionOnlyByPlayer: "Déterminer la région automatiquement est disponible uniquement pour les joueurs, spécifiez la région comme un argument"
|
||||
help-header: "Pade d'aide, Commande que vous pouvez éxécuter"
|
||||
help-alias: "Alias des commandes: /areashop, /as"
|
||||
help-help: "&6/as help &7-&r Affiche la page d'aide"
|
||||
help-info: "&6/as info &7-&r Obtenir les infos sur les régions actuelles"
|
||||
help-rent: "&6/as rent &7-&r Louer une région, ou prolonger la location actuelle"
|
||||
help-buy: "&6/as buy &7-&r Acheter une région"
|
||||
help-unrent: "&6/as unrent &7-&r Dé-louer une région"
|
||||
help-unrentOwn: "&6/as unrent &7-&r Dé-louer votre propre région"
|
||||
help-sell: "&6/as sell &7-&r Vendre une région"
|
||||
help-sellOwn: "&6/as sell &7-&r Vendre votree propre région"
|
||||
help-updaterents: "&6/as updaterents &7-&r Mettre à jours toutes les pancartes et les régions louées."
|
||||
help-updatebuys: "&6/as updatebuys &7-&r Mettre à jours toutes les pancartes et les régions achetées"
|
||||
help-reload: "&6/as reload &7-&r Recharge les configs et langages"
|
||||
help-setrestore: "&6/as setrestore &7-&r Activer ou désactiver la restauration et choisir le profil"
|
||||
help-setprice: "&6/as setprice &7-&r Changer le prix d'une région"
|
||||
help-setduration: "&6/as setduration &7-&r Changer le temps de location d'une région"
|
||||
help-teleport: "&6/as tp &7-&r Téléportation vers votre région acheté / louée"
|
||||
help-teleportAll: "&6/as tp &7-&r Téléportation vers une région louée / acheté"
|
||||
help-setteleport: "&6/as settp &7-&r Définie la position de téléportation pour la région louée / acheté"
|
||||
help-setteleportAll: "&6/as settp &7-&r Défini la position de téléportation pour une région"
|
||||
help-find: "&6/as find &7-&r trouve un achat ou une location vide"
|
||||
help-groupadd: "&6/as groupadd &7-&r Ajoute une région à un groupe"
|
||||
help-groupdel: "&6/as groupdel &7-&r Supprime une région d'un groupe"
|
||||
help-grouplist: "&6/as grouplist &7-&r Affiche tout les groupes enregistrés"
|
||||
help-groupinfo: "&6/as groupinfo &7-&r Affiche les informations d'un groupe"
|
||||
help-schemevent: "&6/as schemevent &7-&r Déclanche un évenement schématique d'une région"
|
||||
help-add: "&6/as add &7-&r Enregistre une région comme louée ou acheté"
|
||||
help-del: "&6/as del &7-&r Supprime une région enregistré dans AreaShop"
|
||||
help-addsign: "&6/as addsign &7-&r Ajoute une pancarte à une région existante"
|
||||
help-delsign: "&6/as delsign &7-&r Supprime la pancarte que vous regardez"
|
||||
help-me: "&6/as me &7-&r Voir les régions que vous possédez (et le temps restant)"
|
||||
help-setowner: "&6/as setowner &7-&r Change le propriétaire d'une région ou allonge le temps de location"
|
||||
help-resell: "&6/as resell &7-&r Mettre une de vos région(s) en vente"
|
||||
help-resellAll: "&6/as resell &7-&r Mettre une région en vente"
|
||||
help-stopResell: "&6/as stopresell &7-&r Ne plus revendre votre région"
|
||||
help-stopResellAll: "&6/as stopresell &7-&r Récupérer une de vos région(s)"
|
||||
help-addFriend: "&6/as addfriend &7-&r Ajouter un ami à votre région"
|
||||
help-addFriendAll: "&6/as addfriend &7-&r Ajouter un ami à une région"
|
||||
help-delFriend: "&6/as delfriend &7-&r Supprimer un ami de votre région"
|
||||
help-delFriendAll: "&6/as delfriend &7-&r Supprimer un ami d'une région"
|
||||
rent-help: "/as rent [regionname], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
rent-noPermission: "Vous n'avez pas la permission de louer une région"
|
||||
rent-maximum: "Vous ne pouvez pas louer plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')"
|
||||
rent-payError: "Une erreur durant le paiement s'est produite. Essayez de nouveau plus tard"
|
||||
rent-rented: "Vous avez loué de %0% jusqu'à %1%"
|
||||
rent-extended: "Vous avez prolongé la location de %0% jusqu'à %1%"
|
||||
rent-extend: "Vous pouvez prolonger votre location avec un clic droit sur la pancarte, ou en utilisant /as rent"
|
||||
rent-lowMoneyExtend: "Vous n'avez pas assez d'argent pour prolonger la location. (Vous possédez %0% et devez payer %1%)"
|
||||
rent-lowMoneyRent: "Vous n'avez pas assez d'argent pour louer cette région. (Vous possédez %0% et devez payer %1%)"
|
||||
rent-someoneElse: "Quelqu'un d'autre a déjà louer cette région"
|
||||
rent-notRentable: "cette région n'est pas disponible à la location"
|
||||
rent-maxExtends: "Vous ne pouvez plus prolonger cette location. (Le maximum est de %0% fois). Mais lorsque la location sera terminé, vous pourrez louer de nouveau cette région"
|
||||
rent-maxRentTime: "Vous ne pouvez pas louer plus longtemps à l'avance, le maximum est de %0% minutes et vous avez déjà loué pour %1% minutes"
|
||||
rent-restrictedToWorld: "Vous devez être dans le monde '%0%' pour louer cette région (vous êtes dans '%1%')"
|
||||
rent-restrictedToRegion: "Vous devez être dans la région '%0%' pour la louer"
|
||||
rent-expireWarning: "Votre région %region% n'a plus que %timeleft% de temps de location, soyez sûr d'allonger ce temps de location si vous voulez la conserver"
|
||||
buy-help: "/as buy [regionname], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
buy-noPermission: "Vous n'avez pas la permission d'acheter une région"
|
||||
buy-notBuyable: "cette région n'est pas disponible à l'achat"
|
||||
buy-maximum: "Vous ne pouvez pas acheter plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')"
|
||||
buy-payError: "Une erreur durant le paiement s'est produite. Essayez de nouveau plus tard"
|
||||
buy-succes: "Vous avez acheté %0% avec succès"
|
||||
buy-successResale: "Vous avez acheté %0% à %1%"
|
||||
buy-successSeller: "Votre région %0% a été vendue pour %1% à %2%"
|
||||
buy-lowMoney: "Vous n'avez pas assez d'argent pour acheter cette région. (Vous possédez %0% et devez payer %1%)"
|
||||
buy-yours: "Vous avez déjà acheter cette région"
|
||||
buy-someoneElse: "Quelqu'un a déjà acheté cette région"
|
||||
buy-restrictedToWorld: "Vous devez être dans le monde '%0%' pour acheter cette région (vous êtes dans '%1%')"
|
||||
buy-restrictedToRegion: "Vous devez être dans '%0%' pour l'acheter"
|
||||
unrent-help: "/as unrent [regionname], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
unrent-noPermission: "Vous n'avez pas la permission de dé-louer une région"
|
||||
unrent-noPermissionOther: "Vous n'avez pas la permission de délouer une autre région"
|
||||
unrent-notRegistered: "La région ne peut pas être dé-louée car elle n'est pas enregistré à la location"
|
||||
unrent-notRented: "La région ne peut pas être dé-louée car elle n'est pas loué"
|
||||
total-maximum: "Vous ne pouvez pas louer ou acheter plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')."
|
||||
cmd-notValid: "Cette commande est incorrecte, utilisez '/as help' pour plus de détails."
|
||||
cmd-onlyByPlayer: "Cette commande ne peut être utilisée que par un joueur."
|
||||
cmd-weOnlyByPlayer: "Utiliser une sélection WorldEdit n'est possible qu'en tant que joueur. Spécifiez le nom de la région en argument supplémentaire."
|
||||
cmd-noSelection: "Vous n'avez pas de séléction WorldEdit."
|
||||
cmd-noRegionsFound: "Aucune région enregistrée dans AreaShop n'a été trouvée dans votre séléction."
|
||||
cmd-noWERegionsFound: "Aucune région WorldEdit croisant votre séléction n'a été trouvée."
|
||||
cmd-notRegistered: "'%0%' n'est pas enregistrée dans AreaShop."
|
||||
cmd-noRegionsAtLocation: "Aucune région trouvée à votre emplacement, spécifiez la région comme un argument."
|
||||
cmd-moreRegionsAtLocation: "Plus d'une région ont été trouvées à votre emplacement, spécifiez la région comme un argument."
|
||||
cmd-automaticRegionOnlyByPlayer: "Déterminer la région automatiquement est disponible uniquement pour les joueurs, spécifiez la région comme un argument."
|
||||
help-header: "Page d'aide, commandes que vous pouvez exécuter."
|
||||
help-alias: "Alias des commandes : /areashop, /as"
|
||||
help-help: "&6/as help &7-&r Affiche la page d'aide."
|
||||
help-info: "&6/as info &7-&r Obtenir les infos sur les régions actuelles."
|
||||
help-rent: "&6/as rent &7-&r Louer une région, ou prolonger la location actuelle."
|
||||
help-buy: "&6/as buy &7-&r Acheter une région."
|
||||
help-unrent: "&6/as unrent &7-&r Dé-louer une région."
|
||||
help-unrentOwn: "&6/as unrent &7-&r Dé-louer votre propre région."
|
||||
help-sell: "&6/as sell &7-&r Vendre une région."
|
||||
help-sellOwn: "&6/as sell &7-&r Vendre votre propre région."
|
||||
help-updaterents: "&6/as updaterents &7-&r Mettre à jour toutes les pancartes et les régions louées."
|
||||
help-updatebuys: "&6/as updatebuys &7-&r Mettre à jour toutes les pancartes et les régions achetées."
|
||||
help-reload: "&6/as reload &7-&r Recharge les configurations et langages."
|
||||
help-setrestore: "&6/as setrestore &7-&r Activer ou désactiver la restauration et choisir le profil."
|
||||
help-setprice: "&6/as setprice &7-&r Changer le prix d'une région."
|
||||
help-setduration: "&6/as setduration &7-&r Changer le temps de location d'une région."
|
||||
help-teleport: "&6/as tp &7-&r Téléportation vers votre région achetée / louée."
|
||||
help-teleportAll: "&6/as tp &7-&r Téléportation vers une région louée / achetée."
|
||||
help-setteleport: "&6/as settp &7-&r Définit la position de téléportation pour la région louée / achetée."
|
||||
help-setteleportAll: "&6/as settp &7-&r Définit la position de téléportation pour une région."
|
||||
help-find: "&6/as find &7-&r Trouve un achat ou une location vide."
|
||||
help-groupadd: "&6/as groupadd &7-&r Ajoute une région à un groupe."
|
||||
help-groupdel: "&6/as groupdel &7-&r Supprime une région d'un groupe."
|
||||
help-grouplist: "&6/as grouplist &7-&r Affiche tous les groupes enregistrés."
|
||||
help-groupinfo: "&6/as groupinfo &7-&r Affiche les informations d'un groupe."
|
||||
help-schemevent: "&6/as schemevent &7-&r Déclenche un événement schématique d'une région."
|
||||
help-add: "&6/as add &7-&r Enregistre une région comme louée ou achetée."
|
||||
help-del: "&6/as del &7-&r Supprime une région enregistrée dans AreaShop."
|
||||
help-addsign: "&6/as addsign &7-&r Ajoute une pancarte à une région existante."
|
||||
help-delsign: "&6/as delsign &7-&r Supprime la pancarte que vous regardez."
|
||||
help-me: "&6/as me &7-&r Voir les régions que vous possédez (et le temps restant)."
|
||||
help-setowner: "&6/as setowner &7-&r Change le propriétaire d'une région ou allonge le temps de location."
|
||||
help-resell: "&6/as resell &7-&r Mettre une de vos régions en vente."
|
||||
help-resellAll: "&6/as resell &7-&r Mettre une région en vente."
|
||||
help-stopResell: "&6/as stopresell &7-&r Ne plus revendre votre région."
|
||||
help-stopResellAll: "&6/as stopresell &7-&r Récupérer une de vos régions."
|
||||
help-addFriend: "&6/as addfriend &7-&r Ajouter un ami à votre région."
|
||||
help-addFriendAll: "&6/as addfriend &7-&r Ajouter un ami à une région."
|
||||
help-delFriend: "&6/as delfriend &7-&r Supprimer un ami de votre région."
|
||||
help-delFriendAll: "&6/as delfriend &7-&r Supprimer un ami d'une région."
|
||||
rent-help: "/as rent [regionname], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
rent-noPermission: "Vous n'avez pas la permission de louer une région."
|
||||
rent-maximum: "Vous ne pouvez pas louer plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')."
|
||||
rent-payError: "Une erreur durant le paiement s'est produite. Essayez de nouveau plus tard."
|
||||
rent-rented: "Vous avez loué de %0% jusqu'à %1%."
|
||||
rent-extended: "Vous avez prolongé la location de %0% jusqu'à %1%."
|
||||
rent-extend: "Vous pouvez prolonger votre location avec un clic droit sur la pancarte, ou en utilisant /as rent."
|
||||
rent-lowMoneyExtend: "Vous n'avez pas assez d'argent pour prolonger la location (vous possédez %0% et devez payer %1%)."
|
||||
rent-lowMoneyRent: "Vous n'avez pas assez d'argent pour louer cette région (vous possédez %0% et devez payer %1%)."
|
||||
rent-someoneElse: "Quelqu'un d'autre loue déjà cette région."
|
||||
rent-notRentable: "Cette région n'est pas disponible à la location."
|
||||
rent-maxExtends: "Vous ne pouvez plus prolonger cette location (le maximum est de %0% fois). Mais lorsque la location sera terminée, vous pourrez de nouveau louer cette région."
|
||||
rent-maxRentTime: "Vous ne pouvez pas louer plus longtemps à l'avance, le maximum est de %0% minutes et vous avez déjà loué pour %1% minutes."
|
||||
rent-restrictedToWorld: "Vous devez être dans le monde '%0%' pour louer cette région (vous êtes dans '%1%')."
|
||||
rent-restrictedToRegion: "Vous devez être dans la région '%0%' pour la louer."
|
||||
rent-expireWarning: "Votre région '%region%' n'a plus que %timeleft% de temps de location, soyez sûr d'allonger ce temps de location si vous voulez la conserver."
|
||||
buy-help: "/as buy [regionname], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
buy-noPermission: "Vous n'avez pas la permission d'acheter une région."
|
||||
buy-notBuyable: "Cette région n'est pas disponible à l'achat."
|
||||
buy-maximum: "Vous ne pouvez pas acheter plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')."
|
||||
buy-payError: "Une erreur durant le paiement s'est produite. Essayez de nouveau plus tard."
|
||||
buy-succes: "Vous venez d'acheter la région '%0%'."
|
||||
buy-successResale: "Vous venez d'acheter '%0%' à %1%."
|
||||
buy-successSeller: "Votre région '%0%' a été vendue pour %1% à %2%."
|
||||
buy-lowMoney: "Vous n'avez pas assez d'argent pour acheter cette région (vous possédez %0% et devez payer %1%)."
|
||||
buy-yours: "Vous avez déjà acheté cette région."
|
||||
buy-someoneElse: "Quelqu'un a déjà acheté cette région."
|
||||
buy-restrictedToWorld: "Vous devez être dans le monde '%0%' pour acheter cette région (vous êtes dans '%1%')."
|
||||
buy-restrictedToRegion: "Vous devez être dans '%0%' pour l'acheter."
|
||||
unrent-help: "/as unrent [regionname], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
unrent-noPermission: "Vous n'avez pas la permission de dé-louer une région."
|
||||
unrent-noPermissionOther: "Vous n'avez pas la permission de dé-louer une autre région."
|
||||
unrent-notRegistered: "La région ne peut pas être dé-louée car elle n'est pas enregistrée en tant que location."
|
||||
unrent-notRented: "La région ne peut pas être dé-louée car elle n'est pas louée."
|
||||
unrent-unrented: "Votre région a été dé-louée."
|
||||
unrent-other: "La région du joueur %0% a été dé-louée"
|
||||
unrent-expired: "Votre location de %0% a expiré"
|
||||
sell-help: "/as sell [regionname], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
sell-notRegistered: "la région ne peut pas être vendue car elle n'est pas enregistré comme acheté"
|
||||
sell-notBought: "La région ne peut pas être vendue car elle n'est pas la propriété de quelqu'un"
|
||||
sell-sold: "Cette région a été vendu au joueur %0%"
|
||||
sell-soldYours: "Votre région a été vendue"
|
||||
sell-noPermission: "Vous n'avez pas la permission de vendre une région"
|
||||
sell-noPermissionOther: "Vous n'avez pas la permission de vendre une autre région"
|
||||
rents-updated: "Tout les panneaux et régions en location ont été mis à jour"
|
||||
rents-noPermission: "Vous n'avez pas la permission de mettre à jour les panneaux et régions en location"
|
||||
rents-notUpdated: "Tout les panneaux n'ont pas été mis à jour. Recharger peut corriger le problème"
|
||||
buys-updated: "Tout les panneaux et régions en vente ont été mis à jour"
|
||||
buys-noPermission: "Vous n'avez pas la permission de mettre à jour les panneaux et régions en vente"
|
||||
buys-notUpdated: "Tout les panneaux n'ont pas été mis à jour. Recharger peut corriger le problème"
|
||||
reload-reloaded: "La configuration a bien été rechargée"
|
||||
reload-noPermission: "Vous n'avez pas la permission de recharger la configuration"
|
||||
unrent-other: "La région du joueur %0% a été dé-louée."
|
||||
unrent-expired: "Votre location de '%0%' a expiré."
|
||||
sell-help: "/as sell [regionname], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
sell-notRegistered: "La région ne peut pas être vendue car elle n'est pas enregistrée comme achetée."
|
||||
sell-notBought: "La région ne peut pas être vendue car elle n'est pas la propriété de quelqu'un."
|
||||
sell-sold: "Cette région a été vendue au joueur %0%."
|
||||
sell-soldYours: "Votre région a été vendue."
|
||||
sell-noPermission: "Vous n'avez pas la permission de vendre une région."
|
||||
sell-noPermissionOther: "Vous n'avez pas la permission de vendre une autre région."
|
||||
rents-updated: "Tout les panneaux et régions en location ont été mis à jour."
|
||||
rents-noPermission: "Vous n'avez pas la permission de mettre à jour les panneaux et régions en location."
|
||||
rents-notUpdated: "Tout les panneaux n'ont pas été mis à jour. Recharger le serveur peut corriger le problème."
|
||||
buys-updated: "Tous les panneaux et régions en vente ont été mis à jour."
|
||||
buys-noPermission: "Vous n'avez pas la permission de mettre à jour les panneaux et régions en vente."
|
||||
buys-notUpdated: "Tous les panneaux n'ont pas été mis à jour. Recharger le serveur peut corriger le problème."
|
||||
reload-reloaded: "La configuration a bien été rechargée."
|
||||
reload-noPermission: "Vous n'avez pas la permission de recharger la configuration."
|
||||
info-help: "/as info <all|rented|forrent|sold|forsale|player|region>"
|
||||
info-noPermission: "Vous n'avez pas la permission d'avoir des informations à propos des régions"
|
||||
info-all-rents: "Régions enregistrées en location: &7%0%"
|
||||
info-all-noRents: "Il n'y a pas de régions enregistrées en location"
|
||||
info-all-buys: "Régions enregistrées en vente: &7%0%"
|
||||
info-all-noBuys: "Il n'y a pas de régions enregistrées en achat"
|
||||
info-rented: "Régions louées: &7%0%"
|
||||
info-noRented: "Aucune régions louée"
|
||||
info-unrented: "régions non louées: &7%0%"
|
||||
info-noUnrented: "Toutes les régions sont louées"
|
||||
info-sold: "Régions vendues: &7%0%"
|
||||
info-noSold: "Aucune région n'est vendue"
|
||||
info-forsale: "Région en vente: &7%0%"
|
||||
info-noForsale: "Toutes les régions sont vendues"
|
||||
info-noPermission: "Vous n'avez pas la permission d'avoir des informations à propos des régions."
|
||||
info-all-rents: "Régions enregistrées en location : &7%0%"
|
||||
info-all-noRents: "Il n'y a pas de régions enregistrées en location."
|
||||
info-all-buys: "Régions enregistrées en vente : &7%0%"
|
||||
info-all-noBuys: "Il n'y a pas de régions enregistrées en achat."
|
||||
info-rented: "Régions louées : &7%0%"
|
||||
info-noRented: "Aucune région louée."
|
||||
info-unrented: "Régions non louées : &7%0%"
|
||||
info-noUnrented: "Toutes les régions sont louées."
|
||||
info-sold: "Régions vendues : &7%0%"
|
||||
info-noSold: "Aucune région n'est vendue."
|
||||
info-forsale: "Régions en vente : &7%0%"
|
||||
info-noForsale: "Toutes les régions sont vendues."
|
||||
info-playerHelp: "/as info player <name>"
|
||||
info-playerRents: "Regions louées par %0%: &7%1%"
|
||||
info-playerNoRents: "%0% n'a de région louée"
|
||||
info-playerBuys: "Régions achetés par %0%: &7%1%"
|
||||
info-playerNoBuys: "%0% n'a pas acheté de région"
|
||||
info-regionHelp: "/as info region [name], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
info-regionHeaderRent: "&2Informations à propos de %region%:"
|
||||
info-regionHeaderBuy: "&2Informations à propos de %region%:"
|
||||
info-regionRented: "&2&l►&r Loué par %player% until: &7%until%"
|
||||
info-regionBought: "&2&l►&r Acheté par %player%"
|
||||
info-regionExtending: "&2&l►&r Prix pour allonger: &7%price% pour %duration%"
|
||||
info-regionCanBeRented: "&2&l►&r Prix pour louer: &7%price% pour %duration%"
|
||||
info-regionCanBeBought: "&2&l►&r Prix d'achat: &7%price%"
|
||||
info-regionFriends: "&2&l►&r Ami(s) ajouté(s): &7%friends%"
|
||||
info-regionMoneyBackBuy: "&2&l►&r Prix de revente: &7%moneyback% (%moneybackpercent%% du prix)"
|
||||
info-regionMoneyBackRent: "&2&l►&r Remboursement de location: &7%moneyback% (%moneybackpercent%% du temps restant)"
|
||||
info-regionMaxExtends: "&2&l►&r Allongement maximum: &7%maxextends% fois"
|
||||
info-regionNoExtending: "&2&l►&r La location ne peut être allongée"
|
||||
info-regionExtendsLeft: "&2&l►&r Allongements restants: &7%extendsleft% fois sur %maxextends%"
|
||||
info-regionMaxRentTime: "&2&l►&r Location à l'avance: &7%maxrenttime% au maximum"
|
||||
info-regionNoTeleport: "&2&l►&r Emplacement de téléportation non défini%0%"
|
||||
info-playerRents: "Régions louées par %0% : &7%1%"
|
||||
info-playerNoRents: "%0% n'a de régions louées."
|
||||
info-playerBuys: "Régions achetées par %0% : &7%1%"
|
||||
info-playerNoBuys: "%0% n'a pas acheté de régions."
|
||||
info-regionHelp: "/as info region [name], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
info-regionHeaderRent: "&2Informations à propos de '%region%' :"
|
||||
info-regionHeaderBuy: "&2Informations à propos de '%region%' :"
|
||||
info-regionRented: "&2&l►&r Louée par %player% jusqu'à : &7%until%"
|
||||
info-regionBought: "&2&l►&r Achetée par %player%"
|
||||
info-regionExtending: "&2&l►&r Prix pour allonger : &7%price% pour %duration%"
|
||||
info-regionCanBeRented: "&2&l►&r Prix pour louer : &7%price% pour %duration%"
|
||||
info-regionCanBeBought: "&2&l►&r Prix d'achat : &7%price%"
|
||||
info-regionFriends: "&2&l►&r Ami(s) ajouté(s) : &7%friends%"
|
||||
info-regionMoneyBackBuy: "&2&l►&r Prix de revente : &7%moneyback% (%moneybackpercent%% du prix)"
|
||||
info-regionMoneyBackRent: "&2&l►&r Remboursement de location : &7%moneyback% (%moneybackpercent%% du temps restant)"
|
||||
info-regionMaxExtends: "&2&l►&r Allongement maximum : &7%maxextends% fois"
|
||||
info-regionNoExtending: "&2&l►&r La location ne peut être allongée."
|
||||
info-regionExtendsLeft: "&2&l►&r Allongements restants : &7%extendsleft% fois sur %maxextends%"
|
||||
info-regionMaxRentTime: "&2&l►&r Location à l'avance : &7%maxrenttime% au maximum"
|
||||
info-regionNoTeleport: "&2&l►&r Emplacement de téléportation non défini%0%."
|
||||
info-regionTeleportHint: "&7(utilisez '/as settp' pour un meilleur emplacement)"
|
||||
info-regionTeleportAt: "&2&l►&r Emplacement de téléportation défini à: &7(%0%, %1%, %2%, %3%, pitch:%4%, yaw:%5%)"
|
||||
info-regionSigns: "&2&l►&r Pancartes connectées: &7%0%"
|
||||
info-regionTeleportAt: "&2&l►&r Emplacement de téléportation défini à : &7(%0%, %1%, %2%, %3%, pitch:%4%, yaw:%5%)"
|
||||
info-regionSigns: "&2&l►&r Pancartes connectées : &7%0%"
|
||||
info-regionSignLocation: "&7(%0%, %1%, %2%, %3%)&r"
|
||||
info-regionGroups: "&2&l►&r Assigné aux groupes: &7%0%"
|
||||
info-regionInactiveUnrent: "&2&l►&r Fin de le location automatique après: &7%inactivetime% de temps d'inactivité du joueur"
|
||||
info-regionInactiveSell: "&2&l►&r Revente automatique après: &7%inactivetime% de temps d'inactivité du joueur"
|
||||
info-regionRestrictedRegionRent: "&2&l►&r Pour louer cette région, vous devez être à l'intérieur"
|
||||
info-regionRestrictedWorldRent: "&2&l►&r Pour louer cette région vous devez être dans le monde '%world%'"
|
||||
info-regionRestrictedRegionBuy: "&2&l►&r Pour acheter cette région vous devez être à l'intérieur"
|
||||
info-regionRestrictedWorldBuy: "&2&l►&r Pour acheter cette région vous devez être dans le monde '%world%'"
|
||||
info-regionGroups: "&2&l►&r Assigné aux groupes : &7%0%"
|
||||
info-regionInactiveUnrent: "&2&l►&r Fin de le location automatique après : &7%inactivetime% de temps d'inactivité du joueur"
|
||||
info-regionInactiveSell: "&2&l►&r Revente automatique après : &7%inactivetime% de temps d'inactivité du joueur"
|
||||
info-regionRestrictedRegionRent: "&2&l►&r Pour louer cette région, vous devez être à l'intérieur."
|
||||
info-regionRestrictedWorldRent: "&2&l►&r Pour louer cette région, vous devez être dans le monde '%world%'."
|
||||
info-regionRestrictedRegionBuy: "&2&l►&r Pour acheter cette région, vous devez être à l'intérieur de cellle-ci."
|
||||
info-regionRestrictedWorldBuy: "&2&l►&r Pour acheter cette région, vous devez être dans le monde '%world%'."
|
||||
info-regionRestoringRent: "&2&l►&r La restauration est activée &7(la région sera remise à zéro a la fin de la location)%0%"
|
||||
info-regionRestoringBuy: "&2&l►&r La restauration est activée &7(la région sera remise à zéro a la fin de la location)%0%"
|
||||
info-regionRestoringProfile: "(profil: %0%)"
|
||||
info-regionNoSign: "Il n'y a pas de panneaux enregistré pour cette région"
|
||||
info-regionPriceDuration: "Prix: &7%0% pour chaque %1%"
|
||||
info-regionPrice: "Prix: &7%0%"
|
||||
info-regionRestore: "Réstauration activé: &7%0%"
|
||||
info-regionRestoreProfile: "profil de restauration: &7%0%"
|
||||
info-regionTPLocation: "lieu de téléportation: &7World=%0%, X=%1%, Y=%2%, Z=%3%, Pitch=%4%, Yaw=%5%"
|
||||
info-regionNoTP: "Aucun lieu de téléportation défini"
|
||||
info-regionNotExisting: "La région %0% n'est pas enregistrée"
|
||||
info-regionRestoringProfile: "(Profil : %0%)"
|
||||
info-regionNoSign: "Il n'y a pas de panneau enregistré pour cette région."
|
||||
info-regionPriceDuration: "Prix : &7%0% pour chaque %1%"
|
||||
info-regionPrice: "Prix : &7%0%"
|
||||
info-regionRestore: "Restauration activée : &7%0%"
|
||||
info-regionRestoreProfile: "Profil de restauration : &7%0%"
|
||||
info-regionTPLocation: "Lieu de téléportation : &7World=%0%, X=%1%, Y=%2%, Z=%3%, Pitch=%4%, Yaw=%5%"
|
||||
info-regionNoTP: "Aucun lieu de téléportation défini."
|
||||
info-regionNotExisting: "La région '%0%' n'est pas enregistrée."
|
||||
setrestore-help: "/as setrestore <region> <true|false|general> [profile]"
|
||||
setrestore-noPermission: "Vous n'avez pas la permission de restaurer les paramètres"
|
||||
setrestore-notRegistered: "%0% n'est pas enregistré"
|
||||
setrestore-invalidSetting: "'%0%' est invalide. Doit être true, false ou general"
|
||||
setrestore-success: "Paramètre de restauration défini de %0% à %1% avec succès"
|
||||
setrestore-successProfile: "Paramètre de restauration défini de %0% à %1% et le profil à '%2%' avec succès"
|
||||
setprice-noPermission: "Vous n'avez pas la permission de changer le prix d'une région"
|
||||
setprice-help: "/as setprice <price> [region], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
setprice-notRegistered: "%0% n'est pas enregistré dans AreaShop"
|
||||
setprice-wrongPrice: "'%0%' n'est pas un rpix valide"
|
||||
setprice-successRent: "Prix de la région %0% changé de %1% à %2%"
|
||||
setprice-successBuy: "Pprix de la région %0% changé à %1%"
|
||||
setduration-noPermission: "Vous n'avez pas la permission de changer le temps d'une location"
|
||||
setduration-help: "/as setduration <amount> <identifier> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne précisez pas"
|
||||
setduration-notRegistered: "%0% n'est pas enregistré comme à louer"
|
||||
setduration-wrongAmount: "'%0%' n'est pas un montant valide, utilisez un nombre entier"
|
||||
setduration-wrongFormat: "'%0%' n'est pas un format de temps valide, regardez la documentation de Bukkit"
|
||||
setduration-success: "Temps de location %0% changé à '%1%'"
|
||||
setup-noRegion: "Vous n'avez pas spécifié une région à la seconde ligne"
|
||||
setup-wrongRegion: "la région que vous avez spécifié n'existe pas"
|
||||
setup-alreadyRentSign: "La région que vous avez spécifiée possède déjà un panneau de location"
|
||||
setup-alreadyBuySign: "La région que vous avez spécifiée possède déjà un panneau de vente"
|
||||
setup-noDuration: "A la troisième ligne, vous n'avez pas spécifié la durée de location de la région"
|
||||
setup-wrongDuration: "Le temps spécifié n'est pas au bon format. Exemple: 1 day"
|
||||
setup-noPrice: "A la quatrième ligne, vous n'avez pas spécifié le prix"
|
||||
setup-wrongPrice: "Vous n'avez pas indiqué un prix correcte, utilisez un nombre entier"
|
||||
setup-rentSuccess: "La location de la région %0% est correctement configurée"
|
||||
setup-buySuccess: "L'achat de la région %0% est correctement configuré"
|
||||
setup-noPermissionRent: "Vous n'avez pas la permission de mettre en place la location de régions"
|
||||
setup-noPermissionBuy: "Vous n'avez pas la permission de mettre en place l'achat de régions"
|
||||
setup-couldNotDetect: "Multiples régions trouvées avec la même priorité et/ou parent/enfant relation. Spécifiez en un sur la deuxième ligne. (2 des régions trouvées: %0% et %1%)"
|
||||
destroy-noPermissionRent: "Vous n'avez pas la permission de détruire le panneau de location d'une région"
|
||||
destroy-noPermissionBuy: "Vous n'avez pas la permission de détruire le panneau de vente d'une région"
|
||||
destroy-successRent: "Location de %0% supprimé"
|
||||
destroy-successBuy: "Achat de %0% supprimé"
|
||||
setrestore-noPermission: "Vous n'avez pas la permission de restaurer les paramètres."
|
||||
setrestore-notRegistered: "'%0%' n'est pas enregistré."
|
||||
setrestore-invalidSetting: "'%0%' est invalide. Doit être true, false ou general."
|
||||
setrestore-success: "Paramètre de restauration défini de %0% à %1% avec succès."
|
||||
setrestore-successProfile: "Paramètre de restauration défini de %0% à %1% et le profil à '%2%' avec succès."
|
||||
setprice-noPermission: "Vous n'avez pas la permission de changer le prix d'une région."
|
||||
setprice-help: "/as setprice <price> [region], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
setprice-notRegistered: "%0% n'est pas enregistrée dans AreaShop."
|
||||
setprice-wrongPrice: "'%0%' n'est pas un prix valide."
|
||||
setprice-successRent: "Prix de la région '%0%' changé de %1% à %2%."
|
||||
setprice-successBuy: "Prix de la région '%0%' changé à %1%."
|
||||
setduration-noPermission: "Vous n'avez pas la permission de changer le temps d'une location."
|
||||
setduration-help: "/as setduration <amount> <identifier> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne précisez pas quelle région doit être utilisée."
|
||||
setduration-notRegistered: "%0% n'est pas enregistrée comme à louer."
|
||||
setduration-wrongAmount: "'%0%' n'est pas un montant valide, utilisez un nombre entier."
|
||||
setduration-wrongFormat: "'%0%' n'est pas un format de temps valide, regardez la documentation de Bukkit."
|
||||
setduration-success: "Temps de location de la région '%0%' changé à '%1%'."
|
||||
setup-noRegion: "Vous n'avez pas spécifié de région à la seconde ligne."
|
||||
setup-wrongRegion: "La région que vous avez spécifiée n'existe pas."
|
||||
setup-alreadyRentSign: "La région que vous avez spécifiée possède déjà un panneau de location."
|
||||
setup-alreadyBuySign: "La région que vous avez spécifiée possède déjà un panneau de vente."
|
||||
setup-noDuration: "A la troisième ligne, vous n'avez pas spécifié la durée de location de la région."
|
||||
setup-wrongDuration: "Le temps spécifié n'est pas au bon format. Exemple : 1 day."
|
||||
setup-noPrice: "A la quatrième ligne, vous n'avez pas spécifié le prix."
|
||||
setup-wrongPrice: "Vous n'avez pas indiqué un prix correct, utilisez un nombre entier."
|
||||
setup-rentSuccess: "La location de la région '%0%' est correctement configurée."
|
||||
setup-buySuccess: "L'achat de la région '%0%' est correctement configuré."
|
||||
setup-noPermissionRent: "Vous n'avez pas la permission de mettre en place la location de régions."
|
||||
setup-noPermissionBuy: "Vous n'avez pas la permission de mettre en place l'achat de régions."
|
||||
setup-couldNotDetect: "Multiples régions trouvées avec la même priorité et/ou étant de même nature : parent ou enfant. Spécifiez-en une sur la deuxième ligne. (2 des régions trouvées: %0% et %1%)."
|
||||
destroy-noPermissionRent: "Vous n'avez pas la permission de détruire le panneau de location d'une région."
|
||||
destroy-noPermissionBuy: "Vous n'avez pas la permission de détruire le panneau de vente d'une région."
|
||||
destroy-successRent: "Location de '%0%' supprimée."
|
||||
destroy-successBuy: "Achat de '%0%' supprimé."
|
||||
teleport-help: "/as tp <region> [sign]"
|
||||
teleport-noRentOrBuy: "La région '%0%' n'est pas enregistré comme location ou achat"
|
||||
teleport-noPermission: "Vous n'avez pas la permission de vous téléporter à votre région"
|
||||
teleport-noPermissionOther: "Vous n'avez pas la permission de vous téléporter à une région qui ne vous appartient pas"
|
||||
teleport-noPermissionSign: "Vous n'avez pas la permission de vous téléporter à la pancarte de votre région"
|
||||
teleport-noPermissionOtherSign: "Vous n'avez pas la permission de vous téléporter aux pancartes des régions que vous ne possédez pas"
|
||||
teleport-noPermissionFriend: "Vous n'avez pas la permission de vous téléporter aux régions où vous êtes ajouté en ami"
|
||||
teleport-noPermissionFriendSign: "Vous n'avez pas la permission de vous téléporter à la pancarte d'une région où vous êtes ajouté en ami"
|
||||
teleport-success: "Vous avez été téléporté à %0%"
|
||||
teleport-successSign: "Vous vous téléportez à la pancarte de %0%"
|
||||
teleport-noSafe: "Aucune position sécurisé trouvé dans la région %0%. Pas de point restant, ou tentatives maximales dépassées. (%1%/%2%)"
|
||||
teleport-blocked: "Vous ne pouvez pas vous téléporter car la position est en dehors de la région et vous êtes obligé de vous téléporter à l'intérieur"
|
||||
setteleport-help: "/as settp [region] [reset], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
setteleport-noPermission: "Vous n'avez pas la permission de définir un point de téléportation"
|
||||
setteleport-noPermissionOther: "Vous n'avez pas la permission de définir l'emplacement de téléportation d'une région que vous ne possédez pas"
|
||||
setteleport-noRentOrBuy: "La région '%0%' n'est pas enregistré comme location ou achat"
|
||||
setteleport-success: "Lieu de téléportation de %0% défini"
|
||||
setteleport-notInside: "Le lieu doit se trouver dans votre région"
|
||||
setteleport-reset: "le lieu de téléportation de %0% a été reset"
|
||||
teleport-noRentOrBuy: "La région '%0%' n'est pas enregistrée comme location ou achat."
|
||||
teleport-noPermission: "Vous n'avez pas la permission de vous téléporter à votre région."
|
||||
teleport-noPermissionOther: "Vous n'avez pas la permission de vous téléporter à une région qui ne vous appartient pas."
|
||||
teleport-noPermissionSign: "Vous n'avez pas la permission de vous téléporter à la pancarte de votre région."
|
||||
teleport-noPermissionOtherSign: "Vous n'avez pas la permission de vous téléporter aux pancartes des régions que vous ne possédez pas."
|
||||
teleport-noPermissionFriend: "Vous n'avez pas la permission de vous téléporter aux régions où vous êtes ajouté en ami."
|
||||
teleport-noPermissionFriendSign: "Vous n'avez pas la permission de vous téléporter à la pancarte d'une région où vous êtes ajouté en ami."
|
||||
teleport-success: "Vous avez été téléporté à '%0%'."
|
||||
teleport-successSign: "Vous vous téléportez à la pancarte de '%0%'."
|
||||
teleport-noSafe: "Aucune position sécurisée trouvée dans la région '%0%'. Pas de point restant, ou tentatives maximales dépassées (%1%/%2%)."
|
||||
teleport-blocked: "Vous ne pouvez pas vous téléporter car la position est en dehors de la région et vous êtes obligé de vous téléporter à l'intérieur."
|
||||
setteleport-help: "/as settp [region] [reset], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
setteleport-noPermission: "Vous n'avez pas la permission de définir un point de téléportation."
|
||||
setteleport-noPermissionOther: "Vous n'avez pas la permission de définir l'emplacement de téléportation d'une région que vous ne possédez pas."
|
||||
setteleport-noRentOrBuy: "La région '%0%' n'est pas enregistrée comme location ou achat."
|
||||
setteleport-success: "Lieu de téléportation de '%0%' défini."
|
||||
setteleport-notInside: "Le lieu doit se trouver dans votre région."
|
||||
setteleport-reset: "Le lieu de téléportation de '%0%' a été réinitialisé."
|
||||
find-help: "/as find <buy|rent> [prix maximum] [group]"
|
||||
find-noPermission: "Vous n'avez pas la permission de rechercher des régions et de vous y téléporter"
|
||||
find-success: "Trouvé une région %0%: %1%, en recherchant avec un prix maximum de: %2%%3%"
|
||||
find-successMax: "Trouvé une région %0%: %1%, en recherchant avec un prix maximum de: %2%%3%"
|
||||
find-wrongMaxPrice: "le prix maximum n'est pas un nombre valide: %0%"
|
||||
find-wrongGroup: "Le groupe spécifié n'existe pas: %0%"
|
||||
find-noneFound: "Aucune région %0% trouvée pour votre recharge avec un prix maximum de: %1%%2%"
|
||||
find-noneFoundMax: "Aucune région %0% trouvée en cherchant à un prix maximum de %1%%2%"
|
||||
find-onlyInGroup: ", recherche de régions uniquement dans le groupe: %0%"
|
||||
groupadd-help: "/as groupadd <group> [region], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
groupadd-noPermission: "Vous n'avez pas la permission d'ajouter des régions aux groupes"
|
||||
groupadd-noRegion: "la région spécifiée n'est pas enregistré: %0%"
|
||||
groupadd-success: "La région %0% a été ajouté au groupe '%1%'. ce groupe a maintenant %2% membre(s)"
|
||||
groupadd-failed: "La région %0% est déjà membre du groupe '%1%'"
|
||||
groupadd-weSuccess: "Ajouté au groupe %0%: &7%1%"
|
||||
groupadd-weFailed: "Nous étions déjà dans le groupe %0%: &7%1%"
|
||||
groupdel-help: "/as groupdel <group> [region], Si non spécifié, cible la région dans laquelle vous vous trouvez"
|
||||
groupdel-noPermission: "Vous n'avez pas la permission de supprimer des régions depuis les groupes"
|
||||
groupdel-noRegion: "La région spécifiée n'est pas enregistré: %0%"
|
||||
groupdel-success: "La région %0% a été supprimé du groupe '%1%', ce groupe a maintenant %2% membre(s)"
|
||||
groupdel-failed: "La région %0% n'est pas membre du groupe '%1%'"
|
||||
groupdel-weSuccess: "Supprimé du groupe %0%: &7%1%"
|
||||
groupdel-weFailed: "Nous ne sommes pas dans le groupe %0% de toute façon: &7%1%"
|
||||
grouplist-noPermission: "Vous n'avez pas l'autorisation d'afficher les groupes enregistrés"
|
||||
grouplist-noGroups: "Il n'y a actuellement aucun groupe enregistré"
|
||||
grouplist-success: "les groupes suivants sont enregistrés: &7%0%"
|
||||
find-noPermission: "Vous n'avez pas la permission de rechercher des régions et de vous y téléporter."
|
||||
find-success: "Trouvé une région %0% : %1%, en recherchant avec un prix maximum de: %2%%3%."
|
||||
find-successMax: "Trouvé une région %0% : %1%, en recherchant avec un prix maximum de: %2%%3%."
|
||||
find-wrongMaxPrice: "Le prix maximum n'est pas un nombre valide : %0%."
|
||||
find-wrongGroup: "Le groupe spécifié n'existe pas : %0%."
|
||||
find-noneFound: "Aucune région %0% trouvée ayant pour un prix maximum : %1%%2%."
|
||||
find-noneFoundMax: "Aucune région %0% trouvée en cherchant à un prix maximum de %1%%2%."
|
||||
find-onlyInGroup: ", recherche de régions uniquement dans le groupe: %0%."
|
||||
groupadd-help: "/as groupadd <group> [region], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
groupadd-noPermission: "Vous n'avez pas la permission d'ajouter des régions aux groupes."
|
||||
groupadd-noRegion: "La région spécifiée n'est pas enregistrée : %0%."
|
||||
groupadd-success: "La région '%0%' a été ajoutée au groupe '%1%'. Ce groupe a maintenant %2% membre(s)."
|
||||
groupadd-failed: "La région '%0%' est déjà membre du groupe '%1%'."
|
||||
groupadd-weSuccess: "Ajouté au groupe %0% : &7%1%."
|
||||
groupadd-weFailed: "Nous étions déjà dans le groupe %0% : &7%1%."
|
||||
groupdel-help: "/as groupdel <group> [region], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
|
||||
groupdel-noPermission: "Vous n'avez pas la permission de supprimer des régions depuis les groupes."
|
||||
groupdel-noRegion: "La région spécifiée n'est pas enregistrée : %0%."
|
||||
groupdel-success: "La région '%0%' a été supprimée du groupe '%1%', ce groupe a maintenant %2% membre(s)."
|
||||
groupdel-failed: "La région '%0%' n'est pas membre du groupe '%1%'."
|
||||
groupdel-weSuccess: "Supprimée du groupe %0% : &7%1%."
|
||||
groupdel-weFailed: "Nous ne sommes de toute façon pas dans le groupe %0% : &7%1%."
|
||||
grouplist-noPermission: "Vous n'avez pas l'autorisation d'afficher les groupes enregistrés."
|
||||
grouplist-noGroups: "Il n'y a actuellement aucun groupe enregistré."
|
||||
grouplist-success: "Les groupes suivants sont enregistrés : &7%0%."
|
||||
groupinfo-help: "/as groupinfo <group>"
|
||||
groupinfo-noPermission: "Vous n'avez pas la permission d'afficher des informations sur un groupe"
|
||||
groupinfo-noGroup: "Il n'y a pas de groupe enregistré sous le nom '%0%', utilisez /as grouplist pour vérifier les groupes"
|
||||
groupinfo-members: "Les régions suivantes sont membres du groupe %0%: &7%1%"
|
||||
groupinfo-noMembers: "Le groupe %0% ne possède aucun membre"
|
||||
groupinfo-noPermission: "Vous n'avez pas la permission d'afficher des informations sur un groupe."
|
||||
groupinfo-noGroup: "Il n'y a pas de groupe enregistré sous le nom '%0%', utilisez /as grouplist pour vérifier les groupes."
|
||||
groupinfo-members: "Les régions suivantes sont membres du groupe %0% : &7%1%."
|
||||
groupinfo-noMembers: "Le groupe %0% ne possède aucun membre."
|
||||
schemevent-help: "/as schemevent <region> <created|deleted|rented|unrented|bought|sold>"
|
||||
schemevent-noRegion: "La région spécifiée n'est pas enregistré: %0%"
|
||||
schemevent-wrongEvent: "L'évent spécifié '%0%' n'existe pas, utilisez un des suivants: &7%1%"
|
||||
schemevent-success: "L'évènement '%0%' a été activé dans la région %1%"
|
||||
schemevent-noPermission: "Vous n'avez pas la permission de déclencher des événements schématiques"
|
||||
schemevent-noRegion: "La région spécifiée n'est pas enregistrée : %0%."
|
||||
schemevent-wrongEvent: "L'évent spécifié '%0%' n'existe pas, utilisez un des suivants: &7%1%."
|
||||
schemevent-success: "L’événement '%0%' a été activé dans la région '%1%'."
|
||||
schemevent-noPermission: "Vous n'avez pas la permission de déclencher des événements schématiques."
|
||||
add-help: "/as add <rent|buy> [region] [world]"
|
||||
add-noPermission: "Vous n'avez pas la permission d'ajouter une région à AreaShop"
|
||||
add-success: "Ajouté comme %0%: &7%1%"
|
||||
add-failed: "Déjà enregistré: &7%0%"
|
||||
add-specifyWorld: "Spécifiez le monde de la région lors de l'utilisation de la console"
|
||||
add-incorrectWorld: "Le monde '%0%' est introuvable, essayez de nouveau (Attention à la casse)"
|
||||
add-noRegion: "La région '%0%' n'existe pas dans ce monde"
|
||||
del-noRegion: "Le région '%0%' n'est pas enregistré à AreaShop"
|
||||
del-noPermission: "Vous n'avez pas la permission de supprimer des régions"
|
||||
del-success: "Régions supprimées: &7%0%"
|
||||
del-failed: "Pas de permission pour supprimer, ou pas enregistré: &7%0%"
|
||||
add-noPermission: "Vous n'avez pas la permission d'ajouter une région à AreaShop."
|
||||
add-success: "Ajoutée comme %0% : &7%1%."
|
||||
add-failed: "Déjà enregistrée : &7%0%."
|
||||
add-specifyWorld: "Spécifiez le monde de la région lors de l'utilisation de la console."
|
||||
add-incorrectWorld: "Le monde '%0%' est introuvable, essayez de nouveau (attention à la casse)."
|
||||
add-noRegion: "La région '%0%' n'existe pas dans ce monde."
|
||||
del-noRegion: "Le région '%0%' n'est pas enregistrée à AreaShop."
|
||||
del-noPermission: "Vous n'avez pas la permission de supprimer des régions."
|
||||
del-success: "Régions supprimées : &7%0%."
|
||||
del-failed: "Pas de permission pour supprimer, ou pas enregistrée: &7%0%."
|
||||
addsign-help: "/as addsign [region] [profile]"
|
||||
addsign-noSign: "Vous ne regardez pas de panneau"
|
||||
addsign-noRegion: "La région '%0%' n'a pas été trouvé"
|
||||
addsign-noRegions: "Aucune région trouvé autour du panneau"
|
||||
addsign-couldNotDetect: "Plusieurs régions ont été trouvées à promixité du panneau. Spécifiez la région en argument supplémentaire. (2 des régions trouvées: %0% et %1%)"
|
||||
addsign-couldNotDetectSign: "Plusieurs régions ont été trouvées à proximité du panneau. Spécifiez la région à la deuxième ligne. (2 des régions trouvées: %0% et %1%)"
|
||||
addsign-wrongProfile: "le profil spécifié n'existe pas. utilisez un des suivants (vérifier la configuration): &7%0%"
|
||||
addsign-success: "Le panneau a été ajouté à %0%"
|
||||
addsign-successProfile: "Le panneau a été ajouté à %0% avec le profil %1%"
|
||||
addsign-alreadyRegistered: "Ce panneau a déjà été enregistré pour la région %0%"
|
||||
addsign-noPermission: "Vous n'avez pas la permission d'ajouter un panneau"
|
||||
delsign-noSign: "Vous ne regardez pas un panneau"
|
||||
delsign-noPermission: "Vous n'avez pas la permission de supprimer un panneau"
|
||||
delsign-noRegion: "Ce signe n'appartient pas à une région AreaShop"
|
||||
delsign-success: "Ce panneau a été supprimé de la région %0%"
|
||||
me-noPermission: "Vous n'avez pas la permission de voir quelle(s) région(s) vous possédez"
|
||||
me-notAPlayer: "Vous n'êtes pas un joueur vous ne pouvez donc pas avoir de régions"
|
||||
me-noRentRegions: "Vous ne louez aucune région"
|
||||
me-noBuyRegions: "Vous n'avez acheté aucune région"
|
||||
me-rentRegions: "Vous louez les régions suivantes:"
|
||||
me-buyRegions: "Vous avez acheté les régions suivantes:"
|
||||
addsign-noSign: "Vous ne regardez pas de panneau."
|
||||
addsign-noRegion: "La région '%0%' n'a pas été trouvée."
|
||||
addsign-noRegions: "Aucune région trouvée autour du panneau."
|
||||
addsign-couldNotDetect: "Plusieurs régions ont été trouvées à proximité du panneau. Spécifiez la région en argument supplémentaire (2 des régions trouvées: %0% et %1%)."
|
||||
addsign-couldNotDetectSign: "Plusieurs régions ont été trouvées à proximité du panneau. Spécifiez la région à la deuxième ligne (2 des régions trouvées: %0% et %1%)."
|
||||
addsign-wrongProfile: "Le profil spécifié n'existe pas. Utilisez un des suivants (vérifier la configuration): &7%0%."
|
||||
addsign-success: "Le panneau a été ajouté à %0%."
|
||||
addsign-successProfile: "Le panneau a été ajouté à %0% avec le profil %1%."
|
||||
addsign-alreadyRegistered: "Ce panneau a déjà été enregistré pour la région '%0%'."
|
||||
addsign-noPermission: "Vous n'avez pas la permission d'ajouter un panneau."
|
||||
delsign-noSign: "Vous ne regardez pas un panneau."
|
||||
delsign-noPermission: "Vous n'avez pas la permission de supprimer un panneau."
|
||||
delsign-noRegion: "Ce signe n'appartient pas à une région AreaShop."
|
||||
delsign-success: "Ce panneau a été supprimé de la région '%0%'."
|
||||
me-noPermission: "Vous n'avez pas la permission de voir quelle(s) région(s) vous possédez."
|
||||
me-notAPlayer: "Vous n'êtes pas un joueur. Vous ne pouvez donc pas avoir de régions."
|
||||
me-noRentRegions: "Vous ne louez aucune région."
|
||||
me-noBuyRegions: "Vous n'avez acheté aucune région."
|
||||
me-rentRegions: "Vous louez les régions suivantes :"
|
||||
me-buyRegions: "Vous avez acheté les régions suivantes :"
|
||||
me-rentLine: "&2&l►&r %region% jusqu'au %until% &7(%timeleft% restant)"
|
||||
me-buyLine: "&2&l►&r %region%"
|
||||
me-noFriendRegions: "Vous n'avez pas été ajouté en ami sur une région"
|
||||
me-friendRegions: "Vous avez été ajouté en ami dans les régions suivantes:"
|
||||
me-friendLine: "&2&l►&r %region% &7(propriétaire: %player%)"
|
||||
setowner-help: "/as setowner <joueur> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas"
|
||||
setowner-noPermission: "Vous n'avez pas la permisssion de définir le propriétaire d'une région"
|
||||
setowner-noPermissionRent: "Vous n'avez pas la permisssion de définir le propriétaire de régions à louer"
|
||||
setowner-noPermissionBuy: "Vous n'avez pas la permisssion de définir le propriétaire de régions à acheter"
|
||||
setowner-notRegistered: "La région n'est pas enregistrée, le propriétaire ne peut être défini"
|
||||
setowner-noPlayer: "UUID du joueur introuvable: %0%"
|
||||
setowner-succesRent: "Propriété de la région %region% modifiée avec succès. Elle appartient maintenant à %player% et est louée jusqu'au %until% (%timeleft% restant)"
|
||||
setowner-succesRentExtend: "Le propriétaire était déjà %player%, location prolongée de '%duration%', maintenant louée jusqu'au %until% (%timeleft% restant%)"
|
||||
setowner-succesBuy: "Propriétaire de la région %region% changé avec succès. Elle appartient maintenant à %player%"
|
||||
resell-help: "/as resell <prix> <région>, la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas"
|
||||
resell-wrongPrice: "'%0%' n'est pas un prix valide"
|
||||
resell-notRegistered: "%0% n'est pas enregistrée dans AreaShop"
|
||||
resell-noRegionFound: "Aucune région AreaShop n'a pu être trouvée à votre emplacement, essayez de spécifier la région en argument"
|
||||
resell-notBought: "Vous ne pouvez pas revendre la région %region%, elle n'est pas encore achetée"
|
||||
resell-success: "%region% a été mis en revente avec succès pour un prix de %resellprice%"
|
||||
resell-noPermission: "Vous n'avez pas la permisssion de mettre votre région en revente"
|
||||
resell-noPermissionOther: "Vous n'avez pas la permisssion de mettre des régions en revente"
|
||||
stopresell-help: "/as stropresell [région], la région où vous vous trouvez sera utilisée si vous ne spécifiez pas"
|
||||
stopresell-notRegistered: "%0% n'est pas enregistrée dans AreaShop"
|
||||
stopresell-noRegionFound: "Aucune région AreaShop n'a été trouvée à votre emplacement, essayez de spécifier en argument"
|
||||
stopresell-notResell: "Vous ne pouvez pas arrêter la revente de la région %region% car elle n'est pas en vente"
|
||||
stopresell-success: "%region% n'est plus en revente"
|
||||
stopresell-noPermission: "Vous n'avez pas la permission de retirer votre région de la vente"
|
||||
stopresell-noPermissionOther: "Vous n'avez pas la permisssion de retirer les régions de la vente"
|
||||
addfriend-help: "/as addfriend <joueur> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas"
|
||||
addfriend-noPermissionOther: "Vous n'avez pas la permission d'ajouter des gens en ami dans une région qui n'est pas la vôtre"
|
||||
addfriend-noPermission: "Vous n'avez pas la permission d'ajouter en ami des gens à votre région"
|
||||
addfriend-successOther: "%0% a été ajouté en ami a la région %1%"
|
||||
addfriend-success: "%0% a été ajouté ajouté en ami à votre région %1%"
|
||||
addfriend-alreadyAdded: "%0% est déjà ami avec cette région"
|
||||
addfriend-self: "Ajouter le propriétaire de la région en ami n'aurait aucune utilité"
|
||||
addfriend-noOwner: "Vous ne pouvez pas ajouter d'amis à une région sans propriétaire"
|
||||
delfriend-help: "/as delfriend <joueur> [région], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas"
|
||||
delfriend-noPermissionOther: "Vous n'avez pas la permission de supprimer des amis à une région n'étant pas la votre"
|
||||
delfriend-noPermission: "Vous n'avez pas la permission de supprimer des amis de votre région"
|
||||
delfriend-successOther: "%0% a été supprimé des amis de la région %1%"
|
||||
delfriend-success: "%0% a été supprimé des amis de votre région %1%"
|
||||
delfriend-notAdded: "%0% n'est pas dans les amis de cette région"
|
||||
delfriend-noOwner: "Vous ne pouvez pas supprimer les amis d'une région sans propriétaire"
|
||||
timeleft-years: "%0% années"
|
||||
timeleft-months: "%0% mois"
|
||||
timeleft-days: "%0% jours"
|
||||
timeleft-hours: "%0% heures"
|
||||
timeleft-minutes: "%0% minutes"
|
||||
timeleft-second: "%0% seconde"
|
||||
timeleft-seconds: "%0% secondes"
|
||||
me-noFriendRegions: "Vous n'avez pas été ajouté en ami sur une région."
|
||||
me-friendRegions: "Vous avez été ajouté en ami dans les régions suivantes :"
|
||||
me-friendLine: "&2&l►&r %region% &7(propriétaire : %player%)"
|
||||
setowner-help: "/as setowner <joueur> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
|
||||
setowner-noPermission: "Vous n'avez pas la permission de définir le propriétaire d'une région."
|
||||
setowner-noPermissionRent: "Vous n'avez pas la permission de définir le propriétaire de régions à louer."
|
||||
setowner-noPermissionBuy: "Vous n'avez pas la permission de définir le propriétaire de régions à acheter."
|
||||
setowner-notRegistered: "La région n'est pas enregistrée, le propriétaire ne peut être défini."
|
||||
setowner-noPlayer: "UUID du joueur introuvable : %0%."
|
||||
setowner-succesRent: "Propriétaire de la région '%region%' modifié avec succès. Elle appartient maintenant à %player% et est louée jusqu'au %until% (%timeleft% restant)."
|
||||
setowner-succesRentExtend: "Le propriétaire était déjà %player%, location prolongée de '%duration%', maintenant louée jusqu'au %until% (%timeleft% restant%)."
|
||||
setowner-succesBuy: "Propriétaire de la région '%region%' changé avec succès. Elle appartient maintenant à %player%."
|
||||
resell-help: "/as resell <prix> <région>, la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
|
||||
resell-wrongPrice: "'%0%' n'est pas un prix valide."
|
||||
resell-notRegistered: "'%0%' n'est pas enregistrée dans AreaShop."
|
||||
resell-noRegionFound: "Aucune région AreaShop n'a pu être trouvée à votre emplacement, essayez de spécifier la région en argument."
|
||||
resell-notBought: "Vous ne pouvez pas revendre la région '%region%', elle n'est pas encore achetée."
|
||||
resell-success: "'%region%' a été mise en revente avec succès pour un prix de %resellprice%."
|
||||
resell-noPermission: "Vous n'avez pas la permission de mettre votre région en revente."
|
||||
resell-noPermissionOther: "Vous n'avez pas la permission de mettre des régions en revente."
|
||||
stopresell-help: "/as stropresell [région], la région où vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
|
||||
stopresell-notRegistered: "'%0%' n'est pas enregistrée dans AreaShop."
|
||||
stopresell-noRegionFound: "Aucune région AreaShop n'a été trouvée à votre emplacement, essayez de la spécifier en argument."
|
||||
stopresell-notResell: "Vous ne pouvez pas arrêter la revente de la région '%region%' car elle n'est pas en vente."
|
||||
stopresell-success: "'%region%' n'est plus en revente."
|
||||
stopresell-noPermission: "Vous n'avez pas la permission de retirer votre région de la vente."
|
||||
stopresell-noPermissionOther: "Vous n'avez pas la permission de retirer les régions de la vente."
|
||||
addfriend-help: "/as addfriend <joueur> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
|
||||
addfriend-noPermissionOther: "Vous n'avez pas la permission d'ajouter des gens en amis dans une région qui n'est pas la vôtre."
|
||||
addfriend-noPermission: "Vous n'avez pas la permission d'ajouter en amis des gens à votre région."
|
||||
addfriend-successOther: "%0% a été ajouté en ami a la région '%1%'."
|
||||
addfriend-success: "%0% a été ajouté ajouté en ami à votre région '%1%'."
|
||||
addfriend-alreadyAdded: "%0% est déjà ami avec cette région."
|
||||
addfriend-self: "Ajouter le propriétaire de la région en ami n'aurait aucune utilité."
|
||||
addfriend-noOwner: "Vous ne pouvez pas ajouter d'amis à une région sans propriétaire."
|
||||
delfriend-help: "/as delfriend <joueur> [région], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
|
||||
delfriend-noPermissionOther: "Vous n'avez pas la permission de supprimer des amis à une région n'étant pas la vôtre."
|
||||
delfriend-noPermission: "Vous n'avez pas la permission de supprimer des amis de votre région."
|
||||
delfriend-successOther: "%0% a été supprimé de la liste d'amis de la région '%1%'."
|
||||
delfriend-success: "%0% a été supprimé des amis de votre région '%1%'."
|
||||
delfriend-notAdded: "%0% n'est pas dans les amis de cette région."
|
||||
delfriend-noOwner: "Vous ne pouvez pas supprimer les amis d'une région sans propriétaire."
|
||||
timeleft-years: "%0% années."
|
||||
timeleft-months: "%0% mois."
|
||||
timeleft-days: "%0% jours."
|
||||
timeleft-hours: "%0% heures."
|
||||
timeleft-minutes: "%0% minutes."
|
||||
timeleft-second: "%0% seconde."
|
||||
timeleft-seconds: "%0% secondes."
|
||||
timeleft-ended: "Expiré"
|
||||
greeting-forrent: "%region% peut être louée pour %price% par %duration%"
|
||||
greeting-rented: "%region% est louée par %player% jusqu'au %until%"
|
||||
greeting-forsale: "%region% peut être achetée pour %price%"
|
||||
greeting-bought: "%region% a été achetée par %player%"
|
||||
greeting-resale: "%region% peut être achetée pour %resaleprice% à %player%"
|
||||
greeting-forrent: "La région '%region%' peut être louée pour %price% pour une durée de %duration%."
|
||||
greeting-rented: "La région '%region%' est louée par %player% jusqu'au %until%."
|
||||
greeting-forsale: "La région '%region%' peut être achetée pour %price%."
|
||||
greeting-bought: "La région '%region%' est la propriété de %player%."
|
||||
greeting-resale: "La région '%region%' peut être achetée pour %resaleprice% à %player%."
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
|
||||
# ║ Language: Dutch (Nederlands), Version: V2.1.0, Percentage translated: 100%, author(s): NLThijs48 ║
|
||||
# ║ Language: Dutch (Nederlands), Version: V2.1.2, Percentage translated: 100%, author(s): NLThijs48 ║
|
||||
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
|
||||
# ║ 1: Make a copy of this file ║
|
||||
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
|
||||
@@ -346,4 +346,4 @@ greeting-forrent: "%region% kan worden gehuurd voor %price% per %duration%"
|
||||
greeting-rented: "%region% is gehuurd door %player% tot %until%"
|
||||
greeting-forsale: "%region% kan worden gekocht voor %price%"
|
||||
greeting-bought: "%region% is gekocht door %player%"
|
||||
greeting-resale: "%region% kan worden gekocht voor %resaleprice% van %player%"
|
||||
greeting-resale: "%region% kan worden gekocht voor %resaleprice% van %player%"
|
||||
+8
-1
@@ -1,6 +1,6 @@
|
||||
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
|
||||
# ║ Language: Polish (Polski), Version: V2.1.0, Percentage translated: 63%, author(s): Rexlu ║
|
||||
# ║ Language: Polish (Polski), Version: V2.1.2, Percentage translated: 65%, author(s): Rexlu ║
|
||||
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
|
||||
# ║ 1: Make a copy of this file ║
|
||||
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
|
||||
@@ -13,6 +13,8 @@ cmd-onlyByPlayer: "Ta komenda moze byc uzywana tylko przez gracza"
|
||||
cmd-weOnlyByPlayer: "Uzywanie zaznaczenia WorldEdit jest mozliwe tylko podczas bycia graczem, sprecyzuj nazwe miejsca jako dodatkowy argument"
|
||||
cmd-noSelection: "Nie zaznaczyles terenu pluginem WorldEdit"
|
||||
cmd-noRegionsFound: "Nie znaleziono miejsc AreShop w zaznaczeniu"
|
||||
cmd-noRegionsAtLocation: "Brak regionow w twojej lokalizacji, uzyj nazwy regionu jako argumentu."
|
||||
cmd-moreRegionsAtLocation: "Wiecej niz jeden region znaleziono w twojej lokalizacji, uzyj nazwy regionu jako argumentu."
|
||||
help-header: "Strona pomocy, komendy ktore moga zostac uzzte"
|
||||
help-alias: "Aby wyswietlic ta strone: /areashop, /as"
|
||||
help-help: "&6/as help &7-&r Pokazuje stone pomocy"
|
||||
@@ -26,6 +28,9 @@ help-sellOwn: "&6/as sell &7-&r Sprzedaje miejsce"
|
||||
help-updaterents: "&6/as updaterents &7-&r Aktualizuje wszystkie miejsca wynajmu oraz tabliczki"
|
||||
help-updatebuys: "&6/as updatebuys &7-&r Aktualizuje wszystkie miejsca do kupienia oraz tabliczki"
|
||||
help-reload: "&6/as reload &7-&r Laduje ponownie ustawienia oraz pliki jezykowe"
|
||||
help-setrestore: "&6/as setrestore &7-&r Wlacz/wylacz przywracanie oraz wybierz profil"
|
||||
help-setprice: "&6/as setprice &7-&r Zmiana ceny regionu"
|
||||
help-setduration: "&6/as setduration &7-&r Zmiana czasu wynajmu"
|
||||
help-teleport: "&6/as tp &7-&r Teleportuje do kupionych/wynajetych miejsc"
|
||||
help-teleportAll: "&6/as tp &7-&r Teleportuje do wynajmowanego/kupionego miejsca"
|
||||
help-setteleport: "&6/as settp &7-&r Ustawia koordynaty teleportacji dla kupionego/wynajetego miejsca"
|
||||
@@ -35,6 +40,7 @@ help-groupadd: "&6/as groupadd &7-&r Dodaje miejsce do grupy"
|
||||
help-groupdel: "&6/as groupdel &7-&r Usuwa miejsce z grupy"
|
||||
help-grouplist: "&6/as grouplist &7-&r Wyswietla wszystkie grupy"
|
||||
help-groupinfo: "&6/as groupinfo &7-&r Wyswietla informacje o grupie"
|
||||
help-schemevent: "&6/as schemevent &7-&r Ustawianie schematu dla regionu"
|
||||
help-add: "&6/as add &7-&r Dodaje region do wynajmu lub zakupu"
|
||||
help-del: "&6/as del &7-&r Usuwa dane miejsce z AreaShop"
|
||||
help-addsign: "&6/as addsign &7-&r Dodaje tabliczke do istniejacego miejsca"
|
||||
@@ -224,3 +230,4 @@ greeting-forrent: "%region% moze zostac wynajety za %price% za %duration%"
|
||||
greeting-rented: "%region% jest wynajety graczowi %player% do %until%"
|
||||
greeting-forsale: "%region% moze zostac kupiony za %price%"
|
||||
greeting-bought: "%region% zostal zakupiony przez gracza %player%"
|
||||
|
||||
+6
-5
@@ -1,6 +1,6 @@
|
||||
name: AreaShop
|
||||
main: nl.evolutioncoding.areashop.AreaShop
|
||||
version: 2.1.1
|
||||
version: 2.1.4
|
||||
depend: [Vault, WorldGuard, WorldEdit]
|
||||
softdepend: [Multiverse-Core]
|
||||
author: NLThijs48
|
||||
@@ -8,9 +8,7 @@ website: http://dev.bukkit.org/bukkit-plugins/regionbuyandrent/
|
||||
commands:
|
||||
AreaShop:
|
||||
description: For all commands use /as help
|
||||
usage: /AreaShop or /AS
|
||||
permission: areashop.help
|
||||
permission-message: You don't have <permission>
|
||||
usage: AreaShop has not started correctly, check the console and correct any errors
|
||||
aliases: [as]
|
||||
permissions:
|
||||
areashop.*:
|
||||
@@ -53,6 +51,7 @@ permissions:
|
||||
areashop.stopresellall: true
|
||||
areashop.addfriendall: true
|
||||
areashop.delfriendall: true
|
||||
areashop.notifyupdate: true
|
||||
areashop.help:
|
||||
description: Allows you to see the help pages
|
||||
default: true
|
||||
@@ -206,4 +205,6 @@ permissions:
|
||||
areashop.delfriendall:
|
||||
description: Allows you to delete friends from all regions
|
||||
default: op
|
||||
|
||||
areashop.notifyupdate:
|
||||
description: Will notify this player when an update is available
|
||||
default: op
|
||||
@@ -7,6 +7,8 @@ import java.util.UUID;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
import nl.evolutioncoding.areashop.Updater.UpdateResult;
|
||||
import nl.evolutioncoding.areashop.Updater.UpdateType;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@@ -38,6 +40,8 @@ public final class AreaShop extends JavaPlugin {
|
||||
private CommandManager commandManager = null;
|
||||
private boolean debug = false;
|
||||
private String chatprefix = null;
|
||||
private Updater updater = null;
|
||||
private boolean updateAvailable = false;
|
||||
|
||||
/* Folders and file names */
|
||||
public static final String languageFolder = "lang";
|
||||
@@ -101,6 +105,11 @@ public final class AreaShop extends JavaPlugin {
|
||||
worldGuard = (WorldGuardPlugin)plugin;
|
||||
}
|
||||
|
||||
if(getWorldGuard() != null && getWorldGuard().getDescription().getVersion().startsWith("5.")) {
|
||||
getLogger().severe("This version of AreaShop is not meant for WorldGuard 5.x, use the correct version matching your WorldGuard version");
|
||||
error = true;
|
||||
}
|
||||
|
||||
/* Check if WorldEdit is present */
|
||||
plugin = getServer().getPluginManager().getPlugin("WorldEdit");
|
||||
if (plugin == null || !(plugin instanceof WorldEditPlugin)) {
|
||||
@@ -151,6 +160,22 @@ public final class AreaShop extends JavaPlugin {
|
||||
|
||||
// Register dynamic permission (things declared in config)
|
||||
registerDynamicPermissions();
|
||||
|
||||
// Dont initialize the updatechecker if disabled in the config
|
||||
if(this.getConfig().getBoolean("checkForUpdates")) {
|
||||
try {
|
||||
updater = new Updater(this, 76518, null, UpdateType.NO_DOWNLOAD, false);
|
||||
AreaShop.debug("Result=" + updater.getResult().toString() + ", Latest=" + updater.getLatestName() + ", Type=" + updater.getLatestType());
|
||||
updateAvailable = updater.getResult() == UpdateResult.UPDATE_AVAILABLE;
|
||||
if(updateAvailable) {
|
||||
this.getLogger().info("Update from AreaShop V" + this.getDescription().getVersion() + " to " + updater.getLatestName() + " available, get the latest version at http://dev.bukkit.org/bukkit-plugins/regionbuyandrent/");
|
||||
}
|
||||
} catch(Exception e) {
|
||||
AreaShop.debug("Something went wrong with the Updater:");
|
||||
AreaShop.debug(e.getMessage());
|
||||
updateAvailable = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +195,7 @@ public final class AreaShop extends JavaPlugin {
|
||||
commandManager = null;
|
||||
chatprefix = null;
|
||||
debug = false;
|
||||
updater = null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -228,6 +254,22 @@ public final class AreaShop extends JavaPlugin {
|
||||
return fileManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the updater (check the update result)
|
||||
* @return The updater
|
||||
*/
|
||||
public Updater getUpdater() {
|
||||
return updater;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an update for AreaShop is available
|
||||
* @return true if an update is available, otherwise false
|
||||
*/
|
||||
public boolean updateAvailable() {
|
||||
return updateAvailable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register dynamic permissions controlled by config settings
|
||||
*/
|
||||
|
||||
@@ -42,7 +42,6 @@ import com.sk89q.worldedit.bukkit.selections.CuboidSelection;
|
||||
import com.sk89q.worldedit.bukkit.selections.Selection;
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||
import com.sk89q.worldguard.protection.managers.storage.StorageException;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
|
||||
public class FileManager {
|
||||
@@ -587,8 +586,10 @@ public class FileManager {
|
||||
RegionManager manager = plugin.getWorldGuard().getRegionManager(bukkitWorld);
|
||||
if(manager != null) {
|
||||
try {
|
||||
//String version = plugin.getWorldGuard().getDescription().getVersion();
|
||||
//AreaShop.debug("WorldGuard version: " + version);
|
||||
manager.saveChanges();
|
||||
} catch(StorageException e) {
|
||||
} catch(Exception e) {
|
||||
plugin.getLogger().warning("WorldGuard regions in world " + world + " could not be saved");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,8 +34,8 @@ public final class PlayerLoginListener implements Listener {
|
||||
if(event.getResult() != Result.ALLOWED) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
|
||||
final Player player = event.getPlayer();
|
||||
// Notify for rents that almost run out
|
||||
for(RentRegion region : plugin.getFileManager().getRents()) {
|
||||
if(region.isRenter(player)) {
|
||||
String warningSetting = region.getStringSetting("rent.warningOnLoginTime");
|
||||
@@ -45,18 +45,25 @@ public final class PlayerLoginListener implements Listener {
|
||||
long warningTime = region.durationStringToLong(warningSetting);
|
||||
if(region.getTimeLeft() < warningTime) {
|
||||
// Send the warning message later to let it appear after general MOTD messages
|
||||
final Player finalPlayer = player;
|
||||
final AreaShop finalPlugin = plugin;
|
||||
final RentRegion finalRegion = region;
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
finalPlugin.message(finalPlayer, "rent-expireWarning", finalRegion);
|
||||
AreaShop.getInstance().message(player, "rent-expireWarning", finalRegion);
|
||||
}
|
||||
}.runTaskLater(plugin, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Notify admins for plugin updates
|
||||
if(plugin.updateAvailable() && player.hasPermission("areashop.notifyupdate")) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AreaShop.getInstance().message(player, "update-playerNotify", AreaShop.getInstance().getDescription().getVersion(), AreaShop.getInstance().getUpdater().getLatestName());
|
||||
}
|
||||
}.runTaskLater(plugin, 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,745 @@
|
||||
package nl.evolutioncoding.areashop;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Enumeration;
|
||||
import java.util.logging.Level;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
/**
|
||||
* Check for updates on BukkitDev for a given plugin, and download the updates if needed.
|
||||
* <p/>
|
||||
* <b>VERY, VERY IMPORTANT</b>: Because there are no standards for adding auto-update toggles in your plugin's config, this system provides NO CHECK WITH YOUR CONFIG to make sure the user has allowed auto-updating.
|
||||
* <br>
|
||||
* It is a <b>BUKKIT POLICY</b> that you include a boolean value in your config that prevents the auto-updater from running <b>AT ALL</b>.
|
||||
* <br>
|
||||
* If you fail to include this option in your config, your plugin will be <b>REJECTED</b> when you attempt to submit it to dev.bukkit.org.
|
||||
* <p/>
|
||||
* An example of a good configuration option would be something similar to 'auto-update: true' - if this value is set to false you may NOT run the auto-updater.
|
||||
* <br>
|
||||
* If you are unsure about these rules, please read the plugin submission guidelines: http://goo.gl/8iU5l
|
||||
*
|
||||
* @author Gravity
|
||||
* @version 2.3
|
||||
*/
|
||||
|
||||
public class Updater {
|
||||
|
||||
/* Constants */
|
||||
|
||||
// Remote file's title
|
||||
private static final String TITLE_VALUE = "name";
|
||||
// Remote file's download link
|
||||
private static final String LINK_VALUE = "downloadUrl";
|
||||
// Remote file's release type
|
||||
private static final String TYPE_VALUE = "releaseType";
|
||||
// Remote file's build version
|
||||
private static final String VERSION_VALUE = "gameVersion";
|
||||
// Path to GET
|
||||
private static final String QUERY = "/servermods/files?projectIds=";
|
||||
// Slugs will be appended to this to get to the project's RSS feed
|
||||
private static final String HOST = "https://api.curseforge.com";
|
||||
// User-agent when querying Curse
|
||||
private static final String USER_AGENT = "Updater (by Gravity)";
|
||||
// Used for locating version numbers in file names
|
||||
private static final String DELIMETER = "^V|[\\s_-]V";
|
||||
// If the version number contains one of these, don't update.
|
||||
private static final String[] NO_UPDATE_TAG = { "-DEV", "-PRE", "-SNAPSHOT" };
|
||||
// Used for downloading files
|
||||
private static final int BYTE_SIZE = 1024;
|
||||
// Config key for api key
|
||||
private static final String API_KEY_CONFIG_KEY = "api-key";
|
||||
// Config key for disabling Updater
|
||||
private static final String DISABLE_CONFIG_KEY = "disable";
|
||||
// Default api key value in config
|
||||
private static final String API_KEY_DEFAULT = "PUT_API_KEY_HERE";
|
||||
// Default disable value in config
|
||||
private static final boolean DISABLE_DEFAULT = false;
|
||||
|
||||
/* User-provided variables */
|
||||
|
||||
// Plugin running Updater
|
||||
private final Plugin plugin;
|
||||
// Type of update check to run
|
||||
private final UpdateType type;
|
||||
// Whether to announce file downloads
|
||||
private final boolean announce;
|
||||
// The plugin file (jar)
|
||||
private final File file;
|
||||
// The folder that downloads will be placed in
|
||||
private final File updateFolder;
|
||||
// The provided callback (if any)
|
||||
private final UpdateCallback callback;
|
||||
// Project's Curse ID
|
||||
private int id = -1;
|
||||
// BukkitDev ServerMods API key
|
||||
private String apiKey = null;
|
||||
|
||||
/* Collected from Curse API */
|
||||
|
||||
private String versionName;
|
||||
private String versionLink;
|
||||
private String versionType;
|
||||
private String versionGameVersion;
|
||||
|
||||
/* Update process variables */
|
||||
|
||||
// Connection to RSS
|
||||
private URL url;
|
||||
// Updater thread
|
||||
private Thread thread;
|
||||
// Used for determining the outcome of the update process
|
||||
private Updater.UpdateResult result = Updater.UpdateResult.SUCCESS;
|
||||
|
||||
/**
|
||||
* Gives the developer the result of the update process. Can be obtained by called {@link #getResult()}
|
||||
*/
|
||||
public enum UpdateResult {
|
||||
/**
|
||||
* The updater found an update, and has readied it to be loaded the next time the server restarts/reloads.
|
||||
*/
|
||||
SUCCESS,
|
||||
/**
|
||||
* The updater did not find an update, and nothing was downloaded.
|
||||
*/
|
||||
NO_UPDATE,
|
||||
/**
|
||||
* The server administrator has disabled the updating system.
|
||||
*/
|
||||
DISABLED,
|
||||
/**
|
||||
* The updater found an update, but was unable to download it.
|
||||
*/
|
||||
FAIL_DOWNLOAD,
|
||||
/**
|
||||
* For some reason, the updater was unable to contact dev.bukkit.org to download the file.
|
||||
*/
|
||||
FAIL_DBO,
|
||||
/**
|
||||
* When running the version check, the file on DBO did not contain a recognizable version.
|
||||
*/
|
||||
FAIL_NOVERSION,
|
||||
/**
|
||||
* The id provided by the plugin running the updater was invalid and doesn't exist on DBO.
|
||||
*/
|
||||
FAIL_BADID,
|
||||
/**
|
||||
* The server administrator has improperly configured their API key in the configuration.
|
||||
*/
|
||||
FAIL_APIKEY,
|
||||
/**
|
||||
* The updater found an update, but because of the UpdateType being set to NO_DOWNLOAD, it wasn't downloaded.
|
||||
*/
|
||||
UPDATE_AVAILABLE
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows the developer to specify the type of update that will be run.
|
||||
*/
|
||||
public enum UpdateType {
|
||||
/**
|
||||
* Run a version check, and then if the file is out of date, download the newest version.
|
||||
*/
|
||||
DEFAULT,
|
||||
/**
|
||||
* Don't run a version check, just find the latest update and download it.
|
||||
*/
|
||||
NO_VERSION_CHECK,
|
||||
/**
|
||||
* Get information about the version and the download size, but don't actually download anything.
|
||||
*/
|
||||
NO_DOWNLOAD
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the various release types of a file on BukkitDev.
|
||||
*/
|
||||
public enum ReleaseType {
|
||||
/**
|
||||
* An "alpha" file.
|
||||
*/
|
||||
ALPHA,
|
||||
/**
|
||||
* A "beta" file.
|
||||
*/
|
||||
BETA,
|
||||
/**
|
||||
* A "release" file.
|
||||
*/
|
||||
RELEASE
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the updater.
|
||||
*
|
||||
* @param plugin The plugin that is checking for an update.
|
||||
* @param id The dev.bukkit.org id of the project.
|
||||
* @param file The file that the plugin is running from, get this by doing this.getFile() from within your main class.
|
||||
* @param type Specify the type of update this will be. See {@link UpdateType}
|
||||
* @param announce True if the program should announce the progress of new updates in console.
|
||||
*/
|
||||
public Updater(Plugin plugin, int id, File file, UpdateType type, boolean announce) {
|
||||
this(plugin, id, file, type, null, announce);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the updater with the provided callback.
|
||||
*
|
||||
* @param plugin The plugin that is checking for an update.
|
||||
* @param id The dev.bukkit.org id of the project.
|
||||
* @param file The file that the plugin is running from, get this by doing this.getFile() from within your main class.
|
||||
* @param type Specify the type of update this will be. See {@link UpdateType}
|
||||
* @param callback The callback instance to notify when the Updater has finished
|
||||
*/
|
||||
public Updater(Plugin plugin, int id, File file, UpdateType type, UpdateCallback callback) {
|
||||
this(plugin, id, file, type, callback, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the updater with the provided callback.
|
||||
*
|
||||
* @param plugin The plugin that is checking for an update.
|
||||
* @param id The dev.bukkit.org id of the project.
|
||||
* @param file The file that the plugin is running from, get this by doing this.getFile() from within your main class.
|
||||
* @param type Specify the type of update this will be. See {@link UpdateType}
|
||||
* @param callback The callback instance to notify when the Updater has finished
|
||||
* @param announce True if the program should announce the progress of new updates in console.
|
||||
*/
|
||||
public Updater(Plugin plugin, int id, File file, UpdateType type, UpdateCallback callback, boolean announce) {
|
||||
this.plugin = plugin;
|
||||
this.type = type;
|
||||
this.announce = announce;
|
||||
this.file = file;
|
||||
this.id = id;
|
||||
this.updateFolder = this.plugin.getServer().getUpdateFolderFile();
|
||||
this.callback = callback;
|
||||
|
||||
final File pluginFile = this.plugin.getDataFolder().getParentFile();
|
||||
final File updaterFile = new File(pluginFile, "Updater");
|
||||
final File updaterConfigFile = new File(updaterFile, "config.yml");
|
||||
|
||||
YamlConfiguration config = new YamlConfiguration();
|
||||
config.options().header("This configuration file affects all plugins using the Updater system (version 2+ - http://forums.bukkit.org/threads/96681/ )" + '\n'
|
||||
+ "If you wish to use your API key, read http://wiki.bukkit.org/ServerMods_API and place it below." + '\n'
|
||||
+ "Some updating systems will not adhere to the disabled value, but these may be turned off in their plugin's configuration.");
|
||||
config.addDefault(API_KEY_CONFIG_KEY, API_KEY_DEFAULT);
|
||||
config.addDefault(DISABLE_CONFIG_KEY, DISABLE_DEFAULT);
|
||||
|
||||
if (!updaterFile.exists()) {
|
||||
this.fileIOOrError(updaterFile, updaterFile.mkdir(), true);
|
||||
}
|
||||
|
||||
boolean createFile = !updaterConfigFile.exists();
|
||||
try {
|
||||
if (createFile) {
|
||||
this.fileIOOrError(updaterConfigFile, updaterConfigFile.createNewFile(), true);
|
||||
config.options().copyDefaults(true);
|
||||
config.save(updaterConfigFile);
|
||||
} else {
|
||||
config.load(updaterConfigFile);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
final String message;
|
||||
if (createFile) {
|
||||
message = "The updater could not create configuration at " + updaterFile.getAbsolutePath();
|
||||
} else {
|
||||
message = "The updater could not load configuration at " + updaterFile.getAbsolutePath();
|
||||
}
|
||||
this.plugin.getLogger().log(Level.SEVERE, message, e);
|
||||
}
|
||||
|
||||
if (config.getBoolean(DISABLE_CONFIG_KEY)) {
|
||||
this.result = UpdateResult.DISABLED;
|
||||
return;
|
||||
}
|
||||
|
||||
String key = config.getString(API_KEY_CONFIG_KEY);
|
||||
if (API_KEY_DEFAULT.equalsIgnoreCase(key) || "".equals(key)) {
|
||||
key = null;
|
||||
}
|
||||
|
||||
this.apiKey = key;
|
||||
|
||||
try {
|
||||
this.url = new URL(Updater.HOST + Updater.QUERY + this.id);
|
||||
} catch (final MalformedURLException e) {
|
||||
this.plugin.getLogger().log(Level.SEVERE, "The project ID provided for updating, " + this.id + " is invalid.", e);
|
||||
this.result = UpdateResult.FAIL_BADID;
|
||||
}
|
||||
|
||||
if (this.result != UpdateResult.FAIL_BADID) {
|
||||
this.thread = new Thread(new UpdateRunnable());
|
||||
this.thread.start();
|
||||
} else {
|
||||
runUpdater();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the result of the update process.
|
||||
*
|
||||
* @return result of the update process.
|
||||
* @see UpdateResult
|
||||
*/
|
||||
public Updater.UpdateResult getResult() {
|
||||
this.waitForThread();
|
||||
return this.result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest version's release type.
|
||||
*
|
||||
* @return latest version's release type.
|
||||
* @see ReleaseType
|
||||
*/
|
||||
public ReleaseType getLatestType() {
|
||||
this.waitForThread();
|
||||
if (this.versionType != null) {
|
||||
for (ReleaseType type : ReleaseType.values()) {
|
||||
if (this.versionType.equalsIgnoreCase(type.name())) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest version's game version (such as "CB 1.2.5-R1.0").
|
||||
*
|
||||
* @return latest version's game version.
|
||||
*/
|
||||
public String getLatestGameVersion() {
|
||||
this.waitForThread();
|
||||
return this.versionGameVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest version's name (such as "Project v1.0").
|
||||
*
|
||||
* @return latest version's name.
|
||||
*/
|
||||
public String getLatestName() {
|
||||
this.waitForThread();
|
||||
return this.versionName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest version's direct file link.
|
||||
*
|
||||
* @return latest version's file link.
|
||||
*/
|
||||
public String getLatestFileLink() {
|
||||
this.waitForThread();
|
||||
return this.versionLink;
|
||||
}
|
||||
|
||||
/**
|
||||
* As the result of Updater output depends on the thread's completion, it is necessary to wait for the thread to finish
|
||||
* before allowing anyone to check the result.
|
||||
*/
|
||||
private void waitForThread() {
|
||||
if ((this.thread != null) && this.thread.isAlive()) {
|
||||
try {
|
||||
this.thread.join();
|
||||
} catch (final InterruptedException e) {
|
||||
this.plugin.getLogger().log(Level.SEVERE, null, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an update from dev.bukkit.org into the server's update folder.
|
||||
*
|
||||
* @param file the name of the file to save it as.
|
||||
*/
|
||||
private void saveFile(String file) {
|
||||
final File folder = this.updateFolder;
|
||||
|
||||
deleteOldFiles();
|
||||
if (!folder.exists()) {
|
||||
this.fileIOOrError(folder, folder.mkdir(), true);
|
||||
}
|
||||
downloadFile();
|
||||
|
||||
// Check to see if it's a zip file, if it is, unzip it.
|
||||
final File dFile = new File(folder.getAbsolutePath(), file);
|
||||
if (dFile.getName().endsWith(".zip")) {
|
||||
// Unzip
|
||||
this.unzip(dFile.getAbsolutePath());
|
||||
}
|
||||
if (this.announce) {
|
||||
this.plugin.getLogger().info("Finished updating.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a file and save it to the specified folder.
|
||||
*/
|
||||
private void downloadFile() {
|
||||
BufferedInputStream in = null;
|
||||
FileOutputStream fout = null;
|
||||
try {
|
||||
URL fileUrl = new URL(this.versionLink);
|
||||
final int fileLength = fileUrl.openConnection().getContentLength();
|
||||
in = new BufferedInputStream(fileUrl.openStream());
|
||||
fout = new FileOutputStream(new File(this.updateFolder, file.getName()));
|
||||
|
||||
final byte[] data = new byte[Updater.BYTE_SIZE];
|
||||
int count;
|
||||
if (this.announce) {
|
||||
this.plugin.getLogger().info("About to download a new update: " + this.versionName);
|
||||
}
|
||||
long downloaded = 0;
|
||||
while ((count = in.read(data, 0, Updater.BYTE_SIZE)) != -1) {
|
||||
downloaded += count;
|
||||
fout.write(data, 0, count);
|
||||
final int percent = (int) ((downloaded * 100) / fileLength);
|
||||
if (this.announce && ((percent % 10) == 0)) {
|
||||
this.plugin.getLogger().info("Downloading update: " + percent + "% of " + fileLength + " bytes.");
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
this.plugin.getLogger().log(Level.WARNING, "The auto-updater tried to download a new update, but was unsuccessful.", ex);
|
||||
this.result = Updater.UpdateResult.FAIL_DOWNLOAD;
|
||||
} finally {
|
||||
try {
|
||||
if (in != null) {
|
||||
in.close();
|
||||
}
|
||||
} catch (final IOException ex) {
|
||||
this.plugin.getLogger().log(Level.SEVERE, null, ex);
|
||||
}
|
||||
try {
|
||||
if (fout != null) {
|
||||
fout.close();
|
||||
}
|
||||
} catch (final IOException ex) {
|
||||
this.plugin.getLogger().log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove possibly leftover files from the update folder.
|
||||
*/
|
||||
private void deleteOldFiles() {
|
||||
//Just a quick check to make sure we didn't leave any files from last time...
|
||||
File[] list = listFilesOrError(this.updateFolder);
|
||||
for (final File xFile : list) {
|
||||
if (xFile.getName().endsWith(".zip")) {
|
||||
this.fileIOOrError(xFile, xFile.mkdir(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of Zip-File-Extractor, modified by Gravity for use with Updater.
|
||||
*
|
||||
* @param file the location of the file to extract.
|
||||
*/
|
||||
private void unzip(String file) {
|
||||
final File fSourceZip = new File(file);
|
||||
try {
|
||||
final String zipPath = file.substring(0, file.length() - 4);
|
||||
ZipFile zipFile = new ZipFile(fSourceZip);
|
||||
Enumeration<? extends ZipEntry> e = zipFile.entries();
|
||||
while (e.hasMoreElements()) {
|
||||
ZipEntry entry = e.nextElement();
|
||||
File destinationFilePath = new File(zipPath, entry.getName());
|
||||
this.fileIOOrError(destinationFilePath.getParentFile(), destinationFilePath.getParentFile().mkdirs(), true);
|
||||
if (!entry.isDirectory()) {
|
||||
final BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));
|
||||
int b;
|
||||
final byte[] buffer = new byte[Updater.BYTE_SIZE];
|
||||
final FileOutputStream fos = new FileOutputStream(destinationFilePath);
|
||||
final BufferedOutputStream bos = new BufferedOutputStream(fos, Updater.BYTE_SIZE);
|
||||
while ((b = bis.read(buffer, 0, Updater.BYTE_SIZE)) != -1) {
|
||||
bos.write(buffer, 0, b);
|
||||
}
|
||||
bos.flush();
|
||||
bos.close();
|
||||
bis.close();
|
||||
final String name = destinationFilePath.getName();
|
||||
if (name.endsWith(".jar") && this.pluginExists(name)) {
|
||||
File output = new File(this.updateFolder, name);
|
||||
this.fileIOOrError(output, destinationFilePath.renameTo(output), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
zipFile.close();
|
||||
|
||||
// Move any plugin data folders that were included to the right place, Bukkit won't do this for us.
|
||||
moveNewZipFiles(zipPath);
|
||||
|
||||
} catch (final IOException e) {
|
||||
this.plugin.getLogger().log(Level.SEVERE, "The auto-updater tried to unzip a new update file, but was unsuccessful.", e);
|
||||
this.result = Updater.UpdateResult.FAIL_DOWNLOAD;
|
||||
} finally {
|
||||
this.fileIOOrError(fSourceZip, fSourceZip.delete(), false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find any new files extracted from an update into the plugin's data directory.
|
||||
* @param zipPath path of extracted files.
|
||||
*/
|
||||
private void moveNewZipFiles(String zipPath) {
|
||||
File[] list = listFilesOrError(new File(zipPath));
|
||||
for (final File dFile : list) {
|
||||
if (dFile.isDirectory() && this.pluginExists(dFile.getName())) {
|
||||
// Current dir
|
||||
final File oFile = new File(this.plugin.getDataFolder().getParent(), dFile.getName());
|
||||
// List of existing files in the new dir
|
||||
final File[] dList = listFilesOrError(dFile);
|
||||
// List of existing files in the current dir
|
||||
final File[] oList = listFilesOrError(oFile);
|
||||
for (File cFile : dList) {
|
||||
// Loop through all the files in the new dir
|
||||
boolean found = false;
|
||||
for (final File xFile : oList) {
|
||||
// Loop through all the contents in the current dir to see if it exists
|
||||
if (xFile.getName().equals(cFile.getName())) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
// Move the new file into the current dir
|
||||
File output = new File(oFile, cFile.getName());
|
||||
this.fileIOOrError(output, cFile.renameTo(output), true);
|
||||
} else {
|
||||
// This file already exists, so we don't need it anymore.
|
||||
this.fileIOOrError(cFile, cFile.delete(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.fileIOOrError(dFile, dFile.delete(), false);
|
||||
}
|
||||
File zip = new File(zipPath);
|
||||
this.fileIOOrError(zip, zip.delete(), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the name of a jar is one of the plugins currently installed, used for extracting the correct files out of a zip.
|
||||
*
|
||||
* @param name a name to check for inside the plugins folder.
|
||||
* @return true if a file inside the plugins folder is named this.
|
||||
*/
|
||||
private boolean pluginExists(String name) {
|
||||
File[] plugins = listFilesOrError(new File("plugins"));
|
||||
for (final File file : plugins) {
|
||||
if (file.getName().equals(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if the program should continue by evaluating whether the plugin is already updated, or shouldn't be updated.
|
||||
*
|
||||
* @return true if the version was located and is not the same as the remote's newest.
|
||||
*/
|
||||
private boolean versionCheck() {
|
||||
final String title = this.versionName;
|
||||
if (this.type != UpdateType.NO_VERSION_CHECK) {
|
||||
final String localVersion = this.plugin.getDescription().getVersion();
|
||||
if (title.split(DELIMETER).length == 2) {
|
||||
// Get the newest file's version number
|
||||
final String remoteVersion = title.split(DELIMETER)[1].split(" ")[0];
|
||||
|
||||
if (this.hasTag(localVersion) || !this.shouldUpdate(localVersion, remoteVersion)) {
|
||||
// We already have the latest version, or this build is tagged for no-update
|
||||
this.result = Updater.UpdateResult.NO_UPDATE;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The file's name did not contain the string 'vVersion'
|
||||
final String authorInfo = this.plugin.getDescription().getAuthors().isEmpty() ? "" : " (" + this.plugin.getDescription().getAuthors().get(0) + ")";
|
||||
this.plugin.getLogger().warning("The author of this plugin" + authorInfo + " has misconfigured their Auto Update system");
|
||||
this.plugin.getLogger().warning("File versions should follow the format 'PluginName vVERSION'");
|
||||
this.plugin.getLogger().warning("Please notify the author of this error.");
|
||||
this.result = Updater.UpdateResult.FAIL_NOVERSION;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* <b>If you wish to run mathematical versioning checks, edit this method.</b>
|
||||
* <p>
|
||||
* With default behavior, Updater will NOT verify that a remote version available on BukkitDev
|
||||
* which is not this version is indeed an "update".
|
||||
* If a version is present on BukkitDev that is not the version that is currently running,
|
||||
* Updater will assume that it is a newer version.
|
||||
* This is because there is no standard versioning scheme, and creating a calculation that can
|
||||
* determine whether a new update is actually an update is sometimes extremely complicated.
|
||||
* </p>
|
||||
* <p>
|
||||
* Updater will call this method from {@link #versionCheck()} before deciding whether
|
||||
* the remote version is actually an update.
|
||||
* If you have a specific versioning scheme with which a mathematical determination can
|
||||
* be reliably made to decide whether one version is higher than another, you may
|
||||
* revise this method, using the local and remote version parameters, to execute the
|
||||
* appropriate check.
|
||||
* </p>
|
||||
* <p>
|
||||
* Returning a value of <b>false</b> will tell the update process that this is NOT a new version.
|
||||
* Without revision, this method will always consider a remote version at all different from
|
||||
* that of the local version a new update.
|
||||
* </p>
|
||||
* @param localVersion the current version
|
||||
* @param remoteVersion the remote version
|
||||
* @return true if Updater should consider the remote version an update, false if not.
|
||||
*/
|
||||
public boolean shouldUpdate(String localVersion, String remoteVersion) {
|
||||
return !localVersion.equalsIgnoreCase(remoteVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluate whether the version number is marked showing that it should not be updated by this program.
|
||||
*
|
||||
* @param version a version number to check for tags in.
|
||||
* @return true if updating should be disabled.
|
||||
*/
|
||||
private boolean hasTag(String version) {
|
||||
for (final String string : Updater.NO_UPDATE_TAG) {
|
||||
if (version.contains(string)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a connection to the BukkitDev API and request the newest file's details.
|
||||
*
|
||||
* @return true if successful.
|
||||
*/
|
||||
private boolean read() {
|
||||
try {
|
||||
final URLConnection conn = this.url.openConnection();
|
||||
conn.setConnectTimeout(5000);
|
||||
|
||||
if (this.apiKey != null) {
|
||||
conn.addRequestProperty("X-API-Key", this.apiKey);
|
||||
}
|
||||
conn.addRequestProperty("User-Agent", Updater.USER_AGENT);
|
||||
|
||||
conn.setDoOutput(true);
|
||||
|
||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
final String response = reader.readLine();
|
||||
|
||||
final JSONArray array = (JSONArray) JSONValue.parse(response);
|
||||
|
||||
if (array.isEmpty()) {
|
||||
this.plugin.getLogger().warning("The updater could not find any files for the project id " + this.id);
|
||||
this.result = UpdateResult.FAIL_BADID;
|
||||
return false;
|
||||
}
|
||||
|
||||
JSONObject latestUpdate = (JSONObject) array.get(array.size() - 1);
|
||||
this.versionName = (String) latestUpdate.get(Updater.TITLE_VALUE);
|
||||
this.versionLink = (String) latestUpdate.get(Updater.LINK_VALUE);
|
||||
this.versionType = (String) latestUpdate.get(Updater.TYPE_VALUE);
|
||||
this.versionGameVersion = (String) latestUpdate.get(Updater.VERSION_VALUE);
|
||||
|
||||
return true;
|
||||
} catch (final IOException e) {
|
||||
if (e.getMessage().contains("HTTP response code: 403")) {
|
||||
this.plugin.getLogger().severe("dev.bukkit.org rejected the API key provided in plugins/Updater/config.yml");
|
||||
this.plugin.getLogger().severe("Please double-check your configuration to ensure it is correct.");
|
||||
this.result = UpdateResult.FAIL_APIKEY;
|
||||
} else {
|
||||
this.plugin.getLogger().severe("The updater could not contact dev.bukkit.org for updating.");
|
||||
this.plugin.getLogger().severe("If you have not recently modified your configuration and this is the first time you are seeing this message, the site may be experiencing temporary downtime.");
|
||||
this.result = UpdateResult.FAIL_DBO;
|
||||
}
|
||||
this.plugin.getLogger().log(Level.SEVERE, null, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a file operation and log any errors if it fails.
|
||||
* @param file file operation is performed on.
|
||||
* @param result result of file operation.
|
||||
* @param create true if a file is being created, false if deleted.
|
||||
*/
|
||||
private void fileIOOrError(File file, boolean result, boolean create) {
|
||||
if (!result) {
|
||||
this.plugin.getLogger().severe("The updater could not " + (create ? "create" : "delete") + " file at: " + file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
private File[] listFilesOrError(File folder) {
|
||||
File[] contents = folder.listFiles();
|
||||
if (contents == null) {
|
||||
this.plugin.getLogger().severe("The updater could not access files at: " + this.updateFolder.getAbsolutePath());
|
||||
return new File[0];
|
||||
} else {
|
||||
return contents;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on main thread when the Updater has finished working, regardless
|
||||
* of result.
|
||||
*/
|
||||
public interface UpdateCallback {
|
||||
/**
|
||||
* Called when the updater has finished working.
|
||||
* @param updater The updater instance
|
||||
*/
|
||||
void onFinish(Updater updater);
|
||||
}
|
||||
|
||||
private class UpdateRunnable implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
runUpdater();
|
||||
}
|
||||
}
|
||||
|
||||
private void runUpdater() {
|
||||
if (this.url != null && (this.read() && this.versionCheck())) {
|
||||
// Obtain the results of the project's file feed
|
||||
if ((this.versionLink != null) && (this.type != UpdateType.NO_DOWNLOAD)) {
|
||||
String name = this.file.getName();
|
||||
// If it's a zip file, it shouldn't be downloaded as the plugin's name
|
||||
if (this.versionLink.endsWith(".zip")) {
|
||||
name = this.versionLink.substring(this.versionLink.lastIndexOf("/") + 1);
|
||||
}
|
||||
this.saveFile(name);
|
||||
} else {
|
||||
this.result = UpdateResult.UPDATE_AVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.callback != null) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
runCallback();
|
||||
}
|
||||
}.runTask(this.plugin);
|
||||
}
|
||||
}
|
||||
|
||||
private void runCallback() {
|
||||
this.callback.onFinish(this);
|
||||
}
|
||||
}
|
||||
@@ -66,11 +66,13 @@ public class Utils {
|
||||
String result = "";
|
||||
boolean first = true;
|
||||
for(Object object : input) {
|
||||
if(first) {
|
||||
first = false;
|
||||
result += object.toString();
|
||||
} else {
|
||||
result += ", " + object.toString();
|
||||
if(object != null) {
|
||||
if(first) {
|
||||
first = false;
|
||||
result += object.toString();
|
||||
} else {
|
||||
result += ", " + object.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import nl.evolutioncoding.areashop.AreaShop;
|
||||
import nl.evolutioncoding.areashop.regions.BuyRegion;
|
||||
@@ -72,72 +73,85 @@ public class FindCommand extends CommandAreaShop {
|
||||
}
|
||||
if(args[1].equalsIgnoreCase("buy")) {
|
||||
List<BuyRegion> regions = plugin.getFileManager().getBuys();
|
||||
List<BuyRegion> results = new ArrayList<BuyRegion>();
|
||||
for(BuyRegion region : regions) {
|
||||
if(!region.isSold()
|
||||
&& ((region.getPrice() <= balance && !maxPriceSet) || (region.getPrice() <= maxPrice && maxPriceSet))
|
||||
&& (group == null || group.isMember(region))) {
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-successMax", "buy", region.getName(), maxPrice, onlyInGroup);
|
||||
} else {
|
||||
plugin.message(player, "find-success", "buy", region.getName(), balance, onlyInGroup);
|
||||
}
|
||||
region.teleportPlayer(player, true, false);
|
||||
return;
|
||||
results.add(region);
|
||||
}
|
||||
}
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-noneFound", "buy", maxPrice, onlyInGroup);
|
||||
if(!results.isEmpty()) {
|
||||
// Draw a random one
|
||||
BuyRegion region = results.get(new Random().nextInt(results.size()));
|
||||
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-successMax", "buy", region.getName(), maxPrice, onlyInGroup);
|
||||
} else {
|
||||
plugin.message(player, "find-success", "buy", region.getName(), balance, onlyInGroup);
|
||||
}
|
||||
region.teleportPlayer(player, true, false);
|
||||
} else {
|
||||
plugin.message(player, "find-noneFoundMax", "buy", balance, onlyInGroup);
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-noneFound", "buy", maxPrice, onlyInGroup);
|
||||
} else {
|
||||
plugin.message(player, "find-noneFoundMax", "buy", balance, onlyInGroup);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
List<RentRegion> regions = plugin.getFileManager().getRents();
|
||||
List<RentRegion> results = new ArrayList<RentRegion>();
|
||||
for(RentRegion region : regions) {
|
||||
if(!region.isRented()
|
||||
&& ((region.getPrice() <= balance && !maxPriceSet) || (region.getPrice() <= maxPrice && maxPriceSet))
|
||||
&& (group == null || group.isMember(region))) {
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-successMax", "rent", region.getName(), maxPrice, onlyInGroup);
|
||||
} else {
|
||||
plugin.message(player, "find-success", "rent", region.getName(), balance, onlyInGroup);
|
||||
}
|
||||
region.teleportPlayer(player, true, false);
|
||||
return;
|
||||
results.add(region);
|
||||
}
|
||||
}
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-noneFound", "rent", maxPrice, onlyInGroup);
|
||||
if(!results.isEmpty()) {
|
||||
// Draw a random one
|
||||
RentRegion region = results.get(new Random().nextInt(results.size()));
|
||||
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-successMax", "rent", region.getName(), maxPrice, onlyInGroup);
|
||||
} else {
|
||||
plugin.message(player, "find-success", "rent", region.getName(), balance, onlyInGroup);
|
||||
}
|
||||
region.teleportPlayer(player, true, false);
|
||||
} else {
|
||||
plugin.message(player, "find-noneFoundMax", "rent", balance, onlyInGroup);
|
||||
BigDecimal bigDecimal = new BigDecimal(balance);
|
||||
bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP);
|
||||
balance = bigDecimal.doubleValue();
|
||||
String onlyInGroup = "";
|
||||
if(group != null) {
|
||||
onlyInGroup = plugin.getLanguageManager().getLang("find-onlyInGroup", args[3]);
|
||||
}
|
||||
if(maxPriceSet) {
|
||||
plugin.message(player, "find-noneFound", "rent", maxPrice, onlyInGroup);
|
||||
} else {
|
||||
plugin.message(player, "find-noneFoundMax", "rent", balance, onlyInGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -305,7 +305,12 @@ public class InfoCommand extends CommandAreaShop {
|
||||
} else if(buy != null) {
|
||||
plugin.message(sender, "info-regionHeaderBuy", buy);
|
||||
if(buy.isSold()) {
|
||||
plugin.messageNoPrefix(sender, "info-regionBought", buy);
|
||||
if(buy.isInResellingMode()) {
|
||||
plugin.messageNoPrefix(sender, "info-regionReselling", buy);
|
||||
plugin.messageNoPrefix(sender, "info-regionReselPrice", buy);
|
||||
} else {
|
||||
plugin.messageNoPrefix(sender, "info-regionBought", buy);
|
||||
}
|
||||
plugin.messageNoPrefix(sender, "info-regionMoneyBackBuy", buy);
|
||||
if(!buy.getFriendNames().isEmpty()) {
|
||||
plugin.messageNoPrefix(sender, "info-regionFriends", buy);
|
||||
|
||||
@@ -76,7 +76,7 @@ public class MeCommand extends CommandAreaShop {
|
||||
}
|
||||
Set<GeneralRegion> friendRegions = new HashSet<GeneralRegion>();
|
||||
for(GeneralRegion region : plugin.getFileManager().getRegions()) {
|
||||
if(region.getFriends().contains(player.getUniqueId())) {
|
||||
if(region.getFriends() != null && region.getFriends().contains(player.getUniqueId())) {
|
||||
friendRegions.add(region);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,19 +45,28 @@ public class SetteleportCommand extends CommandAreaShop {
|
||||
plugin.message(sender, "onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player) sender;
|
||||
Player player = (Player)sender;
|
||||
GeneralRegion region = null;
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = plugin.getFileManager().getAllApplicableRegions(((Player) sender).getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
plugin.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
plugin.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
if(args.length < 2) {
|
||||
if (sender instanceof Player) {
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = plugin.getFileManager().getAllApplicableRegions(((Player) sender).getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
plugin.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
plugin.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
plugin.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
region = plugin.getFileManager().getRegion(args[1]);
|
||||
}
|
||||
|
||||
boolean owner = false;
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ public class BuyRegion extends GeneralRegion {
|
||||
* @return The number of minutes until the region is unrented while player is offline
|
||||
*/
|
||||
public long getInactiveTimeUntilSell() {
|
||||
return getIntegerSetting("buy.inactiveTimeUntilSell");
|
||||
return getLongSetting("buy.inactiveTimeUntilSell");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -266,7 +266,7 @@ public class BuyRegion extends GeneralRegion {
|
||||
}
|
||||
|
||||
/* Check if the player has enough money */
|
||||
if(plugin.getEconomy().has(player, getWorldName(), getPrice())) {
|
||||
if((!isResell && plugin.getEconomy().has(player, getWorldName(), getPrice())) || (isResell && plugin.getEconomy().has(player, getWorldName(), getResellPrice()))) {
|
||||
UUID oldOwner = getBuyer();
|
||||
if(isResell && oldOwner != null) {
|
||||
clearFriends();
|
||||
@@ -335,7 +335,13 @@ public class BuyRegion extends GeneralRegion {
|
||||
return true;
|
||||
} else {
|
||||
/* Player has not enough money */
|
||||
plugin.message(player, "buy-lowMoney", plugin.formatCurrency(plugin.getEconomy().getBalance(player, getWorldName())), getFormattedPrice());
|
||||
String requiredMoney = "";
|
||||
if(isResell) {
|
||||
requiredMoney = getFormattedResellPrice();
|
||||
} else {
|
||||
requiredMoney = getFormattedPrice();
|
||||
}
|
||||
plugin.message(player, "buy-lowMoney", plugin.formatCurrency(plugin.getEconomy().getBalance(player, getWorldName())), requiredMoney);
|
||||
}
|
||||
} else {
|
||||
if(isBuyer(player)) {
|
||||
@@ -402,11 +408,11 @@ public class BuyRegion extends GeneralRegion {
|
||||
return false;
|
||||
}
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(getBuyer());
|
||||
//AreaShop.debug("inactive checking for " + getName() + ", player=" + player.getName() + ", currenttime=" + Calendar.getInstance().getTimeInMillis() + ", lastPlayed=" + player.getLastPlayed() + ", diff=" + (Calendar.getInstance().getTimeInMillis() - player.getLastPlayed()));
|
||||
int inactiveSetting = getIntegerSetting("buy.inactiveTimeUntilSell");
|
||||
long inactiveSetting = getInactiveTimeUntilSell();
|
||||
if(inactiveSetting <= 0 || player.isOp()) {
|
||||
return false;
|
||||
}
|
||||
//AreaShop.debug("inactivetimemillis: " + inactiveSetting * 60 * 1000);
|
||||
if(Calendar.getInstance().getTimeInMillis() > (player.getLastPlayed() + inactiveSetting * 60 * 1000)) {
|
||||
plugin.getLogger().info("Region " + getName() + " sold because of inactivity for player " + getPlayerName());
|
||||
this.sell(true);
|
||||
|
||||
@@ -21,6 +21,7 @@ import nl.evolutioncoding.areashop.exceptions.RegionCreateException;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
@@ -47,7 +48,6 @@ import com.sk89q.worldguard.protection.flags.RegionGroupFlag;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public abstract class GeneralRegion {
|
||||
protected YamlConfiguration config;
|
||||
private static ArrayList<Material> canSpawnIn = new ArrayList<Material>(Arrays.asList(Material.WOOD_DOOR, Material.WOODEN_DOOR, Material.SIGN_POST, Material.WALL_SIGN, Material.STONE_PLATE, Material.IRON_DOOR_BLOCK, Material.WOOD_PLATE, Material.TRAP_DOOR, Material.REDSTONE_LAMP_OFF, Material.REDSTONE_LAMP_ON, Material.DRAGON_EGG, Material.GOLD_PLATE, Material.IRON_PLATE));
|
||||
@@ -538,14 +538,10 @@ public abstract class GeneralRegion {
|
||||
*/
|
||||
public Set<String> getFriendNames() {
|
||||
HashSet<String> result = new HashSet<String>();
|
||||
for(String friend : config.getStringList("general.friends")) {
|
||||
try {
|
||||
UUID id = UUID.fromString(friend);
|
||||
if(id != null) {
|
||||
result.add(Bukkit.getOfflinePlayer(id).getName());
|
||||
}
|
||||
} catch(IllegalArgumentException e) {
|
||||
// Don't add it
|
||||
for(UUID friend : getFriends()) {
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(friend);
|
||||
if(player != null) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -654,7 +650,7 @@ public abstract class GeneralRegion {
|
||||
if(isDeleted() || !isRentRegion()) {
|
||||
return false;
|
||||
}
|
||||
Set<String> signs = null;
|
||||
Set<String> signs = new HashSet<String>();
|
||||
if(config.getConfigurationSection("general.signs") != null) {
|
||||
signs = config.getConfigurationSection("general.signs").getKeys(false);
|
||||
}
|
||||
@@ -844,7 +840,6 @@ public abstract class GeneralRegion {
|
||||
*/
|
||||
public boolean restoreRegionBlocks(String fileName) {
|
||||
boolean result = true;
|
||||
// TODO: test world cast
|
||||
EditSession editSession = plugin.getWorldEdit().getWorldEdit().getEditSessionFactory().getEditSession(new BukkitWorld(getWorld()), plugin.getConfig().getInt("maximumBlocks"));
|
||||
ProtectedRegion region = plugin.getWorldGuard().getRegionManager(getWorld()).getRegion(getName());
|
||||
if(region == null) {
|
||||
@@ -857,7 +852,10 @@ public abstract class GeneralRegion {
|
||||
// The path to save the schematic
|
||||
File restoreFile = new File(plugin.getFileManager().getSchematicFolder() + File.separator + fileName + AreaShop.schematicExtension);
|
||||
|
||||
|
||||
if(!restoreFile.exists() || !restoreFile.isFile()) {
|
||||
plugin.getLogger().info("Did not restore region " + getName() + ", file does not exist: " + restoreFile);
|
||||
return false;
|
||||
}
|
||||
// // NEW
|
||||
// Closer closer = Closer.create();
|
||||
// try {
|
||||
@@ -897,6 +895,7 @@ public abstract class GeneralRegion {
|
||||
plugin.getLogger().warning("Exeeded the block limit while restoring schematic of " + getName());
|
||||
result = false;
|
||||
} catch(IOException | DataException e) {
|
||||
AreaShop.debug(e.getMessage());
|
||||
result = false;
|
||||
}
|
||||
editSession.flushQueue();
|
||||
@@ -1008,7 +1007,7 @@ public abstract class GeneralRegion {
|
||||
// Split the string and parse all values
|
||||
String[] names = value.split(", ");
|
||||
DefaultDomain members = region.getMembers();
|
||||
members.clear();
|
||||
members.removeAll();
|
||||
for(String member : names) {
|
||||
if(member != null && !member.isEmpty()) {
|
||||
// Check for groups
|
||||
@@ -1040,7 +1039,7 @@ public abstract class GeneralRegion {
|
||||
// Split the string and parse all values
|
||||
String[] names = value.split(", ");
|
||||
DefaultDomain owners = region.getOwners();
|
||||
owners.clear();
|
||||
owners.removeAll();
|
||||
for(String owner : names) {
|
||||
if(owner != null && !owner.isEmpty()) {
|
||||
// Check for groups
|
||||
|
||||
@@ -293,7 +293,7 @@ public class RentRegion extends GeneralRegion {
|
||||
* @return The number of minutes until the region is unrented while player is offline
|
||||
*/
|
||||
public long getInactiveTimeUntilUnrent() {
|
||||
return getIntegerSetting("rent.inactiveTimeUntilUnrent");
|
||||
return getLongSetting("rent.inactiveTimeUntilUnrent");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -603,11 +603,11 @@ public class RentRegion extends GeneralRegion {
|
||||
return false;
|
||||
}
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(getRenter());
|
||||
//AreaShop.debug("inactive checking for " + getName() + ", player=" + player.getName() + ", currenttime=" + Calendar.getInstance().getTimeInMillis() + ", lastPlayed=" + player.getLastPlayed() + ", diff=" + (Calendar.getInstance().getTimeInMillis() - player.getLastPlayed()));
|
||||
int inactiveSetting = getIntegerSetting("rent.inactiveTimeUntilUnrent");
|
||||
long inactiveSetting = getInactiveTimeUntilUnrent();
|
||||
if(inactiveSetting <= 0 || player.isOp()) {
|
||||
return false;
|
||||
}
|
||||
//AreaShop.debug("inactivetimemillis: " + inactiveSetting * 60 * 1000);
|
||||
if(Calendar.getInstance().getTimeInMillis() > (player.getLastPlayed() + inactiveSetting * 60 * 1000)) {
|
||||
plugin.getLogger().info("Region " + getName() + " unrented because of inactivity for player " + getPlayerName());
|
||||
this.unRent(true);
|
||||
|
||||
Reference in new issue
Block a user