22
33import com .mojang .brigadier .builder .ArgumentBuilder ;
44import com .mojang .brigadier .context .CommandContext ;
5- import dev .compactmods .machines .api .room .MachineRoomConnections ;
5+ import dev .compactmods .machines .CompactMachines ;
6+ import dev .compactmods .machines .api .core .CMCommands ;
67import dev .compactmods .machines .api .core .Constants ;
8+ import dev .compactmods .machines .api .location .IDimensionalBlockPosition ;
9+ import dev .compactmods .machines .i18n .TranslationUtil ;
10+ import dev .compactmods .machines .machine .graph .DimensionMachineGraph ;
711import net .minecraft .commands .CommandSourceStack ;
812import net .minecraft .commands .Commands ;
913import net .minecraft .util .CsvOutput ;
14+ import net .minecraft .world .level .ChunkPos ;
1015
1116import javax .annotation .Nonnull ;
1217import java .io .BufferedWriter ;
1318import java .io .IOException ;
19+ import java .nio .file .Files ;
1420
1521// TODO
1622public class CMMachineDataExportCommand {
@@ -25,43 +31,39 @@ private static int execAll(CommandContext<CommandSourceStack> ctx) {
2531 var src = ctx .getSource ();
2632 var serv = src .getServer ();
2733
28- // final CompactMachineGraph machines;
29- // final MachineToRoomConnections connections;
30- // try {
31- // machines = CompactMachineGraph.forDimension(serv);
32- // connections = MachineToRoomConnections.get(serv);
33- // } catch (MissingDimensionException e) {
34- // CompactMachines.LOGGER.fatal(e);
35- // return -1;
36- // }
37- //
38- // var outdir = src.getServer().getFile(CompactMachines.MOD_ID);
39- // var out = outdir.toPath()
40- // .resolve("machines.csv")
41- // .toAbsolutePath();
42- //
43- // try {
44- // Files.createDirectories(outdir.toPath());
45- //
46- // var writer = Files.newBufferedWriter(out);
47- // CsvOutput builder = makeCsv(writer);
48- //
49- // machines.getMachines().forEach(node -> writeMachine(connections, node, builder));
50- //
51- // writer.close();
52- // } catch (IOException e) {
53- // CompactMachines.LOGGER.error(e);
54- // src.sendFailure(TranslationUtil.command(CMCommands.FAILED_CMD_FILE_ERROR));
55- // return -1;
56- // }
34+ var outdir = src .getServer ().getFile (Constants .MOD_ID );
35+ var out = outdir .toPath ()
36+ .resolve ("machines.csv" )
37+ .toAbsolutePath ();
38+
39+ try {
40+ Files .createDirectories (outdir .toPath ());
41+
42+ var writer = Files .newBufferedWriter (out );
43+ CsvOutput builder = makeCsv (writer );
44+
45+ for (final var dim : serv .getAllLevels ()) {
46+ final var graph = DimensionMachineGraph .forDimension (dim );
47+ graph .getMachines ().forEach (machNode -> {
48+ final var m = machNode .dimpos ();
49+ final var r = graph .getConnectedRoom (m .getBlockPosition ());
50+ r .ifPresent (room -> writeMachine (m , room , builder ));
51+ });
52+ }
53+
54+ writer .close ();
55+ } catch (IOException e ) {
56+ CompactMachines .LOGGER .error (e );
57+ src .sendFailure (TranslationUtil .command (CMCommands .FAILED_CMD_FILE_ERROR ));
58+ return -1 ;
59+ }
5760
5861 return 0 ;
5962 }
6063
6164 @ Nonnull
6265 private static CsvOutput makeCsv (BufferedWriter writer ) throws IOException {
6366 return CsvOutput .builder ()
64- .addColumn ("id" )
6567 .addColumn ("dim" )
6668 .addColumn ("machine_x" )
6769 .addColumn ("machine_y" )
@@ -71,24 +73,20 @@ private static CsvOutput makeCsv(BufferedWriter writer) throws IOException {
7173 .build (writer );
7274 }
7375
74- private static void writeMachine (MachineRoomConnections connections , CsvOutput builder ) {
75- // try {
76- // int id = mach.getMachineId();
77- // var loc = mach.getLocation();
78- // var placedAt = loc.getBlockPosition();
79- //
80- // var room = connections.getConnectedRoom(id).orElse(new ChunkPos(-1, -1));
81- // builder.writeRow(
82- // id,
83- // loc.getDimension().location().toString(),
84- // placedAt.getX(),
85- // placedAt.getY(),
86- // placedAt.getZ(),
87- // room.x,
88- // room.z
89- // );
90- // } catch (IOException e) {
91- // CompactMachines.LOGGER.error(e);
92- // }
76+ private static void writeMachine (IDimensionalBlockPosition machine , ChunkPos room , CsvOutput builder ) {
77+ try {
78+ var placedAt = machine .getBlockPosition ();
79+
80+ builder .writeRow (
81+ machine .dimensionKey ().location ().toString (),
82+ placedAt .getX (),
83+ placedAt .getY (),
84+ placedAt .getZ (),
85+ room .x ,
86+ room .z
87+ );
88+ } catch (IOException e ) {
89+ CompactMachines .LOGGER .error (e );
90+ }
9391 }
9492}
0 commit comments