Add block id as main type name for block devices.

This commit is contained in:
Florian Nücke
2020-11-30 18:57:14 +01:00
parent f5745c4a16
commit 68def32f52
3 changed files with 25 additions and 11 deletions

View File

@@ -9,10 +9,12 @@ import li.cil.oc2.common.device.Providers;
import li.cil.oc2.common.util.NBTTagIds;
import li.cil.oc2.common.util.TileEntityUtils;
import li.cil.oc2.common.util.WorldUtils;
import net.minecraft.block.Block;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.util.INBTSerializable;
@@ -64,7 +66,13 @@ public final class TileEntityDeviceBusElement implements INBTSerializable<Compou
final IdentifiableDeviceImpl identifiableDevice;
if (device.isPresent()) {
identifiableDevice = new IdentifiableDeviceImpl(device, deviceIds[index]);
final Block block = world.getBlockState(pos).getBlock();
final ResourceLocation registryName = block.getRegistryName();
if (registryName != null) {
identifiableDevice = new IdentifiableDeviceImpl(device, deviceIds[index], registryName.toString());
} else {
identifiableDevice = new IdentifiableDeviceImpl(device, deviceIds[index]);
}
device.addListener((ignored) -> handleNeighborChanged(pos));
} else {
identifiableDevice = null;

View File

@@ -6,22 +6,22 @@ import li.cil.oc2.api.device.IdentifiableDevice;
import li.cil.oc2.common.util.LazyOptionalUtils;
import net.minecraftforge.common.util.LazyOptional;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import javax.annotation.Nullable;
import java.util.*;
public final class IdentifiableDeviceImpl implements IdentifiableDevice {
private final LazyOptional<? extends Device> device;
private final UUID uuid;
public IdentifiableDeviceImpl(final Device device, final UUID uuid) {
this(LazyOptional.of(() -> device), uuid);
}
@Nullable private final String mainTypeName;
public IdentifiableDeviceImpl(final LazyOptional<? extends Device> device, final UUID uuid) {
this(device, uuid, null);
}
public IdentifiableDeviceImpl(final LazyOptional<? extends Device> device, final UUID uuid, @Nullable final String mainTypeName) {
this.device = device;
this.uuid = uuid;
this.mainTypeName = mainTypeName;
}
@Override
@@ -31,7 +31,13 @@ public final class IdentifiableDeviceImpl implements IdentifiableDevice {
@Override
public List<String> getTypeNames() {
return device.map(Device::getTypeNames).orElse(Collections.emptyList());
if (mainTypeName != null) {
final List<String> typeNames = new ArrayList<>(device.map(Device::getTypeNames).orElse(Collections.emptyList()));
typeNames.add(0, mainTypeName);
return typeNames;
} else {
return device.map(Device::getTypeNames).orElse(Collections.emptyList());
}
}
@Override

View File

@@ -118,7 +118,7 @@ public class ObjectDeviceProtocolTests {
public void annotatedObject() {
final SimpleObject object = new SimpleObject();
final ObjectDevice device = new ObjectDevice(object);
final IdentifiableDeviceImpl identifiableDevice = new IdentifiableDeviceImpl(device, UUID.randomUUID());
final IdentifiableDeviceImpl identifiableDevice = new IdentifiableDeviceImpl(LazyOptional.of(() -> device), UUID.randomUUID());
busElement.addDevice(identifiableDevice);
controller.scan(world, CONTROLLER_POS);