Skip to content

Commit 7ecb2a1

Browse files
authored
Upstream
2 parents 859b91c + 43d1e37 commit 7ecb2a1

4 files changed

Lines changed: 42 additions & 6 deletions

File tree

Essentials/src/main/java/com/earth2me/essentials/Essentials.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import net.ess3.provider.providers.ModernPlayerLocaleProvider;
8787
import net.ess3.provider.providers.ModernPotionMetaProvider;
8888
import net.ess3.provider.providers.ModernSignDataProvider;
89+
import net.ess3.provider.providers.ModernSyncCommandsProvider;
8990
import net.ess3.provider.providers.PaperBiomeKeyProvider;
9091
import net.ess3.provider.providers.PaperContainerProvider;
9192
import net.ess3.provider.providers.PaperKnownCommandsProvider;
@@ -397,7 +398,7 @@ public void onEnable() {
397398
providerFactory.registerProvider(BukkitMaterialTagProvider.class, PaperMaterialTagProvider.class);
398399

399400
// Sync Commands Provider
400-
providerFactory.registerProvider(ReflSyncCommandsProvider.class);
401+
providerFactory.registerProvider(ReflSyncCommandsProvider.class, ModernSyncCommandsProvider.class);
401402

402403
// Persistent Data Provider
403404
providerFactory.registerProvider(ReflPersistentDataProvider.class, ModernPersistentDataProvider.class);

Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -600,8 +600,12 @@ public void onPlayerTeleport(final PlayerTeleportEvent event) {
600600
if (tickCountProvider != null && ess.getSettings().isWorldChangePreserveFlying() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_17_R01)) {
601601
if (user.isAuthorized("essentials.fly")) {
602602
//noinspection DataFlowIssue - not real
603-
if (event.getFrom().getWorld() != event.getTo().getWorld() && player.isFlying()) {
604-
user.setFlightTick(tickCountProvider.getTickCount());
603+
if (event.getFrom().getWorld() != event.getTo().getWorld() && player.getAllowFlight()) {
604+
// If the player is not flying but has the ability to fly, we set the sign of the tick count to -1
605+
// Later on in the PlayerChangedWorldEvent, we will set the player's flying state to true if the tick count is positive.
606+
// If the tick count is negative, we simply just set the player's flight ability to true.
607+
final int tick = player.isFlying() ? tickCountProvider.getTickCount() : -tickCountProvider.getTickCount();
608+
user.setFlightTick(tick);
605609
}
606610
}
607611
}
@@ -783,9 +787,12 @@ public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event) {
783787
}
784788

785789
final TickCountProvider tickCountProvider = ess.provider(TickCountProvider.class);
786-
if (tickCountProvider != null && user.getFlightTick() == tickCountProvider.getTickCount() && user.isAuthorized("essentials.fly")) {
790+
final int flightTick = user.getFlightTick();
791+
if (tickCountProvider != null && Math.abs(flightTick) == tickCountProvider.getTickCount() && user.isAuthorized("essentials.fly")) {
787792
user.getBase().setAllowFlight(true);
788-
user.getBase().setFlying(true);
793+
if (flightTick > 0) {
794+
user.getBase().setFlying(true);
795+
}
789796
}
790797
user.setFlightTick(-1);
791798
}

providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitSpawnerBlockProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void setMinSpawnDelay(final CreatureSpawner spawner, final int delay) {
2020
@ProviderTest
2121
public static boolean test() {
2222
try {
23-
CreatureSpawner.class.getDeclaredMethod("setMaxSpawnDelay", int.class);
23+
CreatureSpawner.class.getMethod("setMaxSpawnDelay", int.class);
2424
return true;
2525
} catch (final NoSuchMethodException ignored) {
2626
return false;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.ess3.provider.providers;
2+
3+
import net.ess3.provider.SyncCommandsProvider;
4+
import net.essentialsx.providers.ProviderData;
5+
import net.essentialsx.providers.ProviderTest;
6+
import org.bukkit.Bukkit;
7+
import org.bukkit.entity.Player;
8+
9+
@ProviderData(description = "1.21.4+ Sync Commands Provider", weight = 1)
10+
public class ModernSyncCommandsProvider implements SyncCommandsProvider {
11+
@Override
12+
public void syncCommands() {
13+
for (final Player player : Bukkit.getOnlinePlayers()) {
14+
player.updateCommands();
15+
}
16+
}
17+
18+
@ProviderTest
19+
public static boolean test() {
20+
try {
21+
// There isn't a real good way to test this, but we can check if the Creaking class exists.
22+
Class.forName("org.bukkit.entity.Creaking");
23+
return true;
24+
} catch (final Throwable ignored) {
25+
return false;
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)