Merge remote-tracking branch 'origin/mc1.16/dev' into mc1.16/dev

This commit is contained in:
reidbhuntley 2021-06-27 11:47:15 -04:00
commit 53383dc6a2
19 changed files with 200 additions and 127 deletions

View file

@ -21,11 +21,10 @@ public class FanSmokingCategory extends ProcessingViaFanCategory<SmokingRecipe>
@Override
public void renderAttachedBlock(MatrixStack matrixStack) {
GuiGameElement.of(Blocks.FIRE.getDefaultState())
.scale(24)
.atLocal(0, 0, 2)
.render(matrixStack);
}
}

View file

@ -49,7 +49,7 @@ public class FanWashingCategory extends ProcessingViaFanCategory<SplashingRecipe
int xOffset = (outputIndex % 3) * 19;
int yOffset = (outputIndex / 3) * -19;
itemStacks.init(outputIndex + 1, false, single ? 126 : 121 + xOffset, 47 + yOffset + (excessive ? 8 : 0));
itemStacks.init(outputIndex + 1, false, single ? 126 : 126 + xOffset, 47 + yOffset + (excessive ? 8 : 0));
itemStacks.set(outputIndex + 1, results.get(outputIndex)
.getStack());
}
@ -63,8 +63,8 @@ public class FanWashingCategory extends ProcessingViaFanCategory<SplashingRecipe
.size();
AllGuiTextures.JEI_SLOT.draw(matrixStack, 12, 47);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 39, 29);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 54, 39);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 47 + 4, 29);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 66 + 4, 39);
AllGuiTextures.JEI_LONG_ARROW.draw(matrixStack, 42, 51);
if (size == 1) {
@ -75,13 +75,13 @@ public class FanWashingCategory extends ProcessingViaFanCategory<SplashingRecipe
for (int i = 0; i < size; i++) {
int xOffset = (i % 3) * 19;
int yOffset = (i / 3) * -19 + (size > 9 ? 8 : 0);
getRenderedSlot(recipe, i).draw(matrixStack, 121 + xOffset, 47 + yOffset);
getRenderedSlot(recipe, i).draw(matrixStack, 126 + xOffset, 47 + yOffset);
}
}
@Override
protected void translateFan(MatrixStack ms) {
ms.translate(43, 33, 0);
ms.translate(56 + 4, 33, 0);
}
@Override

View file

@ -68,6 +68,7 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
if (matrixStack == null)
return;
renderWidgets(matrixStack, recipe, mouseX, mouseY);
matrixStack.push();
translateFan(matrixStack);
matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-12.5f));
@ -77,12 +78,14 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
GuiGameElement.of(AllBlockPartials.ENCASED_FAN_INNER)
.rotateBlock(180, 0, AnimatedKinetics.getCurrentAngle() * 16)
.scale(scale)
.lighting(AnimatedKinetics.DEFAULT_LIGHTING)
.render(matrixStack);
GuiGameElement.of(AllBlocks.ENCASED_FAN.getDefaultState())
.rotateBlock(0, 180, 0)
.atLocal(0, 0, 0)
.scale(scale)
.lighting(AnimatedKinetics.DEFAULT_LIGHTING)
.render(matrixStack);
renderAttachedBlock(matrixStack);

View file

