From 9b1aff840eeec6213329936eacd5137e61574a71 Mon Sep 17 00:00:00 2001 From: i509vcb <30619168+i509VCB@users.noreply.github.com> Date: Wed, 11 Dec 2019 21:54:51 -0600 Subject: [PATCH] The great Mixin bazaar. Revalidates some Trade and villager related trades by finding their targets. --- .../common/item/util/TradeOfferUtil.java | 9 ++-- ...Trades_EmeraldForItemsTradeMixin_API.java} | 27 +++++------ ...ades_EnchantItemForEmeraldsTrade_API.java} | 33 +++++++------- ...chantedBookForEmeraldsTradeMixin_API.java} | 20 ++++++--- ...es_ItemsForEmeraldsAndItemsTrade_API.java} | 45 +++++++++---------- ...agerTrades_ItemsForEmeraldsTrade_API.java} | 44 +++++++++--------- ...n_API.java => MerchantOfferMixin_API.java} | 45 +++++++++---------- ...cipeMixin.java => MerchantOfferMixin.java} | 38 ++++++++-------- .../EntityVillager_ITradeListMixin_API.java | 7 +-- .../core/util/datafix/DataFixerMixin.java | 3 +- .../core/village/VillageMixin.java | 3 +- src/main/resources/mixins.common.api.json | 14 +++--- src/main/resources/mixins.common.core.json | 6 +-- 13 files changed, 154 insertions(+), 140 deletions(-) rename src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/{EntityVillager_EmeraldForItemsMixin_API.java => VillagerTrades_EmeraldForItemsTradeMixin_API.java} (73%) rename src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/{EntityVillager_ListEnchantedItemForEmeraldsMixin_API.java => VillagerTrades_EnchantItemForEmeraldsTrade_API.java} (67%) rename src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/{EntityVillager_ListEnchantedBookForEmeraldsMixin_API.java => VillagerTrades_EnchantedBookForEmeraldsTradeMixin_API.java} (77%) rename src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/{EntityVillager_ItemAndEmeraldToItemMixin_API.java => VillagerTrades_ItemsForEmeraldsAndItemsTrade_API.java} (68%) rename src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/{EntityVillager_ListItemForEmeraldsMixin_API.java => VillagerTrades_ItemsForEmeraldsTrade_API.java} (60%) rename src/main/java/org/spongepowered/common/mixin/api/mcp/village/{MerchantRecipeMixin_API.java => MerchantOfferMixin_API.java} (73%) rename src/main/java/org/spongepowered/common/mixin/core/village/{MerchantRecipeMixin.java => MerchantOfferMixin.java} (67%) rename src/main/java/org/spongepowered/common/mixin/{ => invalid}/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java (92%) rename src/main/java/org/spongepowered/common/mixin/{ => invalid}/core/util/datafix/DataFixerMixin.java (92%) rename src/main/java/org/spongepowered/common/mixin/{ => invalid}/core/village/VillageMixin.java (93%) diff --git a/src/main/java/org/spongepowered/common/item/util/TradeOfferUtil.java b/src/main/java/org/spongepowered/common/item/util/TradeOfferUtil.java index 26932ca6ebd..e0f75a6a39c 100644 --- a/src/main/java/org/spongepowered/common/item/util/TradeOfferUtil.java +++ b/src/main/java/org/spongepowered/common/item/util/TradeOfferUtil.java @@ -24,19 +24,20 @@ */ package org.spongepowered.common.item.util; +import net.minecraft.item.MerchantOffer; import net.minecraft.village.MerchantRecipe; import org.spongepowered.api.item.merchant.TradeOffer; public class TradeOfferUtil { - public static MerchantRecipe toNative(TradeOffer tradeOffer) { - if (tradeOffer instanceof MerchantRecipe) { - return (MerchantRecipe) tradeOffer; + public static MerchantOffer toNative(TradeOffer tradeOffer) { + if (tradeOffer instanceof MerchantOffer) { + return (MerchantOffer) tradeOffer; } throw new NativeTradeOfferException("The supplied trade offer was not native to the current platform"); } - public static TradeOffer fromNative(MerchantRecipe merchantRecipe) { + public static TradeOffer fromNative(MerchantOffer merchantRecipe) { if (merchantRecipe instanceof TradeOffer || merchantRecipe == null) { return (TradeOffer) merchantRecipe; } diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_EmeraldForItemsMixin_API.java b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EmeraldForItemsTradeMixin_API.java similarity index 73% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_EmeraldForItemsMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EmeraldForItemsTradeMixin_API.java index 27f2c1aea7f..744bc1219d8 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_EmeraldForItemsMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EmeraldForItemsTradeMixin_API.java @@ -26,11 +26,10 @@ import static com.google.common.base.Preconditions.checkNotNull; -import net.minecraft.entity.merchant.villager.VillagerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.item.MerchantOffer; import org.spongepowered.api.item.merchant.Merchant; import org.spongepowered.api.item.merchant.TradeOffer; import org.spongepowered.api.item.merchant.TradeOfferGenerator; @@ -44,23 +43,25 @@ // added as the only thing needing to be done is a simple default implementation // with an empty MerchantRecipeList and diff the list with an empty one and // provide the resulting diff'ed MerchantRecipe (TradeOffer) as the result. -@Mixin(VillagerEntity.EmeraldForItems.class) -public class EntityVillager_EmeraldForItemsMixin_API implements TradeOfferGenerator { +// +// i509VCB: Yes the classes which implement ITrade, like ItemsForEmeraldsAndItemsTrade are package private +// For clarification this trade is multiple Items -> 1 Emerald +// TODO: These need a new home +@Mixin(targets = "net/minecraft/entity/merchant/villager/VillagerTrades$EmeraldForItemsTrade") +public class VillagerTrades_EmeraldForItemsTradeMixin_API implements TradeOfferGenerator { - @Shadow public Item buyingItem; - @Shadow public VillagerEntity.PriceInfo price; + @Shadow public Item tradeItem; + @Shadow public int count; // Amount of item required to receive an emerald + @Shadow public int maxUses; + @Shadow public int xpValue; + @Shadow public float priceMultiplier; @Override public TradeOffer apply(Random random) { checkNotNull(random, "Random cannot be null!"); - int buyingCount = 1; - if (this.price != null) { - buyingCount = this.price.getPrice(random); - } - - final ItemStack buyingItem = new ItemStack(this.buyingItem, buyingCount, 0); - return (TradeOffer) new MerchantRecipe(buyingItem, Items.EMERALD); + final ItemStack buyingItem = new ItemStack(this.tradeItem, count); + return (TradeOffer) new MerchantOffer(buyingItem, new ItemStack(Items.EMERALD), maxUses, xpValue, priceMultiplier); } @Override diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListEnchantedItemForEmeraldsMixin_API.java b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EnchantItemForEmeraldsTrade_API.java similarity index 67% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListEnchantedItemForEmeraldsMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EnchantItemForEmeraldsTrade_API.java index 5d66a1dc219..c43c0f53776 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListEnchantedItemForEmeraldsMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EnchantItemForEmeraldsTrade_API.java @@ -27,10 +27,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.merchant.villager.VillagerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.item.MerchantOffer; import org.spongepowered.api.item.merchant.Merchant; import org.spongepowered.api.item.merchant.TradeOffer; import org.spongepowered.api.item.merchant.TradeOfferGenerator; @@ -44,25 +43,27 @@ // added as the only thing needing to be done is a simple default implementation // with an empty MerchantRecipeList and diff the list with an empty one and // provide the resulting diff'ed MerchantRecipe (TradeOffer) as the result. -@Mixin(VillagerEntity.ListEnchantedItemForEmeralds.class) -public class EntityVillager_ListEnchantedItemForEmeraldsMixin_API implements TradeOfferGenerator { +// +// i509VCB: Yes the classes which implement ITrade, like ItemsForEmeraldsAndItemsTrade are package private +// For clarification this trade is Emeralds -> Enchanted Item +// TODO: These need a new home +@Mixin(targets = "net/minecraft/entity/merchant/villager/VillagerTrades$EnchantedItemForEmeraldsTrade") +public class VillagerTrades_EnchantItemForEmeraldsTrade_API implements TradeOfferGenerator { - @Shadow public ItemStack enchantedItemStack; - @Shadow public VillagerEntity.PriceInfo priceInfo; + @Shadow public ItemStack sellingStack; // Note this is not enchanted yet. + @Shadow public int emeraldCount; + @Shadow public int maxUses; + @Shadow public int xpValue; + @Shadow public float priceMultiplier; @Override public TradeOffer apply(Random random) { checkNotNull(random, "Random cannot be null!"); - int emeraldCount = 1; - - if (this.priceInfo != null) { - emeraldCount = this.priceInfo.getPrice(random); - } - - ItemStack itemstack = new ItemStack(Items.EMERALD, emeraldCount, 0); - ItemStack itemstack1 = new ItemStack(this.enchantedItemStack.getItem(), 1, this.enchantedItemStack.getMetadata()); - itemstack1 = EnchantmentHelper.addRandomEnchantment(random, itemstack1, 5 + random.nextInt(15), false); - return (TradeOffer) new MerchantRecipe(itemstack, itemstack1); + ItemStack emeraldItemStack = new ItemStack(Items.EMERALD, emeraldCount); + ItemStack enchantedItemStack = new ItemStack(this.sellingStack.getItem(), 1); + enchantedItemStack.setTag(this.sellingStack.getTag().copy()); + enchantedItemStack = EnchantmentHelper.addRandomEnchantment(random, enchantedItemStack, 5 + random.nextInt(15), false); + return (TradeOffer) new MerchantOffer(emeraldItemStack, enchantedItemStack, maxUses, xpValue, priceMultiplier); } diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListEnchantedBookForEmeraldsMixin_API.java b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EnchantedBookForEmeraldsTradeMixin_API.java similarity index 77% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListEnchantedBookForEmeraldsMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EnchantedBookForEmeraldsTradeMixin_API.java index 55bcde36643..d91f9bbc709 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListEnchantedBookForEmeraldsMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_EnchantedBookForEmeraldsTradeMixin_API.java @@ -28,16 +28,17 @@ import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentData; -import net.minecraft.entity.merchant.villager.VillagerEntity; import net.minecraft.item.EnchantedBookItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.item.MerchantOffer; import net.minecraft.util.math.MathHelper; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.util.registry.Registry; import org.spongepowered.api.item.merchant.Merchant; import org.spongepowered.api.item.merchant.TradeOffer; import org.spongepowered.api.item.merchant.TradeOfferGenerator; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import java.util.List; import java.util.Random; @@ -46,13 +47,18 @@ // added as the only thing needing to be done is a simple default implementation // with an empty MerchantRecipeList and diff the list with an empty one and // provide the resulting diff'ed MerchantRecipe (TradeOffer) as the result. -@Mixin(VillagerEntity.ListEnchantedBookForEmeralds.class) -public class EntityVillager_ListEnchantedBookForEmeraldsMixin_API implements TradeOfferGenerator { +// +// i509VCB: Yes the classes which implement ITrade, like ItemsForEmeraldsAndItemsTrade are package private +// For clarification this trade is Emeralds + Book -> Enchanted Book +// TODO: These need a new home +@Mixin(targets = "net/minecraft/entity/merchant/villager/VillagerTrades$EnchantedBookForEmeraldsTrade") +public class VillagerTrades_EnchantedBookForEmeraldsTradeMixin_API implements TradeOfferGenerator { + @Shadow int xpValue; @Override public TradeOffer apply(Random random) { checkNotNull(random, "Random cannot be null!"); - Enchantment enchantment = Enchantment.REGISTRY.getRandom(random); + Enchantment enchantment = Registry.ENCHANTMENT.getRandom(random); int enchantmentLevel = MathHelper.nextInt(random, enchantment.getMinLevel(), enchantment.getMaxLevel()); ItemStack itemstack = EnchantedBookItem.getEnchantedItemStack(new EnchantmentData(enchantment, enchantmentLevel)); int emeraldCount = 2 + random.nextInt(5 + enchantmentLevel * 10) + 3 * enchantmentLevel; @@ -64,8 +70,8 @@ public TradeOffer apply(Random random) { if (emeraldCount > 64) { emeraldCount = 64; } - - return (TradeOffer) new MerchantRecipe(new ItemStack(Items.BOOK), new ItemStack(Items.EMERALD, emeraldCount), itemstack); + // Vanilla seems to hardcode the max uses to 12 and a multiplier of 0.2 + return (TradeOffer) new MerchantOffer(new ItemStack(Items.BOOK), new ItemStack(Items.EMERALD, emeraldCount), itemstack, 12, this.xpValue, 0.2F); } diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ItemAndEmeraldToItemMixin_API.java b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_ItemsForEmeraldsAndItemsTrade_API.java similarity index 68% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ItemAndEmeraldToItemMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_ItemsForEmeraldsAndItemsTrade_API.java index aff99c3c670..ddf20316b7f 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ItemAndEmeraldToItemMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_ItemsForEmeraldsAndItemsTrade_API.java @@ -26,10 +26,9 @@ import static com.google.common.base.Preconditions.checkNotNull; -import net.minecraft.entity.merchant.villager.VillagerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.item.MerchantOffer; import org.spongepowered.api.item.merchant.Merchant; import org.spongepowered.api.item.merchant.TradeOffer; import org.spongepowered.api.item.merchant.TradeOfferGenerator; @@ -43,33 +42,33 @@ // added as the only thing needing to be done is a simple default implementation // with an empty MerchantRecipeList and diff the list with an empty one and // provide the resulting diff'ed MerchantRecipe (TradeOffer) as the result. -@Mixin(VillagerEntity.ItemAndEmeraldToItem.class) -public class EntityVillager_ItemAndEmeraldToItemMixin_API implements TradeOfferGenerator { +// +// i509VCB: Yes the classes which implement ITrade, like ItemsForEmeraldsAndItemsTrade are package private +// For clarification this trade is Emeralds + Item(s) -> A related item. +// This is similar to the Raw Cod + Emeralds -> Cooked Cod trade. +// TODO: These need a new home +@Mixin(targets = "net/minecraft/entity/merchant/villager/VillagerTrades$ItemsForEmeraldsAndItemsTrade") +public class VillagerTrades_ItemsForEmeraldsAndItemsTrade_API implements TradeOfferGenerator { - @Shadow public ItemStack buyingItemStack; - @Shadow public VillagerEntity.PriceInfo buyingPriceInfo; - @Shadow public ItemStack sellingItemstack; - @Shadow public VillagerEntity.PriceInfo sellingPriceInfo; + @Shadow private ItemStack buyingItem; + @Shadow private int buyingItemCount; + @Shadow private int emeraldCount; + @Shadow private ItemStack sellingItem; + @Shadow private int sellingItemCount; + @Shadow private int maxUses; + @Shadow private int xpValue; + @Shadow private float priceMultiplier; @Override public TradeOffer apply(Random random) { checkNotNull(random, "Random cannot be null!"); - int buyingCount = 1; - if (this.buyingPriceInfo != null) { - buyingCount = this.buyingPriceInfo.getPrice(random); - } - - int sellingCount = 1; - - if (this.sellingPriceInfo != null) { - sellingCount = this.sellingPriceInfo.getPrice(random); - } - - final ItemStack itemStackBuying = new ItemStack(this.buyingItemStack.getItem(), buyingCount, this.buyingItemStack.getMetadata()); - final ItemStack emeraldStack = new ItemStack(Items.EMERALD); - final ItemStack itemStackSelling = new ItemStack(this.sellingItemstack.getItem(), sellingCount, this.sellingItemstack.getMetadata()); - return (TradeOffer) new MerchantRecipe(itemStackBuying, emeraldStack, itemStackSelling); + final ItemStack itemStackBuying = new ItemStack(this.buyingItem.getItem(), buyingItemCount); + itemStackBuying.setTag(this.buyingItem.getTag().copy()); + final ItemStack emeraldStack = new ItemStack(Items.EMERALD, emeraldCount); + final ItemStack itemStackSelling = new ItemStack(this.sellingItem.getItem(), sellingItemCount); + itemStackSelling.setTag(sellingItem.getTag().copy()); + return (TradeOffer) new MerchantOffer(itemStackBuying, emeraldStack, itemStackSelling, maxUses, xpValue, priceMultiplier); } diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListItemForEmeraldsMixin_API.java b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_ItemsForEmeraldsTrade_API.java similarity index 60% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListItemForEmeraldsMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_ItemsForEmeraldsTrade_API.java index 981bea2831f..f8c9896ef17 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ListItemForEmeraldsMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/VillagerTrades_ItemsForEmeraldsTrade_API.java @@ -26,10 +26,9 @@ import static com.google.common.base.Preconditions.checkNotNull; -import net.minecraft.entity.merchant.villager.VillagerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.item.MerchantOffer; import org.spongepowered.api.item.merchant.Merchant; import org.spongepowered.api.item.merchant.TradeOffer; import org.spongepowered.api.item.merchant.TradeOfferGenerator; @@ -43,33 +42,36 @@ // added as the only thing needing to be done is a simple default implementation // with an empty MerchantRecipeList and diff the list with an empty one and // provide the resulting diff'ed MerchantRecipe (TradeOffer) as the result. -@Mixin(VillagerEntity.ListItemForEmeralds.class) -public class EntityVillager_ListItemForEmeraldsMixin_API implements TradeOfferGenerator { - - @Shadow public ItemStack itemToBuy; - @Shadow public VillagerEntity.PriceInfo priceInfo; +// +// i509VCB: Yes the classes which implement ITrade, like ItemsForEmeraldsAndItemsTrade are package private +// For clarification this trade is Emeralds -> Item(s) such as a generic Emeralds -> Bread trade.\ +// TODO: These need a new home +@Mixin(targets = "net/minecraft/entity/merchant/villager/VillagerTrades$ItemsForEmeraldsTrade") +public class VillagerTrades_ItemsForEmeraldsTrade_API implements TradeOfferGenerator { + @Shadow public ItemStack field_221208_a; // Item being sold to the customer + @Shadow public int emeraldCount; // Amount of emeralds required to be bought. + @Shadow public int field_221210_c; // Amount of item sold + @Shadow public int field_221211_d; // Max uses + @Shadow public int field_221212_e; // Exp rewarded from trade + @Shadow public float field_221213_f; // Price multiplier @Override public TradeOffer apply(Random random) { checkNotNull(random, "Random cannot be null!"); - int amount = 1; - - if (this.priceInfo != null) { - amount = this.priceInfo.getPrice(random); - } - - ItemStack itemstack; - ItemStack itemstack1; + ItemStack emeraldItemStack; + ItemStack sellingItem; - if (amount < 0) { - itemstack = new ItemStack(Items.EMERALD, 1, 0); - itemstack1 = new ItemStack(this.itemToBuy.getItem(), -amount, this.itemToBuy.getMetadata()); + if (emeraldCount < 0) { + emeraldItemStack = new ItemStack(Items.EMERALD); + sellingItem = new ItemStack(this.field_221208_a.getItem(), -field_221210_c); + sellingItem.setTag(this.field_221208_a.getTag().copy()); } else { - itemstack = new ItemStack(Items.EMERALD, amount, 0); - itemstack1 = new ItemStack(this.itemToBuy.getItem(), 1, this.itemToBuy.getMetadata()); + emeraldItemStack = new ItemStack(Items.EMERALD, emeraldCount); + sellingItem = new ItemStack(this.field_221208_a.getItem(), 1); + sellingItem.setTag(this.field_221208_a.getTag().copy()); } - return (TradeOffer) new MerchantRecipe(itemstack, itemstack1); + return (TradeOffer) new MerchantOffer(emeraldItemStack, sellingItem, field_221211_d, field_221212_e, field_221213_f); } diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/village/MerchantRecipeMixin_API.java b/src/main/java/org/spongepowered/common/mixin/api/mcp/village/MerchantOfferMixin_API.java similarity index 73% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/village/MerchantRecipeMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/api/mcp/village/MerchantOfferMixin_API.java index 2e62a04ec16..95345088824 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/village/MerchantRecipeMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/api/mcp/village/MerchantOfferMixin_API.java @@ -24,7 +24,7 @@ */ package org.spongepowered.common.mixin.api.mcp.village; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.item.MerchantOffer; import org.spongepowered.api.data.persistence.DataContainer; import org.spongepowered.api.data.persistence.Queries; import org.spongepowered.api.item.inventory.ItemStack; @@ -40,59 +40,58 @@ import javax.annotation.Nullable; @NonnullByDefault -@Mixin(MerchantRecipe.class) -public abstract class MerchantRecipeMixin_API implements TradeOffer { - - @Shadow public abstract net.minecraft.item.ItemStack getItemToBuy(); - @Shadow public abstract boolean hasSecondItemToBuy(); - @Shadow @Nullable public abstract net.minecraft.item.ItemStack getSecondItemToBuy(); - @Shadow public abstract net.minecraft.item.ItemStack getItemToSell(); - @Shadow public abstract int getToolUses(); - @Shadow public abstract int getMaxTradeUses(); - @Shadow public abstract boolean isRecipeDisabled(); - @Shadow public abstract boolean getRewardsExp(); +@Mixin(MerchantOffer.class) +public abstract class MerchantOfferMixin_API implements TradeOffer { + + @Shadow public abstract net.minecraft.item.ItemStack getBuyingStackFirst(); + @Shadow @Nullable public abstract net.minecraft.item.ItemStack getBuyingStackSecond(); + @Shadow public abstract net.minecraft.item.ItemStack getSellingStack(); + @Shadow public abstract int shadow$getUses(); + @Shadow public abstract int func_222214_i(); // getMaxUses + @Shadow public abstract boolean hasNoUsesLeft(); + @Shadow public abstract boolean getDoesRewardExp(); @Override public ItemStackSnapshot getFirstBuyingItem() { - return ((ItemStack) this.getItemToBuy()).createSnapshot(); + return ((ItemStack) this.getBuyingStackFirst()).createSnapshot(); } @Override public boolean hasSecondItem() { - return this.hasSecondItemToBuy(); + return this.getBuyingStackSecond() != net.minecraft.item.ItemStack.EMPTY; } @Override public Optional getSecondBuyingItem() { - if (this.getSecondItemToBuy() == null) { + if (this.getBuyingStackSecond() == null) { return Optional.empty(); } - return Optional.of(((ItemStack) this.getSecondItemToBuy()).createSnapshot()); + return Optional.of(((ItemStack) this.getBuyingStackSecond()).createSnapshot()); } @Override public ItemStackSnapshot getSellingItem() { - return ((ItemStack) this.getItemToSell()).createSnapshot(); + return ((ItemStack) this.getSellingStack()).createSnapshot(); } @Override public int getUses() { - return this.getToolUses(); + return this.shadow$getUses(); } @Override public int getMaxUses() { - return this.getMaxTradeUses(); + return this.func_222214_i(); } @Override public boolean hasExpired() { - return this.isRecipeDisabled(); + return this.hasNoUsesLeft(); } @Override public boolean doesGrantExperience() { - return this.getRewardsExp(); + return this.getDoesRewardExp(); } @Override @@ -106,9 +105,9 @@ public DataContainer toContainer() { .set(Queries.CONTENT_VERSION, this.getContentVersion()) .set(Constants.Item.TradeOffer.FIRST_QUERY, this.getFirstBuyingItem()) .set(Constants.Item.TradeOffer.SECOND_QUERY, this.hasSecondItem() ? this.getSecondBuyingItem().get() : "none") - .set(Constants.Item.TradeOffer.BUYING_QUERY, this.getItemToBuy()) + .set(Constants.Item.TradeOffer.BUYING_QUERY, this.getBuyingStackFirst()) .set(Constants.Item.TradeOffer.EXPERIENCE_QUERY, this.doesGrantExperience()) - .set(Constants.Item.TradeOffer.MAX_QUERY, this.getMaxTradeUses()) + .set(Constants.Item.TradeOffer.MAX_QUERY, this.func_222214_i()) .set(Constants.Item.TradeOffer.USES_QUERY, this.getUses()); } diff --git a/src/main/java/org/spongepowered/common/mixin/core/village/MerchantRecipeMixin.java b/src/main/java/org/spongepowered/common/mixin/core/village/MerchantOfferMixin.java similarity index 67% rename from src/main/java/org/spongepowered/common/mixin/core/village/MerchantRecipeMixin.java rename to src/main/java/org/spongepowered/common/mixin/core/village/MerchantOfferMixin.java index 1ff18a665a2..5d0380f643b 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/village/MerchantRecipeMixin.java +++ b/src/main/java/org/spongepowered/common/mixin/core/village/MerchantOfferMixin.java @@ -24,7 +24,7 @@ */ package org.spongepowered.common.mixin.core.village; -import net.minecraft.village.MerchantRecipe; +import net.minecraft.item.MerchantOffer; import org.spongepowered.api.item.inventory.ItemStack; import org.spongepowered.api.item.inventory.ItemStackComparators; import org.spongepowered.asm.mixin.Mixin; @@ -32,18 +32,20 @@ import javax.annotation.Nullable; -@Mixin(MerchantRecipe.class) -public abstract class MerchantRecipeMixin { +@Mixin(MerchantOffer.class) +public abstract class MerchantOfferMixin { - @Shadow public abstract net.minecraft.item.ItemStack getItemToBuy(); - @Shadow @Nullable public abstract net.minecraft.item.ItemStack getSecondItemToBuy(); - @Shadow public abstract net.minecraft.item.ItemStack getItemToSell(); - @Shadow public abstract int getToolUses(); - @Shadow public abstract int getMaxTradeUses(); - @Shadow public abstract boolean getRewardsExp(); + @Shadow public abstract net.minecraft.item.ItemStack getBuyingStackFirst(); + @Shadow @Nullable public abstract net.minecraft.item.ItemStack getBuyingStackSecond(); + @Shadow public abstract net.minecraft.item.ItemStack getSellingStack(); + @Shadow public abstract int getUses(); + @Shadow public abstract boolean getDoesRewardExp(); + @Shadow public abstract int func_222214_i(); // getMaxUses - // This is a little questionable, since we're mixing into a Mixnecraft class. - // However, Vanill adoesn't override equals(), so no one except plugins + @Shadow public abstract int getGivenExp(); + + // This is a little questionable, since we're mixing into a Minecraft class. + // However, Vanilla doesn't override equals(), so no one except plugins // should be calling it, @Override public boolean equals(Object o) { @@ -53,12 +55,12 @@ public boolean equals(Object o) { if (o == null || this.getClass() != o.getClass()) { return false; } - MerchantRecipe other = (MerchantRecipe) o; - return ItemStackComparators.ALL.compare((ItemStack) this.getItemToBuy(), (ItemStack) other.getItemToBuy()) == 0 - && ItemStackComparators.ALL.compare((ItemStack) this.getSecondItemToBuy(), (ItemStack) other.getSecondItemToBuy()) == 0 - && ItemStackComparators.ALL.compare((ItemStack) this.getItemToSell(), (ItemStack) other.getItemToSell()) == 0 - && this.getToolUses() == other.getToolUses() - && this.getMaxTradeUses() == other.getMaxTradeUses() - && this.getRewardsExp() == other.getRewardsExp(); + MerchantOffer other = (MerchantOffer) o; + return ItemStackComparators.ALL.compare((ItemStack) this.getBuyingStackFirst(), (ItemStack) other.getBuyingStackFirst()) == 0 + && ItemStackComparators.ALL.compare((ItemStack) this.getBuyingStackSecond(), (ItemStack) other.getBuyingStackSecond()) == 0 + && ItemStackComparators.ALL.compare((ItemStack) this.getSellingStack(), (ItemStack) other.getSellingStack()) == 0 + && this.getUses() == other.getUses() + && this.func_222214_i() == other.func_222214_i() + && this.getGivenExp() == other.getGivenExp(); } } diff --git a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java b/src/main/java/org/spongepowered/common/mixin/invalid/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java similarity index 92% rename from src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java rename to src/main/java/org/spongepowered/common/mixin/invalid/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java index 28104ab30e9..0b514ff962c 100644 --- a/src/main/java/org/spongepowered/common/mixin/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java +++ b/src/main/java/org/spongepowered/common/mixin/invalid/api/mcp/entity/passive/EntityVillager_ITradeListMixin_API.java @@ -22,10 +22,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.mixin.api.mcp.entity.passive; +package org.spongepowered.common.mixin.invalid.api.mcp.entity.passive; import net.minecraft.entity.merchant.IMerchant; import net.minecraft.entity.merchant.villager.VillagerEntity; +import net.minecraft.item.MerchantOffer; import net.minecraft.village.MerchantRecipe; import net.minecraft.village.MerchantRecipeList; import org.spongepowered.api.item.merchant.Merchant; @@ -36,7 +37,7 @@ import java.util.List; import java.util.Random; -@Mixin(VillagerEntity.ITradeList.class) +@Mixin(MerchantOffers.ITradeList.class) public interface EntityVillager_ITradeListMixin_API extends TradeOfferListMutator, VillagerEntity.ITradeList { @Override @@ -47,7 +48,7 @@ default void accept(final Merchant owner, final List tradeOffers, fi } addMerchantRecipe((IMerchant) owner, tempList, random); tradeOffers.clear(); - for (final MerchantRecipe recipe : tempList) { + for (final MerchantOffer recipe : tempList) { tradeOffers.add(TradeOfferUtil.fromNative(recipe)); } } diff --git a/src/main/java/org/spongepowered/common/mixin/core/util/datafix/DataFixerMixin.java b/src/main/java/org/spongepowered/common/mixin/invalid/core/util/datafix/DataFixerMixin.java similarity index 92% rename from src/main/java/org/spongepowered/common/mixin/core/util/datafix/DataFixerMixin.java rename to src/main/java/org/spongepowered/common/mixin/invalid/core/util/datafix/DataFixerMixin.java index 712fd3cee92..f08f10dd904 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/util/datafix/DataFixerMixin.java +++ b/src/main/java/org/spongepowered/common/mixin/invalid/core/util/datafix/DataFixerMixin.java @@ -22,7 +22,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.mixin.core.util.datafix; +package org.spongepowered.common.mixin.invalid.core.util.datafix; import net.minecraft.util.datafix.DataFixer; import org.spongepowered.asm.mixin.Final; @@ -31,6 +31,7 @@ import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.ModifyConstant; +// i509VCB: DataFixerUpper makes this redundant due to the entire infrastructure changing. @Mixin(DataFixer.class) public abstract class DataFixerMixin { diff --git a/src/main/java/org/spongepowered/common/mixin/core/village/VillageMixin.java b/src/main/java/org/spongepowered/common/mixin/invalid/core/village/VillageMixin.java similarity index 93% rename from src/main/java/org/spongepowered/common/mixin/core/village/VillageMixin.java rename to src/main/java/org/spongepowered/common/mixin/invalid/core/village/VillageMixin.java index 7f1f0bbee9a..4b353545dad 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/village/VillageMixin.java +++ b/src/main/java/org/spongepowered/common/mixin/invalid/core/village/VillageMixin.java @@ -22,7 +22,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.mixin.core.village; +package org.spongepowered.common.mixin.invalid.core.village; import net.minecraft.util.math.BlockPos; import net.minecraft.village.Village; @@ -36,6 +36,7 @@ import org.spongepowered.common.bridge.world.WorldBridge; import org.spongepowered.common.bridge.world.chunk.AbstractChunkProviderBridge; +// 1.14 Removes the concept of a village being based on doors, instead it is based on points of interest now. @Mixin(Village.class) public abstract class VillageMixin { diff --git a/src/main/resources/mixins.common.api.json b/src/main/resources/mixins.common.api.json index 4fec603f93a..304ceb52276 100644 --- a/src/main/resources/mixins.common.api.json +++ b/src/main/resources/mixins.common.api.json @@ -184,12 +184,12 @@ "mcp.entity.passive.EntitySkeletonHorseMixin_API", "mcp.entity.passive.EntitySquidMixin_API", "mcp.entity.passive.EntityTameableMixin_API", - "mcp.entity.passive.EntityVillager_EmeraldForItemsMixin_API", - "mcp.entity.passive.EntityVillager_ItemAndEmeraldToItemMixin_API", - "mcp.entity.passive.EntityVillager_ITradeListMixin_API", - "mcp.entity.passive.EntityVillager_ListEnchantedBookForEmeraldsMixin_API", - "mcp.entity.passive.EntityVillager_ListEnchantedItemForEmeraldsMixin_API", - "mcp.entity.passive.EntityVillager_ListItemForEmeraldsMixin_API", + "org.spongepowered.common.mixin.invalid.api.mcp.entity.passive.VillagerTrades_EmeraldForItemsMixin_API", + "org.spongepowered.common.mixin.invalid.api.mcp.entity.passive.VillagerTrades_ItemAndEmeraldToItemMixin_API", + "org.spongepowered.common.mixin.invalid.api.mcp.entity.passive.EntityVillager_ITradeListMixin_API", + "org.spongepowered.common.mixin.invalid.api.mcp.entity.passive.VillagerTrades_ListEnchantedBookForEmeraldsMixin_API", + "org.spongepowered.common.mixin.invalid.api.mcp.entity.passive.VillagerTrades_ListEnchantedItemForEmeraldsMixin_API", + "org.spongepowered.common.mixin.invalid.api.mcp.entity.passive.VillagerTrades_ListItemForEmeraldsMixin_API", "mcp.entity.passive.EntityVillagerMixin_API", "mcp.entity.passive.EntityWaterMobMixin_API", "mcp.entity.passive.EntityWolfMixin_API", @@ -292,7 +292,7 @@ "mcp.util.SoundCategoryMixin_API", "mcp.util.SoundEventMixin_API", "mcp.util.text.ChatTypeMixin_API", - "mcp.village.MerchantRecipeMixin_API", + "mcp.village.MerchantOfferMixin_API", "mcp.world.BossInfo_ColorMixin_API", "mcp.world.BossInfo_OverlayMixin_API", "mcp.world.BossInfoMixin_API", diff --git a/src/main/resources/mixins.common.core.json b/src/main/resources/mixins.common.core.json index e9b58430e4b..1f254f7ad4f 100644 --- a/src/main/resources/mixins.common.core.json +++ b/src/main/resources/mixins.common.core.json @@ -322,7 +322,7 @@ "util.EnumFacingMixin", "util.IndirectEntityDamageSourceMixin", "util.PacketThreadUtil_1Mixin", - "util.datafix.DataFixerMixin", + "org.spongepowered.common.mixin.invalid.core.util.datafix.DataFixerMixin", "util.math.BlockPos_MutableBlockPosMixin_Optional", "util.math.Vec3iMixin", "util.text.StyleMixin", @@ -335,8 +335,8 @@ "util.text.TextFormattingMixin", "util.text.event.ClickEventMixin", "util.text.event.HoverEventMixin", - "village.MerchantRecipeMixin", - "village.VillageMixin", + "village.MerchantOfferMixin", + "org.spongepowered.common.mixin.invalid.core.village.VillageMixin", "world.ChunkCacheMixin", "world.dimension.DimensionTypeMixin", "world.ExplosionMixin",