From 8589d2d93a097715b6019c11e76175bd374c2a78 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 25 Mar 2019 01:00:51 +0200 Subject: [PATCH] Implement boiletplate for loading by forge --- .../com/minelittlepony/client/Config.java | 62 ++++++++++++++++ .../client/ForgeModMineLittlePony.java | 72 +++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 src/fml/java/com/minelittlepony/client/Config.java create mode 100644 src/fml/java/com/minelittlepony/client/ForgeModMineLittlePony.java diff --git a/src/fml/java/com/minelittlepony/client/Config.java b/src/fml/java/com/minelittlepony/client/Config.java new file mode 100644 index 00000000..5c602e2d --- /dev/null +++ b/src/fml/java/com/minelittlepony/client/Config.java @@ -0,0 +1,62 @@ +package com.minelittlepony.client; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.minelittlepony.client.settings.ClientPonyConfig; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +class Config extends ClientPonyConfig { + static final Gson gson = new GsonBuilder() + .setPrettyPrinting() + .excludeFieldsWithoutExposeAnnotation() + .create(); + + private final File configFile; + + Config(File file) { + configFile = file; + } + + @Override + public void save() { + if (configFile.exists()) { + configFile.delete(); + } + + try (JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(configFile)))) { + writer.setIndent(" "); + + gson.toJson(this, Config.class, writer); + } catch (IOException e) { + e.printStackTrace(); + } + } + + static Config of(File file) { + Config result = null; + + if (file.exists()) { + try (FileInputStream s = new FileInputStream(file)) { + result = gson.fromJson(new JsonReader(new InputStreamReader(s)), Config.class); + } catch (IOException ignored) { + result = null; + } + } + + if (result == null) { + result = new Config(file); + } + + result.save(); + + return result; + } +} \ No newline at end of file diff --git a/src/fml/java/com/minelittlepony/client/ForgeModMineLittlePony.java b/src/fml/java/com/minelittlepony/client/ForgeModMineLittlePony.java new file mode 100644 index 00000000..a9003dcd --- /dev/null +++ b/src/fml/java/com/minelittlepony/client/ForgeModMineLittlePony.java @@ -0,0 +1,72 @@ +package com.minelittlepony.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +import com.minelittlepony.client.IModUtilities; +import com.minelittlepony.client.MineLPClient; + +import java.io.File; + +@Mod("minelittlepony") +public class ForgeModMineLittlePony implements IModUtilities { + + private final MineLPClient mlp = new MineLPClient(this); + + public ForgeModMineLittlePony() { + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::init); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::posInit); + MinecraftForge.EVENT_BUS.register(this); + } + + private void init(final FMLCommonSetupEvent event) { + + // TODO: I don't know what forge did with `event.getModConfigurationDirectory()` but it's not where it used to be. + + File configDirectory = new File(Minecraft.getInstance().getFileResourcePacks().getParentFile(), "config"); + File configFile = new File(configDirectory, "minelittlepony.json"); + + mlp.init(Config.of(configFile)); + } + + private void posInit(FMLClientSetupEvent event) { + mlp.postInit(event.getMinecraftSupplier().get()); + } + + @SubscribeEvent + public void onClientTick(ClientTickEvent event) { + mlp.onTick(Minecraft.getInstance(), Minecraft.getInstance().world != null); + } + + @Override + public void addRenderer(Class type, TileEntityRenderer renderer) { + ClientRegistry.bindTileEntitySpecialRenderer(type, renderer); + } + + @Override + public void addRenderer(Class type, Render renderer) { + RenderingRegistry.registerEntityRenderingHandler(type, rm -> renderer); + } + + @Override + public boolean hasFml() { + return true; + } + + @Override + public float getRenderPartialTicks() { + return Minecraft.getInstance().getRenderPartialTicks(); + } +}