Compare commits

...

20 Commits

Author SHA1 Message Date
James Seibel 3faf25636d remove dev from version number 2025-03-25 07:16:56 -05:00
James Seibel ab3bfbefb4 remove version from clean in buildall.bat 2025-03-25 07:16:07 -05:00
James Seibel 890e802de4 add execution policy for python script 2025-03-25 07:15:52 -05:00
James Seibel c13bc0cd6e Fix forge 1.18.2 dedicated server crash on startup 2025-03-20 07:08:21 -05:00
James Seibel 7143b7de08 Add config to only log GL errors once 2025-03-19 22:02:57 -05:00
James Seibel d136d782f5 Attempt to fix Linux complaining about glIsFramebuffer() 2025-03-19 18:34:06 -05:00
James Seibel 29a160316c Potentially fix LAN connections on neo/forge 2025-03-19 17:34:03 -05:00
James Seibel 1f6f64d322 Potentially fix GL errors when accessing the default FBO on Linux 2025-03-19 17:00:36 -05:00
James Seibel 37c0af529d Fix restoring textures to the default FBO 2025-03-18 20:18:30 -05:00
James Seibel 1341ea3f3d Attempt to fix GL errors on Linux during buffer cleanup
Attempt to fix #950
2025-03-18 19:51:22 -05:00
James Seibel c0bb120669 Add stack tracing to GL error logging 2025-03-18 18:10:25 -05:00
James Seibel f8887e403f fix passing in the wrong flags to glBufferStorage()
Might Resolve #964 and #950
2025-03-18 07:43:23 -05:00
James Seibel 949ee423c8 Fix changing graphics settings on world load via API 2025-03-16 14:30:04 -05:00
James Seibel b19ed3f30c Fix GL error logging 2025-03-14 10:18:03 -05:00
James Seibel 2d085e1074 Add additional error checking/handling to Shader compiling 2025-03-13 21:12:34 -05:00
James Seibel 6ba0490cf7 Closes !950 (Texture name does not refer to a texture object) 2025-03-13 18:09:43 -05:00
James Seibel b6a0878241 up version number 2.3.0-b -> 2.3.1-b-dev
Also fix compiling for release builds
2025-03-08 08:11:14 -06:00
James Seibel 50f5371084 Merge branch 'main' of gitlab.com:distant-horizons-team/distant-horizons 2025-03-06 07:43:29 -06:00
James Seibel df74b8d243 Update coreSubProjects 2025-03-06 07:43:22 -06:00
s809 a36cd0763b Add some debugging info for DTOs 2025-03-02 20:09:11 +05:00
10 changed files with 92 additions and 21 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ for %%f in (versionProperties\*) do (
@rem Clean out the folders, build it, and merge it @rem Clean out the folders, build it, and merge it
echo ==================== Cleaning workspace to build !version! ==================== echo ==================== Cleaning workspace to build !version! ====================
call .\gradlew.bat clean -PmcVer="!version!" call .\gradlew.bat clean
echo ==================== Building !version! ==================== echo ==================== Building !version! ====================
call .\gradlew.bat build -PmcVer="!version!" call .\gradlew.bat build -PmcVer="!version!"
echo ==================== Merging !version! ==================== echo ==================== Merging !version! ====================
+1 -1
View File
@@ -31,7 +31,7 @@ class NativeRelocator
String os = System.getProperty("os.name").toLowerCase(); String os = System.getProperty("os.name").toLowerCase();
if (os.contains("win")) if (os.contains("win"))
{ {
processBuilder.command("powershell", "./prepare.ps1"); processBuilder.command("powershell", "-ExecutionPolicy", "Bypass", "./prepare.ps1");
} }
else if (os.contains("nix") || os.contains("nux") || os.contains("mac")) else if (os.contains("nix") || os.contains("nux") || os.contains("mac"))
{ {
@@ -20,8 +20,6 @@
package com.seibel.distanthorizons.common.wrappers; package com.seibel.distanthorizons.common.wrappers;
import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants; import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants;
import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft;
/** /**
* @author James Seibel * @author James Seibel
@@ -41,11 +39,43 @@ public class VersionConstants implements IVersionConstants
@Override @Override
public String getMinecraftVersion() public String getMinecraftVersion()
{ {
#if MC_VER < MC_1_19_2 // these values are hard-coded to prevent an issue with Forge (specifically 1.18.2) where
return Minecraft.getInstance().getGame().getVersion().getId(); // it can't load client classes when running as a dedicated server,
// which was how we were dynamically accessing the MC version string
#if MC_VER == MC_1_16_5
return "1.16.5";
#elif MC_VER == MC_1_17_1
return "1.17.1";
#elif MC_VER == MC_1_18_2
return "1.18.2";
#elif MC_VER == MC_1_19_2
return "1.19.2";
#elif MC_VER == MC_1_19_4
return "1.19.4";
#elif MC_VER == MC_1_20_1
return "1.20.1";
#elif MC_VER == MC_1_20_2
return "1.20.2";
#elif MC_VER == MC_1_20_4
return "1.20.4";
#elif MC_VER == MC_1_20_6
return "1.20.6";
#elif MC_VER == MC_1_21_1
return "1.21.1";
#elif MC_VER == MC_1_21_3
return "1.21.3";
#elif MC_VER == MC_1_21_4
return "1.21_4";
#else #else
return SharedConstants.getCurrentVersion().getId(); ERROR MC version constant missing
#endif #endif
} }
} }
@@ -180,7 +180,15 @@ public class MinecraftGLWrapper implements IMinecraftGLWrapper
/** @see GL32#glDeleteBuffers(int) */ /** @see GL32#glDeleteBuffers(int) */
@Override @Override
public void glDeleteBuffers(int buffer) public void glDeleteBuffers(int buffer)
{ GlStateManager._glDeleteBuffers(buffer); } {
GL32.glDeleteBuffers(buffer);
// MC's implementation has a bug where it will throw:
// GL_INVALID_OPERATION in glBufferData(immutable)
// when attempting to delete Storage Buffers
// So we need to manually delete the buffers ourselves
//GlStateManager._glDeleteBuffers(buffer);
}
// culling // // culling //
@@ -21,8 +21,10 @@ package com.seibel.distanthorizons.common.wrappers.misc;
import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.NativeImage;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
import org.apache.logging.log4j.Logger;
import org.lwjgl.opengl.GL32; import org.lwjgl.opengl.GL32;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -30,6 +32,7 @@ import java.nio.ByteBuffer;
public class LightMapWrapper implements ILightMapWrapper public class LightMapWrapper implements ILightMapWrapper
{ {
private static final IMinecraftGLWrapper GLMC = SingletonInjector.INSTANCE.get(IMinecraftGLWrapper.class); private static final IMinecraftGLWrapper GLMC = SingletonInjector.INSTANCE.get(IMinecraftGLWrapper.class);
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
private int textureId = 0; private int textureId = 0;
@@ -59,7 +62,13 @@ public class LightMapWrapper implements ILightMapWrapper
GLMC.glBindTexture(this.textureId); GLMC.glBindTexture(this.textureId);
} }
image.upload(0, 0, 0, false); image.upload(0, 0, 0, false);
GLMC.glBindTexture(currentTexture);
// getActiveTexture() may return textures that aren't valid and attempting to bind them will
// throw a GL error in MC 1.21.1
if (GL32.glIsTexture(currentTexture))
{
GLMC.glBindTexture(currentTexture);
}
} }
private void createLightmap(NativeImage image) private void createLightmap(NativeImage image)
{ {
@@ -24,13 +24,16 @@ import com.seibel.distanthorizons.common.util.ProxyUtil;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.api.internal.ClientApi;
import com.seibel.distanthorizons.core.api.internal.ServerApi;
import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.api.internal.SharedApi;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.network.messages.AbstractNetworkMessage;
import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil; import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil;
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
@@ -52,6 +55,7 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
@@ -90,7 +94,13 @@ public class ForgeClientProxy implements AbstractModInitializer.IEventProxy
public void registerEvents() public void registerEvents()
{ {
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
ForgePluginPacketSender.setPacketHandler(ClientApi.INSTANCE::pluginMessageReceived);
// handles singleplayer, LAN, and connecting to a server
ForgePluginPacketSender.setPacketHandler((IServerPlayerWrapper player, @NotNull AbstractNetworkMessage message) ->
{
ClientApi.INSTANCE.pluginMessageReceived(message);
ServerApi.INSTANCE.pluginMessageReceived(player, message);
});
} }
@@ -78,10 +78,7 @@ public class ForgeServerProxy implements AbstractModInitializer.IEventProxy
// constructor // // constructor //
//=============// //=============//
public ForgeServerProxy(boolean isDedicated) public ForgeServerProxy(boolean isDedicated) { this.isDedicated = isDedicated; }
{
this.isDedicated = isDedicated;
}
+1 -1
View File
@@ -5,7 +5,7 @@ org.gradle.caching=true
# Mod Info # Mod Info
mod_name=DistantHorizons mod_name=DistantHorizons
mod_version=2.3.0-b mod_version=2.3.1-b
api_version=4.0.0 api_version=4.0.0
maven_group=com.seibel.distanthorizons maven_group=com.seibel.distanthorizons
mod_readable_name=Distant Horizons mod_readable_name=Distant Horizons
@@ -26,7 +26,9 @@ import com.seibel.distanthorizons.core.api.internal.ClientApi;
import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.api.internal.ServerApi; import com.seibel.distanthorizons.core.api.internal.ServerApi;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.network.messages.AbstractNetworkMessage;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSender; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSender;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker;
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor;
import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.coreapi.ModInfo;
@@ -51,6 +53,7 @@ import java.util.function.Consumer;
import net.neoforged.neoforge.client.ConfigScreenHandler; import net.neoforged.neoforge.client.ConfigScreenHandler;
#else #else
import net.neoforged.neoforge.client.gui.IConfigScreenFactory; import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import org.jetbrains.annotations.NotNull;
#endif #endif
/** /**
@@ -64,11 +67,16 @@ public class NeoforgeMain extends AbstractModInitializer
{ {
public NeoforgeMain(IEventBus eventBus) public NeoforgeMain(IEventBus eventBus)
{ {
eventBus.addListener((FMLClientSetupEvent e) -> { // handles singleplayer, LAN, and connecting to a server
eventBus.addListener((FMLClientSetupEvent e) ->
{
this.onInitializeClient(); this.onInitializeClient();
eventBus.addListener(this::registerNetworkingClient); eventBus.addListener(this::registerNetworkingClientServer);
}); });
eventBus.addListener((FMLDedicatedServerSetupEvent e) -> {
// handles dedicated servers
eventBus.addListener((FMLDedicatedServerSetupEvent e) ->
{
this.onInitializeServer(); this.onInitializeServer();
eventBus.addListener(this::registerNetworkingServer); eventBus.addListener(this::registerNetworkingServer);
}); });
@@ -79,13 +87,22 @@ public class NeoforgeMain extends AbstractModInitializer
//============// //============//
// networking // // networking //
//============// //============//
public void registerNetworkingClient(RegisterPayloadHandlersEvent event)
{ NeoforgePluginPacketSender.setPacketHandler(event, ClientApi.INSTANCE::pluginMessageReceived); } public void registerNetworkingClientServer(RegisterPayloadHandlersEvent event)
{
NeoforgePluginPacketSender.setPacketHandler(event, (IServerPlayerWrapper player, @NotNull AbstractNetworkMessage message) ->
{
ClientApi.INSTANCE.pluginMessageReceived(message);
ServerApi.INSTANCE.pluginMessageReceived(player, message);
});
}
public void registerNetworkingServer(RegisterPayloadHandlersEvent event) public void registerNetworkingServer(RegisterPayloadHandlersEvent event)
{ NeoforgePluginPacketSender.setPacketHandler(event, ServerApi.INSTANCE::pluginMessageReceived); } { NeoforgePluginPacketSender.setPacketHandler(event, ServerApi.INSTANCE::pluginMessageReceived); }
@Override @Override
protected IEventProxy createServerProxy(boolean isDedicated) { return new NeoforgeServerProxy(isDedicated); } protected IEventProxy createServerProxy(boolean isDedicated) { return new NeoforgeServerProxy(isDedicated); }