diff --git a/paper-api/src/main/java/org/bukkit/entity/Player.java b/paper-api/src/main/java/org/bukkit/entity/Player.java index 3eef8d533c2a..d3275e4906c1 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Player.java +++ b/paper-api/src/main/java/org/bukkit/entity/Player.java @@ -3344,8 +3344,7 @@ default void spawnParticle(Particle particle, Location location, int count, /** * Get the player's current client side view distance. *
- * Will default to the server view distance if the client has not yet - * communicated this information, + * Will default to 2 if the client has not yet communicated this information. * * @return client view distance as above */ diff --git a/paper-server/patches/sources/net/minecraft/server/network/EventLoopGroupHolder.java.patch b/paper-server/patches/sources/net/minecraft/server/network/EventLoopGroupHolder.java.patch index 84488a498354..93a131b5cec0 100644 --- a/paper-server/patches/sources/net/minecraft/server/network/EventLoopGroupHolder.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/network/EventLoopGroupHolder.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/EventLoopGroupHolder.java +++ b/net/minecraft/server/network/EventLoopGroupHolder.java -@@ -48,11 +_,20 @@ +@@ -48,19 +_,39 @@ return LocalIoHandler.newFactory(); } }; @@ -19,31 +19,34 @@ + @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper - use variant with address param public static EventLoopGroupHolder remote(boolean tryNativeTransport) { ++ // Paper start - Unix domain socket support ++ return remote(null, tryNativeTransport); ++ } ++ public static EventLoopGroupHolder remote(java.net.@Nullable SocketAddress address, boolean tryNativeTransport) { ++ // Paper end - Unix domain socket support if (tryNativeTransport) { if (KQueue.isAvailable()) { -@@ -66,6 +_,25 @@ + return KQUEUE; + } - return NIO; - } -+ -+ // Paper start - Unix domain socket support -+ public static EventLoopGroupHolder remote(java.net.SocketAddress address, boolean tryNativeTransport) { -+ if (tryNativeTransport) { -+ if (KQueue.isAvailable()) { -+ return KQUEUE; -+ } -+ -+ if (Epoll.isAvailable()) { + if (Epoll.isAvailable()) { +- return EPOLL; ++ // Paper start - Unix domain socket support + if (address instanceof io.netty.channel.unix.DomainSocketAddress) { + return EPOLL_UNIX_DOMAIN; + } else { + return EPOLL; + } -+ } -+ } -+ return NIO; -+ } -+ // Paper end - Unix domain socket support ++ // Paper end - Unix domain socket support + } + } + +@@ -78,7 +_,7 @@ + } + + private ThreadFactory createThreadFactory() { +- return new ThreadFactoryBuilder().setNameFormat("Netty " + this.type + " IO #%d").setDaemon(true).build(); ++ return new ThreadFactoryBuilder().setNameFormat("Netty " + this.type + " IO #%d").setDaemon(true).setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER)).build(); // Paper + } - public static EventLoopGroupHolder local() { - return LOCAL; + protected abstract IoHandlerFactory ioHandlerFactory(); diff --git a/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java index c0953bb67dcf..0594a87cda7b 100644 --- a/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/world/flag/PaperFeatureFlagProviderImpl.java @@ -9,8 +9,6 @@ import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.flag.FeatureFlags; import org.bukkit.FeatureFlag; -import org.bukkit.GameRule; -import org.bukkit.craftbukkit.CraftGameRule; import org.bukkit.craftbukkit.entity.CraftEntityType; import org.bukkit.craftbukkit.potion.CraftPotionType; import org.bukkit.entity.EntityType; @@ -49,8 +47,6 @@ static FeatureElement getFeatureElement(final FeatureDependant dependant) { return CraftEntityType.bukkitToMinecraft(entityType); } else if (dependant instanceof final PotionType potionType) { return CraftPotionType.bukkitToMinecraft(potionType); - } else if (dependant instanceof final GameRule gameRule) { - return () -> CraftGameRule.bukkitToMinecraft(gameRule).requiredFeatures(); } else { throw new IllegalArgumentException(dependant + " is not a valid feature dependant"); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java index 5d42203a9079..57525b527ebd 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java @@ -1,7 +1,7 @@ package org.bukkit.craftbukkit; import com.mojang.serialization.DataResult; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.world.flag.PaperFeatureDependent; import java.util.function.BiFunction; import java.util.function.Function; import net.minecraft.core.Holder; @@ -11,7 +11,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class CraftGameRule extends GameRule implements Holderable> { +public class CraftGameRule extends GameRule implements PaperFeatureDependent> { public static final BiFunction, IllegalArgumentException> INVALID_VALUE = (value, error) -> { return new IllegalArgumentException("Invalid value: %s (%s)".formatted(value, error.message())); @@ -44,22 +44,22 @@ public Holder> getHolder() { @Override public NamespacedKey getKey() { - return Holderable.super.getKey(); + return PaperFeatureDependent.super.getKey(); } @Override public int hashCode() { - return Holderable.super.implHashCode(); + return PaperFeatureDependent.super.implHashCode(); } @Override public boolean equals(final Object obj) { - return Holderable.super.implEquals(obj); + return PaperFeatureDependent.super.implEquals(obj); } @Override public String toString() { - return Holderable.super.implToString(); + return PaperFeatureDependent.super.implToString(); } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index e3c9327de894..6fb76c2d5315 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2695,7 +2695,7 @@ public org.bukkit.advancement.AdvancementProgress getAdvancementProgress(org.buk @Override public int getClientViewDistance() { - return (this.getHandle().requestedViewDistance() == 0) ? Bukkit.getViewDistance() : this.getHandle().requestedViewDistance(); + return this.getHandle().requestedViewDistance(); } // Paper start diff --git a/paper-server/src/test/java/org/bukkit/craftbukkit/entity/EntityTypesTest.java b/paper-server/src/test/java/org/bukkit/craftbukkit/entity/EntityTypesTest.java index 76573dbcf8e7..132fdc3163cc 100644 --- a/paper-server/src/test/java/org/bukkit/craftbukkit/entity/EntityTypesTest.java +++ b/paper-server/src/test/java/org/bukkit/craftbukkit/entity/EntityTypesTest.java @@ -1,6 +1,5 @@ package org.bukkit.craftbukkit.entity; -import static org.junit.jupiter.api.Assertions.*; import java.io.File; import java.io.IOException; import java.net.URI; @@ -42,7 +41,6 @@ import org.bukkit.entity.Hanging; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Illager; -import org.bukkit.entity.LingeringPotion; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Minecart; import org.bukkit.entity.Mob; @@ -54,7 +52,6 @@ import org.bukkit.entity.Sittable; import org.bukkit.entity.SizedFireball; import org.bukkit.entity.Spellcaster; -import org.bukkit.entity.SplashPotion; import org.bukkit.entity.Steerable; import org.bukkit.entity.Tameable; import org.bukkit.entity.ThrowableProjectile; @@ -70,6 +67,9 @@ import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + @AllFeatures public class EntityTypesTest { @@ -79,6 +79,7 @@ public class EntityTypesTest { AbstractArrow.class, AbstractCow.class, AbstractHorse.class, + AbstractNautilus.class, AbstractSkeleton.class, AbstractVillager.class, AbstractWindCharge.class, @@ -123,8 +124,7 @@ public class EntityTypesTest { ThrownPotion.class, TippedArrow.class, Vehicle.class, - WaterMob.class, - AbstractNautilus.class + WaterMob.class ); static {