33import com .mojang .authlib .GameProfile ;
44import dev .compactmods .machines .CompactMachines ;
55import dev .compactmods .machines .api .core .Tooltips ;
6+ import dev .compactmods .machines .core .MissingDimensionException ;
7+ import dev .compactmods .machines .i18n .TranslationUtil ;
68import dev .compactmods .machines .machine .CompactMachineBlock ;
79import dev .compactmods .machines .machine .CompactMachineBlockEntity ;
8- import dev .compactmods .machines .i18n . TranslationUtil ;
9- import mcjty . theoneprobe . api . IProbeHitData ;
10- import mcjty .theoneprobe .api .IProbeInfo ;
11- import mcjty .theoneprobe .api . IProbeInfoProvider ;
12- import mcjty .theoneprobe .api . ProbeMode ;
10+ import dev .compactmods .machines .tunnel . TunnelItem ;
11+ import dev . compactmods . machines . tunnel . data . RoomTunnelData ;
12+ import mcjty .theoneprobe .api .* ;
13+ import mcjty .theoneprobe .apiimpl . styles . ItemStyle ;
14+ import mcjty .theoneprobe .apiimpl . styles . LayoutStyle ;
1315import net .minecraft .ChatFormatting ;
1416import net .minecraft .network .chat .MutableComponent ;
1517import net .minecraft .resources .ResourceLocation ;
1618import net .minecraft .world .entity .player .Player ;
19+ import net .minecraft .world .item .ItemStack ;
1720import net .minecraft .world .level .Level ;
18- import net .minecraft .world .level .block .entity .BlockEntity ;
1921import net .minecraft .world .level .block .state .BlockState ;
2022
23+ import java .util .stream .Collectors ;
24+
2125public class CompactMachineProvider implements IProbeInfoProvider {
2226
2327 @ Override
@@ -27,14 +31,16 @@ public ResourceLocation getID() {
2731
2832 @ Override
2933 public void addProbeInfo (ProbeMode probeMode , IProbeInfo info , Player player , Level level , BlockState blockState , IProbeHitData hitData ) {
30- if (!(blockState .getBlock () instanceof CompactMachineBlock mach ))
34+ if (!(blockState .getBlock () instanceof CompactMachineBlock mach ))
3135 return ;
3236
33- BlockEntity te = level .getBlockEntity (hitData .getPos ());
37+ final var server = level .getServer ();
38+ final var te = level .getBlockEntity (hitData .getPos ());
39+
3440 if (te instanceof CompactMachineBlockEntity machine ) {
35- if (machine .mapped ()) {
41+ if (machine .mapped ()) {
3642 MutableComponent id = TranslationUtil
37- .tooltip (Tooltips .Machines .ID , machine .machineId )
43+ .tooltip (Tooltips .Machines .ID , machine .machineId , hitData . getSideHit () )
3844 .withStyle (ChatFormatting .GREEN );
3945
4046 info .text (id );
@@ -59,7 +65,45 @@ public void addProbeInfo(ProbeMode probeMode, IProbeInfo info, Player player, Le
5965 }
6066 });
6167
62- // TODO - Connected Tunnels horizontal preview?
68+ machine .getInternalChunkPos ().ifPresent (room -> {
69+ try {
70+ final var tunnels = RoomTunnelData .get (server , room );
71+ final var graph = tunnels .getGraph ();
72+
73+ final var applied = graph .getTypesForSide (machine .machineId , hitData .getSideHit ())
74+ .collect (Collectors .toSet ());
75+
76+ switch (probeMode ) {
77+ case NORMAL :
78+ final var group = info .horizontal (new LayoutStyle ()
79+ .alignment (ElementAlignment .ALIGN_TOPLEFT )
80+ .padding (0 )
81+ .spacing (0 ));
82+
83+ applied .forEach (tn -> {
84+ ItemStack item = TunnelItem .createStack (tn );
85+ group .item (item , new ItemStyle ().bounds (8 , 8 ));
86+ });
87+ break ;
88+
89+ case EXTENDED :
90+ final var tgg = info .vertical (new LayoutStyle ().alignment (ElementAlignment .ALIGN_TOPLEFT ));
91+ applied .forEach (tn -> {
92+ final var tg = tgg .horizontal (new LayoutStyle ()
93+ .alignment (ElementAlignment .ALIGN_CENTER )
94+ .hPadding (2 ).vPadding (2 )
95+ .spacing (0 ));
96+
97+ ItemStack item = TunnelItem .createStack (tn );
98+ tg .item (item , new ItemStyle ().bounds (8 , 8 ));
99+ tg .itemLabel (item );
100+ });
101+ break ;
102+ }
103+ } catch (MissingDimensionException e ) {
104+ CompactMachines .LOGGER .fatal (e );
105+ }
106+ });
63107 }
64108 }
65109}
0 commit comments