diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 2ae888decd9..0c90a368902 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -93,6 +93,7 @@ import net.ess3.provider.providers.PaperRecipeBookListener; import net.ess3.provider.providers.PaperSerializationProvider; import net.ess3.provider.providers.PaperServerStateProvider; +import net.ess3.provider.providers.PaperTickCountProvider; import net.ess3.provider.providers.PrehistoricPotionMetaProvider; import net.essentialsx.api.v2.services.BalanceTop; import net.essentialsx.api.v2.services.mail.MailService; @@ -421,6 +422,9 @@ public void onEnable() { // Biome Key Provider providerFactory.registerProvider(PaperBiomeKeyProvider.class); + // Tick Count Provider + providerFactory.registerProvider(PaperTickCountProvider.class); + providerFactory.finalizeRegistration(); // Event Providers diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 65d495c9955..84a190a027b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -20,6 +20,7 @@ import net.ess3.provider.FormattedCommandAliasProvider; import net.ess3.provider.InventoryViewProvider; import net.ess3.provider.KnownCommandsProvider; +import net.ess3.provider.TickCountProvider; import net.ess3.provider.providers.BukkitCommandSendListenerProvider; import net.ess3.provider.providers.PaperCommandSendListenerProvider; import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent; @@ -588,6 +589,17 @@ public void onPlayerTeleport(final PlayerTeleportEvent event) { if (ess.getSettings().isTeleportInvulnerability()) { user.enableInvulnerabilityAfterTeleport(); } + + // Mitigation for https://github.com/EssentialsX/Essentials/issues/4325 + final TickCountProvider tickCountProvider = ess.provider(TickCountProvider.class); + if (tickCountProvider != null && ess.getSettings().isWorldChangePreserveFlying() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_17_R01)) { + if (user.isAuthorized("essentials.fly")) { + //noinspection DataFlowIssue - not real + if (event.getFrom().getWorld() != event.getTo().getWorld() && player.isFlying()) { + user.setFlightTick(tickCountProvider.getTickCount()); + } + } + } } @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @@ -741,8 +753,7 @@ public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event) { if (ess.getSettings().isWorldChangeFlyResetEnabled()) { if (user.getBase().getGameMode() != GameMode.CREATIVE - // COMPAT: String compare for 1.7.10 - && !user.getBase().getGameMode().name().equals("SPECTATOR") + && user.getBase().getGameMode() != GameMode.SPECTATOR && !user.isAuthorized("essentials.fly")) { user.getBase().setFallDistance(0f); user.getBase().setAllowFlight(false); @@ -765,6 +776,13 @@ public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event) { } } } + + final TickCountProvider tickCountProvider = ess.provider(TickCountProvider.class); + if (tickCountProvider != null && user.getFlightTick() == tickCountProvider.getTickCount()) { + user.getBase().setAllowFlight(true); + user.getBase().setFlying(true); + } + user.setFlightTick(-1); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index c39c6975bdb..23e63d05973 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -346,6 +346,8 @@ public interface ISettings extends IConf { boolean isWorldChangeFlyResetEnabled(); + boolean isWorldChangePreserveFlying(); + boolean isWorldChangeSpeedResetEnabled(); long getCommandCooldownMs(String label); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 938738e2432..2334d93e1db 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -1928,6 +1928,11 @@ public boolean isWorldChangeFlyResetEnabled() { return config.getBoolean("world-change-fly-reset", true); } + @Override + public boolean isWorldChangePreserveFlying() { + return config.getBoolean("world-change-preserve-flying", true); + } + @Override public boolean isWorldChangeSpeedResetEnabled() { return config.getBoolean("world-change-speed-reset", true); diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index ec823e2062e..c5cf54e4576 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -102,6 +102,7 @@ public class User extends UserData implements Comparable, IMessageRecipien // Misc private transient final List signCopy = Lists.newArrayList("", "", "", ""); private transient long lastVanishTime = System.currentTimeMillis(); + private transient int flightTick = -1; private String lastLocaleString; private Locale playerLocale; @@ -1299,4 +1300,12 @@ public boolean isToggleShout() { } return toggleShout == null ? toggleShout = ess.getSettings().isShoutDefault() : toggleShout; } + + public int getFlightTick() { + return flightTick; + } + + public void setFlightTick(int flightTick) { + this.flightTick = flightTick; + } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandskull.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandskull.java index e91a3addbf6..e491a22f7a9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandskull.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandskull.java @@ -89,7 +89,7 @@ protected void run(final Server server, final User user, final String commandLab if (itemSkull != null && MaterialUtil.isPlayerHead(itemSkull) && user == player) { metaSkull = (SkullMeta) itemSkull.getItemMeta(); - } else if (user.isAuthorized("essentials.skull.spawn")) { + } else if (user == player ? user.isAuthorized("essentials.skull.spawn") : user.isAuthorized("essentials.skull.spawn.others")) { itemSkull = new ItemStack(SKULL_ITEM, 1, (byte) 3); metaSkull = (SkullMeta) itemSkull.getItemMeta(); spawn = true; diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index f10f9924809..aece1efe20c 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -224,6 +224,11 @@ socialspy-uses-displaynames: true # This will disable flight if the player does not have essentials.fly. world-change-fly-reset: true +# Starting in 1.17, Minecraft no longer preserves the abilities of a player when they change worlds. +# Setting this to true will make EssentialsX preserve if users flying when they change worlds. +# This will only work if the player has the essentials.fly permission. +world-change-preserve-flying: true + # When a player changes world, should we reset their speed according to their permissions? # This resets the player's speed to the default if they don't have essentials.speed. # If the player doesn't have essentials.speed.bypass, this resets their speed to the maximum specified above. diff --git a/Essentials/src/main/resources/messages_de.properties b/Essentials/src/main/resources/messages_de.properties index 1439db133d1..46bbe16625f 100644 --- a/Essentials/src/main/resources/messages_de.properties +++ b/Essentials/src/main/resources/messages_de.properties @@ -101,6 +101,7 @@ bottomCommandDescription=Teleportiere zum niedrigsten Punkt an deiner aktuellen bottomCommandUsage=/ breakCommandDescription=Zerstört den Block, den du anschaust. breakCommandUsage=/ +broadcast=[Rundruf] {0} broadcastCommandDescription=Versendet eine Nachricht an den gesamten Server. broadcastCommandUsage=/ broadcastCommandUsage1=/ @@ -125,6 +126,7 @@ cantReadGeoIpDB=Fehler beim Einlesen der GeoIP-Datenbank\! cantSpawnItem=Du darfst Gegenstand {0} nicht erzeugen. cartographytableCommandDescription=Öffnet einen Kartentisch. cartographytableCommandUsage=/ +chatTypeLocal=[L] chatTypeSpy=[Spion] cleaned=Spielerdateien geleert. cleaning=Säubere Spielerdateien. @@ -140,6 +142,9 @@ clearinventoryCommandUsage3=/ [amount] clearinventoryCommandUsage3Description=Löscht alles (oder die angegebene Anzahl) des angegebenen Gegenstands aus dem Inventar des angegebenen Spielers clearinventoryconfirmtoggleCommandDescription=Bestimmt, ob du Inventarleerungen bestätigen musst. clearinventoryconfirmtoggleCommandUsage=/ +commandArgumentOptional= +commandArgumentOr= +commandArgumentRequired= commandCooldown=Du kannst diesen Command nicht ausführen für {0}. commandDisabled=Der Befehl {0} ist deaktiviert. commandFailed=Befehl {0} ist fehlgeschlagen\: @@ -148,6 +153,7 @@ commandHelpLine1=Befehlshilfe\: /{0} commandHelpLine2=Beschreibung\: {0} commandHelpLine3=Verwendung(en)\: commandHelpLine4=Alias(e)\: {0} +commandHelpLineUsage={0} - {1} commandNotLoaded=Befehl {0} ist nicht richtig geladen. consoleCannotUseCommand=&cDieser Befehl kann nur per Konsole ausgeführt werden. compassBearing=Peilung\: {0} ({1} Grad). @@ -175,6 +181,7 @@ createkitCommandUsage=/ createkitCommandUsage1=/ createkitCommandUsage1Description=Erstellt ein Kit mit angegebenen Namen und Abklingzeit createKitFailed=Beim Erstellen des Kits ist ein Fehler aufgetreten {0}. +createKitSeparator=----------------------- createKitSuccess=Kit erstellt\: {0}\nVerzögerung\: {1}\nLink\: {2}\nEs werden Inhalte aus dem oben stehenden Link in deine kits.yml kopiert. createKitUnsupported=NBT-Item-Serialisierung wurde aktiviert, aber dieser Server läuft nicht unter Paper 1.15.2+. Gehe zurück zur Standardserialisierung. creatingConfigFromTemplate=Erstelle Konfiguration aus der Vorlage\: {0} @@ -485,6 +492,7 @@ helpCommandDescription=Zeigt eine Liste an verfügbaren Befehlen an. helpCommandUsage=/ [suchbegriff] [seite] helpConsole=Um die Hilfe von der Konsole zu sehen, schreibe "?". helpFrom=Befehle von {0}\: +helpLine=/{0}\: {1} helpMatching=Befehle ähnlich wie "{0}"\: helpOp=[Hilfe] {0}\: {1} helpPlugin={0}\: Plugin-Hilfe\: /help {1} @@ -572,6 +580,7 @@ itemCommandUsage1=/ [anzahl] itemCommandUsage1Description=Gibt dir einen vollständigen Stack (oder die angegebene Anzahl) des angegebenen Gegenstands itemCommandUsage2=/ itemCommandUsage2Description=Gibt die angegebe Menge des ausgewählten Items mit den gegebenen Metadaten +itemId=ID\: {0} itemloreClear=Du hast die Beschreibung dieses Gegenstands geleert. itemloreCommandDescription=Die Beschreibung eines Gegenstand bearbeiten. itemloreCommandUsage=/ [text/zeile] [text] @@ -656,12 +665,15 @@ kitCommandUsage1Description=Zeigt alle verfügbaren Kits kitCommandUsage2=/ [spieler] kitCommandUsage2Description=Gibt dir, oder einem angegebenen Spieler, das ausgewählt Kit kitContains=Ausrüstung {0} enthält\: +kitCost=\ ({0}) +kitDelay={0} kitError=Es gibt keine gültigen Kits. kitError2=Dieses Kit ist nicht korrekt definiert. Kontaktiere einen Administrator. kitError3=Es konnte kein Kit Item im Kit "{0}" an {1} gegeben werden, da dafür Paper 1.15.2+ benötigt wird. kitGiveTo=Du gibst {1} {0}-Kit. kitInvFull=Dein Inventar ist voll. Das Kit wird auf den Boden gelegt. kitInvFullNoDrop=In deinem Inventar ist nicht genug Platz für dieses Kit. +kitItem=- {0} kitNotFound=Dieses Kit gibt es nicht. kitOnce=Du kannst diese Kit nicht nochmals bekommen. kitReceive={0}-Kit erhalten. @@ -695,9 +707,11 @@ listCommandDescription=Liste alle verfügbaren Spieler. listCommandUsage=/ [Gruppe] listCommandUsage1=/ [gruppe] listCommandUsage1Description=Listet alle Spieler auf dem Server oder aus der gegebenen Gruppe auf, so fern angegeben +listGroupTag={0}\: listHiddenTag=[Versteckt] listRealName=({0}) loadWarpError=Beim Laden von Warp-Punkt {0} ist ein Fehler aufgetreten. +localFormat=[L] <{0}> {1} loomCommandDescription=Öffnet einen Webstuhl. loomCommandUsage=/ mailClear=Um deine Nachrichten zu löschen, schreibe /mail clear. @@ -723,6 +737,11 @@ mailCommandUsage7Description=Sendet dem angegebenen Spieler die angegebene Nachr mailCommandUsage8=/ sendtempall mailCommandUsage8Description=Sendet allen Spielern die angegebene Nachricht, die in der angegebenen Zeit abläuft mailDelay=In der letzten Minute wurden zu viele Nachrichten gesendet. Maximum\: {0} +mailFormatNew=[{0}] [{1}] {2} +mailFormatNewTimed=[] [{0}] [{1}] {2} +mailFormatNewRead=[{0}] [{1}] {2} +mailFormatNewReadTimed=[] [{0}] [{1}] {2} +mailFormat=[{0}] {1} mailMessage={0} mailSent=Nachricht gesendet\! mailSentTo={0} wurde diese Mail gesendet\: @@ -747,6 +766,7 @@ minute=Minute minutes=Minuten missingItems=Du hast nicht {0}x {1}. mobDataList=Gültige Mob Daten\: {0} +mobsAvailable=Mobs\: {0} mobSpawnError=Beim Ändern des Monster-Spawners ist ein Fehler aufgetreten. mobSpawnLimit=Die Anzahl an Monstern wurde auf das festgelegte Limit beschränkt. mobSpawnTarget=Zielblock muss ein Monster-Spawner sein. @@ -806,6 +826,7 @@ nearCommandUsage3Description=Listet alle Spieler auf, die sich innerhalb vom sta nearCommandUsage4=/ nearCommandUsage4Description=Listet alle Spieler innerhalb des angegebenen Radius von dir auf nearbyPlayers=Spieler in der Nähe\: {0} +nearbyPlayersList={0}({1}m) negativeBalanceError=Spieler dürfen keine Schulden machen. nickChanged=Spitzname geändert. nickCommandDescription=Ändere deinen Nicknamen oder den eines anderen Spielers. @@ -1179,6 +1200,8 @@ editsignCommandUsage3=/ copy [zeilennummer] editsignCommandUsage3Description=Kopiert alle (oder die angegebene) Zeile(n) des anvisierten Schildes in die Zwischenablage editsignCommandUsage4=/ paste [zeilennummer] editsignCommandUsage4Description=Fügt die Zwischenablage komplett (oder in die angegebene Zeile) des anvisierten Schildes ein +signFormatFail=[{0}] +signFormatSuccess=[{0}] signFormatTemplate=[{0}] signProtectInvalidLocation=Du hast keine Berechtigung hier ein Schild zu platzieren. similarWarpExist=Ein Warp-Punkt mit dem selben Namen existiert bereits. @@ -1203,11 +1226,13 @@ slimeMalformedSize=Ungültige Größe. smithingtableCommandDescription=Öffnet einen Schmiedetisch. smithingtableCommandUsage=/ socialSpy=SocialSpy für {0} {1}. +socialSpyMsgFormat=[{0} -> {1}] {2} socialSpyMutedPrefix=[SS] (gemutet) socialspyCommandDescription=Bestimmt, ob du Nachrichten-Befehle im Chat sehen kannst. socialspyCommandUsage=/ [spieler] [on|off] socialspyCommandUsage1=/ [spieler] socialspyCommandUsage1Description=Schaltet den sozialen Spion für sich selbst oder einen anderen Spieler, falls angegeben, ein +socialSpyPrefix=[SS] soloMob=Das Monster möchte allein sein. spawned=erzeugt spawnerCommandDescription=Ändere den Monster-Typ eines Spawners. @@ -1268,6 +1293,7 @@ teleportRequestTimeoutInfo=Diese Anfrage wird nach {0} Sekun teleportTop=Zum höchsten Punkt teleportieren. teleportToPlayer=Du teleportierst dich zu {0}. teleportOffline=Der Spieler {0} ist gerade offline. Du kannst dich mit /otp zu ihm teleportieren. +teleportOfflineUnknown=Die letzte bekannte Position von {0} konnte nicht gefunden werden. tempbanExempt=Du kannst diesen Spieler nicht temporär bannen. tempbanExemptOffline=Du darfst Spieler, die offline sind, nicht temporär bannen. tempbanJoin=Du bist auf diesem Server gesperrt. \nDauer\: {0}\nGrund\: {1} @@ -1474,6 +1500,7 @@ versionCheckDisabled=Updateüberprüfung in der Config deaktiviert. versionCustom=Deine Version kann nicht überprüft werden\! Selbstgebaut? Build Informationen\: {0}. versionDevBehind=Du bist {0} EssentialsX Dev-Build(s) veraltet\! versionDevDiverged=Du verwendest einen experimentellen Build von EssentialsX, der {0} Builds hinter dem neuesten Dev-Build ist\! +versionDevDivergedBranch=Feature Branch\: {0}. versionDevDivergedLatest=Du verwendest einen aktuellen experimentellen EssentialsX-Build\! versionDevLatest=Du verwendest den neuesten EssentialsX Dev-Build\! versionError=Fehler beim Abrufen von EssentialsX-Versionsinformationen\! Build-Informationen\: {0}. @@ -1550,8 +1577,11 @@ whoisMoney= - Kontostand\: {0} whoisMuted= - Stummgeschaltet\: {0} whoisMutedReason= - Stummgeschaltet\: {0} Grund\: {1} whoisNick= - Spitzname\: {0} +whoisOp= - OP\: {0} whoisPlaytime= - Spielzeit\: {0} whoisTempBanned= - Bann endet\: {0} +whoisTop= \=\=\=\=\=\= WhoIs\: {0} \=\=\=\=\=\= +whoisUuid= - UUID\: {0} whoisWhitelist= - Gästeliste\: {0} workbenchCommandDescription=Öffnet eine Werkbank. workbenchCommandUsage=/ diff --git a/Essentials/src/main/resources/messages_en.properties b/Essentials/src/main/resources/messages_en.properties index d51113edaec..82733780d04 100644 --- a/Essentials/src/main/resources/messages_en.properties +++ b/Essentials/src/main/resources/messages_en.properties @@ -1,5 +1,4 @@ #Sat Feb 03 17:34:46 GMT 2024 -addedToAccount=>> Server\: ${0} has been received from {player}.. addedToOthersAccount= adventure=adventure afkCommandDescription=Marks you as away-from-keyboard. diff --git a/Essentials/src/main/resources/messages_he.properties b/Essentials/src/main/resources/messages_he.properties index e5e40e49882..d9d93a99123 100644 --- a/Essentials/src/main/resources/messages_he.properties +++ b/Essentials/src/main/resources/messages_he.properties @@ -1,8 +1,11 @@ #Sat Feb 03 17:34:46 GMT 2024 action={0} {1} +addedToAccount={0} נוספו לחשבון שלך. +addedToOthersAccount={0} נוספו לחשבון של {1}. יתרה חדשה\\\: {2} adventure=הרפתקה afkCommandDescription=שם אותך כ-רחוק מהמקלדת. afkCommandUsage=[שחקן/הודעה...] +afkCommandUsage1=/ [הודעה] afkCommandUsage1Description=מחליף את מצב ה-רחוק מהמקלדת שלך עם סיבה אופציונלית afkCommandUsage2=[הודעה] afkCommandUsage2Description=מחליף את מצב ה-רחוק מהמקלדת של השחקן הספציפי עם סיבה אופציונלית @@ -20,14 +23,18 @@ antiBuildUse= אתה לא רשאי להשתמש ב {0} autoAfkKickReason=אתה קיבלת קיק על אי פעילות של יותר מ {0} דקות. autoTeleportDisabled=אתה לא מאשר בקשות השתגרות באופן אוטומטי יותר. +autoTeleportDisabledFor={0} כבר לא מאשר אוטומטית בקשות שיגורים. autoTeleportEnabled= אתה כעת מאשר בקשות השתגרות באופן אוטומטי. autoTeleportEnabledFor={0} כעת מאשר בקשות השתגרות באופן אוטומטי. backAfterDeath=השתמש בפקודת /back על מנת לחזור למקום בו מתת. backCommandDescription=משחק אותך למיקום קודם לtp/spawn/warp. backCommandUsage=שחקן +backCommandUsage1=/ backCommandUsage1Description=משגר אותך למקום הקודם שלך +backCommandUsage2=/ backCommandUsage2Description=משגר שחקן למיקום הקודם שלו backOther=החזיר את {0} למיקום הוקדם שלו. backupCommandDescription=מריץ גיבוי לשרת אם מוגדר כזה. @@ -39,16 +46,21 @@ backupInProgress=סקריפט גיבוי חיצוני מתבצע כעת backUsageMsg= חוזר למיקום הקודם. balance= מאזנך\: {0} balanceCommandDescription=מציג את היתרה של שחקן. +balanceCommandUsage=/ [שחקן] +balanceCommandUsage1=/ balanceCommandUsage1Description=מציג את היתרה שלכם +balanceCommandUsage2=/ balanceCommandUsage2Description=מציג את היתרה של שחקן נבחר balanceOther=יתרה של {0}\: {1} balanceTop= בעלי המאזן הגבוה ביותר\: ({0}) balanceTopLine={0}. {1}, {2} balancetopCommandDescription=מציג את רשימת הכי עשירים. balancetopCommandUsage=/ [page] +balancetopCommandUsage1=/ [עמוד] balancetopCommandUsage1Description=מציג את העמוד הראשון (או שצוין) של רשימת העשירים banCommandDescription=מרחיק שחקן. banCommandUsage=/ [reason] +banCommandUsage1=/ [סיבה] banCommandUsage1Description=מרחיק שחקן מסוים אם סיבת הרחקה banExempt= אתה לא יכול לתת באן לשחקן הזה. banExemptOffline=אי אפשר להרחיק שחקנים לא מחוברים. @@ -57,6 +69,7 @@ banIpJoin=כתובת האייפי שלך מורחקת מהשרת הזה. בגל banJoin=את\\ה מורחק\\ת מהשרת הזה. בגלל\: {0} banipCommandDescription=מרחיק כתובת אייפי. banipCommandUsage=/
[reason] +banipCommandUsage1=/
[סיבה] banipCommandUsage1Description=מרחיק אייפי מסוים אם סיבת הרחקה bed=\nמיטה\n bedMissing= המיטה שלך לא ממוקמת,חסרה או חסומה. @@ -64,16 +77,19 @@ bedNull=\nמיטה\n bedOffline=אי אפשר להשתגר לשחקנים שלא מחוברים. bedSet= מיקום לא מתאים לזימון\! beezookaCommandDescription=זורק דבורה מתפוצצת על מישהו. +beezookaCommandUsage=/ bigTreeFailure= זימון עץ גדול נכשל.תנסה שובה על דשא או אדמה. bigTreeSuccess= עץ גדול זומן. bigtreeCommandDescription=משגר עץ גדול בכיוון שאתם מסתכלים. bigtreeCommandUsage=/ +bigtreeCommandUsage1=/ bigtreeCommandUsage1Description=משגר עץ גדול בסוג מסוים blockList=EssentialsX מעביר את הפקודות הבאות לפלאגינים אחרים\: blockListEmpty=EssentialsX לא מעביר פקודות לפלאגינים אחרים. bookAuthorSet= מחבר הספר נקבע ל\: {0}. bookCommandDescription=מאפשר פתיחה ועריכה מחדש של ספרים חתומים. bookCommandUsage=/ [כותרת|יוצר [name]] +bookCommandUsage1=/ bookCommandUsage1Description=נועל/פותח את הנעילה של ספר-נוצה/ספר חתום bookCommandUsage2=/ כותב הספר bookCommandUsage2Description=מגדיר את המחבר של ספר חתום @@ -82,27 +98,35 @@ bookCommandUsage3Description=קובע את הכותרת של ספר חתום bookLocked= ספר זה נעול. bookTitleSet= כותרת הספר נקבע ל {0}. bottomCommandDescription=השתגר לבלוק הנמוך ביותר במיקום שלך. +bottomCommandUsage=/ breakCommandDescription=שובר את הבלוק שאתם מסתכלים עליו. +breakCommandUsage=/ broadcast=[הכרזה] {0} broadcastCommandDescription=שולח הרכזה לכל השרת. broadcastCommandUsage=/ +broadcastCommandUsage1=/ broadcastCommandUsage1Description=מכריז את ההודעה הנתונה לכל השרת broadcastworldCommandDescription=מכריז הודעה לעולם מסוים. broadcastworldCommandUsage=/ +broadcastworldCommandUsage1=/ broadcastworldCommandUsage1Description=מכריז הודעה מסוימת לעולם מסוים burnCommandDescription=הדליקו שחקן באש. burnCommandUsage=/ +burnCommandUsage1=/ burnCommandUsage1Description=מדליק את שחקן מסוים למשך כמות השניות שנבחרה burnMsg= אתה העלת {0} באש ל {1} שניות . cannotSellNamedItem= אי אפשר למכור דברים אם שם מיוחד. cannotSellTheseNamedItems=אסור לך למכור את הדברים האלו\: {0} cannotStackMob= אין לך הרשאה לאסוף מספר חיות. +cannotRemoveNegativeItems= לא ניתן להסיר כמות שלילית של פריטים. canTalkAgain= אתה יכול לדבר עכשיו שוב. cantFindGeoIpDB=לא הייתה אפשרות למצוא GeoIP database\! cantGamemode=אין לך הרשאה לעבור למצב משחק {0} cantReadGeoIpDB=לא יכול לקרוא GeoIP database\! cantSpawnItem= אתה לא רשאי לזמן את החפץ {0}. cartographytableCommandDescription=פותח שולחן קרטוגרפיה. +cartographytableCommandUsage=/ +chatTypeLocal=[צ] chatTypeSpy=[מרגל] cleaned=פרטי המשתמש נוקו. cleaning=מנקה את פרטי המשתמש. @@ -110,11 +134,17 @@ clearInventoryConfirmToggleOff=לא תוצג הבקשה לאישור נ clearInventoryConfirmToggleOn=תוצג הבקשה לאישור ניקוי אינבטורי. clearinventoryCommandDescription=ניקוי כל הדברים באינבנטורי שלך. clearinventoryCommandUsage=/ [שחקן|*] [חפץ[\:\\]|*|**] [amount] +clearinventoryCommandUsage1=/ clearinventoryCommandUsage1Description=מנקה את כל הדברים באינבנטורי שלך +clearinventoryCommandUsage2=/ clearinventoryCommandUsage2Description=מנקה את כל הדברים בתוך אינבנטורי של שחקן מסוים clearinventoryCommandUsage3=/ [amount] clearinventoryCommandUsage3Description=מנקה הכל (או מספר) של חפץ מסוים מאינבנטורי של שחקן מסוים clearinventoryconfirmtoggleCommandDescription=משנה את ההגדרה אם תתבקשו לאשר ניקוי אינבנטורי. +clearinventoryconfirmtoggleCommandUsage=/ +commandArgumentOptional= +commandArgumentOr= +commandArgumentRequired= commandCooldown=אתם לא יכולים לכתוב את הפקודה הזאת ל {0}. commandDisabled=הפקודה {0} מבוטלת. commandFailed=פקודה {0} נכשלה\: @@ -123,16 +153,22 @@ commandHelpLine1=עזרה בפקודות\: /{0} commandHelpLine2=תיאור\: {0} commandHelpLine3=שימוש(ים); commandHelpLine4=כינוי(ם)\: {0} +commandHelpLineUsage={0} - {1} commandNotLoaded=\ {0} פקודה {0} לא נטענה כמו שצריך. consoleCannotUseCommand=הפקודה הזאת אינה מאופשרת לשימוש דרך הקונסולה. compassBearing=נושא\: {0} ({1} מעלות). compassCommandDescription=מציג את הכיוון הנוכחי שלך. +compassCommandUsage=/ condenseCommandDescription=דוחס פריטים לבלוקים קומפקטיים יותר. condenseCommandUsage=/ [item] +condenseCommandUsage1=/ condenseCommandUsage1Description=דוחס את כל הדברים באינבנטורי שלך +condenseCommandUsage2=/ condenseCommandUsage2Description=דוחס פריט מסויים בתוך האינבנטורי שלך configFileMoveError=נכשלה העברת config.yml למיקומי הגיבויים. configFileRenameError=נכשל שינוי השם של קבצי temp ל config.yml. +confirmClear=כדי לאשראת ניקוי האינווטורי, אנא חזור על הפקודה\\\: {0} +confirmPayment=כדי לאשר תשלום של {0}, אנא חזור על הפקודה\\\: {1} connectedPlayers= התחברו שחקנים connectionFailed=נכשל פתיחת חיבור. consoleName=מסוף @@ -142,8 +178,12 @@ couldNotFindTemplate= לא הצליח למצוא template {0} createdKit=יצר ערכה {0} אם {1} כניסות ועיכוב{2} createkitCommandDescription=יצירת ערכה בתוך המשחק\! createkitCommandUsage=/ +createkitCommandUsage1=/ createkitCommandUsage1Description=יוצר ערכה עם השם הנתון ודיליי createKitFailed=אירעה שגיאה בעת יצירת ערכה {0}. +createKitSeparator=----------------------- +createKitSuccess=קיט שנוצר\: {0}\nזמן בין כל פתיחה\: {1}\nקישור\: {2}\nהעתק את התוכן בקישור למעלה לתוך קובץ ה-kits.yml שלך. +createKitUnsupported=סידור פריט NBT הופעלה, אך שרת זה לא מריץ Paper 1.15.2+. חוזרים לסידור הפריטים הסטנדרטי. creatingConfigFromTemplate=יוצר קונפינג מ template\: {0} creatingEmptyConfig=יוצר קונפינג ריק\: {0} creative=יצירתי @@ -171,12 +211,15 @@ delhomeCommandUsage2=\\ \: delhomeCommandUsage2Description=מוחק את הבית של השחקן עם שם מסוים deljailCommandDescription=מסיר כלא. deljailCommandUsage=\\ +deljailCommandUsage1=/ deljailCommandUsage1Description=מוחק את הכלא עם השם מסוים delkitCommandDescription=מוחק ערכה אם שם מסוים. delkitCommandUsage=\\ +delkitCommandUsage1=/ delkitCommandUsage1Description=מוחק ערכה בשם מסוים delwarpCommandDescription=מוחק מקום שיגור מסוים. delwarpCommandUsage=/ +delwarpCommandUsage1=/ delwarpCommandUsage1Description=מוחק מקום שיגור אם בשם מסיום deniedAccessCommand=\n{0} כשל ניסיונו לפקודה.\n denyBookEdit=\nאינך יכול לבטל את הנעילה מספר זה.\n @@ -193,6 +236,7 @@ disabledToSpawnMob=\nשיגור mob זה בוטל בקובץ הקונ disableUnlimited=מבטל את האפשרות לשים {0} ל {1}. discordbroadcastCommandDescription=מכריז הודעה לערוץ הדיסקורד שצוין. discordbroadcastCommandUsage=\\ +discordbroadcastCommandUsage1=/ discordbroadcastCommandUsage1Description=שולח את ההודעה הנתונה לערוץ הדיסקורד שצוין discordbroadcastInvalidChannel=ערוץ דיסקורד {0} אינו קיים. discordbroadcastPermission=אין לך הרשאה לשלוח הודעות לערוץ הזה {0}. @@ -204,6 +248,9 @@ discordCommandAccountResponseLinkedOther=המשתמש של {0} מחובר למש discordCommandAccountResponseNotLinked=אין לך משתמש מיינקראפט מחובר. discordCommandAccountResponseNotLinkedOther=ל{0} אין משתמש מיינקראפט מחובר. discordCommandDescription=שולח את קישור הזמנת הדיסקורד לשחקן. +discordCommandLink=הצטרף לשרת הDiscord שלנו בכתובת {0}\! +discordCommandUsage=/ +discordCommandUsage1=/ discordCommandUsage1Description=שולח את קישור הזמנה לדיסקרוד לשחקן discordCommandExecuteDescription=מבצע פקודת קונסולה בשרת מיינקראפט. discordCommandExecuteArgumentCommand=הפקודה שיש לבצע @@ -234,6 +281,9 @@ discordErrorNoPrimaryPerms=הבוט שלכם לא יכול לדבר בערוץ discordErrorNoToken=אין לבוט token\! אנא עקובו אחר המדריך ההגדרה כדי להגדיר את הפלאגין. discordErrorWebhook=אירעה שגיאה בעת שליחת הודעות לערוץ הקונסולה שלכם\! זה כנראה נגרם על ידי מחיקה בטעות של ה-webhook של הקונסולה שלכם. אפשר לתקן את זה, פשוט מאוד הגדירו מחדש את ההרשאות "Manage Webhooks" והריצו את הפקודה "\\ess reload". discordLinkInvalidGroup=קבוצה לא מאופשרת {0} קיבלה את התפקיד {1}. הקבוצות הבאות מאופשרות\: {2} +discordLinkInvalidRole=מזהה תפקיד לא חוקי, {0}, סופק עבור הקבוצה\: {1}. אתה יכול לראות את מזהה התפקידים עם הפקודה roleinfo/ ב-Discord. +discordLinkInvalidRoleInteract=לא ניתן להשתמש בתפקיד, {0} ({1}), לסנכרון קבוצה->תפקידים מכיוון שהוא מעל התפקיד העליון של הבוט שלך. העבר את תפקיד הבוט שלך מעל "{0}" או העבר את "{0}" מתחת לתפקיד הבוט שלך. +discordLinkInvalidRoleManaged=לא ניתן להשתמש בתפקיד, {0} ({1}), לסנכרון קבוצה->תפקידים מכיוון שהוא מנוהל על ידי בוט או אינטגרציה אחרים. discordLoggingIn=מנסה להיכנס לדיסקורד... discordLoggingInDone=נכנס בהצלחה בתור {0} discordMailLine=**אימייל חדש מ{0}\:** {1} @@ -367,53 +417,99 @@ godDisabledFor=בוטלc& ל6& {0} c& godEnabledFor=הופעלa& ל6& {0} c& godMode=מצב אל6& {0} c&. groupDoesNotExist=אין אף שחקן מחובר שנמצא בקבוצה הזו\! 4& +groupNumber={0} עכשיו בשרת, לרשימה המלאה\: /{1} {2} hatArmor=אתה לא יכול להשתמש בפריט הזה בתור כובע\! +hatCommandDescription=קבל כיסוי ראש חדש ומגניב. hatCommandUsage=[remove] / +hatCommandUsage1=/ hatCommandUsage1Description=שנה את הכובע שלך לפריט שנמצא ביד שלך +hatCommandUsage2=/ remove +hatCommandUsage2Description=מסיר את הכובע הנוכחי שלך +hatCurse=לא ניתן להסיר כובע עם curse of binding\! hatEmpty=אתה לא חובש כובע.\n +hatFail=צריך שפריט יהיה ביד שלך כדי ללבוש אותו. +hatPlaced=תהנה מהכובע החדש שלך\! hatRemoved=הכובע שלך נמחק. +haveBeenReleased= שוחררת. +heal=נרפאת. +healCommandDescription=מרפא אותך או את השחקן הנתון. +healCommandUsage=/ [שחקן] +healCommandUsage1=/ [שחקן] +healCommandUsage1Description=מרפא אותך או שחקן אחר אם צוין +healDead=לא ניתן לרפא מישהו שמת\! +healOther=ריפאת את {0}. +helpCommandDescription=מציג רשימה של פקודות זמינות. helpCommandUsage=\\ [search term] [page] +helpConsole=כדי להציג עזרה מהמסוף, הקלד ''?''. helpFrom=פקודות מ {0}\: +helpLine=/{0}\: {1} +helpMatching=פקודות תואמות "{0}"\: +helpOp=[עזרה-ממנהל] {1} \:{0} helpPlugin=מידע על הפלאגין\: /help +helpopCommandDescription=שלח הודעה למנהלים זמינים. helpopCommandUsage=\\ +helpopCommandUsage1=/ +helpopCommandUsage1Description=שולח את ההודעה שניתנה לכל המנהלים המחוברים holdBook=אתה לא מחזיק בספר כתיבה. +holdFirework=אתה חייב להחזיק זיקוקים כדי להוסיף אפקטים. +holdPotion=אתה חייב להחזיק שיקוי כדי להחיל עליו אפקטים. holeInFloor=חור ברצפה \! homeCommandDescription=השתגר לבית שלך. homeCommandUsage=\\ [player\:][name] +homeCommandUsage1=/ +homeCommandUsage1Description=משגר אותך לביתך עם השם שצוין +homeCommandUsage2=/ \: homeCommandUsage2Description=משגר אותך לבית של השחקן הספציפי עם השם הניתן homes=בתים\: {0} homeConfirmation=כבר יש לך בית בשם {0}\!\nכדי להחליף את הבית הנוכחי שלך, הקלד את הפקודה בשנית. +homeRenamed=שם הבית {0} שונה ל{1}. homeSet=הבית הוגדר. hour=שעה hours=שעות ice=אתה מרגיש שקר לך יותר... iceCommandDescription=מקרר את השחקן. +iceCommandUsage=/ [שחקן] +iceCommandUsage1=/ iceCommandUsage1Description=מקרר אותך +iceCommandUsage2=/ iceCommandUsage2Description=מקרר את השחקן שניתן iceCommandUsage3=/ * iceCommandUsage3Description=מקרר את כל השחקנים המחוברים iceOther=מקרר {0}. ignoreCommandDescription=מתעלם או מבטל התעלמות משחקן. ignoreCommandUsage=\\ +ignoreCommandUsage1=/ ignoreCommandUsage1Description=מתעלם או מבטל התעלמות של השחקן הניתן ignoredList=מתעלם מהם\: {0} ignoreExempt=אתה לא יכול להתעלם מהשחקן הזה. ignorePlayer=אתה מתעלם מהשחקן {0} מעכשיו on. +ignoreYourself=התעלמות מעצמך לא תפתור את הבעיות שלך. illegalDate=תבנית תאריך לא חוקית. infoAfterDeath=אתה נהרגת ב {0} במיקום {1}, {2}, {3}. infoChapter=בחר פרק\: +infoChapterPages= ---- {0} -- עמוד {1} של {2} ---- +infoCommandDescription=מציג מידע שהוגדר על ידי בעל השרת. infoCommandUsage=\\ [chapter] [page] +infoPages= ---- {2} -- עמוד {0}/{1} ---- infoUnknownChapter=\nנתון לא ידוע.\n insufficientFunds=\nאין מספיק כסף זמין.\n +invalidBanner=תחביר באנר לא חוקי. invalidCharge=\nתשלום שגוי.\n +invalidFireworkFormat=האפשרות {0} אינה ערך חוקי עבור {1}. invalidHome=\nבית {0} לא קיים\!\n invalidHomeName=השם של הבית לא תקין \! +invalidItemFlagMeta=מטה לא חוקית של itemflag\: {0}. invalidMob=השם של המוב לא תקין \! +invalidModifier=שינוי לא חוקי. invalidNumber=מספר לא תקין. invalidPotion=שיקוי לא תקין +invalidPotionMeta=מטא לא חוקי של שיקוי\: {0}. +invalidSign=שלט לא חוקי invalidSignLine=\nשורה {0} בשלט היא שגוייה.\n +invalidSkull= נא להחזיק ראש של שחקן. invalidWarpName=השם של ה warp לא תקין \! invalidWorld=עולם לא מצא / תקין. +inventoryClearFail=לשחקן {0} אין {1} מ{2}. is=זה itemCannotBeSold=החפץ הזה לא יכול להמכר לשרת. itemCommandUsage=\\ [amount [itemmeta...]] diff --git a/Essentials/src/main/resources/messages_zh.properties b/Essentials/src/main/resources/messages_zh.properties index d05274418f1..a7cdc95e5d1 100644 --- a/Essentials/src/main/resources/messages_zh.properties +++ b/Essentials/src/main/resources/messages_zh.properties @@ -561,7 +561,7 @@ invalidWarpName=无效的传送点名称! invalidWorld=无效的世界。 inventoryClearFail=玩家{0}没有{2}{1}。 inventoryClearingAllArmor=已清空{0}的所有物品和盔甲。 -inventoryClearingAllItems=已清空{0}的所有物品。 +inventoryClearingAllItems=已清空{0}的所有物品。 inventoryClearingFromAll=清空所有玩家物品栏中... inventoryClearingStack={2}移除了{0}{1}。 inventoryFull=你的物品栏已满。 @@ -616,7 +616,7 @@ itemSellAir=你打算卖空气吗?拿个东西在你手里。 itemsNotConverted=你没有可以转换成方块的物品。 itemSold=获得{0}({1}个{2},每个价值{3}) itemSoldConsole={0}通过卖出{1}得到了{2}({3}物品,每个价值{4})。 -itemSpawn=给予{0}个{1} +itemSpawn=给予{0}{1} itemType=物品:{0} itemdbCommandDescription=搜索一件物品。 itemdbCommandUsage=/ <物品> @@ -670,7 +670,7 @@ kitDelay={0} kitError=没有有效的物品包。 kitError2=该物品包的配置不正确。请联系管理员。 kitError3=无法给予玩家{1}工具包,因为工具包“{0}”需要Paper 1.15.2以上的版本来反序列化。 -kitGiveTo=将物品包 {0} 给予 {1}。 +kitGiveTo=将物品包{0}给予{1}。 kitInvFull=你的物品栏已满,物品包将扔在地上。 kitInvFullNoDrop=你的物品栏里没有足够的空间装下该物品包。 kitItem=- {0} @@ -746,8 +746,8 @@ mailTooLong=邮件字数超过限制。请使邮件字数保持在1000 markMailAsRead=若要标记你的邮件为已读,输入/mail clear。 matchingIPAddress=以下是使用该IP地址登录的玩家: matchingAccounts={0} -maxHomes=你无法设置超过{0}个家。 -maxMoney=交易金额超出此账户的余额。 +maxHomes=你无法设置超过{0}个的家。 +maxMoney=这笔交易金额将会超出此账户的余额。 mayNotJail=你无法囚禁该玩家! mayNotJailOffline=你无法囚禁已离线玩家。 meCommandDescription=以第三人称描述一件事。 @@ -762,12 +762,12 @@ minute=分钟 minutes=分钟 missingItems=你没有{0}x{1}。 mobDataList=有效的生物数据:{0} -mobsAvailable=生物: {0} +mobsAvailable=生物:{0} mobSpawnError=更改刷怪笼内生物时发生错误。 mobSpawnLimit=生物数量超出服务器限制。 mobSpawnTarget=目标方块必须是一个刷怪笼。 moneyRecievedFrom=从{1}收到了{0}。 -moneySentTo={0} 已被发送到{1}。 +moneySentTo={0}已被发送到{1}。 month=月 months=月 moreCommandDescription=将手中的物品堆叠至指定值,如果未指定则为最大值。 @@ -872,10 +872,10 @@ nonZeroPosNumber=必须为非0数字。 noPendingRequest=你没有待处理的请求。 noPerm=你没有{0}的权限。 noPermissionSkull=你没有修改那个头颅的权限。 -noPermToAFKMessage=你没有修改离开信息的权限。 +noPermToAFKMessage=你没有修改暂时离开信息的权限。 noPermToSpawnMob=你没有生成该生物的权限。 noPlacePermission=你没有在那个牌子旁边放方块的权限。 -noPotionEffectPerm=你没有权限将效果 {0} 应用到这个药水。 +noPotionEffectPerm=你没有权限将{0}效果应用到这个药水。 noPowerTools=你没有绑定的快捷命令工具。 notAcceptingPay={0}不接受付款。 notAllowedToLocal=你没有在本地聊天发言的权限。 @@ -894,7 +894,7 @@ nukeCommandUsage1=/ [玩家...] nukeCommandUsage1Description=向所有(或指定玩家)发射一枚核弹 numberRequired=这里得写个数字,憨批。 onlyDayNight=/time 命令只有 day/night 两个参数。 -onlyPlayers=只有在游戏的玩家才能使用{0}。 +onlyPlayers=只有在游戏中的玩家才能使用{0}。 onlyPlayerSkulls=你只能设置玩家头颅的拥有者(397\:3)。 onlySunStorm=/weather 命令只有sun/storm两个参数。 openingDisposal=正在打开垃圾桶菜单... @@ -949,7 +949,7 @@ playtime=游玩时间:{0} playtimeOther={1}的游玩时间:{0} pong=啪! posPitch=仰角:{0}(头部角度) -possibleWorlds=可行的世界编号为0{0}。 +possibleWorlds=可能的世界编号为0{0}。 potionCommandDescription=将自定义状态效果添加到药水中。 potionCommandUsage=/ power\:<力量> duration\:<持续时间>> potionCommandUsage1=/ clear @@ -1038,7 +1038,7 @@ recipeCommandDescription=显示物品合成方法。 recipeCommandUsage=/ <<物品>|hand> [数量] recipeCommandUsage1=/ <<物品>|hand> [页码] recipeCommandUsage1Description=展示如何合成指定物品 -recipeFurnace=冶炼:{0}. +recipeFurnace=冶炼:{0}。 recipeGrid={0}X | {1}X | {2}X recipeGridItem={0}X{1} recipeMore=输入/{0} {1} <数字>查看所有合成{2}的方法。 @@ -1059,7 +1059,7 @@ renamehomeCommandUsage1=/ <昵称> <新昵称> renamehomeCommandUsage1Description=用指定名字重命名你的家。 renamehomeCommandUsage2=/ <玩家>\:<昵称> <新昵称> renamehomeCommandUsage2Description=用指定名字重命名某个玩家的家 -repair=你成功地修复了{0}。 +repair=你成功地修复了你的{0}。 repairAlreadyFixed=该物品无需修复。 repairCommandDescription=修复一个(或所有)物品的耐久值。 repairCommandUsage=/ [hand|all] @@ -1124,7 +1124,7 @@ sellCommandUsage4Description=出售所有(或指定数量的)于你物品栏 sellHandPermission=你没有出售手上物品的权限。 serverFull=服务器已满! serverReloading=这可以让你的服务器立即重载。但你为什么要这样做呢?请不要指望EssentialsX团队会提供使用/reload命令后发生问题的任何支持。 -serverTotal=服务器总和:{0} +serverTotal=服务器总和:{0} serverUnsupported=你正在使用一个不支持的服务器版本! serverUnsupportedClass=状态决定类: {0} serverUnsupportedCleanroom=你正在运行一个不依赖Mojang内部代码的Bukkit服务器。请考虑为你的服务器使用其它能够替代Essentials的插件。 @@ -1147,7 +1147,7 @@ setjailCommandUsage1=/ <监狱名> setjailCommandUsage1Description=在你目前的位置设立一个指定名字的监狱 settprCommandDescription=设置随机传送位置和参数。 settprCommandUsage1Description=将你的位置设立为随机传送的中心 -settprCommandUsage2=/ minrange <半径> +settprCommandUsage2=/ <世界> minrange <半径> settprCommandUsage2Description=设置随机传送半径最小值 settprCommandUsage3Description=设置随机传送半径最大值 settpr=设置随机传送中心。 @@ -1211,7 +1211,7 @@ skullCommandUsage3=/ <纹理> skullCommandUsage3Description=获取具有指定纹理值的头颅(纹理URL的哈希值或Base64纹理值) skullCommandUsage4=/ <所有者> <玩家> skullCommandUsage4Description=给予指定玩家一个特定所有者的头 -skullCommandUsage5Description=给指定玩家一个带有特定材质的头(可以是材质URL的哈希值或Base64编码的材质值) +skullCommandUsage5Description=给指定玩家一个带有特定材质的头(可以是材质URL的哈希值或Base64编码的材质) skullInvalidBase64=此纹理值无效。 slimeMalformedSize=不正确的大小。 smithingtableCommandDescription=打开一个锻造台。 @@ -1303,7 +1303,7 @@ thunderCommandUsage=/ [时长] thunderCommandUsage1=/ [时长] thunderCommandUsage1Description=开启(或关闭)雷电给定时间 thunderDuration={0}了你的世界的闪电{1}秒。 -timeBeforeHeal=下次治疗时间:{0}。 +timeBeforeHeal=下次治疗时间:{0}。 timeBeforeTeleport=下次传送时间:{0}。 timeCommandDescription=显示/改变世界的时间。默认为当前世界。 timeCommandUsage=/ [set|add] [day|night|dawn|17\:30|4pm|4000ticks] [世界名|all] @@ -1496,11 +1496,11 @@ versionDevLatest=你正在运行最新的EssentialsX开发版本! versionError=获取EssentialsX版本信息时发生错误!构建信息:{0}。 versionErrorPlayer=检查EssentialsX版本信息时发生错误! versionFetching=正在获取版本信息... -versionOutputVaultMissing=Vault未安装。聊天与权限系统可能不会运作。 +versionOutputVaultMissing=Vault未安装。聊天与权限系统可能不会正常运作。 versionOutputFine={0}版本:{1} versionOutputWarn={0}版本:{1} versionOutputUnsupported={0}版本:{1} -versionOutputUnsupportedPlugins=你正在运行一个不支持的插件! +versionOutputUnsupportedPlugins=你正在运行一个不受支持的插件! versionOutputEconLayer=经济层:{0} versionMismatch=版本不匹配!请升级{0}到相同版本。 versionMismatchAll=版本不匹配!请升级Essentials系列所有的jar插件到相同版本。 @@ -1535,7 +1535,7 @@ weatherCommandDescription=设置天气。 weatherCommandUsage=/ [时长] weatherCommandUsage1=/ [时长] weatherCommandUsage1Description=设置天气状态并指定持续时间 -warpSet=传送点 {0} 已设置。 +warpSet=传送点{0}已设置。 warpUsePermission=你没有使用该传送点的权限。 weatherInvalidWorld=无法找到{0}世界! weatherSignStorm=天气:雨雪。 @@ -1564,7 +1564,7 @@ whoisIPAddress= - IP地址:{0} whoisJail= - 监狱:{0} whoisLocation= - 坐标:({0},{1}, {2}, {3}) whoisMoney= - 余额:{0} -whoisMuted= - 已被禁言:{0} +whoisMuted= - 被禁言:{0} whoisMutedReason= - 已被禁言:{0} 理由:{1} whoisNick= - 昵称:{0} whoisOp= - 操作员:{0} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/TickCountProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/TickCountProvider.java new file mode 100644 index 00000000000..9579d604e68 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/TickCountProvider.java @@ -0,0 +1,8 @@ +package net.ess3.provider; + +import net.essentialsx.providers.NullableProvider; + +@NullableProvider +public interface TickCountProvider extends Provider { + int getTickCount(); +} diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperTickCountProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperTickCountProvider.java new file mode 100644 index 00000000000..aea1b3217d9 --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperTickCountProvider.java @@ -0,0 +1,24 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.TickCountProvider; +import net.essentialsx.providers.ProviderData; +import net.essentialsx.providers.ProviderTest; +import org.bukkit.Bukkit; + +@ProviderData(description = "Paper Tick Count Provider") +public class PaperTickCountProvider implements TickCountProvider { + @Override + public int getTickCount() { + return Bukkit.getCurrentTick(); + } + + @ProviderTest + public static boolean test() { + try { + Bukkit.class.getDeclaredMethod("getCurrentTick"); + return true; + } catch (final NoSuchMethodException ignored) { + return false; + } + } +}