Поджечь негорючего моба

Версия Minecraft
1.16.5
API
Forge
198
1
24
Делаю мод, в котором зомби не должны гореть на солнце. С модовыми всё просто. А вот для ванильных пришлось вставить такой костыль:
Java:
@SubscribeEvent
public static void onUpdate(LivingEvent.LivingUpdateEvent event) {
    if(event.getEntityLiving() instanceof ZombieEntity) {
        if(event.getEntityLiving().isOnFire() && !event.getEntityLiving().isInLava() && !event.getEntityLiving().hasEffect(PotionsRegistry.POTION_MODDED_ONFIRE)) {
            if(!ConfigHandler.GENERAL.burnAtDay.get()) {
                event.getEntityLiving().clearFire();
            }
        }
    }
}

POTION_MODDED_ONFIRE ничего не делает, я им просто помечаю зомби которые были подожжены не от солнца.
Если поджечь зажигалкой блок под зомби, то он сгорит. Но что делать с мечами, зачаренными на "Заговор Огня" и луками на "Горящую Стрелу"?
 
Решение
Если нужно менять ванильное поведение, то да, либо костыли, либо хуки/миксины. Во втором случае вполне будет достаточно возвращаемого Inject’а в Zombie.class в метод isSunSensitive() в начало метода с возвратом значения false.
Про миксины можно немного почитать в статье на форуме и приложенных там источниках.
Миксины для Чайников! Практика.
154
17
97
Если нужно менять ванильное поведение, то да, либо костыли, либо хуки/миксины. Во втором случае вполне будет достаточно возвращаемого Inject’а в Zombie.class в метод isSunSensitive() в начало метода с возвратом значения false.
Про миксины можно немного почитать в статье на форуме и приложенных там источниках.
Миксины для Чайников! Практика.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Правда, я использовал Overwrite а не Inject, т.к. мне это показалось намного проще.
Не делай так, пожалуйста. Потом приходят всякие картошки и говорят что миксины зло и ломают совместимость между модами.
 
