mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 06:49:34 +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
|
||||
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
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
5
gradlew
vendored
5
gradlew
vendored
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
# Copyright © 2015 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -114,7 +114,6 @@ case "$( uname )" in #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH="\\\"\\\""
|
||||
|
||||
|
||||
# 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
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
@@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||
"$@"
|
||||
|
||||
|
||||
3
gradlew.bat
vendored
3
gradlew.bat
vendored
@@ -70,11 +70,10 @@ goto fail
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=
|
||||
|
||||
|
||||
@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
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
|
||||
@@ -126,14 +126,14 @@ index c6db2c96db96453daaf49779f588f75f7c3d3d60..adb26ae4dfd5dc111cc55000b71c15f9
|
||||
this.connection.setReadOnly();
|
||||
// CraftBukkit - Don't wait
|
||||
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
|
||||
+++ b/net/minecraft/server/players/PlayerList.java
|
||||
@@ -239,6 +239,8 @@ public abstract class PlayerList {
|
||||
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();
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ index 14addbaf68b7ad80490187d12d9c9b00891e2ce1..b186b5e0d3b32d7b51b2f58f0ef4b2bf
|
||||
private DisconnectionDetails disconnectionDetails;
|
||||
private boolean encrypted;
|
||||
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
|
||||
+++ b/net/minecraft/server/MinecraftServer.java
|
||||
@@ -378,6 +378,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -59,7 +59,15 @@ index 2493722c47b92cbcd13c08af0caf38a543ac7e37..309ff4c55b2a4ccf3d18951b51c2e10d
|
||||
this.emptyTicks++;
|
||||
} else {
|
||||
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() {
|
||||
this.getConnection().tick();
|
||||
@@ -67,7 +75,7 @@ index 2493722c47b92cbcd13c08af0caf38a543ac7e37..309ff4c55b2a4ccf3d18951b51c2e10d
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -341,7 +349,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..04ea4e33504703c4074aef6e74ec06dc
|
||||
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
|
||||
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
|
||||
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
|
||||
+++ b/net/minecraft/server/players/CachedUserNameToIdResolver.java
|
||||
@@ -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
|
||||
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
|
||||
+++ b/net/minecraft/server/players/PlayerList.java
|
||||
@@ -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
|
||||
+ 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) {
|
||||
@@ -960,6 +991,7 @@ 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 {
|
||||
@@ -1226,7 +1257,13 @@ public abstract class PlayerList {
|
||||
|
||||
@Nullable
|
||||
public ServerPlayer getPlayer(UUID playerUUID) {
|
||||
@@ -683,7 +683,7 @@ index adab5dc640a7a0299c04020225a68317282aebe9..e127a670935186ba3d96a8d85640cf46
|
||||
protected SoundEvent getPaddleSound() {
|
||||
return switch (this.getStatus()) {
|
||||
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
|
||||
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||
@@ -400,6 +400,7 @@ public abstract class AbstractContainerMenu {
|
||||
|
||||
@@ -148,10 +148,10 @@ index adb26ae4dfd5dc111cc55000b71c15f95239b090..20b9dfe68dfbcd5bb999ee4ec0500bdf
|
||||
if (packet == null || this.processedDisconnect) { // Spigot
|
||||
return;
|
||||
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
|
||||
+++ 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) {
|
||||
|
||||
@@ -32,7 +32,7 @@ index d4df6ca7360d4bc605a51061444191d7929c7778..134f6eba6655b7294ebcdf5cf5d9e218
|
||||
if (this.isBlocking()) {
|
||||
this.stopUsingItem();
|
||||
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
|
||||
+++ b/net/minecraft/server/players/PlayerList.java
|
||||
@@ -700,6 +700,20 @@ public abstract class PlayerList {
|
||||
@@ -70,7 +70,7 @@ index ce4c8e14d3d7b5837dcce006fa67722f3f430fa4..759c320fc331704efe5df10d3f1f33aa
|
||||
@Nullable
|
||||
private DamageSource lastDamageSource;
|
||||
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
|
||||
+++ b/net/minecraft/world/level/block/NetherPortalBlock.java
|
||||
@@ -179,7 +179,18 @@ public class NetherPortalBlock extends Block implements Portal {
|
||||
@@ -87,7 +87,7 @@ index d3f0a61c0c91d3a6a1dc4e59d57743ba89a9c19a..1ad863dc255a7b91d0b163000b6bb5d4
|
||||
+ }
|
||||
+ }
|
||||
+ 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
|
||||
BlockUtil.FoundRectangle largestRectangleAround;
|
||||
|
||||
@@ -30,10 +30,10 @@ index 3e4241976fdfe65bc0aae90a9097770745c0ddf1..8e3e9a8aaee8fd4fbe986f9f07994517
|
||||
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
|
||||
}
|
||||
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
|
||||
+++ 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 {
|
||||
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
|
||||
index bd9d83675d40b383678c6066b73b9e053b5ea6a6..fa2ae16481541308d525d0ac70a8bbc2c66a8851 100644
|
||||
index cef816d3526cec1b7cb5b03e62454609eec876bb..d9d661f72c90d04a3fca0d5698cc38a004717581 100644
|
||||
--- a/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");
|
||||
|
||||
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
|
||||
index e6012d2cfe9b84782c8d5a0ba424eeda98086c09..431ebb89eb98c594829f7dbf622033e76240cbb9 100644
|
||||
index 1b50d5a1c61fe15d06b3c1880e046c4a674df04e..9ca6e464c6f82cc7cf8d7ca8740f081abf99ff09 100644
|
||||
--- a/net/minecraft/world/entity/decoration/ItemFrame.java
|
||||
+++ b/net/minecraft/world/entity/decoration/ItemFrame.java
|
||||
@@ -421,6 +421,16 @@ public class ItemFrame extends HangingEntity {
|
||||
return InteractionResult.PASS;
|
||||
}
|
||||
} else {
|
||||
+ // Leaves start - itemFrameContainerPassthrough
|
||||
+ if (org.leavesmc.leaves.LeavesConfig.modify.containerPassthrough && !player.isShiftKeyDown()) {
|
||||
+ BlockPos pos1 = this.pos.relative(this.getDirection().getOpposite());
|
||||
+ 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.server.level.ServerPlayer serverPlayer = (net.minecraft.server.level.ServerPlayer) player;
|
||||
+ return serverPlayer.gameMode.useItemOn(serverPlayer, level(), itemInHand, hand, hitResult);
|
||||
+ }
|
||||
@@ -400,6 +400,16 @@ public class ItemFrame extends HangingEntity {
|
||||
if (this.fixed) {
|
||||
return InteractionResult.PASS;
|
||||
} else if (!player.level().isClientSide()) {
|
||||
+ // Leaves start - itemFrameContainerPassthrough
|
||||
+ if (org.leavesmc.leaves.LeavesConfig.modify.containerPassthrough && !player.isShiftKeyDown() && (flag || !flag1)) {
|
||||
+ BlockPos pos1 = this.pos.relative(this.getDirection().getOpposite());
|
||||
+ 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.server.level.ServerPlayer serverPlayer = (net.minecraft.server.level.ServerPlayer) player;
|
||||
+ return serverPlayer.gameMode.useItemOn(serverPlayer, level(), itemInHand, hand, hitResult);
|
||||
+ }
|
||||
+ // Leaves end - itemFrameContainerPassthrough
|
||||
// Paper start - Add PlayerItemFrameChangeEvent
|
||||
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 (!event.callEvent()) {
|
||||
+ }
|
||||
+ // Leaves end - itemFrameContainerPassthrough
|
||||
if (!flag) {
|
||||
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
|
||||
index a2c6b0f85535b286c5649352f49e448ad587655c..3d62414778f8e18aebfa67817a86f188cb90c614 100644
|
||||
--- 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
|
||||
index 4e7e8b8f4004cab2cf5af0dafe81e72df78f7258..d894741db7ce97f9809d835270148093f3293f30 100644
|
||||
index 4e7e8b8f4004cab2cf5af0dafe81e72df78f7258..b692785e7f9f899fe8d06d75d8206df8cef4dd29 100644
|
||||
--- a/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 {
|
||||
@@ -16,7 +16,7 @@ index 4e7e8b8f4004cab2cf5af0dafe81e72df78f7258..d894741db7ce97f9809d835270148093
|
||||
- return this.hasInfiniteMaterials() ? new ItemStack(Items.ARROW) : ItemStack.EMPTY;
|
||||
+ // 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
|
||||
+ 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,10 +80,10 @@ index d438e31a082b675d7eb0eead7067a0b92363a9f9..c08f34bc17bec9f73c377b45389a7755
|
||||
players.add(serverPlayer1);
|
||||
if (players.size() >= resultLimit) {
|
||||
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
|
||||
+++ 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() {
|
||||
@@ -92,7 +92,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
||||
int maxPlayers = this.getMaxPlayers();
|
||||
if (this.hidesOnlinePlayers()) {
|
||||
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
|
||||
public int getPlayerCount() {
|
||||
@@ -101,7 +101,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
||||
}
|
||||
|
||||
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 {
|
||||
int i = 0;
|
||||
|
||||
@@ -110,7 +110,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
||||
// Paper start - Expand PlayerGameModeChangeEvent
|
||||
org.bukkit.event.player.PlayerGameModeChangeEvent event = serverPlayer.setGameMode(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null);
|
||||
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
|
||||
// Paper start - we don't need to save everything, just advancements
|
||||
// this.getPlayerList().saveAll();
|
||||
@@ -119,7 +119,7 @@ index fa2ae16481541308d525d0ac70a8bbc2c66a8851..89067dceacb1f4fb6f7acacd4ec16874
|
||||
player.getAdvancements().save();
|
||||
}
|
||||
// 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();
|
||||
UserWhiteList whiteList = playerList.getWhiteList();
|
||||
|
||||
@@ -301,21 +301,8 @@ index b4edd659a77139c1771b0714eaa35b6810d96d78..ead3e1d538f138dc5370db49d8b4293a
|
||||
ServerLevel.this.realPlayers.remove(serverPlayer);
|
||||
}
|
||||
// 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
|
||||
index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8b3212054 100644
|
||||
index cf3c9f2a19377f2d446f6220180f63557ef8a901..b6e4a227d49ca97e8482c56ea0819a030b52097c 100644
|
||||
--- a/net/minecraft/server/players/PlayerList.java
|
||||
+++ b/net/minecraft/server/players/PlayerList.java
|
||||
@@ -126,6 +126,7 @@ public abstract class PlayerList {
|
||||
@@ -326,7 +313,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
||||
|
||||
// CraftBukkit start
|
||||
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
|
||||
|
||||
@@ -339,11 +326,10 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
||||
+
|
||||
+ player.setServerLevel(worldserver1);
|
||||
+ player.spawnIn(worldserver1);
|
||||
+ player.gameMode.setLevel((ServerLevel) player.level());
|
||||
+ player.gameMode.setLevel(player.level());
|
||||
+
|
||||
+ LevelData worlddata = worldserver1.getLevelData();
|
||||
+
|
||||
+ player.loadGameTypes(null);
|
||||
+ ServerGamePacketListenerImpl playerconnection = new ServerGamePacketListenerImpl(this.server, connection, player, CommonListenerCookie.createInitial(player.gameProfile, false));
|
||||
+ GameRules gamerules = worldserver1.getGameRules();
|
||||
+ 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) {
|
||||
player.isRealPlayer = true; // Paper
|
||||
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
|
||||
this.players.add(player);
|
||||
@@ -460,7 +446,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
||||
this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot
|
||||
this.playersByUUID.put(player.getUUID(), player);
|
||||
// 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) {
|
||||
@@ -468,7 +454,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
||||
if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit
|
||||
player.lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving
|
||||
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
|
||||
// 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())));
|
||||
@@ -507,6 +666,7 @@ public abstract class PlayerList {
|
||||
@@ -507,6 +665,7 @@ public abstract class PlayerList {
|
||||
player.retireScheduler(); // Paper - Folia schedulers
|
||||
player.getAdvancements().stopListening();
|
||||
this.players.remove(player);
|
||||
@@ -520,7 +506,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
||||
this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot
|
||||
this.server.getCustomBossEvents().onPlayerDisconnect(player);
|
||||
UUID uuid = player.getUUID();
|
||||
@@ -835,14 +995,14 @@ public abstract class PlayerList {
|
||||
@@ -835,14 +994,14 @@ public abstract class PlayerList {
|
||||
}
|
||||
|
||||
public String[] getPlayerNamesArray() {
|
||||
@@ -540,7 +526,7 @@ index 7977a0cfe18c99c4c6ba8c5b56387b690ede554d..c8628c6d505a7599b0765decfcd037c8
|
||||
}
|
||||
// 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
|
||||
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
|
||||
index c8628c6d505a7599b0765decfcd037c8b3212054..f376b03e267ae9c3acc9636b6ccee733497027d2 100644
|
||||
index b6e4a227d49ca97e8482c56ea0819a030b52097c..7f21903070ab733249441e796a1faa5adf873ffb 100644
|
||||
--- a/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 _boolean1 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO);
|
||||
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
|
||||
index f376b03e267ae9c3acc9636b6ccee733497027d2..5661e05cc1ffbfc7015ca45cf0820e0ba616bcc6 100644
|
||||
index 7f21903070ab733249441e796a1faa5adf873ffb..e1ce47f1f507d7d1ec8606b02815b0d8fb970734 100644
|
||||
--- a/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 ClientboundSetSimulationDistancePacket(level.spigotConfig.simulationDistance));
|
||||
// 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
|
||||
index 8bd430c5c417c76db02cf1e2c0bc6f229ed150f1..80eab68a6b5a34c4dd37ff4d74b9b6133be090b9 100644
|
||||
index 47bdbf9c73f19ff85ae93f3e31e45d35fe8c0a92..e3d5140ed9e7e9435213954ab603a9eb15c43a8d 100644
|
||||
--- a/net/minecraft/world/entity/ExperienceOrb.java
|
||||
+++ b/net/minecraft/world/entity/ExperienceOrb.java
|
||||
@@ -358,6 +358,20 @@ public class ExperienceOrb extends Entity {
|
||||
@@ -18,7 +18,7 @@ index 8bd430c5c417c76db02cf1e2c0bc6f229ed150f1..80eab68a6b5a34c4dd37ff4d74b9b613
|
||||
+ entity.take(this, 1);
|
||||
+ int i = this.repairPlayerItems(serverPlayer, this.getValue());
|
||||
+ 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--;
|
||||
+ }
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
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
|
||||
index 90ed57a7fbcd0625b64084347460e9864216f610..e3598f7a0d183255ba17bc0f08cee284a0898cef 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/command/CraftCommandMap.java
|
||||
|
||||
@@ -1198,7 +1198,7 @@ public final class LeavesConfig {
|
||||
@GlobalConfig("bstats-privacy-mode")
|
||||
public boolean bstatsPrivacyMode = false;
|
||||
|
||||
@GlobalConfig("force-minecraft-command")
|
||||
@GlobalConfig(value = "force-minecraft-command", lock = true)
|
||||
public boolean forceMinecraftCommand = false;
|
||||
|
||||
@GlobalConfig("leaves-packet-event")
|
||||
@@ -1299,5 +1299,8 @@ public final class LeavesConfig {
|
||||
|
||||
@GlobalConfig("vanilla-end-void-rings")
|
||||
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.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.leavesmc.leaves.LeavesConfig;
|
||||
import org.leavesmc.leaves.entity.bot.Bot;
|
||||
import org.leavesmc.leaves.entity.bot.BotCreator;
|
||||
import org.leavesmc.leaves.entity.bot.CraftBot;
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.mojang.authlib.properties.Property;
|
||||
import com.mojang.logging.LogUtils;
|
||||
import io.papermc.paper.adventure.PaperAdventure;
|
||||
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.Style;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
@@ -71,6 +72,19 @@ public class BotList {
|
||||
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() {
|
||||
if (!LeavesConfig.modify.fakeplayer.enable || !LeavesConfig.modify.fakeplayer.canResident) {
|
||||
return;
|
||||
@@ -111,6 +125,9 @@ public class BotList {
|
||||
}
|
||||
|
||||
public ServerBot loadNewBot(String fullName, BotDataStorage storage) {
|
||||
if (botsByName.containsKey(fullName)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
UUID uuid = BotUtil.getBotUUID(fullName);
|
||||
|
||||
|
||||
@@ -49,6 +49,10 @@ public class LoadCommand extends BotSubcommand {
|
||||
if (!botList.getManualSavedBotList().contains(botName)) {
|
||||
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);
|
||||
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.RequestEntityPayload;
|
||||
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.ServerDataProvider;
|
||||
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.entity.AnimalOwnerProvider;
|
||||
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 io.netty.buffer.Unpooled;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
@@ -177,7 +178,7 @@ public class ServuxHudDataProtocol implements LeavesProtocol {
|
||||
|
||||
public static void refreshLoggers(ServerPlayer player, @Nonnull CompoundTag nbt) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user