Turn it up

- Fixed Turntable not working with armorstands
- Fixed Turntables flinging players away from it
- Fixed some z-Fighting in the water wheel model
- Basin no longer accepts more than a full stack of an item in its input
- Crushing entities now has a fortune modifier
- Crushed entities will drop their loot below the wheels
- Fixed Crushing wheel stack overflow when attaching one to an existing pair
This commit is contained in:
simibubi 2020-01-24 14:21:50 +01:00
parent d563abcbdf
commit 2903b7046c
10 changed files with 612 additions and 542 deletions

View file

@ -88,8 +88,8 @@ public class AllShapes {
makeCuboidShape(4, 0, 4, 12, 16, 12), makeCuboidShape(4, 0, 4, 12, 16, 12),
IBooleanFunction.ONLY_FIRST), IBooleanFunction.ONLY_FIRST),
TURNTABLE_SHAPE = VoxelShapes.or( TURNTABLE_SHAPE = VoxelShapes.or(
makeCuboidShape(1, 6, 1, 15, 8, 15), makeCuboidShape(1, 4, 1, 15, 8, 15),
makeCuboidShape(5, 0, 5, 11, 6, 11)), makeCuboidShape(5, 0, 5, 11, 4, 11)),
CRATE_BLOCK_SHAPE = makeCuboidShape(1, 0, 1, 15, 14, 15), CRATE_BLOCK_SHAPE = makeCuboidShape(1, 0, 1, 15, 14, 15),
LOGISTICS_TABLE_BASE = TABLE_POLE_SHAPE, LOGISTICS_TABLE_BASE = TABLE_POLE_SHAPE,
BELT_COLLISION_MASK = makeCuboidShape(0, 0, 0, 16, 19, 16), BELT_COLLISION_MASK = makeCuboidShape(0, 0, 0, 16, 19, 16),

View file

