Pretty rad

- Bump flywheel build.
- Fix all(?) places where radians methods were passed degrees
- Add DiffuseLightCalculator.
- Add overlay to belt and rotating types.
- Use joml quaternions in instance types.
This commit is contained in:
Jozufozu 2024-01-26 17:05:58 -08:00
parent b6d1f02d6a
commit 5038d04ac4
99 changed files with 360 additions and 319 deletions

View file

@ -160,6 +160,23 @@ repositories {
} }
} }
// Fix for loading non-mod libraries in dev-env, used for Miniball.
// https://gist.github.com/SizableShrimp/66b22f1b24c255e1491c8d98d3f11f83
// v--------------------------------------------------------------------v
configurations {
library
implementation.extendsFrom library
}
minecraft.runs.configureEach {
lazyToken('minecraft_classpath') {
configurations.library.copyRecursive().resolve().collect { it.absolutePath }.join(File.pathSeparator)
}
}
// ^--------------------------------------------------------------------^
dependencies { dependencies {
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
@ -167,9 +184,11 @@ dependencies {
jarJar.ranged(it, '[MC1.19.3-1.1.10,)') jarJar.ranged(it, '[MC1.19.3-1.1.10,)')
} }
jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") {
jarJar.ranged(it, '[0.6.10,0.6.11)') jarJar.ranged(it, '[1.0,2.0)')
} }
library 'com.dreizak:miniball:1.0.3'
implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")
if (flywheelInWorkspace) { if (flywheelInWorkspace) {

View file

@ -23,7 +23,7 @@ use_parchment = true
# dependency versions # dependency versions
registrate_version = MC1.20-1.3.3 registrate_version = MC1.20-1.3.3
flywheel_minecraft_version = 1.20.1 flywheel_minecraft_version = 1.20.1
flywheel_version = 1.0.0-alpha-27 flywheel_version = 1.0.0-alpha-32
jei_minecraft_version = 1.20.1 jei_minecraft_version = 1.20.1
jei_version = 15.2.0.22 jei_version = 15.2.0.22
curios_minecraft_version = 1.20.1 curios_minecraft_version = 1.20.1

View file

@ -18,8 +18,8 @@ public class AnimatedCrafter extends AnimatedKinetics {
matrixStack.translate(3, 16, 0); matrixStack.translate(3, 16, 0);
TransformStack.of(matrixStack) TransformStack.of(matrixStack)
.rotateX(-12.5f) .rotateXDegrees(-12.5f)
.rotateY(-22.5f); .rotateYDegrees(-22.5f);
int scale = 22; int scale = 22;
blockElement(cogwheel()) blockElement(cogwheel())

View file

@ -28,7 +28,7 @@ public class DirectionalExtenderScrollOptionSlot extends CenteredSideValueBoxTra
public void rotate(BlockState state, PoseStack ms) { public void rotate(BlockState state, PoseStack ms) {
if (!getSide().getAxis().isHorizontal()) if (!getSide().getAxis().isHorizontal())
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) + 180); .rotateYDegrees(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) + 180);
super.rotate(state, ms); super.rotate(state, ms);
} }
} }

View file

@ -541,9 +541,9 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity {
TransformStack.of(matrixStack) TransformStack.of(matrixStack)
.nudge(getId()) .nudge(getId())
.center() .center()
.rotateY(angleYaw) .rotateYDegrees(angleYaw)
.rotateZ(anglePitch) .rotateZDegrees(anglePitch)
.rotateY(angleInitialYaw) .rotateYDegrees(angleInitialYaw)
.uncenter(); .uncenter();
} }

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.actors; package com.simibubi.create.content.contraptions.actors;
import org.joml.Quaternionf; import org.joml.Quaternionf;
import org.joml.Quaternionfc;
import org.joml.Vector3f; import org.joml.Vector3f;
import com.jozufozu.flywheel.api.instance.InstanceHandle; import com.jozufozu.flywheel.api.instance.InstanceHandle;
@ -19,10 +20,7 @@ public class ActorInstance extends AbstractInstance {
public byte rotationAxisX; public byte rotationAxisX;
public byte rotationAxisY; public byte rotationAxisY;
public byte rotationAxisZ; public byte rotationAxisZ;
public float qX; public Quaternionf rotation = new Quaternionf();
public float qY;
public float qZ;
public float qW;
public byte rotationCenterX = 64; public byte rotationCenterX = 64;
public byte rotationCenterY = 64; public byte rotationCenterY = 64;
public byte rotationCenterZ = 64; public byte rotationCenterZ = 64;
@ -84,11 +82,8 @@ public class ActorInstance extends AbstractInstance {
return this; return this;
} }
public ActorInstance setLocalRotation(Quaternionf q) { public ActorInstance setLocalRotation(Quaternionfc q) {
this.qX = q.x(); this.rotation.set(q);
this.qY = q.y();
this.qZ = q.z();
this.qW = q.w();
return this; return this;
} }

View file

@ -136,8 +136,8 @@ public class ContraptionControlsBlockEntity extends SmartBlockEntity {
Direction facing = state.getValue(ControlsBlock.FACING); Direction facing = state.getValue(ControlsBlock.FACING);
float yRot = AngleHelper.horizontalAngle(facing); float yRot = AngleHelper.horizontalAngle(facing);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot + 180) .rotateYDegrees(yRot + 180)
.rotateX(67.5f); .rotateXDegrees(67.5f);
} }
@Override @Override

View file

@ -46,15 +46,15 @@ public class PIInstance {
middle.loadIdentity() middle.loadIdentity()
.translate(instancePos) .translate(instancePos)
.center() .center()
.rotateY(angleY) .rotateYDegrees(angleY)
.rotateX(angleX) .rotateXDegrees(angleX)
.uncenter(); .uncenter();
top.loadIdentity() top.loadIdentity()
.translate(instancePos) .translate(instancePos)
.center() .center()
.rotateY(angleY) .rotateYDegrees(angleY)
.rotateX(angleX) .rotateXDegrees(angleX)
.uncenter(); .uncenter();
middle.translate(0, progress * 0.5f + 0.375f, 0); middle.translate(0, progress * 0.5f + 0.375f, 0);

View file

@ -81,8 +81,8 @@ public class PortableStorageInterfaceRenderer extends SafeBlockEntityRenderer<Po
private static void rotateToFacing(SuperByteBuffer buffer, Direction facing) { private static void rotateToFacing(SuperByteBuffer buffer, Direction facing) {
buffer.center() buffer.center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) .rotateXDegrees(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.uncenter(); .uncenter();
} }

View file

@ -183,8 +183,8 @@ public class RollerBlockEntity extends SmartBlockEntity {
Direction facing = state.getValue(RollerBlock.FACING); Direction facing = state.getValue(RollerBlock.FACING);
float yRot = AngleHelper.horizontalAngle(facing) + 180; float yRot = AngleHelper.horizontalAngle(facing) + 180;
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(90); .rotateXDegrees(90);
} }
@Override @Override

View file

@ -43,7 +43,7 @@ public class RollerRenderer extends SmartBlockEntityRenderer<RollerBlockEntity>
.scale(17 / 16f)); .scale(17 / 16f));
HarvesterRenderer.transform(be.getLevel(), facing, superBuffer, be.getAnimatedSpeed(), Vec3.ZERO); HarvesterRenderer.transform(be.getLevel(), facing, superBuffer, be.getAnimatedSpeed(), Vec3.ZERO);
superBuffer.translate(0, -.5, .5) superBuffer.translate(0, -.5, .5)
.rotateY(90) .rotateYDegrees(90)
.light(light) .light(light)
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
ms.popPose(); ms.popPose();
@ -75,7 +75,7 @@ public class RollerRenderer extends SmartBlockEntityRenderer<RollerBlockEntity>
viewProjection.translate(0, -.25, 0); viewProjection.translate(0, -.25, 0);
int contraptionWorldLight = ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld); int contraptionWorldLight = ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld);
superBuffer.translate(0, -.5, .5) superBuffer.translate(0, -.5, .5)
.rotateY(90) .rotateYDegrees(90)
.light(matrices.getWorld(), contraptionWorldLight) .light(matrices.getWorld(), contraptionWorldLight)
.renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped())); .renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped()));
viewProjection.popPose(); viewProjection.popPose();

View file

@ -30,7 +30,7 @@ public class ControlsRenderer {
PoseStack ms = matrices.getModel(); PoseStack ms = matrices.getModel();
cover.transform(ms) cover.transform(ms)
.center() .center()
.rotateY(hAngle) .rotateYDegrees(hAngle)
.uncenter() .uncenter()
.light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) .light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld))
.renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped())); .renderInto(matrices.getViewProjection(), buffer.getBuffer(RenderType.cutoutMipped()));
@ -38,16 +38,16 @@ public class ControlsRenderer {
double yOffset = Mth.lerp(equipAnimation * equipAnimation, -0.15f, 0.05f); double yOffset = Mth.lerp(equipAnimation * equipAnimation, -0.15f, 0.05f);
for (boolean first : Iterate.trueAndFalse) { for (boolean first : Iterate.trueAndFalse) {
float vAngle = (float) Mth.clamp(first ? firstLever * 70 - 25 : secondLever * 15, -45, 45); float vAngle = Mth.clamp(first ? firstLever * 70 - 25 : secondLever * 15, -45, 45);
SuperByteBuffer lever = CachedBufferer.partial(AllPartialModels.TRAIN_CONTROLS_LEVER, state); SuperByteBuffer lever = CachedBufferer.partial(AllPartialModels.TRAIN_CONTROLS_LEVER, state);
ms.pushPose(); ms.pushPose();
TransformStack.of(ms) TransformStack.of(ms)
.center() .center()
.rotateY(hAngle) .rotateYDegrees(hAngle)
.translate(0, 0, 4 / 16f) .translate(0, 0, 4 / 16f)
.rotateX(vAngle - 45) .rotateXDegrees(vAngle - 45)
.translate(0, yOffset, 0) .translate(0, yOffset, 0)
.rotateX(45) .rotateXDegrees(45)
.uncenter() .uncenter()
.translate(0, -2 / 16f, -3 / 16f) .translate(0, -2 / 16f, -3 / 16f)
.translate(first ? 0 : 6 / 16f, 0, 0); .translate(first ? 0 : 6 / 16f, 0, 0);

View file

@ -37,8 +37,8 @@ public class StickerRenderer extends SafeBlockEntityRenderer<StickerBlockEntity>
Direction facing = state.getValue(StickerBlock.FACING); Direction facing = state.getValue(StickerBlock.FACING);
head.nudge(be.hashCode()) head.nudge(be.hashCode())
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing) + 90) .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90)
.uncenter() .uncenter()
.translate(0, (offset * offset) * 4 / 16f, 0); .translate(0, (offset * offset) * 4 / 16f, 0);

View file

@ -59,8 +59,8 @@ public class StickerVisual extends AbstractBlockEntityVisual<StickerBlockEntity>
.translate(getVisualPosition()) .translate(getVisualPosition())
.nudge(blockEntity.hashCode()) .nudge(blockEntity.hashCode())
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing) + 90) .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90)
.uncenter() .uncenter()
.translate(0, (offset * offset) * 4 / 16f, 0); .translate(0, (offset * offset) * 4 / 16f, 0);
} }

View file

