From 2f32cdf6bbb792f1e4685c68cc4ac02395e9d809 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 19 Aug 2021 21:24:42 +0200 Subject: [PATCH] Fixed crash when disguising as a block with a block entity --- .../client/render/WorldRenderDelegate.java | 4 ++-- .../behaviour/FallingBlockBehaviour.java | 8 ++++++-- .../unicopia/mixin/MixinBlockEntity.java | 18 ++++++++++++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java index afeb3478..632c565a 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java @@ -8,8 +8,8 @@ import com.minelittlepony.unicopia.entity.Equine; import com.minelittlepony.unicopia.entity.ItemImpl; import com.minelittlepony.unicopia.entity.Living; import com.minelittlepony.unicopia.entity.behaviour.Disguise; +import com.minelittlepony.unicopia.entity.behaviour.FallingBlockBehaviour; import com.minelittlepony.unicopia.entity.player.Pony; -import com.minelittlepony.unicopia.mixin.MixinBlockEntity; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; @@ -144,7 +144,7 @@ public class WorldRenderDelegate { if (blockEntity != null) { BlockEntityRenderer r = MinecraftClient.getInstance().getBlockEntityRenderDispatcher().get(blockEntity); if (r != null) { - ((MixinBlockEntity)blockEntity).setPos(e.getBlockPos()); + ((FallingBlockBehaviour.Positioned)blockEntity).setPos(e.getBlockPos()); matrices.push(); BlockState state = blockEntity.getCachedState(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java index 9c8a1e7b..0246c7b3 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java @@ -6,7 +6,6 @@ import java.util.Optional; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.DisguiseSpell; import com.minelittlepony.unicopia.entity.player.Pony; -import com.minelittlepony.unicopia.mixin.MixinBlockEntity; import com.minelittlepony.unicopia.mixin.MixinFallingBlock; import com.minelittlepony.unicopia.util.Tickable; @@ -25,6 +24,7 @@ import net.minecraft.entity.FallingBlockEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.state.property.Properties; import net.minecraft.tag.BlockTags; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; @@ -115,9 +115,13 @@ public class FallingBlockBehaviour extends EntityBehaviour { } be.setWorld(entity.world); - ((MixinBlockEntity)be).setPos(entity.getBlockPos()); + ((Positioned)be).setPos(entity.getBlockPos()); ceb.tick(); be.setWorld(null); } } + + public interface Positioned { + void setPos(BlockPos pos); + } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntity.java index 26b30410..8d98283e 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntity.java @@ -1,13 +1,23 @@ package com.minelittlepony.unicopia.mixin; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; + +import com.minelittlepony.unicopia.entity.behaviour.FallingBlockBehaviour; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; @Mixin(BlockEntity.class) -public interface MixinBlockEntity { - @Accessor("pos") - void setPos(BlockPos pos); +abstract class MixinBlockEntity implements FallingBlockBehaviour.Positioned { + @Shadow + @Mutable + private @Final BlockPos pos; + + @Override + public void setPos(BlockPos pos) { + this.pos = pos; + } }