Skip to content

Commit 9b1dca7

Browse files
committed
TOP improvements, show tunnel info when looking at machines
1 parent 6e7c090 commit 9b1dca7

File tree

3 files changed

+63
-12
lines changed

3 files changed

+63
-12
lines changed

src/main/java/dev/compactmods/machines/compat/theoneprobe/providers/CompactMachineProvider.java

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,25 @@
33
import com.mojang.authlib.GameProfile;
44
import dev.compactmods.machines.CompactMachines;
55
import dev.compactmods.machines.api.core.Tooltips;
6+
import dev.compactmods.machines.core.MissingDimensionException;
7+
import dev.compactmods.machines.i18n.TranslationUtil;
68
import dev.compactmods.machines.machine.CompactMachineBlock;
79
import 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;
1315
import net.minecraft.ChatFormatting;
1416
import net.minecraft.network.chat.MutableComponent;
1517
import net.minecraft.resources.ResourceLocation;
1618
import net.minecraft.world.entity.player.Player;
19+
import net.minecraft.world.item.ItemStack;
1720
import net.minecraft.world.level.Level;
18-
import net.minecraft.world.level.block.entity.BlockEntity;
1921
import net.minecraft.world.level.block.state.BlockState;
2022

23+
import java.util.stream.Collectors;
24+
2125
public 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
}

src/main/java/dev/compactmods/machines/tunnel/TunnelItem.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ public static void setTunnelType(ItemStack stack, TunnelDefinition definition) {
6161
defTag.putString("id", definition.getRegistryName().toString());
6262
}
6363

64+
@Nonnull
65+
public static ItemStack createStack(TunnelDefinition definition) {
66+
var stack = new ItemStack(Tunnels.ITEM_TUNNEL.get(), 1);
67+
setTunnelType(stack, definition);
68+
return stack;
69+
}
70+
6471
@Override
6572
public Component getName(ItemStack stack) {
6673
String key = getDefinition(stack)

src/main/resources/assets/compactmachines/lang/en_us.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
"tooltip.compactmachines.details.psd": "Used as in-game documentation and to enter Compact Machines.",
7171
"tooltip.compactmachines.details.solid_wall": "Warning! Unbreakable for non-creative players!",
7272
"tooltip.compactmachines.hint.hold_shift": "Hold shift for details.",
73-
"tooltip.compactmachines.machine.id": "Machine ID: %s",
73+
"tooltip.compactmachines.machine.id": "Machine #%s (%s)",
7474
"tooltip.compactmachines.machine.owner": "Owner: %s",
7575
"tooltip.compactmachines.machine.size": "Internal Size: %1$sx%1$sx%1$s",
7676
"tooltip.compactmachines.tunnel_type": "Type ID: %1$s",

0 commit comments

Comments
 (0)