Skip to content

Commit 3baa114

Browse files
committed
jittleyang or a futilatoogan
1 parent 616d6d4 commit 3baa114

5 files changed

Lines changed: 274 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.cak.pattern_schematics.foundation;
2+
3+
4+
import com.simibubi.create.foundation.collision.Matrix3d;
5+
6+
public interface ExpandedContraptionRotationState {
7+
8+
void pattern_schematics$setXRotation(float f);
9+
void pattern_schematics$setYRotation(float f);
10+
void pattern_schematics$setZRotation(float f);
11+
12+
void pattern_schematics$setSecondYRotation(float f);
13+
14+
Matrix3d getMatrix();
15+
16+
float getXRotation();
17+
float getYRotation();
18+
float getZRotation();
19+
20+
void setMatrix(Matrix3d matrix);
21+
22+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.cak.pattern_schematics.foundation;
2+
3+
import com.simibubi.create.content.contraptions.AbstractContraptionEntity;
4+
import com.simibubi.create.foundation.collision.Matrix3d;
5+
import com.simibubi.create.foundation.utility.AngleHelper;
6+
7+
public class RolledContraptionRotationState extends AbstractContraptionEntity.ContraptionRotationState {
8+
9+
float roll;
10+
AbstractContraptionEntity.ContraptionRotationState source;
11+
12+
public RolledContraptionRotationState(AbstractContraptionEntity.ContraptionRotationState source) {
13+
this.source = source;
14+
}
15+
16+
public void setRoll(float roll) {
17+
this.roll = roll;
18+
}
19+
20+
@Override
21+
public boolean hasVerticalRotation() {
22+
return source.hasVerticalRotation();
23+
}
24+
25+
@Override
26+
public float getYawOffset() {
27+
return source.getYawOffset();
28+
}
29+
30+
Matrix3d matrix = null;
31+
32+
@Override
33+
public Matrix3d asMatrix() {
34+
ExpandedContraptionRotationState crs = (ExpandedContraptionRotationState) source;
35+
36+
if (matrix != null)
37+
return matrix;
38+
39+
Matrix3d matrix = new Matrix3d().asIdentity();
40+
if (crs.getXRotation() != 0)
41+
matrix.multiply(new Matrix3d().asXRotation(AngleHelper.rad(-crs.getXRotation())));
42+
if (crs.getYRotation() != 0)
43+
matrix.multiply(new Matrix3d().asYRotation(AngleHelper.rad(-crs.getYRotation())));
44+
if (roll != 0)
45+
matrix.multiply(new Matrix3d().asXRotation(AngleHelper.rad(-roll)));
46+
if (crs.getZRotation() != 0)
47+
matrix.multiply(new Matrix3d().asZRotation(AngleHelper.rad(-crs.getZRotation())));
48+
this.matrix = matrix;
49+
return matrix;
50+
}
51+
52+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.cak.pattern_schematics.mixin;
2+
3+
import com.cak.pattern_schematics.foundation.ExpandedContraptionRotationState;
4+
import com.simibubi.create.content.contraptions.AbstractContraptionEntity;
5+
import com.simibubi.create.foundation.collision.Matrix3d;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Shadow;
8+
9+
@Mixin(value = AbstractContraptionEntity.ContraptionRotationState.class, remap = false)
10+
public class ContraptionRotationStateMixin implements ExpandedContraptionRotationState {
11+
12+
@Shadow
13+
float xRotation;
14+
15+
@Shadow
16+
float yRotation;
17+
18+
@Shadow
19+
float zRotation;
20+
21+
@Shadow
22+
float secondYRotation;
23+
24+
@Shadow private Matrix3d matrix;
25+
26+
@Override
27+
public void pattern_schematics$setXRotation(float f) {
28+
xRotation = f;
29+
}
30+
31+
@Override
32+
public void pattern_schematics$setYRotation(float f) {
33+
yRotation = f;
34+
}
35+
36+
@Override
37+
public void pattern_schematics$setZRotation(float f) {
38+
zRotation = f;
39+
}
40+
41+
@Override
42+
public void pattern_schematics$setSecondYRotation(float f) {
43+
secondYRotation = f;
44+
}
45+
46+
@Override
47+
public Matrix3d getMatrix() {
48+
return matrix;
49+
}
50+
51+
@Override
52+
public float getXRotation() {
53+
return xRotation;
54+
}
55+
56+
@Override
57+
public float getYRotation() {
58+
return yRotation;
59+
}
60+
61+
@Override
62+
public float getZRotation() {
63+
return zRotation;
64+
}
65+
66+
@Override
67+
public void setMatrix(Matrix3d matrix) {
68+
this.matrix = matrix;
69+
}
70+
71+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package com.cak.pattern_schematics.mixin;
2+
3+
import com.cak.pattern_schematics.foundation.ExpandedContraptionRotationState;
4+
import com.cak.pattern_schematics.foundation.RolledContraptionRotationState;
5+
import com.jozufozu.flywheel.util.transform.TransformStack;
6+
import com.mojang.blaze3d.vertex.PoseStack;
7+
import com.simibubi.create.content.contraptions.AbstractContraptionEntity;
8+
import com.simibubi.create.content.contraptions.OrientedContraptionEntity;
9+
import com.simibubi.create.foundation.utility.VecHelper;
10+
import net.fabricmc.api.EnvType;
11+
import net.fabricmc.api.Environment;
12+
import net.minecraft.core.Direction;
13+
import net.minecraft.world.entity.Entity;
14+
import net.minecraft.world.entity.EntityType;
15+
import net.minecraft.world.entity.vehicle.AbstractMinecart;
16+
import net.minecraft.world.level.Level;
17+
import net.minecraft.world.phys.Vec3;
18+
import org.spongepowered.asm.mixin.Mixin;
19+
import org.spongepowered.asm.mixin.Overwrite;
20+
import org.spongepowered.asm.mixin.Shadow;
21+
22+
@Mixin(value = OrientedContraptionEntity.class, remap = false)
23+
public abstract class OrientedContraptionEntityMixin extends Entity{
24+
25+
public OrientedContraptionEntityMixin(EntityType<?> entityType, Level level) {
26+
super(entityType, level);
27+
}
28+
29+
@Shadow public abstract float getInitialYaw();
30+
31+
@Shadow public abstract float getViewXRot(float partialTicks);
32+
33+
@Shadow public abstract float getViewYRot(float partialTicks);
34+
35+
@Shadow public abstract float getYawOffset();
36+
37+
@Shadow public float pitch;
38+
39+
@Shadow public float yaw;
40+
41+
@Shadow protected abstract void repositionOnCart(PoseStack matrixStack, float partialTicks, Entity ridingEntity);
42+
43+
@Shadow protected abstract void repositionOnContraption(PoseStack matrixStack, float partialTicks, Entity ridingEntity);
44+
45+
/**
46+
* @author CAKE
47+
* @reason DONT CARE
48+
*/
49+
@Overwrite
50+
public AbstractContraptionEntity.ContraptionRotationState getRotationState() {
51+
ExpandedContraptionRotationState crs = (ExpandedContraptionRotationState) new AbstractContraptionEntity.ContraptionRotationState();
52+
53+
float yawOffset = getYawOffset();
54+
crs.pattern_schematics$setZRotation(pitch);
55+
crs.pattern_schematics$setYRotation(-yaw + yawOffset);
56+
57+
if (pitch != 0 && yaw != 0) {
58+
crs.pattern_schematics$setSecondYRotation(-yaw);
59+
crs.pattern_schematics$setYRotation(yawOffset);
60+
}
61+
62+
RolledContraptionRotationState rcrs = new RolledContraptionRotationState((AbstractContraptionEntity.ContraptionRotationState) crs);
63+
rcrs.setRoll(30);
64+
return rcrs;
65+
}
66+
67+
/**
68+
* @author CAKE
69+
* @reason DONT CARE
70+
*/
71+
@Overwrite
72+
public Vec3 applyRotation(Vec3 localPos, float partialTicks) {
73+
localPos = VecHelper.rotate(localPos, getInitialYaw(), Direction.Axis.Y);
74+
localPos = VecHelper.rotate(localPos, getViewXRot(partialTicks), Direction.Axis.Z);
75+
localPos = VecHelper.rotate(localPos, 30, Direction.Axis.X);
76+
localPos = VecHelper.rotate(localPos, getViewYRot(partialTicks), Direction.Axis.Y);
77+
return localPos;
78+
}
79+
80+
/**
81+
* @author CAKE
82+
* @reason DONT CARE
83+
*/
84+
@Overwrite
85+
public Vec3 reverseRotation(Vec3 localPos, float partialTicks) {
86+
localPos = VecHelper.rotate(localPos, -getViewYRot(partialTicks), Direction.Axis.Y);
87+
localPos = VecHelper.rotate(localPos, -30, Direction.Axis.X);
88+
localPos = VecHelper.rotate(localPos, -getViewXRot(partialTicks), Direction.Axis.Z);
89+
localPos = VecHelper.rotate(localPos, -getInitialYaw(), Direction.Axis.Y);
90+
return localPos;
91+
}
92+
93+
/**
94+
* @author CAKE
95+
* @reason DONT CARE
96+
*/
97+
@Overwrite
98+
@Environment(EnvType.CLIENT)
99+
public void applyLocalTransforms(PoseStack matrixStack, float partialTicks) {
100+
float angleInitialYaw = getInitialYaw();
101+
float angleYaw = getViewYRot(partialTicks);
102+
float anglePitch = getViewXRot(partialTicks);
103+
104+
matrixStack.translate(-.5f, 0, -.5f);
105+
106+
Entity ridingEntity = getVehicle();
107+
if (ridingEntity instanceof AbstractMinecart)
108+
repositionOnCart(matrixStack, partialTicks, ridingEntity);
109+
else if (ridingEntity instanceof AbstractContraptionEntity) {
110+
if (ridingEntity.getVehicle() instanceof AbstractMinecart)
111+
repositionOnCart(matrixStack, partialTicks, ridingEntity.getVehicle());
112+
else
113+
repositionOnContraption(matrixStack, partialTicks, ridingEntity);
114+
}
115+
116+
TransformStack.cast(matrixStack)
117+
.nudge(getId())
118+
.centre()
119+
.rotateY(angleYaw)
120+
.rotateX(getRoll(getContraption))//Create contraption expander
121+
.rotateZ(anglePitch)
122+
.rotateY(angleInitialYaw)
123+
.unCentre();
124+
}
125+
126+
127+
}

common/src/main/resources/pattern_schematics.common.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
],
88
"mixins": [
99
"AbstractContraptionEntityMixin",
10+
"ContraptionRotationStateMixin",
1011
"CreateClientMixin",
1112
"DeployBaseMixin",
1213
"DeployerMovementBehaviorMixin",
1314
"MovementContextMixin",
15+
"OrientedContraptionEntityMixin",
1416
"SchematicInstancesMixin",
1517
"SchematicItemMixin",
1618
"SchematicPrinterMixin",

0 commit comments

Comments
 (0)