Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4226a1891 | ||
|
|
67fbb12ac6 | ||
|
|
c8fb92aa1c | ||
|
|
745ad5f5ec | ||
|
|
30cb112a1f | ||
|
|
f0af4c4a47 | ||
|
|
00d0546253 | ||
|
|
b2bd357fa1 | ||
|
|
4f38df3a86 | ||
|
|
b349445305 | ||
|
|
1c9c208630 | ||
|
|
c0339695f2 | ||
|
|
14575216df | ||
|
|
ac92226367 | ||
|
|
08b0b99099 | ||
|
|
ff5d7eeea5 | ||
|
|
a85661d795 | ||
|
|
19995071a3 | ||
|
|
7513492ac3 |
@@ -4,7 +4,7 @@ plugins {
|
||||
java
|
||||
`maven-publish`
|
||||
id("com.github.johnrengelman.shadow") version "7.1.2" apply false
|
||||
id("io.papermc.paperweight.patcher") version "1.3.6"
|
||||
id("io.papermc.paperweight.patcher") version "1.3.9"
|
||||
}
|
||||
|
||||
val paperMavenPublicUrl = "https://papermc.io/repo/repository/maven-public/"
|
||||
@@ -78,6 +78,7 @@ tasks.generateDevelopmentBundle {
|
||||
libraryRepositories.set(
|
||||
listOf(
|
||||
"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
|
||||
)
|
||||
)
|
||||
@@ -89,8 +90,9 @@ allprojects {
|
||||
publishing {
|
||||
repositories {
|
||||
maven {
|
||||
name = "jitpack"
|
||||
url = uri("https://jitpack.io")
|
||||
name = "Ysera"
|
||||
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
|
||||
credentials(PasswordCredentials::class)
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
group=com.lokamc.slice
|
||||
version=1.18.2-R0.1-SNAPSHOT
|
||||
version=1.19.2-R0.1-SNAPSHOT
|
||||
|
||||
mcVersion=1.18.2
|
||||
paperRef=b1ac25fdb8e2c011cc0b006d0b478e11879a29d8
|
||||
mcVersion=1.19.2
|
||||
paperRef=96fdafd9354f1d27d56ccc1cf7276f1552182659
|
||||
|
||||
org.gradle.caching=true
|
||||
org.gradle.parallel=true
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tom <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:40:41 -0600
|
||||
Subject: [PATCH] Set BlockData without light update
|
||||
Date: Fri, 12 Aug 2022 08:20:02 -0500
|
||||
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
|
||||
index 3e980c630452c8ea72227bc4cd92c605253cd41b..fe23d144175b3bd55564a4a266b98cd2fc70a08a 100644
|
||||
index 9930ebe7a23d306c602840fd43652fbdaba481b3..ed65bb8867bc2b8e67726dee07a82ac3671b0306 100644
|
||||
--- a/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
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:54:52 -0600
|
||||
Date: Fri, 12 Aug 2022 09:54:07 -0500
|
||||
Subject: [PATCH] Add BlockDestroyedByNeighborEvent
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:56:16 -0600
|
||||
Date: Fri, 12 Aug 2022 10:40:48 -0500
|
||||
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
|
||||
index 3fc35a559ea53f045f2f72b272bc8ba34d1b2994..7fbd9c223bf34feb35f7836b42a3bd220c4cbbc5 100644
|
||||
index 814bad7830fd0ceb741a4b31685dd2576a0a57c2..1e0e90b64f39125c82d87bab970afbd90072944d 100644
|
||||
--- a/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
|
||||
@@ -665,6 +665,20 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran
|
||||
@NotNull
|
||||
Collection<ItemStack> getDrops(@NotNull ItemStack tool, @Nullable Entity entity);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:55:29 -0600
|
||||
Date: Fri, 12 Aug 2022 10:41:44 -0500
|
||||
Subject: [PATCH] Add Player to SpongeAbsorbEvent
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 09:17:28 -0600
|
||||
Subject: [PATCH] World Instance flag
|
||||
Date: Fri, 12 Aug 2022 10:45:51 -0500
|
||||
Subject: [PATCH] Add World Instance flag
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
|
||||
index d4c60cf8404641fa8580cb0653e6f7a10baed865..fde06c5d88ffb63910bcb06e3e70e3c0a4af92c7 100644
|
||||
index e8c0c853eb52d1473c20231660355f77b1f7e016..02e524f718566a13880c9417518ebaeca816a8fc 100644
|
||||
--- a/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
|
||||
@@ -2591,6 +2591,11 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
*/
|
||||
public void setAutoSave(boolean value);
|
||||
|
||||
@@ -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;
|
||||
+ }
|
||||
+}
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tom <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 09:36:31 -0600
|
||||
Date: Fri, 12 Aug 2022 10:52:37 -0500
|
||||
Subject: [PATCH] Add player data saving events
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 3 Apr 2022 08:28:24 -0500
|
||||
Date: Fri, 12 Aug 2022 11:00:39 -0500
|
||||
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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..dd7ecdb59e1a7e89ea63767a688337bb22f9cf59
|
||||
index 0000000000000000000000000000000000000000..7eca4d6929fc7a75974d182c1ea692d3823a19c0
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/bukkit/event/player/PlayerGetRespawnLocationEvent.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package org.bukkit.event.player;
|
||||
+
|
||||
+import org.apache.commons.lang.Validate;
|
||||
+import org.apache.commons.lang3.Validate;
|
||||
+import org.bukkit.Location;
|
||||
+import org.bukkit.entity.Player;
|
||||
+import org.bukkit.event.HandlerList;
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Thu, 7 Apr 2022 16:35:36 -0500
|
||||
Subject: [PATCH] Set multiple Team settings with a single packet
|
||||
Date: Sat, 13 Aug 2022 08:40:03 -0500
|
||||
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
|
||||
index 0f5c49d41c9460da0ba913b4ca8bef375f2c23df..30d2c56d71244e595afccdd47899548f6fb13886 100644
|
||||
index 06a5d3177ca7ab90c3fd9d2053b2ec5e887c7c62..31e2756c134462debfcfa768d2d0ccb988046d72 100644
|
||||
--- a/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;
|
||||
// Paper end
|
||||
|
||||
30
patches/api/0010-Smooth-Teleports.patch
Normal file
30
patches/api/0010-Smooth-Teleports.patch
Normal file
@@ -0,0 +1,30 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sat, 13 Aug 2022 08:58:21 -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 de960716478477ce199526b8f860cfafa1541ee9..adddf2c924e9fb3650b88c8ea64644f26bd533da 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -2780,6 +2780,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.
|
||||
@@ -1,16 +1,16 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 3 Oct 2022 08:17:50 -0500
|
||||
Date: Fri, 18 Nov 2022 08:02:12 -0600
|
||||
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
|
||||
index 31353bd20404a8c2acf6bf0df524dc3cae324272..1a4309bcb529e4ca5cb3bf75e0bf3e65003a8006 100644
|
||||
index ead90b002034c463983af948a4fb882109b8d3a2..aa58f8c94e967465e79f85f08b45b86e1bce7803 100644
|
||||
--- a/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
|
||||
@@ -1107,4 +1107,11 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
*/
|
||||
void setHurtDirection(float hurtDirection);
|
||||
void damageItemStack(org.bukkit.inventory.@NotNull EquipmentSlot slot, int amount);
|
||||
// Paper end
|
||||
+
|
||||
+ // Slice start
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 6 Nov 2022 08:29:18 -0600
|
||||
Date: Fri, 18 Nov 2022 08:03:20 -0600
|
||||
Subject: [PATCH] AntiXray Bypass
|
||||
|
||||
|
||||
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 adddf2c924e9fb3650b88c8ea64644f26bd533da..78f9ae7f6a8c625cb66e3b241adfdec25d5b2497 100644
|
||||
--- a/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
|
||||
@@ -2560,6 +2560,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
*/
|
||||
boolean hasResourcePack();
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 7 Nov 2022 22:44:23 -0600
|
||||
Date: Fri, 18 Nov 2022 08:06:32 -0600
|
||||
Subject: [PATCH] PlayerPreChunkLoadEvent
|
||||
|
||||
|
||||
@@ -81,10 +81,10 @@ index 0000000000000000000000000000000000000000..b5cc9538a70c7ce0b494d4878d51b521
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
|
||||
index fde06c5d88ffb63910bcb06e3e70e3c0a4af92c7..12d0d7355e7f15a073e1ee895f4fcaa935c4405e 100644
|
||||
index adb5fcbacf5fa284e4c6efc1dcc0f30f3932761c..27f6db119f0c720e191ba7f9b64d8aded972a8f9 100644
|
||||
--- a/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
|
||||
@@ -515,6 +515,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
//@Deprecated // Paper
|
||||
public boolean refreshChunk(int x, int z);
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MiniDigger <admin@minidigger.me>
|
||||
Date: Sat, 12 Jun 2021 16:40:34 +0200
|
||||
Subject: [PATCH] Build changes
|
||||
Date: Fri, 12 Aug 2022 08:07:34 -0500
|
||||
Subject: [PATCH] Build Changes
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9eeae9ae2f 100644
|
||||
index d5d49bb2b47c889e12d17dc87b8c439a60b3fe67..7c6c8d46a322d5a7406e68fb3288591661e6bf55 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -9,8 +9,12 @@ plugins {
|
||||
@@ -7,8 +7,12 @@ plugins {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -16,14 +16,14 @@ index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9e
|
||||
- implementation(project(":paper-mojangapi"))
|
||||
+ // Slice start
|
||||
+ 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")
|
||||
+ }
|
||||
+ // Slice end
|
||||
// Paper start
|
||||
implementation("org.jline:jline-terminal-jansi:3.21.0")
|
||||
implementation("net.minecrell:terminalconsoleappender:1.3.0")
|
||||
@@ -60,7 +64,7 @@ tasks.jar {
|
||||
@@ -61,7 +65,7 @@ tasks.jar {
|
||||
attributes(
|
||||
"Main-Class" to "org.bukkit.craftbukkit.Main",
|
||||
"Implementation-Title" to "CraftBukkit",
|
||||
@@ -32,7 +32,7 @@ index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9e
|
||||
"Implementation-Vendor" to date, // Paper
|
||||
"Specification-Title" to "Bukkit",
|
||||
"Specification-Version" to project.version,
|
||||
@@ -148,7 +152,7 @@ fun TaskContainer.registerRunTask(
|
||||
@@ -133,7 +137,7 @@ fun TaskContainer.registerRunTask(
|
||||
name: String,
|
||||
block: JavaExec.() -> Unit
|
||||
): TaskProvider<JavaExec> = register<JavaExec>(name) {
|
||||
@@ -42,10 +42,10 @@ index 0282e3b75470e1a68ea1fc228082483514ba432e..73ce9e6171020fc4abc70d61c4587b9e
|
||||
standardInput = System.`in`
|
||||
workingDir = rootProject.layout.projectDirectory
|
||||
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 710ca7d3a5659953f64bc6dccdd93b43300961cc..6f11e51dd4626c079d67a6fb5359e0736946629a 100644
|
||||
--- a/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
|
||||
@@ -1654,7 +1654,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
|
||||
@DontObfuscate
|
||||
public String getServerModName() {
|
||||
@@ -55,10 +55,10 @@ index c8d56947305c981a3268ce4ae3e975db350ceff2..ce51ebeb5df07abc4a8bb31bc737ab3e
|
||||
|
||||
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
|
||||
index ab843069ac0653d03cf3f925f49555016cad84fa..e09ae5f7684113d60d2672bc4bfc8543bce2f54f 100644
|
||||
index bfc4ee36befb925ab4eb6b96f5c1aa6c76bf711f..5aa66a1afeefb8ea8ff0987fbc3777c1c6c7b83e 100644
|
||||
--- a/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
|
||||
@@ -261,7 +261,7 @@ import javax.annotation.Nullable; // Paper
|
||||
import javax.annotation.Nonnull; // Paper
|
||||
|
||||
public final class CraftServer implements Server {
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
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
|
||||
|
||||
|
||||
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 49b983064ea810382b6112f5dc7f93ba4e5710bd..efa3d635251fcf2b3293f9ad25ff1f2500445e80 100644
|
||||
--- a/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 {
|
||||
@@ -1660,7 +1660,10 @@ public abstract class Mob extends LivingEntity {
|
||||
float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F;
|
||||
|
||||
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
|
||||
index 2483d7df7f1bf94344afd38b37602c645a4a2dff..0156525637f8aa2e4e639bc493d8617b5af4cc32 100644
|
||||
index 61597ebe2f9faff43994c475074b87d11905e582..2ebb2e95241caf0393ed5db8f02776f566b88960 100644
|
||||
--- a/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 {
|
||||
@@ -972,7 +972,7 @@ public abstract class Player extends LivingEntity {
|
||||
protected void blockUsingShield(LivingEntity attacker) {
|
||||
super.blockUsingShield(attacker);
|
||||
if (attacker.getMainHandItem().getItem() instanceof AxeItem) {
|
||||
if (attacker.canDisableShield()) {
|
||||
- this.disableShield(true);
|
||||
+ this.disableShield(true, attacker); // Slice
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1420,6 +1420,12 @@ public abstract class Player extends LivingEntity {
|
||||
@@ -1456,6 +1456,12 @@ public abstract class Player extends LivingEntity {
|
||||
}
|
||||
|
||||
public void disableShield(boolean sprinting) {
|
||||
@@ -46,7 +46,7 @@ index 2483d7df7f1bf94344afd38b37602c645a4a2dff..0156525637f8aa2e4e639bc493d8617b
|
||||
float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F;
|
||||
|
||||
if (sprinting) {
|
||||
@@ -1427,7 +1433,12 @@ public abstract class Player extends LivingEntity {
|
||||
@@ -1463,7 +1469,12 @@ public abstract class Player extends LivingEntity {
|
||||
}
|
||||
|
||||
if (this.random.nextFloat() < f) {
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tom <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:40:41 -0600
|
||||
Subject: [PATCH] Set BlockData without light update
|
||||
Date: Fri, 12 Aug 2022 08:20:02 -0500
|
||||
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
|
||||
index 1e656438d9ee89b97c660f3b3ec671be6546c6b7..787c14495616c2ccc6cbb41a44010f1ede1ff16d 100644
|
||||
index 877498729c66de9aa6a27c9148f7494d7895615c..63959d7f15c682c2935f872d50de03fdacf95db4 100644
|
||||
--- a/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);
|
||||
}
|
||||
|
||||
- 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
|
||||
- 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)) {
|
||||
return false;
|
||||
} else {
|
||||
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 3cbf801b2e5420c0e870f73788deb550e49ad54d..264a6bc9f174a42dfeed4822dbb1bd3cc608d108 100644
|
||||
--- a/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 {
|
||||
@@ -508,12 +508,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -46,7 +46,7 @@ index 160c0f37aa3aaf7598f852acf9bd444f79444c97..8b6ea24dc8d0286c0814c86dcf4c51ca
|
||||
// CraftBukkit start - tree generation
|
||||
if (this.captureTreeGeneration) {
|
||||
// Paper start
|
||||
@@ -547,7 +547,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -560,7 +560,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
} else {
|
||||
BlockState iblockdata2 = this.getBlockState(pos);
|
||||
|
||||
@@ -55,7 +55,7 @@ index 160c0f37aa3aaf7598f852acf9bd444f79444c97..8b6ea24dc8d0286c0814c86dcf4c51ca
|
||||
this.getProfiler().push("queueCheckLight");
|
||||
this.getChunkSource().getLightEngine().checkBlock(pos);
|
||||
this.getProfiler().pop();
|
||||
@@ -694,7 +694,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -708,7 +708,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
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);
|
||||
|
||||
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
|
||||
index 134e5ec79bf2dddd4e31930f8a7cb2c02fa29518..fd72d278a2719911a46b6bc9e7da2dc24bbe681e 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/LevelWriter.java
|
||||
@@ -86,7 +86,7 @@ index 134e5ec79bf2dddd4e31930f8a7cb2c02fa29518..fd72d278a2719911a46b6bc9e7da2dc2
|
||||
|
||||
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
|
||||
index a80f4dc0a642c744223a155232291ace6e007636..fda1cb8ac3fa78375d90d6bc9f05a78f58d18193 100644
|
||||
index 7b71073027f4cf79736546500ededdfbb83d968e..0402cad6877e66ea3b5a77bfb9204a52fe795fec 100644
|
||||
--- a/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 {
|
||||
@@ -94,15 +94,15 @@ index a80f4dc0a642c744223a155232291ace6e007636..fda1cb8ac3fa78375d90d6bc9f05a78f
|
||||
}
|
||||
} else {
|
||||
- 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
|
||||
index e231636403a70f28e7e4bf51542608872234ce94..47b067f820dbe1d6304e30721afd7a8fd05d2032 100644
|
||||
index 09be3f188f9710fa71c5db67023e654739721f21..8de249142fbb53426ee1ee2b655dffc1c66f711f 100644
|
||||
--- a/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 {
|
||||
@@ -280,7 +280,7 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
|
||||
BlockPos pos = new BlockPos(x, y, z);
|
||||
net.minecraft.world.level.block.state.BlockState old = this.getHandle().getBlockState(pos);
|
||||
|
||||
@@ -112,10 +112,10 @@ index e231636403a70f28e7e4bf51542608872234ce94..47b067f820dbe1d6304e30721afd7a8f
|
||||
|
||||
@Override
|
||||
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 350cbf64c17938021002d5fd67176c44b398231e..b74846b94853a86dbb1506ef8f54a9816af657d1 100644
|
||||
--- a/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 {
|
||||
@@ -189,15 +189,20 @@ public class CraftBlock implements Block {
|
||||
|
||||
@Override
|
||||
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
|
||||
if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes
|
||||
// SPIGOT-4612: faster - just clear tile
|
||||
@@ -209,7 +214,7 @@ public class CraftBlock implements Block {
|
||||
@@ -211,7 +216,7 @@ public class CraftBlock implements Block {
|
||||
if (applyPhysics) {
|
||||
return world.setBlock(position, blockData, 3);
|
||||
} else {
|
||||
@@ -150,7 +150,7 @@ index a52e76c8870b1dd578c4332930c6f2fd3b31d471..1ed2dcb6f28a391689b5dd10073422ba
|
||||
world.getMinecraftWorld().sendBlockUpdated(
|
||||
position,
|
||||
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 a8ab1d3ee81664193be39d2735d6495136e0e310..fd4f00fa38b2d90e13937f114d96ea37bbc6dcdb 100644
|
||||
--- a/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 {
|
||||
@@ -163,10 +163,10 @@ index 966ac60daebb7bb211ab8096fc0c5f33db67320a..d68b046e30d0f3d186ed90b7c36086cc
|
||||
this.world.getHandle().sendBlockUpdated(
|
||||
position,
|
||||
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 b303eb2989be28dadf183d12a4bd706e43d1fa98..72496af0bdd05f83ec9e6bbbfde01ae79f61cc96 100644
|
||||
--- a/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 {
|
||||
@@ -246,7 +246,7 @@ public class DummyGeneratorAccess implements WorldGenLevel {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -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);
|
||||
@@ -0,0 +1,50 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 12 Aug 2022 08:23:13 -0500
|
||||
Subject: [PATCH] Ignore durability change 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 529ea9094c0c7b6263c13b3b7a2d1e652f7bc29e..b9fbbd5d775af0ce7d9eba97e14046233c64b0fd 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -3103,7 +3103,7 @@ public abstract class LivingEntity extends Entity {
|
||||
|
||||
ItemStack itemstack1 = this.getItemBySlot(enumitemslot);
|
||||
|
||||
- if (this.equipmentHasChanged(itemstack, itemstack1)) {
|
||||
+ if (!net.minecraft.world.item.ItemStack.isSameIgnoreDurability(itemstack, itemstack1)) { // Slice
|
||||
// Paper start - PlayerArmorChangeEvent
|
||||
if (this instanceof ServerPlayer && enumitemslot.getType() == EquipmentSlot.Type.ARMOR) {
|
||||
final org.bukkit.inventory.ItemStack oldItem = CraftItemStack.asBukkitCopy(itemstack);
|
||||
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
index 8450a22b0fc6e8dc5cad0f61ac52a82b3cd3791e..6ed921621f66dc4bfec66a307db24defb3caf380 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
@@ -720,6 +720,26 @@ public final class ItemStack {
|
||||
return left == right ? true : (!left.isEmpty() && !right.isEmpty() ? left.sameItem(right) : false);
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ public static boolean isSameIgnoreDurability(ItemStack left, ItemStack right) {
|
||||
+ if (left == right) return true;
|
||||
+
|
||||
+ boolean rightEmpty = right.isEmpty();
|
||||
+ boolean leftEmpty = left.isEmpty();
|
||||
+ if (leftEmpty && rightEmpty) return true;
|
||||
+
|
||||
+ if (!leftEmpty && !rightEmpty) {
|
||||
+ return left.sameItemStackIgnoreDurability(right);
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ public boolean sameItemStackIgnoreDurability(ItemStack stack) {
|
||||
+ return this.isDamageableItem() ? !stack.isEmpty() && this.is(stack.getItem()) : this.sameItem(stack);
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
public boolean sameItem(ItemStack stack) {
|
||||
return !stack.isEmpty() && this.is(stack.getItem());
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:45:30 -0600
|
||||
Subject: [PATCH] Allow opening covered chests
|
||||
Date: Fri, 12 Aug 2022 08:28:00 -0500
|
||||
Subject: [PATCH] Alllow 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
|
||||
index db726697b00afdee6078849fd224263483349912..cc415e4dd2093aa658817589f4f286c1a3ee63ad 100644
|
||||
index c6b57d45383441aa35510e759ce3cb82bc98f305..0f6dc8ab64f2422f636c2792be06f31bafefe3f8 100644
|
||||
--- a/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) {
|
||||
@@ -23,10 +23,10 @@ index db726697b00afdee6078849fd224263483349912..cc415e4dd2093aa658817589f4f286c1
|
||||
|
||||
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
|
||||
index 16d677234616daec24e7250ff3e93aa3a83e9715..ee12ef106fa2dcbbac0161d96f383efbdd96bf94 100644
|
||||
index 7385e91f32f070e86a4e0fd3d214f55d832c7979..4911b099f865b9202286f51087e5c00ffeaa95a5 100644
|
||||
--- a/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();
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
if (playerEnderChestContainer != null && blockEntity instanceof EnderChestBlockEntity) {
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:46:13 -0600
|
||||
Subject: [PATCH] Don't send fire packets if player has Fire Resistance
|
||||
Date: Fri, 12 Aug 2022 08:28:40 -0500
|
||||
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
|
||||
index dfd1f37757af1bd808cc2e2d8bf97123adf638bb..7fcb2ecae7ec9a457e00a6a3ea1fb7b589360e02 100644
|
||||
index 1eaab1f6923e6aa34b643293347348e5cc19af3c..127b87e687a5dcfb6dcdc09e9efc08114933e91b 100644
|
||||
--- a/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 {
|
||||
@@ -845,7 +845,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
|
||||
this.checkOutOfWorld();
|
||||
if (!this.level.isClientSide) {
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:56:16 -0600
|
||||
Date: Fri, 12 Aug 2022 10:40:48 -0500
|
||||
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
|
||||
index 21131dd9b2858c912712d5ded9e2fff274d439d2..982e879bc0478a2faf41b28a56a48ea5fc69c5ab 100644
|
||||
index b74846b94853a86dbb1506ef8f54a9816af657d1..5835e60581240602e24a3eadbae084dd4717b9a1 100644
|
||||
--- a/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 {
|
||||
@@ -616,7 +616,18 @@ public class CraftBlock implements Block {
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> getDrops(ItemStack item, Entity entity) {
|
||||
@@ -28,7 +28,7 @@ index 21131dd9b2858c912712d5ded9e2fff274d439d2..982e879bc0478a2faf41b28a56a48ea5
|
||||
net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item);
|
||||
|
||||
// Modelled off EntityHuman#hasBlock
|
||||
@@ -603,6 +614,7 @@ public class CraftBlock implements Block {
|
||||
@@ -627,6 +638,7 @@ public class CraftBlock implements Block {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
@@ -1,11 +1,11 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:55:29 -0600
|
||||
Date: Fri, 12 Aug 2022 10:41:43 -0500
|
||||
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
|
||||
index 11b40defd5f5362346fd8a70a1141cd6425cefa7..48541be0c1cbe33d4dad1158683ab25447ecf5cf 100644
|
||||
index 7304b2659eb45bc4bc9fa7c43e6ca07221d0fc73..63e385993022b6e708e981982c18060273d3e019 100644
|
||||
--- a/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 {
|
||||
@@ -1,26 +1,26 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 09:17:28 -0600
|
||||
Subject: [PATCH] World Instance flag
|
||||
Date: Fri, 12 Aug 2022 10:45:51 -0500
|
||||
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
|
||||
index 98209532ad3e692d7e459640123f78bbd9a65889..9b3af8f2a433368d722cd442c07b2a2cfb16dc54 100644
|
||||
index 54c2b7fba83d6f06dba95b1bb5b487a02048d6e6..274a8deb22d0d6d07d1e6278935000756ae37ac5 100644
|
||||
--- a/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 {
|
||||
@@ -221,6 +221,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
public final UUID uuid;
|
||||
public boolean hasPhysicsEvent = true; // Paper
|
||||
public boolean hasEntityMoveEvent = false; // Paper
|
||||
+ public boolean instance; // Slice
|
||||
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
|
||||
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
|
||||
index 15d740a605c7257bcc7117c7dfb3612b472ba664..9d400d82eeab062322acea81b87f6fc572151700 100644
|
||||
index f8d321e925bf2708e51590542325c1bdc67d5964..0c8ec5c60d123e1fc7984dc45ba2df16612314b3 100644
|
||||
--- a/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 {
|
||||
@@ -1266,6 +1266,18 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
world.noSave = !value;
|
||||
}
|
||||
|
||||
@@ -38,4 +38,4 @@ index 15d740a605c7257bcc7117c7dfb3612b472ba664..9d400d82eeab062322acea81b87f6fc5
|
||||
+
|
||||
@Override
|
||||
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
|
||||
@@ -1,32 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 09:01:45 -0600
|
||||
Date: Fri, 12 Aug 2022 10:48:03 -0500
|
||||
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
|
||||
index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a1412a6de58 100644
|
||||
index 37e193f57938047c8b886ed7d2816411392f94b4..e37c72e90e53908cb2f529265df54c22a692219a 100644
|
||||
--- a/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 {
|
||||
@@ -135,6 +135,11 @@ public class SynchedEntityData {
|
||||
}
|
||||
|
||||
public <T> void set(EntityDataAccessor<T> key, T value) {
|
||||
@@ -38,7 +20,7 @@ index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a14
|
||||
SynchedEntityData.DataItem<T> datawatcher_item = this.getItem(key);
|
||||
|
||||
if (ObjectUtils.notEqual(value, datawatcher_item.getValue())) {
|
||||
@@ -145,6 +150,11 @@ public class SynchedEntityData {
|
||||
@@ -144,6 +149,11 @@ public class SynchedEntityData {
|
||||
this.isDirty = true;
|
||||
}
|
||||
|
||||
@@ -50,25 +32,22 @@ index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a14
|
||||
}
|
||||
|
||||
// CraftBukkit start - add method from above
|
||||
@@ -200,6 +210,28 @@ public class SynchedEntityData {
|
||||
@@ -185,6 +195,25 @@ public class SynchedEntityData {
|
||||
return list;
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ @Nullable
|
||||
+ public List<SynchedEntityData.DataItem<?>> packForeignDirty(List<DataItem<?>> unpackedData) {
|
||||
+ List<SynchedEntityData.DataItem<?>> list = null;
|
||||
+
|
||||
+ for (DataItem<?> dataItem : unpackedData) {
|
||||
+ DataItem<?> item = itemsById.get(dataItem.accessor.getId());
|
||||
+ if (item.isDirty(true)) {
|
||||
+ item.setForeignDirty(false);
|
||||
+
|
||||
+ public List<SynchedEntityData.DataValue<?>> packForeignDirty() {
|
||||
+ List<SynchedEntityData.DataValue<?>> list = null;
|
||||
+ for (DataItem<?> dataItem : this.itemsById.values()) {
|
||||
+ if (dataItem.isDirty(true)) {
|
||||
+ dataItem.setForeignDirty(false);
|
||||
+ if (list == null) {
|
||||
+ list = Lists.newArrayList();
|
||||
+ list = new ArrayList();
|
||||
+ }
|
||||
+
|
||||
+ list.add(item.copy(true));
|
||||
+ list.add(dataItem.value());
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
@@ -77,26 +56,26 @@ index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a14
|
||||
+ // Slice end
|
||||
+
|
||||
@Nullable
|
||||
public List<SynchedEntityData.DataItem<?>> getAll() {
|
||||
List<SynchedEntityData.DataItem<?>> list = null;
|
||||
@@ -313,11 +345,14 @@ public class SynchedEntityData {
|
||||
final EntityDataAccessor<T> accessor;
|
||||
public List<SynchedEntityData.DataValue<?>> getNonDefaultValues() {
|
||||
List<SynchedEntityData.DataValue<?>> list = null;
|
||||
@@ -291,11 +320,14 @@ public class SynchedEntityData {
|
||||
T value;
|
||||
private final T initialValue;
|
||||
private boolean dirty;
|
||||
+ @Nullable T foreignValue = null; // Slice
|
||||
+ private boolean foreignDirty; // Slice
|
||||
|
||||
public DataItem(EntityDataAccessor<T> data, T value) {
|
||||
this.accessor = data;
|
||||
this.initialValue = value;
|
||||
this.value = value;
|
||||
this.dirty = true;
|
||||
+ this.foreignDirty = true; // Slice
|
||||
}
|
||||
|
||||
public EntityDataAccessor<T> getAccessor() {
|
||||
@@ -343,5 +378,34 @@ public class SynchedEntityData {
|
||||
public SynchedEntityData.DataItem<T> copy() {
|
||||
return new SynchedEntityData.DataItem<>(this.accessor, this.accessor.getSerializer().copy(this.value));
|
||||
@@ -325,6 +357,35 @@ public class SynchedEntityData {
|
||||
public SynchedEntityData.DataValue<T> value() {
|
||||
return SynchedEntityData.DataValue.create(this.accessor, this.value);
|
||||
}
|
||||
+
|
||||
+ // Slice start
|
||||
@@ -128,37 +107,39 @@ index 1d88edfd09a909044f6e3175af652914b4d06311..e4f8403c6544e1a00571f28954458a14
|
||||
+ }
|
||||
+ // 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
|
||||
index f91e1a876ad4c46a7c92cead18947a941b4d9e68..13973b8803afefd491dc05e1df6e9b10174e0108 100644
|
||||
index 190e9761087baec5827d722a8281f0ffb6798341..6d5a3bf7f93ea96d8615aaab2f88c40f524aa888 100644
|
||||
--- a/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 {
|
||||
SynchedEntityData datawatcher = this.entity.getEntityData();
|
||||
@@ -367,7 +367,20 @@ public class ServerEntity {
|
||||
|
||||
if (datawatcher.isDirty()) {
|
||||
- this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), datawatcher, false));
|
||||
if (list != null) {
|
||||
this.trackedDataValues = datawatcher.getNonDefaultValues();
|
||||
- this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), list));
|
||||
+
|
||||
+ // 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) {
|
||||
+ serverPlayer.connection.send(dataPacket);
|
||||
+ }
|
||||
+
|
||||
+ //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.
|
||||
+ List<SynchedEntityData.DataItem<?>> dirtyItems = datawatcher.packForeignDirty(dataPacket.getUnpackedData());
|
||||
+ List<SynchedEntityData.DataValue<?>> dirtyItems = datawatcher.packForeignDirty();
|
||||
+ if (dirtyItems != null) {
|
||||
+ this.broadcast(new ClientboundSetEntityDataPacket(this.entity.getId(), dirtyItems));
|
||||
+ broadcast.accept(new ClientboundSetEntityDataPacket(this.entity.getId(), dirtyItems));
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
|
||||
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
|
||||
index 7fcb2ecae7ec9a457e00a6a3ea1fb7b589360e02..75afbe3722d3e3ba7fe33f959ca40679c40b95dc 100644
|
||||
index 127b87e687a5dcfb6dcdc09e9efc08114933e91b..282cee03458ce6fa16896d988ac4d1dc887e5501 100644
|
||||
--- a/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 {
|
||||
@@ -3129,7 +3129,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
this.entityData.markDirty(Entity.DATA_AIR_SUPPLY_ID);
|
||||
return;
|
||||
}
|
||||
@@ -168,10 +149,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
|
||||
index 0156525637f8aa2e4e639bc493d8617b5af4cc32..1c598a97ed78a744907ae310f3568c447aad0949 100644
|
||||
index 2ebb2e95241caf0393ed5db8f02776f566b88960..8b27a118c28baaaf4356174dd55351982560b548 100644
|
||||
--- a/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 {
|
||||
@@ -637,7 +637,7 @@ public abstract class Player extends LivingEntity {
|
||||
public void increaseScore(int score) {
|
||||
int j = this.getScore();
|
||||
|
||||
@@ -181,10 +162,10 @@ index 0156525637f8aa2e4e639bc493d8617b5af4cc32..1c598a97ed78a744907ae310f3568c44
|
||||
|
||||
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
|
||||
index ce78e024244c14530270b8276e5b0fd853f0a110..df22a1407f3d1e93f0f1d50b5dbec3df12b106d2 100644
|
||||
index b32f44beab2c9790ee2da8403e362e8b3ecc6175..2c3b361d604b30cc114ecaa9874bc1f6cdcae22a 100644
|
||||
--- a/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 {
|
||||
@@ -2323,7 +2323,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
this.sendHealthUpdate();
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tom <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 09:36:31 -0600
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 12 Aug 2022 10:52:36 -0500
|
||||
Subject: [PATCH] Add player data saving events
|
||||
|
||||
|
||||
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 58b093bb1de78ee3b3b2ea364aa50474883f443a..0989c7deef13ee202560fb2f44cbd273f9817f91 100644
|
||||
--- a/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 {
|
||||
@@ -590,6 +590,8 @@ public class ServerPlayerGameMode {
|
||||
enuminteractionresult1 = stack.useOn(itemactioncontext, hand);
|
||||
}
|
||||
|
||||
@@ -18,10 +18,10 @@ index a33431984b6051efd39f0077c55186da789d1d60..6df88cd4a86a85c0f4abd8fd50f57608
|
||||
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
|
||||
index c59f98ca3adfdd90cdc5999aeadbb0834efedc0f..6e819bd376eb9edee6bf8bd8c08a755599f1514a 100644
|
||||
index 72946e324c575ef39f3939225b96b68f724da460..cc6eded233655888664cab9808c7c3ecd07c5cce 100644
|
||||
--- a/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 {
|
||||
@@ -202,7 +202,12 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
return nbttagcompound;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ index c59f98ca3adfdd90cdc5999aeadbb0834efedc0f..6e819bd376eb9edee6bf8bd8c08a7555
|
||||
Map<StatType<?>, JsonObject> map = Maps.newHashMap();
|
||||
ObjectIterator objectiterator = this.stats.object2IntEntrySet().iterator();
|
||||
|
||||
@@ -227,7 +232,7 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
@@ -228,7 +233,7 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
|
||||
jsonobject1.add("stats", jsonobject);
|
||||
jsonobject1.addProperty("DataVersion", SharedConstants.getCurrentVersion().getWorldVersion());
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 3 Apr 2022 08:28:24 -0500
|
||||
Date: Fri, 12 Aug 2022 11:00:39 -0500
|
||||
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
|
||||
index d0ec7a195c3efd2dfdbec1396ebc7794358e74c5..8cef43d4ffbdbf96380a274d80045405b5cff780 100644
|
||||
index f381bf9064be548a4a603e0042886d8a5e70ba5b..673930ebb5027b71bc4a780ecd354108ed8c7226 100644
|
||||
--- a/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 {
|
||||
@@ -817,49 +817,57 @@ public abstract class PlayerList {
|
||||
|
||||
// CraftBukkit start - fire PlayerRespawnEvent
|
||||
if (location == null) {
|
||||
@@ -1,11 +1,11 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Thu, 7 Apr 2022 16:35:36 -0500
|
||||
Subject: [PATCH] Set multiple Team settings with a single packet
|
||||
Date: Sat, 13 Aug 2022 08:40:09 -0500
|
||||
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
|
||||
index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296529fa2bd 100644
|
||||
index 9464054912e19fc78dd965b71fce20a18564b351..1624a0f8ea211a4c43fd01612674ca501c10d7e6 100644
|
||||
--- a/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 {
|
||||
@@ -17,7 +17,7 @@ index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296
|
||||
public PlayerTeam(Scoreboard scoreboard, String name) {
|
||||
this.scoreboard = scoreboard;
|
||||
@@ -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
|
||||
@@ -39,7 +39,7 @@ index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296
|
||||
}
|
||||
|
||||
public void setPlayerPrefix(@Nullable Component prefix) {
|
||||
this.playerPrefix = prefix == null ? TextComponent.EMPTY : prefix;
|
||||
this.playerPrefix = prefix == null ? CommonComponents.EMPTY : prefix;
|
||||
- this.scoreboard.onTeamChanged(this);
|
||||
+ if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice
|
||||
}
|
||||
@@ -48,7 +48,7 @@ index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296
|
||||
@@ -79,7 +86,7 @@ public class PlayerTeam extends Team {
|
||||
|
||||
public void setPlayerSuffix(@Nullable Component suffix) {
|
||||
this.playerSuffix = suffix == null ? TextComponent.EMPTY : suffix;
|
||||
this.playerSuffix = suffix == null ? CommonComponents.EMPTY : suffix;
|
||||
- this.scoreboard.onTeamChanged(this);
|
||||
+ if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice
|
||||
}
|
||||
@@ -1,31 +1,31 @@
|
||||
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
|
||||
Date: Sat, 13 Aug 2022 08:58:14 -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 2f5e40437d1865a874c352999edd084226d4e47b..6e796cae90112c3b087aa12cf7d7899d1d9bcbc9 100644
|
||||
index 7d6d3c8556033d289fdadc489e73fba478fce41a..fc07b3340c8e90df20ab3989bb07a8c4bfc13579 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
|
||||
@@ -268,6 +268,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 95fe4240f3e1174ec36598f24d63f0073c13b376..d0ec7a195c3efd2dfdbec1396ebc7794358e74c5 100644
|
||||
index 673930ebb5027b71bc4a780ecd354108ed8c7226..b1e0a4f51b58ffdff72127886d5c9014002dd52f 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 {
|
||||
}
|
||||
@@ -899,12 +899,12 @@ public abstract class PlayerList {
|
||||
int i = flag ? 1 : 0;
|
||||
// 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 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);
|
||||
@@ -35,3 +35,23 @@ index 95fe4240f3e1174ec36598f24d63f0073c13b376..d0ec7a195c3efd2dfdbec1396ebc7794
|
||||
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 2c3b361d604b30cc114ecaa9874bc1f6cdcae22a..2f614915026dd9d44589cb1c1da28aca9b202d12 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1175,6 +1175,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
|
||||
@@ -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() {
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:56:44 -0600
|
||||
Date: Sat, 13 Aug 2022 09:10:38 -0500
|
||||
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
|
||||
index edc6235288f0843608dae4552e05915e4067cbf2..73548e5fa318b84e9299ccac02a326bea86a6b11 100644
|
||||
index 2212f9f48636357265d8e44aba415ea4f09f1fe7..34d32abbec7bc79751d46f4b15f7b6cbe5a71e11 100644
|
||||
--- a/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
|
||||
@@ -506,7 +506,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))));
|
||||
}
|
||||
|
||||
19
patches/server/0016-Unfreeze-MappedRegistry.patch
Normal file
19
patches/server/0016-Unfreeze-MappedRegistry.patch
Normal file
@@ -0,0 +1,19 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 16 Aug 2022 08:27:13 -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 1e33434f9f361542e03da3e4812bc6d76768a202..834a6f2eb2d6c0aa3afd450034f32b4e008b3a3c 100644
|
||||
--- a/src/main/java/net/minecraft/core/MappedRegistry.java
|
||||
+++ b/src/main/java/net/minecraft/core/MappedRegistry.java
|
||||
@@ -335,7 +335,7 @@ public class MappedRegistry<T> implements WritableRegistry<T> {
|
||||
|
||||
@Override
|
||||
public Registry<T> freeze() {
|
||||
- if (this.frozen) {
|
||||
+ if (this.true) { // Slice (a TODO in Paper, thanks Owen)
|
||||
return this;
|
||||
} else {
|
||||
this.frozen = true;
|
||||
@@ -1,21 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 11:21:07 -0600
|
||||
Subject: [PATCH] Disable geode 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
|
||||
index 7cf6d6a055f40fd9e05aadc680ce6f703b808653..317bf4d6557426dc3bc1485db6969d74544d73eb 100644
|
||||
--- a/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 {
|
||||
|
||||
private static void globalOverworldGeneration(BiomeGenerationSettings.Builder generationSettings) {
|
||||
BiomeDefaultFeatures.addDefaultCarversAndLakes(generationSettings);
|
||||
- BiomeDefaultFeatures.addDefaultCrystalFormations(generationSettings);
|
||||
- BiomeDefaultFeatures.addDefaultMonsterRoom(generationSettings);
|
||||
+// BiomeDefaultFeatures.addDefaultCrystalFormations(generationSettings); // Slice - Don't generate Geodes in our chunk generation
|
||||
+// BiomeDefaultFeatures.addDefaultMonsterRoom(generationSettings);
|
||||
BiomeDefaultFeatures.addDefaultUndergroundVariety(generationSettings);
|
||||
BiomeDefaultFeatures.addDefaultSprings(generationSettings);
|
||||
BiomeDefaultFeatures.addSurfaceFreezing(generationSettings);
|
||||
@@ -1,17 +1,18 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 3 Oct 2022 08:17:50 -0500
|
||||
Date: Fri, 18 Nov 2022 08:02:11 -0600
|
||||
Subject: [PATCH] Equipment Packet Caching
|
||||
|
||||
|
||||
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..997c9656c9cf815ad2769d4dea6f67a2301fca7c 100644
|
||||
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||||
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||||
@@ -18,6 +18,15 @@ public class ClientboundSetEquipmentPacket implements Packet<ClientGamePacketLis
|
||||
@@ -18,6 +18,17 @@ public class ClientboundSetEquipmentPacket implements Packet<ClientGamePacketLis
|
||||
this.slots = equipmentList;
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ public ClientboundSetEquipmentPacket(int id, List<Pair<EquipmentSlot, ItemStack>> equipmentList, net.minecraft.world.entity.LivingEntity entity, String tag) {
|
||||
+ this.entity = id;
|
||||
+ slots = new java.util.ArrayList<>(equipmentList.size());
|
||||
@@ -20,30 +21,16 @@ index 5a8f850b447fc3a4bd0eb0c505bbdfc8be7115e8..34d74735b7a7d258c6bd14bb7e540693
|
||||
+ slots.add(Pair.of(slot, entity.getOrCreateCachedEquipmentItem(tag, slot, pair.getSecond())));
|
||||
+ }
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
public ClientboundSetEquipmentPacket(FriendlyByteBuf buf) {
|
||||
this.entity = buf.readVarInt();
|
||||
EquipmentSlot[] equipmentSlots = EquipmentSlot.values();
|
||||
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 6d5a3bf7f93ea96d8615aaab2f88c40f524aa888..47b9b5d165d96fa978aeefb1825a3f94ba732bca 100644
|
||||
--- a/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;
|
||||
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 {
|
||||
@@ -304,27 +304,8 @@ public class ServerEntity {
|
||||
consumer.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap));
|
||||
}
|
||||
|
||||
@@ -73,61 +60,20 @@ index d9481017e36f607c6dee8ab833a36ac700267a9f..48830e44dcae2a5263dbae65506c5cb2
|
||||
}
|
||||
|
||||
// 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
|
||||
index 44612616560c087ca80bd10c2077e955f5ce7c85..505d5de63dec642974ac8fda477450164b87caf6 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -6,14 +6,8 @@ import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.datafixers.util.Either;
|
||||
import com.mojang.logging.LogUtils;
|
||||
import com.mojang.serialization.DataResult;
|
||||
-import java.util.Collection;
|
||||
-import java.util.Iterator;
|
||||
-import java.util.List;
|
||||
-import java.util.Objects;
|
||||
-import java.util.Optional;
|
||||
-import java.util.OptionalInt;
|
||||
-import java.util.Random;
|
||||
-import java.util.UUID;
|
||||
+
|
||||
+import java.util.*;
|
||||
import javax.annotation.Nullable;
|
||||
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
|
||||
+
|
||||
+ // Slice
|
||||
+ public net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket setCachedEquipment(String tag, java.util.Map<org.bukkit.inventory.EquipmentSlot, org.bukkit.inventory.ItemStack> equipment) {
|
||||
+ List<com.mojang.datafixers.util.Pair<net.minecraft.world.entity.EquipmentSlot, net.minecraft.world.item.ItemStack>> pairs = new ArrayList<>(equipment.size());
|
||||
+ for (java.util.Map.Entry<org.bukkit.inventory.EquipmentSlot, org.bukkit.inventory.ItemStack> entry : equipment.entrySet()) {
|
||||
+ 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()),
|
||||
+ CraftItemStack.asNMSCopy(entry.getValue()));
|
||||
+ pairs.add(pair);
|
||||
+ }
|
||||
+
|
||||
+ net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket packet = new net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket(getId(), pairs);
|
||||
+ cachedEquipmentMap.put(tag, packet);
|
||||
+ return packet;
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
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 b9fbbd5d775af0ce7d9eba97e14046233c64b0fd..5611ddc32992a8d06095fcde814c40f72efc72d5 100644
|
||||
--- a/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 {
|
||||
public boolean bukkitPickUpLoot;
|
||||
@@ -266,6 +266,8 @@ public abstract class LivingEntity extends Entity {
|
||||
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 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
|
||||
+ public java.util.Map<String, net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket> cachedEquipmentMap = new java.util.HashMap<>(); // Slice
|
||||
|
||||
@Override
|
||||
public float getBukkitYaw() {
|
||||
@@ -3002,6 +3004,7 @@ public abstract class LivingEntity extends Entity {
|
||||
@@ -3074,6 +3076,7 @@ public abstract class LivingEntity extends Entity {
|
||||
if (map != null) {
|
||||
this.handleHandSwap(map);
|
||||
if (!map.isEmpty()) {
|
||||
@@ -135,7 +81,7 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
|
||||
this.handleEquipmentChanges(map);
|
||||
}
|
||||
}
|
||||
@@ -3090,7 +3093,25 @@ public abstract class LivingEntity extends Entity {
|
||||
@@ -3166,7 +3169,25 @@ public abstract class LivingEntity extends Entity {
|
||||
}
|
||||
|
||||
});
|
||||
@@ -162,36 +108,9 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
|
||||
}
|
||||
|
||||
// Paper start - hide unnecessary item meta
|
||||
@@ -4320,6 +4341,26 @@ public abstract class LivingEntity extends Entity {
|
||||
this.setDeltaMovement((double) ((float) packet.getXd() / 8000.0F), (double) ((float) packet.getYd() / 8000.0F), (double) ((float) packet.getZd() / 8000.0F));
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ public ItemStack getOrCreateCachedEquipmentItem(String tag, EquipmentSlot slot, ItemStack itemStack) {
|
||||
+ return equipmentPacketCache.row(tag).computeIfAbsent(itemStack, i -> {
|
||||
+ String name = slot.name();
|
||||
+
|
||||
+ //How neat is this.
|
||||
+ if (name.equals("MAINHAND")) {
|
||||
+ name = "HAND";
|
||||
+ } else if (name.equals("OFFHAND")) {
|
||||
+ name = "OFF_HAND";
|
||||
+ }
|
||||
+
|
||||
+ org.bukkit.event.entity.EntityEquipmentItemLookup event = new org.bukkit.event.entity.EntityEquipmentItemLookup(getBukkitEntity(), tag, org.bukkit.inventory.EquipmentSlot.valueOf(name), CraftItemStack.asBukkitCopy(i));
|
||||
+ this.level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+ org.bukkit.inventory.ItemStack eventItem = event.getItemStack();
|
||||
+ return CraftItemStack.asNMSCopy(eventItem);
|
||||
+ });
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
// CraftBukkit start - decompile error
|
||||
@@ -4432,4 +4453,72 @@ public abstract class LivingEntity extends Entity {
|
||||
public static record Fallsounds(SoundEvent small, SoundEvent big) {
|
||||
|
||||
@@ -4342,4 +4383,54 @@ public abstract class LivingEntity extends Entity {
|
||||
*/
|
||||
// CraftBukkit end
|
||||
}
|
||||
+
|
||||
+ // Slice start
|
||||
@@ -242,30 +161,33 @@ index 9002ace5beb17b5a8b7efd0e83de17f2dbfc054a..6b504b854ccd9f0d63baf4cff4b1f279
|
||||
+ detectEquipmentUpdates(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public ItemStack getOrCreateCachedEquipmentItem(String tag, EquipmentSlot slot, ItemStack itemStack) {
|
||||
+ return equipmentPacketCache.row(tag).computeIfAbsent(itemStack, i -> {
|
||||
+ String name = slot.name();
|
||||
+
|
||||
+ //How neat is this.
|
||||
+ if (name.equals("MAINHAND")) {
|
||||
+ name = "HAND";
|
||||
+ } else if (name.equals("OFFHAND")) {
|
||||
+ name = "OFF_HAND";
|
||||
+ }
|
||||
+
|
||||
+ org.bukkit.event.entity.EntityEquipmentItemLookup event = new org.bukkit.event.entity.EntityEquipmentItemLookup(getBukkitEntity(), tag, org.bukkit.inventory.EquipmentSlot.valueOf(name), CraftItemStack.asBukkitCopy(i));
|
||||
+ this.level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+ org.bukkit.inventory.ItemStack eventItem = event.getItemStack();
|
||||
+ return CraftItemStack.asNMSCopy(eventItem);
|
||||
+ });
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
index 070dab06db870f3c67dffe7637fe1a92c7eaa6a8..1005f44dd5a6906351852ea5fb35360683765cc6 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
@@ -695,7 +695,9 @@ public final class ItemStack {
|
||||
}
|
||||
|
||||
public static boolean isSameIgnoreDurability(ItemStack left, ItemStack right) {
|
||||
- return left == right ? true : (!left.isEmpty() && !right.isEmpty() ? left.sameItemStackIgnoreDurability(right) : false);
|
||||
+ boolean rightEmpty = right.isEmpty();
|
||||
+ boolean leftEmpty = left.isEmpty();
|
||||
+ return left == right || leftEmpty && rightEmpty ? true : (!leftEmpty && !rightEmpty ? left.sameItemStackIgnoreDurability(right) : false);
|
||||
}
|
||||
|
||||
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
|
||||
index c022751e3b45469cc0ad6732e2d6ff08918bafa4..04708105c6264bfacd0cc20a25178f7a62ebd78e 100644
|
||||
index 09da9d3c85e36c2a78663f58a97963dbc795a367..50d4fc1681d035128b4bcf4318312017fd84dc16 100644
|
||||
--- a/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 {
|
||||
throw new IllegalArgumentException(entityCategory + " is an unrecognized entity category");
|
||||
}
|
||||
@@ -1054,4 +1054,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
getHandle().knockback(strength, directionX, directionZ);
|
||||
};
|
||||
// Paper end
|
||||
+
|
||||
+ // Slice start
|
||||
@@ -1,14 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 6 Nov 2022 08:29:18 -0600
|
||||
Date: Fri, 18 Nov 2022 08:03:19 -0600
|
||||
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
|
||||
index 8e2baa21f71e7105a8e72cba4ded6aa99370fca0..b295dcb214d54cd049e0b8e59c02b165714eacdd 100644
|
||||
index 4f3670b2bdb8b1b252e9f074a6af56a018a8c465..31146c7cbaced5658ed43f05239b8165ce7c0a1d 100644
|
||||
--- a/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
|
||||
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
|
||||
index df22a1407f3d1e93f0f1d50b5dbec3df12b106d2..2e7c1a99697c31f005a62b5d663708c9d4bc85df 100644
|
||||
index 2f614915026dd9d44589cb1c1da28aca9b202d12..abb7cb5cd93b7eb4f2f85cb40045bad35fc10b01 100644
|
||||
--- a/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 {
|
||||
@@ -178,6 +178,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 long lastSaveTime;
|
||||
// Paper end
|
||||
@@ -28,7 +28,7 @@ index df22a1407f3d1e93f0f1d50b5dbec3df12b106d2..2e7c1a99697c31f005a62b5d663708c9
|
||||
|
||||
public CraftPlayer(CraftServer server, ServerPlayer entity) {
|
||||
super(server, entity);
|
||||
@@ -2432,6 +2433,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -2568,6 +2569,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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))));
|
||||
@@ -1,22 +1,14 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 7 Nov 2022 22:44:22 -0600
|
||||
Date: Fri, 18 Nov 2022 08:06:31 -0600
|
||||
Subject: [PATCH] PlayerPreChunkLoadEvent
|
||||
|
||||
|
||||
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 0b060183429f4c72ec767075538477b4302bbf0d..e4461c176682644d842b15b833c662039333d24f 100644
|
||||
--- a/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;
|
||||
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 {
|
||||
@@ -787,7 +787,7 @@ public final class PlayerChunkLoader {
|
||||
// warning: modifications of this field must be aware that the loadQueue inside PlayerChunkLoader uses this field
|
||||
// in a comparator!
|
||||
protected final ArrayDeque<ChunkPriorityHolder> loadQueue = new ArrayDeque<>();
|
||||
@@ -25,13 +17,13 @@ index 12bcf96ec1ba4314c7ea2eab9f3d140559f1dc08..d8773c7c36314b4f5953b9e7abc310c7
|
||||
protected final LongOpenHashSet chunksToBeSent = new LongOpenHashSet();
|
||||
|
||||
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) {
|
||||
- if (this.sentChunks.add(CoordinateUtils.getChunkKey(chunkX, chunkZ))) {
|
||||
+ // 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);
|
||||
+ return;
|
||||
+ }
|
||||
@@ -42,10 +34,10 @@ index 12bcf96ec1ba4314c7ea2eab9f3d140559f1dc08..d8773c7c36314b4f5953b9e7abc310c7
|
||||
new ChunkPos(chunkX, chunkZ), new MutableObject<>(), false, true); // unloaded, loaded
|
||||
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
|
||||
index 9d400d82eeab062322acea81b87f6fc572151700..ee35b5ac41d2016a775b320b1a84fceb6329c4be 100644
|
||||
index 0c8ec5c60d123e1fc7984dc45ba2df16612314b3..0295f39efc828cc3fb23df12a959a4e4469e606f 100644
|
||||
--- a/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 {
|
||||
@@ -523,6 +523,13 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -59,23 +51,3 @@ index 9d400d82eeab062322acea81b87f6fc572151700..ee35b5ac41d2016a775b320b1a84fceb
|
||||
@Override
|
||||
public boolean isChunkInUse(int x, int 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;
|
||||
112
patches/server/0020-Shared-DataStorage-for-maps.patch
Normal file
112
patches/server/0020-Shared-DataStorage-for-maps.patch
Normal file
@@ -0,0 +1,112 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 18 Nov 2022 08:37:19 -0600
|
||||
Subject: [PATCH] Shared DataStorage for maps
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
||||
index 4532f3a0d74feae0a1249b53e1bfbc18a8808b32..2df8d02d7151d3483587c22f70dea1439d439553 100644
|
||||
--- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
||||
+++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
||||
@@ -364,6 +364,7 @@ public class WorldConfiguration extends ConfigurationPart {
|
||||
public class Maps extends ConfigurationPart {
|
||||
public int itemFrameCursorLimit = 128;
|
||||
public int itemFrameCursorUpdateInterval = 10;
|
||||
+ public String sharedDataFolder; // Slice
|
||||
}
|
||||
|
||||
public Fixes fixes;
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index 274a8deb22d0d6d07d1e6278935000756ae37ac5..79f85a4d93b837e4b7f2e62f599359bf939ddc90 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -229,6 +229,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
return thr;
|
||||
}
|
||||
|
||||
+ private @Nullable DimensionDataStorage sharedDataStorage; // Slice
|
||||
+
|
||||
@Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI
|
||||
return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper
|
||||
}
|
||||
@@ -606,6 +608,15 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
|
||||
this.chunkTaskScheduler = new io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler(this, io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.workerThreads); // Paper - rewrite chunk system
|
||||
this.entityLookup = new io.papermc.paper.chunk.system.entity.EntityLookup(this, new EntityCallbacks()); // Paper - rewrite chunk system
|
||||
+
|
||||
+ // Slice start
|
||||
+ String sharedDataFolder = paperConfig().maps.sharedDataFolder;
|
||||
+ if (sharedDataFolder != null) {
|
||||
+ java.io.File sharedDir = new java.io.File(sharedDataFolder);
|
||||
+ sharedDir.mkdirs();
|
||||
+ this.sharedDataStorage = new DimensionDataStorage(sharedDir, datafixer);
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
|
||||
public void setWeatherParameters(int clearDuration, int rainDuration, boolean raining, boolean thundering) {
|
||||
@@ -1337,6 +1348,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
}// Paper
|
||||
// Paper - rewrite chunk system - entity saving moved into ChunkHolder
|
||||
|
||||
+ if (sharedDataStorage != null) sharedDataStorage.save();
|
||||
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
|
||||
|
||||
// CraftBukkit start - moved from MinecraftServer.saveChunks
|
||||
@@ -1918,11 +1930,17 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
return this.getChunkSource().getDataStorage();
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ public DimensionDataStorage getMapDataStorage() {
|
||||
+ return sharedDataStorage != null ? sharedDataStorage : this.getChunkSource().getDataStorage();
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
@Nullable
|
||||
@Override
|
||||
public MapItemSavedData getMapData(String id) {
|
||||
// CraftBukkit start
|
||||
- return (MapItemSavedData) this.getServer().overworld().getDataStorage().get((nbttagcompound) -> {
|
||||
+ return (MapItemSavedData) 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;
|
||||
@@ -1936,12 +1954,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);
|
||||
+ 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 = 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 2da78bc43af715fe399eac1d83b3bf6e8fb8afac..3a8d2344b8e3485c9d4a7abb1b22e853b710ef4e 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()) {
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Thu, 31 Mar 2022 09:06:19 -0500
|
||||
Subject: [PATCH] Set Mutton nutrition equal to Beef/Porkchop
|
||||
Date: Sat, 3 Dec 2022 06:58:09 -0600
|
||||
Subject: [PATCH] Set COOKED_MUTTON nutrition equal to COOKED_BEEF
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/food/Foods.java b/src/main/java/net/minecraft/world/food/Foods.java
|
||||
@@ -0,0 +1,59 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Thu, 15 Dec 2022 15:48:34 -0600
|
||||
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 e4461c176682644d842b15b833c662039333d24f..9dabd5bb2d9e6c2f9a6dc7103ca914478b17cd60 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 fc07b3340c8e90df20ab3989bb07a8c4bfc13579..5fc08093a818486642fbff9a3587bc5e7d051ea2 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -14,6 +14,8 @@ import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalInt;
|
||||
import javax.annotation.Nullable;
|
||||
+
|
||||
+import io.papermc.paper.configuration.GlobalConfiguration;
|
||||
import net.minecraft.BlockUtil;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.CrashReport;
|
||||
@@ -269,6 +271,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 = GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate; // Slice
|
||||
|
||||
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
|
||||
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
|
||||
@@ -1,14 +1,27 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 28 Feb 2022 08:53:55 -0600
|
||||
Subject: [PATCH] Track Player throughout block destroy
|
||||
Date: Fri, 30 Dec 2022 10:03:50 -0600
|
||||
Subject: [PATCH] Add BlockDestroyedByNeighborEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/core/MappedRegistry.java b/src/main/java/net/minecraft/core/MappedRegistry.java
|
||||
index 834a6f2eb2d6c0aa3afd450034f32b4e008b3a3c..3b2090503a4208c416167f5c70d3d8a4121cf916 100644
|
||||
--- a/src/main/java/net/minecraft/core/MappedRegistry.java
|
||||
+++ b/src/main/java/net/minecraft/core/MappedRegistry.java
|
||||
@@ -335,7 +335,7 @@ public class MappedRegistry<T> implements WritableRegistry<T> {
|
||||
|
||||
@Override
|
||||
public Registry<T> freeze() {
|
||||
- if (this.true) { // Slice (a TODO in Paper, thanks Owen)
|
||||
+ if (true) { // Slice (a TODO in Paper, thanks Owen)
|
||||
return this;
|
||||
} else {
|
||||
this.frozen = true;
|
||||
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 0989c7deef13ee202560fb2f44cbd273f9817f91..168e68f1a93b2a134952cd88a35501a3290694e9 100644
|
||||
--- a/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 {
|
||||
@@ -410,6 +410,7 @@ public class ServerPlayerGameMode {
|
||||
org.bukkit.block.BlockState state = bblock.getState();
|
||||
level.captureDrops = new ArrayList<>();
|
||||
// CraftBukkit end
|
||||
@@ -16,7 +29,7 @@ index 415b6c2bbf11c5a2ac75d18f52b93f80b9e14fe4..a33431984b6051efd39f0077c55186da
|
||||
block.playerWillDestroy(this.level, pos, iblockdata, this.player);
|
||||
boolean flag = this.level.removeBlock(pos, false);
|
||||
|
||||
@@ -479,6 +480,7 @@ public class ServerPlayerGameMode {
|
||||
@@ -438,6 +439,7 @@ public class ServerPlayerGameMode {
|
||||
// CraftBukkit start
|
||||
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
|
||||
@@ -25,10 +38,10 @@ index 415b6c2bbf11c5a2ac75d18f52b93f80b9e14fe4..a33431984b6051efd39f0077c55186da
|
||||
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
|
||||
index 6837c965592d4584cfc958a1008b98791a0fc780..070dab06db870f3c67dffe7637fe1a92c7eaa6a8 100644
|
||||
index 6ed921621f66dc4bfec66a307db24defb3caf380..c5a8e12055c46015b499eadf5614597c77a39e90 100644
|
||||
--- a/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 {
|
||||
@@ -353,6 +353,7 @@ public final class ItemStack {
|
||||
}
|
||||
}
|
||||
Item item = this.getItem();
|
||||
@@ -37,10 +50,10 @@ index 6837c965592d4584cfc958a1008b98791a0fc780..070dab06db870f3c67dffe7637fe1a92
|
||||
CompoundTag newData = this.getTagClone();
|
||||
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
|
||||
index b2fd675cfe9301b0cfc42a8e9bba3fb8356b4789..be12155798e5ad6ae8bf47acfbfdb5b20ad45fe5 100644
|
||||
index 264a6bc9f174a42dfeed4822dbb1bd3cc608d108..1914c22c9d3cdc338a9c5ddf03ddf00cf7eb457d 100644
|
||||
--- a/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 {
|
||||
@@ -181,6 +181,27 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
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
|
||||
|
||||
@@ -68,7 +81,7 @@ index b2fd675cfe9301b0cfc42a8e9bba3fb8356b4789..be12155798e5ad6ae8bf47acfbfdb5b2
|
||||
// Paper start - fix and optimise world upgrading
|
||||
// copied from below
|
||||
public static ResourceKey<DimensionType> getDimensionKey(DimensionType manager) {
|
||||
@@ -649,6 +670,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -662,6 +683,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
if (!this.preventPoiUpdated) {
|
||||
this.onBlockStateChange(blockposition, iblockdata1, iblockdata2);
|
||||
}
|
||||
@@ -76,56 +89,55 @@ index b2fd675cfe9301b0cfc42a8e9bba3fb8356b4789..be12155798e5ad6ae8bf47acfbfdb5b2
|
||||
// CraftBukkit end
|
||||
}
|
||||
}
|
||||
@@ -754,8 +776,20 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
public void neighborChanged(BlockPos pos, Block sourceBlock, BlockPos neighborPos) {
|
||||
if (!this.isClientSide) {
|
||||
BlockState iblockdata = this.getBlockState(pos);
|
||||
+ org.bukkit.block.Block blockAt = world.getBlockAt(pos.getX(), pos.getY(), pos.getZ()); // Paper
|
||||
|
||||
try {
|
||||
+ // Paper start - If this is a non-air block being set to an air block, get (remove, if exists)
|
||||
+ // our PendingBlockEvent
|
||||
+ if (blockAt.getType() != org.bukkit.Material.AIR && iblockdata.getMaterial() == net.minecraft.world.level.material.Material.AIR) {
|
||||
+ PendingBlockEvent blockEvent = 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
|
||||
+ }
|
||||
+ }
|
||||
+ // Paper end
|
||||
@@ -683,6 +705,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
|
||||
+
|
||||
// CraftBukkit start
|
||||
CraftWorld world = ((ServerLevel) this).getWorld();
|
||||
if (world != null && ((ServerLevel)this).hasPhysicsEvent) { // Paper
|
||||
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 e12b76238cb52a1007f2102473b7f892f8521b62..301dfb74fec49b7f6f0452e4c49c8f1df43c0180 100644
|
||||
index e234ae13fe9793db237adb6f6216fa32638cfc4f..c126742149b10cc67caa18c7c4d8e1c7108c6c15 100644
|
||||
--- a/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();
|
||||
BlockState iblockdata1 = world.getBlockState(blockposition1);
|
||||
|
||||
+ 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) {
|
||||
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
|
||||
index 7f83c9390823b42fc30d04e1d3222e2825eaad50..a099fcaabe26378157c429ad899714fd3227f9ef 100644
|
||||
index 25ce337ed266be7bafeacd9eb6f53a9474775fc5..cd4a84f8ab08dbed23a6cd15b90c0d530728b85f 100644
|
||||
--- a/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 {
|
||||
@@ -1016,6 +1016,16 @@ public abstract class BlockBehaviour implements FeatureElement {
|
||||
Direction enumdirection = aenumdirection[l];
|
||||
|
||||
blockposition_mutableblockposition.setWithOffset(pos, enumdirection);
|
||||
BlockState iblockdata = world.getBlockState(blockposition_mutableblockposition);
|
||||
+
|
||||
+ // Paper start - Propagate the PendingBlockEvent from the current blockPos to the next block
|
||||
+ // 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);
|
||||
+ if (blockEvent != null) {
|
||||
+ BlockPos blockPosCopy = blockposition_mutableblockposition.immutable();
|
||||
@@ -133,7 +145,6 @@ index 7f83c9390823b42fc30d04e1d3222e2825eaad50..a099fcaabe26378157c429ad899714fd
|
||||
+ }
|
||||
+ }
|
||||
+ // Paper end
|
||||
+
|
||||
BlockState iblockdata1 = iblockdata.updateShape(enumdirection.getOpposite(), this.asState(), world, blockposition_mutableblockposition, pos);
|
||||
world.neighborShapeChanged(enumdirection.getOpposite(), this.asState(), blockposition_mutableblockposition, pos, flags, maxUpdateDepth);
|
||||
}
|
||||
|
||||
Block.updateOrDestroy(iblockdata, iblockdata1, world, blockposition_mutableblockposition, flags, maxUpdateDepth);
|
||||
@@ -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();
|
||||
31
patches/server/0024-noEntityCollisions-for-Entity.patch
Normal file
31
patches/server/0024-noEntityCollisions-for-Entity.patch
Normal file
@@ -0,0 +1,31 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 30 Dec 2022 15:00:35 -0600
|
||||
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 282cee03458ce6fa16896d988ac4d1dc887e5501..f83e5383e950c9261804991431ff0da89673f277 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -433,6 +433,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<>());
|
||||
{
|
||||
@@ -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()) {
|
||||
Reference in New Issue
Block a user