Added Flywheels and Furnace Engines

- Flywheels and Engines form a powerful rotation source multiblock
- Furnace engines only activate when attached to a running furnace
This commit is contained in:
simibubi 2020-02-05 12:36:22 +01:00
parent aacc52d84a
commit 6ea0dbd6ab
40 changed files with 2186 additions and 5 deletions

View File

@ -52,6 +52,12 @@ public enum AllBlockPartials {
BELT_TUNNEL_FLAP("belt_tunnel/flap"), BELT_TUNNEL_FLAP("belt_tunnel/flap"),
BELT_TUNNEL_INDICATOR("belt_tunnel/indicator"), BELT_TUNNEL_INDICATOR("belt_tunnel/indicator"),
FLEXPEATER_INDICATOR("repeaters/flexpeater_indicator"), FLEXPEATER_INDICATOR("repeaters/flexpeater_indicator"),
FLYWHEEL("flywheel/wheel"),
FLYWHEEL_UPPER_ROTATING("flywheel/upper_rotating_connector"),
FLYWHEEL_LOWER_ROTATING("flywheel/lower_rotating_connector"),
FLYWHEEL_UPPER_SLIDING("flywheel/upper_sliding_connector"),
FLYWHEEL_LOWER_SLIDING("flywheel/lower_sliding_connector"),
FURNACE_GENERATOR_FRAME("furnace_engine/frame"),
; ;

View File

@ -25,6 +25,8 @@ import com.simibubi.create.modules.contraptions.components.crusher.CrushingWheel
import com.simibubi.create.modules.contraptions.components.deployer.DeployerBlock; import com.simibubi.create.modules.contraptions.components.deployer.DeployerBlock;
import com.simibubi.create.modules.contraptions.components.fan.EncasedFanBlock; import com.simibubi.create.modules.contraptions.components.fan.EncasedFanBlock;
import com.simibubi.create.modules.contraptions.components.fan.NozzleBlock; import com.simibubi.create.modules.contraptions.components.fan.NozzleBlock;
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelBlock;
import com.simibubi.create.modules.contraptions.components.flywheel.engine.FurnaceEngineBlock;
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerBlock; import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerBlock;
import com.simibubi.create.modules.contraptions.components.motor.MotorBlock; import com.simibubi.create.modules.contraptions.components.motor.MotorBlock;
import com.simibubi.create.modules.contraptions.components.press.MechanicalPressBlock; import com.simibubi.create.modules.contraptions.components.press.MechanicalPressBlock;
@ -125,6 +127,10 @@ public enum AllBlocks {
MECHANICAL_MIXER(new MechanicalMixerBlock()), MECHANICAL_MIXER(new MechanicalMixerBlock()),
BASIN(new BasinBlock()), BASIN(new BasinBlock()),
MECHANICAL_CRAFTER(new MechanicalCrafterBlock()), MECHANICAL_CRAFTER(new MechanicalCrafterBlock()),
FLYWHEEL(new FlywheelBlock()),
FURNACE_ENGINE(new FurnaceEngineBlock()),
SPEED_GAUGE(new GaugeBlock(GaugeBlock.Type.SPEED)), SPEED_GAUGE(new GaugeBlock(GaugeBlock.Type.SPEED)),
STRESS_GAUGE(new GaugeBlock(GaugeBlock.Type.STRESS)), STRESS_GAUGE(new GaugeBlock(GaugeBlock.Type.STRESS)),

View File

@ -25,6 +25,10 @@ import com.simibubi.create.modules.contraptions.components.deployer.DeployerTile
import com.simibubi.create.modules.contraptions.components.fan.EncasedFanTileEntity; import com.simibubi.create.modules.contraptions.components.fan.EncasedFanTileEntity;
import com.simibubi.create.modules.contraptions.components.fan.EncasedFanTileEntityRenderer; import com.simibubi.create.modules.contraptions.components.fan.EncasedFanTileEntityRenderer;
import com.simibubi.create.modules.contraptions.components.fan.NozzleTileEntity; import com.simibubi.create.modules.contraptions.components.fan.NozzleTileEntity;
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelRenderer;
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelTileEntity;
import com.simibubi.create.modules.contraptions.components.flywheel.engine.EngineRenderer;
import com.simibubi.create.modules.contraptions.components.flywheel.engine.FurnaceEngineTileEntity;
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntity; import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntity;
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntityRenderer; import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntityRenderer;
import com.simibubi.create.modules.contraptions.components.motor.MotorTileEntity; import com.simibubi.create.modules.contraptions.components.motor.MotorTileEntity;
@ -111,6 +115,8 @@ public enum AllTileEntities {
DRILL(DrillTileEntity::new, AllBlocks.DRILL), DRILL(DrillTileEntity::new, AllBlocks.DRILL),
SAW(SawTileEntity::new, AllBlocks.SAW), SAW(SawTileEntity::new, AllBlocks.SAW),
HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER), HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER),
FLYWHEEL(FlywheelTileEntity::new, AllBlocks.FLYWHEEL),
FURNACE_ENGINE(FurnaceEngineTileEntity::new, AllBlocks.FURNACE_ENGINE),
CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL), CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL),
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER), CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL), WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
@ -200,6 +206,8 @@ public enum AllTileEntities {
bind(StressGaugeTileEntity.class, new GaugeTileEntityRenderer(GaugeBlock.Type.STRESS)); bind(StressGaugeTileEntity.class, new GaugeTileEntityRenderer(GaugeBlock.Type.STRESS));
bind(BasinTileEntity.class, new BasinTileEntityRenderer()); bind(BasinTileEntity.class, new BasinTileEntityRenderer());
bind(DeployerTileEntity.class, new DeployerTileEntityRenderer()); bind(DeployerTileEntity.class, new DeployerTileEntityRenderer());
bind(FlywheelTileEntity.class, new FlywheelRenderer());
bind(FurnaceEngineTileEntity.class, new EngineRenderer<>());
bind(RedstoneLinkTileEntity.class, new SmartTileEntityRenderer<>()); bind(RedstoneLinkTileEntity.class, new SmartTileEntityRenderer<>());
bind(ExtractorTileEntity.class, new SmartTileEntityRenderer<>()); bind(ExtractorTileEntity.class, new SmartTileEntityRenderer<>());

View File

@ -30,7 +30,10 @@ public class AllShapes {
TRANSPOSER = VoxelShaper.forDirectional(VoxelShapes.or( TRANSPOSER = VoxelShaper.forDirectional(VoxelShapes.or(
makeCuboidShape(4, 4, -1, 12, 12, 1), makeCuboidShape(4, 4, -1, 12, 12, 1),
makeCuboidShape(5, 5, 0, 11, 11, 16), makeCuboidShape(5, 5, 0, 11, 11, 16),
makeCuboidShape(4, 4, 11, 12, 12, 17)), Direction.SOUTH) makeCuboidShape(4, 4, 11, 12, 12, 17)), Direction.SOUTH),
FURNACE_ENGINE = VoxelShaper.forHorizontal(VoxelShapes.or(
makeCuboidShape(1, 1, 0, 15, 15, 16),
makeCuboidShape(0, 0, 9, 16, 16, 14)), Direction.SOUTH)
; ;

View File

@ -0,0 +1,99 @@
package com.simibubi.create.modules.contraptions.components.flywheel;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.EnumProperty;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
public class FlywheelBlock extends HorizontalKineticBlock {
public static EnumProperty<ConnectionState> CONNECTION = EnumProperty.create("connection", ConnectionState.class);
public FlywheelBlock() {
super(Properties.from(Blocks.GOLD_BLOCK));
setDefaultState(getDefaultState().with(CONNECTION, ConnectionState.NONE));
}
@Override
protected void fillStateContainer(Builder<Block, BlockState> builder) {
super.fillStateContainer(builder.add(CONNECTION));
}
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new FlywheelTileEntity();
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext context) {
Direction preferred = getPreferredHorizontalFacing(context);
if (preferred != null)
return getDefaultState().with(HORIZONTAL_FACING, preferred.getOpposite());
return this.getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing());
}
@Override
protected boolean hasStaticPart() {
return true;
}
public static boolean isConnected(BlockState state) {
return getConnection(state) != null;
}
public static Direction getConnection(BlockState state) {
Direction facing = state.get(HORIZONTAL_FACING);
ConnectionState connection = state.get(CONNECTION);
if (connection == ConnectionState.LEFT)
return facing.rotateYCCW();
if (connection == ConnectionState.RIGHT)
return facing.rotateY();
return null;
}
public static void setConnection(World world, BlockPos pos, BlockState state, Direction direction) {
Direction facing = state.get(HORIZONTAL_FACING);
ConnectionState connection = ConnectionState.NONE;
if (direction == facing.rotateY())
connection = ConnectionState.RIGHT;
if (direction == facing.rotateYCCW())
connection = ConnectionState.LEFT;
world.setBlockState(pos, state.with(CONNECTION, connection), 18);
}
@Override
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
return face == state.get(HORIZONTAL_FACING).getOpposite();
}
@Override
public Axis getRotationAxis(BlockState state) {
return state.get(HORIZONTAL_FACING).getAxis();
}
public enum ConnectionState implements IStringSerializable {
NONE, LEFT, RIGHT;
@Override
public String getName() {
return Lang.asId(name());
}
}
}

