aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jonas Gunz <himself@jonasgunz.de> 2020-05-14 23:07:12 +0200
committerGravatar Jonas Gunz <himself@jonasgunz.de> 2020-05-14 23:07:12 +0200
commite1f3d23b79c2841f83fd2d56f6d37725f5b8a3cb (patch)
tree25041466bd02aac0280e33a46ebeba37ad795a04
parent2c38ea1c8048a41d1f28be71929a57010559cd68 (diff)
downloadparquet-e1f3d23b79c2841f83fd2d56f6d37725f5b8a3cb.tar.gz
Added advanced villager trade tracking
-rw-r--r--src/main/java/re/jag/parquet/CustomStats.java14
-rw-r--r--src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java26
-rw-r--r--src/main/java/re/jag/parquet/mixin/StatsMixin.java29
-rw-r--r--src/main/resources/parquet.mixins.json4
4 files changed, 72 insertions, 1 deletions
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<Item> TRADED;
+
+ static {
+ TRADED = (StatType<Item>) 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<Item> registerType(String string, Registry<Item> registry){ return null; };
+
+ @Shadow
+ private static Identifier register(String string, StatFormatter statFormatter) { return null; }
+
+ private static final StatType<Item> 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": [
],