feat: add back furnace engine

This commit is contained in:
Timo Ley 2023-07-28 11:46:25 +02:00
parent 0bfd98fccd
commit ef42b7d84e
50 changed files with 2485 additions and 2189 deletions

View File

@ -231,11 +231,12 @@ fb41aa1a0828c9256b3f886fdcb55bb54252ba09 assets/create/blockstates/exposed_coppe
dd6dadfeb65c4a4c4d1dc92516c411355e90dcca assets/create/blockstates/fluid_pipe.json
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
d3de8e5a13c417effe1516fba9d9074fa4a6da23 assets/create/blockstates/fluid_valve.json
95b0775bf4d619ca5b0a42dbdc47c6f2c15d7b3d assets/create/blockstates/flywheel.json
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json
b5a2e05ed9557992c6093b76e9d80073eb986d5a assets/create/blockstates/framed_glass_door.json
61df7769fa61f6dd2868a4377e54320fdd473b4e assets/create/blockstates/framed_glass_pane.json
21661698b4aea1984661a0eaf4e98fd02ba2dd52 assets/create/blockstates/framed_glass_trapdoor.json
3cf49f4812732f00f578fa73785e14ffdf340f21 assets/create/blockstates/furnace_engine.json
23744450886af88ed468aecbbd7b8d7babcbbd6f assets/create/blockstates/gantry_carriage.json
9fa39a44bba30c5ae8fa245b122a837c705462b4 assets/create/blockstates/gantry_shaft.json
eca1f0e56efdadb241f42dc6ebb036f1d52213a9 assets/create/blockstates/gearbox.json
@ -582,8 +583,8 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
5616dda664dd106d576848124fc0fc1de18d0fd3 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
4fd8347dfb20e6e5752b8b905850762a88c88c02 assets/create/lang/en_ud.json
4e84e9d171ca389a372fda7e30a73ddc7d41185a assets/create/lang/en_us.json
e1ef2d33dd4102c0075c41412cf3f40140a60e2e assets/create/lang/en_ud.json
eb159a8640b42c72ad136d904379aec170942edd assets/create/lang/en_us.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
@ -1925,6 +1926,7 @@ f2496d3b16e5b5415474bcfb7d6c6a6c3b28ed60 assets/create/models/item/framed_glass.
fe7a9c2130d8c4d6f4ed4ea7c56b63c4a5e709d2 assets/create/models/item/framed_glass_door.json
1041d462c6e856f7f3f2365c299c0599703d1ed7 assets/create/models/item/framed_glass_pane.json
1c2ec286c36a791fc7c6ddabb7fcb302fbeaf0a1 assets/create/models/item/framed_glass_trapdoor.json
0bee2855dc9bad52e941153b87e9c35797c246ee assets/create/models/item/furnace_engine.json
a703b16625ad9d3b9042b6b19fdb88407726898b assets/create/models/item/furnace_minecart_contraption.json
a642f570ec8223c066e542f062aff3b7f93e002b assets/create/models/item/gantry_carriage.json
b4bfd5041b62f3a0a955fa4872d178b590614f22 assets/create/models/item/gantry_shaft.json
@ -3488,6 +3490,7 @@ b4df9a8b28f29587e75ffe11ca26d85ddbe926da data/create/loot_tables/blocks/fluid_pi
1088a023e61d0115de836c8f6309fc447ae4322a data/create/loot_tables/blocks/framed_glass_door.json
f76fe7d876150a43be05977ec596d1fe2a3b9868 data/create/loot_tables/blocks/framed_glass_pane.json
badc3b5364aa8df59aabda61a455ea56cb82d2ff data/create/loot_tables/blocks/framed_glass_trapdoor.json
7e0962fdc4166303117a54f6b7069bd5c26c2bde data/create/loot_tables/blocks/furnace_engine.json
891f0d334c3f596af081328be8d6ac0461592183 data/create/loot_tables/blocks/gantry_carriage.json
795c88efe80319220902da231f45d63d1130fde5 data/create/loot_tables/blocks/gantry_shaft.json
8a0d3f52474ea610efd6f2053d3b666d5f7db0f7 data/create/loot_tables/blocks/gearbox.json
@ -4914,6 +4917,8 @@ a88cc39c13146aa246910193b0b0151a797c5f19 data/create/recipes/limestone_from_ston
484e6c52ad534d2fa2bbacb7c03a349ae68d0803 data/create/recipes/limestone_pillar_from_stone_types_limestone_stonecutting.json
66674d07de63aada0991d2fdff07e22e00450135 data/create/recipes/mechanical_crafting/crushing_wheel.json
599f8b87c24c131350ba7ceb69a0c8b9829c62bc data/create/recipes/mechanical_crafting/extendo_grip.json
f26ed47c10cc63613759b0f8ae4ef349000de60d data/create/recipes/mechanical_crafting/flywheel.json
2dc00d6e4c159e06ab2a705e666e83e4238a7814 data/create/recipes/mechanical_crafting/furnace_engine.json
fa356eb82c08339bb0064017d88b1e5b053fd4ff data/create/recipes/mechanical_crafting/potato_cannon.json
7e695ab2b684c23968a23765072603be5da13d75 data/create/recipes/mechanical_crafting/wand_of_symmetry.json
98f877bf8f3f8a686fc6cf7479a0fba5744248ce data/create/recipes/milling/allium.json
@ -5317,7 +5322,7 @@ d79c82bc6cf59b073b2f51f5fea9c98e81d14b68 data/create/recipes/weathered_copper_ti
452d480dd50b97fce72e0c89429cf68db534c6b2 data/create/recipes/weathered_copper_tile_slab_from_weathered_copper_tiles_stonecutting.json
ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_tile_stairs.json
5942a571f79c40524bbf408775cf91de4715f2b6 data/create/recipes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json
2a2700b43614f86d3294726595cb28ed7dca4387 data/create/tags/blocks/brittle.json
77e6f289379772776c1c58122540b4d88a0808b3 data/create/tags/blocks/brittle.json
d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/blocks/casing.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/contraption_inventory_deny.json
bc203f09dd7f48965d146d0bd035fb904cb75e7d data/create/tags/blocks/copycat_allow.json
@ -5431,7 +5436,7 @@ cf71d9ad48f109da3a8b22a8d2d1a68d4eac99c0 data/minecraft/tags/blocks/climbable.js
69f596fcb065e26b02ce246760432b5174191b76 data/minecraft/tags/blocks/impermeable.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/lush_ground_replaceable.json
b68d565b4befb7b1c542d69eaa81309cc5304327 data/minecraft/tags/blocks/mineable/axe.json
ed5bf69c56339703aadb5e6a9cb40d5938dfb2f8 data/minecraft/tags/blocks/mineable/pickaxe.json
df77afefbb021ad6bf12b04493b669a3cb362b84 data/minecraft/tags/blocks/mineable/pickaxe.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/moss_replaceable.json
e157c1d3af30e409e34bbefbe15a037e6e1c8daa data/minecraft/tags/blocks/needs_iron_tool.json
a08f67865337f62601c5e333b4011382d10020e4 data/minecraft/tags/blocks/needs_stone_tool.json

View File

