mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-13 05:21:46 +01:00
No turning back
- Mechanical Pumps no longer reverse direction based on kinetic input - Fixed pipe connections pulling fluids with half the speed compared to a directly attached pump - Substantially increased speed of visual flow propagation inside pipe networks - Fixed observers on elevator contacts firing in the wrong order when triggered by manual floor selection - Portable storage interfaces now stall for longer after an exchange has happened, and shorter otherwise
This commit is contained in:
parent
bc0f349840
commit
8799fb38e8
16 changed files with 193 additions and 366 deletions
|
@ -92,7 +92,7 @@ public class AllPartialModels {
|
|||
ARM_HEAD = block("mechanical_arm/head"), ARM_CLAW_BASE = block("mechanical_arm/claw_base"),
|
||||
ARM_CLAW_GRIP = block("mechanical_arm/claw_grip"),
|
||||
|
||||
MECHANICAL_PUMP_ARROW = block("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = block("mechanical_pump/cog"),
|
||||
MECHANICAL_PUMP_COG = block("mechanical_pump/cog"),
|
||||
FLUID_PIPE_CASING = block("fluid_pipe/casing"), FLUID_VALVE_POINTER = block("fluid_valve/pointer"),
|
||||
|
||||
SPOUT_TOP = block("spout/top"), SPOUT_MIDDLE = block("spout/middle"), SPOUT_BOTTOM = block("spout/bottom"),
|
||||
|
|
|
@ -109,7 +109,7 @@ public class AllShapes {
|
|||
.add(5, -1, 6, 11, 0, 8)
|
||||
.forHorizontal(SOUTH),
|
||||
PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12)
|
||||
.add(3, 12, 3, 13, 16, 13)
|
||||
.add(3, 11, 3, 13, 16, 13)
|
||||
.forDirectional(Direction.UP),
|
||||
CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16).forDirectional(Direction.DOWN),
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ public abstract class PortableStorageInterfaceBlockEntity extends SmartBlockEnti
|
|||
}
|
||||
}
|
||||
|
||||
transferTimer = Math.min(transferTimer, ANIMATION * 2 + getTransferTimeout());
|
||||
transferTimer = Math.min(transferTimer, ANIMATION * 2 + timeUnit);
|
||||
|
||||
boolean timerCanDecrement = transferTimer > ANIMATION || transferTimer > 0 && keepAlive == 0
|
||||
&& (isVirtual() || !level.isClientSide || transferTimer != ANIMATION);
|
||||
|
@ -180,7 +180,7 @@ public abstract class PortableStorageInterfaceBlockEntity extends SmartBlockEnti
|
|||
}
|
||||
|
||||
public void startConnecting() {
|
||||
transferTimer = getTransferTimeout() + ANIMATION * 2;
|
||||
transferTimer = 6 + ANIMATION * 2;
|
||||
}
|
||||
|
||||
public void onContentTransferred() {
|
||||
|
|
|
@ -90,9 +90,13 @@ public class ElevatorContactBlock extends WrenchableDirectionalBlock
|
|||
if (pState.getValue(CALLING))
|
||||
return;
|
||||
|
||||
ElevatorColumn elevatorColumn = ElevatorColumn.getOrCreate(pLevel, getColumnCoords(pLevel, pPos));
|
||||
callToContactAndUpdate(elevatorColumn, pState, pLevel, pPos);
|
||||
}
|
||||
|
||||
public void callToContactAndUpdate(ElevatorColumn elevatorColumn, BlockState pState, Level pLevel, BlockPos pPos) {
|
||||
pLevel.setBlock(pPos, pState.cycle(CALLING), 2);
|
||||
|
||||
ElevatorColumn elevatorColumn = ElevatorColumn.getOrCreate(pLevel, getColumnCoords(pLevel, pPos));
|
||||
for (BlockPos otherPos : elevatorColumn.getContacts()) {
|
||||
if (otherPos.equals(pPos))
|
||||
continue;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.simibubi.create.content.contraptions.components.structureMovement.elevator;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
|
||||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||
|
||||
|
@ -41,7 +40,7 @@ public class ElevatorTargetFloorPacket extends SimplePacketBase {
|
|||
.getEntity(entityId);
|
||||
if (!(entityByID instanceof AbstractContraptionEntity ace))
|
||||
return;
|
||||
if (!(ace.getContraption()instanceof ElevatorContraption ec))
|
||||
if (!(ace.getContraption() instanceof ElevatorContraption ec))
|
||||
return;
|
||||
if (ace.distanceToSqr(sender) > 50 * 50)
|
||||
return;
|
||||
|
@ -53,18 +52,12 @@ public class ElevatorTargetFloorPacket extends SimplePacketBase {
|
|||
if (ec.isTargetUnreachable(targetY))
|
||||
return;
|
||||
|
||||
for (BlockPos otherPos : elevatorColumn.getContacts()) {
|
||||
BlockState otherState = level.getBlockState(otherPos);
|
||||
if (!AllBlocks.ELEVATOR_CONTACT.has(otherState))
|
||||
continue;
|
||||
level.setBlock(otherPos, otherState.setValue(ElevatorContactBlock.CALLING, otherPos.getY() == targetY),
|
||||
2);
|
||||
AllBlocks.ELEVATOR_CONTACT.get()
|
||||
.scheduleActivation(level, otherPos);
|
||||
}
|
||||
BlockPos pos = elevatorColumn.contactAt(targetY);
|
||||
BlockState blockState = level.getBlockState(pos);
|
||||
if (!(blockState.getBlock() instanceof ElevatorContactBlock ecb))
|
||||
return;
|
||||
|
||||
elevatorColumn.target(targetY);
|
||||
elevatorColumn.markDirty();
|
||||
ecb.callToContactAndUpdate(elevatorColumn, blockState, level, pos);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -201,7 +201,7 @@ public class PipeConnection {
|
|||
particleSplashNextTick = false;
|
||||
}
|
||||
|
||||
float flowSpeed = 1 / 32f + Mth.clamp(pressure.get(flow.inbound) / 512f, 0, 1) * 31 / 32f;
|
||||
float flowSpeed = 1 / 32f + Mth.clamp(pressure.get(flow.inbound) / 128f, 0, 1) * 31 / 32f;
|
||||
flow.progress.setValue(Math.min(flow.progress.getValue() + flowSpeed, 1));
|
||||
if (flow.progress.getValue() >= 1)
|
||||
flow.complete = true;
|
||||
|
|
|
@ -32,6 +32,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
import net.minecraft.world.level.material.FluidState;
|
||||
import net.minecraft.world.level.material.Fluids;
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import net.minecraft.world.ticks.TickPriority;
|
||||
|
@ -107,20 +108,33 @@ public class PumpBlock extends DirectionalKineticBlock
|
|||
Player player = context.getPlayer();
|
||||
toPlace = ProperWaterloggedBlock.withWater(level, toPlace, pos);
|
||||
|
||||
if (player != null && player.isSteppingCarefully())
|
||||
return toPlace;
|
||||
Direction nearestLookingDirection = context.getNearestLookingDirection();
|
||||
Direction targetDirection = context.getPlayer() != null && context.getPlayer()
|
||||
.isShiftKeyDown() ? nearestLookingDirection : nearestLookingDirection.getOpposite();
|
||||
Direction bestConnectedDirection = null;
|
||||
double bestDistance = Double.MAX_VALUE;
|
||||
|
||||
for (Direction d : Iterate.directions) {
|
||||
BlockPos adjPos = pos.relative(d);
|
||||
BlockState adjState = level.getBlockState(adjPos);
|
||||
if (!FluidPipeBlock.canConnectTo(level, adjPos, adjState, d))
|
||||
continue;
|
||||
toPlace = toPlace.setValue(FACING, d);
|
||||
if (context.getClickedFace() == d.getOpposite())
|
||||
break;
|
||||
double distance = Vec3.atLowerCornerOf(d.getNormal())
|
||||
.distanceTo(Vec3.atLowerCornerOf(targetDirection.getNormal()));
|
||||
if (distance > bestDistance)
|
||||
continue;
|
||||
bestDistance = distance;
|
||||
bestConnectedDirection = d;
|
||||
}
|
||||
|
||||
return toPlace;
|
||||
if (bestConnectedDirection == null)
|
||||
return toPlace;
|
||||
if (bestConnectedDirection.getAxis() == targetDirection.getAxis())
|
||||
return toPlace;
|
||||
if (player.isSteppingCarefully() && bestConnectedDirection.getAxis() != targetDirection.getAxis())
|
||||
return toPlace;
|
||||
|
||||
return toPlace.setValue(FACING, bestConnectedDirection);
|
||||
}
|
||||
|
||||
public static boolean isPump(BlockState state) {
|
||||
|
|
|
@ -21,8 +21,6 @@ import com.simibubi.create.foundation.utility.BlockFace;
|
|||
import com.simibubi.create.foundation.utility.Couple;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -38,15 +36,14 @@ import net.minecraftforge.fluids.capability.IFluidHandler;
|
|||
|
||||
public class PumpBlockEntity extends KineticBlockEntity {
|
||||
|
||||
LerpedFloat arrowDirection;
|
||||
Couple<MutableBoolean> sidesToUpdate;
|
||||
boolean pressureUpdate;
|
||||
boolean reversed;
|
||||
|
||||
// Backcompat- flips any pump blockstate that loads with reversed=true
|
||||
boolean scheduleFlip;
|
||||
|
||||
public PumpBlockEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
|
||||
super(typeIn, pos, state);
|
||||
arrowDirection = LerpedFloat.linear()
|
||||
.startWithValue(1);
|
||||
sidesToUpdate = Couple.create(MutableBoolean::new);
|
||||
}
|
||||
|
||||
|
@ -58,55 +55,36 @@ public class PumpBlockEntity extends KineticBlockEntity {
|
|||
registerAwardables(behaviours, AllAdvancements.PUMP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
super.initialize();
|
||||
reversed = getSpeed() < 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
float speed = getSpeed();
|
||||
|
||||
if (level.isClientSide) {
|
||||
if (speed == 0)
|
||||
return;
|
||||
arrowDirection.chase(speed >= 0 ? 1 : -1, .5f, Chaser.EXP);
|
||||
arrowDirection.tickChaser();
|
||||
if (!isVirtual())
|
||||
return;
|
||||
if (level.isClientSide && !isVirtual())
|
||||
return;
|
||||
|
||||
if (scheduleFlip) {
|
||||
level.setBlockAndUpdate(worldPosition,
|
||||
getBlockState().setValue(PumpBlock.FACING, getBlockState().getValue(PumpBlock.FACING)
|
||||
.getOpposite()));
|
||||
scheduleFlip = false;
|
||||
}
|
||||
|
||||
// if (pressureUpdate)
|
||||
// updatePressureChange();
|
||||
|
||||
sidesToUpdate.forEachWithContext((update, isFront) -> {
|
||||
if (update.isFalse())
|
||||
return;
|
||||
update.setFalse();
|
||||
distributePressureTo(isFront ? getFront() : getFront().getOpposite());
|
||||
});
|
||||
|
||||
if (speed == 0)
|
||||
return;
|
||||
if (speed < 0 != reversed) {
|
||||
reversed = speed < 0;
|
||||
updatePressureChange();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpeedChanged(float previousSpeed) {
|
||||
super.onSpeedChanged(previousSpeed);
|
||||
|
||||
if (previousSpeed == getSpeed())
|
||||
if (Math.abs(previousSpeed) == Math.abs(getSpeed()))
|
||||
return;
|
||||
if (speed != 0) {
|
||||
reversed = speed < 0;
|
||||
if (speed != 0)
|
||||
award(AllAdvancements.PUMP);
|
||||
}
|
||||
if (level.isClientSide && !isVirtual())
|
||||
return;
|
||||
|
||||
|
@ -126,6 +104,13 @@ public class PumpBlockEntity extends KineticBlockEntity {
|
|||
sidesToUpdate.forEach(MutableBoolean::setTrue);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag compound, boolean clientPacket) {
|
||||
super.read(compound, clientPacket);
|
||||
if (compound.getBoolean("Reversed"))
|
||||
scheduleFlip = true;
|
||||
}
|
||||
|
||||
protected void distributePressureTo(Direction side) {
|
||||
if (getSpeed() == 0)
|
||||
return;
|
||||
|
@ -216,7 +201,7 @@ public class PumpBlockEntity extends KineticBlockEntity {
|
|||
|
||||
float pressure = Math.abs(getSpeed());
|
||||
for (Set<BlockFace> set : validFaces.values()) {
|
||||
int parallelBranches = set.size();
|
||||
int parallelBranches = Math.max(1, set.size() - 1);
|
||||
for (BlockFace face : set) {
|
||||
BlockPos pipePos = face.getPos();
|
||||
Direction pipeSide = face.getFace();
|
||||
|
@ -309,18 +294,6 @@ public class PumpBlockEntity extends KineticBlockEntity {
|
|||
return FluidPropagator.isOpenEnd(world, blockFace.getPos(), face);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(CompoundTag compound, boolean clientPacket) {
|
||||
compound.putBoolean("Reversed", reversed);
|
||||
super.write(compound, clientPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag compound, boolean clientPacket) {
|
||||
reversed = compound.getBoolean("Reversed");
|
||||
super.read(compound, clientPacket);
|
||||
}
|
||||
|
||||
public void updatePipesOnSide(Direction side) {
|
||||
if (!isSideAccessible(side))
|
||||
return;
|
||||
|
@ -359,7 +332,7 @@ public class PumpBlockEntity extends KineticBlockEntity {
|
|||
}
|
||||
|
||||
public boolean isPullingOnSide(boolean front) {
|
||||
return front == reversed;
|
||||
return !front;
|
||||
}
|
||||
|
||||
class PumpFluidTransferBehaviour extends FluidTransportBehaviour {
|
||||
|
|
|
@ -3,74 +3,28 @@ package com.simibubi.create.content.contraptions.fluids;
|
|||
import com.jozufozu.flywheel.api.Instancer;
|
||||
import com.jozufozu.flywheel.api.MaterialManager;
|
||||
import com.jozufozu.flywheel.api.instance.DynamicInstance;
|
||||
import com.jozufozu.flywheel.core.Materials;
|
||||
import com.jozufozu.flywheel.core.materials.model.ModelData;
|
||||
import com.simibubi.create.AllPartialModels;
|
||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public class PumpCogInstance extends SingleRotatingInstance<PumpBlockEntity> implements DynamicInstance {
|
||||
|
||||
private final ModelData[] arrows = new ModelData[2];
|
||||
private final Direction direction = blockState.getValue(PumpBlock.FACING);
|
||||
|
||||
public PumpCogInstance(MaterialManager materialManager, PumpBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
super.init();
|
||||
|
||||
materialManager.defaultSolid()
|
||||
.material(Materials.TRANSFORMED)
|
||||
.getModel(AllPartialModels.MECHANICAL_PUMP_ARROW, blockState)
|
||||
.createInstances(arrows);
|
||||
public PumpCogInstance(MaterialManager materialManager, PumpBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginFrame() {}
|
||||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
float angle = Mth.lerp(blockEntity.arrowDirection.getValue(AnimationTickHolder.getPartialTicks()), 0, 90) - 90;
|
||||
for (int i = 0, arrowsLength = arrows.length; i < arrowsLength; i++) {
|
||||
arrows[i].loadIdentity()
|
||||
.translate(getInstancePosition())
|
||||
.centre()
|
||||
.rotateY(AngleHelper.horizontalAngle(direction) + 180)
|
||||
.rotateX(-AngleHelper.verticalAngle(direction) - 90)
|
||||
.unCentre()
|
||||
.translate(.5, 14 / 16f, .5)
|
||||
.rotateY(90 * i)
|
||||
.rotateZ(angle)
|
||||
.translateBack(.5, 14 / 16f, .5);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLight() {
|
||||
super.updateLight();
|
||||
relight(pos, arrows);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Instancer<RotatingData> getModel() {
|
||||
protected Instancer<RotatingData> getModel() {
|
||||
BlockState referenceState = blockEntity.getBlockState();
|
||||
Direction facing = referenceState.getValue(BlockStateProperties.FACING);
|
||||
return getRotatingMaterial().getModel(AllPartialModels.MECHANICAL_PUMP_COG, referenceState, facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
super.remove();
|
||||
|
||||
for (ModelData arrow : arrows) {
|
||||
arrow.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,12 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
|
||||
import com.jozufozu.flywheel.backend.Backend;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.AllPartialModels;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class PumpRenderer extends KineticBlockEntityRenderer<PumpBlockEntity> {
|
||||
|
||||
|
@ -22,30 +14,6 @@ public class PumpRenderer extends KineticBlockEntityRenderer<PumpBlockEntity> {
|
|||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(PumpBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
super.renderSafe(be, partialTicks, ms, buffer, light, overlay);
|
||||
if (Backend.canUseInstancing(be.getLevel())) return;
|
||||
Vec3 rotationOffset = new Vec3(.5, 14 / 16f, .5);
|
||||
BlockState blockState = be.getBlockState();
|
||||
float angle = Mth.lerp(be.arrowDirection.getValue(partialTicks), 0, 90) - 90;
|
||||
SuperByteBuffer arrow = CachedBufferer.partial(AllPartialModels.MECHANICAL_PUMP_ARROW, blockState);
|
||||
for (float yRot : new float[] { 0, 90 }) {
|
||||
Direction direction = blockState.getValue(PumpBlock.FACING);
|
||||
arrow.centre()
|
||||
.rotateY(AngleHelper.horizontalAngle(direction) + 180)
|
||||
.rotateX(-AngleHelper.verticalAngle(direction) - 90)
|
||||
.unCentre()
|
||||
.translate(rotationOffset)
|
||||
.rotateY(yRot)
|
||||
.rotateZ(angle)
|
||||
.translateBack(rotationOffset)
|
||||
.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.solid()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SuperByteBuffer getRotatedModel(PumpBlockEntity be, BlockState state) {
|
||||
return CachedBufferer.partialFacing(AllPartialModels.MECHANICAL_PUMP_COG, state);
|
||||
|
|
|
@ -5,7 +5,7 @@ public class CLogistics extends ConfigBase {
|
|||
public final ConfigInt defaultExtractionLimit =
|
||||
i(64, 1, 64, "defaultExtractionLimit", Comments.defaultExtractionLimit);
|
||||
public final ConfigInt defaultExtractionTimer = i(8, 1, "defaultExtractionTimer", Comments.defaultExtractionTimer);
|
||||
public final ConfigInt psiTimeout = i(20, 1, "psiTimeout", Comments.psiTimeout);
|
||||
public final ConfigInt psiTimeout = i(60, 1, "psiTimeout", Comments.psiTimeout);
|
||||
public final ConfigInt mechanicalArmRange = i(5, 1, "mechanicalArmRange", Comments.mechanicalArmRange);
|
||||
public final ConfigInt linkRange = i(256, 1, "linkRange", Comments.linkRange);
|
||||
public final ConfigInt displayLinkRange = i(64, 1, "displayLinkRange", Comments.displayLinkRange);
|
||||
|
|
|
@ -1,117 +0,0 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "create:block/large_wheels",
|
||||
"textures": {
|
||||
"4": "create:block/pump",
|
||||
"particle": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [7, 11.5, 1.5],
|
||||
"to": [9, 13.5, 2.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 2, 14, 4], "rotation": 270, "texture": "#4"},
|
||||
"east": {"uv": [12, 2, 14, 3], "rotation": 270, "texture": "#4"},
|
||||
"south": {"uv": [14, 2, 12, 4], "rotation": 90, "texture": "#4"},
|
||||
"west": {"uv": [12, 3, 14, 4], "rotation": 90, "texture": "#4"},
|
||||
"up": {"uv": [12, 3, 14, 4], "texture": "#4"},
|
||||
"down": {"uv": [12, 2, 13, 4], "rotation": 90, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 11.5, 13.5],
|
||||
"to": [9, 13.5, 14.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 6.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 4, 12, 2], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [12, 3, 14, 2], "rotation": 270, "texture": "#4"},
|
||||
"south": {"uv": [12, 4, 14, 2], "rotation": 270, "texture": "#4"},
|
||||
"west": {"uv": [12, 4, 14, 3], "rotation": 90, "texture": "#4"},
|
||||
"up": {"uv": [12, 4, 14, 3], "texture": "#4"},
|
||||
"down": {"uv": [13, 2, 12, 4], "rotation": 90, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 13.5, 1.5],
|
||||
"to": [11, 15.5, 2.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 0, 16, 4], "rotation": 270, "texture": "#4"},
|
||||
"east": {"uv": [14, 0, 16, 1], "rotation": 270, "texture": "#4"},
|
||||
"south": {"uv": [16, 0, 14, 4], "rotation": 90, "texture": "#4"},
|
||||
"west": {"uv": [12, 3, 14, 4], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [15, 0, 16, 4], "rotation": 90, "texture": "#4"},
|
||||
"down": {"uv": [12, 0, 13, 4], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 13.5, 13.5],
|
||||
"to": [11, 15.5, 14.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 6.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [16, 4, 14, 0], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [14, 1, 16, 0], "rotation": 270, "texture": "#4"},
|
||||
"south": {"uv": [14, 4, 16, 0], "rotation": 270, "texture": "#4"},
|
||||
"west": {"uv": [12, 4, 14, 3], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [16, 0, 15, 4], "rotation": 90, "texture": "#4"},
|
||||
"down": {"uv": [13, 0, 12, 4], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod",
|
||||
"from": [7.5, 13.5, 1],
|
||||
"to": [8.5, 14.5, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15.5, 21.5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 15, 1, 16], "texture": "#4"},
|
||||
"east": {"uv": [0, 15, 14, 16], "texture": "#4"},
|
||||
"south": {"uv": [0, 15, 1, 16], "texture": "#4"},
|
||||
"west": {"uv": [0, 15, 14, 16], "texture": "#4"},
|
||||
"up": {"uv": [0, 15, 14, 16], "rotation": 90, "texture": "#4"},
|
||||
"down": {"uv": [0, 15, 14, 16], "rotation": 90, "texture": "#4"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, -149, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, -149, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, -55, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -55, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 1, 1.25],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 45, 0],
|
||||
"translation": [2.5, -0.5, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, 180, 0],
|
||||
"translation": [0, 1.75, -4.5],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "arrow",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -37,17 +37,67 @@
|
|||
},
|
||||
{
|
||||
"name": "front",
|
||||
"from": [3, 12, 3],
|
||||
"from": [3, 11, 3],
|
||||
"to": [13, 16, 13],
|
||||
"rotation": {"angle": 0, "axis": "z", "origin": [8.33333, 8.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"},
|
||||
"south": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"},
|
||||
"west": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"},
|
||||
"north": {"uv": [10.5, 2.5, 13, 7.5], "rotation": 90, "texture": "#2"},
|
||||
"east": {"uv": [10.5, 2.5, 13, 7.5], "rotation": 90, "texture": "#2"},
|
||||
"south": {"uv": [10.5, 2.5, 13, 7.5], "rotation": 90, "texture": "#2"},
|
||||
"west": {"uv": [10.5, 2.5, 13, 7.5], "rotation": 90, "texture": "#2"},
|
||||
"up": {"uv": [11, 11, 16, 16], "texture": "#2"},
|
||||
"down": {"uv": [6, 11, 11, 16], "texture": "#2"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5.85355, 13.25, 1.75],
|
||||
"to": [9.85355, 15.25, 13.75],
|
||||
"rotation": {"angle": 45, "axis": "z", "origin": [8.35355, 13.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [16, 0, 12, 2], "texture": "#4"},
|
||||
"east": {"uv": [15, 0, 16, 2], "texture": "#4"},
|
||||
"south": {"uv": [12, 0, 16, 2], "texture": "#4"},
|
||||
"west": {"uv": [12, 0, 13, 2], "texture": "#4"},
|
||||
"up": {"uv": [12, 0, 16, 1], "texture": "#4"},
|
||||
"down": {"uv": [12, 1, 16, 2], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7.85355, 11.25, 1.75],
|
||||
"to": [9.85355, 13.25, 13.75],
|
||||
"rotation": {"angle": 45, "axis": "z", "origin": [8.35355, 13.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [16, 2, 14, 4], "texture": "#4"},
|
||||
"east": {"uv": [15, 2, 16, 4], "texture": "#4"},
|
||||
"south": {"uv": [14, 2, 16, 4], "texture": "#4"},
|
||||
"west": {"uv": [14, 2, 15, 4], "texture": "#4"},
|
||||
"down": {"uv": [14, 3, 16, 4], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2.35355, 10.75, 7.75],
|
||||
"to": [14.35355, 12.75, 9.75],
|
||||
"rotation": {"angle": -45, "axis": "x", "origin": [8.35355, 13.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 2, 15, 4], "texture": "#4"},
|
||||
"east": {"uv": [16, 2, 14, 4], "texture": "#4"},
|
||||
"south": {"uv": [15, 2, 16, 4], "texture": "#4"},
|
||||
"west": {"uv": [14, 2, 16, 4], "texture": "#4"},
|
||||
"down": {"uv": [14, 3, 16, 4], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2.35355, 12.75, 5.75],
|
||||
"to": [14.35355, 14.75, 9.75],
|
||||
"rotation": {"angle": -45, "axis": "x", "origin": [8.35355, 13.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 0, 13, 2], "texture": "#4"},
|
||||
"east": {"uv": [16, 0, 12, 2], "texture": "#4"},
|
||||
"south": {"uv": [15, 0, 16, 2], "texture": "#4"},
|
||||
"west": {"uv": [12, 0, 16, 2], "texture": "#4"},
|
||||
"up": {"uv": [12, 0, 16, 1], "rotation": 90, "texture": "#4"},
|
||||
"down": {"uv": [12, 1, 16, 2], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
|
@ -87,6 +137,10 @@
|
|||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2]
|
||||
}
|
||||
},
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
]
|
||||
}
|
|
@ -8,72 +8,6 @@
|
|||
"particle": "create:block/pump"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [1, 3, 1.5],
|
||||
"to": [3, 5, 2.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 2, 14, 4], "texture": "#4"},
|
||||
"east": {"uv": [12, 2, 13, 4], "texture": "#4"},
|
||||
"south": {"uv": [14, 2, 12, 4], "texture": "#4"},
|
||||
"west": {"uv": [12, 3, 14, 4], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [12, 2, 14, 3], "rotation": 180, "texture": "#4"},
|
||||
"down": {"uv": [12, 3, 14, 4], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 3, 13.5],
|
||||
"to": [3, 5, 14.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 4, 12, 2], "rotation": 180, "texture": "#4"},
|
||||
"east": {"uv": [13, 2, 12, 4], "texture": "#4"},
|
||||
"south": {"uv": [12, 4, 14, 2], "rotation": 180, "texture": "#4"},
|
||||
"west": {"uv": [12, 4, 14, 3], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [12, 3, 14, 2], "rotation": 180, "texture": "#4"},
|
||||
"down": {"uv": [12, 4, 14, 3], "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, 3, 1.5],
|
||||
"to": [1, 7, 2.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 0, 16, 4], "texture": "#4"},
|
||||
"east": {"uv": [12, 0, 13, 4], "rotation": 180, "texture": "#4"},
|
||||
"south": {"uv": [16, 0, 14, 4], "texture": "#4"},
|
||||
"west": {"uv": [15, 0, 16, 4], "texture": "#4"},
|
||||
"up": {"uv": [14, 0, 16, 1], "rotation": 180, "texture": "#4"},
|
||||
"down": {"uv": [12, 3, 14, 4], "rotation": 180, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, 3, 13.5],
|
||||
"to": [1, 7, 14.5],
|
||||
"rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [16, 4, 14, 0], "rotation": 180, "texture": "#4"},
|
||||
"east": {"uv": [13, 0, 12, 4], "rotation": 180, "texture": "#4"},
|
||||
"south": {"uv": [14, 4, 16, 0], "rotation": 180, "texture": "#4"},
|
||||
"west": {"uv": [16, 0, 15, 4], "texture": "#4"},
|
||||
"up": {"uv": [14, 1, 16, 0], "rotation": 180, "texture": "#4"},
|
||||
"down": {"uv": [12, 4, 14, 3], "rotation": 180, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod",
|
||||
"from": [2, 8, 1],
|
||||
"to": [3, 9, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 16, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 15, 1, 16], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [0, 15, 14, 16], "texture": "#4"},
|
||||
"south": {"uv": [0, 15, 1, 16], "rotation": 270, "texture": "#4"},
|
||||
"west": {"uv": [0, 15, 14, 16], "texture": "#4"},
|
||||
"up": {"uv": [0, 15, 14, 16], "rotation": 270, "texture": "#4"},
|
||||
"down": {"uv": [0, 15, 14, 16], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Gear5",
|
||||
"from": [5.5, 7, -1],
|
||||
|
@ -158,6 +92,20 @@
|
|||
"down": {"uv": [11.5, 15.5, 15.5, 11.5], "texture": "#2"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "front",
|
||||
"from": [0.5, 3.5, 3],
|
||||
"to": [5.5, 13.5, 13],
|
||||
"rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.5, 2.5, 13, 7.5], "rotation": 180, "texture": "#2"},
|
||||
"east": {"uv": [6, 11, 11, 16], "rotation": 270, "texture": "#2"},
|
||||
"south": {"uv": [10.5, 2.5, 13, 7.5], "texture": "#2"},
|
||||
"west": {"uv": [11, 11, 16, 16], "rotation": 270, "texture": "#2"},
|
||||
"up": {"uv": [10.5, 2.5, 13, 7.5], "texture": "#2"},
|
||||
"down": {"uv": [10.5, 2.5, 13, 7.5], "texture": "#2"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"from": [11.5, 2.5, 2],
|
||||
|
@ -173,17 +121,53 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"name": "front",
|
||||
"from": [0.5, 3.5, 3],
|
||||
"to": [4.5, 13.5, 13],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 10.5, 8]},
|
||||
"from": [1.70355, 6.15, 2],
|
||||
"to": [3.70355, 10.15, 14],
|
||||
"rotation": {"angle": 45, "axis": "z", "origin": [3.35355, 8.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 4, 16, 14], "rotation": 180, "texture": "#4"},
|
||||
"east": {"uv": [6, 11, 11, 16], "rotation": 270, "texture": "#2"},
|
||||
"south": {"uv": [12, 4, 16, 14], "texture": "#4"},
|
||||
"west": {"uv": [11, 11, 16, 16], "rotation": 270, "texture": "#2"},
|
||||
"up": {"uv": [12, 4, 16, 14], "texture": "#4"},
|
||||
"down": {"uv": [12, 4, 16, 14], "texture": "#4"}
|
||||
"north": {"uv": [16, 0, 12, 2], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [12, 1, 16, 2], "rotation": 270, "texture": "#4"},
|
||||
"south": {"uv": [12, 0, 16, 2], "rotation": 270, "texture": "#4"},
|
||||
"west": {"uv": [12, 0, 16, 1], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [15, 0, 16, 2], "rotation": 270, "texture": "#4"},
|
||||
"down": {"uv": [12, 0, 13, 2], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.70355, 8.15, 2],
|
||||
"to": [5.70355, 10.15, 14],
|
||||
"rotation": {"angle": 45, "axis": "z", "origin": [3.35355, 8.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [16, 2, 14, 4], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [14, 3, 16, 4], "rotation": 270, "texture": "#4"},
|
||||
"south": {"uv": [14, 2, 16, 4], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [15, 2, 16, 4], "rotation": 270, "texture": "#4"},
|
||||
"down": {"uv": [14, 2, 15, 4], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.85355, 2.5, 7.75],
|
||||
"to": [5.85355, 14.5, 9.75],
|
||||
"rotation": {"angle": -45, "axis": "y", "origin": [3.35355, 8.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 2, 15, 4], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [14, 3, 16, 4], "rotation": 180, "texture": "#4"},
|
||||
"south": {"uv": [15, 2, 16, 4], "rotation": 270, "texture": "#4"},
|
||||
"up": {"uv": [16, 2, 14, 4], "rotation": 270, "texture": "#4"},
|
||||
"down": {"uv": [14, 2, 16, 4], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.85355, 2.5, 5.75],
|
||||
"to": [3.85355, 14.5, 9.75],
|
||||
"rotation": {"angle": -45, "axis": "y", "origin": [3.35355, 8.25, 7.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 0, 13, 2], "rotation": 90, "texture": "#4"},
|
||||
"east": {"uv": [12, 1, 16, 2], "rotation": 180, "texture": "#4"},
|
||||
"south": {"uv": [15, 0, 16, 2], "rotation": 270, "texture": "#4"},
|
||||
"west": {"uv": [12, 0, 16, 1], "texture": "#4"},
|
||||
"up": {"uv": [16, 0, 12, 2], "rotation": 270, "texture": "#4"},
|
||||
"down": {"uv": [12, 0, 16, 2], "rotation": 270, "texture": "#4"}
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -220,22 +204,22 @@
|
|||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "arrow",
|
||||
"name": "cogwheel",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
},
|
||||
{
|
||||
"name": "cogwheel",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [5, 6, 7, 8, 9]
|
||||
},
|
||||
{
|
||||
"name": "pump",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [10, 11, 12]
|
||||
"children": [5, 6, 7]
|
||||
},
|
||||
{
|
||||
"name": "Arrow",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [8, 9, 10, 11]
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 881 B |
Binary file not shown.
Before Width: | Height: | Size: 678 B After Width: | Height: | Size: 684 B |
Loading…
Reference in a new issue