diff --git a/README.md b/README.md index 71545f5..c340c32 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,13 @@ - **Fork of [Pufferfish](https://github.com/pufferfish-gg/Pufferfish)** for the best performance. - **Contains [Lithium](https://github.com/CaffeineMC/lithium-fabric) patches** which respect Vanilla parity. -- **Efficient redstone** relying on [Alternate Current](https://github.com/SpaceWalkerRS/alternate-current), up to 4 times faster than Paper's algorithm. +- **Efficient redstone** relying on [Alternate Current](https://github.com/SpaceWalkerRS/alternate-current), up to 4 times faster than Eigencraft's algorithm. - **(WIP) Implements [C2ME](https://github.com/RelativityMC/C2ME-fabric)** to improve chunk generation speed, I/O and loading. +- **Async Pathfinding and Multithreaded Entity Tracker** from [Petal](https://github.com/Bloom-host/Petal) which drastically reduce entity load. +- **Configurable chat report system** to disallow players from reporting others' messages to Mojang. - **Reduced bandwidth consumption and CPU usage** from avoiding sending useless packets in certain situations. - **Pre-tweaked** configuration files to reach optimal performance with minimal impact on normal behaviors. - **Login location** hiding feature, which adds another security layer in the logs for admins. -- **Toggleable metrics**, no one can collect data, not even us. - **Bugfixes** for several Minecraft issues. - **Faster process** for Vanilla methods. - **Plugin compatibility** with Spigot & Paper plugins. diff --git a/build-data/dev-imports.txt b/build-data/dev-imports.txt index f036ba7..b818b96 100644 --- a/build-data/dev-imports.txt +++ b/build-data/dev-imports.txt @@ -8,4 +8,3 @@ # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java -minecraft net/minecraft/stats/ServerRecipeBook.java \ No newline at end of file diff --git a/patches/api/0007-Suspected-plugins-report.patch b/patches/api/0007-Suspected-plugins-report.patch deleted file mode 100644 index 3d3ceb2..0000000 --- a/patches/api/0007-Suspected-plugins-report.patch +++ /dev/null @@ -1,257 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: ishland -Date: Fri, 29 Jan 2021 09:57:47 +0800 -Subject: [PATCH] Suspected plugins report - -Added "Suspected Plugins" to Watchdog, crash reports and exception messages - -diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index b29143e6a49f004c74a72768b2ba40455b3165c8..6fc4cc09e2d2a7408957e971e24846a1a907958f 100644 ---- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java -+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -@@ -624,7 +624,11 @@ 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); -+ // Yatopia start - detailed report -+ server.getLogger().log(Level.SEVERE, msg); -+ org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(ex, _msg -> server.getLogger().log(Level.SEVERE, _msg)); -+ server.getLogger().log(Level.SEVERE, org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW, ex); -+ // Yatopia end - gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish - callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerPluginEnableDisableException(msg, ex, plugin))); - } -@@ -698,7 +702,11 @@ public final class SimplePluginManager implements PluginManager { - 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); -+ // Yatopia start - detailed report -+ server.getLogger().log(Level.SEVERE, msg); -+ org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(ex, _msg -> server.getLogger().log(Level.SEVERE, _msg)); -+ server.getLogger().log(Level.SEVERE, org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW, ex); -+ // Yatopia end - 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))); -@@ -989,4 +997,10 @@ public final class SimplePluginManager implements PluginManager { - } - // Paper end - -+ // Yatopia start - Accessor -+ @NotNull -+ public Collection getPluginLoaders() { -+ return new HashSet<>(fileAssociations.values()); -+ } -+ // Yatopia end - } -diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java -index 3bea5dd67ad0393160ccede4ac99a3c7baa1803b..65f1aa94652d0efacb0184bf41b519adc26bef50 100644 ---- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java -+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java -@@ -112,7 +112,7 @@ public abstract class JavaPlugin extends PluginBase { - * @return File containing this plugin - */ - @NotNull -- protected File getFile() { -+ public File getFile() { // Yatopia - return file; - } - -diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index a16c841751bc44e46d27fc4efbfc2ab23cc7b0d7..d1ba0d556edf6675952cb74dd31254704a9588cb 100644 ---- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -+++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -@@ -370,7 +370,11 @@ public final class JavaPluginLoader implements PluginLoader { - 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); -+ // Yatopia start - detailed report -+ server.getLogger().log(Level.SEVERE, "Error occurred while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?)"); -+ org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(ex, _msg -> server.getLogger().log(Level.SEVERE, _msg)); -+ server.getLogger().log(Level.SEVERE, org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW, ex); -+ // Yatopia end - gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish - // Paper start - Disable plugins that fail to load - this.server.getPluginManager().disablePlugin(jPlugin); -@@ -401,7 +405,11 @@ public final class JavaPluginLoader implements PluginLoader { - 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); -+ // Yatopia start - detailed report -+ server.getLogger().log(Level.SEVERE, "Error occurred while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?)"); -+ org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(ex, _msg -> server.getLogger().log(Level.SEVERE, _msg)); -+ server.getLogger().log(Level.SEVERE, org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW, ex); -+ // Yatopia end - gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish - } - -@@ -418,10 +426,18 @@ public final class JavaPluginLoader implements PluginLoader { - try { - loader.close(); - } catch (IOException ex) { -- // -+ // Yatopia start - detailed report - this.server.getLogger().log(Level.WARNING, "Error closing the PluginClassLoader for '" + plugin.getDescription().getFullName() + "'", ex); // Paper - log exception -+ org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(ex, _msg -> server.getLogger().log(Level.WARNING, _msg)); -+ server.getLogger().log(Level.WARNING, org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW, ex); -+ // Yatopia end - } - } - } - } -+ // Yatopia start - Accessor -+ public List getClassLoaders() { -+ return java.util.Collections.unmodifiableList(loaders); -+ } -+ // Yatopia end - } -diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -index 4f736a267eb4c8a3bedb2d02fb30468484b991d5..c6102c9b40a05eb8ddaef40ce1c9bb8e14371389 100644 ---- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -@@ -251,4 +251,13 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot - '}'; - } - // Paper end -+ -+ // Yatopia start - Accessor -+ public java.util.Collection> getLoadedClasses() { -+ return java.util.Collections.unmodifiableCollection( -+ new java.util.HashSet<>(classes.values()).stream() -+ .filter(clazz -> clazz.getClassLoader() == this).collect(java.util.stream.Collectors.toSet()) -+ ); -+ } -+ // Yatopia end - } -diff --git a/src/main/java/org/yatopiamc/yatopia/api/internal/StackTraceUtils.java b/src/main/java/org/yatopiamc/yatopia/api/internal/StackTraceUtils.java -new file mode 100644 -index 0000000000000000000000000000000000000000..0aa9bc6ad0a85d469b29201b9da29165bafb874c ---- /dev/null -+++ b/src/main/java/org/yatopiamc/yatopia/api/internal/StackTraceUtils.java -@@ -0,0 +1,105 @@ -+package org.yatopiamc.yatopia.api.internal; -+ -+import com.google.common.base.Suppliers; -+import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -+import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; -+import org.bukkit.Bukkit; -+import org.bukkit.plugin.Plugin; -+import org.bukkit.plugin.PluginLoader; -+import org.bukkit.plugin.SimplePluginManager; -+import org.bukkit.plugin.java.JavaPlugin; -+import org.bukkit.plugin.java.JavaPluginLoader; -+import org.bukkit.plugin.java.PluginClassLoader; -+ -+import java.util.Arrays; -+import java.util.Collection; -+import java.util.Collections; -+import java.util.HashSet; -+import java.util.List; -+import java.util.Map; -+import java.util.Set; -+import java.util.concurrent.TimeUnit; -+import java.util.function.Consumer; -+import java.util.function.Supplier; -+import java.util.stream.Collectors; -+ -+public class StackTraceUtils { -+ -+ public static final String EXCEPTION_DETAILS_BELOW = "Exception details below: "; -+ -+ private static final Supplier>>> loadedClassesSupplier = Suppliers.memoizeWithExpiration(StackTraceUtils::scanForPluginClasses, 5, TimeUnit.SECONDS); -+ -+ public static void print(StackTraceElement[] stackTrace, Consumer out) { -+ Set suspectedPlugins = getSuspectedPluginsFromStackTrace(stackTrace); -+ -+ printSuspectedPlugins(out, suspectedPlugins); -+ } -+ -+ public static void print(Throwable t, Consumer out) { -+ Set suspectedPlugins = getSuspectedPluginsFromStackTrace(getStackTracesFromThrowable(t).toArray(new StackTraceElement[0])); -+ -+ printSuspectedPlugins(out, suspectedPlugins); -+ } -+ -+ private static Set getStackTracesFromThrowable(Throwable t) { -+ if(t == null) return Collections.emptySet(); -+ Set elements = new ObjectOpenHashSet<>(); -+ elements.addAll(getStackTracesFromThrowable(t.getCause())); -+ elements.addAll(Arrays.stream(t.getSuppressed()).flatMap(throwable -> getStackTracesFromThrowable(throwable).stream()).collect(Collectors.toSet())); -+ elements.addAll(Arrays.asList(t.getStackTrace())); -+ return elements; -+ } -+ -+ private static void printSuspectedPlugins(Consumer out, Set suspectedPlugins) { -+ if (!suspectedPlugins.isEmpty()) { -+ out.accept("Suspected Plugins: "); -+ for (Plugin plugin : suspectedPlugins) { -+ StringBuilder builder = new StringBuilder("\t"); -+ builder.append(plugin.getName()) -+ .append("{") -+ .append(plugin.isEnabled() ? "enabled" : "disabled") -+ .append(",").append("ver=").append(plugin.getDescription().getVersion()); -+ if (!plugin.isNaggable()) -+ builder.append(",").append("nag"); -+ if (plugin instanceof JavaPlugin) -+ builder.append(",").append("path=").append(((JavaPlugin) plugin).getFile()); -+ -+ builder.append("}"); -+ out.accept(builder.toString()); -+ } -+ } else { -+ out.accept("Suspected Plugins: None"); -+ } -+ } -+ -+ private static Set getSuspectedPluginsFromStackTrace(StackTraceElement[] stackTrace) { -+ Map>> loadedClasses = loadedClassesSupplier.get(); -+ Set suspectedPlugins = new HashSet<>(); -+ for (StackTraceElement stackTraceElement : stackTrace) { -+ for (Map.Entry>> pluginSetEntry : loadedClasses.entrySet()) { -+ if (pluginSetEntry.getValue().stream().anyMatch(clazz -> clazz.getName().equals(stackTraceElement.getClassName()))) -+ suspectedPlugins.add(pluginSetEntry.getKey()); -+ } -+ } -+ return suspectedPlugins; -+ } -+ -+ private static Map>> scanForPluginClasses() { -+ Map>> loadedClasses = new Object2ObjectOpenHashMap<>(); -+ if (Bukkit.getPluginManager() instanceof SimplePluginManager) { -+ final SimplePluginManager pluginManager = (SimplePluginManager) Bukkit.getPluginManager(); -+ final Collection pluginLoaders = pluginManager.getPluginLoaders(); -+ for (PluginLoader pluginLoader : pluginLoaders) { -+ if (pluginLoader instanceof JavaPluginLoader) { -+ JavaPluginLoader javaPluginLoader = (JavaPluginLoader) pluginLoader; -+ final List classLoaders = javaPluginLoader.getClassLoaders(); -+ for (PluginClassLoader classLoader : classLoaders) { -+ loadedClasses.put(classLoader.getPlugin(), new ObjectOpenHashSet<>(classLoader.getLoadedClasses())); -+ } -+ } -+ } -+ } -+ return loadedClasses; -+ } -+ -+} -diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java -index 7cb7618df43793836a3151925b8c615628d707f9..6734be90d7121755ca3f81138ffaa8955152eee2 100644 ---- a/src/test/java/org/bukkit/AnnotationTest.java -+++ b/src/test/java/org/bukkit/AnnotationTest.java -@@ -57,8 +57,11 @@ public class AnnotationTest { - "co/aikar/timings/TimingHistory$2$1$2", - "co/aikar/timings/TimingHistory$3", - "co/aikar/timings/TimingHistory$4", -- "co/aikar/timings/TimingHistoryEntry$1" -+ "co/aikar/timings/TimingHistoryEntry$1", - // Paper end -+ // Yatopia start -+ "org/yatopiamc/yatopia/api/internal/StackTraceUtils" -+ // Yatopia end - }; - - @Test diff --git a/patches/server/0004-Reduce-constants-allocations.patch b/patches/server/0004-Reduce-constants-allocations.patch index 11449a9..5fa7914 100644 --- a/patches/server/0004-Reduce-constants-allocations.patch +++ b/patches/server/0004-Reduce-constants-allocations.patch @@ -40,6 +40,19 @@ index 277cfd9d1e8fff5d9b5e534b75c3c5162d58b0b7..093170c13b3980791373fb240c9ec6c5 private int size; public static int getLocationKey(final int x, final int y, final int z) { +diff --git a/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java b/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java +index ae60bd96b5284d54676d8e7e4dd5d170b526ec1e..2344ea858eda8e54c2eb3ccbdad464ed5934650c 100644 +--- a/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java ++++ b/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java +@@ -14,7 +14,7 @@ public final class VersionCommand implements PaperSubcommand { + public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { + final @Nullable Command ver = MinecraftServer.getServer().server.getCommandMap().getCommand("version"); + if (ver != null) { +- ver.execute(sender, "paper", new String[0]); ++ ver.execute(sender, "paper", me.titaniumtown.Constants.EMPTY_string_arr); // JettPack + } + return true; + } diff --git a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java index 85882eeb86d7b74db0219aa65783946d8083885d..06bcf27bf42ad1b6259999c25fe7ae80eab1263e 100644 --- a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java @@ -103,6 +116,19 @@ index 0000000000000000000000000000000000000000..60bf30759a26c04c0f79ba739426aab1 + public static final net.minecraft.world.entity.Entity[] EMPTY_entity_arr = new net.minecraft.world.entity.Entity[0]; +} \ No newline at end of file +diff --git a/src/main/java/net/minecraft/advancements/RequirementsStrategy.java b/src/main/java/net/minecraft/advancements/RequirementsStrategy.java +index 57d504d15794b1640ff7186f563d6ca5c2453d8c..97ca3c80af66884e74595a051224d54b9a8bde21 100644 +--- a/src/main/java/net/minecraft/advancements/RequirementsStrategy.java ++++ b/src/main/java/net/minecraft/advancements/RequirementsStrategy.java +@@ -14,7 +14,7 @@ public interface RequirementsStrategy { + return strings; + }; + RequirementsStrategy OR = (collection) -> { +- return new String[][]{collection.toArray(new String[0])}; ++ return new String[][]{collection.toArray(me.titaniumtown.Constants.EMPTY_string_arr)}; // JettPack + }; + + String[][] createRequirements(Collection criteriaNames); diff --git a/src/main/java/net/minecraft/nbt/ByteArrayTag.java b/src/main/java/net/minecraft/nbt/ByteArrayTag.java index 3dd8a189c26f41759c59c3b9d0e5282038989a9f..147beddf8ef369cdae4b1ed2dcd0d7b2fd865315 100644 --- a/src/main/java/net/minecraft/nbt/ByteArrayTag.java @@ -182,6 +208,34 @@ index 6a5e33d9821221be73f9c16afc17c9130248a231..29b7bde3ef3c5817910ccd5248e791f9 } public double getDouble(int index) { +diff --git a/src/main/java/net/minecraft/nbt/LongArrayTag.java b/src/main/java/net/minecraft/nbt/LongArrayTag.java +index a39baec88dc9c73f1b592881ed96d11ab64ad785..710bb5579e23258c38a767f99d751576524f88f0 100644 +--- a/src/main/java/net/minecraft/nbt/LongArrayTag.java ++++ b/src/main/java/net/minecraft/nbt/LongArrayTag.java +@@ -188,7 +188,7 @@ public class LongArrayTag extends CollectionTag { + + @Override + public void clear() { +- this.data = new long[0]; ++ this.data = me.titaniumtown.Constants.EMPTY_long_arr; // JettPack + } + + @Override +diff --git a/src/main/java/net/minecraft/network/CipherBase.java b/src/main/java/net/minecraft/network/CipherBase.java +index a2920b8a9eff77d9c5d1d7f70ad3abdacba8f0fa..f7f19e360d712211625ff28e92f83949197c93b0 100644 +--- a/src/main/java/net/minecraft/network/CipherBase.java ++++ b/src/main/java/net/minecraft/network/CipherBase.java +@@ -7,8 +7,8 @@ import javax.crypto.ShortBufferException; + + public class CipherBase { + private final Cipher cipher; +- private byte[] heapIn = new byte[0]; +- private byte[] heapOut = new byte[0]; ++ private byte[] heapIn = me.titaniumtown.Constants.EMPTY_byte_arr; // JettPack ++ private byte[] heapOut = me.titaniumtown.Constants.EMPTY_byte_arr; // JettPack + + protected CipherBase(Cipher cipher) { + this.cipher = cipher; diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java index 2a26d03fba2f3b37f176be9e47954ef9a6cd7b3e..969968cfcf2c2ed019fab3407b22d4974926bdd2 100644 --- a/src/main/java/net/minecraft/network/Connection.java @@ -195,6 +249,19 @@ index 2a26d03fba2f3b37f176be9e47954ef9a6cd7b3e..969968cfcf2c2ed019fab3407b22d497 this.packetListener = listener; } // Paper start +diff --git a/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java b/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java +index 02fb51f7f699992caf13d088c75b8275ec5267bb..11cb4ac19ddc09889117690ffec5191534a8adee 100644 +--- a/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java ++++ b/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java +@@ -20,7 +20,7 @@ import net.minecraft.network.chat.Style; + import net.minecraft.world.entity.Entity; + + public class TranslatableContents implements ComponentContents { +- private static final Object[] NO_ARGS = new Object[0]; ++ private static final Object[] NO_ARGS = me.titaniumtown.Constants.EMPTY_object_arr; // JettPack + private static final FormattedText TEXT_PERCENT = FormattedText.of("%"); + private static final FormattedText TEXT_NULL = FormattedText.of("null"); + private final String key; diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java index 0a843e0afbcb1af8e2641515eb244b791b819b8c..c420ce5c1bebdb0abe273d73a61a15e5424fb1bb 100644 --- a/src/main/java/net/minecraft/server/Main.java @@ -346,6 +413,18 @@ index 4fd709a550bf8da1e996894a1ca6b91206c31e9e..63c0fe30ff035b6b5c1b4b35d3ad6c64 } // CraftBukkit start +diff --git a/src/main/java/net/minecraft/util/MemoryReserve.java b/src/main/java/net/minecraft/util/MemoryReserve.java +index 0ee04fe6ff6a4d09754f326526ae04fe7226bab2..58217ddb1d63f3bb628cc40e5cc0959657a17938 100644 +--- a/src/main/java/net/minecraft/util/MemoryReserve.java ++++ b/src/main/java/net/minecraft/util/MemoryReserve.java +@@ -11,6 +11,6 @@ public class MemoryReserve { + } + + public static void release() { +- reserve = new byte[0]; ++ reserve = me.titaniumtown.Constants.EMPTY_byte_arr; // JettPack + } + } diff --git a/src/main/java/net/minecraft/util/ZeroBitStorage.java b/src/main/java/net/minecraft/util/ZeroBitStorage.java index 5d8e9bdf5538b19681f21949368d862fab8a89ad..97c744508cc535418eba65fa722859c81c22d647 100644 --- a/src/main/java/net/minecraft/util/ZeroBitStorage.java @@ -573,6 +652,19 @@ index 601f8099f74e81c17600566b3c9b7a6dd39c9bcb..f816fae46568b83ef4441bd3bb06f208 } for (int i = 0; i < astring.length; ++i) { +diff --git a/src/main/java/net/minecraft/world/scores/Team.java b/src/main/java/net/minecraft/world/scores/Team.java +index 16d2aa4556bc9f32a2def7f9ca282aa3fa23fb87..290a0d35e1e4ca8b7281aa6d8cdb66dabdadf0f7 100644 +--- a/src/main/java/net/minecraft/world/scores/Team.java ++++ b/src/main/java/net/minecraft/world/scores/Team.java +@@ -80,7 +80,7 @@ public abstract class Team { + public final int id; + + public static String[] getAllNames() { +- return BY_NAME.keySet().toArray(new String[0]); ++ return BY_NAME.keySet().toArray(me.titaniumtown.Constants.EMPTY_string_arr); // JettPack + } + + @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java b/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java index e91714a66f582c14184ddb5e4bf2443d3ed45efb..375107cbc51b907342379bb5539500d76fb76a92 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java diff --git a/patches/server/0097-Optimize-Math.round-and-Math.hypot-functions.patch b/patches/server/0097-Optimize-Math.round-and-Math.hypot-functions.patch index 143cf15..d472430 100644 --- a/patches/server/0097-Optimize-Math.round-and-Math.hypot-functions.patch +++ b/patches/server/0097-Optimize-Math.round-and-Math.hypot-functions.patch @@ -75,7 +75,7 @@ index 0000000000000000000000000000000000000000..2f48a1c71356f7ebc00aaa44b28f6e10 +} \ No newline at end of file diff --git a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java -index f9251183df72ddc56662fd3f02acf21641a2200c..ea1bad145e529ac36bf335cf4d5339b2d88b282f 100644 +index f9251183df72ddc56662fd3f02acf21641a2200c..525bbe1a07025179cb32d9182fdde1d472b5852e 100644 --- a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java +++ b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java @@ -81,6 +81,6 @@ public class RAMDetails extends JList { @@ -83,11 +83,11 @@ index f9251183df72ddc56662fd3f02acf21641a2200c..ea1bad145e529ac36bf335cf4d5339b2 private static String format(double tps) { - return ( ( tps > 21.0 ) ? "*" : "" ) + Math.min( Math.round( tps * 100.0 ) / 100.0, 20.0 ); -+ return ( ( tps > 21.0 ) ? "*" : "" ) + Math.min( carpetfixes.helpers.FastMath.round( tps * 100.0 ) / 100.0, 20.0 ); ++ return ( ( tps > 21.0 ) ? "*" : "" ) + Math.min( carpetfixes.helpers.FastMath.round( tps * 100.0 ) / 100.0, 20.0 ); // Mirai } } diff --git a/src/main/java/com/destroystokyo/paper/gui/RAMGraph.java b/src/main/java/com/destroystokyo/paper/gui/RAMGraph.java -index c3e54da4ab6440811aab2f9dd1e218802ac13285..2a38ea32f2d4a01be556fdf11254d5910c54f997 100644 +index c3e54da4ab6440811aab2f9dd1e218802ac13285..db1319c51a5410ee106d023fce759f1e390872e2 100644 --- a/src/main/java/com/destroystokyo/paper/gui/RAMGraph.java +++ b/src/main/java/com/destroystokyo/paper/gui/RAMGraph.java @@ -128,7 +128,7 @@ public class RAMGraph extends JComponent { @@ -95,12 +95,12 @@ index c3e54da4ab6440811aab2f9dd1e218802ac13285..2a38ea32f2d4a01be556fdf11254d591 graphics.fillOval(m.x - 2, 100 - used - 2, 5, 5); setToolTipText(String.format("Used: %s mb (%s%%)
%s", - Math.round(data.getUsedMem() / 1024F / 1024F), -+ carpetfixes.helpers.FastMath.round(data.getUsedMem() / 1024F / 1024F), ++ carpetfixes.helpers.FastMath.round(data.getUsedMem() / 1024F / 1024F), // Mirai used, getTime(m.x))); } } diff --git a/src/main/java/gg/pufferfish/pufferfish/flare/collectors/TPSCollector.java b/src/main/java/gg/pufferfish/pufferfish/flare/collectors/TPSCollector.java -index 40447d00aefb5ffedb8a2ee87155a04088f0649f..31cc0a29e89e79f616b3ee329a5528961edaa2de 100644 +index 40447d00aefb5ffedb8a2ee87155a04088f0649f..633a6e313174244cf13ed89b53893ea5900e2828 100644 --- a/src/main/java/gg/pufferfish/pufferfish/flare/collectors/TPSCollector.java +++ b/src/main/java/gg/pufferfish/pufferfish/flare/collectors/TPSCollector.java @@ -25,7 +25,7 @@ public class TPSCollector extends LiveCollector { @@ -109,12 +109,12 @@ index 40447d00aefb5ffedb8a2ee87155a04088f0649f..31cc0a29e89e79f616b3ee329a552896 - this.report(TPS, Math.min(20D, Math.round(Bukkit.getServer().getTPS()[0] * 100d) / 100d)); - this.report(MSPT, (double) Math.round(mspt * 100d) / 100d); -+ this.report(TPS, Math.min(20D, carpetfixes.helpers.FastMath.round(Bukkit.getServer().getTPS()[0] * 100d) / 100d)); -+ this.report(MSPT, (double) carpetfixes.helpers.FastMath.round(mspt * 100d) / 100d); ++ this.report(TPS, Math.min(20D, carpetfixes.helpers.FastMath.round(Bukkit.getServer().getTPS()[0] * 100d) / 100d)); // Mirai ++ this.report(MSPT, (double) carpetfixes.helpers.FastMath.round(mspt * 100d) / 100d); // Mirai } } diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java -index b53402903eb6845df361daf6b05a668608ad7b63..df60ee5ec4f98e815499dd1dfe94a0b62d1f1fbf 100644 +index b53402903eb6845df361daf6b05a668608ad7b63..0d43afcdd5db346d0ddf82e06bad5b219721715c 100644 --- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java +++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java @@ -387,11 +387,11 @@ public final class PlayerChunkLoader { @@ -122,17 +122,17 @@ index b53402903eb6845df361daf6b05a668608ad7b63..df60ee5ec4f98e815499dd1dfe94a0b6 protected long getTargetSendPerPlayerAddend() { - return GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate); -+ return GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate <= 1.0 ? 0L : (long)carpetfixes.helpers.FastMath.round(1.0e9 / GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate); ++ return GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate <= 1.0 ? 0L : (long)carpetfixes.helpers.FastMath.round(1.0e9 / GlobalConfiguration.get().chunkLoading.targetPlayerChunkSendRate); // Mirai } protected long getMaxSendAddend() { - return GlobalConfiguration.get().chunkLoading.globalMaxChunkSendRate <= 1.0 ? 0L : (long)Math.round(1.0e9 / GlobalConfiguration.get().chunkLoading.globalMaxChunkSendRate); -+ return GlobalConfiguration.get().chunkLoading.globalMaxChunkSendRate <= 1.0 ? 0L : (long)carpetfixes.helpers.FastMath.round(1.0e9 / GlobalConfiguration.get().chunkLoading.globalMaxChunkSendRate); ++ return GlobalConfiguration.get().chunkLoading.globalMaxChunkSendRate <= 1.0 ? 0L : (long)carpetfixes.helpers.FastMath.round(1.0e9 / GlobalConfiguration.get().chunkLoading.globalMaxChunkSendRate); // Mirai } public void onChunkPlayerTickReady(final int chunkX, final int chunkZ) { diff --git a/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java b/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java -index 68645bbbab9b4225048b647252d8f462028a9c84..725f532ce4479cf059b3f749eb01372179056581 100644 +index 68645bbbab9b4225048b647252d8f462028a9c84..14eff63f7725769ba0ce15eedf7f605ee34d1722 100644 --- a/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java +++ b/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java @@ -105,12 +105,12 @@ public final class FixLightCommand implements PaperSubcommand { @@ -140,31 +140,31 @@ index 68645bbbab9b4225048b647252d8f462028a9c84..725f532ce4479cf059b3f749eb013721 sender.getBukkitEntity().sendMessage(text().color(DARK_AQUA).append( text("Relit chunk ", BLUE), text(chunkPos.toString()), - text(", progress: ", BLUE), text((int) (Math.round(100.0 * (double) (relitChunks[0]) / (double) pending[0])) + "%") -+ text(", progress: ", BLUE), text((int) (carpetfixes.helpers.FastMath.round(100.0 * (double) (relitChunks[0]) / (double) pending[0])) + "%") ++ text(", progress: ", BLUE), text((int) (carpetfixes.helpers.FastMath.round(100.0 * (double) (relitChunks[0]) / (double) pending[0])) + "%") // Mirai )); }, (int totalRelit) -> { final long end = System.nanoTime(); - final long diff = Math.round(1.0e-6 * (end - start)); -+ final long diff = carpetfixes.helpers.FastMath.round(1.0e-6 * (end - start)); ++ final long diff = carpetfixes.helpers.FastMath.round(1.0e-6 * (end - start)); // Mirai sender.getBukkitEntity().sendMessage(text().color(DARK_AQUA).append( text("Relit ", BLUE), text(totalRelit), text(" chunks. Took ", BLUE), text(diff + "ms") -diff --git a/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java b/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java -index ae60bd96b5284d54676d8e7e4dd5d170b526ec1e..2344ea858eda8e54c2eb3ccbdad464ed5934650c 100644 ---- a/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java -+++ b/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java -@@ -14,7 +14,7 @@ public final class VersionCommand implements PaperSubcommand { - public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { - final @Nullable Command ver = MinecraftServer.getServer().server.getCommandMap().getCommand("version"); - if (ver != null) { -- ver.execute(sender, "paper", new String[0]); -+ ver.execute(sender, "paper", me.titaniumtown.Constants.EMPTY_string_arr); // JettPack - } - return true; - } +diff --git a/src/main/java/net/minecraft/commands/arguments/TimeArgument.java b/src/main/java/net/minecraft/commands/arguments/TimeArgument.java +index e3e80db89c18588322ffdaa0f9fd85e398cb1471..d947011b80ee14e7aaf74af3d9081fc78e8cb4c3 100644 +--- a/src/main/java/net/minecraft/commands/arguments/TimeArgument.java ++++ b/src/main/java/net/minecraft/commands/arguments/TimeArgument.java +@@ -35,7 +35,7 @@ public class TimeArgument implements ArgumentType { + if (i == 0) { + throw ERROR_INVALID_UNIT.create(); + } else { +- int j = Math.round(f * (float)i); ++ int j = carpetfixes.helpers.FastMath.round(f * (float)i); // Mirai + if (j < 0) { + throw ERROR_INVALID_TICK_COUNT.create(j); + } else { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2308d91066825fc90bd7645313138471f8b8aa1b..cf628f7a06e833b7e27cf3f48ad6ada9683204e3 100644 +index 2308d91066825fc90bd7645313138471f8b8aa1b..de917eb5498365fc596eff7b5c5c621864578a41 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -2772,7 +2772,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 21.0 ) ? "*" : "") + Math.min(Math.round(tps * 100.0) / 100.0, 20.0); // only print * at 21, we commonly peak to 20.02 as the tick sleep is not accurate enough, stop the noise -+ return (( tps > 21.0 ) ? "*" : "") + Math.min(carpetfixes.helpers.FastMath.round(tps * 100.0) / 100.0, 20.0); // only print * at 21, we commonly peak to 20.02 as the tick sleep is not accurate enough, stop the noise ++ return (( tps > 21.0 ) ? "*" : "") + Math.min(carpetfixes.helpers.FastMath.round(tps * 100.0) / 100.0, 20.0); // only print * at 21, we commonly peak to 20.02 as the tick sleep is not accurate enough, stop the noise // Mirai } // Paper end } @@ -202,7 +202,7 @@ index ec587cf6592a1dc0d90d6f54af1bdfab97aec7c6..41fe8bbdf9235ce79bffe6b2fe1339f7 } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd4599e306 100644 +index a2c348697b0a9a6646647e7946f6720c5897fb3d..0bc9eeef8dba308cf75c05def4de30de4475c030 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1496,7 +1496,7 @@ public abstract class LivingEntity extends Entity { @@ -210,7 +210,7 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd CriteriaTriggers.ENTITY_HURT_PLAYER.trigger((ServerPlayer) this, source, f1, amount, flag); if (f2 > 0.0F && f2 < 3.4028235E37F) { - ((ServerPlayer) this).awardStat(Stats.DAMAGE_BLOCKED_BY_SHIELD, Math.round(f2 * 10.0F)); -+ ((ServerPlayer) this).awardStat(Stats.DAMAGE_BLOCKED_BY_SHIELD, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); ++ ((ServerPlayer) this).awardStat(Stats.DAMAGE_BLOCKED_BY_SHIELD, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); // Mirai } } @@ -219,10 +219,10 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd if (f3 > 0.0F && f3 < 3.4028235E37F) { if (this instanceof ServerPlayer) { - ((ServerPlayer) this).awardStat(Stats.DAMAGE_RESISTED, Math.round(f3 * 10.0F)); -+ ((ServerPlayer) this).awardStat(Stats.DAMAGE_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); ++ ((ServerPlayer) this).awardStat(Stats.DAMAGE_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); // Mirai } else if (source.getEntity() instanceof ServerPlayer) { - ((ServerPlayer) source.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, Math.round(f3 * 10.0F)); -+ ((ServerPlayer) source.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); ++ ((ServerPlayer) source.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); // Mirai } } } @@ -231,10 +231,10 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd if (f3 > 0.0F && f3 < 3.4028235E37F) { if (this instanceof ServerPlayer) { - ((ServerPlayer) this).awardStat(Stats.DAMAGE_RESISTED, Math.round(f3 * 10.0F)); -+ ((ServerPlayer) this).awardStat(Stats.DAMAGE_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); ++ ((ServerPlayer) this).awardStat(Stats.DAMAGE_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); // Mirai } else if (damagesource.getEntity() instanceof ServerPlayer) { - ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, Math.round(f3 * 10.0F)); -+ ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); ++ ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, carpetfixes.helpers.FastMath.round(f3 * 10.0F)); // Mirai } } } @@ -243,11 +243,11 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd if (f2 > 0.0F && f2 < 3.4028235E37F && this instanceof net.minecraft.world.entity.player.Player) { - ((net.minecraft.world.entity.player.Player) this).awardStat(Stats.DAMAGE_ABSORBED, Math.round(f2 * 10.0F)); -+ ((net.minecraft.world.entity.player.Player) this).awardStat(Stats.DAMAGE_ABSORBED, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); ++ ((net.minecraft.world.entity.player.Player) this).awardStat(Stats.DAMAGE_ABSORBED, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); // Mirai } if (f2 > 0.0F && f2 < 3.4028235E37F && damagesource.getEntity() instanceof ServerPlayer) { - ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_ABSORBED, Math.round(f2 * 10.0F)); -+ ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_ABSORBED, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); ++ ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_ABSORBED, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); // Mirai } if (f > 0 || !human) { @@ -256,7 +256,7 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd ((net.minecraft.world.entity.player.Player) this).causeFoodExhaustion(damagesource.getFoodExhaustion(), org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.DAMAGED); // CraftBukkit - EntityExhaustionEvent if (f < 3.4028235E37F) { - ((net.minecraft.world.entity.player.Player) this).awardStat(Stats.DAMAGE_TAKEN, Math.round(f * 10.0F)); -+ ((net.minecraft.world.entity.player.Player) this).awardStat(Stats.DAMAGE_TAKEN, carpetfixes.helpers.FastMath.round(f * 10.0F)); ++ ((net.minecraft.world.entity.player.Player) this).awardStat(Stats.DAMAGE_TAKEN, carpetfixes.helpers.FastMath.round(f * 10.0F)); // Mirai } } // CraftBukkit end @@ -265,7 +265,7 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd f2 = (float) -event.getDamage(DamageModifier.BLOCKING); if (f2 > 0.0F && f2 < 3.4028235E37F) { - ((ServerPlayer) this).awardStat(Stats.DAMAGE_BLOCKED_BY_SHIELD, Math.round(originalDamage * 10.0F)); -+ ((ServerPlayer) this).awardStat(Stats.DAMAGE_BLOCKED_BY_SHIELD, carpetfixes.helpers.FastMath.round(originalDamage * 10.0F)); ++ ((ServerPlayer) this).awardStat(Stats.DAMAGE_BLOCKED_BY_SHIELD, carpetfixes.helpers.FastMath.round(originalDamage * 10.0F)); // Mirai } } @@ -277,15 +277,15 @@ index a2c348697b0a9a6646647e7946f6720c5897fb3d..f53e5cd78431e84bf257229cd70fd8dd - this.yBodyRotO += Math.round((this.yBodyRot - this.yBodyRotO) / 360.0F) * 360.0F; - this.xRotO += Math.round((this.getXRot() - this.xRotO) / 360.0F) * 360.0F; - this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; -+ this.yRotO += carpetfixes.helpers.FastMath.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -+ this.yBodyRotO += carpetfixes.helpers.FastMath.round((this.yBodyRot - this.yBodyRotO) / 360.0F) * 360.0F; -+ this.xRotO += carpetfixes.helpers.FastMath.round((this.getXRot() - this.xRotO) / 360.0F) * 360.0F; -+ this.yHeadRotO += carpetfixes.helpers.FastMath.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; ++ this.yRotO += carpetfixes.helpers.FastMath.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; // Mirai ++ this.yBodyRotO += carpetfixes.helpers.FastMath.round((this.yBodyRot - this.yBodyRotO) / 360.0F) * 360.0F; // Mirai ++ this.xRotO += carpetfixes.helpers.FastMath.round((this.getXRot() - this.xRotO) / 360.0F) * 360.0F; // Mirai ++ this.yHeadRotO += carpetfixes.helpers.FastMath.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Mirai // Paper end this.level.getProfiler().pop(); 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 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b58b6510a0 100644 +index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..18c4f2eeb6bb427c1314608fc6a81e4642d92888 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -1087,7 +1087,7 @@ public abstract class Player extends LivingEntity { @@ -293,7 +293,7 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 if (f2 > 0.0F && f2 < 3.4028235E37F) { - this.awardStat(Stats.DAMAGE_ABSORBED, Math.round(f2 * 10.0F)); -+ this.awardStat(Stats.DAMAGE_ABSORBED, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); ++ this.awardStat(Stats.DAMAGE_ABSORBED, carpetfixes.helpers.FastMath.round(f2 * 10.0F)); // Mirai } if (f != 0.0F) { @@ -302,7 +302,7 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 this.getCombatTracker().recordDamage(damagesource, f3, f); if (f < 3.4028235E37F) { - this.awardStat(Stats.DAMAGE_TAKEN, Math.round(f * 10.0F)); -+ this.awardStat(Stats.DAMAGE_TAKEN, carpetfixes.helpers.FastMath.round(f * 10.0F)); ++ this.awardStat(Stats.DAMAGE_TAKEN, carpetfixes.helpers.FastMath.round(f * 10.0F)); // Mirai } } @@ -311,7 +311,7 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 float f5 = f3 - ((LivingEntity) target).getHealth(); - this.awardStat(Stats.DAMAGE_DEALT, Math.round(f5 * 10.0F)); -+ this.awardStat(Stats.DAMAGE_DEALT, carpetfixes.helpers.FastMath.round(f5 * 10.0F)); ++ this.awardStat(Stats.DAMAGE_DEALT, carpetfixes.helpers.FastMath.round(f5 * 10.0F)); // Mirai if (j > 0) { // CraftBukkit start - Call a combust event when somebody hits with a fire enchanted item EntityCombustByEntityEvent combustEvent = new EntityCombustByEntityEvent(this.getBukkitEntity(), target.getBukkitEntity(), j * 4); @@ -320,21 +320,21 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 if (this.isSwimming()) { - i = Math.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); -+ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); ++ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); // Mirai if (i > 0) { this.awardStat(Stats.SWIM_ONE_CM, i); this.causeFoodExhaustion(level.spigotConfig.swimMultiplier * (float) i * 0.01F, EntityExhaustionEvent.ExhaustionReason.SWIM); // CraftBukkit - EntityExhaustionEvent // Spigot } } else if (this.isEyeInFluid(FluidTags.WATER)) { - i = Math.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); -+ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); ++ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); // Mirai if (i > 0) { this.awardStat(Stats.WALK_UNDER_WATER_ONE_CM, i); this.causeFoodExhaustion(level.spigotConfig.swimMultiplier * (float) i * 0.01F, EntityExhaustionEvent.ExhaustionReason.WALK_UNDERWATER); // CraftBukkit - EntityExhaustionEvent // Spigot } } else if (this.isInWater()) { - i = Math.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); -+ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); ++ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); // Mirai if (i > 0) { this.awardStat(Stats.WALK_ON_WATER_ONE_CM, i); this.causeFoodExhaustion(level.spigotConfig.swimMultiplier * (float) i * 0.01F, EntityExhaustionEvent.ExhaustionReason.WALK_ON_WATER); // CraftBukkit - EntityExhaustionEvent // Spigot @@ -342,11 +342,11 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 } else if (this.onClimbable()) { if (dy > 0.0D) { - this.awardStat(Stats.CLIMB_ONE_CM, (int) Math.round(dy * 100.0D)); -+ this.awardStat(Stats.CLIMB_ONE_CM, (int) carpetfixes.helpers.FastMath.round(dy * 100.0D)); ++ this.awardStat(Stats.CLIMB_ONE_CM, (int) carpetfixes.helpers.FastMath.round(dy * 100.0D)); // Mirai } } else if (this.onGround) { - i = Math.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); -+ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); ++ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); // Mirai if (i > 0) { if (this.isSprinting()) { this.awardStat(Stats.SPRINT_ONE_CM, i); @@ -355,11 +355,11 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 } } else if (this.isFallFlying()) { - i = Math.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); -+ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); ++ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); // Mirai this.awardStat(Stats.AVIATE_ONE_CM, i); } else { - i = Math.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); -+ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); ++ i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dz * dz) * 100.0F); // Mirai if (i > 25) { this.awardStat(Stats.FLY_ONE_CM, i); } @@ -368,7 +368,7 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 public void checkRidingStatistics(double dx, double dy, double dz) { if (this.isPassenger()) { - int i = Math.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); -+ int i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); ++ int i = carpetfixes.helpers.FastMath.round((float) Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F); // Mirai if (i > 0) { Entity entity = this.getVehicle(); @@ -377,12 +377,38 @@ index 54e241534f0a3c00044c1ce33e7dc3a8fd020ab7..b76f7acd5b44ecc2d73a716b6860b0b5 } else { if (fallDistance >= 2.0F) { - this.awardStat(Stats.FALL_ONE_CM, (int) Math.round((double) fallDistance * 100.0D)); -+ this.awardStat(Stats.FALL_ONE_CM, (int) carpetfixes.helpers.FastMath.round((double) fallDistance * 100.0D)); ++ this.awardStat(Stats.FALL_ONE_CM, (int) carpetfixes.helpers.FastMath.round((double) fallDistance * 100.0D)); // Mirai } return super.causeFallDamage(fallDistance, damageMultiplier, damageSource); +diff --git a/src/main/java/net/minecraft/world/item/Item.java b/src/main/java/net/minecraft/world/item/Item.java +index 8b250dab8f3cb788ae1cfad43737afda31b72c0f..7e57163c82f7a4f9df0774f049f724c9b201e023 100644 +--- a/src/main/java/net/minecraft/world/item/Item.java ++++ b/src/main/java/net/minecraft/world/item/Item.java +@@ -166,7 +166,7 @@ public class Item implements ItemLike { + } + + public int getBarWidth(ItemStack stack) { +- return Math.round(13.0F - (float)stack.getDamageValue() * 13.0F / (float)this.maxDamage); ++ return carpetfixes.helpers.FastMath.round(13.0F - (float)stack.getDamageValue() * 13.0F / (float)this.maxDamage); // Mirai + } + + public int getBarColor(ItemStack stack) { +diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +index 22925b2f44fc510832ef07290d3109f0394f7d30..e694a256a72479cff28b65a86ce31a8ca0b1eba6 100644 +--- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java ++++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +@@ -346,7 +346,7 @@ public class EnchantmentHelper { + } else { + level += 1 + random.nextInt(i / 4 + 1) + random.nextInt(i / 4 + 1); + float f = (random.nextFloat() + random.nextFloat() - 1.0F) * 0.15F; +- level = Mth.clamp(Math.round((float)level + (float)level * f), 1, Integer.MAX_VALUE); ++ level = Mth.clamp(carpetfixes.helpers.FastMath.round((float)level + (float)level * f), 1, Integer.MAX_VALUE); // Mirai + List list2 = getAvailableEnchantmentResults(level, stack, treasureAllowed); + if (!list2.isEmpty()) { + WeightedRandom.getRandomItem(random, list2).ifPresent(list::add); diff --git a/src/main/java/net/minecraft/world/level/block/DaylightDetectorBlock.java b/src/main/java/net/minecraft/world/level/block/DaylightDetectorBlock.java -index 16504b8be08064e61b013fa943f692816612cbd0..c5b39234822626b4ff948464409ca415250619e9 100644 +index 16504b8be08064e61b013fa943f692816612cbd0..38f6759501dcc2a0adb9608a9f639c2411acf277 100644 --- a/src/main/java/net/minecraft/world/level/block/DaylightDetectorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DaylightDetectorBlock.java @@ -62,7 +62,7 @@ public class DaylightDetectorBlock extends BaseEntityBlock { @@ -390,12 +416,12 @@ index 16504b8be08064e61b013fa943f692816612cbd0..c5b39234822626b4ff948464409ca415 f += (f1 - f) * 0.2F; - i = Math.round((float) i * Mth.cos(f)); -+ i = carpetfixes.helpers.FastMath.round((float) i * Mth.cos(f)); ++ i = carpetfixes.helpers.FastMath.round((float) i * Mth.cos(f)); // Mirai } i = Mth.clamp(i, (int) 0, (int) 15); diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index 19ffd93b7bc745d9a6822f1e5642d2f640f61df7..0790467860bd793a7e69b2a4080161756d28906d 100644 +index 19ffd93b7bc745d9a6822f1e5642d2f640f61df7..61e35c7a91341701bad119ca9ea56373b6b7d7a9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -249,8 +249,8 @@ public abstract class ChunkGenerator { @@ -404,13 +430,38 @@ index 19ffd93b7bc745d9a6822f1e5642d2f640f61df7..0790467860bd793a7e69b2a408016175 double d1 = (double) (4 * i + i * i1 * 6) + (randomsource.nextDouble() - 0.5D) * (double) i * 2.5D; - int k1 = (int) Math.round(Math.cos(d0) * d1); - int l1 = (int) Math.round(Math.sin(d0) * d1); -+ int k1 = (int) carpetfixes.helpers.FastMath.round(Math.cos(d0) * d1); -+ int l1 = (int) carpetfixes.helpers.FastMath.round(Math.sin(d0) * d1); ++ int k1 = (int) carpetfixes.helpers.FastMath.round(Math.cos(d0) * d1); // Mirai ++ int l1 = (int) carpetfixes.helpers.FastMath.round(Math.sin(d0) * d1); // Mirai BiomeSource worldchunkmanager = this.biomeSource; int i2 = SectionPos.sectionToBlockCoord(k1, 8); int j2 = SectionPos.sectionToBlockCoord(l1, 8); +diff --git a/src/main/java/net/minecraft/world/level/levelgen/SurfaceSystem.java b/src/main/java/net/minecraft/world/level/levelgen/SurfaceSystem.java +index b20ba0b10b5b1682bb5435d9d0bbe4aad25e8062..22a23580ccd861d14031f46b72f309cca6584d3b 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/SurfaceSystem.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/SurfaceSystem.java +@@ -300,7 +300,7 @@ public class SurfaceSystem { + } + + protected BlockState getBand(int x, int y, int z) { +- int i = (int)Math.round(this.clayBandsOffsetNoise.getValue((double)x, 0.0D, (double)z) * 4.0D); ++ int i = (int)carpetfixes.helpers.FastMath.round(this.clayBandsOffsetNoise.getValue((double)x, 0.0D, (double)z) * 4.0D); // Mirai + return this.clayBands[(y + i + this.clayBands.length) % this.clayBands.length]; + } + } +diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/ScatteredOreFeature.java b/src/main/java/net/minecraft/world/level/levelgen/feature/ScatteredOreFeature.java +index 06f27fc8eda9ec160c54759ec95fdade19876d29..567d653469c964922dc5662e48c45dc289222bc2 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/feature/ScatteredOreFeature.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/feature/ScatteredOreFeature.java +@@ -46,6 +46,6 @@ public class ScatteredOreFeature extends Feature { + } + + private int getRandomPlacementInOneAxisRelativeToOrigin(RandomSource randomSource, int spread) { +- return Math.round((randomSource.nextFloat() - randomSource.nextFloat()) * (float)spread); ++ return carpetfixes.helpers.FastMath.round((randomSource.nextFloat() - randomSource.nextFloat()) * (float)spread); // Mirai + } + } diff --git a/src/main/java/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java b/src/main/java/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java -index 31918fa2eb38e42a5ea5366e559f25ea9d7d59ae..f512f1e0c46b96f831fdea3073e57c6bfd9c69eb 100644 +index 31918fa2eb38e42a5ea5366e559f25ea9d7d59ae..fe0bcd4295e96556d1c5282d6acc426980697675 100644 --- a/src/main/java/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java +++ b/src/main/java/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java @@ -61,7 +61,7 @@ public class LootingEnchantFunction extends LootItemConditionalFunction { @@ -418,12 +469,25 @@ index 31918fa2eb38e42a5ea5366e559f25ea9d7d59ae..f512f1e0c46b96f831fdea3073e57c6b float f = (float) i * this.value.getFloat(context); - stack.grow(Math.round(f)); -+ stack.grow(carpetfixes.helpers.FastMath.round(f)); ++ stack.grow(carpetfixes.helpers.FastMath.round(f)); // Mirai if (this.hasLimit() && stack.getCount() > this.limit) { stack.setCount(this.limit); } +diff --git a/src/main/java/net/minecraft/world/level/storage/loot/providers/number/NumberProvider.java b/src/main/java/net/minecraft/world/level/storage/loot/providers/number/NumberProvider.java +index 2a7c75ea447b179ea1ab9db56e8a39d03faa0bce..53ca87c7659a4fff9e99d21217d1ad08c8765836 100644 +--- a/src/main/java/net/minecraft/world/level/storage/loot/providers/number/NumberProvider.java ++++ b/src/main/java/net/minecraft/world/level/storage/loot/providers/number/NumberProvider.java +@@ -7,7 +7,7 @@ public interface NumberProvider extends LootContextUser { + float getFloat(LootContext context); + + default int getInt(LootContext context) { +- return Math.round(this.getFloat(context)); ++ return carpetfixes.helpers.FastMath.round(this.getFloat(context)); // Mirai + } + + LootNumberProviderType getType(); diff --git a/src/main/java/net/minecraft/world/phys/shapes/Shapes.java b/src/main/java/net/minecraft/world/phys/shapes/Shapes.java -index 731c7dd15f131dc124be6af8f342b122cb89491b..3ca1a2599a211374cb95e73fdc8c8b3069496660 100644 +index 731c7dd15f131dc124be6af8f342b122cb89491b..24a82111a5485da1e3903977d0519e9ed502f34d 100644 --- a/src/main/java/net/minecraft/world/phys/shapes/Shapes.java +++ b/src/main/java/net/minecraft/world/phys/shapes/Shapes.java @@ -59,8 +59,8 @@ public final class Shapes { @@ -432,13 +496,13 @@ index 731c7dd15f131dc124be6af8f342b122cb89491b..3ca1a2599a211374cb95e73fdc8c8b30 double e = max * (double)j; - boolean bl = Math.abs(d - (double)Math.round(d)) < 1.0E-7D * (double)j; - boolean bl2 = Math.abs(e - (double)Math.round(e)) < 1.0E-7D * (double)j; -+ boolean bl = Math.abs(d - (double)carpetfixes.helpers.FastMath.round(d)) < 1.0E-7D * (double)j; -+ boolean bl2 = Math.abs(e - (double)carpetfixes.helpers.FastMath.round(e)) < 1.0E-7D * (double)j; ++ boolean bl = Math.abs(d - (double)carpetfixes.helpers.FastMath.round(d)) < 1.0E-7D * (double)j; // Mirai ++ boolean bl2 = Math.abs(e - (double)carpetfixes.helpers.FastMath.round(e)) < 1.0E-7D * (double)j; // Mirai if (bl && bl2) { return i; } diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java -index 0ecac76577eb440a0c3104ef4603acec826c474d..4813bd6de894d0566e8631d8c71915c38c1da0f8 100644 +index 0ecac76577eb440a0c3104ef4603acec826c474d..26ff7f68dacad945095d794c1def4752e0775abb 100644 --- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java +++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java @@ -52,7 +52,7 @@ public class TicksPerSecondCommand extends Command @@ -446,7 +510,7 @@ index 0ecac76577eb440a0c3104ef4603acec826c474d..4813bd6de894d0566e8631d8c71915c3 { return ( ( tps > 18.0 ) ? ChatColor.GREEN : ( tps > 16.0 ) ? ChatColor.YELLOW : ChatColor.RED ).toString() - + ( ( tps > 21.0 ) ? "*" : "" ) + Math.min( Math.round( tps * 100.0 ) / 100.0, 20.0 ); // Paper - only print * at 21, we commonly peak to 20.02 as the tick sleep is not accurate enough, stop the noise -+ + ( ( tps > 21.0 ) ? "*" : "" ) + Math.min( carpetfixes.helpers.FastMath.round( tps * 100.0 ) / 100.0, 20.0 ); // Paper - only print * at 21, we commonly peak to 20.02 as the tick sleep is not accurate enough, stop the noise ++ + ( ( tps > 21.0 ) ? "*" : "" ) + Math.min( carpetfixes.helpers.FastMath.round( tps * 100.0 ) / 100.0, 20.0 ); // Paper - only print * at 21, we commonly peak to 20.02 as the tick sleep is not accurate enough, stop the noise // Mirai } // Yatopia start - Last tick time API diff --git a/patches/server/0103-Configurable-chat-message-signatures.patch b/patches/server/0103-Configurable-chat-message-signatures.patch index 953fa18..1ec2734 100644 --- a/patches/server/0103-Configurable-chat-message-signatures.patch +++ b/patches/server/0103-Configurable-chat-message-signatures.patch @@ -4,50 +4,93 @@ Date: Tue, 2 Aug 2022 14:48:12 +0200 Subject: [PATCH] Configurable chat message signatures +diff --git a/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java b/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java +index 11183b4a39b9897e1b1067eb2a3556d2b1d90f52..d08127b516fbae1a5500a9d3f0df02a437b0d250 100644 +--- a/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java ++++ b/src/main/java/net/minecraft/network/protocol/status/ServerStatus.java +@@ -78,6 +78,7 @@ public class ServerStatus { + } + + public boolean enforcesSecureChat() { ++ if (wtf.etil.mirai.MiraiConfig.chatMessageSignatures) return true; // Mirai - configurable chat message signatures + return this.enforcesSecureChat; + } + diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index aec14ff5235686a3e02b66eb3ad05fed2c4756b4..d072b064499a7743305c9f3e078015b97c5ac39e 100644 +index aec14ff5235686a3e02b66eb3ad05fed2c4756b4..60ba00eb6daeeb9b97281f9380d373af3cc29402 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -619,7 +619,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -619,6 +619,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public boolean enforceSecureProfile() { -- return this.getProperties().enforceSecureProfile && this.getProperties().onlineMode; -+ return this.getProperties().enforceSecureProfile && this.getProperties().onlineMode && wtf.etil.mirai.MiraiConfig.chatMessageSignatures; // Mirai - Configurable chat message signatures ++ if (wtf.etil.mirai.MiraiConfig.chatMessageSignatures) return false; // Mirai - configurable chat message signatures + return this.getProperties().enforceSecureProfile && this.getProperties().onlineMode; } - protected boolean convertOldUsers() { -diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 4d705dc5294bb07b0ce34c68d1c4bbf33bb84848..542b8c6be55f2a99a4f7e864a9021a8826976495 100644 ---- a/src/main/java/net/minecraft/server/level/ServerPlayer.java -+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1960,7 +1960,7 @@ public class ServerPlayer extends Player { - } - - public void sendServerStatus(ServerStatus metadata) { -- this.connection.send(new ClientboundServerDataPacket(metadata.getDescription(), metadata.getFavicon(), metadata.previewsChat(), metadata.enforcesSecureChat())); -+ this.connection.send(new ClientboundServerDataPacket(metadata.getDescription(), metadata.getFavicon(), metadata.previewsChat(), metadata.enforcesSecureChat() || wtf.etil.mirai.MiraiConfig.chatMessageSignatures)); // Mirai - Configurable chat message signatures - } +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index bc3f0dfe075ea2aeae48df05c66c9045810f7a0b..475fb7879ddfce4e080e45031a97661e6f31f6f8 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -2166,10 +2166,34 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override -diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 5930ee1dbabf644361220b67407e3ac871c391a8..6bb64edc6d8357980400e6d83f828d110de0dca9 100644 ---- a/src/main/java/net/minecraft/server/players/PlayerList.java -+++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1445,6 +1445,13 @@ public abstract class PlayerList { - // Paper end - boolean flag = this.verifyChatTrusted(message, sourceProfile); - -+ // Mirai start - Configurable chat message signatures + public void send(Packet packet) { ++ // Mirai start - configurable chat message signatures + if (wtf.etil.mirai.MiraiConfig.chatMessageSignatures) { -+ flag = true; -+ message = PlayerChatMessage.system(message.signedContent()); ++ if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatHeaderPacket) { ++ return; ++ } else if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat) { ++ packet = new ClientboundSystemChatPacket(chat.chatType().resolve(this.player.level.registryAccess()) ++ .get().decorate(chat.message().serverContent()), false); ++ ++ ++ this.send(packet); ++ return; ++ } ++ } ++ // Mirai end + this.send(packet, (PacketSendListener) null); + } + + public void send(Packet packet, @Nullable PacketSendListener callbacks) { ++ // Mirai start - configurable chat message signatures ++ if (wtf.etil.mirai.MiraiConfig.chatMessageSignatures) { ++ if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatHeaderPacket) { ++ return; ++ } else if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat && callbacks != null) { ++ this.send(chat); ++ return; ++ } + } + // Mirai end -+ - this.server.logChatMessage((unsignedFunction == null ? message : message.withUnsignedContent(unsignedFunction.apply(this.server.console))).serverContent(), params, flag ? null : "Not Secure"); // Paper - OutgoingPlayerChatMessage outgoingplayerchatmessage = OutgoingPlayerChatMessage.create(message); - boolean flag1 = message.isFullyFiltered(); + // CraftBukkit start + if (packet == null || this.processedDisconnect) { // Spigot + return; +diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java +index 5930ee1dbabf644361220b67407e3ac871c391a8..3adfba493b806a136b857d6e785996d8a1e241a2 100644 +--- a/src/main/java/net/minecraft/server/players/PlayerList.java ++++ b/src/main/java/net/minecraft/server/players/PlayerList.java +@@ -1483,6 +1483,7 @@ public abstract class PlayerList { + } + + public boolean verifyChatTrusted(PlayerChatMessage message, ChatSender profile) { // Paper - private -> public ++ if (wtf.etil.mirai.MiraiConfig.chatMessageSignatures) return true; // Mirai - configurable chat message signatures + return !message.hasExpiredServer(Instant.now()) && message.verify(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 18c4f2eeb6bb427c1314608fc6a81e4642d92888..b029ae19db2bfde9b08950f41ba8a09e8e4091a0 100644 +--- a/src/main/java/net/minecraft/world/entity/player/Player.java ++++ b/src/main/java/net/minecraft/world/entity/player/Player.java +@@ -1516,6 +1516,7 @@ public abstract class Player extends LivingEntity { + + @Nullable + public ProfilePublicKey getProfilePublicKey() { ++ if (wtf.etil.mirai.MiraiConfig.chatMessageSignatures) return null; // Mirai - configurable chat message signatures + return this.profilePublicKey; + } + diff --git a/src/main/java/wtf/etil/mirai/MiraiConfig.java b/src/main/java/wtf/etil/mirai/MiraiConfig.java index f6f88a802c6f1892418fd6bcb8b4bc0b90fb6afb..13884ca2bd4e459498700e2fed1f0b4406538f53 100644 --- a/src/main/java/wtf/etil/mirai/MiraiConfig.java diff --git a/patches/server/0105-Remove-Mojang-Profiler.patch b/patches/server/0105-Remove-Mojang-Profiler.patch index c867c32..4935af9 100644 --- a/patches/server/0105-Remove-Mojang-Profiler.patch +++ b/patches/server/0105-Remove-Mojang-Profiler.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index ceb8e8db5813d5dd052a6a0079ae37e393b043fb..4291f9d996fb41f2c6180777ebc518679db4709e 100644 +index 6ab1549e53c5356f48212f39e50df97e645fe925..c21a724043cf5f142c4d2251604119b5e2fa5389 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -137,7 +137,7 @@ public class Commands { @@ -41,7 +41,7 @@ index ceb8e8db5813d5dd052a6a0079ae37e393b043fb..4291f9d996fb41f2c6180777ebc51867 return b0; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f5f42508ea95e25ad698678c81927489b71c3e1c..c03a0acaff532907e7912817546695fe04844f79 100644 +index fe8b2de61fdce195210f270e33f508376b60f793..754207cc726d0e89c47d190696a2a16330b36d58 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -325,13 +325,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop