diff --git a/src/main/java/de/ellpeck/naturesaura/entities/EntityEffectInhibitor.java b/src/main/java/de/ellpeck/naturesaura/entities/EntityEffectInhibitor.java index 2dc8b9bb..e256a51c 100644 --- a/src/main/java/de/ellpeck/naturesaura/entities/EntityEffectInhibitor.java +++ b/src/main/java/de/ellpeck/naturesaura/entities/EntityEffectInhibitor.java @@ -19,14 +19,15 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.EntityDamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.Nullable; -// TODO these behave very weirdly in-world public class EntityEffectInhibitor extends Entity implements IVisualizable { private static final EntityDataAccessor INHIBITED_EFFECT = SynchedEntityData.defineId(EntityEffectInhibitor.class, EntityDataSerializers.STRING); @@ -108,11 +109,6 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable { } } - @Override - public boolean canBeCollidedWith() { - return true; - } - @Override protected void readAdditionalSaveData(CompoundTag compound) { this.setInhibitedEffect(new ResourceLocation(compound.getString("effect"))); @@ -132,14 +128,32 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable { return NetworkHooks.getEntitySpawningPacket(this); } + @Override + public boolean skipAttackInteraction(Entity entity) { + return entity instanceof Player player && (!this.level.mayInteract(player, this.blockPosition()) || this.hurt(DamageSource.playerAttack(player), 0.0F)); + } + @Override public boolean hurt(DamageSource source, float amount) { if (source instanceof EntityDamageSource && !this.level.isClientSide) { this.kill(); this.spawnAtLocation(this.getDrop(), 0F); return true; - } else + } else { return super.hurt(source, amount); + } + } + + @Override + public boolean isPickable() { + // SOMEHOW, this actually means "is raytraceable" IN GENERAL even though getPickResult is about middle-clicking, jesus fucking christ mojang + return true; + } + + @Nullable + @Override + public ItemStack getPickResult() { + return this.getDrop(); } public ItemStack getDrop() {