diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index b8bb0d06c..c6acc3cf0 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -7,6 +7,8 @@ import com.simibubi.create.foundation.block.ProperStairsBlock; import com.simibubi.create.foundation.block.RenderUtilityAxisBlock; import com.simibubi.create.foundation.block.RenderUtilityBlock; import com.simibubi.create.foundation.block.RenderUtilityDirectionalBlock; +import com.simibubi.create.foundation.block.connected.CTSpriteShifter; +import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.world.CopperOreBlock; import com.simibubi.create.modules.IModule; @@ -69,6 +71,7 @@ import com.simibubi.create.modules.logistics.transport.villager.LogisticiansTabl import com.simibubi.create.modules.logistics.transport.villager.PackageFunnelBlock; import com.simibubi.create.modules.palettes.CTGlassBlock; import com.simibubi.create.modules.palettes.GlassPaneBlock; +import com.simibubi.create.modules.palettes.LayeredCTBlock; import com.simibubi.create.modules.palettes.VolcanicRockBlock; import com.simibubi.create.modules.schematics.block.CreativeCrateBlock; import com.simibubi.create.modules.schematics.block.SchematicTableBlock; @@ -222,11 +225,12 @@ public enum AllBlocks { LIMESTONE_BRICKS(new Block(Properties.from(LIMESTONE.block)), ComesWith.STAIRS, ComesWith.SLAB, ComesWith.WALL), POLISHED_LIMESTONE(new Block(Properties.from(LIMESTONE.block)), ComesWith.SLAB), LIMESTONE_PILLAR(new RotatedPillarBlock(Properties.from(LIMESTONE.block))), + LIMESTONE_LAYERS( + new LayeredCTBlock(Properties.from(LIMESTONE.block), + CTSpriteShifter.get(CTType.HORIZONTAL, "limestone_layers"), + CTSpriteShifter.get(CTType.OMNIDIRECTIONAL, "polished_limestone"))), WEATHERED_LIMESTONE(new Block(Properties.from(Blocks.ANDESITE)), ComesWith.STAIRS, ComesWith.SLAB, ComesWith.WALL), - WEATHERED_LIMESTONE_BRICKS( - new Block(Properties.from(WEATHERED_LIMESTONE.block)), - ComesWith.STAIRS, - ComesWith.SLAB, + WEATHERED_LIMESTONE_BRICKS(new Block(Properties.from(WEATHERED_LIMESTONE.block)), ComesWith.STAIRS, ComesWith.SLAB, ComesWith.WALL), POLISHED_WEATHERED_LIMESTONE(new Block(Properties.from(WEATHERED_LIMESTONE.block)), ComesWith.SLAB), WEATHERED_LIMESTONE_PILLAR(new RotatedPillarBlock(Properties.from(WEATHERED_LIMESTONE.block))), diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 87cca5825..13720b920 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -109,9 +109,10 @@ public class CreateClient { Block block = allBlocks.get(); if (!(block instanceof IHaveConnectedTextures)) continue; - for (SpriteShiftEntry spriteShiftEntry : ((IHaveConnectedTextures) block).getSpriteShifts()) + for (SpriteShiftEntry spriteShiftEntry : ((IHaveConnectedTextures) block).getBehaviour().getAllCTShifts()) event.addSprite(spriteShiftEntry.getTargetResourceLocation()); } + } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java index b78b197cb..71c87bffa 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; -import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour.CTContext; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -24,28 +24,28 @@ import net.minecraftforge.client.model.data.ModelProperty; public class CTModel extends BakedModelWrapper { private static ModelProperty CT_PROPERTY = new ModelProperty<>(); - private Iterable textures; + private ConnectedTextureBehaviour behaviour; private class CTData { - int[] textures; + int[] indices; public CTData() { - textures = new int[6]; - Arrays.fill(textures, -1); + indices = new int[6]; + Arrays.fill(indices, -1); } void put(Direction face, int texture) { - textures[face.getIndex()] = texture; + indices[face.getIndex()] = texture; } int get(Direction face) { - return textures[face.getIndex()]; + return indices[face.getIndex()]; } } public CTModel(IBakedModel originalModel, IHaveConnectedTextures block) { super(originalModel); - textures = block.getSpriteShifts(); + behaviour = block.getBehaviour(); } @Override @@ -53,11 +53,15 @@ public class CTModel extends BakedModelWrapper { if (!(state.getBlock() instanceof IHaveConnectedTextures)) return EmptyModelData.INSTANCE; CTData data = new CTData(); - IHaveConnectedTextures texDef = (IHaveConnectedTextures) state.getBlock(); + for (Direction face : Direction.values()) { if (!Block.shouldSideBeRendered(state, world, pos, face)) continue; - data.put(face, texDef.getTextureIndex(world, pos, state, face)); + CTSpriteShiftEntry spriteShift = behaviour.get(state, face); + if (spriteShift == null) + continue; + CTContext ctContext = behaviour.buildContext(world, pos, state, face); + data.put(face, spriteShift.getTextureIndex(ctContext)); } return new ModelDataMap.Builder().withInitial(CT_PROPERTY, data).build(); } @@ -67,40 +71,27 @@ public class CTModel extends BakedModelWrapper { List quads = new ArrayList<>(super.getQuads(state, side, rand, extraData)); if (!extraData.hasProperty(CT_PROPERTY)) return quads; - IHaveConnectedTextures texDef = (IHaveConnectedTextures) state.getBlock(); CTData data = extraData.getData(CT_PROPERTY); for (int i = 0; i < quads.size(); i++) { BakedQuad quad = quads.get(i); - if (!texDef.appliesTo(quad)) - continue; - SpriteShiftEntry texture = null; - for (SpriteShiftEntry entry : textures) { - if (entry.getOriginal() == quad.getSprite()) { - texture = entry; - break; - } - } - if (texture == null) + CTSpriteShiftEntry spriteShift = behaviour.get(state, quad.getFace()); + if (spriteShift == null) continue; - int index = data.get(quad.getFace()); if (index == -1) continue; - float textureSize = 16f / 128f / 8f; - float uShift = (index % 8) * textureSize; - float vShift = (index / 8) * textureSize * 2; - - uShift = texture.getTarget().getInterpolatedU((index % 8) * 2) - texture.getOriginal().getMinU(); - vShift = texture.getTarget().getInterpolatedV((index / 8) * 2) - texture.getOriginal().getMinV(); + float uShift = spriteShift.getUShift(index); + float vShift = spriteShift.getVShift(index); BakedQuad newQuad = new BakedQuad(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), quad.getTintIndex(), quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat()); VertexFormat format = quad.getFormat(); int[] vertexData = newQuad.getVertexData(); + for (int vertex = 0; vertex < vertexData.length; vertex += format.getIntegerSize()) { int uvOffset = format.getUvOffsetById(0) / 4; int uIndex = vertex + uvOffset; diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java index ed80e7987..b9a564137 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java @@ -11,6 +11,16 @@ public abstract class CTSpriteShiftEntry extends SpriteShiftEntry { this.textureSheetSize = sheetSize; } + public float getUShift(int index) { + return getTarget().getInterpolatedU((index % textureSheetSize) * (16 / textureSheetSize)) + - getOriginal().getMinU(); + } + + public float getVShift(int index) { + return getTarget().getInterpolatedV((index / textureSheetSize) * (16 / textureSheetSize)) + - getOriginal().getMinV(); + } + public abstract int getTextureIndex(CTContext context); public static class Horizontal extends CTSpriteShiftEntry { @@ -21,7 +31,7 @@ public abstract class CTSpriteShiftEntry extends SpriteShiftEntry { @Override public int getTextureIndex(CTContext context) { - return (context.left ? 1 : 0) + (context.right ? 2 : 0); + return (context.right ? 1 : 0) + (context.left ? 2 : 0); } } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java index c46892cb4..8425a6381 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java @@ -11,6 +11,10 @@ public class CTSpriteShifter extends SpriteShifter { OMNIDIRECTIONAL, HORIZONTAL, VERTICAL; } + public static CTSpriteShiftEntry get(CTType type, String blockTextureName) { + return get(type, blockTextureName, blockTextureName); + } + public static CTSpriteShiftEntry get(CTType type, String blockTextureName, String connectedTextureName) { String originalLocation = "block/" + blockTextureName; String targetLocation = "block/connected/" + blockTextureName; diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java index 586aa017a..a3a2068c8 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java @@ -1,22 +1,13 @@ package com.simibubi.create.foundation.block.connected; -import java.util.Map; import java.util.function.BiPredicate; -import com.google.common.collect.ImmutableList; -import com.simibubi.create.foundation.block.render.SpriteShiftEntry; -import com.simibubi.create.foundation.block.render.SpriteShifter; - -import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IEnviromentBlockReader; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public abstract class ConnectedTextureBehaviour { @@ -26,8 +17,10 @@ public abstract class ConnectedTextureBehaviour { } public abstract CTSpriteShiftEntry get(BlockState state, Direction direction); + + public abstract Iterable getAllCTShifts(); - boolean shouldFlipUVs(BlockState state, Direction face) { + protected boolean shouldFlipUVs(BlockState state, Direction face) { return false; } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java b/src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java index a2c22efa3..a818dfc7f 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java @@ -1,160 +1,7 @@ package com.simibubi.create.foundation.block.connected; -import java.util.function.BiPredicate; - -import com.google.common.collect.ImmutableList; -import com.simibubi.create.foundation.block.render.SpriteShiftEntry; -import com.simibubi.create.foundation.block.render.SpriteShifter; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.model.BakedQuad; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.Direction.AxisDirection; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IEnviromentBlockReader; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - public interface IHaveConnectedTextures { - class CTContext { - boolean up, down, left, right; - boolean topLeft, topRight, bottomLeft, bottomRight; - } - - @OnlyIn(Dist.CLIENT) - default boolean appliesTo(BakedQuad quad) { - return true; - } - - default boolean connectsTo(BlockState state, BlockState other, IEnviromentBlockReader reader, BlockPos pos, - BlockPos otherPos, Direction face) { - - BlockPos blockingPos = otherPos.offset(face); - if ((face.getAxis().getCoordinate(pos.getX(), pos.getY(), pos.getZ()) == face.getAxis() - .getCoordinate(otherPos.getX(), otherPos.getY(), otherPos.getZ())) - && connectsTo(state, reader.getBlockState(blockingPos), reader, pos, blockingPos, face)) - return false; - - return state.getBlock() == other.getBlock(); - } - - default Iterable getSpriteShifts() { - return ImmutableList.of(SpriteShifter.getCT(((Block) this).getRegistryName().getPath())); - } - - default int getTextureIndex(IEnviromentBlockReader reader, BlockPos pos, BlockState state, Direction face) { - return getTextureIndexForContext(reader, pos, state, face, buildContext(reader, pos, state, face)); - } - - default CTContext buildContext(IEnviromentBlockReader reader, BlockPos pos, BlockState state, Direction face) { - Axis axis = face.getAxis(); - boolean positive = face.getAxisDirection() == AxisDirection.POSITIVE; - Direction h = axis == Axis.X ? Direction.SOUTH : Direction.WEST; - Direction v = axis.isHorizontal() ? Direction.UP : Direction.NORTH; - h = positive ? h.getOpposite() : h; - if (face == Direction.DOWN) { - v = v.getOpposite(); - h = h.getOpposite(); - } - - final Direction horizontal = h; - final Direction vertical = v; - - BiPredicate connection = (x, y) -> { - BlockPos p = pos.offset(horizontal, x).offset(vertical, y); - return connectsTo(state, reader.getBlockState(p), reader, pos, p, face); - }; - - boolean up = connection.test(0, 1); - boolean down = connection.test(0, -1); - boolean left = connection.test(-1, 0); - boolean right = connection.test(1, 0); - boolean topLeft = connection.test(-1, 1); - boolean topRight = connection.test(1, 1); - boolean bottomLeft = connection.test(-1, -1); - boolean bottomRight = connection.test(1, -1); - - boolean flip = shouldFlipUVs(state, face); - CTContext context = new CTContext(); - - context.up = flip ? down : up; - context.down = flip ? up : down; - context.left = flip ? right : left; - context.right = flip ? left : right; - context.topLeft = flip ? bottomRight : topLeft; - context.topRight = flip ? bottomLeft : topRight; - context.bottomLeft = flip ? topRight : bottomLeft; - context.bottomRight = flip ? topLeft : bottomRight; - - return context; - } - - default boolean shouldFlipUVs(BlockState state, Direction face) { - return false; - } - - default int getTextureIndexForContext(IEnviromentBlockReader reader, BlockPos pos, BlockState state, Direction face, - CTContext c) { - int tileX = 0, tileY = 0; - int borders = (!c.up ? 1 : 0) + (!c.down ? 1 : 0) + (!c.left ? 1 : 0) + (!c.right ? 1 : 0); - - if (c.up) - tileX++; - if (c.down) - tileX += 2; - if (c.left) - tileY++; - if (c.right) - tileY += 2; - - if (borders == 0) { - if (c.topRight) - tileX++; - if (c.topLeft) - tileX += 2; - if (c.bottomRight) - tileY += 2; - if (c.bottomLeft) - tileY++; - } - - if (borders == 1) { - if (!c.right) { - if (c.topLeft || c.bottomLeft) { - tileY = 4; - tileX = -1 + (c.bottomLeft ? 1 : 0) + (c.topLeft ? 1 : 0) * 2; - } - } - if (!c.left) { - if (c.topRight || c.bottomRight) { - tileY = 5; - tileX = -1 + (c.bottomRight ? 1 : 0) + (c.topRight ? 1 : 0) * 2; - } - } - if (!c.down) { - if (c.topLeft || c.topRight) { - tileY = 6; - tileX = -1 + (c.topLeft ? 1 : 0) + (c.topRight ? 1 : 0) * 2; - } - } - if (!c.up) { - if (c.bottomLeft || c.bottomRight) { - tileY = 7; - tileX = -1 + (c.bottomLeft ? 1 : 0) + (c.bottomRight ? 1 : 0) * 2; - } - } - } - - if (borders == 2) { - if ((c.up && c.left && c.topLeft) || (c.down && c.left && c.bottomLeft) || (c.up && c.right && c.topRight) - || (c.down && c.right && c.bottomRight)) - tileX += 3; - } - - return tileX + 8 * tileY; - } + public ConnectedTextureBehaviour getBehaviour(); } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java b/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java index b6a3a1415..180fba5af 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java @@ -1,7 +1,26 @@ package com.simibubi.create.foundation.block.connected; +import java.util.Arrays; + +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; + public class StandardCTBehaviour extends ConnectedTextureBehaviour { + CTSpriteShiftEntry shift; + + public StandardCTBehaviour(CTSpriteShiftEntry shift) { + this.shift = shift; + } + + @Override + public CTSpriteShiftEntry get(BlockState state, Direction direction) { + return shift; + } - + @Override + public Iterable getAllCTShifts() { + return Arrays.asList(shift); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java index 51e101ac8..a4f0d19c4 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java @@ -1,7 +1,9 @@ package com.simibubi.create.foundation.block.render; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.simibubi.create.Create; @@ -27,4 +29,8 @@ public class SpriteShifter { textures.values().forEach(SpriteShiftEntry::loadTextures); } + public static List getAllTargetSprites() { + return textures.values().stream().map(SpriteShiftEntry::getTargetResourceLocation).collect(Collectors.toList()); + } + } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java index dc1951c3a..52be464b9 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java @@ -1,10 +1,13 @@ package com.simibubi.create.modules.contraptions.components.contraptions.chassis; -import com.google.common.collect.ImmutableList; +import java.util.Arrays; + import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; +import com.simibubi.create.foundation.block.connected.CTSpriteShifter; +import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType; +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; import com.simibubi.create.foundation.block.connected.IHaveConnectedTextures; -import com.simibubi.create.foundation.block.render.SpriteShiftEntry; -import com.simibubi.create.foundation.block.render.SpriteShifter; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -68,24 +71,44 @@ public class LinearChassisBlock extends AbstractChassisBlock implements IHaveCon } @Override - public Iterable getSpriteShifts() { - return ImmutableList.of( - SpriteShifter.get("block/translation_chassis_top", "block/connected/translation_chassis_top"), - SpriteShifter.get("block/translation_chassis_top_sticky", - "block/connected/translation_chassis_top_sticky")); + public ConnectedTextureBehaviour getBehaviour() { + return new ChassisCTBehaviour(); } + + private static class ChassisCTBehaviour extends ConnectedTextureBehaviour { - @Override - public boolean shouldFlipUVs(BlockState state, Direction face) { - if (state.get(AXIS).isHorizontal() && face.getAxisDirection() == AxisDirection.POSITIVE) - return true; - return IHaveConnectedTextures.super.shouldFlipUVs(state, face); - } + static final CTSpriteShiftEntry regular = CTSpriteShifter.get(CTType.OMNIDIRECTIONAL, + "translation_chassis_top"); + static final CTSpriteShiftEntry sticky = CTSpriteShifter.get(CTType.OMNIDIRECTIONAL, + "translation_chassis_top_sticky"); + + @Override + public CTSpriteShiftEntry get(BlockState state, Direction direction) { + Block block = state.getBlock(); + BooleanProperty glueableSide = ((LinearChassisBlock) block).getGlueableSide(state, direction); + if (glueableSide == null) + return null; + return state.get(glueableSide) ? sticky : regular; + } + + @Override + public Iterable getAllCTShifts() { + return Arrays.asList(regular, sticky); + } + + @Override + public boolean shouldFlipUVs(BlockState state, Direction face) { + if (state.get(AXIS).isHorizontal() && face.getAxisDirection() == AxisDirection.POSITIVE) + return true; + return super.shouldFlipUVs(state, face); + } + + @Override + public boolean connectsTo(BlockState state, BlockState other, IEnviromentBlockReader reader, BlockPos pos, + BlockPos otherPos, Direction face) { + return sameKind(state, other) && state.get(AXIS) == other.get(AXIS); + } - @Override - public boolean connectsTo(BlockState state, BlockState other, IEnviromentBlockReader reader, BlockPos pos, - BlockPos otherPos, Direction face) { - return sameKind(state, other) && state.get(AXIS) == other.get(AXIS); } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelControllerBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelControllerBlock.java index 036718abe..8d4c14593 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelControllerBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelControllerBlock.java @@ -104,10 +104,11 @@ public class CrushingWheelControllerBlock extends Block implements IHaveNoBlockI } public void updateSpeed(BlockState state, World world, BlockPos pos) { - CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) world.getTileEntity(pos); - - if (te == null) + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity == null || !(tileEntity instanceof CrushingWheelControllerTileEntity)) return; + + CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) tileEntity; if (!state.get(VALID) || CrushingWheelControllerTileEntity.isFrozen()) { if (te.crushingspeed != 0) { te.crushingspeed = 0; diff --git a/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java b/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java index e29cddbf3..21ae8dd44 100644 --- a/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java +++ b/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java @@ -1,6 +1,10 @@ package com.simibubi.create.modules.palettes; +import com.simibubi.create.foundation.block.connected.CTSpriteShifter; +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; import com.simibubi.create.foundation.block.connected.IHaveConnectedTextures; +import com.simibubi.create.foundation.block.connected.StandardCTBehaviour; +import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType; import net.minecraft.block.Blocks; import net.minecraft.block.GlassBlock; @@ -20,4 +24,9 @@ public class CTGlassBlock extends GlassBlock implements IHaveConnectedTextures { return hasAlpha ? BlockRenderLayer.TRANSLUCENT : super.getRenderLayer(); } + @Override + public ConnectedTextureBehaviour getBehaviour() { + return new StandardCTBehaviour(CTSpriteShifter.get(CTType.OMNIDIRECTIONAL, getRegistryName().getPath())); + } + } diff --git a/src/main/java/com/simibubi/create/modules/palettes/LayeredCTBlock.java b/src/main/java/com/simibubi/create/modules/palettes/LayeredCTBlock.java new file mode 100644 index 000000000..06b79772c --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/palettes/LayeredCTBlock.java @@ -0,0 +1,55 @@ +package com.simibubi.create.modules.palettes; + +import java.util.Arrays; + +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; +import com.simibubi.create.foundation.block.connected.IHaveConnectedTextures; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; + +public class LayeredCTBlock extends Block implements IHaveConnectedTextures { + + private LayeredCTBehaviour behaviour; + + public LayeredCTBlock(Properties properties, CTSpriteShiftEntry layerShift) { + this(properties, layerShift, null); + } + + public LayeredCTBlock(Properties properties, CTSpriteShiftEntry layerShift, CTSpriteShiftEntry topShift) { + super(properties); + behaviour = new LayeredCTBehaviour(layerShift, topShift); + } + + @Override + public ConnectedTextureBehaviour getBehaviour() { + return behaviour; + } + + private static class LayeredCTBehaviour extends ConnectedTextureBehaviour { + + CTSpriteShiftEntry topShift; + CTSpriteShiftEntry layerShift; + + public LayeredCTBehaviour(CTSpriteShiftEntry layerShift, CTSpriteShiftEntry topShift) { + this.layerShift = layerShift; + this.topShift = topShift; + } + + @Override + public CTSpriteShiftEntry get(BlockState state, Direction direction) { + return direction.getAxis().isHorizontal() ? layerShift : topShift; + } + + @Override + public Iterable getAllCTShifts() { + if (topShift == null) + return Arrays.asList(layerShift); + return Arrays.asList(layerShift, topShift); + } + + } + +} diff --git a/src/main/resources/assets/create/blockstates/limestone_layers.json b/src/main/resources/assets/create/blockstates/limestone_layers.json new file mode 100644 index 000000000..7ed9e8f3d --- /dev/null +++ b/src/main/resources/assets/create/blockstates/limestone_layers.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "create:block/palettes/limestone_layers" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index 1022cb2d9..70c83ceda 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -180,6 +180,7 @@ "block.create.polished_limestone": "Polished Limestone", "block.create.polished_limestone_slab": "Polished Limestone Slab", "block.create.limestone_pillar": "Limestone Pillar", + "block.create.limestone_layers": "Limestone Layers", "block.create.schematicannon": "Schematicannon", "block.create.schematic_table": "Schematic Table", diff --git a/src/main/resources/assets/create/models/block/palettes/limestone_layers.json b/src/main/resources/assets/create/models/block/palettes/limestone_layers.json new file mode 100644 index 000000000..a0eba407b --- /dev/null +++ b/src/main/resources/assets/create/models/block/palettes/limestone_layers.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "end": "create:block/polished_limestone", + "side": "create:block/limestone_layers" + } +} diff --git a/src/main/resources/assets/create/models/item/limestone_layers.json b/src/main/resources/assets/create/models/item/limestone_layers.json new file mode 100644 index 000000000..289ddb8d6 --- /dev/null +++ b/src/main/resources/assets/create/models/item/limestone_layers.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/palettes/limestone_layers" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/connected/limestone_layers.png b/src/main/resources/assets/create/textures/block/connected/limestone_layers.png new file mode 100644 index 000000000..5de677d2d Binary files /dev/null and b/src/main/resources/assets/create/textures/block/connected/limestone_layers.png differ diff --git a/src/main/resources/assets/create/textures/block/connected/polished_limestone.png b/src/main/resources/assets/create/textures/block/connected/polished_limestone.png new file mode 100644 index 000000000..23fe206a9 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/connected/polished_limestone.png differ diff --git a/src/main/resources/assets/create/textures/block/limestone_layers.png b/src/main/resources/assets/create/textures/block/limestone_layers.png new file mode 100644 index 000000000..6d2eccf31 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/limestone_layers.png differ diff --git a/src/main/resources/assets/create/textures/item/unused/Untitled.pdn b/src/main/resources/assets/create/textures/item/unused/Untitled.pdn deleted file mode 100644 index 2258e25a7..000000000 Binary files a/src/main/resources/assets/create/textures/item/unused/Untitled.pdn and /dev/null differ diff --git a/src/main/resources/assets/create/textures/item/unused/Untitled.png b/src/main/resources/assets/create/textures/item/unused/Untitled.png deleted file mode 100644 index 7402b7319..000000000 Binary files a/src/main/resources/assets/create/textures/item/unused/Untitled.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/item/unused/processor2.png b/src/main/resources/assets/create/textures/item/unused/processor2.png deleted file mode 100644 index 774cecbf1..000000000 Binary files a/src/main/resources/assets/create/textures/item/unused/processor2.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/item/unused/tube.pdn b/src/main/resources/assets/create/textures/item/unused/tube.pdn deleted file mode 100644 index 1c9b93852..000000000 Binary files a/src/main/resources/assets/create/textures/item/unused/tube.pdn and /dev/null differ diff --git a/src/main/resources/data/create/loot_tables/blocks/limestone_layers.json b/src/main/resources/data/create/loot_tables/blocks/limestone_layers.json new file mode 100644 index 000000000..5b42d6f80 --- /dev/null +++ b/src/main/resources/data/create/loot_tables/blocks/limestone_layers.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "create:limestone_layers", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:limestone_layers" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file