1.1.0alpha
Compatibility
Changes
v1.1.0
This version introduces MixinExtras (bundled with Fabric Loader 0.19.3, no extra dependency required), and refactors all the standard Mixin injection code in the project into the cleaner, more maintainable @WrapOperation / @WrapMethod style, with behavior fully equivalent to the original implementation.
Mixin Refactor Overview
@Redirect→@WrapOperation(12)@ModifyArg→@WrapOperation(3)@Inject(HEAD cancel / RETURN return-value modification) →@WrapMethod(14)@Inject(additional logic / complex injections) kept as-is (21)
Changed Mixins
@WrapMethod (14)
| Mixin | Injected method | Feature |
|---|---|---|
creeper.CreeperMixin |
ServerExplosion.interactWithBlocks |
Stop creeper explosions from destroying blocks |
creeper.GhastMixin |
ServerExplosion.interactWithBlocks |
Stop ghast fireball explosions from destroying blocks |
creeper.EndCrystalExplosionMixin |
ServerExplosion.interactWithBlocks |
Stop end crystal explosions from destroying blocks |
vex.VexMixin |
Vex.tick |
Vexes die immediately when their evoker dies |
villager.VillagerMixin |
Villager.startSleeping |
Villager bed explodes in the nether/end |
apple.ApplyStatusEffectsConsumeEffectMixin |
ApplyStatusEffectsConsumeEffect.apply |
Legacy enchanted golden apple Regeneration V |
trialspawner.TrialSpawnerMixin |
TrialSpawner.getTargetCooldownLength |
Trial spawner cooldown 5 minutes |
enchantment.EnchantmentMixin |
Enchantment.areCompatible |
Stackable protection enchantments |
obsidian.WitherBossMixin |
WitherBoss.canDestroy |
Reinforced obsidian (immune to wither breaking) |
potion.BrewingStandMenuMixin |
BrewingStandMenu$PotionSlot.mayPlaceItem |
Allow ominous bottle in brewing stand GUI |
potion.BrewingStandMixin |
BrewingStandBlockEntity.isBrewable |
Ominous potion brewable check |
potion.PotionBrewingMixin |
PotionBrewing.isIngredient |
Totem of undying as brewing ingredient |
reinforceddeepslate.ReinforcedDeepslatePlayerMixin |
Player.hasCorrectToolForDrops |
Reinforced deepslate only minable by diamond/netherite pickaxe |
reinforceddeepslate.ReinforcedDeepslateBlockStateMixin |
BlockBehaviour$BlockStateBase.getDestroySpeed |
Reinforced deepslate mining time = obsidian |
@WrapOperation (15, AnvilMenuMixin contains 2)
| Mixin | Injected call | Feature |
|---|---|---|
anvil.AnvilMenuMixin |
DataSlot.get() / RandomSource.nextFloat() (lambda method_24922) |
Remove anvil too expensive / durable anvil |
anvil.FallingBlockEntityMixin |
RandomSource.nextFloat() |
Durable falling anvil |
enchantment.GrindstoneMenuMixin |
Holder.is(TagKey) (lambda method_58073) |
Grindstone removes curses |
endcrystal.EndCrystalItemMixin |
BlockState.is(Block) |
End crystal placement restriction |
enderdragon.EnderDragonMixin |
EndDragonFight.hasPreviouslyKilledDragon() |
Constant high ender dragon XP |
enderman.EnderManMixin |
BlockState.is(TagKey) |
Enderman no take blocks blacklist |
farmland.FarmBlockMixin |
FarmBlock.turnToDirt(...) |
Feather falling protects farmland |
itemneverdespawn.ItemEntityMixin |
ItemEntity.discard() |
Items never despawn |
piglin.PiglinAiMixin |
Brain.setMemoryWithExpiry(...) |
Custom piglin trade disabled time |
slime.SlimeMixin |
RandomSource.nextInt(I) |
Looting slime split |
snowgolem.SnowGolemMixin |
SnowGolem.hurtServer(...) |
Snow golem no melt |
tadpole.TadpoleMixin |
Tadpole.convertTo(...) AfterConversion |
Tadpole dye color |
villager.VillagerLightningMixin |
Villager.convertTo(...) |
Villager lightning no witch |
weakvindicator.MobMixin |
Entity.hurtServer(...) |
Weak vindicator (damage locked to 1) |
New Features (added earlier in this version)
dispenserIronGolemRepair: Dispensers repair iron golems with iron ingotscollectableReinforcedDeepslate: Collectable reinforced deepslateitemNeverDespawn: Items never despawnweakVindicator: Weak vindicator (attack damage locked to 1)
Dependencies
- No new external dependencies (MixinExtras is bundled with Fabric Loader 0.19.3)
v1.1.0
本版本引入 MixinExtras(Fabric Loader 0.19.3 内置,无需额外依赖),并将项目内全部基于标准 Mixin 注入的代码重构为更清晰、更易维护的 @WrapOperation / @WrapMethod 写法,行为与原实现完全等价。
Mixin 重构总览
@Redirect→@WrapOperation(12 处)@ModifyArg→@WrapOperation(3 处)@Inject(HEAD cancel / RETURN 改返回值)→@WrapMethod(14 处)@Inject(附加逻辑 / 复杂注入)保留原样(21 处)
更改过的 Mixin 清单
@WrapMethod(14 个)
| Mixin | 注入方法 | 功能 |
|---|---|---|
creeper.CreeperMixin |
ServerExplosion.interactWithBlocks |
阻止苦力怕爆炸破坏方块 |
creeper.GhastMixin |
ServerExplosion.interactWithBlocks |
阻止恶魂火球爆炸破坏方块 |
creeper.EndCrystalExplosionMixin |
ServerExplosion.interactWithBlocks |
阻止末地水晶爆炸破坏方块 |
vex.VexMixin |
Vex.tick |
唤魔者死亡后恼鬼立即死亡 |
villager.VillagerMixin |
Villager.startSleeping |
村民在下界/末地睡床爆炸 |
apple.ApplyStatusEffectsConsumeEffectMixin |
ApplyStatusEffectsConsumeEffect.apply |
旧版附魔金苹果再生 V |
trialspawner.TrialSpawnerMixin |
TrialSpawner.getTargetCooldownLength |
试炼刷怪笼冷却 5 分钟 |
enchantment.EnchantmentMixin |
Enchantment.areCompatible |
保护魔咒可叠加 |
obsidian.WitherBossMixin |
WitherBoss.canDestroy |
坚固黑曜石(免疫凋零破坏) |
potion.BrewingStandMenuMixin |
BrewingStandMenu$PotionSlot.mayPlaceItem |
酿造台 GUI 放行不祥之瓶 |
potion.BrewingStandMixin |
BrewingStandBlockEntity.isBrewable |
灾厄药水可酿造判定 |
potion.PotionBrewingMixin |
PotionBrewing.isIngredient |
不死图腾可作酿造材料 |
reinforceddeepslate.ReinforcedDeepslatePlayerMixin |
Player.hasCorrectToolForDrops |
强化深板岩仅钻石/下界合金镐可挖 |
reinforceddeepslate.ReinforcedDeepslateBlockStateMixin |
BlockBehaviour$BlockStateBase.getDestroySpeed |
强化深板岩挖掘时间 = 黑曜石 |
@WrapOperation(15 处,其中 AnvilMenuMixin 含 2 处)
| Mixin | 注入调用 | 功能 |
|---|---|---|
anvil.AnvilMenuMixin |
DataSlot.get() / RandomSource.nextFloat()(lambda method_24922) |
移除铁砧过于昂贵 / 耐用的铁砧 |
anvil.FallingBlockEntityMixin |
RandomSource.nextFloat() |
耐摔的铁砧 |
enchantment.GrindstoneMenuMixin |
Holder.is(TagKey)(lambda method_58073) |
砂轮移除诅咒 |
endcrystal.EndCrystalItemMixin |
BlockState.is(Block) |
末地水晶放置限制 |
enderdragon.EnderDragonMixin |
EndDragonFight.hasPreviouslyKilledDragon() |
持续高经验打龙 |
enderman.EnderManMixin |
BlockState.is(TagKey) |
末影人禁止搬方块黑名单 |
farmland.FarmBlockMixin |
FarmBlock.turnToDirt(...) |
摔落缓冲保护耕地 |
itemneverdespawn.ItemEntityMixin |
ItemEntity.discard() |
掉落物永不消失 |
piglin.PiglinAiMixin |
Brain.setMemoryWithExpiry(...) |
自定义猪灵受击拒绝交易时间 |
slime.SlimeMixin |
RandomSource.nextInt(I) |
抢夺史莱姆分裂 |
snowgolem.SnowGolemMixin |
SnowGolem.hurtServer(...) |
雪傀儡不融化 |
tadpole.TadpoleMixin |
Tadpole.convertTo(...) AfterConversion |
蝌蚪喂染料定色 |
villager.VillagerLightningMixin |
Villager.convertTo(...) |
村民雷击不变女巫 |
weakvindicator.MobMixin |
Entity.hurtServer(...) |
弱化卫道士(伤害锁定 1) |
新增功能(本版本内此前加入)
dispenserIronGolemRepair:发射器用铁锭修复铁傀儡collectableReinforcedDeepslate:可获取的强化深板岩itemNeverDespawn:掉落物永不消失weakVindicator:弱化卫道士(攻击伤害锁定为 1)
依赖
- 无新增外部依赖(MixinExtras 由 Fabric Loader 0.19.3 内置)
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:VwzdVyDc:ltxf6Ey3"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:VwzdVyDc:ltxf6Ey3"
}