View File

@ -0,0 +1,98 @@
package com.simibubi.create.modules.contraptions.components.flywheel;
import static com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock.HORIZONTAL_FACING;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelBlock.ConnectionState;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.Rotation;
public class FlywheelRenderer extends KineticTileEntityRenderer {
@Override
public void renderFast(KineticTileEntity te, double x, double y, double z, float partialTicks, int destroyStage,
BufferBuilder buffer) {
super.renderFast(te, x, y, z, partialTicks, destroyStage, buffer);
BlockState blockState = te.getBlockState();
FlywheelTileEntity wte = (FlywheelTileEntity) te;
SuperByteBuffer wheel = AllBlockPartials.FLYWHEEL.renderOnHorizontal(blockState.rotate(Rotation.CLOCKWISE_90));
float speed = wte.visualSpeed.get(partialTicks) * 3 / 10f;
float angle = wte.angle + speed * partialTicks;
if (FlywheelBlock.isConnected(blockState)) {
Direction connection = FlywheelBlock.getConnection(blockState);
int light = blockState.getPackedLightmapCoords(getWorld(), te.getPos().offset(connection));
float rotation = connection.getAxis() == Axis.X ^ connection.getAxisDirection() == AxisDirection.NEGATIVE
? -angle
: angle;
boolean flip = blockState.get(FlywheelBlock.CONNECTION) == ConnectionState.LEFT;
rotateToFacing(transformConnector(AllBlockPartials.FLYWHEEL_UPPER_ROTATING.renderOn(blockState), true, true,
rotation, flip), connection).translate(x, y, z).light(light).renderInto(buffer);
rotateToFacing(transformConnector(AllBlockPartials.FLYWHEEL_LOWER_ROTATING.renderOn(blockState), false,
true, rotation, flip), connection).translate(x, y, z).light(light).renderInto(buffer);
rotateToFacing(transformConnector(AllBlockPartials.FLYWHEEL_UPPER_SLIDING.renderOn(blockState), true, false,
rotation, flip), connection).translate(x, y, z).light(light).renderInto(buffer);
rotateToFacing(transformConnector(AllBlockPartials.FLYWHEEL_LOWER_SLIDING.renderOn(blockState), false,
false, rotation, flip), connection).translate(x, y, z).light(light).renderInto(buffer);
}
kineticRotationTransform(wheel, te, blockState.get(HORIZONTAL_FACING).getAxis(), AngleHelper.rad(angle),
getWorld());
wheel.translate(x, y, z).renderInto(buffer);
}
@Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState(),
te.getBlockState().get(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 = MathHelper.sin(radians) * shift + offset;
float maxAngle = upper ? -5 : -15;
float minAngle = upper ? -45 : 5;
float barAngle = 0;
if (rotating)
barAngle = MathHelper.lerp((MathHelper.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;
if (flip && !upper)
buffer.translate(9 / 16f, 0, 0);
buffer.translate(-pivotX, -pivotY, -pivotZ);
if (rotating)
buffer.rotate(Axis.X, AngleHelper.rad(barAngle));
buffer.translate(pivotX, pivotY, pivotZ + shifting);
return buffer;
}
protected SuperByteBuffer rotateToFacing(SuperByteBuffer buffer, Direction facing) {
buffer.rotateCentered(Axis.Y, AngleHelper.rad(AngleHelper.horizontalAngle(facing)));
return buffer;
}
}

View File

@ -0,0 +1,109 @@
package com.simibubi.create.modules.contraptions.components.flywheel;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue;
import com.simibubi.create.modules.contraptions.base.GeneratingKineticTileEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.math.AxisAlignedBB;
public class FlywheelTileEntity extends GeneratingKineticTileEntity {
private float generatedCapacity;
private float generatedSpeed;
private int stoppingCooldown;
// Client
InterpolatedChasingValue visualSpeed = new InterpolatedChasingValue();
float angle;
public FlywheelTileEntity() {
super(AllTileEntities.FLYWHEEL.type);
}
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 generatedSpeed;
}
@Override
public float getAddedStressCapacity() {
return generatedCapacity;
}
@Override
public void initialize() {
super.initialize();
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return super.getRenderBoundingBox().grow(2);
}
@Override
public CompoundNBT writeToClient(CompoundNBT compound) {
return super.writeToClient(compound);
}
@Override
public void readClientUpdate(CompoundNBT tag) {
super.readClientUpdate(tag);
visualSpeed.withSpeed(1 / 32f).target(generatedSpeed);
}
@Override
public CompoundNBT write(CompoundNBT compound) {
compound.putFloat("GeneratedSpeed", generatedSpeed);
compound.putFloat("GeneratedCapacity", generatedCapacity);
compound.putInt("Cooldown", stoppingCooldown);
return super.write(compound);
}
@Override
public void read(CompoundNBT compound) {
generatedSpeed = compound.getFloat("GeneratedSpeed");
generatedCapacity = compound.getFloat("GeneratedCapacity");
stoppingCooldown = compound.getInt("Cooldown");
super.read(compound);
}
@Override
public void tick() {
super.tick();
if (world.isRemote) {
visualSpeed.target(generatedSpeed);
visualSpeed.tick();
angle += visualSpeed.value * 3 / 10f;
angle %= 360;
return;
}
if (stoppingCooldown == 0)
return;
stoppingCooldown--;
if (stoppingCooldown == 0) {
generatedCapacity = 0;
generatedSpeed = 0;
updateGeneratedRotation();
}
}
}

View File

@ -0,0 +1,95 @@
package com.simibubi.create.modules.contraptions.components.flywheel.engine;
import javax.annotation.Nullable;
import com.simibubi.create.AllBlockPartials;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.HorizontalBlock;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public abstract class EngineBlock extends HorizontalBlock {
protected EngineBlock(Properties builder) {
super(builder);
}
@Override
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
return isValidPosition(state, worldIn, pos, state.get(HORIZONTAL_FACING));
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Override
public abstract TileEntity createTileEntity(BlockState state, IBlockReader world);
@Override
public BlockState getStateForPlacement(BlockItemUseContext context) {
Direction facing = context.getFace();
return getDefaultState().with(HORIZONTAL_FACING,
facing.getAxis().isVertical() ? context.getPlacementHorizontalFacing().getOpposite() : facing);
}
@Override
protected void fillStateContainer(Builder<Block, BlockState> builder) {
super.fillStateContainer(builder.add(HORIZONTAL_FACING));
}
@Override
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) {
if (worldIn.isRemote)
return;
if (fromPos.equals(getBaseBlockPos(state, pos))) {
if (!isValidPosition(state, worldIn, pos)) {
worldIn.destroyBlock(pos, true);
return;
}
}
}
private boolean isValidPosition(BlockState state, IBlockReader world, BlockPos pos, Direction facing) {
BlockPos baseBlockPos = getBaseBlockPos(state, pos);
if (!isValidBaseBlock(world.getBlockState(baseBlockPos), world, pos))
return false;
for (Direction otherFacing : Direction.values()) {
if (otherFacing.getAxis().isVertical())
continue;
if (otherFacing == facing)
continue;
BlockPos otherPos = baseBlockPos.offset(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.offset(state.get(HORIZONTAL_FACING).getOpposite());
}
@Nullable
@OnlyIn(Dist.CLIENT)
public abstract AllBlockPartials getFrameModel();
protected abstract boolean isValidBaseBlock(BlockState baseBlock, IBlockReader world, BlockPos pos);
}

View File

@ -0,0 +1,30 @@
package com.simibubi.create.modules.contraptions.components.flywheel.engine;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.block.SafeTileEntityRendererFast;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
public class EngineRenderer<T extends EngineTileEntity> extends SafeTileEntityRendererFast<T> {
@Override
protected void renderFast(T te, double x, double y, double z, float partialTicks, int destroyStage,
BufferBuilder buffer) {
Block block = te.getBlockState().getBlock();
if (block instanceof EngineBlock) {
EngineBlock engineBlock = (EngineBlock) block;
AllBlockPartials frame = engineBlock.getFrameModel();
if (frame != null) {
Direction facing = te.getBlockState().get(EngineBlock.HORIZONTAL_FACING);
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
frame.renderOn(te.getBlockState()).translate(0, 0, -1).rotateCentered(Axis.Y, angle).translate(x, y, z)
.light(te.getBlockState().getPackedLightmapCoords(getWorld(), te.getPos())).renderInto(buffer);
}
}
}
}

View File

@ -0,0 +1,99 @@
package com.simibubi.create.modules.contraptions.components.flywheel.engine;
import java.util.List;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.behaviour.base.SmartTileEntity;
import com.simibubi.create.foundation.behaviour.base.TileEntityBehaviour;
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelBlock;
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelTileEntity;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
public class EngineTileEntity extends SmartTileEntity {
public float appliedCapacity;
public float appliedSpeed;
protected FlywheelTileEntity poweredWheel;
public EngineTileEntity(TileEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn);
}
@Override
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
}
@Override
public boolean hasFastRenderer() {
return true;
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return super.getRenderBoundingBox().grow(1.5f);
}
@Override
public void initialize() {
super.initialize();
lazyTick();
}
@Override
public void lazyTick() {
super.lazyTick();
if (world.isRemote)
return;
if (poweredWheel != null && poweredWheel.isRemoved())
poweredWheel = null;
if (poweredWheel == null)
attachWheel();
}
public void attachWheel() {
Direction engineFacing = getBlockState().get(EngineBlock.HORIZONTAL_FACING);
BlockPos wheelPos = pos.offset(engineFacing, 2);
BlockState wheelState = world.getBlockState(wheelPos);
if (!AllBlocks.FLYWHEEL.typeOf(wheelState))
return;
Direction wheelFacing = wheelState.get(FlywheelBlock.HORIZONTAL_FACING);
if (wheelFacing.getAxis() != engineFacing.rotateY().getAxis())
return;
if (FlywheelBlock.isConnected(wheelState)
&& FlywheelBlock.getConnection(wheelState) != engineFacing.getOpposite())
return;
TileEntity te = world.getTileEntity(wheelPos);
if (te instanceof FlywheelTileEntity) {
if (!FlywheelBlock.isConnected(wheelState))
FlywheelBlock.setConnection(world, te.getPos(), te.getBlockState(), engineFacing.getOpposite());
poweredWheel = (FlywheelTileEntity) te;
refreshWheelSpeed();
}
}
public void detachWheel() {
poweredWheel.setRotation(0, 0);
FlywheelBlock.setConnection(world, poweredWheel.getPos(), poweredWheel.getBlockState(), null);
}
@Override
public void remove() {
if (poweredWheel != null)
detachWheel();
super.remove();
}
protected void refreshWheelSpeed() {
if (poweredWheel == null)
return;
poweredWheel.setRotation(appliedSpeed, appliedCapacity);
}
}