198
1
24
Тут это... при запуске из граблей работает, а на "боевом" клиенте - нет... Не крашит, тупо зомби горят как обычно.
В логах вот такое:
Код:
[17окт2021 23:43:07.779] [main/DEBUG] [mixin/]: Preparing mixins for MixinEnvironment[DEFAULT]
[17окт2021 23:43:07.779] [main/DEBUG] [mixin/]: Selecting config mixins.zombienation.json
[17окт2021 23:43:07.782] [main/WARN] [mixin/]: Reference map 'mixins.zombienation.refmap.json' for mixins.zombienation.json could not be read. If this is a development environment you can ignore this message
[17окт2021 23:43:07.783] [main/DEBUG] [mixin/]: Preparing mixins.zombienation.json (1)
[17окт2021 23:43:07.961] [main/DEBUG] [mixin/]: Registering new injector for @Inject with org.spongepowered.asm.mixin.injection.struct.CallbackInjectionInfo
[17окт2021 23:43:07.964] [main/DEBUG] [mixin/]: Registering new injector for @ModifyArg with org.spongepowered.asm.mixin.injection.struct.ModifyArgInjectionInfo
[17окт2021 23:43:07.965] [main/DEBUG] [mixin/]: Registering new injector for @ModifyArgs with org.spongepowered.asm.mixin.injection.struct.ModifyArgsInjectionInfo
[17окт2021 23:43:07.985] [main/DEBUG] [mixin/]: Registering new injector for @Redirect with org.spongepowered.asm.mixin.injection.struct.RedirectInjectionInfo
[17окт2021 23:43:07.988] [main/DEBUG] [mixin/]: Registering new injector for @ModifyVariable with org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo
[17окт2021 23:43:07.990] [main/DEBUG] [mixin/]: Registering new injector for @ModifyConstant with org.spongepowered.asm.mixin.injection.struct.ModifyConstantInjectionInfo
[17окт2021 23:43:08.475] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming func_219970_i with desc (Lnet/minecraft/item/ItemStack;)Z
[17окт2021 23:43:08.717] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/block/FlowingFluidBlock
[17окт2021 23:43:08.796] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/block/StairsBlock
[17окт2021 23:43:08.864] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming func_225533_a_ with desc (Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;Lnet/minecraft/util/math/BlockRayTraceResult;)Lnet/minecraft/util/ActionResultType;
[17окт2021 23:43:08.936] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming func_176208_a with desc (Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/entity/player/PlayerEntity;)V
[17окт2021 23:43:08.949] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/block/FlowerPotBlock
[17окт2021 23:43:09.099] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming func_225533_a_ with desc (Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;Lnet/minecraft/util/math/BlockRayTraceResult;)Lnet/minecraft/util/ActionResultType;
[17окт2021 23:43:10.144] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming func_230254_b_ with desc (Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResultType;
[17окт2021 23:43:10.867] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming func_82846_b with desc (Lnet/minecraft/entity/player/PlayerEntity;I)Lnet/minecraft/item/ItemStack;
[17окт2021 23:43:11.895] [pool-3-thread-1/DEBUG] [mixin/]: Mixing MixinZombieEntity from mixins.zombienation.json into net.minecraft.entity.monster.ZombieEntity
[17окт2021 23:43:11.967] [pool-3-thread-1/DEBUG] [mixin/]: Unexpected: Registered method isSunSensitive()Z in net.minecraft.entity.monster.ZombieEntity was not merged
[17окт2021 23:43:11.969] [pool-3-thread-1/WARN] [mixin/]: Mixin apply failed mixins.zombienation.json:MixinZombieEntity -> net.minecraft.entity.monster.ZombieEntity: org.spongepowered.asm.mixin.transformer.throwables.InvalidMixinException Overwrite target "isSunSensitive" was not located in target class net/minecraft/entity/monster/ZombieEntity
org.spongepowered.asm.mixin.transformer.throwables.InvalidMixinException: Overwrite target "isSunSensitive" was not located in target class net/minecraft/entity/monster/ZombieEntity
    at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.mergeMethod(MixinApplicatorStandard.java:577) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyNormalMethod(MixinApplicatorStandard.java:537) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMethods(MixinApplicatorStandard.java:518) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:386) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:325) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:383) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:365) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363) [mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:250) [mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.service.modlauncher.MixinTransformationHandler.processClass(MixinTransformationHandler.java:131) [mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at org.spongepowered.asm.launch.MixinLaunchPluginLegacy.processClass(MixinLaunchPluginLegacy.java:131) [mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4]
    at cpw.mods.modlauncher.serviceapi.ILaunchPluginService.processClassWithFlags(ILaunchPluginService.java:154) [modlauncher-8.0.9.jar:8.0.9+86+master.3cf110c]
    at cpw.mods.modlauncher.LaunchPluginHandler.offerClassNodeToPlugins(LaunchPluginHandler.java:85) [modlauncher-8.0.9.jar:?]
    at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:120) [modlauncher-8.0.9.jar:?]
    at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:265) [modlauncher-8.0.9.jar:?]
    at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:136) [modlauncher-8.0.9.jar:?]
    at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:98) [modlauncher-8.0.9.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_51]
    at java.lang.ClassLoader.defineClass1(Native Method) [?:1.8.0_51]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [?:1.8.0_51]
    at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:138) [modlauncher-8.0.9.jar:?]
    at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:98) [modlauncher-8.0.9.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) [?:1.8.0_51]
    at net.minecraft.entity.EntityType.<clinit>(EntityType.java:164) [?:?]
    at net.minecraft.world.gen.feature.DungeonsFeature.<clinit>(DungeonsFeature.java:24) [?:?]
    at net.minecraft.world.gen.feature.Feature.<clinit>(Feature.java:37) [?:?]
    at net.minecraft.world.gen.feature.Features.<clinit>(SourceFile:92) [?:?]
    at net.minecraft.util.registry.WorldGenRegistries.func_243672_e(WorldGenRegistries.java:39) [?:?]
    at net.minecraft.util.registry.WorldGenRegistries$$Lambda$635/192595297.get(Unknown Source) [?:?]
    at net.minecraft.util.registry.WorldGenRegistries.func_243668_a(WorldGenRegistries.java:89) [?:?]
    at net.minecraft.util.registry.WorldGenRegistries$$Lambda$641/988261461.accept(Unknown Source) [?:?]
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:676) [?:1.8.0_51]
    at net.minecraft.util.registry.WorldGenRegistries.<clinit>(WorldGenRegistries.java:88) [?:?]
    at net.minecraft.util.registry.Registry.<clinit>(Registry.java:464) [?:?]
    at net.minecraft.util.registry.Bootstrap.func_151354_b(Bootstrap.java:38) [?:?]
    at net.minecraft.client.main.Main.lambda$main$0(Main.java:123) [?:?]
    at net.minecraft.client.main.Main$$Lambda$567/1642319693.run(Unknown Source) [?:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_51]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_51]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_51]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]
 
Сверху