Are we there yet

- Fixed non-vanilla signs not accepted as valid display targets
- Fixed roller not rotating with correct transforms when flywheel is disabled
- Brass tunnels with no distribution behaviour no longer show the mode switcher
- Used more contrasting colours for diode and tunnel value inputs
- Fixed crash when hose pulley cannot find reference fluid for infinite draining
- Fixed incorrect vertical textures for encased chutes and industrial iron blocks
This commit is contained in:
simibubi 2023-04-30 18:06:55 +02:00
parent 5f0893e65b
commit 7cabcfca3c
33 changed files with 203 additions and 277 deletions

View file

@ -1129,7 +1129,7 @@ d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/horizontal_f
a5938ddd48109f067a19a90a0f9abab655c18821 assets/create/models/block/horizontal_framed_glass_pane_post.json
41645919ece236df5804a5a73ef682720194de34 assets/create/models/block/horizontal_framed_glass_pane_side.json
8bc0abaabdc62d0c27730dba7eb6da54607b7e96 assets/create/models/block/horizontal_framed_glass_pane_side_alt.json
07c1e1bcd87766cf324ac11ce1488856d1db86c3 assets/create/models/block/industrial_iron_block.json
cb425a5ba6d27004e071b407a2d262b702bba065 assets/create/models/block/industrial_iron_block.json
35253c91ed72c7c2ce981c384d334c1113851469 assets/create/models/block/jungle_window.json
65da656d412d973865f50ab7f02e278fe5398bea assets/create/models/block/jungle_window_pane_noside.json
9f4144df2e6b35c1fad04e594be5adb3b107bdb8 assets/create/models/block/jungle_window_pane_noside_alt.json

View file

@ -1,6 +1,7 @@
{
"parent": "minecraft:block/cube_all",
"parent": "minecraft:block/cube_column",
"textures": {
"all": "create:block/industrial_iron_block"
"side": "create:block/industrial_iron_block",
"end": "create:block/industrial_iron_block_top"
}
}

View file

