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 01/33] 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 02/33] 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 03/33] 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 04/33] 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 05/33] 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 06/33] 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 07/33] 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(); - } - -} From 50663edc7644c76488f9caa3923eb6e03c87bec4 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 16 Jan 2024 17:28:42 +1030 Subject: [PATCH 08/33] Fixed compilation for pre 1.19.4 --- .../wrappers/worldGeneration/mimicObject/ChunkLoader.java | 4 ++++ .../com/seibel/distanthorizons/fabric/FabricClientProxy.java | 1 + 2 files changed, 5 insertions(+) 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 97828775d..475f63af8 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 @@ -234,7 +234,11 @@ public class ChunkLoader ChunkPos actualPos = new ChunkPos(tagLevel.getInt("xPos"), tagLevel.getInt("zPos")); if (!Objects.equals(chunkPos, actualPos)) { + #if MC_VER > MC_1_16_5 if (actualPos.equals(ChunkPos.ZERO)) + #else + if (actualPos.equals(ChunkPos.INVALID_CHUNK_POS)) + #endif { if (!zeroChunkPosErrorLogged) { 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 7fcebe40d..2fd788b6a 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,6 +47,7 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; 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; From 666ab1319b9aca59b09e5ba008d7ecef7a630f7f Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 17 Jan 2024 17:24:52 +1030 Subject: [PATCH 09/33] Fixed 1.17.1 --- .../wrappers/worldGeneration/mimicObject/ChunkLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 475f63af8..16fbac5cd 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 @@ -234,7 +234,7 @@ public class ChunkLoader ChunkPos actualPos = new ChunkPos(tagLevel.getInt("xPos"), tagLevel.getInt("zPos")); if (!Objects.equals(chunkPos, actualPos)) { - #if MC_VER > MC_1_16_5 + #if MC_VER > MC_1_17_1 if (actualPos.equals(ChunkPos.ZERO)) #else if (actualPos.equals(ChunkPos.INVALID_CHUNK_POS)) From 5aca47b357151215d0327f02b3abb413d8b9630d Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 17 Jan 2024 07:15:47 -0600 Subject: [PATCH 10/33] Fix render data holes on world gen --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 163c0bf1f..e61f6bb80 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 163c0bf1fac5eb3f17406a6bcc0ed8ba5d5b041f +Subproject commit e61f6bb80204400de2d88bba442b1d3d7c205238 From d7618d73c3eed77fe820cfea08073f1f9c272904 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 17 Jan 2024 07:45:08 -0600 Subject: [PATCH 11/33] Fixes #613 (multiplayer failing due to folder not existing) --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index e61f6bb80..b0c2874e7 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit e61f6bb80204400de2d88bba442b1d3d7c205238 +Subproject commit b0c2874e71cbb294ca7ce524d51c35e278bc1c92 From aa73a30ac4c5a90b744f0bbbf16614abfb78c64a Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 17 Jan 2024 20:57:10 -0600 Subject: [PATCH 12/33] Fix C2ME throwing errors when attempting to get region file --- .../RegionFileStorageExternalCache.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/RegionFileStorageExternalCache.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/RegionFileStorageExternalCache.java index edbc1c89f..bcdd6f5ab 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/RegionFileStorageExternalCache.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/mimicObject/RegionFileStorageExternalCache.java @@ -21,6 +21,8 @@ public class RegionFileStorageExternalCache implements AutoCloseable { private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + /** Can be null due to the C2ME mod */ + @Nullable public final RegionFileStorage storage; public static final int MAX_CACHE_SIZE = 16; @@ -56,6 +58,19 @@ public class RegionFileStorageExternalCache implements AutoCloseable @Nullable public RegionFile getRegionFile(ChunkPos pos) throws IOException { + if (this.storage == null) + { + if (!regionCacheNullPointerWarningSent) + { + regionCacheNullPointerWarningSent = true; + LOGGER.warn("Unable to access Minecraft's chunk cache. This may be due to another mod changing said cache. DH will be unable to access any Minecraft chunk data until said mod is removed."); + } + + return null; + } + + + long posLong = ChunkPos.asLong(pos.getRegionX(), pos.getRegionZ()); RegionFile rFile = null; From 4135fa6211ae9d43c9c1dce3d984c21d206ba348 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 20 Jan 2024 12:24:10 -0600 Subject: [PATCH 13/33] Update coreSubProjects --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index b0c2874e7..1c90270eb 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit b0c2874e71cbb294ca7ce524d51c35e278bc1c92 +Subproject commit 1c90270eb61e65354af86ea07b5c2db6914196fe From 0d165860fb3734898f54223758326fa72cf92fc1 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jan 2024 19:24:42 -0600 Subject: [PATCH 14/33] Merge branch 'distant-horizons-main' --- .../wrappers/block/BlockStateWrapper.java | 118 +++++++++++++++++- coreSubProjects | 2 +- .../fabric/FabricClientProxy.java | 12 +- .../mixins/client/MixinLevelRenderer.java | 23 ++-- .../mixins/client/MixinLevelRenderer.java | 15 ++- 5 files changed, 144 insertions(+), 26 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index 23e635044..c39e8a69b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -24,7 +24,10 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrappe import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; import org.apache.logging.log4j.Logger; @@ -85,6 +88,8 @@ public class BlockStateWrapper implements IBlockStateWrapper * Should be between {@link IBlockStateWrapper#FULLY_OPAQUE} and {@link IBlockStateWrapper#FULLY_OPAQUE} */ private int opacity = -1; + /** used by the Iris shader mod to determine how each LOD should be rendered */ + private byte irisBlockMaterialId = 0; @@ -116,7 +121,8 @@ public class BlockStateWrapper implements IBlockStateWrapper { this.blockState = blockState; this.serialString = this.serialize(levelWrapper); - LOGGER.trace("Created BlockStateWrapper ["+this.serialString+"] for ["+blockState+"]"); + this.irisBlockMaterialId = this.calculateIrisBlockMaterialId(); + LOGGER.trace("Created BlockStateWrapper ["+this.serialString+"] for ["+blockState+"] with material ID ["+this.irisBlockMaterialId+"]"); } @@ -274,6 +280,9 @@ public class BlockStateWrapper implements IBlockStateWrapper #endif } + @Override + public byte getIrisBlockMaterialId() { return this.irisBlockMaterialId; } + @Override public String toString() { return this.getSerialString(); } @@ -457,4 +466,111 @@ public class BlockStateWrapper implements IBlockStateWrapper + //==============// + // Iris methods // + //==============// + + private byte calculateIrisBlockMaterialId() + { + if (this.blockState == null) + { + return 0; + } + + + String serialString = this.getSerialString(); + if (this.blockState.is(BlockTags.LEAVES)) + { + return 1; + } + else if (serialString.contains("water") && this.isLiquid()) + { + return 12; + } + else if (this.blockState.getSoundType() == SoundType.WOOD + #if MC_VER >= MC_1_19_2 + || this.blockState.getSoundType() == SoundType.CHERRY_WOOD + #endif + ) + { + return 3; + } + else if (this.blockState.getSoundType() == SoundType.METAL + #if MC_VER >= MC_1_19_2 + || this.blockState.getSoundType() == SoundType.COPPER + #endif + #if MC_VER >= MC_1_20_4 + || this.blockState.getSoundType() == SoundType.COPPER_BULB + || this.blockState.getSoundType() == SoundType.COPPER_GRATE + #endif + ) + { + return 4; + } + else if ( + #if MC_VER >= MC_1_18_2 + this.blockState.is(BlockTags.DIRT) + #else + state.is(Blocks.DIRT) + || state.is(Blocks.PODZOL) + || state.is(Blocks.COARSE_DIRT) + || state.is(Blocks.GRASS_BLOCK) + #endif + ) + { + return 5; + } + else if (this.blockState.is(Blocks.LAVA)) + { + return 6; + } + #if MC_VER >= MC_1_17_1 + else if (this.blockState.getSoundType() == SoundType.DEEPSLATE + || this.blockState.getSoundType() == SoundType.DEEPSLATE_BRICKS + || this.blockState.getSoundType() == SoundType.DEEPSLATE_TILES + || this.blockState.getSoundType() == SoundType.POLISHED_DEEPSLATE) + { + return 7; + } + #endif + else if (this.blockState.getSoundType() == SoundType.SNOW + #if MC_VER >= MC_1_17_1 + || this.blockState.getSoundType() == SoundType.POWDER_SNOW + #endif + ) + { + return 8; + } + else if (this.blockState.is(BlockTags.SAND)) + { + return 9; + } + else if ( + #if MC_VER >= MC_1_18_2 + this.blockState.is(BlockTags.TERRACOTTA) + #else + serialString.contains("terracotta") + #endif + ) + { + return 10; + } + else if (this.blockState.is(BlockTags.BASE_STONE_NETHER)) + { + return 11; + } + else if (serialString.contains("stone")) + { + return 2; + } + else if (this.blockState.getLightEmission() > 0) + { + return 15; + } + else + { + return 0; + } + } + } diff --git a/coreSubProjects b/coreSubProjects index 1c90270eb..0efa4c3de 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1c90270eb61e65354af86ea07b5c2db6914196fe +Subproject commit 0efa4c3de33b0d2650e0bb99f2e42add066adf6a 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 2fd788b6a..218f4cd5e 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,7 +47,6 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; 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; @@ -181,9 +180,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy // render event // //==============// - //Define this in the MixinLevelRenderer so that it works with sodium without any changes to the code - // TODO: If all else is fine, can we remove these commented code - // Client Render Level WorldRenderEvents.AFTER_SETUP.register((renderContext) -> { this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()), @@ -206,6 +202,14 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy #endif } }); + + WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) -> + { + this.clientApi.renderDeferredLods(ClientLevelWrapper.getWrapper(renderContext.world()), + McObjectConverter.Convert(renderContext.matrixStack().last().pose()), + McObjectConverter.Convert(renderContext.projectionMatrix()), + renderContext.tickDelta()); + }); // Debug keyboard event // FIXME: Use better hooks so it doesn't trigger key press events in text boxes diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index f6223c099..558696d27 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -35,40 +35,29 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; -import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; -import net.minecraft.world.level.lighting.LevelLightEngine; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.nio.FloatBuffer; - #if MC_VER < MC_1_17_1 import org.lwjgl.opengl.GL15; #endif /** - * This class is used to mix in my rendering code + * This class is used to mix in DH's rendering code * before Minecraft starts rendering blocks. * If this wasn't done, and we used Forge's * render last event, the LODs would render on top * of the normal terrain.

* * This is also the mixin for rendering the clouds - * - * @author coolGi - * @author James Seibel - * @version 12-31-2021 */ @Mixin(LevelRenderer.class) public class MixinLevelRenderer @@ -92,13 +81,15 @@ public class MixinLevelRenderer public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTicks, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) #endif { + // FIXME this is only called when clouds are enabled and vanilla render distance is far enough + // not having the parital ticks doesn't appear to be critical currently, but might cause weird issues down the line + // get the partial ticks since renderBlockLayer doesn't // have access to them previousPartialTicks = partialTicks; } - // TODO: Can we move this to forge's client proxy similarly to how fabric does it #if MC_VER < MC_1_17_1 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V", @@ -142,7 +133,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -157,6 +148,10 @@ public class MixinLevelRenderer projectionMatrix.set(matrixFloatArray); #endif } + } + else if (renderType.equals(RenderType.translucent())) + { + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index 6c54ed6db..ad7ca6cbc 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -51,17 +51,13 @@ import org.lwjgl.opengl.GL15; /** - * This class is used to mix in my rendering code + * This class is used to mix in DH's rendering code * before Minecraft starts rendering blocks. * If this wasn't done, and we used Forge's * render last event, the LODs would render on top * of the normal terrain.