View File

@ -0,0 +1,79 @@
package com.simibubi.create.modules.contraptions.components.flywheel.engine;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.block.IWithTileEntity;
import com.simibubi.create.foundation.utility.AllShapes;
import net.minecraft.block.AbstractFurnaceBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
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 IWithTileEntity<FurnaceEngineTileEntity> {
public FurnaceEngineBlock() {
super(Properties.from(Blocks.GOLD_BLOCK));
}
@Override
protected boolean isValidBaseBlock(BlockState baseBlock, IBlockReader world, BlockPos pos) {
return baseBlock.getBlock() instanceof AbstractFurnaceBlock;
}
@Override
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
return AllShapes.FURNACE_ENGINE.get(state.get(HORIZONTAL_FACING));
}
@Override
public AllBlockPartials getFrameModel() {
return AllBlockPartials.FURNACE_GENERATOR_FRAME;
}
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new FurnaceEngineTileEntity();
}
@Override
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) {
super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving);
if (worldIn.isRemote)
return;
if (fromPos.equals(getBaseBlockPos(state, pos)))
if (isValidPosition(state, worldIn, pos))
withTileEntityDo(worldIn, pos, FurnaceEngineTileEntity::updateFurnace);
}
@SubscribeEvent
public static void usingFurnaceEngineOnFurnacePreventsGUI(RightClickBlock event) {
ItemStack item = event.getItemStack();
if (!(item.getItem() instanceof BlockItem))
return;
BlockItem blockItem = (BlockItem) item.getItem();
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);
}
}