@ -1,17 +1,49 @@
{
"variants": {
"axis=x": {
"model": "create:block/flywheel/block",
"x": 90,
"connection=none,facing=north": {
"model": "create:block/flywheel/casing_none",
"y": 270
},
"connection=left,facing=north": {
"model": "create:block/flywheel/casing_left",
"y": 270
},
"connection=right,facing=north": {
"model": "create:block/flywheel/casing_right",
"y": 270
},
"connection=none,facing=south": {
"model": "create:block/flywheel/casing_none",
"y": 90
},
"axis=y": {
"model": "create:block/flywheel/block"
"connection=left,facing=south": {
"model": "create:block/flywheel/casing_left",
"y": 90
},
"axis=z": {
"model": "create:block/flywheel/block",
"x": 90,
"connection=right,facing=south": {
"model": "create:block/flywheel/casing_right",
"y": 90
},
"connection=none,facing=west": {
"model": "create:block/flywheel/casing_none",
"y": 180
},
"connection=left,facing=west": {
"model": "create:block/flywheel/casing_left",
"y": 180
},
"connection=right,facing=west": {
"model": "create:block/flywheel/casing_right",
"y": 180
},
"connection=none,facing=east": {
"model": "create:block/flywheel/casing_none"
},
"connection=left,facing=east": {
"model": "create:block/flywheel/casing_left"
},
"connection=right,facing=east": {
"model": "create:block/flywheel/casing_right"
}
}
}

View File

@ -0,0 +1,19 @@
{
"variants": {
"facing=north": {
"model": "create:block/furnace_engine/block"
},
"facing=south": {
"model": "create:block/furnace_engine/block",
"y": 180
},
"facing=west": {
"model": "create:block/furnace_engine/block",
"y": 270
},
"facing=east": {
"model": "create:block/furnace_engine/block",
"y": 90
}
}
}

View File

@ -237,6 +237,7 @@
"block.create.framed_glass_door": "\u0279oo\u15E1 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132",
"block.create.framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132",
"block.create.framed_glass_trapdoor": "\u0279oopd\u0250\u0279\u27D8 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132",
"block.create.furnace_engine": "\u01DDu\u0131bu\u018E \u01DD\u0254\u0250u\u0279n\u2132",
"block.create.gantry_carriage": "\u01DDb\u0250\u0131\u0279\u0279\u0250\u0186 \u028E\u0279\u0287u\u0250\u2141",
"block.create.gantry_shaft": "\u0287\u025F\u0250\u0265S \u028E\u0279\u0287u\u0250\u2141",
"block.create.gearbox": "xoq\u0279\u0250\u01DD\u2141",

View File

@ -240,6 +240,7 @@
"block.create.framed_glass_door": "Framed Glass Door",
"block.create.framed_glass_pane": "Framed Glass Pane",
"block.create.framed_glass_trapdoor": "Framed Glass Trapdoor",
"block.create.furnace_engine": "Furnace Engine",
"block.create.gantry_carriage": "Gantry Carriage",
"block.create.gantry_shaft": "Gantry Shaft",
"block.create.gearbox": "Gearbox",

View File

@ -0,0 +1,3 @@
{
"parent": "create:block/furnace_engine/item"
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "create:furnace_engine"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@ -0,0 +1,20 @@
{
"type": "create:mechanical_crafting",
"pattern": [
" BBB",
"CB B",
" BBB"
],
"key": {
"B": {
"tag": "forge:ingots/brass"
},
"C": {
"item": "create:brass_casing"
}
},
"result": {
"item": "create:flywheel"
},
"acceptMirrored": true
}

View File

@ -0,0 +1,31 @@
{
"type": "create:mechanical_crafting",
"pattern": [
"PPB",
"PCI",
"PPB"
],
"key": {
"P": {
"tag": "forge:plates/brass"
},
"B": {
"tag": "forge:ingots/brass"
},
"I": [
{
"item": "minecraft:piston"
},
{
"item": "minecraft:sticky_piston"
}
],
"C": {
"item": "create:brass_casing"
}
},
"result": {
"item": "create:furnace_engine"
},
"acceptMirrored": true
}

View File

@ -22,6 +22,7 @@
"create:black_valve_handle",
"create:rope",
"create:pulley_magnet",
"create:furnace_engine",
"create:redstone_link",
"create:peculiar_bell",
"create:haunted_bell",

View File

@ -111,6 +111,7 @@
"create:mechanical_crafter",
"create:sequenced_gearshift",
"create:flywheel",
"create:furnace_engine",
"create:rotation_speed_controller",
"create:mechanical_arm",
"create:track",

View File

@ -107,6 +107,9 @@ import com.simibubi.create.content.kinetics.fan.NozzleBlockEntity;
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
import com.simibubi.create.content.kinetics.flywheel.FlywheelInstance;
import com.simibubi.create.content.kinetics.flywheel.FlywheelRenderer;
import com.simibubi.create.content.kinetics.flywheel.engine.EngineInstance;
import com.simibubi.create.content.kinetics.flywheel.engine.EngineRenderer;
import com.simibubi.create.content.kinetics.flywheel.engine.FurnaceEngineTileEntity;
import com.simibubi.create.content.kinetics.gantry.GantryShaftBlockEntity;
import com.simibubi.create.content.kinetics.gauge.GaugeInstance;
import com.simibubi.create.content.kinetics.gauge.GaugeRenderer;
@ -599,6 +602,13 @@ public class AllBlockEntityTypes {
.renderer(() -> FlywheelRenderer::new)
.register();
public static final BlockEntityEntry<FurnaceEngineTileEntity> FURNACE_ENGINE = REGISTRATE
.blockEntity("furnace_engine", FurnaceEngineTileEntity::new)
.instance(() -> EngineInstance::new, false)
.validBlocks(AllBlocks.FURNACE_ENGINE)
.renderer(() -> EngineRenderer::new)
.register();
public static final BlockEntityEntry<MillstoneBlockEntity> MILLSTONE = REGISTRATE
.blockEntity("millstone", MillstoneBlockEntity::new)
.instance(() -> MillstoneCogInstance::new, false)

View File

@ -124,6 +124,8 @@ import com.simibubi.create.content.kinetics.drill.DrillMovementBehaviour;
import com.simibubi.create.content.kinetics.fan.EncasedFanBlock;
import com.simibubi.create.content.kinetics.fan.NozzleBlock;
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
import com.simibubi.create.content.kinetics.flywheel.FlywheelGenerator;
import com.simibubi.create.content.kinetics.flywheel.engine.FurnaceEngineBlock;
import com.simibubi.create.content.kinetics.gantry.GantryShaftBlock;
import com.simibubi.create.content.kinetics.gauge.GaugeBlock;
import com.simibubi.create.content.kinetics.gauge.GaugeGenerator;
@ -1514,11 +1516,22 @@ public class AllBlocks {
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(axeOrPickaxe())
.transform(BlockStressDefaults.setNoImpact())
.blockstate(BlockStateGen.axisBlockProvider(true))
.blockstate(new FlywheelGenerator()::generate)
.item()
.transform(customItemModel())
.register();
public static final BlockEntry<FurnaceEngineBlock> FURNACE_ENGINE =
REGISTRATE.block("furnace_engine", FurnaceEngineBlock::new)
.initialProperties(SharedProperties::softMetal)
.transform(pickaxeOnly())
.tag(AllBlockTags.BRITTLE.tag)
.blockstate(BlockStateGen.horizontalBlockProvider(true))
.transform(BlockStressDefaults.setCapacity(1024.0))
.item()
.transform(customItemModel())
.register();
public static final BlockEntry<SpeedControllerBlock> ROTATION_SPEED_CONTROLLER =
REGISTRATE.block("rotation_speed_controller", SpeedControllerBlock::new)
.initialProperties(SharedProperties::softMetal)

View File

@ -62,6 +62,13 @@ public class AllPartialModels {
ROLLER_WHEEL = block("mechanical_roller/wheel"),
ROLLER_FRAME = block("mechanical_roller/frame"),
FLYWHEEL = block("flywheel/wheel"),
FLYWHEEL_UPPER_ROTATING = block("flywheel/upper_rotating_connector"),
FLYWHEEL_LOWER_ROTATING = block("flywheel/lower_rotating_connector"),
FLYWHEEL_UPPER_SLIDING = block("flywheel/upper_sliding_connector"),
FLYWHEEL_LOWER_SLIDING = block("flywheel/lower_sliding_connector"),
FURNACE_GENERATOR_FRAME = block("furnace_engine/frame"),
CUCKOO_MINUTE_HAND = block("cuckoo_clock/minute_hand"), CUCKOO_HOUR_HAND = block("cuckoo_clock/hour_hand"),
CUCKOO_LEFT_DOOR = block("cuckoo_clock/left_door"), CUCKOO_RIGHT_DOOR = block("cuckoo_clock/right_door"),
CUCKOO_PIG = block("cuckoo_clock/pig"), CUCKOO_CREEPER = block("cuckoo_clock/creeper"),
@ -100,6 +107,9 @@ public class AllPartialModels {
ARM_CLAW_GRIP_UPPER = block("mechanical_arm/upper_claw_grip"),
ARM_CLAW_GRIP_LOWER = block("mechanical_arm/lower_claw_grip"),
FLAG_SHORT_IN = block("mechanical_arm/flag/short_in"), FLAG_SHORT_OUT = block("mechanical_arm/flag/short_out"),
FLAG_LONG_IN = block("mechanical_arm/flag/long_in"), FLAG_LONG_OUT = block("mechanical_arm/flag/long_out"),
MECHANICAL_PUMP_COG = block("mechanical_pump/cog"),
FLUID_PIPE_CASING = block("fluid_pipe/casing"), FLUID_VALVE_POINTER = block("fluid_valve/pointer"),

View File

@ -17,6 +17,7 @@ import com.simibubi.create.content.decoration.slidingDoor.SlidingDoorBlock;
import com.simibubi.create.content.equipment.potatoCannon.BuiltinPotatoProjectileTypes;
import com.simibubi.create.content.fluids.tank.BoilerHeaters;
import com.simibubi.create.content.kinetics.TorquePropagator;
import com.simibubi.create.content.kinetics.flywheel.engine.FurnaceEngineInteractions;
import com.simibubi.create.content.kinetics.mechanicalArm.AllArmInteractionPointTypes;
import com.simibubi.create.content.redstone.displayLink.AllDisplayBehaviours;
import com.simibubi.create.content.redstone.link.RedstoneLinkNetworkHandler;
@ -133,6 +134,7 @@ public class Create {
AllConfigs.register(modLoadingContext);
FurnaceEngineInteractions.registerDefaults();
AllMovementBehaviours.registerDefaults();
AllInteractionBehaviours.registerDefaults();
AllDisplayBehaviours.registerDefaults();

View File

@ -2,64 +2,128 @@ package com.simibubi.create.content.kinetics.flywheel;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllShapes;
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
import com.simibubi.create.content.kinetics.base.RotatedPillarKineticBlock;
import com.simibubi.create.content.kinetics.flywheel.engine.EngineTileEntity;
import com.simibubi.create.content.kinetics.flywheel.engine.FurnaceEngineBlock;
import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
public class FlywheelBlock extends RotatedPillarKineticBlock implements IBE<FlywheelBlockEntity> {
public class FlywheelBlock extends HorizontalKineticBlock implements IBE<FlywheelBlockEntity> {
public static final EnumProperty<ConnectionState> CONNECTION = EnumProperty.create("connection", ConnectionState.class);
public FlywheelBlock(Properties properties) {
super(properties);
registerDefaultState(defaultBlockState().setValue(CONNECTION, ConnectionState.NONE));
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder.add(CONNECTION));
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
Direction preferred = getPreferredHorizontalFacing(context);
if (preferred != null)
return defaultBlockState().setValue(HORIZONTAL_FACING, preferred.getOpposite());
return this.defaultBlockState().setValue(HORIZONTAL_FACING, context.getHorizontalDirection());
}
public static boolean isConnected(BlockState state) {
return getConnection(state) != null;
}
public static Direction getConnection(BlockState state) {
Direction facing = state.getValue(HORIZONTAL_FACING);
ConnectionState connection = state.getValue(CONNECTION);
if (connection == ConnectionState.LEFT)
return facing.getCounterClockWise();
if (connection == ConnectionState.RIGHT)
return facing.getClockWise();
return null;
}
public static void setConnection(Level world, BlockPos pos, BlockState state, Direction direction) {
Direction facing = state.getValue(HORIZONTAL_FACING);
ConnectionState connection = ConnectionState.NONE;
if (direction == facing.getClockWise())
connection = ConnectionState.RIGHT;
if (direction == facing.getCounterClockWise())
connection = ConnectionState.LEFT;
world.setBlock(pos, state.setValue(CONNECTION, connection), 18);
//AllTriggers.triggerForNearbyPlayers(AllTriggers.FLYWHEEL, world, pos, 4);
}
@Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
return face == state.getValue(HORIZONTAL_FACING).getOpposite();
}
@Override
public Axis getRotationAxis(BlockState state) {
return state.getValue(HORIZONTAL_FACING).getAxis();
}
@Override
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
Direction connection = getConnection(state);
if (connection == null)
return super.onWrenched(state ,context);
if (context.getClickedFace().getAxis() == state.getValue(HORIZONTAL_FACING).getAxis())
return InteractionResult.PASS;
Level world = context.getLevel();
BlockPos enginePos = context.getClickedPos().relative(connection, 2);
BlockState engine = world.getBlockState(enginePos);
if (engine.getBlock() instanceof FurnaceEngineBlock)
((FurnaceEngineBlock) engine.getBlock()).withBlockEntityDo(world, enginePos, EngineTileEntity::detachWheel);
return super.onWrenched(state.setValue(CONNECTION, ConnectionState.NONE), context);
}
public enum ConnectionState implements StringRepresentable {
NONE, LEFT, RIGHT;
@Override
public String getSerializedName() {
return Lang.asId(name());
}
}
@Override
public Class<FlywheelBlockEntity> getBlockEntityClass() {
return FlywheelBlockEntity.class;
}
@Override
public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) {
return AllShapes.LARGE_GEAR.get(pState.getValue(AXIS));
}
@Override
public RenderShape getRenderShape(BlockState pState) {
return RenderShape.ENTITYBLOCK_ANIMATED;
}
@Override
public BlockEntityType<? extends FlywheelBlockEntity> getBlockEntityType() {
return AllBlockEntityTypes.FLYWHEEL.get();
}
@Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
return face.getAxis() == getRotationAxis(state);
}
@Override
public Axis getRotationAxis(BlockState state) {
return state.getValue(AXIS);
}
@Override
public float getParticleTargetRadius() {
return 2f;
}
@Override
public float getParticleInitialRadius() {
return 1.75f;
}
}

View File

@ -1,5 +1,6 @@
package com.simibubi.create.content.kinetics.flywheel;
import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
@ -10,8 +11,13 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
public class FlywheelBlockEntity extends KineticBlockEntity {
public class FlywheelBlockEntity extends GeneratingKineticBlockEntity {
private float generatedCapacity;
private float generatedSpeed;
private int stoppingCooldown;
// Client
LerpedFloat visualSpeed = LerpedFloat.linear();
float angle;
@ -19,6 +25,32 @@ public class FlywheelBlockEntity extends KineticBlockEntity {
super(type, pos, state);
}
public void setRotation(float speed, float capacity) {
if (generatedSpeed != speed || generatedCapacity != capacity) {
if (speed == 0) {
if (stoppingCooldown == 0)
stoppingCooldown = 40;
return;
}
stoppingCooldown = 0;
generatedSpeed = speed;
generatedCapacity = capacity;
updateGeneratedRotation();
}
}
@Override
public float getGeneratedSpeed() {
return convertToDirection(generatedSpeed, getBlockState().getValue(FlywheelBlock.HORIZONTAL_FACING));
}
@Override
public float calculateAddedStressCapacity() {
return lastCapacityProvided = generatedCapacity;
}
@Override
protected AABB createRenderBoundingBox() {
return super.createRenderBoundingBox().inflate(2);
@ -26,11 +58,17 @@ public class FlywheelBlockEntity extends KineticBlockEntity {
@Override
public void write(CompoundTag compound, boolean clientPacket) {
compound.putFloat("GeneratedSpeed", generatedSpeed);
compound.putFloat("GeneratedCapacity", generatedCapacity);
compound.putInt("Cooldown", stoppingCooldown);
super.write(compound, clientPacket);
}
@Override
protected void read(CompoundTag compound, boolean clientPacket) {
generatedSpeed = compound.getFloat("GeneratedSpeed");
generatedCapacity = compound.getFloat("GeneratedCapacity");
stoppingCooldown = compound.getInt("Cooldown");
super.read(compound, clientPacket);
if (clientPacket)
visualSpeed.chase(getGeneratedSpeed(), 1 / 64f, Chaser.EXP);
@ -40,13 +78,30 @@ public class FlywheelBlockEntity extends KineticBlockEntity {
public void tick() {
super.tick();
if (!level.isClientSide)
if (level.isClientSide) {
float targetSpeed = isVirtual() ? speed : getGeneratedSpeed();
visualSpeed.updateChaseTarget(targetSpeed);
visualSpeed.tickChaser();
angle += visualSpeed.getValue() * 3 / 10f;
angle %= 360;
return;
}
/*
* After getting moved by pistons the generatedSpeed attribute reads 16 but the
* actual speed stays at 0, if it happens update rotation
*/
if (getGeneratedSpeed() != 0 && getSpeed() == 0)
updateGeneratedRotation();
if (stoppingCooldown == 0)
return;
float targetSpeed = getSpeed();
visualSpeed.updateChaseTarget(targetSpeed);
visualSpeed.tickChaser();
angle += visualSpeed.getValue() * 3 / 10f;
angle %= 360;
stoppingCooldown--;
if (stoppingCooldown == 0) {
generatedCapacity = 0;
generatedSpeed = 0;
updateGeneratedRotation();
}
}
}

View File

@ -0,0 +1,30 @@
package com.simibubi.create.content.kinetics.flywheel;
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
import com.tterrag.registrate.providers.DataGenContext;
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.model.generators.ModelFile;
public class FlywheelGenerator extends SpecialBlockStateGen {
@Override
protected int getXRotation(BlockState state) {
return 0;
}
@Override
protected int getYRotation(BlockState state) {
return horizontalAngle(state.getValue(FlywheelBlock.HORIZONTAL_FACING)) + 90;
}
@Override
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
BlockState state) {
return prov.models()
.getExistingFile(prov.modLoc("block/" + ctx.getName() + "/casing_" + state.getValue(FlywheelBlock.CONNECTION)
.getSerializedName()));
}
}

View File

@ -1,32 +1,88 @@
package com.simibubi.create.content.kinetics.flywheel;
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.Lists;
import com.jozufozu.flywheel.api.InstanceData;
import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.Material;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance;
import com.simibubi.create.content.kinetics.base.flwdata.RotatingData;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.core.Direction;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.state.BlockState;
public class FlywheelInstance extends KineticBlockEntityInstance<FlywheelBlockEntity> implements DynamicInstance {
protected final Direction facing;
protected final Direction connection;
protected boolean connectedLeft;
protected float connectorAngleMult;
protected final RotatingData shaft;
protected final ModelData wheel;
protected List<ModelData> connectors;
protected ModelData upperRotating;
protected ModelData lowerRotating;
protected ModelData upperSliding;
protected ModelData lowerSliding;
protected float lastAngle = Float.NaN;
public FlywheelInstance(MaterialManager materialManager, FlywheelBlockEntity blockEntity) {
super(materialManager, blockEntity);
public FlywheelInstance(MaterialManager modelManager, FlywheelBlockEntity tile) {
super(modelManager, tile);
shaft = setup(getRotatingMaterial().getModel(shaft())
.createInstance());
wheel = getTransformMaterial().getModel(blockState)
facing = blockState.getValue(HORIZONTAL_FACING);
shaft = setup(shaftModel().createInstance());
BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90);
wheel = getTransformMaterial()
.getModel(AllPartialModels.FLYWHEEL, referenceState, referenceState.getValue(HORIZONTAL_FACING))
.createInstance();
animate(blockEntity.angle);
connection = FlywheelBlock.getConnection(blockState);
if (connection != null) {
connectedLeft = blockState.getValue(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT;
boolean flipAngle = connection.getAxis() == Direction.Axis.X
^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE;
connectorAngleMult = flipAngle ? -1 : 1;
Material<ModelData> mat = getTransformMaterial();
upperRotating = mat.getModel(AllPartialModels.FLYWHEEL_UPPER_ROTATING, blockState)
.createInstance();
lowerRotating = mat.getModel(AllPartialModels.FLYWHEEL_LOWER_ROTATING, blockState)
.createInstance();
upperSliding = mat.getModel(AllPartialModels.FLYWHEEL_UPPER_SLIDING, blockState)
.createInstance();
lowerSliding = mat.getModel(AllPartialModels.FLYWHEEL_LOWER_SLIDING, blockState)
.createInstance();
connectors = Lists.newArrayList(upperRotating, lowerRotating, upperSliding, lowerSliding);
} else {
connectors = Collections.emptyList();
}
animate(tile.angle);
}
@Override
@ -50,8 +106,38 @@ public class FlywheelInstance extends KineticBlockEntityInstance<FlywheelBlockEn
TransformStack msr = TransformStack.cast(ms);
msr.translate(getInstancePosition());
if (connection != null) {
float rotation = angle * connectorAngleMult;
ms.pushPose();
rotateToFacing(msr, connection);
ms.pushPose();
transformConnector(msr, true, true, rotation, connectedLeft);
upperRotating.setTransform(ms);
ms.popPose();
ms.pushPose();
transformConnector(msr, false, true, rotation, connectedLeft);
lowerRotating.setTransform(ms);
ms.popPose();
ms.pushPose();
transformConnector(msr, true, false, rotation, connectedLeft);
upperSliding.setTransform(ms);
ms.popPose();
ms.pushPose();
transformConnector(msr, false, false, rotation, connectedLeft);
lowerSliding.setTransform(ms);
ms.popPose();
ms.popPose();
}
msr.centre()
.rotate(Direction.get(Direction.AxisDirection.POSITIVE, axis), AngleHelper.rad(angle))
.rotate(Direction.get(Direction.AxisDirection.POSITIVE, facing.getAxis()), AngleHelper.rad(angle))
.unCentre();
wheel.setTransform(ms);
@ -65,12 +151,57 @@ public class FlywheelInstance extends KineticBlockEntityInstance<FlywheelBlockEn
@Override
public void updateLight() {
relight(pos, shaft, wheel);
if (connection != null) {
relight(this.pos.relative(connection), connectors.stream());
}
}
@Override
public void remove() {
shaft.delete();
wheel.delete();
connectors.forEach(InstanceData::delete);
connectors.clear();
}
protected Instancer<RotatingData> shaftModel() {
Direction opposite = facing.getOpposite();
return getRotatingMaterial().getModel(AllPartialModels.SHAFT_HALF, blockState, opposite);
}
protected void transformConnector(TransformStack ms, boolean upper, boolean rotating, float angle,
boolean flip) {
float shift = upper ? 1 / 4f : -1 / 8f;
float offset = upper ? 1 / 4f : 1 / 4f;
float radians = (float) (angle / 180 * Math.PI);
float shifting = Mth.sin(radians) * shift + offset;
float maxAngle = upper ? -5 : -15;
float minAngle = upper ? -45 : 5;
float barAngle = 0;
if (rotating)
barAngle = Mth.lerp((Mth.sin((float) (radians + Math.PI / 2)) + 1) / 2, minAngle, maxAngle);
float pivotX = (upper ? 8f : 3f) / 16;
float pivotY = (upper ? 8f : 2f) / 16;
float pivotZ = (upper ? 23f : 21.5f) / 16f;
ms.translate(pivotX, pivotY, pivotZ + shifting);
if (rotating)
ms.rotate(Direction.EAST, AngleHelper.rad(barAngle));
ms.translate(-pivotX, -pivotY, -pivotZ);
if (flip && !upper)
ms.translate(9 / 16f, 0, 0);
}
protected void rotateToFacing(TransformStack buffer, Direction facing) {
buffer.centre()
.rotate(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing)))
.unCentre();
}
}

View File

@ -1,17 +1,29 @@
package com.simibubi.create.content.kinetics.flywheel;
import static com.simibubi.create.content.kinetics.base.HorizontalKineticBlock.HORIZONTAL_FACING;
import com.jozufozu.flywheel.backend.Backend;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock.ConnectionState;
import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class FlywheelRenderer extends KineticBlockEntityRenderer<FlywheelBlockEntity> {
@ -20,32 +32,98 @@ public class FlywheelRenderer extends KineticBlockEntityRenderer<FlywheelBlockEn
}
@Override
protected void renderSafe(FlywheelBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
protected void renderSafe(FlywheelBlockEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
super.renderSafe(be, partialTicks, ms, buffer, light, overlay);
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
if (Backend.canUseInstancing(be.getLevel()))
return;
if (Backend.canUseInstancing(te.getLevel())) return;
BlockState blockState = be.getBlockState();
BlockState blockState = te.getBlockState();
FlywheelBlockEntity wte = (FlywheelBlockEntity) te;
float speed = be.visualSpeed.getValue(partialTicks) * 3 / 10f;
float angle = be.angle + speed * partialTicks;
float speed = wte.visualSpeed.getValue(partialTicks) * 3 / 10f;
float angle = wte.angle + speed * partialTicks;
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
renderFlywheel(be, ms, light, blockState, angle, vb);
if (FlywheelBlock.isConnected(blockState)) {
Direction connection = FlywheelBlock.getConnection(blockState);
light = LevelRenderer.getLightColor(te.getLevel(), blockState, te.getBlockPos()
.relative(connection));
float rotation =
connection.getAxis() == Axis.X ^ connection.getAxisDirection() == AxisDirection.NEGATIVE ? -angle
: angle;
boolean flip = blockState.getValue(FlywheelBlock.CONNECTION) == ConnectionState.LEFT;
transformConnector(
rotateToFacing(CachedBufferer.partial(AllPartialModels.FLYWHEEL_UPPER_ROTATING, blockState), connection), true, true,
rotation, flip).light(light)
.renderInto(ms, vb);
transformConnector(
rotateToFacing(CachedBufferer.partial(AllPartialModels.FLYWHEEL_LOWER_ROTATING, blockState), connection), false, true,
rotation, flip).light(light)
.renderInto(ms, vb);
transformConnector(rotateToFacing(CachedBufferer.partial(AllPartialModels.FLYWHEEL_UPPER_SLIDING, blockState), connection),
true, false, rotation, flip).light(light)
.renderInto(ms, vb);
transformConnector(rotateToFacing(CachedBufferer.partial(AllPartialModels.FLYWHEEL_LOWER_SLIDING, blockState), connection),
false, false, rotation, flip).light(light)
.renderInto(ms, vb);
}
renderFlywheel(te, ms, light, blockState, angle, vb);
}
private void renderFlywheel(FlywheelBlockEntity be, PoseStack ms, int light, BlockState blockState, float angle,
VertexConsumer vb) {
SuperByteBuffer wheel = CachedBufferer.block(blockState);
kineticRotationTransform(wheel, be, getRotationAxisOf(be), AngleHelper.rad(angle), light);
private void renderFlywheel(KineticBlockEntity te, PoseStack ms, int light, BlockState blockState, float angle, VertexConsumer vb) {
BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90);
Direction facing = referenceState.getValue(BlockStateProperties.HORIZONTAL_FACING);
SuperByteBuffer wheel = CachedBufferer.partialFacing(AllPartialModels.FLYWHEEL, referenceState, facing);
kineticRotationTransform(wheel, te, blockState.getValue(HORIZONTAL_FACING)
.getAxis(), AngleHelper.rad(angle), light);
wheel.renderInto(ms, vb);
}
@Override
protected BlockState getRenderedBlockState(FlywheelBlockEntity be) {
return shaft(getRotationAxisOf(be));
protected SuperByteBuffer getRotatedModel(FlywheelBlockEntity te, BlockState state) {
return CachedBufferer.partialFacing(AllPartialModels.SHAFT_HALF, state, state
.getValue(BlockStateProperties.HORIZONTAL_FACING)
.getOpposite());
}
protected SuperByteBuffer transformConnector(SuperByteBuffer buffer, boolean upper, boolean rotating, float angle,
boolean flip) {
float shift = upper ? 1 / 4f : -1 / 8f;
float offset = upper ? 1 / 4f : 1 / 4f;
float radians = (float) (angle / 180 * Math.PI);
float shifting = Mth.sin(radians) * shift + offset;
float maxAngle = upper ? -5 : -15;
float minAngle = upper ? -45 : 5;
float barAngle = 0;
if (rotating)
barAngle = Mth.lerp((Mth.sin((float) (radians + Math.PI / 2)) + 1) / 2, minAngle, maxAngle);
float pivotX = (upper ? 8f : 3f) / 16;
float pivotY = (upper ? 8f : 2f) / 16;
float pivotZ = (upper ? 23f : 21.5f) / 16f;
buffer.translate(pivotX, pivotY, pivotZ + shifting);
if (rotating)
buffer.rotate(Direction.EAST, AngleHelper.rad(barAngle));
buffer.translate(-pivotX, -pivotY, -pivotZ);
if (flip && !upper)
buffer.translate(9 / 16f, 0, 0);
return buffer;
}
protected SuperByteBuffer rotateToFacing(SuperByteBuffer buffer, Direction facing) {
buffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing)));
return buffer;
}
}

View File

@ -0,0 +1,93 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import javax.annotation.Nullable;
import com.jozufozu.flywheel.core.PartialModel;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public abstract class EngineBlock extends HorizontalDirectionalBlock implements IWrenchable {
protected EngineBlock(Properties builder) {
super(builder);
}
@Override
public boolean canSurvive(BlockState state, LevelReader worldIn, BlockPos pos) {
return isValidPosition(state, worldIn, pos, state.getValue(FACING));
}
@Override
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
return InteractionResult.FAIL;
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
Direction facing = context.getClickedFace();
return defaultBlockState().setValue(FACING,
facing.getAxis().isVertical() ? context.getHorizontalDirection().getOpposite() : facing);
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder.add(FACING));
}
@Override
public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) {
if (worldIn.isClientSide)
return;
if (fromPos.equals(getBaseBlockPos(state, pos))) {
if (!canSurvive(state, worldIn, pos)) {
worldIn.destroyBlock(pos, true);
return;
}
}
}
private boolean isValidPosition(BlockState state, BlockGetter world, BlockPos pos, Direction facing) {
BlockPos baseBlockPos = getBaseBlockPos(state, pos);
if (!isValidBaseBlock(world.getBlockState(baseBlockPos), world, pos))
return false;
for (Direction otherFacing : Iterate.horizontalDirections) {
if (otherFacing == facing)
continue;
BlockPos otherPos = baseBlockPos.relative(otherFacing);
BlockState otherState = world.getBlockState(otherPos);
if (otherState.getBlock() instanceof EngineBlock
&& getBaseBlockPos(otherState, otherPos).equals(baseBlockPos))
return false;
}
return true;
}
public static BlockPos getBaseBlockPos(BlockState state, BlockPos pos) {
return pos.relative(state.getValue(FACING).getOpposite());
}
@Nullable
@OnlyIn(Dist.CLIENT)
public abstract PartialModel getFrameModel();
protected abstract boolean isValidBaseBlock(BlockState baseBlock, BlockGetter world, BlockPos pos);
}

View File

@ -0,0 +1,51 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class EngineInstance extends BlockEntityInstance<EngineTileEntity> {
protected ModelData frame;
public EngineInstance(MaterialManager modelManager, EngineTileEntity tile) {
super(modelManager, tile);
Block block = blockState
.getBlock();
if (!(block instanceof EngineBlock engineBlock))
return;
PartialModel frame = engineBlock.getFrameModel();
Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING);
this.frame = getTransformMaterial().getModel(frame, blockState).createInstance();
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
this.frame.loadIdentity()
.translate(getInstancePosition())
.nudge(pos.hashCode())
.centre()
.rotate(Direction.UP, angle)
.unCentre()
.translate(0, 0, -1);
}
@Override
public void remove() {
frame.delete();
}
@Override
public void updateLight() {
relight(pos, frame);
}
}

View File

@ -0,0 +1,45 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.PartialModel;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block;
public class EngineRenderer<T extends EngineTileEntity> extends SafeBlockEntityRenderer<T> {
public EngineRenderer(BlockEntityRendererProvider.Context context) {
}
@Override
protected void renderSafe(T te, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light,
int overlay) {
if (Backend.canUseInstancing(te.getLevel())) return;
Block block = te.getBlockState()
.getBlock();
if (block instanceof EngineBlock) {
EngineBlock engineBlock = (EngineBlock) block;
PartialModel frame = engineBlock.getFrameModel();
if (frame != null) {
Direction facing = te.getBlockState()
.getValue(EngineBlock.FACING);
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
CachedBufferer.partial(frame, te.getBlockState())
.rotateCentered(Direction.UP, angle)
.translate(0, 0, -1)
.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.solid()));
}
}
}
}

