Skip to content

Commit

Permalink
Fix issues disguising as crystal shards and prevent disguises from dr…
Browse files Browse the repository at this point in the history
…opping items
  • Loading branch information
Sollace committed Feb 14, 2024
1 parent 1c2560c commit c0cff59
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@

import com.minelittlepony.unicopia.ability.magic.Caster;

import net.minecraft.entity.Entity;

public interface Guest {
void setHost(Caster<?> host);

Caster<?> getHost();

static boolean hasHost(Entity entity) {
return ((Guest)entity).getHost() != null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import java.util.Set;

import com.minelittlepony.unicopia.compat.pehkui.PehkuiEntityExtensions;
import com.minelittlepony.unicopia.entity.behaviour.Guest;

import net.minecraft.entity.Entity;
import net.minecraft.entity.Entity.RemovalReason;
import net.minecraft.fluid.Fluid;
import net.minecraft.registry.tag.TagKey;

public interface EntityDuck extends LavaAffine, PehkuiEntityExtensions {
public interface EntityDuck extends LavaAffine, PehkuiEntityExtensions, Guest {

Set<TagKey<Fluid>> getSubmergedFluidTags();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.minelittlepony.unicopia.entity.duck;

import com.minelittlepony.unicopia.entity.behaviour.Guest;

import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Hand;
import net.minecraft.util.math.Vec3d;

public interface LivingEntityDuck extends Guest {
public interface LivingEntityDuck extends EntityDuck {
void updateItemUsage(Hand hand, ItemStack stack, int time);

boolean isJumping();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.jetbrains.annotations.Nullable;

import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.entity.behaviour.Guest;
import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.particle.ParticleUtils;

Expand Down Expand Up @@ -172,9 +173,11 @@ public void tick() {
}
}

if (isDead() || isInvalid(getWorld(), getBlockPos(), getAttachmentFace())) {
kill();
ParticleUtils.spawnParticles(ParticleTypes.CLOUD, this, 10);
if (!Guest.hasHost(this)) {
if (isDead() || isInvalid(getWorld(), getBlockPos(), getAttachmentFace())) {
kill();
ParticleUtils.spawnParticles(ParticleTypes.CLOUD, this, 10);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ protected void onKilled(DamageSource source) {
}

protected void onHurt() {

}

@Override
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/com/minelittlepony/unicopia/mixin/MixinEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.Set;

import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -12,18 +13,35 @@
import com.minelittlepony.unicopia.entity.duck.LavaAffine;
import com.minelittlepony.unicopia.EquinePredicates;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.ability.magic.Caster;
import com.minelittlepony.unicopia.entity.Equine;
import com.minelittlepony.unicopia.entity.Living;
import com.minelittlepony.unicopia.entity.duck.EntityDuck;

import net.minecraft.entity.Entity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.Entity.PositionUpdater;
import net.minecraft.entity.Entity.RemovalReason;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.tag.TagKey;

@Mixin(Entity.class)
abstract class MixinEntity implements EntityDuck {
@Nullable
private transient Caster<?> host;

@Override
@Nullable
public Caster<?> getHost() {
return host;
}

@Override
public void setHost(Caster<?> host) {
this.host = host;
}

@Override
@Accessor("submergedFluidTag")
public abstract Set<TagKey<Fluid>> getSubmergedFluidTags();
Expand Down Expand Up @@ -83,4 +101,11 @@ private void updatePassengerPosition(Entity passenger, PositionUpdater positionU
info.cancel();
}
}

@Inject(method = "dropStack(Lnet/minecraft/item/ItemStack;F)Lnet/minecraft/entity/ItemEntity;", at = @At("HEAD"), cancellable = true)
private void onDropStack(ItemStack stack, float yOffset, CallbackInfoReturnable<ItemEntity> info) {
if (getHost() != null) {
info.setReturnValue(null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.util.Optional;

import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.injection.At;
Expand Down Expand Up @@ -41,8 +40,6 @@ abstract class MixinLivingEntity extends Entity implements LivingEntityDuck, Equ
private Optional<BlockPos> climbingPos;

private Equine<?> caster;
@Nullable
private transient Caster<?> host;

private MixinLivingEntity() { super(null, null); }

Expand All @@ -62,17 +59,6 @@ public Living<?> get() {
return (Living<?>)caster;
}

@Override
@Nullable
public Caster<?> getHost() {
return host;
}

@Override
public void setHost(Caster<?> host) {
this.host = host;
}

@Override
@Accessor("jumping")
public abstract boolean isJumping();
Expand Down

0 comments on commit c0cff59

Please sign in to comment.