@ -18,7 +18,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -44,13 +43,6 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
return AllShapes.CRUSHING_WHEEL_COLLISION_SHAPE; return AllShapes.CRUSHING_WHEEL_COLLISION_SHAPE;
} }
@Override
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn,
BlockPos currentPos, BlockPos facingPos) {
updateControllers(stateIn, worldIn.getWorld(), currentPos, facing);
return stateIn;
}
@Override @Override
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
@ -66,12 +58,6 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
} }
} }
@Override
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
for (Direction d : Direction.values())
updateControllers(state, worldIn, pos, d);
}
public void updateControllers(BlockState state, World world, BlockPos pos, Direction facing) { public void updateControllers(BlockState state, World world, BlockPos pos, Direction facing) {
if (facing.getAxis() == state.get(AXIS) || facing.getAxis().isVertical()) if (facing.getAxis() == state.get(AXIS) || facing.getAxis().isVertical())
return; return;
@ -143,9 +129,12 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
for (Direction direction : Direction.values()) { for (Direction direction : Direction.values()) {
BlockPos neighbourPos = pos.offset(direction); BlockPos neighbourPos = pos.offset(direction);
BlockState neighbourState = worldIn.getBlockState(neighbourPos); BlockState neighbourState = worldIn.getBlockState(neighbourPos);
Axis stateAxis = state.get(AXIS);
if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.typeOf(neighbourState) && direction.getAxis() != stateAxis)
return false;
if (!AllBlocks.CRUSHING_WHEEL.typeOf(neighbourState)) if (!AllBlocks.CRUSHING_WHEEL.typeOf(neighbourState))
continue; continue;
if (neighbourState.get(AXIS) != state.get(AXIS) || state.get(AXIS) != direction.getAxis()) if (neighbourState.get(AXIS) != stateAxis || stateAxis != direction.getAxis())
return false; return false;
} }
@ -166,7 +155,7 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
protected boolean hasStaticPart() { protected boolean hasStaticPart() {
return false; return false;
} }
@Override @Override
public float getParticleTargetRadius() { public float getParticleTargetRadius() {
return 1.125f; return 1.125f;

View file

@ -10,8 +10,11 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.InventoryHelper; import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.BlockItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.particles.ParticleTypes; import net.minecraft.particles.ParticleTypes;
import net.minecraft.state.BooleanProperty; import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.StateContainer.Builder;
@ -80,6 +83,8 @@ public class CrushingWheelControllerBlock extends Block implements IHaveNoBlockI
CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) tileEntity; CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) tileEntity;
if (te.isOccupied()) if (te.isOccupied())
return; return;
if ((entityIn instanceof PlayerEntity) && ((PlayerEntity) entityIn).isCreative())
return;
te.startCrushing(entityIn); te.startCrushing(entityIn);
} }
@ -140,6 +145,14 @@ public class CrushingWheelControllerBlock extends Block implements IHaveNoBlockI
Entity entity = context.getEntity(); Entity entity = context.getEntity();
if (entity != null) { if (entity != null) {
if (entity != null) {
CompoundNBT data = entity.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return VoxelShapes.empty();
}
}
if (new AxisAlignedBB(pos).contains(entity.getPositionVec())) if (new AxisAlignedBB(pos).contains(entity.getPositionVec()))
return VoxelShapes.empty(); return VoxelShapes.empty();

View file

@ -9,6 +9,7 @@ import com.simibubi.create.AllRecipes;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.CreateConfig; import com.simibubi.create.CreateConfig;
import com.simibubi.create.foundation.block.SyncedTileEntity; import com.simibubi.create.foundation.block.SyncedTileEntity;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.modules.contraptions.processing.ProcessingInventory; import com.simibubi.create.modules.contraptions.processing.ProcessingInventory;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -22,15 +23,11 @@ import net.minecraft.particles.IParticleData;
import net.minecraft.particles.ItemParticleData; import net.minecraft.particles.ItemParticleData;
import net.minecraft.particles.ParticleTypes; import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
public class CrushingWheelControllerTileEntity extends SyncedTileEntity implements ITickableTileEntity { public class CrushingWheelControllerTileEntity extends SyncedTileEntity implements ITickableTileEntity {
private static DamageSource damageSource = new DamageSource("create.crush").setDamageBypassesArmor()
.setDifficultyScaled();
public Entity processingEntity; public Entity processingEntity;
private UUID entityUUID; private UUID entityUUID;
protected boolean searchForEntity; protected boolean searchForEntity;
@ -63,6 +60,7 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
return; return;
float speed = crushingspeed / 2.5f; float speed = crushingspeed / 2.5f;
Vec3d outPos = VecHelper.getCenterOf(pos);
if (!hasEntity()) { if (!hasEntity()) {
@ -80,7 +78,6 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
return; return;
} }
Vec3d outPos = new Vec3d(pos).add(.5, -.5, .5);
if (inventory.remainingTime <= 0) { if (inventory.remainingTime <= 0) {
for (int slot = 0; slot < inventory.getSizeInventory(); slot++) { for (int slot = 0; slot < inventory.getSizeInventory(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot); ItemStack stack = inventory.getStackInSlot(slot);
@ -88,6 +85,7 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
continue; continue;
ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack); ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack);
entityIn.setMotion(Vec3d.ZERO); entityIn.setMotion(Vec3d.ZERO);
entityIn.getPersistentData().put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos));
world.addEntity(entityIn); world.addEntity(entityIn);
} }
inventory.clear(); inventory.clear();
@ -104,13 +102,22 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
return; return;
} }
processingEntity.setMotion(new Vec3d(0, Math.max(-speed / 4f, -.5f), 0)); double xMotion = ((pos.getX() + .5f) - processingEntity.posX) / 2f;
double zMotion = ((pos.getZ() + .5f) - processingEntity.posZ) / 2f;
if (processingEntity.isSneaking())
xMotion = zMotion = 0;
processingEntity.setMotion(new Vec3d(xMotion, Math.max(-speed / 4f, -.5f), zMotion));
if (world.isRemote) if (world.isRemote)
return; return;
if (!(processingEntity instanceof ItemEntity)) { if (!(processingEntity instanceof ItemEntity)) {
processingEntity.attackEntityFrom(damageSource, CreateConfig.parameters.crushingDamage.get()); processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource,
CreateConfig.parameters.crushingDamage.get());
if (!processingEntity.isAlive()) {
processingEntity.setPosition(outPos.x, outPos.y - .75f, outPos.z);
}
return; return;
} }

View file

