mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-21 15:59:23 +00:00
Fix MC-183518
This commit is contained in:
22
patches/server/0014-Fix-MC-183518.patch
Normal file
22
patches/server/0014-Fix-MC-183518.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com>
|
||||
Date: Mon, 17 Jun 2024 17:15:13 +0300
|
||||
Subject: [PATCH] Fix MC-183518
|
||||
|
||||
Issue on Mojira: https://bugs.mojang.com/browse/MC-183518
|
||||
P.S. Btw, I took this fix from this PR - https://github.com/Winds-Studio/Leaf/pull/69
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/util/thread/BlockableEventLoop.java b/src/main/java/net/minecraft/util/thread/BlockableEventLoop.java
|
||||
index 2510589400b3012b827efcab477c6483d9d55901..e64af5ac326786d006adf1ad6d31254cfddebcb1 100644
|
||||
--- a/src/main/java/net/minecraft/util/thread/BlockableEventLoop.java
|
||||
+++ b/src/main/java/net/minecraft/util/thread/BlockableEventLoop.java
|
||||
@@ -142,8 +142,7 @@ public abstract class BlockableEventLoop<R extends Runnable> implements Profiler
|
||||
}
|
||||
|
||||
public void waitForTasks() {
|
||||
- Thread.yield();
|
||||
- LockSupport.parkNanos("waiting for tasks", 100000L);
|
||||
+ LockSupport.parkNanos("waiting for tasks", 2000000L); // DivineMC - Fix MC-183518
|
||||
}
|
||||
|
||||
protected void doRunTask(R task) {
|
||||
@@ -4,6 +4,190 @@ Date: Sun, 12 May 2024 20:58:42 +0300
|
||||
Subject: [PATCH] Delete Timings
|
||||
|
||||
|
||||
diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java
|
||||
deleted file mode 100644
|
||||
index 6b3cde6d4d1e63bec01f502f2027ee9fddac08aa..0000000000000000000000000000000000000000
|
||||
--- a/src/main/java/co/aikar/timings/MinecraftTimings.java
|
||||
+++ /dev/null
|
||||
@@ -1,178 +0,0 @@
|
||||
-package co.aikar.timings;
|
||||
-
|
||||
-import com.google.common.collect.MapMaker;
|
||||
-import io.papermc.paper.configuration.GlobalConfiguration;
|
||||
-import net.minecraft.commands.functions.CommandFunction;
|
||||
-import net.minecraft.network.protocol.Packet;
|
||||
-import net.minecraft.world.level.block.Block;
|
||||
-import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
-import org.bukkit.plugin.Plugin;
|
||||
-import org.bukkit.scheduler.BukkitTask;
|
||||
-
|
||||
-import org.bukkit.craftbukkit.scheduler.CraftTask;
|
||||
-
|
||||
-import java.util.Map;
|
||||
-
|
||||
-// TODO: Re-implement missing timers
|
||||
-@Deprecated(forRemoval = true)
|
||||
-public final class MinecraftTimings {
|
||||
-
|
||||
- public static final Timing serverOversleep = Timings.ofSafe("Server Oversleep");
|
||||
- public static final Timing playerListTimer = Timings.ofSafe("Player List");
|
||||
- public static final Timing commandFunctionsTimer = Timings.ofSafe("Command Functions");
|
||||
- public static final Timing connectionTimer = Timings.ofSafe("Connection Handler");
|
||||
- public static final Timing tickablesTimer = Timings.ofSafe("Tickables");
|
||||
- public static final Timing minecraftSchedulerTimer = Timings.ofSafe("Minecraft Scheduler");
|
||||
- public static final Timing bukkitSchedulerTimer = Timings.ofSafe("Bukkit Scheduler");
|
||||
- public static final Timing bukkitSchedulerPendingTimer = Timings.ofSafe("Bukkit Scheduler - Pending");
|
||||
- public static final Timing bukkitSchedulerFinishTimer = Timings.ofSafe("Bukkit Scheduler - Finishing");
|
||||
- public static final Timing chunkIOTickTimer = Timings.ofSafe("ChunkIOTick");
|
||||
- public static final Timing timeUpdateTimer = Timings.ofSafe("Time Update");
|
||||
- public static final Timing serverCommandTimer = Timings.ofSafe("Server Command");
|
||||
- public static final Timing savePlayers = Timings.ofSafe("Save Players");
|
||||
-
|
||||
- public static final Timing tickEntityTimer = Timings.ofSafe("## tickEntity");
|
||||
- public static final Timing tickTileEntityTimer = Timings.ofSafe("## tickTileEntity");
|
||||
- public static final Timing packetProcessTimer = Timings.ofSafe("## Packet Processing");
|
||||
- public static final Timing scheduledBlocksTimer = Timings.ofSafe("## Scheduled Blocks");
|
||||
- public static final Timing structureGenerationTimer = Timings.ofSafe("Structure Generation");
|
||||
-
|
||||
- public static final Timing processQueueTimer = Timings.ofSafe("processQueue");
|
||||
- public static final Timing processTasksTimer = Timings.ofSafe("processTasks");
|
||||
-
|
||||
- public static final Timing playerCommandTimer = Timings.ofSafe("playerCommand");
|
||||
-
|
||||
- public static final Timing entityActivationCheckTimer = Timings.ofSafe("entityActivationCheck");
|
||||
-
|
||||
- public static final Timing antiXrayUpdateTimer = Timings.ofSafe("anti-xray - update");
|
||||
- public static final Timing antiXrayObfuscateTimer = Timings.ofSafe("anti-xray - obfuscate");
|
||||
- public static final Timing scoreboardScoreSearch = Timings.ofSafe("Scoreboard score search"); // Paper - add timings for scoreboard search
|
||||
-
|
||||
- private static final Map<Class<?>, String> taskNameCache = new MapMaker().weakKeys().makeMap();
|
||||
-
|
||||
- private MinecraftTimings() {}
|
||||
-
|
||||
- public static Timing getInternalTaskName(String taskName) {
|
||||
- return Timings.ofSafe(taskName);
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * Gets a timer associated with a plugins tasks.
|
||||
- * @param bukkitTask
|
||||
- * @param period
|
||||
- * @return
|
||||
- */
|
||||
- public static Timing getPluginTaskTimings(BukkitTask bukkitTask, long period) {
|
||||
- if (!bukkitTask.isSync()) {
|
||||
- return NullTimingHandler.NULL;
|
||||
- }
|
||||
- Plugin plugin;
|
||||
-
|
||||
- CraftTask craftTask = (CraftTask) bukkitTask;
|
||||
-
|
||||
- final Class<?> taskClass = craftTask.getTaskClass();
|
||||
- if (bukkitTask.getOwner() != null) {
|
||||
- plugin = bukkitTask.getOwner();
|
||||
- } else {
|
||||
- plugin = TimingsManager.getPluginByClassloader(taskClass);
|
||||
- }
|
||||
-
|
||||
- final String taskname = taskNameCache.computeIfAbsent(taskClass, clazz -> {
|
||||
- try {
|
||||
- String clsName = !clazz.isMemberClass()
|
||||
- ? clazz.getName()
|
||||
- : clazz.getCanonicalName();
|
||||
- if (clsName != null && clsName.contains("$Lambda$")) {
|
||||
- clsName = clsName.replaceAll("(Lambda\\$.*?)/.*", "$1");
|
||||
- }
|
||||
- return clsName != null ? clsName : "UnknownTask";
|
||||
- } catch (Throwable ex) {
|
||||
- new Exception("Error occurred detecting class name", ex).printStackTrace();
|
||||
- return "MangledClassFile";
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- StringBuilder name = new StringBuilder(64);
|
||||
- name.append("Task: ").append(taskname);
|
||||
- if (period > 0) {
|
||||
- name.append(" (interval:").append(period).append(")");
|
||||
- } else {
|
||||
- name.append(" (Single)");
|
||||
- }
|
||||
-
|
||||
- if (plugin == null) {
|
||||
- return Timings.ofSafe(null, name.toString());
|
||||
- }
|
||||
-
|
||||
- return Timings.ofSafe(plugin, name.toString());
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * Get a named timer for the specified entity type to track type specific timings.
|
||||
- * @param entityType
|
||||
- * @return
|
||||
- */
|
||||
- public static Timing getEntityTimings(String entityType, String type) {
|
||||
- return Timings.ofSafe("Minecraft", "## tickEntity - " + entityType + " - " + type, tickEntityTimer);
|
||||
- }
|
||||
-
|
||||
- public static Timing getBehaviorTimings(String type) {
|
||||
- return Timings.ofSafe("## Behavior - " + type);
|
||||
- }
|
||||
-
|
||||
- public static Timing getSensorTimings(String type, int rate) {
|
||||
- return Timings.ofSafe("## Sensor - " + type + " (Default rate: " + rate + ")");
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * Get a named timer for the specified tile entity type to track type specific timings.
|
||||
- * @param entity
|
||||
- * @return
|
||||
- */
|
||||
- public static Timing getTileEntityTimings(BlockEntity entity) {
|
||||
- String entityType = entity.getClass().getName();
|
||||
- return Timings.ofSafe("Minecraft", "## tickTileEntity - " + entityType, tickTileEntityTimer);
|
||||
- }
|
||||
- public static Timing getCancelTasksTimer() {
|
||||
- return Timings.ofSafe("Cancel Tasks");
|
||||
- }
|
||||
- public static Timing getCancelTasksTimer(Plugin plugin) {
|
||||
- return Timings.ofSafe(plugin, "Cancel Tasks");
|
||||
- }
|
||||
-
|
||||
- public static void stopServer() {
|
||||
- TimingsManager.stopServer();
|
||||
- }
|
||||
-
|
||||
- public static Timing getBlockTiming(Block block) {
|
||||
- return Timings.ofSafe("## Scheduled Block: " + block.toString(), scheduledBlocksTimer);
|
||||
- }
|
||||
-/*
|
||||
- public static Timing getStructureTiming(StructureGenerator structureGenerator) {
|
||||
- return Timings.ofSafe("Structure Generator - " + structureGenerator.getName(), structureGenerationTimer);
|
||||
- }*/
|
||||
-
|
||||
- public static Timing getPacketTiming(Packet packet) {
|
||||
- return Timings.ofSafe("## Packet - " + packet.getClass().getName(), packetProcessTimer);
|
||||
- }
|
||||
-
|
||||
- public static Timing getCommandFunctionTiming(CommandFunction<?> function) {
|
||||
- return Timings.ofSafe("Command Function - " + function.id());
|
||||
- }
|
||||
-
|
||||
- public static void processConfig(GlobalConfiguration.Timings config) {
|
||||
- TimingsManager.url = config.url;
|
||||
- if (!TimingsManager.url.endsWith("/")) {
|
||||
- TimingsManager.url += "/";
|
||||
- }
|
||||
- TimingsManager.privacy = config.serverNamePrivacy;
|
||||
- if (!config.hiddenConfigEntries.contains("proxies.velocity.secret")) {
|
||||
- config.hiddenConfigEntries.add("proxies.velocity.secret");
|
||||
- }
|
||||
- TimingsManager.hiddenConfigs.addAll(config.hiddenConfigEntries);
|
||||
- co.aikar.timings.Timings.setVerboseTimingsEnabled(config.verbose);
|
||||
- co.aikar.timings.Timings.setTimingsEnabled(config.enabled);
|
||||
- co.aikar.timings.Timings.setHistoryInterval(config.historyInterval * 20);
|
||||
- co.aikar.timings.Timings.setHistoryLength(config.historyLength * 20);
|
||||
- }
|
||||
-}
|
||||
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
|
||||
deleted file mode 100644
|
||||
index 7620c72a4c243cbeea245203ce03a97cbfa7d922..0000000000000000000000000000000000000000
|
||||
@@ -398,6 +582,132 @@ index 7620c72a4c243cbeea245203ce03a97cbfa7d922..00000000000000000000000000000000
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java
|
||||
deleted file mode 100644
|
||||
index 2f0d9b953802dee821cfde82d22b0567cce8ee91..0000000000000000000000000000000000000000
|
||||
--- a/src/main/java/co/aikar/timings/WorldTimingsHandler.java
|
||||
+++ /dev/null
|
||||
@@ -1,120 +0,0 @@
|
||||
-package co.aikar.timings;
|
||||
-
|
||||
-import net.minecraft.server.level.ServerLevel;
|
||||
-import net.minecraft.world.level.Level;
|
||||
-import net.minecraft.world.level.storage.PrimaryLevelData;
|
||||
-
|
||||
-/**
|
||||
- * Set of timers per world, to track world specific timings.
|
||||
- */
|
||||
-// TODO: Re-implement missing timers
|
||||
-@Deprecated(forRemoval = true)
|
||||
-public class WorldTimingsHandler {
|
||||
- public final Timing mobSpawn;
|
||||
- public final Timing doChunkUnload;
|
||||
- public final Timing doPortalForcer;
|
||||
- public final Timing scheduledBlocks;
|
||||
- public final Timing scheduledBlocksCleanup;
|
||||
- public final Timing scheduledBlocksTicking;
|
||||
- public final Timing chunkTicks;
|
||||
- public final Timing lightChunk;
|
||||
- public final Timing chunkTicksBlocks;
|
||||
- public final Timing doVillages;
|
||||
- public final Timing doChunkMap;
|
||||
- public final Timing doChunkMapUpdate;
|
||||
- public final Timing doChunkMapToUpdate;
|
||||
- public final Timing doChunkMapSortMissing;
|
||||
- public final Timing doChunkMapSortSendToPlayers;
|
||||
- public final Timing doChunkMapPlayersNeedingChunks;
|
||||
- public final Timing doChunkMapPendingSendToPlayers;
|
||||
- public final Timing doChunkMapUnloadChunks;
|
||||
- public final Timing doChunkGC;
|
||||
- public final Timing doSounds;
|
||||
- public final Timing entityRemoval;
|
||||
- public final Timing entityTick;
|
||||
- public final Timing tileEntityTick;
|
||||
- public final Timing tileEntityPending;
|
||||
- public final Timing tracker1;
|
||||
- public final Timing tracker2;
|
||||
- public final Timing doTick;
|
||||
- public final Timing tickEntities;
|
||||
- public final Timing chunks;
|
||||
- public final Timing newEntities;
|
||||
- public final Timing raids;
|
||||
- public final Timing chunkProviderTick;
|
||||
- public final Timing broadcastChunkUpdates;
|
||||
- public final Timing countNaturalMobs;
|
||||
-
|
||||
- public final Timing chunkLoad;
|
||||
- public final Timing chunkLoadPopulate;
|
||||
- public final Timing syncChunkLoad;
|
||||
- public final Timing chunkLoadLevelTimer;
|
||||
- public final Timing chunkIO;
|
||||
- public final Timing chunkPostLoad;
|
||||
- public final Timing worldSave;
|
||||
- public final Timing worldSaveChunks;
|
||||
- public final Timing worldSaveLevel;
|
||||
- public final Timing chunkSaveData;
|
||||
-
|
||||
-
|
||||
- public final Timing miscMobSpawning;
|
||||
-
|
||||
- public WorldTimingsHandler(Level server) {
|
||||
- String name = ((PrimaryLevelData) server.getLevelData()).getLevelName() + " - ";
|
||||
-
|
||||
- mobSpawn = Timings.ofSafe(name + "mobSpawn");
|
||||
- doChunkUnload = Timings.ofSafe(name + "doChunkUnload");
|
||||
- scheduledBlocks = Timings.ofSafe(name + "Scheduled Blocks");
|
||||
- scheduledBlocksCleanup = Timings.ofSafe(name + "Scheduled Blocks - Cleanup");
|
||||
- scheduledBlocksTicking = Timings.ofSafe(name + "Scheduled Blocks - Ticking");
|
||||
- chunkTicks = Timings.ofSafe(name + "Chunk Ticks");
|
||||
- lightChunk = Timings.ofSafe(name + "Light Chunk");
|
||||
- chunkTicksBlocks = Timings.ofSafe(name + "Chunk Ticks - Blocks");
|
||||
- doVillages = Timings.ofSafe(name + "doVillages");
|
||||
- doChunkMap = Timings.ofSafe(name + "doChunkMap");
|
||||
- doChunkMapUpdate = Timings.ofSafe(name + "doChunkMap - Update");
|
||||
- doChunkMapToUpdate = Timings.ofSafe(name + "doChunkMap - To Update");
|
||||
- doChunkMapSortMissing = Timings.ofSafe(name + "doChunkMap - Sort Missing");
|
||||
- doChunkMapSortSendToPlayers = Timings.ofSafe(name + "doChunkMap - Sort Send To Players");
|
||||
- doChunkMapPlayersNeedingChunks = Timings.ofSafe(name + "doChunkMap - Players Needing Chunks");
|
||||
- doChunkMapPendingSendToPlayers = Timings.ofSafe(name + "doChunkMap - Pending Send To Players");
|
||||
- doChunkMapUnloadChunks = Timings.ofSafe(name + "doChunkMap - Unload Chunks");
|
||||
- doSounds = Timings.ofSafe(name + "doSounds");
|
||||
- doChunkGC = Timings.ofSafe(name + "doChunkGC");
|
||||
- doPortalForcer = Timings.ofSafe(name + "doPortalForcer");
|
||||
- entityTick = Timings.ofSafe(name + "entityTick");
|
||||
- entityRemoval = Timings.ofSafe(name + "entityRemoval");
|
||||
- tileEntityTick = Timings.ofSafe(name + "tileEntityTick");
|
||||
- tileEntityPending = Timings.ofSafe(name + "tileEntityPending");
|
||||
-
|
||||
- chunkLoad = Timings.ofSafe(name + "Chunk Load");
|
||||
- chunkLoadPopulate = Timings.ofSafe(name + "Chunk Load - Populate");
|
||||
- syncChunkLoad = Timings.ofSafe(name + "Sync Chunk Load");
|
||||
- chunkLoadLevelTimer = Timings.ofSafe(name + "Chunk Load - Load Level");
|
||||
- chunkIO = Timings.ofSafe(name + "Chunk Load - DiskIO");
|
||||
- chunkPostLoad = Timings.ofSafe(name + "Chunk Load - Post Load");
|
||||
- worldSave = Timings.ofSafe(name + "World Save");
|
||||
- worldSaveLevel = Timings.ofSafe(name + "World Save - Level");
|
||||
- worldSaveChunks = Timings.ofSafe(name + "World Save - Chunks");
|
||||
- chunkSaveData = Timings.ofSafe(name + "Chunk Save - Data");
|
||||
-
|
||||
- tracker1 = Timings.ofSafe(name + "tracker stage 1");
|
||||
- tracker2 = Timings.ofSafe(name + "tracker stage 2");
|
||||
- doTick = Timings.ofSafe(name + "doTick");
|
||||
- tickEntities = Timings.ofSafe(name + "tickEntities");
|
||||
-
|
||||
- chunks = Timings.ofSafe(name + "Chunks");
|
||||
- newEntities = Timings.ofSafe(name + "New entity registration");
|
||||
- raids = Timings.ofSafe(name + "Raids");
|
||||
- chunkProviderTick = Timings.ofSafe(name + "Chunk provider tick");
|
||||
- broadcastChunkUpdates = Timings.ofSafe(name + "Broadcast chunk updates");
|
||||
- countNaturalMobs = Timings.ofSafe(name + "Count natural mobs");
|
||||
-
|
||||
-
|
||||
- miscMobSpawning = Timings.ofSafe(name + "Mob spawning - Misc");
|
||||
- }
|
||||
-
|
||||
- public static Timing getTickList(ServerLevel worldserver, String timingsType) {
|
||||
- return Timings.ofSafe(((PrimaryLevelData) worldserver.getLevelData()).getLevelName() + " - Scheduled " + timingsType);
|
||||
- }
|
||||
-}
|
||||
diff --git a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java
|
||||
index 24121a43aeb5e9bce013f30c92dddd15f99736c6..791cb04a13597eee4dbd28fabe2835ab41eb13f9 100644
|
||||
--- a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java
|
||||
Reference in New Issue
Block a user