LibJF and some improvements

This commit is contained in:
JFronny 2021-05-19 16:03:59 +02:00
parent 2e3c7dd8df
commit 5bde64b3ca
No known key found for this signature in database
GPG Key ID: BEC5ACBBD4EE17E5
15 changed files with 90 additions and 11409 deletions

View File

@ -1,4 +1,4 @@
image: gradle:alpine
image: gradle:jdk16
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false"

11204
AOF.cache

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,12 @@
plugins {
id 'fabric-loom' version '0.5.42'
id 'maven-publish'
id "com.modrinth.minotaur" version "1.1.0"
id "com.matthewprenger.cursegradle" version "1.4.0"
}
apply from: "https://gitlab.com/-/snippets/2121059/raw/master/jfbase.gradle"
repositories {
maven {
url "https://jitpack.io"
name = 'TerraformersMC'
url = 'https://maven.terraformersmc.com/'
}
}
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
archivesBaseName = project.archives_base_name
version = "${project.mod_version}+${project.minecraft_version}"
group = project.maven_group
repositories {
maven { url = "https://maven.terraformersmc.com/"; name = "ModMenu" }
maven { url = "https://maven.shedaniel.me/"; name = "Cloth" }
}
dependencies {
//to change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
@ -32,81 +16,7 @@ dependencies {
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
// You may need to force-disable transitiveness on them.
modCompile "com.github.vbauer:yandex-translate-api:1.4.2"
include "com.github.vbauer:yandex-translate-api:1.4.2"
download("https://gitlab.com/jfmods/LibJF/-/jobs/artifacts/master/raw/latest-dev.jar?job=build_test", "libjf")
modCompile "me.sargunvohra.mcmods:autoconfig1u:3.2.0-unstable"
include "me.sargunvohra.mcmods:autoconfig1u:3.2.0-unstable"
include modApi ("me.shedaniel.cloth:cloth-config-fabric:4.11.14")
modCompile("com.terraformersmc:modmenu:1.16.7")
modImplementation "com.terraformersmc:modmenu:1.16.9"
}
processResources {
inputs.property "version", project.version
from(sourceSets.main.resources.srcDirs) {
include "fabric.mod.json"
expand "version": project.version
}
from(sourceSets.main.resources.srcDirs) {
exclude "fabric.mod.json"
}
}
// ensure that the encoding is set to UTF-8, no matter what the system default is
// this fixes some edge cases with special characters not displaying correctly
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this task, sources will not be generated.
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = "sources"
from sourceSets.main.allSource
}
jar {
from "LICENSE"
}
import com.modrinth.minotaur.TaskModrinthUpload
task publishModrinth (type: TaskModrinthUpload){
token = System.getenv("MODRINTH_API_TOKEN")
projectId = 'YnU8kpyc'
versionNumber = "${project.mod_version}"
uploadFile = remapJar
addGameVersion("${project.minecraft_version}")
addLoader('fabric')
versionName = "[${project.minecraft_version}] ${project.mod_version}"
afterEvaluate {
tasks.publishModrinth.dependsOn(remapJar)
tasks.publishModrinth.dependsOn(sourcesJar)
}
}
curseforge {
apiKey = System.getenv("CURSEFORGE_API_TOKEN") == null ? "###" : System.getenv("CURSEFORGE_API_TOKEN")
project {
id = "394823"
releaseType = 'release'
addGameVersion "Fabric"
addGameVersion "${project.minecraft_version}"
changelog = ""
mainArtifact(file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar"))
mainArtifact.displayName = "[${project.minecraft_version}] ${project.mod_version}"
afterEvaluate {
uploadTask.dependsOn(remapJar)
}
}
options {
forgeGradleIntegration = false
}
}

View File

@ -3,12 +3,18 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.16.5
yarn_mappings=1.16.5+build.4
loader_version=0.11.1
yarn_mappings=1.16.5+build.9
loader_version=0.11.3
# Mod Properties
mod_version=1.1.0
mod_version=1.2.0
maven_group=io.gitlab.jfronny
archives_base_name=translater
# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.30.3+1.16
fabric_version=0.34.2+1.16
modrinth_id=YnU8kpyc
modrinth_required_dependencies=7a9qcRLy
modrinth_optional_dependencies=Gz5wa6j2
curseforge_id=394823
curseforge_required_dependencies=libjf
curseforge_optional_dependencies=modmenu

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -1,26 +1,21 @@
package io.gitlab.jfronny.translater;
import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
import me.sargunvohra.mcmods.autoconfig1u.annotation.ConfigEntry;
import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.Comment;
import io.gitlab.jfronny.libjf.config.Entry;
import io.gitlab.jfronny.libjf.config.JfConfig;
@Config(name = "TranslaterCF")
public class Cfg implements ConfigData {
@Comment("NOTE: remove the cache after you change the config!\nRegenerating the cache can take up to 3 hours for vanilla (5000 strings)\nWatch the log when in doubt\n\nThe amount of times to translate each element")
public int rounds = 5;
@Comment("Whether to fully break the texts content by translating from the wrong language (enable for complete breaking)")
public boolean breakFully = false;
@Comment("The language to translate to - Leave empty for auto-detection (might break text even more)")
public String targetLanguage = "en";
@Comment("Significantly slows down the loading time but gives a visual of the progress. Values: Full, Console, None")
@ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
public progressMode renderProgress = progressMode.None;
@Comment("Use this if something is broken. This initiates the regeneration of the cache")
@ConfigEntry.Gui.RequiresRestart
public boolean forceRegenerate = false;
public class Cfg implements JfConfig {
@Entry
public static int rounds = 5;
@Entry
public static boolean breakFully = false;
@Entry
public static String targetLanguage = "en";
@Entry
public static ProgressMode renderProgress = ProgressMode.None;
@Entry
public static boolean forceRegenerate = false;
public enum progressMode {
public enum ProgressMode {
Full,
Console,
None

View File

@ -1,12 +0,0 @@
package io.gitlab.jfronny.translater;
import io.github.prospector.modmenu.api.ConfigScreenFactory;
import io.github.prospector.modmenu.api.ModMenuApi;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
public class ModMenu implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return screen -> AutoConfig.getConfigScreen(Cfg.class, screen).get();
}
}

View File

@ -4,13 +4,10 @@ import io.gitlab.jfronny.translater.transformer.CachingTransformer;
import io.gitlab.jfronny.translater.transformer.TransformingMap;
import io.gitlab.jfronny.translater.transformer.TranslatingTransformer;
import io.gitlab.jfronny.translater.translation.WurstGoogleBackend;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -18,43 +15,26 @@ import java.util.Map;
@Environment(EnvType.CLIENT)
public class Translater implements ClientModInitializer {
public static final String MOD_NAME = "Translater";
public static final String MOD_ID = "translater";
private static final Logger logger;
public static Cfg cfg;
public static final Logger LOGGER = LogManager.getFormatterLogger(MOD_ID);
private static TransformingMap map;
static {
AutoConfig.register(Cfg.class, JanksonConfigSerializer::new);
cfg = AutoConfig.getConfigHolder(Cfg.class).getConfig();
logger = LogManager.getFormatterLogger(MOD_ID);
}
@Override
public void onInitializeClient() {
}
public static boolean Gui() {
return cfg.renderProgress == Cfg.progressMode.Full;
return Cfg.renderProgress == Cfg.ProgressMode.Full;
}
public static boolean Cli() {
return cfg.renderProgress == Cfg.progressMode.Full || cfg.renderProgress == Cfg.progressMode.Console;
}
public static void Warn(String msg) {
logger.log(Level.WARN, "[" + MOD_NAME + "] " + msg);
}
public static void Log(String msg) {
logger.log(Level.INFO, "[" + MOD_NAME + "] " + msg);
return Cfg.renderProgress == Cfg.ProgressMode.Full || Cfg.renderProgress == Cfg.ProgressMode.Console;
}
public static TransformingMap getMap(Map<String, String> base) {
if (map == null) {
map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new WurstGoogleBackend())));
//map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new EmptyBackend())));
//map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new YandexTranslationBackend())));
map.init();
}
return map;

View File

@ -29,7 +29,7 @@ public class MixinLanguage {
@Inject(at = @At("HEAD"), method = "setInstance")
private static void languageSetInstance(Language language, CallbackInfo ci) {
if (FIELD == null) {
Translater.Warn("Could not set language map, field not found");
Translater.LOGGER.warn("Could not set language map, field not found");
return;
}
if (language instanceof TranslationStorage) {

View File

@ -1,5 +1,7 @@
package io.gitlab.jfronny.translater.mixin;
import io.gitlab.jfronny.libjf.Libjf;
import io.gitlab.jfronny.translater.Cfg;
import io.gitlab.jfronny.translater.Translater;
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
@ -23,6 +25,7 @@ public class Plugin implements IMixinConfigPlugin {
@SuppressWarnings("ReferenceToMixin")
@Override
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
Libjf.registerConfig(Translater.MOD_ID, Cfg.class);
if (Objects.equals(mixinClassName, MixinLanguage.class.getName()))
return true;
else if (Objects.equals(mixinClassName, MixinMinecraftClient.class.getName()))

View File

@ -1,16 +1,17 @@
package io.gitlab.jfronny.translater.transformer;
import io.gitlab.jfronny.libjf.Libjf;
import io.gitlab.jfronny.translater.Cfg;
import io.gitlab.jfronny.translater.Translater;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.ConfigManager;
import net.fabricmc.loader.api.FabricLoader;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Properties;
public class CachingTransformer implements ITransformer {
private static final File cacheFile = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Translater.cache");
private static final Path cacheFile = FabricLoader.getInstance().getConfigDir().resolve(Translater.MOD_ID + ".cache");
Properties cache;
private final ITransformer transformer;
@ -22,7 +23,7 @@ public class CachingTransformer implements ITransformer {
if (!cache.containsKey(str)) {
String transformed = transformer.transform(str);
if (transformed == null) {
Translater.Warn("Very concerning, got null for non-null key " + str);
Translater.LOGGER.warn("Very concerning, got null for non-null key " + str);
return null;
}
cache.put(str, transformed);
@ -35,33 +36,32 @@ public class CachingTransformer implements ITransformer {
public CachingTransformer(ITransformer baseTransformer) {
transformer = baseTransformer;
cache = new Properties();
if (Translater.cfg.forceRegenerate) {
Translater.cfg.forceRegenerate = false;
((ConfigManager<Cfg>) AutoConfig.getConfigHolder(Cfg.class)).save();
if (Cfg.forceRegenerate) {
Cfg.forceRegenerate = false;
Libjf.getConfigs().get(Translater.MOD_ID).write();
} else {
//Load cache
if (cacheFile.exists()) {
try {
Translater.Log("Loading cache");
FileInputStream inS = new FileInputStream(cacheFile);
if (Files.exists(cacheFile) && Files.isRegularFile(cacheFile)) {
Translater.LOGGER.info("Loading cache");
try (InputStream inS = Files.newInputStream(cacheFile)) {
cache.load(inS);
inS.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
Translater.Log("Initializing default cache");
//Save default cache if parameters are default
if (!Translater.cfg.breakFully && Translater.cfg.rounds == 5) {
try {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inS = classLoader.getResourceAsStream("namecache.ini.vanilla");
if (inS != null) {
if (!Cfg.breakFully && Cfg.rounds == 5) {
Translater.LOGGER.info("Initializing default cache");
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inS = classLoader.getResourceAsStream("namecache.ini");
if (inS != null) {
try {
cache.load(inS);
inS.close();
Save();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@ -70,10 +70,8 @@ public class CachingTransformer implements ITransformer {
}
private void Save() {
try {
FileOutputStream outS = new FileOutputStream(cacheFile);
try (OutputStream outS = Files.newOutputStream(cacheFile)) {
cache.store(outS, "---Lang---");
outS.close();
} catch (IOException e) {
e.printStackTrace();
}

View File

@ -28,7 +28,7 @@ public class TransformingMap implements Map<String, String> {
for (String value : strings) {
if (Translater.Cli()) {
initI++;
Translater.Log("Transforming " + initI + "/" + initMax);
Translater.LOGGER.info("Transforming " + initI + "/" + initMax);
}
if (Translater.Gui() && initI % 10 == 0)
((IMinecraftClientMixin) MinecraftClient.getInstance()).forceRender();
@ -59,6 +59,8 @@ public class TransformingMap implements Map<String, String> {
@Override
public String get(Object o) {
if (o instanceof String && ((String)o).startsWith("translater."))
return backer.get(o);
return transformer.transform(backer.get(o));
}

View File

@ -1,5 +1,6 @@
package io.gitlab.jfronny.translater.transformer;
import io.gitlab.jfronny.translater.Cfg;
import io.gitlab.jfronny.translater.Translater;
import io.gitlab.jfronny.translater.translation.ITranslationBackend;
import org.apache.commons.lang3.StringUtils;
@ -10,9 +11,9 @@ import java.util.Set;
//The actual translation methods
public class TranslatingTransformer<T> implements ITransformer {
private Random rnd;
private Collection<T> languages;
private ITranslationBackend<T> backend;
private final Random rnd;
private final Collection<T> languages;
private final ITranslationBackend<T> backend;
@Override
public String transform(String str) {
try {
@ -56,8 +57,8 @@ public class TranslatingTransformer<T> implements ITransformer {
}
}
catch (Exception e) {
Translater.Warn("Failed to transform: \"" + str + "\" (" + str.length() + " characters)");
Translater.Warn("Please report this bug with the mod containing the lang file");
Translater.LOGGER.warn("Failed to transform: \"" + str + "\" (" + str.length() + " characters)");
Translater.LOGGER.warn("Please report this bug with the mod containing the lang file");
throw e;
}
}
@ -67,22 +68,22 @@ public class TranslatingTransformer<T> implements ITransformer {
if (Translater.stringInvalid(str))
return str;
T startLang = StringUtils.isAlpha(Translater.cfg.targetLanguage) && Translater.cfg.targetLanguage.length() == 2
? backend.parseLang(Translater.cfg.targetLanguage)
T startLang = StringUtils.isAlpha(Cfg.targetLanguage) && Cfg.targetLanguage.length() == 2
? backend.parseLang(Cfg.targetLanguage)
: backend.detect(str);
String currentState = str;
T currentLang = startLang;
for (int i = 0; i < Translater.cfg.rounds; i++) {
for (int i = 0; i < Cfg.rounds; i++) {
T newLang = selectRandom();
currentState = backend.translate(currentState, newLang, Translater.cfg.breakFully ? selectRandom() : currentLang);
currentState = backend.translate(currentState, newLang, Cfg.breakFully ? selectRandom() : currentLang);
currentLang = newLang;
}
currentState = backend.translate(currentState, startLang, currentLang);
if (Translater.Cli())
Translater.Log("Transformed: \"" + str + "\" to: \"" + currentState + "\"");
Translater.LOGGER.info("Transformed: \"" + str + "\" to: \"" + currentState + "\"");
return currentState;
} catch (Exception e) {
Translater.Warn("Failed to break: \"" + str + "\" (" + str.length() + " characters). Is your API key valid?");
Translater.LOGGER.warn("Failed to break: \"" + str + "\" (" + str.length() + " characters). Is your API key valid?");
throw e;
}
}

View File

@ -1,9 +1,16 @@
{
"text.autoconfig.TranslaterCF.title": "Translater",
"text.autoconfig.TranslaterCF.option.rounds": "Rounds",
"text.autoconfig.TranslaterCF.option.breakFully": "Break Fully",
"text.autoconfig.TranslaterCF.option.key": "API Key",
"text.autoconfig.TranslaterCF.option.targetLanguage": "Target Language",
"text.autoconfig.TranslaterCF.option.renderProgress": "Progress Renderer ",
"text.autoconfig.TranslaterCF.option.forceRegenerate": "Force Regenerate"
"translater.jfconfig.title": "Translater",
"translater.jfconfig.rounds": "Rounds",
"translater.jfconfig.rounds.tooltip": "The amount of times to translate each element",
"translater.jfconfig.breakFully": "Break Fully",
"translater.jfconfig.breakFully.tooltip": "Whether to fully break the texts content by translating from the wrong language (enable for complete breaking)",
"translater.jfconfig.targetLanguage": "Target Language",
"translater.jfconfig.targetLanguage.tooltip": "The language to translate to - Leave empty for auto-detection (might break text even more)",
"translater.jfconfig.renderProgress": "Progress Renderer",
"translater.jfconfig.renderProgress.tooltip": "Significantly slows down the loading time but gives a visual of the progress. Values: Full, Console, None",
"translater.jfconfig.forceRegenerate": "Force Regenerate",
"translater.jfconfig.forceRegenerate.tooltip": "Use this if something is broken. This initiates the regeneration of the cache",
"translater.jfconfig.enum.ProgressMode.Full": "Full",
"translater.jfconfig.enum.ProgressMode.Console": "Console",
"translater.jfconfig.enum.ProgressMode.None": "None"
}

View File

@ -15,12 +15,7 @@
"icon": "assets/translater/icon.png",
"environment": "client",
"entrypoints": {
"client": [
"io.gitlab.jfronny.translater.Translater"
],
"modmenu": [
"io.gitlab.jfronny.translater.ModMenu"
]
"libjf:config": ["io.gitlab.jfronny.translater.Cfg"]
},
"mixins": [
"translater.mixins.json"