diff --git a/src/main/java/gregtech/api/items/metaitem/MetaItem.java b/src/main/java/gregtech/api/items/metaitem/MetaItem.java
index ba1f713f010..c0dac9c52fd 100644
--- a/src/main/java/gregtech/api/items/metaitem/MetaItem.java
+++ b/src/main/java/gregtech/api/items/metaitem/MetaItem.java
@@ -72,21 +72,27 @@
import java.time.Duration;
import java.time.Instant;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
/**
- * MetaItem is item that can have up to Short.MAX_VALUE items inside one id.
- * These items even can be edible, have custom behaviours, be electric or act like fluid containers!
- * They can also have different burn time, plus be handheld, oredicted or invisible!
- * They also can be reactor components.
+ * MetaItem is item that can have up to Short.MAX_VALUE items inside one id. These items even can be edible, have custom
+ * behaviours, be electric or act like fluid containers! They can also have different burn time, plus be handheld,
+ * oredicted or invisible! They also can be reactor components.
*
* You can also extend this class and occupy some of it's MetaData, and just pass an meta offset in constructor, and
* everything will work properly.
*
* Items are added in MetaItem via {@link #addItem(int, String)}. You will get {@link MetaValueItem} instance, which you
* can configure in builder-alike pattern:
- * {@code addItem(0, "test_item").addStats(new ElectricStats(10000, 1, false)) }
- * This will add single-use (not rechargeable) LV battery with initial capacity 10000 EU
+ * {@code addItem(0, "test_item").addStats(new ElectricStats(10000, 1, false)) } This will add single-use (not
+ * rechargeable) LV battery with initial capacity 10000 EU
*/
@Optional.Interface(modid = GTValues.MODID_ECORE, iface = "com.enderio.core.common.interfaces.IOverlayRenderAware")
public abstract class MetaItem.MetaValueItem> extends Item
@@ -110,8 +116,9 @@ public static List> getMetaItems() {
private CreativeTabs[] defaultCreativeTabs = new CreativeTabs[] { GregTechAPI.TAB_GREGTECH };
private final Set additionalCreativeTabs = new ObjectArraySet<>();
+ private String translationKey = "metaitem";
+
public MetaItem(short metaItemOffset) {
- setTranslationKey("meta_item");
setHasSubtypes(true);
this.metaItemOffset = metaItemOffset;
META_ITEMS.add(this);
@@ -354,6 +361,7 @@ public void onPlayerStoppedUsing(@NotNull ItemStack stack, @NotNull World world,
}
}
+ @NotNull
@Override
public ItemStack onItemUseFinish(@NotNull ItemStack stack, @NotNull World world, @NotNull EntityLivingBase player) {
if (player instanceof EntityPlayer) {
@@ -527,10 +535,28 @@ public boolean shouldCauseReequipAnimation(@NotNull ItemStack oldStack, @NotNull
return !ItemStack.areItemStacksEqual(oldStack, newStack);
}
+ @NotNull
@Override
- public String getTranslationKey(ItemStack stack) {
- T metaItem = getItem(stack);
- return metaItem == null ? getTranslationKey() : getTranslationKey() + "." + metaItem.unlocalizedName;
+ public MetaItem setTranslationKey(@NotNull String key) {
+ this.translationKey = Objects.requireNonNull(key, "key == null");
+ return this;
+ }
+
+ @NotNull
+ @Override
+ public String getTranslationKey() {
+ return getTranslationKey((T) null);
+ }
+
+ @NotNull
+ @Override
+ public String getTranslationKey(@NotNull ItemStack stack) {
+ return getTranslationKey(getItem(stack));
+ }
+
+ @NotNull
+ protected String getTranslationKey(@Nullable T metaValueItem) {
+ return metaValueItem == null ? this.translationKey : this.translationKey + "." + metaValueItem.unlocalizedName;
}
@NotNull
@@ -541,7 +567,7 @@ public String getItemStackDisplayName(ItemStack stack) {
if (item == null) {
return "invalid item";
}
- String unlocalizedName = String.format("metaitem.%s.name", item.unlocalizedName);
+ String unlocalizedName = getTranslationKey(item) + ".name";
if (item.getNameProvider() != null) {
return item.getNameProvider().getItemStackDisplayName(stack, unlocalizedName);
}
@@ -564,7 +590,7 @@ public void addInformation(@NotNull ItemStack itemStack, @Nullable World worldIn
@NotNull ITooltipFlag tooltipFlag) {
T item = getItem(itemStack);
if (item == null) return;
- String unlocalizedTooltip = "metaitem." + item.unlocalizedName + ".tooltip";
+ String unlocalizedTooltip = getTranslationKey(item) + ".tooltip";
if (I18n.hasKey(unlocalizedTooltip)) {
Collections.addAll(lines, LocalizationUtils.formatLines(unlocalizedTooltip));
}
@@ -660,25 +686,27 @@ public ItemStack getContainerItem(@NotNull ItemStack itemStack) {
@NotNull
@Override
- public CreativeTabs[] getCreativeTabs() {
+ public CreativeTabs @NotNull [] getCreativeTabs() {
if (additionalCreativeTabs.isEmpty()) return defaultCreativeTabs; // short circuit
Set tabs = new ObjectArraySet<>(additionalCreativeTabs);
tabs.addAll(Arrays.asList(defaultCreativeTabs));
return tabs.toArray(new CreativeTabs[0]);
}
+ @NotNull
@Override
- public MetaItem setCreativeTab(CreativeTabs tab) {
+ public MetaItem setCreativeTab(@NotNull CreativeTabs tab) {
this.defaultCreativeTabs = new CreativeTabs[] { tab };
return this;
}
- public MetaItem setCreativeTabs(CreativeTabs... tabs) {
+ @NotNull
+ public MetaItem setCreativeTabs(@NotNull CreativeTabs @NotNull... tabs) {
this.defaultCreativeTabs = tabs;
return this;
}
- public void addAdditionalCreativeTabs(CreativeTabs... tabs) {
+ public void addAdditionalCreativeTabs(@NotNull CreativeTabs @NotNull... tabs) {
for (CreativeTabs tab : tabs) {
if (!ArrayUtils.contains(defaultCreativeTabs, tab) && tab != CreativeTabs.SEARCH) {
additionalCreativeTabs.add(tab);
@@ -687,7 +715,7 @@ public void addAdditionalCreativeTabs(CreativeTabs... tabs) {
}
@Override
- protected boolean isInCreativeTab(CreativeTabs tab) {
+ protected boolean isInCreativeTab(@NotNull CreativeTabs tab) {
return tab == CreativeTabs.SEARCH ||
ArrayUtils.contains(defaultCreativeTabs, tab) ||
additionalCreativeTabs.contains(tab);