View File

@ -0,0 +1,92 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import java.util.List;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
public class EngineTileEntity extends SmartBlockEntity {
public float appliedCapacity;
public float appliedSpeed;
protected FlywheelBlockEntity poweredWheel;
public EngineTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
}
@Override
protected AABB createRenderBoundingBox() {
return super.createRenderBoundingBox().inflate(1.5f);
}
@Override
public void lazyTick() {
super.lazyTick();
if (level.isClientSide)
return;
if (poweredWheel != null && poweredWheel.isRemoved())
poweredWheel = null;
if (poweredWheel == null)
attachWheel();
}
public void attachWheel() {
Direction engineFacing = getBlockState().getValue(EngineBlock.FACING);
BlockPos wheelPos = worldPosition.relative(engineFacing, 2);
BlockState wheelState = level.getBlockState(wheelPos);
if (!AllBlocks.FLYWHEEL.has(wheelState))
return;
Direction wheelFacing = wheelState.getValue(FlywheelBlock.HORIZONTAL_FACING);
if (wheelFacing.getAxis() != engineFacing.getClockWise().getAxis())
return;
if (FlywheelBlock.isConnected(wheelState)
&& FlywheelBlock.getConnection(wheelState) != engineFacing.getOpposite())
return;
BlockEntity te = level.getBlockEntity(wheelPos);
if (te.isRemoved())
return;
if (te instanceof FlywheelBlockEntity) {
if (!FlywheelBlock.isConnected(wheelState))
FlywheelBlock.setConnection(level, te.getBlockPos(), te.getBlockState(), engineFacing.getOpposite());
poweredWheel = (FlywheelBlockEntity) te;
refreshWheelSpeed();
}
}
public void detachWheel() {
if (poweredWheel == null || poweredWheel.isRemoved())
return;
poweredWheel.setRotation(0, 0);
FlywheelBlock.setConnection(level, poweredWheel.getBlockPos(), poweredWheel.getBlockState(), null);
poweredWheel = null;
}
@Override
public void remove() {
detachWheel();
super.remove();
}
protected void refreshWheelSpeed() {
if (poweredWheel == null)
return;
poweredWheel.setRotation(appliedSpeed, appliedCapacity);
}
}

