From 771e5b98468059ea3cb5bfb7fa33ad69ecf12765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 14 Jul 2021 22:33:46 +0200 Subject: [PATCH] Util methods for centralized local key and text component generation. Future-proof item description id generation. --- .../oc2/client/gui/BusInterfaceScreen.java | 4 +- .../cil/oc2/client/gui/FileChooserScreen.java | 17 ++++---- .../li/cil/oc2/client/gui/util/GuiUtils.java | 8 ++-- .../java/li/cil/oc2/common/Constants.java | 40 ++++++++++--------- .../oc2/common/bus/device/DeviceTypes.java | 5 ++- .../cil/oc2/common/item/FlashMemoryItem.java | 8 +++- .../item/FlashMemoryWithExternalDataItem.java | 7 +++- .../li/cil/oc2/common/item/HardDriveItem.java | 11 ++++- .../item/HardDriveWithExternalDataItem.java | 10 ++++- .../li/cil/oc2/common/item/MemoryItem.java | 15 ++++++- .../message/RequestImportedFileMessage.java | 4 +- .../oc2/common/serialization/BlobStorage.java | 3 +- .../cil/oc2/common/util/TranslationUtils.java | 17 ++++++++ 13 files changed, 109 insertions(+), 40 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/util/TranslationUtils.java diff --git a/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java b/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java index c949ca50..38ba4193 100644 --- a/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java @@ -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); diff --git a/src/main/java/li/cil/oc2/client/gui/FileChooserScreen.java b/src/main/java/li/cil/oc2/client/gui/FileChooserScreen.java index 470e1d9f..342f65a9 100644 --- a/src/main/java/li/cil/oc2/client/gui/FileChooserScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/FileChooserScreen.java @@ -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"); /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/client/gui/util/GuiUtils.java b/src/main/java/li/cil/oc2/client/gui/util/GuiUtils.java index 65d443d2..0f8c339b 100644 --- a/src/main/java/li/cil/oc2/client/gui/util/GuiUtils.java +++ b/src/main/java/li/cil/oc2/client/gui/util/GuiUtils.java @@ -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 WARNING_BY_DEVICE_TYPE = Util.make(() -> { final HashMap 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; }); diff --git a/src/main/java/li/cil/oc2/common/Constants.java b/src/main/java/li/cil/oc2/common/Constants.java index ae43655c..f3e881dc 100644 --- a/src/main/java/li/cil/oc2/common/Constants.java +++ b/src/main/java/li/cil/oc2/common/Constants.java @@ -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"); } diff --git a/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java b/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java index b5becd6b..c2e0a9ff 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java +++ b/src/main/java/li/cil/oc2/common/bus/device/DeviceTypes.java @@ -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 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) )); } } diff --git a/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java b/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java index d1de83e8..f1b9fe41 100644 --- a/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java +++ b/src/main/java/li/cil/oc2/common/item/FlashMemoryItem.java @@ -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; } } diff --git a/src/main/java/li/cil/oc2/common/item/FlashMemoryWithExternalDataItem.java b/src/main/java/li/cil/oc2/common/item/FlashMemoryWithExternalDataItem.java index 389c0825..f1ba2159 100644 --- a/src/main/java/li/cil/oc2/common/item/FlashMemoryWithExternalDataItem.java +++ b/src/main/java/li/cil/oc2/common/item/FlashMemoryWithExternalDataItem.java @@ -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; } } diff --git a/src/main/java/li/cil/oc2/common/item/HardDriveItem.java b/src/main/java/li/cil/oc2/common/item/HardDriveItem.java index 236d4196..eb0bb936 100644 --- a/src/main/java/li/cil/oc2/common/item/HardDriveItem.java +++ b/src/main/java/li/cil/oc2/common/item/HardDriveItem.java @@ -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; } } diff --git a/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java b/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java index d04ed0ac..0a02ce55 100644 --- a/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java +++ b/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java @@ -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; } } diff --git a/src/main/java/li/cil/oc2/common/item/MemoryItem.java b/src/main/java/li/cil/oc2/common/item/MemoryItem.java index 7c66d368..fc061d4f 100644 --- a/src/main/java/li/cil/oc2/common/item/MemoryItem.java +++ b/src/main/java/li/cil/oc2/common/item/MemoryItem.java @@ -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; } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java b/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java index 45ebe099..6d7239fd 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java @@ -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"); /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java b/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java index a3688599..5aff7f11 100644 --- a/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java +++ b/src/main/java/li/cil/oc2/common/serialization/BlobStorage.java @@ -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> WRITE_HANDLES = HashMultimap.create(); private static final HashMultimap> READ_HANDLES = HashMultimap.create(); diff --git a/src/main/java/li/cil/oc2/common/util/TranslationUtils.java b/src/main/java/li/cil/oc2/common/util/TranslationUtils.java new file mode 100644 index 00000000..77812d8c --- /dev/null +++ b/src/main/java/li/cil/oc2/common/util/TranslationUtils.java @@ -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() { + } +}