@ -3,18 +3,32 @@ package com.simibubi.create.modules.contraptions.components.crusher;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.modules.contraptions.base.KineticTileEntity; import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LootingLevelEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber
public class CrushingWheelTileEntity extends KineticTileEntity { public class CrushingWheelTileEntity extends KineticTileEntity {
public static DamageSource damageSource = new DamageSource("create.crush").setDamageBypassesArmor()
.setDifficultyScaled();
public CrushingWheelTileEntity() { public CrushingWheelTileEntity() {
super(AllTileEntities.CRUSHING_WHEEL.type); super(AllTileEntities.CRUSHING_WHEEL.type);
setLazyTickRate(20);
} }
@Override @Override
public void onSpeedChanged(float prevSpeed) { public void onSpeedChanged(float prevSpeed) {
super.onSpeedChanged(prevSpeed); super.onSpeedChanged(prevSpeed);
fixControllers();
}
public void fixControllers() {
for (Direction d : Direction.values()) for (Direction d : Direction.values())
((CrushingWheelBlock) getBlockState().getBlock()).updateControllers(getBlockState(), getWorld(), getPos(), ((CrushingWheelBlock) getBlockState().getBlock()).updateControllers(getBlockState(), getWorld(), getPos(),
d); d);
@ -25,4 +39,24 @@ public class CrushingWheelTileEntity extends KineticTileEntity {
return new AxisAlignedBB(pos).grow(1); return new AxisAlignedBB(pos).grow(1);
} }
@Override
public void lazyTick() {
super.lazyTick();
fixControllers();
}
@SubscribeEvent
public static void crushingIsFortunate(LootingLevelEvent event) {
if (event.getDamageSource() != damageSource)
return;
event.setLootingLevel(2);
}
@SubscribeEvent
public static void crushingTeleportsEntities(LivingDeathEvent event) {
if (event.getSource() != damageSource)
return;
event.getEntity().posY = Math.floor(event.getEntity().posY) - .5f;
}
} }

View file

@ -14,6 +14,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
@ -54,31 +55,29 @@ public class TurntableBlock extends KineticBlock {
if (e.posY < pos.getY() + .5f) if (e.posY < pos.getY() + .5f)
return; return;
Vec3d origin = VecHelper.getCenterOf(pos); if (world.isRemote && (e instanceof PlayerEntity)) {
Vec3d offset = e.getPositionVec().subtract(origin); if (worldIn.getBlockState(e.getPosition()) != state) {
Vec3d origin = VecHelper.getCenterOf(pos);
if (!world.isRemote && (e instanceof PlayerEntity)) Vec3d offset = e.getPositionVec().subtract(origin);
return; offset = VecHelper.rotate(offset, MathHelper.clamp(speed, -16, 16) / 1f, Axis.Y);
Vec3d movement = origin.add(offset).subtract(e.getPositionVec());
if (offset.length() > 1 / 4f) { e.setMotion(e.getMotion().add(movement));
offset = VecHelper.rotate(offset, speed / 1f, Axis.Y); e.velocityChanged = true;
Vec3d movement = origin.add(offset).subtract(e.getPositionVec()); }
e.setMotion(e.getMotion().add(movement));
e.velocityChanged = true;
} }
if (world.isRemote)
return;
if ((e instanceof PlayerEntity)) if ((e instanceof PlayerEntity))
return; return;
if (world.isRemote)
return;
if ((e instanceof LivingEntity)) { if ((e instanceof LivingEntity)) {
float diff = e.getRotationYawHead() - speed; float diff = e.getRotationYawHead() - speed;
((LivingEntity) e).setIdleTime(20); ((LivingEntity) e).setIdleTime(20);
e.setRenderYawOffset(diff); e.setRenderYawOffset(diff);
e.setRotationYawHead(diff); e.setRotationYawHead(diff);
return; e.onGround = false;
e.velocityChanged = true;
} }
e.rotationYaw -= speed; e.rotationYaw -= speed;
} }

View file