View File

@ -0,0 +1,91 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import com.jozufozu.flywheel.core.PartialModel;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.AllShapes;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
import net.minecraft.core.BlockPos;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.AbstractFurnaceBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock;
import net.minecraftforge.eventbus.api.Event.Result;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber
public class FurnaceEngineBlock extends EngineBlock implements IBE<FurnaceEngineTileEntity> {
public FurnaceEngineBlock(Properties properties) {
super(properties);
}
@Override
protected boolean isValidBaseBlock(BlockState baseBlock, BlockGetter world, BlockPos pos) {
return FurnaceEngineInteractions.getHandler(baseBlock).getHeatSource(baseBlock).isValid();
}
@Override
public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) {
return AllShapes.FURNACE_ENGINE.get(state.getValue(FACING));
}
@Override
@OnlyIn(Dist.CLIENT)
public PartialModel getFrameModel() {
return AllPartialModels.FURNACE_GENERATOR_FRAME;
}
@Override
public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) {
super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving);
if (worldIn instanceof WrappedWorld)
return;
if (worldIn.isClientSide)
return;
if (fromPos.equals(getBaseBlockPos(state, pos)))
if (canSurvive(state, worldIn, pos))
withBlockEntityDo(worldIn, pos, FurnaceEngineTileEntity::updateFurnace);
}
@SubscribeEvent
public static void usingFurnaceEngineOnFurnacePreventsGUI(RightClickBlock event) {
ItemStack item = event.getItemStack();
if (!(item.getItem() instanceof BlockItem blockItem))
return;
if (blockItem.getBlock() != AllBlocks.FURNACE_ENGINE.get())
return;
BlockState state = event.getWorld().getBlockState(event.getPos());
if (event.getFace().getAxis().isVertical())
return;
if (state.getBlock() instanceof AbstractFurnaceBlock)
event.setUseBlock(Result.DENY);
}
@Override
public Class<FurnaceEngineTileEntity> getBlockEntityClass() {
return FurnaceEngineTileEntity.class;
}
@Override
public BlockEntityType<? extends FurnaceEngineTileEntity> getBlockEntityType() {
return AllBlockEntityTypes.FURNACE_ENGINE.get();
}
}

View File

@ -0,0 +1,111 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import net.minecraft.world.level.block.AbstractFurnaceBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.IRegistryDelegate;
/**
* Example:
*
* <pre>
* {@code
* FurnaceEngineInteractions.registerHandler(Blocks.REDSTONE_LAMP.delegate, FurnaceEngineInteractions.InteractionHandler.of(
* s -> s.getBlock() instanceof RedstoneLampBlock && s.hasProperty(RedstoneLampBlock.LIT) ?
* (s.getValue(RedstoneLampBlock.LIT) ? HeatSource.ACTIVE : HeatSource.VALID) : HeatSource.EMPTY, s -> 1.5f));
* }
* </pre>
*/
public class FurnaceEngineInteractions {
private static final Map<IRegistryDelegate<Block>, InteractionHandler> HANDLERS = new HashMap<>();
private static final InteractionHandler DEFAULT_HANDLER = new InteractionHandler() {};
public static void registerHandler(IRegistryDelegate<Block> block, InteractionHandler handler) {
HANDLERS.put(block, handler);
}
public static InteractionHandler getHandler(IRegistryDelegate<Block> delegate) {
return HANDLERS.getOrDefault(delegate, DEFAULT_HANDLER);
}
public static InteractionHandler getHandler(BlockState state) {
return getHandler(state.getBlock().delegate);
}
public static void registerDefaults() {
registerHandler(Blocks.BLAST_FURNACE.delegate, InteractionHandler.ofCustomSpeedModifier(state -> 2f));
}
public interface InteractionHandler {
default HeatSource getHeatSource(BlockState state) {
if (state.getBlock() instanceof AbstractFurnaceBlock && state.hasProperty(AbstractFurnaceBlock.LIT)) {
if (state.getValue(AbstractFurnaceBlock.LIT)) {
return HeatSource.ACTIVE;
} else {
return HeatSource.VALID;
}
}
return HeatSource.EMPTY;
}
default float getSpeedModifier(BlockState state) {
return 1f;
};
static InteractionHandler of(Function<BlockState, HeatSource> heatSourceFunc, Function<BlockState, Float> speedModifierFunc) {
return new InteractionHandler() {
@Override
public HeatSource getHeatSource(BlockState state) {
return heatSourceFunc.apply(state);
}
@Override
public float getSpeedModifier(BlockState state) {
return speedModifierFunc.apply(state);
}
};
}
static InteractionHandler ofCustomHeatSource(Function<BlockState, HeatSource> heatSourceFunc) {
return new InteractionHandler() {
@Override
public HeatSource getHeatSource(BlockState state) {
return heatSourceFunc.apply(state);
}
};
}
static InteractionHandler ofCustomSpeedModifier(Function<BlockState, Float> speedModifierFunc) {
return new InteractionHandler() {
@Override
public float getSpeedModifier(BlockState state) {
return speedModifierFunc.apply(state);
}
};
}
}
public enum HeatSource {
EMPTY,
VALID,
ACTIVE;
public boolean isEmpty() {
return this == EMPTY;
}
public boolean isValid() {
return this != EMPTY;
}
public boolean isActive() {
return this == ACTIVE;
}
}
}

View File

@ -0,0 +1,43 @@
package com.simibubi.create.content.kinetics.flywheel.engine;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.kinetics.BlockStressValues;
import com.simibubi.create.content.kinetics.flywheel.engine.FurnaceEngineInteractions.HeatSource;
import com.simibubi.create.content.kinetics.flywheel.engine.FurnaceEngineInteractions.InteractionHandler;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
public class FurnaceEngineTileEntity extends EngineTileEntity {
public FurnaceEngineTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}
@Override
public void lazyTick() {
updateFurnace();
super.lazyTick();
}
public void updateFurnace() {
BlockState state = level.getBlockState(EngineBlock.getBaseBlockPos(getBlockState(), worldPosition));
InteractionHandler handler = FurnaceEngineInteractions.getHandler(state);
HeatSource heatSource = handler.getHeatSource(state);
if (heatSource.isEmpty())
return;
float modifier = handler.getSpeedModifier(state);
boolean active = heatSource.isActive();
float speed = active ? 16 * modifier : 0;
float capacity =
(float) (active ? BlockStressValues.getCapacity(AllBlocks.FURNACE_ENGINE.get())
: 0);
appliedCapacity = capacity;
appliedSpeed = speed;
refreshWheelSpeed();
}
}

View File

@ -13,6 +13,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.Tags;
public class MechanicalCraftingRecipeGen extends CreateRecipeProvider {
@ -60,7 +61,23 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider {
.key('S', AllBlocks.FLUID_PIPE.get())
.key('C', Ingredient.of(I.copper()))
.patternLine("LRSSS")
.patternLine("CC "))
.patternLine("CC ")),
FURNACE_ENGINE = create(AllBlocks.FURNACE_ENGINE::get).returns(1)
.recipe(b -> b.key('P', Ingredient.of(I.brassSheet()))
.key('B', Ingredient.of(I.brass()))
.key('I', Ingredient.of(Blocks.PISTON, Blocks.STICKY_PISTON))
.key('C', I.brassCasing())
.patternLine("PPB")
.patternLine("PCI")
.patternLine("PPB")),
FLYWHEEL = create(AllBlocks.FLYWHEEL::get).returns(1)
.recipe(b -> b.key('B', Ingredient.of(I.brass()))
.key('C', I.brassCasing())
.patternLine(" BBB")
.patternLine("CB B")
.patternLine(" BBB"))
;

View File

@ -1,6 +0,0 @@
{
"parent": "create:block/flywheel/flywheel",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/flywheel/flywheel_shaftless.obj"
}

View File

@ -0,0 +1,95 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"5": "create:block/brass_casing",
"7": "create:block/brass_gearbox",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [1, 0, 0],
"to": [12, 16, 16],
"faces": {
"north": {"uv": [0, 10, 8, 15.5], "rotation": 270, "texture": "#0"},
"east": {"uv": [0, 0, 16, 16], "texture": "#7"},
"south": {"uv": [8, 15.5, 16, 10], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 0, 16, 16], "texture": "#7"},
"up": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"},
"down": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}
}
},
{
"from": [0, 0, 0],
"to": [1, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]},
"faces": {
"north": {"uv": [15, 14, 16, 16], "texture": "#5"},
"east": {"uv": [0, 0, 16, 2], "texture": "#5"},
"south": {"uv": [0, 14, 1, 16], "texture": "#5"},
"west": {"uv": [0, 14, 16, 16], "texture": "#5"},
"up": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"},
"down": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"}
}
},
{
"from": [0, 14, 0],
"to": [1, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"},
"east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"},
"south": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"},
"up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"},
"down": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"}
}
},
{
"from": [0, 2, 0],
"to": [1, 14, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"},
"east": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"},
"south": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"},
"west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"},
"up": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"down": {"uv": [0, 14, 1, 16], "texture": "#5"}
}
},
{
"from": [0, 2, 14],
"to": [1, 14, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"},
"east": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"},
"south": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"},
"west": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 1, 16], "texture": "#5"},
"down": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}
}
},
{
"from": [10.9, 3, 3],
"to": [19.9, 13, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"},
"east": {"uv": [11, 5, 16, 10], "texture": "#0"},
"south": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"west": {"uv": [11, 5, 16, 10], "texture": "#0"},
"up": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"down": {"uv": [11.5, 0, 16, 5], "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0, 1, 2, 3, 4, 5]
}
]
}

View File

