From 526df4f1844091b004aef965c116e934443babd8 Mon Sep 17 00:00:00 2001 From: s809 <11816467-s809@users.noreply.gitlab.com> Date: Sun, 7 Jan 2024 20:25:34 +0500 Subject: [PATCH 1/7] Refactor initializer code --- .../common/AbstractModInitializer.java | 178 ++++++++++++++++++ .../distanthorizons/common/IEventProxy.java | 6 + .../distanthorizons/common/LodCommonMain.java | 64 ------- .../common/forge/LodForgeMethodCaller.java | 52 ----- .../block/TintGetterOverrideFast.java | 19 +- .../block/TintGetterOverrideSmooth.java | 19 +- coreSubProjects | 2 +- .../fabric/FabricClientMain.java | 35 ---- .../fabric/FabricClientProxy.java | 3 +- .../fabric/FabricDedicatedServerMain.java | 56 ------ .../distanthorizons/fabric/FabricMain.java | 141 +++++++------- .../fabric/FabricServerProxy.java | 3 +- fabric/src/main/resources/fabric.mod.json | 4 +- .../forge/ForgeClientProxy.java | 16 +- .../distanthorizons/forge/ForgeMain.java | 170 ++++++----------- .../forge/ForgeServerProxy.java | 13 +- .../neoforged/NeoforgeClientProxy.java | 16 +- .../neoforged/NeoforgeMain.java | 167 ++++++---------- .../neoforged/NeoforgeServerProxy.java | 11 +- 19 files changed, 457 insertions(+), 518 deletions(-) create mode 100644 common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java create mode 100644 common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java delete mode 100644 common/src/main/java/com/seibel/distanthorizons/common/LodCommonMain.java delete mode 100644 common/src/main/java/com/seibel/distanthorizons/common/forge/LodForgeMethodCaller.java delete mode 100644 fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientMain.java delete mode 100644 fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricDedicatedServerMain.java diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java new file mode 100644 index 000000000..c811a78c4 --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -0,0 +1,178 @@ +package com.seibel.distanthorizons.common; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.arguments.BoolArgumentType; +import com.mojang.brigadier.arguments.DoubleArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent; +import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; +import com.seibel.distanthorizons.common.wrappers.DependencySetup; +import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftDedicatedServerWrapper; +import com.seibel.distanthorizons.core.api.internal.SharedApi; +import com.seibel.distanthorizons.core.config.Config; +import com.seibel.distanthorizons.core.config.ConfigBase; +import com.seibel.distanthorizons.core.config.eventHandlers.presets.ThreadPresetConfigEventHandler; +import com.seibel.distanthorizons.core.config.types.AbstractConfigType; +import com.seibel.distanthorizons.core.config.types.ConfigEntry; +import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.jar.ModJarInfo; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.util.objects.Pair; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModAccessor; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; +import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; +import com.seibel.distanthorizons.coreapi.ModInfo; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.dedicated.DedicatedServer; +import org.apache.logging.log4j.Logger; + +#if MC_VER >= MC_1_19_2 +import net.minecraft.network.chat.Component; +#else // < 1.19.2 +import net.minecraft.network.chat.TranslatableComponent; +#endif + +import java.lang.invoke.MethodHandles; +import java.util.HashMap; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +import static com.mojang.brigadier.arguments.DoubleArgumentType.doubleArg; +import static com.mojang.brigadier.arguments.IntegerArgumentType.integer; +import static net.minecraft.commands.Commands.argument; +import static net.minecraft.commands.Commands.literal; + +public abstract class AbstractModInitializer +{ + protected static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + + protected abstract void createInitialBindings(); + protected abstract IEventProxy createClientProxy(); + protected abstract IEventProxy createServerProxy(boolean isDedicated); + protected abstract void initializeModCompat(); + + protected abstract void subscribeRegisterCommandsEvent(Consumer> eventHandler); + private CommandDispatcher commandDispatcher; + + protected abstract void subscribeClientStartedEvent(Runnable eventHandler); + protected abstract void subscribeServerStartingEvent(Consumer eventHandler); + protected abstract void runDelayedSetup(); + + + + private void startup() + { + DependencySetup.createSharedBindings(); + SharedApi.init(); + this.createInitialBindings(); + } + + private void printModInfo(boolean printGitInfo) + { + LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION); + + if (printGitInfo) + { + // Useful for dev builds + LOGGER.info("DH Branch: " + ModJarInfo.Git_Branch); + LOGGER.info("DH Commit: " + ModJarInfo.Git_Commit); + LOGGER.info("DH Jar Build Source: " + ModJarInfo.Build_Source); + } + } + + protected void tryCreateModCompatAccessor(String modId, Class accessorClass, Supplier accessorConstructor) + { + IModChecker modChecker = SingletonInjector.INSTANCE.get(IModChecker.class); + if (modChecker.isModLoaded(modId)) + { + //noinspection unchecked + ModAccessorInjector.INSTANCE.bind((Class) accessorClass, accessorConstructor.get()); + } + } + + private void initConfig() + { + ConfigBase.INSTANCE = new ConfigBase(ModInfo.ID, ModInfo.NAME, Config.class, 2); + Config.completeDelayedSetup(); + } + + public void onInitializeClient() + { + DependencySetup.createClientBindings(); + + LOGGER.info("Initializing " + ModInfo.READABLE_NAME); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null); + + this.startup(); + this.printModInfo(true); + + this.createClientProxy().registerEvents(); + this.createServerProxy(false).registerEvents(); + + this.initializeModCompat(); + + LOGGER.info(ModInfo.READABLE_NAME + " Initialized"); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); + + // Client uses config for auto-updater, so it's initialized here instead of post-init stage + this.initConfig(); + + this.subscribeClientStartedEvent(this::postInit); + } + + public void onInitializeServer() + { + DependencySetup.createServerBindings(); + + LOGGER.info("Initializing " + ModInfo.READABLE_NAME); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null); + + this.startup(); + this.printModInfo(false); + + // This prevents returning uninitialized Config values, + // resulting from a circular reference mid-initialization in a static class + // noinspection ResultOfMethodCallIgnored + ThreadPresetConfigEventHandler.INSTANCE.toString(); + + this.createServerProxy(true).registerEvents(); + + LOGGER.info(ModInfo.READABLE_NAME + " Initialized"); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); + + this.subscribeRegisterCommandsEvent(dispatcher -> { + this.commandDispatcher = dispatcher; + }); + + this.subscribeServerStartingEvent(server -> { + MinecraftDedicatedServerWrapper.INSTANCE.dedicatedServer = (DedicatedServer)server; + + this.initConfig(); + this.postInit(); + this.initCommands(); + + LOGGER.info("Dedicated server initialized at " + server.getServerDirectory()); + }); + } + + private void postInit() + { + LOGGER.info("Post-Initializing Mod"); + this.runDelayedSetup(); + LOGGER.info("Mod Post-Initialized"); + } + + private void initCommands() + { + // TODO + } + +} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java b/common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java new file mode 100644 index 000000000..0f2e6b896 --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java @@ -0,0 +1,6 @@ +package com.seibel.distanthorizons.common; + +public interface IEventProxy +{ + void registerEvents(); +} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/LodCommonMain.java b/common/src/main/java/com/seibel/distanthorizons/common/LodCommonMain.java deleted file mode 100644 index 922e519e4..000000000 --- a/common/src/main/java/com/seibel/distanthorizons/common/LodCommonMain.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.common; - -import com.seibel.distanthorizons.common.forge.LodForgeMethodCaller; -import com.seibel.distanthorizons.common.wrappers.DependencySetup; -import com.seibel.distanthorizons.coreapi.ModInfo; -import com.seibel.distanthorizons.core.api.internal.SharedApi; -import com.seibel.distanthorizons.core.config.Config; -import com.seibel.distanthorizons.core.config.ConfigBase; - -/** - * This is the common main class - * - * @author Ran - */ -public class LodCommonMain -{ - public static boolean forge = false; - public static LodForgeMethodCaller forgeMethodCaller; - - - - public static void startup(LodForgeMethodCaller forgeMethodCaller) - { - if (forgeMethodCaller != null) - { - LodCommonMain.forge = true; - LodCommonMain.forgeMethodCaller = forgeMethodCaller; - } - - DependencySetup.createSharedBindings(); - SharedApi.init(); -// if (!serverSided) { -// new NetworkReceiver().register_Client(); -// } else { -// new NetworkReceiver().register_Server(); -// } - } - - public static void initConfig() - { - ConfigBase.INSTANCE = new ConfigBase(ModInfo.ID, ModInfo.NAME, Config.class, 2); - Config.completeDelayedSetup(); - } - -} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/forge/LodForgeMethodCaller.java b/common/src/main/java/com/seibel/distanthorizons/common/forge/LodForgeMethodCaller.java deleted file mode 100644 index afa8fa468..000000000 --- a/common/src/main/java/com/seibel/distanthorizons/common/forge/LodForgeMethodCaller.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.common.forge; - -import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.core.Direction; -#if MC_VER >= MC_1_19_2 -import net.minecraft.util.RandomSource; -#endif -import net.minecraft.world.level.ColorResolver; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - -import java.util.List; -import java.util.Random; - -/** - * used for calling methods that forge modified - * (forge modifies vanilla methods for some reason) - * - * @author Ran - */ -public interface LodForgeMethodCaller -{ - #if MC_VER < MC_1_19_2 - List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, Random random); // FIXME: For 1.19 - #else - List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, RandomSource random); // FIXME: For 1.19 - #endif - - int colorResolverGetColor(ColorResolver resolver, Biome biome, double x, double z); - -} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java index da3e8d4cf..543747c2c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java @@ -19,7 +19,6 @@ package com.seibel.distanthorizons.common.wrappers.block; -import com.seibel.distanthorizons.common.LodCommonMain; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.*; @@ -60,15 +59,15 @@ public class TintGetterOverrideFast implements BlockAndTintGetter @Override public int getBlockTint(BlockPos blockPos, ColorResolver colorResolver) { - if (LodCommonMain.forgeMethodCaller != null) - { - return LodCommonMain.forgeMethodCaller.colorResolverGetColor(colorResolver, _getBiome(blockPos), - blockPos.getX(), blockPos.getZ()); - } - else - { - return colorResolver.getColor(_getBiome(blockPos), blockPos.getX(), blockPos.getZ()); - } + //if (LodCommonMain.forgeMethodCaller != null) + //{ + // return LodCommonMain.forgeMethodCaller.colorResolverGetColor(colorResolver, _getBiome(blockPos), + // blockPos.getX(), blockPos.getZ()); + //} + //else + //{ + return colorResolver.getColor(this._getBiome(blockPos), blockPos.getX(), blockPos.getZ()); + //} } @Override diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java index 240c4e848..4e8ff00c5 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java @@ -19,7 +19,6 @@ package com.seibel.distanthorizons.common.wrappers.block; -import com.seibel.distanthorizons.common.LodCommonMain; import net.minecraft.core.BlockPos; import net.minecraft.core.Cursor3D; import net.minecraft.core.Direction; @@ -75,15 +74,15 @@ public class TintGetterOverrideSmooth implements BlockAndTintGetter { mutableBlockPos.set(cursor3D.nextX(), cursor3D.nextY(), cursor3D.nextZ()); int n; - if (LodCommonMain.forgeMethodCaller != null) - { - n = LodCommonMain.forgeMethodCaller.colorResolverGetColor(colorResolver, _getBiome(mutableBlockPos), - mutableBlockPos.getX(), mutableBlockPos.getZ()); - } - else - { - n = colorResolver.getColor(_getBiome(mutableBlockPos), mutableBlockPos.getX(), mutableBlockPos.getZ()); - } + //if (LodCommonMain.forgeMethodCaller != null) + //{ + // n = LodCommonMain.forgeMethodCaller.colorResolverGetColor(colorResolver, _getBiome(mutableBlockPos), + // mutableBlockPos.getX(), mutableBlockPos.getZ()); + //} + //else + //{ + n = colorResolver.getColor(this._getBiome(mutableBlockPos), mutableBlockPos.getX(), mutableBlockPos.getZ()); + //} k += (n & 0xFF0000) >> 16; l += (n & 0xFF00) >> 8; diff --git a/coreSubProjects b/coreSubProjects index 1b8ee5cd4..51190efc6 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1b8ee5cd48f8abc18bbdfe23fe160d17dc5d6cef +Subproject commit 51190efc66e6993647eb6c2d5d129c661a874308 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientMain.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientMain.java deleted file mode 100644 index 2990b3ffd..000000000 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientMain.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.seibel.distanthorizons.fabric; - -import com.seibel.distanthorizons.common.LodCommonMain; -import com.seibel.distanthorizons.common.wrappers.DependencySetup; -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; - -@Environment(EnvType.CLIENT) -public class FabricClientMain implements ClientModInitializer -{ - public static FabricClientProxy client_proxy; - public static FabricServerProxy server_proxy; - - - // Do if implements ClientModInitializer - // This loads the mod before minecraft loads which causes a lot of issues - @Override - public void onInitializeClient() - { - DependencySetup.createClientBindings(); - FabricMain.init(); - LodCommonMain.initConfig(); - - server_proxy = new FabricServerProxy(false); - server_proxy.registerEvents(); - - client_proxy = new FabricClientProxy(); - client_proxy.registerEvents(); - - ClientLifecycleEvents.CLIENT_STARTED.register((mc) -> FabricMain.postInit()); - } - -} diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java index 409002829..9a5920656 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -19,6 +19,7 @@ package com.seibel.distanthorizons.fabric; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.rendering.SeamlessOverdraw; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -72,7 +73,7 @@ import org.lwjgl.opengl.GL15; * @version 2023-7-27 */ @Environment(EnvType.CLIENT) -public class FabricClientProxy +public class FabricClientProxy implements IEventProxy { private final ClientApi clientApi = ClientApi.INSTANCE; private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricDedicatedServerMain.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricDedicatedServerMain.java deleted file mode 100644 index 88c4bfc59..000000000 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricDedicatedServerMain.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.seibel.distanthorizons.fabric; - -import com.seibel.distanthorizons.common.LodCommonMain; -import com.seibel.distanthorizons.common.wrappers.DependencySetup; -import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftDedicatedServerWrapper; -import com.seibel.distanthorizons.core.config.eventHandlers.presets.ThreadPresetConfigEventHandler; -import com.seibel.distanthorizons.core.util.LodUtil; -import net.fabricmc.api.DedicatedServerModInitializer; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.minecraft.server.dedicated.DedicatedServer; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -@Environment(EnvType.SERVER) -public class FabricDedicatedServerMain implements DedicatedServerModInitializer -{ - private static final Logger LOGGER = LogManager.getLogger(FabricDedicatedServerMain.class.getSimpleName()); - - public static FabricServerProxy server_proxy; - public boolean hasPostSetupDone = false; - - @Override - public void onInitializeServer() - { - DependencySetup.createServerBindings(); - FabricMain.init(); - - // FIXME this prevents returning uninitialized Config values - // resulting from a circular reference mid-initialization in a static class - // ThreadPresetConfigEventHandler <-> Config - ThreadPresetConfigEventHandler.INSTANCE.toString(); - - server_proxy = new FabricServerProxy(true); - server_proxy.registerEvents(); - - ServerLifecycleEvents.SERVER_STARTING.register((server) -> - { - if (this.hasPostSetupDone) - { - return; - } - - this.hasPostSetupDone = true; - LodUtil.assertTrue(server instanceof DedicatedServer); - - MinecraftDedicatedServerWrapper.INSTANCE.dedicatedServer = (DedicatedServer) server; - LodCommonMain.initConfig(); - FabricMain.postInit(); - - LOGGER.info("Dedicated server initialized at " + server.getServerDirectory()); - }); - } - -} diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java index 97eb41228..b047bbfdd 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java @@ -19,25 +19,29 @@ package com.seibel.distanthorizons.fabric; -import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent; -import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; -import com.seibel.distanthorizons.core.config.ConfigBase; -import com.seibel.distanthorizons.core.jar.ModJarInfo; -import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; -import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*; -import com.seibel.distanthorizons.common.LodCommonMain; -import com.seibel.distanthorizons.coreapi.ModInfo; +import com.mojang.brigadier.CommandDispatcher; +import com.seibel.distanthorizons.common.AbstractModInitializer; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.core.config.Config; -import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; +import com.seibel.distanthorizons.core.config.ConfigBase; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; -import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*; +import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.fabric.wrappers.FabricDependencySetup; import com.seibel.distanthorizons.fabric.wrappers.modAccessor.*; - -import org.apache.logging.log4j.Logger; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.api.DedicatedServerModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import javax.swing.*; +import java.util.function.Consumer; /** * Initialize and setup the Mod.
@@ -48,44 +52,33 @@ import javax.swing.*; * @author Ran * @version 9-2-2022 */ -public class FabricMain +public class FabricMain extends AbstractModInitializer implements ClientModInitializer, DedicatedServerModInitializer { - private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + private static final ResourceLocation INITIAL_PHASE = ResourceLocation.tryParse("distanthorizons:dedicated_server_initial"); - public static void postInit() + + + @Override + protected void createInitialBindings() { - LOGGER.info("Post-Initializing Mod"); - FabricDependencySetup.runDelayedSetup(); - - if (Config.Client.Advanced.Graphics.Fog.disableVanillaFog.get() && SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("bclib")) - ModAccessorInjector.INSTANCE.get(IBCLibAccessor.class).setRenderCustomFog(false); // Remove BCLib's fog - #if MC_VER >= MC_1_20_1 - if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("sodium")) - ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class).setFogOcclusion(false); // FIXME: This is a tmp fix for sodium 0.5.0, and 0.5.1. This is fixed in sodium 0.5.2 - #endif - - if (ConfigBase.INSTANCE == null) - throw new IllegalStateException("Config was not initialized. Make sure to call LodCommonMain.initConfig() before calling this method."); - - LOGGER.info("Mod Post-Initialized"); + FabricDependencySetup.createInitialBindings(); } - - // This loads the mod after minecraft loads which doesn't causes a lot of issues - public static void init() + @Override + protected IEventProxy createClientProxy() + { + return new FabricClientProxy(); + } + + @Override + protected IEventProxy createServerProxy(boolean isDedicated) + { + return new FabricServerProxy(isDedicated); + } + + @Override + protected void initializeModCompat() { - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null); - - LOGGER.info("Initializing Mod"); - LodCommonMain.startup(null); - FabricDependencySetup.createInitialBindings(); - LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION); - - // Print git info (Useful for dev builds) - LOGGER.info("DH Branch: " + ModJarInfo.Git_Branch); - LOGGER.info("DH Commit: " + ModJarInfo.Git_Commit); - LOGGER.info("DH Jar Build Source: " + ModJarInfo.Build_Source); - IModChecker modChecker = SingletonInjector.INSTANCE.get(IModChecker.class); if (modChecker.isModLoaded("sodium")) { @@ -105,30 +98,52 @@ public class FabricMain mc.crashMinecraft(errorMessage, new Exception(exceptionError)); } } - if (modChecker.isModLoaded("starlight")) - { - ModAccessorInjector.INSTANCE.bind(IStarlightAccessor.class, new StarlightAccessor()); - } - if (modChecker.isModLoaded("optifine")) - { - ModAccessorInjector.INSTANCE.bind(IOptifineAccessor.class, new OptifineAccessor()); - } - if (modChecker.isModLoaded("bclib")) - { - ModAccessorInjector.INSTANCE.bind(IBCLibAccessor.class, new BCLibAccessor()); - } + this.tryCreateModCompatAccessor("starlight", IStarlightAccessor.class, StarlightAccessor::new); + this.tryCreateModCompatAccessor("optifine", IOptifineAccessor.class, OptifineAccessor::new); + this.tryCreateModCompatAccessor("bclib", IBCLibAccessor.class, BCLibAccessor::new); #if MC_VER != MC_1_17_1 && MC_VER <= MC_1_20_1 // 1.17.1 won't support this since there isn't a matching Iris version - if (modChecker.isModLoaded("iris")) - { - ModAccessorInjector.INSTANCE.bind(IIrisAccessor.class, new IrisAccessor()); - } + this.tryCreateModCompatAccessor("iris", IIrisAccessor.class, IrisAccessor::new); + #endif + } + + @Override + protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) + { + // fabric-command-api-v1/v2 + //CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess #if MC_VER >= MC_1_19_2 , environment #endif ) -> { + // eventHandler.accept(dispatcher); + //}); + } + + @Override + protected void subscribeClientStartedEvent(Runnable eventHandler) + { + ClientLifecycleEvents.CLIENT_STARTED.register((mc) -> eventHandler.run()); + } + + @Override + protected void subscribeServerStartingEvent(Consumer eventHandler) + { + ServerLifecycleEvents.SERVER_STARTING.addPhaseOrdering(INITIAL_PHASE, Event.DEFAULT_PHASE); + ServerLifecycleEvents.SERVER_STARTING.register(INITIAL_PHASE, eventHandler::accept); + } + + @Override + protected void runDelayedSetup() + { + FabricDependencySetup.runDelayedSetup(); + + if (Config.Client.Advanced.Graphics.Fog.disableVanillaFog.get() && SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("bclib")) + ModAccessorInjector.INSTANCE.get(IBCLibAccessor.class).setRenderCustomFog(false); // Remove BCLib's fog + #if MC_VER >= MC_1_20_1 + if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("sodium")) + ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class).setFogOcclusion(false); // FIXME: This is a tmp fix for sodium 0.5.0, and 0.5.1. This is fixed in sodium 0.5.2 #endif - LOGGER.info(ModInfo.READABLE_NAME + " Initialized"); - - ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); + if (ConfigBase.INSTANCE == null) + throw new IllegalStateException("Config was not initialized. Make sure to call LodCommonMain.initConfig() before calling this method."); } } diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java index 98f780d7b..7754f5bfb 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java @@ -1,5 +1,6 @@ package com.seibel.distanthorizons.fabric; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -32,7 +33,7 @@ import java.util.function.Supplier; * @author Tomlee * @version 5-11-2022 */ -public class FabricServerProxy +public class FabricServerProxy implements IEventProxy { private static final ServerApi SERVER_API = ServerApi.INSTANCE; private static final Logger LOGGER = DhLoggerBuilder.getLogger(); diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 2ffe2d3cc..c14865e15 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -24,10 +24,10 @@ "environment": "*", "entrypoints": { "client": [ - "com.seibel.distanthorizons.fabric.FabricClientMain" + "com.seibel.distanthorizons.fabric.FabricMain" ], "server": [ - "com.seibel.distanthorizons.fabric.FabricDedicatedServerMain" + "com.seibel.distanthorizons.fabric.FabricMain" ], "modmenu": [ "com.seibel.distanthorizons.fabric.wrappers.config.ModMenuIntegration" diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java index 085d2e477..6b225b68f 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java @@ -19,6 +19,7 @@ package com.seibel.distanthorizons.forge; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -50,6 +51,7 @@ import net.minecraftforge.client.event.RenderLevelStageEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; //import net.minecraftforge.network.NetworkRegistry; //import net.minecraftforge.network.simple.SimpleChannel; @@ -71,7 +73,7 @@ import org.lwjgl.opengl.GL32; * @author James_Seibel * @version 2023-7-27 */ -public class ForgeClientProxy +public class ForgeClientProxy implements IEventProxy { private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); private static final Logger LOGGER = DhLoggerBuilder.getLogger(); @@ -87,6 +89,15 @@ public class ForgeClientProxy + @Override + public void registerEvents() + { + MinecraftForge.EVENT_BUS.register(this); + this.setupNetworkingListeners(); + } + + + //=============// // tick events // //=============// @@ -237,8 +248,7 @@ public class ForgeClientProxy // networking // //============// - /** @param event this is just to ensure the event is called at the right time, if it is called outside the {@link FMLClientSetupEvent} event, the binding may fail */ - public static void setupNetworkingListeners(FMLClientSetupEvent event) + public void setupNetworkingListeners() { // multiversePluginChannel = NetworkRegistry.newSimpleChannel( // new ResourceLocation(ModInfo.NETWORKING_RESOURCE_NAMESPACE, ModInfo.MULTIVERSE_PLUGIN_NAMESPACE), diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java index 4195b2dea..bd928126d 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java @@ -19,37 +19,30 @@ package com.seibel.distanthorizons.forge; -import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent; -import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; -import com.seibel.distanthorizons.common.LodCommonMain; -import com.seibel.distanthorizons.common.forge.LodForgeMethodCaller; -import com.seibel.distanthorizons.common.wrappers.DependencySetup; +import com.mojang.brigadier.CommandDispatcher; +import com.seibel.distanthorizons.common.AbstractModInitializer; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.wrappers.gui.GetConfigScreen; -import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper; -import com.seibel.distanthorizons.core.jar.ModJarInfo; -import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.AbstractOptifineAccessor; -import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; import com.seibel.distanthorizons.coreapi.ModInfo; -import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; -import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor; import com.seibel.distanthorizons.forge.wrappers.ForgeDependencySetup; import com.seibel.distanthorizons.forge.wrappers.modAccessor.OptifineAccessor; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.core.Direction; -#if MC_VER >= MC_1_19_2 -import net.minecraft.util.RandomSource; -#endif -import net.minecraft.world.level.ColorResolver; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.*; +#if MC_VER == MC_1_16_5 +import net.minecraftforge.fml.event.server.FMLServerStartingEvent; +#elif MC_VER == MC_1_17_1 +import net.minecraftforge.fmlserverevents.FMLServerStartingEvent; +#else +import net.minecraftforge.event.server.ServerStartingEvent; +#endif import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; #if MC_VER < MC_1_17_1 import net.minecraftforge.fml.ExtensionPoint; @@ -61,20 +54,15 @@ import net.minecraftforge.client.ConfigGuiHandler; import net.minecraftforge.client.ConfigScreenHandler; #endif -import org.apache.logging.log4j.Logger; - // these imports change due to forge refactoring classes in 1.19 #if MC_VER < MC_1_19_2 import net.minecraftforge.client.model.data.ModelDataMap; import java.util.Random; #else -import net.minecraft.client.renderer.RenderType; -import net.minecraftforge.client.model.data.ModelData; #endif -import java.lang.invoke.MethodHandles; -import java.util.List; +import java.util.function.Consumer; /** * Initialize and setup the Mod.
@@ -87,47 +75,38 @@ import java.util.List; * @version 8-15-2022 */ @Mod(ModInfo.ID) -public class ForgeMain implements LodForgeMethodCaller +public class ForgeMain extends AbstractModInitializer { - private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); - public static ForgeClientProxy client_proxy = null; - public static ForgeServerProxy server_proxy = null; - public ForgeMain() { - DependencySetup.createClientBindings(); - -// initDedicated(null); -// initDedicated(null); // Register the mod initializer (Actual event registration is done in the different proxies) - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::initClient); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::initDedicated); + FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent e) -> this.onInitializeClient()); + FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLDedicatedServerSetupEvent e) -> this.onInitializeServer()); } - private void initClient(final FMLClientSetupEvent event) + @Override + protected void createInitialBindings() { - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null); - - LOGGER.info("Initializing Mod"); - LodCommonMain.startup(this); ForgeDependencySetup.createInitialBindings(); - LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION); + } + + @Override + protected IEventProxy createClientProxy() + { + return new ForgeClientProxy(); + } + + @Override + protected IEventProxy createServerProxy(boolean isDedicated) + { + return new ForgeServerProxy(isDedicated); + } + + @Override + protected void initializeModCompat() + { + this.tryCreateModCompatAccessor("optifine", IOptifineAccessor.class, OptifineAccessor::new); - // Print git info (Useful for dev builds) - LOGGER.info("DH Branch: " + ModJarInfo.Git_Branch); - LOGGER.info("DH Commit: " + ModJarInfo.Git_Commit); - LOGGER.info("DH Jar Build Source: " + ModJarInfo.Build_Source); - - client_proxy = new ForgeClientProxy(); - MinecraftForge.EVENT_BUS.register(client_proxy); - server_proxy = new ForgeServerProxy(false); - MinecraftForge.EVENT_BUS.register(server_proxy); - - if (AbstractOptifineAccessor.optifinePresent()) - { - ModAccessorInjector.INSTANCE.bind(IOptifineAccessor.class, new OptifineAccessor()); - } - #if MC_VER < MC_1_17_1 ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (client, parent) -> GetConfigScreen.getScreen(parent)); @@ -138,65 +117,36 @@ public class ForgeMain implements LodForgeMethodCaller ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> GetConfigScreen.getScreen(parent))); #endif - - ForgeClientProxy.setupNetworkingListeners(event); - - LOGGER.info(ModInfo.READABLE_NAME + " Initialized"); - - ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); - - // Init config - // The reason im initialising in this rather than the post init process is cus im using this for the auto updater - LodCommonMain.initConfig(); } - private void initDedicated(final FMLDedicatedServerSetupEvent event) - { -// DependencySetup.createServerBindings(); -// initCommon(); - -// server_proxy = new ForgeServerProxy(true); -// MinecraftForge.EVENT_BUS.register(server_proxy); -// - postInitCommon(); - } - - private void postInitCommon() - { - LOGGER.info("Post-Initializing Mod"); - ForgeDependencySetup.runDelayedSetup(); - - LOGGER.info("Mod Post-Initialized"); - } - - #if MC_VER < MC_1_19_2 - private final ModelDataMap modelData = new ModelDataMap.Builder().build(); - #else - private final ModelData modelData = ModelData.EMPTY; - #endif - @Override - #if MC_VER < MC_1_19_2 - public List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, Random random) + protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) { - return mc.getModelManager().getBlockModelShaper().getBlockModel(block.defaultBlockState()).getQuads(blockState, direction, random, modelData); + MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> + { + eventHandler.accept(e.getDispatcher()); + }); } - #else - public List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, RandomSource random) - { - return mc.getModelManager().getBlockModelShaper().getBlockModel(block.defaultBlockState()).getQuads(blockState, direction, random, modelData #if MC_VER >= MC_1_19_2 , RenderType.solid() #endif ); - } - #endif - @Override //TODO: Check this if its still needed - public int colorResolverGetColor(ColorResolver resolver, Biome biome, double x, double z) + @Override + protected void subscribeClientStartedEvent(Runnable eventHandler) { - #if MC_1_17_1______Still_needed - return resolver.m_130045_(biome, x, z); - #else - return resolver.getColor(biome, x, z); - #endif - + // FIXME What event is this? + } + + @Override + protected void subscribeServerStartingEvent(Consumer eventHandler) + { + MinecraftForge.EVENT_BUS.addListener((#if MC_VER >= MC_1_18_2 ServerStartingEvent #else FMLServerStartingEvent #endif e) -> + { + eventHandler.accept(e.getServer()); + }); + } + + @Override + protected void runDelayedSetup() + { + ForgeDependencySetup.runDelayedSetup(); } } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java index 7b5c9b29c..0d92d8188 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java @@ -1,5 +1,6 @@ package com.seibel.distanthorizons.forge; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -13,6 +14,7 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; #if MC_VER < MC_1_19_2 import net.minecraftforge.event.world.ChunkEvent; @@ -39,7 +41,7 @@ import org.apache.logging.log4j.Logger; import java.util.function.Supplier; -public class ForgeServerProxy +public class ForgeServerProxy implements IEventProxy { #if MC_VER < MC_1_19_2 private static LevelAccessor GetEventLevel(WorldEvent e) { return e.getWorld(); } @@ -53,6 +55,15 @@ public class ForgeServerProxy public static Supplier isGenerationThreadChecker = null; + + @Override + public void registerEvents() + { + MinecraftForge.EVENT_BUS.register(this); + } + + + //=============// // constructor // //=============// diff --git a/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeClientProxy.java b/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeClientProxy.java index 1390e2337..34aef5d89 100644 --- a/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeClientProxy.java +++ b/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeClientProxy.java @@ -19,6 +19,7 @@ package com.seibel.distanthorizons.neoforged; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -37,6 +38,7 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.client.multiplayer.ClientLevel; import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.level.ChunkEvent; import net.neoforged.neoforge.event.level.LevelEvent; @@ -64,7 +66,7 @@ import org.lwjgl.opengl.GL32; * @author James_Seibel * @version 2023-7-27 */ -public class NeoforgeClientProxy +public class NeoforgeClientProxy implements IEventProxy { private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); private static final Logger LOGGER = DhLoggerBuilder.getLogger(); @@ -76,6 +78,15 @@ public class NeoforgeClientProxy + @Override + public void registerEvents() + { + NeoForge.EVENT_BUS.register(this); + setupNetworkingListeners(); + } + + + //=============// // tick events // //=============// @@ -202,8 +213,7 @@ public class NeoforgeClientProxy // networking // //============// - /** @param event this is just to ensure the event is called at the right time, if it is called outside the {@link FMLClientSetupEvent} event, the binding may fail */ - public static void setupNetworkingListeners(FMLClientSetupEvent event) + public static void setupNetworkingListeners() { // multiversePluginChannel = NetworkRegistry.newSimpleChannel( // new ResourceLocation(ModInfo.NETWORKING_RESOURCE_NAMESPACE, ModInfo.MULTIVERSE_PLUGIN_NAMESPACE), diff --git a/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeMain.java b/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeMain.java index 88facc284..fbb0fec8f 100644 --- a/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeMain.java +++ b/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeMain.java @@ -19,45 +19,27 @@ package com.seibel.distanthorizons.neoforged; -import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent; -import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; -import com.seibel.distanthorizons.common.LodCommonMain; -import com.seibel.distanthorizons.common.forge.LodForgeMethodCaller; -import com.seibel.distanthorizons.common.wrappers.DependencySetup; +import com.mojang.brigadier.CommandDispatcher; +import com.seibel.distanthorizons.common.AbstractModInitializer; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.wrappers.gui.GetConfigScreen; -import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper; -import com.seibel.distanthorizons.core.jar.ModJarInfo; -import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.AbstractOptifineAccessor; -import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; -import com.seibel.distanthorizons.coreapi.ModInfo; -import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; -import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor; +import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.neoforged.wrappers.NeoforgeDependencySetup; - import com.seibel.distanthorizons.neoforged.wrappers.modAccessor.OptifineAccessor; - -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.ColorResolver; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.MinecraftServer; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModLoadingContext; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.event.lifecycle.*; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent; import net.neoforged.neoforge.client.ConfigScreenHandler; - import net.neoforged.neoforge.common.NeoForge; -import org.apache.logging.log4j.Logger; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.server.ServerStartingEvent; -import net.minecraft.client.renderer.RenderType; -import net.neoforged.neoforge.client.model.data.ModelData; - -import java.lang.invoke.MethodHandles; -import java.util.List; +import java.util.function.Consumer; /** * Initialize and setup the Mod.
@@ -70,92 +52,67 @@ import java.util.List; * @version 8-15-2022 */ @Mod(ModInfo.ID) -public class NeoforgeMain implements LodForgeMethodCaller +public class NeoforgeMain extends AbstractModInitializer { - private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); - public static NeoforgeClientProxy client_proxy = null; - public static NeoforgeServerProxy server_proxy = null; - public NeoforgeMain(IEventBus eventBus) { - DependencySetup.createClientBindings(); - -// initDedicated(null); -// initDedicated(null); - // Register the mod initializer (Actual event registration is done in the different proxies) - eventBus.addListener(this::initClient); - eventBus.addListener(this::initDedicated); + eventBus.addListener((FMLClientSetupEvent e) -> this.onInitializeClient()); + eventBus.addListener((FMLDedicatedServerSetupEvent e) -> this.onInitializeServer()); } - private void initClient(final FMLClientSetupEvent event) - { - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeDhInitEvent.class, null); - - LOGGER.info("Initializing Mod"); - LodCommonMain.startup(this); - NeoforgeDependencySetup.createInitialBindings(); - LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION); - - // Print git info (Useful for dev builds) - LOGGER.info("DH Branch: " + ModJarInfo.Git_Branch); - LOGGER.info("DH Commit: " + ModJarInfo.Git_Commit); - LOGGER.info("DH Jar Build Source: " + ModJarInfo.Build_Source); - - client_proxy = new NeoforgeClientProxy(); - NeoForge.EVENT_BUS.register(client_proxy); - server_proxy = new NeoforgeServerProxy(false); - NeoForge.EVENT_BUS.register(server_proxy); - - if (AbstractOptifineAccessor.optifinePresent()) - { - ModAccessorInjector.INSTANCE.bind(IOptifineAccessor.class, new OptifineAccessor()); - } - - ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, - () -> new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> GetConfigScreen.getScreen(parent))); - - NeoforgeClientProxy.setupNetworkingListeners(event); - - LOGGER.info(ModInfo.READABLE_NAME + " Initialized"); - - ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); - - // Init config - // The reason im initialising in this rather than the post init process is cus im using this for the auto updater - LodCommonMain.initConfig(); - } - - private void initDedicated(final FMLDedicatedServerSetupEvent event) - { -// DependencySetup.createServerBindings(); -// initCommon(); - -// server_proxy = new ForgeServerProxy(true); -// MinecraftForge.EVENT_BUS.register(server_proxy); -// - postInitCommon(); - } - - private void postInitCommon() - { - LOGGER.info("Post-Initializing Mod"); - NeoforgeDependencySetup.runDelayedSetup(); - - LOGGER.info("Mod Post-Initialized"); - } - - private final ModelData modelData = ModelData.EMPTY; - @Override - public List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, RandomSource random) + protected void createInitialBindings() { - return mc.getModelManager().getBlockModelShaper().getBlockModel(block.defaultBlockState()).getQuads(blockState, direction, random, modelData, RenderType.solid() ); + NeoforgeDependencySetup.createInitialBindings(); } - @Override //TODO: Check this if its still needed - public int colorResolverGetColor(ColorResolver resolver, Biome biome, double x, double z) + @Override + protected IEventProxy createClientProxy() { - return resolver.getColor(biome, x, z); + return new NeoforgeClientProxy(); + } + + @Override + protected IEventProxy createServerProxy(boolean isDedicated) + { + return new NeoforgeServerProxy(isDedicated); + } + + @Override + protected void initializeModCompat() + { + this.tryCreateModCompatAccessor("optifine", IOptifineAccessor.class, OptifineAccessor::new); + + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, + () -> new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> GetConfigScreen.getScreen(parent))); + } + + @Override + protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) + { + NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> { + eventHandler.accept(e.getDispatcher()); + }); + } + + @Override + protected void subscribeClientStartedEvent(Runnable eventHandler) + { + // FIXME What event is this? + } + + @Override + protected void subscribeServerStartingEvent(Consumer eventHandler) + { + NeoForge.EVENT_BUS.addListener((ServerStartingEvent e) -> { + eventHandler.accept(e.getServer()); + }); + } + + @Override + protected void runDelayedSetup() + { + NeoforgeDependencySetup.runDelayedSetup(); } } diff --git a/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeServerProxy.java b/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeServerProxy.java index bbeb5c009..f5e786880 100644 --- a/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeServerProxy.java +++ b/neoforged/src/main/java/com/seibel/distanthorizons/neoforged/NeoforgeServerProxy.java @@ -1,5 +1,6 @@ package com.seibel.distanthorizons.neoforged; +import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; @@ -10,6 +11,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.LevelAccessor; +import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.TickEvent; import net.neoforged.neoforge.event.level.ChunkEvent; import net.neoforged.neoforge.event.level.LevelEvent; @@ -23,7 +25,7 @@ import org.apache.logging.log4j.Logger; import java.util.function.Supplier; -public class NeoforgeServerProxy +public class NeoforgeServerProxy implements IEventProxy { private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); } @@ -43,6 +45,13 @@ public class NeoforgeServerProxy isGenerationThreadChecker = BatchGenerationEnvironment::isCurrentThreadDistantGeneratorThread; } + @Override + public void registerEvents() + { + NeoForge.EVENT_BUS.register(this); + } + + //========// From 46bf8d018890a4eda1745caf53aab11afdf78335 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 13 Jan 2024 23:12:19 -0600 Subject: [PATCH 2/7] Update coreSubProjects --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 754954326..d878e464f 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 7549543268149eb5f93d44bf1b4651e10734247f +Subproject commit d878e464f660fed791af60db56a5b1ab182868f2 From af04c6d99513fbf8716c8c40fdf6c9b9beb23b18 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 14 Jan 2024 13:27:14 -0600 Subject: [PATCH 3/7] Fix light engine out of bounds for MC 1.16 and 1.17 --- .../distanthorizons/common/wrappers/chunk/ChunkWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/chunk/ChunkWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/chunk/ChunkWrapper.java index c0b0235ab..55471663a 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/chunk/ChunkWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/chunk/ChunkWrapper.java @@ -243,7 +243,7 @@ public class ChunkWrapper implements IChunkWrapper { // convert from an index to a block coordinate #if MC_VER == MC_1_16_5 || MC_VER == MC_1_17_1 - return this.chunk.getSections()[index].bottomBlockY() * 16; + return this.chunk.getSections()[index].bottomBlockY(); #else return this.chunk.getSectionYFromSectionIndex(index) * 16; #endif From f866243d5cd32fdca2eac18b517bfec71c510001 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 14 Jan 2024 15:07:35 -0600 Subject: [PATCH 4/7] Attempt to fix File handler repo closed issues --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index d878e464f..45c47533c 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit d878e464f660fed791af60db56a5b1ab182868f2 +Subproject commit 45c47533c27c41476f721abb989fae17e8268446 From 1e19dfd6e82e9bafb0c6072b29d55b0e2eddceac Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 14 Jan 2024 15:08:29 -0600 Subject: [PATCH 5/7] minor lightMapWrapper reformat --- .../common/wrappers/misc/LightMapWrapper.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java index 39d1f3e4a..b6ed1265c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java @@ -25,35 +25,39 @@ import org.lwjgl.opengl.GL32; import java.nio.ByteBuffer; -/** - * @author James Seibel - * @version 11-21-2021 - */ public class LightMapWrapper implements ILightMapWrapper { private int textureId = 0; - public LightMapWrapper() - { - } + + //==============// + // constructors // + //==============// + + public LightMapWrapper() { } private void createLightmap(NativeImage image) { - textureId = GL32.glGenTextures(); - GL32.glBindTexture(GL32.GL_TEXTURE_2D, textureId); + this.textureId = GL32.glGenTextures(); + GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); GL32.glTexImage2D(GL32.GL_TEXTURE_2D, 0, image.format().glFormat(), image.getWidth(), image.getHeight(), 0, image.format().glFormat(), GL32.GL_UNSIGNED_BYTE, (ByteBuffer) null); } + + + //=========// + // methods // + //=========// + public void uploadLightmap(NativeImage image) { int currentBind = GL32.glGetInteger(GL32.GL_TEXTURE_BINDING_2D); - GL32.glBindTexture(GL32.GL_TEXTURE_2D, textureId); - if (textureId == 0) + GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); + if (this.textureId == 0) { - createLightmap(image); + this.createLightmap(image); } - // NativeImage::upload(int levelOfDetail, int xOffset, int yOffset, bool shouldCleanup?) image.upload(0, 0, 0, false); GL32.glBindTexture(GL32.GL_TEXTURE_2D, currentBind); } @@ -66,9 +70,6 @@ public class LightMapWrapper implements ILightMapWrapper } @Override - public void unbind() - { - GL32.glBindTexture(GL32.GL_TEXTURE_2D, 0); - } + public void unbind() { GL32.glBindTexture(GL32.GL_TEXTURE_2D, 0); } } From 6130c65c4889b91c39af971adb9968d2ebdc18f3 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 14 Jan 2024 15:53:21 -0600 Subject: [PATCH 6/7] Add messages to chunk loading about world optimization --- .../BatchGenerationEnvironment.java | 10 +++++-- .../mimicObject/ChunkLoader.java | 26 +++++++++++++++++-- coreSubProjects | 2 +- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java index 59cc24b62..bed2582a3 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java @@ -405,12 +405,18 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv { try { - LOAD_LOGGER.info("DistantHorizons: Loading chunk " + chunkPos + " from disk."); + LOAD_LOGGER.info("DistantHorizons: Loading chunk [" + chunkPos + "] from disk."); return ChunkLoader.read(level, chunkPos, chunkData); } catch (Exception e) { - LOAD_LOGGER.error("DistantHorizons: Couldn't load or make chunk " + chunkPos + ". Returning an empty chunk. Error: " + e.getMessage(), e); + LOAD_LOGGER.error( + "DistantHorizons: couldn't load or make chunk at ["+chunkPos+"]." + + "Please try optimizing your world to fix this issue. \n" + + "World optimization can be done from the singleplayer world selection screen.\n" + + "Error: ["+e.getMessage()+"]." + , e); + return EmptyChunk(level, chunkPos); } } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java index 7edb2d77e..97828775d 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java @@ -81,6 +81,8 @@ import net.minecraft.world.level.material.Fluid; public class ChunkLoader { + private static boolean zeroChunkPosErrorLogged = false; + #if MC_VER >= MC_1_19_2 private static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState()); #elif MC_VER >= MC_1_18_2 @@ -232,8 +234,28 @@ public class ChunkLoader ChunkPos actualPos = new ChunkPos(tagLevel.getInt("xPos"), tagLevel.getInt("zPos")); if (!Objects.equals(chunkPos, actualPos)) { - LOGGER.error("Chunk file at {} is in the wrong location; Ignoring. (Expected {}, got {})", chunkPos, chunkPos, actualPos); - return null; + if (actualPos.equals(ChunkPos.ZERO)) + { + if (!zeroChunkPosErrorLogged) + { + zeroChunkPosErrorLogged = true; + + // explicit chunkPos toString is necessary otherwise the JDK 17 compiler breaks + LOGGER.warn("Chunk file at ["+chunkPos.toString()+"] doesn't have a chunk pos. \n" + + "This might happen if the world was created using an external program. \n" + + "DH will attempt to parse the chunk anyway and won't log this message again.\n" + + "If issues arise please try optimizing your world to fix this issue. \n" + + "World optimization can be done from the singleplayer world selection screen."+ + ""); + } + } + else + { + // everything is on one line to fix a JDK 17 compiler issue + // if the issue is ever resolved, feel free to make this multi-line for readability + LOGGER.error("Chunk file at ["+chunkPos.toString()+"] is in the wrong location. \nPlease try optimizing your world to fix this issue. \nWorld optimization can be done from the singleplayer world selection screen. \n(Expected pos: ["+chunkPos.toString()+"], actual ["+actualPos.toString()+"])"); + return null; + } } ChunkStatus.ChunkType chunkType = readChunkType(tagLevel); diff --git a/coreSubProjects b/coreSubProjects index 45c47533c..163c0bf1f 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 45c47533c27c41476f721abb989fae17e8268446 +Subproject commit 163c0bf1fac5eb3f17406a6bcc0ed8ba5d5b041f From 1fbc37f8e7a55eed588f6e8afd2a16ddab1b7d92 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 14 Jan 2024 16:55:55 -0600 Subject: [PATCH 7/7] Initializer code reduction and reformatting --- .../common/AbstractModInitializer.java | 135 ++++++++-------- .../distanthorizons/common/IEventProxy.java | 6 - .../block/TintGetterOverrideFast.java | 13 +- .../block/TintGetterOverrideSmooth.java | 148 ++++-------------- .../fabric/FabricClientProxy.java | 12 +- .../distanthorizons/fabric/FabricMain.java | 37 +---- .../fabric/FabricServerProxy.java | 5 +- .../wrappers/FabricDependencySetup.java | 48 ------ .../forge/ForgeClientProxy.java | 5 +- .../distanthorizons/forge/ForgeMain.java | 35 +---- .../forge/ForgeServerProxy.java | 7 +- .../forge/wrappers/ForgeDependencySetup.java | 48 ------ .../neoforge/NeoforgeClientProxy.java | 5 +- .../neoforge/NeoforgeMain.java | 42 ++--- .../neoforge/NeoforgeServerProxy.java | 4 +- .../wrappers/NeoforgeDependencySetup.java | 48 ------ 16 files changed, 139 insertions(+), 459 deletions(-) delete mode 100644 common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java delete mode 100644 fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/FabricDependencySetup.java delete mode 100644 forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/ForgeDependencySetup.java delete mode 100644 neoforge/src/main/java/com/seibel/distanthorizons/neoforge/wrappers/NeoforgeDependencySetup.java diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java index c811a78c4..1c9def3a3 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -1,13 +1,6 @@ package com.seibel.distanthorizons.common; -import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.arguments.BoolArgumentType; -import com.mojang.brigadier.arguments.DoubleArgumentType; -import com.mojang.brigadier.arguments.IntegerArgumentType; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent; import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; import com.seibel.distanthorizons.common.wrappers.DependencySetup; @@ -16,13 +9,10 @@ import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.config.ConfigBase; import com.seibel.distanthorizons.core.config.eventHandlers.presets.ThreadPresetConfigEventHandler; -import com.seibel.distanthorizons.core.config.types.AbstractConfigType; -import com.seibel.distanthorizons.core.config.types.ConfigEntry; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.jar.ModJarInfo; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; -import com.seibel.distanthorizons.core.util.objects.Pair; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; @@ -32,35 +22,32 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.DedicatedServer; import org.apache.logging.log4j.Logger; -#if MC_VER >= MC_1_19_2 -import net.minecraft.network.chat.Component; -#else // < 1.19.2 -import net.minecraft.network.chat.TranslatableComponent; -#endif - import java.lang.invoke.MethodHandles; -import java.util.HashMap; -import java.util.function.BiFunction; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; -import static com.mojang.brigadier.arguments.DoubleArgumentType.doubleArg; -import static com.mojang.brigadier.arguments.IntegerArgumentType.integer; -import static net.minecraft.commands.Commands.argument; -import static net.minecraft.commands.Commands.literal; - +/** + * Base for all mod loader initializers + * and handles most setup. + */ public abstract class AbstractModInitializer { protected static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + private CommandDispatcher commandDispatcher; + + + + //==================// + // abstract methods // + //==================// + protected abstract void createInitialBindings(); protected abstract IEventProxy createClientProxy(); protected abstract IEventProxy createServerProxy(boolean isDedicated); protected abstract void initializeModCompat(); protected abstract void subscribeRegisterCommandsEvent(Consumer> eventHandler); - private CommandDispatcher commandDispatcher; protected abstract void subscribeClientStartedEvent(Runnable eventHandler); protected abstract void subscribeServerStartingEvent(Consumer eventHandler); @@ -68,41 +55,9 @@ public abstract class AbstractModInitializer - private void startup() - { - DependencySetup.createSharedBindings(); - SharedApi.init(); - this.createInitialBindings(); - } - - private void printModInfo(boolean printGitInfo) - { - LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION); - - if (printGitInfo) - { - // Useful for dev builds - LOGGER.info("DH Branch: " + ModJarInfo.Git_Branch); - LOGGER.info("DH Commit: " + ModJarInfo.Git_Commit); - LOGGER.info("DH Jar Build Source: " + ModJarInfo.Build_Source); - } - } - - protected void tryCreateModCompatAccessor(String modId, Class accessorClass, Supplier accessorConstructor) - { - IModChecker modChecker = SingletonInjector.INSTANCE.get(IModChecker.class); - if (modChecker.isModLoaded(modId)) - { - //noinspection unchecked - ModAccessorInjector.INSTANCE.bind((Class) accessorClass, accessorConstructor.get()); - } - } - - private void initConfig() - { - ConfigBase.INSTANCE = new ConfigBase(ModInfo.ID, ModInfo.NAME, Config.class, 2); - Config.completeDelayedSetup(); - } + //===================// + // initialize events // + //===================// public void onInitializeClient() { @@ -148,11 +103,10 @@ public abstract class AbstractModInitializer LOGGER.info(ModInfo.READABLE_NAME + " Initialized"); ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); - this.subscribeRegisterCommandsEvent(dispatcher -> { - this.commandDispatcher = dispatcher; - }); + this.subscribeRegisterCommandsEvent(dispatcher -> { this.commandDispatcher = dispatcher; }); - this.subscribeServerStartingEvent(server -> { + this.subscribeServerStartingEvent(server -> + { MinecraftDedicatedServerWrapper.INSTANCE.dedicatedServer = (DedicatedServer)server; this.initConfig(); @@ -163,6 +117,48 @@ public abstract class AbstractModInitializer }); } + + + //===========================// + // inner initializer methods // + //===========================// + + private void startup() + { + DependencySetup.createSharedBindings(); + SharedApi.init(); + this.createInitialBindings(); + } + + private void printModInfo(boolean printGitInfo) + { + LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION); + + if (printGitInfo) + { + // Useful for dev builds + LOGGER.info("DH Branch: " + ModJarInfo.Git_Branch); + LOGGER.info("DH Commit: " + ModJarInfo.Git_Commit); + LOGGER.info("DH Jar Build Source: " + ModJarInfo.Build_Source); + } + } + + protected void tryCreateModCompatAccessor(String modId, Class accessorClass, Supplier accessorConstructor) + { + IModChecker modChecker = SingletonInjector.INSTANCE.get(IModChecker.class); + if (modChecker.isModLoaded(modId)) + { + //noinspection unchecked + ModAccessorInjector.INSTANCE.bind((Class) accessorClass, accessorConstructor.get()); + } + } + + private void initConfig() + { + ConfigBase.INSTANCE = new ConfigBase(ModInfo.ID, ModInfo.NAME, Config.class, 2); + Config.completeDelayedSetup(); + } + private void postInit() { LOGGER.info("Post-Initializing Mod"); @@ -175,4 +171,15 @@ public abstract class AbstractModInitializer // TODO } + + + //================// + // helper classes // + //================// + + public interface IEventProxy + { + void registerEvents(); + } + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java b/common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java deleted file mode 100644 index 0f2e6b896..000000000 --- a/common/src/main/java/com/seibel/distanthorizons/common/IEventProxy.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.seibel.distanthorizons.common; - -public interface IEventProxy -{ - void registerEvents(); -} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java index 543747c2c..f71095818 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideFast.java @@ -57,18 +57,7 @@ public class TintGetterOverrideFast implements BlockAndTintGetter } @Override - public int getBlockTint(BlockPos blockPos, ColorResolver colorResolver) - { - //if (LodCommonMain.forgeMethodCaller != null) - //{ - // return LodCommonMain.forgeMethodCaller.colorResolverGetColor(colorResolver, _getBiome(blockPos), - // blockPos.getX(), blockPos.getZ()); - //} - //else - //{ - return colorResolver.getColor(this._getBiome(blockPos), blockPos.getX(), blockPos.getZ()); - //} - } + public int getBlockTint(BlockPos blockPos, ColorResolver colorResolver) { return colorResolver.getColor(this._getBiome(blockPos), blockPos.getX(), blockPos.getZ()); } @Override public float getShade(Direction direction, boolean bl) { return this.parent.getShade(direction, bl); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java index 4e8ff00c5..a840f3868 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/TintGetterOverrideSmooth.java @@ -73,16 +73,7 @@ public class TintGetterOverrideSmooth implements BlockAndTintGetter while (cursor3D.advance()) { mutableBlockPos.set(cursor3D.nextX(), cursor3D.nextY(), cursor3D.nextZ()); - int n; - //if (LodCommonMain.forgeMethodCaller != null) - //{ - // n = LodCommonMain.forgeMethodCaller.colorResolverGetColor(colorResolver, _getBiome(mutableBlockPos), - // mutableBlockPos.getX(), mutableBlockPos.getZ()); - //} - //else - //{ - n = colorResolver.getColor(this._getBiome(mutableBlockPos), mutableBlockPos.getX(), mutableBlockPos.getZ()); - //} + int n = colorResolver.getColor(this._getBiome(mutableBlockPos), mutableBlockPos.getX(), mutableBlockPos.getZ()); k += (n & 0xFF0000) >> 16; l += (n & 0xFF00) >> 8; @@ -92,177 +83,96 @@ public class TintGetterOverrideSmooth implements BlockAndTintGetter } @Override - public int getBlockTint(BlockPos blockPos, ColorResolver colorResolver) - { - return calculateBlockTint(blockPos, colorResolver); - } + public int getBlockTint(BlockPos blockPos, ColorResolver colorResolver) { return this.calculateBlockTint(blockPos, colorResolver); } @Override public float getShade(Direction direction, boolean bl) { return this.parent.getShade(direction, bl); } @Override - public LevelLightEngine getLightEngine() - { - return parent.getLightEngine(); - } + public LevelLightEngine getLightEngine() { return this.parent.getLightEngine(); } @Override - public int getBrightness(LightLayer lightLayer, BlockPos blockPos) - { - return parent.getBrightness(lightLayer, blockPos); - } + public int getBrightness(LightLayer lightLayer, BlockPos blockPos) { return this.parent.getBrightness(lightLayer, blockPos); } @Override - public int getRawBrightness(BlockPos blockPos, int i) - { - return parent.getRawBrightness(blockPos, i); - } + public int getRawBrightness(BlockPos blockPos, int i) { return this.parent.getRawBrightness(blockPos, i); } @Override - public boolean canSeeSky(BlockPos blockPos) - { - return parent.canSeeSky(blockPos); - } + public boolean canSeeSky(BlockPos blockPos) { return this.parent.canSeeSky(blockPos); } @Override @Nullable - public BlockEntity getBlockEntity(BlockPos blockPos) - { - return parent.getBlockEntity(blockPos); - } + public BlockEntity getBlockEntity(BlockPos blockPos) { return this.parent.getBlockEntity(blockPos); } @Override - public BlockState getBlockState(BlockPos blockPos) - { - return parent.getBlockState(blockPos); - } + public BlockState getBlockState(BlockPos blockPos) { return this.parent.getBlockState(blockPos); } @Override - public FluidState getFluidState(BlockPos blockPos) - { - return parent.getFluidState(blockPos); - } + public FluidState getFluidState(BlockPos blockPos) { return this.parent.getFluidState(blockPos); } @Override - public int getLightEmission(BlockPos blockPos) - { - return parent.getLightEmission(blockPos); - } + public int getLightEmission(BlockPos blockPos) { return this.parent.getLightEmission(blockPos); } @Override - public int getMaxLightLevel() - { - return parent.getMaxLightLevel(); - } + public int getMaxLightLevel() { return this.parent.getMaxLightLevel(); } @Override - public Stream getBlockStates(AABB aABB) - { - return parent.getBlockStates(aABB); - } + public Stream getBlockStates(AABB aABB) { return this.parent.getBlockStates(aABB); } @Override - public BlockHitResult clip(ClipContext clipContext) - { - return parent.clip(clipContext); - } + public BlockHitResult clip(ClipContext clipContext) { return this.parent.clip(clipContext); } @Override @Nullable public BlockHitResult clipWithInteractionOverride(Vec3 vec3, Vec3 vec32, BlockPos blockPos, VoxelShape voxelShape, BlockState blockState) { - return parent.clipWithInteractionOverride(vec3, vec32, blockPos, voxelShape, blockState); + return this.parent.clipWithInteractionOverride(vec3, vec32, blockPos, voxelShape, blockState); } @Override - public double getBlockFloorHeight(VoxelShape voxelShape, Supplier supplier) - { - return parent.getBlockFloorHeight(voxelShape, supplier); - } + public double getBlockFloorHeight(VoxelShape voxelShape, Supplier supplier) { return this.parent.getBlockFloorHeight(voxelShape, supplier); } @Override - public double getBlockFloorHeight(BlockPos blockPos) - { - return parent.getBlockFloorHeight(blockPos); - } + public double getBlockFloorHeight(BlockPos blockPos) { return this.parent.getBlockFloorHeight(blockPos); } @Override - public int getMaxBuildHeight() - { - return parent.getMaxBuildHeight(); - } + public int getMaxBuildHeight() { return this.parent.getMaxBuildHeight(); } #if MC_VER >= MC_1_17_1 @Override - public Optional getBlockEntity(BlockPos blockPos, BlockEntityType blockEntityType) - { - return parent.getBlockEntity(blockPos, blockEntityType); - } + public Optional getBlockEntity(BlockPos blockPos, BlockEntityType blockEntityType) { return this.parent.getBlockEntity(blockPos, blockEntityType); } @Override - public BlockHitResult isBlockInLine(ClipBlockStateContext clipBlockStateContext) - { - return parent.isBlockInLine(clipBlockStateContext); - } + public BlockHitResult isBlockInLine(ClipBlockStateContext clipBlockStateContext) { return this.parent.isBlockInLine(clipBlockStateContext); } @Override - public int getHeight() - { - return parent.getHeight(); - } + public int getHeight() { return this.parent.getHeight(); } @Override - public int getMinBuildHeight() - { - return parent.getMinBuildHeight(); - } + public int getMinBuildHeight() { return this.parent.getMinBuildHeight(); } @Override - public int getSectionsCount() - { - return parent.getSectionsCount(); - } + public int getSectionsCount() { return this.parent.getSectionsCount(); } @Override - public int getMinSection() - { - return parent.getMinSection(); - } + public int getMinSection() { return this.parent.getMinSection(); } @Override - public int getMaxSection() - { - return parent.getMaxSection(); - } + public int getMaxSection() { return this.parent.getMaxSection(); } @Override - public boolean isOutsideBuildHeight(BlockPos blockPos) - { - return parent.isOutsideBuildHeight(blockPos); - } + public boolean isOutsideBuildHeight(BlockPos blockPos) { return this.parent.isOutsideBuildHeight(blockPos); } @Override - public boolean isOutsideBuildHeight(int i) - { - return parent.isOutsideBuildHeight(i); - } + public boolean isOutsideBuildHeight(int i) { return this.parent.isOutsideBuildHeight(i); } @Override - public int getSectionIndex(int i) - { - return parent.getSectionIndex(i); - } + public int getSectionIndex(int i) { return this.parent.getSectionIndex(i); } @Override - public int getSectionIndexFromSectionY(int i) - { - return parent.getSectionIndexFromSectionY(i); - } + public int getSectionIndexFromSectionY(int i) { return this.parent.getSectionIndexFromSectionY(i); } @Override - public int getSectionYFromSectionIndex(int i) - { - return parent.getSectionYFromSectionIndex(i); - } + public int getSectionYFromSectionIndex(int i) { return this.parent.getSectionYFromSectionIndex(i); } #endif } diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java index 9a5920656..7fcebe40d 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -19,7 +19,7 @@ package com.seibel.distanthorizons.fabric; -import com.seibel.distanthorizons.common.IEventProxy; +import com.seibel.distanthorizons.common.AbstractModInitializer; import com.seibel.distanthorizons.common.rendering.SeamlessOverdraw; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -35,34 +35,26 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; -import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.fabric.wrappers.modAccessor.SodiumAccessor; //import io.netty.buffer.ByteBuf; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientChunkEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackBlockCallback; import net.fabricmc.fabric.api.event.player.UseBlockCallback; -import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; -import java.nio.FloatBuffer; import java.util.HashSet; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionResult; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.phys.HitResult; import org.apache.logging.log4j.Logger; import org.lwjgl.glfw.GLFW; -import org.lwjgl.opengl.GL15; /** * This handles all events sent to the client, @@ -73,7 +65,7 @@ import org.lwjgl.opengl.GL15; * @version 2023-7-27 */ @Environment(EnvType.CLIENT) -public class FabricClientProxy implements IEventProxy +public class FabricClientProxy implements AbstractModInitializer.IEventProxy { private final ClientApi clientApi = ClientApi.INSTANCE; private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java index b047bbfdd..2de23a193 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java @@ -21,7 +21,6 @@ package com.seibel.distanthorizons.fabric; import com.mojang.brigadier.CommandDispatcher; import com.seibel.distanthorizons.common.AbstractModInitializer; -import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.config.ConfigBase; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; @@ -29,7 +28,6 @@ import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*; import com.seibel.distanthorizons.coreapi.ModInfo; -import com.seibel.distanthorizons.fabric.wrappers.FabricDependencySetup; import com.seibel.distanthorizons.fabric.wrappers.modAccessor.*; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.DedicatedServerModInitializer; @@ -47,10 +45,6 @@ import java.util.function.Consumer; * Initialize and setup the Mod.
* If you are looking for the real start of the mod * check out the ClientProxy. - * - * @author coolGi - * @author Ran - * @version 9-2-2022 */ public class FabricMain extends AbstractModInitializer implements ClientModInitializer, DedicatedServerModInitializer { @@ -59,22 +53,13 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti @Override - protected void createInitialBindings() - { - FabricDependencySetup.createInitialBindings(); - } + protected void createInitialBindings() { SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); } @Override - protected IEventProxy createClientProxy() - { - return new FabricClientProxy(); - } + protected IEventProxy createClientProxy() { return new FabricClientProxy(); } @Override - protected IEventProxy createServerProxy(boolean isDedicated) - { - return new FabricServerProxy(isDedicated); - } + protected IEventProxy createServerProxy(boolean isDedicated) { return new FabricServerProxy(isDedicated); } @Override protected void initializeModCompat() @@ -109,19 +94,10 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti } @Override - protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) - { - // fabric-command-api-v1/v2 - //CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess #if MC_VER >= MC_1_19_2 , environment #endif ) -> { - // eventHandler.accept(dispatcher); - //}); - } + protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) { } @Override - protected void subscribeClientStartedEvent(Runnable eventHandler) - { - ClientLifecycleEvents.CLIENT_STARTED.register((mc) -> eventHandler.run()); - } + protected void subscribeClientStartedEvent(Runnable eventHandler) { ClientLifecycleEvents.CLIENT_STARTED.register((mc) -> eventHandler.run()); } @Override protected void subscribeServerStartingEvent(Consumer eventHandler) @@ -133,10 +109,11 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti @Override protected void runDelayedSetup() { - FabricDependencySetup.runDelayedSetup(); + SingletonInjector.INSTANCE.runDelayedSetup(); if (Config.Client.Advanced.Graphics.Fog.disableVanillaFog.get() && SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("bclib")) ModAccessorInjector.INSTANCE.get(IBCLibAccessor.class).setRenderCustomFog(false); // Remove BCLib's fog + #if MC_VER >= MC_1_20_1 if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("sodium")) ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class).setFogOcclusion(false); // FIXME: This is a tmp fix for sodium 0.5.0, and 0.5.1. This is fixed in sodium 0.5.2 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java index 7754f5bfb..71a0d8af7 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java @@ -1,12 +1,11 @@ package com.seibel.distanthorizons.fabric; -import com.seibel.distanthorizons.common.IEventProxy; +import com.seibel.distanthorizons.common.AbstractModInitializer; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; -import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.api.internal.ServerApi; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; @@ -33,7 +32,7 @@ import java.util.function.Supplier; * @author Tomlee * @version 5-11-2022 */ -public class FabricServerProxy implements IEventProxy +public class FabricServerProxy implements AbstractModInitializer.IEventProxy { private static final ServerApi SERVER_API = ServerApi.INSTANCE; private static final Logger LOGGER = DhLoggerBuilder.getLogger(); diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/FabricDependencySetup.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/FabricDependencySetup.java deleted file mode 100644 index 13eb0b7eb..000000000 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/FabricDependencySetup.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.fabric.wrappers; - -import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; -import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; -import com.seibel.distanthorizons.fabric.wrappers.modAccessor.ModChecker; - -/** - * Binds all necessary dependencies, so we - * can access them in Core.
- * This needs to be called before any Core classes - * are loaded. - * - * @author James Seibel - * @author Ran - * @version 3-5-2022 - */ -public class FabricDependencySetup -{ - public static void createInitialBindings() - { - SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); - } - - public static void runDelayedSetup() - { - SingletonInjector.INSTANCE.runDelayedSetup(); - } - -} diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java index 6b225b68f..469f7b134 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java @@ -19,7 +19,7 @@ package com.seibel.distanthorizons.forge; -import com.seibel.distanthorizons.common.IEventProxy; +import com.seibel.distanthorizons.common.AbstractModInitializer; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -52,7 +52,6 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; //import net.minecraftforge.network.NetworkRegistry; //import net.minecraftforge.network.simple.SimpleChannel; import org.apache.logging.log4j.Logger; @@ -73,7 +72,7 @@ import org.lwjgl.opengl.GL32; * @author James_Seibel * @version 2023-7-27 */ -public class ForgeClientProxy implements IEventProxy +public class ForgeClientProxy implements AbstractModInitializer.IEventProxy { private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); private static final Logger LOGGER = DhLoggerBuilder.getLogger(); diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java index bd928126d..3a853f08e 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeMain.java @@ -21,12 +21,13 @@ package com.seibel.distanthorizons.forge; import com.mojang.brigadier.CommandDispatcher; import com.seibel.distanthorizons.common.AbstractModInitializer; -import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.wrappers.gui.GetConfigScreen; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor; -import com.seibel.distanthorizons.forge.wrappers.ForgeDependencySetup; +import com.seibel.distanthorizons.forge.wrappers.modAccessor.ModChecker; import com.seibel.distanthorizons.forge.wrappers.modAccessor.OptifineAccessor; import net.minecraft.commands.CommandSourceStack; @@ -68,11 +69,6 @@ import java.util.function.Consumer; * Initialize and setup the Mod.
* If you are looking for the real start of the mod * check out the ClientProxy. - * - * @author coolGi - * @author Ran - * @author James Seibel - * @version 8-15-2022 */ @Mod(ModInfo.ID) public class ForgeMain extends AbstractModInitializer @@ -85,22 +81,13 @@ public class ForgeMain extends AbstractModInitializer } @Override - protected void createInitialBindings() - { - ForgeDependencySetup.createInitialBindings(); - } + protected void createInitialBindings() { SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); } @Override - protected IEventProxy createClientProxy() - { - return new ForgeClientProxy(); - } + protected IEventProxy createClientProxy() { return new ForgeClientProxy(); } @Override - protected IEventProxy createServerProxy(boolean isDedicated) - { - return new ForgeServerProxy(isDedicated); - } + protected IEventProxy createServerProxy(boolean isDedicated) { return new ForgeServerProxy(isDedicated); } @Override protected void initializeModCompat() @@ -122,10 +109,7 @@ public class ForgeMain extends AbstractModInitializer @Override protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) { - MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> - { - eventHandler.accept(e.getDispatcher()); - }); + MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> { eventHandler.accept(e.getDispatcher()); }); } @Override @@ -144,9 +128,6 @@ public class ForgeMain extends AbstractModInitializer } @Override - protected void runDelayedSetup() - { - ForgeDependencySetup.runDelayedSetup(); - } + protected void runDelayedSetup() { SingletonInjector.INSTANCE.runDelayedSetup(); } } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java index 0d92d8188..0c9521e0c 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java @@ -1,18 +1,15 @@ package com.seibel.distanthorizons.forge; -import com.seibel.distanthorizons.common.IEventProxy; +import com.seibel.distanthorizons.common.AbstractModInitializer; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; -import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; import com.seibel.distanthorizons.core.api.internal.ServerApi; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; @@ -41,7 +38,7 @@ import org.apache.logging.log4j.Logger; import java.util.function.Supplier; -public class ForgeServerProxy implements IEventProxy +public class ForgeServerProxy implements AbstractModInitializer.IEventProxy { #if MC_VER < MC_1_19_2 private static LevelAccessor GetEventLevel(WorldEvent e) { return e.getWorld(); } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/ForgeDependencySetup.java b/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/ForgeDependencySetup.java deleted file mode 100644 index 5008ee6c0..000000000 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/ForgeDependencySetup.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.forge.wrappers; - -import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; -import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; -import com.seibel.distanthorizons.forge.wrappers.modAccessor.ModChecker; - -/** - * Binds all necessary dependencies so we - * can access them in Core.
- * This needs to be called before any Core classes - * are loaded. - * - * @author James Seibel - * @author Ran - * @version 12-1-2021 - */ -public class ForgeDependencySetup -{ - public static void createInitialBindings() - { - SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); - } - - public static void runDelayedSetup() - { - SingletonInjector.INSTANCE.runDelayedSetup(); - } - -} diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java index 24c6bd50d..d46be455c 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java @@ -19,7 +19,7 @@ package com.seibel.distanthorizons.neoforge; -import com.seibel.distanthorizons.common.IEventProxy; +import com.seibel.distanthorizons.common.AbstractModInitializer; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; @@ -45,7 +45,6 @@ import net.neoforged.neoforge.event.level.LevelEvent; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.minecraft.world.level.chunk.ChunkAccess; -import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; //import net.neoforged.network.NetworkRegistry; //import net.neoforged.network.simple.SimpleChannel; import org.apache.logging.log4j.Logger; @@ -66,7 +65,7 @@ import org.lwjgl.opengl.GL32; * @author James_Seibel * @version 2023-7-27 */ -public class NeoforgeClientProxy implements IEventProxy +public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy { private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); private static final Logger LOGGER = DhLoggerBuilder.getLogger(); diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeMain.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeMain.java index fbb0fec8f..8ee751e5e 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeMain.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeMain.java @@ -17,16 +17,17 @@ * along with this program. If not, see . */ -package com.seibel.distanthorizons.neoforged; +package com.seibel.distanthorizons.neoforge; import com.mojang.brigadier.CommandDispatcher; import com.seibel.distanthorizons.common.AbstractModInitializer; -import com.seibel.distanthorizons.common.IEventProxy; import com.seibel.distanthorizons.common.wrappers.gui.GetConfigScreen; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor; import com.seibel.distanthorizons.coreapi.ModInfo; -import com.seibel.distanthorizons.neoforged.wrappers.NeoforgeDependencySetup; -import com.seibel.distanthorizons.neoforged.wrappers.modAccessor.OptifineAccessor; +import com.seibel.distanthorizons.neoforge.wrappers.modAccessor.ModChecker; +import com.seibel.distanthorizons.neoforge.wrappers.modAccessor.OptifineAccessor; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.MinecraftServer; import net.neoforged.bus.api.IEventBus; @@ -45,11 +46,6 @@ import java.util.function.Consumer; * Initialize and setup the Mod.
* If you are looking for the real start of the mod * check out the ClientProxy. - * - * @author coolGi - * @author Ran - * @author James Seibel - * @version 8-15-2022 */ @Mod(ModInfo.ID) public class NeoforgeMain extends AbstractModInitializer @@ -61,22 +57,13 @@ public class NeoforgeMain extends AbstractModInitializer } @Override - protected void createInitialBindings() - { - NeoforgeDependencySetup.createInitialBindings(); - } + protected IEventProxy createServerProxy(boolean isDedicated) { return new NeoforgeServerProxy(isDedicated); } @Override - protected IEventProxy createClientProxy() - { - return new NeoforgeClientProxy(); - } + protected void createInitialBindings() { SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); } @Override - protected IEventProxy createServerProxy(boolean isDedicated) - { - return new NeoforgeServerProxy(isDedicated); - } + protected IEventProxy createClientProxy() { return new NeoforgeClientProxy(); } @Override protected void initializeModCompat() @@ -90,9 +77,7 @@ public class NeoforgeMain extends AbstractModInitializer @Override protected void subscribeRegisterCommandsEvent(Consumer> eventHandler) { - NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> { - eventHandler.accept(e.getDispatcher()); - }); + NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent e) -> { eventHandler.accept(e.getDispatcher()); }); } @Override @@ -104,15 +89,10 @@ public class NeoforgeMain extends AbstractModInitializer @Override protected void subscribeServerStartingEvent(Consumer eventHandler) { - NeoForge.EVENT_BUS.addListener((ServerStartingEvent e) -> { - eventHandler.accept(e.getServer()); - }); + NeoForge.EVENT_BUS.addListener((ServerStartingEvent e) -> { eventHandler.accept(e.getServer()); }); } @Override - protected void runDelayedSetup() - { - NeoforgeDependencySetup.runDelayedSetup(); - } + protected void runDelayedSetup() { SingletonInjector.INSTANCE.runDelayedSetup(); } } diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeServerProxy.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeServerProxy.java index a4048e980..505d3dcd6 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeServerProxy.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeServerProxy.java @@ -1,6 +1,6 @@ package com.seibel.distanthorizons.neoforge; -import com.seibel.distanthorizons.common.IEventProxy; +import com.seibel.distanthorizons.common.AbstractModInitializer; import com.seibel.distanthorizons.common.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; @@ -25,7 +25,7 @@ import org.apache.logging.log4j.Logger; import java.util.function.Supplier; -public class NeoforgeServerProxy implements IEventProxy +public class NeoforgeServerProxy implements AbstractModInitializer.IEventProxy { private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); } diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/wrappers/NeoforgeDependencySetup.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/wrappers/NeoforgeDependencySetup.java deleted file mode 100644 index 0679bc769..000000000 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/wrappers/NeoforgeDependencySetup.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.neoforge.wrappers; - -import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; -import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; -import com.seibel.distanthorizons.neoforge.wrappers.modAccessor.ModChecker; - -/** - * Binds all necessary dependencies so we - * can access them in Core.
- * This needs to be called before any Core classes - * are loaded. - * - * @author James Seibel - * @author Ran - * @version 12-1-2021 - */ -public class NeoforgeDependencySetup -{ - public static void createInitialBindings() - { - SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); - } - - public static void runDelayedSetup() - { - SingletonInjector.INSTANCE.runDelayedSetup(); - } - -}