Fix some rendering, update model

This commit is contained in:
grimmauld 2021-04-19 12:13:36 +02:00
parent dbede41eba
commit 5d54ed4682
7 changed files with 60 additions and 93 deletions

View File

@ -1106,6 +1106,7 @@ public class AllBlocks {
public static final BlockEntry<MirrorBlock> MIRROR =
REGISTRATE.block("mirror", MirrorBlock::new)
.initialProperties(SharedProperties::softMetal)
.properties(Block.Properties::nonOpaque)
.addLayer(() -> RenderType::getCutoutMipped)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.axisBlockProvider(true))

View File

@ -38,10 +38,6 @@ public class AllShapes {
.add(2, 13, 2, 14, 16, 14)
.add(0, 0, 14, 16, 16, 16)
.forHorizontalAxis(),
MIRROR = shape(0, 0, 0, 16, 2, 16)
.add(1, 2, 1, 15, 14, 15)
.add(0, 14, 0, 16, 16, 16)
.forAxis(),
SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14)
.forDirectional(),
SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(),

View File

@ -1,6 +1,7 @@
package com.simibubi.create.content.optics.mirror;
import com.simibubi.create.AllShapes;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.relays.encased.AbstractEncasedShaftBlock;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
@ -9,13 +10,8 @@ import com.simibubi.create.foundation.block.ITE;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import javax.annotation.ParametersAreNonnullByDefault;
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class MirrorBlock extends AbstractEncasedShaftBlock implements IWrenchable, ITE<MirrorTileEntity> {
@ -29,11 +25,6 @@ public class MirrorBlock extends AbstractEncasedShaftBlock implements IWrenchabl
}
@Override
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
return AllShapes.MIRROR.get(state.get(AXIS));
}
@Override
public Class<MirrorTileEntity> getTileEntityClass() {
return MirrorTileEntity.class;

View File

@ -7,7 +7,6 @@ import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
@ -37,23 +36,11 @@ public class MirrorRenderer extends KineticTileEntityRenderer {
final Direction.Axis facing = te.getBlockState()
.get(BlockStateProperties.AXIS);
SuperByteBuffer superBuffer = AllBlockPartials.MIRROR_PLANE.renderOn(te.getBlockState());
SuperByteBuffer superBuffer = AllBlockPartials.MIRROR_PLANE.renderOnDirectionalSouth(te.getBlockState(), te.getBeamRotationAround());
float interpolatedAngle = te.getInterpolatedAngle(partialTicks - 1);
kineticRotationTransform(superBuffer, te, facing, (float) (interpolatedAngle / 180 * Math.PI), light);
switch (facing) {
case X:
superBuffer.rotateCentered(Direction.UP, AngleHelper.rad(90));
break;
case Y:
superBuffer.rotateCentered(Direction.EAST, AngleHelper.rad(90));
break;
default:
superBuffer.rotateCentered(Direction.UP, AngleHelper.rad(180));
}
superBuffer.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
superBuffer.renderInto(ms, buffer.getBuffer(RenderType.getTranslucent()));
}
@Override

View File

@ -125,15 +125,20 @@ public class MirrorTileEntity extends KineticTileEntity implements ILightHandler
private void updateReflections() {
new HashMap<>(beams).forEach(Beam::removeSubBeam);
beams.replaceAll((b, v) -> reflectBeam(b));
Map<Beam, Beam> newBeams = new HashMap<>();
for (Beam beam : beams.keySet()) {
newBeams.put(beam, reflectBeam(beam));
}
beams = newBeams;
}
private Vector3d getReflectionAngle(Vector3d inputAngle) {
inputAngle = inputAngle.normalize();
Vector3d normal = new Matrix3d().asIdentity()
.asAxisRotation(getAxis(), AngleHelper.rad(angle))
.transform(inputAngle);
return VecHelper.step(inputAngle.subtract(normal.scale(2 * inputAngle.dotProduct(normal))));
.transform(VecHelper.UP);
return inputAngle.subtract(normal.scale(2 * inputAngle.dotProduct(normal)));
}
@Override

View File

@ -1,24 +1,13 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"parent": "block/cube_all",
"textures": {
"3": "create:block/gearbox_top",
"4": "create:block/gearbox",
"particle": "create:item/refined_radiance"
"particle": "create:item/refined_radiance",
"all": "block/glass"
},
"elements": [
{
"name": "front",
"from": [1, 2, 1],
"to": [3, 14, 3],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [14, 0, 2, 2], "rotation": 270, "texture": "#3"},
"east": {"uv": [2, 2, 14, 0], "rotation": 270, "texture": "#3"},
"south": {"uv": [14, 14, 2, 16], "rotation": 90, "texture": "#3"},
"west": {"uv": [2, 16, 14, 14], "rotation": 90, "texture": "#3"}
}
},
{
"name": "side",
"from": [2, 1, 2],
@ -99,18 +88,6 @@
"down": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#4"}
}
},
{
"name": "front",
"from": [1, 2, 13],
"to": [3, 14, 15],
"rotation": {"angle": 0, "axis": "x", "origin": [8, -10, 8]},
"faces": {
"north": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#3"},
"east": {"uv": [2, 0, 14, 2], "rotation": 270, "texture": "#3"},
"south": {"uv": [2, 0, 14, 2], "rotation": 90, "texture": "#3"},
"west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#3"}
}
},
{
"name": "side_frame",
"from": [0, 0, 0],
@ -168,27 +145,15 @@
}
},
{
"name": "front",
"from": [13, 2, 13],
"to": [15, 14, 15],
"rotation": {"angle": 0, "axis": "x", "origin": [8, -10, 8]},
"from": [0, 2, 0],
"to": [16, 14, 16],
"faces": {
"north": {"uv": [2, 16, 14, 14], "rotation": 270, "texture": "#3"},
"east": {"uv": [14, 14, 2, 16], "rotation": 270, "texture": "#3"},
"south": {"uv": [2, 2, 14, 0], "rotation": 90, "texture": "#3"},
"west": {"uv": [14, 0, 2, 2], "rotation": 90, "texture": "#3"}
}
},
{
"name": "front",
"from": [13, 2, 1],
"to": [15, 14, 3],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [14, 2, 2, 0], "rotation": 270, "texture": "#3"},
"east": {"uv": [14, 16, 2, 14], "rotation": 270, "texture": "#3"},
"south": {"uv": [14, 16, 2, 14], "rotation": 90, "texture": "#3"},
"west": {"uv": [14, 2, 2, 0], "rotation": 90, "texture": "#3"}
"north": {"uv": [0, 2, 16, 14], "texture": "#all"},
"east": {"uv": [0, 2, 16, 14], "texture": "#all"},
"south": {"uv": [0, 2, 16, 14], "texture": "#all"},
"west": {"uv": [0, 2, 16, 14], "texture": "#all"},
"up": {"uv": [0, 0, 16, 16], "texture": "#missing"},
"down": {"uv": [0, 0, 16, 16], "texture": "#missing"}
}
}
],
@ -196,7 +161,12 @@
{
"name": "group",
"origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
"name": "glass",
"origin": [8, 8, 8],
"children": [10]
}
]
}