View File

@ -0,0 +1,36 @@
package com.simibubi.create.modules.contraptions.components.flywheel.engine;
import com.simibubi.create.AllTileEntities;
import net.minecraft.block.AbstractFurnaceBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
public class FurnaceEngineTileEntity extends EngineTileEntity {
public FurnaceEngineTileEntity() {
super(AllTileEntities.FURNACE_ENGINE.type);
}
@Override
public void lazyTick() {
updateFurnace();
super.lazyTick();
}
public void updateFurnace() {
BlockState state = world.getBlockState(EngineBlock.getBaseBlockPos(getBlockState(), pos));
if (!(state.getBlock() instanceof AbstractFurnaceBlock))
return;
float modifier = state.getBlock() == Blocks.BLAST_FURNACE ? 2 : 1;
boolean active = state.has(AbstractFurnaceBlock.LIT) && state.get(AbstractFurnaceBlock.LIT);
float speed = active ? 16 * modifier : 0;
float capacity = active ? 512 : 0;
appliedCapacity = capacity;
appliedSpeed = speed;
refreshWheelSpeed();
}
}

View File

@ -115,8 +115,8 @@ public class GaugeInformationRenderer {
tooltip.add(spacing + GRAY + _stressImpact); tooltip.add(spacing + GRAY + _stressImpact);
String addedStress = AQUA + "" + format(stressApplied) + _stressUnit + " " + DARK_GRAY + _atCurrentSpeed; String addedStress = AQUA + "" + format(stressApplied) + _stressUnit + " " + DARK_GRAY + _atCurrentSpeed;
String addedStressAtBase = GRAY + "" + format(stressApplied * te.getSpeed()) + _stressUnit + " " + DARK_GRAY String addedStressAtBase = GRAY + "" + format(stressApplied * Math.abs(te.getSpeed())) + _stressUnit + " "
+ _baseValue; + DARK_GRAY + _baseValue;
tooltip.add(spacing + " " + addedStress); tooltip.add(spacing + " " + addedStress);
tooltip.add(spacing + " " + addedStressAtBase); tooltip.add(spacing + " " + addedStressAtBase);
} }