@ -0,0 +1,95 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"5": "create:block/brass_casing",
"7": "create:block/brass_gearbox",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [1, 0, 0],
"to": [12, 16, 16],
"faces": {
"north": {"uv": [8, 10.5, 16, 16], "rotation": 90, "texture": "#0"},
"east": {"uv": [0, 0, 16, 16], "texture": "#7"},
"south": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 0, 16, 16], "texture": "#7"},
"up": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"},
"down": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}
}
},
{
"from": [0, 0, 0],
"to": [1, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]},
"faces": {
"north": {"uv": [15, 14, 16, 16], "texture": "#5"},
"east": {"uv": [0, 0, 16, 2], "texture": "#5"},
"south": {"uv": [0, 14, 1, 16], "texture": "#5"},
"west": {"uv": [0, 14, 16, 16], "texture": "#5"},
"up": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"},
"down": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"}
}
},
{
"from": [0, 14, 0],
"to": [1, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"},
"east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"},
"south": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"},
"up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"},
"down": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"}
}
},
{
"from": [0, 2, 0],
"to": [1, 14, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"},
"east": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"},
"south": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"},
"west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"},
"up": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"down": {"uv": [0, 14, 1, 16], "texture": "#5"}
}
},
{
"from": [0, 2, 14],
"to": [1, 14, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"},
"east": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"},
"south": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"},
"west": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 1, 16], "texture": "#5"},
"down": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}
}
},
{
"from": [10.9, 3, 3],
"to": [19.9, 13, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"},
"east": {"uv": [11, 5, 16, 10], "texture": "#0"},
"south": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"west": {"uv": [11, 5, 16, 10], "texture": "#0"},
"up": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"down": {"uv": [11.5, 0, 16, 5], "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0, 1, 2, 3, 4, 5]
}
]
}

View File

@ -0,0 +1,95 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"5": "create:block/brass_casing",
"7": "create:block/brass_gearbox",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [1, 0, 0],
"to": [12, 16, 16],
"faces": {
"north": {"uv": [8, 10.5, 16, 16], "rotation": 90, "texture": "#0"},
"east": {"uv": [0, 0, 16, 16], "texture": "#7"},
"south": {"uv": [0, 15.5, 8, 10], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 0, 16, 16], "texture": "#7"},
"up": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"},
"down": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}
}
},
{
"from": [0, 0, 0],
"to": [1, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]},
"faces": {
"north": {"uv": [15, 14, 16, 16], "texture": "#5"},
"east": {"uv": [0, 0, 16, 2], "texture": "#5"},
"south": {"uv": [0, 14, 1, 16], "texture": "#5"},
"west": {"uv": [0, 14, 16, 16], "texture": "#5"},
"up": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"},
"down": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"}
}
},
{
"from": [0, 14, 0],
"to": [1, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"},
"east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"},
"south": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"},
"up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"},
"down": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"}
}
},
{
"from": [0, 2, 0],
"to": [1, 14, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"},
"east": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"},
"south": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"},
"west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"},
"up": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"down": {"uv": [0, 14, 1, 16], "texture": "#5"}
}
},
{
"from": [0, 2, 14],
"to": [1, 14, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]},
"faces": {
"north": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"},
"east": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"},
"south": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"},
"west": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 1, 16], "texture": "#5"},
"down": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}
}
},
{
"from": [10.9, 3, 3],
"to": [19.9, 13, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"},
"east": {"uv": [11, 5, 16, 10], "texture": "#0"},
"south": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"west": {"uv": [11, 5, 16, 10], "texture": "#0"},
"up": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"down": {"uv": [11.5, 0, 16, 5], "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0, 1, 2, 3, 4, 5]
}
]
}

File diff suppressed because one or more lines are too long

View File

@ -1,10 +0,0 @@
{
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"0": "create:block/flywheel",
"1": "create:block/axis",
"2": "create:block/axis_top",
"particle": "create:block/flywheel"
}
}

View File

@ -1,11 +0,0 @@
# Blender MTL File: 'engine.blend'
# Material Count: 3
newmtl m_0
map_Kd #0
newmtl m_1
map_Kd #1
newmtl m_2
map_Kd #2

View File