View File

@ -10,29 +10,46 @@
"elements": [
{
"name": "Mirror",
"from": [2, 9.5, 2],
"to": [14, 10.5, 14],
"from": [2, 7.5, 2],
"to": [14, 8.5, 14],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [2, 2, 14, 14], "rotation": 180, "texture": "#2_0"},
"east": {"uv": [3, 1, 4, 15], "rotation": 270, "texture": "#2_0"},
"south": {"uv": [4, 1, 12, 2], "texture": "#2_0"},
"west": {"uv": [12, 1, 13, 15], "rotation": 90, "texture": "#2_0"},
"up": {"uv": [2, 2, 14, 14], "rotation": 180, "texture": "#2_0"},
"down": {"uv": [4, 1, 12, 15], "texture": "#2_0"}
"north": {"uv": [4, 1, 12, 2], "rotation": 180, "texture": "#2_0"},
"east": {"uv": [3, 1, 4, 15], "rotation": 90, "texture": "#2_0"},
"south": {"uv": [2, 2, 14, 14], "texture": "#2_0"},
"west": {"uv": [12, 1, 13, 15], "rotation": 270, "texture": "#2_0"},
"up": {"uv": [4, 1, 12, 15], "texture": "#2_0"},
"down": {"uv": [2, 2, 14, 14], "rotation": 180, "texture": "#2_0"}
}
},
{
"name": "Axis",
"from": [6, 6, 0],
"to": [10, 10, 16],
"to": [10, 10, 3],
"shade": false,
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1"},
"east": {"uv": [6, 0, 10, 16], "rotation": 270, "texture": "#0"},
"east": {"uv": [6, 0, 10, 3], "rotation": 90, "texture": "#0"},
"south": {"uv": [6, 6, 10, 10], "texture": "#1"},
"west": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#0"},
"up": {"uv": [6, 0, 10, 16], "rotation": 180, "texture": "#0"},
"down": {"uv": [6, 0, 10, 16], "texture": "#0"}
"west": {"uv": [6, 0, 10, 3], "rotation": 270, "texture": "#0"},
"up": {"uv": [6, 0, 10, 3], "texture": "#0"},
"down": {"uv": [6, 0, 10, 3], "rotation": 180, "texture": "#0"}
}
},
{
"name": "Axis",
"from": [6, 6, 13],
"to": [10, 10, 16],
"shade": false,
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1"},
"east": {"uv": [6, 13, 10, 16], "rotation": 90, "texture": "#0"},
"south": {"uv": [6, 6, 10, 10], "texture": "#1"},
"west": {"uv": [6, 13, 10, 16], "rotation": 270, "texture": "#0"},
"up": {"uv": [6, 13, 10, 16], "texture": "#0"},
"down": {"uv": [6, 13, 10, 16], "rotation": 180, "texture": "#0"}
}
}
]