Implemented Movement changes

This commit is contained in:
FlorianMichael 2023-05-05 21:30:06 +02:00
parent efc94bf685
commit 89c41ffdc5
4 changed files with 47 additions and 4 deletions

View File

@ -40,9 +40,7 @@ import java.io.File;
/**
* TODO | Port
* - Sign interactions
* - TakeItemEntityPacket isEmpty case
* - Entity#move has changed
* <p>
* TODO | Protocol translation
* - BucketItem#use canPlaceOn in <= 1.13 is missing

View File

@ -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();
}
}

View File

@ -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<BlockPos> 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<BlockPos> 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);
}
}
}

View File

@ -165,6 +165,7 @@
"defaultRequire": 1
},
"mixins": [
"fixes.minecraft.block.MixinAbstractSignBlock",
"fixes.minecraft.entity.MixinBoatEntity",
"fixes.minecraft.entity.MixinCamelEntity",
"fixes.minecraft.item.MixinBrushItem"