mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@855637f Updated Upstream (CraftBukkit) (#7624) PaperMC/Paper@5eb61dd Buffer OOB setBlock calls PaperMC/Paper@7b46444 Properly create profiles with custom name/uuid (#7558) PaperMC/Paper@a686ff5 Add more missing entity API (#7592) PaperMC/Paper@993f828 Add TameableDeathMessageEvent (#5392) PaperMC/Paper@a939d6e Fix generator settings string for flat-type worlds (#7568) PaperMC/Paper@ab666a4 Deprecating remaining blockkey methods (#7638) PaperMC/Paper@e7d928a Fix EntityChangeBlockEvent#getBlockData for when sheep eats grass block (#7646) Pufferfish Changes: pufferfish-gg/Pufferfish@79b9d86 Updated Upstream (Paper) pufferfish-gg/Pufferfish@a9bdca9 Updated Upstream (Paper) pufferfish-gg/Pufferfish@9b5f954 Update Simple YAML pufferfish-gg/Pufferfish@b48e951 Updated Upstream (Paper) pufferfish-gg/Pufferfish@2499975 Updated Upstream (Paper) pufferfish-gg/Pufferfish@6f42f6f Update readme and use LF because we're not savages
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
group = org.purpurmc.purpur
|
||||
version = 1.18.2-R0.1-SNAPSHOT
|
||||
|
||||
paperCommit = bc68ee09be9606437f1263746d46d2632bcf08f6
|
||||
paperCommit = e7d928a8e169360c31c8539d0ddb0d376a87f358
|
||||
|
||||
org.gradle.caching = true
|
||||
org.gradle.parallel = true
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Bring back server name
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
||||
index 944f9b87a11472ac6d7e328acc00bf09f899e648..9ac777370b433a586045056b212a669b8fa5f60c 100644
|
||||
index c093ba024cfd951be1afc4100d899ed8f70ab003..83bd664304e972c04fb21ebad857feec7062485d 100644
|
||||
--- a/src/main/java/org/bukkit/Bukkit.java
|
||||
+++ b/src/main/java/org/bukkit/Bukkit.java
|
||||
@@ -2312,4 +2312,15 @@ public final class Bukkit {
|
||||
@@ -2322,4 +2322,15 @@ public final class Bukkit {
|
||||
public static Server.Spigot spigot() {
|
||||
return server.spigot();
|
||||
}
|
||||
@@ -25,10 +25,10 @@ index 944f9b87a11472ac6d7e328acc00bf09f899e648..9ac777370b433a586045056b212a669b
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
||||
index ea6836032d997a21e0c215b71378b96c569ff156..ef996064077d0e14aa0472e0cdeb6d4258689e9d 100644
|
||||
index c0b2d372ea5f86779d1f0eda79e87a2ce08af2bb..843b5c66f38864c5bb27229133e56d71b83dd91e 100644
|
||||
--- a/src/main/java/org/bukkit/Server.java
|
||||
+++ b/src/main/java/org/bukkit/Server.java
|
||||
@@ -2015,4 +2015,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
||||
@@ -2025,4 +2025,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
||||
*/
|
||||
@NotNull org.bukkit.potion.PotionBrewer getPotionBrewer();
|
||||
// Paper end
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
||||
index 9ac777370b433a586045056b212a669b8fa5f60c..94353ff03683425814f73c25ae2e5507c9ae20e6 100644
|
||||
index 83bd664304e972c04fb21ebad857feec7062485d..bd000be1f942070ce760c7a24ade40174a1fce57 100644
|
||||
--- a/src/main/java/org/bukkit/Bukkit.java
|
||||
+++ b/src/main/java/org/bukkit/Bukkit.java
|
||||
@@ -2322,5 +2322,14 @@ public final class Bukkit {
|
||||
@@ -2332,5 +2332,14 @@ public final class Bukkit {
|
||||
public static String getServerName() {
|
||||
return server.getServerName();
|
||||
}
|
||||
@@ -24,10 +24,10 @@ index 9ac777370b433a586045056b212a669b8fa5f60c..94353ff03683425814f73c25ae2e5507
|
||||
// Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
||||
index ef996064077d0e14aa0472e0cdeb6d4258689e9d..b423fca93820e48de1318c3c18b2f7669ff5b57b 100644
|
||||
index 843b5c66f38864c5bb27229133e56d71b83dd91e..f24b6b46b1963712a6ef2a5dd2a2679b75370406 100644
|
||||
--- a/src/main/java/org/bukkit/Server.java
|
||||
+++ b/src/main/java/org/bukkit/Server.java
|
||||
@@ -2023,5 +2023,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
||||
@@ -2033,5 +2033,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
||||
*/
|
||||
@NotNull
|
||||
String getServerName();
|
||||
|
||||
@@ -17,13 +17,13 @@ index 2a8c6da0f9ffa1f94cfd37d1068511c8941d27ce..aa0a081819672c14d9f04c07f4685768
|
||||
|
||||
/**
|
||||
diff --git a/src/main/java/org/bukkit/entity/Wolf.java b/src/main/java/org/bukkit/entity/Wolf.java
|
||||
index 0e5decadf31140d6cb121c298f935ccc12c7a7e7..c1fd30fe4cd4eec11eb8298f059d14584b7dd7ec 100644
|
||||
index 490395f38c4d9977d30a6f48585a4ea0e7faff0f..c944a5a0e60469d42ac435878bda186f2b57b0df 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Wolf.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Wolf.java
|
||||
@@ -39,4 +39,20 @@ public interface Wolf extends Tameable, Sittable {
|
||||
* @param color the color to apply
|
||||
@@ -57,4 +57,20 @@ public interface Wolf extends Tameable, Sittable {
|
||||
*/
|
||||
public void setCollarColor(@NotNull DyeColor color);
|
||||
boolean isInterested();
|
||||
// Paper end
|
||||
+
|
||||
+ // Purpur start
|
||||
+ /**
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Added the ability to add combustible items
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
||||
index 3ef38fee9957243a4e52fefdb50a53b63a40f4a3..dfdcbcd79e750fefa90b7a7ca58490a1fa5e92e0 100644
|
||||
index acc9e8ccf76a9f5276ab896bfcd169b9a0bf71a4..6ba3272a10e357de99b75a7a7a63047f34a7fb8d 100644
|
||||
--- a/src/main/java/org/bukkit/Bukkit.java
|
||||
+++ b/src/main/java/org/bukkit/Bukkit.java
|
||||
@@ -2331,5 +2331,24 @@ public final class Bukkit {
|
||||
@@ -2341,5 +2341,24 @@ public final class Bukkit {
|
||||
public static boolean isLagging() {
|
||||
return server.isLagging();
|
||||
}
|
||||
@@ -34,10 +34,10 @@ index 3ef38fee9957243a4e52fefdb50a53b63a40f4a3..dfdcbcd79e750fefa90b7a7ca58490a1
|
||||
// Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
||||
index 1045c360c465a878f8119925d37f4738801ebae5..8178d230b136121a0f5717908c344fcb9a87e71d 100644
|
||||
index 82aab5a123f16ea8447bc40e8de32229d5a2bc7e..a272285d1389eed7ab07b253a48f1defabacb187 100644
|
||||
--- a/src/main/java/org/bukkit/Server.java
|
||||
+++ b/src/main/java/org/bukkit/Server.java
|
||||
@@ -2030,5 +2030,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
||||
@@ -2040,5 +2040,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
||||
* @return True if lagging
|
||||
*/
|
||||
boolean isLagging();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Raneri <kevin.raneri@gmail.com>
|
||||
Date: Wed, 3 Feb 2021 23:02:38 -0600
|
||||
Date: Fri, 4 Mar 2022 05:03:15 -0500
|
||||
Subject: [PATCH] Pufferfish Server Changes
|
||||
|
||||
Pufferfish
|
||||
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Based on pufferfish-gg/Pufferfish#bf3b9b977dbf387a2bdf2a5930a680630a843fe0
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 4beb35d1e5b013395f5df101e843f41c2ce174ad..5b10c880ac9daa66badf199bddd2653a0f7c0c08 100644
|
||||
index 4beb35d1e5b013395f5df101e843f41c2ce174ad..b2bade12a76ef354a2d0c2e054cbf818751f71b3 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -18,8 +18,12 @@ repositories {
|
||||
@@ -46,7 +46,7 @@ index 4beb35d1e5b013395f5df101e843f41c2ce174ad..5b10c880ac9daa66badf199bddd2653a
|
||||
|
||||
+ // Pufferfish start
|
||||
+ implementation("org.yaml:snakeyaml:1.28")
|
||||
+ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:ed30ff3e6b") {
|
||||
+ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.7.3") {
|
||||
+ exclude(group="org.yaml", module="snakeyaml")
|
||||
+ }
|
||||
+ // Pufferfish end
|
||||
@@ -557,7 +557,7 @@ index 0000000000000000000000000000000000000000..a7f297ebb569f7c1f205e967ca485be7
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f74732f4ab6ea
|
||||
index 0000000000000000000000000000000000000000..e164237e749bcc43466d4ed7aeada5ab9fddf8a6
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java
|
||||
@@ -0,0 +1,68 @@
|
||||
@@ -585,7 +585,7 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473
|
||||
+ this.usageMessage = "/pufferfish [reload | version]";
|
||||
+ this.setPermission("bukkit.command.pufferfish");
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static void init() {
|
||||
+ MinecraftServer.getServer().server.getCommandMap().register("pufferfish", "Pufferfish", new PufferfishCommand());
|
||||
+ }
|
||||
@@ -631,7 +631,7 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c6633c8bb
|
||||
index 0000000000000000000000000000000000000000..cd03fed32807fd943fdeee8571c1648b8bd567d0
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
|
||||
@@ -0,0 +1,291 @@
|
||||
@@ -667,10 +667,10 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+import java.util.Collections;
|
||||
+
|
||||
+public class PufferfishConfig {
|
||||
+
|
||||
+
|
||||
+ private static final YamlFile config = new YamlFile();
|
||||
+ private static int updates = 0;
|
||||
+
|
||||
+
|
||||
+ private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) {
|
||||
+ ConfigurationSection newSection = new MemoryConfiguration();
|
||||
+ for (String key : section.getKeys(false)) {
|
||||
@@ -682,18 +682,18 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ }
|
||||
+ return newSection;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static ConfigurationSection getConfigCopy() {
|
||||
+ return convertToBukkit(config);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static int getUpdates() {
|
||||
+ return updates;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static void load() throws IOException {
|
||||
+ File configFile = new File("pufferfish.yml");
|
||||
+
|
||||
+
|
||||
+ if (configFile.exists()) {
|
||||
+ try {
|
||||
+ config.load(configFile);
|
||||
@@ -701,14 +701,14 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ throw new IOException(e);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ getString("info.version", "1.0");
|
||||
+ setComment("info",
|
||||
+ "Pufferfish Configuration",
|
||||
+ "Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host",
|
||||
+ "Join our Discord for support: https://discord.gg/reZw4vQV9H",
|
||||
+ "Download new builds at https://ci.pufferfish.host/job/Pufferfish");
|
||||
+
|
||||
+
|
||||
+ for (Method method : PufferfishConfig.class.getDeclaredMethods()) {
|
||||
+ if (Modifier.isStatic(method.getModifiers()) && Modifier.isPrivate(method.getModifiers()) && method.getParameterCount() == 0 &&
|
||||
+ method.getReturnType() == Void.TYPE && !method.getName().startsWith("lambda")) {
|
||||
@@ -720,17 +720,17 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ updates++;
|
||||
+
|
||||
+
|
||||
+ config.save(configFile);
|
||||
+
|
||||
+
|
||||
+ // Attempt to detect vectorization
|
||||
+ try {
|
||||
+ SIMDDetection.isEnabled = SIMDDetection.canEnable();
|
||||
+ SIMDDetection.versionLimited = SIMDDetection.getJavaVersion() != 17;
|
||||
+ } catch (NoClassDefFoundError | Exception ignored) {}
|
||||
+
|
||||
+
|
||||
+ if (SIMDDetection.isEnabled) {
|
||||
+ PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions.");
|
||||
+ } else if (SIMDDetection.versionLimited) {
|
||||
@@ -740,76 +740,76 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ PufferfishLogger.LOGGER.warning("To enable additional optimizations, add \"--add-modules=jdk.incubator.vector\" to your startup flags, BEFORE the \"-jar\".");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static void setComment(String key, String... comment) {
|
||||
+ if (config.contains(key)) {
|
||||
+ config.setComment(key, String.join("\n", comment), CommentType.BLOCK);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static void ensureDefault(String key, Object defaultValue, String... comment) {
|
||||
+ if (!config.contains(key)) {
|
||||
+ config.set(key, defaultValue);
|
||||
+ config.setComment(key, String.join("\n", comment), CommentType.BLOCK);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static boolean getBoolean(String key, boolean defaultValue, String... comment) {
|
||||
+ return getBoolean(key, null, defaultValue, comment);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static boolean getBoolean(String key, @Nullable String oldKey, boolean defaultValue, String... comment) {
|
||||
+ ensureDefault(key, defaultValue, comment);
|
||||
+ return config.getBoolean(key, defaultValue);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static int getInt(String key, int defaultValue, String... comment) {
|
||||
+ return getInt(key, null, defaultValue, comment);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static int getInt(String key, @Nullable String oldKey, int defaultValue, String... comment) {
|
||||
+ ensureDefault(key, defaultValue, comment);
|
||||
+ return config.getInt(key, defaultValue);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static double getDouble(String key, double defaultValue, String... comment) {
|
||||
+ return getDouble(key, null, defaultValue, comment);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static double getDouble(String key, @Nullable String oldKey, double defaultValue, String... comment) {
|
||||
+ ensureDefault(key, defaultValue, comment);
|
||||
+ return config.getDouble(key, defaultValue);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static String getString(String key, String defaultValue, String... comment) {
|
||||
+ return getOldString(key, null, defaultValue, comment);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static String getOldString(String key, @Nullable String oldKey, String defaultValue, String... comment) {
|
||||
+ ensureDefault(key, defaultValue, comment);
|
||||
+ return config.getString(key, defaultValue);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static List<String> getStringList(String key, List<String> defaultValue, String... comment) {
|
||||
+ return getStringList(key, null, defaultValue, comment);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static List<String> getStringList(String key, @Nullable String oldKey, List<String> defaultValue, String... comment) {
|
||||
+ ensureDefault(key, defaultValue, comment);
|
||||
+ return config.getStringList(key);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static String sentryDsn;
|
||||
+ private static void sentry() {
|
||||
+ String sentryEnvironment = System.getenv("SENTRY_DSN");
|
||||
+ String sentryConfig = getString("sentry-dsn", "", "Sentry DSN for improved error logging, leave blank to disable", "Obtain from https://sentry.io/");
|
||||
+
|
||||
+
|
||||
+ sentryDsn = sentryEnvironment == null ? sentryConfig : sentryEnvironment;
|
||||
+ if (sentryDsn != null && !sentryDsn.isBlank()) {
|
||||
+ gg.pufferfish.pufferfish.sentry.SentryManager.init();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static boolean enableBooks;
|
||||
+ private static void books() {
|
||||
+ enableBooks = getBoolean("enable-books", true,
|
||||
@@ -818,7 +818,7 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ "disabling this option.",
|
||||
+ "This can be overridden per-player with the permission pufferfish.usebooks");
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static boolean enableSuffocationOptimization;
|
||||
+ private static void suffocationOptimization() {
|
||||
+ enableSuffocationOptimization = getBoolean("enable-suffocation-optimization", true,
|
||||
@@ -827,7 +827,7 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ "be left enabled on most servers, but is provided as a",
|
||||
+ "configuration option if the vanilla deviation is undesirable.");
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static boolean enableAsyncMobSpawning;
|
||||
+ public static boolean asyncMobSpawningInitialized;
|
||||
+ private static void asyncMobSpawning() {
|
||||
@@ -837,14 +837,14 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+ "paper's per-player-mob-spawns setting set to true for this to work.",
|
||||
+ "One quick note - this does not actually spawn mobs async (that would be very unsafe).",
|
||||
+ "This just offloads some expensive calculations that are required for mob spawning.");
|
||||
+
|
||||
+
|
||||
+ // This prevents us from changing the value during a reload.
|
||||
+ if (!asyncMobSpawningInitialized) {
|
||||
+ asyncMobSpawningInitialized = true;
|
||||
+ enableAsyncMobSpawning = temp;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static int maxProjectileLoadsPerTick;
|
||||
+ public static int maxProjectileLoadsPerProjectile;
|
||||
+ private static void projectileLoading() {
|
||||
@@ -886,7 +886,7 @@ index 0000000000000000000000000000000000000000..56330536c52fa327ef89d7a08e72557c
|
||||
+
|
||||
+ setComment("dab", "Optimizes entity brains when", "they're far away from the player");
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public static boolean throttleInactiveGoalSelectorTick;
|
||||
+ private static void inactiveGoalSelectorThrottle() {
|
||||
+ getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true,
|
||||
@@ -950,7 +950,7 @@ index 0000000000000000000000000000000000000000..53f2df00c6809618a9ee3d2ea72e85e8
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231a0133101
|
||||
index 0000000000000000000000000000000000000000..461022af9ad85fe00329678f0f61d684d291c628
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java
|
||||
@@ -0,0 +1,136 @@
|
||||
@@ -982,46 +982,46 @@ index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231
|
||||
+import org.jetbrains.annotations.Nullable;
|
||||
+
|
||||
+public class PufferfishVersionFetcher implements VersionFetcher {
|
||||
+
|
||||
+
|
||||
+ private static final Logger LOGGER = Logger.getLogger("PufferfishVersionFetcher");
|
||||
+ private static final HttpClient client = HttpClient.newHttpClient();
|
||||
+
|
||||
+
|
||||
+ private static final URI JENKINS_URI = URI.create("https://ci.pufferfish.host/job/Pufferfish-1.18/lastSuccessfulBuild/buildNumber");
|
||||
+ private static final String GITHUB_FORMAT = "https://api.github.com/repos/pufferfish-gg/Pufferfish/compare/ver/1.18...%s";
|
||||
+
|
||||
+
|
||||
+ private static final HttpResponse.BodyHandler<JsonObject> JSON_OBJECT_BODY_HANDLER = responseInfo -> HttpResponse.BodySubscribers
|
||||
+ .mapping(
|
||||
+ HttpResponse.BodySubscribers.ofString(StandardCharsets.UTF_8),
|
||||
+ string -> new Gson().fromJson(string, JsonObject.class)
|
||||
+ );
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public long getCacheTime() {
|
||||
+ return TimeUnit.MINUTES.toMillis(30);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public @NotNull Component getVersionMessage(final @NotNull String serverVersion) {
|
||||
+ final String[] parts = CraftServer.class.getPackage().getImplementationVersion().split("-");
|
||||
+ @NotNull Component component;
|
||||
+
|
||||
+
|
||||
+ if (parts.length != 3) {
|
||||
+ component = text("Unknown server version.", RED);
|
||||
+ } else {
|
||||
+ final String versionString = parts[2];
|
||||
+
|
||||
+
|
||||
+ try {
|
||||
+ component = this.fetchJenkinsVersion(Integer.parseInt(versionString));
|
||||
+ } catch (NumberFormatException e) {
|
||||
+ component = this.fetchGithubVersion(versionString.substring(1, versionString.length() - 1));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ final @Nullable Component history = this.getHistory();
|
||||
+ return history != null ? Component
|
||||
+ .join(JoinConfiguration.noSeparators(), component, Component.newline(), this.getHistory()) : component;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private @NotNull Component fetchJenkinsVersion(final int versionNumber) {
|
||||
+ final HttpRequest request = HttpRequest.newBuilder(JENKINS_URI).build();
|
||||
+ try {
|
||||
@@ -1029,7 +1029,7 @@ index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231
|
||||
+ if (response.statusCode() != 200) {
|
||||
+ return text("Received invalid status code (" + response.statusCode() + ") from server.", RED);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ int latestVersionNumber;
|
||||
+ try {
|
||||
+ latestVersionNumber = Integer.parseInt(response.body());
|
||||
@@ -1037,7 +1037,7 @@ index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231
|
||||
+ LOGGER.log(Level.WARNING, "Received invalid response from Jenkins \"" + response.body() + "\".");
|
||||
+ return text("Received invalid response from server.", RED);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ final int versionDiff = latestVersionNumber - versionNumber;
|
||||
+ return this.getResponseMessage(versionDiff);
|
||||
+ } catch (IOException | InterruptedException e) {
|
||||
@@ -1045,7 +1045,7 @@ index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231
|
||||
+ return text("Failed to retrieve version from server.", RED);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ // Based off code contributed by Techcable <Techcable@outlook.com> in Paper/GH-65
|
||||
+ private @NotNull Component fetchGithubVersion(final @NotNull String hash) {
|
||||
+ final URI uri = URI.create(String.format(GITHUB_FORMAT, hash));
|
||||
@@ -1055,17 +1055,17 @@ index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231
|
||||
+ if (response.statusCode() != 200) {
|
||||
+ return text("Received invalid status code (" + response.statusCode() + ") from server.", RED);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ final JsonObject obj = response.body();
|
||||
+ final int versionDiff = obj.get("behind_by").getAsInt();
|
||||
+
|
||||
+
|
||||
+ return this.getResponseMessage(versionDiff);
|
||||
+ } catch (IOException | InterruptedException e) {
|
||||
+ LOGGER.log(Level.WARNING, "Failed to look up version from GitHub", e);
|
||||
+ return text("Failed to retrieve version from server.", RED);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private @NotNull Component getResponseMessage(final int versionDiff) {
|
||||
+ return switch (Math.max(-1, Math.min(1, versionDiff))) {
|
||||
+ case -1 -> text("You are running an unsupported version of Pufferfish.", RED);
|
||||
@@ -1075,18 +1075,18 @@ index 0000000000000000000000000000000000000000..adafc4fd661cf080b004b86c3eaed231
|
||||
+ RED);
|
||||
+ };
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private @Nullable Component getHistory() {
|
||||
+ final VersionHistoryManager.VersionData data = VersionHistoryManager.INSTANCE.getVersionData();
|
||||
+ if (data == null) {
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ final String oldVersion = data.getOldVersion();
|
||||
+ if (oldVersion == null) {
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC);
|
||||
+ }
|
||||
+}
|
||||
@@ -1786,7 +1786,7 @@ index 0000000000000000000000000000000000000000..db15d3fbe2b65fc8035573f5fdbea382
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java b/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834733d0621
|
||||
index 0000000000000000000000000000000000000000..d04a8a4336566dbe6e1b9ec0d574cff43e003fa8
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java
|
||||
@@ -0,0 +1,135 @@
|
||||
@@ -1810,14 +1810,14 @@ index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834
|
||||
+import org.apache.logging.log4j.core.filter.AbstractFilter;
|
||||
+
|
||||
+public class PufferfishSentryAppender extends AbstractAppender {
|
||||
+
|
||||
+
|
||||
+ private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(PufferfishSentryAppender.class);
|
||||
+ private static final Gson GSON = new Gson();
|
||||
+
|
||||
+
|
||||
+ public PufferfishSentryAppender() {
|
||||
+ super("PufferfishSentryAdapter", new SentryFilter(), null);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public void append(LogEvent logEvent) {
|
||||
+ if (logEvent.getThrown() != null && logEvent.getLevel().isMoreSpecificThan(Level.WARN)) {
|
||||
@@ -1834,55 +1834,55 @@ index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private void logException(LogEvent e) {
|
||||
+ SentryEvent event = new SentryEvent(e.getThrown());
|
||||
+
|
||||
+
|
||||
+ Message sentryMessage = new Message();
|
||||
+ sentryMessage.setMessage(e.getMessage().getFormattedMessage());
|
||||
+
|
||||
+
|
||||
+ event.setThrowable(e.getThrown());
|
||||
+ event.setLevel(getLevel(e.getLevel()));
|
||||
+ event.setLogger(e.getLoggerName());
|
||||
+ event.setTransaction(e.getLoggerName());
|
||||
+ event.setExtra("thread_name", e.getThreadName());
|
||||
+
|
||||
+
|
||||
+ boolean hasContext = e.getContextData() != null;
|
||||
+
|
||||
+
|
||||
+ if (hasContext && e.getContextData().containsKey("pufferfishsentry_playerid")) {
|
||||
+ User user = new User();
|
||||
+ user.setId(e.getContextData().getValue("pufferfishsentry_playerid"));
|
||||
+ user.setUsername(e.getContextData().getValue("pufferfishsentry_playername"));
|
||||
+ event.setUser(user);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ if (hasContext && e.getContextData().containsKey("pufferfishsentry_pluginname")) {
|
||||
+ event.setExtra("plugin.name", e.getContextData().getValue("pufferfishsentry_pluginname"));
|
||||
+ event.setExtra("plugin.version", e.getContextData().getValue("pufferfishsentry_pluginversion"));
|
||||
+ event.setTransaction(e.getContextData().getValue("pufferfishsentry_pluginname"));
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ if (hasContext && e.getContextData().containsKey("pufferfishsentry_eventdata")) {
|
||||
+ Map<String, String> eventFields = GSON.fromJson((String) e.getContextData().getValue("pufferfishsentry_eventdata"), new TypeToken<Map<String, String>>() {}.getType());
|
||||
+ if (eventFields != null) {
|
||||
+ event.setExtra("event", eventFields);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ Sentry.captureEvent(event);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private void logBreadcrumb(LogEvent e) {
|
||||
+ Breadcrumb breadcrumb = new Breadcrumb();
|
||||
+
|
||||
+
|
||||
+ breadcrumb.setLevel(getLevel(e.getLevel()));
|
||||
+ breadcrumb.setCategory(e.getLoggerName());
|
||||
+ breadcrumb.setType(e.getLoggerName());
|
||||
+ breadcrumb.setMessage(e.getMessage().getFormattedMessage());
|
||||
+
|
||||
+
|
||||
+ Sentry.addBreadcrumb(breadcrumb);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private SentryLevel getLevel(Level level) {
|
||||
+ switch (level.getStandardLevel()) {
|
||||
+ case TRACE:
|
||||
@@ -1899,35 +1899,35 @@ index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834
|
||||
+ return SentryLevel.INFO;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static class SentryFilter extends AbstractFilter {
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, String msg,
|
||||
+ Object... params) {
|
||||
+ return this.filter(logger.getName());
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, Object msg, Throwable t) {
|
||||
+ return this.filter(logger.getName());
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public Result filter(LogEvent event) {
|
||||
+ return this.filter(event == null ? null : event.getLoggerName());
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private Result filter(String loggerName) {
|
||||
+ return loggerName != null && loggerName.startsWith("gg.castaway.pufferfish.sentry") ? Result.DENY
|
||||
+ : Result.NEUTRAL;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d331c996d
|
||||
index 0000000000000000000000000000000000000000..b011abbeb80b42de6be3785e47c7ba3c0f6dc161
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java
|
||||
@@ -0,0 +1,40 @@
|
||||
@@ -1939,27 +1939,27 @@ index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d
|
||||
+import org.apache.logging.log4j.Logger;
|
||||
+
|
||||
+public class SentryManager {
|
||||
+
|
||||
+
|
||||
+ private static final Logger logger = LogManager.getLogger(SentryManager.class);
|
||||
+
|
||||
+
|
||||
+ private SentryManager() {
|
||||
+
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ private static boolean initialized = false;
|
||||
+
|
||||
+
|
||||
+ public static synchronized void init() {
|
||||
+ if (initialized) {
|
||||
+ return;
|
||||
+ }
|
||||
+ try {
|
||||
+ initialized = true;
|
||||
+
|
||||
+
|
||||
+ Sentry.init(options -> {
|
||||
+ options.setDsn(PufferfishConfig.sentryDsn);
|
||||
+ options.setMaxBreadcrumbs(100);
|
||||
+ });
|
||||
+
|
||||
+
|
||||
+ PufferfishSentryAppender appender = new PufferfishSentryAppender();
|
||||
+ appender.start();
|
||||
+ ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender);
|
||||
@@ -1969,11 +1969,11 @@ index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d
|
||||
+ initialized = false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..9d6dc2c80945bec9bea74714c657c7a2e0bdde9e
|
||||
index 0000000000000000000000000000000000000000..0772fbc77a198b3571b4ed1e8cc85e90ccd6e38a
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java
|
||||
@@ -0,0 +1,51 @@
|
||||
@@ -1987,29 +1987,29 @@ index 0000000000000000000000000000000000000000..9d6dc2c80945bec9bea74714c657c7a2
|
||||
+import java.util.logging.Level;
|
||||
+
|
||||
+public class AsyncExecutor implements Runnable {
|
||||
+
|
||||
+
|
||||
+ private Queue<Runnable> jobs = Queues.newConcurrentLinkedQueue();
|
||||
+ private final Thread thread;
|
||||
+ private final BooleanSupplier shouldRun;
|
||||
+ private volatile boolean killswitch = false;
|
||||
+
|
||||
+
|
||||
+ public AsyncExecutor(String threadName, BooleanSupplier shouldRun) {
|
||||
+ this.thread = new Thread(this, threadName);
|
||||
+ this.shouldRun = shouldRun;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public void start() {
|
||||
+ thread.start();
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public void kill() {
|
||||
+ killswitch = true;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public void submit(Runnable runnable) {
|
||||
+ jobs.offer(runnable);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ while (!killswitch) {
|
||||
@@ -2026,11 +2026,11 @@ index 0000000000000000000000000000000000000000..9d6dc2c80945bec9bea74714c657c7a2
|
||||
+ LockSupport.parkNanos("executing tasks", 1000L);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..fdcb62d12164024a5f354d60cc863821a18d1b2a
|
||||
index 0000000000000000000000000000000000000000..a93ee99c2399def1e221260547a3e6bce2d621fa
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java
|
||||
@@ -0,0 +1,31 @@
|
||||
@@ -2042,22 +2042,22 @@ index 0000000000000000000000000000000000000000..fdcb62d12164024a5f354d60cc863821
|
||||
+import net.minecraft.server.level.ServerPlayer;
|
||||
+
|
||||
+public final class AsyncPlayerAreaMap extends PlayerAreaMap {
|
||||
+
|
||||
+
|
||||
+ public AsyncPlayerAreaMap() {
|
||||
+ super();
|
||||
+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f));
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets) {
|
||||
+ super(pooledHashSets);
|
||||
+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f));
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets, final ChangeCallback<ServerPlayer> addCallback,
|
||||
+ final ChangeCallback<ServerPlayer> removeCallback) {
|
||||
+ this(pooledHashSets, addCallback, removeCallback, null);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets, final ChangeCallback<ServerPlayer> addCallback,
|
||||
+ final ChangeCallback<ServerPlayer> removeCallback, final ChangeSourceCallback<ServerPlayer> changeSourceCallback) {
|
||||
+ super(pooledHashSets, addCallback, removeCallback, changeSourceCallback);
|
||||
@@ -2093,7 +2093,7 @@ index 0000000000000000000000000000000000000000..c1929840254a3e6d721816f4a20415be
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java b/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f5497b8dded1
|
||||
index 0000000000000000000000000000000000000000..42cdc43d6b739973a0944f502089757247ee6c61
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java
|
||||
@@ -0,0 +1,40 @@
|
||||
@@ -2104,34 +2104,34 @@ index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f549
|
||||
+import org.jetbrains.annotations.Nullable;
|
||||
+
|
||||
+public class Long2ObjectOpenHashMapWrapper<V> extends Long2ObjectOpenHashMap<V> {
|
||||
+
|
||||
+
|
||||
+ private final Map<Long, V> backingMap;
|
||||
+
|
||||
+
|
||||
+ public Long2ObjectOpenHashMapWrapper(Map<Long, V> map) {
|
||||
+ backingMap = map;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public V put(Long key, V value) {
|
||||
+ return backingMap.put(key, value);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public V get(Object key) {
|
||||
+ return backingMap.get(key);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public V remove(Object key) {
|
||||
+ return backingMap.remove(key);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Nullable
|
||||
+ @Override
|
||||
+ public V putIfAbsent(Long key, V value) {
|
||||
+ return backingMap.putIfAbsent(key, value);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ @Override
|
||||
+ public int size() {
|
||||
+ return backingMap.size();
|
||||
@@ -2151,18 +2151,18 @@ index 7bddc7517356cc74104dcc5c7c55522a53f2596f..d6a57cdad2c92521a800cb18d060d9d6
|
||||
|
||||
public static long getCoordinateKey(final ChunkPos pair) {
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index c8d56947305c981a3268ce4ae3e975db350ceff2..371b0f95b23d67c9913875a3dd7888e722551f18 100644
|
||||
index c8d56947305c981a3268ce4ae3e975db350ceff2..2812931808d979826c0f187553b319cf8e6fb306 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -308,6 +308,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
|
||||
@@ -309,6 +309,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public volatile Thread shutdownThread; // Paper
|
||||
public volatile boolean abnormalExit = false; // Paper
|
||||
+
|
||||
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning", () -> true); // Pufferfish - optimize mob spawning
|
||||
|
||||
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning", () -> true); // Pufferfish - optimize mob spawning
|
||||
+
|
||||
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
|
||||
AtomicReference<S> atomicreference = new AtomicReference();
|
||||
Thread thread = new Thread(() -> {
|
||||
@@ -1693,7 +1695,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
|
||||
@DontObfuscate
|
||||
@@ -2254,19 +2254,19 @@ index 6ce27675103d4b691216c6b701b6ceb821af528f..0ab662448c24ba1d3c697f8096f03c88
|
||||
return this.scaledRange(i);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
index 5793154c0deca7fc570bbe858c6bea0d640db941..f33ae29fd86fbfb2a94748fbf9515e3b4ae01753 100644
|
||||
index 5793154c0deca7fc570bbe858c6bea0d640db941..7b855e53b3730ad82bdef5b5d06baa4e4eee5b42 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
@@ -74,6 +74,9 @@ public class ServerChunkCache extends ChunkSource {
|
||||
final it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<LevelChunk> loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f);
|
||||
@@ -75,6 +75,9 @@ public class ServerChunkCache extends ChunkSource {
|
||||
|
||||
private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4];
|
||||
+
|
||||
|
||||
+ public boolean firstRunSpawnCounts = true; // Pufferfish
|
||||
+ public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs
|
||||
|
||||
+
|
||||
private static int getChunkCacheKey(int x, int z) {
|
||||
return x & 3 | ((z & 3) << 2);
|
||||
}
|
||||
@@ -969,6 +972,7 @@ public class ServerChunkCache extends ChunkSource {
|
||||
ProfilerFiller gameprofilerfiller = this.level.getProfiler();
|
||||
|
||||
@@ -2322,7 +2322,7 @@ index 5793154c0deca7fc570bbe858c6bea0d640db941..f33ae29fd86fbfb2a94748fbf9515e3b
|
||||
}
|
||||
// Paper end - controlled flush for entity tracker packets
|
||||
}
|
||||
+
|
||||
+
|
||||
+ // Pufferfish start - optimize mob spawning
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) {
|
||||
+ for (ServerPlayer player : this.level.players) {
|
||||
@@ -2370,7 +2370,7 @@ index 1092ba200a945d8d70e48f956535f56e2743302d..937a93d134dc986fe23e5676d58f7619
|
||||
this.wasOnGround = this.entity.isOnGround();
|
||||
this.teleportDelay = 0;
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index a08320807dcc49707bc167d196ba7f954dbf6f03..af063e08d33b15892079331e8bff86a9a8108630 100644
|
||||
index 3b1a34b34979ab436ccd33f0a85bfae537cbecb4..1b6d32d8720f66908b9f1b872115fcff081f5378 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -670,7 +670,20 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -2551,7 +2551,7 @@ index 7437f01ca8f416e2c9150250e324af4725a4efb6..7ac51dbfce18a2bc52faa7a915abeccc
|
||||
int LARGE_MAX_STACK_SIZE = 64;
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index 84fce7dccf9232209f939a32acfc3131e62eb27c..59ec3d56e88cf6cee218422481457b944ff25998 100644
|
||||
index 84fce7dccf9232209f939a32acfc3131e62eb27c..c9c444c119a010112d4176f095eee57f0ac888f9 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -230,7 +230,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
|
||||
@@ -2571,7 +2571,7 @@ index 84fce7dccf9232209f939a32acfc3131e62eb27c..59ec3d56e88cf6cee218422481457b94
|
||||
+ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score
|
||||
+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed
|
||||
+ // Pufferfish end
|
||||
+
|
||||
+
|
||||
public float getBukkitYaw() {
|
||||
return this.yRot;
|
||||
}
|
||||
@@ -3094,7 +3094,7 @@ index 373ec915412899e4893aa182abd6fb63f3dff0aa..fc43b1d5dcb53456bb24ae46ea08b97b
|
||||
this.level.getProfiler().pop();
|
||||
HoglinAi.updateActivity(this);
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
index f65d32245556e2acab927a29626749edea980f0a..16116a4f907ff691646a3e98dd8e25e0f26c3c49 100644
|
||||
index 84c129fd931596a4cd3aa5b9caa7da1c309b71a7..3ff720ff67938be3efc0412a7a17c4d5b8eab763 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
@@ -288,9 +288,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
|
||||
@@ -3562,14 +3562,14 @@ index 13eded53a64d0f36f8c9bce2077de4f1c1ed2d56..303ad9eab2e0a9b73597ca4ee9d70bea
|
||||
return new BlockPos(i, l, j);
|
||||
}
|
||||
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 0422d787593cc65aadcae9f7517ec67a52f1f72b..e3a917480d0fe81d9b6cb24a4cf207c5e66388b8 100644
|
||||
index 0422d787593cc65aadcae9f7517ec67a52f1f72b..248da8962a460fe41876bbe8670e8909864b40bc 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/biome/Biome.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/biome/Biome.java
|
||||
@@ -37,6 +37,36 @@ import net.minecraft.world.level.material.Fluids;
|
||||
public final class Biome {
|
||||
public static final Codec<Biome> DIRECT_CODEC;
|
||||
public static final Codec<Biome> NETWORK_CODEC;
|
||||
+
|
||||
+
|
||||
+ // Pufferfish start - decompile fixes
|
||||
+ static {
|
||||
+ DIRECT_CODEC = RecordCodecBuilder.create((instance) -> {
|
||||
@@ -3598,7 +3598,7 @@ index 0422d787593cc65aadcae9f7517ec67a52f1f72b..e3a917480d0fe81d9b6cb24a4cf207c5
|
||||
+ });
|
||||
+ }
|
||||
+ // Pufferfish end
|
||||
+
|
||||
+
|
||||
public static final Codec<Holder<Biome>> CODEC = RegistryFileCodec.create(Registry.BIOME_REGISTRY, DIRECT_CODEC);
|
||||
public static final Codec<HolderSet<Biome>> LIST_CODEC = RegistryCodecs.homogeneousList(Registry.BIOME_REGISTRY, DIRECT_CODEC);
|
||||
private static final PerlinSimplexNoise TEMPERATURE_NOISE = new PerlinSimplexNoise(new WorldgenRandom(new LegacyRandomSource(1234L)), ImmutableList.of(0));
|
||||
@@ -4176,7 +4176,7 @@ index b1992ed5136cc7dcf04219868b94b3c37ae36b4b..5b5339cba819368f4d6b7eaf404fa59b
|
||||
|
||||
@Nullable
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 55c981f2c8070fc1bd9ecd4f4df140d9d0c68319..f266ee28bae60cf938bf2769df71af7ffd3e5bfe 100644
|
||||
index 5be9e73dc0314831bbaa6301fc704295dd8ed2bc..22dc604b42b068ca7b5cbf7d3920a4696c96ad34 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -248,7 +248,7 @@ import javax.annotation.Nullable; // Paper
|
||||
|
||||
@@ -22,7 +22,7 @@ index 8c79f66abd42e9c9875e8877c6dd82b5e3cfa184..2841469748bc308f690aaeb34fe05cb2
|
||||
super(x, y, z);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index a6f29c00d6716b501d0f52db8670d81e1304b7c0..1b3784eaac409c86806b6deeffcb08484e5f96d9 100644
|
||||
index f8a8d4037ce24b9e51971d85ebcea5223c721651..24bf79e7456727b1adfb17a74761e61aca073ed1 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -1573,6 +1573,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -34,7 +34,7 @@ index a6f29c00d6716b501d0f52db8670d81e1304b7c0..1b3784eaac409c86806b6deeffcb0848
|
||||
|
||||
this.profiler.push(() -> {
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index af063e08d33b15892079331e8bff86a9a8108630..024b3519b9610655774559f08558b7170d025c35 100644
|
||||
index 1b6d32d8720f66908b9f1b872115fcff081f5378..81bde8cd6c4a883bb10b2de5fb27634bba5cef6f 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -212,6 +212,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -79,7 +79,7 @@ index a4ea4ff317b71ed2e64a6036cbdb7291d248d982..334e73a646bb02fcfef331229a07e790
|
||||
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
|
||||
ServerGamePacketListenerImpl.this.send(new ClientboundAddMobPacket((LivingEntity) entity));
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index 8e7d8482f44799d2df6ebea380dc4ff47fd66c3d..b630e2a4decc750474f4c9dc6669ecb420a9ceaf 100644
|
||||
index 3522b7b81eae07ac010c5f9fd056210ff80d5b7d..a798d5ea72bc06395e27199c57be86b407311e50 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -300,7 +300,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
|
||||
@@ -691,7 +691,7 @@ index 3484defdfd5a487b11917310d7b1d1543291eee1..2ae0296b0a2e9585caf81b819742a0a8
|
||||
this.fish.setSpeed(Mth.lerp(0.125F, this.fish.getSpeed(), f));
|
||||
double d0 = this.wantedX - this.fish.getX();
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
|
||||
index b07fa7fba33b76ae7054dc95b583a3c7a381c5ab..08f2920dad7a10270f25dd8a2144e98199fb002d 100644
|
||||
index 79a9fa2a2257925685e45329365d2828ccd4c48c..793e7c659af32e8bdc07bd7ecfa31fb5d302ad22 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
|
||||
@@ -42,6 +42,7 @@ import net.minecraft.world.entity.EntityType;
|
||||
@@ -792,7 +792,7 @@ index b07fa7fba33b76ae7054dc95b583a3c7a381c5ab..08f2920dad7a10270f25dd8a2144e981
|
||||
this.targetSelector.addGoal(1, (new Bee.BeeHurtByOtherGoal(this)).setAlertOthers(new Class[0]));
|
||||
this.targetSelector.addGoal(2, new Bee.BeeBecomeAngryTargetGoal(this));
|
||||
this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true));
|
||||
@@ -877,16 +928,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
||||
@@ -879,16 +930,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4273,7 +4273,7 @@ index 0676f452280a9148546c35d1113932b5adc1fc3d..f809b68b0250670c07a2e0ed0f62efa8
|
||||
if (flag && !this.isSilent()) {
|
||||
this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
|
||||
index 149bff0edd0e70a340c400ffa9904e3503369844..d154ce3119d231b8c8da299ec22e2a9b2bae6394 100644
|
||||
index b830858cc68c7c9c8b32ffd3c46b98158c165793..55bd55fbc6fa5f9e84b847c770679334c617d188 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
|
||||
@@ -58,6 +58,50 @@ public class Vex extends Monster {
|
||||
@@ -4680,7 +4680,7 @@ index fc43b1d5dcb53456bb24ae46ea08b97b14403c86..1d3227a216b7daea6555f1c859c9a571
|
||||
this.level.getProfiler().pop();
|
||||
HoglinAi.updateActivity(this);
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
index 16116a4f907ff691646a3e98dd8e25e0f26c3c49..7ac0a9ee569043dcfaa2e19141060c5358e03f9f 100644
|
||||
index 3ff720ff67938be3efc0412a7a17c4d5b8eab763..f0d0c178467da127667782856d9a2c9851b2171c 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
@@ -96,6 +96,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
|
||||
|
||||
@@ -17,10 +17,10 @@ index ebfaa8d5de5b905bd2dd7778728b8c9939d01252..8153f1aa510474d2f831799a1c149558
|
||||
public final boolean spawnNpcs = this.get("spawn-npcs", true);
|
||||
public final boolean pvp = this.get("pvp", true);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index ce07e8cd0a767a97850380c5e015108f0f1a238b..be20f1450f1b562e4b2112ee16a952313da3b009 100644
|
||||
index bf09a43ac97305530f7fbd4affd7d13399cd74b4..43319cce012ea8340685000f305b09ff2a5d8d60 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -2873,4 +2873,11 @@ public final class CraftServer implements Server {
|
||||
@@ -2878,4 +2878,11 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
// Paper end
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Lagging threshold
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 8e7f73cfdc4dd86babe6a17fe06c80a011f20d90..f4d9170b11ba4eab8763261bf4fd0288e5ebe1d6 100644
|
||||
index 54dab750cd60d55fcd9d9abf359119e79a8a5cd8..a42bea1b1b48d58e814ddf61cca97b18ef6fe60b 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -305,6 +305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -25,10 +25,10 @@ index 8e7f73cfdc4dd86babe6a17fe06c80a011f20d90..f4d9170b11ba4eab8763261bf4fd0288
|
||||
}
|
||||
// Spigot end
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index be20f1450f1b562e4b2112ee16a952313da3b009..a5807506dede68d948b4536d01d64391188b9797 100644
|
||||
index 43319cce012ea8340685000f305b09ff2a5d8d60..08fd353bc10a72d7f43dc746cd409d579e311ab1 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -2879,5 +2879,10 @@ public final class CraftServer implements Server {
|
||||
@@ -2884,5 +2884,10 @@ public final class CraftServer implements Server {
|
||||
public String getServerName() {
|
||||
return this.getProperties().serverName;
|
||||
}
|
||||
|
||||
@@ -17,17 +17,17 @@ index b16287a47870978706734b928b87f2357e91e3a1..048413655ef636b3dae687452fc5a957
|
||||
}
|
||||
// CraftBukkit end
|
||||
diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
||||
index a24f605bd033f249a374e83ba094880106260eee..efe7ba93af0b44e6282e551d47763fa9ea3df077 100644
|
||||
index 1e656438d9ee89b97c660f3b3ec671be6546c6b7..c4b2a50ad65b4ca2f8cc5903213c70cafde3e41c 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
||||
@@ -285,6 +285,7 @@ public class WorldGenRegion implements WorldGenLevel {
|
||||
|
||||
@@ -287,6 +287,7 @@ public class WorldGenRegion implements WorldGenLevel {
|
||||
return true;
|
||||
} else {
|
||||
// Paper start
|
||||
+ if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressSetBlockFarChunk) // Purpur
|
||||
if (!hasSetFarWarned) {
|
||||
Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + pos + ", status: " + this.generatingStatus + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get()));
|
||||
return false;
|
||||
}
|
||||
hasSetFarWarned = true;
|
||||
diff --git a/src/main/java/net/minecraft/stats/ServerRecipeBook.java b/src/main/java/net/minecraft/stats/ServerRecipeBook.java
|
||||
index d13ed3069e944d138442ea440ac3eaf8d44c18d3..29ac7f202aa23f7e6fcdc9829af3d59875c92d4e 100644
|
||||
--- a/src/main/java/net/minecraft/stats/ServerRecipeBook.java
|
||||
|
||||
@@ -200,13 +200,13 @@ index ed6a552fab01b1391cf98fdbb51f7f47f72de932..ae2ee87ccf3bf547750e8ed7c98029ed
|
||||
return super.mobInteract(player, hand);
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
||||
index f856b42201c17f8da21251e54fcf052336916e70..ac0803d42be2f36a2f40487ee31413d059d2f0e2 100644
|
||||
index a3bec00368aef0f8cc6aa21cce1389938d15f91b..704667760ab1593647e3f03bdd17ad325366642c 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
||||
@@ -43,4 +43,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf {
|
||||
public void setCollarColor(DyeColor color) {
|
||||
this.getHandle().setCollarColor(net.minecraft.world.item.DyeColor.byId(color.getWoolData()));
|
||||
@@ -54,4 +54,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf {
|
||||
return this.getHandle().isInterested();
|
||||
}
|
||||
// Paper end
|
||||
+
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
|
||||
@@ -57,7 +57,7 @@ index 529435cf648d61f80a37f041cee3c6fc0b74ceb6..6c7195c93b5968845da35450e80022c7
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
||||
index 14ed3f0524773e22a792efb8b41a9217bad50f27..8a4080a77bd5b73ac812e3ae67c6f21dcd270215 100644
|
||||
index 99044ebe2c37ce951566e3463ddbfaeec46d2b3c..023d4e10aeccb2bea3131e498f257d6e6fab6c65 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
||||
@@ -70,7 +70,7 @@ public class EatBlockGoal extends Goal {
|
||||
@@ -73,8 +73,8 @@ index 14ed3f0524773e22a792efb8b41a9217bad50f27..8a4080a77bd5b73ac812e3ae67c6f21d
|
||||
|
||||
if (this.level.getBlockState(blockposition1).is(Blocks.GRASS_BLOCK)) {
|
||||
// CraftBukkit
|
||||
- if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.AIR.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) {
|
||||
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.AIR.defaultBlockState(), !this.level.purpurConfig.sheepBypassMobGriefing && !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Purpur
|
||||
- if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Paper - Fix wrong block state
|
||||
+ if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !this.level.purpurConfig.sheepBypassMobGriefing && !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Paper - Fix wrong block state // Purpur
|
||||
this.level.levelEvent(2001, blockposition1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState()));
|
||||
this.level.setBlock(blockposition1, Blocks.DIRT.defaultBlockState(), 2);
|
||||
}
|
||||
@@ -249,7 +249,7 @@ index cfbbdea914eb55f5c772f68f6494ac90c1c4c0ea..d929193ed63b36deb32cc0807e75a589
|
||||
BlockPos blockposition = (new BlockPos(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ())).relative(this.selectedDirection);
|
||||
BlockState iblockdata = this.mob.level.getBlockState(blockposition);
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
index 76b7e5ed4e50dcbb9e8ac5a142884b764e27c8ed..7c231904032021201126243fd52dc0296f7b8f89 100644
|
||||
index 0d2cedbe96a013b027b6bfb391a204e2fb201311..f35e5c9e85583c8f599460c0ccd23a0f3bb88d6a 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||
@@ -412,7 +412,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
|
||||
|
||||
Reference in New Issue
Block a user