@ -56,7 +56,7 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer<ElevatorP
SuperByteBuffer magnet = CachedBufferer.partial(AllPartialModels.ELEVATOR_MAGNET, blockState); SuperByteBuffer magnet = CachedBufferer.partial(AllPartialModels.ELEVATOR_MAGNET, blockState);
if (running || offset == 0) if (running || offset == 0)
AbstractPulleyRenderer.renderAt(world, magnet.center() AbstractPulleyRenderer.renderAt(world, magnet.center()
.rotateY(blockStateAngle) .rotateYDegrees(blockStateAngle)
.uncenter(), offset, pos, ms, vb); .uncenter(), offset, pos, ms, vb);
SuperByteBuffer rotatedCoil = getRotatedCoil(be); SuperByteBuffer rotatedCoil = getRotatedCoil(be);
@ -84,7 +84,7 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer<ElevatorP
float f = offset % 1; float f = offset % 1;
if (f < .25f || f > .75f) { if (f < .25f || f > .75f) {
halfRope.center() halfRope.center()
.rotateY(blockStateAngle) .rotateYDegrees(blockStateAngle)
.uncenter(); .uncenter();
AbstractPulleyRenderer.renderAt(world, AbstractPulleyRenderer.renderAt(world,
halfRope.shiftUVScrolling(beltShift, (float) beltScroll * spriteSize), f > .75f ? f - 1 : f, pos, ms, halfRope.shiftUVScrolling(beltShift, (float) beltScroll * spriteSize), f > .75f ? f - 1 : f, pos, ms,
@ -96,7 +96,7 @@ public class ElevatorPulleyRenderer extends KineticBlockEntityRenderer<ElevatorP
for (int i = 0; i < offset - .25f; i++) { for (int i = 0; i < offset - .25f; i++) {
rope.center() rope.center()
.rotateY(blockStateAngle) .rotateYDegrees(blockStateAngle)
.uncenter(); .uncenter();
AbstractPulleyRenderer.renderAt(world, rope.shiftUVScrolling(beltShift, (float) beltScroll * spriteSize), AbstractPulleyRenderer.renderAt(world, rope.shiftUVScrolling(beltShift, (float) beltScroll * spriteSize),
offset - i, pos, ms, vb); offset - i, pos, ms, vb);

View file

@ -56,11 +56,11 @@ public class GantryCarriageRenderer extends KineticBlockEntityRenderer<GantryCar
SuperByteBuffer cogs = CachedBufferer.partial(AllPartialModels.GANTRY_COGS, state); SuperByteBuffer cogs = CachedBufferer.partial(AllPartialModels.GANTRY_COGS, state);
cogs.center() cogs.center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) .rotateXDegrees(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.rotateY(alongFirst ^ facing.getAxis() == Axis.X ? 0 : 90) .rotateYDegrees(alongFirst ^ facing.getAxis() == Axis.X ? 0 : 90)
.translate(0, -9 / 16f, 0) .translate(0, -9 / 16f, 0)
.rotateX(-angleForBE) .rotateXDegrees(-angleForBE)
.translate(0, 9 / 16f, 0) .translate(0, 9 / 16f, 0)
.uncenter(); .uncenter();

View file

@ -68,11 +68,11 @@ public class GantryCarriageVisual extends ShaftVisual<GantryCarriageBlockEntity>
gantryCogs.loadIdentity() gantryCogs.loadIdentity()
.translate(getVisualPosition()) .translate(getVisualPosition())
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) .rotateXDegrees(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.rotateY(alongFirst ^ facing.getAxis() == Direction.Axis.X ? 0 : 90) .rotateYDegrees(alongFirst ^ facing.getAxis() == Direction.Axis.X ? 0 : 90)
.translate(0, -9 / 16f, 0) .translate(0, -9 / 16f, 0)
.rotateX(-cogAngle) .rotateXDegrees(-cogAngle)
.translate(0, 9 / 16f, 0) .translate(0, 9 / 16f, 0)
.uncenter() .uncenter()
.setChanged(); .setChanged();

View file

@ -204,11 +204,11 @@ public class CouplingRenderer {
TransformStack.of(ms) TransformStack.of(ms)
.translate(camera.scale(-1) .translate(camera.scale(-1)
.add(x, y, z)) .add(x, y, z))
.rotateY(yaw) .rotateYDegrees(yaw)
.rotateZ(pitch) .rotateZDegrees(pitch)
.rotateX(roll) .rotateXDegrees(roll)
.translate(offset, 0, 0) .translate(offset, 0, 0)
.rotateY(flip ? 180 : 0); .rotateYDegrees(flip ? 180 : 0);
} }
} }

View file

@ -66,11 +66,11 @@ public class SlidingDoorRenderer extends SafeBlockEntityRenderer<SlidingDoorBloc
if (flip) if (flip)
partial.translate(0, 0, 1); partial.translate(0, 0, 1);
partial.rotateY(91 * f * value * value); partial.rotateYDegrees(91 * f * value * value);
if (!left) if (!left)
partial.translate(0, 0, f / 2f) partial.translate(0, 0, f / 2f)
.rotateY(-181 * f * value * value); .rotateYDegrees(-181 * f * value * value);
if (flip) if (flip)
partial.translate(0, 0, -1 / 2f); partial.translate(0, 0, -1 / 2f);

View file

@ -41,7 +41,7 @@ public class WhistleRenderer extends SafeBlockEntityRenderer<WhistleBlockEntity>
CachedBufferer.partial(mouth, blockState) CachedBufferer.partial(mouth, blockState)
.center() .center()
.rotateY(AngleHelper.horizontalAngle(direction)) .rotateYDegrees(AngleHelper.horizontalAngle(direction))
.uncenter() .uncenter()
.translate(0, offset * 4 / 16f, 0) .translate(0, offset * 4 / 16f, 0)
.light(light) .light(light)

View file

@ -60,7 +60,7 @@ public class BacktankArmorLayer<T extends LivingEntity, M extends EntityModel<T>
.renderInto(ms, buffer.getBuffer(renderType)); .renderInto(ms, buffer.getBuffer(renderType));
cogs.center() cogs.center()
.rotateY(180) .rotateYDegrees(180)
.uncenter() .uncenter()
.translate(0, 6.5f / 16, 11f / 16) .translate(0, 6.5f / 16, 11f / 16)
.rotate(AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360), Direction.EAST) .rotate(AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.level()) % 360), Direction.EAST)

View file

@ -29,7 +29,7 @@ public class BacktankRenderer extends KineticBlockEntityRenderer<BacktankBlockEn
BlockState blockState = be.getBlockState(); BlockState blockState = be.getBlockState();
SuperByteBuffer cogs = CachedBufferer.partial(getCogsModel(blockState), blockState); SuperByteBuffer cogs = CachedBufferer.partial(getCogsModel(blockState), blockState);
cogs.center() cogs.center()
.rotateY(180 + AngleHelper.horizontalAngle(blockState.getValue(BacktankBlock.HORIZONTAL_FACING))) .rotateYDegrees(180 + AngleHelper.horizontalAngle(blockState.getValue(BacktankBlock.HORIZONTAL_FACING)))
.uncenter() .uncenter()
.translate(0, 6.5f / 16, 11f / 16) .translate(0, 6.5f / 16, 11f / 16)
.rotate(AngleHelper.rad(be.getSpeed() / 4f * AnimationTickHolder.getRenderTime(be.getLevel()) % 360), .rotate(AngleHelper.rad(be.getSpeed() / 4f * AnimationTickHolder.getRenderTime(be.getLevel()) % 360),

View file

@ -35,8 +35,8 @@ public class BlueprintRenderer extends EntityRenderer<BlueprintEntity> {
PartialModel partialModel = entity.size == 3 ? AllPartialModels.CRAFTING_BLUEPRINT_3x3 PartialModel partialModel = entity.size == 3 ? AllPartialModels.CRAFTING_BLUEPRINT_3x3
: entity.size == 2 ? AllPartialModels.CRAFTING_BLUEPRINT_2x2 : AllPartialModels.CRAFTING_BLUEPRINT_1x1; : entity.size == 2 ? AllPartialModels.CRAFTING_BLUEPRINT_2x2 : AllPartialModels.CRAFTING_BLUEPRINT_1x1;
SuperByteBuffer sbb = CachedBufferer.partial(partialModel, Blocks.AIR.defaultBlockState()); SuperByteBuffer sbb = CachedBufferer.partial(partialModel, Blocks.AIR.defaultBlockState());
sbb.rotateY(-yaw) sbb.rotateYDegrees(-yaw)
.rotateX(90.0F + entity.getXRot()) .rotateXDegrees(90.0F + entity.getXRot())
.translate(-.5, -1 / 32f, -.5); .translate(-.5, -1 / 32f, -.5);
if (entity.size == 2) if (entity.size == 2)
sbb.translate(.5, 0, -.5); sbb.translate(.5, 0, -.5);
@ -61,8 +61,8 @@ public class BlueprintRenderer extends EntityRenderer<BlueprintEntity> {
int itemLight = Mth.floor(sl + .5) << 20 | (Mth.floor(bl + .5) & 0xf) << 4; int itemLight = Mth.floor(sl + .5) << 20 | (Mth.floor(bl + .5) & 0xf) << 4;
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(vertical ? 0 : -yaw) .rotateYDegrees(vertical ? 0 : -yaw)
.rotateX(fakeNormalXRotation); .rotateXDegrees(fakeNormalXRotation);
Matrix3f copy = new Matrix3f(ms.last() Matrix3f copy = new Matrix3f(ms.last()
.normal()); .normal());
@ -70,8 +70,8 @@ public class BlueprintRenderer extends EntityRenderer<BlueprintEntity> {
ms.pushPose(); ms.pushPose();
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(-yaw) .rotateYDegrees(-yaw)
.rotateX(entity.getXRot()) .rotateXDegrees(entity.getXRot())
.translate(0, 0, 1 / 32f + .001); .translate(0, 0, 1 / 32f + .001);
if (entity.size == 3) if (entity.size == 3)

View file

@ -52,19 +52,19 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer {
ms.translate(0, 1 / 16f, -7 / 16f); ms.translate(0, 1 / 16f, -7 / 16f);
ms.scale(1, 1, 1 + animation); ms.scale(1, 1, 1 + animation);
ms.pushPose(); ms.pushPose();
stacker.rotateX(-halfAngle) stacker.rotateXDegrees(-halfAngle)
.translate(ROTATION_OFFSET); .translate(ROTATION_OFFSET);
renderer.renderSolid(THIN_SHORT.get(), light); renderer.renderSolid(THIN_SHORT.get(), light);
stacker.translateBack(ROTATION_OFFSET); stacker.translateBack(ROTATION_OFFSET);
ms.translate(0, 5.5f / 16f, 0); ms.translate(0, 5.5f / 16f, 0);
stacker.rotateX(-oppositeAngle) stacker.rotateXDegrees(-oppositeAngle)
.translate(ROTATION_OFFSET); .translate(ROTATION_OFFSET);
renderer.renderSolid(WIDE_LONG.get(), light); renderer.renderSolid(WIDE_LONG.get(), light);
stacker.translateBack(ROTATION_OFFSET); stacker.translateBack(ROTATION_OFFSET);
ms.translate(0, 11 / 16f, 0); ms.translate(0, 11 / 16f, 0);
stacker.rotateX(oppositeAngle) stacker.rotateXDegrees(oppositeAngle)
.translate(ROTATION_OFFSET); .translate(ROTATION_OFFSET);
ms.translate(0, 0.5f / 16f, 0); ms.translate(0, 0.5f / 16f, 0);
renderer.renderSolid(THIN_SHORT.get(), light); renderer.renderSolid(THIN_SHORT.get(), light);
@ -73,19 +73,19 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer {
ms.popPose(); ms.popPose();
ms.pushPose(); ms.pushPose();
stacker.rotateX(-180 + halfAngle) stacker.rotateXDegrees(-180 + halfAngle)
.translate(ROTATION_OFFSET); .translate(ROTATION_OFFSET);
renderer.renderSolid(WIDE_SHORT.get(), light); renderer.renderSolid(WIDE_SHORT.get(), light);
stacker.translateBack(ROTATION_OFFSET); stacker.translateBack(ROTATION_OFFSET);
ms.translate(0, 5.5f / 16f, 0); ms.translate(0, 5.5f / 16f, 0);
stacker.rotateX(oppositeAngle) stacker.rotateXDegrees(oppositeAngle)
.translate(ROTATION_OFFSET); .translate(ROTATION_OFFSET);
renderer.renderSolid(THIN_LONG.get(), light); renderer.renderSolid(THIN_LONG.get(), light);
stacker.translateBack(ROTATION_OFFSET); stacker.translateBack(ROTATION_OFFSET);
ms.translate(0, 11 / 16f, 0); ms.translate(0, 11 / 16f, 0);
stacker.rotateX(-oppositeAngle) stacker.rotateXDegrees(-oppositeAngle)
.translate(ROTATION_OFFSET); .translate(ROTATION_OFFSET);
ms.translate(0, 0.5f / 16f, 0); ms.translate(0, 0.5f / 16f, 0);
renderer.renderSolid(WIDE_SHORT.get(), light); renderer.renderSolid(WIDE_SHORT.get(), light);
@ -93,8 +93,8 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer {
// hand // hand
ms.translate(0, 5.5f / 16f, 0); ms.translate(0, 5.5f / 16f, 0);
stacker.rotateX(180 - halfAngle) stacker.rotateXDegrees(180 - halfAngle)
.rotateY(180); .rotateYDegrees(180);
ms.translate(0, 0, -4 / 16f); ms.translate(0, 0, -4 / 16f);
ms.scale(1, 1, 1 / (1 + animation)); ms.scale(1, 1, 1 / (1 + animation));
renderer.renderSolid((leftHand || rightHand) ? ExtendoGripRenderHandler.pose.get() renderer.renderSolid((leftHand || rightHand) ? ExtendoGripRenderHandler.pose.get()
@ -110,7 +110,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer {
angle += 360 * animation; angle += 360 * animation;
angle %= 360; angle %= 360;
stacker.translate(COG_ROTATION_OFFSET) stacker.translate(COG_ROTATION_OFFSET)
.rotateZ(angle) .rotateZDegrees(angle)
.translateBack(COG_ROTATION_OFFSET); .translateBack(COG_ROTATION_OFFSET);
renderer.renderSolid(COG.get(), light); renderer.renderSolid(COG.get(), light);
ms.popPose(); ms.popPose();

View file

@ -87,13 +87,13 @@ public class ExtendoGripRenderHandler {
ms.translate(flip * (0.64000005F - .1f), -0.4F + equipProgress * -0.6F, -0.71999997F + .3f); ms.translate(flip * (0.64000005F - .1f), -0.4F + equipProgress * -0.6F, -0.71999997F + .3f);
ms.pushPose(); ms.pushPose();
msr.rotateY(flip * 75.0F); msr.rotateYDegrees(flip * 75.0F);
ms.translate(flip * -1.0F, 3.6F, 3.5F); ms.translate(flip * -1.0F, 3.6F, 3.5F);
msr.rotateZ(flip * 120) msr.rotateZDegrees(flip * 120)
.rotateX(200) .rotateXDegrees(200)
.rotateY(flip * -135.0F); .rotateYDegrees(flip * -135.0F);
ms.translate(flip * 5.6F, 0.0F, 0.0F); ms.translate(flip * 5.6F, 0.0F, 0.0F);
msr.rotateY(flip * 40.0F); msr.rotateYDegrees(flip * 40.0F);
ms.translate(flip * 0.05f, -0.3f, -0.3f); ms.translate(flip * 0.05f, -0.3f, -0.3f);
PlayerRenderer playerrenderer = (PlayerRenderer) mc.getEntityRenderDispatcher() PlayerRenderer playerrenderer = (PlayerRenderer) mc.getEntityRenderDispatcher()
@ -123,7 +123,7 @@ public class ExtendoGripRenderHandler {
if (blockItem && mc.getItemRenderer() if (blockItem && mc.getItemRenderer()
.getModel(heldItem, null, null, 0) .getModel(heldItem, null, null, 0)
.isGui3d()) { .isGui3d()) {
msr.rotateY(flip * 45); msr.rotateYDegrees(flip * 45);
ms.translate(flip * 0.15f, -0.15f, -.05f); ms.translate(flip * 0.15f, -0.15f, -.05f);
ms.scale(1.25f, 1.25f, 1.25f); ms.scale(1.25f, 1.25f, 1.25f);
} }

View file

@ -60,7 +60,7 @@ public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer {
localMs.translate(-1 / 4f, -1 / 4f, 1); localMs.translate(-1 / 4f, -1 / 4f, 1);
localMs.scale(.5f, .5f, .5f); localMs.scale(.5f, .5f, .5f);
TransformStack.of(localMs) TransformStack.of(localMs)
.rotateY(-34); .rotateYDegrees(-34);
itemRenderer.renderStatic(ammo, ItemDisplayContext.GUI, light, OverlayTexture.NO_OVERLAY, localMs, itemRenderer.renderStatic(ammo, ItemDisplayContext.GUI, light, OverlayTexture.NO_OVERLAY, localMs,
buffer, mc.level, 0); buffer, mc.level, 0);
}); });

View file

@ -50,14 +50,14 @@ public class PotatoCannonRenderHandler extends ShootableGadgetRenderHandler {
ms.translate(flip * -.1f, 0, .14f); ms.translate(flip * -.1f, 0, .14f);
ms.scale(.75f, .75f, .75f); ms.scale(.75f, .75f, .75f);
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(recoil * 80); .rotateXDegrees(recoil * 80);
} }
@Override @Override
protected void transformHand(PoseStack ms, float flip, float equipProgress, float recoil, float pt) { protected void transformHand(PoseStack ms, float flip, float equipProgress, float recoil, float pt) {
ms.translate(flip * -.09, -.275, -.25); ms.translate(flip * -.09, -.275, -.25);
TransformStack.of(ms) TransformStack.of(ms)
.rotateZ(flip * -10); .rotateZDegrees(flip * -10);
} }
} }

View file

@ -33,8 +33,8 @@ public interface PotatoProjectileRenderMode {
.subtract(p1); .subtract(p1);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(AngleHelper.deg(Mth.atan2(diff.x, diff.z)) + 180) .rotateYDegrees(AngleHelper.deg(Mth.atan2(diff.x, diff.z)) + 180)
.rotateX(AngleHelper.deg(Mth.atan2(diff.y, Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); .rotateXDegrees(AngleHelper.deg(Mth.atan2(diff.y, Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z)))));
} }
} }
@ -48,8 +48,8 @@ public interface PotatoProjectileRenderMode {
public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) {
super.transform(ms, entity, pt); super.transform(ms, entity, pt);
TransformStack.of(ms) TransformStack.of(ms)
.rotateZ((entity.tickCount + pt) * 2 * entityRandom(entity, 16)) .rotateZDegrees((entity.tickCount + pt) * 2 * entityRandom(entity, 16))
.rotateX((entity.tickCount + pt) * entityRandom(entity, 32)); .rotateXDegrees((entity.tickCount + pt) * entityRandom(entity, 32));
} }
} }
@ -69,12 +69,12 @@ public interface PotatoProjectileRenderMode {
public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) {
Vec3 diff = entity.getDeltaMovement(); Vec3 diff = entity.getDeltaMovement();
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(AngleHelper.deg(Mth.atan2(diff.x, diff.z))) .rotateYDegrees(AngleHelper.deg(Mth.atan2(diff.x, diff.z)))
.rotateX(270 .rotateXDegrees(270
+ AngleHelper.deg(Mth.atan2(diff.y, -Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z))))); + AngleHelper.deg(Mth.atan2(diff.y, -Mth.sqrt((float) (diff.x * diff.x + diff.z * diff.z)))));
TransformStack.of(ms) TransformStack.of(ms)
.rotateY((entity.tickCount + pt) * 20 * spin + entityRandom(entity, 360)) .rotateYDegrees((entity.tickCount + pt) * 20 * spin + entityRandom(entity, 360))
.rotateZ(-spriteAngleOffset); .rotateZDegrees(-spriteAngleOffset);
} }
} }
@ -90,7 +90,7 @@ public interface PotatoProjectileRenderMode {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) { public void transform(PoseStack ms, PotatoProjectileEntity entity, float pt) {
TransformStack.of(ms).rotateY(AngleHelper.deg(Mth.atan2(offset.x, offset.z))); TransformStack.of(ms).rotateYDegrees(AngleHelper.deg(Mth.atan2(offset.x, offset.z)));
} }
} }

