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),
IBooleanFunction.ONLY_FIRST),
TURNTABLE_SHAPE = VoxelShapes.or(
makeCuboidShape(1, 6, 1, 15, 8, 15),
makeCuboidShape(5, 0, 5, 11, 6, 11)),
makeCuboidShape(1, 4, 1, 15, 8, 15),
makeCuboidShape(5, 0, 5, 11, 4, 11)),
CRATE_BLOCK_SHAPE = makeCuboidShape(1, 0, 1, 15, 14, 15),
LOGISTICS_TABLE_BASE = TABLE_POLE_SHAPE,
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.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
@ -44,13 +43,6 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
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
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) {
if (facing.getAxis() == state.get(AXIS) || facing.getAxis().isVertical())
return;
@ -143,9 +129,12 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
for (Direction direction : Direction.values()) {
BlockPos neighbourPos = pos.offset(direction);
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))
continue;
if (neighbourState.get(AXIS) != state.get(AXIS) || state.get(AXIS) != direction.getAxis())
if (neighbourState.get(AXIS) != stateAxis || stateAxis != direction.getAxis())
return false;
}

View file

@ -10,8 +10,11 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer.Builder;
@ -80,6 +83,8 @@ public class CrushingWheelControllerBlock extends Block implements IHaveNoBlockI
CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) tileEntity;
if (te.isOccupied())
return;
if ((entityIn instanceof PlayerEntity) && ((PlayerEntity) entityIn).isCreative())
return;
te.startCrushing(entityIn);
}
@ -140,6 +145,14 @@ public class CrushingWheelControllerBlock extends Block implements IHaveNoBlockI
Entity entity = context.getEntity();
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()))
return VoxelShapes.empty();

View file

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

View file

@ -3,18 +3,32 @@ package com.simibubi.create.modules.contraptions.components.crusher;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction;
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 static DamageSource damageSource = new DamageSource("create.crush").setDamageBypassesArmor()
.setDifficultyScaled();
public CrushingWheelTileEntity() {
super(AllTileEntities.CRUSHING_WHEEL.type);
setLazyTickRate(20);
}
@Override
public void onSpeedChanged(float prevSpeed) {
super.onSpeedChanged(prevSpeed);
fixControllers();
}
public void fixControllers() {
for (Direction d : Direction.values())
((CrushingWheelBlock) getBlockState().getBlock()).updateControllers(getBlockState(), getWorld(), getPos(),
d);
@ -25,4 +39,24 @@ public class CrushingWheelTileEntity extends KineticTileEntity {
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.Axis;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
@ -54,31 +55,29 @@ public class TurntableBlock extends KineticBlock {
if (e.posY < pos.getY() + .5f)
return;
if (world.isRemote && (e instanceof PlayerEntity)) {
if (worldIn.getBlockState(e.getPosition()) != state) {
Vec3d origin = VecHelper.getCenterOf(pos);
Vec3d offset = e.getPositionVec().subtract(origin);
if (!world.isRemote && (e instanceof PlayerEntity))
return;
if (offset.length() > 1 / 4f) {
offset = VecHelper.rotate(offset, speed / 1f, Axis.Y);
offset = VecHelper.rotate(offset, MathHelper.clamp(speed, -16, 16) / 1f, Axis.Y);
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))
return;
if (world.isRemote)
return;
if ((e instanceof LivingEntity)) {
float diff = e.getRotationYawHead() - speed;
((LivingEntity) e).setIdleTime(20);
e.setRenderYawOffset(diff);
e.setRotationYawHead(diff);
return;
e.onGround = false;
e.velocityChanged = true;
}
e.rotationYaw -= speed;
}

View file

@ -1,26 +1,39 @@
package com.simibubi.create.modules.contraptions.components.turntable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
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 static void gameRenderTick() {
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;
if (!mc.player.onGround)
return;
if (mc.isGamePaused())
return;
KineticTileEntity te = (KineticTileEntity) mc.world.getTileEntity(mc.player.getPosition());
KineticTileEntity te = (KineticTileEntity) mc.world.getTileEntity(pos);
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.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.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import net.minecraftforge.items.wrapper.RecipeWrapper;
@ -39,6 +40,16 @@ public class BasinTileEntity extends SyncedTileEntity implements ITickableTileEn
sendData();
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 {

View file

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