@ -1,28 +1,41 @@
package com.simibubi.create.modules.contraptions.components.turntable; package com.simibubi.create.modules.contraptions.components.turntable;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.modules.contraptions.base.KineticTileEntity; import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
public class TurntableHandler { public class TurntableHandler {
public static void gameRenderTick() { public static void gameRenderTick() {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
BlockPos pos = mc.player.getPosition();
if (!AllBlocks.TURNTABLE.typeOf(mc.world.getBlockState(mc.player.getPosition()))) if (!AllBlocks.TURNTABLE.typeOf(mc.world.getBlockState(pos)))
return; return;
if (!mc.player.onGround) if (!mc.player.onGround)
return; return;
if (mc.isGamePaused()) if (mc.isGamePaused())
return; return;
KineticTileEntity te = (KineticTileEntity) mc.world.getTileEntity(mc.player.getPosition()); KineticTileEntity te = (KineticTileEntity) mc.world.getTileEntity(pos);
float speed = te.getSpeed() / 19; float speed = te.getSpeed() / 19;
if (speed == 0)
return;
Vec3d origin = VecHelper.getCenterOf(pos);
Vec3d offset = mc.player.getPositionVec().subtract(origin);
if (offset.length() > 1/4f)
speed *= MathHelper.clamp((1/2f - offset.length()) * 2, 0, 1);
mc.player.rotationYaw = mc.player.prevRotationYaw - speed * mc.getRenderPartialTicks(); mc.player.rotationYaw = mc.player.prevRotationYaw - speed * mc.getRenderPartialTicks();
mc.player.renderYawOffset = mc.player.rotationYaw; mc.player.renderYawOffset = mc.player.rotationYaw;
} }
} }

View file

@ -12,6 +12,7 @@ import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import net.minecraftforge.items.wrapper.RecipeWrapper; import net.minecraftforge.items.wrapper.RecipeWrapper;
@ -39,6 +40,16 @@ public class BasinTileEntity extends SyncedTileEntity implements ITickableTileEn
sendData(); sendData();
markDirty(); markDirty();
}; };
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
for (int i = 0; i < getSlots(); i++) {
ItemStack stackInSlot = getStackInSlot(i);
if (ItemHandlerHelper.canItemStacksStack(stack, stackInSlot))
if (stackInSlot.getCount() == getStackLimit(i, stackInSlot))
return stack;
}
return super.insertItem(slot, stack, simulate);
};
}; };
public static class BasinInventory extends CombinedInvWrapper { public static class BasinInventory extends CombinedInvWrapper {

View file

@ -1,52 +1,56 @@
{ {
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "credit": "Made with Blockbench",
"parent": "block/block", "parent": "block/block",
"textures": { "textures": {
"particle": "block/stripped_spruce_log", "0": "create:block/axis",
"0": "create:block/axis", "1": "block/stripped_spruce_log",
"1": "block/stripped_spruce_log", "2": "block/stripped_spruce_log_top",
"2": "block/stripped_spruce_log_top", "3": "create:block/axis_top",
"3": "create:block/axis_top" "5": "create:block/gearbox_top",
}, "6": "create:block/encased_belt",
"elements": [ "particle": "block/stripped_spruce_log"
{ },
"name": "Axis", "elements": [
"from": [ 6.0, 0.0, 6.0 ], {
"to": [ 10.0, 7.0, 10.0 ], "name": "Axis",
"shade": false, "from": [6, 0, 6],
"faces": { "to": [10, 7, 10],
"north": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 7.0 ] }, "shade": false,
"east": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 7.0 ] }, "faces": {
"south": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 7.0 ] }, "north": {"uv": [6, 9, 10, 16], "texture": "#0"},
"west": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 7.0 ] }, "east": {"uv": [6, 9, 10, 16], "texture": "#0"},
"down": { "texture": "#3", "uv": [ 6.0, 6.0, 10.0, 10.0 ] } "south": {"uv": [6, 9, 10, 16], "texture": "#0"},
} "west": {"uv": [6, 9, 10, 16], "texture": "#0"},
}, "down": {"uv": [6, 6, 10, 10], "texture": "#3"}
{ }
"name": "GearCaseInner", },
"from": [ 1.0, 6.0, 1.0 ], {
"to": [ 15.0, 8.0, 15.0 ], "name": "GearCaseInner",
"faces": { "from": [1, 5.9, 1],
"north": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 2.0 ] }, "to": [15, 7.9, 15],
"east": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 2.0 ] }, "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.9, 8]},
"south": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 2.0 ] }, "faces": {
"west": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 2.0 ] }, "north": {"uv": [1, 1, 15, 3], "texture": "#6"},
"up": { "texture": "#2", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, "east": {"uv": [1, 1, 15, 3], "texture": "#6"},
"down": { "texture": "#2", "uv": [ 1.0, 1.0, 15.0, 15.0 ] } "south": {"uv": [1, 1, 15, 3], "texture": "#6"},
} "west": {"uv": [1, 1, 15, 3], "texture": "#6"},
}, "up": {"uv": [1, 1, 15, 15], "texture": "#5"},
{ "down": {"uv": [1, 1, 15, 15], "texture": "#2"}
"name": "GearCaseOuter", }
"from": [ 4.0, 5.0, 4.0 ], },
"to": [ 12.0, 6.0, 12.0 ], {
"faces": { "name": "GearCaseInner",
"north": { "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 1.0 ] }, "from": [1, 3.9, 1],
"east": { "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 1.0 ] }, "to": [15, 5.9, 15],
"south": { "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 1.0 ] }, "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.9, 8]},
"west": { "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 1.0 ] }, "faces": {
"up": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] }, "north": {"uv": [1, 3, 15, 5], "texture": "#6"},
"down": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] } "east": {"uv": [1, 3, 15, 5], "texture": "#6"},
} "south": {"uv": [1, 3, 15, 5], "texture": "#6"},
} "west": {"uv": [1, 3, 15, 5], "texture": "#6"},
] "up": {"uv": [1, 1, 15, 15], "texture": "#2"},
"down": {"uv": [1, 1, 15, 15], "texture": "#1"}
}
}
]
} }