* * This is also the mixin for rendering the clouds - * - * @author coolGi - * @author James Seibel - * @version 12-31-2021 */ @Mixin(LevelRenderer.class) public class MixinLevelRenderer @@ -88,6 +84,9 @@ public class MixinLevelRenderer public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTicks, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) #endif { + // FIXME this is only called when clouds are enabled and vanilla render distance is far enough + // not having the partial ticks doesn't appear to be critical currently, but might cause weird issues down the line + // get the partial ticks since renderBlockLayer doesn't // have access to them previousPartialTicks = partialTicks; @@ -138,7 +137,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderOpaqueLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -153,6 +152,10 @@ public class MixinLevelRenderer projectionMatrix.set(matrixFloatArray); #endif } + } + else if (renderType.equals(RenderType.translucent())) + { + ClientApi.INSTANCE.renderTranslucentLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From 9390b8bc4d779b5bf956a4b1b0a85372790521ea Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jan 2024 21:36:12 -0600 Subject: [PATCH 15/33] Fix several Block materials --- .../wrappers/block/BlockStateWrapper.java | 75 +++++++++---------- coreSubProjects | 2 +- 2 files changed, 35 insertions(+), 42 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index c39e8a69b..79d3a9139 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -474,26 +474,31 @@ public class BlockStateWrapper implements IBlockStateWrapper { if (this.blockState == null) { - return 0; + return IrisBlockMaterial.AIR; } - String serialString = this.getSerialString(); - if (this.blockState.is(BlockTags.LEAVES)) + String serialString = this.getSerialString().toLowerCase(); + + if (this.blockState.is(BlockTags.LEAVES) + || serialString.contains("bamboo") + || serialString.contains("cactus") + ) { - return 1; + return IrisBlockMaterial.LEAVES; } - else if (serialString.contains("water") && this.isLiquid()) + else if (this.isLiquid() || this.blockState.is(Blocks.WATER)) { - return 12; + return IrisBlockMaterial.WATER; } else if (this.blockState.getSoundType() == SoundType.WOOD + || serialString.contains("root") #if MC_VER >= MC_1_19_2 || this.blockState.getSoundType() == SoundType.CHERRY_WOOD #endif ) { - return 3; + return IrisBlockMaterial.WOOD; } else if (this.blockState.getSoundType() == SoundType.METAL #if MC_VER >= MC_1_19_2 @@ -505,71 +510,59 @@ public class BlockStateWrapper implements IBlockStateWrapper #endif ) { - return 4; + return IrisBlockMaterial.METAL; } else if ( - #if MC_VER >= MC_1_18_2 - this.blockState.is(BlockTags.DIRT) - #else - state.is(Blocks.DIRT) - || state.is(Blocks.PODZOL) - || state.is(Blocks.COARSE_DIRT) - || state.is(Blocks.GRASS_BLOCK) - #endif + serialString.contains("dirt") + || serialString.contains("grass_block") + || serialString.contains("gravel") + || serialString.contains("mud") ) { - return 5; + return IrisBlockMaterial.DIRT; } else if (this.blockState.is(Blocks.LAVA)) { - return 6; + return IrisBlockMaterial.LAVA; } #if MC_VER >= MC_1_17_1 else if (this.blockState.getSoundType() == SoundType.DEEPSLATE || this.blockState.getSoundType() == SoundType.DEEPSLATE_BRICKS || this.blockState.getSoundType() == SoundType.DEEPSLATE_TILES - || this.blockState.getSoundType() == SoundType.POLISHED_DEEPSLATE) + || this.blockState.getSoundType() == SoundType.POLISHED_DEEPSLATE + || serialString.contains("deepslate") ) { - return 7; + return IrisBlockMaterial.DEEPSLATE; } #endif - else if (this.blockState.getSoundType() == SoundType.SNOW - #if MC_VER >= MC_1_17_1 - || this.blockState.getSoundType() == SoundType.POWDER_SNOW - #endif - ) + else if (this.serialString.contains("snow")) { - return 8; + return IrisBlockMaterial.SNOW; } - else if (this.blockState.is(BlockTags.SAND)) + else if (serialString.contains("sand")) { - return 9; + return IrisBlockMaterial.SAND; } - else if ( - #if MC_VER >= MC_1_18_2 - this.blockState.is(BlockTags.TERRACOTTA) - #else - serialString.contains("terracotta") - #endif - ) + else if (serialString.contains("terracotta")) { - return 10; + return IrisBlockMaterial.TERRACOTTA; } else if (this.blockState.is(BlockTags.BASE_STONE_NETHER)) { - return 11; + return IrisBlockMaterial.NETHER_STONE; } - else if (serialString.contains("stone")) + else if (serialString.contains("stone") + || serialString.contains("ore")) { - return 2; + return IrisBlockMaterial.STONE; } else if (this.blockState.getLightEmission() > 0) { - return 15; + return IrisBlockMaterial.ILLUMINATED; } else { - return 0; + return IrisBlockMaterial.UNKOWN; } } diff --git a/coreSubProjects b/coreSubProjects index 0efa4c3de..9c8d77a4f 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 0efa4c3de33b0d2650e0bb99f2e42add066adf6a +Subproject commit 9c8d77a4f3a979bfa537c6fb633764509a09e0cc From 8d32ab9bdbcb9ef3b8251ac3073a778d7c25a7cc Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jan 2024 21:48:06 -0600 Subject: [PATCH 16/33] Fix method names in neoForge mixinLevelRenderer --- coreSubProjects | 2 +- .../neoforge/mixins/client/MixinLevelRenderer.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/coreSubProjects b/coreSubProjects index 9c8d77a4f..d7eb8d941 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 9c8d77a4f3a979bfa537c6fb633764509a09e0cc +Subproject commit d7eb8d9416a0d2fe4f7a332ea708e28ffc5fd299 diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index ad7ca6cbc..a6940f748 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -93,7 +93,6 @@ public class MixinLevelRenderer } - // TODO: Can we move this to forge's client proxy similarly to how fabric does it #if MC_VER < MC_1_17_1 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V", @@ -137,7 +136,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderOpaqueLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -155,7 +154,7 @@ public class MixinLevelRenderer } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderTranslucentLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From 038073d34d92c56c4428ce19ab859e2442c23071 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 08:37:27 -0800 Subject: [PATCH 17/33] Minor fixes for translucency and block ID's --- .../common/wrappers/block/BlockStateWrapper.java | 3 +++ .../distanthorizons/fabric/FabricClientProxy.java | 8 -------- .../fabric/mixins/client/MixinLevelRenderer.java | 11 +++++++++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index 79d3a9139..b7ff6ebcd 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -483,6 +483,7 @@ public class BlockStateWrapper implements IBlockStateWrapper if (this.blockState.is(BlockTags.LEAVES) || serialString.contains("bamboo") || serialString.contains("cactus") + || serialString.contains("chorus_flower") ) { return IrisBlockMaterial.LEAVES; @@ -517,6 +518,8 @@ public class BlockStateWrapper implements IBlockStateWrapper || serialString.contains("grass_block") || serialString.contains("gravel") || serialString.contains("mud") + || serialString.contains("podzol") + || serialString.contains("mycelium") ) { return IrisBlockMaterial.DIRT; 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 218f4cd5e..6c35bcf5d 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -202,14 +202,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy #endif } }); - - WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) -> - { - this.clientApi.renderDeferredLods(ClientLevelWrapper.getWrapper(renderContext.world()), - McObjectConverter.Convert(renderContext.matrixStack().last().pose()), - McObjectConverter.Convert(renderContext.projectionMatrix()), - renderContext.tickDelta()); - }); // Debug keyboard event // FIXME: Use better hooks so it doesn't trigger key press events in text boxes diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 4d2f041a2..786453348 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -23,7 +23,11 @@ import com.mojang.blaze3d.vertex.PoseStack; #if MC_VER < MC_1_19_4 import com.mojang.math.Matrix4f; #else +import com.seibel.distanthorizons.common.wrappers.McObjectConverter; +import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; +import com.seibel.distanthorizons.core.api.internal.ClientApi; import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; @@ -106,6 +110,13 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif { + if (renderType.equals(RenderType.translucent())) { + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), + McObjectConverter.Convert(modelViewMatrixStack.last().pose()), + McObjectConverter.Convert(projectionMatrix), + previousPartialTicks); + } + // FIXME completely disables rendering when sodium is installed if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { From 9b4276c29b74b7ca0ae16f70c2c0fa3c45685fab Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 08:49:00 -0800 Subject: [PATCH 18/33] Add mushroom --- .../distanthorizons/common/wrappers/block/BlockStateWrapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index b7ff6ebcd..a8289775f 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -484,6 +484,7 @@ public class BlockStateWrapper implements IBlockStateWrapper || serialString.contains("bamboo") || serialString.contains("cactus") || serialString.contains("chorus_flower") + || serialString.contains("mushroom") ) { return IrisBlockMaterial.LEAVES; From 200ad05f4cb170ba03d33a4091bd5e9e7f24e0ef Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 17:52:51 -0800 Subject: [PATCH 19/33] Fix suspicious frame time code --- .../mixins/client/MixinLevelRenderer.java | 23 +------------------ .../mixins/client/MixinLevelRenderer.java | 5 ++-- .../mixins/client/MixinLevelRenderer.java | 5 ++-- 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 786453348..517ddbe44 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -66,27 +66,6 @@ public class MixinLevelRenderer { @Shadow private ClientLevel level; - @Unique - private static float previousPartialTicks = 0; - - // Inject rendering at first call to renderChunkLayer - // HEAD or RETURN - #if MC_VER < MC_1_17_1 - @Inject(at = @At("RETURN"), method = "renderSky(Lcom/mojang/blaze3d/vertex/PoseStack;F)V") - private void renderSky(PoseStack matrixStackIn, float partialTicks, CallbackInfo callback) - { - // get the partial ticks since renderBlockLayer doesn't - // have access to them - previousPartialTicks = partialTicks; - } - #else - @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) - public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float tickDelta, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) { - // get the partial ticks since renderChunkLayer doesn't - // have access to them - previousPartialTicks = tickDelta; - } - #endif #if MC_VER < MC_1_17_1 @Inject(at = @At("HEAD"), @@ -114,7 +93,7 @@ public class MixinLevelRenderer ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), McObjectConverter.Convert(modelViewMatrixStack.last().pose()), McObjectConverter.Convert(projectionMatrix), - previousPartialTicks); + Minecraft.getInstance().getFrameTime()); } // FIXME completely disables rendering when sodium is installed diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index 558696d27..ce1ab1ea5 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -24,6 +24,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; #else import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; @@ -133,7 +134,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -151,7 +152,7 @@ public class MixinLevelRenderer } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index a6940f748..ad0dc6d61 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -24,6 +24,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; #else import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; @@ -136,7 +137,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -154,7 +155,7 @@ public class MixinLevelRenderer } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From e809429a8c1f0df6703d9e2f2ac27c8d6d90b9ec Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 17:59:59 -0800 Subject: [PATCH 20/33] Fix 1.16 support --- .../mixins/client/MixinLevelRenderer.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 517ddbe44..75bb8c02b 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -23,16 +23,17 @@ import com.mojang.blaze3d.vertex.PoseStack; #if MC_VER < MC_1_19_4 import com.mojang.math.Matrix4f; #else +import org.joml.Matrix4f; +#endif +import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; +import com.seibel.distanthorizons.coreapi.util.math.Mat4f; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; -import org.joml.Matrix4f; -#endif -import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.core.config.Config; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; @@ -41,6 +42,7 @@ import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.level.lighting.LevelLightEngine; +import org.lwjgl.opengl.GL15; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -89,10 +91,25 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif { + #if MC_VER == MC_1_16_5 + // get the matrices from the OpenGL fixed pipeline + float[] mcProjMatrixRaw = new float[16]; + GL15.glGetFloatv(GL15.GL_PROJECTION_MATRIX, mcProjMatrixRaw); + Mat4f mcProjectionMatrix = new Mat4f(mcProjMatrixRaw); + mcProjectionMatrix.transpose(); + + Mat4f mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose()); + + #else + // get the matrices directly from MC + Mat4f mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose()); + Mat4f mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix); + #endif + if (renderType.equals(RenderType.translucent())) { ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), - McObjectConverter.Convert(modelViewMatrixStack.last().pose()), - McObjectConverter.Convert(projectionMatrix), + mcModelViewMatrix, + mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); } From 297c8a1a1e89be1b4c4b0b6a77410de2c0a9ae49 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Tue, 23 Jan 2024 07:47:43 -0800 Subject: [PATCH 21/33] Actually fix 1.16 --- .../forge/mixins/client/MixinLevelRenderer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index ce1ab1ea5..22c938e6c 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -36,8 +36,12 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; From d868b8fc72ebda4d4b100d1ee84d0af22cc532fb Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 27 Jan 2024 13:32:35 -0600 Subject: [PATCH 22/33] Fix missing imports --- .../com/seibel/distanthorizons/fabric/FabricClientProxy.java | 1 + .../forge/mixins/client/MixinLevelRenderer.java | 5 +++++ 2 files changed, 6 insertions(+) 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 218f4cd5e..62d7d4135 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,6 +47,7 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; 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; diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index 558696d27..32a1fe843 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -35,8 +35,11 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; +import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -45,6 +48,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.nio.FloatBuffer; + #if MC_VER < MC_1_17_1 import org.lwjgl.opengl.GL15; #endif From a887e35285df371fb24c3532a877ff15e4f2be03 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 31 Jan 2024 21:49:59 -0600 Subject: [PATCH 23/33] Add Iris API events --- .../common/wrappers/minecraft/MinecraftRenderWrapper.java | 6 ------ coreSubProjects | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 6a8ae1318..30eb60581 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -261,12 +261,6 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper @Override public int getTargetFrameBuffer() { - int frameBufferOverrideId = DhApiRenderProxy.INSTANCE.targetFrameBufferOverride; - if (frameBufferOverrideId != -1) - { - return frameBufferOverrideId; - } - // used so we can access the framebuffer shaders end up rendering to if (AbstractOptifineAccessor.optifinePresent()) { diff --git a/coreSubProjects b/coreSubProjects index d7eb8d941..15ee6a951 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit d7eb8d9416a0d2fe4f7a332ea708e28ffc5fd299 +Subproject commit 15ee6a9512ba5850b606fcd46651cfa2144b9999 From 982bf951e1087833fe4fd15a71f1df1bc956bf50 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 1 Feb 2024 07:39:16 -0600 Subject: [PATCH 24/33] Fix 1.19.2 compiling --- .../common/wrappers/block/BlockStateWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index a8289775f..3e3fbd24e 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -495,7 +495,7 @@ public class BlockStateWrapper implements IBlockStateWrapper } else if (this.blockState.getSoundType() == SoundType.WOOD || serialString.contains("root") - #if MC_VER >= MC_1_19_2 + #if MC_VER >= MC_1_19_4 || this.blockState.getSoundType() == SoundType.CHERRY_WOOD #endif ) From 32c1cc29f87dc3cc20c487375b99d27189b74bca Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 5 Feb 2024 19:21:52 -0600 Subject: [PATCH 25/33] Fix Render Buffer count F3 menu not closing --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 15ee6a951..30055805d 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 15ee6a9512ba5850b606fcd46651cfa2144b9999 +Subproject commit 30055805d8fc90687f71aab20ab86f8cbcbc6ba3 From b878faac96ed9e48cc4e93019952a5569613ab26 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 5 Feb 2024 20:31:05 -0600 Subject: [PATCH 26/33] Improve StepFeatures logging --- .../worldGeneration/step/StepFeatures.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java index 65092f701..dcd46c044 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java @@ -19,24 +19,24 @@ package com.seibel.distanthorizons.common.wrappers.worldGeneration.step; -import java.util.ArrayList; - import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; import com.seibel.distanthorizons.common.wrappers.worldGeneration.ThreadedParameters; import com.seibel.distanthorizons.common.wrappers.worldGeneration.mimicObject.DhLitWorldGenRegion; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.util.gridList.ArrayGridList; -import net.minecraft.ReportedException; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.ProtoChunk; import net.minecraft.world.level.levelgen.Heightmap; -#if MC_VER >= MC_1_18_2 -#endif +import org.apache.logging.log4j.Logger; + public final class StepFeatures { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + public static final ChunkStatus STATUS = ChunkStatus.FEATURES; private final BatchGenerationEnvironment environment; @@ -51,36 +51,44 @@ public final class StepFeatures ThreadedParameters tParams, DhLitWorldGenRegion worldGenRegion, ArrayGridList chunkWrappers) { - ArrayList chunksToDo = new ArrayList(); - for (ChunkWrapper chunkWrapper : chunkWrappers) { ChunkAccess chunk = chunkWrapper.getChunk(); - if (chunk.getStatus().isOrAfter(STATUS)) continue; - ((ProtoChunk) chunk).setStatus(STATUS); - chunksToDo.add(chunk); - } - - for (ChunkAccess chunk : chunksToDo) - { + if (chunk.getStatus().isOrAfter(STATUS)) + { + continue; + } + + if (chunk instanceof ProtoChunk) + { + ((ProtoChunk) chunk).setStatus(STATUS); + } + + try { #if MC_VER < MC_1_18_2 worldGenRegion.setOverrideCenter(chunk.getPos()); environment.params.generator.applyBiomeDecoration(worldGenRegion, tParams.structFeat); #else - environment.params.generator.applyBiomeDecoration(worldGenRegion, chunk, - tParams.structFeat.forWorldGenRegion(worldGenRegion)); + if (worldGenRegion.hasChunk(chunkWrapper.getChunkPos().x, chunkWrapper.getChunkPos().z)) + { + this.environment.params.generator.applyBiomeDecoration(worldGenRegion, chunk, tParams.structFeat.forWorldGenRegion(worldGenRegion)); + } + else + { + LOGGER.warn("Unable to generate features for chunk at pos ["+chunkWrapper.getChunkPos()+"], world gen region doesn't contain the chunk."); + } #endif Heightmap.primeHeightmaps(chunk, STATUS.heightmapsAfter()); BatchGenerationEnvironment.clearDistantGenerationMixinData(); } - catch (ReportedException e) + catch (Exception e) { - e.printStackTrace(); + LOGGER.warn("Unexpected issue when generating features for chunk at pos ["+chunkWrapper.getChunkPos()+"], error: ["+e.getMessage()+"].", e); // FIXME: Features concurrent modification issue. Something about cocobeans might just - // error out. For now just retry. + // error out. For now just retry. } } } From 42bcc28d3e02d5512204339c93335bb2b0ad7049 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 5 Feb 2024 21:38:46 -0600 Subject: [PATCH 27/33] Merge branch 'minecraft-lod-mod-frustum.culling' --- .../common/wrappers/McObjectConverter.java | 6 ++++- .../minecraft/MinecraftRenderWrapper.java | 25 ++++++++++++++++--- coreSubProjects | 2 +- .../fabric/FabricClientProxy.java | 2 ++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java index b37282f4d..f9422eba4 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java @@ -77,7 +77,11 @@ public class McObjectConverter #endif } - /** 4x4 float matrix converter */ + /** + * 4x4 float matrix converter + * TODO this should be moved into Mat4f's constructor + */ + @Deprecated public static Mat4f Convert(Matrix4f mcMatrix) { FloatBuffer buffer = FloatBuffer.allocate(16); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 30eb60581..9c4a13f74 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -21,6 +21,7 @@ package com.seibel.distanthorizons.common.wrappers.minecraft; import java.awt.Color; import java.lang.invoke.MethodHandles; +import java.nio.FloatBuffer; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -40,8 +41,9 @@ import com.seibel.distanthorizons.core.render.DhApiRenderProxy; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper; #if MC_VER < MC_1_19_4 -import com.mojang.math.Vector3f; +import org.joml.Vector3f; #else +import org.joml.Matrix4f; import org.joml.Vector3f; #endif #if MC_VER >= MC_1_20_2 @@ -78,6 +80,7 @@ import net.minecraft.world.level.material.FogType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.apache.logging.log4j.Logger; +import org.joml.Matrix4f; /** @@ -116,8 +119,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper public Vec3f getLookAtVector() { Camera camera = MC.gameRenderer.getMainCamera(); - Vector3f cameraDir = camera.getLookVector(); - return new Vec3f(cameraDir.x(), cameraDir.y(), cameraDir.z()); + return new Vec3f(camera.getLookVector().x(), camera.getLookVector().y(), camera.getLookVector().z()); } @Override @@ -148,6 +150,23 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper return new Vec3d(projectedView.x, projectedView.y, projectedView.z); } + @Override + public Mat4f getWorldViewMatrix() + { + Camera camera = MC.gameRenderer.getMainCamera(); + Vector3f cameraVec3 = new Vector3f( + (float)camera.getPosition().x, + (float)camera.getPosition().y, + (float)camera.getPosition().z); + cameraVec3 = cameraVec3.negate(); + + Matrix4f matWorldView = new Matrix4f() + .rotateX((float)Math.toRadians(camera.getXRot())) + .rotateY((float)Math.toRadians(camera.getYRot() + 180f)) + .translate(cameraVec3); + return McObjectConverter.Convert(matWorldView); + } + @Override public Mat4f getDefaultProjectionMatrix(float partialTicks) { diff --git a/coreSubProjects b/coreSubProjects index 30055805d..06b43d662 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 30055805d8fc90687f71aab20ab86f8cbcbc6ba3 +Subproject commit 06b43d6627914062be3af752e04a4e8e1099bb8c 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 a632c4b3f..931113d95 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,7 +47,9 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; +#if MC_VER < MC_1_19_4 import java.nio.FloatBuffer; +#endif import java.util.HashSet; import net.minecraft.client.multiplayer.ClientLevel; From 41f8c8cfa45adcf70588be2a7ee84638ab4c5b6c Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 07:17:43 -0600 Subject: [PATCH 28/33] Fix compiling on MC 1.19.2 and below --- .../common/wrappers/McObjectConverter.java | 45 +++++++++---------- .../minecraft/MinecraftRenderWrapper.java | 2 +- coreSubProjects | 2 +- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java index f9422eba4..ebcab8af8 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java @@ -23,12 +23,6 @@ import java.nio.FloatBuffer; import java.util.function.BiConsumer; import java.util.function.Consumer; -#if MC_VER < MC_1_19_4 -import com.mojang.math.Matrix4f; -#else -import org.joml.Matrix4f; -#endif - import com.seibel.distanthorizons.core.enums.EDhDirection; import com.seibel.distanthorizons.core.pos.DhBlockPos; import com.seibel.distanthorizons.core.pos.DhChunkPos; @@ -51,8 +45,29 @@ public class McObjectConverter { return y * 4 + x; } + + + /** 4x4 float matrix converter */ + @Deprecated + public static Mat4f Convert( + #if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f + #else org.joml.Matrix4f #endif + mcMatrix) + { + FloatBuffer buffer = FloatBuffer.allocate(16); + storeMatrix(mcMatrix, buffer); + Mat4f matrix = new Mat4f(buffer); + #if MC_VER < MC_1_19_4 + matrix.transpose(); // In 1.19.3 and later, we no longer need to transpose it + #endif + return matrix; + } /** Taken from Minecraft's com.mojang.math.Matrix4f class from 1.18.2 */ - private static void storeMatrix(Matrix4f matrix, FloatBuffer buffer) + private static void storeMatrix( + #if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f + #else org.joml.Matrix4f #endif + matrix, + FloatBuffer buffer) { #if MC_VER < MC_1_19_4 matrix.store(buffer); @@ -77,22 +92,6 @@ public class McObjectConverter #endif } - /** - * 4x4 float matrix converter - * TODO this should be moved into Mat4f's constructor - */ - @Deprecated - public static Mat4f Convert(Matrix4f mcMatrix) - { - FloatBuffer buffer = FloatBuffer.allocate(16); - storeMatrix(mcMatrix, buffer); - Mat4f matrix = new Mat4f(buffer); - #if MC_VER < MC_1_19_4 - matrix.transpose(); // In 1.19.3 and later, we no longer need to transpose it - #endif - return matrix; - } - static final Direction[] directions; static final EDhDirection[] lodDirections; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 9c4a13f74..b1a2a0604 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -164,7 +164,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper .rotateX((float)Math.toRadians(camera.getXRot())) .rotateY((float)Math.toRadians(camera.getYRot() + 180f)) .translate(cameraVec3); - return McObjectConverter.Convert(matWorldView); + return new Mat4f(matWorldView); } @Override diff --git a/coreSubProjects b/coreSubProjects index 06b43d662..bc1a4ec13 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 06b43d6627914062be3af752e04a4e8e1099bb8c +Subproject commit bc1a4ec1389aebab233961cfe8e2be8879e15ee8 From 4764f0969abc33a066045bb5f4210febd4342271 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 17:49:08 -0600 Subject: [PATCH 29/33] Fix assertion errors in the end --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index bc1a4ec13..f6e2f2f52 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit bc1a4ec1389aebab233961cfe8e2be8879e15ee8 +Subproject commit f6e2f2f52ac4ffa5dabc280db97202fb566d0406 From 733fb8e8714a1554a458ef7a096fe3e661ac7d62 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 19:23:56 -0600 Subject: [PATCH 30/33] Merge branch 'minecraft-lod-mod-shadow.frustum.culling' --- coreSubProjects | 2 +- .../java/com/seibel/distanthorizons/fabric/FabricMain.java | 4 ++-- .../fabric/wrappers/modAccessor/IrisAccessor.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/coreSubProjects b/coreSubProjects index f6e2f2f52..9392decd3 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit f6e2f2f52ac4ffa5dabc280db97202fb566d0406 +Subproject commit 9392decd3502c2d1e00cc0085e3156f82b9dfcf5 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 2de23a193..73ef942b3 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java @@ -87,8 +87,8 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti 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 MC_VER >= MC_1_19_4 + // 1.19.4 is the lowest version Iris supports DH this.tryCreateModCompatAccessor("iris", IIrisAccessor.class, IrisAccessor::new); #endif } diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java index 53edafd5e..cc0a7216a 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java @@ -19,7 +19,7 @@ package com.seibel.distanthorizons.fabric.wrappers.modAccessor; -#if MC_VER != MC_1_17_1 && MC_VER <= MC_1_20_1 +#if MC_VER >= MC_1_19_4 import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IIrisAccessor; import net.coderbot.iris.Iris; From dd341c9a22e939f98086a3adb78a377e8d7a1ff6 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 21:45:12 -0600 Subject: [PATCH 31/33] Add frustum culling config control to the API --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 9392decd3..223326afe 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 9392decd3502c2d1e00cc0085e3156f82b9dfcf5 +Subproject commit 223326afe2ace97164d5984459ea9e0a2e9e42f5 From 08c31e5999dbde96033c72d5dda32eedb6fd9ca5 Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 7 Feb 2024 23:23:07 +1030 Subject: [PATCH 32/33] Fixed mod auto-updating on quilt --- coreSubProjects | 2 +- .../fabric/wrappers/modAccessor/ModChecker.java | 8 ++++++++ .../forge/wrappers/modAccessor/ModChecker.java | 8 ++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 223326afe..556550fea 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 223326afe2ace97164d5984459ea9e0a2e9e42f5 +Subproject commit 556550fea802c5e7ad526204a40916ba9b698ad0 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java index 1e4d15622..dcd7d7fd7 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java @@ -22,6 +22,8 @@ package com.seibel.distanthorizons.fabric.wrappers.modAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import net.fabricmc.loader.api.FabricLoader; +import java.io.File; + public class ModChecker implements IModChecker { public static final ModChecker INSTANCE = new ModChecker(); @@ -32,4 +34,10 @@ public class ModChecker implements IModChecker return FabricLoader.getInstance().isModLoaded(modid); } + @Override + public File modLocation(String modid) + { + return new File(FabricLoader.getInstance().getModContainer(modid).get().getOrigin().getPaths().get(0).toUri()); + } + } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java b/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java index 4475c6900..1125b4240 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java @@ -22,6 +22,8 @@ package com.seibel.distanthorizons.forge.wrappers.modAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import net.minecraftforge.fml.ModList; +import java.io.File; + public class ModChecker implements IModChecker { public static final ModChecker INSTANCE = new ModChecker(); @@ -32,4 +34,10 @@ public class ModChecker implements IModChecker return ModList.get().isLoaded(modid); } + @Override + public File modLocation(String modid) + { + return ModList.get().getModFileById(modid).getFile().getFilePath().toFile(); + } + } From f17bc1eccd65f803b41b352351645e87a1ce68d0 Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 7 Feb 2024 23:32:33 +1030 Subject: [PATCH 33/33] Fixed JOML not being shadowed (not being included in the jar) --- build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f6a938675..d995fbf11 100644 --- a/build.gradle +++ b/build.gradle @@ -200,7 +200,7 @@ subprojects { p -> implementation("org.apache.logging.log4j:log4j-core:${rootProject.log4j_version}") // JOML - implementation("org.joml:joml:${rootProject.joml_version}") + forgeShadowMe("org.joml:joml:${rootProject.joml_version}") // JUnit tests implementation("org.junit.jupiter:junit-jupiter:5.8.2") @@ -298,6 +298,9 @@ subprojects { p -> // Sqlite Database //At the moment, there is a bug in this library which doesnt allow it to be relocated // relocate "org.sqlite", "${librariesLocation}.sqlite" + + // JOML + relocate "org.joml", "${librariesLocation}.joml" // NightConfig (includes Toml & Json) relocate "com.electronwill.nightconfig", "${librariesLocation}.electronwill.nightconfig"