From e1f3d23b79c2841f83fd2d56f6d37725f5b8a3cb Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Thu, 14 May 2020 23:07:12 +0200 Subject: Added advanced villager trade tracking --- src/main/java/re/jag/parquet/CustomStats.java | 14 +++++++++++ .../parquet/mixin/AbstractTraderEntityMixin.java | 26 +++++++++++++++++++ src/main/java/re/jag/parquet/mixin/StatsMixin.java | 29 ++++++++++++++++++++++ src/main/resources/parquet.mixins.json | 4 ++- 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/java/re/jag/parquet/CustomStats.java create mode 100644 src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java create mode 100644 src/main/java/re/jag/parquet/mixin/StatsMixin.java (limited to 'src') diff --git a/src/main/java/re/jag/parquet/CustomStats.java b/src/main/java/re/jag/parquet/CustomStats.java new file mode 100644 index 0000000..c9d69b8 --- /dev/null +++ b/src/main/java/re/jag/parquet/CustomStats.java @@ -0,0 +1,14 @@ +package re.jag.parquet; + +import net.minecraft.item.Item; +import net.minecraft.stat.StatType; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class CustomStats { + public static final StatType TRADED; + + static { + TRADED = (StatType) Registry.STAT_TYPE.get(new Identifier("traded")); + } +} diff --git a/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java b/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java new file mode 100644 index 0000000..654c7cd --- /dev/null +++ b/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java @@ -0,0 +1,26 @@ +package re.jag.parquet.mixin; + +import net.minecraft.entity.passive.AbstractTraderEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.village.TradeOffer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import re.jag.parquet.CustomStats; +import re.jag.parquet.Parquet; + +@Mixin(AbstractTraderEntity.class) +public class AbstractTraderEntityMixin { + @Shadow + PlayerEntity customer; + + @Inject(method="trade", at = @At("RETURN")) + private void onTrade(TradeOffer tradeOffer, CallbackInfo ci) { + if (this.customer instanceof ServerPlayerEntity) { + ((ServerPlayerEntity)customer).incrementStat( CustomStats.TRADED.getOrCreateStat( tradeOffer.getMutableSellItem().getItem() ) ); + } + } +} diff --git a/src/main/java/re/jag/parquet/mixin/StatsMixin.java b/src/main/java/re/jag/parquet/mixin/StatsMixin.java new file mode 100644 index 0000000..89463d8 --- /dev/null +++ b/src/main/java/re/jag/parquet/mixin/StatsMixin.java @@ -0,0 +1,29 @@ +package re.jag.parquet.mixin; + +import net.minecraft.item.Item; +import net.minecraft.stat.StatFormatter; +import net.minecraft.stat.StatType; +import net.minecraft.stat.Stats; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +/** + * Has to be a Mixin for the game to load on startup. + * */ + +@Mixin(Stats.class) +public class StatsMixin { + @Shadow + private static StatType registerType(String string, Registry registry){ return null; }; + + @Shadow + private static Identifier register(String string, StatFormatter statFormatter) { return null; } + + private static final StatType TRADED; + + static { + TRADED = registerType("traded", Registry.ITEM); + } +} diff --git a/src/main/resources/parquet.mixins.json b/src/main/resources/parquet.mixins.json index 710b231..5aa1f0a 100644 --- a/src/main/resources/parquet.mixins.json +++ b/src/main/resources/parquet.mixins.json @@ -9,7 +9,9 @@ "ServerPlayerEntityMixin", "BootstrapMixin", "FireWorkItemMixin", - "SellMapFactoryMixin" + "SellMapFactoryMixin", + "AbstractTraderEntityMixin", + "StatsMixin" ], "server": [ ], -- cgit v1.2.3