View file

@ -1,450 +1,450 @@
{ {
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", "credit": "Made with Blockbench",
"parent": "create:block/large_wheels", "parent": "create:block/large_wheels",
"textures": { "textures": {
"axis": "create:block/axis", "axis": "create:block/axis",
"axis_top": "create:block/axis_top", "axis_top": "create:block/axis_top",
"particle": "minecraft:block/stripped_spruce_log", "wheel": "create:block/wheel",
"wheel": "create:block/wheel", "spruce_planks": "block/spruce_planks",
"spruce_planks": "minecraft:block/spruce_planks", "particle": "block/stripped_spruce_log",
"stripped_spruce_log": "minecraft:block/stripped_spruce_log", "stripped_spruce_log": "block/stripped_spruce_log",
"spruce_log": "minecraft:block/spruce_log" "spruce_log": "block/spruce_log"
}, },
"elements": [ "elements": [
{ {
"name": "Axis", "name": "Axis",
"from": [ 6, 0, 6 ], "from": [6, 0, 6],
"to": [ 10, 16, 10 ], "to": [10, 16, 10],
"shade": false, "shade": false,
"faces": { "faces": {
"north": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, "north": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"east": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, "east": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"south": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, "south": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"west": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, "west": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"up": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ], "rotation": 90 }, "up": {"uv": [6, 6, 10, 10], "rotation": 90, "texture": "#axis_top"},
"down": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ], "rotation": 90 } "down": {"uv": [6, 6, 10, 10], "rotation": 90, "texture": "#axis_top"}
} }
}, },
{ {
"name": "Segment1", "name": "Segment1",
"from": [ 13, -1, -8 ], "from": [13, -1, -8],
"to": [ 14, 17, 0 ], "to": [14, 17, 0],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment1", "name": "Segment1",
"from": [ 13, -1, -8 ], "from": [13, -1, -8],
"to": [ 14, 17, 0 ], "to": [14, 17, 0],
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment1", "name": "Segment1",
"from": [ 13, -1, -8 ], "from": [13, -1, -8],
"to": [ 14, 17, 0 ], "to": [14, 17, 0],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment1", "name": "Segment1",
"from": [ 13, -1, -8 ], "from": [13, -1, -8],
"to": [ 14, 17, 0 ], "to": [14, 17, 0],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 }, "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 90 } "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment3", "name": "Segment3",
"from": [ 2, -1, 16 ], "from": [2, -1, 16],
"to": [ 3, 17, 24 ], "to": [3, 17, 24],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment3", "name": "Segment3",
"from": [ 2, -1, 16 ], "from": [2, -1, 16],
"to": [ 3, 17, 24 ], "to": [3, 17, 24],
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment3", "name": "Segment3",
"from": [ 2, -1, 16 ], "from": [2, -1, 16],
"to": [ 3, 17, 24 ], "to": [3, 17, 24],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment3", "name": "Segment3",
"from": [ 2, -1, 16 ], "from": [2, -1, 16],
"to": [ 3, 17, 24 ], "to": [3, 17, 24],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 }, "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 270 } "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment2", "name": "Segment2",
"from": [ -8, -1, 2 ], "from": [-8, -1, 2],
"to": [ 0, 17, 3 ], "to": [0, 17, 3],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment2", "name": "Segment2",
"from": [ -8, -1, 2 ], "from": [-8, -1, 2],
"to": [ 0, 17, 3 ], "to": [0, 17, 3],
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment2", "name": "Segment2",
"from": [ -8, -1, 2 ], "from": [-8, -1, 2],
"to": [ 0, 17, 3 ], "to": [0, 17, 3],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment2", "name": "Segment2",
"from": [ -8, -1, 2 ], "from": [-8, -1, 2],
"to": [ 0, 17, 3 ], "to": [0, 17, 3],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] }, "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 } "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment4", "name": "Segment4",
"from": [ 16, -1, 13 ], "from": [16, -1, 13],
"to": [ 24, 17, 14 ], "to": [24, 17, 14],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment4", "name": "Segment4",
"from": [ 16, -1, 13 ], "from": [16, -1, 13],
"to": [ 24, 17, 14 ], "to": [24, 17, 14],
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment4", "name": "Segment4",
"from": [ 16, -1, 13 ], "from": [16, -1, 13],
"to": [ 24, 17, 14 ], "to": [24, 17, 14],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "Segment4", "name": "Segment4",
"from": [ 16, -1, 13 ], "from": [16, -1, 13],
"to": [ 24, 17, 14 ], "to": [24, 17, 14],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"east": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"south": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 16 ] }, "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"},
"west": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 1, 16 ] }, "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"},
"up": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ], "rotation": 180 }, "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"},
"down": { "texture": "#stripped_spruce_log", "uv": [ 0, 0, 8, 1 ] } "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}
} }
}, },
{ {
"name": "SmallRim", "name": "SmallRim",
"from": [ -2, -0.8, -2 ], "from": [-2, -0.8, -2],
"to": [ 18, 16.8, 18 ], "to": [18, 16.8, 18],
"faces": { "faces": {
"up": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] }, "up": {"uv": [2, 2, 14, 14], "texture": "#wheel"},
"down": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] } "down": {"uv": [2, 2, 14, 14], "texture": "#wheel"}
} }
}, },
{ {
"name": "LargeRim", "name": "LargeRim",
"from": [ -5, -0.7, -5 ], "from": [-5, -0.7, -5],
"to": [ 21, -0.7, 21 ], "to": [21, -0.6, 21],
"faces": { "faces": {
"up": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] }, "up": {"uv": [2, 2, 14, 14], "texture": "#wheel"},
"down": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] } "down": {"uv": [2, 2, 14, 14], "texture": "#wheel"}
} }
}, },
{ {
"name": "LargeRim2", "name": "LargeRim2",
"from": [ -5, 16.7, -5 ], "from": [-5, 16.6, -5],
"to": [ 21, 16.7, 21 ], "to": [21, 16.7, 21],
"faces": { "faces": {
"up": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] }, "up": {"uv": [2, 2, 14, 14], "texture": "#wheel"},
"down": { "texture": "#wheel", "uv": [ 2, 2, 14, 14 ] } "down": {"uv": [2, 2, 14, 14], "texture": "#wheel"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ -2, -0.6, 4 ], "from": [-2, -0.6, 4],
"to": [ 0, 16.6, 12 ], "to": [0, 16.6, 12],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ -2, -0.6, 4 ], "from": [-2, -0.6, 4],
"to": [ 0, 16.6, 12 ], "to": [0.1, 16.6, 12],
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ -2, -0.6, 4 ], "from": [-2, -0.6, 4],
"to": [ 0, 16.6, 12 ], "to": [0, 16.6, 12],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -45.0 }, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ 16, -0.6, 4 ], "from": [15.9, -0.6, 4],
"to": [ 18, 16.6, 12 ], "to": [18, 16.6, 12],
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ 16, -0.6, 4 ], "from": [16, -0.6, 4],
"to": [ 18, 16.6, 12 ], "to": [18, 16.6, 12],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ 16, -0.6, 4 ], "from": [16, -0.6, 4],
"to": [ 18, 16.6, 12 ], "to": [18, 16.6, 12],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -45.0 }, "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] }, "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ] } "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ 4, -0.6, -2 ], "from": [4, -0.6, -2],
"to": [ 12, 16.6, 0 ], "to": [12, 16.6, 0.1],
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "north": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "east": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "west": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 }, "up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 } "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "InnerSegment", "name": "InnerSegment",
"from": [ 4, -0.6, 16 ], "from": [4, -0.6, 15.9],
"to": [ 12, 16.6, 18 ], "to": [12, 16.6, 18],
"faces": { "faces": {
"north": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 270 }, "north": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"},
"east": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "east": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"south": { "texture": "#spruce_planks", "uv": [ 0, 0, 16, 8 ], "rotation": 90 }, "south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"},
"west": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 16 ] }, "west": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"},
"up": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 }, "up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"},
"down": { "texture": "#spruce_planks", "uv": [ 0, 0, 2, 8 ], "rotation": 90 } "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"}
} }
}, },
{ {
"name": "AxisCoat", "name": "AxisCoat",
"from": [ 5, 1, 5 ], "from": [5, 1, 5],
"to": [ 11, 15, 11 ], "to": [11, 15, 11],
"shade": false, "shade": false,
"faces": { "faces": {
"north": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, "north": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"},
"east": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, "east": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"},
"south": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, "south": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"},
"west": { "texture": "#spruce_log", "uv": [ 5, 2, 11, 16 ] }, "west": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"},
"up": { "texture": "#spruce_log", "uv": [ 5, 5, 11, 11 ], "rotation": 90 }, "up": {"uv": [5, 5, 11, 11], "rotation": 90, "texture": "#spruce_log"},
"down": { "texture": "#spruce_log", "uv": [ 5, 5, 11, 11 ], "rotation": 90 } "down": {"uv": [5, 5, 11, 11], "rotation": 90, "texture": "#spruce_log"}
} }
}, },
{ {
"name": "Connector", "name": "Connector",
"from": [ 6.5, 2, -1 ], "from": [6.5, 2, -1],
"to": [ 9.5, 14, 17 ], "to": [9.5, 14, 17],
"shade": false, "shade": false,
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"east": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "east": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"west": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "west": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"up": { "texture": "#spruce_log", "uv": [ 3, 0, 6, 16 ] }, "up": {"uv": [3, 0, 6, 16], "texture": "#spruce_log"},
"down": { "texture": "#spruce_log", "uv": [ 6, 0, 9, 16 ] } "down": {"uv": [6, 0, 9, 16], "texture": "#spruce_log"}
} }
}, },
{ {
"name": "Connector", "name": "Connector",
"from": [ 6.5, 2, -1 ], "from": [6.5, 2.1, -1],
"to": [ 9.5, 14, 17 ], "to": [9.5, 13.9, 17],
"shade": false, "shade": false,
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"east": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "east": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"west": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "west": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"up": { "texture": "#spruce_log", "uv": [ 9, 0, 12, 16 ] }, "up": {"uv": [9, 0, 12, 16], "texture": "#spruce_log"},
"down": { "texture": "#spruce_log", "uv": [ 2, 0, 5, 16 ] } "down": {"uv": [2, 0, 5, 16], "texture": "#spruce_log"}
} }
}, },
{ {
"name": "Connector", "name": "Connector",
"from": [ -1, 2, 6.5 ], "from": [-1, 2.1, 6.5],
"to": [ 17, 14, 9.5 ], "to": [17, 13.9, 9.5],
"shade": false, "shade": false,
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "north": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"south": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "south": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"up": { "texture": "#spruce_log", "uv": [ 4, 0, 7, 16 ], "rotation": 90 }, "up": {"uv": [4, 0, 7, 16], "rotation": 90, "texture": "#spruce_log"},
"down": { "texture": "#spruce_log", "uv": [ 8, 0, 11, 16 ], "rotation": 90 } "down": {"uv": [8, 0, 11, 16], "rotation": 90, "texture": "#spruce_log"}
} }
}, },
{ {
"name": "Connector", "name": "Connector",
"from": [ -1, 2, 6.5 ], "from": [-1, 2, 6.5],
"to": [ 17, 14, 9.5 ], "to": [17, 14, 9.5],
"shade": false, "shade": false,
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": { "faces": {
"north": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "north": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"south": { "texture": "#spruce_log", "uv": [ 0, 2, 16, 14 ] }, "south": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"},
"up": { "texture": "#spruce_log", "uv": [ 9, 0, 12, 16 ], "rotation": 90 }, "up": {"uv": [9, 0, 12, 16], "rotation": 90, "texture": "#spruce_log"},
"down": { "texture": "#spruce_log", "uv": [ 2, 0, 5, 16 ], "rotation": 90 } "down": {"uv": [2, 0, 5, 16], "rotation": 90, "texture": "#spruce_log"}
} }
} }
] ]
} }