Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b327b6652 | ||
|
|
74c285c9b8 | ||
|
|
53a33bce30 | ||
|
|
f153251858 | ||
|
|
52f1f9d217 | ||
|
|
bd8656028e | ||
|
|
ddce0cde62 | ||
|
|
bc3711ebf3 | ||
|
|
f3b7b86532 | ||
|
|
47aeaffbdb | ||
|
|
d9b3b3a062 | ||
|
|
400162acc9 | ||
|
|
3ef1929507 | ||
|
|
357471c126 | ||
|
|
d23067e50d | ||
|
|
05dd78f0b8 | ||
|
|
1a2c9e0c5d | ||
|
|
423038f3dc | ||
|
|
7091e85fb9 | ||
|
|
6b0f7bcb46 | ||
|
|
490feb33c1 | ||
|
|
49f6ea378b | ||
|
|
fca8e2489e | ||
|
|
11e11dcbb2 | ||
|
|
aa5645b695 | ||
|
|
bf2e1a599f | ||
|
|
07104c8191 | ||
|
|
6fa36fbf36 | ||
|
|
383096325e | ||
|
|
22172ae225 | ||
|
|
bcadea3a13 | ||
|
|
e4b194d2d1 | ||
|
|
fdadeb897f | ||
|
|
37de50054d | ||
|
|
bcea4943f7 | ||
|
|
8080aa21e3 | ||
|
|
700708fcda | ||
|
|
e42a638149 | ||
|
|
182af09174 |
@@ -4,7 +4,7 @@ plugins {
|
||||
java
|
||||
`maven-publish`
|
||||
id("com.github.johnrengelman.shadow") version "8.1.1" apply false
|
||||
id("io.papermc.paperweight.patcher") version "1.5.5"
|
||||
id("io.papermc.paperweight.patcher") version "1.5.8"
|
||||
}
|
||||
|
||||
val paperMavenPublicUrl = "https://papermc.io/repo/repository/maven-public/"
|
||||
@@ -78,28 +78,11 @@ 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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
allprojects {
|
||||
// Publishing API:
|
||||
// ./gradlew :Slice-API:publish[ToMavenLocal]
|
||||
publishing {
|
||||
repositories {
|
||||
maven {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
publishing {
|
||||
// Publishing dev bundle:
|
||||
// ./gradlew publishDevBundlePublicationTo(MavenLocal|MyRepoSnapshotsRepository) -PpublishDevBundle
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
group=com.lokamc.slice
|
||||
version=1.19.4-R0.1-SNAPSHOT
|
||||
version=1.20.1-R0.1-SNAPSHOT
|
||||
|
||||
mcVersion=1.19.4
|
||||
paperRef=d8e07590e30e81b855312c6d00b34e8155da0920
|
||||
mcVersion=1.20.1
|
||||
paperRef=29d1c7b60244bb002d29a5dcfc9c995019f550ab
|
||||
|
||||
org.gradle.caching=true
|
||||
org.gradle.parallel=true
|
||||
|
||||
@@ -5,10 +5,10 @@ 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 c1827f97e9255e72c082548c8b2782e39f1ebb8c..c89a373233f48da4ea8baed39ccc72a0deb5bb7c 100644
|
||||
index 6917931966377c51db88a3364997a110dd987970..792b1b4ea3330b282961844d48b2dc56e0201c7e 100644
|
||||
--- a/src/main/java/org/bukkit/World.java
|
||||
+++ b/src/main/java/org/bukkit/World.java
|
||||
@@ -2555,6 +2555,11 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
@@ -2573,6 +2573,11 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
*/
|
||||
public void setAutoSave(boolean value);
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ 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 0f1c08092577a7d66fdc1ea8b645ea67e0d9c6cf..f1b3d05901a4fe32366699280f44147a9cda2873 100644
|
||||
index 8424fdac153f6dea76acce89f4726408d9726c41..6effaeaf885d70f8aeb11b5c44e7f3ab42cf2a90 100644
|
||||
--- a/src/main/java/org/bukkit/scoreboard/Team.java
|
||||
+++ b/src/main/java/org/bukkit/scoreboard/Team.java
|
||||
@@ -532,6 +532,24 @@ public interface Team {
|
||||
@@ -514,6 +514,24 @@ public interface Team {
|
||||
boolean hasEntity(@NotNull org.bukkit.entity.Entity entity) throws IllegalStateException, IllegalArgumentException;
|
||||
// Paper end
|
||||
// Paper end - improve scoreboard entries
|
||||
|
||||
+ //Slice start
|
||||
+ /**
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Smooth Teleports
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
||||
index 88c4885569d2b8b22fce55601d50608ac8e9388c..12c249be755580ec6d83dfe1781f892f222d9ecd 100644
|
||||
index f9dd00210c1762a40259f823aeb8d8a5ddc78e3e..bb0c49ed971d71904b9172cac2e724133754f32c 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -2950,6 +2950,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
@@ -3153,6 +3153,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
String getClientBrandName();
|
||||
// Paper end
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ 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 12c249be755580ec6d83dfe1781f892f222d9ecd..804976415e79666c6b1df77b38e71c516847460e 100644
|
||||
index bb0c49ed971d71904b9172cac2e724133754f32c..8fc53e32d09f1678d59da0d01f28b6ef96527011 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -2732,6 +2732,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
@@ -2950,6 +2950,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
*/
|
||||
boolean hasResourcePack();
|
||||
|
||||
|
||||
@@ -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 c89a373233f48da4ea8baed39ccc72a0deb5bb7c..e3b8f58492863b0ccbef2e3061d1fc6052ea86c3 100644
|
||||
index 792b1b4ea3330b282961844d48b2dc56e0201c7e..a2b42e723fd7989b410e8c90f235ce38bd1bae45 100644
|
||||
--- a/src/main/java/org/bukkit/World.java
|
||||
+++ b/src/main/java/org/bukkit/World.java
|
||||
@@ -482,6 +482,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
@@ -500,6 +500,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||
//@Deprecated // Paper
|
||||
public boolean refreshChunk(int x, int z);
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ 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 ffca32ae2464ea5a669029079a50585ca259a4f8..283b71fc6f74790827d1af9d5ad05eea66df8e4c 100644
|
||||
index 19e58e62ae442ef9be02ca7fa2f55e370a54afa4..94aafbc3a08dec7c66cef89de7a5283049a4bf05 100644
|
||||
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
@@ -1150,4 +1150,11 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
@@ -1192,4 +1192,11 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
*/
|
||||
void setBodyYaw(float bodyYaw);
|
||||
// Paper end
|
||||
|
||||
19
patches/api/0017-Warden-setCanDespawn-API.patch
Normal file
19
patches/api/0017-Warden-setCanDespawn-API.patch
Normal file
@@ -0,0 +1,19 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 11:21:27 -0500
|
||||
Subject: [PATCH] Warden setCanDespawn API
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/Warden.java b/src/main/java/org/bukkit/entity/Warden.java
|
||||
index efaa45f41bc1dc8df6665c55b4e5ade343d60d4c..36ea5429b9a18a857fd1fea30b52f69a182c7ede 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Warden.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Warden.java
|
||||
@@ -111,4 +111,6 @@ public interface Warden extends Monster {
|
||||
*/
|
||||
ANGRY;
|
||||
}
|
||||
-}
|
||||
+
|
||||
+ void setCanDespawn(boolean canDespawn); // Slice
|
||||
+}
|
||||
\ No newline at end of file
|
||||
@@ -0,0 +1,56 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 22 Aug 2023 06:22:17 -0500
|
||||
Subject: [PATCH] Add reason to PlayerConnectionCloseEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerConnectionCloseEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerConnectionCloseEvent.java
|
||||
index 12c1c6fe9dc8dc5f5faf6dcf99f6857219ef22b8..42954466c13a926e735754949cc9d78fa1ad7b10 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/event/player/PlayerConnectionCloseEvent.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerConnectionCloseEvent.java
|
||||
@@ -50,12 +50,18 @@ public class PlayerConnectionCloseEvent extends Event {
|
||||
@NotNull private final UUID playerUniqueId;
|
||||
@NotNull private final String playerName;
|
||||
@NotNull private final InetAddress ipAddress;
|
||||
+ @NotNull private final ConnectionCloseReason reason;
|
||||
|
||||
public PlayerConnectionCloseEvent(@NotNull final UUID playerUniqueId, @NotNull final String playerName, @NotNull final InetAddress ipAddress, final boolean async) {
|
||||
+ this(playerUniqueId, playerName, ipAddress, ConnectionCloseReason.NORMAL, async);
|
||||
+ }
|
||||
+
|
||||
+ public PlayerConnectionCloseEvent(@NotNull final UUID playerUniqueId, @NotNull final String playerName, @NotNull final InetAddress ipAddress, @NotNull ConnectionCloseReason reason, final boolean async) {
|
||||
super(async);
|
||||
this.playerUniqueId = playerUniqueId;
|
||||
this.playerName = playerName;
|
||||
this.ipAddress = ipAddress;
|
||||
+ this.reason = reason;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,4 +98,26 @@ public class PlayerConnectionCloseEvent extends Event {
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
+
|
||||
+ /**
|
||||
+ * Returns the reason for the closed connection.
|
||||
+ */
|
||||
+ @NotNull
|
||||
+ public ConnectionCloseReason getReason() {
|
||||
+ return this.reason;
|
||||
+ }
|
||||
+
|
||||
+ public enum ConnectionCloseReason {
|
||||
+ /**
|
||||
+ * Player disconnected normally
|
||||
+ */
|
||||
+ NORMAL,
|
||||
+
|
||||
+ /**
|
||||
+ * Player has invalid data for some reason.
|
||||
+ * <p>
|
||||
+ * One example of this is a player logging into an unloaded world.
|
||||
+ */
|
||||
+ INVALID_PLAYER_DATA,
|
||||
+ }
|
||||
}
|
||||
41
patches/api/0019-Add-timeDamaged-to-EntityDamageEvent.patch
Normal file
41
patches/api/0019-Add-timeDamaged-to-EntityDamageEvent.patch
Normal file
@@ -0,0 +1,41 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 10 Sep 2023 07:41:26 -0500
|
||||
Subject: [PATCH] Add timeDamaged to EntityDamageEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java
|
||||
index 4773f537dec20d6ebd82e4b145a1cdea0077fe90..f7a6346bc7eecc57fa7d69c801afa15230496f3c 100644
|
||||
--- a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java
|
||||
+++ b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java
|
||||
@@ -27,6 +27,7 @@ public class EntityDamageEvent extends EntityEvent implements Cancellable {
|
||||
private final Map<DamageModifier, Double> originals;
|
||||
private boolean cancelled;
|
||||
private final DamageCause cause;
|
||||
+ private long timeDamaged = System.currentTimeMillis(); // Slice
|
||||
|
||||
public EntityDamageEvent(@NotNull final Entity damagee, @NotNull final DamageCause cause, final double damage) {
|
||||
this(damagee, cause, new EnumMap<DamageModifier, Double>(ImmutableMap.of(DamageModifier.BASE, damage)), new EnumMap<DamageModifier, Function<? super Double, Double>>(ImmutableMap.of(DamageModifier.BASE, ZERO)));
|
||||
@@ -193,6 +194,22 @@ public class EntityDamageEvent extends EntityEvent implements Cancellable {
|
||||
return cause;
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ /**
|
||||
+ * @return Get the time the damage event happened.
|
||||
+ */
|
||||
+ public long getTimeDamaged() {
|
||||
+ return timeDamaged;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * @param timeDamaged Set the time the damage event happened, if you so choose.
|
||||
+ */
|
||||
+ public void setTimeDamaged(long timeDamaged) {
|
||||
+ this.timeDamaged = timeDamaged;
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
@NotNull
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
30
patches/api/0020-Non-saveable-entities.patch
Normal file
30
patches/api/0020-Non-saveable-entities.patch
Normal file
@@ -0,0 +1,30 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sat, 21 Oct 2023 11:27:53 -0500
|
||||
Subject: [PATCH] Non-saveable entities
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
|
||||
index 762cb07861ca8ff058ce8d57ea6c15df1e588bf3..234ad94cf73caaac64d0917cf0d761c1d4c5d6b5 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Entity.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Entity.java
|
||||
@@ -1049,4 +1049,19 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
||||
*/
|
||||
@NotNull String getScoreboardEntryName();
|
||||
// Paper end - entity scoreboard name
|
||||
+
|
||||
+ // Slice start
|
||||
+ /**
|
||||
+ * Returns true if the entity can be saved. If false, the entity will never be serialized or saved.
|
||||
+ */
|
||||
+ boolean isSaveable();
|
||||
+
|
||||
+ /**
|
||||
+ * Sets whether the entity can be serialized and saved to disk.
|
||||
+ *
|
||||
+ * @param saveable the saveable status
|
||||
+ * @see #isSaveable()
|
||||
+ */
|
||||
+ void setSaveable(boolean saveable);
|
||||
+ // Slice end
|
||||
}
|
||||
70
patches/api/0021-ChunkStatusChangeEvent.patch
Normal file
70
patches/api/0021-ChunkStatusChangeEvent.patch
Normal file
@@ -0,0 +1,70 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 22 Oct 2023 08:41:09 -0500
|
||||
Subject: [PATCH] ChunkStatusChangeEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/event/chunk/ChunkStatusChangeEvent.java b/src/main/java/com/destroystokyo/paper/event/chunk/ChunkStatusChangeEvent.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..512664d4a7a6821b8d79d0aabf5c31a61fcae6b9
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/com/destroystokyo/paper/event/chunk/ChunkStatusChangeEvent.java
|
||||
@@ -0,0 +1,58 @@
|
||||
+package com.destroystokyo.paper.event.chunk;
|
||||
+
|
||||
+import org.bukkit.Chunk;
|
||||
+import org.bukkit.event.Event;
|
||||
+import org.bukkit.event.HandlerList;
|
||||
+import org.jetbrains.annotations.NotNull;
|
||||
+
|
||||
+/**
|
||||
+ * Called when the Full Status of a Chunk changes
|
||||
+ */
|
||||
+public class ChunkStatusChangeEvent extends Event {
|
||||
+
|
||||
+ private static final HandlerList handlers = new HandlerList();
|
||||
+ private final Chunk chunk;
|
||||
+ private final ChunkStatus currentState;
|
||||
+ private final ChunkStatus newState;
|
||||
+
|
||||
+ public ChunkStatusChangeEvent(Chunk chunk, ChunkStatus currentState, ChunkStatus newState) {
|
||||
+ super();
|
||||
+ this.chunk = chunk;
|
||||
+ this.currentState = currentState;
|
||||
+ this.newState = newState;
|
||||
+ }
|
||||
+
|
||||
+ public Chunk getChunk() {
|
||||
+ return chunk;
|
||||
+ }
|
||||
+
|
||||
+ public ChunkStatus getCurrentState() {
|
||||
+ return currentState;
|
||||
+ }
|
||||
+
|
||||
+ public ChunkStatus getNewState() {
|
||||
+ return newState;
|
||||
+ }
|
||||
+
|
||||
+ public boolean isUpgrade() {
|
||||
+ return newState.ordinal() > currentState.ordinal();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ @NotNull
|
||||
+ public HandlerList getHandlers() {
|
||||
+ return handlers;
|
||||
+ }
|
||||
+
|
||||
+ @NotNull
|
||||
+ public static HandlerList getHandlerList() {
|
||||
+ return handlers;
|
||||
+ }
|
||||
+
|
||||
+ public enum ChunkStatus {
|
||||
+ INACCESSIBLE,
|
||||
+ FULL,
|
||||
+ BLOCK_TICKING,
|
||||
+ ENTITY_TICKING;
|
||||
+ }
|
||||
+}
|
||||
@@ -5,11 +5,11 @@ Subject: [PATCH] Build Changes
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 4f2fa65ade89c5703451dad4f80eeef162b277d1..8fddf1a856aa7113ba7140b79df6f4fb45e06e85 100644
|
||||
index fb98936bb8a5488db75d676c5bcb4060597fbbf8..2e1cea360bb6ff85eb8da54237bc407653eb91f6 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -7,8 +7,12 @@ plugins {
|
||||
}
|
||||
@@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
|
||||
val alsoShade: Configuration by configurations.creating
|
||||
|
||||
dependencies {
|
||||
- implementation(project(":paper-api"))
|
||||
@@ -23,7 +23,7 @@ index 4f2fa65ade89c5703451dad4f80eeef162b277d1..8fddf1a856aa7113ba7140b79df6f4fb
|
||||
// Paper start
|
||||
implementation("org.jline:jline-terminal-jansi:3.21.0")
|
||||
implementation("net.minecrell:terminalconsoleappender:1.3.0")
|
||||
@@ -62,7 +66,7 @@ tasks.jar {
|
||||
@@ -72,7 +76,7 @@ tasks.jar {
|
||||
attributes(
|
||||
"Main-Class" to "org.bukkit.craftbukkit.Main",
|
||||
"Implementation-Title" to "CraftBukkit",
|
||||
@@ -32,7 +32,7 @@ index 4f2fa65ade89c5703451dad4f80eeef162b277d1..8fddf1a856aa7113ba7140b79df6f4fb
|
||||
"Implementation-Vendor" to date, // Paper
|
||||
"Specification-Title" to "Bukkit",
|
||||
"Specification-Version" to project.version,
|
||||
@@ -134,7 +138,7 @@ fun TaskContainer.registerRunTask(
|
||||
@@ -149,7 +153,7 @@ fun TaskContainer.registerRunTask(
|
||||
name: String,
|
||||
block: JavaExec.() -> Unit
|
||||
): TaskProvider<JavaExec> = register<JavaExec>(name) {
|
||||
@@ -42,10 +42,10 @@ index 4f2fa65ade89c5703451dad4f80eeef162b277d1..8fddf1a856aa7113ba7140b79df6f4fb
|
||||
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 9f15d9dbdfa74a0640b1a2b4ff695609d4758a4c..fa14ab3d8117e9d357380d21d3c6a2cd1df7c04c 100644
|
||||
index 67ee3a4ca8a6cdeb275653d492a1fea8037c51fb..915340fedc6c0b3d70ee065482dbe621b7c0b0a8 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -1682,7 +1682,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1692,7 +1692,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
|
||||
@DontObfuscate
|
||||
public String getServerModName() {
|
||||
@@ -55,10 +55,10 @@ index 9f15d9dbdfa74a0640b1a2b4ff695609d4758a4c..fa14ab3d8117e9d357380d21d3c6a2cd
|
||||
|
||||
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 9f2536d9a73bdb15b5b3004d4da79ca32cee205b..e6d7581442d0f9b76cc16a8c6794f7ee3f79b68f 100644
|
||||
index ec4b73321205b472f19fa5bd4ad95893020d1340..2fdc3bcea74b82d7155617d77100b100d8e56047 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -262,7 +262,7 @@ import javax.annotation.Nullable; // Paper
|
||||
@@ -265,7 +265,7 @@ import javax.annotation.Nullable; // Paper
|
||||
import javax.annotation.Nonnull; // Paper
|
||||
|
||||
public final class CraftServer implements Server {
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
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 02cb6b8c1d59855ff4a8aad3024fe12007eca0ee..e5d853e7a2feaae6236cf6aa2ee77e0472621c1b 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -1686,7 +1686,10 @@ public abstract class Mob extends LivingEntity implements Targeting {
|
||||
float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F;
|
||||
|
||||
if (this.random.nextFloat() < f) {
|
||||
- player.getCooldowns().addCooldown(Items.SHIELD, 100);
|
||||
+ //Slice start
|
||||
+ io.papermc.paper.event.player.PlayerShieldDisableEvent shieldDisableEvent = new io.papermc.paper.event.player.PlayerShieldDisableEvent((org.bukkit.entity.Player) player.getBukkitEntity(), getBukkitEntity(), 100);
|
||||
+ if (!shieldDisableEvent.callEvent()) return; // Slice
|
||||
+ player.getCooldowns().addCooldown(Items.SHIELD, shieldDisableEvent.getCooldown());
|
||||
this.level.broadcastEntityEvent(player, (byte) 30);
|
||||
}
|
||||
}
|
||||
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 0629c471d38a77c44fc1c86ccdfcb0690f61ca17..a144f9a911297891645f704c361e1d8ba0e28a69 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
@@ -976,7 +976,7 @@ public abstract class Player extends LivingEntity {
|
||||
protected void blockUsingShield(LivingEntity attacker) {
|
||||
super.blockUsingShield(attacker);
|
||||
if (attacker.canDisableShield()) {
|
||||
- this.disableShield(true);
|
||||
+ this.disableShield(true, attacker); // Slice
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1461,6 +1461,12 @@ public abstract class Player extends LivingEntity {
|
||||
}
|
||||
|
||||
public void disableShield(boolean sprinting) {
|
||||
+ // Slice start
|
||||
+ disableShield(sprinting, null);
|
||||
+ }
|
||||
+
|
||||
+ public void disableShield(boolean sprinting, @Nullable LivingEntity attacker) {
|
||||
+ // Slice end
|
||||
float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F;
|
||||
|
||||
if (sprinting) {
|
||||
@@ -1468,7 +1474,12 @@ public abstract class Player extends LivingEntity {
|
||||
}
|
||||
|
||||
if (this.random.nextFloat() < f) {
|
||||
- this.getCooldowns().addCooldown(Items.SHIELD, 100);
|
||||
+ // Slice start
|
||||
+ org.bukkit.entity.Entity finalAttacker = attacker != null ? attacker.getBukkitEntity() : null;
|
||||
+ io.papermc.paper.event.player.PlayerShieldDisableEvent shieldDisableEvent = new io.papermc.paper.event.player.PlayerShieldDisableEvent((org.bukkit.entity.Player) getBukkitEntity(), finalAttacker, 100);
|
||||
+ if (!shieldDisableEvent.callEvent()) return;
|
||||
+ this.getCooldowns().addCooldown(Items.SHIELD, shieldDisableEvent.getCooldown());
|
||||
+ // Slice end
|
||||
this.stopUsingItem();
|
||||
this.level.broadcastEntityEvent(this, (byte) 30);
|
||||
}
|
||||
@@ -27,10 +27,10 @@ index 877498729c66de9aa6a27c9148f7494d7895615c..63959d7f15c682c2935f872d50de03fd
|
||||
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 973ecd50f9cb6b86c353586e84d15dcb118ccb60..8e3db48534fc90bb55d0772084b1543f2239878f 100644
|
||||
index 773bfdd3ed457a352b5329f280c0d10297d579ba..c7ee934d4f890bc86596d36079ffed5050133b47 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Level.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
||||
@@ -515,12 +515,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -598,12 +598,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -46,16 +46,7 @@ index 973ecd50f9cb6b86c353586e84d15dcb118ccb60..8e3db48534fc90bb55d0772084b1543f
|
||||
// CraftBukkit start - tree generation
|
||||
if (this.captureTreeGeneration) {
|
||||
// Paper start
|
||||
@@ -568,7 +568,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
} else {
|
||||
BlockState iblockdata2 = this.getBlockState(pos);
|
||||
|
||||
- if ((flags & 128) == 0 && iblockdata2 != iblockdata1 && (iblockdata2.getLightBlock(this, pos) != iblockdata1.getLightBlock(this, pos) || iblockdata2.getLightEmission() != iblockdata1.getLightEmission() || iblockdata2.useShapeForLightOcclusion() || iblockdata1.useShapeForLightOcclusion())) {
|
||||
+ if (checkLight && (flags & 128) == 0 && iblockdata2 != iblockdata1 && (iblockdata2.getLightBlock(this, pos) != iblockdata1.getLightBlock(this, pos) || iblockdata2.getLightEmission() != iblockdata1.getLightEmission() || iblockdata2.useShapeForLightOcclusion() || iblockdata1.useShapeForLightOcclusion())) {
|
||||
this.getProfiler().push("queueCheckLight");
|
||||
this.getChunkSource().getLightEngine().checkBlock(pos);
|
||||
this.getProfiler().pop();
|
||||
@@ -716,7 +716,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -794,7 +794,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
Block.dropResources(iblockdata, this, pos, tileentity, breakingEntity, ItemStack.EMPTY);
|
||||
}
|
||||
|
||||
@@ -86,10 +77,10 @@ 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 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..5fe1a2c493c2a47ec3da8293428d45ef650249c1 100644
|
||||
index fdd9c61b7248e92dbcbec91cd6fe4c6310bba237..2f2197236d9ba64b62510df923378b0256629d02 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 {
|
||||
@@ -194,7 +194,7 @@ public class Block extends BlockBehaviour implements ItemLike {
|
||||
world.destroyBlock(pos, (flags & 32) == 0, (Entity) null, maxUpdateDepth);
|
||||
}
|
||||
} else {
|
||||
@@ -99,7 +90,7 @@ index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..5fe1a2c493c2a47ec3da8293428d45ef
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
||||
index 9868c1e58a41126b2b0f1014c74329015152ded6..38d28c35f2d9e147b8d5336b5d99e623af89b960 100644
|
||||
index bf2cd1eb04c10b8422ddca8efd397290bf58ea4d..30dcafc3ebcb5ab230a5622a0108aa3d7e3c4ead 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
||||
@@ -286,7 +286,7 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
|
||||
@@ -112,10 +103,10 @@ index 9868c1e58a41126b2b0f1014c74329015152ded6..38d28c35f2d9e147b8d5336b5d99e623
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
index b6c4f3d34603929a56073444be5f25fda15ff0c7..823857f89bbed57bf33d41501604502bdfeff67a 100644
|
||||
index f3ac362b7b65a5273ff5fdad1d8065c5f654a53a..2c60ae8b5adb60c49712327bda3c2666778fd729 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
@@ -188,15 +188,20 @@ public class CraftBlock implements Block {
|
||||
@@ -187,15 +187,20 @@ public class CraftBlock implements Block {
|
||||
|
||||
@Override
|
||||
public void setBlockData(BlockData data, boolean applyPhysics) {
|
||||
@@ -140,7 +131,7 @@ index b6c4f3d34603929a56073444be5f25fda15ff0c7..823857f89bbed57bf33d41501604502b
|
||||
// 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
|
||||
@@ -210,7 +215,7 @@ public class CraftBlock implements Block {
|
||||
@@ -209,7 +214,7 @@ public class CraftBlock implements Block {
|
||||
if (applyPhysics) {
|
||||
return world.setBlock(position, blockData, 3);
|
||||
} else {
|
||||
@@ -150,10 +141,10 @@ index b6c4f3d34603929a56073444be5f25fda15ff0c7..823857f89bbed57bf33d41501604502b
|
||||
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 577a352dab0f8a71558cb6dedce788e78053ef52..2c18c7da24e1c5ebd73b4370f370006612359daf 100644
|
||||
index b1abb332eca597b23888bca42d21d5b587f61b13..7286394d1de13247870aac7c3110964bf01a7078 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
||||
@@ -214,7 +214,7 @@ public class CraftBlockState implements BlockState {
|
||||
@@ -208,7 +208,7 @@ public class CraftBlockState implements BlockState {
|
||||
}
|
||||
|
||||
net.minecraft.world.level.block.state.BlockState newBlock = this.data;
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Add BlockDestroyedByNeighborEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||
index 1d33c02088c150189d7f4b0aa27f6a1de96b11cf..14f68a88a5dacaacc799787a9f451699bc4bd5cd 100644
|
||||
index 618ab9a2903f6d4139acd4aaa2e6db0a26e88ba9..ec94d787f227c373637e6bb5f38260d978fe14df 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||
@@ -418,6 +418,7 @@ public class ServerPlayerGameMode {
|
||||
@@ -419,6 +419,7 @@ public class ServerPlayerGameMode {
|
||||
org.bukkit.block.BlockState state = bblock.getState();
|
||||
level.captureDrops = new ArrayList<>();
|
||||
// CraftBukkit end
|
||||
@@ -16,7 +16,7 @@ index 1d33c02088c150189d7f4b0aa27f6a1de96b11cf..14f68a88a5dacaacc799787a9f451699
|
||||
block.playerWillDestroy(this.level, pos, iblockdata, this.player);
|
||||
boolean flag = this.level.removeBlock(pos, false);
|
||||
|
||||
@@ -446,6 +447,7 @@ public class ServerPlayerGameMode {
|
||||
@@ -447,6 +448,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,22 +25,22 @@ index 1d33c02088c150189d7f4b0aa27f6a1de96b11cf..14f68a88a5dacaacc799787a9f451699
|
||||
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 a7533d18fe6148d7bfd3106b9cdcb6fa3347cf7c..588a4fdcb294b9b1a92ef9969ef64f999bf529cc 100644
|
||||
index 879cc823d56625867eb73bb621db6a13f40ad81c..2b3b1c5ccdf58ee9b46d404cfa3790d0fdc2df3d 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
@@ -356,6 +356,7 @@ public final class ItemStack {
|
||||
}
|
||||
}
|
||||
Item item = this.getItem();
|
||||
@@ -352,6 +352,7 @@ public final class ItemStack {
|
||||
CompoundTag oldData = this.getTagClone();
|
||||
int oldCount = this.getCount();
|
||||
ServerLevel world = (ServerLevel) context.getLevel();
|
||||
+ if (entityhuman != null) world.pendingPlayerBlockEvents.put(blockposition, new Level.PendingBlockEvent(blockposition, entityhuman)); // Paper
|
||||
InteractionResult enuminteractionresult = item.useOn(itemactioncontext);
|
||||
CompoundTag newData = this.getTagClone();
|
||||
int newCount = this.getCount();
|
||||
|
||||
if (!(item instanceof BucketItem/* || item instanceof SolidBucketItem*/)) { // if not bucket // Paper - capture block states for snow buckets
|
||||
world.captureBlockStates = true;
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
||||
index 8e3db48534fc90bb55d0772084b1543f2239878f..23630e4ab396158d8f3f77bf9aa05f66c6b27a9d 100644
|
||||
index c7ee934d4f890bc86596d36079ffed5050133b47..1d17c6471449fe4f4fd2bae6bc8a9c500fb0c96f 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Level.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
||||
@@ -185,6 +185,27 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -184,6 +184,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 +68,7 @@ index 8e3db48534fc90bb55d0772084b1543f2239878f..23630e4ab396158d8f3f77bf9aa05f66
|
||||
// Paper start - fix and optimise world upgrading
|
||||
// copied from below
|
||||
public static ResourceKey<DimensionType> getDimensionKey(DimensionType manager) {
|
||||
@@ -670,6 +691,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -748,6 +769,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
if (!this.preventPoiUpdated) {
|
||||
this.onBlockStateChange(blockposition, iblockdata1, iblockdata2);
|
||||
}
|
||||
@@ -76,7 +76,7 @@ index 8e3db48534fc90bb55d0772084b1543f2239878f..23630e4ab396158d8f3f77bf9aa05f66
|
||||
// CraftBukkit end
|
||||
}
|
||||
}
|
||||
@@ -691,6 +713,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -769,6 +791,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
if (iblockdata.isAir()) {
|
||||
return false;
|
||||
} else {
|
||||
@@ -95,7 +95,7 @@ index 8e3db48534fc90bb55d0772084b1543f2239878f..23630e4ab396158d8f3f77bf9aa05f66
|
||||
// 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 9db66b393e057d93a8025b803ae0ad2a1bca61f6..4c7cd93daa2d4fcbf444fe7fceca9e779f883603 100644
|
||||
index 030b38d5d5d2578d6ef482a239ef58787efa3b08..329053cf5c342747985f9079e87edc6f883bfa1e 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java
|
||||
@@ -105,6 +105,15 @@ public class DoublePlantBlock extends BushBlock {
|
||||
@@ -115,16 +115,22 @@ index 9db66b393e057d93a8025b803ae0ad2a1bca61f6..4c7cd93daa2d4fcbf444fe7fceca9e77
|
||||
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 505503a3f59d4b747649275c6f6faa504b7c7b64..0578f8e08b8079898be037e56eb093042a2df0cc 100644
|
||||
index de4c1e4701236e7d5ec77339c51ad6a9d8288bb6..4beb56de55d5584ce7f6e04ae30f7c3cffc1440e 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
|
||||
@@ -1036,6 +1036,16 @@ public abstract class BlockBehaviour implements FeatureElement {
|
||||
@@ -1127,11 +1127,22 @@ public abstract class BlockBehaviour implements FeatureElement {
|
||||
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
|
||||
Direction[] aenumdirection = BlockBehaviour.UPDATE_SHAPE_ORDER;
|
||||
int k = aenumdirection.length;
|
||||
+ BlockState blockState = world.getBlockState(pos); // Slice
|
||||
|
||||
for (int l = 0; l < k; ++l) {
|
||||
Direction enumdirection = aenumdirection[l];
|
||||
|
||||
blockposition_mutableblockposition.setWithOffset(pos, enumdirection);
|
||||
+ // Paper start - Propagate the PendingBlockEvent from the current blockPos to the next block
|
||||
+ // if it will break (!canSurvive)
|
||||
+ if (this.getMaterial() == Material.AIR && !world.getBlockState(blockposition_mutableblockposition).canSurvive(world, blockposition_mutableblockposition)) {
|
||||
+ if (blockState.getBukkitMaterial() == org.bukkit.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();
|
||||
@@ -5,10 +5,10 @@ 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 0a5b3a2f7db1042fe9f154ffaea99e1b9b4ce9ce..ad56206974135e3be74143d3ef86c37969855119 100644
|
||||
index 243b5823ea99eefd812134b5c80d4d3c9f008499..ee97b4352fcdb3fd55eeb5a4a57981b2f0aed28b 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
@@ -618,7 +618,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 0a5b3a2f7db1042fe9f154ffaea99e1b9b4ce9ce..ad56206974135e3be74143d3ef86c379
|
||||
net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item);
|
||||
|
||||
// Modelled off EntityHuman#hasBlock
|
||||
@@ -629,6 +640,7 @@ public class CraftBlock implements Block {
|
||||
@@ -627,6 +638,7 @@ public class CraftBlock implements Block {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,10 @@ 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 7304b2659eb45bc4bc9fa7c43e6ca07221d0fc73..63e385993022b6e708e981982c18060273d3e019 100644
|
||||
index 4bce895268542531598a01a1bccd8ac1ed703b7d..8b552fc58a2909bced07eb743dd5d76c0357f9ab 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 {
|
||||
@@ -104,7 +104,8 @@ public class SpongeBlock extends Block {
|
||||
if (!blocks.isEmpty()) {
|
||||
final org.bukkit.block.Block bblock = world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ());
|
||||
|
||||
@@ -5,10 +5,10 @@ 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 45804711255f04110e9509df8d60900314aa10b7..2cb6a61fb1963ceba8daaf703a1e1881e71c9ace 100644
|
||||
index 18aac3da3c88f33b1a71a5920a8daa27e9723913..af0720fb8bd334aac5493121c6373d87421204b4 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -219,6 +219,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -222,6 +222,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
public final UUID uuid;
|
||||
public boolean hasPhysicsEvent = true; // Paper
|
||||
public boolean hasEntityMoveEvent = false; // Paper
|
||||
@@ -17,10 +17,10 @@ index 45804711255f04110e9509df8d60900314aa10b7..2cb6a61fb1963ceba8daaf703a1e1881
|
||||
public static Throwable getAddToWorldStackTrace(Entity entity) {
|
||||
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 8f0234296397ca2d4a607dcea6093c6c606dc7d2..8334fbe6ffee640016ce17c1d331b6f88b569d65 100644
|
||||
index 1a481fb4f4228f0fea8a7dc6132248c98b727c90..836bdbf4a4742f0cce0f9612d694db03305c7a00 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -1264,6 +1264,18 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
@@ -1268,6 +1268,18 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
world.noSave = !value;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,11 @@ Subject: [PATCH] Add PlayerData Events
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||
index 14f68a88a5dacaacc799787a9f451699bc4bd5cd..a1db0c83d472a87560ca1b3834dd1f1bdbb9fc1a 100644
|
||||
index df2a4449bdc00eb936bf219807d401fc99663926..939d29db3c535c45866fe67cabbe9304601230b0 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||
@@ -600,6 +600,8 @@ public class ServerPlayerGameMode {
|
||||
enuminteractionresult1 = stack.useOn(itemactioncontext, hand);
|
||||
@@ -602,6 +602,8 @@ public class ServerPlayerGameMode {
|
||||
enuminteractionresult1 = stack.useOn(itemactioncontext);
|
||||
}
|
||||
|
||||
+ world.pendingPlayerBlockEvents.remove(blockposition); // Paper
|
||||
@@ -5,10 +5,10 @@ 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 5c21de0d48fba88c3164b72e0eb624706b683fab..2672d1d05abb9aeaaa18ee58174ed95b7ba9ae4d 100644
|
||||
index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..20a0b9835c47ca153a6f77dacf4b775de32e4ef2 100644
|
||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
@@ -837,49 +837,57 @@ public abstract class PlayerList {
|
||||
@@ -853,49 +853,57 @@ public abstract class PlayerList {
|
||||
|
||||
// CraftBukkit start - fire PlayerRespawnEvent
|
||||
if (location == null) {
|
||||
@@ -106,10 +106,10 @@ index 9464054912e19fc78dd965b71fce20a18564b351..1624a0f8ea211a4c43fd01612674ca50
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java
|
||||
index 67efb0d38ae369ff5254f7b1ec85d32d4eee8291..e4110e3a60242b958c9983a090b28aae540b2bdf 100644
|
||||
index 9c3520524cfb903da6a5401760394ec1b49a1825..a6809c3104d4a8fce89eb5056b445ae0517bf9a0 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java
|
||||
@@ -347,6 +347,37 @@ final class CraftTeam extends CraftScoreboardComponent implements Team {
|
||||
@@ -341,6 +341,37 @@ final class CraftTeam extends CraftScoreboardComponent implements Team {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,29 +5,29 @@ Subject: [PATCH] Smooth Teleports
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
index 98df2463bf41fc736aa6a2b6ddf89e5abde6eb39..35d24300f72cdd68d46db7c880ab17eec95fae68 100644
|
||||
index 161c40692e8d469fad4169908b9353be0f85d0d8..2b93a37ee1f711c14140eb96f29dfdd3290641ad 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -277,6 +277,7 @@ public class ServerPlayer extends Player {
|
||||
@@ -278,6 +278,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);
|
||||
private final java.util.concurrent.atomic.AtomicReference<io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances> viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
|
||||
public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
index c2e3ea95c6098536c03ded1e43f5ef692ed34800..83ee1b514aa4b5ed05f31c946956661dd0427eaf 100644
|
||||
index 20a0b9835c47ca153a6f77dacf4b775de32e4ef2..97c6f1c622af02b3761b23a4d3a67b385e45ea84 100644
|
||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
@@ -919,12 +919,12 @@ public abstract class PlayerList {
|
||||
@@ -935,12 +935,12 @@ public abstract class PlayerList {
|
||||
int i = flag ? 1 : 0;
|
||||
// CraftBukkit start
|
||||
LevelData worlddata = worldserver1.getLevelData();
|
||||
- entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), (byte) i, entityplayer1.getLastDeathLocation()));
|
||||
+ if (!entityplayer.smoothWorldTeleport) entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), (byte) i, entityplayer1.getLastDeathLocation()));
|
||||
entityplayer1.connection.send(new ClientboundSetChunkCacheRadiusPacket(worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetSendDistance())); // Spigot // Paper - replace old player chunk management
|
||||
entityplayer1.connection.send(new ClientboundSetSimulationDistancePacket(worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetTickViewDistance())); // Spigot // Paper - replace old player chunk management
|
||||
- entityplayer1.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.getPortalCooldown()));
|
||||
+ 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.getPortalCooldown()));
|
||||
entityplayer1.connection.send(new ClientboundSetChunkCacheRadiusPacket(worldserver1.getWorld().getSendViewDistance())); // Spigot // Paper - replace old player chunk management
|
||||
entityplayer1.connection.send(new ClientboundSetSimulationDistancePacket(worldserver1.getWorld().getSimulationDistance())); // Spigot // Paper - replace old player chunk management
|
||||
entityplayer1.spawnIn(worldserver1);
|
||||
entityplayer1.unsetRemoved();
|
||||
- entityplayer1.connection.teleport(CraftLocation.toBukkit(entityplayer1.position(), worldserver1.getWorld(), entityplayer1.getYRot(), entityplayer1.getXRot()));
|
||||
@@ -36,10 +36,10 @@ index c2e3ea95c6098536c03ded1e43f5ef692ed34800..83ee1b514aa4b5ed05f31c946956661d
|
||||
|
||||
// entityplayer1.connection.teleport(entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot());
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index be64633c8bcee96f2ad5247525cac965b7b031b1..a96db3d93a54beac623f7d08b3c994d53b70dc1c 100644
|
||||
index 4e6fea7cf11b1e29ae7c7098a6f5d06bb5f93cc2..767a33cdce4b438164bf4101ff39cd7b1e8f929e 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1262,6 +1262,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -1254,6 +1254,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
// Paper end
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Ignore durability changes for equipment updates
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
index 95a27d28f73039693ca64601954af62028413634..72739d5949314b242869fd5fef3b5f0c076434d0 100644
|
||||
index e11d7283662834047b2ff81a2fd25a4263792deb..d0e49ae973a91344f3973dc6e00e7e6c649e87cb 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -3096,7 +3096,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
@@ -3127,7 +3127,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
}
|
||||
|
||||
public boolean equipmentHasChanged(ItemStack stack, ItemStack stack2) {
|
||||
@@ -18,7 +18,7 @@ index 8f5178e934b5f9bc48beacd082e479fd9fb80fa6..d580238d733ba2dbbbbaa2659d1a7834
|
||||
builder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CavePlacements.CLASSIC_VINES);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java b/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
|
||||
index feabf6db6a5987bec36b611b160b67ca30af2ecf..974c4d03dd36cd30ff0736cdc1605623e21e7c78 100644
|
||||
index 3d899e4dbb96f64279485bbd5b708df88ddbfe8f..89f33b92dc8cfa22d1e1edbda1a31179743979e8 100644
|
||||
--- a/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
|
||||
+++ b/src/main/java/net/minecraft/data/worldgen/features/CaveFeatures.java
|
||||
@@ -110,7 +110,7 @@ public class CaveFeatures {
|
||||
@@ -5,10 +5,10 @@ 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 cab91880a08c6fdc545804911d295e0f24f4d983..f90f27d9d9a4043198c33d65efa7068b76b58818 100644
|
||||
index 42fdce97d99618a53f2e9c51804ff2205b574f69..7e8d58e3481be2d7ebbe5fe388d61932479e7721 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java
|
||||
@@ -163,6 +163,7 @@ public final class ChunkPacketBlockControllerAntiXray extends ChunkPacketBlockCo
|
||||
@@ -165,6 +165,7 @@ public final class ChunkPacketBlockControllerAntiXray extends ChunkPacketBlockCo
|
||||
|
||||
@Override
|
||||
public boolean shouldModify(ServerPlayer player, LevelChunk chunk) {
|
||||
@@ -17,10 +17,10 @@ index cab91880a08c6fdc545804911d295e0f24f4d983..f90f27d9d9a4043198c33d65efa7068b
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index a96db3d93a54beac623f7d08b3c994d53b70dc1c..1b58330a0eff27eb920a37dad0b436049fe0bce6 100644
|
||||
index 767a33cdce4b438164bf4101ff39cd7b1e8f929e..0af1801085701437f06c9ecaf8864fe875e90509 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -185,6 +185,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -196,6 +196,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 a96db3d93a54beac623f7d08b3c994d53b70dc1c..1b58330a0eff27eb920a37dad0b43604
|
||||
|
||||
public CraftPlayer(CraftServer server, ServerPlayer entity) {
|
||||
super(server, entity);
|
||||
@@ -2750,6 +2751,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -2827,6 +2828,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
}
|
||||
// Paper end
|
||||
|
||||
36
patches/server/0014-Add-PlayerPreChunkLoadEvent.patch
Normal file
36
patches/server/0014-Add-PlayerPreChunkLoadEvent.patch
Normal file
@@ -0,0 +1,36 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 10 Apr 2023 08:47:43 -0500
|
||||
Subject: [PATCH] Add PlayerPreChunkLoadEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java
|
||||
index 924539d4ac50c70178ba220424ffacd6ff277c8b..f9b30f2904d06f2a7de6fa03287bc2e40e879e2d 100644
|
||||
--- a/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java
|
||||
+++ b/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java
|
||||
@@ -411,7 +411,7 @@ public class RegionizedPlayerChunkLoader {
|
||||
private boolean canGenerateChunks = true;
|
||||
|
||||
private final ArrayDeque<ChunkHolderManager.TicketOperation<?, ?>> delayedTicketOps = new ArrayDeque<>();
|
||||
- private final LongOpenHashSet sentChunks = new LongOpenHashSet();
|
||||
+ public final LongOpenHashSet sentChunks = new LongOpenHashSet(); // Slice -> public
|
||||
|
||||
private static final byte CHUNK_TICKET_STAGE_NONE = 0;
|
||||
private static final byte CHUNK_TICKET_STAGE_LOADING = 1;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 836bdbf4a4742f0cce0f9612d694db03305c7a00..fb79e3ee663709538d6e322fd8401564dcbbe5a7 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -530,6 +530,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
return true;
|
||||
}
|
||||
|
||||
+ @Override
|
||||
+ public it.unimi.dsi.fastutil.longs.LongOpenHashSet getSentChunks(Player p) {
|
||||
+ ServerPlayer craftPlayer = ((CraftPlayer) p).getHandle();
|
||||
+ return craftPlayer.chunkLoader.sentChunks;
|
||||
+ }
|
||||
+
|
||||
@Override
|
||||
public boolean isChunkInUse(int x, int z) {
|
||||
return this.isChunkLoaded(x, z);
|
||||
@@ -1,53 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 10 Apr 2023 08:47:43 -0500
|
||||
Subject: [PATCH] Add PlayerPreChunkLoadEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
||||
index e77972c4c264100ffdd824bfa2dac58dbbc6d678..5b32567bcf532994a31f184743cf42f4ea0113a4 100644
|
||||
--- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
||||
+++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
||||
@@ -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<>();
|
||||
- protected final LongOpenHashSet sentChunks = new LongOpenHashSet();
|
||||
+ public final LongOpenHashSet sentChunks = new LongOpenHashSet(); // Slice - public
|
||||
protected final LongOpenHashSet chunksToBeSent = new LongOpenHashSet();
|
||||
|
||||
protected final TreeSet<ChunkPriorityHolder> sendQueue = new TreeSet<>((final ChunkPriorityHolder p1, final ChunkPriorityHolder p2) -> {
|
||||
@@ -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 io.papermc.paper.event.packet.PlayerPreChunkLoadEvent(this.player.getBukkitEntity().getWorld(), chunkX, chunkZ, this.player.getBukkitEntity()).callEvent()) {
|
||||
+ this.player.connection.connection.execute(onChunkSend);
|
||||
+ return;
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
+ if (this.sentChunks.add(CoordinateUtils.getChunkKey(chunkX, chunkZ))) { // Slice
|
||||
this.player.getLevel().getChunkSource().chunkMap.updateChunkTracking(this.player,
|
||||
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 8334fbe6ffee640016ce17c1d331b6f88b569d65..c591b248da7f6349ce6da339f96ad9b51be042ef 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -532,6 +532,13 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
return true;
|
||||
}
|
||||
|
||||
+ @Override
|
||||
+ public it.unimi.dsi.fastutil.longs.LongOpenHashSet getSentChunks(Player p) {
|
||||
+ CraftPlayer craftPlayer = (CraftPlayer) p;
|
||||
+ io.papermc.paper.chunk.PlayerChunkLoader.PlayerLoaderData data = this.world.chunkSource.chunkMap.playerChunkManager.getData(craftPlayer.getHandle());
|
||||
+ return data != null ? data.sentChunks : null;
|
||||
+ }
|
||||
+
|
||||
@Override
|
||||
public boolean isChunkInUse(int x, int z) {
|
||||
return this.isChunkLoaded(x, z);
|
||||
@@ -5,13 +5,13 @@ 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 280ee1838106201f5e3ba7753caced6d030f7e55..53f33b19277cdfd364b84362475a72f8d1a3cd60 100644
|
||||
index e8485fb900b25e911a858678a833852731cb2ace..a0f8740c93fe86d4c49b9e43f1044ef03d8e3de7 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -848,7 +848,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
@@ -868,7 +868,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
|
||||
this.checkOutOfWorld();
|
||||
if (!this.level.isClientSide) {
|
||||
this.checkBelowWorld();
|
||||
if (!this.level().isClientSide) {
|
||||
- this.setSharedFlagOnFire(this.remainingFireTicks > 0);
|
||||
+ if (this instanceof net.minecraft.world.entity.LivingEntity livingEntity) {
|
||||
+ this.setSharedFlagOnFire(this.remainingFireTicks > 0 && !livingEntity.hasEffect(net.minecraft.world.effect.MobEffects.FIRE_RESISTANCE));
|
||||
@@ -5,11 +5,11 @@ 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 fbe209a66c77c47935ad026dd3e45e682af91fd8..67a8b0145e4ed096b4fc520202098b9b1d259bd6 100644
|
||||
index 65d947df910d60f478e7a449eb161e5105e2c0c9..e08b72010f22ce680e88f443782bdfe6a46285f9 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
@@ -509,7 +509,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
return !ChunkMap.isChunkInRange(x1, z1, x2, z2, distance) ? false : (!ChunkMap.isChunkInRange(x1 + 1, z1, x2, z2, distance) ? true : (!ChunkMap.isChunkInRange(x1, z1 + 1, x2, z2, distance) ? true : (!ChunkMap.isChunkInRange(x1 - 1, z1, x2, z2, distance) ? true : !ChunkMap.isChunkInRange(x1, z1 - 1, x2, z2, distance))));
|
||||
@@ -524,7 +524,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
return !ChunkMap.isChunkInRange(x1, z1, x2, z2, distance) ? false : !ChunkMap.isChunkInRange(x1 + 1, z1 + 1, x2, z2, distance) || !ChunkMap.isChunkInRange(x1 - 1, z1 + 1, x2, z2, distance) || !ChunkMap.isChunkInRange(x1 + 1, z1 - 1, x2, z2, distance) || !ChunkMap.isChunkInRange(x1 - 1, z1 - 1, x2, z2, distance);
|
||||
}
|
||||
|
||||
- protected ThreadedLevelLightEngine getLightEngine() {
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Disable geode and monsterspawners generation
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java b/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java
|
||||
index 1b6195cd9878e66eb20c45247d7005f9822e79c6..1808399adbbe239c158fc1f2849f5ade8ba1f654 100644
|
||||
index 84aa56cbcaa5539b556f42eb284d3dd2e200e358..a6d2ead225841192c2eb80b3b2e54ceeaa76546b 100644
|
||||
--- a/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java
|
||||
+++ b/src/main/java/net/minecraft/data/worldgen/biome/OverworldBiomes.java
|
||||
@@ -54,8 +54,8 @@ public class OverworldBiomes {
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] PlayerLoadStatsEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
index a42a47b112a154f1cbfaad6d1c8bd3a8d6007a58..1b1a77cc0925245d58e2a33d5e25918de24b630e 100644
|
||||
index 97c6f1c622af02b3761b23a4d3a67b385e45ea84..7f059a71d25170e8e3215c7d91ab7927394cfeb5 100644
|
||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
@@ -1458,7 +1458,7 @@ public abstract class PlayerList {
|
||||
@@ -1474,7 +1474,7 @@ public abstract class PlayerList {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ index a42a47b112a154f1cbfaad6d1c8bd3a8d6007a58..1b1a77cc0925245d58e2a33d5e25918d
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
|
||||
index 8afd9b785fb8734255e3ea926b8375bb9cae60be..5a0ccc7e08ecba5dc62c02195c5f87c22ea6d122 100644
|
||||
index 8afd9b785fb8734255e3ea926b8375bb9cae60be..9bd42eac43f068df8f7f49249bb47840d87d799a 100644
|
||||
--- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java
|
||||
+++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
|
||||
@@ -45,7 +45,7 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
@@ -30,12 +30,11 @@ index 8afd9b785fb8734255e3ea926b8375bb9cae60be..5a0ccc7e08ecba5dc62c02195c5f87c2
|
||||
this.server = server;
|
||||
this.file = file;
|
||||
// Spigot start
|
||||
@@ -55,7 +55,14 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
@@ -55,7 +55,13 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
this.stats.put( wrapper, entry.getValue().intValue() );
|
||||
}
|
||||
// Spigot end
|
||||
- if (file.isFile()) {
|
||||
+
|
||||
+ // Slice start - If event supplies stats, use it. Otherwise just load from disk as usual
|
||||
+ com.destroystokyo.paper.event.player.PlayerLoadStatsEvent event = new com.destroystokyo.paper.event.player.PlayerLoadStatsEvent(uuid);
|
||||
+ org.bukkit.Bukkit.getPluginManager().callEvent(event);
|
||||
@@ -46,7 +45,7 @@ index 8afd9b785fb8734255e3ea926b8375bb9cae60be..5a0ccc7e08ecba5dc62c02195c5f87c2
|
||||
try {
|
||||
this.parseLocal(server.getFixerUpper(), FileUtils.readFileToString(file));
|
||||
} catch (IOException ioexception) {
|
||||
@@ -103,46 +110,8 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
@@ -103,46 +109,8 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
|
||||
if (!jsonelement.isJsonNull()) {
|
||||
CompoundTag nbttagcompound = ServerStatsCounter.fromJson(jsonelement.getAsJsonObject());
|
||||
@@ -95,7 +94,7 @@ index 8afd9b785fb8734255e3ea926b8375bb9cae60be..5a0ccc7e08ecba5dc62c02195c5f87c2
|
||||
}
|
||||
|
||||
ServerStatsCounter.LOGGER.error("Unable to parse Stat data from {}", this.file);
|
||||
@@ -167,6 +136,48 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
@@ -167,6 +135,48 @@ public class ServerStatsCounter extends StatsCounter {
|
||||
|
||||
}
|
||||
|
||||
@@ -5,24 +5,25 @@ Subject: [PATCH] Add Force Crit to PlayerPreAttackEntityEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
index a144f9a911297891645f704c361e1d8ba0e28a69..a3f47872173eb9798b263c419e87b0adedcc4e25 100644
|
||||
index 58152160d609d0e9d105153aeb166a56a7955603..5d52d8821edc8dd2cac3391081a223811297faf8 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
@@ -1276,10 +1276,11 @@ public abstract class Player extends LivingEntity {
|
||||
@@ -1277,10 +1277,11 @@ public abstract class Player extends LivingEntity {
|
||||
flag1 = true;
|
||||
}
|
||||
|
||||
- boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.onClimbable() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && target instanceof LivingEntity; // Paper - Add critical damage API - conflict on change
|
||||
- boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround() && !this.onClimbable() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && target instanceof LivingEntity; // Paper - Add critical damage API - conflict on change
|
||||
+ boolean forceCrit = playerAttackEntityEvent.isForceCrit();
|
||||
+ boolean flag2 = forceCrit || (flag && this.fallDistance > 0.0F && !this.onGround && !this.onClimbable() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && target instanceof LivingEntity); // Paper - Add critical damage API - conflict on change // Slice
|
||||
+ boolean flag2 = forceCrit || (flag && this.fallDistance > 0.0F && !this.onGround() && !this.onClimbable() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && target instanceof LivingEntity); // Paper - Add critical damage API - conflict on change // Slice
|
||||
|
||||
flag2 = flag2 && !level.paperConfig().entities.behavior.disablePlayerCrits; // Paper
|
||||
- flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper
|
||||
- flag2 = flag2 && !this.isSprinting();
|
||||
+ flag2 = flag2 && !level().paperConfig().entities.behavior.disablePlayerCrits; // Paper
|
||||
+ flag2 = forceCrit || (flag2 && !this.isSprinting()); // Slice
|
||||
if (flag2) {
|
||||
f *= 1.5F;
|
||||
}
|
||||
@@ -2394,27 +2395,6 @@ public abstract class Player extends LivingEntity {
|
||||
@@ -2411,27 +2412,6 @@ public abstract class Player extends LivingEntity {
|
||||
this.lastDeathLocation = lastDeathPos;
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Preventing KB Bonus to PlayerPreAttackEntityEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
index a3f47872173eb9798b263c419e87b0adedcc4e25..28125492ceed99b244c5e177edb6739a9c2d68d9 100644
|
||||
index 5d52d8821edc8dd2cac3391081a223811297faf8..38e110a226aac27d86dfe89bc0e9ecaada6ff268 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
@@ -1268,7 +1268,11 @@ public abstract class Player extends LivingEntity {
|
||||
@@ -1269,7 +1269,11 @@ public abstract class Player extends LivingEntity {
|
||||
boolean flag = f2 > 0.9F;
|
||||
boolean flag1 = false;
|
||||
byte b0 = 0;
|
||||
@@ -18,10 +18,10 @@ index a87f6380b2c387fb0cdd40d5087b5c93492e3c88..cd35c2136a638c07fed683a2f92e70aa
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index 53f33b19277cdfd364b84362475a72f8d1a3cd60..66bcacfafe25f2543d40eb959ef251da400a2c73 100644
|
||||
index a0f8740c93fe86d4c49b9e43f1044ef03d8e3de7..6d6baa82bb7a67c3f6de4bdb0987e4d1f68b6ec8 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -436,6 +436,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
@@ -453,6 +453,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
* Overriding this field will cause memory leaks.
|
||||
*/
|
||||
private final boolean hardCollides;
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Add jackson
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 1c7c148feb1785839b9dad0aa8477a52a2e12b3c..d21acd988d623f4dea90250ea1a729af3cc908e7 100644
|
||||
index 2e1cea360bb6ff85eb8da54237bc407653eb91f6..475cbb6120655419fc7dc51292e6beedfe778656 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -13,6 +13,13 @@ dependencies {
|
||||
@@ -19,6 +19,13 @@ dependencies {
|
||||
exclude("io.papermc.paper", "paper-api")
|
||||
}
|
||||
// Slice end
|
||||
@@ -1,50 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 25 Apr 2023 08:20:19 -0500
|
||||
Subject: [PATCH] Player specific target chunk send rate
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
||||
index 5b32567bcf532994a31f184743cf42f4ea0113a4..cf2656a4290bbf57d8a911eee4b94af4dea44637 100644
|
||||
--- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
||||
+++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java
|
||||
@@ -386,8 +386,8 @@ public final class PlayerChunkLoader {
|
||||
return (int)Math.ceil(Math.min(config * MinecraftServer.getServer().getPlayerCount(), max <= 1.0 ? Double.MAX_VALUE : max));
|
||||
}
|
||||
|
||||
- protected long getTargetSendPerPlayerAddend() {
|
||||
- return GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate);
|
||||
+ protected long getTargetSendPerPlayerAddend(ServerPlayer player) { // Slice
|
||||
+ return player.targetChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / player.targetChunkSendRate); // Slice
|
||||
}
|
||||
|
||||
protected long getMaxSendAddend() {
|
||||
@@ -541,7 +541,6 @@ public final class PlayerChunkLoader {
|
||||
}
|
||||
|
||||
final int maxSends = this.getMaxConcurrentChunkSends();
|
||||
- final long nextPlayerDeadline = this.getTargetSendPerPlayerAddend() + time;
|
||||
for (;;) {
|
||||
if (this.chunkSendQueue.isEmpty()) {
|
||||
break;
|
||||
@@ -574,7 +573,7 @@ public final class PlayerChunkLoader {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
- data.nextChunkSendTarget = nextPlayerDeadline;
|
||||
+ data.nextChunkSendTarget = this.getTargetSendPerPlayerAddend(data.player) + time; // Slice
|
||||
this.chunkSendWaitQueue.add(data);
|
||||
|
||||
synchronized (this.sendingChunkCounts) {
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
index 35d24300f72cdd68d46db7c880ab17eec95fae68..e7ef3882461344cfd1c53ac03de9ef1991378623 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -278,6 +278,7 @@ public class ServerPlayer extends Player {
|
||||
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
||||
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
|
||||
public boolean smoothWorldTeleport; // Slice
|
||||
+ public double targetChunkSendRate = io.papermc.paper.configuration.GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate; // Slice
|
||||
|
||||
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
|
||||
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
|
||||
@@ -19,10 +19,10 @@ index 7e94ebe06fc62293e665d6db19e42d947e7eb30f..158c012b8a6808ca0f820c2997af2825
|
||||
java.util.Iterator<java.util.Map.Entry<String, Tag>> iterator = (this.tags instanceof it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) ? ((it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap)this.tags).object2ObjectEntrySet().fastIterator() : this.tags.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
index 588a4fdcb294b9b1a92ef9969ef64f999bf529cc..431ea53e4fb9c26c24003da7e216a1f5fe070985 100644
|
||||
index 2b3b1c5ccdf58ee9b46d404cfa3790d0fdc2df3d..b31f21e2d9faa00174bbcbbd1e0cf1b22c8b69d4 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
@@ -719,7 +719,11 @@ public final class ItemStack {
|
||||
@@ -736,7 +736,11 @@ public final class ItemStack {
|
||||
|
||||
itemstack.setPopTime(this.getPopTime());
|
||||
if (this.tag != null) {
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow inventory clicks in Spectator
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index aa287d7f37f38d938d195114408cb6dbda59063d..76395ad7d42058705bd100b5ef57598ed6ca492c 100644
|
||||
index 3c0651fa5a5db880202c9a3805a6455269c5f16d..42e61e55ef45935e1f690eefa56bc36842cdd974 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2968,7 +2968,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -3030,7 +3030,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
if (this.player.isImmobile()) return; // CraftBukkit
|
||||
this.player.resetLastActionTime();
|
||||
if (this.player.containerMenu.containerId == packet.getContainerId() && this.player.containerMenu.stillValid(this.player)) { // CraftBukkit
|
||||
@@ -1,24 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Wed, 26 Apr 2023 08:19:29 -0500
|
||||
Subject: [PATCH] Add Entry ctor to ClientboundPlayerInfoUpdatePacket
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java
|
||||
index 4aa8b483841028fbcc43f9ed47730881263e5065..618ba8b495968896dc6011089972921715930ecf 100644
|
||||
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java
|
||||
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java
|
||||
@@ -24,6 +24,13 @@ public class ClientboundPlayerInfoUpdatePacket implements Packet<ClientGamePacke
|
||||
this.entries = players.stream().map(ClientboundPlayerInfoUpdatePacket.Entry::new).toList();
|
||||
}
|
||||
|
||||
+ // Slice
|
||||
+ public ClientboundPlayerInfoUpdatePacket(EnumSet<ClientboundPlayerInfoUpdatePacket.Action> actions, List<ClientboundPlayerInfoUpdatePacket.Entry> entries) {
|
||||
+ this.actions = actions;
|
||||
+ this.entries = entries;
|
||||
+ }
|
||||
+ // End Slice
|
||||
+
|
||||
public ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action action, ServerPlayer player) {
|
||||
this.actions = EnumSet.of(action);
|
||||
this.entries = List.of(new ClientboundPlayerInfoUpdatePacket.Entry(player));
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Packet obfuscation and reduction
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
|
||||
index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..b5f4af655fdc6a9150802254811ed743cc61074c 100644
|
||||
index 5dfb35117c285e0b202dc9c088ad5848beb8d054..b3d2cbf9f60c4a4b34df20bfe45a80ac23f4570f 100644
|
||||
--- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
|
||||
+++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
|
||||
@@ -139,15 +139,29 @@ public class SynchedEntityData {
|
||||
@@ -165,15 +165,29 @@ public class SynchedEntityData {
|
||||
}
|
||||
|
||||
public <T> void set(EntityDataAccessor<T> key, T value, boolean force) {
|
||||
@@ -39,7 +39,7 @@ index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..b5f4af655fdc6a9150802254811ed743
|
||||
}
|
||||
|
||||
// CraftBukkit start - add method from above
|
||||
@@ -189,6 +203,26 @@ public class SynchedEntityData {
|
||||
@@ -215,6 +229,26 @@ public class SynchedEntityData {
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..b5f4af655fdc6a9150802254811ed743
|
||||
@Nullable
|
||||
public List<SynchedEntityData.DataValue<?>> getNonDefaultValues() {
|
||||
List<SynchedEntityData.DataValue<?>> list = null;
|
||||
@@ -296,11 +330,14 @@ public class SynchedEntityData {
|
||||
@@ -336,11 +370,14 @@ public class SynchedEntityData {
|
||||
T value;
|
||||
private final T initialValue;
|
||||
private boolean dirty;
|
||||
@@ -81,7 +81,7 @@ index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..b5f4af655fdc6a9150802254811ed743
|
||||
}
|
||||
|
||||
public EntityDataAccessor<T> getAccessor() {
|
||||
@@ -330,6 +367,35 @@ public class SynchedEntityData {
|
||||
@@ -370,6 +407,35 @@ public class SynchedEntityData {
|
||||
public SynchedEntityData.DataValue<T> value() {
|
||||
return SynchedEntityData.DataValue.create(this.accessor, this.value);
|
||||
}
|
||||
@@ -118,10 +118,10 @@ index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..b5f4af655fdc6a9150802254811ed743
|
||||
|
||||
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 d86836541f5eaa654d3dc452fe7cc15eafff4dfa..5de01ea9b5bd6d4d67024cd045a68a730365a6fa 100644
|
||||
index 196280f54e397c69d32bd4d1f6ae666efdd93773..a514a1f26e439b5959093488ec9905fec327a404 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
@@ -378,7 +378,20 @@ public class ServerEntity {
|
||||
@@ -381,7 +381,20 @@ public class ServerEntity {
|
||||
|
||||
if (list != null) {
|
||||
this.trackedDataValues = datawatcher.getNonDefaultValues();
|
||||
@@ -144,10 +144,10 @@ index d86836541f5eaa654d3dc452fe7cc15eafff4dfa..5de01ea9b5bd6d4d67024cd045a68a73
|
||||
|
||||
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 66bcacfafe25f2543d40eb959ef251da400a2c73..94a3d39f9802be7b71adf378985f132fd7f5c0fd 100644
|
||||
index 6d6baa82bb7a67c3f6de4bdb0987e4d1f68b6ec8..b23b6be85496d031b81b2d3abb9690322c340a80 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -3151,7 +3151,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
@@ -3272,7 +3272,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
this.entityData.markDirty(Entity.DATA_AIR_SUPPLY_ID);
|
||||
return;
|
||||
}
|
||||
@@ -156,11 +156,24 @@ index 66bcacfafe25f2543d40eb959ef251da400a2c73..94a3d39f9802be7b71adf378985f132f
|
||||
// CraftBukkit end
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
index d0e49ae973a91344f3973dc6e00e7e6c649e87cb..b7c9876eaff4365d136a9af20c1a5845b3094336 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -3127,7 +3127,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
}
|
||||
|
||||
public boolean equipmentHasChanged(ItemStack stack, ItemStack stack2) {
|
||||
- return !ItemStack.isSame(stack2, stack);
|
||||
+ return !ItemStack.isSameItem(stack2, stack);
|
||||
}
|
||||
|
||||
private void handleHandSwap(Map<EquipmentSlot, ItemStack> equipmentChanges) {
|
||||
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 28125492ceed99b244c5e177edb6739a9c2d68d9..8821d57e1f111fb4528d7645ba635c7d8687c8a9 100644
|
||||
index 38e110a226aac27d86dfe89bc0e9ecaada6ff268..15515e871c89498ec936ab24871741f883f18a3b 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
@@ -641,7 +641,7 @@ public abstract class Player extends LivingEntity {
|
||||
@@ -643,7 +643,7 @@ public abstract class Player extends LivingEntity {
|
||||
public void increaseScore(int score) {
|
||||
int j = this.getScore();
|
||||
|
||||
@@ -170,10 +183,10 @@ index 28125492ceed99b244c5e177edb6739a9c2d68d9..8821d57e1f111fb4528d7645ba635c7d
|
||||
|
||||
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 1b58330a0eff27eb920a37dad0b436049fe0bce6..4ae992fd174135eda153015236c6a3b884af3dd8 100644
|
||||
index 0af1801085701437f06c9ecaf8864fe875e90509..48402f6be39ca1fe65453ca3ab3b995ad33051b0 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -2515,7 +2515,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -2593,7 +2593,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
this.sendHealthUpdate();
|
||||
}
|
||||
}
|
||||
@@ -5,39 +5,30 @@ Subject: [PATCH] Long distance tracking
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
index 67a8b0145e4ed096b4fc520202098b9b1d259bd6..47b500930645d8704f78d65e5dd6f148b08f8cb7 100644
|
||||
index e08b72010f22ce680e88f443782bdfe6a46285f9..3809b2125254424d4939794961a9f08254af54c8 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
@@ -1612,7 +1612,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
double vec3d_dx = player.getX() - this.entity.getX();
|
||||
double vec3d_dz = player.getZ() - this.entity.getZ();
|
||||
@@ -1551,6 +1551,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
// Paper end - remove allocation of Vec3D here
|
||||
- double d0 = (double) Math.min(this.getEffectiveRange(), io.papermc.paper.chunk.PlayerChunkLoader.getSendViewDistance(player) * 16); // Paper - per player view distance
|
||||
+ // Slice start
|
||||
+ double d0 = io.papermc.paper.chunk.PlayerChunkLoader.getSendViewDistance(player) * 16;
|
||||
+ if (this.entity instanceof ServerPlayer serverPlayer && player.canSeeFromLongDistance(serverPlayer)) {
|
||||
+ d0 = Math.min(level.spigotConfig.flyingPlayerTrackingRange, d0);
|
||||
+ }
|
||||
+ else {
|
||||
+ d0 = Math.min(this.getEffectiveRange(), d0); // Paper - per player view distance
|
||||
+ }
|
||||
+ // Slice end
|
||||
Vec3 vec3d = player.position().subtract(this.entity.position());
|
||||
double d0 = (double) Math.min(this.getEffectiveRange(), io.papermc.paper.chunk.system.ChunkSystem.getSendViewDistance(player) * 16); // Paper - per player view distance
|
||||
+ if (this.entity instanceof ServerPlayer serverPlayer && player.canSeeFromLongDistance(serverPlayer)) d0 = Math.min(level.spigotConfig.flyingPlayerTrackingRange, d0); // Slice
|
||||
double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper
|
||||
double d2 = d0 * d0;
|
||||
boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player);
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
index e7ef3882461344cfd1c53ac03de9ef1991378623..b043273a532ae994cca56f4516c3ba12f30b9495 100644
|
||||
index c610111cde3d1cecac661549511742231e1e47c3..069665c210f2c3f8aec8c13c1c0c2ab5c50d3e24 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -278,6 +278,7 @@ public class ServerPlayer extends Player {
|
||||
@@ -279,6 +279,7 @@ public class ServerPlayer extends Player {
|
||||
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
||||
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
|
||||
public boolean smoothWorldTeleport; // Slice
|
||||
+ public boolean hasLongDistanceTracking; // Slice
|
||||
public double targetChunkSendRate = io.papermc.paper.configuration.GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate; // Slice
|
||||
|
||||
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) {
|
||||
@@ -2566,4 +2567,18 @@ public class ServerPlayer extends Player {
|
||||
private final java.util.concurrent.atomic.AtomicReference<io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances> viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
|
||||
public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
||||
@@ -2656,4 +2657,18 @@ public class ServerPlayer extends Player {
|
||||
return (CraftPlayer) super.getBukkitEntity();
|
||||
}
|
||||
// CraftBukkit end
|
||||
@@ -57,10 +48,10 @@ index e7ef3882461344cfd1c53ac03de9ef1991378623..b043273a532ae994cca56f4516c3ba12
|
||||
+ // Slice end
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index bbfafb1400721251dfd2cac4dd8a31be2d682d4b..ec2467432a0a3a285039e7ced36c9a5220a86849 100644
|
||||
index 5b5109e942b18418b3a3a0e2109fe4ef15045fe5..507519c75fabe8991cddbc1aa7813cec25dee01b 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -269,6 +269,7 @@ public class SpigotWorldConfig
|
||||
@@ -271,6 +271,7 @@ public class SpigotWorldConfig
|
||||
}
|
||||
|
||||
public int playerTrackingRange = 48;
|
||||
@@ -68,7 +59,7 @@ index bbfafb1400721251dfd2cac4dd8a31be2d682d4b..ec2467432a0a3a285039e7ced36c9a52
|
||||
public int animalTrackingRange = 48;
|
||||
public int monsterTrackingRange = 48;
|
||||
public int miscTrackingRange = 32;
|
||||
@@ -277,6 +278,7 @@ public class SpigotWorldConfig
|
||||
@@ -279,6 +280,7 @@ public class SpigotWorldConfig
|
||||
private void trackingRange()
|
||||
{
|
||||
this.playerTrackingRange = this.getInt( "entity-tracking-range.players", this.playerTrackingRange );
|
||||
@@ -77,13 +68,13 @@ index bbfafb1400721251dfd2cac4dd8a31be2d682d4b..ec2467432a0a3a285039e7ced36c9a52
|
||||
this.monsterTrackingRange = this.getInt( "entity-tracking-range.monsters", this.monsterTrackingRange );
|
||||
this.miscTrackingRange = this.getInt( "entity-tracking-range.misc", this.miscTrackingRange );
|
||||
diff --git a/src/main/java/org/spigotmc/TrackingRange.java b/src/main/java/org/spigotmc/TrackingRange.java
|
||||
index 6ac5de214d0da921d0d0c822e7063f6738788cac..4a76e87188739b5fc1b3e0de0ded0d96def03176 100644
|
||||
index 8fca15099952626ee537f5ce3eefdfaa6518dc1b..1ddf149ce3d962905bec8c4562e4d86fbbe6e570 100644
|
||||
--- a/src/main/java/org/spigotmc/TrackingRange.java
|
||||
+++ b/src/main/java/org/spigotmc/TrackingRange.java
|
||||
@@ -27,9 +27,9 @@ public class TrackingRange
|
||||
@@ -26,9 +26,9 @@ public class TrackingRange
|
||||
return defaultRange;
|
||||
}
|
||||
if (entity instanceof net.minecraft.world.entity.boss.enderdragon.EnderDragon) return defaultRange; // Paper - enderdragon is exempt
|
||||
SpigotWorldConfig config = entity.level.spigotConfig;
|
||||
SpigotWorldConfig config = entity.level().spigotConfig;
|
||||
- if ( entity instanceof ServerPlayer )
|
||||
+ if ( entity instanceof ServerPlayer serverPlayer)
|
||||
{
|
||||
134
patches/server/0030-Shared-Data-Storage.patch
Normal file
134
patches/server/0030-Shared-Data-Storage.patch
Normal file
@@ -0,0 +1,134 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 12 Jun 2023 14:09:36 -0500
|
||||
Subject: [PATCH] Shared Data Storage
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
index 3bc7230ca62ebe3426da293e436a962bb0134f85..a812bd61e0352023cfd44e62a9cf722616ba4358 100644
|
||||
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
@@ -318,6 +318,7 @@ public class GlobalConfiguration extends ConfigurationPart {
|
||||
public boolean useDimensionTypeForCustomSpawners = false;
|
||||
public boolean strictAdvancementDimensionCheck = false;
|
||||
public IntOr.Default compressionLevel = IntOr.Default.USE_DEFAULT;
|
||||
+ public String sharedDataFolder = ""; // Slice
|
||||
}
|
||||
|
||||
public BlockUpdates blockUpdates;
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 915340fedc6c0b3d70ee065482dbe621b7c0b0a8..fc6fa65dae66d695b5fd732cc495d3649a28862c 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -2,6 +2,7 @@ package net.minecraft.server;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Splitter;
|
||||
+import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import co.aikar.timings.Timings;
|
||||
import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
|
||||
@@ -310,6 +311,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public volatile Thread shutdownThread; // Paper
|
||||
public volatile boolean abnormalExit = false; // Paper
|
||||
public boolean isIteratingOverLevels = false; // Paper
|
||||
+ public @Nullable DimensionDataStorage sharedDataStorage; // Slice
|
||||
|
||||
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
|
||||
AtomicReference<S> atomicreference = new AtomicReference();
|
||||
@@ -410,6 +412,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();
|
||||
|
||||
@@ -885,6 +893,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;
|
||||
}
|
||||
@@ -1101,6 +1110,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
throw new IllegalStateException("Failed to initialize server");
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ String sharedDataFolder = io.papermc.paper.configuration.GlobalConfiguration.get().misc.sharedDataFolder;
|
||||
+ if (!Strings.isNullOrEmpty(sharedDataFolder)) {
|
||||
+ File sharedDir = new File(sharedDataFolder);
|
||||
+ sharedDir.mkdirs();
|
||||
+ this.sharedDataStorage = new DimensionDataStorage(sharedDir, fixerUpper);
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
this.nextTickTime = Util.getMillis();
|
||||
this.statusIcon = (ServerStatus.Favicon) this.loadStatusIcon().orElse(null); // CraftBukkit - decompile error
|
||||
this.status = this.buildServerStatus();
|
||||
@@ -1413,6 +1431,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 af0720fb8bd334aac5493121c6373d87421204b4..564591e9f18dd6bb0f76ae4f153adcc0a228d4fa 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -2068,7 +2068,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;
|
||||
@@ -2082,12 +2082,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 defe31a5d3aa89a3d18b94f2ff005594e38754b3..637a86e74d633901fdd2f2f1ba6aa4ed49780ead 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,20 +1,9 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 18 Apr 2023 08:16:32 -0500
|
||||
Date: Mon, 12 Jun 2023 14:14:48 -0500
|
||||
Subject: [PATCH] Equipment Packet Caching
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
index 8d442c5a498ecf288a0cc0c54889c6e2fda849ce..1530d48a67ae548fd088edd3d575a1b8f694eb48 100644
|
||||
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
@@ -286,5 +286,6 @@ public class GlobalConfiguration extends ConfigurationPart {
|
||||
public boolean lagCompensateBlockBreaking = true;
|
||||
public boolean useDimensionTypeForCustomSpawners = false;
|
||||
public boolean strictAdvancementDimensionCheck = false;
|
||||
+ public String sharedDataFolder = "";
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||||
index 5a8f850b447fc3a4bd0eb0c505bbdfc8be7115e8..34d74735b7a7d258c6bd14bb7e5406934a208a31 100644
|
||||
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||||
@@ -35,77 +24,12 @@ index 5a8f850b447fc3a4bd0eb0c505bbdfc8be7115e8..34d74735b7a7d258c6bd14bb7e540693
|
||||
public ClientboundSetEquipmentPacket(FriendlyByteBuf buf) {
|
||||
this.entity = buf.readVarInt();
|
||||
EquipmentSlot[] equipmentSlots = EquipmentSlot.values();
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index fa14ab3d8117e9d357380d21d3c6a2cd1df7c04c..e5462d8d3f89c93c7c691a4759860be1ff8117fc 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -2,6 +2,7 @@ package net.minecraft.server;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Splitter;
|
||||
+import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import co.aikar.timings.Timings;
|
||||
import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
|
||||
@@ -313,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public volatile Thread shutdownThread; // Paper
|
||||
public volatile boolean abnormalExit = false; // Paper
|
||||
public boolean isIteratingOverLevels = false; // Paper
|
||||
+ public @Nullable DimensionDataStorage sharedDataStorage; // Slice
|
||||
|
||||
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
|
||||
AtomicReference<S> atomicreference = new AtomicReference();
|
||||
@@ -413,6 +415,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
+ // Slice start
|
||||
+ public DimensionDataStorage getMapDataStorage() {
|
||||
+ return sharedDataStorage != null ? sharedDataStorage : overworld().getDataStorage();
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
private void readScoreboard(DimensionDataStorage persistentStateManager) {
|
||||
ServerScoreboard scoreboardserver = this.getScoreboard();
|
||||
|
||||
@@ -890,6 +898,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
this.isSaving = true;
|
||||
this.getPlayerList().saveAll(); // Diff on change
|
||||
flag3 = this.saveAllChunks(suppressLogs, flush, force);
|
||||
+ if (sharedDataStorage != null) sharedDataStorage.save(); // Slice
|
||||
} finally {
|
||||
this.isSaving = false;
|
||||
}
|
||||
@@ -1105,6 +1114,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
throw new IllegalStateException("Failed to initialize server");
|
||||
}
|
||||
|
||||
+ // Slice start
|
||||
+ String sharedDataFolder = io.papermc.paper.configuration.GlobalConfiguration.get().misc.sharedDataFolder;
|
||||
+ if (!Strings.isNullOrEmpty(sharedDataFolder)) {
|
||||
+ File sharedDir = new File(sharedDataFolder);
|
||||
+ sharedDir.mkdirs();
|
||||
+ this.sharedDataStorage = new DimensionDataStorage(sharedDir, fixerUpper);
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
this.nextTickTime = Util.getMillis();
|
||||
this.statusIcon = (ServerStatus.Favicon) this.loadStatusIcon().orElse(null); // CraftBukkit - decompile error
|
||||
this.status = this.buildServerStatus();
|
||||
@@ -1417,6 +1435,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
level.saveIncrementally(fullSave);
|
||||
}
|
||||
}
|
||||
+ if (sharedDataStorage != null) sharedDataStorage.save(); // Slice
|
||||
} finally {
|
||||
this.isSaving = false;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
index b7fd8e70413c38923d0719aff803449e392383ac..d86836541f5eaa654d3dc452fe7cc15eafff4dfa 100644
|
||||
index a514a1f26e439b5959093488ec9905fec327a404..0ac580f3cf8f95025992420702d67ad56db2ba05 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
@@ -334,27 +334,8 @@ public class ServerEntity {
|
||||
consumer.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap));
|
||||
@@ -328,27 +328,8 @@ public class ServerEntity {
|
||||
sender.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap));
|
||||
}
|
||||
|
||||
- if (this.entity instanceof LivingEntity) {
|
||||
@@ -126,57 +50,19 @@ index b7fd8e70413c38923d0719aff803449e392383ac..d86836541f5eaa654d3dc452fe7cc15e
|
||||
- }
|
||||
-
|
||||
- if (!list.isEmpty()) {
|
||||
- consumer.accept(new ClientboundSetEquipmentPacket(this.entity.getId(), list));
|
||||
- sender.accept(new ClientboundSetEquipmentPacket(this.entity.getId(), list));
|
||||
- }
|
||||
- ((LivingEntity) this.entity).detectEquipmentUpdates(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending
|
||||
+ if (this.entity instanceof LivingEntity livingEntity) {
|
||||
+ livingEntity.sendEquipment(consumer, entityplayer); // Slice
|
||||
+ livingEntity.sendEquipment(sender, player); // Slice
|
||||
}
|
||||
|
||||
// CraftBukkit start - Fix for nonsensical head yaw
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index 5813349d484cf40c5b75de6e55dff95286285934..e24b0871819add31e00e1e3d782fda31a2ad312f 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -1926,7 +1926,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;
|
||||
@@ -1940,12 +1940,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
|
||||
// CraftBukkit start - MC-109346: Fix for nonsensical head yaw
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d054b5cd3f 100644
|
||||
index 836c007db96b115a0f7a869649e9ed4738920093..b6c320554693d1b55a385c45784feb45d7cac757 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -261,6 +261,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
@@ -263,6 +263,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
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
|
||||
@@ -185,7 +71,7 @@ index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d0
|
||||
|
||||
@Override
|
||||
public float getBukkitYaw() {
|
||||
@@ -3040,6 +3042,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
@@ -3071,6 +3073,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
if (map != null) {
|
||||
this.handleHandSwap(map);
|
||||
if (!map.isEmpty()) {
|
||||
@@ -193,20 +79,20 @@ index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d0
|
||||
this.handleEquipmentChanges(map);
|
||||
}
|
||||
}
|
||||
@@ -3132,7 +3135,25 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
@@ -3163,7 +3166,25 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
}
|
||||
|
||||
});
|
||||
- ((ServerLevel) this.level).getChunkSource().broadcast(this, new ClientboundSetEquipmentPacket(this.getId(), list));
|
||||
- ((ServerLevel) this.level()).getChunkSource().broadcast(this, new ClientboundSetEquipmentPacket(this.getId(), list));
|
||||
+
|
||||
+ // Slice start
|
||||
+ net.minecraft.server.level.ChunkMap.TrackedEntity entityTracker = ((ServerLevel) this.level).getChunkSource().chunkMap.entityMap.get(getId());
|
||||
+ net.minecraft.server.level.ChunkMap.TrackedEntity entityTracker = ((ServerLevel) this.level()).getChunkSource().chunkMap.entityMap.get(getId());
|
||||
+ if (entityTracker != null) {
|
||||
+ ClientboundSetEquipmentPacket packet = new ClientboundSetEquipmentPacket(this.getId(), list);
|
||||
+ for (net.minecraft.server.network.ServerPlayerConnection playerConnection : entityTracker.seenBy) {
|
||||
+ ServerPlayer player = playerConnection.getPlayer();
|
||||
+ org.bukkit.event.player.PlayerReceiveEquipmentEvent event = new org.bukkit.event.player.PlayerReceiveEquipmentEvent(player.getBukkitEntity(), getBukkitEntity());
|
||||
+ level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+ level().getCraftServer().getPluginManager().callEvent(event);
|
||||
+
|
||||
+ String tag = event.getTag();
|
||||
+ if (tag != null) {
|
||||
@@ -220,7 +106,7 @@ index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d0
|
||||
}
|
||||
|
||||
// Paper start - hide unnecessary item meta
|
||||
@@ -4402,4 +4423,74 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
@@ -4450,4 +4471,74 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||
public static record Fallsounds(SoundEvent small, SoundEvent big) {
|
||||
|
||||
}
|
||||
@@ -238,7 +124,7 @@ index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d0
|
||||
+ }
|
||||
+
|
||||
+ 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);
|
||||
+ this.level().getCraftServer().getPluginManager().callEvent(event);
|
||||
+ org.bukkit.inventory.ItemStack eventItem = event.getItemStack();
|
||||
+ return CraftItemStack.asNMSCopy(eventItem);
|
||||
+ });
|
||||
@@ -248,7 +134,7 @@ index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d0
|
||||
+ // Slice start
|
||||
+ public void sendEquipment(java.util.function.Consumer<net.minecraft.network.protocol.Packet<net.minecraft.network.protocol.game.ClientGamePacketListener>> consumer, ServerPlayer p) {
|
||||
+ org.bukkit.event.player.PlayerReceiveEquipmentEvent event = new org.bukkit.event.player.PlayerReceiveEquipmentEvent(p.getBukkitEntity(), getBukkitEntity());
|
||||
+ level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+ level().getCraftServer().getPluginManager().callEvent(event);
|
||||
+
|
||||
+ boolean sendEquipment = !event.isCancelled();
|
||||
+ String tag = event.getTag();
|
||||
@@ -295,24 +181,11 @@ index 72739d5949314b242869fd5fef3b5f0c076434d0..8fad6542fa814a6d35a90970119c88d0
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
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 defe31a5d3aa89a3d18b94f2ff005594e38754b3..637a86e74d633901fdd2f2f1ba6aa4ed49780ead 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()) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
index d43859f8aa7beed82dd3a146bb1086982cd0cda7..7d063ab5a136eebeb84b395dcb7b731dadc53e88 100644
|
||||
index b25f5931f836fd4d8695120f0bcb7c52deff8583..68507518df679a354534a82f32a011727ae7cea0 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
@@ -1071,4 +1071,14 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
@@ -1099,4 +1099,14 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
getHandle().knockback(strength, directionX, directionZ);
|
||||
};
|
||||
// Paper end
|
||||
66
patches/server/0032-Add-canDespawn-to-Warden.patch
Normal file
66
patches/server/0032-Add-canDespawn-to-Warden.patch
Normal file
@@ -0,0 +1,66 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 08:22:19 -0500
|
||||
Subject: [PATCH] Add canDespawn to Warden
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
|
||||
index 9afc81ccb237c3655d64cdbe8a0db9a4d7791043..286e2ad0887379b5b16ca3ca89a8f0d62be258e7 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
|
||||
@@ -588,7 +588,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
|
||||
}), (entity) -> {
|
||||
entity.load(nbt);
|
||||
}, () -> {
|
||||
- EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
|
||||
+ //EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.toString());
|
||||
});
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
|
||||
index 97b763431bc5015448ee7a26a340635a932c950b..e8b748eb16d7409a69dbd364a59dcf217ce701ec 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
|
||||
@@ -110,6 +110,7 @@ public class Warden extends Monster implements VibrationSystem {
|
||||
private final VibrationSystem.User vibrationUser = new Warden.VibrationUser();
|
||||
private VibrationSystem.Data vibrationData = new VibrationSystem.Data();
|
||||
AngerManagement angerManagement = new AngerManagement(this::canTargetEntity, Collections.emptyList());
|
||||
+ public boolean canDespawn; // Slice
|
||||
|
||||
public Warden(EntityType<? extends Monster> type, Level world) {
|
||||
super(type, world);
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java b/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
|
||||
index 03f16a5541de6bc95407aaa24741570c1993dc9e..07600fdd32a058d0e3f9828efdc18f5e76448663 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
|
||||
@@ -139,7 +139,13 @@ public class WardenAi {
|
||||
|
||||
public static void setDigCooldown(LivingEntity warden) {
|
||||
if (warden.getBrain().hasMemoryValue(MemoryModuleType.DIG_COOLDOWN)) {
|
||||
- warden.getBrain().setMemoryWithExpiry(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE, 1200L);
|
||||
+ // Slice start
|
||||
+ if (warden instanceof Warden nmsWarden && !nmsWarden.canDespawn) {
|
||||
+ warden.getBrain().setMemory(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE);
|
||||
+ } else {
|
||||
+ warden.getBrain().setMemoryWithExpiry(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE, 1200L);
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
||||
index 46e3cc146a4b109c4baaf94f42d825646abade68..b248150c047890f45fae75716e40e495752f3732 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
||||
@@ -86,4 +86,11 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde
|
||||
case ANGRY -> AngerLevel.ANGRY;
|
||||
};
|
||||
}
|
||||
+
|
||||
+ // Slice start
|
||||
+ @Override
|
||||
+ public void setCanDespawn(boolean canDespawn) {
|
||||
+ this.getHandle().canDespawn = canDespawn;
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
58
patches/server/0033-Save-DimensionDataStorage-async.patch
Normal file
58
patches/server/0033-Save-DimensionDataStorage-async.patch
Normal file
@@ -0,0 +1,58 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Mon, 26 Jun 2023 16:45:00 -0500
|
||||
Subject: [PATCH] Save DimensionDataStorage async
|
||||
|
||||
|
||||
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 637a86e74d633901fdd2f2f1ba6aa4ed49780ead..8cf3880d9168b5ba6b383ec921bfb490ea51ac38 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
|
||||
@@ -9,6 +9,8 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PushbackInputStream;
|
||||
import java.util.Map;
|
||||
+import java.util.concurrent.CompletableFuture;
|
||||
+import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import javax.annotation.Nullable;
|
||||
@@ -18,11 +20,12 @@ import net.minecraft.nbt.NbtIo;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.util.datafix.DataFixTypes;
|
||||
import net.minecraft.world.level.saveddata.SavedData;
|
||||
+import org.bukkit.Bukkit;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public class DimensionDataStorage {
|
||||
private static final Logger LOGGER = LogUtils.getLogger();
|
||||
- public final Map<String, SavedData> cache = Maps.newHashMap();
|
||||
+ public final Map<String, SavedData> cache = new ConcurrentHashMap<>();
|
||||
private final DataFixer fixerUpper;
|
||||
private final File dataFolder;
|
||||
|
||||
@@ -51,7 +54,7 @@ public class DimensionDataStorage {
|
||||
SavedData savedData = this.cache.get(id);
|
||||
if (savedData == null && !this.cache.containsKey(id)) {
|
||||
savedData = this.readSavedData(readFunction, id);
|
||||
- this.cache.put(id, savedData);
|
||||
+ if (savedData != null) this.cache.put(id, savedData);
|
||||
}
|
||||
|
||||
return (T)savedData;
|
||||
@@ -119,11 +122,12 @@ public class DimensionDataStorage {
|
||||
}
|
||||
|
||||
public void save() {
|
||||
- this.cache.forEach((id, state) -> {
|
||||
+ // Slice start - run async
|
||||
+ CompletableFuture.runAsync(() -> this.cache.forEach((id, state) -> {
|
||||
if (state != null) {
|
||||
state.save(this.getDataFile(id));
|
||||
}
|
||||
-
|
||||
- });
|
||||
+ }));
|
||||
+ // Slice end
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 22 Aug 2023 06:22:16 -0500
|
||||
Subject: [PATCH] Add reason to PlayerConnectionCloseEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
||||
index 2ff578e4a953ffcf5176815ba8e3f06f73499989..f9a1b0e3be862cc00370c130621a07be5deebf0c 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
||||
@@ -193,6 +193,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
|
||||
|
||||
this.connection.send(new ClientboundDisconnectPacket(ichatmutablecomponent));
|
||||
this.connection.disconnect(ichatmutablecomponent);
|
||||
+ new com.destroystokyo.paper.event.player.PlayerConnectionCloseEvent(this.gameProfile.getId(), this.gameProfile.getName(), ((java.net.InetSocketAddress)this.connection.address).getAddress(), com.destroystokyo.paper.event.player.PlayerConnectionCloseEvent.ConnectionCloseReason.INVALID_PLAYER_DATA, false).callEvent(); // Slice
|
||||
}
|
||||
}
|
||||
|
||||
314
patches/server/0035-Disable-feature-generation.patch
Normal file
314
patches/server/0035-Disable-feature-generation.patch
Normal file
@@ -0,0 +1,314 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sat, 26 Aug 2023 07:39:46 -0500
|
||||
Subject: [PATCH] Disable feature generation
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/GeodeFeature.java b/src/main/java/net/minecraft/world/level/levelgen/feature/GeodeFeature.java
|
||||
index f945fae50983424091b58f83ed14f2e8f2621619..b4c16e355ebadf06b9405c06e2b598e7a478f6ab 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/feature/GeodeFeature.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/feature/GeodeFeature.java
|
||||
@@ -33,139 +33,5 @@ public class GeodeFeature extends Feature<GeodeConfiguration> {
|
||||
}
|
||||
|
||||
@Override
|
||||
- public boolean place(FeaturePlaceContext<GeodeConfiguration> context) {
|
||||
- GeodeConfiguration geodeConfiguration = context.config();
|
||||
- RandomSource randomSource = context.random();
|
||||
- BlockPos blockPos = context.origin();
|
||||
- WorldGenLevel worldGenLevel = context.level();
|
||||
- int i = geodeConfiguration.minGenOffset;
|
||||
- int j = geodeConfiguration.maxGenOffset;
|
||||
- List<Pair<BlockPos, Integer>> list = Lists.newLinkedList();
|
||||
- int k = geodeConfiguration.distributionPoints.sample(randomSource);
|
||||
- WorldgenRandom worldgenRandom = new WorldgenRandom(new LegacyRandomSource(worldGenLevel.getSeed()));
|
||||
- NormalNoise normalNoise = NormalNoise.create(worldgenRandom, -4, 1.0D);
|
||||
- List<BlockPos> list2 = Lists.newLinkedList();
|
||||
- double d = (double)k / (double)geodeConfiguration.outerWallDistance.getMaxValue();
|
||||
- GeodeLayerSettings geodeLayerSettings = geodeConfiguration.geodeLayerSettings;
|
||||
- GeodeBlockSettings geodeBlockSettings = geodeConfiguration.geodeBlockSettings;
|
||||
- GeodeCrackSettings geodeCrackSettings = geodeConfiguration.geodeCrackSettings;
|
||||
- double e = 1.0D / Math.sqrt(geodeLayerSettings.filling);
|
||||
- double f = 1.0D / Math.sqrt(geodeLayerSettings.innerLayer + d);
|
||||
- double g = 1.0D / Math.sqrt(geodeLayerSettings.middleLayer + d);
|
||||
- double h = 1.0D / Math.sqrt(geodeLayerSettings.outerLayer + d);
|
||||
- double l = 1.0D / Math.sqrt(geodeCrackSettings.baseCrackSize + randomSource.nextDouble() / 2.0D + (k > 3 ? d : 0.0D));
|
||||
- boolean bl = (double)randomSource.nextFloat() < geodeCrackSettings.generateCrackChance;
|
||||
- int m = 0;
|
||||
-
|
||||
- for(int n = 0; n < k; ++n) {
|
||||
- int o = geodeConfiguration.outerWallDistance.sample(randomSource);
|
||||
- int p = geodeConfiguration.outerWallDistance.sample(randomSource);
|
||||
- int q = geodeConfiguration.outerWallDistance.sample(randomSource);
|
||||
- BlockPos blockPos2 = blockPos.offset(o, p, q);
|
||||
- BlockState blockState = worldGenLevel.getBlockState(blockPos2);
|
||||
- if (blockState.isAir() || blockState.is(BlockTags.GEODE_INVALID_BLOCKS)) {
|
||||
- ++m;
|
||||
- if (m > geodeConfiguration.invalidBlocksThreshold) {
|
||||
- return false;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- list.add(Pair.of(blockPos2, geodeConfiguration.pointOffset.sample(randomSource)));
|
||||
- }
|
||||
-
|
||||
- if (bl) {
|
||||
- int r = randomSource.nextInt(4);
|
||||
- int s = k * 2 + 1;
|
||||
- if (r == 0) {
|
||||
- list2.add(blockPos.offset(s, 7, 0));
|
||||
- list2.add(blockPos.offset(s, 5, 0));
|
||||
- list2.add(blockPos.offset(s, 1, 0));
|
||||
- } else if (r == 1) {
|
||||
- list2.add(blockPos.offset(0, 7, s));
|
||||
- list2.add(blockPos.offset(0, 5, s));
|
||||
- list2.add(blockPos.offset(0, 1, s));
|
||||
- } else if (r == 2) {
|
||||
- list2.add(blockPos.offset(s, 7, s));
|
||||
- list2.add(blockPos.offset(s, 5, s));
|
||||
- list2.add(blockPos.offset(s, 1, s));
|
||||
- } else {
|
||||
- list2.add(blockPos.offset(0, 7, 0));
|
||||
- list2.add(blockPos.offset(0, 5, 0));
|
||||
- list2.add(blockPos.offset(0, 1, 0));
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- List<BlockPos> list3 = Lists.newArrayList();
|
||||
- Predicate<BlockState> predicate = isReplaceable(geodeConfiguration.geodeBlockSettings.cannotReplace);
|
||||
-
|
||||
- for(BlockPos blockPos3 : BlockPos.betweenClosed(blockPos.offset(i, i, i), blockPos.offset(j, j, j))) {
|
||||
- double t = normalNoise.getValue((double)blockPos3.getX(), (double)blockPos3.getY(), (double)blockPos3.getZ()) * geodeConfiguration.noiseMultiplier;
|
||||
- double u = 0.0D;
|
||||
- double v = 0.0D;
|
||||
-
|
||||
- for(Pair<BlockPos, Integer> pair : list) {
|
||||
- u += Mth.invSqrt(blockPos3.distSqr(pair.getFirst()) + (double)pair.getSecond().intValue()) + t;
|
||||
- }
|
||||
-
|
||||
- for(BlockPos blockPos4 : list2) {
|
||||
- v += Mth.invSqrt(blockPos3.distSqr(blockPos4) + (double)geodeCrackSettings.crackPointOffset) + t;
|
||||
- }
|
||||
-
|
||||
- if (!(u < h)) {
|
||||
- if (bl && v >= l && u < e) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, Blocks.AIR.defaultBlockState(), predicate);
|
||||
-
|
||||
- for(Direction direction : DIRECTIONS) {
|
||||
- BlockPos blockPos5 = blockPos3.relative(direction);
|
||||
- FluidState fluidState = worldGenLevel.getFluidState(blockPos5);
|
||||
- if (!fluidState.isEmpty()) {
|
||||
- worldGenLevel.scheduleTick(blockPos5, fluidState.getType(), 0);
|
||||
- }
|
||||
- }
|
||||
- } else if (u >= e) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, geodeBlockSettings.fillingProvider.getState(randomSource, blockPos3), predicate);
|
||||
- } else if (u >= f) {
|
||||
- boolean bl2 = (double)randomSource.nextFloat() < geodeConfiguration.useAlternateLayer0Chance;
|
||||
- if (bl2) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, geodeBlockSettings.alternateInnerLayerProvider.getState(randomSource, blockPos3), predicate);
|
||||
- } else {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, geodeBlockSettings.innerLayerProvider.getState(randomSource, blockPos3), predicate);
|
||||
- }
|
||||
-
|
||||
- if ((!geodeConfiguration.placementsRequireLayer0Alternate || bl2) && (double)randomSource.nextFloat() < geodeConfiguration.usePotentialPlacementsChance) {
|
||||
- list3.add(blockPos3.immutable());
|
||||
- }
|
||||
- } else if (u >= g) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, geodeBlockSettings.middleLayerProvider.getState(randomSource, blockPos3), predicate);
|
||||
- } else if (u >= h) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, geodeBlockSettings.outerLayerProvider.getState(randomSource, blockPos3), predicate);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- List<BlockState> list4 = geodeBlockSettings.innerPlacements;
|
||||
-
|
||||
- for(BlockPos blockPos6 : list3) {
|
||||
- BlockState blockState2 = Util.getRandom(list4, randomSource);
|
||||
-
|
||||
- for(Direction direction2 : DIRECTIONS) {
|
||||
- if (blockState2.hasProperty(BlockStateProperties.FACING)) {
|
||||
- blockState2 = blockState2.setValue(BlockStateProperties.FACING, direction2);
|
||||
- }
|
||||
-
|
||||
- BlockPos blockPos7 = blockPos6.relative(direction2);
|
||||
- BlockState blockState3 = worldGenLevel.getBlockState(blockPos7);
|
||||
- if (blockState2.hasProperty(BlockStateProperties.WATERLOGGED)) {
|
||||
- blockState2 = blockState2.setValue(BlockStateProperties.WATERLOGGED, Boolean.valueOf(blockState3.getFluidState().isSource()));
|
||||
- }
|
||||
-
|
||||
- if (BuddingAmethystBlock.canClusterGrowAtState(blockState3)) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos7, blockState2, predicate);
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return true;
|
||||
- }
|
||||
+ public boolean place(FeaturePlaceContext<GeodeConfiguration> context) {return false;}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java b/src/main/java/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java
|
||||
index 3c474c8fc937df5aebfb063be8109053a91e8bb4..2a36bba04d584fdccbb06dc4991064a245082991 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java
|
||||
@@ -30,103 +30,7 @@ public class MonsterRoomFeature extends Feature<NoneFeatureConfiguration> {
|
||||
}
|
||||
|
||||
@Override
|
||||
- public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> context) {
|
||||
- Predicate<BlockState> predicate = Feature.isReplaceable(BlockTags.FEATURES_CANNOT_REPLACE);
|
||||
- BlockPos blockPos = context.origin();
|
||||
- RandomSource randomSource = context.random();
|
||||
- WorldGenLevel worldGenLevel = context.level();
|
||||
- int i = 3;
|
||||
- int j = randomSource.nextInt(2) + 2;
|
||||
- int k = -j - 1;
|
||||
- int l = j + 1;
|
||||
- int m = -1;
|
||||
- int n = 4;
|
||||
- int o = randomSource.nextInt(2) + 2;
|
||||
- int p = -o - 1;
|
||||
- int q = o + 1;
|
||||
- int r = 0;
|
||||
-
|
||||
- for(int s = k; s <= l; ++s) {
|
||||
- for(int t = -1; t <= 4; ++t) {
|
||||
- for(int u = p; u <= q; ++u) {
|
||||
- BlockPos blockPos2 = blockPos.offset(s, t, u);
|
||||
- boolean bl = worldGenLevel.getBlockState(blockPos2).isSolid();
|
||||
- if (t == -1 && !bl) {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- if (t == 4 && !bl) {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- if ((s == k || s == l || u == p || u == q) && t == 0 && worldGenLevel.isEmptyBlock(blockPos2) && worldGenLevel.isEmptyBlock(blockPos2.above())) {
|
||||
- ++r;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (r >= 1 && r <= 5) {
|
||||
- for(int v = k; v <= l; ++v) {
|
||||
- for(int w = 3; w >= -1; --w) {
|
||||
- for(int x = p; x <= q; ++x) {
|
||||
- BlockPos blockPos3 = blockPos.offset(v, w, x);
|
||||
- BlockState blockState = worldGenLevel.getBlockState(blockPos3);
|
||||
- if (v != k && w != -1 && x != p && v != l && w != 4 && x != q) {
|
||||
- if (!blockState.is(Blocks.CHEST) && !blockState.is(Blocks.SPAWNER)) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, AIR, predicate);
|
||||
- }
|
||||
- } else if (blockPos3.getY() >= worldGenLevel.getMinBuildHeight() && !worldGenLevel.getBlockState(blockPos3.below()).isSolid()) {
|
||||
- worldGenLevel.setBlock(blockPos3, AIR, 2);
|
||||
- } else if (blockState.isSolid() && !blockState.is(Blocks.CHEST)) {
|
||||
- if (w == -1 && randomSource.nextInt(4) != 0) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, Blocks.MOSSY_COBBLESTONE.defaultBlockState(), predicate);
|
||||
- } else {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos3, Blocks.COBBLESTONE.defaultBlockState(), predicate);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- for(int y = 0; y < 2; ++y) {
|
||||
- for(int z = 0; z < 3; ++z) {
|
||||
- int aa = blockPos.getX() + randomSource.nextInt(j * 2 + 1) - j;
|
||||
- int ab = blockPos.getY();
|
||||
- int ac = blockPos.getZ() + randomSource.nextInt(o * 2 + 1) - o;
|
||||
- BlockPos blockPos4 = new BlockPos(aa, ab, ac);
|
||||
- if (worldGenLevel.isEmptyBlock(blockPos4)) {
|
||||
- int ad = 0;
|
||||
-
|
||||
- for(Direction direction : Direction.Plane.HORIZONTAL) {
|
||||
- if (worldGenLevel.getBlockState(blockPos4.relative(direction)).isSolid()) {
|
||||
- ++ad;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (ad == 1) {
|
||||
- this.safeSetBlock(worldGenLevel, blockPos4, StructurePiece.reorient(worldGenLevel, blockPos4, Blocks.CHEST.defaultBlockState()), predicate);
|
||||
- RandomizableContainerBlockEntity.setLootTable(worldGenLevel, randomSource, blockPos4, BuiltInLootTables.SIMPLE_DUNGEON);
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- this.safeSetBlock(worldGenLevel, blockPos, Blocks.SPAWNER.defaultBlockState(), predicate);
|
||||
- BlockEntity blockEntity = worldGenLevel.getBlockEntity(blockPos);
|
||||
- if (blockEntity instanceof SpawnerBlockEntity) {
|
||||
- SpawnerBlockEntity spawnerBlockEntity = (SpawnerBlockEntity)blockEntity;
|
||||
- spawnerBlockEntity.setEntityId(this.randomEntityId(randomSource), randomSource);
|
||||
- } else {
|
||||
- LOGGER.error("Failed to fetch mob spawner entity at ({}, {}, {})", blockPos.getX(), blockPos.getY(), blockPos.getZ());
|
||||
- }
|
||||
-
|
||||
- return true;
|
||||
- } else {
|
||||
- return false;
|
||||
- }
|
||||
- }
|
||||
+ public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> context) {return false;}
|
||||
|
||||
private EntityType<?> randomEntityId(RandomSource random) {
|
||||
return Util.getRandom(MOBS, random);
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/SculkPatchFeature.java b/src/main/java/net/minecraft/world/level/levelgen/feature/SculkPatchFeature.java
|
||||
index f5aea54f81dcd3072e36ddf3c4c6ded848c2c540..1539a644d89b2fee67a5534870ca177b4992409d 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/feature/SculkPatchFeature.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/feature/SculkPatchFeature.java
|
||||
@@ -19,48 +19,7 @@ public class SculkPatchFeature extends Feature<SculkPatchConfiguration> {
|
||||
}
|
||||
|
||||
@Override
|
||||
- public boolean place(FeaturePlaceContext<SculkPatchConfiguration> context) {
|
||||
- WorldGenLevel worldGenLevel = context.level();
|
||||
- BlockPos blockPos = context.origin();
|
||||
- if (!this.canSpreadFrom(worldGenLevel, blockPos)) {
|
||||
- return false;
|
||||
- } else {
|
||||
- SculkPatchConfiguration sculkPatchConfiguration = context.config();
|
||||
- RandomSource randomSource = context.random();
|
||||
- SculkSpreader sculkSpreader = SculkSpreader.createWorldGenSpreader();
|
||||
- int i = sculkPatchConfiguration.spreadRounds() + sculkPatchConfiguration.growthRounds();
|
||||
-
|
||||
- for(int j = 0; j < i; ++j) {
|
||||
- for(int k = 0; k < sculkPatchConfiguration.chargeCount(); ++k) {
|
||||
- sculkSpreader.addCursors(blockPos, sculkPatchConfiguration.amountPerCharge());
|
||||
- }
|
||||
-
|
||||
- boolean bl = j < sculkPatchConfiguration.spreadRounds();
|
||||
-
|
||||
- for(int l = 0; l < sculkPatchConfiguration.spreadAttempts(); ++l) {
|
||||
- sculkSpreader.updateCursors(worldGenLevel, blockPos, randomSource, bl);
|
||||
- }
|
||||
-
|
||||
- sculkSpreader.clear();
|
||||
- }
|
||||
-
|
||||
- BlockPos blockPos2 = blockPos.below();
|
||||
- if (randomSource.nextFloat() <= sculkPatchConfiguration.catalystChance() && worldGenLevel.getBlockState(blockPos2).isCollisionShapeFullBlock(worldGenLevel, blockPos2)) {
|
||||
- worldGenLevel.setBlock(blockPos, Blocks.SCULK_CATALYST.defaultBlockState(), 3);
|
||||
- }
|
||||
-
|
||||
- int m = sculkPatchConfiguration.extraRareGrowths().sample(randomSource);
|
||||
-
|
||||
- for(int n = 0; n < m; ++n) {
|
||||
- BlockPos blockPos3 = blockPos.offset(randomSource.nextInt(5) - 2, 0, randomSource.nextInt(5) - 2);
|
||||
- if (worldGenLevel.getBlockState(blockPos3).isAir() && worldGenLevel.getBlockState(blockPos3.below()).isFaceSturdy(worldGenLevel, blockPos3.below(), Direction.UP)) {
|
||||
- worldGenLevel.setBlock(blockPos3, Blocks.SCULK_SHRIEKER.defaultBlockState().setValue(SculkShriekerBlock.CAN_SUMMON, Boolean.valueOf(true)), 3);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
+ public boolean place(FeaturePlaceContext<SculkPatchConfiguration> context) { return false; }
|
||||
|
||||
private boolean canSpreadFrom(LevelAccessor world, BlockPos pos) {
|
||||
BlockState blockState = world.getBlockState(pos);
|
||||
27
patches/server/0036-Biome-freeze-override.patch
Normal file
27
patches/server/0036-Biome-freeze-override.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 29 Aug 2023 09:23:11 -0500
|
||||
Subject: [PATCH] Biome freeze override
|
||||
|
||||
|
||||
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 65012a12e1430956ef55ced56773e6354ac26444..0178017cb2d871dd344e3da910ee724cac05d7e5 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/biome/Biome.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/biome/Biome.java
|
||||
@@ -76,6 +76,7 @@ public final class Biome {
|
||||
return long2FloatLinkedOpenHashMap;
|
||||
});
|
||||
});
|
||||
+ public Boolean canFreeze = null; // Slice
|
||||
|
||||
Biome(Biome.ClimateSettings weather, BiomeSpecialEffects effects, BiomeGenerationSettings generationSettings, MobSpawnSettings spawnSettings) {
|
||||
this.climateSettings = weather;
|
||||
@@ -138,6 +139,8 @@ public final class Biome {
|
||||
}
|
||||
|
||||
public boolean shouldFreeze(LevelReader world, BlockPos pos, boolean doWaterCheck) {
|
||||
+ if (canFreeze != null) return canFreeze; // Slice
|
||||
+
|
||||
if (this.warmEnoughToRain(pos)) {
|
||||
return false;
|
||||
} else {
|
||||
19
patches/server/0037-Change-KeepAlive-interval.patch
Normal file
19
patches/server/0037-Change-KeepAlive-interval.patch
Normal file
@@ -0,0 +1,19 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Tue, 3 Oct 2023 09:18:59 -0500
|
||||
Subject: [PATCH] Change KeepAlive interval
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 42e61e55ef45935e1f690eefa56bc36842cdd974..049c1417968d89ba7b6208339e4a812bc72e007b 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -409,7 +409,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
this.disconnect(Component.translatable("disconnect.timeout", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause
|
||||
}
|
||||
} else {
|
||||
- if (elapsedTime >= 15000L) { // 15 seconds
|
||||
+ if (elapsedTime >= 5000L) { // 15 seconds // Slice -> 5s
|
||||
this.keepAlivePending = true;
|
||||
this.keepAliveTime = currentTime;
|
||||
this.keepAliveChallenge = currentTime;
|
||||
61
patches/server/0038-Non-saveable-entities.patch
Normal file
61
patches/server/0038-Non-saveable-entities.patch
Normal file
@@ -0,0 +1,61 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sat, 21 Oct 2023 11:27:52 -0500
|
||||
Subject: [PATCH] Non-saveable entities
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java
|
||||
index 7e8dc9e8f381abfdcce2746edc93122d623622d1..303e5ed4d5cf2a64b998656bfd189f19f8c8fcde 100644
|
||||
--- a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java
|
||||
+++ b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java
|
||||
@@ -118,7 +118,7 @@ public final class ChunkEntitySlices {
|
||||
// removed by us below
|
||||
continue;
|
||||
}
|
||||
- if (entity.shouldBeSaved()) {
|
||||
+ if (entity.shouldBeSaved() || !entity.saveable) { // Slice
|
||||
entity.setRemoved(Entity.RemovalReason.UNLOADED_TO_CHUNK);
|
||||
if (entity.isVehicle()) {
|
||||
// we cannot assume that these entities are contained within this chunk, because entities can
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index b23b6be85496d031b81b2d3abb9690322c340a80..eb2ef004860c89fba346c8025ae3c645106a21e6 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -418,6 +418,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
|
||||
public boolean collidingWithWorldBorder; // Paper
|
||||
public boolean fixedPose = false; // Paper
|
||||
+ public boolean saveable = true; // Slice
|
||||
|
||||
public void setOrigin(@javax.annotation.Nonnull Location location) {
|
||||
this.origin = location.toVector();
|
||||
@@ -4703,7 +4704,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
|
||||
@Override
|
||||
public boolean shouldBeSaved() {
|
||||
- return this.removalReason != null && !this.removalReason.shouldSave() ? false : (this.isPassenger() ? false : !this.isVehicle() || !this.hasAnyPlayerPassengers()); // Paper - rewrite chunk system - it should check if the entity has ANY player passengers
|
||||
+ return this.saveable && this.removalReason != null && !this.removalReason.shouldSave() ? false : (this.isPassenger() ? false : !this.isVehicle() || !this.hasAnyPlayerPassengers()); // Paper - rewrite chunk system - it should check if the entity has ANY player passengers // Slice - add saveable check
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
index 2dbe8b870fd39b4d22e9725912f443757ae70761..0cc2d78c68c87c7dce3fbd40f5ba946d7776daa0 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
@@ -1507,4 +1507,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
return this.getHandle().getScoreboardName();
|
||||
}
|
||||
// Paper end - entity scoreboard name
|
||||
+
|
||||
+ // Slice start
|
||||
+ @Override
|
||||
+ public boolean isSaveable() {
|
||||
+ return this.entity.saveable;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setSaveable(boolean saveable) {
|
||||
+ this.entity.saveable = saveable;
|
||||
+ }
|
||||
+ // Slice end
|
||||
}
|
||||
24
patches/server/0039-ChunkStatusChangeEvent.patch
Normal file
24
patches/server/0039-ChunkStatusChangeEvent.patch
Normal file
@@ -0,0 +1,24 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Sun, 22 Oct 2023 08:41:08 -0500
|
||||
Subject: [PATCH] ChunkStatusChangeEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
|
||||
index 51304c5cf4b0ac7646693ef97ef4a3847d3342b5..21976eeda150d3d7e396ebabdf6416dd65560dbd 100644
|
||||
--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
|
||||
+++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
|
||||
@@ -1324,6 +1324,13 @@ public final class NewChunkHolder {
|
||||
// chunks cannot downgrade state while status is pending a change
|
||||
final LevelChunk chunk = (LevelChunk)this.currentChunk;
|
||||
|
||||
+ // Slice start
|
||||
+ new com.destroystokyo.paper.event.chunk.ChunkStatusChangeEvent(new org.bukkit.craftbukkit.CraftChunk(chunk),
|
||||
+ com.destroystokyo.paper.event.chunk.ChunkStatusChangeEvent.ChunkStatus.valueOf(currState.name()),
|
||||
+ com.destroystokyo.paper.event.chunk.ChunkStatusChangeEvent.ChunkStatus.valueOf(nextState.name()))
|
||||
+ .callEvent();
|
||||
+ // Slice end
|
||||
+
|
||||
// Note: we assume that only load/unload contain plugin logic
|
||||
// plugin logic is anything stupid enough to possibly change the chunk status while it is already
|
||||
// being changed (i.e during load it is possible it will try to set to full ticking)
|
||||
@@ -0,0 +1,49 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Wed, 25 Oct 2023 17:05:29 -0500
|
||||
Subject: [PATCH] Disable sending Entity Movement Packets
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
index 0ac580f3cf8f95025992420702d67ad56db2ba05..676427c69ab445cef3a81628ed34cb6d4f018e8e 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
@@ -148,7 +148,7 @@ public class ServerEntity {
|
||||
boolean flag = Math.abs(i - this.yRotp) >= 1 || Math.abs(j - this.xRotp) >= 1;
|
||||
|
||||
if (flag) {
|
||||
- this.broadcast.accept(new ClientboundMoveEntityPacket.Rot(this.entity.getId(), (byte) i, (byte) j, this.entity.onGround()));
|
||||
+ if (entity.sendMovementPackets) this.broadcast.accept(new ClientboundMoveEntityPacket.Rot(this.entity.getId(), (byte) i, (byte) j, this.entity.onGround())); // Slice
|
||||
this.yRotp = i;
|
||||
this.xRotp = j;
|
||||
}
|
||||
@@ -183,14 +183,14 @@ public class ServerEntity {
|
||||
if (!flag6 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.onGround()&& !(io.papermc.paper.configuration.GlobalConfiguration.get().collisions.sendFullPosForHardCollidingEntities && this.entity.hardCollides())) { // Paper - send full pos for hard colliding entities to prevent collision problems due to desync
|
||||
if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) {
|
||||
if (flag2) {
|
||||
- packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround());
|
||||
+ if (entity.sendMovementPackets) packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround()); // Slice
|
||||
flag4 = true;
|
||||
} else if (flag3) {
|
||||
- packet1 = new ClientboundMoveEntityPacket.Rot(this.entity.getId(), (byte) i, (byte) j, this.entity.onGround());
|
||||
+ if (entity.sendMovementPackets) packet1 = new ClientboundMoveEntityPacket.Rot(this.entity.getId(), (byte) i, (byte) j, this.entity.onGround()); // Slice
|
||||
flag5 = true;
|
||||
}
|
||||
} else {
|
||||
- packet1 = new ClientboundMoveEntityPacket.PosRot(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), (byte) i, (byte) j, this.entity.onGround());
|
||||
+ if (entity.sendMovementPackets) packet1 = new ClientboundMoveEntityPacket.PosRot(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), (byte) i, (byte) j, this.entity.onGround()); // Slice
|
||||
flag4 = true;
|
||||
flag5 = true;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index eb2ef004860c89fba346c8025ae3c645106a21e6..c955bbc0348dad7ffd4bcc3a5fa17f0de6f1aed6 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -419,6 +419,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
public boolean collidingWithWorldBorder; // Paper
|
||||
public boolean fixedPose = false; // Paper
|
||||
public boolean saveable = true; // Slice
|
||||
+ public boolean sendMovementPackets = true; // Slice
|
||||
|
||||
public void setOrigin(@javax.annotation.Nonnull Location location) {
|
||||
this.origin = location.toVector();
|
||||
45
patches/server/0041-Player-spawnsOwnMobs.patch
Normal file
45
patches/server/0041-Player-spawnsOwnMobs.patch
Normal file
@@ -0,0 +1,45 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Thu, 7 Dec 2023 08:48:41 -0600
|
||||
Subject: [PATCH] Player spawnsOwnMobs
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
index acbcdc8cb1523044b1657e03a141fae6389a3686..000a2c8d30d7d72a460e2fc6205088b81a8bfe3a 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
@@ -521,7 +521,7 @@ public class ServerChunkCache extends ChunkSource {
|
||||
// Paper start - optimize isOutisdeRange
|
||||
ChunkMap playerChunkMap = this.chunkMap;
|
||||
for (ServerPlayer player : this.level.players) {
|
||||
- if (!player.affectsSpawning || player.isSpectator()) {
|
||||
+ if (!player.affectsSpawning || player.isSpectator() || player.spawnsOwnMobs) { // Slice
|
||||
playerChunkMap.playerMobSpawnMap.remove(player);
|
||||
continue;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index 564591e9f18dd6bb0f76ae4f153adcc0a228d4fa..578535732d442b524536bdd76d6a4badeed84fbd 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -770,7 +770,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
// Paper start - optimise checkDespawn
|
||||
this.playersAffectingSpawning.clear();
|
||||
for (ServerPlayer player : this.players) {
|
||||
- if (net.minecraft.world.entity.EntitySelector.PLAYER_AFFECTS_SPAWNING.test(player)) {
|
||||
+ if (!player.spawnsOwnMobs && net.minecraft.world.entity.EntitySelector.PLAYER_AFFECTS_SPAWNING.test(player)) { // Slice
|
||||
this.playersAffectingSpawning.add(player);
|
||||
}
|
||||
}
|
||||
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 15515e871c89498ec936ab24871741f883f18a3b..16fbdbe12d54fbc8d54403979ee2a89322a14dd2 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||
@@ -188,6 +188,8 @@ public abstract class Player extends LivingEntity {
|
||||
public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET;
|
||||
// Paper end
|
||||
|
||||
+ public boolean spawnsOwnMobs = false; // Slice
|
||||
+
|
||||
// CraftBukkit start
|
||||
public boolean fauxSleeping;
|
||||
public int oldLevel = -1;
|
||||
42
patches/server/0042-Set-location-on-a-Custom-Inventory.patch
Normal file
42
patches/server/0042-Set-location-on-a-Custom-Inventory.patch
Normal file
@@ -0,0 +1,42 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cryptite <cryptite@gmail.com>
|
||||
Date: Fri, 8 Dec 2023 08:02:07 -0600
|
||||
Subject: [PATCH] Set location on a Custom Inventory
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
|
||||
index da1c1fe0faf6819b15a81d6ad53370948e5f984f..84eff85e98484c9701e203bb1fa61435ee88bab4 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
|
||||
@@ -69,6 +69,14 @@ public class CraftInventoryCustom extends CraftInventory {
|
||||
}
|
||||
// Paper end
|
||||
|
||||
+ // Slice start
|
||||
+ public void setLocation(Location location) {
|
||||
+ if (this.inventory instanceof MinecraftInventory minecraftInventory) {
|
||||
+ minecraftInventory.location = location;
|
||||
+ }
|
||||
+ }
|
||||
+ // Slice end
|
||||
+
|
||||
static class MinecraftInventory implements Container {
|
||||
private final NonNullList<ItemStack> items;
|
||||
private int maxStack = MAX_STACK;
|
||||
@@ -77,6 +85,7 @@ public class CraftInventoryCustom extends CraftInventory {
|
||||
private final net.kyori.adventure.text.Component adventure$title; // Paper
|
||||
private InventoryType type;
|
||||
private final InventoryHolder owner;
|
||||
+ private Location location; // Slice
|
||||
|
||||
// Paper start
|
||||
public MinecraftInventory(InventoryHolder owner, InventoryType type, net.kyori.adventure.text.Component title) {
|
||||
@@ -239,7 +248,7 @@ public class CraftInventoryCustom extends CraftInventory {
|
||||
|
||||
@Override
|
||||
public Location getLocation() {
|
||||
- return null;
|
||||
+ return location;
|
||||
}
|
||||
|
||||
// Paper start
|
||||
Reference in New Issue
Block a user