@ -5,12 +5,12 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import mezz.jei.api.gui.drawable.IDrawable;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3f;
public class AnimatedBlazeBurner implements IDrawable {
public class AnimatedBlazeBurner extends AnimatedKinetics {
private HeatLevel heatLevel;
@ -26,14 +26,15 @@ public class AnimatedBlazeBurner implements IDrawable {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 23;
GuiGameElement.of(AllBlocks.BLAZE_BURNER.getDefaultState())
defaultBlockElement(AllBlocks.BLAZE_BURNER.getDefaultState())
.atLocal(0, 1.65, 0)
.scale(scale)
.render(matrixStack);
float offset = (MathHelper.sin(AnimationTickHolder.getRenderTime() / 16f) + 0.5f) / 16f;
PartialModel blaze = AllBlockPartials.BLAZES.get(heatLevel);
GuiGameElement.of(blaze)
.atLocal(1, 1.65, 1)
defaultBlockElement(blaze)
.atLocal(1, 1.65 + offset, 1)
.rotate(0, 180, 0)
.scale(scale)
.render(matrixStack);
@ -41,13 +42,4 @@ public class AnimatedBlazeBurner implements IDrawable {
matrixStack.pop();
}
@Override
public int getWidth() {
return 50;
}
@Override
public int getHeight() {
return 50;
}
}

View file

@ -3,7 +3,6 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.MatrixStacker;
public class AnimatedCrafter extends AnimatedKinetics {
@ -20,12 +19,12 @@ public class AnimatedCrafter extends AnimatedKinetics {
.rotateY(-22.5f);
int scale = 22;
GuiGameElement.of(cogwheel())
defaultBlockElement(cogwheel())
.rotateBlock(90, 0, getCurrentAngle())
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.MECHANICAL_CRAFTER.getDefaultState())
defaultBlockElement(AllBlocks.MECHANICAL_CRAFTER.getDefaultState())
.rotateBlock(0, 180, 0)
.scale(scale)
.render(matrixStack);

View file

@ -2,7 +2,6 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.GuiGameElement;
import net.minecraft.block.BlockState;
import net.minecraft.state.properties.BlockStateProperties;
@ -11,6 +10,9 @@ import net.minecraft.util.math.vector.Vector3f;
public class AnimatedCrushingWheels extends AnimatedKinetics {
private final BlockState wheel = AllBlocks.CRUSHING_WHEEL.getDefaultState()
.with(BlockStateProperties.AXIS, Axis.X);
@Override
public void draw(MatrixStack matrixStack, int xOffset, int yOffset) {
matrixStack.push();
@ -18,16 +20,12 @@ public class AnimatedCrushingWheels extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-22.5f));
int scale = 22;
BlockState wheel = AllBlocks.CRUSHING_WHEEL.get()
.getDefaultState()
.with(BlockStateProperties.AXIS, Axis.X);
GuiGameElement.of(wheel)
defaultBlockElement(wheel)
.rotateBlock(0, 90, -getCurrentAngle())
.scale(scale)
.render(matrixStack);
GuiGameElement.of(wheel)
defaultBlockElement(wheel)
.rotateBlock(0, 90, getCurrentAngle())
.atLocal(2, 0, 0)
.scale(scale)

View file

@ -4,12 +4,10 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3f;
public class AnimatedDeployer extends AnimatedKinetics {
@ -22,12 +20,12 @@ public class AnimatedDeployer extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 20;
GuiGameElement.of(shaft(Axis.Z))
defaultBlockElement(shaft(Axis.Z))
.rotateBlock(0, 0, getCurrentAngle())
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.DEPLOYER.getDefaultState()
defaultBlockElement(AllBlocks.DEPLOYER.getDefaultState()
.with(DeployerBlock.FACING, Direction.DOWN)
.with(DeployerBlock.AXIS_ALONG_FIRST_COORDINATE, false))
.scale(scale)
@ -39,18 +37,18 @@ public class AnimatedDeployer extends AnimatedKinetics {
matrixStack.push();
matrixStack.translate(0, offset * 17, 0);
GuiGameElement.of(AllBlockPartials.DEPLOYER_POLE)
defaultBlockElement(AllBlockPartials.DEPLOYER_POLE)
.rotateBlock(90, 0, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlockPartials.DEPLOYER_HAND_HOLDING)
defaultBlockElement(AllBlockPartials.DEPLOYER_HAND_HOLDING)
.rotateBlock(90, 0, 0)
.scale(scale)
.render(matrixStack);
matrixStack.pop();
GuiGameElement.of(AllBlocks.DEPOT.getDefaultState())
defaultBlockElement(AllBlocks.DEPOT.getDefaultState())
.atLocal(0, 2, 0)
.scale(scale)
.render(matrixStack);

View file

@ -3,7 +3,6 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.GuiGameElement;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
@ -28,7 +27,7 @@ public class AnimatedItemDrain extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 20;
GuiGameElement.of(AllBlocks.ITEM_DRAIN.getDefaultState())
defaultBlockElement(AllBlocks.ITEM_DRAIN.getDefaultState())
.scale(scale)
.render(matrixStack);
@ -38,7 +37,7 @@ public class AnimatedItemDrain extends AnimatedKinetics {
ms.scale(scale, -scale, scale);
float from = 2/16f;
float to = 1f - from;
FluidRenderer.renderTiledFluidBB(fluid, from, from, from, to, 3/4f, to, buffer, ms, 0xf000f0, false);
FluidRenderer.renderTiledFluidBB(fluid, from, from, from, to, 3/4f, to, buffer, ms, 0xF000F0, false);
buffer.draw();
matrixStack.pop();

View file

@ -3,6 +3,9 @@ package com.simibubi.create.compat.jei.category.animations;
import com.jozufozu.flywheel.core.PartialModel;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.CustomLightingSettings;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.gui.ILightingSettings;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import mezz.jei.api.gui.drawable.IDrawable;
@ -12,8 +15,13 @@ import net.minecraft.util.Direction.Axis;
public abstract class AnimatedKinetics implements IDrawable {
public static final ILightingSettings DEFAULT_LIGHTING = CustomLightingSettings.builder()
.firstLightRotation(12.5f, 45.0f)
.secondLightRotation(-20.0f, 50.0f)
.build();
public static float getCurrentAngle() {
return ((AnimationTickHolder.getRenderTime()) * 4f) % 360;
return (AnimationTickHolder.getRenderTime() * 4f) % 360;
}
protected BlockState shaft(Axis axis) {
@ -24,6 +32,16 @@ public abstract class AnimatedKinetics implements IDrawable {
return AllBlockPartials.SHAFTLESS_COGWHEEL;
}
protected GuiGameElement.GuiRenderBuilder defaultBlockElement(BlockState state) {
return GuiGameElement.of(state)
.lighting(DEFAULT_LIGHTING);
}
protected GuiGameElement.GuiRenderBuilder defaultBlockElement(PartialModel partial) {
return GuiGameElement.of(partial)
.lighting(DEFAULT_LIGHTING);
}
@Override
public int getWidth() {
return 50;

View file

@ -4,7 +4,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.GuiGameElement;
public class AnimatedMillstone extends AnimatedKinetics {
@ -16,12 +15,12 @@ public class AnimatedMillstone extends AnimatedKinetics {
matrixStack.translate(-2, 18, 0);
int scale = 22;
GuiGameElement.of(AllBlockPartials.MILLSTONE_COG)
defaultBlockElement(AllBlockPartials.MILLSTONE_COG)
.rotateBlock(22.5, getCurrentAngle() * 2, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.MILLSTONE.getDefaultState())
defaultBlockElement(AllBlocks.MILLSTONE.getDefaultState())
.rotateBlock(22.5, 22.5, 0)
.scale(scale)
.render(matrixStack);

View file

@ -3,7 +3,6 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.util.math.MathHelper;
@ -19,31 +18,31 @@ public class AnimatedMixer extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 23;
GuiGameElement.of(cogwheel())
defaultBlockElement(cogwheel())
.rotateBlock(0, getCurrentAngle() * 2, 0)
.atLocal(0, 0, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.MECHANICAL_MIXER.getDefaultState())
defaultBlockElement(AllBlocks.MECHANICAL_MIXER.getDefaultState())
.atLocal(0, 0, 0)
.scale(scale)
.render(matrixStack);
float animation = ((MathHelper.sin(AnimationTickHolder.getRenderTime() / 32f) + 1) / 5) + .5f;
GuiGameElement.of(AllBlockPartials.MECHANICAL_MIXER_POLE)
defaultBlockElement(AllBlockPartials.MECHANICAL_MIXER_POLE)
.atLocal(0, animation, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlockPartials.MECHANICAL_MIXER_HEAD)
defaultBlockElement(AllBlockPartials.MECHANICAL_MIXER_HEAD)
.rotateBlock(0, getCurrentAngle() * 4, 0)
.atLocal(0, animation, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.BASIN.getDefaultState())
defaultBlockElement(AllBlocks.BASIN.getDefaultState())
.atLocal(0, 1.65, 0)
.scale(scale)
.render(matrixStack);

View file

@ -3,7 +3,6 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.util.Direction.Axis;
@ -25,22 +24,22 @@ public class AnimatedPress extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = basin ? 20 : 24;
GuiGameElement.of(shaft(Axis.Z))
defaultBlockElement(shaft(Axis.Z))
.rotateBlock(0, 0, getCurrentAngle())
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.MECHANICAL_PRESS.getDefaultState())
defaultBlockElement(AllBlocks.MECHANICAL_PRESS.getDefaultState())
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlockPartials.MECHANICAL_PRESS_HEAD)
defaultBlockElement(AllBlockPartials.MECHANICAL_PRESS_HEAD)
.atLocal(0, -getAnimatedHeadOffset(), 0)
.scale(scale)
.render(matrixStack);
if (basin)
GuiGameElement.of(AllBlocks.BASIN.getDefaultState())
defaultBlockElement(AllBlocks.BASIN.getDefaultState())
.atLocal(0, 1.65, 0)
.scale(scale)
.render(matrixStack);

View file

@ -5,7 +5,6 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.saw.SawBlock;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.GuiGameElement;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
@ -25,18 +24,18 @@ public class AnimatedSaw extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90 - 225f));
int scale = 25;
GuiGameElement.of(shaft(Axis.X))
defaultBlockElement(shaft(Axis.X))
.rotateBlock(-getCurrentAngle(), 0, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlocks.MECHANICAL_SAW.getDefaultState()
defaultBlockElement(AllBlocks.MECHANICAL_SAW.getDefaultState()
.with(SawBlock.FACING, Direction.UP))
.rotateBlock(0, 0, 0)
.scale(scale)
.render(matrixStack);
GuiGameElement.of(AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE)
defaultBlockElement(AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE)
.rotateBlock(0, -90, -90)
.scale(scale)
.render(matrixStack);

View file

@ -6,7 +6,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.renderer.IRenderTypeBuffer;
@ -33,7 +32,7 @@ public class AnimatedSpout extends AnimatedKinetics {
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 20;
GuiGameElement.of(AllBlocks.SPOUT.getDefaultState())
defaultBlockElement(AllBlocks.SPOUT.getDefaultState())
.scale(scale)
.render(matrixStack);
@ -43,22 +42,22 @@ public class AnimatedSpout extends AnimatedKinetics {
matrixStack.push();
GuiGameElement.of(AllBlockPartials.SPOUT_TOP)
defaultBlockElement(AllBlockPartials.SPOUT_TOP)
.scale(scale)
.render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0);
GuiGameElement.of(AllBlockPartials.SPOUT_MIDDLE)
defaultBlockElement(AllBlockPartials.SPOUT_MIDDLE)
.scale(scale)
.render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0);
GuiGameElement.of(AllBlockPartials.SPOUT_BOTTOM)
defaultBlockElement(AllBlockPartials.SPOUT_BOTTOM)
.scale(scale)
.render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0);
matrixStack.pop();
GuiGameElement.of(AllBlocks.DEPOT.getDefaultState())
defaultBlockElement(AllBlocks.DEPOT.getDefaultState())
.atLocal(0, 2, 0)
.scale(scale)
.render(matrixStack);
@ -69,14 +68,14 @@ public class AnimatedSpout extends AnimatedKinetics {
matrixStack.scale(16, -16, 16);
float from = 2/16f;
float to = 1f - from;
FluidRenderer.renderTiledFluidBB(fluids.get(0), from, from, from, to, to, to, buffer, matrixStack, 0xf000f0, false);
FluidRenderer.renderTiledFluidBB(fluids.get(0), from, from, from, to, to, to, buffer, matrixStack, 0xF000F0, false);
matrixStack.pop();
float width = 1 / 128f * squeeze;
matrixStack.translate(scale / 2f, scale * 1.5f, scale / 2f);
matrixStack.scale(16, -16, 16);
matrixStack.translate(-width / 2, 0, -width / 2);
FluidRenderer.renderTiledFluidBB(fluids.get(0), 0, -0.001f, 0, width, 2.001f, width, buffer, matrixStack, 0xf000f0,
FluidRenderer.renderTiledFluidBB(fluids.get(0), 0, -0.001f, 0, width, 2.001f, width, buffer, matrixStack, 0xF000F0,
false);
buffer.draw();

View file

@ -0,0 +1,83 @@
package com.simibubi.create.foundation.gui;
import com.mojang.blaze3d.systems.RenderSystem;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.util.math.vector.Matrix4f;
import net.minecraft.util.math.vector.Vector3f;
public class CustomLightingSettings implements ILightingSettings {
private Vector3f light1;
private Vector3f light2;
private Matrix4f lightMatrix;
protected CustomLightingSettings(float yRot, float xRot) {
init(yRot, xRot, 0, 0, false);
}
protected CustomLightingSettings(float yRot1, float xRot1, float yRot2, float xRot2) {
init(yRot1, xRot1, yRot2, xRot2, true);
}
protected void init(float yRot1, float xRot1, float yRot2, float xRot2, boolean doubleLight) {
light1 = Vector3f.POSITIVE_Z.copy();
light1.func_214905_a(Vector3f.POSITIVE_Y.getDegreesQuaternion(yRot1));
light1.func_214905_a(Vector3f.POSITIVE_X.getDegreesQuaternion(xRot1));
if (doubleLight) {
light2 = Vector3f.POSITIVE_Z.copy();
light2.func_214905_a(Vector3f.POSITIVE_Y.getDegreesQuaternion(yRot2));
light2.func_214905_a(Vector3f.POSITIVE_X.getDegreesQuaternion(xRot2));
} else {
light2 = VecHelper.ZERO_3F;
}
lightMatrix = new Matrix4f();
lightMatrix.loadIdentity();
}
@Override
public void applyLighting() {
RenderSystem.setupLevelDiffuseLighting(light1, light2, lightMatrix);
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private float yRot1, xRot1;
private float yRot2, xRot2;
private boolean doubleLight;
public Builder firstLightRotation(float yRot, float xRot) {
yRot1 = yRot;
xRot1 = xRot;
return this;
}
public Builder secondLightRotation(float yRot, float xRot) {
yRot2 = yRot;
xRot2 = xRot;
doubleLight = true;
return this;
}
public Builder doubleLight() {
doubleLight = true;
return this;
}
public CustomLightingSettings build() {
if (doubleLight) {
return new CustomLightingSettings(yRot1, xRot1, yRot2, xRot2);
} else {
return new CustomLightingSettings(yRot1, xRot1);
}
}
}
}

View file

@ -35,15 +35,12 @@ import net.minecraft.inventory.container.PlayerContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.fluids.FluidStack;
public class GuiGameElement {
public static Vector2f defaultBlockLighting = new Vector2f(30.0f, 7.5f);
public static GuiRenderBuilder of(ItemStack stack) {
return new GuiItemRenderBuilder(stack);
}
@ -72,8 +69,7 @@ public class GuiGameElement {
protected double scale = 1;
protected int color = 0xFFFFFF;
protected Vector3d rotationOffset = Vector3d.ZERO;
protected boolean hasCustomLighting = false;
protected float lightingXRot, lightingYRot;
protected ILightingSettings customLighting = null;
public GuiRenderBuilder atLocal(double x, double y, double z) {
this.xLocal = x;
@ -109,15 +105,11 @@ public class GuiGameElement {
return this;
}
public GuiRenderBuilder lighting(float xRot, float yRot) {
hasCustomLighting = true;
lightingXRot = xRot;
lightingYRot = yRot;
public GuiRenderBuilder lighting(ILightingSettings lighting) {
customLighting = lighting;
return this;
}
public abstract void render(MatrixStack matrixStack);
protected void prepareMatrix(MatrixStack matrixStack) {
matrixStack.push();
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
@ -150,10 +142,17 @@ public class GuiGameElement {
}
protected void prepareLighting(MatrixStack matrixStack) {
if (customLighting != null) {
customLighting.applyLighting();
} else {
RenderHelper.enableGuiDepthLighting();
}
}
protected void cleanUpLighting(MatrixStack matrixStack) {
if (customLighting != null) {
RenderHelper.enableGuiDepthLighting();
}
}
}
@ -200,19 +199,6 @@ public class GuiGameElement {
buffer.draw();
}
@Override
protected void prepareLighting(MatrixStack matrixStack) {
if (hasCustomLighting) {
UIRenderHelper.setupSimpleCustomLighting(lightingXRot, lightingYRot);
} else {
UIRenderHelper.setupSimpleCustomLighting(defaultBlockLighting.x, defaultBlockLighting.y);
}
}
@Override
protected void cleanUpLighting(MatrixStack matrixStack) {
RenderHelper.enableGuiDepthLighting();
}
}
public static class GuiBlockStateRenderBuilder extends GuiBlockModelRenderBuilder {
@ -244,7 +230,7 @@ public class GuiGameElement {
ms.push();
RenderHelper.disableStandardItemLighting();
FluidRenderer.renderTiledFluidBB(new FluidStack(blockState.getFluidState()
.getFluid(), 1000), 0, 0, 0, 1.0001f, 1.0001f, 1.0001f, buffer, ms, 0xf000f0, true);
.getFluid(), 1000), 0, 0, 0, 1.0001f, 1.0001f, 1.0001f, buffer, ms, 0xF000F0, true);
buffer.draw(RenderType.getTranslucent());
RenderHelper.enable();
ms.pop();
@ -275,44 +261,43 @@ public class GuiGameElement {
public void render(MatrixStack matrixStack) {
prepareMatrix(matrixStack);
transformMatrix(matrixStack);
renderItemIntoGUI(matrixStack, stack);
renderItemIntoGUI(matrixStack, stack, customLighting == null);
cleanUpMatrix(matrixStack);
}
public static void renderItemIntoGUI(MatrixStack matrixStack, ItemStack stack) {
ItemRenderer renderer = Minecraft.getInstance()
.getItemRenderer();
public static void renderItemIntoGUI(MatrixStack matrixStack, ItemStack stack, boolean useDefaultLighting) {
ItemRenderer renderer = Minecraft.getInstance().getItemRenderer();
IBakedModel bakedModel = renderer.getItemModelWithOverrides(stack, null, null);
matrixStack.push();
renderer.textureManager.bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE);
renderer.textureManager.getTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE)
.setBlurMipmapDirect(false, false);
renderer.textureManager.getTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE).setBlurMipmapDirect(false, false);
RenderSystem.enableRescaleNormal();
RenderSystem.enableAlphaTest();
RenderSystem.enableCull();
RenderSystem.defaultAlphaFunc();
RenderSystem.enableBlend();
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA,
GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
matrixStack.translate((float) 0, (float) 0, 100.0F + renderer.zLevel);
matrixStack.translate(0, 0, 100.0F + renderer.zLevel);
matrixStack.translate(8.0F, -8.0F, 0.0F);
matrixStack.scale(16.0F, 16.0F, 16.0F);
IRenderTypeBuffer.Impl buffer = Minecraft.getInstance()
.getBufferBuilders()
.getEntityVertexConsumers();
IRenderTypeBuffer.Impl buffer = Minecraft.getInstance().getBufferBuilders().getEntityVertexConsumers();
boolean flatLighting = !bakedModel.isSideLit();
if (useDefaultLighting) {
if (flatLighting) {
RenderHelper.disableGuiDepthLighting();
}
}
renderer.renderItem(stack, ItemCameraTransforms.TransformType.GUI, false, matrixStack,
buffer, 0xF000F0, OverlayTexture.DEFAULT_UV, bakedModel);
renderer.renderItem(stack, ItemCameraTransforms.TransformType.GUI, false, matrixStack, buffer, 0xF000F0, OverlayTexture.DEFAULT_UV, bakedModel);
buffer.draw();
RenderSystem.enableDepthTest();
if (useDefaultLighting) {
if (flatLighting) {
RenderHelper.enableGuiDepthLighting();
}
}
RenderSystem.disableAlphaTest();
RenderSystem.disableRescaleNormal();

View file

@ -0,0 +1,12 @@
package com.simibubi.create.foundation.gui;
import net.minecraft.client.renderer.RenderHelper;
public interface ILightingSettings {
void applyLighting();
static final ILightingSettings DEFAULT_3D = () -> RenderHelper.enableGuiDepthLighting();
static final ILightingSettings DEFAULT_FLAT = () -> RenderHelper.disableGuiDepthLighting();
}

View file

@ -10,12 +10,14 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public interface IScreenRenderable {
Screen EMPTY_SCREEN = new Screen(new StringTextComponent("")) {};
@OnlyIn(Dist.CLIENT)
void draw(MatrixStack ms, AbstractGui screen, int x, int y);
@OnlyIn(Dist.CLIENT)
default void draw(MatrixStack ms, int x, int y) {
draw(ms, new Screen(new StringTextComponent("")) {
}, x, y);
draw(ms, EMPTY_SCREEN, x, y);
}
}

View file

@ -1,6 +1,6 @@
package com.simibubi.create.foundation.gui;
import java.awt.*;
import java.awt.Color;
import javax.annotation.Nonnull;
@ -10,7 +10,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import com.simibubi.create.foundation.utility.ColorHelper;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
@ -269,13 +268,4 @@ public class UIRenderHelper {
WorldVertexBufferUploader.draw(bufferbuilder);
}
public static void setupSimpleCustomLighting(float xRot, float yRot) {
Matrix4f lightingMatrix = new Matrix4f();
lightingMatrix.loadIdentity();
lightingMatrix.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(yRot));
lightingMatrix.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(xRot));
lightingMatrix.multiply(Matrix4f.translate(0, 0, 1));
RenderSystem.setupLevelDiffuseLighting(VecHelper.ZERO_3F, VecHelper.ZERO_3F, lightingMatrix);
}
}