diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java index ac6ce61..06748e2 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java @@ -2,11 +2,13 @@ package ru.octol1ttle.knockdowns.common.events; import dev.architectury.event.CompoundEventResult; import dev.architectury.event.EventResult; +import dev.architectury.event.events.common.BlockEvent; import dev.architectury.event.events.common.EntityEvent; import dev.architectury.event.events.common.InteractionEvent; import dev.architectury.event.events.common.PlayerEvent; import dev.architectury.event.events.common.TickEvent; import net.minecraft.SharedConstants; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; @@ -126,6 +128,12 @@ public class KnockdownsEvents { } return EventResult.pass(); }); + BlockEvent.PLACE.register((level, pos, state, placer) -> { + if (placer instanceof PlayerEntity player && KnockdownsUtils.isKnockedOrReviving(player)) { + return EventResult.interruptFalse(); + } + return EventResult.pass(); + }); InteractionEvent.RIGHT_CLICK_ITEM.register((player, hand) -> { if (KnockdownsUtils.isKnockedOrReviving(player)) { return CompoundEventResult.interruptFalse(hand == Hand.MAIN_HAND ? player.getMainHandStack() : player.getOffHandStack()); diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/LivingEntityMixin.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/LivingEntityMixin.java index 369a8b4..afd6eb4 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/LivingEntityMixin.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/LivingEntityMixin.java @@ -2,8 +2,12 @@ package ru.octol1ttle.knockdowns.common.mixin; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; 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.CallbackInfoReturnable; +import ru.octol1ttle.knockdowns.common.KnockdownsUtils; import ru.octol1ttle.knockdowns.common.api.IKnockableDown; @Mixin(LivingEntity.class) @@ -12,4 +16,12 @@ public abstract class LivingEntityMixin { private boolean dontTargetKnockedPlayers(boolean original, LivingEntity target) { return original && !(target instanceof IKnockableDown knockable && knockable.is_KnockedDown()); } + + @Inject(method = "tryUseTotem", at = @At("RETURN")) + private void resetKnockedDownOnTotemUse(DamageSource source, CallbackInfoReturnable cir) { + LivingEntity $this = (LivingEntity) (Object) this; + if (cir.getReturnValue() && $this instanceof IKnockableDown knockable && knockable.is_KnockedDown()) { + KnockdownsUtils.resetKnockedState(knockable); + } + } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 5e30f2e..48aa342 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -23,7 +23,6 @@ ] }, "mixins": [ - "knockdowns.mixins.json", "knockdowns-common.mixins.json" ], "depends": { diff --git a/fabric/src/main/resources/knockdowns.mixins.json b/fabric/src/main/resources/knockdowns.mixins.json deleted file mode 100644 index 76a92ed..0000000 --- a/fabric/src/main/resources/knockdowns.mixins.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "required": true, - "package": "ru.octol1ttle.knockdowns.fabric.mixin", - "compatibilityLevel": "JAVA_17", - "minVersion": "0.8", - "client": [ - ], - "mixins": [ - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index 490b2f1..5fd4535 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -15,7 +15,6 @@ loom { extraAccessWideners.add loom.accessWidenerPath.get().asFile.name mixinConfig "knockdowns-common.mixins.json" - mixinConfig "knockdowns.mixins.json" } } diff --git a/forge/src/main/resources/knockdowns.mixins.json b/forge/src/main/resources/knockdowns.mixins.json deleted file mode 100644 index bc08964..0000000 --- a/forge/src/main/resources/knockdowns.mixins.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "required": true, - "package": "ru.octol1ttle.knockdowns.forge.mixin", - "compatibilityLevel": "JAVA_17", - "minVersion": "0.8", - "client": [ - ], - "mixins": [ - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ed344f3..822bf00 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=knockdowns -mod_version=2.2.0 +mod_version=2.2.2 maven_group=ru.octol1ttle.knockdowns architectury_version=9.1.12