View file

@ -99,7 +99,7 @@ public class CrossPlaneMirror extends SymmetryMirror {
super.applyModelTransform(ms); super.applyModelTransform(ms);
TransformStack.of(ms) TransformStack.of(ms)
.center() .center()
.rotateY(((Align) orientation) == Align.Y ? 0 : 45) .rotateYDegrees(((Align) orientation) == Align.Y ? 0 : 45)
.uncenter(); .uncenter();
} }

View file

@ -95,7 +95,7 @@ public class PlaneMirror extends SymmetryMirror {
super.applyModelTransform(ms); super.applyModelTransform(ms);
TransformStack.of(ms) TransformStack.of(ms)
.center() .center()
.rotateY(((Align) orientation) == Align.XY ? 0 : 90) .rotateYDegrees(((Align) orientation) == Align.XY ? 0 : 90)
.uncenter(); .uncenter();
} }

View file

@ -127,9 +127,9 @@ public class RadialToolboxMenu extends AbstractSimiScreen {
for (int slot = 0; slot < 8; slot++) { for (int slot = 0; slot < 8; slot++) {
ms.pushPose(); ms.pushPose();
TransformStack.of(ms) TransformStack.of(ms)
.rotateZ(slot * 45 - 45) .rotateZDegrees(slot * 45 - 45)
.translate(0, -40 + (10 * (1 - fade) * (1 - fade)), 0) .translate(0, -40 + (10 * (1 - fade) * (1 - fade)), 0)
.rotateZ(-slot * 45 + 45); .rotateZDegrees(-slot * 45 + 45);
ms.translate(-12, -12, 0); ms.translate(-12, -12, 0);
if (state == State.SELECT_ITEM || state == State.SELECT_ITEM_UNEQUIP) { if (state == State.SELECT_ITEM || state == State.SELECT_ITEM_UNEQUIP) {

View file

@ -60,17 +60,17 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual<ToolboxBlockEntity>
lid.loadIdentity() lid.loadIdentity()
.translate(getVisualPosition()) .translate(getVisualPosition())
.center() .center()
.rotateY(-facing.toYRot()) .rotateYDegrees(-facing.toYRot())
.uncenter() .uncenter()
.translate(0, 6 / 16f, 12 / 16f) .translate(0, 6 / 16f, 12 / 16f)
.rotateX(135 * lidAngle) .rotateXDegrees(135 * lidAngle)
.translateBack(0, 6 / 16f, 12 / 16f); .translateBack(0, 6 / 16f, 12 / 16f);
for (int offset : Iterate.zeroAndOne) { for (int offset : Iterate.zeroAndOne) {
drawers[offset].loadIdentity() drawers[offset].loadIdentity()
.translate(getVisualPosition()) .translate(getVisualPosition())
.center() .center()
.rotateY(-facing.toYRot()) .rotateYDegrees(-facing.toYRot())
.uncenter() .uncenter()
.translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)); .translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset));
} }

View file

@ -36,17 +36,17 @@ public class ToolboxRenderer extends SmartBlockEntityRenderer<ToolboxBlockEntity
VertexConsumer builder = buffer.getBuffer(RenderType.cutoutMipped()); VertexConsumer builder = buffer.getBuffer(RenderType.cutoutMipped());
lid.center() lid.center()
.rotateY(-facing.toYRot()) .rotateYDegrees(-facing.toYRot())
.uncenter() .uncenter()
.translate(0, 6 / 16f, 12 / 16f) .translate(0, 6 / 16f, 12 / 16f)
.rotateX(135 * lidAngle) .rotateXDegrees(135 * lidAngle)
.translate(0, -6 / 16f, -12 / 16f) .translate(0, -6 / 16f, -12 / 16f)
.light(light) .light(light)
.renderInto(ms, builder); .renderInto(ms, builder);
for (int offset : Iterate.zeroAndOne) { for (int offset : Iterate.zeroAndOne) {
drawer.center() drawer.center()
.rotateY(-facing.toYRot()) .rotateYDegrees(-facing.toYRot())
.uncenter() .uncenter()
.translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)) .translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset))
.light(light) .light(light)

View file

