diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 24fdc9ddd..30fb41ca3 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -1106,6 +1106,7 @@ public class AllBlocks { public static final BlockEntry 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)) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index b6bbae2b0..3afa8656a 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -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(), diff --git a/src/main/java/com/simibubi/create/content/optics/mirror/MirrorBlock.java b/src/main/java/com/simibubi/create/content/optics/mirror/MirrorBlock.java index fb402471e..b98065fec 100644 --- a/src/main/java/com/simibubi/create/content/optics/mirror/MirrorBlock.java +++ b/src/main/java/com/simibubi/create/content/optics/mirror/MirrorBlock.java @@ -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 { @@ -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 getTileEntityClass() { return MirrorTileEntity.class; diff --git a/src/main/java/com/simibubi/create/content/optics/mirror/MirrorRenderer.java b/src/main/java/com/simibubi/create/content/optics/mirror/MirrorRenderer.java index 66b340c05..245e9ba3e 100644 --- a/src/main/java/com/simibubi/create/content/optics/mirror/MirrorRenderer.java +++ b/src/main/java/com/simibubi/create/content/optics/mirror/MirrorRenderer.java @@ -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 diff --git a/src/main/java/com/simibubi/create/content/optics/mirror/MirrorTileEntity.java b/src/main/java/com/simibubi/create/content/optics/mirror/MirrorTileEntity.java index 5e9786da6..38ceb1623 100644 --- a/src/main/java/com/simibubi/create/content/optics/mirror/MirrorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/optics/mirror/MirrorTileEntity.java @@ -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 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 diff --git a/src/main/resources/assets/create/models/block/mirror/block.json b/src/main/resources/assets/create/models/block/mirror/block.json index 0160bb244..c7f5fec70 100644 --- a/src/main/resources/assets/create/models/block/mirror/block.json +++ b/src/main/resources/assets/create/models/block/mirror/block.json @@ -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] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mirror/mirror_plane.json b/src/main/resources/assets/create/models/block/mirror/mirror_plane.json index d80e744c2..d6af12c04 100644 --- a/src/main/resources/assets/create/models/block/mirror/mirror_plane.json +++ b/src/main/resources/assets/create/models/block/mirror/mirror_plane.json @@ -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"} } } ]