diff --git a/gradle.properties b/gradle.properties index 5e095f8..8545d76 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx2G loader_version=0.9.1+build.205 # Mod Properties - mod_version = 1.3.2 + mod_version = 1.3.3 maven_group = com.flemmli97.flan archives_base_name = flan diff --git a/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java b/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java index a75def3..d1c8ae0 100644 --- a/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java +++ b/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java @@ -29,7 +29,6 @@ import net.minecraft.entity.projectile.thrown.EnderPearlEntity; import net.minecraft.entity.projectile.thrown.PotionEntity; import net.minecraft.entity.vehicle.AbstractMinecartEntity; import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.entity.vehicle.MinecartEntity; import net.minecraft.entity.vehicle.StorageMinecartEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.packet.s2c.play.InventoryS2CPacket; @@ -165,9 +164,9 @@ public class EntityInteractEvents { return false; } - public static boolean preventDamage(LivingEntity entity, DamageSource source) { + public static boolean preventDamage(Entity entity, DamageSource source) { if (source.getAttacker() instanceof ServerPlayerEntity) - return attackSimple((ServerPlayerEntity) source.getAttacker(), entity, false) != ActionResult.PASS; + return attackSimple((ServerPlayerEntity) source.getAttacker(), entity, true) != ActionResult.PASS; else if (source.isExplosive() && !entity.world.isClient) { IPermissionContainer claim = ClaimStorage.get((ServerWorld) entity.world).getForPermissionCheck(entity.getBlockPos()); return claim != null && !claim.canInteract(null, PermissionRegistry.EXPLOSIONS, entity.getBlockPos()); @@ -185,7 +184,7 @@ public class EntityInteractEvents { BlockPos pos = entity.getBlockPos(); IPermissionContainer claim = storage.getForPermissionCheck(pos); if (claim != null) { - if (entity instanceof ArmorStandEntity || entity instanceof MinecartEntity || entity instanceof BoatEntity || entity instanceof ItemFrameEntity) + if (!(entity instanceof LivingEntity)) return claim.canInteract(player, PermissionRegistry.BREAKNONLIVING, pos, message) ? ActionResult.PASS : ActionResult.FAIL; if (entity instanceof PlayerEntity) return claim.canInteract(player, PermissionRegistry.HURTPLAYER, pos, message) ? ActionResult.PASS : ActionResult.FAIL; diff --git a/src/main/java/com/flemmli97/flan/mixin/EntityDamageMixin.java b/src/main/java/com/flemmli97/flan/mixin/EntityDamageMixin.java new file mode 100644 index 0000000..1b1dc6f --- /dev/null +++ b/src/main/java/com/flemmli97/flan/mixin/EntityDamageMixin.java @@ -0,0 +1,29 @@ +package com.flemmli97.flan.mixin; + +import com.flemmli97.flan.event.EntityInteractEvents; +import net.minecraft.entity.Entity; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.decoration.AbstractDecorationEntity; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.entity.decoration.EndCrystalEntity; +import net.minecraft.entity.vehicle.AbstractMinecartEntity; +import net.minecraft.entity.vehicle.BoatEntity; +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; + +@Mixin({LivingEntity.class, Entity.class, AbstractDecorationEntity.class, AbstractMinecartEntity.class, ArmorStandEntity.class, BoatEntity.class + , EndCrystalEntity.class, ItemEntity.class}) +public abstract class EntityDamageMixin { + + @Inject(method = "damage", at = @At(value = "HEAD"), cancellable = true) + public void onDamage(DamageSource source, float amount, CallbackInfoReturnable info) { + if (EntityInteractEvents.preventDamage((Entity) (Object) this, source)) { + info.setReturnValue(false); + info.cancel(); + } + } +} diff --git a/src/main/java/com/flemmli97/flan/mixin/LivingEntityMixin.java b/src/main/java/com/flemmli97/flan/mixin/LivingEntityMixin.java deleted file mode 100644 index b4c6350..0000000 --- a/src/main/java/com/flemmli97/flan/mixin/LivingEntityMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.flemmli97.flan.mixin; - -import com.flemmli97.flan.event.EntityInteractEvents; -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; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityMixin { - - @Inject(method = "damage", at = @At(value = "HEAD"), cancellable = true) - public void onDamage(DamageSource source, float amount, CallbackInfoReturnable info) { - if (EntityInteractEvents.preventDamage((LivingEntity) (Object) this, source)) { - info.setReturnValue(false); - info.cancel(); - } - } -} diff --git a/src/main/resources/flan.mixins.json b/src/main/resources/flan.mixins.json index fa0086a..03eb5f7 100644 --- a/src/main/resources/flan.mixins.json +++ b/src/main/resources/flan.mixins.json @@ -14,7 +14,7 @@ "XpEntityMixin", "WitherMixin", "IPersistentProjectileVars", - "LivingEntityMixin", + "EntityDamageMixin", "ItemStackMixin", "ILecternBlockValues", "FluidMixin",