View File

@ -0,0 +1,18 @@
{
"forge_marker": 1,
"defaults": {
},
"variants": {
"facing": {
"north": { "y": 270 },
"south": { "y": 90 },
"east": { "y": 0 },
"west": { "y": 180 }
},
"connection": {
"none": { "model": "create:block/flywheel/casing_no_connection" },
"left": { "model": "create:block/flywheel/casing_left" },
"right": { "model": "create:block/flywheel/casing_right" }
}
}
}

View File

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

View File

@ -103,6 +103,8 @@
"block.create.deployer": "Deployer", "block.create.deployer": "Deployer",
"block.create.basin": "Basin", "block.create.basin": "Basin",
"block.create.mechanical_crafter": "Mechanical Crafter", "block.create.mechanical_crafter": "Mechanical Crafter",
"block.create.flywheel": "Flywheel",
"block.create.furnace_engine": "Furnace Engine",
"block.create.speed_gauge": "Speedometer", "block.create.speed_gauge": "Speedometer",
"block.create.stress_gauge": "Stress Gauge", "block.create.stress_gauge": "Stress Gauge",
"block.create.cart_assembler": "Cart Assembler", "block.create.cart_assembler": "Cart Assembler",

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

@ -0,0 +1,381 @@
{
"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": {
"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": "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",
"particle": "create:block/brass_block",
"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"}
}
},
{
"from": [1.5, 0, 0],
"to": [5.5, 4, 9],
"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": 90, "texture": "#1_1"},
"down": {"uv": [2.5, 9, 7, 7], "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],
"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, 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,110 @@
{
"credit": "Made with Blockbench",
"textures": {
"5": "create:block/brass_casing",
"particle": "create:block/steam_engine_wheel",
"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": "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]
}
]
}

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:flywheel"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

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

