Playtest III

- Can now scroll in the clipboard screen to cycle between pages
- Fixed schematic checklist putting too many entries on a single page
- Fixed funnels losing filters when changing between types
- Fixed smoothed sloped tracks not working across multiple chained slopes
- Improved location transitions of node locations in-between smoothed sloped tracks
- Fixed track placement allowing an s-bend between two sloped track pieces in specific arrangements
- Updated Crushing Wheel obj file
This commit is contained in:
simibubi 2023-04-15 14:34:45 +02:00
parent bdf9584633
commit 7374c9c059
19 changed files with 410 additions and 348 deletions

View file

@ -260,8 +260,8 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour {
}; };
rollerScout.travel(train.graph, lengthWiseOffset + 1, steering); rollerScout.travel(train.graph, lengthWiseOffset + 1, steering);
rollerScout.traversalCallback = rollerScout.traversalCallback = (edge, coords) -> TrackPaverV2.pave(heightProfile, train.graph, edge,
(edge, coords) -> TrackPaverV2.pave(heightProfile, edge, coords.getFirst(), coords.getSecond()); coords.getFirst(), coords.getSecond());
rollerScout.travel(train.graph, distanceToTravel, steering); rollerScout.travel(train.graph, distanceToTravel, steering);
for (Couple<Integer> entry : heightProfile.keys()) for (Couple<Integer> entry : heightProfile.keys())

View file

