some more utilities

This commit is contained in:
FalsePattern committed 2022-06-12 11:56:22 +02:00
1 parent ac55a661a9
commit 3401ca837a
7 files changed
+74 -22

No files matched your search

@@ -2,10 +2,8 @@ package com.falsepattern.lib.internal.proxy;
import com.falsepattern.lib.internal.FalsePatternLib;
import com.falsepattern.lib.internal.Tags;
import com.falsepattern.lib.text.FormattedText;
import com.falsepattern.lib.updates.UpdateChecker;
import com.falsepattern.lib.util.Async;
import cpw.mods.fml.common.Loader;
import com.falsepattern.lib.util.AsyncUtil;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -13,13 +11,10 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import lombok.val;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.resources.I18n;
import net.minecraft.event.ClickEvent;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
@@ -38,7 +33,7 @@ public class ClientProxy extends CommonProxy {
@Override
public void postInit(FMLPostInitializationEvent e) {
super.postInit(e);
chatFuture = Async.asyncWorker.submit(new Callable<List<IChatComponent>>() {
chatFuture = AsyncUtil.asyncWorker.submit(new Callable<List<IChatComponent>>() {
@Override
public List<IChatComponent> call() throws Exception {
//Deadlock avoidance
@@ -47,7 +42,7 @@ public class ClientProxy extends CommonProxy {
return null;
}
if (!updatesFuture.isDone()) {
chatFuture = Async.asyncWorker.submit(this);
chatFuture = AsyncUtil.asyncWorker.submit(this);
return null;
}
val updates = updatesFuture.get();
@@ -4,16 +4,14 @@ import com.falsepattern.lib.config.ConfigException;
import com.falsepattern.lib.config.ConfigurationManager;
import com.falsepattern.lib.internal.FalsePatternLib;
import com.falsepattern.lib.internal.LibraryConfig;
import com.falsepattern.lib.internal.Tags;
import com.falsepattern.lib.updates.ModUpdateInfo;
import com.falsepattern.lib.updates.UpdateChecker;
import com.falsepattern.lib.util.Async;
import com.falsepattern.lib.util.AsyncUtil;
import cpw.mods.fml.common.event.FMLConstructionEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import lombok.val;
import lombok.var;
import net.minecraftforge.common.MinecraftForge;
import java.util.List;
import java.util.concurrent.Callable;
@@ -37,7 +35,7 @@ public class CommonProxy {
if (LibraryConfig.ENABLE_UPDATE_CHECKER) {
FalsePatternLib.getLog().info("Launching asynchronous update check.");
val updateCheckFuture = UpdateChecker.fetchUpdatesAsync(FalsePatternLib.UPDATE_URL);
updatesFuture = Async.asyncWorker.submit(new Callable<List<ModUpdateInfo>>() {
updatesFuture = AsyncUtil.asyncWorker.submit(new Callable<List<ModUpdateInfo>>() {
@Override
public List<ModUpdateInfo> call() {
//Deadlock avoidance
@@ -46,7 +44,7 @@ public class CommonProxy {
return null;
}
if (!updateCheckFuture.isDone()) {
updatesFuture = Async.asyncWorker.submit(this);
updatesFuture = AsyncUtil.asyncWorker.submit(this);
return null;
}
try {
@@ -9,7 +9,7 @@ import com.falsepattern.lib.internal.Internet;
import com.falsepattern.lib.internal.LibraryConfig;
import com.falsepattern.lib.internal.Tags;
import com.falsepattern.lib.text.FormattedText;
import com.falsepattern.lib.util.Async;
import com.falsepattern.lib.util.AsyncUtil;
import cpw.mods.fml.common.Loader;
import lombok.val;
import net.minecraft.client.resources.I18n;
@@ -37,7 +37,7 @@ public class UpdateChecker {
* @return A future that will contain the update info about mods that were both available on the URL and installed
*/
public static Future<List<ModUpdateInfo>> fetchUpdatesAsync(String url) {
return Async.asyncWorker.submit(() -> fetchUpdates(url));
return AsyncUtil.asyncWorker.submit(() -> fetchUpdates(url));
}
/**
@@ -2,7 +2,6 @@ package com.falsepattern.lib.util;
import com.falsepattern.lib.StableAPI;
import com.falsepattern.lib.internal.Tags;
import lombok.Getter;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -13,7 +12,7 @@ import java.util.concurrent.Executors;
* You must make sure to solve any potential deadlocks yourself!
*/
@StableAPI(since = "0.8.0")
public class Async {
public class AsyncUtil {
public static final ExecutorService asyncWorker = Executors.newSingleThreadExecutor((runnable) -> {
Thread thread = new Thread(runnable);
thread.setDaemon(true);
@@ -0,0 +1,31 @@
package com.falsepattern.lib.util;
import com.falsepattern.lib.StableAPI;
import cpw.mods.fml.common.registry.LanguageRegistry;
import lombok.*;
import java.util.HashMap;
import java.util.Map;
import static lombok.AccessLevel.PRIVATE;
@NoArgsConstructor(access = PRIVATE)
@StableAPI(since = "0.8.0")
public final class LangUtil {
public static final String DEFAULT_LOCALE = "en_US";
private static final ThreadLocal<HashMap<String, String>> tempMap = ThreadLocal.withInitial(HashMap::new);
public static void defaultLocalization(@NonNull Map<String, String> localeMap) {
localeMap.forEach(LangUtil::defaultLocalization);
}
public static void defaultLocalization(@NonNull String key, @NonNull String value) {
if (!LanguageRegistry.instance().getStringLocalization(key, DEFAULT_LOCALE).isEmpty())
return;
val map = tempMap.get();
map.put(key, value);
LanguageRegistry.instance().injectLanguage(DEFAULT_LOCALE, map);
map.clear();
}
}
@@ -0,0 +1,28 @@
package com.falsepattern.lib.util;
import cpw.mods.fml.relauncher.ReflectionHelper;
import cpw.mods.fml.relauncher.SideOnly;
import lombok.*;
import net.minecraft.client.Minecraft;
import net.minecraft.util.Timer;
import static cpw.mods.fml.relauncher.Side.CLIENT;
import static lombok.AccessLevel.PRIVATE;
import static net.minecraft.client.Minecraft.getMinecraft;
@SideOnly(CLIENT)
@NoArgsConstructor(access = PRIVATE)
public final class RenderUtil {
private final static Timer MINECRAFT_TIMER = getMinecraftTimer();
@SneakyThrows
private static Timer getMinecraftTimer() {
val timerField = ReflectionHelper.findField(Minecraft.class, "timer", "field_71428_T");
timerField.setAccessible(true);
return (Timer) timerField.get(getMinecraft());
}
public static float partialTick() {
return MINECRAFT_TIMER.renderPartialTicks;
}
}