View File

@ -0,0 +1,34 @@
{
"type": "create:mechanical_crafting",
"pattern": [
" PPP ",
"PSBSP",
"PBCBP",
"PSBSP",
" PPP "
],
"key": {
"P": {
"item": "minecraft:polished_andesite"
},
"S": {
"tag": "forge:rods/wooden"
},
"C": {
"item": "create:large_cogwheel"
},
"B": {
"item": "create:andesite_alloy"
}
},
"result": {
"item": "create:crushing_wheel",
"count": 1
},
"conditions": [
{
"type": "create:module",
"module": "contraptions"
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "create:mechanical_crafting",
"pattern": [
" PPP ",
"PSBSP",
"PBCBP",
"PSBSP",
" PPP "
],
"key": {
"P": {
"tag": "forge:plates/brass"
},
"S": {
"tag": "forge:rods/wooden"
},
"C": {
"item": "create:brass_casing"
},
"B": {
"tag": "forge:ingots/brass"
}
},
"result": {
"item": "create:flywheel",
"count": 1
},
"conditions": [
{
"type": "create:module",
"module": "contraptions"
}
]
}

View File

@ -0,0 +1,35 @@
{
"type": "create:mechanical_crafting",
"pattern": [
"PPB",
"DCA",
"PPB"
],
"key": {
"P": {
"tag": "forge:plates/brass"
},
"D": {
"tag": "forge:plates/copper"
},
"A": {
"item": "minecraft:piston"
},
"C": {
"item": "create:brass_casing"
},
"B": {
"tag": "forge:ingots/brass"
}
},
"result": {
"item": "create:furnace_engine",
"count": 1
},
"conditions": [
{
"type": "create:module",
"module": "contraptions"
}
]
}

View File

@ -17,7 +17,7 @@
"tag": "forge:plates/iron" "tag": "forge:plates/iron"
}, },
"N": { "N": {
"tag": "forge:nuggets/copper" "tag": "forge:nuggets/gold"
} }
}, },
"result": { "result": {