@ -1,993 +0,0 @@
# Blender v3.1.2 OBJ File: 'engine.blend'
# www.blender.org
mtllib flywheel.mtl
o cube.007_cube.004
v 0.625000 0.375000 1.562500
v 0.625000 0.375000 0.937500
v 0.625000 0.625000 1.562500
v 0.625000 0.625000 0.937500
v 0.375000 0.625000 1.562500
v 0.375000 0.625000 0.937500
v 0.375000 0.375000 1.562500
v 0.375000 0.375000 0.937500
v 0.318782 0.375000 0.937500
v 1.339689 0.375000 1.162913
v 0.897748 0.375000 0.720971
v 1.339689 0.625000 1.162913
v 0.897748 0.625000 0.720971
v 1.162913 0.625000 1.339689
v 0.720971 0.625000 0.897748
v 1.162913 0.375000 1.339689
v 0.720971 0.375000 0.897748
v 0.937500 0.625000 0.681218
v 0.681218 0.625000 0.937500
v 0.681218 0.375000 0.937500
v 0.937500 0.375000 0.681218
v 1.562500 0.375000 0.375000
v 1.562500 0.625000 0.375000
v 0.937500 0.625000 0.375000
v 1.562500 0.625000 0.625000
v 1.562500 0.375000 0.625000
v 0.937500 0.375000 0.625000
v 0.937500 0.625000 0.318781
v 1.162912 0.375000 -0.339689
v 0.720971 0.375000 0.102252
v 1.162912 0.625000 -0.339689
v 0.720971 0.625000 0.102252
v 1.339689 0.625000 -0.162912
v 0.897747 0.625000 0.279029
v 1.339689 0.375000 -0.162912
v 0.897747 0.375000 0.279029
v 0.681218 0.625000 0.062500
v 0.937500 0.375000 0.318782
v 0.681218 0.375000 0.062500
v 0.500000 0.625000 0.500000
v 0.500000 0.375000 0.500000
v 0.375000 0.375000 -0.562500
v 0.375000 0.375000 0.062500
v 0.375000 0.625000 -0.562500
v 0.375000 0.625000 0.062500
v 0.625000 0.625000 -0.562500
v 0.625000 0.625000 0.062500
v 0.625000 0.375000 -0.562500
v 0.625000 0.375000 0.062500
v -0.339689 0.375000 -0.162912
v 0.102252 0.375000 0.279029
v -0.339689 0.625000 -0.162912
v 0.102252 0.625000 0.279029
v -0.162912 0.625000 -0.339689
v 0.279029 0.625000 0.102253
v -0.162912 0.375000 -0.339689
v 0.279029 0.375000 0.102253
v 0.318782 0.625000 0.062500
v 0.318782 0.375000 0.062500
v 0.062500 0.375000 0.318782
v -0.562500 0.375000 0.625000
v -0.562500 0.625000 0.625000
v -0.562500 0.625000 0.375000
v -0.562500 0.375000 0.375000
v 0.062500 0.625000 0.318782
v -0.162912 0.375000 1.339689
v 0.279029 0.375000 0.897747
v -0.162912 0.625000 1.339689
v 0.279029 0.625000 0.897747
v -0.339689 0.625000 1.162912
v 0.102253 0.625000 0.720971
v -0.339689 0.375000 1.162912
v 0.102253 0.375000 0.720971
v 0.318782 0.625000 0.937500
v 0.062500 0.625000 0.681218
v 0.062500 0.375000 0.681218
v 0.750000 0.375000 0.750000
v 0.750000 0.375000 0.250000
v 0.250000 0.375000 0.750000
v 0.250000 0.375000 0.250000
v 0.750000 0.187500 0.750000
v 0.750000 0.187500 0.250000
v 0.250000 0.187500 0.750000
v 0.250000 0.187500 0.250000
v 0.750000 0.625000 0.750000
v 0.750000 0.625000 0.250000
v 0.250000 0.625000 0.750000
v 0.250000 0.625000 0.250000
v 0.750000 0.812500 0.750000
v 0.750000 0.812500 0.250000
v 0.250000 0.812500 0.750000
v 0.250000 0.812500 0.250000
v 1.068750 0.687500 1.873085
v 1.068750 0.312500 1.873085
v 0.940102 0.312500 1.562500
v 0.940102 0.687500 1.562500
v 1.873085 0.687500 1.068751
v 1.873084 0.312500 1.068751
v 1.562500 0.312500 0.940102
v 1.562500 0.687500 0.940102
v 1.873085 0.687500 -0.068750
v 1.873085 0.312500 -0.068750
v 1.562500 0.312500 0.059898
v 1.562500 0.687500 0.059898
v 1.068750 0.687500 -0.873084
v 1.068750 0.312500 -0.873084
v 0.940102 0.312500 -0.562500
v 0.940102 0.687500 -0.562500
v -0.068750 0.687500 -0.873084
v -0.068750 0.312500 -0.873084
v 0.059898 0.312500 -0.562500
v 0.059898 0.687500 -0.562500
v -0.873084 0.687500 -0.068750
v -0.873084 0.312500 -0.068750
v -0.562500 0.312500 0.059898
v -0.562499 0.687500 0.059898
v -0.873084 0.687500 1.068750
v -0.873084 0.312500 1.068750
v -0.562500 0.312500 0.940102
v -0.562500 0.687500 0.940102
v -0.068750 0.687500 1.873084
v -0.068750 0.312500 1.873084
v 0.059898 0.312500 1.562499
v 0.059898 0.687500 1.562499
v 0.250000 0.375000 0.625000
v 0.062500 0.375000 0.625000
v 0.250000 0.187500 0.625000
v 0.062500 0.187500 0.625000
v 0.062500 0.375000 0.500000
v 0.250000 0.375000 0.500000
v 0.062500 0.187500 0.500000
v 0.250000 0.187500 0.500000
v 0.093750 0.218750 0.625000
v 0.093750 0.218750 0.687500
v 0.093750 0.343750 0.625000
v 0.093750 0.343750 0.687500
v 0.218750 0.218750 0.625000
v 0.218750 0.218750 0.687500
v 0.218750 0.343750 0.625000
v 0.218750 0.343750 0.687500
v 0.750000 0.375000 0.625000
v 0.750000 0.187500 0.625000
v 0.937500 0.187500 0.625000
v 0.937500 0.375000 0.500000
v 0.750000 0.375000 0.500000
v 0.937500 0.187500 0.500000
v 0.750000 0.187500 0.500000
v 0.906250 0.218750 0.625000
v 0.906250 0.218750 0.687500
v 0.906250 0.343750 0.625000
v 0.906250 0.343750 0.687500
v 0.781250 0.218750 0.625000
v 0.781250 0.218750 0.687500
v 0.781250 0.343750 0.625000
v 0.781250 0.343750 0.687500
v 0.250000 0.625000 0.625000
v 0.062500 0.625000 0.625000
v 0.250000 0.812500 0.625000
v 0.062500 0.812500 0.625000
v 0.062500 0.625000 0.500000
v 0.250000 0.625000 0.500000
v 0.062500 0.812500 0.500000
v 0.250000 0.812500 0.500000
v 0.093750 0.781250 0.625000
v 0.093750 0.781250 0.687500
v 0.093750 0.656250 0.625000
v 0.093750 0.656250 0.687500
v 0.218750 0.781250 0.625000
v 0.218750 0.781250 0.687500
v 0.218750 0.656250 0.625000
v 0.218750 0.656250 0.687500
v 0.750000 0.625000 0.625000
v 0.937500 0.625000 0.625000
v 0.750000 0.812500 0.625000
v 0.937500 0.812500 0.625000
v 0.937500 0.625000 0.500000
v 0.750000 0.625000 0.500000
v 0.937500 0.812500 0.500000
v 0.750000 0.812500 0.500000
v 0.906250 0.781250 0.625000
v 0.906250 0.781250 0.687500
v 0.906250 0.656250 0.625000
v 0.906250 0.656250 0.687500
v 0.781250 0.781250 0.625000
v 0.781250 0.781250 0.687500
v 0.781250 0.656250 0.625000
v 0.781250 0.656250 0.687500
v 0.250000 0.375000 0.375000
v 0.062500 0.375000 0.375000
v 0.250000 0.187500 0.375000
v 0.062500 0.187500 0.375000
v 0.093750 0.218750 0.375000
v 0.093750 0.218750 0.312500
v 0.093750 0.343750 0.375000
v 0.093750 0.343750 0.312500
v 0.218750 0.218750 0.375000
v 0.218750 0.218750 0.312500
v 0.218750 0.343750 0.375000
v 0.218750 0.343750 0.312500
v 0.750000 0.375000 0.375000
v 0.937500 0.375000 0.375000
v 0.750000 0.187500 0.375000
v 0.937500 0.187500 0.375000
v 0.906250 0.218750 0.375000
v 0.906250 0.218750 0.312500
v 0.906250 0.343750 0.375000
v 0.906250 0.343750 0.312500
v 0.781250 0.218750 0.375000
v 0.781250 0.218750 0.312500
v 0.781250 0.343750 0.375000
v 0.781250 0.343750 0.312500
v 0.250000 0.625000 0.375000
v 0.062500 0.625000 0.375000
v 0.250000 0.812500 0.375000
v 0.062500 0.812500 0.375000
v 0.093750 0.781250 0.375000
v 0.093750 0.781250 0.312500
v 0.093750 0.656250 0.375000
v 0.093750 0.656250 0.312500
v 0.218750 0.781250 0.375000
v 0.218750 0.781250 0.312500
v 0.218750 0.656250 0.375000
v 0.218750 0.656250 0.312500
v 0.750000 0.625000 0.375000
v 0.750000 0.812500 0.375000
v 0.937500 0.812500 0.375000
v 0.906250 0.781250 0.375000
v 0.906250 0.781250 0.312500
v 0.906250 0.656250 0.375000
v 0.906250 0.656250 0.312500
v 0.781250 0.781250 0.375000
v 0.781250 0.781250 0.312500
v 0.781250 0.656250 0.375000
v 0.781250 0.656250 0.312500
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 0.906250 0.781250
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.906250 0.781250
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.562500 0.500000
vt 0.687500 0.500000
vt 0.687500 0.687500
vt 0.812500 1.000000
vt 1.000000 1.000000
vt 1.000000 1.000000
vt 0.812500 1.000000
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.812500
vt 0.750000 0.812500
vt 0.750000 0.750000
vt 0.812500 0.750000
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.812500
vt 0.812500 0.750000
vt 0.750000 0.750000
vt 0.750000 0.812500
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.812500
vt 0.812500 0.750000
vt 0.750000 0.750000
vt 0.750000 0.812500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.812500
vt 0.750000 0.812500
vt 0.750000 0.750000
vt 0.812500 0.750000
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.812500
vt 0.812500 0.750000
vt 0.750000 0.750000
vt 0.750000 0.812500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.812500
vt 0.750000 0.812500
vt 0.750000 0.750000
vt 0.812500 0.750000
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.937500
vt 0.812500 0.968750
vt 0.750000 0.968750
vt 0.750000 0.937500
vt 0.812500 0.812500
vt 0.750000 0.812500
vt 0.750000 0.750000
vt 0.812500 0.750000
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.937500
vt 0.750000 0.937500
vt 0.750000 0.968750
vt 0.812500 0.968750
vt 0.812500 0.812500
vt 0.812500 0.750000
vt 0.750000 0.750000
vt 0.750000 0.812500
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.562500 0.687500
vt 0.687500 0.687500
vt 0.687500 1.000000
vt 0.562500 1.000000
vt 0.812500 0.687500
vt 0.812500 1.000000
vt 0.875000 0.531250
vt 0.937500 0.531250
vt 0.937500 0.593750
vt 0.875000 0.593750
vt 0.218750 0.468750
vt 0.218750 0.375000
vt 0.468750 0.375000
vt 0.468750 0.468750
vt 0.218750 0.468750
vt 0.218750 0.375000
vt 0.468750 0.375000
vt 0.468750 0.468750
vt 0.218750 0.375000
vt 0.468750 0.375000
vt 0.468750 0.468750
vt 0.218750 0.468750
vt 0.468750 0.125000
vt 0.218750 0.125000
vt 0.218750 0.468750
vt 0.218750 0.375000
vt 0.468750 0.375000
vt 0.468750 0.468750
vt 0.875000 0.531250
vt 0.875000 0.593750
vt 0.937500 0.593750
vt 0.937500 0.531250
vt 0.218750 0.468750
vt 0.468750 0.468750
vt 0.468750 0.375000
vt 0.218750 0.375000
vt 0.218750 0.468750
vt 0.468750 0.468750
vt 0.468750 0.375000
vt 0.218750 0.375000
vt 0.218750 0.375000
vt 0.218750 0.468750
vt 0.468750 0.468750
vt 0.468750 0.375000
vt 0.468750 0.125000
vt 0.218750 0.125000
vt 0.218750 0.468750
vt 0.468750 0.468750
vt 0.468750 0.375000
vt 0.218750 0.375000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.062500 0.468750
vt 0.500000 0.468750
vt 0.000000 0.812500
vt 0.562500 0.812500
vt 0.500000 0.656250
vt 0.062500 0.656250
vt 0.562500 0.812500
vt 0.000000 0.812500
vt 0.562500 1.000000
vt 0.000000 1.000000
vt 0.125000 0.250000
vt 0.125000 0.312500
vt 0.031250 0.312500
vt 0.031250 0.250000
vt 0.218750 0.250000
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.218750 0.312500
vt 0.218750 0.406250
vt 0.125000 0.406250
vt 0.125000 0.250000
vt 0.031250 0.250000
vt 0.031250 0.312500
vt 0.125000 0.312500
vt 0.218750 0.250000
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.125000 0.406250
vt 0.218750 0.406250
vt 0.218750 0.312500
vt 0.125000 0.250000
vt 0.031250 0.250000
vt 0.031250 0.312500
vt 0.125000 0.312500
vt 0.218750 0.250000
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.125000 0.406250
vt 0.218750 0.406250
vt 0.218750 0.312500
vt 0.125000 0.250000
vt 0.125000 0.312500
vt 0.031250 0.312500
vt 0.031250 0.250000
vt 0.218750 0.250000
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.218750 0.312500
vt 0.218750 0.406250
vt 0.125000 0.406250
vt 0.031250 0.312500
vt 0.125000 0.312500
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.125000 0.406250
vt 0.218750 0.406250
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.031250 0.312500
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.218750 0.312500
vt 0.218750 0.406250
vt 0.125000 0.406250
vt 0.125000 0.312500
vt 0.031250 0.312500
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.218750 0.312500
vt 0.218750 0.406250
vt 0.125000 0.406250
vt 0.031250 0.312500
vt 0.125000 0.312500
vt 0.218750 0.312500
vt 0.125000 0.312500
vt 0.125000 0.406250
vt 0.218750 0.406250
vt 0.218750 0.312500
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.7071 0.0000 0.7071
vn 1.0000 0.0000 -0.0000
vn 0.7071 0.0000 -0.7071
vn -0.0000 0.0000 -1.0000
vn -0.7071 0.0000 -0.7071
vn -1.0000 0.0000 0.0000
vn -0.7071 0.0000 0.7071
vn -0.6060 -0.2741 -0.7468
vn 0.0995 -0.2741 -0.9565
vn 0.3827 -0.0000 -0.9239
vn -0.3827 -0.0000 -0.9239
vn -0.3822 0.8881 -0.2554
vn -0.0897 0.8881 -0.4509
vn -0.2554 -0.8881 0.3822
vn -0.4509 -0.8881 0.0896
vn -0.0207 0.3739 0.9272
vn -0.6703 0.3739 0.6410
vn -0.3827 -0.0000 0.9239
vn 0.3827 -0.0000 0.9239
vn -0.9565 -0.2741 -0.0995
vn -0.9239 -0.0000 -0.3827
vn -0.4509 0.8881 0.0897
vn 0.0896 -0.8881 0.4509
vn 0.6410 0.3739 0.6703
vn 0.9239 -0.0000 0.3827
vn -0.7468 -0.2741 0.6060
vn -0.9239 0.0000 0.3827
vn -0.2554 0.8881 0.3822
vn 0.3822 -0.8881 0.2554
vn 0.9272 0.3739 0.0207
vn 0.9239 0.0000 -0.3827
vn -0.0995 -0.2741 0.9565
vn 0.0897 0.8881 0.4509
vn 0.4509 -0.8881 -0.0896
vn 0.6703 0.3739 -0.6410
vn 0.6060 -0.2741 0.7468
vn 0.3822 0.8881 0.2554
vn 0.2554 -0.8881 -0.3822
vn 0.0207 0.3739 -0.9272
vn 0.9565 -0.2741 0.0995
vn 0.4509 0.8881 -0.0897
vn -0.0896 -0.8881 -0.4509
vn -0.6410 0.3739 -0.6703
vn 0.7468 -0.2741 -0.6060
vn 0.2554 0.8881 -0.3822
vn -0.3822 -0.8881 -0.2554
vn -0.9272 0.3739 -0.0207
usemtl m_0
s off
f 19/1/1 74/2/1 9/3/1 20/4/1
f 9/5/2 41/6/2 20/7/2
f 19/8/3 40/9/3 74/10/3
f 18/11/4 19/12/4 20/13/4 21/14/4
f 20/15/2 41/6/2 21/16/2
f 18/17/3 40/9/3 19/18/3
f 28/19/5 18/20/5 21/21/5 38/22/5
f 21/23/2 41/6/2 38/24/2
f 28/25/3 40/9/3 18/26/3
f 37/27/6 28/28/6 38/29/6 39/30/6
f 38/31/2 41/6/2 39/32/2
f 37/33/3 40/9/3 28/34/3
f 58/35/7 37/36/7 39/37/7 59/38/7
f 39/39/2 41/6/2 59/40/2
f 58/41/3 40/9/3 37/42/3
f 65/43/8 58/44/8 59/45/8 60/46/8
f 59/47/2 41/6/2 60/48/2
f 65/49/3 40/9/3 58/50/3
f 75/51/9 65/52/9 60/53/9 76/54/9
f 60/55/2 41/6/2 76/56/2
f 75/57/3 40/9/3 65/58/3
f 74/59/10 75/60/10 76/61/10 9/62/10
f 76/63/2 41/6/2 9/64/2
f 74/65/3 40/9/3 75/66/3
f 133/67/9 134/68/9 136/69/9 135/70/9
f 135/71/3 136/72/3 140/73/3 139/74/3
f 139/75/5 140/76/5 138/77/5 137/78/5
f 137/79/2 138/80/2 134/81/2 133/82/2
f 140/83/1 136/84/1 134/85/1 138/86/1
f 148/87/5 150/88/5 151/89/5 149/90/5
f 150/91/3 154/92/3 155/93/3 151/94/3
f 154/95/9 152/96/9 153/97/9 155/98/9
f 152/99/2 148/100/2 149/101/2 153/102/2
f 155/103/1 153/104/1 149/105/1 151/106/1
f 164/107/9 166/108/9 167/109/9 165/110/9
f 166/111/2 170/112/2 171/113/2 167/114/2
f 170/115/5 168/116/5 169/117/5 171/118/5
f 168/119/3 164/120/3 165/121/3 169/122/3
f 171/123/1 169/124/1 165/125/1 167/126/1
f 180/127/5 181/128/5 183/129/5 182/130/5
f 182/131/2 183/132/2 187/133/2 186/134/2
f 186/135/9 187/136/9 185/137/9 184/138/9
f 184/139/3 185/140/3 181/141/3 180/142/3
f 187/143/1 183/144/1 181/145/1 185/146/1
f 192/147/9 194/148/9 195/149/9 193/150/9
f 194/151/3 198/152/3 199/153/3 195/154/3
f 198/155/5 196/156/5 197/157/5 199/158/5
f 196/159/2 192/160/2 193/161/2 197/162/2
f 199/163/7 197/164/7 193/165/7 195/166/7
f 204/167/5 205/168/5 207/169/5 206/170/5
f 206/171/3 207/172/3 211/173/3 210/174/3
f 210/175/9 211/176/9 209/177/9 208/178/9
f 208/179/2 209/180/2 205/181/2 204/182/2
f 211/183/7 207/184/7 205/185/7 209/186/7
f 216/187/9 217/188/9 219/189/9 218/190/9
f 218/191/2 219/192/2 223/193/2 222/194/2
f 222/195/5 223/196/5 221/197/5 220/198/5
f 220/199/3 221/200/3 217/201/3 216/202/3
f 223/203/7 219/204/7 217/205/7 221/206/7
f 227/207/5 229/208/5 230/209/5 228/210/5
f 229/211/2 233/212/2 234/213/2 230/214/2
f 233/215/9 231/216/9 232/217/9 234/218/9
f 231/219/3 227/220/3 228/221/3 232/222/3
f 234/223/7 232/224/7 228/225/7 230/226/7
s 1
f 8/227/2 2/228/2 1/229/2 7/230/2
f 2/228/5 4/231/5 3/232/5 1/229/5
f 4/233/3 6/234/3 5/235/3 3/236/3
f 6/234/9 8/237/9 7/238/9 5/235/9
f 17/239/2 11/240/2 10/241/2 16/242/2
f 11/240/6 13/243/6 12/244/6 10/241/6
f 13/245/3 15/246/3 14/247/3 12/248/3
f 15/246/10 17/249/10 16/250/10 14/247/10
f 27/251/2 201/252/2 22/253/2 26/254/2
f 201/252/7 24/255/7 23/256/7 22/253/7
f 24/257/3 173/258/3 25/259/3 23/260/3
f 173/258/1 27/261/1 26/262/1 25/259/1
f 36/263/2 30/264/2 29/265/2 35/266/2
f 30/264/8 32/267/8 31/268/8 29/265/8
f 32/269/3 34/270/3 33/271/3 31/272/3
f 34/270/4 36/273/4 35/274/4 33/271/4
f 49/275/2 43/276/2 42/277/2 48/278/2
f 43/276/9 45/279/9 44/280/9 42/277/9
f 45/281/3 47/282/3 46/283/3 44/284/3
f 47/282/5 49/285/5 48/286/5 46/283/5
f 57/287/2 51/288/2 50/289/2 56/290/2
f 51/288/10 53/291/10 52/292/10 50/289/10
f 53/293/3 55/294/3 54/295/3 52/296/3
f 55/294/6 57/297/6 56/298/6 54/295/6
f 189/299/2 126/300/2 61/301/2 64/302/2
f 126/300/1 157/303/1 62/304/1 61/301/1
f 157/305/3 213/306/3 63/307/3 62/308/3
f 213/306/7 189/309/7 64/310/7 63/307/7
f 73/311/2 67/312/2 66/313/2 72/314/2
f 67/312/4 69/315/4 68/316/4 66/313/4
f 69/317/3 71/318/3 70/319/3 68/320/3
f 71/318/8 73/321/8 72/322/8 70/319/8
f 78/323/3 80/324/3 79/325/3 77/326/3
f 77/327/5 81/328/5 82/329/5 78/330/5
f 79/331/1 83/332/1 81/333/1 77/334/1
f 84/335/9 83/336/9 79/337/9 80/338/9
f 82/339/2 81/333/2 83/332/2 84/340/2
f 78/341/7 82/342/7 84/343/7 80/344/7
f 86/345/2 85/346/2 87/347/2 88/348/2
f 85/349/5 86/350/5 90/351/5 89/352/5
f 87/353/1 85/354/1 89/355/1 91/356/1
f 92/357/9 88/358/9 87/359/9 91/360/9
f 90/361/3 92/362/3 91/356/3 89/355/3
f 86/363/7 88/364/7 92/365/7 90/366/7
f 95/367/11 123/368/12 124/369/13 96/370/14
f 121/371/3 93/372/3 96/373/15 124/374/16
f 94/375/17 122/376/18 123/368/2 95/367/2
f 93/377/19 121/378/20 122/376/21 94/375/22
f 99/379/23 95/380/11 96/381/14 100/382/24
f 93/383/3 97/384/3 100/385/25 96/386/15
f 98/387/26 94/388/17 95/380/2 99/379/2
f 97/389/27 93/390/19 94/388/22 98/387/28
f 103/391/29 99/392/23 100/393/24 104/394/30
f 97/395/3 101/396/3 104/397/31 100/398/25
f 102/399/32 98/400/26 99/392/2 103/391/2
f 101/401/33 97/402/27 98/400/28 102/399/34
f 107/403/35 103/404/29 104/405/30 108/406/21
f 101/407/3 105/408/3 108/409/36 104/410/31
f 106/411/37 102/412/32 103/404/2 107/403/2
f 105/413/38 101/414/33 102/412/34 106/411/13
f 111/415/39 107/416/35 108/417/21 112/418/22
f 105/419/3 109/420/3 112/421/40 108/422/36
f 110/423/41 106/424/37 107/416/2 111/415/2
f 109/425/42 105/426/38 106/424/13 110/423/14
f 115/427/43 111/428/39 112/429/22 116/430/28
f 109/431/3 113/432/3 116/433/44 112/434/40
f 114/435/45 110/436/41 111/428/2 115/427/2
f 113/437/46 109/438/42 110/436/14 114/435/24
f 119/439/47 115/440/43 116/441/28 120/442/34
f 113/443/3 117/444/3 120/445/48 116/446/44
f 118/447/49 114/448/45 115/440/2 119/439/2
f 117/449/50 113/450/46 114/448/24 118/447/30
f 123/451/12 119/452/47 120/453/34 124/454/13
f 117/455/3 121/456/3 124/457/16 120/458/48
f 122/459/18 118/460/49 119/452/2 123/451/2
f 121/461/20 117/462/50 118/460/30 122/459/21
f 131/463/9 128/464/9 126/465/9 129/466/9
f 132/467/2 127/468/2 128/464/2 131/463/2
f 126/469/1 128/470/1 127/471/1 125/472/1
f 146/473/5 144/474/5 27/475/5 143/476/5
f 147/477/2 146/473/2 143/476/2 142/478/2
f 27/479/1 141/480/1 142/481/1 143/482/1
f 162/483/9 160/484/9 157/485/9 159/486/9
f 163/487/3 162/483/3 159/486/3 158/488/3
f 157/489/1 156/490/1 158/491/1 159/492/1
f 178/493/5 175/494/5 173/495/5 176/496/5
f 179/497/3 174/498/3 175/494/3 178/493/3
f 173/499/1 175/500/1 174/501/1 172/502/1
f 131/463/9 129/466/9 189/503/9 191/504/9
f 132/467/2 131/463/2 191/504/2 190/505/2
f 189/506/7 188/507/7 190/508/7 191/509/7
f 146/473/5 203/510/5 201/511/5 144/474/5
f 147/477/2 202/512/2 203/510/2 146/473/2
f 201/513/7 203/514/7 202/515/7 200/516/7
f 162/483/9 215/517/9 213/518/9 160/484/9
f 163/487/3 214/519/3 215/517/3 162/483/3
f 213/520/7 215/521/7 214/522/7 212/523/7
f 178/493/5 176/496/5 24/524/5 226/525/5
f 179/497/3 178/493/3 226/525/3 225/526/3
f 24/527/7 224/528/7 225/529/7 226/530/7
l 132 130
l 129 130
l 147 145
l 144 145
l 163 161
l 160 161
l 179 177
l 176 177

