2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Mariell Hoversholm <proximyst@proximyst.com>
Date: Mon, 9 Nov 2020 20:44:51 +0100
Subject: [PATCH] Add ignore discounts API
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
2024-10-23 17:13:43 +02:00
index 82ed0ce824e84ea09ea963caa61fbb75f6ce6fe7..f51078e4b9e6267fa43795d009f5d149b86acb5a 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
2024-10-23 17:13:43 +02:00
@@ -490,6 +490,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
2021-06-11 14:02:28 +02:00
while (iterator.hasNext()) {
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
2024-01-20 12:50:16 +01:00
+ if (merchantrecipe.ignoreDiscounts) continue; // Paper - Add ignore discounts API
2021-06-11 14:02:28 +02:00
2022-01-01 04:05:42 +01:00
merchantrecipe.addToSpecialPriceDiff(-Mth.floor((float) i * merchantrecipe.getPriceMultiplier()));
}
2024-10-23 17:13:43 +02:00
@@ -502,6 +503,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
2021-06-11 14:02:28 +02:00
while (iterator1.hasNext()) {
MerchantOffer merchantrecipe1 = (MerchantOffer) iterator1.next();
2024-01-20 12:50:16 +01:00
+ if (merchantrecipe1.ignoreDiscounts) continue; // Paper - Add ignore discounts API
2021-06-11 14:02:28 +02:00
double d0 = 0.3D + 0.0625D * (double) j;
int k = (int) Math.floor(d0 * (double) merchantrecipe1.getBaseCostA().getCount());
diff --git a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java
2024-04-26 06:27:19 +02:00
index 89982d25f60c8b60ba91e559ef88278f338fe215..0efc8d997b34302c3e0a5d7ec73a11a940dbeefe 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java
+++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java
2024-04-24 15:46:45 +02:00
@@ -33,6 +33,10 @@ public class MerchantOffer {
return merchantrecipe.priceMultiplier;
}), Codec.INT.lenientOptionalFieldOf("xp", 1).forGetter((merchantrecipe) -> {
return merchantrecipe.xp;
+ // Paper start
+ }), Codec.BOOL.lenientOptionalFieldOf("Paper.IgnoreDiscounts", false).forGetter((merchantrecipe) -> {
+ return merchantrecipe.ignoreDiscounts;
+ // Paper end
})).apply(instance, MerchantOffer::new);
});
public static final StreamCodec<RegistryFriendlyByteBuf, MerchantOffer> STREAM_CODEC = StreamCodec.of(MerchantOffer::writeToStream, MerchantOffer::createFromStream);
@@ -46,6 +50,7 @@ public class MerchantOffer {
2022-06-08 08:25:32 +02:00
public int demand;
2021-06-11 14:02:28 +02:00
public float priceMultiplier;
public int xp;
2024-01-20 12:50:16 +01:00
+ public boolean ignoreDiscounts; // Paper - Add ignore discounts API
2021-06-11 14:02:28 +02:00
// CraftBukkit start
private CraftMerchantRecipe bukkitHandle;
2024-04-26 06:27:19 +02:00
@@ -53,13 +58,14 @@ public class MerchantOffer {
return (this.bukkitHandle == null) ? this.bukkitHandle = new CraftMerchantRecipe(this) : this.bukkitHandle;
}
- public MerchantOffer(ItemCost baseCostA, Optional<ItemCost> costB, ItemStack result, int uses, int maxUses, int experience, float priceMultiplier, int demand, CraftMerchantRecipe bukkit) {
+ public MerchantOffer(ItemCost baseCostA, Optional<ItemCost> costB, ItemStack result, int uses, int maxUses, int experience, float priceMultiplier, int demand, final boolean ignoreDiscounts, CraftMerchantRecipe bukkit) { // Paper
this(baseCostA, costB, result, uses, maxUses, experience, priceMultiplier, demand);
+ this.ignoreDiscounts = ignoreDiscounts; // Paper
this.bukkitHandle = bukkit;
2021-06-11 14:02:28 +02:00
}
// CraftBukkit end
2024-04-24 15:46:45 +02:00
- private MerchantOffer(ItemCost firstBuyItem, Optional<ItemCost> secondBuyItem, ItemStack sellItem, int uses, int maxUses, boolean rewardingPlayerExperience, int specialPrice, int demandBonus, float priceMultiplier, int merchantExperience) {
2024-04-26 06:27:19 +02:00
+ private MerchantOffer(ItemCost firstBuyItem, Optional<ItemCost> secondBuyItem, ItemStack sellItem, int uses, int maxUses, boolean rewardingPlayerExperience, int specialPrice, int demandBonus, float priceMultiplier, int merchantExperience, final boolean ignoreDiscounts) { // Paper
2024-04-24 15:46:45 +02:00
this.baseCostA = firstBuyItem;
this.costB = secondBuyItem;
this.result = sellItem;
2024-04-26 06:27:19 +02:00
@@ -70,6 +76,7 @@ public class MerchantOffer {
2024-04-24 15:46:45 +02:00
this.demand = demandBonus;
this.priceMultiplier = priceMultiplier;
this.xp = merchantExperience;
2024-04-26 06:27:19 +02:00
+ this.ignoreDiscounts = ignoreDiscounts; // Paper
2021-06-11 14:02:28 +02:00
}
2024-04-24 15:46:45 +02:00
public MerchantOffer(ItemCost buyItem, ItemStack sellItem, int maxUses, int merchantExperience, float priceMultiplier) {
2024-04-26 06:27:19 +02:00
@@ -85,11 +92,11 @@ public class MerchantOffer {
2021-06-11 14:02:28 +02:00
}
2024-04-24 15:46:45 +02:00
public MerchantOffer(ItemCost firstBuyItem, Optional<ItemCost> secondBuyItem, ItemStack sellItem, int uses, int maxUses, int merchantExperience, float priceMultiplier, int demandBonus) {
- this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, true, 0, demandBonus, priceMultiplier, merchantExperience);
+ this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, true, 0, demandBonus, priceMultiplier, merchantExperience, false); // Paper
2021-06-11 14:02:28 +02:00
}
2024-04-24 15:46:45 +02:00
private MerchantOffer(MerchantOffer offer) {
- this(offer.baseCostA, offer.costB, offer.result.copy(), offer.uses, offer.maxUses, offer.rewardExp, offer.specialPriceDiff, offer.demand, offer.priceMultiplier, offer.xp);
+ this(offer.baseCostA, offer.costB, offer.result.copy(), offer.uses, offer.maxUses, offer.rewardExp, offer.specialPriceDiff, offer.demand, offer.priceMultiplier, offer.xp, offer.ignoreDiscounts); // Paper
2021-06-11 14:02:28 +02:00
}
2024-04-24 15:46:45 +02:00
public ItemStack getBaseCostA() {
2021-06-11 14:02:28 +02:00
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
2024-10-21 00:06:54 +02:00
index bc1a92707c65474c1464d6f7c3a3265df6195228..e86cee25703a3c02ef62e302816253c360d557f3 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
2024-10-21 00:06:54 +02:00
@@ -24,11 +24,19 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 14:02:28 +02:00
2022-10-02 09:56:36 +02:00
@Deprecated
2021-06-11 14:02:28 +02:00
public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier) {
2021-12-20 23:46:51 +01:00
- this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0);
2021-06-11 14:02:28 +02:00
+ // Paper start - add ignoreDiscounts param
2021-12-20 23:46:51 +01:00
+ this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0, false);
2021-06-11 14:02:28 +02:00
+ }
+ public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier, boolean ignoreDiscounts) {
2021-12-20 23:46:51 +01:00
+ this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0, ignoreDiscounts);
}
public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier, int demand, int specialPrice) {
- super(result, uses, maxUses, experienceReward, experience, priceMultiplier, demand, specialPrice);
+ this(result, uses, maxUses, experienceReward, experience, priceMultiplier, demand, specialPrice, false);
+ }
+ public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier, int demand, int specialPrice, boolean ignoreDiscounts) {
+ super(result, uses, maxUses, experienceReward, experience, priceMultiplier, demand, specialPrice, ignoreDiscounts);
2021-06-11 14:02:28 +02:00
+ // Paper end
this.handle = new net.minecraft.world.item.trading.MerchantOffer(
2024-04-24 15:46:45 +02:00
new ItemCost(Items.AIR),
Optional.empty(),
2024-10-21 00:06:54 +02:00
@@ -38,6 +46,7 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 14:02:28 +02:00
experience,
priceMultiplier,
2021-12-20 23:46:51 +01:00
demand,
2021-06-11 14:02:28 +02:00
+ ignoreDiscounts, // Paper - add ignoreDiscounts param
this
);
2021-12-20 23:46:51 +01:00
this.setSpecialPrice(specialPrice);
2024-10-21 00:06:54 +02:00
@@ -114,6 +123,18 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2023-10-27 01:34:58 +02:00
this.handle.priceMultiplier = priceMultiplier;
2021-06-11 14:02:28 +02:00
}
+ // Paper start
+ @Override
+ public boolean shouldIgnoreDiscounts() {
+ return this.handle.ignoreDiscounts;
+ }
+
+ @Override
+ public void setIgnoreDiscounts(boolean ignoreDiscounts) {
+ this.handle.ignoreDiscounts = ignoreDiscounts;
+ }
+ // Paper end
+
public net.minecraft.world.item.trading.MerchantOffer toMinecraft() {
2023-10-27 01:34:58 +02:00
List<ItemStack> ingredients = this.getIngredients();
2021-06-11 14:02:28 +02:00
Preconditions.checkState(!ingredients.isEmpty(), "No offered ingredients");
2024-10-21 00:06:54 +02:00
@@ -134,7 +155,7 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 14:02:28 +02:00
if (recipe instanceof CraftMerchantRecipe) {
return (CraftMerchantRecipe) recipe;
} else {
2022-10-02 09:56:36 +02:00
- CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward(), recipe.getVillagerExperience(), recipe.getPriceMultiplier(), recipe.getDemand(), recipe.getSpecialPrice());
+ CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward(), recipe.getVillagerExperience(), recipe.getPriceMultiplier(), recipe.getDemand(), recipe.getSpecialPrice(), recipe.shouldIgnoreDiscounts()); // Paper - shouldIgnoreDiscounts
2021-06-11 14:02:28 +02:00
craft.setIngredients(recipe.getIngredients());
return craft;