9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-29 20:09:17 +00:00

Format & Fix patches

This commit is contained in:
Dreeam
2024-09-16 03:01:59 -04:00
parent 215089937e
commit 0fd4eb732f
69 changed files with 281 additions and 474 deletions

View File

@@ -1,15 +1,21 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: alazeprt <nono135246@126.com>
Date: Sun, 15 Sep 2024 20:15:37 +0800
Subject: [PATCH] add replay api
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Thu, 3 Aug 2023 20:36:38 +0800
Subject: [PATCH] Leaves: Replay Mod API
Co-authored-by: alazeprt <nono135246@126.com>
Original license: GPLv3
Original project: https://github.com/LeavesMC/Leaves
This patch is Powered by ReplayMod(https://github.com/ReplayMod)
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
index 2622a82b6e34cb636eaad239d8e6e30dc8cce589..cf5c2aabe2842ff9fc97823dff5011407ac43021 100644
index a1c9726d25479b5326fe2fa2b0f5a98d6b2da4c5..50c0dd5591de5dd4b1977c557d91cc3c339069cc 100644
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
@@ -50,6 +50,11 @@ class PaperEventManager {
// Leaf end - petal - Multithreaded tracker
@@ -40,6 +40,11 @@ class PaperEventManager {
} else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) {
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
}
+ // Leaves start - skip photographer
@@ -18,8 +24,8 @@ index 2622a82b6e34cb636eaad239d8e6e30dc8cce589..cf5c2aabe2842ff9fc97823dff501140
+ }
+ // Leaves end - skip photographer
for (RegisteredListener registration : listeners) {
if (!registration.getPlugin().isEnabled()) {
HandlerList handlers = event.getHandlers();
RegisteredListener[] listeners = handlers.getRegisteredListeners();
diff --git a/src/main/java/net/minecraft/commands/arguments/EntityArgument.java b/src/main/java/net/minecraft/commands/arguments/EntityArgument.java
index 716d37ea7c398c4f15f362c7759daca9d3fe32cb..2b586b222bdeddfb5a6a746fa4e60501fb73e847 100644
--- a/src/main/java/net/minecraft/commands/arguments/EntityArgument.java
@@ -33,7 +39,7 @@ index 716d37ea7c398c4f15f362c7759daca9d3fe32cb..2b586b222bdeddfb5a6a746fa4e60501
collection.add(player.getGameProfile().getName());
}
diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
index b455c7e9d18bac3654daa8510f85cc21202e254b..e636520549c024b28e9eabc545e79bd37ac6f3fc 100644
index b455c7e9d18bac3654daa8510f85cc21202e254b..1f8d52ee2ad0463b8cb1072190f836ea708d0d0d 100644
--- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
+++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
@@ -117,6 +117,7 @@ public class EntitySelector {
@@ -49,7 +55,7 @@ index b455c7e9d18bac3654daa8510f85cc21202e254b..e636520549c024b28e9eabc545e79bd3
Entity entity = worldserver.getEntity(this.entityUUID);
- if (entity != null) {
+ if (entity != null && !(entity instanceof org.leavesmc.leaves.replay.ServerPhotographer)) {
+ if (entity != null && !(entity instanceof org.leavesmc.leaves.replay.ServerPhotographer)) { // Leaves - skip photographer
if (entity.getType().isEnabled(source.enabledFeatures())) {
return List.of(entity);
}
@@ -110,15 +116,15 @@ index b455c7e9d18bac3654daa8510f85cc21202e254b..e636520549c024b28e9eabc545e79bd3
if (((List) object).size() >= i) {
return (List) object;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 0255d5a23e2f5a1a67af3ff1588b608521e4c133..cb171f28a4d678ce717f8b21ea4d71cc49a81306 100644
index 4652e1d7f8b49faa36e632b1ce36b010fe1cc582..69d11753d98f05be5a894268be1a1452ca4f8f8f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1705,7 +1705,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1704,7 +1704,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
private ServerStatus.Players buildPlayerStatus() {
- List<ServerPlayer> list = this.playerList.getPlayers();
+ List<ServerPlayer> list = this.playerList.realPlayers;
+ List<ServerPlayer> list = this.playerList.realPlayers; // Leaves - skip
int i = this.getMaxPlayers();
if (this.hidesOnlinePlayers()) {
@@ -139,7 +145,7 @@ index ffea0dc3acc91b9d65ad0dc5482fee7115dec03a..cbb4adcf1120f5f0f1b754710fb8c7fd
boolean flag1 = advancementprogress.isDone();
diff --git a/src/main/java/net/minecraft/server/commands/OpCommand.java b/src/main/java/net/minecraft/server/commands/OpCommand.java
index e7b444a10b244828827b3c66c53465206ea8e0ec..2cbbeb0dedd06e5431f05aa699983582900e3402 100644
index e7b444a10b244828827b3c66c53465206ea8e0ec..47c0f4eec739c41b81a546dac97569c84bbabb6e 100644
--- a/src/main/java/net/minecraft/server/commands/OpCommand.java
+++ b/src/main/java/net/minecraft/server/commands/OpCommand.java
@@ -25,7 +25,7 @@ public class OpCommand {
@@ -147,12 +153,12 @@ index e7b444a10b244828827b3c66c53465206ea8e0ec..2cbbeb0dedd06e5431f05aa699983582
PlayerList playerList = context.getSource().getServer().getPlayerList();
return SharedSuggestionProvider.suggest(
- playerList.getPlayers()
+ playerList.realPlayers
+ playerList.realPlayers // Leaves - skip
.stream()
.filter(player -> !playerList.isOp(player.getGameProfile()))
.map(player -> player.getGameProfile().getName()),
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 44f128f7d6741d47f9a4bbd92e147b4011447a50..588337638d27bbdbc1ff54e458d82a50486d5e8e 100644
index 20f1069230fcef4a00deec4c0ae6fdc64041630a..1a50562c962769a158f6514730d8ec9094f733e0 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -230,6 +230,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -160,18 +166,18 @@ index 44f128f7d6741d47f9a4bbd92e147b4011447a50..588337638d27bbdbc1ff54e458d82a50
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
public boolean hasRidableMoveEvent = false; // Purpur
+ final List<ServerPlayer> realPlayers; // Leaves - skip
public LevelChunk getChunkIfLoaded(int x, int z) {
return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately
@@ -611,6 +612,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -610,6 +611,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
this.chunkTaskScheduler = new ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler((ServerLevel)(Object)this, ca.spottedleaf.moonrise.common.util.MoonriseCommon.WORKER_POOL);
// Paper end - rewrite chunk system
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
+ this.realPlayers = Lists.newArrayList(); // Leaves - skip
this.preciseTime = this.serverLevelData.getDayTime(); // Purpur
}
@@ -2546,6 +2548,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -2545,6 +2547,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
// ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true
if (entity instanceof ServerPlayer entityplayer) {
ServerLevel.this.players.add(entityplayer);
@@ -183,7 +189,7 @@ index 44f128f7d6741d47f9a4bbd92e147b4011447a50..588337638d27bbdbc1ff54e458d82a50
ServerLevel.this.updateSleepingPlayerList();
}
@@ -2627,6 +2634,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -2626,6 +2633,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
ServerLevel.this.getChunkSource().removeEntity(entity);
if (entity instanceof ServerPlayer entityplayer) {
ServerLevel.this.players.remove(entityplayer);
@@ -195,19 +201,24 @@ index 44f128f7d6741d47f9a4bbd92e147b4011447a50..588337638d27bbdbc1ff54e458d82a50
ServerLevel.this.updateSleepingPlayerList();
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index b2ae3fdf128e7d66e3f3430266321a6a09fa0be6..7c6bda95b8b08cc70182f19cf0b991f78d28c235 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -425,7 +425,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void dataChanged(AbstractContainerMenu handler, int property, int value) {}
};
this.textFilter = server.createTextFilterForPlayer(this);
- this.gameMode = server.createGameModeForPlayer(this);
+ this.gameMode = this instanceof org.leavesmc.leaves.replay.ServerPhotographer ? new org.leavesmc.leaves.replay.ServerPhotographerGameMode((org.leavesmc.leaves.replay.ServerPhotographer) this) : server.createGameModeForPlayer(this); // Leaves - replay mod api
this.server = server;
this.stats = server.getPlayerList().getPlayerStats(this);
this.advancements = server.getPlayerList().getPlayerAdvancements(this);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72acff588564 100644
index ec3ee8a6c14660a55dd868ca557ccffae0a94674..2aab59f6f0f9df50d3c54cbc55e9c9574b12087e 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -104,6 +104,7 @@ import net.minecraft.world.scores.DisplaySlot;
import net.minecraft.world.scores.Objective;
import net.minecraft.world.scores.PlayerTeam;
import org.galemc.gale.configuration.GaleGlobalConfiguration;
+import org.leavesmc.leaves.replay.ServerPhotographer;
import org.slf4j.Logger;
// CraftBukkit start
@@ -158,6 +159,7 @@ public abstract class PlayerList {
@@ -158,6 +158,7 @@ public abstract class PlayerList {
private boolean allowCommandsForAllPlayers;
private static final boolean ALLOW_LOGOUTIVATOR = false;
private int sendAllPlayerInfoIn;
@@ -215,12 +226,12 @@ index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72ac
// CraftBukkit start
private CraftServer cserver;
@@ -184,6 +186,105 @@ public abstract class PlayerList {
@@ -184,6 +185,105 @@ public abstract class PlayerList {
}
abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor
+ // Leaves start - replay api
+ public void placeNewPhotographer(Connection connection, ServerPhotographer player, ServerLevel worldserver, Location location) {
+ public void placeNewPhotographer(Connection connection, org.leavesmc.leaves.replay.ServerPhotographer player, ServerLevel worldserver, Location location) {
+ player.isRealPlayer = true; // Paper
+ player.loginTime = System.currentTimeMillis(); // Paper
+
@@ -321,7 +332,7 @@ index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72ac
public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie clientData) {
player.isRealPlayer = true; // Paper
player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed
@@ -344,6 +445,7 @@ public abstract class PlayerList {
@@ -337,6 +437,7 @@ public abstract class PlayerList {
// entityplayer.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below
this.players.add(player);
@@ -329,12 +340,12 @@ index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72ac
this.addToSendAllPlayerInfoBuckets(player); // Gale - Purpur - spread out sending all player info
this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot
this.playersByUUID.put(player.getUUID(), player);
@@ -403,6 +505,12 @@ public abstract class PlayerList {
@@ -396,6 +497,12 @@ public abstract class PlayerList {
continue;
}
+ // Leaves start - skip photographer
+ if (entityplayer1 instanceof ServerPhotographer) {
+ if (entityplayer1 instanceof org.leavesmc.leaves.replay.ServerPhotographer) {
+ continue;
+ }
+ // Leaves end - skip photographer
@@ -342,12 +353,12 @@ index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72ac
onlinePlayers.add(entityplayer1); // Paper - Use single player info update packet on join
}
// Paper start - Use single player info update packet on join
@@ -614,6 +722,43 @@ public abstract class PlayerList {
@@ -607,6 +714,43 @@ public abstract class PlayerList {
}
+ // Leaves start - replay mod api
+ public void removePhotographer(ServerPhotographer entityplayer) {
+ public void removePhotographer(org.leavesmc.leaves.replay.ServerPhotographer entityplayer) {
+ ServerLevel worldserver = entityplayer.serverLevel();
+
+ entityplayer.awardStat(Stats.LEAVE_GAME);
@@ -386,7 +397,7 @@ index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72ac
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer) { // CraftBukkit - return string // Paper - return Component
// Paper start - Fix kick event leave message not being sent
return this.remove(entityplayer, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(entityplayer.getDisplayName())));
@@ -684,6 +829,7 @@ public abstract class PlayerList {
@@ -676,6 +820,7 @@ public abstract class PlayerList {
entityplayer.retireScheduler(); // Paper - Folia schedulers
entityplayer.getAdvancements().stopListening();
this.players.remove(entityplayer);
@@ -394,17 +405,17 @@ index d17a6c897342273dfa202efe1bc03d66c3ecc11a..b4e800cbd78795b91cfb6a6613fc72ac
this.removeFromSendAllPlayerInfoBuckets(entityplayer); // Gale - Purpur - spread out sending all player info
this.playersByName.remove(entityplayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot
this.server.getCustomBossEvents().onPlayerDisconnect(entityplayer);
@@ -779,7 +925,7 @@ public abstract class PlayerList {
@@ -771,7 +916,7 @@ public abstract class PlayerList {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure
} else {
// return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null;
- if (this.players.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur
+ if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur
+ if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur // Leaves - skip
event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 89672b8f729e0286157a0db2277529dc663d7fc8..c55f4b87202d1a1af3d7b41e1eea12f27aaf2b73 100644
index 07fcea774aa13d5d5dc9b5db7f515d5bf05df1ce..9a677b5dac3474ad4f6605c6aaa3e675d94537df 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -320,6 +320,8 @@ public final class CraftServer implements Server {
@@ -421,11 +432,11 @@ index 89672b8f729e0286157a0db2277529dc663d7fc8..c55f4b87202d1a1af3d7b41e1eea12f2
this.console = console;
this.playerList = (DedicatedPlayerList) playerList;
- this.playerView = Collections.unmodifiableList(Lists.transform(playerList.players, new Function<ServerPlayer, CraftPlayer>() {
+ this.playerView = Collections.unmodifiableList(Lists.transform(playerList.realPlayers, new Function<ServerPlayer, CraftPlayer>() {
+ this.playerView = Collections.unmodifiableList(Lists.transform(playerList.realPlayers, new Function<ServerPlayer, CraftPlayer>() { // Leaves - skip
@Override
public CraftPlayer apply(ServerPlayer player) {
return player.getBukkitEntity();
@@ -3384,4 +3386,11 @@ public final class CraftServer implements Server {
@@ -3378,4 +3380,11 @@ public final class CraftServer implements Server {
return getServer().lagging;
}
// Purpur end
@@ -438,23 +449,23 @@ index 89672b8f729e0286157a0db2277529dc663d7fc8..c55f4b87202d1a1af3d7b41e1eea12f2
+ // Leaves end - replay mod api
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 9019a98a082b9d72e5581ca3f50f45aadcc320e7..37515fe797a1a3e19e8554266bfe79717748d894 100644
index bec40e26e17ba6fdefb68c79e2fa7a9593b0f4fe..c7c8e651e8165e9200cdcc72b0b55c6aacbe0471 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -112,6 +112,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -111,6 +111,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return new CraftHumanEntity(server, (net.minecraft.world.entity.player.Player) entity);
}
+ if (entity instanceof org.leavesmc.leaves.replay.ServerPhotographer photographer) { return new org.leavesmc.leaves.entity.CraftPhotographer(server, photographer); }
+ if (entity instanceof org.leavesmc.leaves.replay.ServerPhotographer photographer) { return new org.leavesmc.leaves.entity.CraftPhotographer(server, photographer); } // Leaves - replay mod api
+
// Special case complex part, since there is no extra entity type for them
if (entity instanceof EnderDragonPart complexPart) {
if (complexPart.parentMob instanceof EnderDragon) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index d8845be63adbc17764a57c0630aa63b69b473753..0ef581ae18b0b272f36d64c1d58146d3c8f01ad1 100644
index 04aa0c7d2946a38427951217f2b865b005011ef5..02499131e2c38d67e2b6cfdf86712db5801f13d8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2260,7 +2260,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2259,7 +2259,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public boolean canSee(Player player) {
@@ -463,6 +474,51 @@ index d8845be63adbc17764a57c0630aa63b69b473753..0ef581ae18b0b272f36d64c1d58146d3
}
@Override
diff --git a/src/main/java/org/leavesmc/leaves/bot/BotStatsCounter.java b/src/main/java/org/leavesmc/leaves/bot/BotStatsCounter.java
new file mode 100644
index 0000000000000000000000000000000000000000..1dfbda8b2439e3f21fea953292aa0e3e853b22e0
--- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/bot/BotStatsCounter.java
@@ -0,0 +1,38 @@
+package org.leavesmc.leaves.bot;
+
+import com.mojang.datafixers.DataFixer;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.stats.ServerStatsCounter;
+import net.minecraft.stats.Stat;
+import net.minecraft.world.entity.player.Player;
+
+import java.io.File;
+
+public class BotStatsCounter extends ServerStatsCounter {
+
+ private static final File UNKOWN_FILE = new File("BOT_STATS_REMOVE_THIS");
+
+ public BotStatsCounter(MinecraftServer server) {
+ super(server, UNKOWN_FILE);
+ }
+
+ @Override
+ public void save() {
+
+ }
+
+ @Override
+ public void setValue(Player player, Stat<?> stat, int value) {
+
+ }
+
+ @Override
+ public void parseLocal(DataFixer dataFixer, String json) {
+
+ }
+
+ @Override
+ public int getValue(Stat<?> stat) {
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/leavesmc/leaves/entity/CraftPhotographer.java b/src/main/java/org/leavesmc/leaves/entity/CraftPhotographer.java
new file mode 100644
index 0000000000000000000000000000000000000000..23c2f699f3ae12d1a36efc7860e869facea9c175
@@ -1333,7 +1389,7 @@ index 0000000000000000000000000000000000000000..219b9ea88f8cebaf8aab73b123d3efd5
\ No newline at end of file
diff --git a/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java b/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java
new file mode 100644
index 0000000000000000000000000000000000000000..17cd14449bde1ee7d2b5938a04ee3eebf516d581
index 0000000000000000000000000000000000000000..e2cc869cf9596c63ab8d28e905c92faec5e5976f
--- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/replay/ServerPhotographer.java
@@ -0,0 +1,221 @@
@@ -1625,70 +1681,3 @@ index 0000000000000000000000000000000000000000..93f72a99595a0b1f182f3950de36f128
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 8f188b137247289770b0a663124f6345a902cd8a..11949d56094523968fd47c3f6f25a627681acf97 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -161,6 +161,8 @@ import net.minecraft.world.phys.Vec3;
import net.minecraft.world.scores.PlayerTeam;
import net.minecraft.world.scores.ScoreAccess;
import net.minecraft.world.scores.ScoreHolder;
+import org.leavesmc.leaves.replay.ServerPhotographer;
+import org.leavesmc.leaves.replay.ServerPhotographerGameMode;
import org.slf4j.Logger;
import net.minecraft.world.Container;
import net.minecraft.world.InteractionHand;
@@ -425,7 +427,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void dataChanged(AbstractContainerMenu handler, int property, int value) {}
};
this.textFilter = server.createTextFilterForPlayer(this);
- this.gameMode = server.createGameModeForPlayer(this);
+ this.gameMode = this instanceof ServerPhotographer ? new ServerPhotographerGameMode((ServerPhotographer) this) : server.createGameModeForPlayer(this);
this.server = server;
this.stats = server.getPlayerList().getPlayerStats(this);
this.advancements = server.getPlayerList().getPlayerAdvancements(this);
diff --git a/src/main/java/org/leavesmc/leaves/bot/BotStatsCounter.java b/src/main/java/org/leavesmc/leaves/bot/BotStatsCounter.java
new file mode 100644
index 0000000000000000000000000000000000000000..1dfbda8b2439e3f21fea953292aa0e3e853b22e0
--- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/bot/BotStatsCounter.java
@@ -0,0 +1,38 @@
+package org.leavesmc.leaves.bot;
+
+import com.mojang.datafixers.DataFixer;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.stats.ServerStatsCounter;
+import net.minecraft.stats.Stat;
+import net.minecraft.world.entity.player.Player;
+
+import java.io.File;
+
+public class BotStatsCounter extends ServerStatsCounter {
+
+ private static final File UNKOWN_FILE = new File("BOT_STATS_REMOVE_THIS");
+
+ public BotStatsCounter(MinecraftServer server) {
+ super(server, UNKOWN_FILE);
+ }
+
+ @Override
+ public void save() {
+
+ }
+
+ @Override
+ public void setValue(Player player, Stat<?> stat, int value) {
+
+ }
+
+ @Override
+ public void parseLocal(DataFixer dataFixer, String json) {
+
+ }
+
+ @Override
+ public int getValue(Stat<?> stat) {
+ return 0;
+ }
+}
\ No newline at end of file

View File

@@ -36,7 +36,7 @@ index 24ed26286c7e3e45279b6b27cd0a432b37fda4b2..83fcdd4d090bfc8801a640b2a5645313
if (net.minecraft.world.phys.shapes.Shapes.joinIsNotEmpty(voxelshape, net.minecraft.world.phys.shapes.Shapes.create(entity.getBoundingBox()), net.minecraft.world.phys.shapes.BooleanOp.AND)) {
return false;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 04aa0c7d2946a38427951217f2b865b005011ef5..1893d10e6900e006e9e62a2a5f8d9be26a60f03b 100644
index 02499131e2c38d67e2b6cfdf86712db5801f13d8..8a758081cf145345298863a090befd36ab6d07b8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -638,6 +638,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Fix sprint glitch
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 27e7086b4e2c71b29aa4a1c825604395a5f35439..69bd415f00f5b604b6de7b55bc2fcbbac6b69ee5 100644
index 774773d44a7c05e9b8278a9f988b68606af38701..bc5293c151c0772ebad8e1375eb53b5c85be3cef 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1429,7 +1429,8 @@ public abstract class LivingEntity extends Entity implements Attackable {

View File

@@ -12,7 +12,7 @@ This format saves about 50% of disk space.
Documentation: https://github.com/xymb-endcrystalme/LinearRegionFileFormatTools
diff --git a/build.gradle.kts b/build.gradle.kts
index 098ffb515bd6994817da5335993cb16f1d7e7ca7..af9ebf010b7c88671e8f9870e976cff278e97611 100644
index 32cebbf591b2f822ec32080aa8451f85c64b6787..e16e9b3b815065ed4aae1965edc3a68471470ec5 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -21,6 +21,11 @@ dependencies {
@@ -71,7 +71,7 @@ index 3218cbf84f54daf06e84442d5eb1a36d8da6b215..ec9b27177dc526510e86d85f48f167b4
synchronized (cache) {
regionFile = ((ChunkSystemRegionFileStorage)(Object)cache).moonrise$getRegionFileIfLoaded(chunkX, chunkZ);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 64792ae9fd6ca979c51980ce23697d9dc29b396a..efd29f9d2417c9483b0aa2c521109a9e20f6990c 100644
index 69d11753d98f05be5a894268be1a1452ca4f8f8f..86474d739762f13cb27b396fffb114a33cbc208c 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -969,10 +969,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Skip event if no listeners
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
index a1c9726d25479b5326fe2fa2b0f5a98d6b2da4c5..31bb5c3058233c98cbdd919e4803dd2f2266d39d 100644
index 50c0dd5591de5dd4b1977c557d91cc3c339069cc..e42677bb004201efe1702779a78cc8d0ca05e80f 100644
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
@@ -35,15 +35,16 @@ class PaperEventManager {
@@ -35,6 +35,10 @@ class PaperEventManager {
// SimplePluginManager
public void callEvent(@NotNull Event event) {
@@ -19,8 +19,9 @@ index a1c9726d25479b5326fe2fa2b0f5a98d6b2da4c5..31bb5c3058233c98cbdd919e4803dd2f
if (event.isAsynchronous() && this.server.isPrimaryThread()) {
throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously.");
} else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) {
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
@@ -46,9 +50,6 @@ class PaperEventManager {
}
// Leaves end - skip photographer
- HandlerList handlers = event.getHandlers();
- RegisteredListener[] listeners = handlers.getRegisteredListeners();

View File

@@ -75,7 +75,7 @@ index c03608fec96b51e1867f43d8f42e5aefb1520e46..15b21fa3907db1b77ed5b5d1050a37f4
throw new IllegalStateException("Ticking retired scheduler");
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 55466ff58d724a6254fd6e53c72adb592f2d433a..0255d5a23e2f5a1a67af3ff1588b608521e4c133 100644
index 86474d739762f13cb27b396fffb114a33cbc208c..179454a347ca3fc327531e8d2d9321983b859305 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -312,6 +312,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -115,7 +115,7 @@ index 55466ff58d724a6254fd6e53c72adb592f2d433a..0255d5a23e2f5a1a67af3ff1588b6085
io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.CALLBACK_MANAGER.handleQueue(this.tickCount); // Paper
this.getFunctions().tick();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index bec40e26e17ba6fdefb68c79e2fa7a9593b0f4fe..233df12bfa5c49137ad50f421bf723100844758f 100644
index c7c8e651e8165e9200cdcc72b0b55c6aacbe0471..2bcd77af7cb84ebc1f4051976af822e4d3966f3f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -71,7 +71,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {

View File

@@ -29,7 +29,7 @@ index 4d91b50e527320647f6c9aa20fc5da071c3fdee0..dde015810f6e914ad99dcb8ab66c7aa3
}
// CraftBukkit end
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 1893d10e6900e006e9e62a2a5f8d9be26a60f03b..d8845be63adbc17764a57c0630aa63b69b473753 100644
index 8a758081cf145345298863a090befd36ab6d07b8..0ef581ae18b0b272f36d64c1d58146d3c8f01ad1 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -200,7 +200,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Including 5s in getTPS()
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 07fcea774aa13d5d5dc9b5db7f515d5bf05df1ce..1b21006467a25f8ed20c8ded3deb9fe6513dc903 100644
index 9a677b5dac3474ad4f6605c6aaa3e675d94537df..1b9685f759481282ba4be599169a60aba2b2012a 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -3113,6 +3113,8 @@ public final class CraftServer implements Server {
@@ -3115,6 +3115,8 @@ public final class CraftServer implements Server {
@Override
public double[] getTPS() {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Remove useless creating stats json bases on player name logic
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index ec3ee8a6c14660a55dd868ca557ccffae0a94674..c812130e62c3bbbb14de9b9f96bc10988f05a8e8 100644
index 2aab59f6f0f9df50d3c54cbc55e9c9574b12087e..5cffe034571ef1ddf868d22fc38b1a8c2a1500f1 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1537,6 +1537,8 @@ public abstract class PlayerList {
@@ -1682,6 +1682,8 @@ public abstract class PlayerList {
File file = this.server.getWorldPath(LevelResource.PLAYER_STATS_DIR).toFile();
File file1 = new File(file, String.valueOf(uuid) + ".json");
@@ -17,7 +17,7 @@ index ec3ee8a6c14660a55dd868ca557ccffae0a94674..c812130e62c3bbbb14de9b9f96bc1098
if (!file1.exists()) {
File file2 = new File(file, displayName + ".json"); // CraftBukkit
Path path = file2.toPath();
@@ -1545,6 +1547,8 @@ public abstract class PlayerList {
@@ -1690,6 +1692,8 @@ public abstract class PlayerList {
file2.renameTo(file1);
}
}

View File

@@ -19,7 +19,7 @@ index b6713361cd104786f52bd880418b8653e4126fda..94bb40c9932b0b7dd9fb8af680b63d13
org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index b2ae3fdf128e7d66e3f3430266321a6a09fa0be6..afc8145c48597be28e0c1d787b5dacb6761e66df 100644
index 7c6bda95b8b08cc70182f19cf0b991f78d28c235..9fb0372511710cb27ffb18f9879e3ff3a0384427 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -2414,6 +2414,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -86,10 +86,10 @@ index 33b2234970e3b78ccd4b8da184bbdd62b50d3afa..81b0f8c986131335533f6c81f9150b8c
// CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands
if (this.player.hasDisconnected()) {
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index b94dfd585714ee103400221e3e6fb4d8261fa6f4..8ce41d394a2e60ec2c9411f4a3172a63edd15b12 100644
index 5cffe034571ef1ddf868d22fc38b1a8c2a1500f1..714e0bf56ee866b4ba00953074bec9642cc5f08e 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -615,6 +615,7 @@ public abstract class PlayerList {
@@ -759,6 +759,7 @@ public abstract class PlayerList {
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerLeave(entityplayer); // Leaves - protocol
// Paper end - Fix kick event leave message not being sent
org.purpurmc.purpur.task.BossBarTask.removeFromAll(entityplayer.getBukkitEntity()); // Purpur

View File

@@ -117,10 +117,10 @@ index ae0d0310d50f1ada082e045a58a24a43f8079da8..eea19f895588c51bce86f20b3ec505fd
if (packet == null || this.processedDisconnect) { // Spigot
return;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index d29afe0ebcb4a6b087945826fcef85f93f607763..86534a2a58b823af64e51e14be197e02636871c6 100644
index 714e0bf56ee866b4ba00953074bec9642cc5f08e..901d1e8826b1ce235f2bd2382bb6b6d2674f5174 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1491,7 +1491,7 @@ public abstract class PlayerList {
@@ -1636,7 +1636,7 @@ public abstract class PlayerList {
// Paper end
boolean flag = this.verifyChatTrusted(message);
@@ -129,7 +129,7 @@ index d29afe0ebcb4a6b087945826fcef85f93f607763..86534a2a58b823af64e51e14be197e02
OutgoingChatMessage outgoingchatmessage = OutgoingChatMessage.create(message);
boolean flag1 = false;
@@ -1520,6 +1520,7 @@ public abstract class PlayerList {
@@ -1665,6 +1665,7 @@ public abstract class PlayerList {
}
public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Cache player profileResult
diff --git a/build.gradle.kts b/build.gradle.kts
index af9ebf010b7c88671e8f9870e976cff278e97611..cb46050cffc63e64c090d83451243ab2afcecf7d 100644
index e16e9b3b815065ed4aae1965edc3a68471470ec5..57f309dc5259a4ca935c12c99e835734cf2480c7 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -26,6 +26,10 @@ dependencies {

View File

@@ -46,10 +46,10 @@ index 74bf36f75b59b1e21b72afcf653447864d7c3f80..ef2d70c1bd21cff6a080205c38bbe8bf
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 20f1069230fcef4a00deec4c0ae6fdc64041630a..dab20d348d7542a985a2510b37029ff97e8be1f6 100644
index 1a50562c962769a158f6514730d8ec9094f733e0..a4cffdb78dafd658f35e34d0b702a8c892141539 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -558,6 +558,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -559,6 +559,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
chunkgenerator = new org.bukkit.craftbukkit.generator.CustomChunkGenerator(this, chunkgenerator, gen);
}
// CraftBukkit end
@@ -450,10 +450,10 @@ index 45e262308aebafa377a2353661acdd122933b99e..96b9e91997bba777ebe868ca5ab5e5e9
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 1b21006467a25f8ed20c8ded3deb9fe6513dc903..89672b8f729e0286157a0db2277529dc663d7fc8 100644
index 1b9685f759481282ba4be599169a60aba2b2012a..b7ba2c47ad7127a6ba2e1cf6a6996f9d8ad9d7c6 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1400,7 +1400,11 @@ public final class CraftServer implements Server {
@@ -1402,7 +1402,11 @@ public final class CraftServer implements Server {
iregistrycustom_dimension = leveldataanddimensions.dimensions().dimensionsRegistryAccess();
} else {
LevelSettings worldsettings;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable connection message
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 86534a2a58b823af64e51e14be197e02636871c6..88fc2f757c506e161badb4b9f09372eb8a7fe3ac 100644
index 901d1e8826b1ce235f2bd2382bb6b6d2674f5174..61bee21d922d2e093fae4b59b211be3915a44fb5 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -354,7 +354,7 @@ public abstract class PlayerList {
@@ -455,7 +455,7 @@ public abstract class PlayerList {
// Ensure that player inventory is populated with its viewer
player.containerMenu.transferTo(player.containerMenu, bukkitPlayer);
@@ -17,7 +17,7 @@ index 86534a2a58b823af64e51e14be197e02636871c6..88fc2f757c506e161badb4b9f09372eb
this.cserver.getPluginManager().callEvent(playerJoinEvent);
if (!player.connection.isAcceptingMessages()) {
@@ -367,7 +367,7 @@ public abstract class PlayerList {
@@ -468,7 +468,7 @@ public abstract class PlayerList {
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
@@ -26,7 +26,7 @@ index 86534a2a58b823af64e51e14be197e02636871c6..88fc2f757c506e161badb4b9f09372eb
joinMessage = io.papermc.paper.adventure.PaperAdventure.asVanilla(jm); // Paper - Adventure
this.server.getPlayerList().broadcastSystemMessage(joinMessage, false); // Paper - Adventure
}
@@ -626,7 +626,7 @@ public abstract class PlayerList {
@@ -770,7 +770,7 @@ public abstract class PlayerList {
entityplayer.closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DISCONNECT); // Paper - Inventory close reason
}
@@ -35,7 +35,7 @@ index 86534a2a58b823af64e51e14be197e02636871c6..88fc2f757c506e161badb4b9f09372eb
this.cserver.getPluginManager().callEvent(playerQuitEvent);
entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage());
@@ -1664,4 +1664,29 @@ public abstract class PlayerList {
@@ -1809,4 +1809,29 @@ public abstract class PlayerList {
public boolean isAllowCommandsForAllPlayers() {
return this.allowCommandsForAllPlayers;
}

View File

@@ -6,15 +6,15 @@ Subject: [PATCH] Do not place player if the server is full
Fix https://github.com/PaperMC/Paper/issues/10668
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 9d2faacd5c9c6e5439c6b8b2e2f7cb2bab4ad8f8..e204f4783ffccc785f8d302019491549184580d3 100644
index 61bee21d922d2e093fae4b59b211be3915a44fb5..c5e7d27a04444f6e8b8361bc50dc25cbd2e2f04e 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -280,6 +280,13 @@ public abstract class PlayerList {
@@ -380,6 +380,13 @@ public abstract class PlayerList {
return;
}
// Gale end - MultiPaper - do not place player in world if kicked before being spawned in
+ // Leaf start - Do not place player if the server is full - copied from canPlayerLogin
+ if (org.dreeam.leaf.config.modules.fixes.DontPlacePlayerIfFull.enabled && this.players.size() >= this.maxPlayers && !(player.getBukkitEntity().hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur
+ if (org.dreeam.leaf.config.modules.fixes.DontPlacePlayerIfFull.enabled && this.realPlayers.size() >= this.maxPlayers && !(player.getBukkitEntity().hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur // Leaves - skip
+ connection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)));
+ //playerconnection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT);
+ return;
@@ -23,6 +23,15 @@ index 9d2faacd5c9c6e5439c6b8b2e2f7cb2bab4ad8f8..e204f4783ffccc785f8d302019491549
Location loc = ev.getSpawnLocation();
worldserver1 = ((CraftWorld) loc.getWorld()).getHandle();
@@ -917,7 +924,7 @@ public abstract class PlayerList {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure
} else {
// return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null;
- if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur // Leaves - skip
+ if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur // Leaves - skip // Leaf - Do not place player if the server is full - diff on change
event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure
}
}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/fixes/DontPlacePlayerIfFull.java b/src/main/java/org/dreeam/leaf/config/modules/fixes/DontPlacePlayerIfFull.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ca0c6ef982fa45891e67430c729eb1c92235853

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Fix-MC-119417
Related MC issue: https://bugs.mojang.com/browse/MC-119417
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index afc8145c48597be28e0c1d787b5dacb6761e66df..8f188b137247289770b0a663124f6345a902cd8a 100644
index 9fb0372511710cb27ffb18f9879e3ff3a0384427..2dc8767b96c2d55c081171037e20ec7e9f2f858b 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -2260,6 +2260,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple

View File

@@ -108,7 +108,7 @@ index 1e7a27bc783e68f9579d4d3c72ec165bde7175b9..72dfd388bb784009ac77ff0c93db56eb
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 233df12bfa5c49137ad50f421bf723100844758f..9019a98a082b9d72e5581ca3f50f45aadcc320e7 100644
index 2bcd77af7cb84ebc1f4051976af822e4d3966f3f..08e380b7b086e1d6e03dc140c6b6ffac23393de9 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -83,7 +83,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -120,7 +120,7 @@ index 233df12bfa5c49137ad50f421bf723100844758f..9019a98a082b9d72e5581ca3f50f45aa
this.taskScheduler = new io.papermc.paper.threadedregions.EntityScheduler(this.entity.getServer(), this); // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run
}
@@ -121,7 +121,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -123,7 +123,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable player knockback zombie
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 69bd415f00f5b604b6de7b55bc2fcbbac6b69ee5..3503423ee0d4ed13f7ebdb8272c8266a827ff4c1 100644
index bc5293c151c0772ebad8e1375eb53b5c85be3cef..6613b85560a5e90544ee683d7f83308c057d5e24 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2028,6 +2028,8 @@ public abstract class LivingEntity extends Entity implements Attackable {

View File

@@ -78,7 +78,7 @@ index 68cc3c4efd7e10a2ddc0576491e9cb5b02fcabe7..5ee48b2347b4d588206d4c4aabd47a39
ServerGamePacketListenerImpl.this.player.containerMenu.sendAllDataToRemote(); // Paper - fix slot desync - always refresh player inventory
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 3503423ee0d4ed13f7ebdb8272c8266a827ff4c1..341fad1609308fad6adf5b5f9ad289d57ac4ddd6 100644
index 6613b85560a5e90544ee683d7f83308c057d5e24..5c5c81bcb2349c31717ffe9770c8667dd10c0eda 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3404,7 +3404,7 @@ public abstract class LivingEntity extends Entity implements Attackable {

View File

@@ -1,172 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: FallingKey <FallingKey@Outlook.com>
Date: Sun, 11 Aug 2024 14:20:37 +0800
Subject: [PATCH] Change max stack count
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 3a27ef6da3d189f4f2211c9929dc1334790ab281..14eea6498e04f34a518988c978f27600715fe098 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -351,7 +351,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
private boolean isMergable() {
ItemStack itemstack = this.getItem();
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier; // Paper - Alternative item-despawn-rate
+ } else {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count; // Paper - Alternative item-despawn-rate
+ }
+ // Leaf end - Change max stack count
}
private void tryToMerge(ItemEntity other) {
@@ -369,11 +375,24 @@ public class ItemEntity extends Entity implements TraceableEntity {
}
public static boolean areMergable(ItemStack stack1, ItemStack stack2) {
- return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
+ return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ } else {
+ return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ }
+ // Leaf end - Change max stack count
}
public static ItemStack merge(ItemStack stack1, ItemStack stack2, int maxCount) {
- int j = Math.min(Math.min(stack1.getMaxStackSize(), maxCount) - stack1.getCount(), stack2.getCount());
+ // Leaf start - Change max stack count
+ int j;
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
+ j = Math.min(Math.min(stack1.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier, maxCount) - stack1.getCount(), stack2.getCount());
+ } else {
+ j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count, maxCount) - stack1.getCount(), stack2.getCount());
+ }
+ // Leaf end - Change max stack count
ItemStack itemstack2 = stack1.copyWithCount(stack1.getCount() + j);
stack2.shrink(j);
@@ -381,7 +400,14 @@ public class ItemEntity extends Entity implements TraceableEntity {
}
private static void merge(ItemEntity targetEntity, ItemStack stack1, ItemStack stack2) {
- ItemStack itemstack2 = ItemEntity.merge(stack1, stack2, 64);
+ // Leaf start - Change max stack count
+ ItemStack itemstack2;
+ if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
+ itemstack2 = ItemEntity.merge(stack1, stack2, 64);
+ } else {
+ itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count);
+ }
+ // Leaf end - Change max stack count
targetEntity.setItem(itemstack2);
}
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index 7572c289758001c7417a192f0e6e994ffa8408b3..0e5fd0ba84bb139f23fc02482d54e5be582ced3c 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -34,6 +34,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.event.block.BlockCanBuildEvent;
+import org.dreeam.leaf.config.modules.gameplay.MaxStackCount;
// CraftBukkit end
public class BlockItem extends Item {
@@ -269,8 +270,20 @@ public class BlockItem extends Item {
ItemContainerContents itemcontainercontents = (ItemContainerContents) entity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY);
if (itemcontainercontents != null) {
- if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed && entity.getItem().is(Items.SHULKER_BOX)) // Purpur
- ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy());
+ // Leaf start - Change max stack count
+ if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed) { // Purpur
+ if (MaxStackCount.count < 1) {
+ ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy());
+ } else {
+ Level level = entity.level();
+ if (!level.isClientSide) {
+ for (int Count = Math.min(entity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxContainerDestroy.count); Count > 0; Count = Count - 1) {
+ itemcontainercontents.nonEmptyItemsCopy().forEach(stack -> level.addFreshEntity(new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), stack)));
+ }
+ }
+ }
+ }
+ // Leaf end - Change max stack count
}
}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
new file mode 100644
index 0000000000000000000000000000000000000000..503f80ed917302abdf0ab14c13ce61d14c4b4adc
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
@@ -0,0 +1,17 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class ItemStackMultiplier extends ConfigModules {
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".item-stack-multiplier";
+ }
+
+ public static int multiplier = 1;
+
+ @Override
+ public void onLoaded() {
+ multiplier = config.getInt(getBasePath(), multiplier);
+ }
+}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxContainerDestroy.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxContainerDestroy.java
new file mode 100644
index 0000000000000000000000000000000000000000..254ce472cb872323fdd86ded689268e439b46d0d
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxContainerDestroy.java
@@ -0,0 +1,17 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class MaxContainerDestroy extends ConfigModules {
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".max-container-destroy";
+ }
+
+ public static int count = 32767;
+
+ @Override
+ public void onLoaded() {
+ count = config.getInt(getBasePath(), count);
+ }
+}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
new file mode 100644
index 0000000000000000000000000000000000000000..01208acaac7ef34a4f6dff51a208ed66d2d28079
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
@@ -0,0 +1,17 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class MaxStackCount extends ConfigModules {
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".change-max-stack-count";
+ }
+
+ public static int count = 0;
+
+ @Override
+ public void onLoaded() {
+ count = config.getInt(getBasePath(), count);
+ }
+}

View File

@@ -1,141 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: FallingKey <FallingKey@Outlook.com>
Date: Wed, 14 Aug 2024 00:28:48 +0800
Subject: [PATCH] Add configurable items
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 14eea6498e04f34a518988c978f27600715fe098..023f4133c802ff0b0cdaf7b2730e09a786be8872 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -352,10 +352,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
ItemStack itemstack = this.getItem();
// Leaf start - Change max stack count
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier; // Paper - Alternative item-despawn-rate
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count < 1) {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
} else {
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count; // Paper - Alternative item-despawn-rate
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count; // Paper - Alternative item-despawn-rate
}
// Leaf end - Change max stack count
}
@@ -376,10 +376,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
public static boolean areMergable(ItemStack stack1, ItemStack stack2) {
// Leaf start - Change max stack count
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
- return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count == 0) {
+ return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
} else {
- return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
}
// Leaf end - Change max stack count
}
@@ -387,10 +387,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
public static ItemStack merge(ItemStack stack1, ItemStack stack2, int maxCount) {
// Leaf start - Change max stack count
int j;
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count == 0) {
- j = Math.min(Math.min(stack1.getMaxStackSize() * org.dreeam.leaf.config.modules.gameplay.ItemStackMultiplier.multiplier, maxCount) - stack1.getCount(), stack2.getCount());
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count == 0) {
+ j = Math.min(Math.min(stack1.getMaxStackSize(), maxCount) - stack1.getCount(), stack2.getCount());
} else {
- j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count, maxCount) - stack1.getCount(), stack2.getCount());
+ j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count, maxCount) - stack1.getCount(), stack2.getCount());
}
// Leaf end - Change max stack count
ItemStack itemstack2 = stack1.copyWithCount(stack1.getCount() + j);
@@ -402,10 +402,10 @@ public class ItemEntity extends Entity implements TraceableEntity {
private static void merge(ItemEntity targetEntity, ItemStack stack1, ItemStack stack2) {
// Leaf start - Change max stack count
ItemStack itemstack2;
- if (org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count < 1) {
+ if (org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count < 1) {
itemstack2 = ItemEntity.merge(stack1, stack2, 64);
} else {
- itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxStackCount.count);
+ itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxEntityItemsStackCount.count);
}
// Leaf end - Change max stack count
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index 0e5fd0ba84bb139f23fc02482d54e5be582ced3c..0b6c6e3ed65552ee8b1feb9bb1c6669fbf130df9 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -34,7 +34,6 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.event.block.BlockCanBuildEvent;
-import org.dreeam.leaf.config.modules.gameplay.MaxStackCount;
// CraftBukkit end
public class BlockItem extends Item {
@@ -272,16 +271,13 @@ public class BlockItem extends Item {
if (itemcontainercontents != null) {
// Leaf start - Change max stack count
if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed) { // Purpur
- if (MaxStackCount.count < 1) {
- ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy());
- } else {
- Level level = entity.level();
- if (!level.isClientSide) {
- for (int Count = Math.min(entity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxContainerDestroy.count); Count > 0; Count = Count - 1) {
- itemcontainercontents.nonEmptyItemsCopy().forEach(stack -> level.addFreshEntity(new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), stack)));
- }
+ Level level = entity.level();
+ if (!level.isClientSide) {
+ for (int Count = Math.min(entity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxContainerDestroy.count); Count > 0; Count = Count - 1) {
+ itemcontainercontents.nonEmptyItemsCopy().forEach(stack -> level.addFreshEntity(new ItemEntity(level, entity.getX(), entity.getY(), entity.getZ(), stack)));
}
}
+
}
// Leaf end - Change max stack count
}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
deleted file mode 100644
index 503f80ed917302abdf0ab14c13ce61d14c4b4adc..0000000000000000000000000000000000000000
--- a/src/main/java/org/dreeam/leaf/config/modules/gameplay/ItemStackMultiplier.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.dreeam.leaf.config.modules.gameplay;
-
-import org.dreeam.leaf.config.ConfigModules;
-import org.dreeam.leaf.config.EnumConfigCategory;
-
-public class ItemStackMultiplier extends ConfigModules {
- public String getBasePath() {
- return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".item-stack-multiplier";
- }
-
- public static int multiplier = 1;
-
- @Override
- public void onLoaded() {
- multiplier = config.getInt(getBasePath(), multiplier);
- }
-}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxEntityItemsStackCount.java
similarity index 80%
rename from src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
rename to src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxEntityItemsStackCount.java
index 01208acaac7ef34a4f6dff51a208ed66d2d28079..858a41df2c29d1f87652dc3a49c739da453294ec 100644
--- a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxStackCount.java
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxEntityItemsStackCount.java
@@ -3,9 +3,9 @@ package org.dreeam.leaf.config.modules.gameplay;
import org.dreeam.leaf.config.ConfigModules;
import org.dreeam.leaf.config.EnumConfigCategory;
-public class MaxStackCount extends ConfigModules {
+public class MaxEntityItemsStackCount extends ConfigModules {
public String getBasePath() {
- return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".change-max-stack-count";
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".max-entity-items-stack-count";
}
public static int count = 0;

View File

@@ -23,7 +23,7 @@ But it is still recommending to use those packet based, virtual entity
based NPC plugins, e.g. ZNPC Plus, Adyeshach, Fancy NPC, etc.
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
index 31bb5c3058233c98cbdd919e4803dd2f2266d39d..2622a82b6e34cb636eaad239d8e6e30dc8cce589 100644
index e42677bb004201efe1702779a78cc8d0ca05e80f..cf5c2aabe2842ff9fc97823dff5011407ac43021 100644
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
@@ -42,6 +42,12 @@ class PaperEventManager {
@@ -38,9 +38,9 @@ index 31bb5c3058233c98cbdd919e4803dd2f2266d39d..2622a82b6e34cb636eaad239d8e6e30d
+ // Leaf end - petal - Multithreaded tracker
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
}
// Leaves start - skip photographer
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 200a08d09904c6d5ea85b9e2c0228e6184f3aed1..cfd9545384c0b74605115e47c390c876a61dbdd3 100644
index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f58cda78aa 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -906,6 +906,21 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -265,10 +265,10 @@ index 05125144ce0cb50fa6ac769fa025cda010c93f14..3b40fc420ec1a8aca4c66a77f54cf628
set.clear();
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index dab20d348d7542a985a2510b37029ff97e8be1f6..44f128f7d6741d47f9a4bbd92e147b4011447a50 100644
index a4cffdb78dafd658f35e34d0b702a8c892141539..e3a2d55a9b053b3af9f5a78e86417ab133b0c2a9 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2399,7 +2399,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -2401,7 +2401,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@Override
public LevelEntityGetter<Entity> getEntities() {

View File

@@ -0,0 +1,121 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: FallingKey <FallingKey@Outlook.com>
Date: Sun, 11 Aug 2024 14:20:37 +0800
Subject: [PATCH] Change max stack count
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index fd96a97d35fcd422c3f99aa379a0daf9e5c2a695..5633ecea8639dd8564eb7f61aa9d366b552407a1 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -351,7 +351,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
private boolean isMergable() {
ItemStack itemstack = this.getItem();
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount < 1) {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
+ } else {
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount; // Paper - Alternative item-despawn-rate
+ }
+ // Leaf end - Change max stack count
}
private void tryToMerge(ItemEntity other) {
@@ -369,11 +375,24 @@ public class ItemEntity extends Entity implements TraceableEntity {
}
public static boolean areMergable(ItemStack stack1, ItemStack stack2) {
- return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount == 0) {
+ return stack2.getCount() + stack1.getCount() > stack2.getMaxStackSize() ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ } else {
+ return stack2.getCount() + stack1.getCount() > org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount ? false : ItemStack.isSameItemSameComponents(stack1, stack2);
+ }
+ // Leaf end - Change max stack count
}
public static ItemStack merge(ItemStack stack1, ItemStack stack2, int maxCount) {
- int j = Math.min(Math.min(stack1.getMaxStackSize(), maxCount) - stack1.getCount(), stack2.getCount());
+ // Leaf start - Change max stack count
+ int j;
+ if (org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount == 0) {
+ j = Math.min(Math.min(stack1.getMaxStackSize(), maxCount) - stack1.getCount(), stack2.getCount());
+ } else {
+ j = Math.min(Math.min(org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount, maxCount) - stack1.getCount(), stack2.getCount());
+ }
+ // Leaf end - Change max stack count
ItemStack itemstack2 = stack1.copyWithCount(stack1.getCount() + j);
stack2.shrink(j);
@@ -381,7 +400,14 @@ public class ItemEntity extends Entity implements TraceableEntity {
}
private static void merge(ItemEntity targetEntity, ItemStack stack1, ItemStack stack2) {
- ItemStack itemstack2 = ItemEntity.merge(stack1, stack2, 64);
+ // Leaf start - Change max stack count
+ ItemStack itemstack2;
+ if (org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount < 1) {
+ itemstack2 = ItemEntity.merge(stack1, stack2, 64);
+ } else {
+ itemstack2 = ItemEntity.merge(stack1, stack2, org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxItemStackCount);
+ }
+ // Leaf end - Change max stack count
targetEntity.setItem(itemstack2);
}
diff --git a/src/main/java/net/minecraft/world/item/ItemUtils.java b/src/main/java/net/minecraft/world/item/ItemUtils.java
index 66f88f44eb74dfbdafe0d6257dc1ef46238aaa92..e0a5d485989dd9e9c9d33f57929aa3dd79294bc9 100644
--- a/src/main/java/net/minecraft/world/item/ItemUtils.java
+++ b/src/main/java/net/minecraft/world/item/ItemUtils.java
@@ -41,7 +41,17 @@ public class ItemUtils {
public static void onContainerDestroyed(ItemEntity itemEntity, Iterable<ItemStack> contents) {
Level level = itemEntity.level();
if (!level.isClientSide) {
+ // Leaf start - Change max stack count
+ if (org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxContainerDestroyCount == 0)
contents.forEach(stack -> level.addFreshEntity(new ItemEntity(level, itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), stack)));
+ else
+ for (int count = Math.min(itemEntity.getItem().getCount(), org.dreeam.leaf.config.modules.gameplay.MaxItemsStackCount.maxContainerDestroyCount); count > 0; count--) {
+ if (!contents.iterator().hasNext()) break;
+
+ ItemStack stack = contents.iterator().next();
+ level.addFreshEntity(new ItemEntity(level, itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), stack));
+ }
+ // Leaf end - Change max stack count
}
}
}
diff --git a/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxItemsStackCount.java b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxItemsStackCount.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a895897111454dc3558aa491b9d81cf610b5bbf
--- /dev/null
+++ b/src/main/java/org/dreeam/leaf/config/modules/gameplay/MaxItemsStackCount.java
@@ -0,0 +1,25 @@
+package org.dreeam.leaf.config.modules.gameplay;
+
+import org.dreeam.leaf.config.ConfigModules;
+import org.dreeam.leaf.config.EnumConfigCategory;
+
+public class MaxItemsStackCount extends ConfigModules {
+
+ public String getBasePath() {
+ return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".max-item-stack-count";
+ }
+
+ public static int maxItemStackCount = 0;
+ public static int maxContainerDestroyCount = 0;
+
+ @Override
+ public void onLoaded() {
+ config.addComment(getBasePath(), "Don't touch this unless you know what you are doing!");
+
+ maxItemStackCount = config.getInt(getBasePath() + ".max-dropped-items-stack-count", maxItemStackCount);
+ maxContainerDestroyCount = config.getInt(getBasePath() + ".max-container-destroy-count", maxContainerDestroyCount);
+
+ if (maxItemStackCount < 0) maxItemStackCount = 0;
+ if (maxContainerDestroyCount < 0) maxContainerDestroyCount = 0;
+ }
+}