47 Commits

Author SHA1 Message Date
Cryptite
67484ce0f3 Add setCanDespawn to Warden 2023-06-22 09:15:27 -05:00
Cryptite
5920aced80 Add back our packet obfuscation, long range tracking 2023-06-06 08:26:10 -05:00
Cryptite
1734aa29a7 Update upstream 2023-06-06 07:50:22 -05:00
Cryptite
5dc2168275 Update upstream 2023-06-03 07:39:42 -05:00
Cryptite
4ddd0748f3 Allow invclicks in spectator, update upstream 2023-05-22 08:21:41 -05:00
Cryptite
6e2bb01d85 Remove 2023-05-15 09:28:00 -05:00
Cryptite
8183b8084f Remove this patch 2023-05-15 08:34:29 -05:00
Cryptite
c3b16a9220 Update upstream, fix patches 2023-05-15 07:47:48 -05:00
Cryptite
dae8cb806d Not ready for prime time 2023-05-10 09:25:05 -05:00
Cryptite
c46ddfb6f9 PreChunkEvent so we can optionally use engine 1 or 2 2023-05-10 09:09:56 -05:00
Cryptite
6c2091b610 Forgot to use consumer on the cached packet as well, update upstream 2023-05-03 08:41:57 -05:00
Cryptite
550c12f16a Fixed missing echests in this patch 2023-05-02 14:29:53 -05:00
Cryptite
5329f509c9 Packet Caching wasn't working on player add due to the new packet bundling feature 2023-05-02 11:10:59 -05:00
Cryptite
e4f61bf6ed Add jackson, update upstream 2023-05-02 08:03:57 -05:00
Cryptite
2cac3f6a43 Fix MappedRegistry work with regards to how to register custom biomes 2023-05-01 09:56:47 -05:00
Cryptite
3544d87a45 Various dep/upstream updates 2023-04-27 11:36:25 -05:00
Cryptite
caa9c93355 Add Entry ctor to ClientboundPlayerInfoUpdatePacket 2023-04-26 09:15:47 -05:00
Cryptite
cb84a72508 Ignore freeze check 2023-04-25 09:17:32 -05:00
Cryptite
87ec6b249e Patches maybe done? 2023-04-25 08:36:54 -05:00
Cryptite
3241691aea Grr 2023-04-25 08:01:34 -05:00
Cryptite
42eb17973b Maybe fix patch here? 2023-04-25 08:00:36 -05:00
Cryptite
003871482b Update upstream 2023-04-25 07:57:25 -05:00
Cryptite
0f11149b2d Fix patch 2023-04-18 09:21:56 -05:00
Cryptite
4b70830774 Patches Work 2023-04-18 08:26:08 -05:00
Cryptite
6cb20103b6 Patches Work 2023-04-10 08:53:32 -05:00
Cryptite
36ebcb0220 Whoops don't check in 2023-04-10 07:49:11 -05:00
Cryptite
ee68309ac0 Set multiple team settings at once 2023-04-10 07:48:10 -05:00
Tom
5c2253f82e Add PlayerData Events 2023-04-10 07:38:41 -05:00
Cryptite
00bd3e0d3c Here we go 1.19.4 2023-04-10 07:26:32 -05:00
Cryptite
67fbb12ac6 Add player-specific-target-chunk-send-rate 2022-12-15 15:57:55 -06:00
Cryptite
c8fb92aa1c Drop our player entity track event due to upstream update? 2022-12-05 07:43:44 -06:00
Cryptite
745ad5f5ec Drop our player entity track event due to upstream update? 2022-12-05 07:42:20 -06:00
Cryptite
30cb112a1f Set COOKED_MUTTON nutrition equal to COOKED_BEEF 2022-12-03 06:59:49 -06:00
Cryptite
f0af4c4a47 Update upstream 2022-12-03 06:50:27 -06:00
Cryptite
00d0546253 Update upstream 2022-11-28 08:28:46 -06:00
Cryptite
b2bd357fa1 Can be null, despite IJ saying otherwise 2022-11-18 09:43:06 -06:00
Cryptite
4f38df3a86 Equipment Packet Caching 2022-11-18 08:40:59 -06:00
Cryptite
b349445305 PlayerPreChunkLoadEvent 2022-11-18 08:40:35 -06:00
Cryptite
1c9c208630 Shared DataStorage for maps 2022-11-18 08:40:04 -06:00
Cryptite
c0339695f2 Update upstream 2022-11-17 08:19:56 -06:00
Cryptite
14575216df Update upstream 2022-09-06 19:35:04 -05:00
Cryptite
ac92226367 Update upstream, unfreeze mappedregistry 2022-08-16 09:00:56 -05:00
Cryptite
08b0b99099 Version fix 2022-08-14 08:04:43 -05:00
Cryptite
ff5d7eeea5 More patches 2022-08-13 09:02:57 -05:00
Cryptite
a85661d795 Update to 1.19.2 2022-08-12 12:06:07 -05:00
Cryptite
19995071a3 Shouldn't be nere 2022-08-12 10:56:26 -05:00
Cryptite
7513492ac3 Add player data saving events 2022-08-12 10:52:37 -05:00
65 changed files with 1302 additions and 828 deletions

2
.gitignore vendored
View File

@@ -16,3 +16,5 @@ gradle-app.setting
# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties # gradle/wrapper/gradle-wrapper.properties
/commit.sh
/publish.sh

View File

@@ -7,4 +7,4 @@
# datafixerupper com/mojang/datafixers/util/Either.java # datafixerupper com/mojang/datafixers/util/Either.java
# To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId:
# minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter
# minecraft net/minecraft/world/level/entity/LevelEntityGetter.java # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java

View File

