mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-04 17:34:58 +01:00
Bumpy road
- Bump flywheel build - Directly rotate the last pose and normal matrix in SBB
This commit is contained in:
parent
b3aba93665
commit
5be92fcde8
43 changed files with 124 additions and 123 deletions
|
@ -23,7 +23,7 @@ use_parchment = true
|
|||
# dependency versions
|
||||
registrate_version = MC1.20-1.3.3
|
||||
flywheel_minecraft_version = 1.20.1
|
||||
flywheel_version = 1.0.0-beta-98
|
||||
flywheel_version = 1.0.0-beta-103
|
||||
jei_minecraft_version = 1.20.1
|
||||
jei_version = 15.2.0.22
|
||||
curios_minecraft_version = 1.20.1
|
||||
|
|
|
@ -219,11 +219,11 @@ public class AllPartialModels {
|
|||
}
|
||||
|
||||
private static PartialModel block(String path) {
|
||||
return new PartialModel(Create.asResource("block/" + path));
|
||||
return PartialModel.of(Create.asResource("block/" + path));
|
||||
}
|
||||
|
||||
private static PartialModel entity(String path) {
|
||||
return new PartialModel(Create.asResource("entity/" + path));
|
||||
return PartialModel.of(Create.asResource("entity/" + path));
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
|
|
|
@ -83,7 +83,7 @@ public class HarvesterActorVisual extends ActorVisual {
|
|||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
harvester.loadIdentity()
|
||||
harvester.setIdentityTransform()
|
||||
.translate(context.localPos)
|
||||
.center()
|
||||
.rotateYDegrees(horizontalAngle)
|
||||
|
|
|
@ -42,14 +42,14 @@ public class PIInstance {
|
|||
}
|
||||
|
||||
public void beginFrame(float progress) {
|
||||
middle.loadIdentity()
|
||||
middle.setIdentityTransform()
|
||||
.translate(instancePos)
|
||||
.center()
|
||||
.rotateYDegrees(angleY)
|
||||
.rotateXDegrees(angleX)
|
||||
.uncenter();
|
||||
|
||||
top.loadIdentity()
|
||||
top.setIdentityTransform()
|
||||
.translate(instancePos)
|
||||
.center()
|
||||
.rotateYDegrees(angleY)
|
||||
|
|
|
@ -27,7 +27,7 @@ public class RollerActorVisual extends HarvesterActorVisual {
|
|||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
harvester.loadIdentity()
|
||||
harvester.setIdentityTransform()
|
||||
.translate(context.localPos)
|
||||
.center()
|
||||
.rotateYDegrees(horizontalAngle)
|
||||
|
@ -38,7 +38,7 @@ public class RollerActorVisual extends HarvesterActorVisual {
|
|||
.rotateYDegrees(90)
|
||||
.setChanged();
|
||||
|
||||
frame.loadIdentity()
|
||||
frame.setIdentityTransform()
|
||||
.translate(context.localPos)
|
||||
.center()
|
||||
.rotateYDegrees(horizontalAngle + 180)
|
||||
|
|
|
@ -41,8 +41,8 @@ public class BearingVisual<B extends KineticBlockEntity & IBearingBlockEntity> e
|
|||
topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top))
|
||||
.createInstance();
|
||||
|
||||
topInstance.setPosition(getVisualPosition())
|
||||
.setRotation(blockOrientation)
|
||||
topInstance.position(getVisualPosition())
|
||||
.rotation(blockOrientation)
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ public class BearingVisual<B extends KineticBlockEntity & IBearingBlockEntity> e
|
|||
|
||||
rot.mul(blockOrientation);
|
||||
|
||||
topInstance.setRotation(rot)
|
||||
topInstance.rotation(rot)
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -42,8 +42,8 @@ public class StabilizedBearingVisual extends ActorVisual {
|
|||
.createInstance();
|
||||
|
||||
int blockLight = localBlockLight();
|
||||
topInstance.setPosition(movementContext.localPos)
|
||||
.setRotation(blockOrientation)
|
||||
topInstance.position(movementContext.localPos)
|
||||
.rotation(blockOrientation)
|
||||
.light(blockLight, 0);
|
||||
|
||||
shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite()))
|
||||
|
@ -62,7 +62,7 @@ public class StabilizedBearingVisual extends ActorVisual {
|
|||
|
||||
rotation.mul(blockOrientation);
|
||||
|
||||
topInstance.setRotation(rotation);
|
||||
topInstance.rotation(rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -11,7 +11,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
|
|||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -70,7 +70,7 @@ public class StickerBlockEntity extends SmartBlockEntity {
|
|||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> playSound(false));
|
||||
piston.chase(target, .4f, Chaser.LINEAR);
|
||||
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
}
|
||||
|
||||
public boolean isAttachedToBlock() {
|
||||
|
|
|
@ -54,7 +54,7 @@ public class StickerVisual extends AbstractBlockEntityVisual<StickerBlockEntity>
|
|||
}
|
||||
|
||||
private void animateHead(float offset) {
|
||||
head.loadIdentity()
|
||||
head.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.nudge(blockEntity.hashCode())
|
||||
.center()
|
||||
|
|
|
@ -64,7 +64,7 @@ public class GantryCarriageVisual extends ShaftVisual<GantryCarriageBlockEntity>
|
|||
}
|
||||
|
||||
private void animateCogs(float cogAngle) {
|
||||
gantryCogs.loadIdentity()
|
||||
gantryCogs.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.center()
|
||||
.rotateYDegrees(AngleHelper.horizontalAngle(facing))
|
||||
|
|
|
@ -47,7 +47,7 @@ public abstract class AbstractPulleyVisual<T extends KineticBlockEntity> extends
|
|||
rotationAxis = Axis.of(rotatingAbout.step());
|
||||
|
||||
coil = getCoilModel().createInstance()
|
||||
.setPosition(getVisualPosition());
|
||||
.position(getVisualPosition());
|
||||
coil.setChanged();
|
||||
|
||||
magnet = new SelectInstance<>(this::getMagnetModelIndex);
|
||||
|
@ -77,7 +77,7 @@ public abstract class AbstractPulleyVisual<T extends KineticBlockEntity> extends
|
|||
@Override
|
||||
public void beginFrame(DynamicVisual.Context ctx) {
|
||||
updateOffset(ctx.partialTick());
|
||||
coil.setRotation(rotationAxis.rotationDegrees(offset * 180))
|
||||
coil.rotation(rotationAxis.rotationDegrees(offset * 180))
|
||||
.setChanged();
|
||||
|
||||
int neededRopeCount = getNeededRopeCount();
|
||||
|
@ -88,8 +88,8 @@ public abstract class AbstractPulleyVisual<T extends KineticBlockEntity> extends
|
|||
.ifPresent(data -> {
|
||||
int i = Math.max(0, Mth.floor(offset));
|
||||
int light = lightCache.getPackedLight(i);
|
||||
data.setPosition(getVisualPosition())
|
||||
.nudgePosition(0, -offset, 0)
|
||||
data.position(getVisualPosition())
|
||||
.translatePosition(0, -offset, 0)
|
||||
.light(light)
|
||||
.setChanged();
|
||||
});
|
||||
|
@ -101,8 +101,8 @@ public abstract class AbstractPulleyVisual<T extends KineticBlockEntity> extends
|
|||
float halfRopeNudge = f > .75f ? f - 1 : f;
|
||||
|
||||
int light = lightCache.getPackedLight(0);
|
||||
rope1.setPosition(getVisualPosition())
|
||||
.nudgePosition(0, -halfRopeNudge, 0)
|
||||
rope1.position(getVisualPosition())
|
||||
.translatePosition(0, -halfRopeNudge, 0)
|
||||
.light(light)
|
||||
.setChanged();
|
||||
});
|
||||
|
@ -113,8 +113,8 @@ public abstract class AbstractPulleyVisual<T extends KineticBlockEntity> extends
|
|||
int light = lightCache.getPackedLight(size - 1 - i);
|
||||
|
||||
rope.get(i)
|
||||
.setPosition(getVisualPosition())
|
||||
.nudgePosition(0, -offset + i + 1, 0)
|
||||
.position(getVisualPosition())
|
||||
.translatePosition(0, -offset + i + 1, 0)
|
||||
.light(light)
|
||||
.setChanged();
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ import it.unimi.dsi.fastutil.longs.LongArraySet;
|
|||
import it.unimi.dsi.fastutil.longs.LongSet;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.SectionPos;
|
||||
import net.minecraft.core.Vec3i;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.level.BlockAndTintGetter;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
@ -65,7 +66,7 @@ public class ContraptionVisual<E extends AbstractContraptionEntity> extends Abst
|
|||
|
||||
public ContraptionVisual(VisualizationContext ctx, E entity, float partialTick) {
|
||||
super(ctx, entity, partialTick);
|
||||
embedding = ctx.createEmbedding();
|
||||
embedding = ctx.createEmbedding(Vec3i.ZERO);
|
||||
|
||||
init(partialTick);
|
||||
}
|
||||
|
@ -258,10 +259,6 @@ public class ContraptionVisual<E extends AbstractContraptionEntity> extends Abst
|
|||
|
||||
actors.forEach(ActorVisual::delete);
|
||||
|
||||
if (model != null) {
|
||||
model.delete();
|
||||
}
|
||||
|
||||
if (structure != null) {
|
||||
structure.delete();
|
||||
}
|
||||
|
|
|
@ -18,11 +18,11 @@ import net.minecraft.world.phys.Vec3;
|
|||
|
||||
public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer {
|
||||
|
||||
protected static final PartialModel COG = new PartialModel(Create.asResource("item/extendo_grip/cog"));
|
||||
protected static final PartialModel THIN_SHORT = new PartialModel(Create.asResource("item/extendo_grip/thin_short"));
|
||||
protected static final PartialModel WIDE_SHORT = new PartialModel(Create.asResource("item/extendo_grip/wide_short"));
|
||||
protected static final PartialModel THIN_LONG = new PartialModel(Create.asResource("item/extendo_grip/thin_long"));
|
||||
protected static final PartialModel WIDE_LONG = new PartialModel(Create.asResource("item/extendo_grip/wide_long"));
|
||||
protected static final PartialModel COG = PartialModel.of(Create.asResource("item/extendo_grip/cog"));
|
||||
protected static final PartialModel THIN_SHORT = PartialModel.of(Create.asResource("item/extendo_grip/thin_short"));
|
||||
protected static final PartialModel WIDE_SHORT = PartialModel.of(Create.asResource("item/extendo_grip/wide_short"));
|
||||
protected static final PartialModel THIN_LONG = PartialModel.of(Create.asResource("item/extendo_grip/thin_long"));
|
||||
protected static final PartialModel WIDE_LONG = PartialModel.of(Create.asResource("item/extendo_grip/wide_long"));
|
||||
|
||||
private static final Vec3 ROTATION_OFFSET = new Vec3(0, 1 / 2f, 1 / 2f);
|
||||
private static final Vec3 COG_ROTATION_OFFSET = new Vec3(0, 1 / 16f, 0);
|
||||
|
|
|
@ -23,7 +23,7 @@ import net.minecraft.world.item.ItemStack;
|
|||
|
||||
public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer {
|
||||
|
||||
protected static final PartialModel COG = new PartialModel(Create.asResource("item/potato_cannon/cog"));
|
||||
protected static final PartialModel COG = PartialModel.of(Create.asResource("item/potato_cannon/cog"));
|
||||
|
||||
@Override
|
||||
protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer,
|
||||
|
|
|
@ -17,9 +17,9 @@ import net.minecraft.world.item.ItemStack;
|
|||
|
||||
public class SymmetryWandItemRenderer extends CustomRenderedItemModelRenderer {
|
||||
|
||||
protected static final PartialModel BITS = new PartialModel(Create.asResource("item/wand_of_symmetry/bits"));
|
||||
protected static final PartialModel CORE = new PartialModel(Create.asResource("item/wand_of_symmetry/core"));
|
||||
protected static final PartialModel CORE_GLOW = new PartialModel(Create.asResource("item/wand_of_symmetry/core_glow"));
|
||||
protected static final PartialModel BITS = PartialModel.of(Create.asResource("item/wand_of_symmetry/bits"));
|
||||
protected static final PartialModel CORE = PartialModel.of(Create.asResource("item/wand_of_symmetry/core"));
|
||||
protected static final PartialModel CORE_GLOW = PartialModel.of(Create.asResource("item/wand_of_symmetry/core_glow"));
|
||||
|
||||
@Override
|
||||
protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType,
|
||||
|
|
|
@ -51,7 +51,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual<ToolboxBlockEntity>
|
|||
float lidAngle = blockEntity.lid.getValue(partialTicks);
|
||||
float drawerOffset = blockEntity.drawers.getValue(partialTicks);
|
||||
|
||||
lid.loadIdentity()
|
||||
lid.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.center()
|
||||
.rotateYDegrees(-facing.toYRot())
|
||||
|
@ -62,7 +62,7 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual<ToolboxBlockEntity>
|
|||
.setChanged();
|
||||
|
||||
for (int offset : Iterate.zeroAndOne) {
|
||||
drawers[offset].loadIdentity()
|
||||
drawers[offset].setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.center()
|
||||
.rotateYDegrees(-facing.toYRot())
|
||||
|
|
|
@ -16,7 +16,7 @@ import net.minecraft.world.item.ItemStack;
|
|||
|
||||
public class WrenchItemRenderer extends CustomRenderedItemModelRenderer {
|
||||
|
||||
protected static final PartialModel GEAR = new PartialModel(Create.asResource("item/wrench/gear"));
|
||||
protected static final PartialModel GEAR = PartialModel.of(Create.asResource("item/wrench/gear"));
|
||||
|
||||
@Override
|
||||
protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType,
|
||||
|
|
|
@ -22,9 +22,9 @@ import net.minecraft.world.item.ItemStack;
|
|||
|
||||
public class WorldshaperItemRenderer extends ZapperItemRenderer {
|
||||
|
||||
protected static final PartialModel CORE = new PartialModel(Create.asResource("item/handheld_worldshaper/core"));
|
||||
protected static final PartialModel CORE_GLOW = new PartialModel(Create.asResource("item/handheld_worldshaper/core_glow"));
|
||||
protected static final PartialModel ACCELERATOR = new PartialModel(Create.asResource("item/handheld_worldshaper/accelerator"));
|
||||
protected static final PartialModel CORE = PartialModel.of(Create.asResource("item/handheld_worldshaper/core"));
|
||||
protected static final PartialModel CORE_GLOW = PartialModel.of(Create.asResource("item/handheld_worldshaper/core_glow"));
|
||||
protected static final PartialModel ACCELERATOR = PartialModel.of(Create.asResource("item/handheld_worldshaper/accelerator"));
|
||||
|
||||
@Override
|
||||
protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, ItemDisplayContext transformType,
|
||||
|
|
|
@ -59,7 +59,7 @@ public class FluidValveVisual extends ShaftVisual<FluidValveBlockEntity> impleme
|
|||
float pointerRotation = Mth.lerp(value, 0, -90);
|
||||
settled = (value == 0 || value == 1) && blockEntity.pointer.settled();
|
||||
|
||||
pointer.loadIdentity()
|
||||
pointer.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.center()
|
||||
.rotateYDegrees((float) yRot)
|
||||
|
|
|
@ -27,7 +27,7 @@ import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup;
|
|||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.infrastructure.config.AllConfigs;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.resources.language.I18n;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -265,7 +265,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI
|
|||
effects.triggerOverStressedEffect();
|
||||
|
||||
if (clientPacket)
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
}
|
||||
|
||||
public float getGeneratedSpeed() {
|
||||
|
@ -578,7 +578,7 @@ public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleI
|
|||
public void requestModelDataUpdate() {
|
||||
super.requestModelDataUpdate();
|
||||
if (!this.remove)
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
|
|
|
@ -48,7 +48,7 @@ public class HandCrankVisual extends KineticBlockEntityVisual<HandCrankBlockEnti
|
|||
Direction.Axis axis = facing.getAxis();
|
||||
float angle = blockEntity.getIndependentAngle(pt);
|
||||
|
||||
crank.loadIdentity()
|
||||
crank.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.center()
|
||||
.rotate(angle, Direction.get(Direction.AxisDirection.POSITIVE, axis))
|
||||
|
|
|
@ -121,8 +121,8 @@ public class DeployerVisual extends ShaftVisual<DeployerBlockEntity> implements
|
|||
float y = blockPos.getY() + ((float) facingVec.getY()) * distance;
|
||||
float z = blockPos.getZ() + ((float) facingVec.getZ()) * distance;
|
||||
|
||||
pole.setPosition(x, y, z).setChanged();
|
||||
hand.setPosition(x, y, z).setChanged();
|
||||
pole.position(x, y, z).setChanged();
|
||||
hand.position(x, y, z).setChanged();
|
||||
}
|
||||
|
||||
static void updateRotation(OrientedInstance pole, OrientedInstance hand, float yRot, float xRot, float zRot) {
|
||||
|
@ -130,12 +130,12 @@ public class DeployerVisual extends ShaftVisual<DeployerBlockEntity> implements
|
|||
Quaternionf q = Axis.YP.rotationDegrees(yRot);
|
||||
q.mul(Axis.XP.rotationDegrees(xRot));
|
||||
|
||||
hand.setRotation(q)
|
||||
hand.rotation(q)
|
||||
.setChanged();
|
||||
|
||||
q.mul(Axis.ZP.rotationDegrees(zRot));
|
||||
|
||||
pole.setRotation(q)
|
||||
pole.rotation(q)
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ import com.simibubi.create.foundation.utility.VecHelper;
|
|||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
import com.simibubi.create.infrastructure.config.AllConfigs;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.SectionPos;
|
||||
|
@ -552,7 +552,7 @@ public class ArmBlockEntity extends KineticBlockEntity implements ITransformable
|
|||
return;
|
||||
|
||||
if (hadGoggles != goggles)
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
|
||||
boolean ceiling = isOnCeiling();
|
||||
if (interactionPointTagBefore == null || interactionPointTagBefore.size() != interactionPointTag.size())
|
||||
|
|
|
@ -132,12 +132,12 @@ public class ArmVisual extends SingleRotatingVisual<ArmBlockEntity> implements S
|
|||
|
||||
ArmRenderer.transformLowerArm(msr, lowerArmAngle);
|
||||
lowerBody.setTransform(msLocal)
|
||||
.color(color)
|
||||
.colorRgb(color)
|
||||
.setChanged();
|
||||
|
||||
ArmRenderer.transformUpperArm(msr, upperArmAngle);
|
||||
upperBody.setTransform(msLocal)
|
||||
.color(color)
|
||||
.colorRgb(color)
|
||||
.setChanged();
|
||||
|
||||
ArmRenderer.transformHead(msr, headAngle);
|
||||
|
|
|
@ -65,8 +65,8 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual
|
|||
}
|
||||
|
||||
private void transformPole(float renderedHeadOffset) {
|
||||
mixerPole.setPosition(getVisualPosition())
|
||||
.nudgePosition(0, -renderedHeadOffset, 0)
|
||||
mixerPole.position(getVisualPosition())
|
||||
.translatePosition(0, -renderedHeadOffset, 0)
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ public class PressVisual extends ShaftVisual<MechanicalPressBlockEntity> impleme
|
|||
Quaternionf q = Axis.YP
|
||||
.rotationDegrees(AngleHelper.horizontalAngle(blockState.getValue(MechanicalPressBlock.HORIZONTAL_FACING)));
|
||||
|
||||
pressHead.setRotation(q);
|
||||
pressHead.rotation(q);
|
||||
|
||||
transformModels(partialTick);
|
||||
}
|
||||
|
@ -43,8 +43,8 @@ public class PressVisual extends ShaftVisual<MechanicalPressBlockEntity> impleme
|
|||
private void transformModels(float pt) {
|
||||
float renderedHeadOffset = getRenderedHeadOffset(pt);
|
||||
|
||||
pressHead.setPosition(getVisualPosition())
|
||||
.nudgePosition(0, -renderedHeadOffset, 0)
|
||||
pressHead.position(getVisualPosition())
|
||||
.translatePosition(0, -renderedHeadOffset, 0)
|
||||
.setChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -39,9 +39,9 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual<SteamEngineBloc
|
|||
public void beginFrame(DynamicVisual.Context ctx) {
|
||||
Float angle = blockEntity.getTargetAngle();
|
||||
if (angle == null) {
|
||||
piston.setEmptyTransform().setChanged();
|
||||
linkage.setEmptyTransform().setChanged();
|
||||
connector.setEmptyTransform().setChanged();
|
||||
piston.setZeroTransform().setChanged();
|
||||
linkage.setZeroTransform().setChanged();
|
||||
connector.setZeroTransform().setChanged();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual<SteamEngineBloc
|
|||
}
|
||||
|
||||
protected TransformedInstance transformed(TransformedInstance modelData, Direction facing, boolean roll90) {
|
||||
return modelData.loadIdentity()
|
||||
return modelData.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.center()
|
||||
.rotateYDegrees(AngleHelper.horizontalAngle(facing))
|
||||
|
|
|
@ -58,7 +58,7 @@ public class EjectorVisual extends ShaftVisual<EjectorBlockEntity> implements Si
|
|||
private void pivotPlate(float lidProgress) {
|
||||
float angle = lidProgress * 70;
|
||||
|
||||
EjectorRenderer.applyLidAngle(blockEntity, angle, plate.loadIdentity().translate(getVisualPosition()));
|
||||
EjectorRenderer.applyLidAngle(blockEntity, angle, plate.setIdentityTransform().translate(getVisualPosition()));
|
||||
plate.setChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
|||
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
|
||||
import com.simibubi.create.infrastructure.config.AllConfigs;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
@ -363,7 +363,7 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering
|
|||
extractionCooldown = compound.getInt("TransferCooldown");
|
||||
|
||||
if (clientPacket)
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
}
|
||||
|
||||
public void onTransfer(ItemStack stack) {
|
||||
|
|
|
@ -19,7 +19,7 @@ import com.simibubi.create.foundation.utility.Iterate;
|
|||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Direction.Axis;
|
||||
|
@ -109,7 +109,7 @@ public class BeltTunnelBlockEntity extends SmartBlockEntity {
|
|||
sides.addAll(flaps.keySet());
|
||||
super.read(compound, clientPacket);
|
||||
if (clientPacket)
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
}
|
||||
|
||||
private LerpedFloat createChasingFlap() {
|
||||
|
|
|
@ -137,7 +137,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual<BlazeBurnerBloc
|
|||
|
||||
float horizontalAngle = AngleHelper.rad(blockEntity.headAngle.getValue(ctx.partialTick()));
|
||||
|
||||
head.loadIdentity()
|
||||
head.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.translateY(headY)
|
||||
.translate(Translate.CENTER)
|
||||
|
@ -146,7 +146,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual<BlazeBurnerBloc
|
|||
.setChanged();
|
||||
|
||||
if (goggles != null) {
|
||||
goggles.loadIdentity()
|
||||
goggles.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.translateY(headY + 8 / 16f)
|
||||
.translate(Translate.CENTER)
|
||||
|
@ -156,7 +156,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual<BlazeBurnerBloc
|
|||
}
|
||||
|
||||
if (hat != null) {
|
||||
hat.loadIdentity()
|
||||
hat.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.translateY(headY);
|
||||
if (isInert) {
|
||||
|
@ -177,7 +177,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual<BlazeBurnerBloc
|
|||
if (smallRods != null) {
|
||||
float offset1 = Mth.sin((float) ((renderTick / 16f + Math.PI) % (2 * Math.PI))) / offsetMult;
|
||||
|
||||
smallRods.loadIdentity()
|
||||
smallRods.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.translateY(offset1 + animation + .125f)
|
||||
.setChanged();
|
||||
|
@ -186,7 +186,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual<BlazeBurnerBloc
|
|||
if (largeRods != null) {
|
||||
float offset2 = Mth.sin((float) ((renderTick / 16f + Math.PI / 2) % (2 * Math.PI))) / offsetMult;
|
||||
|
||||
largeRods.loadIdentity()
|
||||
largeRods.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.translateY(offset2 + animation - 3 / 16f)
|
||||
.setChanged();
|
||||
|
|
|
@ -39,7 +39,7 @@ public class AnalogLeverVisual extends AbstractBlockEntityVisual<AnalogLeverBloc
|
|||
rX = face == AttachFace.FLOOR ? 0 : face == AttachFace.WALL ? 90 : 180;
|
||||
rY = AngleHelper.horizontalAngle(blockState.getValue(AnalogLeverBlock.FACING));
|
||||
|
||||
transform(indicator.loadIdentity());
|
||||
transform(indicator.setIdentityTransform());
|
||||
|
||||
animateLever(partialTick);
|
||||
}
|
||||
|
@ -53,12 +53,12 @@ public class AnalogLeverVisual extends AbstractBlockEntityVisual<AnalogLeverBloc
|
|||
protected void animateLever(float pt) {
|
||||
float state = blockEntity.clientState.getValue(pt);
|
||||
|
||||
indicator.color(Color.mixColors(0x2C0300, 0xCD0000, state / 15f));
|
||||
indicator.colorRgb(Color.mixColors(0x2C0300, 0xCD0000, state / 15f));
|
||||
indicator.setChanged();
|
||||
|
||||
float angle = (float) ((state / 15) * 90 / 180 * Math.PI);
|
||||
|
||||
transform(handle.loadIdentity()).translate(1 / 2f, 1 / 16f, 1 / 2f)
|
||||
transform(handle.setIdentityTransform()).translate(1 / 2f, 1 / 16f, 1 / 2f)
|
||||
.rotate(angle, Direction.EAST)
|
||||
.translate(-1 / 2f, -1 / 16f, -1 / 2f)
|
||||
.setChanged();
|
||||
|
|
|
@ -25,9 +25,9 @@ public class BrassDiodeVisual extends AbstractBlockEntityVisual<BrassDiodeBlockE
|
|||
|
||||
indicator = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLEXPEATER_INDICATOR)).createInstance();
|
||||
|
||||
indicator.loadIdentity()
|
||||
indicator.setIdentityTransform()
|
||||
.translate(getVisualPosition())
|
||||
.color(getColor())
|
||||
.colorRgb(getColor())
|
||||
.setChanged();
|
||||
|
||||
previousState = blockEntity.state;
|
||||
|
@ -37,7 +37,7 @@ public class BrassDiodeVisual extends AbstractBlockEntityVisual<BrassDiodeBlockE
|
|||
public void tick(TickableVisual.Context context) {
|
||||
if (previousState == blockEntity.state) return;
|
||||
|
||||
indicator.color(getColor());
|
||||
indicator.colorRgb(getColor());
|
||||
indicator.setChanged();
|
||||
|
||||
previousState = blockEntity.state;
|
||||
|
|
|
@ -25,8 +25,8 @@ import net.minecraft.world.item.ItemStack;
|
|||
|
||||
public class LinkedControllerItemRenderer extends CustomRenderedItemModelRenderer {
|
||||
|
||||
protected static final PartialModel POWERED = new PartialModel(Create.asResource("item/linked_controller/powered"));
|
||||
protected static final PartialModel BUTTON = new PartialModel(Create.asResource("item/linked_controller/button"));
|
||||
protected static final PartialModel POWERED = PartialModel.of(Create.asResource("item/linked_controller/powered"));
|
||||
protected static final PartialModel BUTTON = PartialModel.of(Create.asResource("item/linked_controller/button"));
|
||||
|
||||
static LerpedFloat equipProgress;
|
||||
static Vector<LerpedFloat> buttons;
|
||||
|
|
|
@ -7,9 +7,9 @@ import java.util.Map;
|
|||
import java.util.stream.IntStream;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Matrix3f;
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Matrix3fc;
|
||||
import org.joml.Matrix4fc;
|
||||
import org.joml.Quaternionfc;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
|
@ -304,7 +304,7 @@ public abstract class BogeyRenderer {
|
|||
*/
|
||||
|
||||
private String keyFromModel(PartialModel partialModel) {
|
||||
return partialModel.getLocation().toString();
|
||||
return partialModel.modelLocation().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -348,7 +348,7 @@ public abstract class BogeyRenderer {
|
|||
|
||||
public BogeyModelData setEmptyTransform() {
|
||||
if (this.transform instanceof TransformedInstance model)
|
||||
model.setEmptyTransform()
|
||||
model.setZeroTransform()
|
||||
.setChanged();
|
||||
return this;
|
||||
}
|
||||
|
@ -367,19 +367,19 @@ public abstract class BogeyRenderer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public BogeyModelData mulPose(Matrix4f pose) {
|
||||
public BogeyModelData mulPose(Matrix4fc pose) {
|
||||
this.transform.mulPose(pose);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BogeyModelData mulNormal(Matrix3f normal) {
|
||||
public BogeyModelData mulNormal(Matrix3fc normal) {
|
||||
this.transform.mulNormal(normal);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BogeyModelData rotate(Quaternionf quaternion) {
|
||||
public BogeyModelData rotate(Quaternionfc quaternion) {
|
||||
this.transform.rotate(quaternion);
|
||||
return this;
|
||||
}
|
||||
|
@ -391,7 +391,7 @@ public abstract class BogeyRenderer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public BogeyModelData translate(double x, double y, double z) {
|
||||
public BogeyModelData translate(float x, float y, float z) {
|
||||
this.transform.translate(x, y, z);
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
|
|||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction.Axis;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
|
@ -225,7 +225,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable
|
|||
level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 16);
|
||||
}
|
||||
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationManager.queueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> VisualizationHelper.queueUpdate(this));
|
||||
|
||||
if (hasInteractableConnections())
|
||||
registerToCurveInteraction();
|
||||
|
|
|
@ -100,9 +100,9 @@ public class TrackMaterialFactory {
|
|||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
|
||||
String namespace = id.getNamespace();
|
||||
String prefix = "block/track/" + id.getPath() + "/";
|
||||
tieModel = new PartialModel(new ResourceLocation(namespace, prefix + "tie"));
|
||||
leftSegmentModel = new PartialModel(new ResourceLocation(namespace, prefix + "segment_left"));
|
||||
rightSegmentModel = new PartialModel(new ResourceLocation(namespace, prefix + "segment_right"));
|
||||
tieModel = PartialModel.of(new ResourceLocation(namespace, prefix + "tie"));
|
||||
leftSegmentModel = PartialModel.of(new ResourceLocation(namespace, prefix + "segment_left"));
|
||||
rightSegmentModel = PartialModel.of(new ResourceLocation(namespace, prefix + "segment_right"));
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import com.tterrag.registrate.builders.BuilderCallback;
|
|||
import com.tterrag.registrate.util.OneTimeEventReceiver;
|
||||
import com.tterrag.registrate.util.nullness.NonNullSupplier;
|
||||
|
||||
import dev.engine_room.flywheel.lib.visual.SimpleBlockEntityVisualizer;
|
||||
import dev.engine_room.flywheel.lib.visualization.SimpleBlockEntityVisualizer;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
|
|
@ -10,7 +10,7 @@ import com.tterrag.registrate.builders.EntityBuilder;
|
|||
import com.tterrag.registrate.util.OneTimeEventReceiver;
|
||||
import com.tterrag.registrate.util.nullness.NonNullSupplier;
|
||||
|
||||
import dev.engine_room.flywheel.lib.visual.SimpleEntityVisualizer;
|
||||
import dev.engine_room.flywheel.lib.visualization.SimpleEntityVisualizer;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.MobCategory;
|
||||
|
|
|
@ -34,10 +34,10 @@ public class AllInstanceTypes {
|
|||
.vector("axis", FloatRepr.NORMALIZED_BYTE, 3)
|
||||
.build())
|
||||
.writer((ptr, instance) -> {
|
||||
MemoryUtil.memPutByte(ptr, instance.r);
|
||||
MemoryUtil.memPutByte(ptr + 1, instance.g);
|
||||
MemoryUtil.memPutByte(ptr + 2, instance.b);
|
||||
MemoryUtil.memPutByte(ptr + 3, instance.a);
|
||||
MemoryUtil.memPutByte(ptr, instance.red);
|
||||
MemoryUtil.memPutByte(ptr + 1, instance.green);
|
||||
MemoryUtil.memPutByte(ptr + 2, instance.blue);
|
||||
MemoryUtil.memPutByte(ptr + 3, instance.alpha);
|
||||
ExtraMemoryOps.put2x16(ptr + 4, instance.light);
|
||||
ExtraMemoryOps.put2x16(ptr + 8, instance.overlay);
|
||||
MemoryUtil.memPutFloat(ptr + 12, instance.x);
|
||||
|
@ -67,10 +67,10 @@ public class AllInstanceTypes {
|
|||
.scalar("scrollMult", FloatRepr.FLOAT)
|
||||
.build())
|
||||
.writer((ptr, instance) -> {
|
||||
MemoryUtil.memPutByte(ptr, instance.r);
|
||||
MemoryUtil.memPutByte(ptr + 1, instance.g);
|
||||
MemoryUtil.memPutByte(ptr + 2, instance.b);
|
||||
MemoryUtil.memPutByte(ptr + 3, instance.a);
|
||||
MemoryUtil.memPutByte(ptr, instance.red);
|
||||
MemoryUtil.memPutByte(ptr + 1, instance.green);
|
||||
MemoryUtil.memPutByte(ptr + 2, instance.blue);
|
||||
MemoryUtil.memPutByte(ptr + 3, instance.alpha);
|
||||
ExtraMemoryOps.put2x16(ptr + 4, instance.light);
|
||||
ExtraMemoryOps.put2x16(ptr + 8, instance.overlay);
|
||||
MemoryUtil.memPutFloat(ptr + 12, instance.x);
|
||||
|
@ -104,10 +104,10 @@ public class AllInstanceTypes {
|
|||
.vector("scale", FloatRepr.FLOAT, 2)
|
||||
.build())
|
||||
.writer((ptr, instance) -> {
|
||||
MemoryUtil.memPutByte(ptr, instance.r);
|
||||
MemoryUtil.memPutByte(ptr + 1, instance.g);
|
||||
MemoryUtil.memPutByte(ptr + 2, instance.b);
|
||||
MemoryUtil.memPutByte(ptr + 3, instance.a);
|
||||
MemoryUtil.memPutByte(ptr, instance.red);
|
||||
MemoryUtil.memPutByte(ptr + 1, instance.green);
|
||||
MemoryUtil.memPutByte(ptr + 2, instance.blue);
|
||||
MemoryUtil.memPutByte(ptr + 3, instance.alpha);
|
||||
ExtraMemoryOps.put2x16(ptr + 4, instance.light);
|
||||
ExtraMemoryOps.put2x16(ptr + 8, instance.overlay);
|
||||
MemoryUtil.memPutFloat(ptr + 12, instance.x);
|
||||
|
|
|
@ -16,7 +16,7 @@ import com.simibubi.create.infrastructure.config.AllConfigs;
|
|||
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
|
||||
import dev.engine_room.flywheel.lib.transform.TransformStack;
|
||||
import dev.engine_room.flywheel.lib.visual.VisualizationHelper;
|
||||
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.LevelRenderer;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
@ -50,7 +50,7 @@ public class BlockEntityRenderHelper {
|
|||
Iterator<BlockEntity> iterator = customRenderBEs.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
BlockEntity blockEntity = iterator.next();
|
||||
if (VisualizationManager.supportsVisualization(world) && VisualizationHelper.shouldSkipRender(blockEntity))
|
||||
if (VisualizationManager.supportsVisualization(world) && VisualizationHelper.skipVanillaRender(blockEntity))
|
||||
continue;
|
||||
|
||||
BlockEntityRenderer<BlockEntity> renderer = Minecraft.getInstance().getBlockEntityRenderDispatcher().getRenderer(blockEntity);
|
||||
|
|
|
@ -2,8 +2,10 @@ package com.simibubi.create.foundation.render;
|
|||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Matrix3f;
|
||||
import org.joml.Matrix3fc;
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Matrix4fc;
|
||||
import org.joml.Quaternionfc;
|
||||
import org.joml.Vector3f;
|
||||
import org.joml.Vector3fc;
|
||||
import org.joml.Vector4f;
|
||||
|
@ -220,19 +222,21 @@ public class SuperByteBuffer implements TransformStack<SuperByteBuffer> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public SuperByteBuffer rotate(Quaternionf quaternion) {
|
||||
transforms.mulPose(quaternion);
|
||||
public SuperByteBuffer rotate(Quaternionfc quaternion) {
|
||||
var last = transforms.last();
|
||||
last.pose().rotate(quaternion);
|
||||
last.normal().rotate(quaternion);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SuperByteBuffer translate(double x, double y, double z) {
|
||||
public SuperByteBuffer translate(float x, float y, float z) {
|
||||
transforms.translate(x, y, z);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SuperByteBuffer mulPose(Matrix4f pose) {
|
||||
public SuperByteBuffer mulPose(Matrix4fc pose) {
|
||||
transforms.last()
|
||||
.pose()
|
||||
.mul(pose);
|
||||
|
@ -240,7 +244,7 @@ public class SuperByteBuffer implements TransformStack<SuperByteBuffer> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public SuperByteBuffer mulNormal(Matrix3f normal) {
|
||||
public SuperByteBuffer mulNormal(Matrix3fc normal) {
|
||||
transforms.last()
|
||||
.normal()
|
||||
.mul(normal);
|
||||
|
|
|
@ -80,7 +80,7 @@ public class DebugInformation {
|
|||
.getVersion()
|
||||
.toString())
|
||||
.orElse("None"))
|
||||
.put("Flywheel Backend", () -> Backend.REGISTRY.getIdOrThrow(BackendManager.getBackend()).toString())
|
||||
.put("Flywheel Backend", () -> Backend.REGISTRY.getIdOrThrow(BackendManager.currentBackend()).toString())
|
||||
.put("OpenGL Renderer", GlUtil::getRenderer)
|
||||
.put("OpenGL Version", GlUtil::getOpenGLVersion)
|
||||
.put("Graphics Mode", () -> Minecraft.getInstance().options.graphicsMode().toString())
|
||||
|
|
Loading…
Reference in a new issue