View File

@ -1,18 +1,381 @@
{
"parent": "create:block/flywheel/flywheel",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/flywheel/flywheel.obj",
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"5": "create:block/brass_casing",
"7": "create:block/brass_gearbox",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [29, 1, 11.5],
"to": [32, 3, 13.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 17]},
"faces": {
"north": {"uv": [6.5, 9, 8, 10], "rotation": 180, "texture": "#0"},
"east": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"}
}
},
{
"from": [14.75, 7, 11.55],
"to": [30.75, 9, 13.45],
"rotation": {"angle": -22.5, "axis": "z", "origin": [15, 8, 21]},
"faces": {
"north": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}
}
},
{
"from": [22, 6, 6],
"to": [32, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]},
"faces": {
"north": {"uv": [2, 7, 7, 9], "texture": "#0"},
"east": {"uv": [0, 7, 2, 9], "texture": "#0"},
"south": {"uv": [2, 7, 7, 9], "texture": "#0"},
"west": {"uv": [0, 7, 2, 9], "texture": "#0"},
"up": {"uv": [2, 7, 7, 9], "texture": "#0"},
"down": {"uv": [2, 7, 7, 9], "texture": "#0"}
}
},
{
"from": [7, 7, 7],
"to": [23, 9, 9],
"rotation": {"angle": -22.5, "axis": "z", "origin": [23, 8, 8]},
"faces": {
"north": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}
}
},
{
"from": [0, 0, 4],
"to": [16, 16, 15],
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#7"},
"east": {"uv": [0, 15.5, 8, 10], "rotation": 270, "texture": "#0"},
"south": {"uv": [0, 0, 16, 16], "texture": "#7"},
"west": {"uv": [8, 10.5, 16, 16], "rotation": 90, "texture": "#0"},
"up": {"uv": [8, 10.5, 16, 16], "rotation": 180, "texture": "#0"},
"down": {"uv": [8, 10.5, 16, 16], "texture": "#0"}
}
},
{
"from": [0, 0, 15],
"to": [16, 2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "texture": "#5"},
"east": {"uv": [0, 14, 1, 16], "texture": "#5"},
"south": {"uv": [0, 14, 16, 16], "texture": "#5"},
"west": {"uv": [15, 14, 16, 16], "texture": "#5"},
"up": {"uv": [0, 1, 16, 2], "texture": "#5"},
"down": {"uv": [0, 0, 16, 1], "texture": "#5"}
}
},
{
"from": [0, 14, 15],
"to": [16, 16, 16],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 16]},
"faces": {
"north": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"},
"east": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"},
"south": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"},
"west": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"},
"up": {"uv": [0, 0, 16, 1], "rotation": 180, "texture": "#5"},
"down": {"uv": [0, 1, 16, 2], "rotation": 180, "texture": "#5"}
}
},
{
"from": [0, 2, 15],
"to": [2, 14, 16],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 16]},
"faces": {
"north": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"},
"east": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"},
"south": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"},
"west": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"},
"up": {"uv": [15, 14, 16, 16], "rotation": 90, "texture": "#5"},
"down": {"uv": [0, 14, 1, 16], "rotation": 90, "texture": "#5"}
}
},
{
"from": [14, 2, 15],
"to": [16, 14, 16],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 16]},
"faces": {
"north": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"},
"east": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"},
"south": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"},
"west": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 14, 1, 16], "rotation": 270, "texture": "#5"},
"down": {"uv": [15, 14, 16, 16], "rotation": 270, "texture": "#5"}
}
},
{
"from": [3, 3, -3.9],
"to": [13, 13, 5.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [11, 5, 16, 10], "texture": "#0"},
"east": {"uv": [11.5, 0, 16, 5], "texture": "#0"},
"south": {"uv": [11, 5, 16, 10], "texture": "#0"},
"west": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"},
"up": {"uv": [11.5, 0, 16, 5], "rotation": 270, "texture": "#0"},
"down": {"uv": [11.5, 0, 16, 5], "rotation": 90, "texture": "#0"}
}
},
{
"from": [-0.5, 23.5, -1.9],
"to": [16.5, 28.5, 4.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"east": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"west": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"}
}
},
{
"from": [-0.5, -12.5, -1.9],
"to": [16.5, -7.5, 4.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"east": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"west": {"uv": [8.5, 0, 11.5, 2], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"}
}
},
{
"from": [23.5, -0.5, -1.9],
"to": [28.5, 16.5, 4.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"},
"east": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"},
"west": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"},
"up": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 90, "texture": "#0"},
"down": {"uv": [8.5, 0, 11.5, 2], "rotation": 90, "texture": "#0"}
}
},
{
"from": [-12.5, -0.5, -1.9],
"to": [-7.5, 16.5, 4.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"},
"east": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"up": {"uv": [8.5, 0, 11.5, 2], "rotation": 270, "texture": "#0"},
"down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 270, "texture": "#0"}
}
},
{
"from": [-0.5, 23.5, -1.85],
"to": [16.5, 28.5, 4.05],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"east": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"west": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"}
}
},
{
"from": [-0.5, -12.5, -1.85],
"to": [16.5, -7.5, 4.05],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"east": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"west": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"}
}
},
{
"from": [-0.5, -12.5, -1.85],
"to": [16.5, -7.5, 4.05],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"east": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"west": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"}
}
},
{
"from": [-12.5, -0.5, -1.85],
"to": [-7.5, 16.5, 4.05],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"},
"east": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"south": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"up": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 270, "texture": "#0"},
"down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 270, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [6, -8, -0.9],
"to": [10, 3, 3.1],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [6, 13, -0.9],
"to": [10, 24, 3.1],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "texture": "#0"}
}
},
{
"name": "spoke",
"from": [-8, 6, -0.9],
"to": [3, 10, 3.1],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [13, 6, -0.9],
"to": [24, 10, 3.1],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [-8, 6, -0.9],
"to": [3, 10, 3.1],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [6, -8, -0.9],
"to": [10, 3, 3.1],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [13, 6, -0.9],
"to": [24, 10, 3.1],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [6, 13, -0.9],
"to": [10, 24, 3.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "texture": "#0"}
}
}
],
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.4, 0.4, 0.4 ]
},
"thirdperson_righthand": {
"rotation": [75, -67, 0],
"translation": [0, 2.5, -2],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, -67, 0],
"translation": [0, 2.5, -2],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, -91, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, -91, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"rotation": [90, 0, 0],
"translation": [0, 2, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, 225, 0],
"translation": [-0.25, 0.75, 0],
"scale": [0.35, 0.35, 0.35]
},
"fixed": {
"rotation": [ 90, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.4, 0.4, 0.4 ]
}
}
"scale": [0.45, 0.45, 0.45]
}
},
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8]
},
{
"name": "wheel",
"origin": [24, 8, 8],
"children": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
}
]
}

View File

@ -0,0 +1,27 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [2.55, 7, 6.75],
"to": [4.45, 9, 22.75],
"rotation": {"angle": 22.5, "axis": "x", "origin": [-5, 8, 7]},
"faces": {
"east": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 9, 8, 10], "rotation": 270, "texture": "#0"},
"down": {"uv": [0, 9, 8, 10], "rotation": 90, "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0]
}
]
}

View File

@ -0,0 +1,29 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [2.5, 1, 21],
"to": [4.5, 3, 29],
"rotation": {"angle": 0, "axis": "y", "origin": [-1, 8, 8]},
"faces": {
"north": {"uv": [0, 9, 1, 10], "rotation": 270, "texture": "#0"},
"east": {"uv": [0, 9, 4, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [0, 9, 1, 10], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 9, 4, 10], "texture": "#0"},
"up": {"uv": [0, 9, 4, 10], "rotation": 270, "texture": "#0"},
"down": {"uv": [0, 9, 4, 10], "rotation": 270, "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0]
}
]
}

View File

@ -0,0 +1,27 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [7, 7, 7],
"to": [9, 9, 23],
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 8, 23]},
"faces": {
"east": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 9, 8, 10], "rotation": 270, "texture": "#0"},
"down": {"uv": [0, 9, 8, 10], "rotation": 90, "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0]
}
]
}

