mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 08:27:43 +01:00
Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@57c7aac4 Propagate failures from suggestion futures fixes #13587 (#13598) PaperMC/Paper@fd39dbdb Provide locale pointer for config connection audience (#13600) PaperMC/Paper@a687a82c [ci/skip] chore: remove unneeded task configuration (#13484) PaperMC/Paper@e5718dce fix: PlayerServerFullCheckEvent#deny not setting the allow flag (#13601) PaperMC/Paper@ae0c3a9e Add ItemCraftedEvent (#12245) PaperMC/Paper@581214ad Fix fixClimbingBypassingCramming option (#12793) PaperMC/Paper@0d768aac Add RecipeChoice.ItemTypeChoice (#12049) PaperMC/Paper@e2b76dfd Implement deprecated getItemStack method in ItemTypeRecipeChoice (#13607) PaperMC/Paper@9d303299 Fix pre-tick cooldown reset on swap (#13589) PaperMC/Paper@04739de1 Make SkinSource Player implementation reflect profile changes (#13585) PaperMC/Paper@c59990d9 Update affects spawning api (#13556) PaperMC/Paper@302c47c0 Don't tick disconnected connections (#13614)
This commit is contained in:
@@ -60,10 +60,6 @@ subprojects {
|
||||
events(TestLogEvent.STANDARD_OUT)
|
||||
}
|
||||
}
|
||||
tasks.withType<AbstractArchiveTask>().configureEach {
|
||||
isPreserveFileTimestamps = false
|
||||
isReproducibleFileOrder = true
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
||||
@@ -3,7 +3,7 @@ version = 1.21.11-R0.1-SNAPSHOT
|
||||
|
||||
mcVersion = 1.21.11
|
||||
apiVersion = 1.21.11
|
||||
paperCommit = 4873e3fb7eb448dfbb5b815a0e3a8c52038af6e1
|
||||
paperCommit = 302c47c0dda6251fd5eb6bf7130345e9dcb988fc
|
||||
|
||||
org.gradle.configuration-cache = true
|
||||
org.gradle.caching = true
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
--- a/src/main/java/org/bukkit/OfflinePlayer.java
|
||||
+++ b/src/main/java/org/bukkit/OfflinePlayer.java
|
||||
@@ -592,4 +_,104 @@
|
||||
default void applySkinToPlayerHeadContents(final PlayerHeadObjectContents.@NonNull Builder builder) {
|
||||
builder.id(this.getUniqueId());
|
||||
@@ -591,4 +_,104 @@
|
||||
default void applySkinToPlayerHeadContents(final PlayerHeadObjectContents.Builder builder) {
|
||||
builder.skin(this.getPlayerProfile());
|
||||
}
|
||||
+
|
||||
+ // Purpur start - OfflinePlayer API
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -4004,4 +_,123 @@
|
||||
@@ -4012,4 +_,123 @@
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
PlayerGameConnection getConnection();
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
--- a/src/main/java/org/bukkit/inventory/RecipeChoice.java
|
||||
+++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java
|
||||
@@ -191,6 +_,7 @@
|
||||
public static class ExactChoice implements RecipeChoice {
|
||||
@@ -227,6 +_,7 @@
|
||||
final class ExactChoice implements RecipeChoice {
|
||||
|
||||
private List<ItemStack> choices;
|
||||
+ private Predicate<ItemStack> predicate; // Purpur - Add predicate to recipe's ExactChoice ingredient
|
||||
|
||||
public ExactChoice(@NotNull ItemStack stack) {
|
||||
public ExactChoice(ItemStack stack) {
|
||||
this(Arrays.asList(stack));
|
||||
@@ -241,6 +_,7 @@
|
||||
@@ -275,6 +_,7 @@
|
||||
|
||||
@Override
|
||||
public boolean test(@NotNull ItemStack t) {
|
||||
public boolean test(ItemStack t) {
|
||||
+ if (predicate != null) return predicate.test(t); // Purpur - Add predicate to recipe's ExactChoice ingredient
|
||||
for (ItemStack match : choices) {
|
||||
if (t.isSimilar(match)) {
|
||||
return true;
|
||||
@@ -249,6 +_,17 @@
|
||||
@@ -283,6 +_,17 @@
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ index 05eb0c3273ffa1b5a1ebd8f8ae42c11830d755c7..49d3154afe2ca5789e63bdf972c79196
|
||||
public boolean isClientAuthoritative() {
|
||||
return false;
|
||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||
index 8793253032e43920d9668079d5a2537ac5aec415..2717e0a1fd8a3cc7d4a6f8d18659293e86025cd0 100644
|
||||
index 21ec2d87249824a6f796833baa48b122e39157d2..cbf0f526329b0de3281795667203a6500c6aedd0 100644
|
||||
--- a/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/net/minecraft/server/MinecraftServer.java
|
||||
@@ -1836,6 +1836,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -62,10 +62,10 @@ index a16813766ad244c002a752b0c03779c550d39e75..74f1230a2a7ca443ef4dc95720695292
|
||||
|
||||
private void updatePlayerAttributes() {
|
||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 5af26990d6cce42c3c12ac6d896ed3859c3497e3..0e17b54d7c3046cc85d15956793450ff70857b3c 100644
|
||||
index 74f8f1c8a3d688fadcbc266bac126e13d9d93dc5..91f9739bf34b824c5955ad0a9ef04dcb7c2e6736 100644
|
||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2915,6 +2915,8 @@ public class ServerGamePacketListenerImpl
|
||||
@@ -2916,6 +2916,8 @@ public class ServerGamePacketListenerImpl
|
||||
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
|
||||
final boolean resendData = event.isCancelled() || !ServerGamePacketListenerImpl.this.player.getItemInHand(hand).is(itemType);
|
||||
|
||||
@@ -3378,7 +3378,7 @@ index 2d903c77017ae356eb309df3c2c43b91c4e52f2f..bd78d8c3e8c1d9b581c751d336322fbf
|
||||
} else {
|
||||
AbstractThrownPotion abstractThrownPotion1 = damageSource.getDirectEntity() instanceof AbstractThrownPotion abstractThrownPotion
|
||||
diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java
|
||||
index 980ec0e45581812c027bb2ce8cd25d74e5f10663..844ba943a2a752f9b25506b644a4b4abc981b4cb 100644
|
||||
index 815649e51cc2748f8672441ce709e08365294787..06687be7b218a2a3140924f5e7216199d85d35be 100644
|
||||
--- a/net/minecraft/world/entity/monster/Endermite.java
|
||||
+++ b/net/minecraft/world/entity/monster/Endermite.java
|
||||
@@ -47,14 +47,33 @@ public class Endermite extends Monster {
|
||||
@@ -3898,7 +3898,7 @@ index 6e8400c4d523da8799d586c5c9019ae78710fbcb..9647741b67e1b4b7bbff0df22fc1bf3f
|
||||
super(mob);
|
||||
}
|
||||
diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java
|
||||
index 93b46d52d8019aef91798b796ab2f490f886a3e9..cf305d4a0a71f91caa31757dcd8ca5be84fc3f03 100644
|
||||
index 142f776ea2bfcd434d045a78d5629cd05b006b20..99b1f5009a14dab2641c1f9096d819538545989e 100644
|
||||
--- a/net/minecraft/world/entity/monster/Silverfish.java
|
||||
+++ b/net/minecraft/world/entity/monster/Silverfish.java
|
||||
@@ -38,14 +38,33 @@ public class Silverfish extends Monster {
|
||||
@@ -5179,7 +5179,7 @@ index aceeb9919473f5ff1b84efe950d10aa4dbc10121..5c7da654ef967356173a9d85a8675a7d
|
||||
if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading
|
||||
this.setTradingPlayer(player);
|
||||
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
||||
index d4ce7052a497261e0ab139f2a434dda598fc154b..3339cb1068ab162e36c410950e83e5f32dd9b705 100644
|
||||
index 616c1aafcda05ae1d2a833f2f725b9eefb52cbc6..98078f38f4b24484f615fb02fe11618ad3b4a133 100644
|
||||
--- a/net/minecraft/world/entity/player/Player.java
|
||||
+++ b/net/minecraft/world/entity/player/Player.java
|
||||
@@ -199,6 +199,19 @@ public abstract class Player extends Avatar implements ContainerUser {
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
+
|
||||
@Override
|
||||
public void tick() {
|
||||
if (this.ackBlockChangesUpTo > -1) {
|
||||
@@ -363,6 +_,12 @@
|
||||
if (this.isDisconnected()) return; // Paper
|
||||
@@ -364,6 +_,12 @@
|
||||
&& this.server.playerIdleTimeout() > 0
|
||||
&& Util.getMillis() - this.player.getLastActionTime() > TimeUnit.MINUTES.toMillis(this.server.playerIdleTimeout())
|
||||
&& !this.player.wonGame) {
|
||||
@@ -34,7 +34,7 @@
|
||||
this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause
|
||||
}
|
||||
}
|
||||
@@ -682,6 +_,8 @@
|
||||
@@ -683,6 +_,8 @@
|
||||
this.lastYaw = to.getYaw();
|
||||
this.lastPitch = to.getPitch();
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
Location oldTo = to.clone();
|
||||
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
|
||||
this.cserver.getPluginManager().callEvent(event);
|
||||
@@ -761,6 +_,7 @@
|
||||
@@ -762,6 +_,7 @@
|
||||
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
|
||||
if (packet.getId() == this.awaitingTeleport) {
|
||||
if (this.awaitingPositionFromClient == null) {
|
||||
@@ -51,7 +51,7 @@
|
||||
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
|
||||
return;
|
||||
}
|
||||
@@ -1301,6 +_,10 @@
|
||||
@@ -1302,6 +_,10 @@
|
||||
final int maxBookPageSize = pageMax.intValue();
|
||||
final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D);
|
||||
long byteAllowed = maxBookPageSize;
|
||||
@@ -62,7 +62,7 @@
|
||||
for (final String page : pageList) {
|
||||
final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length;
|
||||
byteTotal += byteLength;
|
||||
@@ -1325,7 +_,8 @@
|
||||
@@ -1326,7 +_,8 @@
|
||||
}
|
||||
|
||||
if (byteTotal > byteAllowed) {
|
||||
@@ -72,7 +72,7 @@
|
||||
this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect
|
||||
return;
|
||||
}
|
||||
@@ -1344,31 +_,45 @@
|
||||
@@ -1345,31 +_,45 @@
|
||||
Optional<String> optional = packet.title();
|
||||
optional.ifPresent(list::add);
|
||||
list.addAll(packet.pages());
|
||||
@@ -122,7 +122,7 @@
|
||||
itemStack.set(
|
||||
DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getPlainTextName(), 0, list, true)
|
||||
);
|
||||
@@ -1381,6 +_,16 @@
|
||||
@@ -1382,6 +_,16 @@
|
||||
return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
@Override
|
||||
public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) {
|
||||
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
|
||||
@@ -1420,7 +_,15 @@
|
||||
@@ -1421,7 +_,15 @@
|
||||
@Override
|
||||
public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
|
||||
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
|
||||
@@ -156,7 +156,7 @@
|
||||
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
|
||||
} else {
|
||||
ServerLevel serverLevel = this.player.level();
|
||||
@@ -1603,7 +_,7 @@
|
||||
@@ -1604,7 +_,7 @@
|
||||
movedWrongly = true;
|
||||
if (event.getLogWarning())
|
||||
// Paper end
|
||||
@@ -165,7 +165,7 @@
|
||||
} // Paper
|
||||
}
|
||||
|
||||
@@ -1668,6 +_,8 @@
|
||||
@@ -1669,6 +_,8 @@
|
||||
this.lastYaw = to.getYaw();
|
||||
this.lastPitch = to.getPitch();
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
Location oldTo = to.clone();
|
||||
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
|
||||
this.cserver.getPluginManager().callEvent(event);
|
||||
@@ -1723,6 +_,13 @@
|
||||
@@ -1724,6 +_,13 @@
|
||||
this.player.tryResetCurrentImpulseContext();
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z);
|
||||
this.lastGoodX = this.player.getX();
|
||||
this.lastGoodY = this.player.getY();
|
||||
@@ -1740,6 +_,17 @@
|
||||
@@ -1741,6 +_,17 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
private boolean shouldCheckPlayerMovement(boolean isElytraMovement) {
|
||||
if (this.isSingleplayerOwner()) {
|
||||
return false;
|
||||
@@ -2168,6 +_,7 @@
|
||||
@@ -2169,6 +_,7 @@
|
||||
|
||||
boolean cancelled;
|
||||
if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) {
|
||||
@@ -214,7 +214,7 @@
|
||||
org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand);
|
||||
cancelled = event.useItemInHand() == Event.Result.DENY;
|
||||
} else {
|
||||
@@ -2820,6 +_,7 @@
|
||||
@@ -2821,6 +_,7 @@
|
||||
|
||||
AABB boundingBox = target.getBoundingBox();
|
||||
if (packet.isWithinRange(this.player, boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range
|
||||
@@ -222,7 +222,7 @@
|
||||
packet.dispatch(
|
||||
new ServerboundInteractPacket.Handler() {
|
||||
private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit
|
||||
@@ -3580,7 +_,7 @@
|
||||
@@ -3581,7 +_,7 @@
|
||||
@Override
|
||||
public void handleChangeGameMode(ServerboundChangeGameModePacket packet) {
|
||||
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/net/minecraft/world/level/EntityGetter.java
|
||||
+++ b/net/minecraft/world/level/EntityGetter.java
|
||||
@@ -182,7 +_,7 @@
|
||||
@@ -187,7 +_,7 @@
|
||||
|
||||
default boolean hasNearbyAlivePlayer(double x, double y, double z, double distance) {
|
||||
for (Player player : this.players()) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java
|
||||
@@ -36,6 +_,7 @@
|
||||
@@ -43,6 +_,7 @@
|
||||
stack = Ingredient.of(((RecipeChoice.MaterialChoice) bukkit).getChoices().stream().map((mat) -> CraftItemType.bukkitToMinecraft(mat)));
|
||||
} else if (bukkit instanceof RecipeChoice.ExactChoice) {
|
||||
stack = Ingredient.ofStacks(((RecipeChoice.ExactChoice) bukkit).getChoices().stream().map((mat) -> CraftItemStack.asNMSCopy(mat)).toList());
|
||||
|
||||
Reference in New Issue
Block a user