mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
add pufferfish back to purpur
This commit is contained in:
514
patches/api/0001-Pufferfish-API-Changes.patch
Normal file
514
patches/api/0001-Pufferfish-API-Changes.patch
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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> {
|
||||
@@ -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
|
||||
4353
patches/server/0001-Pufferfish-Server-Changes.patch
Normal file
4353
patches/server/0001-Pufferfish-Server-Changes.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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() {
|
||||
@@ -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,
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 {
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
@@ -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
|
||||
@@ -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) {
|
||||
@@ -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) {
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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;
|
||||
@@ -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
|
||||
@@ -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 {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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;
|
||||
@@ -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() {
|
||||
@@ -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));
|
||||
@@ -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
Reference in New Issue
Block a user