From 725ed0f0fbe1196a455ec378c47005a467f8b167 Mon Sep 17 00:00:00 2001 From: mystya Date: Sun, 20 Sep 2026 20:14:28 +0800 Subject: [PATCH] 1.0.0 --- README.md | 13 ++-- README_en.md | 11 +--- build.gradle | 6 +- settings.gradle | 2 +- src/main/java/mystya/mixin/BirthMixin.java | 25 +++++++ src/main/java/mystya/mixin/TradeMixin.java | 47 ++++++++++++++ src/main/java/mystya/mixin/carryon.java | 61 ------------------ .../resources/assets/non-carryon/icon.png | Bin 995 -> 0 bytes .../assets/non-carryon/lang/en_us.json | 4 -- .../assets/non-carryon/lang/zh_cn.json | 4 -- .../assets/non-villager-discount/icon.png | Bin 0 -> 19791 bytes .../non-villager-discount/lang/en_us.json | 4 ++ .../non-villager-discount/lang/zh_cn.json | 4 ++ src/main/resources/fabric.mod.json | 15 ++--- src/main/resources/non-carryon.mixins.json | 14 ---- .../non-villager-discount.mixins.json | 12 ++++ 16 files changed, 108 insertions(+), 114 deletions(-) create mode 100644 src/main/java/mystya/mixin/BirthMixin.java create mode 100644 src/main/java/mystya/mixin/TradeMixin.java delete mode 100644 src/main/java/mystya/mixin/carryon.java delete mode 100644 src/main/resources/assets/non-carryon/icon.png delete mode 100644 src/main/resources/assets/non-carryon/lang/en_us.json delete mode 100644 src/main/resources/assets/non-carryon/lang/zh_cn.json create mode 100644 src/main/resources/assets/non-villager-discount/icon.png create mode 100644 src/main/resources/assets/non-villager-discount/lang/en_us.json create mode 100644 src/main/resources/assets/non-villager-discount/lang/zh_cn.json delete mode 100644 src/main/resources/non-carryon.mixins.json create mode 100644 src/main/resources/non-villager-discount.mixins.json diff --git a/README.md b/README.md index b3c412b..fdde042 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,8 @@ -# 自然之需:可抱起后代 -——三小时摸鱼作品 +# 自然之需:村民交易打折 +——花费一天半的摸鱼作 [English readme here](./README_en.md) -在使用 carryon 抱起生物的时候,默认是不能抱起敌对生物的——很合理,毕竟直觉上它们会反抗。 +玩家生下的村民给予对应玩家相应折扣,力度和一次[骨折](https://www.bilibili.com/video/av377809712)相当。 -但是,自然之需有一个选项“敌对后代不攻击玩家”,这意味着它们大概不会反抗你抱起来了。 - -因此,我们将此限制解除:如果是玩家产下的后代(无论谁生的,因为自然之需没有记录后代的母亲是哪个玩家),则无视敌对和体型限制,使其更符合直觉。 - -## todo -此 mod 没有读取自然之需的配置 `NeedsOfNature.getConfig().pregnancyFriendlyMobsIgnorePlayers()` 也没有新建一个配置,因为作为只有一个选项的 mod,关掉还不如直接卸了方便些。 \ No newline at end of file +图标是gpt画的 \ No newline at end of file diff --git a/README_en.md b/README_en.md index 8c0e760..5f09054 100644 --- a/README_en.md +++ b/README_en.md @@ -1,12 +1,7 @@ -# Needs of Nature: Picking Up Offspring +# Needs of Nature: Villager discount [中文文档](./README.md) -By default, the `carryon` mod prevents players from picking up hostile creatures—which makes sense, as one would intuitively expect them to resist. +Villagers offer corresponding discounts to the player parent, equivalent in magnitude to the discount granted upon curing a zombie villager. -However, the "Needs of Nature" mod includes an option called "Spawned hostiles ignore players," implying that such offspring likely wouldn't resist being picked up. - -Therefore, we have lifted this restriction: if the offspring was produced by a player (regardless of which specific player gave birth, as "Needs of Nature" does not track the mother's identity), the hostility and size constraints are ignored, making the behavior more intuitive. - -## TODO -This mod neither reads the "Needs of Nature" configuration setting `NeedsOfNature.getConfig().pregnancyFriendlyMobsIgnorePlayers()` nor introduces a new config option; since this mod has only a single function, simply uninstalling it is more convenient than toggling a setting off. \ No newline at end of file +icon powered by gpt cuz i'm lazy. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7612d36..75d1e34 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ loom { splitEnvironmentSourceSets() mods { - "non-carryon" { + "non-villager-discount" { sourceSet sourceSets.main sourceSet sourceSets.client } @@ -36,11 +36,7 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" - - modImplementation files("lib/needsofnature-1.5.1+1.21.11.jar") -// modImplementation files("lib/carryon-fabric-1.21.11-2.9.2.jar") - modImplementation "maven.modrinth:carry-on:2.9.2" } processResources { diff --git a/settings.gradle b/settings.gradle index a0f9673..ce4e698 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,4 +10,4 @@ pluginManagement { } // Should match your modid -rootProject.name = 'non-carryon' +rootProject.name = 'non-villager-discount' diff --git a/src/main/java/mystya/mixin/BirthMixin.java b/src/main/java/mystya/mixin/BirthMixin.java new file mode 100644 index 0000000..326df66 --- /dev/null +++ b/src/main/java/mystya/mixin/BirthMixin.java @@ -0,0 +1,25 @@ +package mystya.mixin; + +import com.nonid.NeedsOfNature; +import net.minecraft.core.component.DataComponents; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.npc.villager.Villager; +import net.minecraft.world.item.component.CustomData; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(NeedsOfNature.class) +public class BirthMixin { + @Inject(method = "applyPregnancyMobFlags", at = @At("RETURN")) + private static void addDataToVillager(Mob mob, ServerPlayer player, CallbackInfo ci) { + if (!(mob instanceof Villager villager)) return; + CustomData customData = villager.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY); + CompoundTag copyTag = customData.copyTag(); + copyTag.putString("non.villagerDiscont.bornFrom", player.getStringUUID()); + villager.setComponent(DataComponents.CUSTOM_DATA, CustomData.of(copyTag)); + } +} diff --git a/src/main/java/mystya/mixin/TradeMixin.java b/src/main/java/mystya/mixin/TradeMixin.java new file mode 100644 index 0000000..cf16e3e --- /dev/null +++ b/src/main/java/mystya/mixin/TradeMixin.java @@ -0,0 +1,47 @@ +package mystya.mixin; + +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.entity.ai.gossip.GossipContainer; +import net.minecraft.world.entity.ai.gossip.GossipType; +import net.minecraft.world.entity.npc.villager.Villager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.component.CustomData; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.UUID; + +@Mixin(Villager.class) +public abstract class TradeMixin { + + + @Redirect( + method = "updateSpecialPrices", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/npc/villager/Villager;getPlayerReputation(Lnet/minecraft/world/entity/player/Player;)I" + ) + ) + private int applyAdditionalPlayerReputation(Villager villager, Player player) { + var original = villager.getPlayerReputation(player); + CustomData customData = villager.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY); + var strUUID = customData.copyTag().getString("non.villagerDiscont.bornFrom").orElse(null); + return player.getStringUUID().equals(strUUID) ? original + defaultReputation : original; + } + + @Unique + private static final int defaultReputation = getDefaultReputation(); + + @Unique + private static int getDefaultReputation() { + UUID shadow = new UUID(0L, 0L); + GossipContainer gossip = new GossipContainer(); + + gossip.add(shadow, GossipType.MAJOR_POSITIVE, 20); + gossip.add(shadow, GossipType.MINOR_POSITIVE, 25); + + return gossip.getReputation(shadow, p -> true); + } +} diff --git a/src/main/java/mystya/mixin/carryon.java b/src/main/java/mystya/mixin/carryon.java deleted file mode 100644 index 188ae23..0000000 --- a/src/main/java/mystya/mixin/carryon.java +++ /dev/null @@ -1,61 +0,0 @@ -package mystya.mixin; - -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.entity.player.Player; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; -import tschipp.carryon.common.carry.PickupHandler; -import org.spongepowered.asm.mixin.Mixin; -import tschipp.carryon.utils.SizeHelper; - -@Mixin(PickupHandler.class) - -public class carryon { - private static boolean hasTag(Entity e) { - return e.getTags().contains("non.pregnancy_friendly"); - } - - @Redirect( - method = "tryPickupEntity", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/EntityType;getCategory()Lnet/minecraft/world/entity/MobCategory;" - ) - ) - private static MobCategory skipMonsterCheck(EntityType instance, @Local(argsOnly = true) Entity entity) { - MobCategory category = entity.getType().getCategory(); - if (category == MobCategory.MONSTER && hasTag(entity)) - return MobCategory.CREATURE; - return category; - } - - - @Redirect( - method = "tryPickupEntity", - at = @At( - value = "INVOKE", - target = "Ltschipp/carryon/utils/SizeHelper;getRelativeEntityHeight(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/entity/Entity;)F" - ) - ) - private static float skipHeightCheck(Player player, Entity entity) { - if (hasTag(entity)) return 0; - return SizeHelper.getRelativeEntityHeight(player, entity); - } - - - @Redirect( - method = "tryPickupEntity", - at = @At( - value = "INVOKE", - target = "Ltschipp/carryon/utils/SizeHelper;getRelativeEntityWidth(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/entity/Entity;)F" - ) - ) - private static float skipWidthCheck(Player player, Entity entity) { - if (hasTag(entity)) return 0; - return SizeHelper.getRelativeEntityWidth(player, entity); - } - -} \ No newline at end of file diff --git a/src/main/resources/assets/non-carryon/icon.png b/src/main/resources/assets/non-carryon/icon.png deleted file mode 100644 index 79158aa8dc2aecfed82ca6ece18b49aacdd1f2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 zcmV<9104K`P)s(aEilK2AxDcG7%f2;cSx8Hl!3%KFqqo2_tXy63!D)6Gy zBlvW25hwmYtq0UF8y{$#|Hi=EFt@a=So86`j~9H@LNs22zw~H7!h4@cv<^Qr%*?b5 ztaRvi<&D`M-%Lw>1jb*FP^*7;1h(?#CEzAr!;^+Y_|xaWEALH!lfS(Sbe7IrL$isj ztQwPRm&_y0bZpa@*qje!9r*ooH2LSizB1G5CV4r&c@edh_m61$_ySEIUI6ot-2qE* z8Bplp-w)MT_Lu_rc6yZcBv5B*r%Cw*AAj9xbGNJAS}t!`Eum|sb>=SEpMi2TY9NRJT>%H*B0rE(84M{-Bmvf$ScOX``;_09PIvbn%r}Y z8oxf&bk}u~!*$v{rN1D>Qyz>S&QzO{X) zYZowV%OYa?KjlKrU`@74XfFVhuF3_lqySG&*DP>kYjR-ge(0c%1A>Ny4Vm^G?A+1@ zMjJOyD+k}6kq&O1vE4#&MVdIHjlBojR7J5Hn)jl$XnC8t(-?Cv1V=mGOf-6}fxI6nsyLWTHjxVruYQ z2^A#bt`qW<|E`6koUA(`P8kv*1#q^~j>0T=D<*9t4;HQe?Lg{<>tIn3$>Y)>Qiy7$ zSUyFsx|^r#-ot7AfnD8Jr; zLhwi!fEhtn1dNgef&PP(-*NhG&I^2sYsw16(<$e1>fKIem7z9>v#LM`YD-iFintYU zE4T-f?;-zkJMr=)E`_NP#QpKKe6!RDSuje<&N0Fy4fa(TR0n+fz6$nb*@s4$r16d} zjp=2uah`AI$~7r7D@sgM&z3MyLl@mkJS%v4T9!F?D|wliI9tf|+5c6;zX0YQK;|K` Rl@I^`002ovPDHLkV1kAB)oTC% diff --git a/src/main/resources/assets/non-carryon/lang/en_us.json b/src/main/resources/assets/non-carryon/lang/en_us.json deleted file mode 100644 index 503601f..0000000 --- a/src/main/resources/assets/non-carryon/lang/en_us.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "mystya.non-carryon.name": "non: allow carry on pickup hostile offspring", - "mystya.non-carryon.description": "skip carry on mob type check & size check for needs of nature pregnancy offspring" -} \ No newline at end of file diff --git a/src/main/resources/assets/non-carryon/lang/zh_cn.json b/src/main/resources/assets/non-carryon/lang/zh_cn.json deleted file mode 100644 index 27cbf5b..0000000 --- a/src/main/resources/assets/non-carryon/lang/zh_cn.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "mystya.non-carryon.name": "自然之需:可抱起后代", - "mystya.non-carryon.description": "自然之需产下的后代可以被玩家 carryon 抱起,无论是敌对生物还是大体积生物。" -} \ No newline at end of file diff --git a/src/main/resources/assets/non-villager-discount/icon.png b/src/main/resources/assets/non-villager-discount/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1fbaf2f89070e978331d24c7eb69091b2f39596c GIT binary patch literal 19791 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/non-villager-discount/lang/en_us.json b/src/main/resources/assets/non-villager-discount/lang/en_us.json new file mode 100644 index 0000000..7c5b0b9 --- /dev/null +++ b/src/main/resources/assets/non-villager-discount/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "mystya.non-villager-discount.name": "NoN: Villager discount", + "mystya.non-villager-discount.description": "Villagers offer discounts to the player parent, equivalent in magnitude to the discount granted upon curing a zombie villager." +} \ No newline at end of file diff --git a/src/main/resources/assets/non-villager-discount/lang/zh_cn.json b/src/main/resources/assets/non-villager-discount/lang/zh_cn.json new file mode 100644 index 0000000..7a90361 --- /dev/null +++ b/src/main/resources/assets/non-villager-discount/lang/zh_cn.json @@ -0,0 +1,4 @@ +{ + "mystya.non-villager-discount.name": "自然之需:村民打折", + "mystya.non-villager-discount.description": "玩家生下的村民给予对应玩家相应折扣,力度和一次骨折相当。" +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8221f19..9e71ab4 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,12 +1,12 @@ { "schemaVersion": 1, - "id": "non-carryon", + "id": "non-villager-discount", "version": "${version}", - "name": "allow carry on pickup hostile offspring", - "description": "skip carry on mob type check & size check for needs of nature pregnancy offspring", + "name": "NoN: Villager discount", + "description": "Villagers offer discounts to the player parent, equivalent in magnitude to the discount granted upon curing a zombie villager.", "modmenu": { - "nameTranslation": "mystya.non-carryon.name", - "descriptionTranslation": "mystya.non-carryon.description" + "nameTranslation": "mystya.non-villager-discount.name", + "descriptionTranslation": "mystya.non-villager-discount.description" }, "authors": [ "mystya" @@ -15,18 +15,17 @@ "sources": "example.com" }, "license": "CC BY-NC 4.0", - "icon": "assets/non-carryon/icon.png", + "icon": "assets/non-villager-discount/icon.png", "environment": "*", "entrypoints": { }, "mixins": [ - "non-carryon.mixins.json" + "non-villager-discount.mixins.json" ], "depends": { "fabricloader": ">=0.19.5", "minecraft": "~1.21.11", "java": ">=21", - "carryon": ">=2.9.2", "needsofnature": ">=1.5.1" } } \ No newline at end of file diff --git a/src/main/resources/non-carryon.mixins.json b/src/main/resources/non-carryon.mixins.json deleted file mode 100644 index ea67c2f..0000000 --- a/src/main/resources/non-carryon.mixins.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "required": true, - "package": "mystya.mixin", - "compatibilityLevel": "JAVA_21", - "mixins": [ - "carryon" - ], - "injectors": { - "defaultRequire": 1 - }, - "overwrites": { - "requireAnnotations": true - } -} \ No newline at end of file diff --git a/src/main/resources/non-villager-discount.mixins.json b/src/main/resources/non-villager-discount.mixins.json new file mode 100644 index 0000000..0735349 --- /dev/null +++ b/src/main/resources/non-villager-discount.mixins.json @@ -0,0 +1,12 @@ +{ + "required": true, + "package": "mystya.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": ["BirthMixin", "TradeMixin"], + "injectors": { + "defaultRequire": 1 + }, + "overwrites": { + "requireAnnotations": true + } +} \ No newline at end of file