diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java index 50098f65f..9cd7c0c7b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java @@ -1,91 +1,81 @@ package com.simibubi.create.content.contraptions.components.mixer; -import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; import com.simibubi.create.content.contraptions.base.ShaftlessCogInstance; import com.simibubi.create.foundation.render.backend.instancing.*; -import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData; +import com.simibubi.create.foundation.render.backend.instancing.impl.OrientedData; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; + import net.minecraft.util.Direction; public class MixerInstance extends ShaftlessCogInstance implements IDynamicInstance { - private final InstanceKey mixerHead; - private final InstanceKey mixerPole; + private final InstanceKey mixerHead; + private final InstanceKey mixerPole; + private final MechanicalMixerTileEntity mixer; - public MixerInstance(InstancedTileRenderer dispatcher, KineticTileEntity tile) { - super(dispatcher, tile); + public MixerInstance(InstancedTileRenderer dispatcher, MechanicalMixerTileEntity tile) { + super(dispatcher, tile); + this.mixer = tile; - mixerHead = getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_MIXER_HEAD, blockState) - .createInstance(); + mixerHead = getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_MIXER_HEAD, blockState) + .createInstance(); - mixerHead.getInstance() - .setRotationAxis(Direction.Axis.Y); + mixerHead.getInstance() + .setRotationAxis(Direction.Axis.Y); - mixerPole = getTransformMaterial() - .getModel(AllBlockPartials.MECHANICAL_MIXER_POLE, blockState) - .createInstance(); + mixerPole = getOrientedMaterial() + .getModel(AllBlockPartials.MECHANICAL_MIXER_POLE, blockState) + .createInstance(); - MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tile; - float renderedHeadOffset = getRenderedHeadOffset(mixer); + float renderedHeadOffset = getRenderedHeadOffset(); - transformPole(renderedHeadOffset); - transformHead(mixer, renderedHeadOffset); - } + transformPole(renderedHeadOffset); + transformHead(renderedHeadOffset); + } - @Override - public void beginFrame() { - MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tile; + @Override + public void beginFrame() { - float renderedHeadOffset = getRenderedHeadOffset(mixer); + float renderedHeadOffset = getRenderedHeadOffset(); - if (mixer.running) { - transformPole(renderedHeadOffset); - } + transformPole(renderedHeadOffset); + transformHead(renderedHeadOffset); + } - transformHead(mixer, renderedHeadOffset); - } + private void transformHead(float renderedHeadOffset) { + float speed = mixer.getRenderedHeadRotationSpeed(AnimationTickHolder.getPartialTicks()); - private void transformHead(MechanicalMixerTileEntity mixer, float renderedHeadOffset) { - float speed = mixer.getRenderedHeadRotationSpeed(AnimationTickHolder.getPartialTicks()); + mixerHead.getInstance() + .setPosition(getInstancePosition()) + .nudge(0, -renderedHeadOffset, 0) + .setRotationalSpeed(speed * 2); + } - mixerHead.getInstance() - .setPosition(getInstancePosition()) - .nudge(0, -renderedHeadOffset, 0) - .setRotationalSpeed(speed * 2); - } + private void transformPole(float renderedHeadOffset) { + mixerPole.getInstance() + .setPosition(getInstancePosition()) + .nudge(0, -renderedHeadOffset, 0); + } - private void transformPole(float renderedHeadOffset) { - MatrixStack ms = new MatrixStack(); + private float getRenderedHeadOffset() { + return mixer.getRenderedHeadOffset(AnimationTickHolder.getPartialTicks()); + } - MatrixStacker msr = MatrixStacker.of(ms); - msr.translate(getInstancePosition()); - msr.translate(0, -renderedHeadOffset, 0); + @Override + public void updateLight() { + super.updateLight(); - mixerPole.getInstance().setTransform(ms); - } + relight(pos.down(), mixerHead.getInstance()); + relight(pos, mixerPole.getInstance()); + } - private float getRenderedHeadOffset(MechanicalMixerTileEntity mixer) { - return mixer.getRenderedHeadOffset(AnimationTickHolder.getPartialTicks()); - } - - @Override - public void updateLight() { - super.updateLight(); - - relight(pos.down(), mixerHead.getInstance()); - - relight(pos, mixerPole.getInstance()); - } - - @Override - public void remove() { - super.remove(); - mixerHead.delete(); - mixerPole.delete(); - } + @Override + public void remove() { + super.remove(); + mixerHead.delete(); + mixerPole.delete(); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java index e9985adb6..d40e9d421 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.contraptions.components.press; +import net.minecraft.client.renderer.Quaternion; +import net.minecraft.client.renderer.Vector3f; + import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -8,19 +11,28 @@ import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance import com.simibubi.create.foundation.render.backend.instancing.InstanceKey; import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer; import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData; +import com.simibubi.create.foundation.render.backend.instancing.impl.OrientedData; +import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.MatrixStacker; public class PressInstance extends ShaftInstance implements IDynamicInstance { - private final InstanceKey pressHead; + private final InstanceKey pressHead; private final MechanicalPressTileEntity press; public PressInstance(InstancedTileRenderer dispatcher, MechanicalPressTileEntity tile) { super(dispatcher, tile); press = tile; - pressHead = AllBlockPartials.MECHANICAL_PRESS_HEAD.renderOnHorizontalModel(dispatcher, blockState).createInstance(); + pressHead = dispatcher.getOrientedMaterial() + .getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState) + .createInstance(); + + Quaternion q = Vector3f.POSITIVE_Y.getDegreesQuaternion(AngleHelper.horizontalAngle(blockState.get(MechanicalPressBlock.HORIZONTAL_FACING))); + + pressHead.getInstance().setRotation(q); + transformModels(); } @@ -35,14 +47,9 @@ public class PressInstance extends ShaftInstance implements IDynamicInstance { private void transformModels() { float renderedHeadOffset = getRenderedHeadOffset(press); - MatrixStack ms = new MatrixStack(); - - MatrixStacker msr = MatrixStacker.of(ms); - msr.translate(getInstancePosition()); - msr.translate(0, -renderedHeadOffset, 0); - pressHead.getInstance() - .setTransform(ms); + .setPosition(getInstancePosition()) + .nudge(0, -renderedHeadOffset, 0); } private float getRenderedHeadOffset(MechanicalPressTileEntity press) {