diff --git a/gradle.properties b/gradle.properties index 97d0570..87566af 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mcVersion=1.21.8 release=2 # 0 for skip release, 1 for pre-release, 2 for release -luminolRef=db9feeb2b0114cff9815b8b16ac3416846985693 +luminolRef=92b97fb10cb5c834e9dacd85969599cf1286f72b org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/lophine-server/minecraft-patches/features/0002-Add-config-to-allow-generation-of-end-void-rings.patch b/lophine-server/minecraft-patches/features/0001-Add-config-to-allow-generation-of-end-void-rings.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0002-Add-config-to-allow-generation-of-end-void-rings.patch rename to lophine-server/minecraft-patches/features/0001-Add-config-to-allow-generation-of-end-void-rings.patch diff --git a/lophine-server/minecraft-patches/features/0001-Add-config-to-allow-infinite-trade.patch b/lophine-server/minecraft-patches/features/0001-Add-config-to-allow-infinite-trade.patch deleted file mode 100644 index f3ac17a..0000000 --- a/lophine-server/minecraft-patches/features/0001-Add-config-to-allow-infinite-trade.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Mon, 7 Jul 2025 16:30:54 +0800 -Subject: [PATCH] Add config to allow infinite trade - - -diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 79242037e868a140513f032e74e8594c0c6ff41c..050e89c3e95c7c3ef7ad98f8ef03ab206241a7e2 100644 ---- a/net/minecraft/world/entity/npc/Villager.java -+++ b/net/minecraft/world/entity/npc/Villager.java -@@ -490,8 +490,15 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - } - - private void resendOffersToTradingPlayer() { -- MerchantOffers offers = this.getOffers(); -+ // Lophine start - infinite trade -+ MerchantOffers offers = this.getOffers().copy(); - Player tradingPlayer = this.getTradingPlayer(); -+ if (fun.bm.lophine.config.modules.function.VillagerConfig.villagerInfiniteTrade) { -+ for (MerchantOffer merchantOffer : offers) { -+ merchantOffer.maxUses = 524288; -+ } -+ } -+ // Lophine end - infinite trade - if (tradingPlayer != null && !offers.isEmpty()) { - tradingPlayer.sendMerchantOffers( - tradingPlayer.containerMenu.containerId, -diff --git a/net/minecraft/world/item/trading/Merchant.java b/net/minecraft/world/item/trading/Merchant.java -index 6e2fa442ddcd4ef3c4fe789b9ebac9dd409c9de7..0c7318a0ed214204f5493576c8a7b02fbe51c00b 100644 ---- a/net/minecraft/world/item/trading/Merchant.java -+++ b/net/minecraft/world/item/trading/Merchant.java -@@ -42,7 +42,14 @@ public interface Merchant { - new SimpleMenuProvider((containerId, inventory, player1) -> new MerchantMenu(containerId, inventory, this), displayName) - ); - if (optionalInt.isPresent()) { -- MerchantOffers offers = this.getOffers(); -+ // Lophine start - infinite trade -+ MerchantOffers offers = this.getOffers().copy(); -+ if (fun.bm.lophine.config.modules.function.VillagerConfig.villagerInfiniteTrade) { -+ for (MerchantOffer merchantOffer : offers) { -+ merchantOffer.maxUses = 5242884; -+ } -+ } -+ // Lophine end - infinite trade - if (!offers.isEmpty()) { - player.sendMerchantOffers(optionalInt.getAsInt(), offers, level, this.getVillagerXp(), this.showProgressBar(), this.canRestock()); - } -diff --git a/net/minecraft/world/item/trading/MerchantOffer.java b/net/minecraft/world/item/trading/MerchantOffer.java -index 64c99df8ff305fa28c75dc03fc5ef8c61634ad84..770f37d7158c7b4cec62783025f623a68c1f2457 100644 ---- a/net/minecraft/world/item/trading/MerchantOffer.java -+++ b/net/minecraft/world/item/trading/MerchantOffer.java -@@ -196,7 +196,7 @@ public class MerchantOffer { - } - - public boolean isOutOfStock() { -- return this.uses >= this.maxUses; -+ return (this.uses >= this.maxUses && !fun.bm.lophine.config.modules.function.VillagerConfig.villagerInfiniteTrade); // Lophine - infinite trade - } - - public void setToOutOfStock() { diff --git a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-cross-region-damage-trace.patch b/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0003-Add-config-to-enable-cross-region-damage-trace.patch rename to lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch diff --git a/lophine-server/minecraft-patches/features/0004-Add-config-to-enable-raytracing-tracker.patch b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0004-Add-config-to-enable-raytracing-tracker.patch rename to lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch diff --git a/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-datapack-command.patch b/lophine-server/minecraft-patches/features/0004-Add-config-to-enable-datapack-command.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0005-Add-config-to-enable-datapack-command.patch rename to lophine-server/minecraft-patches/features/0004-Add-config-to-enable-datapack-command.patch diff --git a/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-function-command.patch b/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-function-command.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0006-Add-config-to-enable-function-command.patch rename to lophine-server/minecraft-patches/features/0005-Add-config-to-enable-function-command.patch diff --git a/lophine-server/minecraft-patches/features/0007-Add-config-to-enable-scoreboard-command.patch b/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-scoreboard-command.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0007-Add-config-to-enable-scoreboard-command.patch rename to lophine-server/minecraft-patches/features/0006-Add-config-to-enable-scoreboard-command.patch diff --git a/lophine-server/minecraft-patches/features/0008-Add-config-to-enable-tick-command.patch b/lophine-server/minecraft-patches/features/0007-Add-config-to-enable-tick-command.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0008-Add-config-to-enable-tick-command.patch rename to lophine-server/minecraft-patches/features/0007-Add-config-to-enable-tick-command.patch diff --git a/lophine-server/minecraft-patches/features/0009-Add-config-to-enable-waypoint-command-bar.patch b/lophine-server/minecraft-patches/features/0008-Add-config-to-enable-waypoint-command-bar.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0009-Add-config-to-enable-waypoint-command-bar.patch rename to lophine-server/minecraft-patches/features/0008-Add-config-to-enable-waypoint-command-bar.patch diff --git a/lophine-server/minecraft-patches/features/0010-Leaves-Base-Protocol-Core.patch b/lophine-server/minecraft-patches/features/0009-Leaves-Base-Protocol-Core.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0010-Leaves-Base-Protocol-Core.patch rename to lophine-server/minecraft-patches/features/0009-Leaves-Base-Protocol-Core.patch diff --git a/lophine-server/minecraft-patches/features/0010-Leaves-Configurable-trading-with-the-void.patch b/lophine-server/minecraft-patches/features/0010-Leaves-Configurable-trading-with-the-void.patch new file mode 100644 index 0000000..f6a1b64 --- /dev/null +++ b/lophine-server/minecraft-patches/features/0010-Leaves-Configurable-trading-with-the-void.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Helvetica Volubi +Date: Wed, 29 Oct 2025 00:09:09 +0800 +Subject: [PATCH] Leaves: Configurable trading with the void + +Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> +As a part of : Leaves (https://github.com/LeavesMC/Leaves) +Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) + +diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java +index 3207150a9bbe9f7bef66e416efdc9bb242b1ad17..08e7cd3db4b5a2e02f959bb8ee306aef4cb189db 100644 +--- a/net/minecraft/server/level/ServerLevel.java ++++ b/net/minecraft/server/level/ServerLevel.java +@@ -2902,7 +2902,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + // Spigot start + if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message + // Paper start - Fix merchant inventory not closing on entity removal +- if (entity.getBukkitEntity() instanceof org.bukkit.inventory.Merchant merchant && merchant.getTrader() != null) { ++ if (!fun.bm.lophine.config.modules.function.OldFeatureConfig.villagerVoidTrade && entity.getBukkitEntity() instanceof org.bukkit.inventory.Merchant merchant && merchant.getTrader() != null) { // Leaves - Configurable trading with the void + merchant.getTrader().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); + } + // Paper end - Fix merchant inventory not closing on entity removal +diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java +index 593dbcda4b497291eb1ecdc64b947a8d279f8be6..6c1f4f943a5be5f2e43a82cca52ca76a98226915 100644 +--- a/net/minecraft/server/players/PlayerList.java ++++ b/net/minecraft/server/players/PlayerList.java +@@ -649,7 +649,7 @@ public abstract class PlayerList { + player.stopRiding(); + rootVehicle.getPassengersAndSelf().forEach(entity -> { + // Paper start - Fix villager boat exploit +- if (entity instanceof net.minecraft.world.entity.npc.AbstractVillager villager) { ++ if (!fun.bm.lophine.config.modules.function.OldFeatureConfig.villagerVoidTrade && entity instanceof net.minecraft.world.entity.npc.AbstractVillager villager) { // Leaves - Configurable trading with the void + final net.minecraft.world.entity.player.Player human = villager.getTradingPlayer(); + if (human != null) { + villager.setTradingPlayer(null); +diff --git a/net/minecraft/world/inventory/MerchantMenu.java b/net/minecraft/world/inventory/MerchantMenu.java +index d59f67ffe34201c63e3d9706a4434f33b6732edb..c635c7211bff9d190b7035b284dda162334fd5c2 100644 +--- a/net/minecraft/world/inventory/MerchantMenu.java ++++ b/net/minecraft/world/inventory/MerchantMenu.java +@@ -74,6 +74,7 @@ public class MerchantMenu extends AbstractContainerMenu { + + @Override + public boolean stillValid(Player player) { ++ if (fun.bm.lophine.config.modules.function.OldFeatureConfig.villagerVoidTrade) return this.trader.getTradingPlayer() == player; // Leaves - Configurable trading with the void + if (!checkReachable) return true; // Paper - checkReachable + return this.trader.stillValid(player); + } diff --git a/lophine-server/minecraft-patches/features/0022-Leaves-Fakeplayer.patch b/lophine-server/minecraft-patches/features/0022-Leaves-Fakeplayer.patch index 029e313..cc40e47 100644 --- a/lophine-server/minecraft-patches/features/0022-Leaves-Fakeplayer.patch +++ b/lophine-server/minecraft-patches/features/0022-Leaves-Fakeplayer.patch @@ -266,7 +266,7 @@ index 70740381c6501c1a518c52b24381edd16792507f..5e31b499a894113b4be1982a1071348f } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 576dde41a4b48aac9079cca902f4371a31470af3..952b92c55d7192791a19ecebe80894f6cf992049 100644 +index fbce0eafdf685cda258d5e423e686630c6315386..e0fc0e82995b428f4c75a29895d8692dd5671f4e 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -207,6 +207,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -298,7 +298,7 @@ index 576dde41a4b48aac9079cca902f4371a31470af3..952b92c55d7192791a19ecebe80894f6 @Override public void updatePOIOnBlockStateChange(BlockPos pos, BlockState oldState, BlockState newState) { Optional> optional = PoiTypes.forState(oldState); -@@ -2826,6 +2834,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2828,6 +2836,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // 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 serverPlayer) { ServerLevel.this.players.add(serverPlayer); @@ -310,7 +310,7 @@ index 576dde41a4b48aac9079cca902f4371a31470af3..952b92c55d7192791a19ecebe80894f6 if (serverPlayer.isReceivingWaypoints()) { ServerLevel.this.getWaypointManager().addPlayer(serverPlayer); } -@@ -2913,6 +2926,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2915,6 +2928,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ServerLevel.this.getChunkSource().removeEntity(entity); if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.remove(serverPlayer); @@ -434,7 +434,7 @@ index 144a2644c15f276f02bb3be859dc5d05a677ac55..c6a89e8936cffa49b3de153ed3c40e3c boolean stateLocked = true; try { this.stateLock.lock(); // Paper - Fix GameProfileCache concurrency GameProfileCache.GameProfileInfo gameProfileInfo = this.profilesByName.get(string); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index cb863a36fc67e993956ec3be655e6e4b9764c051..908ec29a6e285122d1a8a43dc547b74af2697442 100644 +index 8e2775e873c92beed6a0e4e8ce1304ab8ca6e8d1..9e80d6c3d70832a8f195987e6934187eee8e22b7 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -425,6 +425,19 @@ public abstract class PlayerList { diff --git a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/OldFeatureConfig.java b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/OldFeatureConfig.java index 7fc4456..157d041 100644 --- a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/OldFeatureConfig.java +++ b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/OldFeatureConfig.java @@ -24,4 +24,12 @@ public class OldFeatureConfig implements IConfigModule { @TransformedConfig(name = "give_bad_omen_when_kill_raid_captain", directory = {"misc", "revert_raid_changes"}, transformComments = false) @ConfigInfo(name = "old_raid_behavior") public static boolean oldRaidBehavior = false; + + @TransformedConfig(name = "villager-infinite-trade", directory = {"function", "villager"}, transformComments = false) + @TransformedConfig(name = "villager-infinite-trade", directory = {"misc", "villager"}, transformComments = false) + @TransformedConfig(name = "villager-infinite-trade", directory = {"misc", "villager-config"}, transformComments = false) + @ConfigInfo(name = "villager-void-trade", comments = + """ + Allow villager void trade.""") + public static boolean villagerVoidTrade = false; } \ No newline at end of file diff --git a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/VillagerConfig.java b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/VillagerConfig.java deleted file mode 100644 index 74fe6a7..0000000 --- a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/VillagerConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package fun.bm.lophine.config.modules.function; - -import me.earthme.luminol.config.IConfigModule; -import me.earthme.luminol.config.flags.ConfigClassInfo; -import me.earthme.luminol.config.flags.ConfigInfo; -import me.earthme.luminol.config.flags.TransformedConfig; -import me.earthme.luminol.enums.EnumConfigCategory; - -@ConfigClassInfo(category = EnumConfigCategory.MISC, name = "villager") -public class VillagerConfig implements IConfigModule { - @TransformedConfig(name = "villager-infinite-trade", directory = {"misc", "villager"}) - @TransformedConfig(name = "villager-infinite-trade", directory = {"misc", "villager-config"}) - @ConfigInfo(name = "villager-infinite-trade", comments = - """ - Allow villager infinite trade (limit of 524288 times) - ---- we won't edit saved data, only edit in send data to client. - (after we fixed void trade, this config will drop to void trade)""") - public static boolean villagerInfiniteTrade = false; -}