diff --git a/lophine-server/minecraft-patches/features/0009-Add-config-to-allow-infinite-trade.patch b/lophine-server/minecraft-patches/features/0009-Add-config-to-allow-infinite-trade.patch new file mode 100644 index 0000000..212e80a --- /dev/null +++ b/lophine-server/minecraft-patches/features/0009-Add-config-to-allow-infinite-trade.patch @@ -0,0 +1,37 @@ +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/item/trading/Merchant.java b/net/minecraft/world/item/trading/Merchant.java +index 6e2fa442ddcd4ef3c4fe789b9ebac9dd409c9de7..0410d4f1405cda79eb5a5aef6f19888d3df1d1e3 100644 +--- a/net/minecraft/world/item/trading/Merchant.java ++++ b/net/minecraft/world/item/trading/Merchant.java +@@ -42,7 +42,12 @@ 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(); ++ for (MerchantOffer merchantOffer : offers) { ++ merchantOffer.maxUses = 16384; ++ } ++ // 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..21ec77d5167cfdf05043ea474165148fb2b0c2d9 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.misc.VillagerConfig.villagerInfiniteTrade); // Lophine - infinite trade + } + + public void setToOutOfStock() { diff --git a/lophine-server/minecraft-patches/features/0009-Purpur-Barrels-and-enderchests-6-rows.patch b/lophine-server/minecraft-patches/features/0010-Purpur-Barrels-and-enderchests-6-rows.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0009-Purpur-Barrels-and-enderchests-6-rows.patch rename to lophine-server/minecraft-patches/features/0010-Purpur-Barrels-and-enderchests-6-rows.patch diff --git a/lophine-server/minecraft-patches/features/0010-Stackable-ShulkerBoxes.patch b/lophine-server/minecraft-patches/features/0011-Stackable-ShulkerBoxes.patch similarity index 99% rename from lophine-server/minecraft-patches/features/0010-Stackable-ShulkerBoxes.patch rename to lophine-server/minecraft-patches/features/0011-Stackable-ShulkerBoxes.patch index af90f3a..c727da8 100644 --- a/lophine-server/minecraft-patches/features/0010-Stackable-ShulkerBoxes.patch +++ b/lophine-server/minecraft-patches/features/0011-Stackable-ShulkerBoxes.patch @@ -37,7 +37,7 @@ index 5a1c21b05545a03fbb00cf734605049870d3eecb..2ade5ce23cdab08b1746e2cbe99bfe1d if (count > i) { source.sendFailure(Component.translatable("commands.give.failed.toomanyitems", i, itemStack.getDisplayName())); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 513cbbf227c5037ee77055473e8815eb05496679..5af3293a532124c2a0e8797efb729de750f33628 100644 +index e87d6a5e0fe2789ab2518a2b3558e7c0c2320feb..347e5e1c773f7c4566825204d2d71aa3ec20333c 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -3064,7 +3064,7 @@ public class ServerGamePacketListenerImpl diff --git a/lophine-server/minecraft-patches/features/0011-Spawn-invulnerable-time.patch b/lophine-server/minecraft-patches/features/0012-Spawn-invulnerable-time.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0011-Spawn-invulnerable-time.patch rename to lophine-server/minecraft-patches/features/0012-Spawn-invulnerable-time.patch diff --git a/lophine-server/minecraft-patches/features/0012-Old-Explosion-Damage-Calculator.patch b/lophine-server/minecraft-patches/features/0013-Old-Explosion-Damage-Calculator.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0012-Old-Explosion-Damage-Calculator.patch rename to lophine-server/minecraft-patches/features/0013-Old-Explosion-Damage-Calculator.patch diff --git a/lophine-server/minecraft-patches/features/0013-Old-replaceable-by-mushrooms.patch b/lophine-server/minecraft-patches/features/0014-Old-replaceable-by-mushrooms.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0013-Old-replaceable-by-mushrooms.patch rename to lophine-server/minecraft-patches/features/0014-Old-replaceable-by-mushrooms.patch diff --git a/lophine-server/minecraft-patches/features/0014-Old-zombie-reinforcement.patch b/lophine-server/minecraft-patches/features/0015-Old-zombie-reinforcement.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0014-Old-zombie-reinforcement.patch rename to lophine-server/minecraft-patches/features/0015-Old-zombie-reinforcement.patch diff --git a/lophine-server/minecraft-patches/features/0015-I18n-support.patch b/lophine-server/minecraft-patches/features/0016-I18n-support.patch similarity index 100% rename from lophine-server/minecraft-patches/features/0015-I18n-support.patch rename to lophine-server/minecraft-patches/features/0016-I18n-support.patch diff --git a/lophine-server/src/main/java/fun/bm/lophine/config/modules/misc/VillagerConfig.java b/lophine-server/src/main/java/fun/bm/lophine/config/modules/misc/VillagerConfig.java new file mode 100644 index 0000000..9b81e2e --- /dev/null +++ b/lophine-server/src/main/java/fun/bm/lophine/config/modules/misc/VillagerConfig.java @@ -0,0 +1,23 @@ +package fun.bm.lophine.config.modules.misc; + +import me.earthme.luminol.config.EnumConfigCategory; +import me.earthme.luminol.config.IConfigModule; +import me.earthme.luminol.config.flags.ConfigInfo; + +public class VillagerConfig implements IConfigModule { + @ConfigInfo(baseName = "villager-infinite-trade", comments = + """ + Allow villager infinite trade (limit of 16384 times) + ---- we won't edit saved data, only edit in send data to client.""") + public static boolean villagerInfiniteTrade = false; + + @Override + public EnumConfigCategory getCategory() { + return EnumConfigCategory.MISC; + } + + @Override + public String getBaseName() { + return "villager-config"; + } +}