From 75e50ffe222a02a793797594b34fa4f2b7e803c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 27 Feb 2022 17:27:27 +0100 Subject: [PATCH] Try to pick a nice name for object devices if none is explicitly provided. --- .../oc2/api/bus/device/object/ObjectDevice.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/li/cil/oc2/api/bus/device/object/ObjectDevice.java b/src/main/java/li/cil/oc2/api/bus/device/object/ObjectDevice.java index 4b1ce76e..2e237764 100644 --- a/src/main/java/li/cil/oc2/api/bus/device/object/ObjectDevice.java +++ b/src/main/java/li/cil/oc2/api/bus/device/object/ObjectDevice.java @@ -10,6 +10,7 @@ import li.cil.oc2.api.bus.device.rpc.RPCMethodGroup; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -44,6 +45,9 @@ public final class ObjectDevice implements RPCDevice, ItemDevice { if (object instanceof final NamedDevice namedDevice) { this.typeNames.addAll(namedDevice.getDeviceTypeNames()); } + if (this.typeNames.isEmpty()) { + this.typeNames.add(toNiceTypeName(object.getClass())); + } } /** @@ -128,4 +132,16 @@ public final class ObjectDevice implements RPCDevice, ItemDevice { public String toString() { return className; } + + /////////////////////////////////////////////////////////////////// + + private static String toNiceTypeName(final Class deviceClass) { + final String name = deviceClass.getSimpleName() + .replaceFirst("VMDevice$", "") + .replaceFirst("RPCDevice$", "") + .replaceFirst("Device$", ""); + return name + .replaceAll("([a-z])([A-Z])", "$1_$2") + .toLowerCase(Locale.ROOT); + } }