@ -2238,7 +2238,9 @@ public class AllBlocks {
.properties(p -> p.sound(SoundType.NETHERITE_BLOCK))
.properties(p -> p.requiresCorrectToolForDrops())
.transform(pickaxeOnly())
.blockstate(simpleCubeAll("industrial_iron_block"))
.blockstate((c, p) -> p.simpleBlock(c.get(), p.models()
.cubeColumn(c.getName(), p.modLoc("block/industrial_iron_block"),
p.modLoc("block/industrial_iron_block_top"))))
.tag(AllBlockTags.WRENCH_PICKUP.tag)
.lang("Block of Industrial Iron")
.recipe((c, p) -> p.stonecutting(DataIngredient.tag(Tags.Items.INGOTS_IRON), c::get, 2))

View file

@ -253,8 +253,8 @@ public class AllShapes {
.build(),
SPOUT = shape(1, 2, 1, 15, 14, 15).add(2, 0, 2, 14, 16, 14)
.build(),
MILLSTONE = shape(0, 0, 0, 16, 6, 16).add(2, 6, 2, 14, 13, 14)
.add(3, 13, 3, 13, 16, 13)
MILLSTONE = shape(0, 0, 0, 16, 6, 16).add(2, 6, 2, 14, 12, 14)
.add(3, 12, 3, 13, 16, 13)
.build(),
CUCKOO_CLOCK = shape(1, 0, 1, 15, 19, 15).build(),
GAUGE_SHAPE_UP = shape(1, 0, 0, 15, 2, 16).add(2, 2, 1, 14, 14, 15)

View file

@ -64,9 +64,9 @@ public class RollerRenderer extends SmartBlockEntityRenderer<RollerBlockEntity>
if (context.contraption.stalled)
speed = 0;
superBuffer.translate(Vec3.atLowerCornerOf(facing.getNormal())
.scale(17 / 16f))
.transform(matrices.getModel());
superBuffer.transform(matrices.getModel())
.translate(Vec3.atLowerCornerOf(facing.getNormal())
.scale(17 / 16f));
HarvesterRenderer.transform(context.world, facing, superBuffer, speed, Vec3.ZERO);
PoseStack viewProjection = matrices.getViewProjection();

View file

@ -83,10 +83,21 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour {
if (validationFrontier.isEmpty() && !queue.isEmpty() && !simulate && revalidateIn == 0)
revalidate(root);
if (infinite) {
blockEntity.award(AllAdvancements.HOSE_PULLEY);
if (FluidHelper.isLava(fluid))
blockEntity.award(AllAdvancements.HOSE_PULLEY_LAVA);
playEffect(world, root, fluid, true);
return true;
}
while (!queue.isEmpty()) {
// Dont dequeue here, so we can decide not to dequeue a valid entry when
// simulating
BlockPos currentPos = queue.first().pos();
BlockPos currentPos = queue.first()
.pos();
BlockState blockState = world.getBlockState(currentPos);
BlockState emptied = blockState;
Fluid fluid = Fluids.EMPTY;
@ -137,12 +148,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour {
playEffect(world, currentPos, fluid, true);
blockEntity.award(AllAdvancements.HOSE_PULLEY);
if (infinite) {
if (FluidHelper.isLava(fluid))
blockEntity.award(AllAdvancements.HOSE_PULLEY_LAVA);
return true;
}
if (!blockEntity.isVirtual())
world.setBlock(currentPos, emptied, 2 | 16);
affectedArea = BBHelper.encapsulate(affectedArea, currentPos);
@ -273,20 +278,11 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour {
visited.clear();
}
Level world = getWorld();
int maxBlocks = maxBlocks();
if (visited.size() > maxBlocks && canDrainInfinitely(fluid) && !queue.isEmpty()) {
infinite = true;
// Find first block with valid fluid
while (true) {
BlockPos first = queue.first().pos();
if (canPullFluidsFrom(world.getBlockState(first), first) != FluidBlockType.SOURCE) {
queue.dequeue();
continue;
}
break;
}
BlockPos firstValid = queue.first().pos();
BlockPos firstValid = queue.first()
.pos();
frontier.clear();
visited.clear();
queue.clear();

View file

@ -21,7 +21,6 @@ import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.CenteredSideValueBoxTransform;
import com.simibubi.create.foundation.blockEntity.behaviour.belt.DirectBeltInputBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.SidedFilteringBehaviour;
@ -66,7 +65,7 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
ItemStack stackToDistribute;
Direction stackEnteredFrom;
float distributionProgress;
int distributionDistanceLeft;
int distributionDistanceRight;
@ -98,8 +97,9 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
super.addBehaviours(behaviours);
behaviours.add(selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class,
Lang.translateDirect("logistics.when_multiple_outputs_available"), this,
new CenteredSideValueBoxTransform((state, d) -> d == Direction.UP)));
Lang.translateDirect("logistics.when_multiple_outputs_available"), this, new BrassTunnelModeSlot()));
selectionMode.onlyActiveWhen(this::hasDistributionBehaviour);
// Propagate settings across connected tunnels
selectionMode.withCallback(setting -> {
@ -159,7 +159,8 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
continue;
distributionTargets.get(!tunnel.flapFilterEmpty(output))
.add(Pair.of(tunnel.worldPosition, output));
int distance = tunnel.worldPosition.getX() + tunnel.worldPosition.getZ() - worldPosition.getX() - worldPosition.getZ();
int distance = tunnel.worldPosition.getX() + tunnel.worldPosition.getZ() - worldPosition.getX()
- worldPosition.getZ();
if (distance < 0)
distributionDistanceLeft = Math.max(distributionDistanceLeft, -distance);
else
@ -527,7 +528,7 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
continue;
if (!tunnelBE.sides.contains(direction))
continue;
BlockPos offset = tunnelBE.worldPosition.below()
.relative(direction);
@ -578,11 +579,11 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
compound.putBoolean("SyncedOutput", syncedOutputActive);
compound.putBoolean("ConnectedLeft", connectedLeft);
compound.putBoolean("ConnectedRight", connectedRight);
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
if (stackEnteredFrom != null)
NBTHelper.writeEnum(compound, "StackEnteredFrom", stackEnteredFrom);
compound.putFloat("DistributionProgress", distributionProgress);
compound.putInt("PreviousIndex", previousOutputIndex);
compound.putInt("DistanceLeft", distributionDistanceLeft);
@ -610,7 +611,7 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
syncedOutputActive = compound.getBoolean("SyncedOutput");
connectedLeft = compound.getBoolean("ConnectedLeft");
connectedRight = compound.getBoolean("ConnectedRight");
stackToDistribute = ItemStack.of(compound.getCompound("StackToDistribute"));
stackEnteredFrom =
compound.contains("StackEnteredFrom") ? NBTHelper.readEnum(compound, "StackEnteredFrom", Direction.class)
@ -718,7 +719,7 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
super.invalidate();
tunnelCapability.invalidate();
}
@Override
public void destroy() {
super.destroy();
@ -781,20 +782,22 @@ public class BrassTunnelBlockEntity extends BeltTunnelBlockEntity implements IHa
List<ItemStack> allStacks = grabAllStacksOfGroup(true);
if (allStacks.isEmpty())
return false;
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("tooltip.brass_tunnel.contains"))
.withStyle(ChatFormatting.WHITE));
for (ItemStack item : allStacks) {
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("tooltip.brass_tunnel.contains_entry", Components.translatable(item.getDescriptionId())
.getString(), item.getCount()))
.append(Lang.translateDirect("tooltip.brass_tunnel.contains_entry",
Components.translatable(item.getDescriptionId())
.getString(),
item.getCount()))
.withStyle(ChatFormatting.GRAY));
}
tooltip.add(componentSpacing.plainCopy()
.append(Lang.translateDirect("tooltip.brass_tunnel.retrieve"))
.withStyle(ChatFormatting.DARK_GRAY));
return true;
}