View File

@ -0,0 +1,29 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [6, 6, 22],
"to": [10, 10, 32],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -5]},
"faces": {
"north": {"uv": [0, 7, 2, 9], "texture": "#0"},
"east": {"uv": [2, 7, 7, 9], "texture": "#0"},
"south": {"uv": [0, 7, 2, 9], "texture": "#0"},
"west": {"uv": [2, 7, 7, 9], "texture": "#0"},
"up": {"uv": [2, 7, 7, 9], "rotation": 90, "texture": "#0"},
"down": {"uv": [2, 7, 7, 9], "rotation": 270, "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": [0]
}
]
}

View File

@ -0,0 +1,221 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "create:block/steam_engine_wheel",
"particle": "create:block/steam_engine_wheel"
},
"elements": [
{
"from": [11.9, 23.5, -0.5],
"to": [17.9, 28.5, 16.5],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"south": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}
}
},
{
"from": [11.9, -12.5, -0.5],
"to": [17.9, -7.5, 16.5],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [8.5, 0, 11.5, 2], "rotation": 180, "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"south": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}
}
},
{
"from": [11.9, -0.5, 23.5],
"to": [17.9, 16.5, 28.5],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"},
"south": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"},
"up": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"down": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"}
}
},
{
"from": [11.9, -0.5, -12.5],
"to": [17.9, 16.5, -7.5],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"},
"south": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"},
"up": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"},
"down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}
}
},
{
"from": [11.95, 23.5, -0.5],
"to": [17.85, 28.5, 16.5],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"south": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}
}
},
{
"from": [11.95, -12.5, -0.5],
"to": [17.85, -7.5, 16.5],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"south": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}
}
},
{
"from": [11.95, -12.5, -0.5],
"to": [17.85, -7.5, 16.5],
"rotation": {"angle": -45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"south": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"},
"up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}
}
},
{
"from": [11.95, -0.5, -12.5],
"to": [17.85, 16.5, -7.5],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"east": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"},
"south": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"},
"west": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"},
"up": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"},
"down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, -8, 6],
"to": [16.9, 3, 10],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, 13, 6],
"to": [16.9, 24, 10],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, 6, -8],
"to": [16.9, 10, 3],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"east": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, 6, 13],
"to": [16.9, 10, 24],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"east": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, 6, -8],
"to": [16.9, 10, 3],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"east": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, -8, 6],
"to": [16.9, 3, 10],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, 6, 13],
"to": [16.9, 10, 24],
"rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"east": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"},
"up": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [9, 4.5, 11, 10], "texture": "#0"}
}
},
{
"name": "spoke",
"from": [12.9, 13, 6],
"to": [16.9, 24, 10],
"rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]},
"faces": {
"north": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"east": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"south": {"uv": [9, 4.5, 11, 10], "texture": "#0"},
"west": {"uv": [9, 4.5, 11, 10], "texture": "#0"}
}
}
],
"groups": [
{
"name": "transmission",
"origin": [-8, 8, 8],
"children": []
},
{
"name": "wheel",
"origin": [24, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
}
]
}

View File

@ -0,0 +1,133 @@
{
"credit": "Made with Blockbench",
"textures": {
"5": "create:block/brass_casing",
"1_1": "create:block/furnace_cylinder",
"particle": "create:block/brass_block"
},
"elements": [
{
"name": "Ring",
"from": [0, 0, 2],
"to": [16, 16, 7],
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#5"},
"east": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"},
"south": {"uv": [0, 0, 16, 16], "texture": "#5"},
"west": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"},
"up": {"uv": [0, 7, 2.5, 15], "rotation": 90, "texture": "#1_1"},
"down": {"uv": [0, 7, 2.5, 15], "rotation": 270, "texture": "#1_1"}
}
},
{
"name": "Cylinder",
"from": [1, 1, 0],
"to": [15, 15, 16],
"faces": {
"north": {"uv": [8, 0, 15, 7], "texture": "#1_1"},
"east": {"uv": [0, 0, 8, 7], "rotation": 180, "texture": "#1_1"},
"south": {"uv": [8, 0, 15, 7], "texture": "#1_1"},
"west": {"uv": [0, 0, 8, 7], "texture": "#1_1"},
"up": {"uv": [0, 0, 8, 7], "rotation": 90, "texture": "#1_1"},
"down": {"uv": [0, 0, 8, 7], "rotation": 270, "texture": "#1_1"}
}
},
{
"from": [1.5, 0, 7],
"to": [5.5, 4, 16],
"faces": {
"east": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"},
"west": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [2.5, 7, 7, 9], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [2.5, 7, 7, 9], "rotation": 90, "texture": "#1_1"}
}
},
{
"from": [10.5, 0, 7],
"to": [14.5, 4, 16],
"faces": {
"east": {"uv": [7, 7, 2.5, 9], "rotation": 180, "texture": "#1_1"},
"west": {"uv": [7, 7, 2.5, 9], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [2.5, 9, 7, 7], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [2.5, 9, 7, 7], "rotation": 90, "texture": "#1_1"}
}
},
{
"name": "LowerPort",
"from": [1.5, 0.1, -0.9],
"to": [5.5, 4.1, 2.1],
"faces": {
"north": {"uv": [2.5, 13, 4.5, 15], "texture": "#1_1"},
"east": {"uv": [3, 13, 4.5, 15], "texture": "#1_1"},
"south": {"uv": [10, 0, 14, 4], "texture": "#1_1"},
"west": {"uv": [3, 13, 4.5, 15], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [3, 13, 4.5, 15], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [3, 13, 4.5, 15], "rotation": 90, "texture": "#1_1"}
}
},
{
"name": "LowerPort",
"from": [10.5, 0.1, -0.9],
"to": [14.5, 4.1, 2.1],
"faces": {
"north": {"uv": [4.5, 13, 2.5, 15], "texture": "#1_1"},
"east": {"uv": [4.5, 13, 3, 15], "rotation": 180, "texture": "#1_1"},
"south": {"uv": [14, 0, 10, 4], "texture": "#1_1"},
"west": {"uv": [4.5, 13, 3, 15], "texture": "#1_1"},
"up": {"uv": [3, 15, 4.5, 13], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [3, 15, 4.5, 13], "rotation": 90, "texture": "#1_1"}
}
},
{
"name": "Port",
"from": [4, 4, -1.8],
"to": [12, 12, 0.2],
"faces": {
"north": {"uv": [2.5, 9, 6.5, 13], "texture": "#1_1"},
"east": {"uv": [5.5, 9, 6.5, 13], "texture": "#1_1"},
"west": {"uv": [5.5, 9, 6.5, 13], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [5.5, 9, 6.5, 13], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [5.5, 9, 6.5, 13], "rotation": 90, "texture": "#1_1"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 135, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, 135, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, 225, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, 45, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [0, 180, 0],
"scale": [0.5, 0.5, 0.5]
}
},
"groups": [
{
"name": "SteamCylinder",
"origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6]
}
]
}

View File

@ -0,0 +1,89 @@
{
"credit": "Made with Blockbench",
"textures": {
"particle": "create:block/steam_engine_wheel",
"1_1": "create:block/furnace_cylinder"
},
"elements": [
{
"name": "Cylinder",
"from": [1.1, 1.1, -1.9],
"to": [14.9, 14.9, 0.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]},
"faces": {
"north": {"uv": [8, 0, 15, 7], "texture": "#1_1"},
"east": {"uv": [14, 0, 15, 7], "texture": "#1_1"},
"south": {"uv": [7, 7, 16, 16], "texture": "#1_1"},
"west": {"uv": [14, 0, 15, 7], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [14, 0, 15, 7], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [14, 0, 15, 7], "rotation": 90, "texture": "#1_1"}
}
},
{
"from": [-0.9, 12, -0.9],
"to": [16.9, 16.1, 16.9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]},
"faces": {
"north": {"uv": [7, 7, 16, 9], "texture": "#1_1"},
"east": {"uv": [7, 7, 16, 9], "texture": "#1_1"},
"south": {"uv": [7, 7, 16, 9], "texture": "#1_1"},
"west": {"uv": [7, 7, 16, 9], "texture": "#1_1"},
"up": {"uv": [7, 7, 16, 16], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [7, 7, 16, 16], "rotation": 90, "texture": "#1_1"}
}
},
{
"from": [-0.9, 8, -0.9],
"to": [16.9, 12, 16.9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]},
"faces": {
"north": {"uv": [7, 14, 16, 16], "texture": "#1_1"},
"east": {"uv": [7, 14, 16, 16], "texture": "#1_1"},
"south": {"uv": [7, 14, 16, 16], "texture": "#1_1"},
"west": {"uv": [7, 14, 16, 16], "texture": "#1_1"},
"up": {"uv": [7, 7, 16, 16], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [7, 7, 16, 16], "rotation": 90, "texture": "#1_1"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, -67, 0],
"translation": [0, 2.5, -2],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, -67, 0],
"translation": [0, 2.5, -2],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, -91, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, -91, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"rotation": [90, 0, 0],
"translation": [0, 2, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, 225, 0],
"translation": [-0.25, 0.75, 0],
"scale": [0.35, 0.35, 0.35]
},
"fixed": {
"scale": [0.45, 0.45, 0.45]
}
},
"groups": [
{
"name": "SteamCylinder",
"origin": [8, 8, 8],
"children": [0, 1, 2]
}
]
}

View File

@ -0,0 +1,123 @@
{
"credit": "Made with Blockbench",
"textures": {
"5": "create:block/brass_casing",
"1_1": "create:block/furnace_cylinder"
},
"elements": [
{
"name": "Ring",
"from": [0, 0, 9],
"to": [16, 16, 14],
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#5"},
"east": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"},
"south": {"uv": [0, 0, 16, 16], "texture": "#5"},
"west": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"},
"up": {"uv": [0, 7, 2.5, 15], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [0, 7, 2.5, 15], "rotation": 90, "texture": "#1_1"}
}
},
{
"name": "Cylinder",
"from": [1, 1, 0],
"to": [15, 15, 16],
"faces": {
"north": {"uv": [8, 0, 15, 7], "texture": "#1_1"},
"east": {"uv": [0, 0, 8, 7], "texture": "#1_1"},
"south": {"uv": [8, 0, 15, 7], "texture": "#1_1"},
"west": {"uv": [0, 0, 8, 7], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [0, 0, 8, 7], "rotation": 270, "texture": "#1_1"},
"down": {"uv": [0, 0, 8, 7], "rotation": 90, "texture": "#1_1"}
}
},
{
"from": [10.5, 0, 0],
"to": [14.5, 4, 9],
"faces": {
"east": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"},
"west": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [2.5, 7, 7, 9], "rotation": 90, "texture": "#1_1"},
"down": {"uv": [2.5, 7, 7, 9], "rotation": 270, "texture": "#1_1"}
}
},
{
"name": "LowerPort",
"from": [10.5, 0.1, 13.9],
"to": [14.5, 4.1, 16.9],
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#1_1"},
"east": {"uv": [3, 13, 4.5, 15], "rotation": 180, "texture": "#1_1"},
"south": {"uv": [2.5, 13, 4.5, 15], "texture": "#1_1"},
"west": {"uv": [3, 13, 4.5, 15], "texture": "#1_1"},
"up": {"uv": [3, 13, 4.5, 15], "rotation": 90, "texture": "#1_1"},
"down": {"uv": [3, 13, 4.5, 15], "rotation": 270, "texture": "#1_1"}
}
},
{
"name": "LowerPort",
"from": [1.5, 0.1, 13.9],
"to": [5.5, 4.1, 16.9],
"rotation": {"angle": 0, "axis": "y", "origin": [16, 0, 0]},
"faces": {
"north": {"uv": [14, 0, 10, 4], "texture": "#1_1"},
"east": {"uv": [4.5, 13, 3, 15], "texture": "#1_1"},
"south": {"uv": [4.5, 13, 2.5, 15], "texture": "#1_1"},
"west": {"uv": [4.5, 13, 3, 15], "rotation": 180, "texture": "#1_1"},
"up": {"uv": [3, 15, 4.5, 13], "rotation": 90, "texture": "#1_1"},
"down": {"uv": [3, 15, 4.5, 13], "rotation": 270, "texture": "#1_1"}
}
},
{
"name": "Port",
"from": [4, 4, 15.8],
"to": [12, 12, 17.8],
"faces": {
"east": {"uv": [5.5, 9, 6.5, 13], "rotation": 180, "texture": "#1_1"},
"south": {"uv": [2.5, 9, 6.5, 13], "texture": "#1_1"},
"west": {"uv": [5.5, 9, 6.5, 13], "texture": "#1_1"},
"up": {"uv": [5.5, 9, 6.5, 13], "rotation": 90, "texture": "#1_1"},
"down": {"uv": [5.5, 9, 6.5, 13], "rotation": 270, "texture": "#1_1"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 135, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, 135, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, 225, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, 45, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [0, 180, 0],
"scale": [0.5, 0.5, 0.5]
}
},
"groups": [
{
"name": "SteamCylinder",
"origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B