@ -8,6 +8,7 @@ import java.util.Set;
import com.simibubi.create.content.logistics.trains.BezierConnection; import com.simibubi.create.content.logistics.trains.BezierConnection;
import com.simibubi.create.content.logistics.trains.TrackEdge; import com.simibubi.create.content.logistics.trains.TrackEdge;
import com.simibubi.create.content.logistics.trains.TrackGraph;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.Pair;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
@ -20,7 +21,7 @@ import net.minecraft.world.phys.Vec3;
public class TrackPaverV2 { public class TrackPaverV2 {
public static void pave(PaveTask task, TrackEdge edge, double from, double to) { public static void pave(PaveTask task, TrackGraph graph, TrackEdge edge, double from, double to) {
if (edge.isTurn()) { if (edge.isTurn()) {
paveCurve(task, edge.getTurn(), from, to); paveCurve(task, edge.getTurn(), from, to);
return; return;
@ -34,7 +35,7 @@ public class TrackPaverV2 {
Vec3 direction = VecHelper.clampComponentWise(diff, 1); Vec3 direction = VecHelper.clampComponentWise(diff, 1);
int extent = (int) Math.round((to - from) / direction.length()); int extent = (int) Math.round((to - from) / direction.length());
double length = edge.getLength(); double length = edge.getLength();
BlockPos pos = new BlockPos(edge.getPosition(Mth.clamp(from, 1 / 16f, length - 1 / 16f) / length) BlockPos pos = new BlockPos(edge.getPosition(graph, Mth.clamp(from, 1 / 16f, length - 1 / 16f) / length)
.subtract(0, 0.5, 0)); .subtract(0, 0.5, 0));
paveStraight(task, pos, direction, extent); paveStraight(task, pos, direction, extent);

View file

@ -323,6 +323,12 @@ public class ClipboardScreen extends AbstractSimiScreen {
return false; return false;
} }
@Override
public boolean mouseScrolled(double pMouseX, double pMouseY, double pDelta) {
changePage(pDelta < 0);
return true;
}
@Override @Override
public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) { public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) {
if (pKeyCode == 266) { if (pKeyCode == 266) {

View file

@ -129,7 +129,8 @@ public abstract class AbstractFunnelBlock extends Block implements IBE<FunnelBlo
@Override @Override
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) { public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
IBE.onRemove(state, world, pos, newState); if (state.getBlock() != newState.getBlock() && !isFunnel(newState) || !newState.hasBlockEntity())
IBE.onRemove(state, world, pos, newState);
} }
@Override @Override

View file

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgeData; import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgeData;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
@ -48,7 +50,7 @@ public class TrackEdge {
} }
public Vec3 getDirection(boolean fromFirst) { public Vec3 getDirection(boolean fromFirst) {
return getPosition(fromFirst ? 0.25f : 1).subtract(getPosition(fromFirst ? 0 : 0.75f)) return getPosition(null, fromFirst ? 0.25f : 1).subtract(getPosition(null, fromFirst ? 0 : 0.75f))
.normalize(); .normalize();
} }
@ -56,8 +58,8 @@ public class TrackEdge {
double length = getLength(); double length = getLength();
double step = .5f / length; double step = .5f / length;
t /= length; t /= length;
Vec3 ahead = getPosition(Math.min(1, t + step)); Vec3 ahead = getPosition(null, Math.min(1, t + step));
Vec3 behind = getPosition(Math.max(0, t - step)); Vec3 behind = getPosition(null, Math.max(0, t - step));
return ahead.subtract(behind) return ahead.subtract(behind)
.normalize(); .normalize();
} }
@ -83,9 +85,60 @@ public class TrackEdge {
return !tooFar && isTurn() ? turn.incrementT(currentT, distance) : currentT + distance; return !tooFar && isTurn() ? turn.incrementT(currentT, distance) : currentT + distance;
} }
public Vec3 getPosition(double t) { public Vec3 getPosition(@Nullable TrackGraph trackGraph, double t) {
return isTurn() ? turn.getPosition(Mth.clamp(t, 0, 1)) if (isTurn())
: VecHelper.lerp((float) t, node1.location.getLocation(), node2.location.getLocation()); return turn.getPosition(Mth.clamp(t, 0, 1));
if (trackGraph != null && (node1.location.yOffsetPixels != 0 || node2.location.yOffsetPixels != 0)) {
Vec3 positionSmoothed = getPositionSmoothed(trackGraph, t);
if (positionSmoothed != null)
return positionSmoothed;
}
return VecHelper.lerp((float) t, node1.location.getLocation(), node2.location.getLocation());
}
public Vec3 getNormal(@Nullable TrackGraph trackGraph, double t) {
if (isTurn())
return turn.getNormal(Mth.clamp(t, 0, 1));
if (trackGraph != null && (node1.location.yOffsetPixels != 0 || node2.location.yOffsetPixels != 0)) {
Vec3 normalSmoothed = getNormalSmoothed(trackGraph, t);
if (normalSmoothed != null)
return normalSmoothed;
}
return node1.getNormal();
}
@Nullable
public Vec3 getPositionSmoothed(TrackGraph trackGraph, double t) {
Vec3 node1Location = null;
Vec3 node2Location = null;
for (TrackEdge trackEdge : trackGraph.getConnectionsFrom(node1)
.values())
if (trackEdge.isTurn())
node1Location = trackEdge.getPosition(trackGraph, 0);
for (TrackEdge trackEdge : trackGraph.getConnectionsFrom(node2)
.values())
if (trackEdge.isTurn())
node2Location = trackEdge.getPosition(trackGraph, 0);
if (node1Location == null || node2Location == null)
return null;
return VecHelper.lerp((float) t, node1Location, node2Location);
}
@Nullable
public Vec3 getNormalSmoothed(TrackGraph trackGraph, double t) {
Vec3 node1Normal = null;
Vec3 node2Normal = null;
for (TrackEdge trackEdge : trackGraph.getConnectionsFrom(node1)
.values())
if (trackEdge.isTurn())
node1Normal = trackEdge.getNormal(trackGraph, 0);
for (TrackEdge trackEdge : trackGraph.getConnectionsFrom(node2)
.values())
if (trackEdge.isTurn())
node2Normal = trackEdge.getNormal(trackGraph, 0);
if (node1Normal == null || node2Normal == null)
return null;
return VecHelper.lerp(0.5f, node1Normal, node2Normal);
} }
public Collection<double[]> getIntersection(TrackNode node1, TrackNode node2, TrackEdge other, TrackNode other1, public Collection<double[]> getIntersection(TrackNode node1, TrackNode node2, TrackEdge other, TrackNode other1,
@ -123,7 +176,7 @@ public class TrackEdge {
for (int i = 0; i < turn.getSegmentCount(); i++) { for (int i = 0; i < turn.getSegmentCount(); i++) {
double tOffset = t; double tOffset = t;
t += .5; t += .5;
seg2 = getPosition(t / getLength()); seg2 = getPosition(null, t / getLength());
double[] intersection = VecHelper.intersectRanged(seg1, w1, seg2, w2, Axis.Y); double[] intersection = VecHelper.intersectRanged(seg1, w1, seg2, w2, Axis.Y);
seg1 = seg2; seg1 = seg2;
if (intersection == null) if (intersection == null)
@ -146,7 +199,7 @@ public class TrackEdge {
for (int i = 0; i < turn.getSegmentCount(); i++) { for (int i = 0; i < turn.getSegmentCount(); i++) {
double tOffset = t; double tOffset = t;
t += .5; t += .5;
seg2 = getPosition(t / getLength()); seg2 = getPosition(null, t / getLength());
Vec3 otherSeg1 = w1; Vec3 otherSeg1 = w1;
Vec3 otherSeg2 = null; Vec3 otherSeg2 = null;
@ -155,7 +208,7 @@ public class TrackEdge {
for (int j = 0; j < other.turn.getSegmentCount(); j++) { for (int j = 0; j < other.turn.getSegmentCount(); j++) {
double uOffset = u; double uOffset = u;
u += .5; u += .5;
otherSeg2 = other.getPosition(u / other.getLength()); otherSeg2 = other.getPosition(null, u / other.getLength());
double[] intersection = VecHelper.intersectRanged(seg1, otherSeg1, seg2, otherSeg2, Axis.Y); double[] intersection = VecHelper.intersectRanged(seg1, otherSeg1, seg2, otherSeg2, Axis.Y);
otherSeg1 = otherSeg2; otherSeg1 = otherSeg2;
@ -174,10 +227,6 @@ public class TrackEdge {
return intersections; return intersections;
} }
public Vec3 getNormal(TrackNode node1, TrackNode node2, double t) {
return isTurn() ? turn.getNormal(Mth.clamp(t, 0, 1)) : node1.getNormal();
}
public CompoundTag write(DimensionPalette dimensions) { public CompoundTag write(DimensionPalette dimensions) {
CompoundTag baseCompound = isTurn() ? turn.write(BlockPos.ZERO) : new CompoundTag(); CompoundTag baseCompound = isTurn() ? turn.write(BlockPos.ZERO) : new CompoundTag();
baseCompound.put("Signals", edgeData.write(dimensions)); baseCompound.put("Signals", edgeData.write(dimensions));

View file

@ -71,8 +71,8 @@ public class TrackGraphVisualizer {
continue; continue;
Vec3 yOffset = new Vec3(0, (other.hashCode() > hashCode ? 6 : 5) / 64f, 0); Vec3 yOffset = new Vec3(0, (other.hashCode() > hashCode ? 6 : 5) / 64f, 0);
Vec3 startPoint = edge.getPosition(0); Vec3 startPoint = edge.getPosition(graph, 0);
Vec3 endPoint = edge.getPosition(1); Vec3 endPoint = edge.getPosition(graph, 1);
if (!edge.isTurn()) { if (!edge.isTurn()) {
@ -91,11 +91,13 @@ public class TrackGraphVisualizer {
group = allGroups.get(boundary.getGroup(node)); group = allGroups.get(boundary.getGroup(node));
if (group != null) if (group != null)
outliner.showLine(Pair.of(boundary, edge), outliner
edge.getPosition(prev + (prev == 0 ? 0 : 1 / 16f / length)) .showLine(Pair.of(boundary, edge),
.add(yOffset), edge.getPosition(graph, prev + (prev == 0 ? 0 : 1 / 16f / length))
edge.getPosition((prev = boundary.getLocationOn(edge) / length) - 1 / 16f / length) .add(yOffset),
.add(yOffset)) edge.getPosition(graph,
(prev = boundary.getLocationOn(edge) / length) - 1 / 16f / length)
.add(yOffset))
.colored(group.color.get()) .colored(group.color.get())
.lineWidth(width); .lineWidth(width);
@ -104,7 +106,7 @@ public class TrackGraphVisualizer {
if (prevBoundary != null) { if (prevBoundary != null) {
group = allGroups.get(prevBoundary.getGroup(other)); group = allGroups.get(prevBoundary.getGroup(other));
if (group != null) if (group != null)
outliner.showLine(edge, edge.getPosition(prev + 1 / 16f / length) outliner.showLine(edge, edge.getPosition(graph, prev + 1 / 16f / length)
.add(yOffset), endPoint.add(yOffset)) .add(yOffset), endPoint.add(yOffset))
.colored(group.color.get()) .colored(group.color.get())
.lineWidth(width); .lineWidth(width);
@ -154,16 +156,18 @@ public class TrackGraphVisualizer {
for (int i = 0; i <= turn.getSegmentCount(); i++) { for (int i = 0; i <= turn.getSegmentCount(); i++) {
double f = i * 1f / turn.getSegmentCount(); double f = i * 1f / turn.getSegmentCount();
double position = f * turn.getLength(); double position = f * turn.getLength();
Vec3 current = edge.getPosition(f); Vec3 current = edge.getPosition(graph, f);
if (previous != null) { if (previous != null) {
if (currentBoundary != null && position > currentBoundaryPosition) { if (currentBoundary != null && position > currentBoundaryPosition) {
current = edge.getPosition((currentBoundaryPosition - width) / turn.getLength()); current =
edge.getPosition(graph, (currentBoundaryPosition - width) / turn.getLength());
outliner outliner
.showLine(Pair.of(edge, previous), previous.add(yOffset), current.add(yOffset)) .showLine(Pair.of(edge, previous), previous.add(yOffset), current.add(yOffset))
.colored(currentColour) .colored(currentColour)
.lineWidth(width); .lineWidth(width);
current = edge.getPosition((currentBoundaryPosition + width) / turn.getLength()); current =
edge.getPosition(graph, (currentBoundaryPosition + width) / turn.getLength());
previous = current; previous = current;
UUID newId = currentBoundary.getGroup(other); UUID newId = currentBoundary.getGroup(other);
if (newId != null && allGroups.containsKey(newId)) if (newId != null && allGroups.containsKey(newId))
@ -197,7 +201,7 @@ public class TrackGraphVisualizer {
Vec3 previous = null; Vec3 previous = null;
BezierConnection turn = edge.getTurn(); BezierConnection turn = edge.getTurn();
for (int i = 0; i <= turn.getSegmentCount(); i++) { for (int i = 0; i <= turn.getSegmentCount(); i++) {
Vec3 current = edge.getPosition(i * 1f / turn.getSegmentCount()); Vec3 current = edge.getPosition(graph, i * 1f / turn.getSegmentCount());
if (previous != null) if (previous != null)
outliner.showLine(Pair.of(edge, previous), previous.add(yOffset), current.add(yOffset)) outliner.showLine(Pair.of(edge, previous), previous.add(yOffset), current.add(yOffset))
.colored(singleEdgeGroup.color.get()) .colored(singleEdgeGroup.color.get())
@ -262,9 +266,9 @@ public class TrackGraphVisualizer {
yOffset = new Vec3(0, (other.hashCode() > hashCode ? 6 : 4) / 16f, 0); yOffset = new Vec3(0, (other.hashCode() > hashCode ? 6 : 4) / 16f, 0);
if (!edge.isTurn()) { if (!edge.isTurn()) {
CreateClient.OUTLINER.showLine(edge, edge.getPosition(0) CreateClient.OUTLINER.showLine(edge, edge.getPosition(graph, 0)
.add(yOffset), .add(yOffset),
edge.getPosition(1) edge.getPosition(graph, 1)
.add(yOffset)) .add(yOffset))
.colored(graph.color) .colored(graph.color)
.lineWidth(1 / 16f); .lineWidth(1 / 16f);
@ -274,7 +278,7 @@ public class TrackGraphVisualizer {
Vec3 previous = null; Vec3 previous = null;
BezierConnection turn = edge.getTurn(); BezierConnection turn = edge.getTurn();
for (int i = 0; i <= turn.getSegmentCount(); i++) { for (int i = 0; i <= turn.getSegmentCount(); i++) {
Vec3 current = edge.getPosition(i * 1f / turn.getSegmentCount()); Vec3 current = edge.getPosition(graph, i * 1f / turn.getSegmentCount());
if (previous != null) if (previous != null)
CreateClient.OUTLINER CreateClient.OUTLINER
.showLine(Pair.of(edge, previous), previous.add(yOffset), current.add(yOffset)) .showLine(Pair.of(edge, previous), previous.add(yOffset), current.add(yOffset))

View file

@ -16,8 +16,6 @@ import java.util.function.Function;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.server.MinecraftServer;
import org.apache.commons.lang3.mutable.MutableDouble; import org.apache.commons.lang3.mutable.MutableDouble;
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
@ -37,6 +35,7 @@ import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -334,12 +333,14 @@ public class Carriage {
} else { } else {
if (dimension.equals(otherDimension)) { if (dimension.equals(otherDimension)) {
dce.rotationAnchors = leadingBogey.points.map(TravellingPoint::getPosition); dce.rotationAnchors = leadingBogey.points.map(tp -> tp.getPosition(train.graph));
} else { } else {
dce.rotationAnchors.setFirst(leadingBogey.points.getFirst() == point ? point.getPosition() dce.rotationAnchors
: pivoted(dce, dimension, point, leadingWheelSpacing)); .setFirst(leadingBogey.points.getFirst() == point ? point.getPosition(train.graph)
dce.rotationAnchors.setSecond(leadingBogey.points.getSecond() == point ? point.getPosition() : pivoted(dce, dimension, point, leadingWheelSpacing));
: pivoted(dce, dimension, point, leadingWheelSpacing)); dce.rotationAnchors
.setSecond(leadingBogey.points.getSecond() == point ? point.getPosition(train.graph)
: pivoted(dce, dimension, point, leadingWheelSpacing));
} }
} }
@ -363,7 +364,7 @@ public class Carriage {
TrackNodeLocation pivot = dce.findPivot(dimension, start == getLeadingPoint()); TrackNodeLocation pivot = dce.findPivot(dimension, start == getLeadingPoint());
if (pivot == null) if (pivot == null)
return null; return null;
Vec3 startVec = start.getPosition(); Vec3 startVec = start.getPosition(train.graph);
Vec3 portalVec = pivot.getLocation() Vec3 portalVec = pivot.getLocation()
.add(0, 1, 0); .add(0, 1, 0);
return VecHelper.lerp((float) (offset / startVec.distanceTo(portalVec)), startVec, portalVec); return VecHelper.lerp((float) (offset / startVec.distanceTo(portalVec)), startVec, portalVec);

View file

@ -79,8 +79,8 @@ public class CarriageBogey {
yRot = -90 + entity.yaw; yRot = -90 + entity.yaw;
xRot = 0; xRot = 0;
} else { } else {
Vec3 positionVec = leading().getPosition(); Vec3 positionVec = leading().getPosition(carriage.train.graph);
Vec3 coupledVec = trailing().getPosition(); Vec3 coupledVec = trailing().getPosition(carriage.train.graph);
double diffX = positionVec.x - coupledVec.x; double diffX = positionVec.x - coupledVec.x;
double diffY = positionVec.y - coupledVec.y; double diffY = positionVec.y - coupledVec.y;
double diffZ = positionVec.z - coupledVec.z; double diffZ = positionVec.z - coupledVec.z;
@ -112,8 +112,8 @@ public class CarriageBogey {
return 0; return 0;
if (carriage.train.derailed) if (carriage.train.derailed)
return 0; return 0;
return type.getWheelPointSpacing() - leading().getPosition() return type.getWheelPointSpacing() - leading().getPosition(carriage.train.graph)
.distanceTo(trailing().getPosition()); .distanceTo(trailing().getPosition(carriage.train.graph));
} }
@Nullable @Nullable
@ -121,9 +121,9 @@ public class CarriageBogey {
if (leading().edge == null) if (leading().edge == null)
return null; return null;
return points.getFirst() return points.getFirst()
.getPosition() .getPosition(carriage.train.graph)
.add(points.getSecond() .add(points.getSecond()
.getPosition()) .getPosition(carriage.train.graph))
.scale(.5); .scale(.5);
} }

View file

@ -589,8 +589,8 @@ public class Train {
if (!dimension.equals(trailingPoint.node1.getLocation().dimension)) if (!dimension.equals(trailingPoint.node1.getLocation().dimension))
return; return;
Vec3 start = (speed < 0 ? trailingPoint : leadingPoint).getPosition(); Vec3 start = (speed < 0 ? trailingPoint : leadingPoint).getPosition(graph);
Vec3 end = (speed < 0 ? leadingPoint : trailingPoint).getPosition(); Vec3 end = (speed < 0 ? leadingPoint : trailingPoint).getPosition(graph);
Pair<Train, Vec3> collision = findCollidingTrain(level, start, end, this, dimension); Pair<Train, Vec3> collision = findCollidingTrain(level, start, end, this, dimension);
if (collision == null) if (collision == null)
@ -632,8 +632,8 @@ public class Train {
if (!otherDimension.equals(dimension)) if (!otherDimension.equals(dimension))
continue; continue;
Vec3 start2 = otherLeading.getPosition(); Vec3 start2 = otherLeading.getPosition(train.graph);
Vec3 end2 = otherTrailing.getPosition(); Vec3 end2 = otherTrailing.getPosition(train.graph);
if (betweenBits) { if (betweenBits) {
end2 = start2; end2 = start2;
start2 = lastPoint; start2 = lastPoint;

View file

@ -27,7 +27,7 @@ public class TrainMigration {
public TrainMigration(TravellingPoint point) { public TrainMigration(TravellingPoint point) {
double t = point.position / point.edge.getLength(); double t = point.position / point.edge.getLength();
fallback = point.edge.getPosition(t); fallback = point.edge.getPosition(null, t);
curve = point.edge.isTurn(); curve = point.edge.isTurn();
positionOnOldEdge = point.position; positionOnOldEdge = point.position;
locations = Couple.create(point.node1.getLocation(), point.node2.getLocation()); locations = Couple.create(point.node1.getLocation(), point.node2.getLocation());

View file

@ -189,7 +189,7 @@ public class TrainRelocator {
List<Vec3> recordedVecs = new ArrayList<>(); List<Vec3> recordedVecs = new ArrayList<>();
Consumer<TravellingPoint> recorder = tp -> { Consumer<TravellingPoint> recorder = tp -> {
recordedLocations.add(Pair.of(Couple.create(tp.node1, tp.node2), tp.position)); recordedLocations.add(Pair.of(Couple.create(tp.node1, tp.node2), tp.position));
recordedVecs.add(tp.getPosition()); recordedVecs.add(tp.getPosition(graph));
}; };
ITrackSelector steer = probe.steer(SteerDirection.NONE, track.getUpNormal(level, pos, blockState)); ITrackSelector steer = probe.steer(SteerDirection.NONE, track.getUpNormal(level, pos, blockState));
MutableBoolean blocked = new MutableBoolean(false); MutableBoolean blocked = new MutableBoolean(false);

View file

@ -394,15 +394,14 @@ public class TravellingPoint {
.get(node2); .get(node2);
} }
public Vec3 getPosition() { public Vec3 getPosition(@Nullable TrackGraph trackGraph) {
return getPositionWithOffset(0); return getPositionWithOffset(trackGraph, 0);
} }
public Vec3 getPositionWithOffset(double offset) { public Vec3 getPositionWithOffset(@Nullable TrackGraph trackGraph, double offset) {
double t = (position + offset) / edge.getLength(); double t = (position + offset) / edge.getLength();
return edge.getPosition(t) return edge.getPosition(trackGraph, t)
.add(edge.getNormal(node1, node2, t) .add(edge.getNormal(trackGraph, t));
.scale(1));
} }
public void migrateTo(List<GraphLocation> locations) { public void migrateTo(List<GraphLocation> locations) {

View file

@ -58,8 +58,6 @@ public class TrackBlockEntityTilt {
for (BezierConnection bezierConnection : blockEntity.connections.values()) { for (BezierConnection bezierConnection : blockEntity.connections.values()) {
if (bezierConnection.starts.getFirst().y == bezierConnection.starts.getSecond().y) if (bezierConnection.starts.getFirst().y == bezierConnection.starts.getSecond().y)
continue; continue;
if (bezierConnection.axes.getSecond().y != 0)
continue;
Vec3 normedAxis = bezierConnection.axes.getFirst() Vec3 normedAxis = bezierConnection.axes.getFirst()
.normalize(); .normalize();

View file

@ -220,7 +220,7 @@ public class TrackPlacement {
info.end1Extent = (int) Math.round((dist + 1) / axis1.length()); info.end1Extent = (int) Math.round((dist + 1) / axis1.length());
} else { } else {
if (!Mth.equal(ascend, 0)) if (!Mth.equal(ascend, 0) || normedAxis1.y != 0)
return info.withMessage("ascending_s_curve"); return info.withMessage("ascending_s_curve");
double targetT = u <= 1 ? 3 : u * 2; double targetT = u <= 1 ? 3 : u * 2;

View file

@ -205,7 +205,7 @@ public class MaterialChecklist {
} }
for (Item item : completed) { for (Item item : completed) {
if (itemsWritten == MAX_ENTRIES_PER_PAGE) { if (itemsWritten == MAX_ENTRIES_PER_CLIPBOARD_PAGE) {
itemsWritten = 0; itemsWritten = 0;
currentPage.add(new ClipboardEntry(true, Components.literal(">>>") currentPage.add(new ClipboardEntry(true, Components.literal(">>>")
.withStyle(ChatFormatting.DARK_GREEN))); .withStyle(ChatFormatting.DARK_GREEN)));

View file

@ -13,5 +13,5 @@ map_Kd #axis
newmtl m_axis_top newmtl m_axis_top
map_Kd #axis_top map_Kd #axis_top
newmtl m_spruce_log_top.001 newmtl m_spruce_log_top
map_Kd #spruce_log_top map_Kd #spruce_log_top

View file

@ -1,141 +1,141 @@
# Blender 3.4.1 # Blender 3.5.0
# www.blender.org # www.blender.org
mtllib crushing_wheel.mtl mtllib crushing_wheel.mtl
o Cube.003 o Cube.004
v 0.882683 0.125000 1.423879 v 0.882683 0.120000 1.423879
v -0.207106 0.125000 -0.207107 v -0.207106 0.120000 -0.207107
v -0.353554 0.125000 0.853552 v -0.353554 0.120000 0.853552
v 0.146446 0.125000 1.353553 v 0.146446 0.120000 1.353553
v -0.207107 0.125000 1.207106 v -0.207107 0.120000 1.207106
v 0.499999 0.125000 1.500000 v 0.499999 0.120000 1.500000
v 1.353553 0.125000 0.853554 v 1.353553 0.120000 0.853554
v 0.625000 0.000000 0.375000 v 0.625000 0.000000 0.375000
v 0.375000 0.000000 0.375000 v 0.375000 0.000000 0.375000
v 0.625000 0.000000 0.625000 v 0.625000 0.000000 0.625000
v 0.375000 0.000000 0.625000 v 0.375000 0.000000 0.625000
v 0.375000 0.500000 0.375000 v 0.375000 0.495000 0.375000
v 0.625000 0.500000 0.375000 v 0.625000 0.495000 0.375000
v 0.625000 0.500000 0.625000 v 0.625000 0.495000 0.625000
v 0.375000 0.500000 0.625000 v 0.375000 0.495000 0.625000
v 1.423879 0.875000 0.500000 v 1.423879 0.880000 0.500000
v 1.423880 0.875000 0.117317 v 1.423880 0.880000 0.117317
v 0.853554 0.875000 -0.353553 v 0.853554 0.880000 -0.353553
v 0.882684 0.875000 -0.423880 v 0.882684 0.880000 -0.423880
v 0.500000 0.875000 -0.500000 v 0.500000 0.880000 -0.500000
v -0.153281 0.875000 -0.153282 v -0.153281 0.880000 -0.153282
v -0.353554 0.875000 0.853552 v -0.353554 0.880000 0.853552
v -0.500000 0.875000 0.499999 v -0.500000 0.880000 0.499999
v -0.423880 0.875000 0.499999 v -0.423880 0.880000 0.499999
v -0.423880 0.875000 0.882683 v -0.423880 0.880000 0.882682
v 0.117317 0.875000 -0.423880 v 0.117317 0.880000 -0.423880
v -0.353553 0.875000 0.146446 v -0.353553 0.880000 0.146446
v -0.423879 0.875000 0.117316 v -0.423879 0.880000 0.117316
v 0.625000 1.000000 0.375000 v 0.625000 1.000000 0.375000
v 0.375000 1.000000 0.375000 v 0.375000 1.000000 0.375000
v 0.625000 1.000000 0.625000 v 0.625000 1.000000 0.625000
v 0.375000 1.000000 0.625000 v 0.375000 1.000000 0.625000
v 0.117316 0.125000 1.500000 v 0.117316 0.120000 1.500000
v 0.529130 0.125000 1.570326 v 0.529130 0.120000 1.570326
v 0.117316 0.125000 1.423879 v 0.117316 0.120000 1.423879
v 0.499999 0.875000 1.423879 v 0.499999 0.880000 1.423879
v 0.117316 0.875000 1.500000 v 0.117316 0.880000 1.500000
v 0.499999 0.875000 1.500000 v 0.499999 0.880000 1.500000
v 0.117316 0.875000 1.423879 v 0.117316 0.880000 1.423879
v 0.853553 0.875000 1.353553 v 0.853553 0.880000 1.353553
v 0.529130 0.875000 1.570326 v 0.529130 0.880000 1.570326
v 0.882683 0.875000 1.423879 v 0.882683 0.880000 1.423879
v 0.936508 0.125000 1.477705 v 0.936508 0.120000 1.477705
v 1.277432 0.125000 1.236237 v 1.277432 0.120000 1.236237
v 1.207106 0.125000 1.207107 v 1.207106 0.120000 1.207107
v 1.423879 0.125000 0.882684 v 1.423879 0.120000 0.882684
v 1.153281 0.875000 1.153282 v 1.153281 0.880000 1.153282
v 0.936508 0.875000 1.477705 v 0.936508 0.880000 1.477705
v 1.207106 0.875000 1.207107 v 1.207106 0.880000 1.207107
v 1.353553 0.875000 0.853554 v 1.353553 0.880000 0.853554
v 1.277432 0.875000 1.236237 v 1.277432 0.880000 1.236237
v 1.423879 0.875000 0.882684 v 1.423879 0.880000 0.882684
v 1.570326 0.125000 0.470871 v 1.570326 0.120000 0.470871
v 1.500000 0.125000 0.882684 v 1.500000 0.120000 0.882684
v 1.500000 0.125000 0.500001 v 1.500000 0.120000 0.500001
v 1.353553 0.125000 0.146447 v 1.353553 0.120000 0.146447
v 1.423879 0.125000 0.117317 v 1.423879 0.120000 0.117317
v 1.500000 0.875000 0.882684 v 1.500000 0.880000 0.882684
v 1.500000 0.875000 0.500001 v 1.500000 0.880000 0.500001
v 1.570326 0.875000 0.470871 v 1.570326 0.880000 0.470871
v 1.477705 0.125000 0.063492 v 1.477705 0.120000 0.063492
v 1.207107 0.125000 -0.207106 v 1.207107 0.120000 -0.207106
v 0.853554 0.125000 -0.353553 v 0.853554 0.120000 -0.353553
v 1.236237 0.125000 -0.277432 v 1.236237 0.120000 -0.277432
v 0.882684 0.125000 -0.423879 v 0.882684 0.120000 -0.423879
v 1.236237 0.875000 -0.277432 v 1.236237 0.880000 -0.277432
v 1.153282 0.875000 -0.153281 v 1.153282 0.880000 -0.153281
v 1.477705 0.875000 0.063492 v 1.477705 0.880000 0.063492
v 0.500001 0.125000 -0.423879 v 0.500001 0.120000 -0.423879
v 0.882684 0.125000 -0.500000 v 0.882684 0.120000 -0.500000
v 0.500001 0.125000 -0.500000 v 0.500001 0.120000 -0.500000
v 0.146447 0.125000 -0.353553 v 0.146447 0.120000 -0.353553
v 0.470870 0.125000 -0.570326 v 0.470870 0.120000 -0.570326
v 0.117317 0.125000 -0.423879 v 0.117317 0.120000 -0.423879
v 0.882684 0.875000 -0.500000 v 0.882684 0.880000 -0.500000
v 0.470870 0.875000 -0.570326 v 0.470870 0.880000 -0.570326
v -0.153281 0.125000 -0.153282 v -0.153281 0.120000 -0.153282
v 0.063492 0.125000 -0.477705 v 0.063492 0.120000 -0.477705
v -0.353553 0.125000 0.146446 v -0.353553 0.120000 0.146446
v -0.277433 0.125000 -0.236237 v -0.277433 0.120000 -0.236237
v 0.063492 0.875000 -0.477705 v 0.063492 0.880000 -0.477705
v -0.277433 0.875000 -0.236237 v -0.277433 0.880000 -0.236237
v -0.423879 0.125000 0.500000 v -0.423879 0.120000 0.500000
v -0.500000 0.125000 0.117317 v -0.500000 0.120000 0.117317
v -0.423879 0.125000 0.117316 v -0.423879 0.120000 0.117316
v -0.570326 0.125000 0.529130 v -0.570326 0.120000 0.529130
v -0.500000 0.875000 0.117317 v -0.500000 0.880000 0.117316
v -0.570326 0.875000 0.529130 v -0.570326 0.880000 0.529130
v -0.477705 0.125000 0.936509 v -0.477705 0.120000 0.936509
v -0.236236 0.125000 1.277433 v -0.236236 0.120000 1.277433
v -0.153281 0.875000 1.153281 v -0.153281 0.880000 1.153281
v -0.477705 0.875000 0.936509 v -0.477705 0.880000 0.936509
v -0.207106 0.875000 1.207107 v -0.207106 0.880000 1.207107
v 0.146447 0.875000 1.353553 v 0.146447 0.880000 1.353553
v -0.236236 0.875000 1.277433 v -0.236236 0.880000 1.277433
v 0.853553 0.125000 1.353553 v 0.853553 0.120000 1.353553
v 0.500000 0.125000 0.500000 v 0.500000 0.120000 0.500000
v 0.500000 0.125000 1.423879 v 0.500000 0.120000 1.423879
v 1.423879 0.125000 0.500000 v 1.423879 0.120000 0.500000
v 1.153281 0.125000 -0.153281 v 1.153281 0.120000 -0.153281
v -0.500000 0.125000 0.499999 v -0.500000 0.120000 0.499999
v -0.423880 0.125000 0.882682 v -0.423880 0.120000 0.882682
v -0.153282 0.125000 1.153281 v -0.153282 0.120000 1.153281
v 1.153281 0.125000 1.153281 v 1.153281 0.120000 1.153281
v -0.030330 0.125000 -0.030331 v -0.030330 0.120000 -0.030331
v -0.250000 0.125000 0.810659 v -0.250000 0.120000 0.810659
v 1.250000 0.125000 0.500000 v 1.250000 0.120000 0.500000
v 0.500000 0.125000 -0.250000 v 0.500000 0.120000 -0.250000
v -0.030331 0.125000 1.030330 v -0.030331 0.120000 1.030330
v 0.810661 0.125000 -0.250000 v 0.810661 0.120000 -0.250000
v 1.030330 0.125000 1.030330 v 1.030330 0.120000 1.030330
v -0.250000 0.125000 0.189339 v -0.250000 0.120000 0.189339
v 1.250000 0.125000 0.810660 v 1.250000 0.120000 0.810660
v 0.189339 0.125000 1.250000 v 0.189339 0.120000 1.250000
v 1.030330 0.125000 -0.030330 v 1.030330 0.120000 -0.030330
v 0.810660 0.125000 1.250000 v 0.810660 0.120000 1.250000
v 1.250000 0.125000 0.189340 v 1.250000 0.120000 0.189340
v 0.189340 0.125000 -0.250000 v 0.189340 0.120000 -0.250000
v -0.250000 0.125000 0.500000 v -0.250000 0.120000 0.500000
v 0.500000 0.125000 1.250000 v 0.500000 0.120000 1.250000
v 0.500000 0.875000 0.500000 v 0.500000 0.880000 0.500000
v -0.207106 0.875000 -0.207107 v -0.207106 0.880000 -0.207107
v 0.146447 0.875000 -0.353554 v 0.146447 0.880000 -0.353554
v 1.353553 0.875000 0.146447 v 1.353553 0.880000 0.146447
v 1.207107 0.875000 -0.207106 v 1.207107 0.880000 -0.207106
v 0.500000 0.875000 -0.423879 v 0.500000 0.880000 -0.423879
v 1.250000 0.875000 0.500000 v 1.250000 0.880000 0.500000
v 1.030330 0.875000 1.030330 v 1.030330 0.880000 1.030330
v -0.250000 0.875000 0.189339 v -0.250000 0.880000 0.189339
v 1.030330 0.875000 -0.030330 v 1.030330 0.880000 -0.030330
v 0.810660 0.875000 1.250000 v 0.810660 0.880000 1.250000
v 1.250000 0.875000 0.189340 v 1.250000 0.880000 0.189340
v 0.189340 0.875000 -0.250000 v 0.189340 0.880000 -0.250000
v 0.500000 0.875000 1.250000 v 0.500000 0.880000 1.250000
v 0.750000 0.937500 0.750000 v 0.750000 0.937500 0.750000
v 0.250000 0.937500 0.750000 v 0.250000 0.937500 0.750000
v 0.250000 0.062500 0.750000 v 0.250000 0.062500 0.750000
@ -144,110 +144,110 @@ v 0.750000 0.937500 0.250000
v 0.750000 0.062500 0.250000 v 0.750000 0.062500 0.250000
v 0.250000 0.937500 0.250000 v 0.250000 0.937500 0.250000
v 0.250000 0.062500 0.250000 v 0.250000 0.062500 0.250000
v 1.062500 0.125000 0.732995 v 1.062500 0.120000 0.732995
v 0.897747 0.125000 0.897748 v 0.897747 0.120000 0.897748
v 0.897748 0.125000 0.102252 v 0.897748 0.120000 0.102252
v 0.732995 0.125000 1.062500 v 0.732995 0.120000 1.062500
v 0.267005 0.125000 -0.062500 v 0.267005 0.120000 -0.062500
v 0.500000 0.125000 1.062500 v 0.500000 0.120000 1.062500
v 1.062500 0.125000 0.267005 v 1.062500 0.120000 0.267005
v 0.102252 0.125000 0.102252 v 0.102252 0.120000 0.102252
v -0.062500 0.125000 0.500000 v -0.062500 0.120000 0.500000
v -0.062500 0.125000 0.732995 v -0.062500 0.120000 0.732995
v 1.062500 0.125000 0.500000 v 1.062500 0.120000 0.500000
v 0.102252 0.125000 0.897747 v 0.102252 0.120000 0.897747
v -0.062500 0.125000 0.267004 v -0.062500 0.120000 0.267004
v 0.500000 0.125000 -0.062500 v 0.500000 0.120000 -0.062500
v 0.267004 0.125000 1.062500 v 0.267004 0.120000 1.062500
v 0.732996 0.125000 -0.062500 v 0.732996 0.120000 -0.062500
v 1.250000 0.875000 0.810659 v 1.250000 0.880000 0.810659
v -0.250000 0.875000 0.500000 v -0.250000 0.880000 0.500000
v 0.500000 0.875000 -0.250000 v 0.500000 0.880000 -0.250000
v -0.030330 0.875000 1.030330 v -0.030330 0.880000 1.030330
v -0.250000 0.875000 0.810660 v -0.250000 0.880000 0.810660
v -0.030330 0.875000 -0.030330 v -0.030330 0.880000 -0.030330
v 0.189340 0.875000 1.250000 v 0.189340 0.880000 1.250000
v 0.810660 0.875000 -0.250000 v 0.810660 0.880000 -0.250000
v -0.062500 0.875000 0.732995 v -0.062500 0.880000 0.732995
v 0.102253 0.875000 0.897748 v 0.102253 0.880000 0.897748
v 0.102252 0.875000 0.102252 v 0.102252 0.880000 0.102252
v 0.267005 0.875000 1.062500 v 0.267005 0.880000 1.062500
v 0.732995 0.875000 -0.062500 v 0.732995 0.880000 -0.062500
v 0.500000 0.875000 1.062500 v 0.500000 0.880000 1.062500
v -0.062500 0.875000 0.267005 v -0.062500 0.880000 0.267005
v 0.897748 0.875000 0.102252 v 0.897748 0.880000 0.102252
v 1.062500 0.875000 0.500000 v 1.062500 0.880000 0.500000
v 1.062500 0.875000 0.732995 v 1.062500 0.880000 0.732995
v -0.062500 0.875000 0.500000 v -0.062500 0.880000 0.500000
v 0.897748 0.875000 0.897747 v 0.897748 0.880000 0.897747
v 1.062500 0.875000 0.267004 v 1.062500 0.880000 0.267004
v 0.500000 0.875000 -0.062500 v 0.500000 0.880000 -0.062500
v 0.732996 0.875000 1.062500 v 0.732996 0.880000 1.062499
v 0.267004 0.875000 -0.062500 v 0.267004 0.880000 -0.062500
v -0.423879 0.124000 0.117316 v -0.423879 0.119000 0.117316
v -0.423879 0.124000 0.500000 v -0.423879 0.119000 0.500000
v -0.500000 0.124000 0.117317 v -0.500000 0.119000 0.117317
v 0.117316 0.124000 1.500000 v 0.117316 0.119000 1.500000
v 0.499999 0.124000 1.500000 v 0.499999 0.119000 1.500000
v 0.882683 0.124000 1.423879 v 0.882683 0.119000 1.423879
v 0.936508 0.124000 1.477705 v 0.936508 0.119000 1.477705
v -0.477705 0.124000 0.936509 v -0.477705 0.119000 0.936509
v -0.207107 0.124000 1.207106 v -0.207107 0.119000 1.207106
v -0.423880 0.124000 0.882682 v -0.423880 0.119000 0.882682
v -0.153282 0.124000 1.153281 v -0.153282 0.119000 1.153281
v 1.423879 0.124000 0.882684 v 1.423879 0.119000 0.882684
v 1.423879 0.124000 0.500000 v 1.423879 0.119000 0.500000
v 1.423879 0.124000 0.117317 v 1.423879 0.119000 0.117317
v 1.153281 0.124000 -0.153281 v 1.153281 0.119000 -0.153281
v 0.500000 0.124000 1.423879 v 0.500000 0.119000 1.423879
v 1.500000 0.124000 0.500001 v 1.500000 0.119000 0.500001
v 0.117317 0.124000 -0.423879 v 0.117317 0.119000 -0.423879
v -0.153281 0.124000 -0.153282 v -0.153281 0.119000 -0.153282
v -0.207106 0.124000 -0.207107 v -0.207106 0.119000 -0.207107
v 0.117316 0.124000 1.423879 v 0.117316 0.119000 1.423879
v 1.153281 0.124000 1.153281 v 1.153281 0.119000 1.153281
v 1.207106 0.124000 1.207107 v 1.207106 0.119000 1.207107
v 1.500000 0.124000 0.882684 v 1.500000 0.119000 0.882684
v 1.477705 0.124000 0.063492 v 1.477705 0.119000 0.063492
v 1.207107 0.124000 -0.207106 v 1.207107 0.119000 -0.207106
v 0.882684 0.124000 -0.423879 v 0.882684 0.119000 -0.423879
v 0.500001 0.124000 -0.423879 v 0.500001 0.119000 -0.423879
v 0.882684 0.124000 -0.500000 v 0.882684 0.119000 -0.500000
v 0.500001 0.124000 -0.500000 v 0.500001 0.119000 -0.500000
v 0.063492 0.124000 -0.477705 v 0.063492 0.119000 -0.477705
v -0.500000 0.124000 0.499999 v -0.500000 0.119000 0.499999
v 0.117317 0.876000 -0.423880 v 0.117317 0.881000 -0.423880
v -0.153281 0.876000 -0.153282 v -0.153281 0.881000 -0.153282
v -0.423879 0.876000 0.117316 v -0.423879 0.881000 0.117316
v -0.423880 0.876000 0.499999 v -0.423880 0.881000 0.499999
v -0.500000 0.876000 0.499999 v -0.500000 0.881000 0.499999
v 0.117316 0.876000 1.423879 v 0.117316 0.881000 1.423879
v 0.499999 0.876000 1.423879 v 0.499999 0.881000 1.423879
v 0.117316 0.876000 1.500000 v 0.117316 0.881000 1.500000
v 0.499999 0.876000 1.500000 v 0.499999 0.881000 1.500000
v 1.500000 0.876000 0.882684 v 1.500000 0.881000 0.882684
v 1.500000 0.876000 0.500001 v 1.500000 0.881000 0.500001
v -0.207106 0.876000 -0.207107 v -0.207106 0.881000 -0.207107
v 0.882684 0.876000 -0.423880 v 0.882684 0.881000 -0.423880
v 0.500000 0.876000 -0.423879 v 0.500000 0.881000 -0.423879
v 0.500000 0.876000 -0.500000 v 0.500000 0.881000 -0.500000
v 1.423879 0.876000 0.882684 v 1.423879 0.881000 0.882684
v 1.423879 0.876000 0.500000 v 1.423879 0.881000 0.500000
v -0.423880 0.876000 0.882683 v -0.423880 0.881000 0.882682
v -0.153281 0.876000 1.153281 v -0.153281 0.881000 1.153281
v -0.207106 0.876000 1.207107 v -0.207106 0.881000 1.207107
v 0.882683 0.876000 1.423879 v 0.882683 0.881000 1.423879
v 1.153281 0.876000 1.153282 v 1.153281 0.881000 1.153282
v 0.936508 0.876000 1.477705 v 0.936508 0.881000 1.477705
v 1.207106 0.876000 1.207107 v 1.207106 0.881000 1.207107
v 1.423880 0.876000 0.117317 v 1.423880 0.881000 0.117317
v 1.153282 0.876000 -0.153281 v 1.153282 0.881000 -0.153281
v 1.477705 0.876000 0.063492 v 1.477705 0.881000 0.063492
v 1.207107 0.876000 -0.207106 v 1.207107 0.881000 -0.207106
v 0.882684 0.876000 -0.500000 v 0.882684 0.881000 -0.500000
v 0.063492 0.876000 -0.477705 v 0.063492 0.881000 -0.477705
v -0.500000 0.876000 0.117317 v -0.500000 0.881000 0.117316
v -0.477705 0.876000 0.936509 v -0.477705 0.881000 0.936509
vn -0.5774 -0.5774 -0.5774 vn -0.5774 -0.5774 -0.5774
vn 0.5774 -0.5774 -0.5774 vn 0.5774 -0.5774 -0.5774
vn 0.5774 -0.5774 0.5774 vn 0.5774 -0.5774 0.5774
@ -267,15 +267,20 @@ vn -0.9239 -0.0000 0.3827
vn 0.3827 -0.0000 0.9239 vn 0.3827 -0.0000 0.9239
vn -0.0000 -0.0000 1.0000 vn -0.0000 -0.0000 1.0000
vn 1.0000 -0.0000 -0.0000 vn 1.0000 -0.0000 -0.0000
vn -0.7071 0.0001 0.7071
vn -0.3827 -0.0000 0.9239 vn -0.3827 -0.0000 0.9239
vn 0.9239 -0.0000 0.3827 vn 0.9239 -0.0000 0.3827
vn 0.9239 -0.0000 -0.3827 vn 0.9239 -0.0000 -0.3827
vn 0.3827 -0.0000 -0.9239 vn 0.3827 -0.0000 -0.9239
vn -0.3827 -0.0000 -0.9239 vn -0.3827 -0.0000 -0.9239
vn -0.0000 -0.0000 -1.0000 vn -0.0000 -0.0000 -1.0000
vn 0.7071 0.0001 0.7071
vn -0.9239 -0.0000 -0.3827 vn -0.9239 -0.0000 -0.3827
vn -0.5774 0.5773 0.5774 vn -0.0000 -0.0002 1.0000
vn 0.5774 -0.5774 0.5773 vn -0.7071 -0.0001 0.7071
vn 0.7071 -0.0001 -0.7071
vn -0.0000 -0.0001 -1.0000
vn -0.7071 -0.0001 -0.7071
vt 0.437500 0.062500 vt 0.437500 0.062500
vt 0.437500 0.125000 vt 0.437500 0.125000
vt 0.691341 0.961940 vt 0.691341 0.961940
@ -914,19 +919,6 @@ vt 1.000000 0.875000
vt 1.000000 0.875000 vt 1.000000 0.875000
vt 0.000000 0.875000 vt 0.000000 0.875000
vt 0.000000 1.000000 vt 0.000000 1.000000
s 1
usemtl m_axis
f 9/27/1 11/33/4 15/41/5 12/35/6
f 11/34/4 10/30/3 14/39/7 15/42/5
f 10/31/3 8/24/2 13/37/8 14/40/7
f 8/25/2 9/28/1 12/36/6 13/38/8
f 30/84/9 12/35/6 15/41/5 32/90/10
f 32/91/10 15/42/5 14/39/7 31/87/11
f 31/88/11 14/40/7 13/37/8 29/81/12
f 29/82/12 13/38/8 12/36/6 30/85/9
usemtl m_axis_top
f 9/26/1 8/23/2 10/29/3 11/32/4
f 30/83/9 32/89/10 31/86/11 29/80/12
s 0 s 0
usemtl crushing_wheel_insert usemtl crushing_wheel_insert
f 57/163/5 100/266/5 197/503/5 196/499/5 f 57/163/5 100/266/5 197/503/5 196/499/5
@ -1065,9 +1057,9 @@ f 179/455/15 174/443/15 121/314/15
f 169/432/15 173/441/15 121/314/15 f 169/432/15 173/441/15 121/314/15
f 83/229/18 101/270/18 214/550/18 184/467/18 f 83/229/18 101/270/18 214/550/18 184/467/18
f 98/264/19 6/19/19 187/475/19 198/505/19 f 98/264/19 6/19/19 187/475/19 198/505/19
f 35/99/25 98/264/25 198/505/25 203/518/25 f 35/99/26 98/264/26 198/505/26 203/518/26
f 100/266/6 62/179/6 208/533/6 197/503/6 f 100/266/6 62/179/6 208/533/6 197/503/6
f 99/265/25 55/158/25 199/508/25 195/498/25 f 99/265/26 55/158/26 199/508/26 195/498/26
f 102/273/8 103/275/8 193/493/8 192/490/8 f 102/273/8 103/275/8 193/493/8 192/490/8
f 1/3/6 104/276/6 204/521/6 188/478/6 f 1/3/6 104/276/6 204/521/6 188/478/6
f 74/210/7 77/216/7 201/513/7 200/511/7 f 74/210/7 77/216/7 201/513/7 200/511/7
@ -1075,20 +1067,34 @@ f 65/187/18 69/195/18 210/538/18 209/535/18
f 77/216/5 2/8/5 202/516/5 201/513/5 f 77/216/5 2/8/5 202/516/5 201/513/5
f 104/276/8 45/129/8 205/524/8 204/521/8 f 104/276/8 45/129/8 205/524/8 204/521/8
f 103/275/7 5/16/7 191/488/7 193/493/7 f 103/275/7 5/16/7 191/488/7 193/493/7
f 49/140/8 47/134/8 236/609/8 238/615/8 f 49/140/31 47/134/31 236/609/31 238/615/31
f 16/43/13 52/148/13 230/593/13 231/596/13 f 16/43/13 52/148/13 230/593/13 231/596/13
f 91/249/8 25/69/8 232/599/8 233/601/8 f 91/249/8 25/69/8 232/599/8 233/601/8
f 122/318/5 21/58/5 216/555/5 226/583/5 f 122/318/5 21/58/5 216/555/5 226/583/5
f 59/169/25 16/43/25 231/596/25 225/579/25 f 59/169/32 16/43/32 231/596/32 225/579/32
f 93/255/7 91/249/7 233/601/7 234/604/7 f 93/255/7 91/249/7 233/601/7 234/604/7
f 67/192/5 17/46/5 239/617/5 240/620/5 f 67/192/5 17/46/5 239/617/5 240/620/5
f 21/58/7 26/73/7 215/553/7 216/555/7 f 21/58/7 26/73/7 215/553/7 216/555/7
f 36/101/25 39/110/25 220/565/25 221/568/25 f 36/101/26 39/110/26 220/565/26 221/568/26
f 24/65/19 28/79/19 217/558/19 218/560/19 f 24/65/19 28/79/19 217/558/19 218/560/19
f 23/64/18 24/65/18 218/560/18 219/563/18 f 23/64/18 24/65/18 218/560/18 219/563/18
f 125/326/6 67/192/6 240/620/6 242/626/6 f 125/326/6 67/192/6 240/620/6 242/626/6
f 47/134/6 42/120/6 235/607/6 236/609/6 f 47/134/33 42/120/33 235/607/33 236/609/33
f 38/107/19 36/101/19 221/568/19 223/574/19 f 38/107/19 36/101/19 221/568/19 223/574/19
s 1
usemtl m_axis
f 9/27/1 11/33/4 15/41/5 12/35/6
f 11/34/4 10/30/3 14/39/7 15/42/5
f 10/31/3 8/24/2 13/37/8 14/40/7
f 8/25/2 9/28/1 12/36/6 13/38/8
f 30/84/9 12/35/6 15/41/5 32/90/10
f 32/91/10 15/42/5 14/39/7 31/87/11
f 31/88/11 14/40/7 13/37/8 29/81/12
f 29/82/12 13/38/8 12/36/6 30/85/9
usemtl m_axis_top
f 9/26/1 8/23/2 10/29/3 11/32/4
f 30/83/9 32/89/10 31/86/11 29/80/12
s 0
usemtl crushing_wheel_plates usemtl crushing_wheel_plates
f 33/93/13 37/103/13 39/111/13 35/100/13 f 33/93/13 37/103/13 39/111/13 35/100/13
f 6/17/14 96/261/14 1/1/14 34/94/14 f 6/17/14 96/261/14 1/1/14 34/94/14
@ -1099,54 +1105,54 @@ f 34/96/17 1/2/17 42/118/17 41/116/17
f 6/20/18 38/106/18 37/102/18 33/92/18 f 6/20/18 38/106/18 37/102/18 33/92/18
f 43/122/5 48/135/5 42/119/5 1/4/5 f 43/122/5 48/135/5 42/119/5 1/4/5
f 45/126/14 7/21/14 46/130/14 44/123/14 f 45/126/14 7/21/14 46/130/14 44/123/14
f 42/119/5 48/135/5 237/610/5 235/605/5 f 42/119/20 48/135/20 237/610/20 235/605/20
f 49/137/15 51/143/15 52/146/15 50/141/15 f 49/137/15 51/143/15 52/146/15 50/141/15
f 44/124/20 51/144/20 49/138/20 45/127/20 f 44/124/21 51/144/21 49/138/21 45/127/21
f 44/125/21 46/131/21 52/147/21 51/145/21 f 44/125/22 46/131/22 52/147/22 51/145/22
f 45/128/7 49/139/7 48/136/7 43/121/7 f 45/128/7 49/139/7 48/136/7 43/121/7
f 54/153/18 58/165/18 52/149/18 46/132/18 f 54/153/18 58/165/18 52/149/18 46/132/18
f 54/153/18 46/132/18 194/494/18 206/525/18 f 54/153/18 46/132/18 194/494/18 206/525/18
f 55/155/14 56/159/14 57/161/14 53/150/14 f 55/155/14 56/159/14 57/161/14 53/150/14
f 59/167/15 60/171/15 17/44/15 124/321/15 f 59/167/15 60/171/15 17/44/15 124/321/15
f 53/151/17 60/172/17 59/168/17 55/156/17 f 53/151/17 60/172/17 59/168/17 55/156/17
f 53/152/22 57/162/22 17/45/22 60/173/22 f 53/152/23 57/162/23 17/45/23 60/173/23
f 55/157/19 59/170/19 58/166/19 54/154/19 f 55/157/19 59/170/19 58/166/19 54/154/19
f 61/175/7 68/194/7 17/47/7 57/164/7 f 61/175/7 68/194/7 17/47/7 57/164/7
f 55/157/19 54/154/19 206/526/19 199/506/19 f 55/157/19 54/154/19 206/526/19 199/506/19
f 62/176/14 63/180/14 65/185/14 64/182/14 f 62/176/14 63/180/14 65/185/14 64/182/14
f 19/52/19 75/211/19 243/627/19 227/584/19 f 19/52/19 75/211/19 243/627/19 227/584/19
f 125/323/15 66/189/15 19/50/15 18/48/15 f 125/323/15 66/189/15 19/50/15 18/48/15
f 64/183/21 66/190/21 125/324/21 62/177/21 f 64/183/22 66/190/22 125/324/22 62/177/22
f 64/184/23 65/186/23 19/51/23 66/191/23 f 64/184/24 65/186/24 19/51/24 66/191/24
f 62/178/8 125/325/8 68/193/8 61/174/8 f 62/178/8 125/325/8 68/193/8 61/174/8
f 70/197/19 75/211/19 19/52/19 65/188/19 f 70/197/19 75/211/19 19/52/19 65/188/19
f 71/198/14 72/202/14 74/207/14 73/204/14 f 71/198/14 72/202/14 74/207/14 73/204/14
f 92/251/5 93/254/5 234/602/5 246/637/5 f 92/251/5 93/254/5 234/602/5 246/637/5
f 20/54/15 76/213/15 26/70/15 123/319/15 f 20/54/15 76/213/15 26/70/15 123/319/15
f 73/205/22 76/214/22 20/55/22 71/199/22 f 73/205/23 76/214/23 20/55/23 71/199/23
f 73/206/24 74/208/24 26/71/24 76/215/24 f 73/206/25 74/208/25 26/71/25 76/215/25
f 71/201/25 20/56/25 75/212/25 70/196/25 f 71/201/26 20/56/26 75/212/26 70/196/26
f 78/217/8 81/225/8 26/72/8 74/209/8 f 78/217/8 81/225/8 26/72/8 74/209/8
f 78/217/8 74/209/8 200/509/8 213/545/8 f 78/217/8 74/209/8 200/509/8 213/545/8
f 2/5/14 79/219/14 85/232/14 80/221/14 f 2/5/14 79/219/14 85/232/14 80/221/14
f 48/136/7 49/139/7 238/613/7 237/611/7 f 48/136/27 49/139/27 238/613/27 237/611/27
f 122/315/15 82/226/15 28/76/15 27/74/15 f 122/315/15 82/226/15 28/76/15 27/74/15
f 80/222/23 82/227/23 122/316/23 2/6/23 f 80/222/24 82/227/24 122/316/24 2/6/24
f 80/223/26 85/233/26 28/77/26 82/228/26 f 80/223/28 85/233/28 28/77/28 82/228/28
f 2/7/6 122/317/6 81/224/6 78/218/6 f 2/7/6 122/317/6 81/224/6 78/218/6
f 84/230/25 87/240/25 28/78/25 85/235/25 f 84/230/26 87/240/26 28/78/26 85/235/26
f 2/7/6 78/218/6 213/546/6 202/514/6 f 2/7/6 78/218/6 213/546/6 202/514/6
f 101/267/14 3/9/14 102/271/14 86/236/14 f 101/267/14 3/9/14 102/271/14 86/236/14
f 75/212/25 20/56/25 229/590/25 243/628/25 f 75/212/26 20/56/26 229/590/26 243/628/26
f 23/61/15 88/241/15 25/66/15 22/59/15 f 23/61/15 88/241/15 25/66/15 22/59/15
f 86/237/24 88/242/24 23/62/24 101/268/24 f 86/237/25 88/242/25 23/62/25 101/268/25
f 86/238/16 102/272/16 25/67/16 88/243/16 f 86/238/16 102/272/16 25/67/16 88/243/16
f 101/269/13 23/63/13 87/239/13 84/231/13 f 101/269/13 23/63/13 87/239/13 84/231/13
f 89/244/6 92/250/6 25/68/6 102/274/6 f 89/244/6 92/250/6 25/68/6 102/274/6
f 5/13/14 4/11/14 35/97/14 90/246/14 f 5/13/14 4/11/14 35/97/14 90/246/14
f 93/252/15 95/258/15 39/108/15 94/256/15 f 93/252/15 95/258/15 39/108/15 94/256/15
f 90/247/26 95/259/26 93/253/26 5/14/26 f 90/247/28 95/259/28 93/253/28 5/14/28
f 90/248/20 35/98/20 39/109/20 95/260/20 f 90/248/21 35/98/21 39/109/21 95/260/21
f 5/15/5 93/254/5 92/251/5 89/245/5 f 5/15/5 93/254/5 92/251/5 89/245/5
f 203/517/14 198/504/14 187/474/14 186/471/14 f 203/517/14 198/504/14 187/474/14 186/471/14
f 188/477/14 204/520/14 205/522/14 189/480/14 f 188/477/14 204/520/14 205/522/14 189/480/14
@ -1156,18 +1162,18 @@ f 209/534/14 210/537/14 212/543/14 211/539/14
f 200/510/14 201/512/14 202/515/14 213/547/14 f 200/510/14 201/512/14 202/515/14 213/547/14
f 183/464/14 184/466/14 214/548/14 185/468/14 f 183/464/14 184/466/14 214/548/14 185/468/14
f 192/489/14 193/492/14 191/486/14 190/483/14 f 192/489/14 193/492/14 191/486/14 190/483/14
f 84/230/25 85/235/25 183/465/25 185/469/25 f 84/230/26 85/235/26 183/465/26 185/469/26
f 101/269/13 84/231/13 185/470/13 214/549/13 f 101/269/13 84/231/13 185/470/13 214/549/13
f 62/178/8 61/174/8 207/529/8 208/532/8 f 62/178/8 61/174/8 207/529/8 208/532/8
f 61/175/7 57/164/7 196/501/7 207/530/7 f 61/175/7 57/164/7 196/501/7 207/530/7
f 6/20/18 33/92/18 186/472/18 187/476/18 f 6/20/29 33/92/29 186/472/29 187/476/29
f 33/93/13 35/100/13 203/519/13 186/473/13 f 33/93/13 35/100/13 203/519/13 186/473/13
f 89/244/6 102/274/6 192/491/6 190/484/6 f 89/244/6 102/274/6 192/491/6 190/484/6
f 45/128/7 43/121/7 189/481/7 205/523/7 f 45/128/7 43/121/7 189/481/7 205/523/7
f 43/122/5 1/4/5 188/479/5 189/482/5 f 43/122/5 1/4/5 188/479/5 189/482/5
f 71/201/25 70/196/25 211/540/25 212/544/25 f 71/201/26 70/196/26 211/540/26 212/544/26
f 70/197/19 65/188/19 209/536/19 211/541/19 f 70/197/19 65/188/19 209/536/19 211/541/19
f 5/15/5 89/245/5 190/485/5 191/487/5 f 5/15/30 89/245/30 190/485/30 191/487/30
f 220/564/15 222/569/15 223/572/15 221/567/15 f 220/564/15 222/569/15 223/572/15 221/567/15
f 235/606/15 237/612/15 238/614/15 236/608/15 f 235/606/15 237/612/15 238/614/15 236/608/15
f 230/592/15 224/575/15 225/578/15 231/595/15 f 230/592/15 224/575/15 225/578/15 231/595/15
@ -1181,16 +1187,16 @@ f 52/149/18 58/165/18 224/576/18 230/594/18
f 26/72/8 81/225/8 244/632/8 215/552/8 f 26/72/8 81/225/8 244/632/8 215/552/8
f 87/239/13 23/63/13 219/562/13 245/634/13 f 87/239/13 23/63/13 219/562/13 245/634/13
f 58/166/19 59/170/19 225/580/19 224/577/19 f 58/166/19 59/170/19 225/580/19 224/577/19
f 28/78/25 87/240/25 245/635/25 217/557/25 f 28/78/26 87/240/26 245/635/26 217/557/26
f 68/193/8 125/325/8 242/625/8 241/622/8 f 68/193/8 125/325/8 242/625/8 241/622/8
f 37/102/18 38/106/18 223/573/18 222/570/18 f 37/102/18 38/106/18 223/573/18 222/570/18
f 17/47/7 68/194/7 241/623/7 239/618/7 f 17/47/7 68/194/7 241/623/7 239/618/7
f 39/111/13 37/103/13 222/571/13 220/566/13 f 39/111/13 37/103/13 222/571/13 220/566/13
s 1 s 1
usemtl m_spruce_log_top.001 usemtl m_spruce_log_top
f 135/346/11 136/349/27 137/352/4 138/355/28 f 135/346/11 136/349/10 137/352/4 138/355/3
f 139/358/12 135/347/11 138/356/28 140/361/2 f 139/358/12 135/347/11 138/356/3 140/361/2
f 141/364/9 139/359/12 140/362/2 142/367/1 f 141/364/9 139/359/12 140/362/2 142/367/1
f 136/350/27 141/365/9 142/368/1 137/353/4 f 136/350/10 141/365/9 142/368/1 137/353/4
f 142/369/1 140/363/2 138/357/28 137/354/4 f 142/369/1 140/363/2 138/357/3 137/354/4
f 136/351/27 135/348/11 139/360/12 141/366/9 f 136/351/10 135/348/11 139/360/12 141/366/9

View file

@ -1,10 +1,8 @@
{ {
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
"textures": { "textures": {
"stonecutter_saw": "minecraft:block/stonecutter_saw", "stonecutter_saw": "minecraft:block/stonecutter_saw",
"stonecutter_saw_reversed" : "create:block/saw_reversed" "stonecutter_saw_reversed" : "create:block/saw_reversed"
}, },
"parent": "create:block/block",
"elements": [ "elements": [
{ {
"name": "Blade", "name": "Blade",

View file

@ -1,5 +1,4 @@
{ {
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
"textures": { "textures": {
"stonecutter_saw": "minecraft:block/stonecutter_saw", "stonecutter_saw": "minecraft:block/stonecutter_saw",
"stonecutter_saw_reversed" : "create:block/saw_reversed" "stonecutter_saw_reversed" : "create:block/saw_reversed"