@@ -3,8 +3,8 @@ import io.papermc.paperweight.util.constants.*
plugins { plugins {
java java
`maven-publish` `maven-publish`
id("com.github.johnrengelman.shadow") version "7.1.2" apply false id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("io.papermc.paperweight.patcher") version "1.3.6" id("io.papermc.paperweight.patcher") version "1.5.5"
} }
val paperMavenPublicUrl = "https://papermc.io/repo/repository/maven-public/" val paperMavenPublicUrl = "https://papermc.io/repo/repository/maven-public/"
@@ -17,9 +17,9 @@ repositories {
} }
dependencies { dependencies {
remapper("net.fabricmc:tiny-remapper:0.8.2:fat") remapper("net.fabricmc:tiny-remapper:0.8.6:fat")
decompiler("net.minecraftforge:forgeflower:1.5.605.7") decompiler("net.minecraftforge:forgeflower:2.0.627.2")
paperclip("io.papermc:paperclip:3.0.2") paperclip("io.papermc:paperclip:3.0.3")
} }
allprojects { allprojects {
@@ -78,6 +78,7 @@ tasks.generateDevelopmentBundle {
libraryRepositories.set( libraryRepositories.set(
listOf( listOf(
"https://repo.maven.apache.org/maven2/", "https://repo.maven.apache.org/maven2/",
"https://test.lokamc.org:444/releases", // This should be a repo hosting your API (in this example, 'com.example.paperfork:slice-api'),
paperMavenPublicUrl paperMavenPublicUrl
) )
) )
@@ -89,8 +90,9 @@ allprojects {
publishing { publishing {
repositories { repositories {
maven { maven {
name = "jitpack" name = "Ysera"
url = uri("https://jitpack.io") url = uri("https://test.lokamc.com:444/releases")
// See Gradle docs for how to provide credentials to PasswordCredentials
// https://docs.gradle.org/current/samples/sample_publishing_credentials.html // https://docs.gradle.org/current/samples/sample_publishing_credentials.html
credentials(PasswordCredentials::class) credentials(PasswordCredentials::class)
} }

View File

@@ -1,8 +1,8 @@
group=com.lokamc.slice group=com.lokamc.slice
version=1.18.2-R0.1-SNAPSHOT version=1.19.4-R0.1-SNAPSHOT
mcVersion=1.18.2 mcVersion=1.19.4
paperRef=b1ac25fdb8e2c011cc0b006d0b478e11879a29d8 paperRef=d8e07590e30e81b855312c6d00b34e8155da0920
org.gradle.caching=true org.gradle.caching=true
org.gradle.parallel=true org.gradle.parallel=true

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Sun, 27 Feb 2022 09:47:57 -0600 Date: Fri, 12 Aug 2022 08:16:16 -0500
Subject: [PATCH] Add PlayerShieldDisableEvent Subject: [PATCH] Add PlayerShieldDisableEvent

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tom <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:40:41 -0600 Date: Mon, 10 Apr 2023 07:29:11 -0500
Subject: [PATCH] Set BlockData without light update Subject: [PATCH] Set BlockData without light updates
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
index 3e980c630452c8ea72227bc4cd92c605253cd41b..fe23d144175b3bd55564a4a266b98cd2fc70a08a 100644 index 390a2a2611df35a9ea6f1eb996b47e2aa4597ff0..384e5700b6899850d91a34e1d13d1ca0678cfaaa 100644
--- a/src/main/java/org/bukkit/block/Block.java --- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java
@@ -297,6 +297,28 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran @@ -298,6 +298,28 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
*/ */
void setBlockData(@NotNull BlockData data, boolean applyPhysics); void setBlockData(@NotNull BlockData data, boolean applyPhysics);

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:54:52 -0600 Date: Mon, 10 Apr 2023 07:30:30 -0500
Subject: [PATCH] Add BlockDestroyedByNeighborEvent Subject: [PATCH] Add BlockDestroyedByNeighborEvent

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:56:16 -0600 Date: Mon, 10 Apr 2023 07:31:55 -0500
Subject: [PATCH] Add provided Material to getDrops Subject: [PATCH] Add provided Material to getDrops
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
index 3fc35a559ea53f045f2f72b272bc8ba34d1b2994..7fbd9c223bf34feb35f7836b42a3bd220c4cbbc5 100644 index 384e5700b6899850d91a34e1d13d1ca0678cfaaa..9c1aef68b1b6f4fddfa171f7189dda5619e758d6 100644
--- a/src/main/java/org/bukkit/block/Block.java --- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java
@@ -624,6 +624,20 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran @@ -666,6 +666,20 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
@NotNull @NotNull
Collection<ItemStack> getDrops(@NotNull ItemStack tool, @Nullable Entity entity); Collection<ItemStack> getDrops(@NotNull ItemStack tool, @Nullable Entity entity);

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:55:29 -0600 Date: Mon, 10 Apr 2023 07:36:22 -0500
Subject: [PATCH] Add Player to SpongeAbsorbEvent Subject: [PATCH] Add Player to SpongeAbsorbEvent

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:17:28 -0600 Date: Mon, 10 Apr 2023 07:37:06 -0500
Subject: [PATCH] World Instance flag Subject: [PATCH] Add World Instance flag
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index d4c60cf8404641fa8580cb0653e6f7a10baed865..fde06c5d88ffb63910bcb06e3e70e3c0a4af92c7 100644 index c1827f97e9255e72c082548c8b2782e39f1ebb8c..c89a373233f48da4ea8baed39ccc72a0deb5bb7c 100644
--- a/src/main/java/org/bukkit/World.java --- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java
@@ -2602,6 +2602,11 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @@ -2555,6 +2555,11 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
*/ */
public void setAutoSave(boolean value); public void setAutoSave(boolean value);

View File

@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tom <cryptite@gmail.com> From: Tom <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:36:31 -0600 Date: Mon, 10 Apr 2023 07:38:40 -0500
Subject: [PATCH] Add player data saving events Subject: [PATCH] Add PlayerData Events
diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java

View File

@@ -1,52 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:33:54 -0600
Subject: [PATCH] Add PlayerTrackEntityEvent
diff --git a/src/main/java/org/bukkit/event/player/PlayerTrackEntityEvent.java b/src/main/java/org/bukkit/event/player/PlayerTrackEntityEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..0532a7986a8091e82f1fc64b9654be26d6c8ea5e
--- /dev/null
+++ b/src/main/java/org/bukkit/event/player/PlayerTrackEntityEvent.java
@@ -0,0 +1,40 @@
+package org.bukkit.event.player;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a player tracks an entity.
+ */
+public class PlayerTrackEntityEvent extends PlayerEvent {
+ private static final HandlerList handlers = new HandlerList();
+ private final Entity tracked;
+
+ public PlayerTrackEntityEvent(@NotNull final Player player, @NotNull final Entity tracked) {
+ super(player);
+ this.tracked = tracked;
+ }
+
+ /**
+ * Gets the entity newly tracked by the Player
+ *
+ * @return Entity the player is now tracking
+ */
+ @NotNull
+ public Entity getTracked() {
+ return tracked;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}

View File

@@ -1,18 +1,18 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Sun, 3 Apr 2022 08:28:24 -0500 Date: Mon, 10 Apr 2023 07:46:19 -0500
Subject: [PATCH] Add PlayerGetRespawnLocationEvent Subject: [PATCH] Add PlayerGetRespawnLocationEvent
diff --git a/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java b/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java diff --git a/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java b/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..dd7ecdb59e1a7e89ea63767a688337bb22f9cf59 index 0000000000000000000000000000000000000000..7eca4d6929fc7a75974d182c1ea692d3823a19c0
--- /dev/null --- /dev/null
+++ b/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java +++ b/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java
@@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
+package org.bukkit.event.player; +package org.bukkit.event.player;
+ +
+import org.apache.commons.lang.Validate; +import org.apache.commons.lang3.Validate;
+import org.bukkit.Location; +import org.bukkit.Location;
+import org.bukkit.entity.Player; +import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList; +import org.bukkit.event.HandlerList;

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Thu, 7 Apr 2022 16:35:36 -0500 Date: Mon, 10 Apr 2023 07:52:54 -0500
Subject: [PATCH] Set multiple Team settings with a single packet Subject: [PATCH] Set multiple team settings at once
diff --git a/src/main/java/org/bukkit/scoreboard/Team.java b/src/main/java/org/bukkit/scoreboard/Team.java diff --git a/src/main/java/org/bukkit/scoreboard/Team.java b/src/main/java/org/bukkit/scoreboard/Team.java
index 0f5c49d41c9460da0ba913b4ca8bef375f2c23df..30d2c56d71244e595afccdd47899548f6fb13886 100644 index 0f1c08092577a7d66fdc1ea8b645ea67e0d9c6cf..f1b3d05901a4fe32366699280f44147a9cda2873 100644
--- a/src/main/java/org/bukkit/scoreboard/Team.java --- a/src/main/java/org/bukkit/scoreboard/Team.java
+++ b/src/main/java/org/bukkit/scoreboard/Team.java +++ b/src/main/java/org/bukkit/scoreboard/Team.java
@@ -534,6 +534,24 @@ public interface Team { @@ -532,6 +532,24 @@ public interface Team {
boolean hasEntity(@NotNull org.bukkit.entity.Entity entity) throws IllegalStateException, IllegalArgumentException; boolean hasEntity(@NotNull org.bukkit.entity.Entity entity) throws IllegalStateException, IllegalArgumentException;
// Paper end // Paper end

View File

@@ -0,0 +1,30 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 10 Apr 2023 07:55:36 -0500
Subject: [PATCH] Smooth Teleports
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 88c4885569d2b8b22fce55601d50608ac8e9388c..12c249be755580ec6d83dfe1781f892f222d9ecd 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -2950,6 +2950,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
String getClientBrandName();
// Paper end
+ /**
+ * This abuses some of how Minecraft works and allows teleporting a player to another world without
+ * triggering typical respawn packets. All of natural state of chunk resends, entity adds/removes, etc still
+ * happen but the visual "refresh" of a world change is hidden. Depending on the destination location/world,
+ * this can act as a "smooth teleport" to a world if the new world is very similar looking to the old one.
+ *
+ * @param location New location to teleport this Player to
+ */
+ // Slice start
+ @org.jetbrains.annotations.ApiStatus.Experimental
+ void teleportWithoutRespawn(Location location);
+ // Slice end
+
// Paper start - Teleport API
/**
* Sets the player's rotation.

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Sun, 6 Nov 2022 08:29:18 -0600 Date: Mon, 10 Apr 2023 08:46:54 -0500
Subject: [PATCH] AntiXray Bypass Subject: [PATCH] AntiXray Bypass
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 6cd0b10d1dc4506cfb1e4db5e1260cb705566cec..b102687a9c6920b78d284f0531d2d80d6bf86a96 100644 index 12c249be755580ec6d83dfe1781f892f222d9ecd..804976415e79666c6b1df77b38e71c516847460e 100644
--- a/src/main/java/org/bukkit/entity/Player.java --- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java
@@ -2493,6 +2493,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @@ -2732,6 +2732,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/ */
boolean hasResourcePack(); boolean hasResourcePack();

View File

@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 7 Nov 2022 22:44:23 -0600 Date: Mon, 10 Apr 2023 08:47:44 -0500
Subject: [PATCH] PlayerPreChunkLoadEvent Subject: [PATCH] Add PlayerPreChunkLoadEvent
diff --git a/src/main/java/io/papermc/paper/event/packet/PlayerPreChunkLoadEvent.java b/src/main/java/io/papermc/paper/event/packet/PlayerPreChunkLoadEvent.java diff --git a/src/main/java/io/papermc/paper/event/packet/PlayerPreChunkLoadEvent.java b/src/main/java/io/papermc/paper/event/packet/PlayerPreChunkLoadEvent.java
@@ -81,10 +81,10 @@ index 0000000000000000000000000000000000000000..b5cc9538a70c7ce0b494d4878d51b521
+} +}
\ No newline at end of file \ No newline at end of file
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index fde06c5d88ffb63910bcb06e3e70e3c0a4af92c7..12d0d7355e7f15a073e1ee895f4fcaa935c4405e 100644 index c89a373233f48da4ea8baed39ccc72a0deb5bb7c..e3b8f58492863b0ccbef2e3061d1fc6052ea86c3 100644
--- a/src/main/java/org/bukkit/World.java --- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java
@@ -526,6 +526,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @@ -482,6 +482,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
//@Deprecated // Paper //@Deprecated // Paper
public boolean refreshChunk(int x, int z); public boolean refreshChunk(int x, int z);

View File

@@ -1,16 +1,16 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 3 Oct 2022 08:17:50 -0500 Date: Tue, 25 Apr 2023 07:36:40 -0500
Subject: [PATCH] Equipment Packet Caching Subject: [PATCH] Equipment Packet Caching
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
index 31353bd20404a8c2acf6bf0df524dc3cae324272..1a4309bcb529e4ca5cb3bf75e0bf3e65003a8006 100644 index ffca32ae2464ea5a669029079a50585ca259a4f8..283b71fc6f74790827d1af9d5ad05eea66df8e4c 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java --- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -910,4 +910,11 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource @@ -1150,4 +1150,11 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
*/ */
void setHurtDirection(float hurtDirection); void setBodyYaw(float bodyYaw);
// Paper end // Paper end
+ +
+ // Slice start + // Slice start

View File

@@ -0,0 +1,35 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:16:51 -0500
Subject: [PATCH] Add Force Crit to PlayerPreAttackEntityEvent
diff --git a/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java b/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java
index d49999ea597ef247bbf2298e6bf5600bfe003c3e..4ed53b14f94154043e3043f4fef540b45b2b272d 100644
--- a/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java
+++ b/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java
@@ -26,6 +26,7 @@ public class PrePlayerAttackEntityEvent extends PlayerEvent implements Cancellab
private final Entity attacked;
private boolean cancelled;
private final boolean willAttack;
+ private boolean forceCrit; // Slice
public PrePlayerAttackEntityEvent(@NotNull Player who, @NotNull Entity attacked, boolean willAttack) {
super(who);
@@ -55,6 +56,16 @@ public class PrePlayerAttackEntityEvent extends PlayerEvent implements Cancellab
return this.willAttack;
}
+ // Slice start
+ public boolean isForceCrit() {
+ return forceCrit;
+ }
+
+ public void setForceCrit(boolean forceCrit) {
+ this.forceCrit = forceCrit;
+ }
+ // Slice end
+
@NotNull
@Override
public HandlerList getHandlers() {

View File

@@ -0,0 +1,34 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:17:39 -0500
Subject: [PATCH] Add Preventing KB Bonus to PlayerPreAttackEntityEvent
diff --git a/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java b/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java
index 4ed53b14f94154043e3043f4fef540b45b2b272d..608df52360df66390fce3070e52e4ecd4cd5fb64 100644
--- a/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java
+++ b/src/main/java/io/papermc/paper/event/player/PrePlayerAttackEntityEvent.java
@@ -27,6 +27,7 @@ public class PrePlayerAttackEntityEvent extends PlayerEvent implements Cancellab
private boolean cancelled;
private final boolean willAttack;
private boolean forceCrit; // Slice
+ private boolean preventKnockbackBonus; // Slice
public PrePlayerAttackEntityEvent(@NotNull Player who, @NotNull Entity attacked, boolean willAttack) {
super(who);
@@ -64,6 +65,15 @@ public class PrePlayerAttackEntityEvent extends PlayerEvent implements Cancellab
public void setForceCrit(boolean forceCrit) {
this.forceCrit = forceCrit;
}
+
+ public boolean isPreventKnockbackBonus() {
+ return preventKnockbackBonus;
+ }
+
+ public void setPreventKnockbackBonus(boolean preventKnockbackBonus) {
+ this.preventKnockbackBonus = preventKnockbackBonus;
+ }
+
// Slice end
@NotNull

View File

@@ -0,0 +1,77 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:25:26 -0500
Subject: [PATCH] Add canDespawn to Warden
diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadStatsEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadStatsEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..80b67d390152b114ad385f7eb6af5ef975b7ca20
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadStatsEvent.java
@@ -0,0 +1,54 @@
+package com.destroystokyo.paper.event.player;
+
+import com.google.gson.JsonObject;
+import org.bukkit.Bukkit;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.UUID;
+
+/**
+ * Calls an event in which player stats can be provided. If null, will load from disk, otherwise will use provided data
+ */
+public class PlayerLoadStatsEvent extends Event {
+ private static final HandlerList handlers = new HandlerList();
+ private final UUID playerId;
+ private JsonObject statistics;
+
+ public PlayerLoadStatsEvent(@NotNull UUID playerId) {
+ super(!Bukkit.isPrimaryThread());
+ this.playerId = playerId;
+ }
+
+ /**
+ * Gets the player's unique ID.
+ *
+ * @return The unique ID
+ */
+ @NotNull
+ public UUID getUniqueId() {
+ return playerId;
+ }
+
+ @Nullable
+ public JsonObject getStatistics() {
+ return statistics;
+ }
+
+ public void setStatistics(@NotNull JsonObject statistics) {
+ this.statistics = statistics;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Warden.java b/src/main/java/org/bukkit/entity/Warden.java
index efaa45f41bc1dc8df6665c55b4e5ade343d60d4c..7d4ff450d571a808ac2ffb667729b4ab76a28bd4 100644
--- a/src/main/java/org/bukkit/entity/Warden.java
+++ b/src/main/java/org/bukkit/entity/Warden.java
@@ -111,4 +111,6 @@ public interface Warden extends Monster {
*/
ANGRY;
}
+
+ void setCanDespawn(boolean canDespawn); // Slice
}

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MiniDigger <admin@minidigger.me> From: MiniDigger <admin@minidigger.me>
Date: Sat, 12 Jun 2021 16:40:34 +0200 Date: Fri, 12 Aug 2022 08:07:34 -0500
Subject: [PATCH] Build changes Subject: [PATCH] Build Changes
diff --git a/build.gradle.kts b/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts
index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9eeae9ae2f 100644 index 4f2fa65ade89c5703451dad4f80eeef162b277d1..8fddf1a856aa7113ba7140b79df6f4fb45e06e85 100644
--- a/build.gradle.kts --- a/build.gradle.kts
+++ b/build.gradle.kts +++ b/build.gradle.kts
@@ -9,8 +9,12 @@ plugins { @@ -7,8 +7,12 @@ plugins {
} }
dependencies { dependencies {
@@ -16,14 +16,14 @@ index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9e
- implementation(project(":paper-mojangapi")) - implementation(project(":paper-mojangapi"))
+ // Slice start + // Slice start
+ implementation(project(":slice-api")) + implementation(project(":slice-api"))
+ implementation("io.papermc.paper:paper-mojangapi:1.18-R0.1-SNAPSHOT") { + implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") {
+ exclude("io.papermc.paper", "paper-api") + exclude("io.papermc.paper", "paper-api")
+ } + }
+ // Slice end + // Slice end
// Paper start // Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.minecrell:terminalconsoleappender:1.3.0")
@@ -60,7 +64,7 @@ tasks.jar { @@ -62,7 +66,7 @@ tasks.jar {
attributes( attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main", "Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit", "Implementation-Title" to "CraftBukkit",
@@ -32,7 +32,7 @@ index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9e
"Implementation-Vendor" to date, // Paper "Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit", "Specification-Title" to "Bukkit",
"Specification-Version" to project.version, "Specification-Version" to project.version,
@@ -148,7 +152,7 @@ fun TaskContainer.registerRunTask( @@ -134,7 +138,7 @@ fun TaskContainer.registerRunTask(
name: String, name: String,
block: JavaExec.() -> Unit block: JavaExec.() -> Unit
): TaskProvider<JavaExec> = register<JavaExec>(name) { ): TaskProvider<JavaExec> = register<JavaExec>(name) {
@@ -42,10 +42,10 @@ index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9e
standardInput = System.`in` standardInput = System.`in`
workingDir = rootProject.layout.projectDirectory workingDir = rootProject.layout.projectDirectory
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index c8d56947305c981a3268ce4ae3e975db350ceff2..ce51ebeb5df07abc4a8bb31bc737ab3e4214ce83 100644 index 9f15d9dbdfa74a0640b1a2b4ff695609d4758a4c..fa14ab3d8117e9d357380d21d3c6a2cd1df7c04c 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1693,7 +1693,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1682,7 +1682,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate @DontObfuscate
public String getServerModName() { public String getServerModName() {
@@ -55,10 +55,10 @@ index c8d56947305c981a3268ce4ae3e975db350ceff2..ce51ebeb5df07abc4a8bb31bc737ab3e
public SystemReport fillSystemReport(SystemReport details) { public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index ab843069ac0653d03cf3f925f49555016cad84fa..e09ae5f7684113d60d2672bc4bfc8543bce2f54f 100644 index 9f2536d9a73bdb15b5b3004d4da79ca32cee205b..e6d7581442d0f9b76cc16a8c6794f7ee3f79b68f 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -249,7 +249,7 @@ import javax.annotation.Nullable; // Paper @@ -262,7 +262,7 @@ import javax.annotation.Nullable; // Paper
import javax.annotation.Nonnull; // Paper import javax.annotation.Nonnull; // Paper
public final class CraftServer implements Server { public final class CraftServer implements Server {

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Sun, 27 Feb 2022 09:47:57 -0600 Date: Fri, 12 Aug 2022 08:16:16 -0500
Subject: [PATCH] Add PlayerShieldDisableEvent Subject: [PATCH] Add PlayerShieldDisableEvent
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index e3227a806d9e19923783122ea94ae19e7dbe71da..61ad475364346efe7cf3f3d8db07753075d6edb9 100644 index 02cb6b8c1d59855ff4a8aad3024fe12007eca0ee..e5d853e7a2feaae6236cf6aa2ee77e0472621c1b 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java --- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -1608,7 +1608,10 @@ public abstract class Mob extends LivingEntity { @@ -1686,7 +1686,10 @@ public abstract class Mob extends LivingEntity implements Targeting {
float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F; float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F;
if (this.random.nextFloat() < f) { if (this.random.nextFloat() < f) {
@@ -21,19 +21,19 @@ index e3227a806d9e19923783122ea94ae19e7dbe71da..61ad475364346efe7cf3f3d8db077530
} }
} }
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 2483d7df7f1bf94344afd38b37602c645a4a2dff..0156525637f8aa2e4e639bc493d8617b5af4cc32 100644 index 0629c471d38a77c44fc1c86ccdfcb0690f61ca17..a144f9a911297891645f704c361e1d8ba0e28a69 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java --- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -949,7 +949,7 @@ public abstract class Player extends LivingEntity { @@ -976,7 +976,7 @@ public abstract class Player extends LivingEntity {
protected void blockUsingShield(LivingEntity attacker) { protected void blockUsingShield(LivingEntity attacker) {
super.blockUsingShield(attacker); super.blockUsingShield(attacker);
if (attacker.getMainHandItem().getItem() instanceof AxeItem) { if (attacker.canDisableShield()) {
- this.disableShield(true); - this.disableShield(true);
+ this.disableShield(true, attacker); // Slice + this.disableShield(true, attacker); // Slice
} }
} }
@@ -1420,6 +1420,12 @@ public abstract class Player extends LivingEntity { @@ -1461,6 +1461,12 @@ public abstract class Player extends LivingEntity {
} }
public void disableShield(boolean sprinting) { public void disableShield(boolean sprinting) {
@@ -46,7 +46,7 @@ index 2483d7df7f1bf94344afd38b37602c645a4a2dff..0156525637f8aa2e4e639bc493d8617b
float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F; float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F;
if (sprinting) { if (sprinting) {
@@ -1427,7 +1433,12 @@ public abstract class Player extends LivingEntity { @@ -1468,7 +1474,12 @@ public abstract class Player extends LivingEntity {
} }
if (this.random.nextFloat() < f) { if (this.random.nextFloat() < f) {

View File

@@ -1,36 +1,36 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tom <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:40:41 -0600 Date: Mon, 10 Apr 2023 07:29:11 -0500
Subject: [PATCH] Set BlockData without light update Subject: [PATCH] Set BlockData without light updates
diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
index 1e656438d9ee89b97c660f3b3ec671be6546c6b7..787c14495616c2ccc6cbb41a44010f1ede1ff16d 100644 index 877498729c66de9aa6a27c9148f7494d7895615c..63959d7f15c682c2935f872d50de03fdacf95db4 100644
--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
+++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java +++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
@@ -225,7 +225,7 @@ public class WorldGenRegion implements WorldGenLevel { @@ -235,7 +235,7 @@ public class WorldGenRegion implements WorldGenLevel {
Block.dropResources(iblockdata, this.level, pos, tileentity, breakingEntity, ItemStack.EMPTY); Block.dropResources(iblockdata, this.level, pos, tileentity, breakingEntity, ItemStack.EMPTY);
} }
- return this.setBlock(pos, Blocks.AIR.defaultBlockState(), 3, maxUpdateDepth); - return this.setBlock(pos, Blocks.AIR.defaultBlockState(), 3, maxUpdateDepth);
+ return this.setBlock(pos, Blocks.AIR.defaultBlockState(), 3, maxUpdateDepth, true); + return this.setBlock(pos, Blocks.AIR.defaultBlockState(), 3, maxUpdateDepth, true); // Slice
} }
} }
@@ -300,7 +300,7 @@ public class WorldGenRegion implements WorldGenLevel { @@ -310,7 +310,7 @@ public class WorldGenRegion implements WorldGenLevel {
} }
@Override @Override
- public boolean setBlock(BlockPos pos, BlockState state, int flags, int maxUpdateDepth) { - public boolean setBlock(BlockPos pos, BlockState state, int flags, int maxUpdateDepth) {
+ public boolean setBlock(BlockPos pos, BlockState state, int flags, int maxUpdateDepth, boolean checkLight) { + public boolean setBlock(BlockPos pos, BlockState state, int flags, int maxUpdateDepth, boolean checkLight) { // Slice
if (!this.ensureCanWrite(pos)) { if (!this.ensureCanWrite(pos)) {
return false; return false;
} else { } else {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 160c0f37aa3aaf7598f852acf9bd444f79444c97..8b6ea24dc8d0286c0814c86dcf4c51cacc572854 100644 index 973ecd50f9cb6b86c353586e84d15dcb118ccb60..8e3db48534fc90bb55d0772084b1543f2239878f 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -495,12 +495,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -515,12 +515,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
} }
@Override @Override
@@ -46,7 +46,7 @@ index 160c0f37aa3aaf7598f852acf9bd444f79444c97..8b6ea24dc8d0286c0814c86dcf4c51ca
// CraftBukkit start - tree generation // CraftBukkit start - tree generation
if (this.captureTreeGeneration) { if (this.captureTreeGeneration) {
// Paper start // Paper start
@@ -547,7 +547,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -568,7 +568,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
} else { } else {
BlockState iblockdata2 = this.getBlockState(pos); BlockState iblockdata2 = this.getBlockState(pos);
@@ -55,7 +55,7 @@ index 160c0f37aa3aaf7598f852acf9bd444f79444c97..8b6ea24dc8d0286c0814c86dcf4c51ca
this.getProfiler().push("queueCheckLight"); this.getProfiler().push("queueCheckLight");
this.getChunkSource().getLightEngine().checkBlock(pos); this.getChunkSource().getLightEngine().checkBlock(pos);
this.getProfiler().pop(); this.getProfiler().pop();
@@ -694,7 +694,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -716,7 +716,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
Block.dropResources(iblockdata, this, pos, tileentity, breakingEntity, ItemStack.EMPTY); Block.dropResources(iblockdata, this, pos, tileentity, breakingEntity, ItemStack.EMPTY);
} }
@@ -63,7 +63,7 @@ index 160c0f37aa3aaf7598f852acf9bd444f79444c97..8b6ea24dc8d0286c0814c86dcf4c51ca
+ boolean flag1 = this.setBlock(pos, fluid.createLegacyBlock(), 3, maxUpdateDepth, true); + boolean flag1 = this.setBlock(pos, fluid.createLegacyBlock(), 3, maxUpdateDepth, true);
if (flag1) { if (flag1) {
this.gameEvent(breakingEntity, GameEvent.BLOCK_DESTROY, pos); this.gameEvent(GameEvent.BLOCK_DESTROY, pos, GameEvent.Context.of(breakingEntity, iblockdata));
diff --git a/src/main/java/net/minecraft/world/level/LevelWriter.java b/src/main/java/net/minecraft/world/level/LevelWriter.java diff --git a/src/main/java/net/minecraft/world/level/LevelWriter.java b/src/main/java/net/minecraft/world/level/LevelWriter.java
index 134e5ec79bf2dddd4e31930f8a7cb2c02fa29518..fd72d278a2719911a46b6bc9e7da2dc24bbe681e 100644 index 134e5ec79bf2dddd4e31930f8a7cb2c02fa29518..fd72d278a2719911a46b6bc9e7da2dc24bbe681e 100644
--- a/src/main/java/net/minecraft/world/level/LevelWriter.java --- a/src/main/java/net/minecraft/world/level/LevelWriter.java
@@ -86,7 +86,7 @@ index 134e5ec79bf2dddd4e31930f8a7cb2c02fa29518..fd72d278a2719911a46b6bc9e7da2dc2
boolean removeBlock(BlockPos pos, boolean move); boolean removeBlock(BlockPos pos, boolean move);
diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
index a80f4dc0a642c744223a155232291ace6e007636..fda1cb8ac3fa78375d90d6bc9f05a78f58d18193 100644 index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..5fe1a2c493c2a47ec3da8293428d45ef650249c1 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java --- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java
@@ -196,7 +196,7 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -196,7 +196,7 @@ public class Block extends BlockBehaviour implements ItemLike {
@@ -94,15 +94,15 @@ index a80f4dc0a642c744223a155232291ace6e007636..fda1cb8ac3fa78375d90d6bc9f05a78f
} }
} else { } else {
- world.setBlock(pos, newState, flags & -33, maxUpdateDepth); - world.setBlock(pos, newState, flags & -33, maxUpdateDepth);
+ world.setBlock(pos, newState, flags & -33, maxUpdateDepth, true); + world.setBlock(pos, newState, flags & -33, maxUpdateDepth, true); // Slice
} }
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
index e231636403a70f28e7e4bf51542608872234ce94..47b067f820dbe1d6304e30721afd7a8fd05d2032 100644 index 9868c1e58a41126b2b0f1014c74329015152ded6..38d28c35f2d9e147b8d5336b5d99e623af89b960 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
@@ -270,7 +270,7 @@ public abstract class CraftRegionAccessor implements RegionAccessor { @@ -286,7 +286,7 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
BlockPos pos = new BlockPos(x, y, z); BlockPos pos = new BlockPos(x, y, z);
net.minecraft.world.level.block.state.BlockState old = this.getHandle().getBlockState(pos); net.minecraft.world.level.block.state.BlockState old = this.getHandle().getBlockState(pos);
@@ -112,10 +112,10 @@ index e231636403a70f28e7e4bf51542608872234ce94..47b067f820dbe1d6304e30721afd7a8f
@Override @Override
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index a52e76c8870b1dd578c4332930c6f2fd3b31d471..1ed2dcb6f28a391689b5dd10073422bae1dcd8bb 100644 index b6c4f3d34603929a56073444be5f25fda15ff0c7..823857f89bbed57bf33d41501604502bdfeff67a 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -187,15 +187,20 @@ public class CraftBlock implements Block { @@ -188,15 +188,20 @@ public class CraftBlock implements Block {
@Override @Override
public void setBlockData(BlockData data, boolean applyPhysics) { public void setBlockData(BlockData data, boolean applyPhysics) {
@@ -140,7 +140,7 @@ index a52e76c8870b1dd578c4332930c6f2fd3b31d471..1ed2dcb6f28a391689b5dd10073422ba
// SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in tile entity cleanup // SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in tile entity cleanup
if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes
// SPIGOT-4612: faster - just clear tile // SPIGOT-4612: faster - just clear tile
@@ -209,7 +214,7 @@ public class CraftBlock implements Block { @@ -210,7 +215,7 @@ public class CraftBlock implements Block {
if (applyPhysics) { if (applyPhysics) {
return world.setBlock(position, blockData, 3); return world.setBlock(position, blockData, 3);
} else { } else {
@@ -150,10 +150,10 @@ index a52e76c8870b1dd578c4332930c6f2fd3b31d471..1ed2dcb6f28a391689b5dd10073422ba
world.getMinecraftWorld().sendBlockUpdated( world.getMinecraftWorld().sendBlockUpdated(
position, position,
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
index 966ac60daebb7bb211ab8096fc0c5f33db67320a..d68b046e30d0f3d186ed90b7c36086ccd889de1f 100644 index 577a352dab0f8a71558cb6dedce788e78053ef52..2c18c7da24e1c5ebd73b4370f370006612359daf 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
@@ -213,7 +213,7 @@ public class CraftBlockState implements BlockState { @@ -214,7 +214,7 @@ public class CraftBlockState implements BlockState {
} }
net.minecraft.world.level.block.state.BlockState newBlock = this.data; net.minecraft.world.level.block.state.BlockState newBlock = this.data;
@@ -163,10 +163,10 @@ index 966ac60daebb7bb211ab8096fc0c5f33db67320a..d68b046e30d0f3d186ed90b7c36086cc
this.world.getHandle().sendBlockUpdated( this.world.getHandle().sendBlockUpdated(
position, position,
diff --git a/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java b/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java diff --git a/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java b/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java
index 34e2e14ebb007cceb8b64d3eb321646e834215d4..c0428b6e1cc9f2ca84b3ee718e28b15ce496261c 100644 index 0b7d882551bcb8be149754209aad5fe4142f0fac..db3a7b550b1fa0654ba76f522a8163135f222281 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java --- a/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java +++ b/src/main/java/org/bukkit/craftbukkit/util/DummyGeneratorAccess.java
@@ -238,7 +238,7 @@ public class DummyGeneratorAccess implements WorldGenLevel { @@ -245,7 +245,7 @@ public class DummyGeneratorAccess implements WorldGenLevel {
} }
@Override @Override

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:53:55 -0600 Date: Mon, 10 Apr 2023 07:30:29 -0500
Subject: [PATCH] Track Player throughout block destroy Subject: [PATCH] Add BlockDestroyedByNeighborEvent
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
index 415b6c2bbf11c5a2ac75d18f52b93f80b9e14fe4..a33431984b6051efd39f0077c55186da789d1d60 100644 index 1d33c02088c150189d7f4b0aa27f6a1de96b11cf..14f68a88a5dacaacc799787a9f451699bc4bd5cd 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -451,6 +451,7 @@ public class ServerPlayerGameMode { @@ -418,6 +418,7 @@ public class ServerPlayerGameMode {
org.bukkit.block.BlockState state = bblock.getState(); org.bukkit.block.BlockState state = bblock.getState();
level.captureDrops = new ArrayList<>(); level.captureDrops = new ArrayList<>();
// CraftBukkit end // CraftBukkit end
@@ -16,7 +16,7 @@ index 415b6c2bbf11c5a2ac75d18f52b93f80b9e14fe4..a33431984b6051efd39f0077c55186da
block.playerWillDestroy(this.level, pos, iblockdata, this.player); block.playerWillDestroy(this.level, pos, iblockdata, this.player);
boolean flag = this.level.removeBlock(pos, false); boolean flag = this.level.removeBlock(pos, false);
@@ -479,6 +480,7 @@ public class ServerPlayerGameMode { @@ -446,6 +447,7 @@ public class ServerPlayerGameMode {
// CraftBukkit start // CraftBukkit start
java.util.List<net.minecraft.world.entity.item.ItemEntity> itemsToDrop = level.captureDrops; // Paper - store current list java.util.List<net.minecraft.world.entity.item.ItemEntity> itemsToDrop = level.captureDrops; // Paper - store current list
level.captureDrops = null; // Paper - Remove this earlier so that we can actually drop stuff level.captureDrops = null; // Paper - Remove this earlier so that we can actually drop stuff
@@ -25,10 +25,10 @@ index 415b6c2bbf11c5a2ac75d18f52b93f80b9e14fe4..a33431984b6051efd39f0077c55186da
org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, state, this.player, itemsToDrop); // Paper - use stored ref org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, state, this.player, itemsToDrop); // Paper - use stored ref
} }
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 6837c965592d4584cfc958a1008b98791a0fc780..070dab06db870f3c67dffe7637fe1a92c7eaa6a8 100644 index a7533d18fe6148d7bfd3106b9cdcb6fa3347cf7c..588a4fdcb294b9b1a92ef9969ef64f999bf529cc 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java --- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -333,6 +333,7 @@ public final class ItemStack { @@ -356,6 +356,7 @@ public final class ItemStack {
} }
} }
Item item = this.getItem(); Item item = this.getItem();
@@ -37,10 +37,10 @@ index 6837c965592d4584cfc958a1008b98791a0fc780..070dab06db870f3c67dffe7637fe1a92
CompoundTag newData = this.getTagClone(); CompoundTag newData = this.getTagClone();
int newCount = this.getCount(); int newCount = this.getCount();
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index b2fd675cfe9301b0cfc42a8e9bba3fb8356b4789..be12155798e5ad6ae8bf47acfbfdb5b20ad45fe5 100644 index 8e3db48534fc90bb55d0772084b1543f2239878f..23630e4ab396158d8f3f77bf9aa05f66c6b27a9d 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -172,6 +172,27 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -185,6 +185,27 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
public final Map<Explosion.CacheKey, Float> explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public final Map<Explosion.CacheKey, Float> explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions
public java.util.ArrayDeque<net.minecraft.world.level.block.RedstoneTorchBlock.Toggle> redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here public java.util.ArrayDeque<net.minecraft.world.level.block.RedstoneTorchBlock.Toggle> redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here
@@ -68,7 +68,7 @@ index b2fd675cfe9301b0cfc42a8e9bba3fb8356b4789..be12155798e5ad6ae8bf47acfbfdb5b2
// Paper start - fix and optimise world upgrading // Paper start - fix and optimise world upgrading
// copied from below // copied from below
public static ResourceKey<DimensionType> getDimensionKey(DimensionType manager) { public static ResourceKey<DimensionType> getDimensionKey(DimensionType manager) {
@@ -649,6 +670,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -670,6 +691,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
if (!this.preventPoiUpdated) { if (!this.preventPoiUpdated) {
this.onBlockStateChange(blockposition, iblockdata1, iblockdata2); this.onBlockStateChange(blockposition, iblockdata1, iblockdata2);
} }
@@ -76,56 +76,55 @@ index b2fd675cfe9301b0cfc42a8e9bba3fb8356b4789..be12155798e5ad6ae8bf47acfbfdb5b2
// CraftBukkit end // CraftBukkit end
} }
} }
@@ -754,8 +776,20 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -691,6 +713,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
public void neighborChanged(BlockPos pos, Block sourceBlock, BlockPos neighborPos) { if (iblockdata.isAir()) {
if (!this.isClientSide) { return false;
BlockState iblockdata = this.getBlockState(pos); } else {
+ org.bukkit.block.Block blockAt = world.getBlockAt(pos.getX(), pos.getY(), pos.getZ()); // Paper + // Paper start
+ PendingBlockEvent blockEvent = pendingPlayerBlockEvents.get(pos);
try { + if (blockEvent != null && blockEvent.sourceBlock != null) {
+ // Paper start - If this is a non-air block being set to an air block, get (remove, if exists) + io.papermc.paper.event.block.BlockDestroyedByNeighborEvent event =
+ // our PendingBlockEvent + new io.papermc.paper.event.block.BlockDestroyedByNeighborEvent(org.bukkit.craftbukkit.block.CraftBlock.at(this, pos),
+ if (blockAt.getType() != org.bukkit.Material.AIR && iblockdata.getMaterial() == net.minecraft.world.level.material.Material.AIR) { + (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity(),
+ PendingBlockEvent blockEvent = pendingPlayerBlockEvents.remove(pos); + org.bukkit.craftbukkit.block.CraftBlock.at(this, blockEvent.sourceBlock));
+ if (blockEvent != null) { + event.callEvent();
+ //Would fire a future BlockDestroyedByNeighborEvent here, but must have this conditional block + }
+ //because it's important to remove from pendingPlayerBlockEvents + // Paper end
+ }
+ }
+ // Paper end
+ +
// CraftBukkit start FluidState fluid = this.getFluidState(pos);
CraftWorld world = ((ServerLevel) this).getWorld(); // Paper start - while the above setAir method is named same and looks very similar
if (world != null && ((ServerLevel)this).hasPhysicsEvent) { // Paper // they are NOT used with same intent and the above should not fire this event. The above method is more of a BlockSetToAirEvent,
diff --git a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
index e12b76238cb52a1007f2102473b7f892f8521b62..301dfb74fec49b7f6f0452e4c49c8f1df43c0180 100644 index 9db66b393e057d93a8025b803ae0ad2a1bca61f6..4c7cd93daa2d4fcbf444fe7fceca9e779f883603 100644
--- a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java --- a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
@@ -104,6 +104,12 @@ public class DoublePlantBlock extends BushBlock { @@ -105,6 +105,15 @@ public class DoublePlantBlock extends BushBlock {
BlockPos blockposition1 = pos.below(); BlockPos blockposition1 = pos.below();
BlockState iblockdata1 = world.getBlockState(blockposition1); BlockState iblockdata1 = world.getBlockState(blockposition1);
+ Level.PendingBlockEvent blockEvent = world.pendingPlayerBlockEvents.remove(pos); + Level.PendingBlockEvent blockEvent = world.pendingPlayerBlockEvents.remove(pos);
+ if (blockEvent != null) { + if (blockEvent != null) {
+ //Would fire a future BlockDestroyedByNeighborEvent here, but must have this conditional block + io.papermc.paper.event.block.BlockDestroyedByNeighborEvent event =
+ //because it's important to remove from pendingPlayerBlockEvents + new io.papermc.paper.event.block.BlockDestroyedByNeighborEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, blockposition1),
+ (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity(),
+ org.bukkit.craftbukkit.block.CraftBlock.at(world, pos));
+ if (!event.callEvent()) return;
+ } + }
+ +
if (iblockdata1.is(state.getBlock()) && iblockdata1.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER) { if (iblockdata1.is(state.getBlock()) && iblockdata1.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER) {
BlockState iblockdata2 = iblockdata1.hasProperty(BlockStateProperties.WATERLOGGED) && (Boolean) iblockdata1.getValue(BlockStateProperties.WATERLOGGED) ? Blocks.WATER.defaultBlockState() : Blocks.AIR.defaultBlockState(); BlockState iblockdata2 = iblockdata1.getFluidState().is((Fluid) Fluids.WATER) ? Blocks.WATER.defaultBlockState() : Blocks.AIR.defaultBlockState();
diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
index 7f83c9390823b42fc30d04e1d3222e2825eaad50..a099fcaabe26378157c429ad899714fd3227f9ef 100644 index 505503a3f59d4b747649275c6f6faa504b7c7b64..0578f8e08b8079898be037e56eb093042a2df0cc 100644
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
@@ -988,6 +988,18 @@ public abstract class BlockBehaviour { @@ -1036,6 +1036,16 @@ public abstract class BlockBehaviour implements FeatureElement {
Direction enumdirection = aenumdirection[l];
blockposition_mutableblockposition.setWithOffset(pos, enumdirection); blockposition_mutableblockposition.setWithOffset(pos, enumdirection);
BlockState iblockdata = world.getBlockState(blockposition_mutableblockposition);
+
+ // Paper start - Propagate the PendingBlockEvent from the current blockPos to the next block + // Paper start - Propagate the PendingBlockEvent from the current blockPos to the next block
+ // if it will break (!canSurvive) + // if it will break (!canSurvive)
+ if (this.getMaterial() == Material.AIR && !iblockdata.canSurvive(world, blockposition_mutableblockposition)) { + if (this.getMaterial() == Material.AIR && !world.getBlockState(blockposition_mutableblockposition).canSurvive(world, blockposition_mutableblockposition)) {
+ Level.PendingBlockEvent blockEvent = ((Level) world).pendingPlayerBlockEvents.get(pos); + Level.PendingBlockEvent blockEvent = ((Level) world).pendingPlayerBlockEvents.get(pos);
+ if (blockEvent != null) { + if (blockEvent != null) {
+ BlockPos blockPosCopy = blockposition_mutableblockposition.immutable(); + BlockPos blockPosCopy = blockposition_mutableblockposition.immutable();
@@ -133,7 +132,6 @@ index 7f83c9390823b42fc30d04e1d3222e2825eaad50..a099fcaabe26378157c429ad899714fd
+ } + }
+ } + }
+ // Paper end + // Paper end
+ world.neighborShapeChanged(enumdirection.getOpposite(), this.asState(), blockposition_mutableblockposition, pos, flags, maxUpdateDepth);
BlockState iblockdata1 = iblockdata.updateShape(enumdirection.getOpposite(), this.asState(), world, blockposition_mutableblockposition, pos); }
Block.updateOrDestroy(iblockdata, iblockdata1, world, blockposition_mutableblockposition, flags, maxUpdateDepth);

View File

@@ -1,19 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:43:22 -0600
Subject: [PATCH] Don't send equipment updates if only durability changed
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index fdd76d1a1636f30f519c434b41061d826c4a8261..39980b411528f148ed27099669d1acc6cb332c18 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3031,7 +3031,7 @@ public abstract class LivingEntity extends Entity {
ItemStack itemstack1 = this.getItemBySlot(enumitemslot);
- if (!ItemStack.matches(itemstack1, itemstack)) {
+ if (!ItemStack.isSameIgnoreDurability(itemstack1, itemstack)) {
// Paper start - PlayerArmorChangeEvent
if (this instanceof ServerPlayer && enumitemslot.getType() == EquipmentSlot.Type.ARMOR) {
final org.bukkit.inventory.ItemStack oldItem = CraftItemStack.asBukkitCopy(itemstack);

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:56:16 -0600 Date: Mon, 10 Apr 2023 07:31:54 -0500
Subject: [PATCH] Add provided Material to getDrops Subject: [PATCH] Add provided Material to getDrops
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 21131dd9b2858c912712d5ded9e2fff274d439d2..982e879bc0478a2faf41b28a56a48ea5fc69c5ab 100644 index 0a5b3a2f7db1042fe9f154ffaea99e1b9b4ce9ce..ad56206974135e3be74143d3ef86c37969855119 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -592,7 +592,18 @@ public class CraftBlock implements Block { @@ -618,7 +618,18 @@ public class CraftBlock implements Block {
@Override @Override
public Collection<ItemStack> getDrops(ItemStack item, Entity entity) { public Collection<ItemStack> getDrops(ItemStack item, Entity entity) {
@@ -28,7 +28,7 @@ index 21131dd9b2858c912712d5ded9e2fff274d439d2..982e879bc0478a2faf41b28a56a48ea5
net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item); net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item);
// Modelled off EntityHuman#hasBlock // Modelled off EntityHuman#hasBlock
@@ -603,6 +614,7 @@ public class CraftBlock implements Block { @@ -629,6 +640,7 @@ public class CraftBlock implements Block {
return Collections.emptyList(); return Collections.emptyList();
} }
} }

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:55:29 -0600 Date: Mon, 10 Apr 2023 07:36:21 -0500
Subject: [PATCH] Add Player to SpongeAbsorbEvent Subject: [PATCH] Add Player to SpongeAbsorbEvent
diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
index 11b40defd5f5362346fd8a70a1141cd6425cefa7..48541be0c1cbe33d4dad1158683ab25447ecf5cf 100644 index 7304b2659eb45bc4bc9fa7c43e6ca07221d0fc73..63e385993022b6e708e981982c18060273d3e019 100644
--- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
@@ -109,7 +109,8 @@ public class SpongeBlock extends Block { @@ -109,7 +109,8 @@ public class SpongeBlock extends Block {

View File

@@ -1,26 +1,26 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:17:28 -0600 Date: Mon, 10 Apr 2023 07:37:05 -0500
Subject: [PATCH] World Instance flag Subject: [PATCH] Add World Instance flag
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 98209532ad3e692d7e459640123f78bbd9a65889..9b3af8f2a433368d722cd442c07b2a2cfb16dc54 100644 index 45804711255f04110e9509df8d60900314aa10b7..2cb6a61fb1963ceba8daaf703a1e1881e71c9ace 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -212,6 +212,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -219,6 +219,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
public final UUID uuid; public final UUID uuid;
public boolean hasPhysicsEvent = true; // Paper public boolean hasPhysicsEvent = true; // Paper
public boolean hasEntityMoveEvent = false; // Paper public boolean hasEntityMoveEvent = false; // Paper
+ public boolean instance; // Slice + public boolean instance; // Slice
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
public static Throwable getAddToWorldStackTrace(Entity entity) { public static Throwable getAddToWorldStackTrace(Entity entity) {
return new Throwable(entity + " Added to world at " + new java.util.Date()); final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date());
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 15d740a605c7257bcc7117c7dfb3612b472ba664..9d400d82eeab062322acea81b87f6fc572151700 100644 index 8f0234296397ca2d4a607dcea6093c6c606dc7d2..8334fbe6ffee640016ce17c1d331b6f88b569d65 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -1280,6 +1280,18 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -1264,6 +1264,18 @@ public class CraftWorld extends CraftRegionAccessor implements World {
world.noSave = !value; world.noSave = !value;
} }
@@ -38,4 +38,4 @@ index 15d740a605c7257bcc7117c7dfb3612b472ba664..9d400d82eeab062322acea81b87f6fc5
+ +
@Override @Override
public void setDifficulty(Difficulty difficulty) { public void setDifficulty(Difficulty difficulty) {
this.getHandle().serverLevelData.setDifficulty(net.minecraft.world.Difficulty.byId(difficulty.getValue())); this.getHandle().getServer().setDifficulty(this.getHandle(), net.minecraft.world.Difficulty.byId(difficulty.getValue()), true); // Paper - don't skip other difficulty-changing logic

View File

@@ -1,46 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:54:52 -0600
Subject: [PATCH] Add BlockDestroyedByNeighborEvent
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 6764f174d0685c02d5e81aa38228d02a77bf9632..0bd21a1eeb33ffb7e3299d864e8160627d6f88d9 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -692,6 +692,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
if (iblockdata.isAir()) {
return false;
} else {
+ // Paper start
+ PendingBlockEvent blockEvent = pendingPlayerBlockEvents.get(pos);
+ if (blockEvent != null && blockEvent.sourceBlock != null) {
+ io.papermc.paper.event.block.BlockDestroyedByNeighborEvent event =
+ new io.papermc.paper.event.block.BlockDestroyedByNeighborEvent(org.bukkit.craftbukkit.block.CraftBlock.at(this, pos),
+ (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity(),
+ org.bukkit.craftbukkit.block.CraftBlock.at(this, blockEvent.sourceBlock));
+ event.callEvent();
+ }
+ // Paper end
+
FluidState fluid = this.getFluidState(pos);
// Paper start - while the above setAir method is named same and looks very similar
// they are NOT used with same intent and the above should not fire this event. The above method is more of a BlockSetToAirEvent,
diff --git a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
index 301dfb74fec49b7f6f0452e4c49c8f1df43c0180..6b63bc56bfa757a17f9a6f98b31861a7f350be80 100644
--- a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
@@ -106,8 +106,11 @@ public class DoublePlantBlock extends BushBlock {
Level.PendingBlockEvent blockEvent = world.pendingPlayerBlockEvents.remove(pos);
if (blockEvent != null) {
- //Would fire a future BlockDestroyedByNeighborEvent here, but must have this conditional block
- //because it's important to remove from pendingPlayerBlockEvents
+ io.papermc.paper.event.block.BlockDestroyedByNeighborEvent event =
+ new io.papermc.paper.event.block.BlockDestroyedByNeighborEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, blockposition1),
+ (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity(),
+ org.bukkit.craftbukkit.block.CraftBlock.at(world, pos));
+ if (!event.callEvent()) return;
}
if (iblockdata1.is(state.getBlock()) && iblockdata1.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER) {

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tom <cryptite@gmail.com> From: Tom <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:36:31 -0600 Date: Mon, 10 Apr 2023 07:38:40 -0500
Subject: [PATCH] Add player data saving events Subject: [PATCH] Add PlayerData Events
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
index a33431984b6051efd39f0077c55186da789d1d60..6df88cd4a86a85c0f4abd8fd50f576081b822925 100644 index 14f68a88a5dacaacc799787a9f451699bc4bd5cd..a1db0c83d472a87560ca1b3834dd1f1bdbb9fc1a 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -627,6 +627,8 @@ public class ServerPlayerGameMode { @@ -600,6 +600,8 @@ public class ServerPlayerGameMode {
enuminteractionresult1 = stack.useOn(itemactioncontext, hand); enuminteractionresult1 = stack.useOn(itemactioncontext, hand);
} }
@@ -18,10 +18,10 @@ index a33431984b6051efd39f0077c55186da789d1d60..6df88cd4a86a85c0f4abd8fd50f57608
CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockposition, itemstack1); CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockposition, itemstack1);
} }
diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
index c59f98ca3adfdd90cdc5999aeadbb0834efedc0f..6e819bd376eb9edee6bf8bd8c08a755599f1514a 100644 index 9501e5f25f5c4d3069e554d4dc82b0e094156682..8afd9b785fb8734255e3ea926b8375bb9cae60be 100644
--- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java --- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java
+++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java +++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
@@ -201,7 +201,12 @@ public class ServerStatsCounter extends StatsCounter { @@ -198,7 +198,12 @@ public class ServerStatsCounter extends StatsCounter {
return nbttagcompound; return nbttagcompound;
} }
@@ -35,17 +35,17 @@ index c59f98ca3adfdd90cdc5999aeadbb0834efedc0f..6e819bd376eb9edee6bf8bd8c08a7555
Map<StatType<?>, JsonObject> map = Maps.newHashMap(); Map<StatType<?>, JsonObject> map = Maps.newHashMap();
ObjectIterator objectiterator = this.stats.object2IntEntrySet().iterator(); ObjectIterator objectiterator = this.stats.object2IntEntrySet().iterator();
@@ -227,7 +232,7 @@ public class ServerStatsCounter extends StatsCounter { @@ -224,7 +229,7 @@ public class ServerStatsCounter extends StatsCounter {
jsonobject1.add("stats", jsonobject); jsonobject1.add("stats", jsonobject);
jsonobject1.addProperty("DataVersion", SharedConstants.getCurrentVersion().getWorldVersion()); jsonobject1.addProperty("DataVersion", SharedConstants.getCurrentVersion().getDataVersion().getVersion());
- return jsonobject1.toString(); - return jsonobject1.toString();
+ return jsonobject1; // Slice + return jsonobject1; // Slice
} }
private static <T> ResourceLocation getKey(Stat<T> stat) { private static <T> ResourceLocation getKey(Stat<T> stat) {
diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
index 601f8099f74e81c17600566b3c9b7a6dd39c9bcb..cde84f45b67b88ecc410cdff924170b5b5366823 100644 index 36af81f0957d17e170d229059c66f4eb4539dfeb..e8d324a32838b69255ce48b1c03e47cd9e201da6 100644
--- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java --- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
+++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
@@ -33,6 +33,7 @@ public class PlayerDataStorage { @@ -33,6 +33,7 @@ public class PlayerDataStorage {

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Sun, 3 Apr 2022 08:28:24 -0500 Date: Mon, 10 Apr 2023 07:46:18 -0500
Subject: [PATCH] Add PlayerGetRespawnLocationEvent Subject: [PATCH] Add PlayerGetRespawnLocationEvent
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index d0ec7a195c3efd2dfdbec1396ebc7794358e74c5..8cef43d4ffbdbf96380a274d80045405b5cff780 100644 index 5c21de0d48fba88c3164b72e0eb624706b683fab..2672d1d05abb9aeaaa18ee58174ed95b7ba9ae4d 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -876,49 +876,57 @@ public abstract class PlayerList { @@ -837,49 +837,57 @@ public abstract class PlayerList {
// CraftBukkit start - fire PlayerRespawnEvent // CraftBukkit start - fire PlayerRespawnEvent
if (location == null) { if (location == null) {
@@ -67,20 +67,20 @@ index d0ec7a195c3efd2dfdbec1396ebc7794358e74c5..8cef43d4ffbdbf96380a274d80045405
+ f1 = (float) Mth.wrapDegrees(Mth.atan2(vec3d1.z, vec3d1.x) * 57.2957763671875D - 90.0D); + f1 = (float) Mth.wrapDegrees(Mth.atan2(vec3d1.z, vec3d1.x) * 57.2957763671875D - 90.0D);
+ } + }
- entityplayer1.setRespawnPosition(worldserver1.dimension(), blockposition, f, flag1, false, com.destroystokyo.paper.event.player.PlayerSetSpawnEvent.Cause.PLAYER_RESPAWN); // Paper - PlayerSetSpawnEvent - // entityplayer1.setRespawnPosition(worldserver1.dimension(), blockposition, f, flag1, false); // CraftBukkit - not required, just copies old location into reused entity
- flag2 = !flag && flag3; - flag2 = !flag && flag3;
- isBedSpawn = true; - isBedSpawn = true;
- location = new Location(worldserver1.getWorld(), vec3d.x, vec3d.y, vec3d.z, f1, 0.0F); - location = CraftLocation.toBukkit(vec3d, worldserver1.getWorld(), f1, 0.0F);
- } else if (blockposition != null) { - } else if (blockposition != null) {
- entityplayer1.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.NO_RESPAWN_BLOCK_AVAILABLE, 0.0F)); - entityplayer1.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.NO_RESPAWN_BLOCK_AVAILABLE, 0.0F));
- entityplayer1.setRespawnPosition(null, null, 0f, false, false, com.destroystokyo.paper.event.player.PlayerSetSpawnEvent.Cause.PLAYER_RESPAWN); // CraftBukkit - SPIGOT-5988: Clear respawn location when obstructed // Paper - PlayerSetSpawnEvent - entityplayer1.setRespawnPosition(null, null, 0f, false, false, com.destroystokyo.paper.event.player.PlayerSetSpawnEvent.Cause.PLAYER_RESPAWN); // CraftBukkit - SPIGOT-5988: Clear respawn location when obstructed // Paper - PlayerSetSpawnEvent
+ entityplayer1.setRespawnPosition(worldserver1.dimension(), blockposition, f, flag1, false, com.destroystokyo.paper.event.player.PlayerSetSpawnEvent.Cause.PLAYER_RESPAWN); // Paper - PlayerSetSpawnEvent + // entityplayer1.setRespawnPosition(worldserver1.dimension(), blockposition, f, flag1, false); // CraftBukkit - not required, just copies old location into reused entity
+ flag2 = !flag && flag3; + flag2 = !flag && flag3;
+ isBedSpawn = true; + isBedSpawn = true;
+ location = new Location(worldserver1.getWorld(), vec3d.x, vec3d.y, vec3d.z, f1, 0.0F); + location = CraftLocation.toBukkit(vec3d, worldserver1.getWorld(), f1, 0.0F);
+ } else if (blockposition != null) { + } else if (blockposition != null) {
+ entityplayer1.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.NO_RESPAWN_BLOCK_AVAILABLE, 0.0F)); + entityplayer1.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.NO_RESPAWN_BLOCK_AVAILABLE, 0.0F));
+ entityplayer1.setRespawnPosition(null, null, 0f, false, false); // CraftBukkit - SPIGOT-5988: Clear respawn location when obstructed // Paper - PlayerSetSpawnEvent + entityplayer1.setRespawnPosition(null, null, 0f, false, false, com.destroystokyo.paper.event.player.PlayerSetSpawnEvent.Cause.PLAYER_RESPAWN); // CraftBukkit - SPIGOT-5988: Clear respawn location when obstructed // Paper - PlayerSetSpawnEvent
+ } + }
} }
- } - }
@@ -88,15 +88,15 @@ index d0ec7a195c3efd2dfdbec1396ebc7794358e74c5..8cef43d4ffbdbf96380a274d80045405
- if (location == null) { - if (location == null) {
- worldserver1 = this.server.getLevel(Level.OVERWORLD); - worldserver1 = this.server.getLevel(Level.OVERWORLD);
- blockposition = entityplayer1.getSpawnPoint(worldserver1); - blockposition = entityplayer1.getSpawnPoint(worldserver1);
- location = new Location(worldserver1.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.1F), (double) ((float) blockposition.getZ() + 0.5F), worldserver1.levelData.getSpawnAngle(), 0.0F); // Paper - use world spawn angle - location = CraftLocation.toBukkit(blockposition, worldserver1.getWorld(), worldserver1.levelData.getSpawnAngle(), 0.0F).add(0.5F, 0.1F, 0.5F); // Paper - use world spawn angle
+ if (location == null) { + if (location == null) {
+ worldserver1 = this.server.getLevel(Level.OVERWORLD); + worldserver1 = this.server.getLevel(Level.OVERWORLD);
+ blockposition = entityplayer1.getSpawnPoint(worldserver1); + blockposition = entityplayer1.getSpawnPoint(worldserver1);
+ location = new Location(worldserver1.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.1F), (double) ((float) blockposition.getZ() + 0.5F), worldserver1.levelData.getSpawnAngle(), 0.0F); // Paper - use world spawn angle + location = CraftLocation.toBukkit(blockposition, worldserver1.getWorld(), worldserver1.levelData.getSpawnAngle(), 0.0F).add(0.5F, 0.1F, 0.5F); // Paper - use world spawn angle
+ } + }
} }
- Player respawnPlayer = entityplayer1.getBukkitEntity(); - Player respawnPlayer = entityplayer1.getBukkitEntity();
PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(respawnPlayer, location, isBedSpawn && !isAnchorSpawn, isAnchorSpawn, com.google.common.collect.ImmutableSet.<org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag>builder().add(respawnFlags)); // Paper - Fix anchor respawn acting as a bed respawn from the end portal PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(respawnPlayer, location, isBedSpawn && !isAnchorSpawn, isAnchorSpawn, reason, com.google.common.collect.ImmutableSet.<org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag>builder().add(respawnFlags)); // Paper - Fix anchor respawn acting as a bed respawn from the end portal
this.cserver.getPluginManager().callEvent(respawnEvent); this.cserver.getPluginManager().callEvent(respawnEvent);
// Spigot Start // Spigot Start

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Thu, 7 Apr 2022 16:35:36 -0500 Date: Mon, 10 Apr 2023 07:52:53 -0500
Subject: [PATCH] Set multiple Team settings with a single packet Subject: [PATCH] Set multiple team settings at once
diff --git a/src/main/java/net/minecraft/world/scores/PlayerTeam.java b/src/main/java/net/minecraft/world/scores/PlayerTeam.java diff --git a/src/main/java/net/minecraft/world/scores/PlayerTeam.java b/src/main/java/net/minecraft/world/scores/PlayerTeam.java
index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296529fa2bd 100644 index 9464054912e19fc78dd965b71fce20a18564b351..1624a0f8ea211a4c43fd01612674ca501c10d7e6 100644
--- a/src/main/java/net/minecraft/world/scores/PlayerTeam.java --- a/src/main/java/net/minecraft/world/scores/PlayerTeam.java
+++ b/src/main/java/net/minecraft/world/scores/PlayerTeam.java +++ b/src/main/java/net/minecraft/world/scores/PlayerTeam.java
@@ -28,6 +28,7 @@ public class PlayerTeam extends Team { @@ -28,6 +28,7 @@ public class PlayerTeam extends Team {
@@ -17,7 +17,7 @@ index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296
public PlayerTeam(Scoreboard scoreboard, String name) { public PlayerTeam(Scoreboard scoreboard, String name) {
this.scoreboard = scoreboard; this.scoreboard = scoreboard;
@@ -36,6 +37,12 @@ public class PlayerTeam extends Team { @@ -36,6 +37,12 @@ public class PlayerTeam extends Team {
this.displayNameStyle = Style.EMPTY.withInsertion(name).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent(name))); this.displayNameStyle = Style.EMPTY.withInsertion(name).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(name)));
} }
+ // Slice start + // Slice start
@@ -39,7 +39,7 @@ index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296
} }
public void setPlayerPrefix(@Nullable Component prefix) { public void setPlayerPrefix(@Nullable Component prefix) {
this.playerPrefix = prefix == null ? TextComponent.EMPTY : prefix; this.playerPrefix = prefix == null ? CommonComponents.EMPTY : prefix;
- this.scoreboard.onTeamChanged(this); - this.scoreboard.onTeamChanged(this);
+ if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice
} }
@@ -48,7 +48,7 @@ index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296
@@ -79,7 +86,7 @@ public class PlayerTeam extends Team { @@ -79,7 +86,7 @@ public class PlayerTeam extends Team {
public void setPlayerSuffix(@Nullable Component suffix) { public void setPlayerSuffix(@Nullable Component suffix) {
this.playerSuffix = suffix == null ? TextComponent.EMPTY : suffix; this.playerSuffix = suffix == null ? CommonComponents.EMPTY : suffix;
- this.scoreboard.onTeamChanged(this); - this.scoreboard.onTeamChanged(this);
+ if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice
} }

View File

@@ -0,0 +1,57 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 10 Apr 2023 07:55:35 -0500
Subject: [PATCH] Smooth Teleports
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 98df2463bf41fc736aa6a2b6ddf89e5abde6eb39..35d24300f72cdd68d46db7c880ab17eec95fae68 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -277,6 +277,7 @@ public class ServerPlayer extends Player {
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
+ public boolean smoothWorldTeleport; // Slice
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index c2e3ea95c6098536c03ded1e43f5ef692ed34800..83ee1b514aa4b5ed05f31c946956661dd0427eaf 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -919,12 +919,12 @@ public abstract class PlayerList {
int i = flag ? 1 : 0;
// CraftBukkit start
LevelData worlddata = worldserver1.getLevelData();
- entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), (byte) i, entityplayer1.getLastDeathLocation()));
+ if (!entityplayer.smoothWorldTeleport) entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), (byte) i, entityplayer1.getLastDeathLocation()));
entityplayer1.connection.send(new ClientboundSetChunkCacheRadiusPacket(worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetSendDistance())); // Spigot // Paper - replace old player chunk management
entityplayer1.connection.send(new ClientboundSetSimulationDistancePacket(worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetTickViewDistance())); // Spigot // Paper - replace old player chunk management
entityplayer1.spawnIn(worldserver1);
entityplayer1.unsetRemoved();
- entityplayer1.connection.teleport(CraftLocation.toBukkit(entityplayer1.position(), worldserver1.getWorld(), entityplayer1.getYRot(), entityplayer1.getXRot()));
+ if (!entityplayer.smoothWorldTeleport) entityplayer1.connection.teleport(CraftLocation.toBukkit(entityplayer1.position(), worldserver1.getWorld(), entityplayer1.getYRot(), entityplayer1.getXRot()));
entityplayer1.setShiftKeyDown(false);
// entityplayer1.connection.teleport(entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot());
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index be64633c8bcee96f2ad5247525cac965b7b031b1..a96db3d93a54beac623f7d08b3c994d53b70dc1c 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1262,6 +1262,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper end
}
+ // Slice start
+ public void teleportWithoutRespawn(Location location) {
+ ServerPlayer serverPlayer = getHandle();
+ serverPlayer.smoothWorldTeleport = true;
+ teleport(location);
+ serverPlayer.smoothWorldTeleport = false;
+ }
+ // Slice end
+
@Override
public boolean teleport(Location location, PlayerTeleportEvent.TeleportCause cause) {
// Paper start - Teleport API

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 10 Apr 2023 08:40:20 -0500
Subject: [PATCH] Ignore durability changes for equipment updates
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 95a27d28f73039693ca64601954af62028413634..72739d5949314b242869fd5fef3b5f0c076434d0 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3096,7 +3096,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
public boolean equipmentHasChanged(ItemStack stack, ItemStack stack2) {
- return !ItemStack.matches(stack2, stack);
+ return !ItemStack.isSame(stack2, stack);
}
private void handleHandSwap(Map<EquipmentSlot, ItemStack> equipmentChanges) {

View File

@@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 10 Apr 2023 08:45:12 -0500
Subject: [PATCH] Disable Azalea generation
diff --git a/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java b/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java
index 8f5178e934b5f9bc48beacd082e479fd9fb80fa6..d580238d733ba2dbbbbaa2659d1a7834c8cf7dac 100644
--- a/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java
+++ b/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java
@@ -161,7 +161,7 @@ public class BiomeDefaultFeatures {
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.CAVE_VINES);
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.LUSH_CAVES_CLAY);
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.LUSH_CAVES_VEGETATION);
- builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.ROOTED_AZALEA_TREE);
+// builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.ROOTED_AZALEA_TREE); // Slice
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.SPORE_BLOSSOM);
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.CLASSIC_VINES);
}
diff --git a/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java b/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
index feabf6db6a5987bec36b611b160b67ca30af2ecf..974c4d03dd36cd30ff0736cdc1605623e21e7c78 100644
--- a/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
+++ b/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
@@ -110,7 +110,7 @@ public class CaveFeatures {
RandomizedIntStateProvider randomizedIntStateProvider = new RandomizedIntStateProvider(new WeightedStateProvider(SimpleWeightedRandomList.<BlockState>builder().add(Blocks.CAVE_VINES.defaultBlockState(), 4).add(Blocks.CAVE_VINES.defaultBlockState().setValue(CaveVines.BERRIES, Boolean.valueOf(true)), 1)), CaveVinesBlock.AGE, UniformInt.of(23, 25));
FeatureUtils.register(featureRegisterable, CAVE_VINE, Feature.BLOCK_COLUMN, new BlockColumnConfiguration(List.of(BlockColumnConfiguration.layer(new WeightedListInt(SimpleWeightedRandomList.<IntProvider>builder().add(UniformInt.of(0, 19), 2).add(UniformInt.of(0, 2), 3).add(UniformInt.of(0, 6), 10).build()), weightedStateProvider), BlockColumnConfiguration.layer(ConstantInt.of(1), randomizedIntStateProvider)), Direction.DOWN, BlockPredicate.ONLY_IN_AIR_PREDICATE, true));
FeatureUtils.register(featureRegisterable, CAVE_VINE_IN_MOSS, Feature.BLOCK_COLUMN, new BlockColumnConfiguration(List.of(BlockColumnConfiguration.layer(new WeightedListInt(SimpleWeightedRandomList.<IntProvider>builder().add(UniformInt.of(0, 3), 5).add(UniformInt.of(1, 7), 1).build()), weightedStateProvider), BlockColumnConfiguration.layer(ConstantInt.of(1), randomizedIntStateProvider)), Direction.DOWN, BlockPredicate.ONLY_IN_AIR_PREDICATE, true));
- FeatureUtils.register(featureRegisterable, MOSS_VEGETATION, Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(SimpleWeightedRandomList.<BlockState>builder().add(Blocks.FLOWERING_AZALEA.defaultBlockState(), 4).add(Blocks.AZALEA.defaultBlockState(), 7).add(Blocks.MOSS_CARPET.defaultBlockState(), 25).add(Blocks.GRASS.defaultBlockState(), 50).add(Blocks.TALL_GRASS.defaultBlockState(), 10))));
+ FeatureUtils.register(featureRegisterable, MOSS_VEGETATION, Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(SimpleWeightedRandomList.<BlockState>builder().add(Blocks.MOSS_CARPET.defaultBlockState(), 25).add(Blocks.GRASS.defaultBlockState(), 50).add(Blocks.TALL_GRASS.defaultBlockState(), 10))));
FeatureUtils.register(featureRegisterable, MOSS_PATCH, Feature.VEGETATION_PATCH, new VegetationPatchConfiguration(BlockTags.MOSS_REPLACEABLE, BlockStateProvider.simple(Blocks.MOSS_BLOCK), PlacementUtils.inlinePlaced(holderGetter.getOrThrow(MOSS_VEGETATION)), CaveSurface.FLOOR, ConstantInt.of(1), 0.0F, 5, 0.8F, UniformInt.of(4, 7), 0.3F));
FeatureUtils.register(featureRegisterable, MOSS_PATCH_BONEMEAL, Feature.VEGETATION_PATCH, new VegetationPatchConfiguration(BlockTags.MOSS_REPLACEABLE, BlockStateProvider.simple(Blocks.MOSS_BLOCK), PlacementUtils.inlinePlaced(holderGetter.getOrThrow(MOSS_VEGETATION)), CaveSurface.FLOOR, ConstantInt.of(1), 0.0F, 5, 0.6F, UniformInt.of(1, 2), 0.75F));
FeatureUtils.register(featureRegisterable, DRIPLEAF, Feature.SIMPLE_RANDOM_SELECTOR, new SimpleRandomFeatureConfiguration(HolderSet.direct(makeSmallDripleaf(), makeDripleaf(Direction.EAST), makeDripleaf(Direction.WEST), makeDripleaf(Direction.SOUTH), makeDripleaf(Direction.NORTH))));

View File

@@ -1,37 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:11:14 -0600
Subject: [PATCH] Smooth world teleports
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 2f5e40437d1865a874c352999edd084226d4e47b..6e796cae90112c3b087aa12cf7d7899d1d9bcbc9 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -257,6 +257,7 @@ public class ServerPlayer extends Player {
public double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
+ public boolean smoothWorldTeleport; // Slice
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 95fe4240f3e1174ec36598f24d63f0073c13b376..d0ec7a195c3efd2dfdbec1396ebc7794358e74c5 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -948,12 +948,12 @@ public abstract class PlayerList {
}
// CraftBukkit start
LevelData worlddata = worldserver1.getLevelData();
- entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeRegistration(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), flag));
+ if (!entityplayer.smoothWorldTeleport) entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeRegistration(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), flag));
entityplayer1.connection.send(new ClientboundSetChunkCacheRadiusPacket(worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetSendDistance())); // Spigot // Paper - replace old player chunk management
entityplayer1.connection.send(new ClientboundSetSimulationDistancePacket(worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetTickViewDistance())); // Spigot // Paper - replace old player chunk management
entityplayer1.spawnIn(worldserver1);
entityplayer1.unsetRemoved();
- entityplayer1.connection.teleport(new Location(worldserver1.getWorld(), entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot()));
+ if (!entityplayer.smoothWorldTeleport) entityplayer1.connection.teleport(new Location(worldserver1.getWorld(), entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot()));
entityplayer1.setShiftKeyDown(false);
// entityplayer1.connection.teleport(entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot());

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Sun, 6 Nov 2022 08:29:18 -0600 Date: Mon, 10 Apr 2023 08:46:54 -0500
Subject: [PATCH] AntiXray Bypass Subject: [PATCH] AntiXray Bypass
diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java
index 8e2baa21f71e7105a8e72cba4ded6aa99370fca0..b295dcb214d54cd049e0b8e59c02b165714eacdd 100644 index cab91880a08c6fdc545804911d295e0f24f4d983..f90f27d9d9a4043198c33d65efa7068b76b58818 100644
--- a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java --- a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java
+++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java +++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java
@@ -161,6 +161,7 @@ public final class ChunkPacketBlockControllerAntiXray extends ChunkPacketBlockCo @@ -163,6 +163,7 @@ public final class ChunkPacketBlockControllerAntiXray extends ChunkPacketBlockCo
@Override @Override
public boolean shouldModify(ServerPlayer player, LevelChunk chunk) { public boolean shouldModify(ServerPlayer player, LevelChunk chunk) {
@@ -17,10 +17,10 @@ index 8e2baa21f71e7105a8e72cba4ded6aa99370fca0..b295dcb214d54cd049e0b8e59c02b165
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index df22a1407f3d1e93f0f1d50b5dbec3df12b106d2..2e7c1a99697c31f005a62b5d663708c9d4bc85df 100644 index a96db3d93a54beac623f7d08b3c994d53b70dc1c..1b58330a0eff27eb920a37dad0b436049fe0bce6 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -174,6 +174,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -185,6 +185,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit
private long lastSaveTime; private long lastSaveTime;
// Paper end // Paper end
@@ -28,7 +28,7 @@ index df22a1407f3d1e93f0f1d50b5dbec3df12b106d2..2e7c1a99697c31f005a62b5d663708c9
public CraftPlayer(CraftServer server, ServerPlayer entity) { public CraftPlayer(CraftServer server, ServerPlayer entity) {
super(server, entity); super(server, entity);
@@ -2432,6 +2433,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -2750,6 +2751,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
} }
// Paper end // Paper end

View File

@@ -1,22 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 7 Nov 2022 22:44:22 -0600 Date: Mon, 10 Apr 2023 08:47:43 -0500
Subject: [PATCH] PlayerPreChunkLoadEvent Subject: [PATCH] Add PlayerPreChunkLoadEvent
diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
index 12bcf96ec1ba4314c7ea2eab9f3d140559f1dc08..d8773c7c36314b4f5953b9e7abc310c74401c23c 100644 index e77972c4c264100ffdd824bfa2dac58dbbc6d678..5b32567bcf532994a31f184743cf42f4ea0113a4 100644
--- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java --- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
+++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java +++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
@@ -3,6 +3,7 @@ package io.papermc.paper.chunk; @@ -787,7 +787,7 @@ public final class PlayerChunkLoader {
import com.destroystokyo.paper.PaperConfig;
import com.destroystokyo.paper.util.misc.PlayerAreaMap;
import com.destroystokyo.paper.util.misc.PooledLinkedHashSets;
+import io.papermc.paper.event.packet.PlayerPreChunkLoadEvent;
import io.papermc.paper.util.CoordinateUtils;
import io.papermc.paper.util.IntervalledCounter;
import io.papermc.paper.util.TickThread;
@@ -787,7 +788,7 @@ public final class PlayerChunkLoader {
// warning: modifications of this field must be aware that the loadQueue inside PlayerChunkLoader uses this field // warning: modifications of this field must be aware that the loadQueue inside PlayerChunkLoader uses this field
// in a comparator! // in a comparator!
protected final ArrayDeque<ChunkPriorityHolder> loadQueue = new ArrayDeque<>(); protected final ArrayDeque<ChunkPriorityHolder> loadQueue = new ArrayDeque<>();
@@ -25,13 +17,13 @@ index 12bcf96ec1ba4314c7ea2eab9f3d140559f1dc08..d8773c7c36314b4f5953b9e7abc310c7
protected final LongOpenHashSet chunksToBeSent = new LongOpenHashSet(); protected final LongOpenHashSet chunksToBeSent = new LongOpenHashSet();
protected final TreeSet<ChunkPriorityHolder> sendQueue = new TreeSet<>((final ChunkPriorityHolder p1, final ChunkPriorityHolder p2) -> { protected final TreeSet<ChunkPriorityHolder> sendQueue = new TreeSet<>((final ChunkPriorityHolder p1, final ChunkPriorityHolder p2) -> {
@@ -871,7 +872,14 @@ public final class PlayerChunkLoader { @@ -871,7 +871,14 @@ public final class PlayerChunkLoader {
} }
public void sendChunk(final int chunkX, final int chunkZ, final Runnable onChunkSend) { public void sendChunk(final int chunkX, final int chunkZ, final Runnable onChunkSend) {
- if (this.sentChunks.add(CoordinateUtils.getChunkKey(chunkX, chunkZ))) { - if (this.sentChunks.add(CoordinateUtils.getChunkKey(chunkX, chunkZ))) {
+ // Slice start + // Slice start
+ if (!new PlayerPreChunkLoadEvent(this.player.getBukkitEntity().getWorld(), chunkX, chunkZ, this.player.getBukkitEntity()).callEvent()) { + if (!new io.papermc.paper.event.packet.PlayerPreChunkLoadEvent(this.player.getBukkitEntity().getWorld(), chunkX, chunkZ, this.player.getBukkitEntity()).callEvent()) {
+ this.player.connection.connection.execute(onChunkSend); + this.player.connection.connection.execute(onChunkSend);
+ return; + return;
+ } + }
@@ -42,10 +34,10 @@ index 12bcf96ec1ba4314c7ea2eab9f3d140559f1dc08..d8773c7c36314b4f5953b9e7abc310c7
new ChunkPos(chunkX, chunkZ), new MutableObject<>(), false, true); // unloaded, loaded new ChunkPos(chunkX, chunkZ), new MutableObject<>(), false, true); // unloaded, loaded
this.player.connection.connection.execute(onChunkSend); this.player.connection.connection.execute(onChunkSend);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 9d400d82eeab062322acea81b87f6fc572151700..ee35b5ac41d2016a775b320b1a84fceb6329c4be 100644 index 8334fbe6ffee640016ce17c1d331b6f88b569d65..c591b248da7f6349ce6da339f96ad9b51be042ef 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -528,6 +528,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -532,6 +532,13 @@ public class CraftWorld extends CraftRegionAccessor implements World {
return true; return true;
} }
@@ -59,23 +51,3 @@ index 9d400d82eeab062322acea81b87f6fc572151700..ee35b5ac41d2016a775b320b1a84fceb
@Override @Override
public boolean isChunkInUse(int x, int z) { public boolean isChunkInUse(int x, int z) {
return this.isChunkLoaded(x, z); return this.isChunkLoaded(x, z);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 2e7c1a99697c31f005a62b5d663708c9d4bc85df..b62a427b123f0573e15e6e38ff67029eadd69966 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2214,13 +2214,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end
}
-
+
@Override
public void sendHealthUpdate() {
this.sendHealthUpdate(this.getScaledHealth(), this.getHandle().getFoodData().getFoodLevel(), this.getHandle().getFoodData().getSaturationLevel());
}
// Paper end
-
+
public void injectScaledMaxHealth(Collection<AttributeInstance> collection, boolean force) {
if (!this.scaledHealth && !force) {
return;

View File

@@ -1,18 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:33:53 -0600
Subject: [PATCH] Add PlayerTrackEntityEvent
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
index e4ba278cf42c4a946ddd3e1fefd07ae3b696cdc0..a0e84c988021c99309495d27f455e9c74c8b1053 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
@@ -365,6 +365,7 @@ public class ServerEntity {
}
}
+ this.entity.level.getCraftServer().getPluginManager().callEvent(new org.bukkit.event.player.PlayerTrackEntityEvent(entityplayer.getBukkitEntity().getPlayer(), this.entity.getBukkitEntity())); // Slice
}
private void sendDirtyEntityData() {

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:45:30 -0600 Date: Tue, 18 Apr 2023 07:49:59 -0500
Subject: [PATCH] Allow opening covered chests Subject: [PATCH] Allow opening covered chests
diff --git a/src/main/java/net/minecraft/world/level/block/ChestBlock.java b/src/main/java/net/minecraft/world/level/block/ChestBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/ChestBlock.java b/src/main/java/net/minecraft/world/level/block/ChestBlock.java
index db726697b00afdee6078849fd224263483349912..cc415e4dd2093aa658817589f4f286c1a3ee63ad 100644 index 5e22d175b1048a58802cdf64ac70a8b56329e915..0f15e574b5c0cc8648bc1c0a12f1c72aa8653724 100644
--- a/src/main/java/net/minecraft/world/level/block/ChestBlock.java --- a/src/main/java/net/minecraft/world/level/block/ChestBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ChestBlock.java
@@ -356,9 +356,10 @@ public class ChestBlock extends AbstractChestBlock<ChestBlockEntity> implements @@ -355,9 +355,10 @@ public class ChestBlock extends AbstractChestBlock<ChestBlockEntity> implements
} }
private static boolean isBlockedChestByBlock(BlockGetter world, BlockPos pos) { private static boolean isBlockedChestByBlock(BlockGetter world, BlockPos pos) {
@@ -23,10 +23,10 @@ index db726697b00afdee6078849fd224263483349912..cc415e4dd2093aa658817589f4f286c1
private static boolean isCatSittingOnChest(LevelAccessor world, BlockPos pos) { private static boolean isCatSittingOnChest(LevelAccessor world, BlockPos pos) {
diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
index 16d677234616daec24e7250ff3e93aa3a83e9715..ee12ef106fa2dcbbac0161d96f383efbdd96bf94 100644 index 7385e91f32f070e86a4e0fd3d214f55d832c7979..4911b099f865b9202286f51087e5c00ffeaa95a5 100644
--- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java --- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
@@ -77,10 +77,10 @@ public class EnderChestBlock extends AbstractChestBlock<EnderChestBlockEntity> i @@ -76,10 +76,10 @@ public class EnderChestBlock extends AbstractChestBlock<EnderChestBlockEntity> i
PlayerEnderChestContainer playerEnderChestContainer = player.getEnderChestInventory(); PlayerEnderChestContainer playerEnderChestContainer = player.getEnderChestInventory();
BlockEntity blockEntity = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
if (playerEnderChestContainer != null && blockEntity instanceof EnderChestBlockEntity) { if (playerEnderChestContainer != null && blockEntity instanceof EnderChestBlockEntity) {

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:46:13 -0600 Date: Tue, 18 Apr 2023 07:50:34 -0500
Subject: [PATCH] Don't send fire packets if player has Fire Resistance Subject: [PATCH] Don't send fire packets if player has FR
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index dfd1f37757af1bd808cc2e2d8bf97123adf638bb..7fcb2ecae7ec9a457e00a6a3ea1fb7b589360e02 100644 index 280ee1838106201f5e3ba7753caced6d030f7e55..53f33b19277cdfd364b84362475a72f8d1a3cd60 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -781,7 +781,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -848,7 +848,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
this.checkOutOfWorld(); this.checkOutOfWorld();
if (!this.level.isClientSide) { if (!this.level.isClientSide) {

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 08:56:44 -0600 Date: Tue, 18 Apr 2023 07:52:19 -0500
Subject: [PATCH] Allow access to LightEngine Subject: [PATCH] Allow access to LightEngine
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index edc6235288f0843608dae4552e05915e4067cbf2..73548e5fa318b84e9299ccac02a326bea86a6b11 100644 index fbe209a66c77c47935ad026dd3e45e682af91fd8..67a8b0145e4ed096b4fc520202098b9b1d259bd6 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -644,7 +644,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -509,7 +509,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
return !ChunkMap.isChunkInRange(x1, z1, x2, z2, distance) ? false : (!ChunkMap.isChunkInRange(x1 + 1, z1, x2, z2, distance) ? true : (!ChunkMap.isChunkInRange(x1, z1 + 1, x2, z2, distance) ? true : (!ChunkMap.isChunkInRange(x1 - 1, z1, x2, z2, distance) ? true : !ChunkMap.isChunkInRange(x1, z1 - 1, x2, z2, distance)))); return !ChunkMap.isChunkInRange(x1, z1, x2, z2, distance) ? false : (!ChunkMap.isChunkInRange(x1 + 1, z1, x2, z2, distance) ? true : (!ChunkMap.isChunkInRange(x1, z1 + 1, x2, z2, distance) ? true : (!ChunkMap.isChunkInRange(x1 - 1, z1, x2, z2, distance) ? true : !ChunkMap.isChunkInRange(x1, z1 - 1, x2, z2, distance))));
} }

View File

@@ -1,19 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Fri, 4 Mar 2022 09:16:03 -0600
Subject: [PATCH] Make getBiomeCategory public
diff --git a/src/main/java/net/minecraft/world/level/biome/Biome.java b/src/main/java/net/minecraft/world/level/biome/Biome.java
index 32fc9f9162aafe312ed757be2d03577b5f95841d..19c36424dae6d6683b5b547025bbeb637e92e73d 100644
--- a/src/main/java/net/minecraft/world/level/biome/Biome.java
+++ b/src/main/java/net/minecraft/world/level/biome/Biome.java
@@ -265,7 +265,7 @@ public final class Biome {
return this.specialEffects.getBackgroundMusic();
}
- Biome.BiomeCategory getBiomeCategory() {
+ public Biome.BiomeCategory getBiomeCategory() { // Slice
return this.biomeCategory;
}

View File

@@ -1,32 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 15 Mar 2022 16:29:29 -0500
Subject: [PATCH] Disable Azalea generation
diff --git a/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java b/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java
index 8609ad84a64c5ecbeef1746942cf7dcffdd2ef86..eae556c5c120971c93ff633c77e86ae0c7594268 100644
--- a/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java
+++ b/src/main/java/net/minecraft/data/worldgen/BiomeDefaultFeatures.java
@@ -151,7 +151,7 @@ public class BiomeDefaultFeatures {
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.CAVE_VINES);
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.LUSH_CAVES_CLAY);
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.LUSH_CAVES_VEGETATION);
- builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.ROOTED_AZALEA_TREE);
+// builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.ROOTED_AZALEA_TREE); // Slice
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.SPORE_BLOSSOM);
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.CLASSIC_VINES);
}
diff --git a/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java b/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
index 34b67673fe1616f0c9990f62e311241bc62036e4..6e5ee21aa5e5c72d66b25c1287ce1e0c155003b2 100644
--- a/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
+++ b/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
@@ -66,7 +66,7 @@ public class CaveFeatures {
private static final RandomizedIntStateProvider CAVE_VINES_HEAD_PROVIDER = new RandomizedIntStateProvider(new WeightedStateProvider(SimpleWeightedRandomList.<BlockState>builder().add(Blocks.CAVE_VINES.defaultBlockState(), 4).add(Blocks.CAVE_VINES.defaultBlockState().setValue(CaveVines.BERRIES, Boolean.valueOf(true)), 1)), CaveVinesBlock.AGE, UniformInt.of(23, 25));
public static final Holder<ConfiguredFeature<BlockColumnConfiguration, ?>> CAVE_VINE = FeatureUtils.register("cave_vine", Feature.BLOCK_COLUMN, new BlockColumnConfiguration(List.of(BlockColumnConfiguration.layer(new WeightedListInt(SimpleWeightedRandomList.<IntProvider>builder().add(UniformInt.of(0, 19), 2).add(UniformInt.of(0, 2), 3).add(UniformInt.of(0, 6), 10).build()), CAVE_VINES_BODY_PROVIDER), BlockColumnConfiguration.layer(ConstantInt.of(1), CAVE_VINES_HEAD_PROVIDER)), Direction.DOWN, BlockPredicate.ONLY_IN_AIR_PREDICATE, true));
public static final Holder<ConfiguredFeature<BlockColumnConfiguration, ?>> CAVE_VINE_IN_MOSS = FeatureUtils.register("cave_vine_in_moss", Feature.BLOCK_COLUMN, new BlockColumnConfiguration(List.of(BlockColumnConfiguration.layer(new WeightedListInt(SimpleWeightedRandomList.<IntProvider>builder().add(UniformInt.of(0, 3), 5).add(UniformInt.of(1, 7), 1).build()), CAVE_VINES_BODY_PROVIDER), BlockColumnConfiguration.layer(ConstantInt.of(1), CAVE_VINES_HEAD_PROVIDER)), Direction.DOWN, BlockPredicate.ONLY_IN_AIR_PREDICATE, true));
- public static final Holder<ConfiguredFeature<SimpleBlockConfiguration, ?>> MOSS_VEGETATION = FeatureUtils.register("moss_vegetation", Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(SimpleWeightedRandomList.<BlockState>builder().add(Blocks.FLOWERING_AZALEA.defaultBlockState(), 4).add(Blocks.AZALEA.defaultBlockState(), 7).add(Blocks.MOSS_CARPET.defaultBlockState(), 25).add(Blocks.GRASS.defaultBlockState(), 50).add(Blocks.TALL_GRASS.defaultBlockState(), 10))));
+ public static final Holder<ConfiguredFeature<SimpleBlockConfiguration, ?>> MOSS_VEGETATION = FeatureUtils.register("moss_vegetation", Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(SimpleWeightedRandomList.<BlockState>builder().add(Blocks.MOSS_CARPET.defaultBlockState(), 25).add(Blocks.GRASS.defaultBlockState(), 50).add(Blocks.TALL_GRASS.defaultBlockState(), 10))));
public static final Holder<ConfiguredFeature<VegetationPatchConfiguration, ?>> MOSS_PATCH = FeatureUtils.register("moss_patch", Feature.VEGETATION_PATCH, new VegetationPatchConfiguration(BlockTags.MOSS_REPLACEABLE, BlockStateProvider.simple(Blocks.MOSS_BLOCK), PlacementUtils.inlinePlaced(MOSS_VEGETATION), CaveSurface.FLOOR, ConstantInt.of(1), 0.0F, 5, 0.8F, UniformInt.of(4, 7), 0.3F));
public static final Holder<ConfiguredFeature<VegetationPatchConfiguration, ?>> MOSS_PATCH_BONEMEAL = FeatureUtils.register("moss_patch_bonemeal", Feature.VEGETATION_PATCH, new VegetationPatchConfiguration(BlockTags.MOSS_REPLACEABLE, BlockStateProvider.simple(Blocks.MOSS_BLOCK), PlacementUtils.inlinePlaced(MOSS_VEGETATION), CaveSurface.FLOOR, ConstantInt.of(1), 0.0F, 5, 0.6F, UniformInt.of(1, 2), 0.75F));
public static final Holder<ConfiguredFeature<SimpleRandomFeatureConfiguration, ?>> DRIPLEAF = FeatureUtils.register("dripleaf", Feature.SIMPLE_RANDOM_SELECTOR, new SimpleRandomFeatureConfiguration(HolderSet.direct(makeSmallDripleaf(), makeDripleaf(Direction.EAST), makeDripleaf(Direction.WEST), makeDripleaf(Direction.SOUTH), makeDripleaf(Direction.NORTH))));

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 11:21:07 -0600 Date: Tue, 18 Apr 2023 07:56:32 -0500
Subject: [PATCH] Disable geode generation Subject: [PATCH] Disable geode and monsterspawners generation
diff --git a/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java b/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java diff --git a/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java b/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java
index 7cf6d6a055f40fd9e05aadc680ce6f703b808653..317bf4d6557426dc3bc1485db6969d74544d73eb 100644 index 1b6195cd9878e66eb20c45247d7005f9822e79c6..1808399adbbe239c158fc1f2849f5ade8ba1f654 100644
--- a/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java --- a/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java
+++ b/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java +++ b/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java
@@ -41,8 +41,8 @@ public class OverworldBiomes { @@ -54,8 +54,8 @@ public class OverworldBiomes {
private static void globalOverworldGeneration(BiomeGenerationSettings.Builder generationSettings) { private static void globalOverworldGeneration(BiomeGenerationSettings.Builder generationSettings) {
BiomeDefaultFeatures.addDefaultCarversAndLakes(generationSettings); BiomeDefaultFeatures.addDefaultCarversAndLakes(generationSettings);

View File

@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Thu, 31 Mar 2022 09:06:19 -0500 Date: Tue, 18 Apr 2023 07:58:01 -0500
Subject: [PATCH] Set Mutton nutrition equal to Beef/Porkchop Subject: [PATCH] Set Mutton nutrition equal to beef
diff --git a/src/main/java/net/minecraft/world/food/Foods.java b/src/main/java/net/minecraft/world/food/Foods.java diff --git a/src/main/java/net/minecraft/world/food/Foods.java b/src/main/java/net/minecraft/world/food/Foods.java

View File

@@ -1,59 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Sat, 2 Apr 2022 17:38:32 -0500
Subject: [PATCH] Debug sync chunk loads
diff --git a/src/main/java/com/destroystokyo/paper/PaperCommand.java b/src/main/java/com/destroystokyo/paper/PaperCommand.java
index d0c55497040158d959693ef2ddf3ff03bd6df05f..5925feafad214333529bace2178f233f589e1a6e 100644
--- a/src/main/java/com/destroystokyo/paper/PaperCommand.java
+++ b/src/main/java/com/destroystokyo/paper/PaperCommand.java
@@ -70,7 +70,7 @@ import java.util.stream.Collectors;
public class PaperCommand extends Command {
private static final String BASE_PERM = "bukkit.command.paper.";
- private static final ImmutableSet<String> SUBCOMMANDS = ImmutableSet.<String>builder().add("heap", "entity", "reload", "version", "debug", "chunkinfo", "fixlight", "syncloadinfo", "dumpitem", "mobcaps", "playermobcaps").build();
+ private static final ImmutableSet<String> SUBCOMMANDS = ImmutableSet.<String>builder().add("heap", "entity", "reload", "version", "debug", "chunkinfo", "fixlight", "syncloadinfo", "dumpitem", "mobcaps", "playermobcaps", "debugsyncload").build(); // Slice
public PaperCommand(String name) {
super(name);
@@ -203,6 +203,12 @@ public class PaperCommand extends Command {
case "syncloadinfo":
this.doSyncLoadInfo(sender, args);
break;
+ // Slice start
+ case "debugsyncload":
+ SyncLoadFinder.DEBUG = !SyncLoadFinder.DEBUG;
+ MinecraftServer.LOGGER.info("Debugging sync chunk loads now " + (SyncLoadFinder.DEBUG ? "ON" : "OFF"));
+ break;
+ // Slice end
case "mobcaps":
this.printMobcaps(sender, args);
break;
diff --git a/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java b/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java
index d3e619655382e50e9ac9323ed942502d85c9599c..a0c4db2a78895a3e76dea755c157eccabdbf04f8 100644
--- a/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java
+++ b/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java
@@ -17,6 +17,8 @@ public class SyncLoadFinder {
public static final boolean ENABLED = Boolean.getBoolean("paper.debug-sync-loads");
+ public static boolean DEBUG = ENABLED; // Slice
+
private static final WeakHashMap<Level, Object2ObjectOpenHashMap<ThrowableWithEquals, SyncLoadInformation>> SYNC_LOADS = new WeakHashMap<>();
private static final class SyncLoadInformation {
@@ -31,6 +33,13 @@ public class SyncLoadFinder {
}
public static void logSyncLoad(final Level world, final int chunkX, final int chunkZ) {
+ // Slice start
+ if (DEBUG) {
+ org.bukkit.Bukkit.getServer().getLogger().log(java.util.logging.Level.WARNING, "Sync chunk load at " + world.getWorld().getName() + " (" + chunkX + "," + chunkZ + ")");
+ Thread.dumpStack();
+ }
+ // Slice end
+
if (!ENABLED) {
return;
}

View File

@@ -1,9 +1,20 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 3 Oct 2022 08:17:50 -0500 Date: Tue, 18 Apr 2023 08:16:32 -0500
Subject: [PATCH] Equipment Packet Caching Subject: [PATCH] Equipment Packet Caching
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
index 8d442c5a498ecf288a0cc0c54889c6e2fda849ce..1530d48a67ae548fd088edd3d575a1b8f694eb48 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -286,5 +286,6 @@ public class GlobalConfiguration extends ConfigurationPart {
public boolean lagCompensateBlockBreaking = true;
public boolean useDimensionTypeForCustomSpawners = false;
public boolean strictAdvancementDimensionCheck = false;
+ public String sharedDataFolder = "";
}
}
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
index 5a8f850b447fc3a4bd0eb0c505bbdfc8be7115e8..34d74735b7a7d258c6bd14bb7e5406934a208a31 100644 index 5a8f850b447fc3a4bd0eb0c505bbdfc8be7115e8..34d74735b7a7d258c6bd14bb7e5406934a208a31 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java --- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
@@ -24,26 +35,76 @@ index 5a8f850b447fc3a4bd0eb0c505bbdfc8be7115e8..34d74735b7a7d258c6bd14bb7e540693
public ClientboundSetEquipmentPacket(FriendlyByteBuf buf) { public ClientboundSetEquipmentPacket(FriendlyByteBuf buf) {
this.entity = buf.readVarInt(); this.entity = buf.readVarInt();
EquipmentSlot[] equipmentSlots = EquipmentSlot.values(); EquipmentSlot[] equipmentSlots = EquipmentSlot.values();
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index fa14ab3d8117e9d357380d21d3c6a2cd1df7c04c..e5462d8d3f89c93c7c691a4759860be1ff8117fc 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -2,6 +2,7 @@ package net.minecraft.server;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import co.aikar.timings.Timings;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
@@ -313,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
public volatile Thread shutdownThread; // Paper
public volatile boolean abnormalExit = false; // Paper
public boolean isIteratingOverLevels = false; // Paper
+ public @Nullable DimensionDataStorage sharedDataStorage; // Slice
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
AtomicReference<S> atomicreference = new AtomicReference();
@@ -413,6 +415,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
// CraftBukkit end
+ // Slice start
+ public DimensionDataStorage getMapDataStorage() {
+ return sharedDataStorage != null ? sharedDataStorage : overworld().getDataStorage();
+ }
+ // Slice end
+
private void readScoreboard(DimensionDataStorage persistentStateManager) {
ServerScoreboard scoreboardserver = this.getScoreboard();
@@ -890,6 +898,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.isSaving = true;
this.getPlayerList().saveAll(); // Diff on change
flag3 = this.saveAllChunks(suppressLogs, flush, force);
+ if (sharedDataStorage != null) sharedDataStorage.save(); // Slice
} finally {
this.isSaving = false;
}
@@ -1105,6 +1114,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
throw new IllegalStateException("Failed to initialize server");
}
+ // Slice start
+ String sharedDataFolder = io.papermc.paper.configuration.GlobalConfiguration.get().misc.sharedDataFolder;
+ if (!Strings.isNullOrEmpty(sharedDataFolder)) {
+ File sharedDir = new File(sharedDataFolder);
+ sharedDir.mkdirs();
+ this.sharedDataStorage = new DimensionDataStorage(sharedDir, fixerUpper);
+ }
+ // Slice end
+
this.nextTickTime = Util.getMillis();
this.statusIcon = (ServerStatus.Favicon) this.loadStatusIcon().orElse(null); // CraftBukkit - decompile error
this.status = this.buildServerStatus();
@@ -1417,6 +1435,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
level.saveIncrementally(fullSave);
}
}
+ if (sharedDataStorage != null) sharedDataStorage.save(); // Slice
} finally {
this.isSaving = false;
}
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
index d9481017e36f607c6dee8ab833a36ac700267a9f..48830e44dcae2a5263dbae65506c5cb29e1ea2a7 100644 index b7fd8e70413c38923d0719aff803449e392383ac..d86836541f5eaa654d3dc452fe7cc15eafff4dfa 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java --- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
@@ -3,12 +3,8 @@ package net.minecraft.server.level; @@ -334,27 +334,8 @@ public class ServerEntity {
import com.google.common.collect.Lists;
import com.mojang.datafixers.util.Pair;
import com.mojang.logging.LogUtils;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+
+import java.util.*;
import java.util.function.Consumer;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundAddMobPacket;
@@ -310,27 +306,8 @@ public class ServerEntity {
consumer.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap)); consumer.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap));
} }
@@ -69,65 +130,62 @@ index d9481017e36f607c6dee8ab833a36ac700267a9f..48830e44dcae2a5263dbae65506c5cb2
- } - }
- ((LivingEntity) this.entity).detectEquipmentUpdates(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending - ((LivingEntity) this.entity).detectEquipmentUpdates(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending
+ if (this.entity instanceof LivingEntity livingEntity) { + if (this.entity instanceof LivingEntity livingEntity) {
+ livingEntity.sendEquipment(entityplayer); // Slice + livingEntity.sendEquipment(consumer, entityplayer); // Slice
} }
// CraftBukkit start - Fix for nonsensical head yaw // CraftBukkit start - Fix for nonsensical head yaw
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 44612616560c087ca80bd10c2077e955f5ce7c85..505d5de63dec642974ac8fda477450164b87caf6 100644 index 5813349d484cf40c5b75de6e55dff95286285934..e24b0871819add31e00e1e3d782fda31a2ad312f 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -6,14 +6,8 @@ import com.mojang.authlib.GameProfile; @@ -1926,7 +1926,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
import com.mojang.datafixers.util.Either; @Override
import com.mojang.logging.LogUtils; public MapItemSavedData getMapData(String id) {
import com.mojang.serialization.DataResult; // CraftBukkit start
-import java.util.Collection; - return (MapItemSavedData) this.getServer().overworld().getDataStorage().get((nbttagcompound) -> {
-import java.util.Iterator; + return (MapItemSavedData) this.getServer().getMapDataStorage().get((nbttagcompound) -> { // Slice
-import java.util.List; // We only get here when the data file exists, but is not a valid map
-import java.util.Objects; MapItemSavedData newMap = MapItemSavedData.load(nbttagcompound);
-import java.util.Optional; newMap.id = id;
-import java.util.OptionalInt; @@ -1940,12 +1940,22 @@ public class ServerLevel extends Level implements WorldGenLevel {
-import java.util.Random; @Override
-import java.util.UUID; public void setMapData(String id, MapItemSavedData state) {
+ state.id = id; // CraftBukkit
+import java.util.*; - this.getServer().overworld().getDataStorage().set(id, state);
import javax.annotation.Nullable; + this.getServer().getMapDataStorage().set(id, state); // Slice
import net.minecraft.BlockUtil; }
import net.minecraft.ChatFormatting;
@@ -2447,4 +2441,19 @@ public class ServerPlayer extends Player {
// CraftBukkit end
public final int getViewDistance() { throw new UnsupportedOperationException("Use PlayerChunkLoader"); } // Paper - placeholder @Override
+ public int getFreeMapId() {
+ // Slice - return ((MapIndex) this.getServer().overworld().getDataStorage().computeIfAbsent(MapIndex::load, MapIndex::new, "idcounts")).getFreeAuxValueForMap();
+ public net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket setCachedEquipment(String tag, java.util.Map<org.bukkit.inventory.EquipmentSlot, org.bukkit.inventory.ItemStack> equipment) { + // Slice start
+ List<com.mojang.datafixers.util.Pair<net.minecraft.world.entity.EquipmentSlot, net.minecraft.world.item.ItemStack>> pairs = new ArrayList<>(equipment.size()); + DimensionDataStorage storage = this.getServer().getMapDataStorage();
+ for (java.util.Map.Entry<org.bukkit.inventory.EquipmentSlot, org.bukkit.inventory.ItemStack> entry : equipment.entrySet()) { + MapIndex mapIndex = storage.readSavedData(MapIndex::load, "idcounts");
+ com.mojang.datafixers.util.Pair<net.minecraft.world.entity.EquipmentSlot, net.minecraft.world.item.ItemStack> pair = com.mojang.datafixers.util.Pair.of(net.minecraft.world.entity.EquipmentSlot.byName(entry.getKey().name()), + if (mapIndex == null) {
+ CraftItemStack.asNMSCopy(entry.getValue())); + mapIndex = new MapIndex();
+ pairs.add(pair);
+ } + }
+ + int newId = mapIndex.getFreeAuxValueForMap();
+ net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket packet = new net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket(getId(), pairs); + storage.set("idcounts", mapIndex);
+ cachedEquipmentMap.put(tag, packet); + storage.save();
+ return packet; + return newId;
+ } + // Slice end
+ // Slice end }
}
// Paper start - helper function for configurable spawn radius
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279335b7dde 100644 index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d054b5cd3f 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -262,6 +262,8 @@ public abstract class LivingEntity extends Entity { @@ -261,6 +261,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
public boolean bukkitPickUpLoot;
public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper
public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event
public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper
+ private final com.google.common.collect.Table<String, ItemStack, ItemStack> equipmentPacketCache = com.google.common.collect.HashBasedTable.create(); // Slice + private final com.google.common.collect.Table<String, ItemStack, ItemStack> equipmentPacketCache = com.google.common.collect.HashBasedTable.create(); // Slice
+ public java.util.Map<String, net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket> cachedEquipmentMap = new java.util.HashMap<>(); // Slice + public java.util.Map<String, net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket> cachedEquipmentMap = new java.util.HashMap<>(); // Slice
@Override @Override
public float getBukkitYaw() { public float getBukkitYaw() {
@@ -3002,6 +3004,7 @@ public abstract class LivingEntity extends Entity { @@ -3040,6 +3042,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (map != null) { if (map != null) {
this.handleHandSwap(map); this.handleHandSwap(map);
if (!map.isEmpty()) { if (!map.isEmpty()) {
@@ -135,7 +193,7 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
this.handleEquipmentChanges(map); this.handleEquipmentChanges(map);
} }
} }
@@ -3090,7 +3093,25 @@ public abstract class LivingEntity extends Entity { @@ -3132,7 +3135,25 @@ public abstract class LivingEntity extends Entity implements Attackable {
} }
}); });
@@ -162,10 +220,11 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
} }
// Paper start - hide unnecessary item meta // Paper start - hide unnecessary item meta
@@ -4320,6 +4341,26 @@ public abstract class LivingEntity extends Entity { @@ -4402,4 +4423,74 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.setDeltaMovement((double) ((float) packet.getXd() / 8000.0F), (double) ((float) packet.getYd() / 8000.0F), (double) ((float) packet.getZd() / 8000.0F)); public static record Fallsounds(SoundEvent small, SoundEvent big) {
}
}
+
+ // Slice start + // Slice start
+ public ItemStack getOrCreateCachedEquipmentItem(String tag, EquipmentSlot slot, ItemStack itemStack) { + public ItemStack getOrCreateCachedEquipmentItem(String tag, EquipmentSlot slot, ItemStack itemStack) {
+ return equipmentPacketCache.row(tag).computeIfAbsent(itemStack, i -> { + return equipmentPacketCache.row(tag).computeIfAbsent(itemStack, i -> {
@@ -185,17 +244,9 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
+ }); + });
+ } + }
+ // Slice end + // Slice end
+
// CraftBukkit start - decompile error
public static record Fallsounds(SoundEvent small, SoundEvent big) {
@@ -4342,4 +4383,54 @@ public abstract class LivingEntity extends Entity {
*/
// CraftBukkit end
}
+ +
+ // Slice start + // Slice start
+ public void sendEquipment(ServerPlayer p) { + public void sendEquipment(java.util.function.Consumer<net.minecraft.network.protocol.Packet<net.minecraft.network.protocol.game.ClientGamePacketListener>> consumer, ServerPlayer p) {
+ org.bukkit.event.player.PlayerReceiveEquipmentEvent event = new org.bukkit.event.player.PlayerReceiveEquipmentEvent(p.getBukkitEntity(), getBukkitEntity()); + org.bukkit.event.player.PlayerReceiveEquipmentEvent event = new org.bukkit.event.player.PlayerReceiveEquipmentEvent(p.getBukkitEntity(), getBukkitEntity());
+ level.getCraftServer().getPluginManager().callEvent(event); + level.getCraftServer().getPluginManager().callEvent(event);
+ +
@@ -205,7 +256,7 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
+ ClientboundSetEquipmentPacket equipmentPacket = player.cachedEquipmentMap.get(tag); + ClientboundSetEquipmentPacket equipmentPacket = player.cachedEquipmentMap.get(tag);
+ if (equipmentPacket != null) { + if (equipmentPacket != null) {
+ //Event says use a tag, and our tag exists; so we simply used our entire cached packet + //Event says use a tag, and our tag exists; so we simply used our entire cached packet
+ p.connection.send(equipmentPacket); + consumer.accept(equipmentPacket);
+ sendEquipment = false; + sendEquipment = false;
+ } + }
+ } + }
@@ -236,7 +287,7 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
+ if (tag != null) { + if (tag != null) {
+ cachedEquipmentMap.put(tag, equipmentPacket); + cachedEquipmentMap.put(tag, equipmentPacket);
+ } + }
+ p.connection.send(equipmentPacket); + consumer.accept(equipmentPacket);
+ } + }
+ +
+ detectEquipmentUpdates(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending + detectEquipmentUpdates(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending
@@ -244,35 +295,34 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
+ } + }
+ // Slice end + // Slice end
} }
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
index 070dab06db870f3c67dffe7637fe1a92c7eaa6a8..1005f44dd5a6906351852ea5fb35360683765cc6 100644 index defe31a5d3aa89a3d18b94f2ff005594e38754b3..637a86e74d633901fdd2f2f1ba6aa4ed49780ead 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java --- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
@@ -695,7 +695,9 @@ public final class ItemStack { @@ -58,7 +58,7 @@ public class DimensionDataStorage {
} }
public static boolean isSameIgnoreDurability(ItemStack left, ItemStack right) { @Nullable
- return left == right ? true : (!left.isEmpty() && !right.isEmpty() ? left.sameItemStackIgnoreDurability(right) : false); - private <T extends SavedData> T readSavedData(Function<CompoundTag, T> readFunction, String id) {
+ boolean rightEmpty = right.isEmpty(); + public <T extends SavedData> T readSavedData(Function<CompoundTag, T> readFunction, String id) { // Slice private -> public
+ boolean leftEmpty = left.isEmpty(); try {
+ return left == right || leftEmpty && rightEmpty ? true : (!leftEmpty && !rightEmpty ? left.sameItemStackIgnoreDurability(right) : false); File file = this.getDataFile(id);
} if (file.exists()) {
public boolean sameItem(ItemStack stack) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index c022751e3b45469cc0ad6732e2d6ff08918bafa4..04708105c6264bfacd0cc20a25178f7a62ebd78e 100644 index d43859f8aa7beed82dd3a146bb1086982cd0cda7..7d063ab5a136eebeb84b395dcb7b731dadc53e88 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -920,4 +920,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -1071,4 +1071,14 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
throw new IllegalArgumentException(entityCategory + " is an unrecognized entity category"); getHandle().knockback(strength, directionX, directionZ);
} };
// Paper end // Paper end
+ +
+ // Slice start + // Slice start
+ @Override + @Override
+ public void sendEquipment(Player p) { + public void sendEquipment(Player p) {
+ if (entity instanceof net.minecraft.world.entity.LivingEntity livingEntity) { + if (entity instanceof net.minecraft.world.entity.LivingEntity livingEntity) {
+ livingEntity.sendEquipment(((CraftPlayer) p).getHandle()); + net.minecraft.server.level.ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
+ livingEntity.sendEquipment(packet -> serverPlayer.connection.send(packet), serverPlayer);
+ } + }
+ } + }
+ // Slice end + // Slice end

View File

@@ -0,0 +1,146 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:15:23 -0500
Subject: [PATCH] PlayerLoadStatsEvent
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index a42a47b112a154f1cbfaad6d1c8bd3a8d6007a58..1b1a77cc0925245d58e2a33d5e25918de24b630e 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1458,7 +1458,7 @@ public abstract class PlayerList {
}
}
- serverstatisticmanager = new ServerStatsCounter(this.server, file1);
+ serverstatisticmanager = new ServerStatsCounter(this.server, file1, uuid); // Slice
// this.stats.put(uuid, serverstatisticmanager); // CraftBukkit
}
diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
index 8afd9b785fb8734255e3ea926b8375bb9cae60be..5a0ccc7e08ecba5dc62c02195c5f87c22ea6d122 100644
--- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java
+++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
@@ -45,7 +45,7 @@ public class ServerStatsCounter extends StatsCounter {
private final File file;
private final Set<Stat<?>> dirty = Sets.newHashSet();
- public ServerStatsCounter(MinecraftServer server, File file) {
+ public ServerStatsCounter(MinecraftServer server, File file, java.util.UUID uuid) { // Slice
this.server = server;
this.file = file;
// Spigot start
@@ -55,7 +55,14 @@ public class ServerStatsCounter extends StatsCounter {
this.stats.put( wrapper, entry.getValue().intValue() );
}
// Spigot end
- if (file.isFile()) {
+
+ // Slice start - If event supplies stats, use it. Otherwise just load from disk as usual
+ com.destroystokyo.paper.event.player.PlayerLoadStatsEvent event = new com.destroystokyo.paper.event.player.PlayerLoadStatsEvent(uuid);
+ org.bukkit.Bukkit.getPluginManager().callEvent(event);
+ JsonObject providedStats = event.getStatistics();
+ if (providedStats != null) {
+ readStats(server.getFixerUpper(), fromJson(providedStats));
+ } else if (file.isFile()) { // Slice end
try {
this.parseLocal(server.getFixerUpper(), FileUtils.readFileToString(file));
} catch (IOException ioexception) {
@@ -103,46 +110,8 @@ public class ServerStatsCounter extends StatsCounter {
if (!jsonelement.isJsonNull()) {
CompoundTag nbttagcompound = ServerStatsCounter.fromJson(jsonelement.getAsJsonObject());
-
- nbttagcompound = DataFixTypes.STATS.updateToCurrentVersion(dataFixer, nbttagcompound, NbtUtils.getDataVersion(nbttagcompound, 1343));
- if (!nbttagcompound.contains("stats", 10)) {
- break label48;
- }
-
- CompoundTag nbttagcompound1 = nbttagcompound.getCompound("stats");
- Iterator iterator = nbttagcompound1.getAllKeys().iterator();
-
- while (true) {
- if (!iterator.hasNext()) {
- break label48;
- }
-
- String s1 = (String) iterator.next();
-
- if (nbttagcompound1.contains(s1, 10)) {
- Util.ifElse(BuiltInRegistries.STAT_TYPE.getOptional(new ResourceLocation(s1)), (statisticwrapper) -> {
- CompoundTag nbttagcompound2 = nbttagcompound1.getCompound(s1);
- Iterator iterator1 = nbttagcompound2.getAllKeys().iterator();
-
- while (iterator1.hasNext()) {
- String s2 = (String) iterator1.next();
-
- if (nbttagcompound2.contains(s2, 99)) {
- Util.ifElse(this.getStat(statisticwrapper, s2), (statistic) -> {
- this.stats.put(statistic, nbttagcompound2.getInt(s2));
- }, () -> {
- ServerStatsCounter.LOGGER.warn("Invalid statistic in {}: Don't know what {} is", this.file, s2);
- });
- } else {
- ServerStatsCounter.LOGGER.warn("Invalid statistic value in {}: Don't know what {} is for key {}", new Object[]{this.file, nbttagcompound2.get(s2), s2});
- }
- }
-
- }, () -> {
- ServerStatsCounter.LOGGER.warn("Invalid statistic type in {}: Don't know what {} is", this.file, s1);
- });
- }
- }
+ readStats(dataFixer, nbttagcompound);
+ break label48;
}
ServerStatsCounter.LOGGER.error("Unable to parse Stat data from {}", this.file);
@@ -167,6 +136,48 @@ public class ServerStatsCounter extends StatsCounter {
}
+ private void readStats(DataFixer dataFixer, CompoundTag nbttagcompound) {
+ nbttagcompound = DataFixTypes.STATS.updateToCurrentVersion(dataFixer, nbttagcompound, NbtUtils.getDataVersion(nbttagcompound, 1343));
+ if (!nbttagcompound.contains("stats", 10)) {
+ return;
+ }
+
+ CompoundTag nbttagcompound1 = nbttagcompound.getCompound("stats");
+ Iterator iterator = nbttagcompound1.getAllKeys().iterator();
+
+ while (true) {
+ if (!iterator.hasNext()) {
+ return;
+ }
+
+ String s1 = (String) iterator.next();
+
+ if (nbttagcompound1.contains(s1, 10)) {
+ Util.ifElse(BuiltInRegistries.STAT_TYPE.getOptional(new ResourceLocation(s1)), (statisticwrapper) -> {
+ CompoundTag nbttagcompound2 = nbttagcompound1.getCompound(s1);
+ Iterator iterator1 = nbttagcompound2.getAllKeys().iterator();
+
+ while (iterator1.hasNext()) {
+ String s2 = (String) iterator1.next();
+
+ if (nbttagcompound2.contains(s2, 99)) {
+ Util.ifElse(this.getStat(statisticwrapper, s2), (statistic) -> {
+ this.stats.put(statistic, nbttagcompound2.getInt(s2));
+ }, () -> {
+ ServerStatsCounter.LOGGER.warn("Invalid statistic in {}: Don't know what {} is", this.file, s2);
+ });
+ } else {
+ ServerStatsCounter.LOGGER.warn("Invalid statistic value in {}: Don't know what {} is for key {}", new Object[]{this.file, nbttagcompound2.get(s2), s2});
+ }
+ }
+
+ }, () -> {
+ ServerStatsCounter.LOGGER.warn("Invalid statistic type in {}: Don't know what {} is", this.file, s1);
+ });
+ }
+ }
+ }
+
private <T> Optional<Stat<T>> getStat(StatType<T> type, String id) {
// CraftBukkit - decompile error start
Optional<ResourceLocation> optional = Optional.ofNullable(ResourceLocation.tryParse(id));

View File

@@ -0,0 +1,52 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:16:50 -0500
Subject: [PATCH] Add Force Crit to PlayerPreAttackEntityEvent
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index a144f9a911297891645f704c361e1d8ba0e28a69..a3f47872173eb9798b263c419e87b0adedcc4e25 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -1276,10 +1276,11 @@ public abstract class Player extends LivingEntity {
flag1 = true;
}
- boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.onClimbable() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && target instanceof LivingEntity; // Paper - Add critical damage API - conflict on change
+ boolean forceCrit = playerAttackEntityEvent.isForceCrit();
+ boolean flag2 = forceCrit || (flag && this.fallDistance > 0.0F && !this.onGround && !this.onClimbable() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && target instanceof LivingEntity); // Paper - Add critical damage API - conflict on change // Slice
flag2 = flag2 && !level.paperConfig().entities.behavior.disablePlayerCrits; // Paper
- flag2 = flag2 && !this.isSprinting();
+ flag2 = forceCrit || (flag2 && !this.isSprinting()); // Slice
if (flag2) {
f *= 1.5F;
}
@@ -2394,27 +2395,6 @@ public abstract class Player extends LivingEntity {
this.lastDeathLocation = lastDeathPos;
}
- @Override
- public float getHurtDir() {
- return this.hurtDir;
- }
-
- @Override
- public void animateHurt(float yaw) {
- super.animateHurt(yaw);
- this.hurtDir = yaw;
- }
-
- @Override
- public boolean canSprint() {
- return true;
- }
-
- @Override
- protected float getFlyingSpeed() {
- return this.abilities.flying && !this.isPassenger() ? (this.isSprinting() ? this.abilities.getFlyingSpeed() * 2.0F : this.abilities.getFlyingSpeed()) : (this.isSprinting() ? 0.025999999F : 0.02F);
- }
-
public static enum BedSleepingProblem {
NOT_POSSIBLE_HERE, NOT_POSSIBLE_NOW(Component.translatable("block.minecraft.bed.no_sleep")), TOO_FAR_AWAY(Component.translatable("block.minecraft.bed.too_far_away")), OBSTRUCTED(Component.translatable("block.minecraft.bed.obstructed")), OTHER_PROBLEM, NOT_SAFE(Component.translatable("block.minecraft.bed.not_safe"));

View File

@@ -0,0 +1,23 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:17:39 -0500
Subject: [PATCH] Add Preventing KB Bonus to PlayerPreAttackEntityEvent
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index a3f47872173eb9798b263c419e87b0adedcc4e25..28125492ceed99b244c5e177edb6739a9c2d68d9 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -1268,7 +1268,11 @@ public abstract class Player extends LivingEntity {
boolean flag = f2 > 0.9F;
boolean flag1 = false;
byte b0 = 0;
- int i = b0 + EnchantmentHelper.getKnockbackBonus(this);
+ int i = b0; // Slice start
+ if (!playerAttackEntityEvent.isPreventKnockbackBonus()) {
+ i += EnchantmentHelper.getKnockbackBonus(this);
+ }
+ // Slice end
if (this.isSprinting() && flag) {
sendSoundEffect(this, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_ATTACK_KNOCKBACK, this.getSoundSource(), 1.0F, 1.0F); // Paper - send while respecting visibility

View File

@@ -1,19 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Wed, 7 Sep 2022 17:37:47 -0500
Subject: [PATCH] Unfreeze MappedRegistry
diff --git a/src/main/java/net/minecraft/core/MappedRegistry.java b/src/main/java/net/minecraft/core/MappedRegistry.java
index c3c0e52cfe8ef5fe9049c4582778040702131b47..c37676f6c70fcf21fc6e3b7322f9d73c4c128c06 100644
--- a/src/main/java/net/minecraft/core/MappedRegistry.java
+++ b/src/main/java/net/minecraft/core/MappedRegistry.java
@@ -306,6 +306,8 @@ public class MappedRegistry<T> extends WritableRegistry<T> {
@Override
public Registry<T> freeze() {
+ if (true) return this; // Slice (a TODO in Paper, thanks Owen)
+
this.frozen = true;
List<ResourceLocation> list = this.byKey.entrySet().stream().filter((entry) -> {
return !entry.getValue().isBound();

View File

@@ -0,0 +1,50 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:20:19 -0500
Subject: [PATCH] Player specific target chunk send rate
diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
index 5b32567bcf532994a31f184743cf42f4ea0113a4..cf2656a4290bbf57d8a911eee4b94af4dea44637 100644
--- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
+++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
@@ -386,8 +386,8 @@ public final class PlayerChunkLoader {
return (int)Math.ceil(Math.min(config * MinecraftServer.getServer().getPlayerCount(), max <= 1.0 ? Double.MAX_VALUE : max));
}
- protected long getTargetSendPerPlayerAddend() {
- return GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate);
+ protected long getTargetSendPerPlayerAddend(ServerPlayer player) { // Slice
+ return player.targetChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / player.targetChunkSendRate); // Slice
}
protected long getMaxSendAddend() {
@@ -541,7 +541,6 @@ public final class PlayerChunkLoader {
}
final int maxSends = this.getMaxConcurrentChunkSends();
- final long nextPlayerDeadline = this.getTargetSendPerPlayerAddend() + time;
for (;;) {
if (this.chunkSendQueue.isEmpty()) {
break;
@@ -574,7 +573,7 @@ public final class PlayerChunkLoader {
throw new IllegalStateException();
}
- data.nextChunkSendTarget = nextPlayerDeadline;
+ data.nextChunkSendTarget = this.getTargetSendPerPlayerAddend(data.player) + time; // Slice
this.chunkSendWaitQueue.add(data);
synchronized (this.sendingChunkCounts) {
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 35d24300f72cdd68d46db7c880ab17eec95fae68..e7ef3882461344cfd1c53ac03de9ef1991378623 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -278,6 +278,7 @@ public class ServerPlayer extends Player {
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
public boolean smoothWorldTeleport; // Slice
+ public double targetChunkSendRate = io.papermc.paper.configuration.GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate; // Slice
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);

View File

@@ -0,0 +1,31 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 08:21:03 -0500
Subject: [PATCH] noEntityCollisions for Entity
diff --git a/src/main/java/io/papermc/paper/util/CollisionUtil.java b/src/main/java/io/papermc/paper/util/CollisionUtil.java
index a87f6380b2c387fb0cdd40d5087b5c93492e3c88..cd35c2136a638c07fed683a2f92e70aa57bcfa8e 100644
--- a/src/main/java/io/papermc/paper/util/CollisionUtil.java
+++ b/src/main/java/io/papermc/paper/util/CollisionUtil.java
@@ -809,7 +809,7 @@ public final class CollisionUtil {
public static boolean getEntityHardCollisions(final CollisionGetter getter, final Entity entity, AABB aabb,
final List<AABB> into, final boolean checkOnly, final Predicate<Entity> predicate) {
- if (isEmpty(aabb) || !(getter instanceof EntityGetter entityGetter)) {
+ if ((entity != null && entity.noEntityCollisions) || isEmpty(aabb) || !(getter instanceof EntityGetter entityGetter)) { // Slice
return false;
}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 53f33b19277cdfd364b84362475a72f8d1a3cd60..66bcacfafe25f2543d40eb959ef251da400a2c73 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -436,6 +436,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
* Overriding this field will cause memory leaks.
*/
private final boolean hardCollides;
+ public boolean noEntityCollisions; // Slice
private static final java.util.Map<Class<? extends Entity>, Boolean> cachedOverrides = java.util.Collections.synchronizedMap(new java.util.WeakHashMap<>());
{

View File

@@ -0,0 +1,42 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 25 Apr 2023 09:05:16 -0500
Subject: [PATCH] Do not freeze MappedRegistry
diff --git a/src/main/java/net/minecraft/core/MappedRegistry.java b/src/main/java/net/minecraft/core/MappedRegistry.java
index 1e33434f9f361542e03da3e4812bc6d76768a202..828d9472bf90fe098825c15bc55949497a40ae39 100644
--- a/src/main/java/net/minecraft/core/MappedRegistry.java
+++ b/src/main/java/net/minecraft/core/MappedRegistry.java
@@ -338,7 +338,7 @@ public class MappedRegistry<T> implements WritableRegistry<T> {
if (this.frozen) {
return this;
} else {
- this.frozen = true;
+// this.frozen = true; // Slice
this.byValue.forEach((value, entry) -> {
entry.bindValue(value);
});
@@ -365,14 +365,16 @@ public class MappedRegistry<T> implements WritableRegistry<T> {
@Override
public Holder.Reference<T> createIntrusiveHolder(T value) {
+ // Slice start
if (this.unregisteredIntrusiveHolders == null) {
- throw new IllegalStateException("This registry can't create intrusive holders");
- } else {
- this.validateWrite();
- return this.unregisteredIntrusiveHolders.computeIfAbsent(value, (valuex) -> {
- return Holder.Reference.createIntrusive(this.asLookup(), valuex);
- });
+ this.unregisteredIntrusiveHolders = new HashMap<>();
}
+ // Slice end
+
+ this.validateWrite();
+ return this.unregisteredIntrusiveHolders.computeIfAbsent(value, (valuex) -> {
+ return Holder.Reference.createIntrusive(this.asLookup(), valuex);
+ });
}
@Override

View File

@@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Wed, 26 Apr 2023 08:19:29 -0500
Subject: [PATCH] Add Entry ctor to ClientboundPlayerInfoUpdatePacket
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java
index 4aa8b483841028fbcc43f9ed47730881263e5065..618ba8b495968896dc6011089972921715930ecf 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java
@@ -24,6 +24,13 @@ public class ClientboundPlayerInfoUpdatePacket implements Packet<ClientGamePacke
this.entries = players.stream().map(ClientboundPlayerInfoUpdatePacket.Entry::new).toList();
}
+ // Slice
+ public ClientboundPlayerInfoUpdatePacket(EnumSet<ClientboundPlayerInfoUpdatePacket.Action> actions, List<ClientboundPlayerInfoUpdatePacket.Entry> entries) {
+ this.actions = actions;
+ this.entries = entries;
+ }
+ // End Slice
+
public ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action action, ServerPlayer player) {
this.actions = EnumSet.of(action);
this.entries = List.of(new ClientboundPlayerInfoUpdatePacket.Entry(player));

View File

@@ -1,130 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 14 Nov 2022 07:37:41 -0600
Subject: [PATCH] Shared Data Folder for maps
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
index fafbebbb5e8c1a381b673f97f1fa210687b52823..8c846971b56930ff10740986d71ad47afc2b79d1 100644
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
@@ -693,4 +693,11 @@ public class PaperConfig {
private static void useProxyProtocol() {
useProxyProtocol = getBoolean("settings.proxy-protocol", false);
}
+
+ // Slice start
+ public static String sharedDataFolder;
+ private static void sharedDataFolder() {
+ sharedDataFolder = getString("settings.shared-data-folder", null);
+ }
+ // Slice end
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index ce51ebeb5df07abc4a8bb31bc737ab3e4214ce83..8129c62692b9d1c4be85387dc52096b94956920e 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -308,6 +308,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
public volatile Thread shutdownThread; // Paper
public volatile boolean abnormalExit = false; // Paper
+ public @Nullable DimensionDataStorage sharedDataStorage; // Slice
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
AtomicReference<S> atomicreference = new AtomicReference();
@@ -407,6 +408,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
// CraftBukkit end
+ // Slice start
+ public DimensionDataStorage getMapDataStorage() {
+ return sharedDataStorage != null ? sharedDataStorage : overworld().getDataStorage();
+ }
+ // Slice end
+
private void readScoreboard(DimensionDataStorage persistentStateManager) {
ServerScoreboard scoreboardserver = this.getScoreboard();
@@ -919,6 +926,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.isSaving = true;
this.getPlayerList().saveAll(); // Diff on change
flag3 = this.saveAllChunks(suppressLogs, flush, force);
+ if (sharedDataStorage != null) sharedDataStorage.save(); // Slice
} finally {
this.isSaving = false;
}
@@ -1161,6 +1169,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
try {
long serverStartTime = Util.getNanos(); // Paper
if (this.initServer()) {
+ // Slice start
+ String sharedDataFolder = com.destroystokyo.paper.PaperConfig.sharedDataFolder;
+ if (sharedDataFolder != null) {
+ File sharedDir = new File(sharedDataFolder);
+ sharedDir.mkdirs();
+ this.sharedDataStorage = new DimensionDataStorage(sharedDir, fixerUpper);
+ }
+ // Slice end
+
this.nextTickTime = Util.getMillis();
this.status.setDescription(new TextComponent(this.motd));
this.status.setVersion(new ServerStatus.Version(SharedConstants.getCurrentVersion().getName(), SharedConstants.getCurrentVersion().getProtocolVersion()));
@@ -1492,6 +1509,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
level.saveIncrementally(fullSave);
}
}
+ if (sharedDataStorage != null) sharedDataStorage.save(); // Slice
} finally {
this.isSaving = false;
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 9b3af8f2a433368d722cd442c07b2a2cfb16dc54..f460d21bcc7ba36763410851cf92a7053d85fc96 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1845,7 +1845,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@Override
public MapItemSavedData getMapData(String id) {
// CraftBukkit start
- return (MapItemSavedData) this.getServer().overworld().getDataStorage().get((nbttagcompound) -> {
+ return (MapItemSavedData) this.getServer().getMapDataStorage().get((nbttagcompound) -> { // Slice
// We only get here when the data file exists, but is not a valid map
MapItemSavedData newMap = MapItemSavedData.load(nbttagcompound);
newMap.id = id;
@@ -1859,12 +1859,22 @@ public class ServerLevel extends Level implements WorldGenLevel {
@Override
public void setMapData(String id, MapItemSavedData state) {
state.id = id; // CraftBukkit
- this.getServer().overworld().getDataStorage().set(id, state);
+ this.getServer().getMapDataStorage().set(id, state); // Slice
}
@Override
public int getFreeMapId() {
- return ((MapIndex) this.getServer().overworld().getDataStorage().computeIfAbsent(MapIndex::load, MapIndex::new, "idcounts")).getFreeAuxValueForMap();
+ // Slice start
+ DimensionDataStorage storage = this.getServer().getMapDataStorage();
+ MapIndex mapIndex = storage.readSavedData(MapIndex::load, "idcounts");
+ if (mapIndex == null) {
+ mapIndex = new MapIndex();
+ }
+ int newId = mapIndex.getFreeAuxValueForMap();
+ storage.set("idcounts", mapIndex);
+ storage.save();
+ return newId;
+ // Slice end
}
// Paper start - helper function for configurable spawn radius
diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
index 0465b397b628b11a6fc52e3375945c94d68cfdd5..14296686772b74a45543227dc1e74a9c71c58cef 100644
--- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
+++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
@@ -58,7 +58,7 @@ public class DimensionDataStorage {
}
@Nullable
- private <T extends SavedData> T readSavedData(Function<CompoundTag, T> readFunction, String id) {
+ public <T extends SavedData> T readSavedData(Function<CompoundTag, T> readFunction, String id) { // Slice private -> public
try {
File file = this.getDataFile(id);
if (file.exists()) {

View File

@@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 2 May 2023 07:54:02 -0500
Subject: [PATCH] Add jackson
diff --git a/build.gradle.kts b/build.gradle.kts
index 1c7c148feb1785839b9dad0aa8477a52a2e12b3c..d21acd988d623f4dea90250ea1a729af3cc908e7 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,6 +13,13 @@ dependencies {
exclude("io.papermc.paper", "paper-api")
}
// Slice end
+
+ // Slice start - JSON logging for DataDog ingestion
+ implementation("com.fasterxml.jackson.core:jackson-core:2.13.0")
+ implementation("com.fasterxml.jackson.core:jackson-databind:2.13.0")
+ implementation("com.fasterxml.jackson.core:jackson-annotations:2.13.0")
+ // Slice end
+
// Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0")

View File

@@ -0,0 +1,37 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Sat, 6 May 2023 18:14:26 -0500
Subject: [PATCH] Maybe can't tostring?
diff --git a/src/main/java/net/minecraft/nbt/CompoundTag.java b/src/main/java/net/minecraft/nbt/CompoundTag.java
index 7e94ebe06fc62293e665d6db19e42d947e7eb30f..158c012b8a6808ca0f820c2997af282529148c7c 100644
--- a/src/main/java/net/minecraft/nbt/CompoundTag.java
+++ b/src/main/java/net/minecraft/nbt/CompoundTag.java
@@ -466,6 +466,9 @@ public class CompoundTag implements Tag {
@Override
public CompoundTag copy() {
// Paper start - reduce memory footprint of NBTTagCompound
+ if (this.tags.size() < 0) {
+ net.minecraft.server.MinecraftServer.LOGGER.debug("Tried to copy an invalid item with negative tags: {}, {}, {}, {}", this.tags, this.tags.getClass().getName());
+ }
it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<String, Tag> ret = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(this.tags.size(), 0.8f);
java.util.Iterator<java.util.Map.Entry<String, Tag>> iterator = (this.tags instanceof it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) ? ((it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap)this.tags).object2ObjectEntrySet().fastIterator() : this.tags.entrySet().iterator();
while (iterator.hasNext()) {
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 588a4fdcb294b9b1a92ef9969ef64f999bf529cc..431ea53e4fb9c26c24003da7e216a1f5fe070985 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -719,7 +719,11 @@ public final class ItemStack {
itemstack.setPopTime(this.getPopTime());
if (this.tag != null) {
- itemstack.tag = this.tag.copy();
+ if (this.tag.tags.size() < 0) {
+ ItemStack.LOGGER.debug("Tried to copy an invalid item with negative tags: {}, {}, {}, {}", this.tag, this.tag.tags, this.tag.tags.getClass().getName());
+ } else {
+ itemstack.tag = this.tag.copy();
+ }
}
return itemstack;

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Mon, 22 May 2023 08:21:18 -0500
Subject: [PATCH] Allow inventory clicks in Spectator
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index aa287d7f37f38d938d195114408cb6dbda59063d..76395ad7d42058705bd100b5ef57598ed6ca492c 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2968,7 +2968,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (this.player.isImmobile()) return; // CraftBukkit
this.player.resetLastActionTime();
if (this.player.containerMenu.containerId == packet.getContainerId() && this.player.containerMenu.stillValid(this.player)) { // CraftBukkit
- boolean cancelled = this.player.isSpectator(); // CraftBukkit - see below if
+ boolean cancelled = false; //Slice - allow spectator inv management this.player.isSpectator(); // CraftBukkit - see below if
if (false/*this.player.isSpectator()*/) { // CraftBukkit
this.player.containerMenu.sendAllDataToRemote();
} else if (!this.player.containerMenu.stillValid(this.player)) {

View File

@@ -1,74 +1,61 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com> From: Cryptite <cryptite@gmail.com>
Date: Mon, 28 Feb 2022 09:01:45 -0600 Date: Tue, 6 Jun 2023 07:51:32 -0500
Subject: [PATCH] Packet obfuscation and reduction Subject: [PATCH] Packet obfuscation and reduction
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEntityDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEntityDataPacket.java
index 3e17f6131bf590d7c4a16b79c1c145cb4f565bc9..e1233fa58d068448d0accef7a7f6725fcb902848 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEntityDataPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEntityDataPacket.java
@@ -22,6 +22,13 @@ public class ClientboundSetEntityDataPacket implements Packet<ClientGamePacketLi
}
+ // Slice start
+ public ClientboundSetEntityDataPacket(int id, List<SynchedEntityData.DataItem<?>> packedItems) {
+ this.id = id;
+ this.packedItems = packedItems;
+ }
+ // Slice end
+
public ClientboundSetEntityDataPacket(FriendlyByteBuf buf) {
this.id = buf.readVarInt();
this.packedItems = SynchedEntityData.unpack(buf);
diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a1412a6de58 100644 index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..b5f4af655fdc6a9150802254811ed743cc61074c 100644
--- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java --- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
+++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java +++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
@@ -136,6 +136,11 @@ public class SynchedEntityData { @@ -139,15 +139,29 @@ public class SynchedEntityData {
} }
public <T> void set(EntityDataAccessor<T> key, T value) { public <T> void set(EntityDataAccessor<T> key, T value, boolean force) {
+ //Slice start + // Slice start
+ set(key, value, null); + this.set(key, value, force, null);
+ } + }
+ +
+ public <T> void set(EntityDataAccessor<T> key, T value, @Nullable T foreignValue) { // Slice end + public <T> void set(EntityDataAccessor<T> key, T value, @Nullable T foreignValue) {
+ this.set(key, value, false, foreignValue);
+ }
+
+ public <T> void set(EntityDataAccessor<T> key, T value, boolean force, @Nullable T foreignValue) { // Slice end
SynchedEntityData.DataItem<T> datawatcher_item = this.getItem(key); SynchedEntityData.DataItem<T> datawatcher_item = this.getItem(key);
if (ObjectUtils.notEqual(value, datawatcher_item.getValue())) {
@@ -145,6 +150,11 @@ public class SynchedEntityData {
this.isDirty = true;
}
+ // Slice start + // Slice start
+ if (foreignValue != null && ObjectUtils.notEqual(foreignValue, datawatcher_item.getForeignValue())) { + if (foreignValue != null && ObjectUtils.notEqual(foreignValue, datawatcher_item.getForeignValue())) {
+ datawatcher_item.setForeignValue(foreignValue); + datawatcher_item.setForeignValue(foreignValue);
+ } + }
+ // Slice end + // Slice end
+
if (force || ObjectUtils.notEqual(value, datawatcher_item.getValue())) {
datawatcher_item.setValue(value);
this.entity.onSyncedDataUpdated(key);
datawatcher_item.setDirty(true);
this.isDirty = true;
}
-
} }
// CraftBukkit start - add method from above // CraftBukkit start - add method from above
@@ -200,6 +210,28 @@ public class SynchedEntityData { @@ -189,6 +203,26 @@ public class SynchedEntityData {
return list; return list;
} }
+ // Slice start + // Slice start
+ @Nullable + @Nullable
+ public List<SynchedEntityData.DataItem<?>> packForeignDirty(List<DataItem<?>> unpackedData) { + public List<SynchedEntityData.DataValue<?>> packForeignDirty() {
+ List<SynchedEntityData.DataItem<?>> list = null; + List<SynchedEntityData.DataValue<?>> list = null;
+
+ for (DataItem<?> dataItem : unpackedData) {
+ DataItem<?> item = itemsById.get(dataItem.accessor.getId());
+ if (item.isDirty(true)) {
+ item.setForeignDirty(false);
+ +
+ for (DataItem<?> dataItem : this.itemsById.values()) {
+ if (dataItem.isDirty(true)) {
+ dataItem.setForeignDirty(false);
+ if (list == null) { + if (list == null) {
+ list = Lists.newArrayList(); + list = new ArrayList();
+ } + }
+ +
+ list.add(item.copy(true)); + list.add(dataItem.foreignValue != null ? dataItem.foreignValue() : dataItem.value());
+ } + }
+ } + }
+ +
@@ -77,29 +64,33 @@ index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a14
+ // Slice end + // Slice end
+ +
@Nullable @Nullable
public List<SynchedEntityData.DataItem<?>> getAll() { public List<SynchedEntityData.DataValue<?>> getNonDefaultValues() {
List<SynchedEntityData.DataItem<?>> list = null; List<SynchedEntityData.DataValue<?>> list = null;
@@ -313,11 +345,14 @@ public class SynchedEntityData { @@ -296,11 +330,14 @@ public class SynchedEntityData {
final EntityDataAccessor<T> accessor;
T value; T value;
private final T initialValue;
private boolean dirty; private boolean dirty;
+ @Nullable T foreignValue = null; // Slice + private @Nullable T foreignValue = null; // Slice
+ private boolean foreignDirty; // Slice + private boolean foreignDirty; // Slice
public DataItem(EntityDataAccessor<T> data, T value) { public DataItem(EntityDataAccessor<T> data, T value) {
this.accessor = data; this.accessor = data;
this.initialValue = value;
this.value = value; this.value = value;
this.dirty = true; + this.foreignDirty = true; //Slice
+ this.foreignDirty = true; // Slice
} }
public EntityDataAccessor<T> getAccessor() { public EntityDataAccessor<T> getAccessor() {
@@ -343,5 +378,34 @@ public class SynchedEntityData { @@ -330,6 +367,35 @@ public class SynchedEntityData {
public SynchedEntityData.DataItem<T> copy() { public SynchedEntityData.DataValue<T> value() {
return new SynchedEntityData.DataItem<>(this.accessor, this.accessor.getSerializer().copy(this.value)); return SynchedEntityData.DataValue.create(this.accessor, this.value);
} }
+ +
+ // Slice start + // Slice start
+ public SynchedEntityData.DataValue<T> foreignValue() {
+ return SynchedEntityData.DataValue.create(this.accessor, this.foreignValue);
+ }
+
+ public void setForeignValue(T foreignValue) { + public void setForeignValue(T foreignValue) {
+ this.foreignValue = foreignValue; + this.foreignValue = foreignValue;
+ this.foreignDirty = true; + this.foreignDirty = true;
@@ -122,43 +113,41 @@ index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a14
+ public void setForeignDirty(boolean dirty) { + public void setForeignDirty(boolean dirty) {
+ this.foreignDirty = dirty; + this.foreignDirty = dirty;
+ } + }
+
+ public SynchedEntityData.DataItem<T> copy(boolean foreign) {
+ return new SynchedEntityData.DataItem<>(this.accessor, this.accessor.getSerializer().copy((foreign && this.foreignValue != null ? this.foreignValue : this.value)));
+ }
+ // Slice end + // Slice end
} }
}
public static record DataValue<T>(int id, EntityDataSerializer<T> serializer, T value) { // CraftBukkit - decompile error
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
index f91e1a876ad4c46a7c92cead18947a941b4d9e68..13973b8803afefd491dc05e1df6e9b10174e0108 100644 index d86836541f5eaa654d3dc452fe7cc15eafff4dfa..5de01ea9b5bd6d4d67024cd045a68a730365a6fa 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java --- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
@@ -371,7 +371,19 @@ public class ServerEntity { @@ -378,7 +378,20 @@ public class ServerEntity {
SynchedEntityData datawatcher = this.entity.getEntityData();
if (datawatcher.isDirty()) { if (list != null) {
- this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), datawatcher, false)); this.trackedDataValues = datawatcher.getNonDefaultValues();
- this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), list));
+// this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), list));
+ // Slice start + // Slice start
+ ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(this.entity.getId(), datawatcher, false); + ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(this.entity.getId(), list);
+ if (this.entity instanceof ServerPlayer serverPlayer) { + if (this.entity instanceof ServerPlayer serverPlayer) {
+ serverPlayer.connection.send(dataPacket); + serverPlayer.connection.send(dataPacket);
+ } + }
+ +
+ //Get the packedData that the original packet has, and then determine if any of those are changed in + //Get the packedData that the original packet has, and then determine if any of those are changed in
+ //the foreign version. If null, nothing to notify foreign trackers about. + //the foreign version. If null, nothing to notify foreign trackers about.
+ List<SynchedEntityData.DataItem<?>> dirtyItems = datawatcher.packForeignDirty(dataPacket.getUnpackedData()); + List<SynchedEntityData.DataValue<?>> dirtyItems = datawatcher.packForeignDirty();
+ if (dirtyItems != null) { + if (dirtyItems != null) {
+ this.broadcast(new ClientboundSetEntityDataPacket(this.entity.getId(), dirtyItems)); + this.broadcast.accept(new ClientboundSetEntityDataPacket(this.entity.getId(), dirtyItems));
+ } + }
+ // Slice end + // Slice end
} }
if (this.entity instanceof LivingEntity) { if (this.entity instanceof LivingEntity) {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 7fcb2ecae7ec9a457e00a6a3ea1fb7b589360e02..75afbe3722d3e3ba7fe33f959ca40679c40b95dc 100644 index 66bcacfafe25f2543d40eb959ef251da400a2c73..94a3d39f9802be7b71adf378985f132fd7f5c0fd 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2987,7 +2987,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -3151,7 +3151,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
this.entityData.markDirty(Entity.DATA_AIR_SUPPLY_ID); this.entityData.markDirty(Entity.DATA_AIR_SUPPLY_ID);
return; return;
} }
@@ -168,10 +157,10 @@ index 7fcb2ecae7ec9a457e00a6a3ea1fb7b589360e02..75afbe3722d3e3ba7fe33f959ca40679
} }
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 0156525637f8aa2e4e639bc493d8617b5af4cc32..1c598a97ed78a744907ae310f3568c447aad0949 100644 index 28125492ceed99b244c5e177edb6739a9c2d68d9..8821d57e1f111fb4528d7645ba635c7d8687c8a9 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java --- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -632,7 +632,7 @@ public abstract class Player extends LivingEntity { @@ -641,7 +641,7 @@ public abstract class Player extends LivingEntity {
public void increaseScore(int score) { public void increaseScore(int score) {
int j = this.getScore(); int j = this.getScore();
@@ -181,10 +170,10 @@ index 0156525637f8aa2e4e639bc493d8617b5af4cc32..1c598a97ed78a744907ae310f3568c44
public void startAutoSpinAttack(int riptideTicks) { public void startAutoSpinAttack(int riptideTicks) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index ce78e024244c14530270b8276e5b0fd853f0a110..df22a1407f3d1e93f0f1d50b5dbec3df12b106d2 100644 index 1b58330a0eff27eb920a37dad0b436049fe0bce6..4ae992fd174135eda153015236c6a3b884af3dd8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2196,7 +2196,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -2515,7 +2515,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.sendHealthUpdate(); this.sendHealthUpdate();
} }
} }

View File

@@ -0,0 +1,94 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 6 Jun 2023 08:14:08 -0500
Subject: [PATCH] Long distance tracking
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 67a8b0145e4ed096b4fc520202098b9b1d259bd6..47b500930645d8704f78d65e5dd6f148b08f8cb7 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1612,7 +1612,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
double vec3d_dx = player.getX() - this.entity.getX();
double vec3d_dz = player.getZ() - this.entity.getZ();
// Paper end - remove allocation of Vec3D here
- double d0 = (double) Math.min(this.getEffectiveRange(), io.papermc.paper.chunk.PlayerChunkLoader.getSendViewDistance(player) * 16); // Paper - per player view distance
+ // Slice start
+ double d0 = io.papermc.paper.chunk.PlayerChunkLoader.getSendViewDistance(player) * 16;
+ if (this.entity instanceof ServerPlayer serverPlayer && player.canSeeFromLongDistance(serverPlayer)) {
+ d0 = Math.min(level.spigotConfig.flyingPlayerTrackingRange, d0);
+ }
+ else {
+ d0 = Math.min(this.getEffectiveRange(), d0); // Paper - per player view distance
+ }
+ // Slice end
double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper
double d2 = d0 * d0;
boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player);
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index e7ef3882461344cfd1c53ac03de9ef1991378623..b043273a532ae994cca56f4516c3ba12f30b9495 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -278,6 +278,7 @@ public class ServerPlayer extends Player {
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
public boolean smoothWorldTeleport; // Slice
+ public boolean hasLongDistanceTracking; // Slice
public double targetChunkSendRate = io.papermc.paper.configuration.GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate; // Slice
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
@@ -2566,4 +2567,18 @@ public class ServerPlayer extends Player {
return (CraftPlayer) super.getBukkitEntity();
}
// CraftBukkit end
+
+ // Slice start
+ public boolean canSeeFromLongDistance(ServerPlayer other) {
+ if (hasLongDistanceTracking) return true;
+
+ CraftPlayer bukkitEntity = other.getBukkitEntity();
+ return bukkitEntity.isGliding() || bukkitEntity.isFlying();
+ }
+
+ public boolean canBeSeenLongDistance() {
+ CraftPlayer bukkitEntity = getBukkitEntity();
+ return bukkitEntity.isGliding() || bukkitEntity.isFlying();
+ }
+ // Slice end
}
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
index bbfafb1400721251dfd2cac4dd8a31be2d682d4b..ec2467432a0a3a285039e7ced36c9a5220a86849 100644
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
@@ -269,6 +269,7 @@ public class SpigotWorldConfig
}
public int playerTrackingRange = 48;
+ public int flyingPlayerTrackingRange = 64; // Slice
public int animalTrackingRange = 48;
public int monsterTrackingRange = 48;
public int miscTrackingRange = 32;
@@ -277,6 +278,7 @@ public class SpigotWorldConfig
private void trackingRange()
{
this.playerTrackingRange = this.getInt( "entity-tracking-range.players", this.playerTrackingRange );
+ this.flyingPlayerTrackingRange = this.getInt( "entity-tracking-range.flying-players", this.flyingPlayerTrackingRange ); // Slice
this.animalTrackingRange = this.getInt( "entity-tracking-range.animals", this.animalTrackingRange );
this.monsterTrackingRange = this.getInt( "entity-tracking-range.monsters", this.monsterTrackingRange );
this.miscTrackingRange = this.getInt( "entity-tracking-range.misc", this.miscTrackingRange );
diff --git a/src/main/java/org/spigotmc/TrackingRange.java b/src/main/java/org/spigotmc/TrackingRange.java
index 6ac5de214d0da921d0d0c822e7063f6738788cac..4a76e87188739b5fc1b3e0de0ded0d96def03176 100644
--- a/src/main/java/org/spigotmc/TrackingRange.java
+++ b/src/main/java/org/spigotmc/TrackingRange.java
@@ -27,9 +27,9 @@ public class TrackingRange
}
if (entity instanceof net.minecraft.world.entity.boss.enderdragon.EnderDragon) return defaultRange; // Paper - enderdragon is exempt
SpigotWorldConfig config = entity.level.spigotConfig;
- if ( entity instanceof ServerPlayer )
+ if ( entity instanceof ServerPlayer serverPlayer)
{
- return config.playerTrackingRange;
+ return serverPlayer.canBeSeenLongDistance() ? config.flyingPlayerTrackingRange : config.playerTrackingRange;
// Paper start - Simplify and set water mobs to animal tracking range
}
switch (entity.activationType) {

View File

@@ -0,0 +1,66 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 20 Jun 2023 08:04:37 -0500
Subject: [PATCH] Add canDespawn to Warden
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index ceacc0d383e2ee674783d3c0a7df0a951595faca..de65adaf5674803f12f3ad8562eb9aba0d299d13 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -588,7 +588,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
}), (entity) -> {
entity.load(nbt);
}, () -> {
- EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
+ EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.toString());
});
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
index b2b63d9df3c07696f47281e9be74f1799f50b93e..6599f2653ee94287a46d047eb4b15ff278d8455d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
@@ -109,6 +109,7 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
public AnimationState sonicBoomAnimationState = new AnimationState();
private final DynamicGameEventListener<VibrationListener> dynamicGameEventListener = new DynamicGameEventListener<>(new VibrationListener(new EntityPositionSource(this, this.getEyeHeight()), 16, this));
private AngerManagement angerManagement = new AngerManagement(this::canTargetEntity, Collections.emptyList());
+ public boolean canDespawn; // Slice
public Warden(EntityType<? extends Monster> type, Level world) {
super(type, world);
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java b/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
index 67329dd79450b20eba9055f9c16b600478247a01..9b1ef02f3d756da25795412e6d2ff543a86b0ef6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
@@ -139,7 +139,13 @@ public class WardenAi {
public static void setDigCooldown(LivingEntity warden) {
if (warden.getBrain().hasMemoryValue(MemoryModuleType.DIG_COOLDOWN)) {
- warden.getBrain().setMemoryWithExpiry(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE, 1200L);
+ // Slice start
+ if (warden instanceof Warden nmsWarden && !nmsWarden.canDespawn) {
+ warden.getBrain().setMemory(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE);
+ } else {
+ warden.getBrain().setMemoryWithExpiry(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE, 1200L);
+ }
+ // Slice end
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
index 6ecdc4bf1f6b8f0363e667135ba463433be5c0fb..6107439289f9932e6d68dbfa0c35ac58e4a61007 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
@@ -92,4 +92,11 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde
case ANGRY -> AngerLevel.ANGRY;
};
}
+
+ // Slice start
+ @Override
+ public void setCanDespawn(boolean canDespawn) {
+ this.getHandle().canDespawn = canDespawn;
+ }
+ // Slice end
}