@ -133,8 +133,8 @@ public class ToolboxScreen extends AbstractSimiContainerScreen<ToolboxMenu> {
.pushPose() .pushPose()
.translate(x, y, 100) .translate(x, y, 100)
.scale(50) .scale(50)
.rotateX(-22) .rotateXDegrees(-22)
.rotateY(-202); .rotateYDegrees(-202);
GuiGameElement.of(AllBlocks.TOOLBOXES.get(color) GuiGameElement.of(AllBlocks.TOOLBOXES.get(color)
.getDefaultState()) .getDefaultState())
@ -143,7 +143,7 @@ public class ToolboxScreen extends AbstractSimiContainerScreen<ToolboxMenu> {
TransformStack.of(ms) TransformStack.of(ms)
.pushPose() .pushPose()
.translate(0, -6 / 16f, 12 / 16f) .translate(0, -6 / 16f, 12 / 16f)
.rotateX(-105 * menu.contentHolder.lid.getValue(partialTicks)) .rotateXDegrees(-105 * menu.contentHolder.lid.getValue(partialTicks))
.translate(0, 6 / 16f, -12 / 16f); .translate(0, 6 / 16f, -12 / 16f);
GuiGameElement.of(AllPartialModels.TOOLBOX_LIDS.get(color)) GuiGameElement.of(AllPartialModels.TOOLBOX_LIDS.get(color))
.render(graphics); .render(graphics);

View file

@ -87,9 +87,9 @@ public class ItemDrainRenderer extends SmartBlockEntityRenderer<ItemDrainBlockEn
.getStep(); .getStep();
float verticalAngle = positive * offset * 360; float verticalAngle = positive * offset * 360;
if (insertedFrom.getAxis() != Direction.Axis.X) if (insertedFrom.getAxis() != Direction.Axis.X)
msr.rotateX(verticalAngle); msr.rotateXDegrees(verticalAngle);
if (insertedFrom.getAxis() != Direction.Axis.Z) if (insertedFrom.getAxis() != Direction.Axis.Z)
msr.rotateZ(-verticalAngle); msr.rotateZDegrees(-verticalAngle);
if (renderUpright) { if (renderUpright) {
Entity renderViewEntity = Minecraft.getInstance().cameraEntity; Entity renderViewEntity = Minecraft.getInstance().cameraEntity;
@ -115,13 +115,13 @@ public class ItemDrainRenderer extends SmartBlockEntityRenderer<ItemDrainBlockEn
ms.translate(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i); ms.translate(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i);
ms.scale(.5f, .5f, .5f); ms.scale(.5f, .5f, .5f);
if (!blockItem && !renderUpright) if (!blockItem && !renderUpright)
msr.rotateX(90); msr.rotateXDegrees(90);
itemRenderer.renderStatic(itemStack, ItemDisplayContext.FIXED, light, overlay, ms, buffer, be.getLevel(), 0); itemRenderer.renderStatic(itemStack, ItemDisplayContext.FIXED, light, overlay, ms, buffer, be.getLevel(), 0);
ms.popPose(); ms.popPose();
if (!renderUpright) { if (!renderUpright) {
if (!blockItem) if (!blockItem)
msr.rotateY(10); msr.rotateYDegrees(10);
ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0);
} else } else
ms.translate(0, 0, -1 / 16f); ms.translate(0, 0, -1 / 16f);

View file

@ -84,8 +84,8 @@ public class SmartFluidPipeBlockEntity extends SmartBlockEntity {
public void rotate(BlockState state, PoseStack ms) { public void rotate(BlockState state, PoseStack ms) {
AttachFace face = state.getValue(SmartFluidPipeBlock.FACE); AttachFace face = state.getValue(SmartFluidPipeBlock.FACE);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(angleY(state)) .rotateYDegrees(angleY(state))
.rotateX(face == AttachFace.CEILING ? -45 : 45); .rotateXDegrees(face == AttachFace.CEILING ? -45 : 45);
} }
protected float angleY(BlockState state) { protected float angleY(BlockState state) {

View file

@ -42,9 +42,9 @@ public class FluidValveRenderer extends KineticBlockEntityRenderer<FluidValveBlo
pointerRotationOffset = 90; pointerRotationOffset = 90;
pointer.center() pointer.center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) .rotateXDegrees(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
.rotateY(pointerRotationOffset + pointerRotation) .rotateYDegrees(pointerRotationOffset + pointerRotation)
.uncenter() .uncenter()
.light(light) .light(light)
.renderInto(ms, buffer.getBuffer(RenderType.solid())); .renderInto(ms, buffer.getBuffer(RenderType.solid()));

View file

@ -64,9 +64,9 @@ public class FluidValveVisual extends ShaftVisual<FluidValveBlockEntity> impleme
pointer.loadIdentity() pointer.loadIdentity()
.translate(getVisualPosition()) .translate(getVisualPosition())
.center() .center()
.rotateY((float) yRot) .rotateYDegrees((float) yRot)
.rotateX((float) xRot) .rotateXDegrees((float) xRot)
.rotateY(pointerRotationOffset + pointerRotation) .rotateYDegrees(pointerRotationOffset + pointerRotation)
.uncenter() .uncenter()
.setChanged(); .setChanged();
} }

View file

@ -91,17 +91,17 @@ public class FluidTankRenderer extends SafeBlockEntityRenderer<FluidTankBlockEnt
for (Direction d : Iterate.horizontalDirections) { for (Direction d : Iterate.horizontalDirections) {
ms.pushPose(); ms.pushPose();
CachedBufferer.partial(AllPartialModels.BOILER_GAUGE, blockState) CachedBufferer.partial(AllPartialModels.BOILER_GAUGE, blockState)
.rotateY(d.toYRot()) .rotateYDegrees(d.toYRot())
.uncenter() .uncenter()
.translate(be.width / 2f - 6 / 16f, 0, 0) .translate(be.width / 2f - 6 / 16f, 0, 0)
.light(light) .light(light)
.renderInto(ms, vb); .renderInto(ms, vb);
CachedBufferer.partial(AllPartialModels.BOILER_GAUGE_DIAL, blockState) CachedBufferer.partial(AllPartialModels.BOILER_GAUGE_DIAL, blockState)
.rotateY(d.toYRot()) .rotateYDegrees(d.toYRot())
.uncenter() .uncenter()
.translate(be.width / 2f - 6 / 16f, 0, 0) .translate(be.width / 2f - 6 / 16f, 0, 0)
.translate(0, dialPivot, dialPivot) .translate(0, dialPivot, dialPivot)
.rotateX(-90 * progress) .rotateXDegrees(-90 * progress)
.translate(0, -dialPivot, -dialPivot) .translate(0, -dialPivot, -dialPivot)
.light(light) .light(light)
.renderInto(ms, vb); .renderInto(ms, vb);

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.kinetics.belt; package com.simibubi.create.content.kinetics.belt;
import org.joml.Quaternionf; import org.joml.Quaternionf;
import org.joml.Quaternionfc;
import com.jozufozu.flywheel.api.instance.InstanceHandle; import com.jozufozu.flywheel.api.instance.InstanceHandle;
import com.jozufozu.flywheel.api.instance.InstanceType; import com.jozufozu.flywheel.api.instance.InstanceType;
@ -10,32 +11,25 @@ import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
public class BeltInstance extends KineticInstance { public class BeltInstance extends KineticInstance {
public float qX; public final Quaternionf rotation = new Quaternionf();
public float qY;
public float qZ;
public float qW;
public float sourceU; public float sourceU;
public float sourceV; public float sourceV;
public float minU; public float minU;
public float minV; public float minV;
public float maxU; public float maxU;
public float maxV; public float maxV;
public byte scrollMult; public float scrollMult;
public BeltInstance(InstanceType<? extends KineticInstance> type, InstanceHandle handle) { public BeltInstance(InstanceType<? extends KineticInstance> type, InstanceHandle handle) {
super(type, handle); super(type, handle);
} }
public BeltInstance setRotation(Quaternionf q) { public BeltInstance setRotation(Quaternionfc q) {
this.qX = q.x(); this.rotation.set(q);
this.qY = q.y();
this.qZ = q.z();
this.qW = q.w();
return this; return this;
} }
public BeltInstance setScrollTexture(SpriteShiftEntry spriteShift) { public BeltInstance setScrollTexture(SpriteShiftEntry spriteShift) {
// FIXME: these are null for some reason
TextureAtlasSprite source = spriteShift.getOriginal(); TextureAtlasSprite source = spriteShift.getOriginal();
TextureAtlasSprite target = spriteShift.getTarget(); TextureAtlasSprite target = spriteShift.getTarget();
@ -50,7 +44,7 @@ public class BeltInstance extends KineticInstance {
} }
public BeltInstance setScrollMult(float scrollMult) { public BeltInstance setScrollMult(float scrollMult) {
this.scrollMult = (byte) (scrollMult * 127); this.scrollMult = scrollMult;
return this; return this;
} }
} }

View file

@ -77,9 +77,9 @@ public class BeltRenderer extends SafeBlockEntityRenderer<BeltBlockEntity> {
float renderTick = AnimationTickHolder.getRenderTime(be.getLevel()); float renderTick = AnimationTickHolder.getRenderTime(be.getLevel());
msr.center() msr.center()
.rotateY(AngleHelper.horizontalAngle(facing) + (upward ? 180 : 0) + (sideways ? 270 : 0)) .rotateYDegrees(AngleHelper.horizontalAngle(facing) + (upward ? 180 : 0) + (sideways ? 270 : 0))
.rotateZ(sideways ? 90 : 0) .rotateZDegrees(sideways ? 90 : 0)
.rotateX(!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) .rotateXDegrees(!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0)
.uncenter(); .uncenter();
if (downward || beltSlope == BeltSlope.VERTICAL && axisDirection == AxisDirection.POSITIVE) { if (downward || beltSlope == BeltSlope.VERTICAL && axisDirection == AxisDirection.POSITIVE) {
@ -132,9 +132,9 @@ public class BeltRenderer extends SafeBlockEntityRenderer<BeltBlockEntity> {
PoseStack stack = new PoseStack(); PoseStack stack = new PoseStack();
var stacker = TransformStack.of(stack); var stacker = TransformStack.of(stack);
stacker.center(); stacker.center();
if (dir.getAxis() == Direction.Axis.X) stacker.rotateY(90); if (dir.getAxis() == Direction.Axis.X) stacker.rotateYDegrees(90);
if (dir.getAxis() == Direction.Axis.Y) stacker.rotateX(90); if (dir.getAxis() == Direction.Axis.Y) stacker.rotateXDegrees(90);
stacker.rotateX(90); stacker.rotateXDegrees(90);
stacker.uncenter(); stacker.uncenter();
return stack; return stack;
}; };

View file

@ -132,9 +132,9 @@ public class BeltVisual extends KineticBlockEntityVisual<BeltBlockEntity> {
var model = Models.partial(AllPartialModels.BELT_PULLEY, dir.getAxis(), (axis11, modelTransform1) -> { var model = Models.partial(AllPartialModels.BELT_PULLEY, dir.getAxis(), (axis11, modelTransform1) -> {
var msr = TransformStack.of(modelTransform1); var msr = TransformStack.of(modelTransform1);
msr.center(); msr.center();
if (axis11 == Direction.Axis.X) msr.rotateY(90); if (axis11 == Direction.Axis.X) msr.rotateYDegrees(90);
if (axis11 == Direction.Axis.Y) msr.rotateX(90); if (axis11 == Direction.Axis.Y) msr.rotateXDegrees(90);
msr.rotateX(90); msr.rotateXDegrees(90);
msr.uncenter(); msr.uncenter();
}); });

View file

@ -123,7 +123,7 @@ public class MechanicalCrafterRenderer extends SafeBlockEntityRenderer<Mechanica
} }
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(180) .rotateYDegrees(180)
.translate(0, 0, (x + y * 3 + offset * 9) / 1024f ); .translate(0, 0, (x + y * 3 + offset * 9) / 1024f );
Minecraft.getInstance() Minecraft.getInstance()
.getItemRenderer() .getItemRenderer()

View file

@ -28,8 +28,8 @@ public class ShaftlessCogwheelVisual extends SingleRotatingVisual<KineticBlockEn
var stacker = TransformStack.of(stack) var stacker = TransformStack.of(stack)
.center(); .center();
if (facing.getAxis() == Direction.Axis.X) stacker.rotateZ(90); if (facing.getAxis() == Direction.Axis.X) stacker.rotateZDegrees(90);
else if (facing.getAxis() == Direction.Axis.Z) stacker.rotateX(90); else if (facing.getAxis() == Direction.Axis.Z) stacker.rotateXDegrees(90);
stacker.uncenter(); stacker.uncenter();
} }

View file

@ -44,11 +44,11 @@ public class DeployerFilterSlot extends ValueBoxTransform.Sided {
if (facing.getAxis() == Axis.Y) if (facing.getAxis() == Axis.Y)
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(180 + AngleHelper.horizontalAngle(state.getValue(DeployerBlock.FACING))); .rotateYDegrees(180 + AngleHelper.horizontalAngle(state.getValue(DeployerBlock.FACING)));
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(xRot); .rotateXDegrees(xRot);
} }
@Override @Override

View file

@ -198,8 +198,8 @@ public class DeployerRenderer extends SafeBlockEntityRenderer<DeployerBlockEntit
TransformStack.of(m) TransformStack.of(m)
.center() .center()
.rotateY(axis == Direction.Axis.Z ? 90 : 0) .rotateYDegrees(axis == Direction.Axis.Z ? 90 : 0)
.rotateZ(axis.isHorizontal() ? 90 : 0) .rotateZDegrees(axis.isHorizontal() ? 90 : 0)
.uncenter(); .uncenter();
shaft.transform(m); shaft.transform(m);
shaft.rotateCentered(angle, Direction.get(AxisDirection.POSITIVE, Direction.Axis.Y)); shaft.rotateCentered(angle, Direction.get(AxisDirection.POSITIVE, Direction.Axis.Y));

View file

@ -44,9 +44,9 @@ public class DrillRenderer extends KineticBlockEntityRenderer<DrillBlockEntity>
superBuffer superBuffer
.transform(matrices.getModel()) .transform(matrices.getModel())
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing)) .rotateXDegrees(AngleHelper.verticalAngle(facing))
.rotateZ(angle) .rotateZDegrees(angle)
.uncenter() .uncenter()
.light(matrices.getWorld(), .light(matrices.getWorld(),
ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld))

View file

@ -44,7 +44,7 @@ public class GearboxVisual extends KineticBlockEntityVisual<GearboxBlockEntity>
RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF), RenderStage.AFTER_BLOCK_ENTITIES) RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF), RenderStage.AFTER_BLOCK_ENTITIES)
.createInstance(); .createInstance();
key.setRotationAxis(Direction.get(Direction.AxisDirection.POSITIVE, axis).step()) key.setRotationAxis(axis)
.setRotationalSpeed(getSpeed(direction)) .setRotationalSpeed(getSpeed(direction))
.setRotationOffset(getRotationOffset(axis)).setColor(blockEntity) .setRotationOffset(getRotationOffset(axis)).setColor(blockEntity)
.setPosition(getVisualPosition()) .setPosition(getVisualPosition())

View file

