add pufferfish back to purpur

This commit is contained in:
granny
2022-06-10 23:25:34 -07:00
parent dc7d14957c
commit cff698bfcd
318 changed files with 5353 additions and 471 deletions

View File

@@ -0,0 +1,514 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Kevin Raneri <kevin.raneri@gmail.com>
Date: Tue, 9 Nov 2021 14:01:56 -0500
Subject: [PATCH] Pufferfish API Changes
Pufferfish
Copyright (C) 2022 Pufferfish Studios LLC
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/build.gradle.kts b/build.gradle.kts
index 921b301de020ce73126ca518556b3435e776783d..104d3841879f64510ddd4b20b80b6cb24c4ecd24 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -40,6 +40,7 @@ dependencies {
apiAndDocs("net.kyori:adventure-text-serializer-plain")
api("org.apache.logging.log4j:log4j-api:2.17.1")
api("org.slf4j:slf4j-api:1.8.0-beta4")
+ api("io.sentry:sentry:5.4.0") // Pufferfish
implementation("org.ow2.asm:asm:9.2")
implementation("org.ow2.asm:asm-commons:9.2")
@@ -82,6 +83,13 @@ val generateApiVersioningFile by tasks.registering {
}
}
+// Pufferfish Start
+tasks.withType<JavaCompile> {
+ val compilerArgs = options.compilerArgs
+ compilerArgs.add("--add-modules=jdk.incubator.vector")
+}
+// Pufferfish End
+
tasks.jar {
from(generateApiVersioningFile.map { it.outputs.files.singleFile }) {
into("META-INF/maven/${project.group}/${project.name}")
diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java
new file mode 100644
index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8eb08fb68a
--- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java
@@ -0,0 +1,161 @@
+package gg.pufferfish.pufferfish.sentry;
+
+import com.google.gson.Gson;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Map;
+import java.util.TreeMap;
+import org.apache.logging.log4j.ThreadContext;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Event;
+import org.bukkit.event.player.PlayerEvent;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.RegisteredListener;
+import org.jetbrains.annotations.Nullable;
+
+public class SentryContext {
+
+ private static final Gson GSON = new Gson();
+
+ public static void setPluginContext(@Nullable Plugin plugin) {
+ if (plugin != null) {
+ ThreadContext.put("pufferfishsentry_pluginname", plugin.getName());
+ ThreadContext.put("pufferfishsentry_pluginversion", plugin.getDescription().getVersion());
+ }
+ }
+
+ public static void removePluginContext() {
+ ThreadContext.remove("pufferfishsentry_pluginname");
+ ThreadContext.remove("pufferfishsentry_pluginversion");
+ }
+
+ public static void setSenderContext(@Nullable CommandSender sender) {
+ if (sender != null) {
+ ThreadContext.put("pufferfishsentry_playername", sender.getName());
+ if (sender instanceof Player player) {
+ ThreadContext.put("pufferfishsentry_playerid", player.getUniqueId().toString());
+ }
+ }
+ }
+
+ public static void removeSenderContext() {
+ ThreadContext.remove("pufferfishsentry_playername");
+ ThreadContext.remove("pufferfishsentry_playerid");
+ }
+
+ public static void setEventContext(Event event, RegisteredListener registration) {
+ setPluginContext(registration.getPlugin());
+
+ try {
+ // Find the player that was involved with this event
+ Player player = null;
+ if (event instanceof PlayerEvent) {
+ player = ((PlayerEvent) event).getPlayer();
+ } else {
+ Class<? extends Event> eventClass = event.getClass();
+
+ Field playerField = null;
+
+ for (Field field : eventClass.getDeclaredFields()) {
+ if (field.getType().equals(Player.class)) {
+ playerField = field;
+ break;
+ }
+ }
+
+ if (playerField != null) {
+ playerField.setAccessible(true);
+ player = (Player) playerField.get(event);
+ }
+ }
+
+ if (player != null) {
+ setSenderContext(player);
+ }
+ } catch (Exception e) {} // We can't really safely log exceptions.
+
+ ThreadContext.put("pufferfishsentry_eventdata", GSON.toJson(serializeFields(event)));
+ }
+
+ public static void removeEventContext() {
+ removePluginContext();
+ removeSenderContext();
+ ThreadContext.remove("pufferfishsentry_eventdata");
+ }
+
+ private static Map<String, String> serializeFields(Object object) {
+ Map<String, String> fields = new TreeMap<>();
+ fields.put("_class", object.getClass().getName());
+ for (Field declaredField : object.getClass().getDeclaredFields()) {
+ try {
+ if (Modifier.isStatic(declaredField.getModifiers())) {
+ continue;
+ }
+
+ String fieldName = declaredField.getName();
+ if (fieldName.equals("handlers")) {
+ continue;
+ }
+ declaredField.setAccessible(true);
+ Object value = declaredField.get(object);
+ if (value != null) {
+ fields.put(fieldName, value.toString());
+ } else {
+ fields.put(fieldName, "<null>");
+ }
+ } catch (Exception e) {} // We can't really safely log exceptions.
+ }
+ return fields;
+ }
+
+ public static class State {
+
+ private Plugin plugin;
+ private Command command;
+ private String commandLine;
+ private Event event;
+ private RegisteredListener registeredListener;
+
+ public Plugin getPlugin() {
+ return plugin;
+ }
+
+ public void setPlugin(Plugin plugin) {
+ this.plugin = plugin;
+ }
+
+ public Command getCommand() {
+ return command;
+ }
+
+ public void setCommand(Command command) {
+ this.command = command;
+ }
+
+ public String getCommandLine() {
+ return commandLine;
+ }
+
+ public void setCommandLine(String commandLine) {
+ this.commandLine = commandLine;
+ }
+
+ public Event getEvent() {
+ return event;
+ }
+
+ public void setEvent(Event event) {
+ this.event = event;
+ }
+
+ public RegisteredListener getRegisteredListener() {
+ return registeredListener;
+ }
+
+ public void setRegisteredListener(RegisteredListener registeredListener) {
+ this.registeredListener = registeredListener;
+ }
+ }
+}
diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java
new file mode 100644
index 0000000000000000000000000000000000000000..93f5d7ca36e043e6c0f959450d38e6946b348eaf
--- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java
@@ -0,0 +1,40 @@
+package gg.pufferfish.pufferfish.simd;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import jdk.incubator.vector.FloatVector;
+import jdk.incubator.vector.IntVector;
+import jdk.incubator.vector.VectorSpecies;
+
+/**
+ * Basically, java is annoying and we have to push this out to its own class.
+ */
+@Deprecated
+public class SIMDChecker {
+
+ @Deprecated
+ public static boolean canEnable(Logger logger) {
+ try {
+ if (SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18) {
+ return false;
+ } else {
+ SIMDDetection.testRun = true;
+
+ VectorSpecies<Integer> ISPEC = IntVector.SPECIES_PREFERRED;
+ VectorSpecies<Float> FSPEC = FloatVector.SPECIES_PREFERRED;
+
+ logger.log(Level.INFO, "Max SIMD vector size on this system is " + ISPEC.vectorBitSize() + " bits (int)");
+ logger.log(Level.INFO, "Max SIMD vector size on this system is " + FSPEC.vectorBitSize() + " bits (float)");
+
+ if (ISPEC.elementSize() < 2 || FSPEC.elementSize() < 2) {
+ logger.log(Level.WARNING, "SIMD is not properly supported on this system!");
+ return false;
+ }
+
+ return true;
+ }
+ } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it.
+ return false;
+ }
+
+}
diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java
new file mode 100644
index 0000000000000000000000000000000000000000..a84889d3e9cfc4d7ab5f867820a6484c6070711b
--- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java
@@ -0,0 +1,35 @@
+package gg.pufferfish.pufferfish.simd;
+
+import java.util.logging.Logger;
+
+@Deprecated
+public class SIMDDetection {
+
+ public static boolean isEnabled = false;
+ public static boolean versionLimited = false;
+ public static boolean testRun = false;
+
+ @Deprecated
+ public static boolean canEnable(Logger logger) {
+ try {
+ return SIMDChecker.canEnable(logger);
+ } catch (NoClassDefFoundError | Exception ignored) {
+ return false;
+ }
+ }
+
+ @Deprecated
+ public static int getJavaVersion() {
+ // https://stackoverflow.com/a/2591122
+ String version = System.getProperty("java.version");
+ if(version.startsWith("1.")) {
+ version = version.substring(2, 3);
+ } else {
+ int dot = version.indexOf(".");
+ if(dot != -1) { version = version.substring(0, dot); }
+ }
+ version = version.split("-")[0]; // Azul is stupid
+ return Integer.parseInt(version);
+ }
+
+}
diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae2464920c9412ac90b819a540ee58be0741465f
--- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java
@@ -0,0 +1,83 @@
+package gg.pufferfish.pufferfish.simd;
+
+import java.awt.Color;
+import jdk.incubator.vector.FloatVector;
+import jdk.incubator.vector.IntVector;
+import jdk.incubator.vector.VectorMask;
+import jdk.incubator.vector.VectorSpecies;
+import org.bukkit.map.MapPalette;
+
+@Deprecated
+public class VectorMapPalette {
+
+ private static final VectorSpecies<Integer> I_SPEC = IntVector.SPECIES_PREFERRED;
+ private static final VectorSpecies<Float> F_SPEC = FloatVector.SPECIES_PREFERRED;
+
+ @Deprecated
+ public static void matchColorVectorized(int[] in, byte[] out) {
+ int speciesLength = I_SPEC.length();
+ int i;
+ for (i = 0; i < in.length - speciesLength; i += speciesLength) {
+ float[] redsArr = new float[speciesLength];
+ float[] bluesArr = new float[speciesLength];
+ float[] greensArr = new float[speciesLength];
+ int[] alphasArr = new int[speciesLength];
+
+ for (int j = 0; j < speciesLength; j++) {
+ alphasArr[j] = (in[i + j] >> 24) & 0xFF;
+ redsArr[j] = (in[i + j] >> 16) & 0xFF;
+ greensArr[j] = (in[i + j] >> 8) & 0xFF;
+ bluesArr[j] = (in[i + j] >> 0) & 0xFF;
+ }
+
+ IntVector alphas = IntVector.fromArray(I_SPEC, alphasArr, 0);
+ FloatVector reds = FloatVector.fromArray(F_SPEC, redsArr, 0);
+ FloatVector greens = FloatVector.fromArray(F_SPEC, greensArr, 0);
+ FloatVector blues = FloatVector.fromArray(F_SPEC, bluesArr, 0);
+ IntVector resultIndex = IntVector.zero(I_SPEC);
+ VectorMask<Integer> modificationMask = VectorMask.fromLong(I_SPEC, 0xffffffff);
+
+ modificationMask = modificationMask.and(alphas.lt(128).not());
+ FloatVector bestDistances = FloatVector.broadcast(F_SPEC, Float.MAX_VALUE);
+
+ for (int c = 4; c < MapPalette.colors.length; c++) {
+ // We're using 32-bit floats here because it's 2x faster and nobody will know the difference.
+ // For correctness, the original algorithm uses 64-bit floats instead. Completely unnecessary.
+ FloatVector compReds = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getRed());
+ FloatVector compGreens = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getGreen());
+ FloatVector compBlues = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getBlue());
+
+ FloatVector rMean = reds.add(compReds).div(2.0f);
+ FloatVector rDiff = reds.sub(compReds);
+ FloatVector gDiff = greens.sub(compGreens);
+ FloatVector bDiff = blues.sub(compBlues);
+
+ FloatVector weightR = rMean.div(256.0f).add(2);
+ FloatVector weightG = FloatVector.broadcast(F_SPEC, 4.0f);
+ FloatVector weightB = FloatVector.broadcast(F_SPEC, 255.0f).sub(rMean).div(256.0f).add(2.0f);
+
+ FloatVector distance = weightR.mul(rDiff).mul(rDiff).add(weightG.mul(gDiff).mul(gDiff)).add(weightB.mul(bDiff).mul(bDiff));
+
+ // Now we compare to the best distance we've found.
+ // This mask contains a "1" if better, and a "0" otherwise.
+ VectorMask<Float> bestDistanceMask = distance.lt(bestDistances);
+ bestDistances = bestDistances.blend(distance, bestDistanceMask); // Update the best distances
+
+ // Update the result array
+ // We also AND with the modification mask because we don't want to interfere if the alpha value isn't large enough.
+ resultIndex = resultIndex.blend(c, bestDistanceMask.cast(I_SPEC).and(modificationMask)); // Update the results
+ }
+
+ for (int j = 0; j < speciesLength; j++) {
+ int index = resultIndex.lane(j);
+ out[i + j] = (byte) (index < 128 ? index : -129 + (index - 127));
+ }
+ }
+
+ // For the final ones, fall back to the regular method
+ for (; i < in.length; i++) {
+ out[i] = MapPalette.matchColor(new Color(in[i], true));
+ }
+ }
+
+}
diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java
index b937441d2fb46b108644c49fcf073859765aa02e..d95b01bfd0657cf089c0f5412453cca08e36c02f 100644
--- a/src/main/java/org/bukkit/map/MapPalette.java
+++ b/src/main/java/org/bukkit/map/MapPalette.java
@@ -1,5 +1,6 @@
package org.bukkit.map;
+import gg.pufferfish.pufferfish.simd.SIMDDetection;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
@@ -34,7 +35,7 @@ public final class MapPalette {
}
@NotNull
- static final Color[] colors = {
+ public static final Color[] colors = { // Pufferfish - public access
c(0, 0, 0), c(0, 0, 0), c(0, 0, 0), c(0, 0, 0),
c(89, 125, 39), c(109, 153, 48), c(127, 178, 56), c(67, 94, 29),
c(174, 164, 115), c(213, 201, 140), c(247, 233, 163), c(130, 123, 86),
@@ -205,9 +206,15 @@ public final class MapPalette {
temp.getRGB(0, 0, temp.getWidth(), temp.getHeight(), pixels, 0, temp.getWidth());
byte[] result = new byte[temp.getWidth() * temp.getHeight()];
+ // Pufferfish start
+ if (!SIMDDetection.isEnabled) {
for (int i = 0; i < pixels.length; i++) {
result[i] = matchColor(new Color(pixels[i], true));
}
+ } else {
+ gg.pufferfish.pufferfish.simd.VectorMapPalette.matchColorVectorized(pixels, result);
+ }
+ // Pufferfish end
return result;
}
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index ed07f5820281b139739f673fa4e25171de81b894..aed2209b66f11a0d03473cf19437f3da0e9e573a 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -617,7 +617,9 @@ public final class SimplePluginManager implements PluginManager {
// Paper start
private void handlePluginException(String msg, Throwable ex, Plugin plugin) {
+ gg.pufferfish.pufferfish.sentry.SentryContext.setPluginContext(plugin); // Pufferfish
server.getLogger().log(Level.SEVERE, msg, ex);
+ gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish
callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerPluginEnableDisableException(msg, ex, plugin)));
}
// Paper end
@@ -676,9 +678,11 @@ public final class SimplePluginManager implements PluginManager {
));
}
} catch (Throwable ex) {
+ gg.pufferfish.pufferfish.sentry.SentryContext.setEventContext(event, registration); // Pufferfish
// Paper start - error reporting
String msg = "Could not pass event " + event.getEventName() + " to " + registration.getPlugin().getDescription().getFullName();
server.getLogger().log(Level.SEVERE, msg, ex);
+ gg.pufferfish.pufferfish.sentry.SentryContext.removeEventContext(); // Pufferfish
if (!(event instanceof com.destroystokyo.paper.event.server.ServerExceptionEvent)) { // We don't want to cause an endless event loop
callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerEventException(msg, ex, registration.getPlugin(), registration.getListener(), event)));
}
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
index 8ff78fad47f6086aa289e32590f4fbec24b3d500..a16c841751bc44e46d27fc4efbfc2ab23cc7b0d7 100644
--- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
@@ -369,7 +369,9 @@ public final class JavaPluginLoader implements PluginLoader {
try {
jPlugin.setEnabled(true);
} catch (Throwable ex) {
+ gg.pufferfish.pufferfish.sentry.SentryContext.setPluginContext(plugin); // Pufferfish
server.getLogger().log(Level.SEVERE, "Error occurred while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex);
+ gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish
// Paper start - Disable plugins that fail to load
this.server.getPluginManager().disablePlugin(jPlugin);
return;
@@ -398,7 +400,9 @@ public final class JavaPluginLoader implements PluginLoader {
try {
jPlugin.setEnabled(false);
} catch (Throwable ex) {
+ gg.pufferfish.pufferfish.sentry.SentryContext.setPluginContext(plugin); // Pufferfish
server.getLogger().log(Level.SEVERE, "Error occurred while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex);
+ gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish
}
if (cloader instanceof PluginClassLoader) {
diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
index 345394132df70593800127d34a38f8f8a4dafe00..4f736a267eb4c8a3bedb2d02fb30468484b991d5 100644
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
@@ -46,6 +46,8 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
private final Set<String> seenIllegalAccess = Collections.newSetFromMap(new ConcurrentHashMap<>());
private java.util.logging.Logger logger; // Paper - add field
+ private boolean closed = false; // Pufferfish
+
static {
ClassLoader.registerAsParallelCapable();
}
@@ -151,6 +153,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
throw new ClassNotFoundException(name);
}
+ public boolean _airplane_hasClass(@NotNull String name) { return this.classes.containsKey(name); } // Pufferfish
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if (name.startsWith("org.bukkit.") || name.startsWith("net.minecraft.")) {
@@ -158,7 +161,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
}
Class<?> result = classes.get(name);
- if (result == null) {
+ if (result == null && !this.closed) { // Pufferfish
String path = name.replace('.', '/').concat(".class");
JarEntry entry = jar.getJarEntry(path);
@@ -213,6 +216,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
try {
super.close();
} finally {
+ this.closed = true; // Pufferfish
jar.close();
}
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Build System Changes
diff --git a/build.gradle.kts b/build.gradle.kts
index 921b301de020ce73126ca518556b3435e776783d..40b21b114a52a0388d7c9b805c90c27e88d98cd0 100644
index 104d3841879f64510ddd4b20b80b6cb24c4ecd24..10fa4d1478b9f1173dd4ec887cf231356fedd65d 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -94,6 +94,8 @@ tasks.jar {
@@ -102,6 +102,8 @@ tasks.jar {
}
tasks.withType<Javadoc> {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Purpur config files
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 79b26045a68ebb9b01e5bd06abbccaaef5489777..30a1ba5ec7752a1771046072d00ed1718e6d0b84 100644
index 30b49aed62fa67276e8964922ea3f84458d854bb..1895962c5ad0e9549cc90b0fa2861b7874d3e5aa 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1897,6 +1897,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi

File diff suppressed because it is too large Load Diff

View File

@@ -5,21 +5,25 @@ Subject: [PATCH] Rebrand
diff --git a/build.gradle.kts b/build.gradle.kts
index eefbd0a742b5875e0e9826b87c6bd4da66b2d7f7..b7310d4b38561a9314a9fb04bd1a15f15ee5028e 100644
index 4f01bbc22b2e94d5415c36c8cd828e0551e929aa..a9e3d314581b7ce5110266bdd53af1978b66e336 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -9,8 +9,8 @@ plugins {
@@ -9,12 +9,8 @@ plugins {
}
dependencies {
- implementation(project(":paper-api"))
- implementation(project(":paper-mojangapi"))
- implementation(project(":pufferfish-api")) // Pufferfish // Paper
- // Pufferfish start
- implementation("io.papermc.paper:paper-mojangapi:1.19-R0.1-SNAPSHOT") {
- exclude("io.papermc.paper", "paper-api")
- }
- // Pufferfish end
+ implementation(project(":purpur-api")) // Purpur
+ implementation("io.papermc.paper:paper-mojangapi:1.18.2-R0.1-SNAPSHOT") { exclude("io.papermc.paper", "paper-api") } // Purpur // todo: 1.19
// Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0")
@@ -40,6 +40,9 @@ dependencies {
@@ -44,6 +40,9 @@ dependencies {
runtimeOnly("mysql:mysql-connector-java:8.0.29")
runtimeOnly("com.lmax:disruptor:3.4.4") // Paper
@@ -29,16 +33,16 @@ index eefbd0a742b5875e0e9826b87c6bd4da66b2d7f7..b7310d4b38561a9314a9fb04bd1a15f1
runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.5")
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3")
runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.3")
@@ -62,7 +65,7 @@ tasks.jar {
@@ -82,7 +81,7 @@ tasks.jar {
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit",
- "Implementation-Version" to "git-Paper-$implementationVersion",
- "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish
+ "Implementation-Version" to "git-Purpur-$implementationVersion",// Purpur
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
"Specification-Version" to project.version,
@@ -150,7 +153,7 @@ fun TaskContainer.registerRunTask(
@@ -170,7 +169,7 @@ fun TaskContainer.registerRunTask(
name: String,
block: JavaExec.() -> Unit
): TaskProvider<JavaExec> = register<JavaExec>(name) {
@@ -170,10 +174,19 @@ index 1a859fef0848cf23a672012e9764965ae1c07ec5..14ed740609b14242c2a8d377a78b2f71
stringbuilder.append(CrashReport.getErrorComment());
stringbuilder.append("\n\n");
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9e1d3a22ed7e34e4968b5fb34cc77b661eb4747d..ef42da89af85367d7733de8896ce8dc45ea12d36 100644
index dc864d87b634bb317a3240832e1f5129733f248f..8b36917fe25c5a6f12bf834ef29335153aa43c34 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -908,7 +908,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -295,7 +295,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 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) {
@@ -910,7 +910,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
shutdownThread = Thread.currentThread();
org.spigotmc.WatchdogThread.doStop(); // Paper
if (!isSameThread()) {
@@ -182,20 +195,20 @@ index 9e1d3a22ed7e34e4968b5fb34cc77b661eb4747d..ef42da89af85367d7733de8896ce8dc4
while (this.getRunningThread().isAlive()) {
this.getRunningThread().stop();
try {
@@ -1654,7 +1654,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1656,7 +1656,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate
public String getServerModName() {
- return "Paper"; // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
- return "Pufferfish"; // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
+ return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
}
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index aea18838a17fc52e1bf8cd84cd185565e6e2246d..ddfee22ad840970e495c1a6d537fee810b137cbb 100644
index 5d6ceeecfbb55a1bfe77a1f1ac39b02993e714e3..85daf1de8ca0d48b348d1195c4243368999efee0 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -283,11 +283,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -285,11 +285,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware.");
// Spigot start
@@ -224,14 +237,14 @@ index c31b9a6b1d4548d507ecb60d42ca9f96f49f6c4b..f613825c69a8d683b8029fe345031259
private static final int DEFAULT_SIZE_THRESHOLD = 1024 * 8;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index f1e5ccfbcd08a73ac3aba9a1cb7b414faef81f9e..db154e64869ff7792d8d3c2c317cb9e00a25f048 100644
index 7899ae5e60ee2b30c6d4d7056c59bb38cc05b7c8..4bfcee5f8d60a082e3e8ca39eb59ebc5f33c159e 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -243,7 +243,7 @@ import javax.annotation.Nullable; // Paper
import javax.annotation.Nonnull; // Paper
public final class CraftServer implements Server {
- private final String serverName = "Paper"; // Paper
- private final String serverName = "Pufferfish"; // Paper // Pufferfish
+ private final String serverName = "Purpur"; // Paper // Purpur
private final String serverVersion;
private final String bukkitVersion = Versioning.getBukkitVersion();
@@ -290,27 +303,27 @@ index cdefb2025eedea7e204d70d568adaf1c1ec4c03c..d1526ed7197b883e1d1f07baf285bf5e
// (async tasks must live with race-conditions if they attempt to cancel between these few lines of code)
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 7c1e510a0ad4b69c1fedc3367a8216046efb228e..f736cc6b3dc5242a30eefd344af65f6958ece3a4 100644
index 2d9c98931df5d1c54adcfba78a9136841764f853..f736cc6b3dc5242a30eefd344af65f6958ece3a4 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -430,7 +430,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
@Override
public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
- return new com.destroystokyo.paper.PaperVersionFetcher();
- return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish
+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Purpur
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
index 774556a62eb240da42e84db4502e2ed43495be17..fb87620c742ff7912f5e8ccd2a7930dd605576d9 100644
index 80553face9c70c2a3d897681e7761df85b22d464..fb87620c742ff7912f5e8ccd2a7930dd605576d9 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
@@ -11,7 +11,7 @@ public final class Versioning {
public static String getBukkitVersion() {
String result = "Unknown-Version";
- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties");
- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Purpur
Properties properties = new Properties();

View File

@@ -5,14 +5,14 @@ Subject: [PATCH] Purpur config files
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
index 7b1843e16745ca8db2244e17490d291401f22679..acd95cf1dc7f009b63e44e4404e1736283fd458e 100644
index 061716934ba0a1f01e4d85d664034f72b3c7a765..acd95cf1dc7f009b63e44e4404e1736283fd458e 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -593,7 +593,7 @@ public class Metrics {
boolean logFailedRequests = config.getBoolean("logFailedRequests", false);
// Only start Metrics, if it's enabled in the config
if (config.getBoolean("enabled", true)) {
- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger());
- Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish
+ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Purpur
metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
@@ -22,7 +22,7 @@ index 7b1843e16745ca8db2244e17490d291401f22679..acd95cf1dc7f009b63e44e4404e17362
metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size()));
- metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline"));
- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown"));
- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown"));
+ metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur
+ metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Purpur
@@ -64,7 +64,7 @@ index 0148cadbeb41a882a05d982f0b34770b2829a04a..5213f132f826b47e2825644242aaece2
if (this.source.acceptsSuccess() && !this.silent) {
this.source.sendSystemMessage(message);
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index ddfee22ad840970e495c1a6d537fee810b137cbb..a4f19720738b167fd5932defabff9aa144f59c37 100644
index 85daf1de8ca0d48b348d1195c4243368999efee0..23454b660c123f4309d1b6eaab8f626f2663f2ef 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -223,6 +223,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -84,7 +84,7 @@ index ddfee22ad840970e495c1a6d537fee810b137cbb..a4f19720738b167fd5932defabff9aa1
io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
// Paper end
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index d59dea221ba0f1b9c14f403d3c6ea61b2c454316..9c7943b8712133aa71de113a5581f591cfd68657 100644
index 683ab88e76b53331e5d9fbcb0e1ee65365008693..32518aa959e3ea95376ac2c1904aa51fb7e52508 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -175,6 +175,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -96,7 +96,7 @@ index d59dea221ba0f1b9c14f403d3c6ea61b2c454316..9c7943b8712133aa71de113a5581f591
public final co.aikar.timings.WorldTimingsHandler timings; // Paper
public static BlockPos lastPhysicsProblem; // Spigot
private org.spigotmc.TickLimiter entityLimiter;
@@ -275,6 +277,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -284,6 +286,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper
@@ -105,7 +105,7 @@ index d59dea221ba0f1b9c14f403d3c6ea61b2c454316..9c7943b8712133aa71de113a5581f591
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index db154e64869ff7792d8d3c2c317cb9e00a25f048..00fdfad4164f010ddfbdbf8c4567a94641cc3789 100644
index 4bfcee5f8d60a082e3e8ca39eb59ebc5f33c159e..3d2763791fb50838d85387bbe37c726d9280a05b 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -950,6 +950,7 @@ public final class CraftServer implements Server {
@@ -132,7 +132,7 @@ index db154e64869ff7792d8d3c2c317cb9e00a25f048..00fdfad4164f010ddfbdbf8c4567a946
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
@@ -2694,6 +2697,18 @@ public final class CraftServer implements Server {
@@ -2699,6 +2702,18 @@ public final class CraftServer implements Server {
return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
}

View File

@@ -17,10 +17,10 @@ index c8057f98e16ba6e19640e0b250e5201e0f4f57db..9a5e3f75663f6dd3351e23d850c44687
public double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 03507b5ac5908962e9ebc4b98f53f23110573baa..ec60f7b80c0443fa5baf5acb1829a64b563049ff 100644
index 01ecd6548c57bd24b3c3e1ad0640062f4b781bbe..cf36af454fb82ecd34af2c468a209f6f3fd0e067 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3372,6 +3372,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -3373,6 +3373,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister");
private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support
@@ -28,7 +28,7 @@ index 03507b5ac5908962e9ebc4b98f53f23110573baa..ec60f7b80c0443fa5baf5acb1829a64b
@Override
public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
@@ -3396,6 +3397,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -3397,6 +3398,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex);
this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Component related conveniences
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 062a06dbff672235acc87624f1b7c28f04ffce32..54999c41a39e8c5baed67e01be3d28385d9f64b7 100644
index 9a5e3f75663f6dd3351e23d850c446874c03b6a0..070b7d49b46e6e23b4baf33ac045582194579137 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1699,6 +1699,26 @@ public class ServerPlayer extends Player {
@@ -36,7 +36,7 @@ index 062a06dbff672235acc87624f1b7c28f04ffce32..54999c41a39e8c5baed67e01be3d2838
public void displayClientMessage(Component message, boolean actionBar) {
this.sendSystemMessage(message, actionBar ? ChatType.GAME_INFO : ChatType.SYSTEM);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index f79c4212a5a3f564d00749f21e32639096c3257a..f5031d16853a3462f6049963180f50536889a301 100644
index 20cdfdb3b9351f74e89bc45b3ab972384165659a..3a52624a0e0f5f6667f4bd78c4a42f5568a25ce3 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1067,6 +1067,20 @@ public abstract class PlayerList {
@@ -81,10 +81,10 @@ index 67bce77093dcc126098731047447da2031e3388d..c4088446d30c3b25cf196f51fd394cd0
return this.isFireSource;
}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 0473a4d80f58538ea3cabcd38684339b27c1d29c..2c42e2c39a13372833a4ba9a027e0315b150ab6c 100644
index fa3263bffcfe042c2f210f85c6868fff08132a7c..2ec7eed33a322254ea9382554e0b7bfc558e0960 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -3732,6 +3732,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -3765,6 +3765,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
return SlotAccess.NULL;
}

View File

@@ -22,10 +22,10 @@ index 153451ecd5b3c8e8ecb2d5ec91ccd582d4300899..56536c39bccfe097f8227c74a0d16799
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 ef42da89af85367d7733de8896ce8dc45ea12d36..257ab642762724ea9ed1bab719e1f7844835e410 100644
index 8b36917fe25c5a6f12bf834ef29335153aa43c34..bee6004f68f344b2979f9262d99d5d08802751ab 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1531,6 +1531,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1533,6 +1533,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
ServerLevel worldserver = (ServerLevel) iterator.next();
worldserver.hasPhysicsEvent = org.bukkit.event.block.BlockPhysicsEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper
worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper
@@ -34,7 +34,7 @@ index ef42da89af85367d7733de8896ce8dc45ea12d36..257ab642762724ea9ed1bab719e1f784
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 aaa7ad2a14389dc0dbc0d0fa3fb5ea16ec4172f6..d3624f5a4e3ab9f09d1588a648acba6920e95cfc 100644
index f492833ff7b7162638777f0777366cfc70274d5d..d8c014f2bccd7a47c064d802fcc0acb787c18eda 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -218,6 +218,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -66,10 +66,10 @@ index 070b7d49b46e6e23b4baf33ac045582194579137..f4b33e5788665eefef35e701ed99d58d
public void doTick() {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index ec60f7b80c0443fa5baf5acb1829a64b563049ff..e3f900e33096ff5636f5ed6d39531e05a05f6593 100644
index cf36af454fb82ecd34af2c468a209f6f3fd0e067..3b7427d6d59006c84fbd8d16d4446e7670761e66 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2659,6 +2659,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -2660,6 +2660,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
@@ -79,7 +79,7 @@ index ec60f7b80c0443fa5baf5acb1829a64b563049ff..e3f900e33096ff5636f5ed6d39531e05
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 ClientboundAddEntityPacket(entity));
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 3f8bddf450f3b0382144bac750195c6390dd7495..a964f9a09b9b9d16c72691ee4d7924e0a25b7876 100644
index 2ec7eed33a322254ea9382554e0b7bfc558e0960..dd4f434d26814f46285f2bd23f8a4b53c89872d7 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -356,7 +356,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -91,7 +91,7 @@ index 3f8bddf450f3b0382144bac750195c6390dd7495..a964f9a09b9b9d16c72691ee4d7924e0
private float eyeHeight;
public boolean isInPowderSnow;
public boolean wasInPowderSnow;
@@ -2723,6 +2723,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -2756,6 +2756,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
this.passengers = ImmutableList.copyOf(list);
}
@@ -104,7 +104,7 @@ index 3f8bddf450f3b0382144bac750195c6390dd7495..a964f9a09b9b9d16c72691ee4d7924e0
}
return true; // CraftBukkit
}
@@ -2763,6 +2769,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -2796,6 +2802,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
return false;
}
// Spigot end
@@ -119,7 +119,7 @@ index 3f8bddf450f3b0382144bac750195c6390dd7495..a964f9a09b9b9d16c72691ee4d7924e0
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
@@ -4417,4 +4431,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -4502,4 +4516,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
return ((ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end
@@ -194,10 +194,10 @@ index c1e9b40a4a0f9cdc650caa88b5ea132e06ee2496..882ab40c8cdea8c214cb8344b3ccecdd
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f2757f8443f8 100644
index 39fab6a5195e32ae6ffc9988e6fcecfe96be2f76..14444b86758912e9938026178ac3ba4e16e3b966 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -221,9 +221,9 @@ public abstract class LivingEntity extends Entity {
@@ -220,9 +220,9 @@ public abstract class LivingEntity extends Entity {
protected int deathScore;
public float lastHurt;
public boolean jumping;
@@ -210,7 +210,7 @@ index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f275
protected int lerpSteps;
protected double lerpX;
protected double lerpY;
@@ -288,7 +288,7 @@ public abstract class LivingEntity extends Entity {
@@ -287,7 +287,7 @@ public abstract class LivingEntity extends Entity {
this.effectsDirty = true;
this.useItem = ItemStack.EMPTY;
this.lastClimbablePos = Optional.empty();
@@ -219,7 +219,7 @@ index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f275
this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit
// CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor
this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue());
@@ -339,6 +339,7 @@ public abstract class LivingEntity extends Entity {
@@ -338,6 +338,7 @@ public abstract class LivingEntity extends Entity {
public static AttributeSupplier.Builder createLivingAttributes() {
return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS);
}
@@ -227,7 +227,7 @@ index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f275
@Override
protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) {
@@ -2627,7 +2628,7 @@ public abstract class LivingEntity extends Entity {
@@ -2648,7 +2649,7 @@ public abstract class LivingEntity extends Entity {
}
protected long lastJumpTime = 0L; // Paper
@@ -236,7 +236,7 @@ index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f275
double d0 = (double) this.getJumpPower() + this.getJumpBoostPower();
Vec3 vec3d = this.getDeltaMovement();
// Paper start
@@ -3377,8 +3378,10 @@ public abstract class LivingEntity extends Entity {
@@ -3398,8 +3399,10 @@ public abstract class LivingEntity extends Entity {
this.pushEntities();
this.level.getProfiler().pop();
// Paper start
@@ -249,7 +249,7 @@ index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f275
Location from = new Location(this.level.getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO);
Location to = new Location (this.level.getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot());
io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone());
@@ -3388,6 +3391,21 @@ public abstract class LivingEntity extends Entity {
@@ -3409,6 +3412,21 @@ public abstract class LivingEntity extends Entity {
absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
}
}
@@ -272,7 +272,7 @@ index e8dc99752d06ca40f17f3ad2c829b2447b703d7c..577e7737d234e89a8a0a16bd00b4f275
// Paper end
if (!this.level.isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 3646b969fa51b9683ab4137e530c3a6f6fc6c465..c04de0abe8ff2eb9a8ca38912e60520f6b2af0f5 100644
index e8e60ea8b9e97ed87be78752f398ab25ba8e9a1b..2be421f6584dc184dcd5d7589bd65c1f402a0eaf 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -146,8 +146,8 @@ public abstract class Mob extends LivingEntity {
@@ -286,7 +286,7 @@ index 3646b969fa51b9683ab4137e530c3a6f6fc6c465..c04de0abe8ff2eb9a8ca38912e60520f
this.jumpControl = new JumpControl(this);
this.bodyRotationControl = this.createBodyControl();
this.navigation = this.createNavigation(world);
@@ -1317,7 +1317,7 @@ public abstract class Mob extends LivingEntity {
@@ -1323,7 +1323,7 @@ public abstract class Mob extends LivingEntity {
protected void onOffspringSpawnedFromEgg(Player player, Mob child) {}
protected InteractionResult mobInteract(Player player, InteractionHand hand) {
@@ -295,7 +295,7 @@ index 3646b969fa51b9683ab4137e530c3a6f6fc6c465..c04de0abe8ff2eb9a8ca38912e60520f
}
public boolean isWithinRestriction() {
@@ -1688,4 +1688,52 @@ public abstract class Mob extends LivingEntity {
@@ -1694,4 +1694,52 @@ public abstract class Mob extends LivingEntity {
public Iterable<BlockPos> iteratePathfindingStartNodeCandidatePositions() {
return ImmutableSet.of(new BlockPos(this.getBoundingBox().minX, (double) this.getBlockY(), this.getBoundingBox().minZ), new BlockPos(this.getBoundingBox().minX, (double) this.getBlockY(), this.getBoundingBox().maxZ), new BlockPos(this.getBoundingBox().maxX, (double) this.getBlockY(), this.getBoundingBox().minZ), new BlockPos(this.getBoundingBox().maxX, (double) this.getBlockY(), this.getBoundingBox().maxZ));
}
@@ -349,14 +349,15 @@ index 3646b969fa51b9683ab4137e530c3a6f6fc6c465..c04de0abe8ff2eb9a8ca38912e60520f
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
index c770ee21b7b699522941f6a1584d532001c04082..f274bef4726f9e23640f3a84c620e7343e96deb3 100644
index 9bce290eb0c2cfef4896a3f2076c80bf3d76bd56..00fc98797aea23e1f586b8e7f85fc27e2019352f 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
@@ -22,13 +22,20 @@ public class AttributeMap {
@@ -22,15 +22,22 @@ public class AttributeMap {
private final Map<Attribute, AttributeInstance> attributes = Maps.newHashMap();
private final Set<AttributeInstance> dirtyAttributes = Sets.newHashSet();
private final AttributeSupplier supplier;
+ private final net.minecraft.world.entity.LivingEntity entity; // Purpur
private final java.util.function.Function<Attribute, AttributeInstance> createInstance; // Pufferfish
public AttributeMap(AttributeSupplier defaultAttributes) {
+ // Purpur start
@@ -366,6 +367,7 @@ index c770ee21b7b699522941f6a1584d532001c04082..f274bef4726f9e23640f3a84c620e734
+ this.entity = entity;
+ // Purpur end
this.supplier = defaultAttributes;
this.createInstance = attribute -> this.supplier.createInstance(this::onAttributeModified, attribute); // Pufferfish
}
private void onAttributeModified(AttributeInstance instance) {
@@ -374,7 +376,7 @@ index c770ee21b7b699522941f6a1584d532001c04082..f274bef4726f9e23640f3a84c620e734
this.dirtyAttributes.add(instance);
}
@@ -40,7 +47,7 @@ public class AttributeMap {
@@ -42,11 +49,10 @@ public class AttributeMap {
public Collection<AttributeInstance> getSyncableAttributes() {
return this.attributes.values().stream().filter((attribute) -> {
@@ -383,6 +385,10 @@ index c770ee21b7b699522941f6a1584d532001c04082..f274bef4726f9e23640f3a84c620e734
}).collect(Collectors.toList());
}
-
@Nullable
public AttributeInstance getInstance(Attribute attribute) {
return this.attributes.computeIfAbsent(attribute, this.createInstance); // Pufferfish - cache lambda, as for some reason java allocates it anyways
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
index d5d2b58f103d6bb50a4657299876ac02b77f258a..449b13ab3aeaebdf1e315700446b62b20e275e9b 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
@@ -547,7 +553,7 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..60d21d6171b9af20a4c6fcc0d564a31a
}
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index 50d4595b81f24949011c7565c5e3fc8c26c86019..f7f3daa646e3f43ae503a67b7c52faef84bff0da 100644
index 234ad92d666775dcf5a29a60551b17cbb1d8e6ec..2edc11b093dbfc96d287dc9d3e208cc2a39c537e 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityDimensions;
@@ -2188,7 +2194,7 @@ index 45c3cec839a7c23903dedf6e3e004305da2adceb..248531727dcafb71d7d2d2767205e09a
this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this));
this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers());
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index da5e6141f548539cac720aba558e1b6f3a87e474..bd88b617eb5a496943b4c21d4fad1be8e208eb23 100644
index fdd2c63ff0017bafa544a3cff2ee6d2d62c92cb3..32b31e5efb5fc68430b9bcd4cd972494f53accc8 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -97,6 +97,28 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
@@ -2220,7 +2226,7 @@ index da5e6141f548539cac720aba558e1b6f3a87e474..bd88b617eb5a496943b4c21d4fad1be8
@Override
public Map<String, Vector3f> getModelRotationValues() {
return this.modelRotationValues;
@@ -523,14 +545,22 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
@@ -525,14 +547,22 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
private static class AxolotlMoveControl extends SmoothSwimmingMoveControl {
private final Axolotl axolotl;
@@ -2243,7 +2249,7 @@ index da5e6141f548539cac720aba558e1b6f3a87e474..bd88b617eb5a496943b4c21d4fad1be8
if (!this.axolotl.isPlayingDead()) {
super.tick();
}
@@ -545,9 +575,9 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
@@ -547,9 +577,9 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
}
@Override
@@ -2256,7 +2262,7 @@ index da5e6141f548539cac720aba558e1b6f3a87e474..bd88b617eb5a496943b4c21d4fad1be8
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
index 56dd01801f56c56d07101e7e22b58ac059f5f07f..edf7defbd600f289de35af4a7fc57aedf8504442 100644
index f489301701f8abfb8f509d91089c1433db2346f8..ba47201f7b9ebfba28dc2f7ddc89375a8662476d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -89,6 +89,23 @@ public class Goat extends Animal {
@@ -2283,11 +2289,12 @@ index 56dd01801f56c56d07101e7e22b58ac059f5f07f..edf7defbd600f289de35af4a7fc57aed
@Override
protected Brain.Provider<Goat> brainProvider() {
return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES);
@@ -166,6 +183,7 @@ public class Goat extends Animal {
@@ -167,7 +184,7 @@ public class Goat extends Animal {
@Override
protected void customServerAiStep() {
this.level.getProfiler().push("goatBrain");
+ if (getRider() == null || !this.isControllable())// Purpur - only use brain if no rider
- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick((ServerLevel) this.level, this);
this.level.getProfiler().pop();
this.level.getProfiler().push("goatActivityUpdate");
@@ -3220,7 +3227,7 @@ index d02286d553c600fe7e75f48e278e380d21c5b868..82b03488178962eb74fe252d561ba8ce
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index f22e615dba31619c97bf58930da060476a52facf..94dbdbd161202e346e1c496924139a18f6cdf9fe 100644
index f5bb64f9f683cf21e772035e9be100ed2ddf8bc6..a27394f0188f643a602e126c484d0de440d19409 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -87,9 +87,27 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -3268,7 +3275,7 @@ index f22e615dba31619c97bf58930da060476a52facf..94dbdbd161202e346e1c496924139a18
float f = this.getLightLevelDependentMagicValue();
if (f > 0.5F && this.level.canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
@@ -382,6 +401,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -388,6 +407,7 @@ public class EnderMan extends Monster implements NeutralMob {
public boolean hurt(DamageSource source, float amount) {
if (this.isInvulnerableTo(source)) {
return false;
@@ -4636,7 +4643,7 @@ index d0567234d1261227d29bb254f959604dc91b3c72..cf9f43d1205453af88ffdc2e96fe4376
public void setPersistentAngerTarget(@Nullable UUID angryAt) {
this.persistentAngerTarget = angryAt;
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
index 45741410a13cffe3419e34b5607b048bbcf1c3ff..8e93f0c152a5ac98588b3afaa631ebbbc9e4ed79 100644
index 5d487f1613b1fc5807283c20e5cc23a432d08f42..f2afd5f8ad916f0cf4674c6b4f973715999c6641 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -67,6 +67,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -4663,16 +4670,17 @@ index 45741410a13cffe3419e34b5607b048bbcf1c3ff..8e93f0c152a5ac98588b3afaa631ebbb
@Override
public boolean canBeLeashed(Player player) {
return !this.isLeashed();
@@ -129,6 +146,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -130,7 +147,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@Override
protected void customServerAiStep() {
this.level.getProfiler().push("hoglinBrain");
+ if (getRider() == null || !this.isControllable())// Purpur - only use brain if no rider
- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick((ServerLevel)this.level, this);
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 793576928dad6752dddd86e62d4c0800d8515fc4..d30e9c880323481695824f39abc1cb02204bfe44 100644
index 9bde52b723237b1f0f945bc564009e3507993508..b5b2d1f8ab8dedfa38e0ed4c99a0e0088fa4e4cc 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
@@ -95,6 +95,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -4699,11 +4707,12 @@ index 793576928dad6752dddd86e62d4c0800d8515fc4..d30e9c880323481695824f39abc1cb02
@Override
public void addAdditionalSaveData(CompoundTag nbt) {
super.addAdditionalSaveData(nbt);
@@ -292,6 +309,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -293,7 +310,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@Override
protected void customServerAiStep() {
this.level.getProfiler().push("piglinBrain");
+ if (getRider() == null || !this.isControllable()) // Purpur - only use brain if no rider
- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick((ServerLevel) this.level, this);
this.level.getProfiler().pop();
PiglinAi.updateActivity(this);
@@ -4753,10 +4762,10 @@ index ac75c54e897565e340b66823caeed92ba1d1641a..ff149234a8f3e1c94961e41d5bc81174
this.level.getProfiler().pop();
PiglinBruteAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 10b45ec24a5a0867106d1694312385ad1e267f43..850bfb8d08281c91ae8e17b4db38ffdaae2dbf96 100644
index 93077e8c6b5a35adc6febb749d1d08be172402f1..a6519bf96f39fa69ecb65ef25dba80261bb03323 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -153,6 +153,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -155,6 +155,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE));
}
@@ -4785,15 +4794,16 @@ index 10b45ec24a5a0867106d1694312385ad1e267f43..850bfb8d08281c91ae8e17b4db38ffda
@Override
public Brain<Villager> getBrain() {
return (Brain<Villager>) super.getBrain(); // CraftBukkit - decompile error
@@ -247,6 +269,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
protected void customServerAiStep() { mobTick(false); }
protected void mobTick(boolean inactive) {
@@ -252,7 +274,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.level.getProfiler().push("villagerBrain");
+ if (getRider() == null || !this.isControllable())// Purpur - only use brain if no rider
if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // Paper
this.level.getProfiler().pop();
if (this.assignProfessionWhenSpawned) {
@@ -304,7 +327,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
// Pufferfish start
if (!inactive) {
- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick((ServerLevel) this.level, this); // Paper
}
// Pufferfish end
@@ -312,7 +334,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) {
if (this.isBaby()) {
this.setUnhappy();
@@ -4802,7 +4812,7 @@ index 10b45ec24a5a0867106d1694312385ad1e267f43..850bfb8d08281c91ae8e17b4db38ffda
} else {
boolean flag = this.getOffers().isEmpty();
@@ -317,8 +340,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -325,8 +347,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
if (flag) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index a964f9a09b9b9d16c72691ee4d7924e0a25b7876..f58ad1b263af2ab9d829cd93056352e2ef9254e4 100644
index dd4f434d26814f46285f2bd23f8a4b53c89872d7..aea8814bf1ed44075c54b18fcdc8676579f07a6e 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -155,7 +155,7 @@ import org.bukkit.plugin.PluginManager;
@@ -34,10 +34,10 @@ index 882ab40c8cdea8c214cb8344b3ccecddb2967c1c..cb79d2c958fbd34f8c8818e7e1c0db88
@Override
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 577e7737d234e89a8a0a16bd00b4f2757f8443f8..402bd611231d4547a469a70429f006a84546a0eb 100644
index 14444b86758912e9938026178ac3ba4e16e3b966..5a45e04f81171b3682cf39fcd3e35e440dec9090 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -289,6 +289,7 @@ public abstract class LivingEntity extends Entity {
@@ -288,6 +288,7 @@ public abstract class LivingEntity extends Entity {
this.useItem = ItemStack.EMPTY;
this.lastClimbablePos = Optional.empty();
this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur
@@ -45,7 +45,7 @@ index 577e7737d234e89a8a0a16bd00b4f2757f8443f8..402bd611231d4547a469a70429f006a8
this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit
// CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor
this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue());
@@ -304,6 +305,8 @@ public abstract class LivingEntity extends Entity {
@@ -303,6 +304,8 @@ public abstract class LivingEntity extends Entity {
this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap()))));
}
@@ -55,7 +55,7 @@ index 577e7737d234e89a8a0a16bd00b4f2757f8443f8..402bd611231d4547a469a70429f006a8
return this.brain;
}
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index f7f3daa646e3f43ae503a67b7c52faef84bff0da..a02502ce8916c6b817270297412f961d5fcf4689 100644
index 2edc11b093dbfc96d287dc9d3e208cc2a39c537e..007c945725721ddb8a3dc4b8085e8c68da741b93 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -90,6 +90,18 @@ public class Bat extends AmbientCreature {
@@ -459,7 +459,7 @@ index 248531727dcafb71d7d2d2767205e09a8c0f1876..01c8508571a88c22359cbf36341338c5
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index bd88b617eb5a496943b4c21d4fad1be8e208eb23..53aef0ac481c3e79dfb04c33cb17bbdd89b2438b 100644
index 32b31e5efb5fc68430b9bcd4cd972494f53accc8..a80a7d460051a39fe805ae669b4586fb42e46943 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -117,6 +117,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
@@ -475,7 +475,7 @@ index bd88b617eb5a496943b4c21d4fad1be8e208eb23..53aef0ac481c3e79dfb04c33cb17bbdd
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
index edf7defbd600f289de35af4a7fc57aedf8504442..49b289fce943719a63df454fefab725a2b3a7de5 100644
index ba47201f7b9ebfba28dc2f7ddc89375a8662476d..aa2abe00478b002fc90166441d8b89c7046ed022 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -104,6 +104,11 @@ public class Goat extends Animal {
@@ -719,7 +719,7 @@ index 0f8ce0c6ddbb37a61c6b15bb769b627bcd8105fa..6ed9e4e98c46b51cf398641ffb66abf3
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index 314454b8c0197002c6c2529ffb75724de16cf7a6..49454ad2de73c0a50ac1e3b9cda35f6c66e416f6 100644
index 079a85f1520cda6a0fb72d0dd7f9e18aec6a6c91..c1b67d5dc5fd533fb2aa28a5c7d9dd87cc7412d8 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -160,6 +160,11 @@ public class EnderDragon extends Mob implements Enemy {
@@ -735,7 +735,7 @@ index 314454b8c0197002c6c2529ffb75724de16cf7a6..49454ad2de73c0a50ac1e3b9cda35f6c
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
index b271c8b1aa75df1b9e0d7b011aacacccfe5ea4bc..ef528ad1571b7dcd180c70160fe6b17b2d7a18b8 100644
index dd7bd70e0b905eea690c2d20b8438b9476d2badc..1005e47452f6437b75b050e695493647c92b7cf5 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -212,6 +212,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -829,7 +829,7 @@ index 869a2ee5e0775cc477fb56063dfa4ce4a0c6e3f2..4b58ca48deda0410edf9ad3c9079858d
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
index 1bf856171a9eccf77857232a30d6327b9d8017c6..725e98128fca670e370a35e763050909074b2653 100644
index 82b03488178962eb74fe252d561ba8cee32eda95..01be40f1740fc689b101fc596dbbb1e66de0bfb1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java
@@ -48,6 +48,11 @@ public class ElderGuardian extends Guardian {
@@ -845,7 +845,7 @@ index 1bf856171a9eccf77857232a30d6327b9d8017c6..725e98128fca670e370a35e763050909
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 94dbdbd161202e346e1c496924139a18f6cdf9fe..1878375dc4535e0b681c9fe11c3d04b4811679be 100644
index a27394f0188f643a602e126c484d0de440d19409..d86aeb3f91a01206e7cb13caae3e5c571a73952c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -102,6 +102,11 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -1131,7 +1131,7 @@ index e73644f453bed8523bfad47764018362a416b5ea..e239bcc4d4afe48e9fc204ad38d8bc76
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java
index e84a23c52a53095a077ed21bf4d1ddbad303442d..d1d58b8b109fb96ffe0561c8f8e3bb38a5a06e59 100644
index 3ccf5083333751ee1eede1d3e1a28b6f7bf7f23c..5146ae55c6c486d5a6619a0f30e41e07988faf95 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
@@ -103,6 +103,37 @@ public class Slime extends Mob implements Enemy {
@@ -1384,7 +1384,7 @@ index cf9f43d1205453af88ffdc2e96fe4376ecd45fbf..bc3ffb8867d5f7c2fa548d31256341d3
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
index 8e93f0c152a5ac98588b3afaa631ebbbc9e4ed79..958b32de685653e75a9495cb0108e6982cc4cc97 100644
index f2afd5f8ad916f0cf4674c6b4f973715999c6641..e99ffbf30652e188e88f8e17ed41d39ff25c9f73 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -82,6 +82,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1400,7 +1400,7 @@ index 8e93f0c152a5ac98588b3afaa631ebbbc9e4ed79..958b32de685653e75a9495cb0108e698
@Override
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 d30e9c880323481695824f39abc1cb02204bfe44..9b8925fe938962264fdf49e97abc660d7fe8476a 100644
index b5b2d1f8ab8dedfa38e0ed4c99a0e0088fa4e4cc..9a14ac198433e9bdfa2dabd4d3ae88ba17fd86ea 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
@@ -110,6 +110,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1432,10 +1432,10 @@ index ff149234a8f3e1c94961e41d5bc8117460b301d9..75db61c5aab66234b26f7899229ddca8
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 850bfb8d08281c91ae8e17b4db38ffdaae2dbf96..8f220534aa2af1d85968f1fa138b1d21f05ee0b2 100644
index a6519bf96f39fa69ecb65ef25dba80261bb03323..ef08ec3eb88ee1ab624e2bd38aaff5e8f97720f2 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -173,6 +173,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -175,6 +175,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this));
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Timings stuff
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
index 06bff37e4c1fddd3be6343049a66787c63fb420c..fcc9d08b70671beee7db681544b0d50bf0784c5a 100644
index 2cc44fbf8e5bd436b6d4e19f6c06b351e750cb31..fa8eb9fb4122097d2a5cb1d07f75c830ad6b2f57 100644
--- a/src/main/java/co/aikar/timings/TimingsExport.java
+++ b/src/main/java/co/aikar/timings/TimingsExport.java
@@ -239,9 +239,13 @@ public class TimingsExport extends Thread {
@@ -239,10 +239,14 @@ public class TimingsExport extends Thread {
// Information on the users Config
parent.put("config", createObject(
@@ -16,15 +16,17 @@ index 06bff37e4c1fddd3be6343049a66787c63fb420c..fcc9d08b70671beee7db681544b0d50b
+ // Purpur start
+ pair("server.properties", mapAsJSON(Bukkit.spigot().getServerProperties())),
pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)),
- pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null))
- pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Pufferfish
- pair("pufferfish", mapAsJSON(gg.pufferfish.pufferfish.PufferfishConfig.getConfigCopy(), null)) // Pufferfish
+ pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)),
+ pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)),
+ pair("pufferfish", mapAsJSON(gg.pufferfish.pufferfish.PufferfishConfig.getConfigCopy(), null)), // Pufferfish
+ pair("purpur", mapAsJSON(Bukkit.spigot().getPurpurConfig(), null))
+ // Purpur end
));
new TimingsExport(listeners, parent, history).start();
@@ -282,6 +286,19 @@ public class TimingsExport extends Thread {
@@ -283,6 +287,19 @@ public class TimingsExport extends Thread {
return timingsCost;
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Barrels and enderchests 6 rows
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index f5031d16853a3462f6049963180f50536889a301..ae3a7cc79897b2a247d63d1428d1a97e586d64ca 100644
index 3a52624a0e0f5f6667f4bd78c4a42f5568a25ce3..1e4be9af14b305aed38a7a3cf38a4659ba3aeb18 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1192,6 +1192,27 @@ public abstract class PlayerList {
@@ -37,7 +37,7 @@ index f5031d16853a3462f6049963180f50536889a301..ae3a7cc79897b2a247d63d1428d1a97e
public boolean isWhiteListed(GameProfile profile) {
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 4a04249441959340ad5f3a1879edd21208c7a9dc..e0a30fdeeb3402f9b34dc6b53594c85b10eab86f 100644
index 02cf1fdc58c33431a070a970add325eb7a278974..f86fd6a5712d1a3b6e0a306421eaf833f6377e65 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -186,6 +186,7 @@ public abstract class Player extends LivingEntity {

View File

@@ -25,7 +25,7 @@ index 721971f7618751a2e95f1c49fdc48a9c0c672cab..7b141c495095afcd9c8b04c059d692e8
double d = this.llama.distanceToSqr(this.llama.getCaravanHead());
if (d > 676.0D) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index 19457fa164c81fd640dbe8bf1f666cb437a20487..5b15b9451007a0ffcf442a33de81ff5d8b8649a5 100644
index fd5802bf7554590a19b3d5fc50c9ced02232f294..8512103686380c2114851666fce649d573a61355 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -68,6 +68,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {

View File

@@ -68,7 +68,7 @@ index f4b33e5788665eefef35e701ed99d58d0ea1b3c2..e40e8e837273c243f5ccc192514d5404
return this.stats;
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index e3f900e33096ff5636f5ed6d39531e05a05f6593..b67bd2d606e44804f51478847e01da18f0d64349 100644
index 3b7427d6d59006c84fbd8d16d4446e7670761e66..df5cbfda7b3eae38583d01ea96874bdb7f5b3b65 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -313,6 +313,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -114,7 +114,7 @@ index e3f900e33096ff5636f5ed6d39531e05a05f6593..b67bd2d606e44804f51478847e01da18
// Skip the first time we do this
if (true) { // Spigot - don't skip any move events
Location oldTo = to.clone();
@@ -1478,7 +1500,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -1479,7 +1501,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
if (!this.player.isChangingDimension() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot
flag2 = true; // Paper - diff on change, this should be moved wrongly
@@ -123,7 +123,7 @@ index e3f900e33096ff5636f5ed6d39531e05a05f6593..b67bd2d606e44804f51478847e01da18
}
this.player.absMoveTo(d0, d1, d2, f, f1);
@@ -1528,6 +1550,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -1529,6 +1551,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -167,7 +167,7 @@ index e39965c2e50bc8ee424ea07819346e0611398e28..212ea98eeaaf4b20ba0896dab03cd092
private EntitySelector() {}
// Paper start
diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
index a7575b5ef56af6f53448d391abb4956e130148ca..0a9e4dc5d6d567605c587df9bcbb57d379b62877 100644
index e752c83df50fb9b670ecea2abc95426c2a009b6f..baa4f9026d31de92210300ecb8ee8c1b6d575435 100644
--- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
@@ -64,6 +64,10 @@ public class TargetingConditions {
@@ -305,10 +305,10 @@ index c38d9583d8ce50670d78b60d92c90d1d5eb4bbfc..01a2d17790b3adbc63fe742b9e5c11dd
public boolean untamedTamablesAreRidable = true;
public boolean useNightVisionWhenRiding = false;
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
index 1a1a1f4d0ac025daccc2d3f84faf6592819f4d5c..1ae88964fc3c05493516278d150537fd6699df2d 100644
index 8643df8d81714edf60eebd6984bac2c933d1fbd6..4e5583cdd78608108bb1788e6881d4b4fbf014af 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -199,6 +199,7 @@ public class ActivationRange
@@ -203,6 +203,7 @@ public class ActivationRange
continue;
}

View File

@@ -17,10 +17,10 @@ index 26345494ce190b5cd2ab58dd7d4b046796767b20..20d579a20e186e59975df1b35112015e
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 00fdfad4164f010ddfbdbf8c4567a94641cc3789..dac6769842d8e168d0366d610a0bd404062d341c 100644
index 3d2763791fb50838d85387bbe37c726d9280a05b..f6d46130130279f64caa21bfe1f702a2e3034527 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -2884,4 +2884,11 @@ public final class CraftServer implements Server {
@@ -2889,4 +2889,11 @@ public final class CraftServer implements Server {
}
// Paper end

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable server mod name
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 8184fcc7c2ec8e3fdfeb7d089860e7aa9c17ac4e..d0fef308a6b8848a7473484956716e6c36c315c0 100644
index bee6004f68f344b2979f9262d99d5d08802751ab..b844bffb6363efcb4d8a6fc8489542d7bcfa35d0 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1655,7 +1655,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1657,7 +1657,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate
public String getServerModName() {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity safeFallDistance
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 68bbd0c1facef4d3e21975ead5b7af19ac3c1254..33235a2aa69726b14b37dfbab0f6518f7874e4d9 100644
index 5a45e04f81171b3682cf39fcd3e35e440dec9090..6c769141376f6995d6572d5e3cf3a999ff954e82 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -256,6 +256,7 @@ public abstract class LivingEntity extends Entity {
@@ -255,6 +255,7 @@ public abstract class LivingEntity extends Entity {
private boolean skipDropExperience;
// CraftBukkit start
public int expToDrop;
@@ -16,7 +16,7 @@ index 68bbd0c1facef4d3e21975ead5b7af19ac3c1254..33235a2aa69726b14b37dfbab0f6518f
public boolean forceDrops;
public ArrayList<org.bukkit.inventory.ItemStack> drops = new ArrayList<org.bukkit.inventory.ItemStack>();
public final org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes;
@@ -355,8 +356,8 @@ public abstract class LivingEntity extends Entity {
@@ -354,8 +355,8 @@ public abstract class LivingEntity extends Entity {
this.tryAddSoulSpeed();
}
@@ -27,7 +27,7 @@ index 68bbd0c1facef4d3e21975ead5b7af19ac3c1254..33235a2aa69726b14b37dfbab0f6518f
if (!state.isAir()) {
double d1 = Math.min((double) (0.2F + f / 15.0F), 2.5D);
@@ -1945,7 +1946,7 @@ public abstract class LivingEntity extends Entity {
@@ -1966,7 +1967,7 @@ public abstract class LivingEntity extends Entity {
MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP);
float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1);
@@ -37,7 +37,7 @@ index 68bbd0c1facef4d3e21975ead5b7af19ac3c1254..33235a2aa69726b14b37dfbab0f6518f
protected void playBlockFallSound() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
index 66dfa478f941b47f470759f6b5e7050dae6387ab..aaf1264886394b156bd7d80a2021d2e8294ade99 100644
index 075c668b6855dd44102bf521864133565fcf16db..a1ffa88c3796df2973a2fc0aeafda5f78208bf85 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
@@ -325,7 +325,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,

View File

@@ -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 089a50948619f87e44c795453c6565c4b555cfc4..cb3b6708fcf647feac832023a00fe7ab0939da6b 100644
index b844bffb6363efcb4d8a6fc8489542d7bcfa35d0..cd583a9f0382ba7d58342df8a30ad7399f193db5 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -291,6 +291,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -16,7 +16,7 @@ index 089a50948619f87e44c795453c6565c4b555cfc4..cb3b6708fcf647feac832023a00fe7ab
public volatile Thread shutdownThread; // Paper
public volatile boolean abnormalExit = false; // Paper
@@ -1170,6 +1171,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1172,6 +1173,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.recentTps[1] = tps5.getAverage();
this.recentTps[2] = tps15.getAverage();
// Paper end
@@ -25,10 +25,10 @@ index 089a50948619f87e44c795453c6565c4b555cfc4..cb3b6708fcf647feac832023a00fe7ab
}
// Spigot end
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index dac6769842d8e168d0366d610a0bd404062d341c..3d328bbb7a35df0b4fc2ddc1ec72c809b01495c5 100644
index f6d46130130279f64caa21bfe1f702a2e3034527..4c5049f24ca449c0d572db79a39ef6c2d24b2aaa 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -2890,5 +2890,10 @@ public final class CraftServer implements Server {
@@ -2895,5 +2895,10 @@ public final class CraftServer implements Server {
public String getServerName() {
return this.getProperties().serverName;
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] PlayerSetSpawnerTypeWithEggEvent
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index b3a769bd144f948b4782bf47a7d37c45b52deab0..6ab4b747647f6fcd36a1f4d7ef8a3423a8171fcf 100644
index ec0319dd4b115e18b368027cc5dbe4d4d9c64840..6f461397fa0ce8540aecd3c291bb5f59909b2690 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -297,6 +297,16 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
@@ -25,7 +25,7 @@ index b3a769bd144f948b4782bf47a7d37c45b52deab0..6ab4b747647f6fcd36a1f4d7ef8a3423
public static ResourceLocation getKey(EntityType<?> type) {
return Registry.ENTITY_TYPE.getKey(type);
}
@@ -463,6 +473,16 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
@@ -465,6 +475,16 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
return this.category;
}
@@ -43,7 +43,7 @@ index b3a769bd144f948b4782bf47a7d37c45b52deab0..6ab4b747647f6fcd36a1f4d7ef8a3423
if (this.descriptionId == null) {
this.descriptionId = Util.makeDescriptionId("entity", Registry.ENTITY_TYPE.getKey(this));
diff --git a/src/main/java/net/minecraft/world/item/SpawnEggItem.java b/src/main/java/net/minecraft/world/item/SpawnEggItem.java
index fb37846e1c9b7715e32d0d5416b1ce4968e543df..d041b9e0a3e497f173cc64b191291c19f9b5b6bb 100644
index 6df94a75b7c4c2593598088d84cf0a4a57e3fd99..7aaf698239d0890f9633e6e01ada2a1a02de419a 100644
--- a/src/main/java/net/minecraft/world/item/SpawnEggItem.java
+++ b/src/main/java/net/minecraft/world/item/SpawnEggItem.java
@@ -68,6 +68,15 @@ public class SpawnEggItem extends Item {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] EMC - MonsterEggSpawnEvent
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 6ab4b747647f6fcd36a1f4d7ef8a3423a8171fcf..f2a59e99e35e5c704bb8399e48d92aebcd17ed35 100644
index 6f461397fa0ce8540aecd3c291bb5f59909b2690..2c3c3071a3987b2175f26e08714e47bf13f20345 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -346,22 +346,40 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
@@ -348,22 +348,40 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
@Nullable
public Entity spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY) {
@@ -52,7 +52,7 @@ index 6ab4b747647f6fcd36a1f4d7ef8a3423a8171fcf..f2a59e99e35e5c704bb8399e48d92aeb
// Paper end
// Paper start - Call PreCreatureSpawnEvent
org.bukkit.entity.EntityType type = org.bukkit.entity.EntityType.fromName(EntityType.getKey(this).getPath());
@@ -380,6 +398,19 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
@@ -382,6 +400,19 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
T t0 = this.create(worldserver, nbttagcompound, ichatbasecomponent, entityhuman, blockposition, enummobspawn, flag, flag1);
if (t0 != null && op != null) op.accept(t0); // Paper

View File

@@ -82,10 +82,10 @@ index e40e8e837273c243f5ccc192514d540440f49310..64183c02cf278b20ed59120fa20fc726
public Scoreboard getScoreboard() {
return this.getBukkitEntity().getScoreboard().getHandle();
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index b67bd2d606e44804f51478847e01da18f0d64349..194c352c1d038ca9726aecfd944b38d572bd2c02 100644
index df5cbfda7b3eae38583d01ea96874bdb7f5b3b65..487ce0230306fbfc78bc604e0a6ce202df628382 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2002,12 +2002,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -2003,12 +2003,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleResourcePackResponse(ServerboundResourcePackPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable villager brain ticks
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 1e56f842c0c76ae2c8ee79a31b319cb2c5c29765..32eb697dd08c1ef0b832659e702675f70f9145cf 100644
index ef08ec3eb88ee1ab624e2bd38aaff5e8f97720f2..4cb1cf2b51f1c58e2600996f1d67dcef9e05e3fe 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -139,6 +139,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -14,9 +14,9 @@ index 1e56f842c0c76ae2c8ee79a31b319cb2c5c29765..32eb697dd08c1ef0b832659e702675f7
});
+ private final int brainTickOffset; // Purpur
public Villager(EntityType<? extends Villager> entityType, Level world) {
this(entityType, world, VillagerType.PLAINS);
@@ -151,6 +152,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
public long nextGolemPanic = -1; // Pufferfish
@@ -153,6 +154,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.getNavigation().setCanFloat(true);
this.setCanPickUpLoot(true);
this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE));
@@ -24,17 +24,17 @@ index 1e56f842c0c76ae2c8ee79a31b319cb2c5c29765..32eb697dd08c1ef0b832659e702675f7
}
// Purpur start
@@ -274,6 +276,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
protected void customServerAiStep() { mobTick(false); }
protected void mobTick(boolean inactive) {
@@ -279,6 +281,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.level.getProfiler().push("villagerBrain");
+ // Purpur start
+ boolean tick = (level.getGameTime() + brainTickOffset) % level.purpurConfig.villagerBrainTicks == 0;
+ if (((ServerLevel) level).getServer().lagging ? tick : level.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick)
+ // Purpur end
if (getRider() == null || !this.isControllable())// Purpur - only use brain if no rider
if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // Paper
this.level.getProfiler().pop();
// Pufferfish start
if (!inactive) {
+ // Purpur start
+ boolean tick = (level.getGameTime() + brainTickOffset) % level.purpurConfig.villagerBrainTicks == 0;
+ if (((ServerLevel) level).getServer().lagging ? tick : level.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick)
+ // Purpur end
if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick((ServerLevel) this.level, this); // Paper
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 81524c4f676766c09125187876b46e0704294880..93d89fb27044e5e97574122b0e7863694d245bf0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Alternative Keepalive Handling
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 194c352c1d038ca9726aecfd944b38d572bd2c02..b48b16e7e4a451c8a1603b2f89ff59c91947211e 100644
index 487ce0230306fbfc78bc604e0a6ce202df628382..1f7dbc3c773179a21f8b11c455ef9f4fa1971048 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -245,6 +245,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -38,7 +38,7 @@ index 194c352c1d038ca9726aecfd944b38d572bd2c02..b48b16e7e4a451c8a1603b2f89ff59c9
if (this.keepAlivePending) {
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
@@ -3357,6 +3373,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -3358,6 +3374,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleKeepAlive(ServerboundKeepAlivePacket packet) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index d3624f5a4e3ab9f09d1588a648acba6920e95cfc..f9df95b189318f08c42bb120c4fa815fc47683ac 100644
index d8c014f2bccd7a47c064d802fcc0acb787c18eda..16c6eedc545a34b92bccf448011b40f0916bbdb0 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -777,9 +777,15 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -792,9 +792,15 @@ public class ServerLevel extends Level implements WorldGenLevel {
boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper
if (flag1) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Charged creeper naturally spawn
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index 9921fd8278d14deeae9d61101f6800be58412948..e51bcd5158d17db613311e38f2810b650d522cf4 100644
index 0bf2355b7ac80227c06b3e85f1645559275a96e5..2a5f7fb0e60f41b6627255146ca18b271ac6395f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -143,6 +143,14 @@ public class Creeper extends Monster implements PowerableMob {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add option to set armorstand step height
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
index 593f210e5bf842d38955205757c162c2fdede511..9b71425f2c321d3130a409a0a5b47ac9c0c4bae6 100644
index 150afceb491cfd254c0f1b84800e6df14cf26676..ba9e851eebb25edf94efe8dfbd591e265ac3ac5a 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -666,6 +666,7 @@ public class ArmorStand extends LivingEntity {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Ender dragon always drop full exp
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index 49454ad2de73c0a50ac1e3b9cda35f6c66e416f6..bf05e13e6d385c87fdd36ac32db170f9b0a644af 100644
index c1b67d5dc5fd533fb2aa28a5c7d9dd87cc7412d8..9ce2527054f5163eae3d1216427378dcdf92a2fe 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -724,7 +724,7 @@ public class EnderDragon extends Mob implements Enemy {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Minecart settings and WASD controls
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 39d86b7b3a01f2eefb7c0725e930a5371e7baf46..317ce5fde32fd4869b41dfabfb5bdc7366f7d517 100644
index 64183c02cf278b20ed59120fa20fc7265321fc40..71f3fb4d60abff73dce22006345e210c706d448b 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1032,6 +1032,7 @@ public class ServerPlayer extends Player {
@@ -17,7 +17,7 @@ index 39d86b7b3a01f2eefb7c0725e930a5371e7baf46..317ce5fde32fd4869b41dfabfb5bdc73
if (!flag && isSpawnInvulnerable() && source != DamageSource.OUT_OF_WORLD) { // Purpur
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
index dd2dfffcb5715b34a58262a52e83ff3030212ac4..e3cf90b1506b5c6b96140799bc51c495ef5657ac 100644
index 3f31a3c17ecca6e93b794478129b95ecff4e1a9c..05031a1a8b9c42ea5cdf9d8ad9b6aeebe1fc823c 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
@@ -107,11 +107,13 @@ public abstract class AbstractMinecart extends Entity {
@@ -135,7 +135,7 @@ index 127a799f7848b32664b77bf67847ca6b8ac9a90d..178cd88a7de291136e0486617e8347b7
}
}
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 771c6cf992664b65ffbf4ae0192bc7b09f77c2e6..480f00ef2026e84b133655c5e18b1dc36b5a02ca 100644
index 939aca929038b90738c9b78c2fc3611088b18e72..2fe9daf2a1a4a007c9831155039159815242a545 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
@@ -72,7 +72,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 33235a2aa69726b14b37dfbab0f6518f7874e4d9..5e161a8cdd6d6303fa334600f70ac0352807c756 100644
index 6c769141376f6995d6572d5e3cf3a999ff954e82..ccc034d345d4c7ea1b8317023e2e410d5c231ec9 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1740,6 +1740,7 @@ public abstract class LivingEntity extends Entity {
@@ -1747,6 +1747,7 @@ public abstract class LivingEntity extends Entity {
this.dropEquipment(); // CraftBukkit - from below
if (this.shouldDropLoot() && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
@@ -16,7 +16,7 @@ index 33235a2aa69726b14b37dfbab0f6518f7874e4d9..5e161a8cdd6d6303fa334600f70ac035
this.dropFromLootTable(source, flag);
// Paper start
final boolean prev = this.clearEquipmentSlots;
@@ -1748,6 +1749,7 @@ public abstract class LivingEntity extends Entity {
@@ -1755,6 +1756,7 @@ public abstract class LivingEntity extends Entity {
// Paper end
this.dropCustomDeathLoot(source, i, flag);
this.clearEquipmentSlots = prev; // Paper

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix the dead lagging the server
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index cbd0f1ef7b3dad972b2e1f4b1d35c1f66ca9854f..10c46a38e55463f584afc69bd6af91ee96862fd8 100644
index aea8814bf1ed44075c54b18fcdc8676579f07a6e..24728fbacddf7cb6e5b6f3956cd950ab83867dc4 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1832,6 +1832,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -1865,6 +1865,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
this.yRotO = this.getYRot();
this.xRotO = this.getXRot();
this.setYHeadRot(yaw); // Paper - Update head rotation
@@ -17,10 +17,10 @@ index cbd0f1ef7b3dad972b2e1f4b1d35c1f66ca9854f..10c46a38e55463f584afc69bd6af91ee
public void absMoveTo(double x, double y, double z) {
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 5e161a8cdd6d6303fa334600f70ac0352807c756..38067bee49ec2498d840ded86ceeae4518034ae1 100644
index ccc034d345d4c7ea1b8317023e2e410d5c231ec9..bc19439abb1cbf548b1eda2a6527d9e825ea34ab 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2953,7 +2953,7 @@ public abstract class LivingEntity extends Entity {
@@ -2974,7 +2974,7 @@ public abstract class LivingEntity extends Entity {
}
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Skip events if there's no listeners
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
index a51040aec86c0be2b124619d8fea2111778ad684..231ef7aab08e0be4dd3e17617efa94581116aad0 100644
index ea5f0600d47b0f7c08b96eed91e5de255114637b..02add91d477dfef1bafa39c28b23dfc09418c939 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
@@ -393,6 +393,7 @@ public class Commands {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add permission for F3+N debug
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index d7e65c889167de315206ae2a36f305c6255950a1..a4a895a54ad0266301d50f95eaec3a2bb604f8f1 100644
index 407bcae5459cbc6c670f7f44dd8bb593935ffffa..db23e2afd1b9a7a8e1b29e48a31441b0a64beb5d 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1186,6 +1186,7 @@ public abstract class PlayerList {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index a653b79b3c81d5908d73e4f444d8c2baf62662de..2603e73b86c87125cd3f1804463281324a75105a 100644
index cd583a9f0382ba7d58342df8a30ad7399f193db5..832f6c7d38975426725f999659765ba49cfd7ccf 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1189,7 +1189,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1191,7 +1191,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.tickServer(this::haveTime);
this.profiler.popPush("nextTickWait");
this.mayHaveDelayedTasks = true;

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add enderman and creeper griefing controls
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index e51bcd5158d17db613311e38f2810b650d522cf4..f486b722ef0c82b449238effc045fa9f68860193 100644
index 2a5f7fb0e60f41b6627255146ca18b271ac6395f..9db014c82f6e8d1c64d592252b171683bd55c400 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -349,7 +349,7 @@ public class Creeper extends Monster implements PowerableMob {
@@ -18,10 +18,10 @@ index e51bcd5158d17db613311e38f2810b650d522cf4..f486b722ef0c82b449238effc045fa9f
// CraftBukkit start
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 1878375dc4535e0b681c9fe11c3d04b4811679be..da2f01f44ac24a3b3886436aa7356ebc315f5ed6 100644
index d86aeb3f91a01206e7cb13caae3e5c571a73952c..ad47267eb6797e1591841cb7a576fb65f6e81382 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -517,6 +517,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -523,6 +523,7 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean canUse() {
@@ -29,7 +29,7 @@ index 1878375dc4535e0b681c9fe11c3d04b4811679be..da2f01f44ac24a3b3886436aa7356ebc
return this.enderman.getCarriedBlock() == null ? false : (!this.enderman.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0);
}
@@ -564,6 +565,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -570,6 +571,7 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean canUse() {

View File

@@ -30,10 +30,10 @@ index 5eab7d50734551d96128dfebee126a1da4c51375..860b938335966cdd872404dc12b097b7
// CraftBukkit start
private CraftMerchant craftMerchant;
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 32eb697dd08c1ef0b832659e702675f70f9145cf..bb2677da87f66c1558d59714c833b72b5b2e42e7 100644
index 4cb1cf2b51f1c58e2600996f1d67dcef9e05e3fe..45fb970ec55a13f1f7b2e9858cc3c4d2ce9b0d75 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -174,6 +174,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -176,6 +176,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this));

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Allow leashing villagers
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index fdb8f0bb0996dec6724066ae6de103131fdde6a1..382f4d5ee0eba4a2ad9f7aa6895fda5390c43ac6 100644
index 2be421f6584dc184dcd5d7589bd65c1f402a0eaf..1e71f0d617b8ddd6d2d0466e5fa5acf98804a97b 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -1246,6 +1246,7 @@ public abstract class Mob extends LivingEntity {
@@ -1252,6 +1252,7 @@ public abstract class Mob extends LivingEntity {
if (!this.isAlive()) {
return InteractionResult.PASS;
} else if (this.getLeashHolder() == player) {
@@ -17,10 +17,10 @@ index fdb8f0bb0996dec6724066ae6de103131fdde6a1..382f4d5ee0eba4a2ad9f7aa6895fda53
// Paper start - drop leash variable
org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, !player.getAbilities().instabuild);
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index bb2677da87f66c1558d59714c833b72b5b2e42e7..6dd8e9c7d1999552b4b39a038cd733d695469e99 100644
index 45fb970ec55a13f1f7b2e9858cc3c4d2ce9b0d75..2087b4a4fbc4076c5ec59aaf73f1367ffcd0ef7c 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -181,6 +181,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -183,6 +183,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
public void initAttributes() {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.villagerMaxHealth);
}

Some files were not shown because too many files have changed in this diff Show More