ef0e5a642d
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 9ae3f10f SPIGOT-3842: Add Player#fireworkBoost() and expand Firework API 48c0c547 PR-786: Add methods to get sounds from entities CraftBukkit Changes: 5cc9c022a SPIGOT-7152: Handle hand item changing during air interact event 4ffa1acf6 SPIGOT-7154: Players get kicked when interacting with a conversation 4daa21123 SPIGOT-3842: Add Player#fireworkBoost() and expand Firework API e5d6a9bbf PR-1100: Add methods to get sounds from entities b7e9f1c8b SPIGOT-7146: Reduce use of Material switch in ItemMeta Spigot Changes: 4c157bb4 Rebuild patches
155 Zeilen
9.3 KiB
Diff
155 Zeilen
9.3 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 39fc94b1e1555fd6706391223dd2783139b16016..1d2b7950e3c498945a2ff85fda0e3bb30acd22cb 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
@@ -489,6 +489,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
|
|
while (iterator.hasNext()) {
|
|
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
|
|
+ if (merchantrecipe.ignoreDiscounts) continue; // Paper
|
|
|
|
merchantrecipe.addToSpecialPriceDiff(-Mth.floor((float) i * merchantrecipe.getPriceMultiplier()));
|
|
}
|
|
@@ -501,6 +502,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
|
|
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
|
|
index 8b46e494ecd0cce5ab0b2bf8e50cf50dc7e2a7e5..8a9a701baabdaf066cd9b28c05430f673fcafb4e 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
|
|
// 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 ignoreDiscounts param
|
|
+ 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
|
|
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
|
|
}
|
|
|
|
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 ignoreDiscounts param
|
|
+ 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
|
|
this.rewardExp = true;
|
|
this.xp = 1;
|
|
this.baseCostA = firstBuyItem;
|
|
@@ -193,6 +212,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
|
|
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 07462b77107541aed2e29d04da33831ac113b450..0f038f6152c90e707cb633dffcab0a1c5b99d260 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 {
|
|
}
|
|
|
|
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 {
|
|
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");
|
|
@@ -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());
|
|
+ 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;
|