Skip to content

Commit

Permalink
Merge branch '2.x' into fix/4418
Browse files Browse the repository at this point in the history
  • Loading branch information
mdcfe authored Feb 2, 2025
2 parents d4d9f42 + ea3ea20 commit 72f05a4
Show file tree
Hide file tree
Showing 13 changed files with 225 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,8 @@ public interface ISettings extends IConf {

boolean isWorldChangeFlyResetEnabled();

boolean isWorldChangePreserveFlying();

boolean isWorldChangeSpeedResetEnabled();

long getCommandCooldownMs(String label);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
9 changes: 9 additions & 0 deletions Essentials/src/main/java/com/earth2me/essentials/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ public class User extends UserData implements Comparable<User>, IMessageRecipien
// Misc
private transient final List<String> signCopy = Lists.newArrayList("", "", "", "");
private transient long lastVanishTime = System.currentTimeMillis();
private transient int flightTick = -1;
private String lastLocaleString;
private Locale playerLocale;

Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions Essentials/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
30 changes: 30 additions & 0 deletions Essentials/src/main/resources/messages_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ bottomCommandDescription=Teleportiere zum niedrigsten Punkt an deiner aktuellen
bottomCommandUsage=/<command>
breakCommandDescription=Zerstört den Block, den du anschaust.
breakCommandUsage=/<command>
broadcast=<primary>[<dark_red>Rundruf<primary>]<green> {0}
broadcastCommandDescription=Versendet eine Nachricht an den gesamten Server.
broadcastCommandUsage=/<command> <nachricht>
broadcastCommandUsage1=/<command> <spieler>
Expand All @@ -125,6 +126,7 @@ cantReadGeoIpDB=Fehler beim Einlesen der GeoIP-Datenbank\!
cantSpawnItem=<dark_red>Du darfst Gegenstand<secondary> {0}<dark_red> nicht erzeugen.
cartographytableCommandDescription=Öffnet einen Kartentisch.
cartographytableCommandUsage=/<command>
chatTypeLocal=<dark_aqua>[L]
chatTypeSpy=[Spion]
cleaned=Spielerdateien geleert.
cleaning=Säubere Spielerdateien.
Expand All @@ -140,6 +142,9 @@ clearinventoryCommandUsage3=/<command> <player> <item> [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=/<command>
commandArgumentOptional=<gray>
commandArgumentOr=<secondary>
commandArgumentRequired=<yellow>
commandCooldown=<secondary>Du kannst diesen Command nicht ausführen für {0}.
commandDisabled=<secondary>Der Befehl<primary> {0}<secondary> ist deaktiviert.
commandFailed=Befehl {0} ist fehlgeschlagen\:
Expand All @@ -148,6 +153,7 @@ commandHelpLine1=<primary>Befehlshilfe\: <white>/{0}
commandHelpLine2=<primary>Beschreibung\: <white>{0}
commandHelpLine3=<primary>Verwendung(en)\:
commandHelpLine4=<primary>Alias(e)\: <white>{0}
commandHelpLineUsage={0} <primary>- {1}
commandNotLoaded=<dark_red>Befehl {0} ist nicht richtig geladen.
consoleCannotUseCommand=&cDieser Befehl kann nur per Konsole ausgeführt werden.
compassBearing=<primary>Peilung\: {0} ({1} Grad).
Expand Down Expand Up @@ -175,6 +181,7 @@ createkitCommandUsage=/<command> <kitname> <abklingzeit>
createkitCommandUsage1=/<command> <kitname> <Verzögerung>
createkitCommandUsage1Description=Erstellt ein Kit mit angegebenen Namen und Abklingzeit
createKitFailed=<dark_red>Beim Erstellen des Kits ist ein Fehler aufgetreten {0}.
createKitSeparator=<st>-----------------------
createKitSuccess=<primary>Kit erstellt\: <white>{0}\n<primary>Verzögerung\: <white>{1}\n<primary>Link\: <white>{2}\n<primary>Es werden Inhalte aus dem oben stehenden Link in deine kits.yml kopiert.
createKitUnsupported=<dark_red>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}
Expand Down Expand Up @@ -485,6 +492,7 @@ helpCommandDescription=Zeigt eine Liste an verfügbaren Befehlen an.
helpCommandUsage=/<command> [suchbegriff] [seite]
helpConsole=Um die Hilfe von der Konsole zu sehen, schreibe "?".
helpFrom=<primary>Befehle von {0}\:
helpLine=<primary>/{0}<reset>\: {1}
helpMatching=<primary>Befehle ähnlich wie "<secondary>{0}<primary>"\:
helpOp=<dark_red>[Hilfe]<reset> <primary>{0}\:<reset> {1}
helpPlugin=<dark_red>{0}<reset>\: Plugin-Hilfe\: /help {1}
Expand Down Expand Up @@ -572,6 +580,7 @@ itemCommandUsage1=/<befehl <gegenstand> [anzahl]
itemCommandUsage1Description=Gibt dir einen vollständigen Stack (oder die angegebene Anzahl) des angegebenen Gegenstands
itemCommandUsage2=/<command> <item> <amount> <meta>
itemCommandUsage2Description=Gibt die angegebe Menge des ausgewählten Items mit den gegebenen Metadaten
itemId=<primary>ID\:<secondary> {0}
itemloreClear=<primary>Du hast die Beschreibung dieses Gegenstands geleert.
itemloreCommandDescription=Die Beschreibung eines Gegenstand bearbeiten.
itemloreCommandUsage=/<command> <add/set/clear> [text/zeile] [text]
Expand Down Expand Up @@ -656,12 +665,15 @@ kitCommandUsage1Description=Zeigt alle verfügbaren Kits
kitCommandUsage2=/<command> <kit> [spieler]
kitCommandUsage2Description=Gibt dir, oder einem angegebenen Spieler, das ausgewählt Kit
kitContains=<primary>Ausrüstung <secondary>{0} <primary>enthält\:
kitCost=\ <gray><i>({0})<reset>
kitDelay=<st>{0}<reset>
kitError=<dark_red>Es gibt keine gültigen Kits.
kitError2=<dark_red>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=<primary>Du gibst <secondary>{1}<primary> <secondary>{0}<primary>-Kit.
kitInvFull=<dark_red>Dein Inventar ist voll. Das Kit wird auf den Boden gelegt.
kitInvFullNoDrop=<dark_red>In deinem Inventar ist nicht genug Platz für dieses Kit.
kitItem=<primary>- <white>{0}
kitNotFound=<dark_red>Dieses Kit gibt es nicht.
kitOnce=<dark_red>Du kannst diese Kit nicht nochmals bekommen.
kitReceive=<secondary>{0}<primary>-Kit erhalten.
Expand Down Expand Up @@ -695,9 +707,11 @@ listCommandDescription=Liste alle verfügbaren Spieler.
listCommandUsage=/<command> [Gruppe]
listCommandUsage1=/<command> [gruppe]
listCommandUsage1Description=Listet alle Spieler auf dem Server oder aus der gegebenen Gruppe auf, so fern angegeben
listGroupTag=<primary>{0}<reset>\:
listHiddenTag=<gray>[Versteckt]<reset>
listRealName=({0})
loadWarpError=<dark_red>Beim Laden von Warp-Punkt <secondary>{0}<primary> ist ein Fehler aufgetreten.
localFormat=<dark_aqua>[L] <reset><{0}> {1}
loomCommandDescription=Öffnet einen Webstuhl.
loomCommandUsage=/<command>
mailClear=<primary>Um deine Nachrichten zu löschen, schreibe<secondary> /mail clear.
Expand All @@ -723,6 +737,11 @@ mailCommandUsage7Description=Sendet dem angegebenen Spieler die angegebene Nachr
mailCommandUsage8=/<command> sendtempall <ablaufzeit> <nachricht>
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=<primary>[<reset>{0}<primary>] <primary>[<reset>{1}<primary>] <reset>{2}
mailFormatNewTimed=<primary>[<yellow>⚠<primary>] <primary>[<reset>{0}<primary>] <primary>[<reset>{1}<primary>] <reset>{2}
mailFormatNewRead=<primary>[<reset>{0}<primary>] <primary>[<reset>{1}<primary>] <gray><i>{2}
mailFormatNewReadTimed=<primary>[<yellow>⚠<primary>] <primary>[<reset>{0}<primary>] <primary>[<reset>{1}<primary>] <gray><i>{2}
mailFormat=<primary>[<reset>{0}<primary>] <reset>{1}
mailMessage={0}
mailSent=<primary>Nachricht gesendet\!
mailSentTo=<secondary>{0}<primary> wurde diese Mail gesendet\:
Expand All @@ -747,6 +766,7 @@ minute=Minute
minutes=Minuten
missingItems=<dark_red>Du hast nicht <secondary>{0}x {1}<dark_red>.
mobDataList=<primary>Gültige Mob Daten\:<reset> {0}
mobsAvailable=<primary>Mobs\:<reset> {0}
mobSpawnError=<dark_red>Beim Ändern des Monster-Spawners ist ein Fehler aufgetreten.
mobSpawnLimit=Die Anzahl an Monstern wurde auf das festgelegte Limit beschränkt.
mobSpawnTarget=<dark_red>Zielblock muss ein Monster-Spawner sein.
Expand Down Expand Up @@ -806,6 +826,7 @@ nearCommandUsage3Description=Listet alle Spieler auf, die sich innerhalb vom sta
nearCommandUsage4=/<command> <Spieler> <Radius>
nearCommandUsage4Description=Listet alle Spieler innerhalb des angegebenen Radius von dir auf
nearbyPlayers=<primary>Spieler in der Nähe\:<reset> {0}
nearbyPlayersList={0}<white>(<secondary>{1}m<white>)
negativeBalanceError=<dark_red>Spieler dürfen keine Schulden machen.
nickChanged=<primary>Spitzname geändert.
nickCommandDescription=Ändere deinen Nicknamen oder den eines anderen Spielers.
Expand Down Expand Up @@ -1179,6 +1200,8 @@ editsignCommandUsage3=/<command> copy [zeilennummer]
editsignCommandUsage3Description=Kopiert alle (oder die angegebene) Zeile(n) des anvisierten Schildes in die Zwischenablage
editsignCommandUsage4=/<command> paste [zeilennummer]
editsignCommandUsage4Description=Fügt die Zwischenablage komplett (oder in die angegebene Zeile) des anvisierten Schildes ein
signFormatFail=<dark_red>[{0}]
signFormatSuccess=<dark_blue>[{0}]
signFormatTemplate=[{0}]
signProtectInvalidLocation=<dark_red>Du hast keine Berechtigung hier ein Schild zu platzieren.
similarWarpExist=<dark_red>Ein Warp-Punkt mit dem selben Namen existiert bereits.
Expand All @@ -1203,11 +1226,13 @@ slimeMalformedSize=<dark_red>Ungültige Größe.
smithingtableCommandDescription=Öffnet einen Schmiedetisch.
smithingtableCommandUsage=/<command>
socialSpy=<primary>SocialSpy für <secondary>{0}<primary> <secondary>{1}<primary>.
socialSpyMsgFormat=<primary>[<secondary>{0}<gray> -> <secondary>{1}<primary>] <gray>{2}
socialSpyMutedPrefix=<white>[<primary>SS<white>] <gray>(gemutet) <reset>
socialspyCommandDescription=Bestimmt, ob du Nachrichten-Befehle im Chat sehen kannst.
socialspyCommandUsage=/<command> [spieler] [on|off]
socialspyCommandUsage1=/<command> [spieler]
socialspyCommandUsage1Description=Schaltet den sozialen Spion für sich selbst oder einen anderen Spieler, falls angegeben, ein
socialSpyPrefix=<white>[<primary>SS<white>] <reset>
soloMob=<dark_red>Das Monster möchte allein sein.
spawned=erzeugt
spawnerCommandDescription=Ändere den Monster-Typ eines Spawners.
Expand Down Expand Up @@ -1268,6 +1293,7 @@ teleportRequestTimeoutInfo=<primary>Diese Anfrage wird nach<secondary> {0} Sekun
teleportTop=<primary>Zum höchsten Punkt teleportieren.
teleportToPlayer=<primary>Du teleportierst dich zu <secondary>{0}<primary>.
teleportOffline=<primary>Der Spieler <secondary>{0}<primary> ist gerade offline. Du kannst dich mit /otp zu ihm teleportieren.
teleportOfflineUnknown=<primary>Die letzte bekannte Position von <secondary>{0}<primary> konnte nicht gefunden werden.
tempbanExempt=<dark_red>Du kannst diesen Spieler nicht temporär bannen.
tempbanExemptOffline=<dark_red>Du darfst Spieler, die offline sind, nicht temporär bannen.
tempbanJoin=<dark_red>Du bist auf diesem Server gesperrt. \nDauer\: {0}\nGrund\: {1}
Expand Down Expand Up @@ -1474,6 +1500,7 @@ versionCheckDisabled=<primary>Updateüberprüfung in der Config deaktiviert.
versionCustom=<primary>Deine Version kann nicht überprüft werden\! Selbstgebaut? Build Informationen\: <secondary>{0}<primary>.
versionDevBehind=<dark_red>Du bist <secondary>{0} <dark_red>EssentialsX Dev-Build(s) veraltet\!
versionDevDiverged=<primary>Du verwendest einen experimentellen Build von EssentialsX, der <secondary>{0} <primary>Builds hinter dem neuesten Dev-Build ist\!
versionDevDivergedBranch=<primary>Feature Branch\: <secondary>{0}<primary>.
versionDevDivergedLatest=<primary>Du verwendest einen aktuellen experimentellen EssentialsX-Build\!
versionDevLatest=<primary>Du verwendest den neuesten EssentialsX Dev-Build\!
versionError=<dark_red>Fehler beim Abrufen von EssentialsX-Versionsinformationen\! Build-Informationen\: <secondary>{0}<primary>.
Expand Down Expand Up @@ -1550,8 +1577,11 @@ whoisMoney=<primary> - Kontostand\:<reset> {0}
whoisMuted=<primary> - Stummgeschaltet\:<reset> {0}
whoisMutedReason=<primary> - Stummgeschaltet\:<reset> {0} <primary>Grund\: <secondary>{1}
whoisNick=<primary> - Spitzname\:<reset> {0}
whoisOp=<primary> - OP\:<reset> {0}
whoisPlaytime=<primary> - Spielzeit\:<reset> {0}
whoisTempBanned=<primary> - Bann endet\:<reset> {0}
whoisTop=<primary> \=\=\=\=\=\= WhoIs\:<secondary> {0} <primary>\=\=\=\=\=\=
whoisUuid=<primary> - UUID\:<reset> {0}
whoisWhitelist=<primary> - Gästeliste\:<reset> {0}
workbenchCommandDescription=Öffnet eine Werkbank.
workbenchCommandUsage=/<command>
Expand Down
1 change: 0 additions & 1 deletion Essentials/src/main/resources/messages_en.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#Sat Feb 03 17:34:46 GMT 2024
addedToAccount=<b><aqua>>></aqua></b> <aqua>Server</aqua><gray>\:</gray> <white>${0}</white> <gray>has been received from <white>{player}</white>.</gray>.
addedToOthersAccount=
adventure=adventure
afkCommandDescription=Marks you as away-from-keyboard.
Expand Down
Loading

0 comments on commit 72f05a4

Please sign in to comment.