diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 474bf9c0..314b419c 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -197,7 +197,7 @@ public class CarpetSettings rule("kelpGenerationGrowLimit", "feature", "limits growth limit of newly naturally generated kelp to this amount of blocks") .choices("25", "0 2 25").setNotStrict(), rule("renewableCoral", "feature", "Coral structures will grow with bonemeal from coral plants"), - rule("placementRotationFix", "fix", "fixes block placement rotation issue when player rotates quickly while placing blocks").wip(), + rule("placementRotationFix", "fix", "fixes block placement rotation issue when player rotates quickly while placing blocks"), rule("leadFix", "fix", "Fixes leads breaking/becoming invisible in unloaded chunks") .extraInfo("You may still get visibly broken leash links on the client side, but server side the link is still there.").wip(), rule("lagFreeSpawning", "optimizations", "Spawning requires much less CPU and Memory").boolAccelerate() diff --git a/src/main/java/carpet/mixins/DirectionMixin.java b/src/main/java/carpet/mixins/DirectionMixin.java new file mode 100644 index 00000000..f34b6998 --- /dev/null +++ b/src/main/java/carpet/mixins/DirectionMixin.java @@ -0,0 +1,26 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import carpet.utils.IEntity; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.Direction; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Direction.class) +public abstract class DirectionMixin +{ + @Redirect(method = "getEntityFacingOrder", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw(F)F")) + private static float ifGetYaw(Entity entity, float float_1) + { + if (!CarpetSettings.getBool("placementRotationFix")) + { + return -entity.getYaw(1.0F) * 0.017453292F; + } + else + { + return -((IEntity) entity).getMainYaw(1.0F) * 0.017453292F; + } + } +} diff --git a/src/main/java/carpet/mixins/EntityMixin.java b/src/main/java/carpet/mixins/EntityMixin.java new file mode 100644 index 00000000..32bea1a1 --- /dev/null +++ b/src/main/java/carpet/mixins/EntityMixin.java @@ -0,0 +1,22 @@ +package carpet.mixins; + +import carpet.utils.IEntity; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(Entity.class) +public abstract class EntityMixin implements IEntity +{ + @Shadow + public float yaw; + + @Shadow + public float prevYaw; + + public float getMainYaw(float partialTicks) + { + return partialTicks == 1.0F ? this.yaw : MathHelper.lerp(partialTicks, this.prevYaw, this.yaw); + } +} diff --git a/src/main/java/carpet/utils/IEntity.java b/src/main/java/carpet/utils/IEntity.java new file mode 100644 index 00000000..84f17320 --- /dev/null +++ b/src/main/java/carpet/utils/IEntity.java @@ -0,0 +1,6 @@ +package carpet.utils; + +public interface IEntity +{ + float getMainYaw(float partialTicks); +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 12cba0c2..1d624cb0 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -48,6 +48,8 @@ "FossilFeatureMixin", "BuriedTreasureGeneratorPieceMixin", "GravityStructureProcessorMixin", + "EntityMixin", + "DirectionMixin", "ServerChunkManagerMixin",