@ -82,7 +82,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer<ArmBlockEntity> {
msr.center(); msr.center();
if (inverted) if (inverted)
msr.rotateX(180); msr.rotateXDegrees(180);
if (usingFlywheel) if (usingFlywheel)
doItemTransforms(msr, baseAngle, lowerArmAngle, upperArmAngle, headAngle); doItemTransforms(msr, baseAngle, lowerArmAngle, upperArmAngle, headAngle);
@ -93,7 +93,7 @@ public class ArmRenderer extends KineticBlockEntityRenderer<ArmBlockEntity> {
if (hasItem) { if (hasItem) {
ms.pushPose(); ms.pushPose();
float itemScale = isBlockItem ? .5f : .625f; float itemScale = isBlockItem ? .5f : .625f;
msr.rotateX(90); msr.rotateXDegrees(90);
msLocal.translate(0, isBlockItem ? -9 / 16f : -10 / 16f, 0); msLocal.translate(0, isBlockItem ? -9 / 16f : -10 / 16f, 0);
msLocal.scale(itemScale, itemScale, itemScale); msLocal.scale(itemScale, itemScale, itemScale);
@ -143,13 +143,13 @@ public class ArmRenderer extends KineticBlockEntityRenderer<ArmBlockEntity> {
transformHead(msr, headAngle); transformHead(msr, headAngle);
if (inverted) if (inverted)
msr.rotateZ(180); msr.rotateZDegrees(180);
claw.transform(msLocal) claw.transform(msLocal)
.renderInto(ms, builder); .renderInto(ms, builder);
if (inverted) if (inverted)
msr.rotateZ(180); msr.rotateZDegrees(180);
for (int flip : Iterate.positiveAndNegative) { for (int flip : Iterate.positiveAndNegative) {
msLocal.pushPose(); msLocal.pushPose();
@ -175,22 +175,22 @@ public class ArmRenderer extends KineticBlockEntityRenderer<ArmBlockEntity> {
public static void transformHead(TransformStack msr, float headAngle) { public static void transformHead(TransformStack msr, float headAngle) {
msr.translate(0, 0, -15 / 16d); msr.translate(0, 0, -15 / 16d);
msr.rotateX(headAngle - 45f); msr.rotateXDegrees(headAngle - 45f);
} }
public static void transformUpperArm(TransformStack msr, float upperArmAngle) { public static void transformUpperArm(TransformStack msr, float upperArmAngle) {
msr.translate(0, 0, -14 / 16d); msr.translate(0, 0, -14 / 16d);
msr.rotateX(upperArmAngle - 90); msr.rotateXDegrees(upperArmAngle - 90);
} }
public static void transformLowerArm(TransformStack msr, float lowerArmAngle) { public static void transformLowerArm(TransformStack msr, float lowerArmAngle) {
msr.translate(0, 2 / 16d, 0); msr.translate(0, 2 / 16d, 0);
msr.rotateX(lowerArmAngle + 135); msr.rotateXDegrees(lowerArmAngle + 135);
} }
public static void transformBase(TransformStack msr, float baseAngle) { public static void transformBase(TransformStack msr, float baseAngle) {
msr.translate(0, 4 / 16d, 0); msr.translate(0, 4 / 16d, 0);
msr.rotateY(baseAngle); msr.rotateYDegrees(baseAngle);
} }
@Override @Override

View file

@ -130,7 +130,7 @@ public class ArmVisual extends SingleRotatingVisual<ArmBlockEntity> implements D
msr.center(); msr.center();
if (ceiling) if (ceiling)
msr.rotateX(180); msr.rotateXDegrees(180);
ArmRenderer.transformBase(msr, baseAngle); ArmRenderer.transformBase(msr, baseAngle);
base.setTransform(msLocal) base.setTransform(msLocal)
@ -149,13 +149,13 @@ public class ArmVisual extends SingleRotatingVisual<ArmBlockEntity> implements D
ArmRenderer.transformHead(msr, headAngle); ArmRenderer.transformHead(msr, headAngle);
if (ceiling && blockEntity.goggles) if (ceiling && blockEntity.goggles)
msr.rotateZ(180); msr.rotateZDegrees(180);
claw.setTransform(msLocal) claw.setTransform(msLocal)
.setChanged(); .setChanged();
if (ceiling && blockEntity.goggles) if (ceiling && blockEntity.goggles)
msr.rotateZ(180); msr.rotateZDegrees(180);
ItemStack item = blockEntity.heldItem; ItemStack item = blockEntity.heldItem;
ItemRenderer itemRenderer = Minecraft.getInstance() ItemRenderer itemRenderer = Minecraft.getInstance()

View file

@ -80,7 +80,7 @@ public class CreativeMotorBlockEntity extends GeneratingKineticBlockEntity {
if (getSide() != Direction.UP) if (getSide() != Direction.UP)
return; return;
TransformStack.of(ms) TransformStack.of(ms)
.rotateZ(-AngleHelper.horizontalAngle(facing) + 180); .rotateZDegrees(-AngleHelper.horizontalAngle(facing) + 180);
} }
@Override @Override

View file

@ -26,8 +26,8 @@ public class SawFilterSlot extends ValueBoxTransform {
int yRot = (state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0) int yRot = (state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0)
+ (state.getValue(SawBlock.FLIPPED) ? 0 : 180); + (state.getValue(SawBlock.FLIPPED) ? 0 : 180);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(90); .rotateXDegrees(90);
} }
} }

View file

@ -190,11 +190,11 @@ public class SawRenderer extends SafeBlockEntityRenderer<SawBlockEntity> {
superBuffer.transform(matrices.getModel()) superBuffer.transform(matrices.getModel())
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing)); .rotateXDegrees(AngleHelper.verticalAngle(facing));
if (!SawBlock.isHorizontal(state)) { if (!SawBlock.isHorizontal(state)) {
superBuffer.rotateZ(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0); superBuffer.rotateZDegrees(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 90 : 0);
} }
superBuffer.uncenter() superBuffer.uncenter()

View file

@ -74,9 +74,9 @@ public class SteamEngineValueBox extends ValueBoxTransform.Sided {
float yRot = AngleHelper.horizontalAngle(facing) + (facing == Direction.DOWN ? 180 : 0); float yRot = AngleHelper.horizontalAngle(facing) + (facing == Direction.DOWN ? 180 : 0);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(facing == Direction.DOWN ? -90 : 90) .rotateXDegrees(facing == Direction.DOWN ? -90 : 90)
.rotateY(roll); .rotateYDegrees(roll);
} }
@Override @Override

View file

@ -43,8 +43,8 @@ public class ChuteRenderer extends SafeBlockEntityRenderer<ChuteBlockEntity> {
float itemPosition = be.itemPosition.getValue(partialTicks); float itemPosition = be.itemPosition.getValue(partialTicks);
ms.translate(0, -.5 + itemPosition, 0); ms.translate(0, -.5 + itemPosition, 0);
ms.scale(itemScale, itemScale, itemScale); ms.scale(itemScale, itemScale, itemScale);
msr.rotateX(itemPosition * 180); msr.rotateXDegrees(itemPosition * 180);
msr.rotateY(itemPosition * 180); msr.rotateYDegrees(itemPosition * 180);
itemRenderer.renderStatic(be.item, ItemDisplayContext.FIXED, light, overlay, ms, buffer, be.getLevel(), 0); itemRenderer.renderStatic(be.item, ItemDisplayContext.FIXED, light, overlay, ms, buffer, be.getLevel(), 0);
ms.popPose(); ms.popPose();
} }

View file

@ -57,7 +57,7 @@ public class CreativeCrateBlockEntity extends CrateBlockEntity {
@Override @Override
public void rotate(BlockState state, PoseStack ms) { public void rotate(BlockState state, PoseStack ms) {
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(90); .rotateXDegrees(90);
} }
@Override @Override

View file

@ -85,10 +85,10 @@ public class DepotRenderer extends SafeBlockEntityRenderer<DepotBlockEntity> {
msr.nudge(i); msr.nudge(i);
boolean renderUpright = BeltHelper.isItemUpright(stack); boolean renderUpright = BeltHelper.isItemUpright(stack);
msr.rotateY(360 / 8f * i); msr.rotateYDegrees(360 / 8f * i);
ms.translate(.35f, 0, 0); ms.translate(.35f, 0, 0);
if (renderUpright) if (renderUpright)
msr.rotateY(-(360 / 8f * i)); msr.rotateYDegrees(-(360 / 8f * i));
Random r = new Random(i + 1); Random r = new Random(i + 1);
int angle = (int) (360 * r.nextFloat()); int angle = (int) (360 * r.nextFloat());
renderItem(be.getLevel(), ms, buffer, light, overlay, stack, renderUpright ? angle + 90 : angle, r, itemPosition); renderItem(be.getLevel(), ms, buffer, light, overlay, stack, renderUpright ? angle + 90 : angle, r, itemPosition);
@ -109,7 +109,7 @@ public class DepotRenderer extends SafeBlockEntityRenderer<DepotBlockEntity> {
.isGui3d(); .isGui3d();
ms.pushPose(); ms.pushPose();
msr.rotateY(angle); msr.rotateYDegrees(angle);
if (renderUpright) { if (renderUpright) {
Entity renderViewEntity = Minecraft.getInstance().cameraEntity; Entity renderViewEntity = Minecraft.getInstance().cameraEntity;
@ -130,14 +130,14 @@ public class DepotRenderer extends SafeBlockEntityRenderer<DepotBlockEntity> {
ms.scale(.5f, .5f, .5f); ms.scale(.5f, .5f, .5f);
if (!blockItem && !renderUpright) { if (!blockItem && !renderUpright) {
ms.translate(0, -3 / 16f, 0); ms.translate(0, -3 / 16f, 0);
msr.rotateX(90); msr.rotateXDegrees(90);
} }
itemRenderer.renderStatic(itemStack, ItemDisplayContext.FIXED, light, overlay, ms, buffer, level, 0); itemRenderer.renderStatic(itemStack, ItemDisplayContext.FIXED, light, overlay, ms, buffer, level, 0);
ms.popPose(); ms.popPose();
if (!renderUpright) { if (!renderUpright) {
if (!blockItem) if (!blockItem)
msr.rotateY(10); msr.rotateYDegrees(10);
ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0);
} else } else
ms.translate(0, 0, -1 / 16f); ms.translate(0, 0, -1 / 16f);

View file

@ -631,8 +631,8 @@ public class EjectorBlockEntity extends KineticBlockEntity {
return; return;
} }
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(angle(state)) .rotateYDegrees(angle(state))
.rotateX(90); .rotateXDegrees(90);
} }
protected float angle(BlockState state) { protected float angle(BlockState state) {

View file

@ -66,8 +66,8 @@ public class EjectorRenderer extends ShaftRenderer<EjectorBlockEntity> {
msr.translate(launchedItemLocation.subtract(Vec3.atLowerCornerOf(be.getBlockPos()))); msr.translate(launchedItemLocation.subtract(Vec3.atLowerCornerOf(be.getBlockPos())));
Vec3 itemRotOffset = VecHelper.voxelSpace(0, 3, 0); Vec3 itemRotOffset = VecHelper.voxelSpace(0, 3, 0);
msr.translate(itemRotOffset); msr.translate(itemRotOffset);
msr.rotateY(AngleHelper.horizontalAngle(be.getFacing())); msr.rotateYDegrees(AngleHelper.horizontalAngle(be.getFacing()));
msr.rotateX(time * 40); msr.rotateXDegrees(time * 40);
msr.translateBack(itemRotOffset); msr.translateBack(itemRotOffset);
Minecraft.getInstance() Minecraft.getInstance()
.getItemRenderer() .getItemRenderer()
@ -95,11 +95,11 @@ public class EjectorRenderer extends ShaftRenderer<EjectorBlockEntity> {
static <T extends Translate<T> & Rotate<T>> void applyLidAngle(KineticBlockEntity be, Vec3 rotationOffset, float angle, T tr) { static <T extends Translate<T> & Rotate<T>> void applyLidAngle(KineticBlockEntity be, Vec3 rotationOffset, float angle, T tr) {
tr.center() tr.center()
.rotateY(180 + AngleHelper.horizontalAngle(be.getBlockState() .rotateYDegrees(180 + AngleHelper.horizontalAngle(be.getBlockState()
.getValue(EjectorBlock.HORIZONTAL_FACING))) .getValue(EjectorBlock.HORIZONTAL_FACING)))
.uncenter() .uncenter()
.translate(rotationOffset) .translate(rotationOffset)
.rotateX(-angle) .rotateXDegrees(-angle)
.translateBack(rotationOffset); .translateBack(rotationOffset);
} }

View file

@ -60,22 +60,22 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided {
super.rotate(state, ms); super.rotate(state, ms);
if (shape == Shape.PULLING || shape == Shape.PUSHING) if (shape == Shape.PULLING || shape == Shape.PUSHING)
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(-22.5f); .rotateXDegrees(-22.5f);
return; return;
} }
if (state.getBlock() instanceof FunnelBlock) { if (state.getBlock() instanceof FunnelBlock) {
super.rotate(state, ms); super.rotate(state, ms);
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(-22.5f); .rotateXDegrees(-22.5f);
return; return;
} }
float yRot = AngleHelper.horizontalAngle(AbstractFunnelBlock.getFunnelFacing(state)) float yRot = AngleHelper.horizontalAngle(AbstractFunnelBlock.getFunnelFacing(state))
+ (facing == Direction.DOWN ? 180 : 0); + (facing == Direction.DOWN ? 180 : 0);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(facing == Direction.DOWN ? -90 : 90); .rotateXDegrees(facing == Direction.DOWN ? -90 : 90);
} }
@Override @Override

View file

@ -61,7 +61,7 @@ public class FunnelRenderer extends SmartBlockEntityRenderer<FunnelBlockEntity>
flapAngle *= .5f; flapAngle *= .5f;
msr.translate(pivot) msr.translate(pivot)
.rotateX(flapAngle) .rotateXDegrees(flapAngle)
.translateBack(pivot); .translateBack(pivot);
flapBuffer.light(light) flapBuffer.light(light)

View file

@ -49,7 +49,7 @@ public class BeltTunnelRenderer extends SmartBlockEntityRenderer<BeltTunnelBlock
ms.pushPose(); ms.pushPose();
msr.center() msr.center()
.rotateY(horizontalAngle) .rotateYDegrees(horizontalAngle)
.uncenter(); .uncenter();
ms.translate(0.075f / 16f, 0, 0); ms.translate(0.075f / 16f, 0, 0);
@ -64,7 +64,7 @@ public class BeltTunnelRenderer extends SmartBlockEntityRenderer<BeltTunnelBlock
flapAngle *= .5f; flapAngle *= .5f;
msr.translate(pivot) msr.translate(pivot)
.rotateX(flapAngle) .rotateXDegrees(flapAngle)
.translateBack(pivot); .translateBack(pivot);
flapBuffer.light(light) flapBuffer.light(light)
.renderInto(ms, vb); .renderInto(ms, vb);

View file

@ -46,7 +46,7 @@ public class BasinRenderer extends SmartBlockEntityRenderer<BasinBlockEntity> {
BlockPos pos = basin.getBlockPos(); BlockPos pos = basin.getBlockPos();
ms.translate(.5, .2f, .5); ms.translate(.5, .2f, .5);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(basin.ingredientRotation.getValue(partialTicks)); .rotateYDegrees(basin.ingredientRotation.getValue(partialTicks));
RandomSource r = RandomSource.create(pos.hashCode()); RandomSource r = RandomSource.create(pos.hashCode());
Vec3 baseVector = new Vec3(.125, level, 0); Vec3 baseVector = new Vec3(.125, level, 0);
@ -80,8 +80,8 @@ public class BasinRenderer extends SmartBlockEntityRenderer<BasinBlockEntity> {
Vec3 itemPosition = VecHelper.rotate(baseVector, anglePartition * itemCount, Axis.Y); Vec3 itemPosition = VecHelper.rotate(baseVector, anglePartition * itemCount, Axis.Y);
ms.translate(itemPosition.x, itemPosition.y, itemPosition.z); ms.translate(itemPosition.x, itemPosition.y, itemPosition.z);
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(anglePartition * itemCount + 35) .rotateYDegrees(anglePartition * itemCount + 35)
.rotateX(65); .rotateXDegrees(65);
for (int i = 0; i <= stack.getCount() / 8; i++) { for (int i = 0; i <= stack.getCount() / 8; i++) {
ms.pushPose(); ms.pushPose();
@ -125,8 +125,8 @@ public class BasinRenderer extends SmartBlockEntityRenderer<BasinBlockEntity> {
.translate(outVec) .translate(outVec)
.translate(new Vec3(0, Math.max(-.55f, -(progress * progress * 2)), 0)) .translate(new Vec3(0, Math.max(-.55f, -(progress * progress * 2)), 0))
.translate(directionVec.scale(progress * .5f)) .translate(directionVec.scale(progress * .5f))
.rotateY(AngleHelper.horizontalAngle(direction)) .rotateYDegrees(AngleHelper.horizontalAngle(direction))
.rotateX(progress * 180); .rotateXDegrees(progress * 180);
renderItem(ms, buffer, light, overlay, intAttached.getValue()); renderItem(ms, buffer, light, overlay, intAttached.getValue());
ms.popPose(); ms.popPose();
} }

View file

@ -48,7 +48,7 @@ public class FilteredDetectorFilterSlot extends ValueBoxTransform.Sided {
if (getSide() != Direction.UP) if (getSide() != Direction.UP)
return; return;
TransformStack.of(ms) TransformStack.of(ms)
.rotateZ(-AngleHelper.horizontalAngle(facing) + 180); .rotateZDegrees(-AngleHelper.horizontalAngle(facing) + 180);
} }
@Override @Override

View file

@ -21,8 +21,8 @@ public class BrassDiodeScrollSlot extends ValueBoxTransform {
public void rotate(BlockState state, PoseStack ms) { public void rotate(BlockState state, PoseStack ms) {
float yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)) + 180; float yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)) + 180;
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(90); .rotateXDegrees(90);
} }
@Override @Override

View file

@ -45,8 +45,8 @@ public class DisplayLinkRenderer extends SafeBlockEntityRenderer<DisplayLinkBloc
ms.pushPose(); ms.pushPose();
msr.center() msr.center()
.rotateY(AngleHelper.horizontalAngle(face)) .rotateYDegrees(AngleHelper.horizontalAngle(face))
.rotateX(-AngleHelper.verticalAngle(face) - 90) .rotateXDegrees(-AngleHelper.verticalAngle(face) - 90)
.uncenter(); .uncenter();
CachedBufferer.partial(AllPartialModels.DISPLAY_LINK_TUBE, blockState) CachedBufferer.partial(AllPartialModels.DISPLAY_LINK_TUBE, blockState)

View file

@ -278,8 +278,8 @@ public class DisplayLinkScreen extends AbstractSimiScreen {
.pushPose() .pushPose()
.translate(x + background.width + 4, y + background.height + 4, 100) .translate(x + background.width + 4, y + background.height + 4, 100)
.scale(40) .scale(40)
.rotateX(-22) .rotateXDegrees(-22)
.rotateY(63); .rotateYDegrees(63);
GuiGameElement.of(blockEntity.getBlockState() GuiGameElement.of(blockEntity.getBlockState()
.setValue(DisplayLinkBlock.FACING, Direction.UP)) .setValue(DisplayLinkBlock.FACING, Direction.UP))
.render(graphics); .render(graphics);

View file

@ -46,8 +46,8 @@ public class RedstoneLinkFrequencySlot extends ValueBoxTransform.Dual {
.isVertical() ? 0 : AngleHelper.horizontalAngle(facing) + 180; .isVertical() ? 0 : AngleHelper.horizontalAngle(facing) + 180;
float xRot = facing == Direction.UP ? 90 : facing == Direction.DOWN ? 270 : 0; float xRot = facing == Direction.UP ? 90 : facing == Direction.DOWN ? 270 : 0;
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(xRot); .rotateXDegrees(xRot);
} }
@Override @Override

View file

@ -107,8 +107,8 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere
float equip = equipProgress.getValue(pt); float equip = equipProgress.getValue(pt);
int handModifier = transformType == ItemDisplayContext.FIRST_PERSON_LEFT_HAND ? -1 : 1; int handModifier = transformType == ItemDisplayContext.FIRST_PERSON_LEFT_HAND ? -1 : 1;
msr.translate(0, equip / 4, equip / 4 * handModifier); msr.translate(0, equip / 4, equip / 4 * handModifier);
msr.rotateY(equip * -30 * handModifier); msr.rotateYDegrees(equip * -30 * handModifier);
msr.rotateZ(equip * -30); msr.rotateZDegrees(equip * -30);
active = true; active = true;
} }

View file

@ -48,8 +48,8 @@ public class NixieTubeRenderer extends SafeBlockEntityRenderer<NixieTubeBlockEnt
var msr = TransformStack.of(ms); var msr = TransformStack.of(ms);
msr.center() msr.center()
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateZ(xRot) .rotateZDegrees(xRot)
.uncenter(); .uncenter();
if (be.signalState != null) { if (be.signalState != null) {
@ -131,7 +131,7 @@ public class NixieTubeRenderer extends SafeBlockEntityRenderer<NixieTubeBlockEnt
if (facing == Direction.DOWN) if (facing == Direction.DOWN)
msr.center() msr.center()
.rotateZ(180) .rotateZDegrees(180)
.uncenter(); .uncenter();
boolean invertTubes = boolean invertTubes =

View file

@ -73,7 +73,7 @@ public class SchematicTransformation {
ms.translate(xOrigin, 0, zOrigin); ms.translate(xOrigin, 0, zOrigin);
TransformStack.of(ms) TransformStack.of(ms)
.translate(rotationOffset) .translate(rotationOffset)
.rotateY(rot) .rotateYDegrees(rot)
.translateBack(rotationOffset); .translateBack(rotationOffset);
ms.scale(abs(fb), 1, abs(lr)); ms.scale(abs(fb), 1, abs(lr));
ms.translate(-xOrigin, 0, -zOrigin); ms.translate(-xOrigin, 0, -zOrigin);

View file

@ -62,7 +62,7 @@ public class DeployTool extends PlacementToolBase {
TransformStack.of(ms) TransformStack.of(ms)
.translate(origin) .translate(origin)
.translate(rotationOffset) .translate(rotationOffset)
.rotateY(transformation.getCurrentRotation()) .rotateYDegrees(transformation.getCurrentRotation())
.translateBack(rotationOffset) .translateBack(rotationOffset)
.translateBack(origin); .translateBack(origin);

View file

@ -35,7 +35,7 @@ public class StandardBogeyRenderer {
for (int i : Iterate.zeroAndOne) { for (int i : Iterate.zeroAndOne) {
shafts[i].translate(-.5f, .25f, i * -1) shafts[i].translate(-.5f, .25f, i * -1)
.center() .center()
.rotateZ(wheelAngle) .rotateZDegrees(wheelAngle)
.uncenter() .uncenter()
.render(ms, light, vb); .render(ms, light, vb);
} }
@ -68,7 +68,7 @@ public class StandardBogeyRenderer {
ms.pushPose(); ms.pushPose();
wheels[(side + 1)/2] wheels[(side + 1)/2]
.translate(0, 12 / 16f, side) .translate(0, 12 / 16f, side)
.rotateX(wheelAngle) .rotateXDegrees(wheelAngle)
.render(ms, light, vb); .render(ms, light, vb);
if (!inInstancedContraption) if (!inInstancedContraption)
ms.popPose(); ms.popPose();
@ -100,7 +100,7 @@ public class StandardBogeyRenderer {
secondaryShafts[i] secondaryShafts[i]
.translate(-.5f, .25f, .5f + i * -2) .translate(-.5f, .25f, .5f + i * -2)
.center() .center()
.rotateX(wheelAngle) .rotateXDegrees(wheelAngle)
.uncenter() .uncenter()
.render(ms, light, vb); .render(ms, light, vb);
} }
@ -117,14 +117,14 @@ public class StandardBogeyRenderer {
getTransform(LARGE_BOGEY_WHEELS, ms, inInstancedContraption) getTransform(LARGE_BOGEY_WHEELS, ms, inInstancedContraption)
.translate(0, 1, 0) .translate(0, 1, 0)
.rotateX(wheelAngle) .rotateXDegrees(wheelAngle)
.render(ms, light, vb); .render(ms, light, vb);
getTransform(BOGEY_PIN, ms, inInstancedContraption) getTransform(BOGEY_PIN, ms, inInstancedContraption)
.translate(0, 1, 0) .translate(0, 1, 0)
.rotateX(wheelAngle) .rotateXDegrees(wheelAngle)
.translate(0, 1 / 4f, 0) .translate(0, 1 / 4f, 0)
.rotateX(-wheelAngle) .rotateXDegrees(-wheelAngle)
.render(ms, light, vb); .render(ms, light, vb);
if (!inInstancedContraption) if (!inInstancedContraption)

View file

@ -58,7 +58,7 @@ public class FlapDisplayRenderer extends KineticBlockEntityRenderer<FlapDisplayB
ms.pushPose(); ms.pushPose();
TransformStack.of(ms) TransformStack.of(ms)
.center() .center()
.rotateY(AngleHelper.horizontalAngle(be.getBlockState() .rotateYDegrees(AngleHelper.horizontalAngle(be.getBlockState()
.getValue(FlapDisplayBlock.HORIZONTAL_FACING))) .getValue(FlapDisplayBlock.HORIZONTAL_FACING)))
.uncenter() .uncenter()
.translate(0, 0, -3 / 16f); .translate(0, 0, -3 / 16f);

View file

@ -84,17 +84,17 @@ public class CarriageContraptionEntityRenderer extends ContraptionEntityRenderer
boolean selfUpsideDown = bogey.isUpsideDown(); boolean selfUpsideDown = bogey.isUpsideDown();
boolean leadingUpsideDown = bogey.carriage.leadingBogey().isUpsideDown(); boolean leadingUpsideDown = bogey.carriage.leadingBogey().isUpsideDown();
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(viewYRot + 90) .rotateYDegrees(viewYRot + 90)
.rotateX(-viewXRot) .rotateXDegrees(-viewXRot)
.rotateY(180) .rotateYDegrees(180)
.translate(0, 0, bogey.isLeading ? 0 : -bogeySpacing) .translate(0, 0, bogey.isLeading ? 0 : -bogeySpacing)
.rotateY(-180) .rotateYDegrees(-180)
.rotateX(viewXRot) .rotateXDegrees(viewXRot)
.rotateY(-viewYRot - 90) .rotateYDegrees(-viewYRot - 90)
.rotateY(bogey.yaw.getValue(partialTicks)) .rotateYDegrees(bogey.yaw.getValue(partialTicks))
.rotateX(bogey.pitch.getValue(partialTicks)) .rotateXDegrees(bogey.pitch.getValue(partialTicks))
.translate(0, .5f, 0) .translate(0, .5f, 0)
.rotateZ(selfUpsideDown ? 180 : 0) .rotateZDegrees(selfUpsideDown ? 180 : 0)
.translateY(selfUpsideDown != leadingUpsideDown ? 2 : 0); .translateY(selfUpsideDown != leadingUpsideDown ? 2 : 0);
} }

View file

@ -72,8 +72,8 @@ public class CarriageCouplingRenderer {
ms.pushPose(); ms.pushPose();
ms.translate(anchor.x - camera.x, anchor.y - camera.y, anchor.z - camera.z); ms.translate(anchor.x - camera.x, anchor.y - camera.y, anchor.z - camera.z);
CachedBufferer.partial(AllPartialModels.TRAIN_COUPLING_HEAD, air) CachedBufferer.partial(AllPartialModels.TRAIN_COUPLING_HEAD, air)
.rotateY(-yRot) .rotateYDegrees(-yRot)
.rotateX(xRot) .rotateXDegrees(xRot)
.light(lightCoords) .light(lightCoords)
.renderInto(ms, vb); .renderInto(ms, vb);
@ -84,8 +84,8 @@ public class CarriageCouplingRenderer {
double stretch = ((anchor2.distanceTo(anchor) - 2 * margin) * 4) / couplingSegments; double stretch = ((anchor2.distanceTo(anchor) - 2 * margin) * 4) / couplingSegments;
for (int j = 0; j < couplingSegments; j++) { for (int j = 0; j < couplingSegments; j++) {
CachedBufferer.partial(AllPartialModels.TRAIN_COUPLING_CABLE, air) CachedBufferer.partial(AllPartialModels.TRAIN_COUPLING_CABLE, air)
.rotateY(-yRot + 180) .rotateYDegrees(-yRot + 180)
.rotateX(-xRot) .rotateXDegrees(-xRot)
.translate(0, 0, margin + 2 / 16f) .translate(0, 0, margin + 2 / 16f)
.scale(1, 1, (float) stretch) .scale(1, 1, (float) stretch)
.translate(0, 0, j / 4f) .translate(0, 0, j / 4f)
@ -102,8 +102,8 @@ public class CarriageCouplingRenderer {
.subtract(camera); .subtract(camera);
ms.translate(translation.x, translation.y, translation.z); ms.translate(translation.x, translation.y, translation.z);
CachedBufferer.partial(AllPartialModels.TRAIN_COUPLING_HEAD, air) CachedBufferer.partial(AllPartialModels.TRAIN_COUPLING_HEAD, air)
.rotateY(-yRot + 180) .rotateYDegrees(-yRot + 180)
.rotateX(-xRot) .rotateXDegrees(-xRot)
.light(lightCoords2) .light(lightCoords2)
.renderInto(ms, vb); .renderInto(ms, vb);
ms.popPose(); ms.popPose();

View file

@ -99,7 +99,7 @@ public class TrackObserverBlockEntity extends SmartBlockEntity implements ITrans
@Override @Override
public void rotate(BlockState state, PoseStack ms) { public void rotate(BlockState state, PoseStack ms) {
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(90); .rotateXDegrees(90);
} }
@Override @Override

View file

@ -561,7 +561,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleMenu> {
if (xOffset + 16 > cardWidth - 26) { if (xOffset + 16 > cardWidth - 26) {
TransformStack.of(matrixStack) TransformStack.of(matrixStack)
.rotateZ(-90); .rotateZDegrees(-90);
int zLevel = 200; int zLevel = 200;
graphics.fillGradient(-cardHeight + 2, 18, -2 - cardHeader, 28, zLevel, 0x44000000, 0x00000000); graphics.fillGradient(-cardHeight + 2, 18, -2 - cardHeader, 28, zLevel, 0x44000000, 0x00000000);
graphics.fillGradient(-cardHeight + 2, cardWidth - 26, -2 - cardHeader, cardWidth - 16, zLevel, 0x00000000, graphics.fillGradient(-cardHeight + 2, cardWidth - 26, -2 - cardHeader, cardWidth - 16, zLevel, 0x00000000,

View file

@ -122,7 +122,7 @@ public class TrainHatArmorLayer<T extends LivingEntity, M extends EntityModel<T>
if (valid) { if (valid) {
ms.scale(1, -1, -1); ms.scale(1, -1, -1);
ms.translate(0, -2.25f / 16f, 0); ms.translate(0, -2.25f / 16f, 0);
msr.rotateX(-8.5f); msr.rotateXDegrees(-8.5f);
BlockState air = Blocks.AIR.defaultBlockState(); BlockState air = Blocks.AIR.defaultBlockState();
CachedBufferer.partial(AllPartialModels.TRAIN_HAT, air) CachedBufferer.partial(AllPartialModels.TRAIN_HAT, air)
.disableDiffuse() .disableDiffuse()

View file

@ -103,8 +103,8 @@ public abstract class AbstractStationScreen extends AbstractSimiScreen {
msr.pushPose() msr.pushPose()
.translate(guiLeft + background.width + 4, guiTop + background.height + 4, 100) .translate(guiLeft + background.width + 4, guiTop + background.height + 4, 100)
.scale(40) .scale(40)
.rotateX(-22) .rotateXDegrees(-22)
.rotateY(63); .rotateYDegrees(63);
GuiGameElement.of(blockEntity.getBlockState() GuiGameElement.of(blockEntity.getBlockState()
.setValue(BlockStateProperties.WATERLOGGED, false)) .setValue(BlockStateProperties.WATERLOGGED, false))
.render(graphics); .render(graphics);

View file

@ -118,7 +118,7 @@ public class StationRenderer extends SafeBlockEntityRenderer<StationBlockEntity>
SuperByteBuffer flagBB = CachedBufferer.partial(flag, be.getBlockState()); SuperByteBuffer flagBB = CachedBufferer.partial(flag, be.getBlockState());
transformFlag(flagBB, be, partialTicks, be.flagYRot, be.flagFlipped); transformFlag(flagBB, be, partialTicks, be.flagYRot, be.flagFlipped);
flagBB.translate(0.5f / 16, 0, 0) flagBB.translate(0.5f / 16, 0, 0)
.rotateY(be.flagFlipped ? 0 : 180) .rotateYDegrees(be.flagFlipped ? 0 : 180)
.translate(-0.5f / 16, 0, 0) .translate(-0.5f / 16, 0, 0)
.light(light) .light(light)
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
@ -135,10 +135,10 @@ public class StationRenderer extends SafeBlockEntityRenderer<StationBlockEntity>
float nudge = 1 / 512f; float nudge = 1 / 512f;
flag.center() flag.center()
.rotateY(yRot) .rotateYDegrees(yRot)
.translate(nudge, 9.5f / 16f, flipped ? 14f / 16f - nudge : 2f / 16f + nudge) .translate(nudge, 9.5f / 16f, flipped ? 14f / 16f - nudge : 2f / 16f + nudge)
.uncenter() .uncenter()
.rotateX((flipped ? 1 : -1) * (progress * 90 + 270)); .rotateXDegrees((flipped ? 1 : -1) * (progress * 90 + 270));
} }
@Override @Override

View file

@ -48,7 +48,7 @@ public class ValueBoxRenderer {
ms.pushPose(); ms.pushPose();
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(230); .rotateXDegrees(230);
Matrix3f copy = new Matrix3f(ms.last() Matrix3f copy = new Matrix3f(ms.last()
.normal()); .normal());
ms.popPose(); ms.popPose();
@ -57,7 +57,7 @@ public class ValueBoxRenderer {
TransformStack.of(ms) TransformStack.of(ms)
.translate(0, 0, -1 / 4f) .translate(0, 0, -1 / 4f)
.translate(0, 0, 1 / 32f + .001) .translate(0, 0, 1 / 32f + .001)
.rotateY(180); .rotateYDegrees(180);
PoseStack squashedMS = new PoseStack(); PoseStack squashedMS = new PoseStack();
squashedMS.last() squashedMS.last()

View file

@ -113,8 +113,8 @@ public abstract class ValueBoxTransform {
float yRot = AngleHelper.horizontalAngle(getSide()) + 180; float yRot = AngleHelper.horizontalAngle(getSide()) + 180;
float xRot = getSide() == Direction.UP ? 90 : getSide() == Direction.DOWN ? 270 : 0; float xRot = getSide() == Direction.UP ? 90 : getSide() == Direction.DOWN ? 270 : 0;
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(yRot) .rotateYDegrees(yRot)
.rotateX(xRot); .rotateXDegrees(xRot);
} }
@Override @Override

View file

@ -85,9 +85,9 @@ public class CreateBlockEntityBuilder<T extends BlockEntity, P> extends BlockEnt
var instanceFactory = this.instanceFactory; var instanceFactory = this.instanceFactory;
if (instanceFactory != null) { if (instanceFactory != null) {
NonNullPredicate<T> renderNormally = this.renderNormally; NonNullPredicate<T> renderNormally = this.renderNormally;
SimpleBlockEntityVisualizer.configure(getEntry()) SimpleBlockEntityVisualizer.builder(getEntry())
.factory(instanceFactory.get()) .factory(instanceFactory.get())
.skipRender(be -> !renderNormally.test(be)) .skipVanillaRender(be -> !renderNormally.test(be))
.apply(); .apply();
} }
}); });

View file

@ -58,9 +58,9 @@ public class CreateEntityBuilder<T extends Entity, P> extends EntityBuilder<T, P
var instanceFactory = this.instanceFactory; var instanceFactory = this.instanceFactory;
if (instanceFactory != null) { if (instanceFactory != null) {
NonNullPredicate<T> renderNormally = this.renderNormally; NonNullPredicate<T> renderNormally = this.renderNormally;
SimpleEntityVisualizer.configure(getEntry()) SimpleEntityVisualizer.builder(getEntry())
.factory(instanceFactory.get()) .factory(instanceFactory.get())
.skipRender(be -> !renderNormally.test(be)) .skipVanillaRender(be -> !renderNormally.test(be))
.apply(); .apply();
} }

View file

@ -62,8 +62,8 @@ public class FluidRenderer {
var msr = TransformStack.of(ms); var msr = TransformStack.of(ms);
ms.pushPose(); ms.pushPose();
msr.center() msr.center()
.rotateY(AngleHelper.horizontalAngle(direction)) .rotateYDegrees(AngleHelper.horizontalAngle(direction))
.rotateX(direction == Direction.UP ? 180 : direction == Direction.DOWN ? 0 : 270) .rotateXDegrees(direction == Direction.UP ? 180 : direction == Direction.DOWN ? 0 : 270)
.uncenter(); .uncenter();
ms.translate(.5, 0, .5); ms.translate(.5, 0, .5);
@ -78,7 +78,7 @@ public class FluidRenderer {
ms.pushPose(); ms.pushPose();
renderFlowingTiledFace(Direction.SOUTH, hMin, yMin, hMax, yMax, h, builder, ms, light, color, flowTexture); renderFlowingTiledFace(Direction.SOUTH, hMin, yMin, hMax, yMax, h, builder, ms, light, color, flowTexture);
ms.popPose(); ms.popPose();
msr.rotateY(90); msr.rotateYDegrees(90);
} }
if (progress != 1) if (progress != 1)
@ -112,7 +112,7 @@ public class FluidRenderer {
if (fluidAttributes.isLighterThanAir()) if (fluidAttributes.isLighterThanAir())
TransformStack.of(ms) TransformStack.of(ms)
.translate(center) .translate(center)
.rotateX(180) .rotateXDegrees(180)
.translateBack(center); .translateBack(center);
for (Direction side : Iterate.directions) { for (Direction side : Iterate.directions) {

View file

@ -60,8 +60,8 @@ public abstract class Outline {
poseStack.pushPose(); poseStack.pushPose();
TransformStack.of(poseStack) TransformStack.of(poseStack)
.translate(start.x - camera.x, start.y - camera.y, start.z - camera.z) .translate(start.x - camera.x, start.y - camera.y, start.z - camera.z)
.rotateY(hAngle) .rotateYDegrees(hAngle)
.rotateX(vAngle); .rotateXDegrees(vAngle);
bufferCuboidLine(poseStack.last(), consumer, new Vector3f(), Direction.SOUTH, length, width, color, lightmap, bufferCuboidLine(poseStack.last(), consumer, new Vector3f(), Direction.SOUTH, length, width, color, lightmap,
disableNormals); disableNormals);
poseStack.popPose(); poseStack.popPose();

View file

@ -20,7 +20,6 @@ import org.apache.commons.lang3.mutable.MutableObject;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import org.joml.Vector4f; import org.joml.Vector4f;
import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator;
import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.gui.UIRenderHelper;
@ -32,6 +31,7 @@ import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.ponder.instruction.HideAllInstruction; import com.simibubi.create.foundation.ponder.instruction.HideAllInstruction;
import com.simibubi.create.foundation.ponder.instruction.PonderInstruction; import com.simibubi.create.foundation.ponder.instruction.PonderInstruction;
import com.simibubi.create.foundation.ponder.ui.PonderUI; import com.simibubi.create.foundation.ponder.ui.PonderUI;
import com.simibubi.create.foundation.render.DiffuseLightCalculator;
import com.simibubi.create.foundation.render.ForcedDiffuseState; import com.simibubi.create.foundation.render.ForcedDiffuseState;
import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -525,13 +525,13 @@ public class PonderScene {
ms.translate(width / 2, height / 2, 200 + offset); ms.translate(width / 2, height / 2, 200 + offset);
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(-35) .rotateXDegrees(-35)
.rotateY(55) .rotateYDegrees(55)
.translate(offset, 0, 0) .translate(offset, 0, 0)
.rotateY(-55) .rotateYDegrees(-55)
.rotateX(35) .rotateXDegrees(35)
.rotateX(xRotation.getValue(pt)) .rotateXDegrees(xRotation.getValue(pt))
.rotateY(yRotation.getValue(pt)); .rotateYDegrees(yRotation.getValue(pt));
UIRenderHelper.flipForGuiRender(ms); UIRenderHelper.flipForGuiRender(ms);
float f = 30 * scaleFactor; float f = 30 * scaleFactor;

View file

@ -104,7 +104,7 @@ public class MinecartElement extends AnimatedSceneElement {
Mth.lerp(pt, entity.yo, entity.getY()), Mth.lerp(pt, entity.zo, entity.getZ())); Mth.lerp(pt, entity.yo, entity.getY()), Mth.lerp(pt, entity.zo, entity.getZ()));
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(rotation.getValue(pt)); .rotateYDegrees(rotation.getValue(pt));
entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade));
ms.popPose(); ms.popPose();

View file

@ -148,7 +148,7 @@ public class ParrotElement extends AnimatedSceneElement {
Mth.lerp(pt, entity.zo, entity.getZ())); Mth.lerp(pt, entity.zo, entity.getZ()));
TransformStack.of(ms) TransformStack.of(ms)
.rotateY(AngleHelper.angleLerp(pt, entity.yRotO, entity.getYRot())); .rotateYDegrees(AngleHelper.angleLerp(pt, entity.yRotO, entity.getYRot()));
entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade));
ms.popPose(); ms.popPose();

View file

@ -25,67 +25,71 @@ public class AllInstanceTypes {
.cullShader(asResource("instance/cull/rotating.glsl")) .cullShader(asResource("instance/cull/rotating.glsl"))
.vertexShader(asResource("instance/rotating.vert")) .vertexShader(asResource("instance/rotating.vert"))
.layout(LayoutBuilder.create() .layout(LayoutBuilder.create()
.vector("light", IntegerRepr.SHORT, 2)
.vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4)
.vector("light", IntegerRepr.SHORT, 2)
.vector("overlay", IntegerRepr.SHORT, 2)
.vector("pos", FloatRepr.FLOAT, 3) .vector("pos", FloatRepr.FLOAT, 3)
.scalar("speed", FloatRepr.FLOAT) .scalar("speed", FloatRepr.FLOAT)
.scalar("offset", FloatRepr.FLOAT) .scalar("offset", FloatRepr.FLOAT)
.vector("axis", FloatRepr.NORMALIZED_BYTE, 3) .vector("axis", FloatRepr.NORMALIZED_BYTE, 3)
.build()) .build())
.writer((ptr, instance) -> { .writer((ptr, instance) -> {
MemoryUtil.memPutShort(ptr, instance.blockLight); MemoryUtil.memPutByte(ptr, instance.r);
MemoryUtil.memPutShort(ptr + 2, instance.skyLight); MemoryUtil.memPutByte(ptr + 1, instance.g);
MemoryUtil.memPutByte(ptr + 4, instance.r); MemoryUtil.memPutByte(ptr + 2, instance.b);
MemoryUtil.memPutByte(ptr + 5, instance.g); MemoryUtil.memPutByte(ptr + 3, instance.a);
MemoryUtil.memPutByte(ptr + 6, instance.b); MemoryUtil.memPutShort(ptr + 4, instance.blockLight);
MemoryUtil.memPutByte(ptr + 7, instance.a); MemoryUtil.memPutShort(ptr + 6, instance.skyLight);
MemoryUtil.memPutFloat(ptr + 8, instance.x); MemoryUtil.memPutInt(ptr + 8, instance.overlay);
MemoryUtil.memPutFloat(ptr + 12, instance.y); MemoryUtil.memPutFloat(ptr + 12, instance.x);
MemoryUtil.memPutFloat(ptr + 16, instance.z); MemoryUtil.memPutFloat(ptr + 16, instance.y);
MemoryUtil.memPutFloat(ptr + 20, instance.rotationalSpeed); MemoryUtil.memPutFloat(ptr + 20, instance.z);
MemoryUtil.memPutFloat(ptr + 24, instance.rotationOffset); MemoryUtil.memPutFloat(ptr + 24, instance.rotationalSpeed);
MemoryUtil.memPutByte(ptr + 28, instance.rotationAxisX); MemoryUtil.memPutFloat(ptr + 28, instance.rotationOffset);
MemoryUtil.memPutByte(ptr + 29, instance.rotationAxisY); MemoryUtil.memPutByte(ptr + 32, instance.rotationAxisX);
MemoryUtil.memPutByte(ptr + 30, instance.rotationAxisZ); MemoryUtil.memPutByte(ptr + 33, instance.rotationAxisY);
MemoryUtil.memPutByte(ptr + 34, instance.rotationAxisZ);
}) })
.register(); .register();
public static final InstanceType<BeltInstance> BELTS = SimpleInstanceType.builder(BeltInstance::new) public static final InstanceType<BeltInstance> BELTS = SimpleInstanceType.builder(BeltInstance::new)
.cullShader(asResource("instance/cull/belt.glsl")) .cullShader(asResource("instance/cull/belt.glsl"))
.vertexShader(asResource("instance/belt.vert")) .vertexShader(asResource("instance/belt.vert"))
.layout(LayoutBuilder.create() .layout(LayoutBuilder.create()
.vector("light", IntegerRepr.SHORT, 2)
.vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4)
.vector("light", IntegerRepr.SHORT, 2)
.vector("overlay", IntegerRepr.SHORT, 2)
.vector("pos", FloatRepr.FLOAT, 3) .vector("pos", FloatRepr.FLOAT, 3)
.scalar("speed", FloatRepr.FLOAT) .scalar("speed", FloatRepr.FLOAT)
.scalar("offset", FloatRepr.FLOAT) .scalar("offset", FloatRepr.FLOAT)
.vector("rotation", FloatRepr.FLOAT, 4) .vector("rotation", FloatRepr.FLOAT, 4)
.vector("sourceTexture", FloatRepr.FLOAT, 2) .vector("sourceTexture", FloatRepr.FLOAT, 2)
.vector("scrollTexture", FloatRepr.FLOAT, 4) .vector("scrollTexture", FloatRepr.FLOAT, 4)
.scalar("scrollMult", FloatRepr.NORMALIZED_BYTE) .scalar("scrollMult", FloatRepr.FLOAT)
.build()) .build())
.writer((ptr, instance) -> { .writer((ptr, instance) -> {
MemoryUtil.memPutShort(ptr, instance.blockLight); MemoryUtil.memPutByte(ptr, instance.r);
MemoryUtil.memPutShort(ptr + 2, instance.skyLight); MemoryUtil.memPutByte(ptr + 1, instance.g);
MemoryUtil.memPutByte(ptr + 4, instance.r); MemoryUtil.memPutByte(ptr + 2, instance.b);
MemoryUtil.memPutByte(ptr + 5, instance.g); MemoryUtil.memPutByte(ptr + 3, instance.a);
MemoryUtil.memPutByte(ptr + 6, instance.b); MemoryUtil.memPutShort(ptr + 4, instance.blockLight);
MemoryUtil.memPutByte(ptr + 7, instance.a); MemoryUtil.memPutShort(ptr + 6, instance.skyLight);
MemoryUtil.memPutFloat(ptr + 8, instance.x); MemoryUtil.memPutInt(ptr + 8, instance.overlay);
MemoryUtil.memPutFloat(ptr + 12, instance.y); MemoryUtil.memPutFloat(ptr + 12, instance.x);
MemoryUtil.memPutFloat(ptr + 16, instance.z); MemoryUtil.memPutFloat(ptr + 16, instance.y);
MemoryUtil.memPutFloat(ptr + 20, instance.rotationalSpeed); MemoryUtil.memPutFloat(ptr + 20, instance.z);
MemoryUtil.memPutFloat(ptr + 24, instance.rotationOffset); MemoryUtil.memPutFloat(ptr + 24, instance.rotationalSpeed);
MemoryUtil.memPutFloat(ptr + 28, instance.qX); MemoryUtil.memPutFloat(ptr + 28, instance.rotationOffset);
MemoryUtil.memPutFloat(ptr + 32, instance.qY); MemoryUtil.memPutFloat(ptr + 32, instance.rotation.x);
MemoryUtil.memPutFloat(ptr + 36, instance.qZ); MemoryUtil.memPutFloat(ptr + 36, instance.rotation.y);
MemoryUtil.memPutFloat(ptr + 40, instance.qW); MemoryUtil.memPutFloat(ptr + 40, instance.rotation.z);
MemoryUtil.memPutFloat(ptr + 44, instance.sourceU); MemoryUtil.memPutFloat(ptr + 44, instance.rotation.w);
MemoryUtil.memPutFloat(ptr + 48, instance.sourceV); MemoryUtil.memPutFloat(ptr + 48, instance.sourceU);
MemoryUtil.memPutFloat(ptr + 52, instance.minU); MemoryUtil.memPutFloat(ptr + 52, instance.sourceV);
MemoryUtil.memPutFloat(ptr + 56, instance.minV); MemoryUtil.memPutFloat(ptr + 56, instance.minU);
MemoryUtil.memPutFloat(ptr + 60, instance.maxU); MemoryUtil.memPutFloat(ptr + 60, instance.minV);
MemoryUtil.memPutFloat(ptr + 64, instance.maxV); MemoryUtil.memPutFloat(ptr + 64, instance.maxU);
MemoryUtil.memPutByte(ptr + 68, instance.scrollMult); MemoryUtil.memPutFloat(ptr + 68, instance.maxV);
MemoryUtil.memPutFloat(ptr + 72, instance.scrollMult);
}) })
.register(); .register();
public static final InstanceType<ActorInstance> ACTORS = SimpleInstanceType.builder(ActorInstance::new) public static final InstanceType<ActorInstance> ACTORS = SimpleInstanceType.builder(ActorInstance::new)
@ -110,10 +114,10 @@ public class AllInstanceTypes {
MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisX); MemoryUtil.memPutByte(ptr + 20, instance.rotationAxisX);
MemoryUtil.memPutByte(ptr + 21, instance.rotationAxisY); MemoryUtil.memPutByte(ptr + 21, instance.rotationAxisY);
MemoryUtil.memPutByte(ptr + 22, instance.rotationAxisZ); MemoryUtil.memPutByte(ptr + 22, instance.rotationAxisZ);
MemoryUtil.memPutFloat(ptr + 24, instance.qX); MemoryUtil.memPutFloat(ptr + 24, instance.rotation.x);
MemoryUtil.memPutFloat(ptr + 28, instance.qY); MemoryUtil.memPutFloat(ptr + 28, instance.rotation.y);
MemoryUtil.memPutFloat(ptr + 32, instance.qZ); MemoryUtil.memPutFloat(ptr + 32, instance.rotation.z);
MemoryUtil.memPutFloat(ptr + 34, instance.qW); MemoryUtil.memPutFloat(ptr + 34, instance.rotation.w);
MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterX); MemoryUtil.memPutByte(ptr + 38, instance.rotationCenterX);
MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterY); MemoryUtil.memPutByte(ptr + 39, instance.rotationCenterY);
MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterZ); MemoryUtil.memPutByte(ptr + 40, instance.rotationCenterZ);

View file

@ -67,8 +67,8 @@ public class CachedBufferer {
PoseStack stack = new PoseStack(); PoseStack stack = new PoseStack();
TransformStack.of(stack) TransformStack.of(stack)
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing)) .rotateXDegrees(AngleHelper.verticalAngle(facing))
.uncenter(); .uncenter();
return stack; return stack;
}; };
@ -79,8 +79,8 @@ public class CachedBufferer {
PoseStack stack = new PoseStack(); PoseStack stack = new PoseStack();
TransformStack.of(stack) TransformStack.of(stack)
.center() .center()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateYDegrees(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing) + 90) .rotateXDegrees(AngleHelper.verticalAngle(facing) + 90)
.uncenter(); .uncenter();
return stack; return stack;
}; };

View file

@ -0,0 +1,29 @@
package com.simibubi.create.foundation.render;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraftforge.client.model.lighting.QuadLighter;
public interface DiffuseLightCalculator {
DiffuseLightCalculator DEFAULT = DiffuseLightCalculator::diffuseLight;
DiffuseLightCalculator NETHER = DiffuseLightCalculator::diffuseLightNether;
static DiffuseLightCalculator forLevel(ClientLevel level) {
return level.effects().constantAmbientLight() ? NETHER : DEFAULT;
}
float getDiffuse(float normalX, float normalY, float normalZ, boolean shaded);
static float diffuseLight(float x, float y, float z, boolean shaded) {
if (!shaded) {
return 1f;
}
return QuadLighter.calculateShade(x, y, z, false);
}
static float diffuseLightNether(float x, float y, float z, boolean shaded) {
if (!shaded) {
return 0.9f;
}
return QuadLighter.calculateShade(x, y, z, true);
}
}

View file

@ -2,8 +2,6 @@ package com.simibubi.create.foundation.render;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator;
import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectArrayList;
public final class ForcedDiffuseState { public final class ForcedDiffuseState {

View file

@ -6,7 +6,6 @@ import org.joml.Quaternionf;
import org.joml.Vector3f; import org.joml.Vector3f;
import org.joml.Vector4f; import org.joml.Vector4f;
import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator;
import com.jozufozu.flywheel.lib.transform.TransformStack; import com.jozufozu.flywheel.lib.transform.TransformStack;
import com.jozufozu.flywheel.lib.util.ShadersModHandler; import com.jozufozu.flywheel.lib.util.ShadersModHandler;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;

View file

@ -49,7 +49,8 @@ public abstract class Outline {
ms.pushPose(); ms.pushPose();
TransformStack.of(ms) TransformStack.of(ms)
.translate(start) .translate(start)
.rotateY(hAngle).rotateX(vAngle); .rotateYDegrees(hAngle)
.rotateXDegrees(vAngle);
renderAACuboidLine(ms, buffer, Vec3.ZERO, new Vec3(0, 0, diff.length())); renderAACuboidLine(ms, buffer, Vec3.ZERO, new Vec3(0, 0, diff.length()));
ms.popPose(); ms.popPose();
} }

View file

@ -100,7 +100,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen {
ms.scale(24 * side, 24 * side, 32); ms.scale(24 * side, 24 * side, 32);
ms.translate(-1.75 * ((alpha * alpha) / 2f + .5f), .25f, 0); ms.translate(-1.75 * ((alpha * alpha) / 2f + .5f), .25f, 0);
TransformStack.of(ms) TransformStack.of(ms)
.rotateX(45); .rotateXDegrees(45);
GuiGameElement.of(AllBlocks.LARGE_COGWHEEL.getDefaultState()) GuiGameElement.of(AllBlocks.LARGE_COGWHEEL.getDefaultState())
.rotateBlock(0, Util.getMillis() / 32f * side, 0) .rotateBlock(0, Util.getMillis() / 32f * side, 0)
.render(graphics); .render(graphics);

View file

@ -11,6 +11,7 @@ void flw_instanceVertex(in FlwInstance instance) {
flw_vertexTexCoord = flw_vertexTexCoord - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll); flw_vertexTexCoord = flw_vertexTexCoord - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
flw_vertexLight = instance.light / 15.; flw_vertexLight = instance.light / 15.;
flw_vertexOverlay = instance.overlay;
#if defined(DEBUG_RAINBOW) #if defined(DEBUG_RAINBOW)
flw_vertexColor = instance.color; flw_vertexColor = instance.color;

View file

@ -15,6 +15,7 @@ void flw_instanceVertex(in FlwInstance instance) {
flw_vertexNormal = spin * flw_vertexNormal; flw_vertexNormal = spin * flw_vertexNormal;
flw_vertexLight = instance.light / 15.; flw_vertexLight = instance.light / 15.;
flw_vertexOverlay = instance.overlay;
#if defined(DEBUG_RAINBOW) #if defined(DEBUG_RAINBOW)
flw_vertexColor = instance.color; flw_vertexColor = instance.color;