mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
@@ -298,4 +298,4 @@ tasks.register("showPatchTaskStatus") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
5
gradlew
vendored
5
gradlew
vendored
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright © 2015-2021 the original authors.
|
# Copyright © 2015 the original authors.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@@ -114,7 +114,6 @@ case "$( uname )" in #(
|
|||||||
NONSTOP* ) nonstop=true ;;
|
NONSTOP* ) nonstop=true ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
CLASSPATH="\\\"\\\""
|
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
@@ -172,7 +171,6 @@ fi
|
|||||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
if "$cygwin" || "$msys" ; then
|
if "$cygwin" || "$msys" ; then
|
||||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
|
||||||
|
|
||||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||||
|
|
||||||
@@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|||||||
|
|
||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
-classpath "$CLASSPATH" \
|
|
||||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
|
|||||||
3
gradlew.bat
vendored
3
gradlew.bat
vendored
@@ -70,11 +70,10 @@ goto fail
|
|||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
set CLASSPATH=
|
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
|||||||
@@ -126,14 +126,14 @@ index c6db2c96db96453daaf49779f588f75f7c3d3d60..adb26ae4dfd5dc111cc55000b71c15f9
|
|||||||
this.connection.setReadOnly();
|
this.connection.setReadOnly();
|
||||||
// CraftBukkit - Don't wait
|
// CraftBukkit - Don't wait
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index cc5d1e8007e2ea32605bd68d0a73683e8fb6886e..d9fbc5dc6665fd13cc2aa9978ea6edef4c736548 100644
|
index cc5d1e8007e2ea32605bd68d0a73683e8fb6886e..c495cf4ad53486c4bd965f34eeec107d6755e4d6 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -239,6 +239,8 @@ public abstract class PlayerList {
|
@@ -239,6 +239,8 @@ public abstract class PlayerList {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player);
|
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player);
|
||||||
+
|
+
|
||||||
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
|
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ index 14addbaf68b7ad80490187d12d9c9b00891e2ce1..b186b5e0d3b32d7b51b2f58f0ef4b2bf
|
|||||||
private DisconnectionDetails disconnectionDetails;
|
private DisconnectionDetails disconnectionDetails;
|
||||||
private boolean encrypted;
|
private boolean encrypted;
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index 2493722c47b92cbcd13c08af0caf38a543ac7e37..309ff4c55b2a4ccf3d18951b51c2e10d0ff39bfc 100644
|
index 2493722c47b92cbcd13c08af0caf38a543ac7e37..9ae09e08afbc99cd2f54d55f8822bc92d317f960 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -378,6 +378,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -378,6 +378,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
@@ -59,7 +59,15 @@ index 2493722c47b92cbcd13c08af0caf38a543ac7e37..309ff4c55b2a4ccf3d18951b51c2e10d
|
|||||||
this.emptyTicks++;
|
this.emptyTicks++;
|
||||||
} else {
|
} else {
|
||||||
this.emptyTicks = 0;
|
this.emptyTicks = 0;
|
||||||
@@ -1857,6 +1860,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1634,6 +1637,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
|
this.isSaving = true;
|
||||||
|
if (playerSaveInterval > 0) {
|
||||||
|
this.playerList.saveAll(playerSaveInterval);
|
||||||
|
+ org.leavesmc.leaves.bot.BotList.INSTANCE.saveAllResumeBots(playerSaveInterval); // Leaves - resident fakeplayer
|
||||||
|
}
|
||||||
|
for (final ServerLevel level : this.getAllLevels()) {
|
||||||
|
if (level.paperConfig().chunks.autoSaveInterval.value() > 0) {
|
||||||
|
@@ -1857,6 +1861,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
|
|
||||||
public void tickConnection() {
|
public void tickConnection() {
|
||||||
this.getConnection().tick();
|
this.getConnection().tick();
|
||||||
@@ -67,7 +75,7 @@ index 2493722c47b92cbcd13c08af0caf38a543ac7e37..309ff4c55b2a4ccf3d18951b51c2e10d
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void synchronizeTime(ServerLevel level) {
|
private void synchronizeTime(ServerLevel level) {
|
||||||
@@ -2973,6 +2977,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -2973,6 +2978,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
return this.debugSubscribers;
|
return this.debugSubscribers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,7 +349,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..04ea4e33504703c4074aef6e74ec06dc
|
|||||||
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
|
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
|
||||||
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
|
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
|
||||||
diff --git a/net/minecraft/server/players/CachedUserNameToIdResolver.java b/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
diff --git a/net/minecraft/server/players/CachedUserNameToIdResolver.java b/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
||||||
index 3dc78b91cc853cfa6dce69979273b5f35b5f87f1..0625ebf19b5c514e096e6a91539c807ccf0b3f87 100644
|
index 3dc78b91cc853cfa6dce69979273b5f35b5f87f1..97bf1895a1235d1fc6b8e1de4a965b12f74a9d8f 100644
|
||||||
--- a/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
--- a/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
||||||
+++ b/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
+++ b/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
||||||
@@ -121,6 +121,12 @@ public class CachedUserNameToIdResolver implements UserNameToIdResolver {
|
@@ -121,6 +121,12 @@ public class CachedUserNameToIdResolver implements UserNameToIdResolver {
|
||||||
@@ -406,12 +414,12 @@ index fdcc23c618b5db59e384a38f9ef91b6d2e922a8a..ccb56f29e79805f3286bbb80ce6c4d4b
|
|||||||
|
|
||||||
// Paper start - utility method for common conversion back to the game profile
|
// Paper start - utility method for common conversion back to the game profile
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 4abf4ea7f86955351b5e4da2c89a707003802d2e..6dec8565e9d290302ce7766357a56b8c2295c163 100644
|
index 65a2d77bc2e740c7f7777a801607dd7a2b2845f0..5d1d71858c730c431120d4a66244969ebf2a5164 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -241,6 +241,19 @@ public abstract class PlayerList {
|
@@ -241,6 +241,19 @@ public abstract class PlayerList {
|
||||||
|
|
||||||
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player);
|
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player);
|
||||||
|
|
||||||
+ // Leaves start - bot support
|
+ // Leaves start - bot support
|
||||||
+ if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) {
|
+ if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) {
|
||||||
@@ -476,15 +484,7 @@ index 4abf4ea7f86955351b5e4da2c89a707003802d2e..6dec8565e9d290302ce7766357a56b8c
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey<Level> dimension, Packet<?> packet) {
|
public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey<Level> dimension, Packet<?> packet) {
|
||||||
@@ -960,6 +991,7 @@ public abstract class PlayerList {
|
@@ -1226,7 +1257,13 @@ public abstract class PlayerList {
|
||||||
}
|
|
||||||
// Paper end - Incremental chunk and player saving
|
|
||||||
}
|
|
||||||
+ org.leavesmc.leaves.bot.BotList.INSTANCE.saveAllResumeBots(); // Leaves - resident fakeplayer
|
|
||||||
return null; }); // Paper - ensure main
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1226,7 +1258,13 @@ public abstract class PlayerList {
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public ServerPlayer getPlayer(UUID playerUUID) {
|
public ServerPlayer getPlayer(UUID playerUUID) {
|
||||||
@@ -683,7 +683,7 @@ index adab5dc640a7a0299c04020225a68317282aebe9..e127a670935186ba3d96a8d85640cf46
|
|||||||
protected SoundEvent getPaddleSound() {
|
protected SoundEvent getPaddleSound() {
|
||||||
return switch (this.getStatus()) {
|
return switch (this.getStatus()) {
|
||||||
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
index 670090c4466d6472a83263e1769f19e3e491c927..4e53e7c05af11cae2ce8cf313c69a83336e22ba6 100644
|
index 670090c4466d6472a83263e1769f19e3e491c927..c097bfe559c648bc279a9dffe874f3180ff80e27 100644
|
||||||
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
@@ -400,6 +400,7 @@ public abstract class AbstractContainerMenu {
|
@@ -400,6 +400,7 @@ public abstract class AbstractContainerMenu {
|
||||||
|
|||||||
@@ -148,10 +148,10 @@ index adb26ae4dfd5dc111cc55000b71c15f95239b090..20b9dfe68dfbcd5bb999ee4ec0500bdf
|
|||||||
if (packet == null || this.processedDisconnect) { // Spigot
|
if (packet == null || this.processedDisconnect) { // Spigot
|
||||||
return;
|
return;
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 6dec8565e9d290302ce7766357a56b8c2295c163..bf5d8fe260aaca48a73d6ffe9d1312f5161f9365 100644
|
index 5d1d71858c730c431120d4a66244969ebf2a5164..73f8562658d30ba17d5ecf2c778622e5e75ae135 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1186,7 +1186,7 @@ public abstract class PlayerList {
|
@@ -1185,7 +1185,7 @@ public abstract class PlayerList {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean verifyChatTrusted(PlayerChatMessage message) {
|
public boolean verifyChatTrusted(PlayerChatMessage message) {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ index d4df6ca7360d4bc605a51061444191d7929c7778..134f6eba6655b7294ebcdf5cf5d9e218
|
|||||||
if (this.isBlocking()) {
|
if (this.isBlocking()) {
|
||||||
this.stopUsingItem();
|
this.stopUsingItem();
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index bf5d8fe260aaca48a73d6ffe9d1312f5161f9365..7977a0cfe18c99c4c6ba8c5b56387b690ede554d 100644
|
index 73f8562658d30ba17d5ecf2c778622e5e75ae135..cf3c9f2a19377f2d446f6220180f63557ef8a901 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -700,6 +700,20 @@ public abstract class PlayerList {
|
@@ -700,6 +700,20 @@ public abstract class PlayerList {
|
||||||
@@ -70,7 +70,7 @@ index ce4c8e14d3d7b5837dcce006fa67722f3f430fa4..759c320fc331704efe5df10d3f1f33aa
|
|||||||
@Nullable
|
@Nullable
|
||||||
private DamageSource lastDamageSource;
|
private DamageSource lastDamageSource;
|
||||||
diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java
|
diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java
|
||||||
index d3f0a61c0c91d3a6a1dc4e59d57743ba89a9c19a..1ad863dc255a7b91d0b163000b6bb5d43e2ad204 100644
|
index d3f0a61c0c91d3a6a1dc4e59d57743ba89a9c19a..3d006562b2ba6f9a2059a8b534fbee3288067f78 100644
|
||||||
--- a/net/minecraft/world/level/block/NetherPortalBlock.java
|
--- a/net/minecraft/world/level/block/NetherPortalBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/NetherPortalBlock.java
|
+++ b/net/minecraft/world/level/block/NetherPortalBlock.java
|
||||||
@@ -179,7 +179,18 @@ public class NetherPortalBlock extends Block implements Portal {
|
@@ -179,7 +179,18 @@ public class NetherPortalBlock extends Block implements Portal {
|
||||||
@@ -87,7 +87,7 @@ index d3f0a61c0c91d3a6a1dc4e59d57743ba89a9c19a..1ad863dc255a7b91d0b163000b6bb5d4
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ if (optional.isEmpty()) {
|
+ if (optional.isEmpty()) {
|
||||||
+ level.getPortalForcer().findClosestPortalPosition(exitPos, worldBorder, result.searchRadius()); // CraftBukkit
|
+ optional = level.getPortalForcer().findClosestPortalPosition(exitPos, worldBorder, result.searchRadius()); // CraftBukkit
|
||||||
+ }
|
+ }
|
||||||
+ // Leaves end - fix return portal
|
+ // Leaves end - fix return portal
|
||||||
BlockUtil.FoundRectangle largestRectangleAround;
|
BlockUtil.FoundRectangle largestRectangleAround;
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ index 3e4241976fdfe65bc0aae90a9097770745c0ddf1..8e3e9a8aaee8fd4fbe986f9f07994517
|
|||||||
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
|
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index c8135525666da2cedc134025327e240fbe6cd63c..bd9d83675d40b383678c6066b73b9e053b5ea6a6 100644
|
index 2c9451bb024a6d185729e9b1fad508883401e468..cef816d3526cec1b7cb5b03e62454609eec876bb 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1808,7 +1808,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1809,7 +1809,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
|
|
||||||
try {
|
try {
|
||||||
serverLevel.tick(hasTimeLeft);
|
serverLevel.tick(hasTimeLeft);
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Bedrock break list
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index bd9d83675d40b383678c6066b73b9e053b5ea6a6..fa2ae16481541308d525d0ac70a8bbc2c66a8851 100644
|
index cef816d3526cec1b7cb5b03e62454609eec876bb..d9d661f72c90d04a3fca0d5698cc38a004717581 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1843,6 +1843,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1844,6 +1844,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
profilerFiller.popPush("server gui refresh");
|
profilerFiller.popPush("server gui refresh");
|
||||||
|
|
||||||
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleTick(tickCount); // Leaves - protocol
|
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleTick(tickCount); // Leaves - protocol
|
||||||
|
|||||||
@@ -5,26 +5,26 @@ Subject: [PATCH] Container open passthrough
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/decoration/ItemFrame.java b/net/minecraft/world/entity/decoration/ItemFrame.java
|
diff --git a/net/minecraft/world/entity/decoration/ItemFrame.java b/net/minecraft/world/entity/decoration/ItemFrame.java
|
||||||
index e6012d2cfe9b84782c8d5a0ba424eeda98086c09..431ebb89eb98c594829f7dbf622033e76240cbb9 100644
|
index 1b50d5a1c61fe15d06b3c1880e046c4a674df04e..9ca6e464c6f82cc7cf8d7ca8740f081abf99ff09 100644
|
||||||
--- a/net/minecraft/world/entity/decoration/ItemFrame.java
|
--- a/net/minecraft/world/entity/decoration/ItemFrame.java
|
||||||
+++ b/net/minecraft/world/entity/decoration/ItemFrame.java
|
+++ b/net/minecraft/world/entity/decoration/ItemFrame.java
|
||||||
@@ -421,6 +421,16 @@ public class ItemFrame extends HangingEntity {
|
@@ -400,6 +400,16 @@ public class ItemFrame extends HangingEntity {
|
||||||
return InteractionResult.PASS;
|
if (this.fixed) {
|
||||||
}
|
return InteractionResult.PASS;
|
||||||
} else {
|
} else if (!player.level().isClientSide()) {
|
||||||
+ // Leaves start - itemFrameContainerPassthrough
|
+ // Leaves start - itemFrameContainerPassthrough
|
||||||
+ if (org.leavesmc.leaves.LeavesConfig.modify.containerPassthrough && !player.isShiftKeyDown()) {
|
+ if (org.leavesmc.leaves.LeavesConfig.modify.containerPassthrough && !player.isShiftKeyDown() && (flag || !flag1)) {
|
||||||
+ BlockPos pos1 = this.pos.relative(this.getDirection().getOpposite());
|
+ BlockPos pos1 = this.pos.relative(this.getDirection().getOpposite());
|
||||||
+ if (level().getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) {
|
+ if (level().getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) {
|
||||||
+ net.minecraft.world.phys.BlockHitResult hitResult = new net.minecraft.world.phys.BlockHitResult(Vec3.atCenterOf(pos1), this.getDirection(), pos1, false);
|
+ net.minecraft.world.phys.BlockHitResult hitResult = new net.minecraft.world.phys.BlockHitResult(Vec3.atCenterOf(pos1), this.getDirection(), pos1, false);
|
||||||
+ net.minecraft.server.level.ServerPlayer serverPlayer = (net.minecraft.server.level.ServerPlayer) player;
|
+ net.minecraft.server.level.ServerPlayer serverPlayer = (net.minecraft.server.level.ServerPlayer) player;
|
||||||
+ return serverPlayer.gameMode.useItemOn(serverPlayer, level(), itemInHand, hand, hitResult);
|
+ return serverPlayer.gameMode.useItemOn(serverPlayer, level(), itemInHand, hand, hitResult);
|
||||||
+ }
|
|
||||||
+ }
|
+ }
|
||||||
+ // Leaves end - itemFrameContainerPassthrough
|
+ }
|
||||||
// Paper start - Add PlayerItemFrameChangeEvent
|
+ // Leaves end - itemFrameContainerPassthrough
|
||||||
io.papermc.paper.event.player.PlayerItemFrameChangeEvent event = new io.papermc.paper.event.player.PlayerItemFrameChangeEvent((org.bukkit.entity.Player) player.getBukkitEntity(), (org.bukkit.entity.ItemFrame) this.getBukkitEntity(), this.getItem().asBukkitCopy(), io.papermc.paper.event.player.PlayerItemFrameChangeEvent.ItemFrameChangeAction.ROTATE);
|
if (!flag) {
|
||||||
if (!event.callEvent()) {
|
if (flag1 && !this.isRemoved()) {
|
||||||
|
MapItemSavedData savedData = MapItem.getSavedData(itemInHand, this.level());
|
||||||
diff --git a/net/minecraft/world/level/block/SignBlock.java b/net/minecraft/world/level/block/SignBlock.java
|
diff --git a/net/minecraft/world/level/block/SignBlock.java b/net/minecraft/world/level/block/SignBlock.java
|
||||||
index a2c6b0f85535b286c5649352f49e448ad587655c..3d62414778f8e18aebfa67817a86f188cb90c614 100644
|
index a2c6b0f85535b286c5649352f49e448ad587655c..3d62414778f8e18aebfa67817a86f188cb90c614 100644
|
||||||
--- a/net/minecraft/world/level/block/SignBlock.java
|
--- a/net/minecraft/world/level/block/SignBlock.java
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Bow infinity fix
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
||||||
index 4e7e8b8f4004cab2cf5af0dafe81e72df78f7258..d894741db7ce97f9809d835270148093f3293f30 100644
|
index 4e7e8b8f4004cab2cf5af0dafe81e72df78f7258..b692785e7f9f899fe8d06d75d8206df8cef4dd29 100644
|
||||||
--- a/net/minecraft/world/entity/player/Player.java
|
--- a/net/minecraft/world/entity/player/Player.java
|
||||||
+++ b/net/minecraft/world/entity/player/Player.java
|
+++ b/net/minecraft/world/entity/player/Player.java
|
||||||
@@ -1968,8 +1968,10 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -1968,8 +1968,10 @@ public abstract class Player extends Avatar implements ContainerUser {
|
||||||
@@ -16,7 +16,7 @@ index 4e7e8b8f4004cab2cf5af0dafe81e72df78f7258..d894741db7ce97f9809d835270148093
|
|||||||
- return this.hasInfiniteMaterials() ? new ItemStack(Items.ARROW) : ItemStack.EMPTY;
|
- return this.hasInfiniteMaterials() ? new ItemStack(Items.ARROW) : ItemStack.EMPTY;
|
||||||
+ // Leaves start - bow infinity fix
|
+ // Leaves start - bow infinity fix
|
||||||
+ if ((org.leavesmc.leaves.LeavesConfig.modify.bowInfinityFix || anyEventCancelled.booleanValue()) && !this.abilities.instabuild && this instanceof final ServerPlayer player) this.resyncUsingItem(player); // Paper - resync if no item matched the Predicate
|
+ if ((org.leavesmc.leaves.LeavesConfig.modify.bowInfinityFix || anyEventCancelled.booleanValue()) && !this.abilities.instabuild && this instanceof final ServerPlayer player) this.resyncUsingItem(player); // Paper - resync if no item matched the Predicate
|
||||||
+ return org.leavesmc.leaves.LeavesConfig.modify.bowInfinityFix ? net.minecraft.world.item.enchantment.EnchantmentHelper.processAmmoUse((ServerLevel) this.level(), shootable, new ItemStack(Items.ARROW), 1) <= 0 ? new ItemStack(Items.ARROW) : ItemStack.EMPTY : this.hasInfiniteMaterials() ? new ItemStack(Items.ARROW) : ItemStack.EMPTY;
|
+ return this.hasInfiniteMaterials() || (org.leavesmc.leaves.LeavesConfig.modify.bowInfinityFix && net.minecraft.world.item.enchantment.EnchantmentHelper.processAmmoUse((ServerLevel) this.level(), shootable, new ItemStack(Items.ARROW), 1) <= 0) ? new ItemStack(Items.ARROW) : ItemStack.EMPTY;
|
||||||
+ // Leaves end - bow infinity fix
|
+ // Leaves end - bow infinity fix
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,10 +80,10 @@ index d438e31a082b675d7eb0eead7067a0b92363a9f9..c08f34bc17bec9f73c377b45389a7755
|
|||||||
players.add(serverPlayer1);
|
players.add(serverPlayer1);
|
||||||
if (players.size() >= resultLimit) {
|
if (players.size() >= resultLimit) {
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874da049efe 100644
|
index d9d661f72c90d04a3fca0d5698cc38a004717581..7daa09a9e088647c5147c7aa6376030834c46526 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1720,7 +1720,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1721,7 +1721,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServerStatus.Players buildPlayerStatus() {
|
private ServerStatus.Players buildPlayerStatus() {
|
||||||
@@ -92,7 +92,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
|||||||
int maxPlayers = this.getMaxPlayers();
|
int maxPlayers = this.getMaxPlayers();
|
||||||
if (this.hidesOnlinePlayers()) {
|
if (this.hidesOnlinePlayers()) {
|
||||||
return new ServerStatus.Players(maxPlayers, players.size(), List.of());
|
return new ServerStatus.Players(maxPlayers, players.size(), List.of());
|
||||||
@@ -1952,7 +1952,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1953,7 +1953,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPlayerCount() {
|
public int getPlayerCount() {
|
||||||
@@ -101,7 +101,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String[] getPlayerNames() {
|
public String[] getPlayerNames() {
|
||||||
@@ -2176,7 +2176,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -2177,7 +2177,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
} else {
|
} else {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
|||||||
// Paper start - Expand PlayerGameModeChangeEvent
|
// Paper start - Expand PlayerGameModeChangeEvent
|
||||||
org.bukkit.event.player.PlayerGameModeChangeEvent event = serverPlayer.setGameMode(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null);
|
org.bukkit.event.player.PlayerGameModeChangeEvent event = serverPlayer.setGameMode(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null);
|
||||||
if (event == null || event.isCancelled()) {
|
if (event == null || event.isCancelled()) {
|
||||||
@@ -2344,7 +2344,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -2345,7 +2345,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
if (Thread.currentThread() != this.serverThread) return; // Paper
|
if (Thread.currentThread() != this.serverThread) return; // Paper
|
||||||
// Paper start - we don't need to save everything, just advancements
|
// Paper start - we don't need to save everything, just advancements
|
||||||
// this.getPlayerList().saveAll();
|
// this.getPlayerList().saveAll();
|
||||||
@@ -119,7 +119,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
|||||||
player.getAdvancements().save();
|
player.getAdvancements().save();
|
||||||
}
|
}
|
||||||
// Paper end - we don't need to save everything, just advancements
|
// Paper end - we don't need to save everything, just advancements
|
||||||
@@ -2482,7 +2482,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -2483,7 +2483,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
PlayerList playerList = this.getPlayerList();
|
PlayerList playerList = this.getPlayerList();
|
||||||
UserWhiteList whiteList = playerList.getWhiteList();
|
UserWhiteList whiteList = playerList.getWhiteList();
|
||||||
|
|
||||||
@@ -301,21 +301,8 @@ index b4edd659a77139c1771b0714eaa35b6810d96d78..ead3e1d538f138dc5370db49d8b4293a
|
|||||||
ServerLevel.this.realPlayers.remove(serverPlayer);
|
ServerLevel.this.realPlayers.remove(serverPlayer);
|
||||||
}
|
}
|
||||||
// Leaves end - skip
|
// Leaves end - skip
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
|
||||||
index 97e133f3555057e36e3e7157f1411ba923ab2823..44b1d56fb3ce3827290ef4cf987aa2386d07eb9c 100644
|
|
||||||
--- a/net/minecraft/server/level/ServerPlayer.java
|
|
||||||
+++ b/net/minecraft/server/level/ServerPlayer.java
|
|
||||||
@@ -523,7 +523,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
|
||||||
// Paper start - Expand PlayerGameModeChangeEvent
|
|
||||||
this.loadGameTypes(input);
|
|
||||||
}
|
|
||||||
- private void loadGameTypes(ValueInput input) {
|
|
||||||
+ public void loadGameTypes(ValueInput input) { // Leaves - private -> public
|
|
||||||
if (this.server.getForcedGameType() != null && this.server.getForcedGameType() != readPlayerMode(input, "playerGameType")) {
|
|
||||||
if (new org.bukkit.event.player.PlayerGameModeChangeEvent(this.getBukkitEntity(), org.bukkit.GameMode.getByValue(this.server.getDefaultGameType().getId()), org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null).callEvent()) {
|
|
||||||
this.gameMode.setGameModeForPlayer(this.server.getForcedGameType(), GameType.DEFAULT_MODE);
|
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8b3212054 100644
|
index cf3c9f2a19377f2d446f6220180f63557ef8a901..b6e4a227d49ca97e8482c56ea0819a030b52097c 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -126,6 +126,7 @@ public abstract class PlayerList {
|
@@ -126,6 +126,7 @@ public abstract class PlayerList {
|
||||||
@@ -326,7 +313,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
private org.bukkit.craftbukkit.CraftServer cserver;
|
private org.bukkit.craftbukkit.CraftServer cserver;
|
||||||
@@ -149,6 +150,125 @@ public abstract class PlayerList {
|
@@ -149,6 +150,124 @@ public abstract class PlayerList {
|
||||||
|
|
||||||
abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor
|
abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor
|
||||||
|
|
||||||
@@ -339,11 +326,10 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
+
|
+
|
||||||
+ player.setServerLevel(worldserver1);
|
+ player.setServerLevel(worldserver1);
|
||||||
+ player.spawnIn(worldserver1);
|
+ player.spawnIn(worldserver1);
|
||||||
+ player.gameMode.setLevel((ServerLevel) player.level());
|
+ player.gameMode.setLevel(player.level());
|
||||||
+
|
+
|
||||||
+ LevelData worlddata = worldserver1.getLevelData();
|
+ LevelData worlddata = worldserver1.getLevelData();
|
||||||
+
|
+
|
||||||
+ player.loadGameTypes(null);
|
|
||||||
+ ServerGamePacketListenerImpl playerconnection = new ServerGamePacketListenerImpl(this.server, connection, player, CommonListenerCookie.createInitial(player.gameProfile, false));
|
+ ServerGamePacketListenerImpl playerconnection = new ServerGamePacketListenerImpl(this.server, connection, player, CommonListenerCookie.createInitial(player.gameProfile, false));
|
||||||
+ GameRules gamerules = worldserver1.getGameRules();
|
+ GameRules gamerules = worldserver1.getGameRules();
|
||||||
+ boolean flag = gamerules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
|
+ boolean flag = gamerules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
|
||||||
@@ -452,7 +438,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie cookie) {
|
public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie cookie) {
|
||||||
player.isRealPlayer = true; // Paper
|
player.isRealPlayer = true; // Paper
|
||||||
player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed
|
player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed
|
||||||
@@ -216,6 +336,7 @@ public abstract class PlayerList {
|
@@ -216,6 +335,7 @@ public abstract class PlayerList {
|
||||||
|
|
||||||
// player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below
|
// player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below
|
||||||
this.players.add(player);
|
this.players.add(player);
|
||||||
@@ -460,7 +446,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot
|
this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot
|
||||||
this.playersByUUID.put(player.getUUID(), player);
|
this.playersByUUID.put(player.getUUID(), player);
|
||||||
// this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below
|
// this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below
|
||||||
@@ -420,6 +541,7 @@ public abstract class PlayerList {
|
@@ -420,6 +540,7 @@ public abstract class PlayerList {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void save(ServerPlayer player) {
|
protected void save(ServerPlayer player) {
|
||||||
@@ -468,7 +454,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit
|
if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit
|
||||||
player.lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving
|
player.lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving
|
||||||
this.playerIo.save(player);
|
this.playerIo.save(player);
|
||||||
@@ -434,6 +556,43 @@ public abstract class PlayerList {
|
@@ -434,6 +555,43 @@ public abstract class PlayerList {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,7 +498,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player) { // CraftBukkit - return string // Paper - return Component
|
public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player) { // CraftBukkit - return string // Paper - return Component
|
||||||
// Paper start - Fix kick event leave message not being sent
|
// Paper start - Fix kick event leave message not being sent
|
||||||
return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName())));
|
return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName())));
|
||||||
@@ -507,6 +666,7 @@ public abstract class PlayerList {
|
@@ -507,6 +665,7 @@ public abstract class PlayerList {
|
||||||
player.retireScheduler(); // Paper - Folia schedulers
|
player.retireScheduler(); // Paper - Folia schedulers
|
||||||
player.getAdvancements().stopListening();
|
player.getAdvancements().stopListening();
|
||||||
this.players.remove(player);
|
this.players.remove(player);
|
||||||
@@ -520,7 +506,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot
|
this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot
|
||||||
this.server.getCustomBossEvents().onPlayerDisconnect(player);
|
this.server.getCustomBossEvents().onPlayerDisconnect(player);
|
||||||
UUID uuid = player.getUUID();
|
UUID uuid = player.getUUID();
|
||||||
@@ -835,14 +995,14 @@ public abstract class PlayerList {
|
@@ -835,14 +994,14 @@ public abstract class PlayerList {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getPlayerNamesArray() {
|
public String[] getPlayerNamesArray() {
|
||||||
@@ -540,7 +526,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
|||||||
}
|
}
|
||||||
// Leaves end - fakeplayer support
|
// Leaves end - fakeplayer support
|
||||||
|
|
||||||
@@ -911,7 +1071,7 @@ public abstract class PlayerList {
|
@@ -911,7 +1070,7 @@ public abstract class PlayerList {
|
||||||
|
|
||||||
// Paper start - whitelist verify event / login event
|
// Paper start - whitelist verify event / login event
|
||||||
public LoginResult canBypassFullServerLogin(final NameAndId nameAndId, final LoginResult currentResult) {
|
public LoginResult canBypassFullServerLogin(final NameAndId nameAndId, final LoginResult currentResult) {
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Bytebuf API
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index c8628c6d505a7599b0765decfcd037c8b3212054..f376b03e267ae9c3acc9636b6ccee733497027d2 100644
|
index b6e4a227d49ca97e8482c56ea0819a030b52097c..7f21903070ab733249441e796a1faa5adf873ffb 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -290,6 +290,13 @@ public abstract class PlayerList {
|
@@ -289,6 +289,13 @@ public abstract class PlayerList {
|
||||||
boolean _boolean = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
|
boolean _boolean = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
|
||||||
boolean _boolean1 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO);
|
boolean _boolean1 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO);
|
||||||
boolean _boolean2 = gameRules.getBoolean(GameRules.RULE_LIMITED_CRAFTING);
|
boolean _boolean2 = gameRules.getBoolean(GameRules.RULE_LIMITED_CRAFTING);
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Xaero Map Protocol
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index f376b03e267ae9c3acc9636b6ccee733497027d2..5661e05cc1ffbfc7015ca45cf0820e0ba616bcc6 100644
|
index 7f21903070ab733249441e796a1faa5adf873ffb..e1ce47f1f507d7d1ec8606b02815b0d8fb970734 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1204,6 +1204,7 @@ public abstract class PlayerList {
|
@@ -1202,6 +1202,7 @@ public abstract class PlayerList {
|
||||||
player.connection.send(new ClientboundSetChunkCacheRadiusPacket(level.spigotConfig.viewDistance));
|
player.connection.send(new ClientboundSetChunkCacheRadiusPacket(level.spigotConfig.viewDistance));
|
||||||
player.connection.send(new ClientboundSetSimulationDistancePacket(level.spigotConfig.simulationDistance));
|
player.connection.send(new ClientboundSetSimulationDistancePacket(level.spigotConfig.simulationDistance));
|
||||||
// Paper end
|
// Paper end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Fast exp orb absorb
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/ExperienceOrb.java b/net/minecraft/world/entity/ExperienceOrb.java
|
diff --git a/net/minecraft/world/entity/ExperienceOrb.java b/net/minecraft/world/entity/ExperienceOrb.java
|
||||||
index 8bd430c5c417c76db02cf1e2c0bc6f229ed150f1..80eab68a6b5a34c4dd37ff4d74b9b6133be090b9 100644
|
index 47bdbf9c73f19ff85ae93f3e31e45d35fe8c0a92..e3d5140ed9e7e9435213954ab603a9eb15c43a8d 100644
|
||||||
--- a/net/minecraft/world/entity/ExperienceOrb.java
|
--- a/net/minecraft/world/entity/ExperienceOrb.java
|
||||||
+++ b/net/minecraft/world/entity/ExperienceOrb.java
|
+++ b/net/minecraft/world/entity/ExperienceOrb.java
|
||||||
@@ -358,6 +358,20 @@ public class ExperienceOrb extends Entity {
|
@@ -358,6 +358,20 @@ public class ExperienceOrb extends Entity {
|
||||||
@@ -18,7 +18,7 @@ index 8bd430c5c417c76db02cf1e2c0bc6f229ed150f1..80eab68a6b5a34c4dd37ff4d74b9b613
|
|||||||
+ entity.take(this, 1);
|
+ entity.take(this, 1);
|
||||||
+ int i = this.repairPlayerItems(serverPlayer, this.getValue());
|
+ int i = this.repairPlayerItems(serverPlayer, this.getValue());
|
||||||
+ if (i > 0) {
|
+ if (i > 0) {
|
||||||
+ entity.giveExperiencePoints(org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerExpChangeEvent(entity, this, 1).getAmount()); // CraftBukkit - this.value -> event.getAmount() // Paper - supply experience orb object
|
+ entity.giveExperiencePoints(org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerExpChangeEvent(entity, this, i).getAmount()); // CraftBukkit - this.value -> event.getAmount() // Paper - supply experience orb object
|
||||||
+ }
|
+ }
|
||||||
+ this.count--;
|
+ this.count--;
|
||||||
+ }
|
+ }
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lumine1909 <133463833+Lumine1909@users.noreply.github.com>
|
||||||
|
Date: Sat, 29 Nov 2025 21:01:21 +0800
|
||||||
|
Subject: [PATCH] Fix stacked container destroyed drop
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/item/ItemUtils.java b/net/minecraft/world/item/ItemUtils.java
|
||||||
|
index 16fc5c89b652194afac64aaa29f72a25ba7ffcae..53ac755a10b2e915053feab358aa3b9fbc25547a 100644
|
||||||
|
--- a/net/minecraft/world/item/ItemUtils.java
|
||||||
|
+++ b/net/minecraft/world/item/ItemUtils.java
|
||||||
|
@@ -39,6 +39,16 @@ public class ItemUtils {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onContainerDestroyed(ItemEntity container, Iterable<ItemStack> contents) {
|
||||||
|
+ if (org.leavesmc.leaves.LeavesConfig.fix.stackedContainerDestroyedDrop) {
|
||||||
|
+ for (int i = 0; i < container.getItem().getCount(); i++) {
|
||||||
|
+ createDroppedItem(container, contents);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ createDroppedItem(container, contents);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private static void createDroppedItem(ItemEntity container, Iterable<ItemStack> contents) {
|
||||||
|
Level level = container.level();
|
||||||
|
if (!level.isClientSide()) {
|
||||||
|
// Paper start - call EntityDropItemEvent
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lumine1909 <133463833+Lumine1909@users.noreply.github.com>
|
||||||
|
Date: Sat, 29 Nov 2025 23:32:57 +0800
|
||||||
|
Subject: [PATCH] Force minecraft command
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
|
||||||
|
index 83f05b042630891d43cfb567e98666831df80f6e..f7990278fe2e112025fffe9bfa3649db7aa4150a 100644
|
||||||
|
--- a/net/minecraft/commands/Commands.java
|
||||||
|
+++ b/net/minecraft/commands/Commands.java
|
||||||
|
@@ -176,7 +176,21 @@ public class Commands {
|
||||||
|
return node.getRequirement() instanceof PermissionCheck<?> permissionCheck && permissionCheck.requiredLevel() > 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
- private final CommandDispatcher<CommandSourceStack> dispatcher = new CommandDispatcher<>();
|
||||||
|
+ // Leaves start - force minecraft command
|
||||||
|
+ private final CommandDispatcher<CommandSourceStack> dispatcher = new CommandDispatcher<>() {
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public com.mojang.brigadier.tree.LiteralCommandNode<CommandSourceStack> register(com.mojang.brigadier.builder.LiteralArgumentBuilder<net.minecraft.commands.CommandSourceStack> command) {
|
||||||
|
+ try {
|
||||||
|
+ if (org.leavesmc.leaves.LeavesConfig.mics.forceMinecraftCommand && getRoot().getChild("minecraft:" + command.getLiteral()) != null) {
|
||||||
|
+ return command.build();
|
||||||
|
+ }
|
||||||
|
+ } catch (Exception ignored) {
|
||||||
|
+ }
|
||||||
|
+ return super.register(command);
|
||||||
|
+ }
|
||||||
|
+ };
|
||||||
|
+ // Leaves end - force minecraft command
|
||||||
|
|
||||||
|
public Commands(Commands.CommandSelection selection, CommandBuildContext context) {
|
||||||
|
// Paper start - Brigadier API - modern minecraft overloads that do not use redirects but are copies instead
|
||||||
@@ -4,6 +4,23 @@ Date: Fri, 2 Feb 2024 13:18:22 +0800
|
|||||||
Subject: [PATCH] Force minecraft command
|
Subject: [PATCH] Force minecraft command
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java
|
||||||
|
index d08ca38b4f04f7834de4ab64e5f794e8e26ec746..744db73d6cb89ca0256835cb2e98d427fe0f629a 100644
|
||||||
|
--- a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java
|
||||||
|
+++ b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java
|
||||||
|
@@ -96,6 +96,12 @@ public class BukkitBrigForwardingMap extends HashMap<String, Command> {
|
||||||
|
@Override
|
||||||
|
public Command put(String key, Command value) {
|
||||||
|
Command old = this.get(key);
|
||||||
|
+ if (org.leavesmc.leaves.LeavesConfig.mics.forceMinecraftCommand &&
|
||||||
|
+ getDispatcher().getRoot().getChild(key) != null &&
|
||||||
|
+ getDispatcher().getRoot().getChild("minecraft:" + key) != null
|
||||||
|
+ ) {
|
||||||
|
+ return old;
|
||||||
|
+ }
|
||||||
|
this.getDispatcher().getRoot().removeCommand(key); // Override previous command
|
||||||
|
if (value instanceof VanillaCommandWrapper wrapper && wrapper.getName().equals(key)) {
|
||||||
|
// Don't break when some plugin tries to remove and add back a plugin command registered with modern API...
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java b/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java b/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java
|
||||||
index 90ed57a7fbcd0625b64084347460e9864216f610..e3598f7a0d183255ba17bc0f08cee284a0898cef 100644
|
index 90ed57a7fbcd0625b64084347460e9864216f610..e3598f7a0d183255ba17bc0f08cee284a0898cef 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java
|
--- a/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java
|
||||||
|
|||||||
@@ -1198,7 +1198,7 @@ public final class LeavesConfig {
|
|||||||
@GlobalConfig("bstats-privacy-mode")
|
@GlobalConfig("bstats-privacy-mode")
|
||||||
public boolean bstatsPrivacyMode = false;
|
public boolean bstatsPrivacyMode = false;
|
||||||
|
|
||||||
@GlobalConfig("force-minecraft-command")
|
@GlobalConfig(value = "force-minecraft-command", lock = true)
|
||||||
public boolean forceMinecraftCommand = false;
|
public boolean forceMinecraftCommand = false;
|
||||||
|
|
||||||
@GlobalConfig("leaves-packet-event")
|
@GlobalConfig("leaves-packet-event")
|
||||||
@@ -1299,5 +1299,8 @@ public final class LeavesConfig {
|
|||||||
|
|
||||||
@GlobalConfig("vanilla-end-void-rings")
|
@GlobalConfig("vanilla-end-void-rings")
|
||||||
public boolean vanillaEndVoidRings = false;
|
public boolean vanillaEndVoidRings = false;
|
||||||
|
|
||||||
|
@GlobalConfig("stacked-container-destroyed-drop")
|
||||||
|
public boolean stackedContainerDestroyedDrop = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.leavesmc.leaves.LeavesConfig;
|
|
||||||
import org.leavesmc.leaves.entity.bot.Bot;
|
import org.leavesmc.leaves.entity.bot.Bot;
|
||||||
import org.leavesmc.leaves.entity.bot.BotCreator;
|
import org.leavesmc.leaves.entity.bot.BotCreator;
|
||||||
import org.leavesmc.leaves.entity.bot.CraftBot;
|
import org.leavesmc.leaves.entity.bot.CraftBot;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.mojang.authlib.properties.Property;
|
|||||||
import com.mojang.logging.LogUtils;
|
import com.mojang.logging.LogUtils;
|
||||||
import io.papermc.paper.adventure.PaperAdventure;
|
import io.papermc.paper.adventure.PaperAdventure;
|
||||||
import io.papermc.paper.profile.MutablePropertyMap;
|
import io.papermc.paper.profile.MutablePropertyMap;
|
||||||
|
import io.papermc.paper.util.MCUtil;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.Style;
|
import net.kyori.adventure.text.format.Style;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
@@ -71,6 +72,19 @@ public class BotList {
|
|||||||
INSTANCE = this;
|
INSTANCE = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void saveAllResumeBots(final int interval) {
|
||||||
|
MCUtil.ensureMain("Save Bots", () -> {
|
||||||
|
final long now = MinecraftServer.currentTick;
|
||||||
|
for (ServerBot bot : bots) {
|
||||||
|
if (interval == -1 || now - bot.lastSave >= interval) {
|
||||||
|
this.resumeDataStorage.save(bot);
|
||||||
|
bot.lastSave = MinecraftServer.currentTick;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void saveAllResumeBots() {
|
public void saveAllResumeBots() {
|
||||||
if (!LeavesConfig.modify.fakeplayer.enable || !LeavesConfig.modify.fakeplayer.canResident) {
|
if (!LeavesConfig.modify.fakeplayer.enable || !LeavesConfig.modify.fakeplayer.canResident) {
|
||||||
return;
|
return;
|
||||||
@@ -111,6 +125,9 @@ public class BotList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ServerBot loadNewBot(String fullName, BotDataStorage storage) {
|
public ServerBot loadNewBot(String fullName, BotDataStorage storage) {
|
||||||
|
if (botsByName.containsKey(fullName)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
UUID uuid = BotUtil.getBotUUID(fullName);
|
UUID uuid = BotUtil.getBotUUID(fullName);
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,10 @@ public class LoadCommand extends BotSubcommand {
|
|||||||
if (!botList.getManualSavedBotList().contains(botName)) {
|
if (!botList.getManualSavedBotList().contains(botName)) {
|
||||||
throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument().create();
|
throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument().create();
|
||||||
}
|
}
|
||||||
|
if (botList.getBotByName(botName) != null) {
|
||||||
|
sender.sendMessage(text("Bot with name " + botName + " already exists!", NamedTextColor.RED));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ServerBot bot = botList.loadNewManualSavedBot(botName);
|
ServerBot bot = botList.loadNewManualSavedBot(botName);
|
||||||
if (bot == null) {
|
if (bot == null) {
|
||||||
|
|||||||
@@ -41,11 +41,11 @@ import org.leavesmc.leaves.protocol.jade.payload.ReceiveDataPayload;
|
|||||||
import org.leavesmc.leaves.protocol.jade.payload.RequestBlockPayload;
|
import org.leavesmc.leaves.protocol.jade.payload.RequestBlockPayload;
|
||||||
import org.leavesmc.leaves.protocol.jade.payload.RequestEntityPayload;
|
import org.leavesmc.leaves.protocol.jade.payload.RequestEntityPayload;
|
||||||
import org.leavesmc.leaves.protocol.jade.payload.ServerHandshakePayload;
|
import org.leavesmc.leaves.protocol.jade.payload.ServerHandshakePayload;
|
||||||
|
import org.leavesmc.leaves.protocol.jade.provider.ItemStorageExtensionProvider;
|
||||||
|
import org.leavesmc.leaves.protocol.jade.provider.ItemStorageProvider;
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.JadeProvider;
|
import org.leavesmc.leaves.protocol.jade.provider.JadeProvider;
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.ServerDataProvider;
|
import org.leavesmc.leaves.protocol.jade.provider.ServerDataProvider;
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.ServerExtensionProvider;
|
import org.leavesmc.leaves.protocol.jade.provider.ServerExtensionProvider;
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.ItemStorageExtensionProvider;
|
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.ItemStorageProvider;
|
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.block.*;
|
import org.leavesmc.leaves.protocol.jade.provider.block.*;
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.entity.AnimalOwnerProvider;
|
import org.leavesmc.leaves.protocol.jade.provider.entity.AnimalOwnerProvider;
|
||||||
import org.leavesmc.leaves.protocol.jade.provider.entity.MobBreedingProvider;
|
import org.leavesmc.leaves.protocol.jade.provider.entity.MobBreedingProvider;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.leavesmc.leaves.protocol.servux;
|
|||||||
|
|
||||||
import com.mojang.serialization.DataResult;
|
import com.mojang.serialization.DataResult;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.ListTag;
|
import net.minecraft.nbt.ListTag;
|
||||||
@@ -177,7 +178,7 @@ public class ServuxHudDataProtocol implements LeavesProtocol {
|
|||||||
|
|
||||||
public static void refreshLoggers(ServerPlayer player, @Nonnull CompoundTag nbt) {
|
public static void refreshLoggers(ServerPlayer player, @Nonnull CompoundTag nbt) {
|
||||||
if (!player.getBukkitEntity().hasPermission("servux.provider.hud_data.logger")) {
|
if (!player.getBukkitEntity().hasPermission("servux.provider.hud_data.logger")) {
|
||||||
player.sendSystemMessage(Component.translatable("servux.hud_data.error.insufficient_for_loggers", "any"));
|
player.sendSystemMessage(Component.literal("Insufficient Permissions for Data Logger: 'any'.").withStyle(ChatFormatting.RED));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user