Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 19:10:09 +01:00
155 Zeilen
9.6 KiB
Diff
155 Zeilen
9.6 KiB
Diff
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
|
|
index bfd156acbae31619234fffb1804726090802fbae..3653193effdecd969b5ac159b6d5ce633451d706 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
@@ -490,6 +490,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
|
|
while (iterator.hasNext()) {
|
|
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
|
|
+ if (merchantrecipe.ignoreDiscounts) continue; // Paper - Add ignore discounts API
|
|
|
|
merchantrecipe.addToSpecialPriceDiff(-Mth.floor((float) i * merchantrecipe.getPriceMultiplier()));
|
|
}
|
|
@@ -502,6 +503,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
|
|
while (iterator1.hasNext()) {
|
|
MerchantOffer merchantrecipe1 = (MerchantOffer) iterator1.next();
|
|
+ if (merchantrecipe1.ignoreDiscounts) continue; // Paper - Add ignore discounts API
|
|
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
|
|
index 7da5c4a45f8fd46fedd4386e0faac57445475e3a..02feea12c998f37098b72becf6bfaf6b27d155de 100644
|
|
--- 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 {
|
|
public int demand;
|
|
public float priceMultiplier;
|
|
public int xp;
|
|
+ public boolean ignoreDiscounts; // Paper - Add ignore discounts API
|
|
// CraftBukkit start
|
|
private CraftMerchantRecipe bukkitHandle;
|
|
|
|
@@ -31,7 +32,15 @@ public class MerchantOffer {
|
|
}
|
|
|
|
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);
|
|
+ // Paper start - Add ignore discounts API
|
|
+ this(itemstack, itemstack1, itemstack2, uses, maxUses, experience, priceMultiplier, demand, false, bukkit);
|
|
+ }
|
|
+ public MerchantOffer(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int uses, int maxUses, int experience, float priceMultiplier, boolean ignoreDiscounts, CraftMerchantRecipe bukkit) {
|
|
+ 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);
|
|
+ // Paper end - Add ignore discounts API
|
|
this.bukkitHandle = bukkit;
|
|
}
|
|
// CraftBukkit end
|
|
@@ -63,6 +72,7 @@ public class MerchantOffer {
|
|
|
|
this.specialPriceDiff = nbt.getInt("specialPrice");
|
|
this.demand = nbt.getInt("demand");
|
|
+ this.ignoreDiscounts = nbt.getBoolean("Paper.IgnoreDiscounts"); // Paper - Add ignore discounts API
|
|
}
|
|
|
|
public MerchantOffer(ItemStack buyItem, ItemStack sellItem, int maxUses, int merchantExperience, float priceMultiplier) {
|
|
@@ -74,10 +84,19 @@ public class MerchantOffer {
|
|
}
|
|
|
|
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);
|
|
+ // Paper start - Add ignore discounts API
|
|
+ this(firstBuyItem, secondBuyItem, sellItem, uses, maxUses, merchantExperience, priceMultiplier, false);
|
|
+ }
|
|
+ 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);
|
|
}
|
|
|
|
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);
|
|
+ }
|
|
+ public MerchantOffer(ItemStack firstBuyItem, ItemStack secondBuyItem, ItemStack sellItem, int uses, int maxUses, int merchantExperience, float priceMultiplier, int demandBonus, boolean ignoreDiscounts) {
|
|
+ this.ignoreDiscounts = ignoreDiscounts;
|
|
+ // Paper end - Add ignore discounts API
|
|
this.rewardExp = true;
|
|
this.xp = 1;
|
|
this.baseCostA = firstBuyItem;
|
|
@@ -210,6 +229,7 @@ public class MerchantOffer {
|
|
nbttagcompound.putFloat("priceMultiplier", this.priceMultiplier);
|
|
nbttagcompound.putInt("specialPrice", this.specialPriceDiff);
|
|
nbttagcompound.putInt("demand", this.demand);
|
|
+ nbttagcompound.putBoolean("Paper.IgnoreDiscounts", this.ignoreDiscounts); // Paper - Add ignore discounts API
|
|
return nbttagcompound;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
|
|
index c015b34d2b13a759783da7c0c06dd0563d35fc88..5741a233fb1dd8ad0f83a09b44476a4b88e6aa16 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
|
|
@@ -18,11 +18,19 @@ public class CraftMerchantRecipe extends MerchantRecipe {
|
|
|
|
@Deprecated
|
|
public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier) {
|
|
- this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0);
|
|
+ // Paper start - add ignoreDiscounts param
|
|
+ this(result, uses, maxUses, experienceReward, experience, priceMultiplier, 0, 0, false);
|
|
+ }
|
|
+ public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward, int experience, float priceMultiplier, boolean ignoreDiscounts) {
|
|
+ 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);
|
|
+ // Paper end
|
|
this.handle = new net.minecraft.world.item.trading.MerchantOffer(
|
|
net.minecraft.world.item.ItemStack.EMPTY,
|
|
net.minecraft.world.item.ItemStack.EMPTY,
|
|
@@ -32,6 +40,7 @@ public class CraftMerchantRecipe extends MerchantRecipe {
|
|
experience,
|
|
priceMultiplier,
|
|
demand,
|
|
+ ignoreDiscounts, // Paper - add ignoreDiscounts param
|
|
this
|
|
);
|
|
this.setSpecialPrice(specialPrice);
|
|
@@ -108,6 +117,18 @@ public class CraftMerchantRecipe extends MerchantRecipe {
|
|
this.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 = this.getIngredients();
|
|
Preconditions.checkState(!ingredients.isEmpty(), "No offered ingredients");
|
|
@@ -122,7 +143,7 @@ public class CraftMerchantRecipe extends MerchantRecipe {
|
|
if (recipe instanceof CraftMerchantRecipe) {
|
|
return (CraftMerchantRecipe) recipe;
|
|
} else {
|
|
- 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
|
|
craft.setIngredients(recipe.getIngredients());
|
|
|
|
return craft;
|