View file

@ -4,39 +4,45 @@ import org.jetbrains.annotations.Nullable;
import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
import com.simibubi.create.foundation.block.connected.CTType;
import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
public class BrassTunnelCTBehaviour extends ConnectedTextureBehaviour.Base {
@Override
public @Nullable CTType getDataType(BlockAndTintGetter world, BlockPos pos, BlockState state, Direction direction) {
if (!(world.getBlockEntity(pos) instanceof BrassTunnelBlockEntity tunnelBE)
|| !tunnelBE.hasDistributionBehaviour())
return null;
return super.getDataType(world, pos, state, direction);
}
@Override
public CTSpriteShiftEntry getShift(BlockState state, Direction direction, @Nullable TextureAtlasSprite sprite) {
return direction == Direction.UP ? AllSpriteShifts.BRASS_TUNNEL_TOP : null;
}
@Override
protected boolean reverseUVs(BlockState state, Direction face) {
return true;
}
@Override
public boolean connectsTo(BlockState state, BlockState other, BlockAndTintGetter reader, BlockPos pos, BlockPos otherPos,
Direction face) {
public boolean connectsTo(BlockState state, BlockState other, BlockAndTintGetter reader, BlockPos pos,
BlockPos otherPos, Direction face) {
int yDiff = otherPos.getY() - pos.getY();
int zDiff = otherPos.getZ() - pos.getZ();
if (yDiff != 0)
return false;
BlockEntity be = reader.getBlockEntity(pos);
if (!(be instanceof BrassTunnelBlockEntity))
if (!(reader.getBlockEntity(pos) instanceof BrassTunnelBlockEntity tunnelBE))
return false;
BrassTunnelBlockEntity tunnelBE = (BrassTunnelBlockEntity) be;
boolean leftSide = zDiff > 0;
return tunnelBE.isConnected(leftSide);
}

View file

@ -0,0 +1,18 @@
package com.simibubi.create.content.logistics.block.belts.tunnel;
import com.simibubi.create.foundation.blockEntity.behaviour.CenteredSideValueBoxTransform;
import net.minecraft.core.Direction;
public class BrassTunnelModeSlot extends CenteredSideValueBoxTransform {
public BrassTunnelModeSlot() {
super((state, d) -> d == Direction.UP);
}
@Override
public int getOverrideColor() {
return 0x592424;
}
}

View file

@ -25,4 +25,9 @@ public class BrassDiodeScrollSlot extends ValueBoxTransform {
.rotateX(90);
}
@Override
public int getOverrideColor() {
return 0x592424;
}
}

View file

@ -28,6 +28,7 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;
@ -222,6 +223,10 @@ public class AllDisplayBehaviours {
DisplayTarget targetOfBlock = targetOf(blockState);
DisplayTarget targetOfBlockEntity = blockEntity == null ? null : targetOf(blockEntity);
// Commonly added by mods, but with a non-vanilla blockentitytype
if (targetOfBlockEntity == null && blockEntity instanceof SignBlockEntity)
targetOfBlockEntity = targetOf(BlockEntityType.SIGN);
if (targetOfBlockEntity == null)
return targetOfBlock;
return targetOfBlockEntity;

View file

@ -134,9 +134,9 @@ public class BoilerDisplaySource extends DisplaySource {
}
return Stream.of(List.of(Lang.translateDirect(label, boiler.getHeatLevelTextComponent())),
List.of(size, boiler.getSizeComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.BLACK)),
List.of(water, boiler.getWaterComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.BLACK)),
List.of(heat, boiler.getHeatComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.BLACK)));
List.of(size, boiler.getSizeComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.RESET)),
List.of(water, boiler.getWaterComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.RESET)),
List.of(heat, boiler.getHeatComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.RESET)));
}
private int labelWidth() {

View file

@ -50,7 +50,7 @@ public class CTModel extends BakedModelWrapperWithData {
&& !(actualState.getBlock()instanceof CopycatBlock ufb
&& !ufb.canFaceBeOccluded(actualState, face)))
continue;
CTType dataType = behaviour.getDataType(state, face);
CTType dataType = behaviour.getDataType(world, pos, state, face);
if (dataType == null)
continue;
CTContext context = behaviour.buildContext(world, pos, state, face, dataType.getContextRequirement());

View file

@ -21,7 +21,7 @@ public abstract class ConnectedTextureBehaviour {
// TODO: allow more than one data type per state/face?
@Nullable
public abstract CTType getDataType(BlockState state, Direction direction);
public abstract CTType getDataType(BlockAndTintGetter world, BlockPos pos, BlockState state, Direction direction);
public boolean buildContextForOccludedDirections() {
return false;
@ -32,7 +32,7 @@ public abstract class ConnectedTextureBehaviour {
BlockPos blockingPos = otherPos.relative(face);
BlockState blockState = reader.getBlockState(pos);
if (blockState.getBlock()instanceof CopycatBlock ufb
if (blockState.getBlock() instanceof CopycatBlock ufb
&& ufb.isUnblockableConnectivitySide(reader, blockState, face, pos, otherPos))
return false;
@ -60,7 +60,7 @@ public abstract class ConnectedTextureBehaviour {
.relative(vertical, sv);
BlockState blockState = reader.getBlockState(pos);
if (blockState.getBlock()instanceof CopycatBlock ufb
if (blockState.getBlock() instanceof CopycatBlock ufb
&& ufb.isIgnoredConnectivitySide(reader, blockState, face, pos, p))
return false;
@ -73,7 +73,7 @@ public abstract class ConnectedTextureBehaviour {
BlockPos toPos) {
BlockState blockState = reader.getBlockState(toPos);
if (blockState.getBlock()instanceof CopycatBlock ufb) {
if (blockState.getBlock() instanceof CopycatBlock ufb) {
BlockState connectiveMaterial = ufb.getConnectiveMaterial(reader, reference, face, fromPos, toPos);
return connectiveMaterial == null ? blockState : connectiveMaterial;
}
@ -274,7 +274,7 @@ public abstract class ConnectedTextureBehaviour {
@Override
@Nullable
public CTType getDataType(BlockState state, Direction direction) {
public CTType getDataType(BlockAndTintGetter world, BlockPos pos, BlockState state, Direction direction) {
CTSpriteShiftEntry shift = getShift(state, direction, null);
if (shift == null) {
return null;

View file

@ -30,8 +30,8 @@ public class ValueBox extends ChasingAABBOutline {
protected Component scrollTooltip = Components.immutableEmpty();
protected Vec3 labelOffset = Vec3.ZERO;
protected int passiveColor;
protected int highlightColor;
public int overrideColor = -1;
public boolean isPassive;
protected BlockPos pos;
@ -65,6 +65,11 @@ public class ValueBox extends ChasingAABBOutline {
this.isPassive = passive;
return this;
}
public ValueBox withColor(int color) {
this.overrideColor = color;
return this;
}
@Override
public void render(PoseStack ms, SuperRenderTypeBuffer buffer, float pt) {
@ -183,7 +188,7 @@ public class ValueBox extends ChasingAABBOutline {
Font font = Minecraft.getInstance().font;
float scale = 3;
ms.scale(scale, scale, 1);
ms.translate(-4, -4, 5);
ms.translate(-4, -3.75, 5);
int stringWidth = font.width(text);
float numberScale = (float) font.lineHeight / stringWidth;
@ -195,7 +200,8 @@ public class ValueBox extends ChasingAABBOutline {
ms.scale(numberScale, numberScale, numberScale);
ms.translate(singleDigit ? stringWidth / 2 : 0, singleDigit ? -verticalMargin : verticalMargin, 0);
renderHoveringText(ms, buffer, text, 0xEDEDED, 0x4f4f4f);
int overrideColor = transform.getOverrideColor();
renderHoveringText(ms, buffer, text, overrideColor != -1 ? overrideColor : 0xEDEDED);
}
}
@ -214,17 +220,16 @@ public class ValueBox extends ChasingAABBOutline {
float scale = 2 * 16;
ms.scale(scale, scale, scale);
ms.translate(-.5f, -.5f, 5 / 32f);
icon.render(ms, buffer, 0xFFFFFF);
int overrideColor = transform.getOverrideColor();
icon.render(ms, buffer, overrideColor != -1 ? overrideColor : 0xFFFFFF);
}
}
protected void renderHoveringText(PoseStack ms, MultiBufferSource buffer, Component text, int color,
int shadowColor) {
protected void renderHoveringText(PoseStack ms, MultiBufferSource buffer, Component text, int color) {
ms.pushPose();
drawString(ms, buffer, text, 0, 0, color);
ms.translate(0, 0, -.25);
drawString(ms, buffer, text, 1, 1, shadowColor);
ms.popPose();
}

View file

@ -43,6 +43,10 @@ public abstract class ValueBoxTransform {
public boolean shouldRender(BlockState state) {
return state.getMaterial() != Material.AIR && getLocalOffset(state) != null;
}
public int getOverrideColor() {
return -1;
}
protected Vec3 rotateHorizontally(BlockState state, Vec3 vec) {
float yRot = 0;

View file

@ -4,6 +4,7 @@
"textures": {
"3": "create:block/chute",
"4": "create:block/chute_large",
"5": "create:block/industrial_iron_block_top",
"particle": "create:block/industrial_iron_block"
},
"elements": [
@ -15,7 +16,7 @@
"east": {"uv": [0, 0, 16, 16], "texture": "#particle"},
"south": {"uv": [0, 0, 16, 16], "texture": "#particle"},
"west": {"uv": [0, 0, 16, 16], "texture": "#particle"},
"up": {"uv": [0, 0, 16, 16], "texture": "#particle"},
"up": {"uv": [0, 0, 16, 16], "texture": "#5"},
"down": {"uv": [0, 0, 8, 8], "texture": "#4"}
}
},

View file

@ -22,7 +22,7 @@
"from": [2, 5, 14],
"to": [14, 14, 16],
"faces": {
"north": {"uv": [1, 0, 7, 4.5], "texture": "#1_7"},
"north": {"uv": [1, 0, 7, 3.5], "texture": "#1_7"},
"south": {"uv": [1, 0, 7, 4.5], "texture": "#4"},
"up": {"uv": [1, 0, 7, 1], "rotation": 180, "texture": "#4"}
}
@ -42,7 +42,8 @@
},
{
"from": [2, 5, 7],
"to": [14, 10, 15],
"to": [14, 10.1, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0.1, 0]},
"faces": {
"north": {"uv": [1, 16, 7, 13.5], "rotation": 180, "texture": "#4"},
"down": {"uv": [1, 16, 7, 12], "rotation": 180, "texture": "#4"}
@ -58,9 +59,9 @@
}
},
{
"from": [2, 9, 7],
"to": [14, 10, 15],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 7]},
"from": [2, 9.1, 7],
"to": [14, 10.1, 15],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.1, 7]},
"faces": {
"up": {"uv": [1, 9.5, 7, 13.5], "rotation": 180, "texture": "#4"}
}

View file

@ -314,8 +314,8 @@
},
"gui": {
"rotation": [30, 225, 0],
"translation": [0, -1.5, 0],
"scale": [0.4, 0.4, 0.4]
"translation": [0, -2.25, 0],
"scale": [0.45, 0.45, 0.45]
},
"fixed": {
"translation": [0, -3, 0],

View file

@ -4,66 +4,10 @@
"textures": {
"0": "create:block/gearbox",
"5": "create:block/millstone",
"6": "block/polished_andesite",
"13": "block/stripped_spruce_log",
"particle": "block/polished_andesite"
"8": "create:block/andesite_casing",
"particle": "create:block/palettes/stone_types/cap/andesite_cut_cap"
},
"elements": [
{
"from": [3, 13, 3],
"to": [5, 16, 13],
"faces": {
"north": {"uv": [0, 3, 3, 5], "rotation": 90, "texture": "#13"},
"east": {"uv": [0, 0, 10, 3], "texture": "#13"},
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#13"},
"west": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#13"},
"up": {"uv": [5, 3, 7, 13], "texture": "#13"},
"down": {"uv": [0, 0, 2, 10], "texture": "#13"}
}
},
{
"from": [11, 13, 3],
"to": [13, 16, 13],
"faces": {
"north": {"uv": [0, 7, 3, 9], "rotation": 90, "texture": "#13"},
"east": {"uv": [0, 10, 3, 0], "rotation": 90, "texture": "#13"},
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#13"},
"west": {"uv": [10, 0, 0, 3], "texture": "#13"},
"up": {"uv": [5, 2, 3, 12], "texture": "#13"},
"down": {"uv": [2, 0, 0, 10], "texture": "#13"}
}
},
{
"from": [5, 13, 11],
"to": [11, 16, 13],
"faces": {
"north": {"uv": [0, 0, 6, 3], "texture": "#13"},
"east": {"uv": [0, 0, 2, 3], "texture": "#13"},
"south": {"uv": [0, 3, 3, 9], "rotation": 90, "texture": "#13"},
"west": {"uv": [0, 0, 2, 3], "texture": "#13"},
"up": {"uv": [10, 4, 12, 10], "rotation": 90, "texture": "#13"},
"down": {"uv": [0, 0, 6, 2], "texture": "#13"}
}
},
{
"from": [5, 13, 5],
"to": [11, 15, 11],
"faces": {
"up": {"uv": [6, 0, 9, 3], "rotation": 90, "texture": "#5"}
}
},
{
"from": [5, 13, 3],
"to": [11, 16, 5],
"faces": {
"north": {"uv": [0, 9, 3, 3], "rotation": 90, "texture": "#13"},
"east": {"uv": [2, 0, 0, 3], "texture": "#13"},
"south": {"uv": [6, 0, 0, 3], "texture": "#13"},
"west": {"uv": [2, 0, 0, 3], "texture": "#13"},
"up": {"uv": [7, 3, 5, 9], "rotation": 270, "texture": "#13"},
"down": {"uv": [0, 2, 6, 0], "texture": "#13"}
}
},
{
"name": "bottom",
"from": [0, 0, 0],
@ -73,7 +17,7 @@
"east": {"uv": [7, 13, 8, 16], "texture": "#5"},
"south": {"uv": [0, 13, 8, 16], "texture": "#5"},
"west": {"uv": [0, 13, 1, 16], "texture": "#5"},
"up": {"uv": [0.5, 8.5, 8.5, 9.5], "texture": "#5"},
"up": {"uv": [0, 0, 16, 2], "texture": "#8"},
"down": {"uv": [0, 14, 16, 16], "texture": "#0"}
}
},
@ -86,7 +30,7 @@
"east": {"uv": [8, 13, 7, 16], "texture": "#5"},
"south": {"uv": [8, 13, 0, 16], "texture": "#5"},
"west": {"uv": [1, 13, 0, 16], "texture": "#5"},
"up": {"uv": [0.5, 9.5, 8.5, 8.5], "texture": "#5"},
"up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#8"},
"down": {"uv": [0, 16, 16, 14], "texture": "#0"}
}
},
@ -96,7 +40,7 @@
"faces": {
"east": {"uv": [1, 13, 7, 16], "texture": "#5"},
"west": {"uv": [1, 13, 7, 16], "texture": "#5"},
"up": {"uv": [1.5, 8.5, 7.5, 9.5], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 2, 2], "texture": "#8"},
"down": {"uv": [0, 2, 2, 14], "texture": "#0"}
}
},
@ -106,7 +50,7 @@
"faces": {
"east": {"uv": [7, 13, 1, 16], "texture": "#5"},
"west": {"uv": [7, 13, 1, 16], "texture": "#5"},
"up": {"uv": [1.5, 9.5, 7.5, 8.5], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 2, 2], "rotation": 180, "texture": "#8"},
"down": {"uv": [2, 2, 0, 14], "texture": "#0"}
}
},
@ -114,50 +58,30 @@
"from": [2, 1, 2],
"to": [14, 6, 14],
"faces": {
"up": {"uv": [2, 2, 14, 14], "rotation": 270, "texture": "#6"},
"up": {"uv": [0, 0, 6, 6], "rotation": 270, "texture": "#5"},
"down": {"uv": [2, 2, 14, 14], "texture": "#0"}
}
},
{
"from": [3, 12, 3],
"to": [13, 16, 13],
"faces": {
"north": {"uv": [11, 9, 16, 11], "texture": "#5"},
"east": {"uv": [11, 9, 16, 11], "texture": "#5"},
"south": {"uv": [11, 9, 16, 11], "texture": "#5"},
"west": {"uv": [11, 9, 16, 11], "texture": "#5"},
"up": {"uv": [16, 11, 11, 16], "texture": "#5"},
"down": {"uv": [16, 11, 11, 16], "texture": "#5"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, -149, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, -149, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, -55, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, -55, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 1, 1.25],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, 45, 0],
"translation": [2.5, -0.5, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [0, 180, 0],
"translation": [0, 1.75, -4.5],
"scale": [0.5, 0.5, 0.5]
}
},
"groups": [0, 1, 2, 3, 4,
"groups": [
{
"name": "bottom",
"origin": [8, 8, 8],
"children": [5, 6, 7, 8, 9]
}
"color": 0,
"children": [0, 1, 2, 3, 4]
},
5
]
}

View file

@ -11,8 +11,9 @@
"elements": [
{
"name": "Gear5",
"from": [6.5, 6.5, -1],
"to": [9.5, 12.5, 17],
"from": [6.5, 6, -1],
"to": [9.5, 12, 17],
"rotation": {"angle": 0, "axis": "y", "origin": [0, -0.5, 0]},
"faces": {
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
@ -24,9 +25,9 @@
},
{
"name": "Gear6",
"from": [6.5, 6.5, -1],
"to": [9.5, 12.5, 17],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"from": [6.5, 6, -1],
"to": [9.5, 12, 17],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
@ -38,9 +39,9 @@
},
{
"name": "Gear7",
"from": [-1, 6.5, 6.5],
"to": [17, 12.5, 9.5],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"from": [-1, 6, 6.5],
"to": [17, 12, 9.5],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
@ -52,8 +53,9 @@
},
{
"name": "Gear7",
"from": [-1, 6.5, 6.5],
"to": [17, 12.5, 9.5],
"from": [-1, 6, 6.5],
"to": [17, 12, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [0, -0.5, 0]},
"faces": {
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
@ -65,9 +67,9 @@
},
{
"name": "GearCaseInner",
"from": [2, 7, 2],
"to": [14, 12, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]},
"from": [2, 6.5, 2],
"to": [14, 11.5, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
"east": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
@ -77,19 +79,6 @@
"down": {"uv": [0, 0, 6, 6], "texture": "#5"}
}
},
{
"name": "GearCaseOuter",
"from": [4, 6, 4],
"to": [12, 13, 12],
"faces": {
"north": {"uv": [6, 4.5, 10, 8], "texture": "#5"},
"east": {"uv": [6, 4.5, 10, 8], "texture": "#5"},
"south": {"uv": [6, 4.5, 10, 8], "texture": "#5"},
"west": {"uv": [6, 4.5, 10, 8], "texture": "#5"},
"up": {"uv": [1, 1, 5, 5], "texture": "#5"},
"down": {"uv": [1, 1, 5, 5], "texture": "#5"}
}
},
{
"name": "Axis",
"from": [6, 0, 6],
@ -142,12 +131,14 @@
{
"name": "cogwheel",
"origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5]
"color": 0,
"children": [0, 1, 2, 3, 4]
},
{
"name": "shaft_half",
"origin": [8, 8, 8],
"children": [6]
"color": 0,
"children": [5]
}
]
}

View file

@ -3,16 +3,16 @@
"parent": "block/block",
"textures": {
"0": "create:block/gearbox",
"3": "block/stripped_spruce_log",
"5": "create:block/millstone",
"6": "block/polished_andesite",
"particle": "block/polished_andesite"
"8": "create:block/andesite_casing",
"particle": "create:block/palettes/stone_types/cap/andesite_cut_cap"
},
"elements": [
{
"name": "Gear5",
"from": [6.5, 6.5, -1],
"to": [9.5, 12.5, 17],
"from": [6.5, 6, -1],
"to": [9.5, 12, 17],
"rotation": {"angle": 0, "axis": "y", "origin": [0, -0.5, 0]},
"faces": {
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
@ -24,9 +24,9 @@
},
{
"name": "Gear6",
"from": [6.5, 6.5, -1],
"to": [9.5, 12.5, 17],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"from": [6.5, 6, -1],
"to": [9.5, 12, 17],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
@ -38,9 +38,9 @@
},
{
"name": "Gear7",
"from": [-1, 6.5, 6.5],
"to": [17, 12.5, 9.5],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"from": [-1, 6, 6.5],
"to": [17, 12, 9.5],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
@ -52,8 +52,9 @@
},
{
"name": "Gear7",
"from": [-1, 6.5, 6.5],
"to": [17, 12.5, 9.5],
"from": [-1, 6, 6.5],
"to": [17, 12, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [0, -0.5, 0]},
"faces": {
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
@ -65,8 +66,9 @@
},
{
"name": "GearCaseInner",
"from": [2, 6.6, 2],
"to": [14, 11.6, 14],
"from": [2, 6.1, 2],
"to": [14, 11.1, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [0, -0.5, 0]},
"faces": {
"north": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
"east": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
@ -78,8 +80,9 @@
},
{
"name": "GearCaseOuter",
"from": [4, 6, 4],
"to": [12, 13, 12],
"from": [4, 5.5, 4],
"to": [12, 12.5, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [0, -0.5, 0]},
"faces": {
"north": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
"east": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
@ -87,13 +90,6 @@
"west": {"uv": [1, 1.5, 5, 5], "texture": "#5"}
}
},
{
"from": [5, 13, 5],
"to": [11, 15, 11],
"faces": {
"up": {"uv": [6, 0, 9, 3], "rotation": 90, "texture": "#5"}
}
},
{
"name": "bottom",
"from": [0, 0, 0],
@ -103,7 +99,7 @@
"east": {"uv": [7, 13, 8, 16], "texture": "#5"},
"south": {"uv": [0, 13, 8, 16], "texture": "#5"},
"west": {"uv": [0, 13, 1, 16], "texture": "#5"},
"up": {"uv": [0.5, 8.5, 8.5, 9.5], "texture": "#5"},
"up": {"uv": [0, 0, 16, 2], "texture": "#8"},
"down": {"uv": [0, 14, 16, 16], "texture": "#0"}
}
},
@ -116,7 +112,7 @@
"east": {"uv": [8, 13, 7, 16], "texture": "#5"},
"south": {"uv": [8, 13, 0, 16], "texture": "#5"},
"west": {"uv": [1, 13, 0, 16], "texture": "#5"},
"up": {"uv": [0.5, 9.5, 8.5, 8.5], "texture": "#5"},
"up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#8"},
"down": {"uv": [0, 16, 16, 14], "texture": "#0"}
}
},
@ -126,7 +122,7 @@
"faces": {
"east": {"uv": [1, 13, 7, 16], "texture": "#5"},
"west": {"uv": [1, 13, 7, 16], "texture": "#5"},
"up": {"uv": [1.5, 8.5, 7.5, 9.5], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 2, 2], "texture": "#8"},
"down": {"uv": [0, 2, 2, 14], "texture": "#0"}
}
},
@ -136,7 +132,7 @@
"faces": {
"east": {"uv": [7, 13, 1, 16], "texture": "#5"},
"west": {"uv": [7, 13, 1, 16], "texture": "#5"},
"up": {"uv": [1.5, 9.5, 7.5, 8.5], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 2, 2], "rotation": 180, "texture": "#8"},
"down": {"uv": [2, 2, 0, 14], "texture": "#0"}
}
},
@ -144,56 +140,20 @@
"from": [2, 1, 2],
"to": [14, 6, 14],
"faces": {
"up": {"uv": [2, 2, 14, 14], "rotation": 270, "texture": "#6"},
"up": {"uv": [0, 0, 6, 6], "rotation": 270, "texture": "#5"},
"down": {"uv": [2, 2, 14, 14], "texture": "#0"}
}
},
{
"from": [11, 13, 3],
"from": [3, 12, 3],
"to": [13, 16, 13],
"faces": {
"north": {"uv": [0, 7, 3, 9], "rotation": 90, "texture": "#3"},
"east": {"uv": [0, 10, 3, 0], "rotation": 90, "texture": "#3"},
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#3"},
"west": {"uv": [10, 0, 0, 3], "texture": "#3"},
"up": {"uv": [5, 2, 3, 12], "texture": "#3"},
"down": {"uv": [2, 0, 0, 10], "texture": "#3"}
}
},
{
"from": [5, 13, 11],
"to": [11, 16, 13],
"faces": {
"north": {"uv": [0, 0, 6, 3], "texture": "#3"},
"east": {"uv": [0, 0, 2, 3], "texture": "#3"},
"south": {"uv": [0, 3, 3, 9], "rotation": 90, "texture": "#3"},
"west": {"uv": [0, 0, 2, 3], "texture": "#3"},
"up": {"uv": [10, 4, 12, 10], "rotation": 90, "texture": "#3"},
"down": {"uv": [0, 0, 6, 2], "texture": "#3"}
}
},
{
"from": [5, 13, 3],
"to": [11, 16, 5],
"faces": {
"north": {"uv": [0, 9, 3, 3], "rotation": 90, "texture": "#3"},
"east": {"uv": [2, 0, 0, 3], "texture": "#3"},
"south": {"uv": [6, 0, 0, 3], "texture": "#3"},
"west": {"uv": [2, 0, 0, 3], "texture": "#3"},
"up": {"uv": [7, 3, 5, 9], "rotation": 270, "texture": "#3"},
"down": {"uv": [0, 2, 6, 0], "texture": "#3"}
}
},
{
"from": [3, 13, 3],
"to": [5, 16, 13],
"faces": {
"north": {"uv": [0, 3, 3, 5], "rotation": 90, "texture": "#3"},
"east": {"uv": [0, 0, 10, 3], "texture": "#3"},
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#3"},
"west": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#3"},
"up": {"uv": [5, 3, 7, 13], "texture": "#3"},
"down": {"uv": [0, 0, 2, 10], "texture": "#3"}
"north": {"uv": [11, 9, 16, 11], "texture": "#5"},
"east": {"uv": [11, 9, 16, 11], "texture": "#5"},
"south": {"uv": [11, 9, 16, 11], "texture": "#5"},
"west": {"uv": [11, 9, 16, 11], "texture": "#5"},
"up": {"uv": [16, 11, 11, 16], "texture": "#5"},
"down": {"uv": [16, 11, 11, 16], "texture": "#5"}
}
}
],
@ -201,11 +161,15 @@
{
"name": "cogwheel",
"origin": [8, 8, 8],
"color": 0,
"children": [0, 1, 2, 3, 4, 5]
}, 6,
},
{
"name": "bottom",
"origin": [8, 8, 8],
"children": [7, 8, 9, 10, 11]
}, 12, 13, 14, 15]
"color": 0,
"children": [6, 7, 8, 9, 10]
},
11
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 B

After

Width:  |  Height:  |  Size: 704 B