diff --git a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java index 776c99e2..8fda496c 100644 --- a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java +++ b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java @@ -40,9 +40,7 @@ import java.io.File; /** * TODO | Port - * - Sign interactions * - TakeItemEntityPacket isEmpty case - * - Entity#move has changed *

* TODO | Protocol translation * - BucketItem#use canPlaceOn in <= 1.13 is missing diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinAbstractSignBlock.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinAbstractSignBlock.java new file mode 100644 index 00000000..df0b1280 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinAbstractSignBlock.java @@ -0,0 +1,21 @@ +package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.block; + +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import de.florianmichael.viafabricplus.protocolhack.ProtocolHack; +import net.minecraft.block.AbstractSignBlock; +import net.minecraft.block.entity.SignBlockEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(AbstractSignBlock.class) +public class MixinAbstractSignBlock { + + @Redirect(method = "onUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/SignBlockEntity;isWaxed()Z", ordinal = 1)) + public boolean removeCondition(SignBlockEntity instance) { + if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_19_4)) { + return false; + } + return instance.isWaxed(); + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinEntity.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinEntity.java index cc9a06aa..7d262d7c 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinEntity.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinEntity.java @@ -20,10 +20,13 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.entity; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import de.florianmichael.viafabricplus.protocolhack.ProtocolHack; import it.unimi.dsi.fastutil.objects.Object2DoubleMap; +import net.minecraft.block.BlockState; +import net.minecraft.block.FenceGateBlock; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; +import net.minecraft.registry.tag.BlockTags; import net.minecraft.registry.tag.TagKey; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; @@ -67,8 +70,11 @@ public abstract class MixinEntity { @Inject(method = "getVelocityAffectingPos", at = @At("HEAD"), cancellable = true) public void injectGetVelocityAffectingPos(CallbackInfoReturnable cir) { - if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - cir.setReturnValue(BlockPos.ofFloored(pos.x, getBoundingBox().minY - 1, pos.z)); + if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_19_4)) { + cir.setReturnValue(BlockPos.ofFloored(pos.x, getBoundingBox().minY - 0.5000001, pos.z)); + if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_14_4)) { + cir.setReturnValue(BlockPos.ofFloored(pos.x, getBoundingBox().minY - 1, pos.z)); + } } } @@ -164,4 +170,21 @@ public abstract class MixinEntity { instance.onLanding(); } } + + @Inject(method = "getPosWithYOffset", at = @At("HEAD"), cancellable = true) + public void changeLogic(float offset, CallbackInfoReturnable cir) { + if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_19_4)) { + final BlockPos blockPos = new BlockPos(MathHelper.floor(this.pos.x), MathHelper.floor(this.pos.y - (double)offset), MathHelper.floor(this.pos.z)); + + if (this.world.getBlockState(blockPos).isAir()) { + final BlockPos downBlockPos = blockPos.down(); + BlockState blockState = this.world.getBlockState(downBlockPos); + + if (blockState.isIn(BlockTags.FENCES) || blockState.isIn(BlockTags.WALLS) || blockState.getBlock() instanceof FenceGateBlock) { + cir.setReturnValue(downBlockPos); + } + } + cir.setReturnValue(blockPos); + } + } } diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json index 0c9ff232..8f1c5e2c 100644 --- a/src/main/resources/viafabricplus.mixins.json +++ b/src/main/resources/viafabricplus.mixins.json @@ -165,6 +165,7 @@ "defaultRequire": 1 }, "mixins": [ + "fixes.minecraft.block.MixinAbstractSignBlock", "fixes.minecraft.entity.MixinBoatEntity", "fixes.minecraft.entity.MixinCamelEntity", "fixes.minecraft.item.MixinBrushItem"