From 07ef48fefb5f22521505ef6d19248d8cbff60602 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 13 Jan 2020 21:59:26 +0100 Subject: [PATCH] Sprites and CT - Except it works - Added a few new sprites for crafting ingredients - Reworked the Connected Texture system - Added Limestone Layers to test custom CT spriteshifts - Migrated existing CT blocks to use the new system - Crushing wheel controllers no longer crash when in a schematic --- .../java/com/simibubi/create/AllBlocks.java | 12 +- .../com/simibubi/create/CreateClient.java | 3 +- .../foundation/block/connected/CTModel.java | 47 +++--- .../block/connected/CTSpriteShiftEntry.java | 12 +- .../block/connected/CTSpriteShifter.java | 4 + .../connected/ConnectedTextureBehaviour.java | 13 +- .../connected/IHaveConnectedTextures.java | 155 +----------------- .../block/connected/StandardCTBehaviour.java | 21 ++- .../block/render/SpriteShifter.java | 6 + .../chassis/LinearChassisBlock.java | 59 +++++-- .../crusher/CrushingWheelControllerBlock.java | 7 +- .../create/modules/palettes/CTGlassBlock.java | 9 + .../modules/palettes/LayeredCTBlock.java | 55 +++++++ .../create/blockstates/limestone_layers.json | 5 + .../resources/assets/create/lang/en_us.json | 1 + .../block/palettes/limestone_layers.json | 7 + .../create/models/item/limestone_layers.json | 3 + .../block/connected/limestone_layers.png | Bin 0 -> 962 bytes .../block/connected/polished_limestone.png | Bin 0 -> 3538 bytes .../textures/block/limestone_layers.png | Bin 0 -> 679 bytes .../create/textures/item/unused/Untitled.pdn | Bin 4584 -> 0 bytes .../create/textures/item/unused/Untitled.png | Bin 560 -> 0 bytes .../textures/item/unused/processor2.png | Bin 604 -> 0 bytes .../create/textures/item/unused/tube.pdn | Bin 4718 -> 0 bytes .../loot_tables/blocks/limestone_layers.json | 20 +++ 25 files changed, 219 insertions(+), 220 deletions(-) create mode 100644 src/main/java/com/simibubi/create/modules/palettes/LayeredCTBlock.java create mode 100644 src/main/resources/assets/create/blockstates/limestone_layers.json create mode 100644 src/main/resources/assets/create/models/block/palettes/limestone_layers.json create mode 100644 src/main/resources/assets/create/models/item/limestone_layers.json create mode 100644 src/main/resources/assets/create/textures/block/connected/limestone_layers.png create mode 100644 src/main/resources/assets/create/textures/block/connected/polished_limestone.png create mode 100644 src/main/resources/assets/create/textures/block/limestone_layers.png delete mode 100644 src/main/resources/assets/create/textures/item/unused/Untitled.pdn delete mode 100644 src/main/resources/assets/create/textures/item/unused/Untitled.png delete mode 100644 src/main/resources/assets/create/textures/item/unused/processor2.png delete mode 100644 src/main/resources/assets/create/textures/item/unused/tube.pdn create mode 100644 src/main/resources/data/create/loot_tables/blocks/limestone_layers.json 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 0000000000000000000000000000000000000000..5de677d2d1bb10e24d441cd745d7078f29ccb233 GIT binary patch literal 962 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6d2eccf3108a8f65f3ad5a5d59948791b6694868 GIT binary patch literal 679 zcmV;Y0$BZtP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0z64XK~y+T6_U$t z)G!o=eSEi*=}g;!7Q~Jv3!a-dK)e7FLaG=*2nhrWM1|VUbP^|aeC5nhR_FTvp99~% zd@x4FxWtsNpS@U8oME|E%0we9FT*?>m9eB2+K3CDa`E@yBi&v- z*L_cbkX8xBQjNh)!$ZxPaan8SLUF0AHqcs06D>JlGiflpDFxpenU0TT31Rk18>PD0 zxl&ne%@|X2qDm{EluOxfHh%V47TQ)qxRNNHa};H#abIf#Zs*xk0>Fd-fL5|ls^pwY zK`gi)eG`(gDviSIH0-t3bbo(8jbn-dCvAVe+TeE;W15^xr8FvVo&aB6UYo9)=b2t^ zpPaVF1OzA)Ar%+GbbY@%J6UUyF_hI|l5)PjxS+=Nw(ny)MXe0Sut^FeTTy2zh3TFv zOIqeimr^MqXij3ZR)agF+}toOi$`mKP;(+Bwi~BlSj0w|sNJtn%O2bDd zq~M!U%J2qz{pux3WDF>i=*;$Krr!*QhY&o{pp1uDv{Ke~Ldr1D{{dAdYScLiNw)w1 N002ovPDHLkV1nY~D@_0Z literal 0 HcmV?d00001 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 2258e25a7ba33d8ed3856968486b4a973c79cce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4584 zcmd^BdvFuS8Nb7pEP)MffDl6fq0l&~jPUz_IEfc1 zj_*?Hl?oouQRFZ!#KT~PW|=OfpS;PD1SaYrZyMpih*{5EV9zN2QfB@PGJh&LF}xG|155Jo>-2r&MT z7VNf7P3CjvQGW<7_7RTw7?H;?JMRHglN}?-T*e6xILyINz#6v4eax8666C#pmnW3V zu?|OIieUPRM4UI;inP&?9bi&eanfi@6gi`nF@?36Oz&ho;xRgHJUtLrxgBgI;_b7s z)?!XY5*+PMj2K59(FmC?Mme1YXY|7%KbD%Jxx5ckCrm0bZHt9dPB$JOwfd4)yQSCZ zAG5lBm?c#3r+cka;S5W=@)q-u$4=_GsJSnY$XKV`9&08`j0F4Kj<8via-|JMGUl?o zhYebt&fAwGUD%jW!gYf6s_t)urI_> zlRBc{H}^$_JUiOU7Tk$k(9b(PVUH`Xi>ZTok2T<#%nYiqv4k(wKaw|i1~bs1m?POc zln7@1DVt5HP;co}&j*uwK1#PBDEJ{r89eX}pTttX$``Uc#d#(&9mbPc3czvObX&L1Z4C+>&BWRiDV|`t zBpsi}t<`^$l?5V-^p30%Ih z&EOts8s~s(nlX;U3(%0N2^t!ES=9nh7pdE-=DA80s|WBm^mD}*kjh~!$QuBGw}9_@ zDD*lviT9ZB;FByTo$$~Md|9(}l9W#bs2mL|CO8D#E0e*khr$2DH3)LxJ^%?-6ayP_ z>fX8~9A5tsNa9;VRTxBd392B;!Bj<2sT?dcZKS5?XuE*N^jkIK(#2rO-U*i!Gzt2x zrbDSnf?_0gWTB9zx|BMlLImhi63*Uqgz;x1sj$Xv_h&t{VG6^#x?tHvF9N$l+e#a2 zq!^%-Ca|PlkfO7Ib}vc+*cBn5(a#CN@>m7%{5;^Y8o&++2vgNm1!x99BA|I55a=-n z$aa86Js7itQeOc+HxGPU4X_acFTWlbT?8#`FcPWHYmVE0+Ihetzcblh=8ad2h;U; zSL+Z0ZP!|1@G39MrSRn36e=MqvH{A3irmO9unyO>bSV!yDoIIr0%tUUSr5v1jmte$ ziscH{BugZqQQ?2SjrD-BTnUH-TI%Muh9OhW;3?{pUk?qikpPVwY2Jzxi5SOb8M1** z;{+`flTQPtln9}XzGXmz#o#n2Vq4Q(;+aOqvZCJiD_p_6X}6BH>+UI!)U ze;gJgOe|j$6Nn5#!3TvgE+)d=a0Y`N22zc`TOkJqKJ>Zt9zYf^c&s8GEu+VQcz6ZC zMo^d-BB~0`V1|4GwGDCb~q~%oK8pZ71Z3z0K=*tzm%ts4?yt$zC zFZaB(ukQ#?Dm^ z|2AFAse}L6U3l@|+t&W+Usvz?!~0FM`*yu@85uv}`0YEEkxen#j-Jdj)K5!+eHZjc zJNkb>eg9tXi>@Pl>FVt6V+Wr){mz#Uym7j9-|XQZpS8WV=lt8l^pRt)UHzH<+{XLf z-aI^dpjdj{^K|)4(=W>Z{M+@aMix}9@$chJ=ychpscX6Nz!e5*nJxb=`sfd*uT0An zgWX4F-#yHAf8)LI=8K2+CC*GoW>$_*_sm`^_dVey-*x`cwrRHU!R^R}HIJNt;{FR7 C>!D!) 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 7402b73196d140b55c3def1056e8790d6bf1b94c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmV-00?+-4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0mVr~K~zXf?UKze z13?(ZpWQaPODm|Q^^Lc#OEdsSUk zc`12vXpluNPua!sA?-5M(OKR}#3c^r=f>e^X@(JwA{BpttFZ~;U;xWY8yN78K*Z?? zW-bG%V8PSV4QGRj$i)?+p%AX(QR-5}DS*j#WFJkOX&QF-4-hj9SlJA{%q8M7zZl~# zMw3j&f}Po@F6k#u9oS_RsYD7n)I%yhQt}0YC5bo%)H|FsG0i+|`8?IFaveFBh`)8< zYAoJv63;gw~Hn(@+TUn>t@As2)S-}PJy}foEE%Vy|u8&U0;q&>Z yi=xOYYtDY+63zag@@M?5Y5}zXu3EtV2LP{5fMyhU-9ME80000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0r5#hK~y+TosmsQ z8&MR6&kPDx7fF;P8Y5z9-DpL{h*0Q8L|tk?7o{k;PTf?B5D-)l)U_fJ6&3tJ!FJPC z6;vdkAQZYu4W$^8_){GrX6f|ZJM*HWV!;oFd*94E=bd*)8SQ?L`}EB&nw^27C|n=g ztLVCJwofBX0)YTmV)5$+RI`7;*zhO4)8G1EcS`~iQ9U^PiJ8y@^76|dOt2dc^Y?gM zGh&!HN=pm_DeMc5BYp83xk6Z6?BGpATU!@mu^9IEzgtYmAd8x0@&rSJgAYXMbP8Ut zm&H|8mHb|q=yy#rGkE=`Rt)Gfnw$OT>FKqIWo>AvgWvxF9*;e9Z@z-3s6bcL8~A*U zyeSen%81I#Uy0ap-keIMvAnbfN4~;Wp(}8Lc;YWdQdJe<@Bxc7?SdwIxy)3JS)8!PW7mCx9*xKBNc6EZB7d93)HMQ`73Hm#4Yu+h5 z#JilGo}s?J77O#Mn421~h=?yMlZgC^a{n>df17}iDTrwF2VISO5^eA7iFE=u$mVw| z>)%*pF)-l?ceJ;luBL*2aV&Ap9|$Rwuz}m{HkS}Xi*U8u?PS7c_eBI9%7?pL#zYAz qCTupF*%`=`GBH(#3~2GZN5?;KnFcPsiW>9)00005FU{u>#UbeEQgb1*|IE4vK~eP#+*(k-O0K;`5t;O z1Si8JgpfjpFioc^AwWBmw2%x0_cjJpp~Ut?+rVO?U7H=!mD5wfTr&+-Ir*@$oSIMJ4*D6|XK88* zx*c&tAj)ZN1(X@oI`u8do_wT0I0K#_;`9U!P0h65m>?Lm#~sBs=DV_;4xBcoOcn=; zc@WfPXlcn%Xe#N+BlaGKceJLw?z{;Nt`R*2t~)~#q*u!z9)Ab!=)&@3B8CtyLu@GT zO%d*%ggz9sdxr{1$Dk!atO?SAfIrgbYvoWqM@GD&&nLQ=E;`AJdDMhpc09q`?0E;p zvo^ioV{x%@3-25h`kf9W($!jUbQ`s3#MYsAH6=62G;Ij_`hN?XsJ@3$)*c;z3Fq8MKMb##qoYXzu8CA;yp=$)P4kqK`teT9WA? z$dEB+^7fNd)=c>k1PLTVcFLaTk&qkj*Y|GhqdVDXSJss8>o5_~kUQC*(uYzTnU<6R z&#@F2j`q0lurp#vds|sj+mxV(Vu;1bdkbkV!t_DsK|9jU;9x-X({{T?-PGRJH14=f z;}Ov=lY>_#D}o39;Zs)uh|h;njNo8}UP910Fac{+k4MDa0nwR& zLF5U}LkL(L?8zk%G%u@?$to-5v&*4-U_kd!ya10^g8g~Ukfpd1vB9$ zGtz1>68e_b^^N~e@bzog!^6u|m4MWbeJY?UnMwhO0uJ9>XK;=(gK@w#^(e<-1*k~v z00osjy=;J|HWD++`q@&(tOD@&v~$T8kgA|BsHy>hyMSL66ndALqRay$5jJ;M3#ct87u9N15=k0c`Bh3u%v#ie!a353_051keZ5v+O9Wg)M=26r0OpeGK5vr ztWiqI2)I;?2|;sc3GiRzfYT=dHbX!ds+Kaq762pxwu}RUbBqBpQE(~nCLJKvmw>O1 z1J9TQY=FQs?*;}N`?kRKFjiqGsb)bk8S`3!3h+>SMws5z;L2oVrnPq$duB6R7UDb?NTurn>hg?C7-It zzCoV0Ot$ZiSm=Q>%U1+S+kpCz*VH^z&MFC)=wtvX7tRAKRPzCu$kGcS2voA9ZIIJs zs)c||Ojraua%cc)!eY=+EdgX=f*N!b5cz*Q70k=kG2j((Z>DNl`58i>?Al5UUfauZ zG?pIg!b3<0c?imc2f3GCpz};B=}I0{)HtEwag5OeW)(=|lT7X*XqGG3(kwm*l?uP{ zGPWADRT@APP*eBUHFTLO2BV3u-yW)AAps|@qj(#J4<5BfXwrAa1V4mr^Gq1lxy0I8O?rfx3DmKEivfNUrq@MLlr7!srw_F#m3 z4YCn()PP8kkAcP*q~Q+aCuNWd=;YrrFu+VHFci>Jzsa?sU)6xPN(!Xes3I}mCtbX1 z;zWYrI3f<%D!Cjwzm$LBUtSFrE!}S5{{gw($e~+6?aQGTK$T7?L=NpM@t`>;^QKJ9 zlgY&;+iT!TuyoIf-@7Z&S=C?cP@TKHB7bp->tg)fIhql4DYn01{_OMn8a4ac#7n20 zyLat+=Etx6+~;1Yxc%rewI0=vjyM;s`XgrD#4C3nb>mZZUO)5XUW?)Qisw)4e|`Tt z-RUE3%vR@tEhBqQeEiwG%YV^XuQz#5Jz`$JyJ5%di*_GnZjo-ep`-pOQi|YNI|JZVL>n=str`Cnr{B@C+55Kdy z;`4W2Irb8Nb?c0iOR988EJFWjRJS;@`BufS`Z@phnNxcAt!!F%;q~hyH|LoT`Po;u z=|{=0itp|GJoAfbpBy=~A=O@YW!*v7-d~@}*8lmh%SOJ7eV<-=?aRF%#7^(AH{YuK zL%izQ_6GCl%$MFech<_P-rhdH?gf{4oGV5jU*&%zxSD%+-(33d(P;AR$PXf$4)uSJ z_@d2wC3^e#;|r&)IxzC_!8eatW?a5KKt6nPeaT2L`YkxB%e&(&AtDg-| XeQkcMa?#cU`3x>wzU$>rq1gWbo9etG 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