Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/content/Modpacks/Changes/v7.5.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ Failure reasons are displayed in:
You are supposed to replace `ModifierFunction.NULL` with `ModifierFunction.cancel(reason)` to tell the machine why the recipe fails to start.
```patch
- return ModifierFunction.NULL;
+ return ModifierFunction.cancel(Component.translatable("gtceu.recipe_modifier.xxx"));
+ return ModifierFunction.cancel(Component.translatable("recipe_modifier.gtceu.xxx"));
```

Also, if you cancel a recipe in `IRecipeLogicMachine#beforeWorking()`, you are supposed to add some custom reason info like:
Expand Down
650 changes: 325 additions & 325 deletions src/generated/resources/assets/gtceu/lang/en_us.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine;
import com.gregtechceu.gtceu.api.sync_system.managed.ManagedSyncEntityBlock;
import com.gregtechceu.gtceu.common.machine.owner.MachineOwner;
import com.gregtechceu.gtceu.data.lang.LangUtil;
import com.gregtechceu.gtceu.utils.ExtendedUseOnContext;

import net.minecraft.MethodsReturnNonnullByDefault;
Expand Down Expand Up @@ -191,11 +192,12 @@ public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState s
@Override
public void appendHoverText(ItemStack stack, @Nullable BlockGetter level, List<Component> tooltip,
TooltipFlag flag) {
definition.getTooltipBuilder().accept(stack, tooltip);
String mainKey = definition.getId().toLanguageKey("machine", "tooltip");
if (Language.getInstance().has(mainKey)) {
tooltip.add(1, Component.translatable(mainKey));
if (LangUtil.hasSingleOrMultiLang(mainKey)) {
var langs = LangUtil.getSingleOrMultiLang(mainKey);
tooltip.addAll(List.of(langs));
}
definition.getTooltipBuilder().accept(stack, tooltip);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.gregtechceu.gtceu.utils.FormattingUtil;
import com.gregtechceu.gtceu.utils.GTUtil;

import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.fluids.FluidStack;
Expand Down Expand Up @@ -88,16 +89,16 @@ default void appendTooltips(@NotNull List<Component> tooltip, boolean showToolsI
if (showTemperatureInfo)
tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.max_temperature",
FormattingUtil.formatTemperature(getMaxFluidTemperature())));
if (isGasProof()) tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.gas_proof"));
else tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.not_gas_proof"));
if (isPlasmaProof()) tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.plasma_proof"));
if (isCryoProof()) tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.cryo_proof"));
if (isGasProof()) tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.gas_proof").withStyle(ChatFormatting.GOLD));
else tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.not_gas_proof").withStyle(ChatFormatting.DARK_RED));
if (isPlasmaProof()) tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.plasma_proof").withStyle(ChatFormatting.GOLD));
if (isCryoProof()) tooltip.add(Component.translatable("tooltip.gtceu.fluid_pipe.cryo_proof").withStyle(ChatFormatting.GOLD));
getContainedAttributes().forEach(a -> a.appendContainerTooltips(tooltip::add));
} else if (isGasProof() || isCryoProof() || isPlasmaProof() || !getContainedAttributes().isEmpty()) {
if (showToolsInfo) {
tooltip.add(Component.translatable("gtceu.tooltip.tool_fluid_hold_shift"));
tooltip.add(Component.translatable("common.gtceu.tooltip.tool_fluid_hold_shift"));
} else {
tooltip.add(Component.translatable("gtceu.tooltip.fluid_pipe_hold_shift"));
tooltip.add(Component.translatable("common.gtceu.tooltip.fluid_pipe_hold_shift"));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public static String getTitle() {
}

public String getTooltip() {
return "gtceu.io." + localeName;
return "common.gtceu.io." + localeName;
}

public boolean support(IO io) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public String slotName(IO io, int index) {
}

public MutableComponent getName() {
return Component.translatable("recipe.capability.%s.name".formatted(id.getPath()));
return Component.translatable(id.toLanguageKey("recipe_capability"));
}

public MutableComponent getColoredName() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ private enum SmartFilteringMode {
}

public String getTooltip() {
return "cover.item_smart_filter.filtering_mode." + localeName;
return "cover.gtceu.smart_item_filter.filtering_mode." + localeName;
}

public static UITexture[] getTextures() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,12 @@
import com.gregtechceu.gtceu.api.item.tool.MaterialToolTier;
import com.gregtechceu.gtceu.api.registry.GTRegistries;
import com.gregtechceu.gtceu.api.registry.registrate.BuilderBase;
import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate;
import com.gregtechceu.gtceu.common.data.GTMaterials;
import com.gregtechceu.gtceu.common.data.GTMedicalConditions;
import com.gregtechceu.gtceu.integration.kjs.helpers.MaterialStackWrapper;
import com.gregtechceu.gtceu.utils.FormattingUtil;
import com.gregtechceu.gtceu.utils.GTMath;

import com.tterrag.registrate.providers.ProviderType;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
Expand Down Expand Up @@ -165,6 +162,11 @@ public String getDefaultTranslation() {
return materialInfo.overriddenName != null ? materialInfo.overriddenName : toEnglishName(getName());
}

@ApiStatus.Internal
public Map<TagPrefix, String> getLangOverrides() {
return materialInfo.langOverrides;
}

public String getModid() {
return materialInfo.resourceLocation.getNamespace();
}
Expand Down Expand Up @@ -585,7 +587,6 @@ public static class Builder extends BuilderBase<Material> {

private Set<TagPrefix> ignoredTagPrefixes = null;
private final List<TagKey<Item>> itemTags = new ArrayList<>();
private final Map<TagPrefix, String> langOverrides = new Object2ObjectOpenHashMap<>();
/*
* Temporary data used to determine the final material formula tooltip.
*/
Expand Down Expand Up @@ -1854,7 +1855,7 @@ public Builder addDefaultEnchant(Enchantment enchant, int level) {
* Generated during your addon's datagen with key {@code item.<mod_id>.<item_id>}
*/
public Builder langOverride(TagPrefix prefix, String englishLang) {
langOverrides.put(prefix, englishLang);
materialInfo.langOverrides.put(prefix, englishLang);
return this;
}

Expand Down Expand Up @@ -1883,18 +1884,6 @@ public Material buildAndRegister() {
properties.removeProperty(HAZARD);
}

if (!langOverrides.isEmpty()) {
var registrate = GTRegistrate.createIgnoringListenerErrors(id.getNamespace());

registrate.addDataGenerator(ProviderType.LANG, (provider -> {
for (var entry: langOverrides.entrySet()) {
var key = String.format("item.%s.%s", id.getNamespace(),
entry.getKey().idPattern().formatted(id.getPath()));
provider.add(key, entry.getValue());
}
}));
}

var mat = new Material(materialInfo, properties, flags);
if (!itemTags.isEmpty()) {
mat.setItemTags(itemTags);
Expand Down Expand Up @@ -1935,6 +1924,10 @@ private static class MaterialInfo {
@Getter
private String overriddenName;

@Setter
@Getter
private Map<TagPrefix, String> langOverrides;

/**
* The colors of this Material.
* if any past index 0 are -1, they aren't used.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public boolean isAffected(TagPrefix prefix) {
}

public Component getTranslatableName() {
return Component.translatable("tooltip.gtceu.hazard_trigger." + this.name);
return Component.translatable("hazard_trigger.gtceu." + this.name);
}

@Override
Expand Down
26 changes: 18 additions & 8 deletions src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

import com.tterrag.registrate.providers.ProviderType;
import com.tterrag.registrate.providers.RegistrateLangProvider;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.registries.Registries;
import net.minecraft.locale.Language;
Expand Down Expand Up @@ -66,13 +67,16 @@

import java.util.*;
import java.util.function.*;
import java.util.stream.Collectors;

import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.Conditions.*;

@SuppressWarnings("unused")
@Accessors(chain = true, fluent = true)
public class TagPrefix {

private static final Set<String> namespaces = new ObjectOpenHashSet<>();

static {
GTRegistries.TAG_PREFIXES.unfreeze();
}
Expand Down Expand Up @@ -262,7 +266,7 @@ public boolean isEmpty() {
.unificationEnabled(true)
.generateItem(true)
.generationCondition(hasOreProperty)
.tooltip((mat, tooltips) -> tooltips.add(Component.translatable("tagprefix.crushed.tooltip.purify")));
.tooltip((mat, tooltips) -> tooltips.add(Component.translatable("tagprefix.gtceu.crushed_ore.purify_tooltip")));

// A hot Ingot, which has to be cooled down by a Vacuum Freezer.
public static final TagPrefix ingotHot = new TagPrefix(GTCEu.id("hotIngot"))
Expand Down Expand Up @@ -392,7 +396,7 @@ public boolean isEmpty() {
.unificationEnabled(true)
.generateItem(true)
.generationCondition(hasOreProperty)
.tooltip((mat, tooltips) -> tooltips.add(Component.translatable("tagprefix.ore_dust.tooltip.purify")));
.tooltip((mat, tooltips) -> tooltips.add(Component.translatable("tagprefix.gtceu.impure_dust.purify_tooltip")));

// Pure Dust worth of one Ingot or Gem.
public static final TagPrefix dustPure = new TagPrefix(GTCEu.id("pureDust"))
Expand All @@ -405,7 +409,7 @@ public boolean isEmpty() {
.unificationEnabled(true)
.generateItem(true)
.generationCondition(hasOreProperty)
.tooltip((mat, tooltips) -> tooltips.add(Component.translatable("tagprefix.ore_dust.tooltip.purify")));
.tooltip((mat, tooltips) -> tooltips.add(Component.translatable("tagprefix.gtceu.impure_dust.purify_tooltip")));

public static final TagPrefix dust = new TagPrefix(GTCEu.id("dust"))
.defaultTagPath("dusts/%s")
Expand Down Expand Up @@ -1116,8 +1120,11 @@ public TagPrefix(ResourceLocation id, boolean invertedName) {

// TODO actual datagen once we switch to registrate/forge registries

GTRegistrate registrate = GTRegistrate.createIgnoringListenerErrors(id.getNamespace());
registrate.addDataGenerator(ProviderType.LANG, this::generateTagPrefixLang);
if (!namespaces.contains(this.id.getNamespace())) {
GTRegistrate registrate = GTRegistrate.createIgnoringListenerErrors(id.getNamespace());
registrate.addDataGenerator(ProviderType.LANG, (provider -> generateTagPrefixLang(provider, this.id.getNamespace())));
namespaces.add(this.id.getNamespace());
}
}

public static TagPrefix oreTagPrefix(String name, TagKey<Block> miningToolTag) {
Expand Down Expand Up @@ -1458,8 +1465,11 @@ public interface BlockItemConstructor {
BlockItem create(Block block, Item.Properties properties, TagPrefix prefix, Material material);
}

private void generateTagPrefixLang(RegistrateLangProvider provider) {
provider.add(getUnlocalizedName(), langValue);
if (polymerLangValue != null) provider.add(("tagprefix.%s.polymer.%s").formatted(id.getNamespace(), id.getPath()), polymerLangValue);
private static void generateTagPrefixLang(RegistrateLangProvider provider, String namespace) {
var tagPrefixes = GTRegistries.TAG_PREFIXES.values().stream().filter(f -> f.id.getNamespace().equals(namespace)).collect(Collectors.toSet());
for (TagPrefix prefix: tagPrefixes) {
provider.add(prefix.getUnlocalizedName(), prefix.langValue);
if (prefix.polymerLangValue != null) provider.add(("tagprefix.%s.polymer.%s").formatted(prefix.id.getNamespace(), prefix.id.getPath()), prefix.polymerLangValue);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

public enum FluidState {

LIQUID("tooltip.gtceu.fluid_state.liquid", CustomTags.LIQUID_FLUIDS),
GAS("tooltip.gtceu.fluid_state.gas", Tags.Fluids.GASEOUS),
PLASMA("tooltip.gtceu.fluid_state.plasma", CustomTags.PLASMA_FLUIDS),
LIQUID("material.gtceu.fluid_state.liquid", CustomTags.LIQUID_FLUIDS),
GAS("material.gtceu.fluid_state.gas", Tags.Fluids.GASEOUS),
PLASMA("material.gtceu.fluid_state.plasma", CustomTags.PLASMA_FLUIDS),
;

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.gregtechceu.gtceu.GTCEu;

import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;

public final class FluidAttributes {
Expand All @@ -10,8 +11,8 @@ public final class FluidAttributes {
* Attribute for acidic fluids.
*/
public static final FluidAttribute ACID = new FluidAttribute(GTCEu.id("acid"),
list -> list.accept(Component.translatable("tooltip.gtceu.fluid_property.acid")),
list -> list.accept(Component.translatable("tooltip.gtceu.fluid_pipe.acid_proof")));
list -> list.accept(Component.translatable("material.gtceu.fluid_property.acid").withStyle(ChatFormatting.GOLD)),
list -> list.accept(Component.translatable("tooltip.gtceu.fluid_pipe.acid_proof").withStyle(ChatFormatting.GOLD)));

private FluidAttributes() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,36 @@ public final class FluidStorageKeys {
public static final FluidStorageKey LIQUID = new FluidStorageKey(GTCEu.id("liquid"),
MaterialIconType.liquid,
m -> prefixedRegisteredName("liquid_", FluidStorageKeys.LIQUID, m),
m -> m.hasProperty(PropertyKey.DUST) ? "fluid.gtceu.liquid_generic" : "fluid.gtceu.generic",
m -> m.hasProperty(PropertyKey.DUST) ? "material.gtceu.fluid_type.liquid_generic" : "material.gtceu.fluid_type.generic",
FluidState.LIQUID, 0);

public static final FluidStorageKey GAS = new FluidStorageKey(GTCEu.id("gas"),
MaterialIconType.gas,
m -> postfixedRegisteredName("_gas", FluidStorageKeys.GAS, m),
m -> {
if (m.hasProperty(PropertyKey.DUST)) {
return "fluid.gtceu.gas_vapor";
return "material.gtceu.fluid_type.gas_vapor";
}
if (m.isElement()) {
FluidProperty property = m.getProperty(PropertyKey.FLUID);
if (m.isElement() || (property != null && property.getPrimaryKey() != FluidStorageKeys.LIQUID)) {
return "fluid.gtceu.gas_generic";
return "material.gtceu.fluid_type.gas_generic";
}
}
return "fluid.gtceu.generic";
return "material.gtceu.fluid_type.generic";
},
FluidState.GAS, 0);

public static final FluidStorageKey PLASMA = new FluidStorageKey(GTCEu.id("plasma"),
MaterialIconType.plasma,
m -> m.getName() + "_plasma",
m -> "fluid.gtceu.plasma",
m -> "material.gtceu.fluid_type.plasma",
FluidState.PLASMA, -1);

public static final FluidStorageKey MOLTEN = new FluidStorageKey(GTCEu.id("molten"), CustomTags.MOLTEN_FLUIDS,
MaterialIconType.molten,
m -> "molten_" + m.getName(),
m -> "fluid.gtceu.molten",
m -> "material.gtceu.fluid_type.molten",
FluidState.LIQUID, -1);

private FluidStorageKeys() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public InteractionResultHolder<ItemStack> use(Item item, Level level, Player pla
if (!level.isClientSide) {
boolean isInDischargeMode = isInDischargeMode(itemStack);
String locale = "item.electric.discharge_mode." + (isInDischargeMode ? "disabled" : "enabled");
player.displayClientMessage(Component.translatable(locale), true);
player.displayClientMessage(Component.translatable(locale).withStyle(ChatFormatting.YELLOW), true);
setInDischargeMode(itemStack, !isInDischargeMode);
}
return InteractionResultHolder.success(itemStack);
Expand Down Expand Up @@ -211,7 +211,7 @@ public static void addCurrentChargeTooltip(List<Component> tooltip, long current
if (durationCurrent.getSeconds() <= 60) {
maxChargeTime = durationMax.getSeconds();
currentChargeTime = durationCurrent.toSeconds();
unitKey = "gtceu.gui.seconds";
unitKey = "common.gtceu.seconds";
} else if (durationCurrent.toMinutes() <= 60) {
maxChargeTime = durationMax.toMinutes();
currentChargeTime = durationCurrent.toMinutes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public FilteredFluidContainer(int capacity, boolean allowPartialFill, Predicate<
public void appendHoverText(ItemStack stack, @Nullable Level level, List<Component> tooltipComponents,
TooltipFlag isAdvanced) {
FluidUtil.getFluidContained(stack).ifPresent(fluid -> tooltipComponents
.add(Component.translatable("gtceu.universal.tooltip.fluid_stored", fluid.getDisplayName(),
.add(Component.translatable("common.gtceu.tooltip.fluid_stored", fluid.getDisplayName(),
fluid.getAmount())));
}
}
Loading
Loading