Util methods for centralized local key and text component generation.

Future-proof item description id generation.
This commit is contained in:
Florian Nücke
2021-07-14 22:33:46 +02:00
parent 7b62ae1094
commit 771e5b9846
13 changed files with 109 additions and 40 deletions

View File

@@ -18,6 +18,8 @@ import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.TranslationTextComponent;
import org.lwjgl.glfw.GLFW;
import static li.cil.oc2.common.util.TranslationUtils.text;
public final class BusInterfaceScreen extends Screen {
private static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(API.MOD_ID, "textures/gui/screen/bus_interface.png");
@@ -60,7 +62,7 @@ public final class BusInterfaceScreen extends Screen {
left = (width - BACKGROUND.width) / 2;
top = (height - BACKGROUND.height) / 2;
nameField = new TextFieldWidget(font, left + TEXT_LEFT, top + TEXT_TOP, 192, 12, new TranslationTextComponent("oc2.gui.bus_interface_name"));
nameField = new TextFieldWidget(font, left + TEXT_LEFT, top + TEXT_TOP, 192, 12, text("{mod}.gui.bus_interface_name"));
nameField.setCanLoseFocus(false);
nameField.setTextColor(0xFFFFFFFF);
nameField.setBordered(false);

View File

@@ -9,7 +9,6 @@ import net.minecraft.client.gui.widget.list.ExtendedList;
import net.minecraft.util.text.Color;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.Nullable;
@@ -20,6 +19,8 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import static li.cil.oc2.common.util.TranslationUtils.text;
public class FileChooserScreen extends Screen {
private static final Logger LOGGER = LogManager.getLogger();
@@ -32,13 +33,13 @@ public class FileChooserScreen extends Screen {
private static final int BUTTON_HEIGHT = 20;
private static final int LIST_ENTRY_HEIGHT = 12;
private static final TranslationTextComponent OPEN_TITLE_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.title.load");
private static final TranslationTextComponent SAVE_TITLE_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.title.save");
private static final TranslationTextComponent FILE_NAME_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.text_field.filename");
private static final TranslationTextComponent LOAD_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.confirm_button.load");
private static final TranslationTextComponent SAVE_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.confirm_button.save");
private static final TranslationTextComponent OVERWRITE_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.confirm_button.overwrite");
private static final TranslationTextComponent CANCEL_TEXT = new TranslationTextComponent("gui.oc2.file_chooser.cancel_button");
private static final ITextComponent OPEN_TITLE_TEXT = text("gui.{mod}.file_chooser.title.load");
private static final ITextComponent SAVE_TITLE_TEXT = text("gui.{mod}.file_chooser.title.save");
private static final ITextComponent FILE_NAME_TEXT = text("gui.{mod}.file_chooser.text_field.filename");
private static final ITextComponent LOAD_TEXT = text("gui.{mod}.file_chooser.confirm_button.load");
private static final ITextComponent SAVE_TEXT = text("gui.{mod}.file_chooser.confirm_button.save");
private static final ITextComponent OVERWRITE_TEXT = text("gui.{mod}.file_chooser.confirm_button.overwrite");
private static final ITextComponent CANCEL_TEXT = text("gui.{mod}.file_chooser.cancel_button");
///////////////////////////////////////////////////////////////////

View File

@@ -19,6 +19,8 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import static li.cil.oc2.common.util.TranslationUtils.text;
public final class GuiUtils {
public static final ResourceLocation WARN_ICON = new ResourceLocation(API.MOD_ID, "textures/gui/overlay/slot_warn.png");
public static final ResourceLocation INFO_ICON = new ResourceLocation(API.MOD_ID, "textures/gui/overlay/slot_info.png");
@@ -26,9 +28,9 @@ public final class GuiUtils {
private static final Map<DeviceType, ITextComponent> WARNING_BY_DEVICE_TYPE = Util.make(() -> {
final HashMap<DeviceType, ITextComponent> map = new HashMap<>();
map.put(DeviceTypes.FLASH_MEMORY, new TranslationTextComponent("tooltip.oc2.flash_memory_missing"));
map.put(DeviceTypes.MEMORY, new TranslationTextComponent("tooltip.oc2.memory_missing"));
map.put(DeviceTypes.HARD_DRIVE, new TranslationTextComponent("tooltip.oc2.hard_drive_missing"));
map.put(DeviceTypes.FLASH_MEMORY, text("tooltip.{mod}.flash_memory_missing"));
map.put(DeviceTypes.MEMORY, text("tooltip.{mod}.memory_missing"));
map.put(DeviceTypes.HARD_DRIVE, text("tooltip.{mod}.hard_drive_missing"));
return map;
});

View File

@@ -3,6 +3,8 @@ package li.cil.oc2.common;
import li.cil.oc2.api.API;
import net.minecraft.util.Direction;
import static li.cil.oc2.common.util.TranslationUtils.key;
public final class Constants {
public static final int KILOBYTE = 1024;
public static final int MEGABYTE = 1024 * KILOBYTE;
@@ -26,29 +28,29 @@ public final class Constants {
///////////////////////////////////////////////////////////////////
public static final String TOOLTIP_DESCRIPTION_SUFFIX = ".desc";
public static final String TOOLTIP_DEVICE_NEEDS_REBOOT = "tooltip.oc2.device_needs_reboot";
public static final String TOOLTIP_ENERGY = "tooltip.oc2.energy";
public static final String TOOLTIP_ENERGY_CONSUMPTION = "tooltip.oc2.energyConsumption";
public static final String TOOLTIP_CONFIRM = "tooltip.oc2.confirm";
public static final String TOOLTIP_CANCEL = "tooltip.oc2.cancel";
public static final String TOOLTIP_DEVICE_NEEDS_REBOOT = key("tooltip.{mod}.device_needs_reboot");
public static final String TOOLTIP_ENERGY = key("tooltip.{mod}.energy");
public static final String TOOLTIP_ENERGY_CONSUMPTION = key("tooltip.{mod}.energyConsumption");
public static final String TOOLTIP_CONFIRM = key("tooltip.{mod}.confirm");
public static final String TOOLTIP_CANCEL = key("tooltip.{mod}.cancel");
///////////////////////////////////////////////////////////////////
public static final String COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION = "gui.oc2.computer.capture_input.capt";
public static final String COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION = "gui.oc2.computer.capture_input.desc";
public static final String COMPUTER_SCREEN_POWER_CAPTION = "gui.oc2.computer.power.capt";
public static final String COMPUTER_SCREEN_POWER_DESCRIPTION = "gui.oc2.computer.power.desc";
public static final String COMPUTER_ERROR_UNKNOWN = "gui.oc2.computer.error.unknown";
public static final String COMPUTER_ERROR_MISSING_FIRMWARE = "gui.oc2.computer.error.missing_firmware";
public static final String COMPUTER_ERROR_INSUFFICIENT_MEMORY = "gui.oc2.computer.error.insufficient_memory";
public static final String COMPUTER_BUS_STATE_INCOMPLETE = "gui.oc2.computer.bus_state.incomplete";
public static final String COMPUTER_BUS_STATE_TOO_COMPLEX = "gui.oc2.computer.bus_state.too_complex";
public static final String COMPUTER_BUS_STATE_MULTIPLE_CONTROLLERS = "gui.oc2.computer.bus_state.multiple_controllers";
public static final String COMPUTER_ERROR_NOT_ENOUGH_ENERGY = "gui.oc2.computer.error.not_enough_energy";
public static final String COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION = key("gui.{mod}.computer.capture_input.capt");
public static final String COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION = key("gui.{mod}.computer.capture_input.desc");
public static final String COMPUTER_SCREEN_POWER_CAPTION = key("gui.{mod}.computer.power.capt");
public static final String COMPUTER_SCREEN_POWER_DESCRIPTION = key("gui.{mod}.computer.power.desc");
public static final String COMPUTER_ERROR_UNKNOWN = key("gui.{mod}.computer.error.unknown");
public static final String COMPUTER_ERROR_MISSING_FIRMWARE = key("gui.{mod}.computer.error.missing_firmware");
public static final String COMPUTER_ERROR_INSUFFICIENT_MEMORY = key("gui.{mod}.computer.error.insufficient_memory");
public static final String COMPUTER_BUS_STATE_INCOMPLETE = key("gui.{mod}.computer.bus_state.incomplete");
public static final String COMPUTER_BUS_STATE_TOO_COMPLEX = key("gui.{mod}.computer.bus_state.too_complex");
public static final String COMPUTER_BUS_STATE_MULTIPLE_CONTROLLERS = key("gui.{mod}.computer.bus_state.multiple_controllers");
public static final String COMPUTER_ERROR_NOT_ENOUGH_ENERGY = key("gui.{mod}.computer.error.not_enough_energy");
///////////////////////////////////////////////////////////////////
public static final String CONNECTOR_ERROR_FULL = "message.oc2.connector.error.full";
public static final String CONNECTOR_ERROR_TOO_FAR = "message.oc2.connector.error.too_far";
public static final String CONNECTOR_ERROR_OBSTRUCTED = "message.oc2.connector.error.obstructed";
public static final String CONNECTOR_ERROR_FULL = key("message.{mod}.connector.error.full");
public static final String CONNECTOR_ERROR_TOO_FAR = key("message.{mod}.connector.error.too_far");
public static final String CONNECTOR_ERROR_OBSTRUCTED = key("message.{mod}.connector.error.obstructed");
}

View File

@@ -5,13 +5,14 @@ import li.cil.oc2.api.bus.device.DeviceType;
import li.cil.oc2.common.bus.device.util.DeviceTypeImpl;
import li.cil.oc2.common.util.RegistryUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.RegistryBuilder;
import java.util.function.Supplier;
import static li.cil.oc2.common.util.TranslationUtils.text;
public final class DeviceTypes {
private static final DeferredRegister<DeviceType> DEVICE_TYPES = RegistryUtils.create(DeviceType.class);
@@ -35,7 +36,7 @@ public final class DeviceTypes {
private static void register(final String name) {
DEVICE_TYPES.register(name, () -> new DeviceTypeImpl(
new ResourceLocation(API.MOD_ID, "gui/icon/" + name),
new TranslationTextComponent("gui.oc2.device_type." + name)
text("gui.{mod}.device_type." + name)
));
}
}

View File

@@ -5,10 +5,13 @@ import li.cil.oc2.common.bus.device.item.ByteBufferFlashMemoryVMDevice;
import li.cil.oc2.common.util.NBTTagIds;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Util;
import javax.annotation.Nullable;
public final class FlashMemoryItem extends AbstractStorageItem {
@Nullable private String descriptionId;
public FlashMemoryItem(final int defaultCapacity) {
super(createProperties().stacksTo(1), defaultCapacity);
}
@@ -29,6 +32,9 @@ public final class FlashMemoryItem extends AbstractStorageItem {
@Override
protected String getOrCreateDescriptionId() {
return "item.oc2.flash_memory";
if (descriptionId == null) {
descriptionId = Util.makeDescriptionId("item", Items.FLASH_MEMORY.getId());
}
return descriptionId;
}
}

View File

@@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.ResourceLocationException;
import net.minecraft.util.StringUtils;
import net.minecraft.util.Util;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
@@ -18,6 +19,7 @@ public final class FlashMemoryWithExternalDataItem extends ModItem {
///////////////////////////////////////////////////////////////////
private final ResourceLocation defaultData;
@Nullable private String descriptionId;
///////////////////////////////////////////////////////////////////
@@ -84,6 +86,9 @@ public final class FlashMemoryWithExternalDataItem extends ModItem {
@Override
protected String getOrCreateDescriptionId() {
return "item.oc2.flash_memory";
if (descriptionId == null) {
descriptionId = Util.makeDescriptionId("item", Items.FLASH_MEMORY.getId());
}
return descriptionId;
}
}

View File

@@ -1,11 +1,17 @@
package li.cil.oc2.common.item;
import li.cil.oc2.api.API;
import net.minecraft.item.DyeColor;
import net.minecraft.item.IDyeableArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Util;
import javax.annotation.Nullable;
public final class HardDriveItem extends AbstractStorageItem implements IDyeableArmorItem {
private final int defaultColor;
@Nullable private String descriptionId;
///////////////////////////////////////////////////////////////////
@@ -25,6 +31,9 @@ public final class HardDriveItem extends AbstractStorageItem implements IDyeable
@Override
protected String getOrCreateDescriptionId() {
return "item.oc2.hard_drive";
if (descriptionId == null) {
descriptionId = Util.makeDescriptionId("item", new ResourceLocation(API.MOD_ID, "hard_drive"));
}
return descriptionId;
}
}

View File

@@ -1,12 +1,17 @@
package li.cil.oc2.common.item;
import li.cil.oc2.api.API;
import net.minecraft.item.DyeColor;
import net.minecraft.item.IDyeableArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Util;
import javax.annotation.Nullable;
public final class HardDriveWithExternalDataItem extends AbstractBlockDeviceItem implements IDyeableArmorItem {
private final int defaultColor;
@Nullable private String descriptionId;
///////////////////////////////////////////////////////////////////
@@ -26,6 +31,9 @@ public final class HardDriveWithExternalDataItem extends AbstractBlockDeviceItem
@Override
protected String getOrCreateDescriptionId() {
return "item.oc2.hard_drive";
if (descriptionId == null) {
descriptionId = Util.makeDescriptionId("item", new ResourceLocation(API.MOD_ID, "hard_drive"));
}
return descriptionId;
}
}

View File

@@ -1,6 +1,16 @@
package li.cil.oc2.common.item;
import li.cil.oc2.api.API;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Util;
import javax.annotation.Nullable;
public final class MemoryItem extends AbstractStorageItem {
@Nullable private String descriptionId;
///////////////////////////////////////////////////////////////////
public MemoryItem(final int defaultCapacity) {
super(defaultCapacity);
}
@@ -9,6 +19,9 @@ public final class MemoryItem extends AbstractStorageItem {
@Override
protected String getOrCreateDescriptionId() {
return "item.oc2.memory";
if (descriptionId == null) {
descriptionId = Util.makeDescriptionId("item", new ResourceLocation(API.MOD_ID, "memory"));
}
return descriptionId;
}
}

View File

@@ -16,9 +16,11 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.function.Supplier;
import static li.cil.oc2.common.util.TranslationUtils.text;
public final class RequestImportedFileMessage {
private static final Logger LOGGER = LogManager.getLogger();
private static final TranslationTextComponent FILE_TOO_LARGE_TEXT = new TranslationTextComponent("message.oc2.import_file.file_too_large");
private static final TranslationTextComponent FILE_TOO_LARGE_TEXT = text("message.{mod}.import_file.file_too_large");
///////////////////////////////////////////////////////////////////

View File

@@ -1,6 +1,7 @@
package li.cil.oc2.common.serialization;
import com.google.common.collect.HashMultimap;
import li.cil.oc2.api.API;
import li.cil.oc2.common.Constants;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.storage.FolderName;
@@ -32,7 +33,7 @@ public final class BlobStorage {
///////////////////////////////////////////////////////////////////
private static final FolderName BLOBS_FOLDER_NAME = new FolderName("oc2-blobs");
private static final FolderName BLOBS_FOLDER_NAME = new FolderName(API.MOD_ID + "-blobs");
private static final HashMultimap<UUID, Future<Void>> WRITE_HANDLES = HashMultimap.create();
private static final HashMultimap<UUID, Future<Void>> READ_HANDLES = HashMultimap.create();

View File

@@ -0,0 +1,17 @@
package li.cil.oc2.common.util;
import li.cil.oc2.api.API;
import net.minecraft.util.text.TranslationTextComponent;
public final class TranslationUtils {
public static String key(final String pattern) {
return pattern.replaceAll("\\{mod}", API.MOD_ID);
}
public static TranslationTextComponent text(final String pattern) {
return new TranslationTextComponent(key(pattern));
}
private TranslationUtils() {
}
}