2021-06-11 12:02:28 +00: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
2022-06-08 06:25:32 +00:00
index 39fc94b1e1555fd6706391223dd2783139b16016..1d2b7950e3c498945a2ff85fda0e3bb30acd22cb 100644
2021-06-11 12:02:28 +00:00
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
2022-03-01 05:43:03 +00:00
@@ -489,6 +489,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
2021-06-11 12:02:28 +00:00
while (iterator.hasNext()) {
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
+ if (merchantrecipe.ignoreDiscounts) continue; // Paper
2022-01-01 03:05:42 +00:00
merchantrecipe.addToSpecialPriceDiff(-Mth.floor((float) i * merchantrecipe.getPriceMultiplier()));
}
2022-03-01 05:43:03 +00:00
@@ -501,6 +502,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
2021-06-11 12:02:28 +00:00
while (iterator1.hasNext()) {
MerchantOffer merchantrecipe1 = (MerchantOffer) iterator1.next();
+ if (merchantrecipe1.ignoreDiscounts) continue; // Paper
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
2022-06-08 06:25:32 +00:00
index 8b46e494ecd0cce5ab0b2bf8e50cf50dc7e2a7e5..8a9a701baabdaf066cd9b28c05430f673fcafb4e 100644
2021-06-11 12:02:28 +00:00
--- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java
+++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java
@@ -19,6 +19,7 @@ public class MerchantOffer {
2022-06-08 06:25:32 +00:00
public int demand;
2021-06-11 12:02:28 +00:00
public float priceMultiplier;
public int xp;
+ public boolean ignoreDiscounts; // Paper
// CraftBukkit start
private CraftMerchantRecipe bukkitHandle;
2021-12-20 22:46:51 +00:00
@@ -31,7 +32,15 @@ public class MerchantOffer {
2021-06-11 12:02:28 +00:00
}
2021-12-20 22:46:51 +00:00
public MerchantOffer(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int uses, int maxUses, int experience, float priceMultiplier, int demand, CraftMerchantRecipe bukkit) {
- this(itemstack, itemstack1, itemstack2, uses, maxUses, experience, priceMultiplier, demand);
2021-06-11 12:02:28 +00:00
+ // Paper start - add ignoreDiscounts param
2021-12-20 22:46:51 +00:00
+ this(itemstack, itemstack1, itemstack2, uses, maxUses, experience, priceMultiplier, demand, false, bukkit);
2021-06-11 12:02:28 +00:00
+ }
+ public MerchantOffer(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int uses, int maxUses, int experience, float priceMultiplier, boolean ignoreDiscounts, CraftMerchantRecipe bukkit) {
2021-12-20 22:46:51 +00:00
+ this(itemstack, itemstack1, itemstack2, uses, maxUses, experience, priceMultiplier, 0, ignoreDiscounts, bukkit);
+ }
+ public MerchantOffer(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int uses, int maxUses, int experience, float priceMultiplier, int demand, boolean ignoreDiscounts, CraftMerchantRecipe bukkit) {
+ this(itemstack, itemstack1, itemstack2, uses, maxUses, experience, priceMultiplier, demand, ignoreDiscounts);
2021-06-11 12:02:28 +00:00
+ // Paper end
this.bukkitHandle = bukkit;
}
// CraftBukkit end
2021-12-20 22:46:51 +00:00
@@ -63,6 +72,7 @@ public class MerchantOffer {
2021-06-11 12:02:28 +00:00
2021-06-14 16:58:00 +00:00
this.specialPriceDiff = nbt.getInt("specialPrice");
this.demand = nbt.getInt("demand");
+ this.ignoreDiscounts = nbt.getBoolean("Paper.IgnoreDiscounts"); // Paper
2021-06-11 12:02:28 +00:00
}
2021-06-14 16:58:00 +00:00
public MerchantOffer(ItemStack buyItem, ItemStack sellItem, int maxUses, int merchantExperience, float priceMultiplier) {
2021-12-20 22:46:51 +00:00
@@ -74,10 +84,19 @@ public class MerchantOffer {
2021-06-11 12:02:28 +00:00
}
2021-06-14 16:58:00 +00:00
public MerchantOffer(ItemStack firstBuyItem, ItemStack secondBuyItem, ItemStack sellItem, int uses, int maxUses, int merchantExperience, float priceMultiplier) {
- this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, merchantExperience, priceMultiplier, 0);
2021-06-11 12:02:28 +00:00
+ // Paper start - add ignoreDiscounts param
2021-06-14 16:58:00 +00:00
+ this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, merchantExperience, priceMultiplier, false);
2021-06-11 12:02:28 +00:00
+ }
2021-06-14 16:58:00 +00:00
+ public MerchantOffer(ItemStack firstBuyItem, ItemStack secondBuyItem, ItemStack sellItem, int uses, int maxUses, int merchantExperience, float priceMultiplier, boolean ignoreDiscounts) {
+ this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, merchantExperience, priceMultiplier, 0, ignoreDiscounts);
2021-06-11 12:02:28 +00:00
}
2021-06-14 16:58:00 +00:00
public MerchantOffer(ItemStack firstBuyItem, ItemStack secondBuyItem, ItemStack sellItem, int uses, int maxUses, int merchantExperience, float priceMultiplier, int demandBonus) {
+ this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, merchantExperience, priceMultiplier, demandBonus, false);
2021-06-11 12:02:28 +00:00
+ }
2021-06-14 16:58:00 +00:00
+ public MerchantOffer(ItemStack firstBuyItem, ItemStack secondBuyItem, ItemStack sellItem, int uses, int maxUses, int merchantExperience, float priceMultiplier, int demandBonus, boolean ignoreDiscounts) {
2021-06-11 12:02:28 +00:00
+ this.ignoreDiscounts = ignoreDiscounts;
+ // Paper end
this.rewardExp = true;
this.xp = 1;
2021-06-14 16:58:00 +00:00
this.baseCostA = firstBuyItem;
2021-12-20 22:46:51 +00:00
@@ -193,6 +212,7 @@ public class MerchantOffer {
2021-06-11 12:02:28 +00:00
nbttagcompound.putFloat("priceMultiplier", this.priceMultiplier);
nbttagcompound.putInt("specialPrice", this.specialPriceDiff);
nbttagcompound.putInt("demand", this.demand);
+ nbttagcompound.putBoolean("Paper.IgnoreDiscounts", this.ignoreDiscounts); // Paper
return nbttagcompound;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
2021-12-20 22:46:51 +00:00
index 07462b77107541aed2e29d04da33831ac113b450..0f038f6152c90e707cb633dffcab0a1c5b99d260 100644
2021-06-11 12:02:28 +00:00
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
2021-12-20 22:46:51 +00:00
@@ -18,11 +18,19 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 12:02:28 +00:00
}
public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier) {
2021-12-20 22:46:51 +00:00
- this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0);
2021-06-11 12:02:28 +00:00
+ // Paper start - add ignoreDiscounts param
2021-12-20 22:46:51 +00:00
+ this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0, false);
2021-06-11 12:02:28 +00:00
+ }
+ public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier, boolean ignoreDiscounts) {
2021-12-20 22:46:51 +00: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 12:02:28 +00:00
+ // Paper end
this.handle = new net.minecraft.world.item.trading.MerchantOffer(
net.minecraft.world.item.ItemStack.EMPTY,
net.minecraft.world.item.ItemStack.EMPTY,
2021-12-20 22:46:51 +00:00
@@ -32,6 +40,7 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 12:02:28 +00:00
experience,
priceMultiplier,
2021-12-20 22:46:51 +00:00
demand,
2021-06-11 12:02:28 +00:00
+ ignoreDiscounts, // Paper - add ignoreDiscounts param
this
);
2021-12-20 22:46:51 +00:00
this.setSpecialPrice(specialPrice);
@@ -108,6 +117,18 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 12:02:28 +00:00
handle.priceMultiplier = priceMultiplier;
}
+ // 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() {
List<ItemStack> ingredients = getIngredients();
Preconditions.checkState(!ingredients.isEmpty(), "No offered ingredients");
2021-12-20 22:46:51 +00:00
@@ -122,7 +143,7 @@ public class CraftMerchantRecipe extends MerchantRecipe {
2021-06-11 12:02:28 +00:00
if (recipe instanceof CraftMerchantRecipe) {
return (CraftMerchantRecipe) recipe;
} else {
- CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward(), recipe.getVillagerExperience(), recipe.getPriceMultiplier());
+ CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward(), recipe.getVillagerExperience(), recipe.getPriceMultiplier(), recipe.shouldIgnoreDiscounts()); // Paper - shouldIgnoreDiscounts
craft.setIngredients(recipe.getIngredients());
return craft;