From 0be45abc28e5d629df1719b1a46ca4a14df66f22 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 29 Sep 2023 22:42:41 -0500 Subject: [PATCH 01/58] change ClientLevelWrapper getDimType to IDimensionTypeWrapper --- .../common/wrappers/world/ClientLevelWrapper.java | 3 ++- coreSubProjects | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java index 0cd35bbda..0c88bf752 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java @@ -17,6 +17,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrappe import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IDimensionTypeWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; @@ -112,7 +113,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper } @Override - public IDhApiDimensionTypeWrapper getDimensionType() { return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType()); } + public IDimensionTypeWrapper getDimensionType() { return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType()); } @Override public EDhApiLevelType getLevelType() { return EDhApiLevelType.CLIENT_LEVEL; } diff --git a/coreSubProjects b/coreSubProjects index ee24bd088..b0f1a6e70 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit ee24bd0881393be7647d6a721c6915a49ed82bd3 +Subproject commit b0f1a6e70d448290ac24f43e1fbd18eb8188ab25 From aeb7cf6ff129148514c57d0204cc60bf4b73daec Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 29 Sep 2023 23:17:38 -0500 Subject: [PATCH 02/58] Fix multiplayer similarity percent --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index b0f1a6e70..d15eba118 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit b0f1a6e70d448290ac24f43e1fbd18eb8188ab25 +Subproject commit d15eba1185a6227a0b22c33fde37924555db03d3 From 0bbaa15579afd56904aa125f5f331a7a2b3c349b Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 30 Sep 2023 15:25:48 -0500 Subject: [PATCH 03/58] add basic sqlite and unit tests --- build.gradle | 3 +++ coreSubProjects | 2 +- gradle.properties | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5d07bb5a6..2f8a632a4 100644 --- a/build.gradle +++ b/build.gradle @@ -219,6 +219,9 @@ subprojects { p -> // Compression forgeShadowMe("org.lz4:lz4-java:${rootProject.lz4_version}") + // Sqlite Database + forgeShadowMe("org.xerial:sqlite-jdbc:${rootProject.sqlite_jdbc_version}") + // NightConfig (includes Toml & Json) forgeShadowMe("com.electronwill.night-config:toml:${rootProject.nightconfig_version}") forgeShadowMe("com.electronwill.night-config:json:${rootProject.nightconfig_version}") diff --git a/coreSubProjects b/coreSubProjects index d15eba118..ebef91601 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit d15eba1185a6227a0b22c33fde37924555db03d3 +Subproject commit ebef91601e961e7f0020aa7524d4d7108346ef72 diff --git a/gradle.properties b/gradle.properties index 26d5f0d2e..92c54ba11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,6 +29,7 @@ log4j_version=2.20.0 netty_version=4.1.94.Final lwjgl_version=3.2.3 joml_version=1.10.2 +sqlite_jdbc_version=3.43.0.0 # These are here so they can be changed with cmd arguments From fee8dc9b138fc62c417e3e0013edee34117820b2 Mon Sep 17 00:00:00 2001 From: coolGi Date: Sun, 1 Oct 2023 22:32:19 +1030 Subject: [PATCH 04/58] 1.20.2 now builds (config looks odd, and updater disabled) --- .gitlab-ci.yml | 2 +- Readme.md | 7 ++ .../common/wrappers/gui/ClassicConfigGUI.java | 4 + .../common/wrappers/gui/MinecraftScreen.java | 4 + .../wrappers/gui/TexturedButtonWidget.java | 30 ++++-- .../wrappers/gui/updater/ChangelogScreen.java | 4 + .../wrappers/gui/updater/UpdateModScreen.java | 6 +- .../minecraft/MinecraftRenderWrapper.java | 14 +++ .../1_20_2.distanthorizons.accesswidener | 36 +++++++ .../mixins/client/MixinLevelRenderer.java | 7 +- .../fabric/mixins/client/MixinMinecraft.java | 15 ++- .../mixins/client/MixinLevelRenderer.java | 96 +++++-------------- .../forge/mixins/client/MixinMinecraft.java | 22 +++-- versionProperties/1.20.2.properties | 51 ++++++++++ 14 files changed, 204 insertions(+), 94 deletions(-) create mode 100644 common/src/main/resources/1_20_2.distanthorizons.accesswidener create mode 100644 versionProperties/1.20.2.properties diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 357292dae..e4b9db183 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ build: stage: build parallel: matrix: - - MC_VER: ["1.16.5", "1.17.1", "1.18.2", "1.19.2", "1.19.4", "1.20.1"] + - MC_VER: ["1.16.5", "1.17.1", "1.18.2", "1.19.2", "1.19.4", "1.20.1", "1.20.2"] script: # this both runs the unit tests and assembles the code - ./gradlew clean -PmcVer="${MC_VER}" -PgitMainBranch="${CI_COMMIT_BRANCH}" -PgitMainCommit="${CI_COMMIT_SHA}" -PgitCoreCommit="Unavailable (built by Gitlab CI)" --gradle-user-home cache/; diff --git a/Readme.md b/Readme.md index 48e52f592..7aaf778fc 100644 --- a/Readme.md +++ b/Readme.md @@ -20,6 +20,13 @@ If you want to see a quick demo, check out a video covering the mod here: ### This branch supports the following versions of Minecraft: +#### 1.20.2 +Fabric: 0.14.22\ +Fabric API: 0.89.2+1.20.2\ +Forge: 48.0.13\ +Parchment: 1.19.3:2023.03.25\ +Modmenu: 8.0.0 + #### 1.20.1, 1.20 (Default) Fabric: 0.14.21\ Fabric API: 0.85.0+1.20.1\ diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java index cfb82ae09..c6b016b59 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java @@ -387,7 +387,11 @@ public class ClassicConfigGUI public void render(GuiGraphics matrices, int mouseX, int mouseY, float delta) #endif { + #if MC_1_20_2 + this.renderBackground(matrices, mouseX, mouseY, delta); // Renders background + #else this.renderBackground(matrices); // Renders background + #endif this.list.render(matrices, mouseX, mouseY, delta); // Render buttons DhDrawCenteredString(matrices, font, title, width / 2, 15, 0xFFFFFF); // Render title diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/MinecraftScreen.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/MinecraftScreen.java index cf42dd9db..716c98775 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/MinecraftScreen.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/MinecraftScreen.java @@ -72,7 +72,11 @@ public class MinecraftScreen public void render(GuiGraphics matrices, int mouseX, int mouseY, float delta) #endif { + #if MC_1_20_2 + this.renderBackground(matrices, mouseX, mouseY, delta); // Render background + #else this.renderBackground(matrices); // Render background + #endif this.list.render(matrices, mouseX, mouseY, delta); // Renders the items in the render list (currently only used to tint background darker) screen.mouseX = mouseX; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java index 950a68e50..52585e7d7 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java @@ -31,28 +31,40 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; #endif +#if MC_1_20_2 +import net.minecraft.client.gui.components.WidgetSprites; +#endif + /** * Creates a button with a texture on it */ // TODO: Is this still needed? Can we switch to vanilla's ImageButton? +// +// Note after 1.20.2: They changed how buttons work, and are asking for a WidgetSprites. +// This should probably still exist so that code only needs to be changed here to work on all mc versions public class TexturedButtonWidget extends ImageButton { - #if POST_MC_1_17_1 - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction) + #if MC_1_20_2 + public static WidgetSprites locationToSprite(int width, int height, int u, int v, int hoveredVOffset, ResourceLocation resourceLocation) { - super(x, y, width, height, u, v, texture, pressAction); - } - #endif - - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction) - { - super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction); + // FIXME[1.20.2]: Fix this + //Registries. + // + //ResourceLocation unfocused = new ResourceLocation(); + //ResourceLocation focused = new ResourceLocation(resourceLocation.getNamespace(), resourceLocation.getPath()); + + return new WidgetSprites(resourceLocation, resourceLocation); } + #endif public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text) { + #if MC_1_20_2 + super(x, y, width, height, locationToSprite(textureWidth, textureHeight, u, v, hoveredVOffset, texture), pressAction, text); + #else super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); + #endif } #if PRE_MC_1_19_2 diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java index 6d9c37cdb..5b1f6ba39 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java @@ -150,7 +150,11 @@ public class ChangelogScreen extends DhScreen public void render(GuiGraphics matrices, int mouseX, int mouseY, float delta) #endif { + #if MC_1_20_2 + this.renderBackground(matrices, mouseX, mouseY, delta); // Render background + #else this.renderBackground(matrices); // Render background + #endif if (!usable) return; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java index 8c126027d..0484da1aa 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java @@ -77,7 +77,7 @@ public class UpdateModScreen extends DhScreen // Logo image - this.addBtn(new ImageButton( + this.addBtn(new TexturedButtonWidget( // Where the button is on the screen this.width / 2 - 65, this.height / 2 - 110, // Width and height of the button @@ -151,7 +151,11 @@ public class UpdateModScreen extends DhScreen public void render(GuiGraphics matrices, int mouseX, int mouseY, float delta) #endif { + #if MC_1_20_2 + this.renderBackground(matrices, mouseX, mouseY, delta); // Render background + #else this.renderBackground(matrices); // Render background + #endif // Render the text's 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 6d433402f..bc8020c4c 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 @@ -42,6 +42,9 @@ import com.mojang.math.Vector3f; #else import org.joml.Vector3f; #endif +#if MC_1_20_2 +import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; +#endif import com.seibel.distanthorizons.coreapi.util.math.Mat4f; import com.seibel.distanthorizons.coreapi.util.math.Vec3d; @@ -294,6 +297,16 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper { try { + #if MC_1_20_2 + LevelRenderer levelRenderer = MC.levelRenderer; + Collection chunks = levelRenderer.visibleSections; + + return (chunks.stream().map((chunk) -> { + AABB chunkBoundingBox = chunk.getBoundingBox(); + return new DhChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16), + Math.floorDiv((int) chunkBoundingBox.minZ, 16)); + }).collect(Collectors.toCollection(HashSet::new))); + #else LevelRenderer levelRenderer = MC.levelRenderer; Collection chunks = #if PRE_MC_1_18_2 levelRenderer.renderChunks; @@ -306,6 +319,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper return new DhChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16), Math.floorDiv((int) chunkBoundingBox.minZ, 16)); }).collect(Collectors.toCollection(HashSet::new))); + #endif } catch (LinkageError e) { diff --git a/common/src/main/resources/1_20_2.distanthorizons.accesswidener b/common/src/main/resources/1_20_2.distanthorizons.accesswidener new file mode 100644 index 000000000..0626f04a2 --- /dev/null +++ b/common/src/main/resources/1_20_2.distanthorizons.accesswidener @@ -0,0 +1,36 @@ +accessWidener v1 named + +# used when determining where to save files to +accessible field net/minecraft/world/level/storage/DimensionDataStorage dataFolder Ljava/io/File; + +# used when rendering +accessible method net/minecraft/client/renderer/GameRenderer getFov (Lnet/minecraft/client/Camera;FZ)D + +# used for grabbing vanilla rendered chunks +accessible field net/minecraft/client/renderer/LevelRenderer visibleSections Lit/unimi/dsi/fastutil/objects/ObjectArrayList; + +#accessible field net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo chunk Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk; + +# world generation +# accessible method net/minecraft/world/level/lighting/LayerLightEngine queueSectionData (JLnet/minecraft/world/level/chunk/DataLayer;Z)V +accessible field net/minecraft/world/level/chunk/LevelChunk loaded Z +accessible field net/minecraft/world/level/lighting/LightEngine storage Lnet/minecraft/world/level/lighting/LayerLightSectionStorage; +accessible method net/minecraft/world/level/lighting/LayerLightSectionStorage lightOnInSection (J)Z + +# lod generation from save file +accessible field net/minecraft/world/level/chunk/storage/ChunkStorage worker Lnet/minecraft/world/level/chunk/storage/IOWorker; +accessible field net/minecraft/world/level/chunk/storage/IOWorker storage Lnet/minecraft/world/level/chunk/storage/RegionFileStorage; +accessible field net/minecraft/world/level/chunk/storage/RegionFileStorage regionCache Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; +accessible field net/minecraft/world/level/chunk/storage/RegionFileStorage folder Ljava/nio/file/Path; + +# grabbing textures +accessible class net/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture +accessible method net/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture getFrameX (I)I +accessible method net/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture getFrameY (I)I +accessible field net/minecraft/client/renderer/texture/SpriteContents animatedTexture Lnet/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture; +accessible field net/minecraft/client/renderer/texture/SpriteContents originalImage Lcom/mojang/blaze3d/platform/NativeImage; + +# hacky stuff +accessible field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; +mutable field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; +accessible field net/minecraft/client/gui/components/AbstractSelectionList scrollAmount D # Hack to bypass vanilla's setScrollAmount's clamp 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 12bc8d7b6..f5ec81b36 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 @@ -94,11 +94,16 @@ public class MixinLevelRenderer method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V", cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) - #else + #elif PRE_MC_1_20_2 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) + #else + @Inject(at = @At("HEAD"), + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;)V", + cancellable = true) + private void renderChunkLayer(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo callback) #endif { // FIXME completely disables rendering when sodium is installed diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java index 72e46737d..cbd004b1b 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java @@ -25,16 +25,25 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MixinMinecraft { - #if PRE_MC_1_20_1 + #if MC_1_20_2 + // FIXME + //@Redirect( + // method = "Lnet/minecraft/client/Minecraft;buildInitialScreens(Lnet/minecraft/client/Minecraft$GameLoadCookie;)Ljava/lang/Runnable;", + // at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") + //) + public void onOpenScreen(Screen guiScreen) + { + Minecraft instance = Minecraft.getInstance(); + #elif MC_1_20_1 @Redirect( - method = "(Lnet/minecraft/client/main/GameConfig;)V", + method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") ) public void onOpenScreen(Minecraft instance, Screen guiScreen) { #else @Redirect( - method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", + method = "(Lnet/minecraft/client/main/GameConfig;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") ) public void onOpenScreen(Minecraft instance, Screen guiScreen) 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 41b02909c..90f61dd3f 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 @@ -28,13 +28,8 @@ import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; #endif -import com.seibel.distanthorizons.common.rendering.SeamlessOverdraw; -import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; -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; @@ -47,22 +42,14 @@ 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 PRE_MC_1_17_1 -import org.lwjgl.opengl.GL15; -#endif - - /** * This class is used to mix in my 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.

+ * of the normal terrain. * * This is also the mixin for rendering the clouds * @@ -78,82 +65,48 @@ public class MixinLevelRenderer @Unique private static float previousPartialTicks = 0; - // TODO: Is there any reason why this is here? Can it be deleted? - public MixinLevelRenderer() - { - throw new NullPointerException("Null cannot be cast to non-null type."); - } - + // Inject rendering at first call to renderChunkLayer + // HEAD or RETURN #if PRE_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) - #else - @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) - public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTicks, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) - #endif { // 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 - - // TODO: Can we move this to forge's client proxy similarly to how fabric does it #if PRE_MC_1_17_1 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V", cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack matrixStackIn, double xIn, double yIn, double zIn, CallbackInfo callback) #elif PRE_MC_1_19_4 + @Inject(at = @At("HEAD"), + method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V", + cancellable = true) + private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) + #elif PRE_MC_1_20_2 + @Inject(at = @At("HEAD"), + method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", + cancellable = true) + private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) + #else @Inject(at = @At("HEAD"), - method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V", + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;)V", cancellable = true) - private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) - #else - @Inject(at = @At("HEAD"), - method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", - cancellable = true) - private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) + private void renderChunkLayer(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo callback) #endif { - // get MC's model view and projection matrices - #if 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 - - - - // only render before solid blocks - if (renderType.equals(RenderType.solid())) - { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); - - // experimental proof-of-concept option - if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) - { - float[] matrixFloatArray = SeamlessOverdraw.overwriteMinecraftNearFarClipPlanes(mcProjectionMatrix, previousPartialTicks); - - #if MC_1_16_5 - SeamlessOverdraw.applyLegacyProjectionMatrix(matrixFloatArray); - #elif PRE_MC_1_19_4 - projectionMatrix.load(FloatBuffer.wrap(matrixFloatArray)); - #else - projectionMatrix.set(matrixFloatArray); - #endif - } - } - + // FIXME completely disables rendering when sodium is installed if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { callback.cancel(); @@ -174,4 +127,5 @@ public class MixinLevelRenderer ChunkWrapper.syncedUpdateClientLightStatus(); } + } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java index 40c17ce04..236d06e81 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java @@ -25,16 +25,25 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MixinMinecraft { - #if PRE_MC_1_20 + #if MC_1_20_2 + // FIXME + //@Redirect( + // method = "Lnet/minecraft/client/Minecraft;buildInitialScreens(Lnet/minecraft/client/Minecraft$GameLoadCookie;)Ljava/lang/Runnable;", + // at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") + //) + public void onOpenScreen(Screen guiScreen) + { + Minecraft instance = Minecraft.getInstance(); + #elif MC_1_20_1 @Redirect( - method = "(Lnet/minecraft/client/main/GameConfig;)V", + method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") ) public void onOpenScreen(Minecraft instance, Screen guiScreen) { #else @Redirect( - method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", + method = "(Lnet/minecraft/client/main/GameConfig;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") ) public void onOpenScreen(Minecraft instance, Screen guiScreen) @@ -59,10 +68,7 @@ public class MixinMinecraft } } - @Inject(at = @At("HEAD"), method = "close()V", remap = false) - public void close(CallbackInfo ci) - { - SelfUpdater.onClose(); - } + @Inject(at = @At("HEAD"), method = "close()V") + public void close(CallbackInfo ci) { SelfUpdater.onClose(); } } diff --git a/versionProperties/1.20.2.properties b/versionProperties/1.20.2.properties new file mode 100644 index 000000000..553df7436 --- /dev/null +++ b/versionProperties/1.20.2.properties @@ -0,0 +1,51 @@ +# 1.20.2 version +java_version=17 +minecraft_version=1.20.2 +parchment_version=1.19.3:2023.06.25 +compatible_minecraft_versions=["1.20.2"] +accessWidenerVersion=1_20_2 +builds_for=fabric,forge + +# Fabric loader +fabric_loader_version=0.14.22 +fabric_api_version=0.89.2+1.20.2 + # Fabric mod versions + modmenu_version=8.0.0 + starlight_version_fabric= + phosphor_version_fabric= + lithium_version= + sodium_version=mc1.20.2-0.5.3 + iris_version=1.6.9+1.20.2 + bclib_version=3.0.13 + immersive_portals_version= + canvas_version= + + fabric_incompatibility_list={ } + fabric_recommend_list={ "indium": "*" } + + # Fabric mod run + # 0 = Don't enable and don't run + # 1 = Can be referenced in code but doesn't run + # 2 = Can be referenced in code and runs in client + enable_starlight=0 + enable_phosphor=0 + enable_sodium=1 + enable_lithium=0 + enable_iris=1 + enable_bclib=1 + enable_immersive_portals=0 + enable_canvas=0 + +# Forge loader +forge_version=48.0.13 + # Forge mod versions + starlight_version_forge= + terraforged_version= + + # Forge mod run + # 0 = Don't enable and don't run + # 1 = Can be referenced in code but doesn't run + # 2 = Can be referenced in code and runs in client + enable_starlight_forge=0 + enable_terraforged=0 + enable_terrafirmacraft=0 From 115c531be2f4eb4e4f552446c93c9ba3af7b0512 Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 10:58:36 +1030 Subject: [PATCH 05/58] Fixed building on forge --- .../mixins/client/MixinLevelRenderer.java | 101 +++++++++++++----- .../forge/mixins/client/MixinMinecraft.java | 7 +- 2 files changed, 81 insertions(+), 27 deletions(-) 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 90f61dd3f..9dbc03388 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 @@ -28,8 +28,13 @@ import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; #endif +import com.seibel.distanthorizons.common.rendering.SeamlessOverdraw; +import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; +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; @@ -42,14 +47,22 @@ 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 PRE_MC_1_17_1 +import org.lwjgl.opengl.GL15; +#endif + + /** * This class is used to mix in my 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. + * of the normal terrain.

* * This is also the mixin for rendering the clouds * @@ -65,48 +78,87 @@ public class MixinLevelRenderer @Unique private static float previousPartialTicks = 0; - // Inject rendering at first call to renderChunkLayer - // HEAD or RETURN + // TODO: Is there any reason why this is here? Can it be deleted? + public MixinLevelRenderer() + { + throw new NullPointerException("Null cannot be cast to non-null type."); + } + #if PRE_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) + #else + @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) + public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTicks, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) + #endif { // 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 + + // TODO: Can we move this to forge's client proxy similarly to how fabric does it #if PRE_MC_1_17_1 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V", cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack matrixStackIn, double xIn, double yIn, double zIn, CallbackInfo callback) #elif PRE_MC_1_19_4 - @Inject(at = @At("HEAD"), - method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V", - cancellable = true) - private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) - #elif PRE_MC_1_20_2 - @Inject(at = @At("HEAD"), - method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", - cancellable = true) - private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) - #else @Inject(at = @At("HEAD"), - method = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;)V", + method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V", cancellable = true) - private void renderChunkLayer(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo callback) + private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) + #elif PRE_MC_1_20_2 + @Inject(at = @At("HEAD"), + method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", + cancellable = true) + private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) + #else + @Inject(at = @At("HEAD"), + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;)V", + cancellable = true) + private void renderChunkLayer(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo callback) #endif { - // FIXME completely disables rendering when sodium is installed + // get MC's model view and projection matrices + #if 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 + + + + // only render before solid blocks + if (renderType.equals(RenderType.solid())) + { + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + + // experimental proof-of-concept option + if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) + { + float[] matrixFloatArray = SeamlessOverdraw.overwriteMinecraftNearFarClipPlanes(mcProjectionMatrix, previousPartialTicks); + + #if MC_1_16_5 + SeamlessOverdraw.applyLegacyProjectionMatrix(matrixFloatArray); + #elif PRE_MC_1_19_4 + projectionMatrix.load(FloatBuffer.wrap(matrixFloatArray)); + #else + projectionMatrix.set(matrixFloatArray); + #endif + } + } + if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { callback.cancel(); @@ -127,5 +179,4 @@ public class MixinLevelRenderer ChunkWrapper.syncedUpdateClientLightStatus(); } - } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java index 236d06e81..0b6b3e490 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java @@ -68,7 +68,10 @@ public class MixinMinecraft } } - @Inject(at = @At("HEAD"), method = "close()V") - public void close(CallbackInfo ci) { SelfUpdater.onClose(); } + @Inject(at = @At("HEAD"), method = "close()V", remap = false) + public void close(CallbackInfo ci) + { + SelfUpdater.onClose(); + } } From 7d13cb49051a29631babb0c8cbb380886b4c97f7 Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 11:20:40 +1030 Subject: [PATCH 06/58] bumped manifold version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 26d5f0d2e..09b788814 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ mod_issues=https://gitlab.com/jeseibel/minecraft-lod-mod/-/issues mod_discord=https://discord.gg/xAB8G4cENx # Global Plugin Versions -manifold_version=2023.1.26 +manifold_version=2023.1.28 toml_version=3.6.4 lz4_version=1.8.0 nightconfig_version=3.6.6 From 867152fdf29d7f724a13e6ff2255d167b66851c5 Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 11:40:33 +1030 Subject: [PATCH 07/58] Fixed renderChunkLayer injection point (1.20.2) --- .../fabric/mixins/client/MixinLevelRenderer.java | 8 ++++---- .../forge/mixins/client/MixinLevelRenderer.java | 4 ++-- 2 files changed, 6 insertions(+), 6 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 f5ec81b36..b35fd5aa4 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 @@ -100,10 +100,10 @@ public class MixinLevelRenderer cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) #else - @Inject(at = @At("HEAD"), - method = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;)V", - cancellable = true) - private void renderChunkLayer(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo callback) + @Inject(at = @At("HEAD"), + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", + cancellable = true) + private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif { // 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 9dbc03388..76fcefedc 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 @@ -116,9 +116,9 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) #else @Inject(at = @At("HEAD"), - method = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/vertex/PoseStack;FJZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lorg/joml/Matrix4f;)V", + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", cancellable = true) - private void renderChunkLayer(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo callback) + private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif { // get MC's model view and projection matrices From 48fc9d13ad6ea6d0826a2ad1aa62a54cf450de04 Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 11:40:46 +1030 Subject: [PATCH 08/58] Updated core sub-project --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index d15eba118..d9e3293cf 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit d15eba1185a6227a0b22c33fde37924555db03d3 +Subproject commit d9e3293cf3192cc1032e4480b652264f59fe37a3 From 71493e79d5f62fb2dc1920b2b693ba83533ef477 Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 12:33:44 +1030 Subject: [PATCH 09/58] Hopefully fixed 1.20.2 building --- common/src/main/resources/1_20_2.distanthorizons.accesswidener | 2 +- .../fabric/mixins/client/MixinLevelRenderer.java | 2 +- .../distanthorizons/forge/mixins/client/MixinLevelRenderer.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/resources/1_20_2.distanthorizons.accesswidener b/common/src/main/resources/1_20_2.distanthorizons.accesswidener index 0626f04a2..349bf84d9 100644 --- a/common/src/main/resources/1_20_2.distanthorizons.accesswidener +++ b/common/src/main/resources/1_20_2.distanthorizons.accesswidener @@ -9,7 +9,7 @@ accessible method net/minecraft/client/renderer/GameRenderer getFov (Lnet/minecr # used for grabbing vanilla rendered chunks accessible field net/minecraft/client/renderer/LevelRenderer visibleSections Lit/unimi/dsi/fastutil/objects/ObjectArrayList; -#accessible field net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo chunk Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk; +#accessible method net/minecraft/client/renderer/LevelRenderer renderSectionLayer (Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V # world generation # accessible method net/minecraft/world/level/lighting/LayerLightEngine queueSectionData (JLnet/minecraft/world/level/chunk/DataLayer;Z)V 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 b35fd5aa4..5c687cd4e 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 @@ -101,7 +101,7 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) #else @Inject(at = @At("HEAD"), - method = "Lnet/minecraft/client/renderer/LevelRenderer;renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif 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 76fcefedc..2239adb4f 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 @@ -116,7 +116,7 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) #else @Inject(at = @At("HEAD"), - method = "Lnet/minecraft/client/renderer/LevelRenderer;renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", + method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", cancellable = true) private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif From 94978fe10a9d8d81a2a9d4746f4e490932fed3d6 Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 14:16:08 +1030 Subject: [PATCH 10/58] Fixed updater on 1.20.2 --- .../fabric/mixins/client/MixinMinecraft.java | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java index cbd004b1b..ebf99e891 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java @@ -9,7 +9,6 @@ import com.seibel.distanthorizons.core.jar.installer.ModrinthGetter; import com.seibel.distanthorizons.core.jar.updater.SelfUpdater; import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -25,16 +24,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MixinMinecraft { - #if MC_1_20_2 - // FIXME - //@Redirect( - // method = "Lnet/minecraft/client/Minecraft;buildInitialScreens(Lnet/minecraft/client/Minecraft$GameLoadCookie;)Ljava/lang/Runnable;", - // at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") - //) - public void onOpenScreen(Screen guiScreen) - { - Minecraft instance = Minecraft.getInstance(); - #elif MC_1_20_1 + #if PRE_MC_1_20_2 + #if MC_1_20_1 @Redirect( method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") @@ -67,6 +58,32 @@ public class MixinMinecraft instance.setScreen(guiScreen); // Sets the screen back to the vanilla screen as if nothing ever happened } } + #endif + + #if POST_MC_1_20_2 + @Redirect( + method = "Lnet/minecraft/client/Minecraft;onGameLoadFinished(Lnet/minecraft/client/Minecraft$GameLoadCookie;)V", + at = @At(value = "INVOKE", target = "Ljava/lang/Runnable;run()V") + ) + private void buildInitialScreens(Runnable runnable) + { + if ( + Config.Client.Advanced.AutoUpdater.enableAutoUpdater.get() // Don't do anything if the user doesn't want it + && SelfUpdater.onStart() + ) + { + runnable = () -> { + Minecraft.getInstance().setScreen(new UpdateModScreen( + // TODO: Change to runnable, instead of tittle screen + new TitleScreen(false), // We don't want to use the vanilla title screen as it would fade the buttons + (Config.Client.Advanced.AutoUpdater.updateBranch.get() == EUpdateBranch.STABLE ? ModrinthGetter.getLatestIDForVersion(SingletonInjector.INSTANCE.get(IVersionConstants.class).getMinecraftVersion()) : GitlabGetter.INSTANCE.projectPipelines.get(0).get("sha")) + )); + }; + } + + runnable.run(); + } + #endif @Inject(at = @At("HEAD"), method = "close()V") public void close(CallbackInfo ci) { SelfUpdater.onClose(); } From 75419ed5aea1aca1579358d593c86b5dbf16c55c Mon Sep 17 00:00:00 2001 From: coolGi Date: Mon, 2 Oct 2023 14:16:50 +1030 Subject: [PATCH 11/58] Updated core submodule --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index d9e3293cf..b18fcb581 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit d9e3293cf3192cc1032e4480b652264f59fe37a3 +Subproject commit b18fcb5815ce172ea61a3a11c87da0c38cc174e2 From 172d43a11b1db72f931665277c394368bc00ecdf Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 2 Oct 2023 19:37:58 -0500 Subject: [PATCH 12/58] git ignore sqlite databases --- .gitignore | 3 +++ coreSubProjects | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0fa2bd272..16bdd9507 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ buildAllJars/ # file genearated via MC version switching using preprocessor build.properties + +# Sqlite databases +*.sqlite diff --git a/coreSubProjects b/coreSubProjects index ebef91601..94b2b6376 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit ebef91601e961e7f0020aa7524d4d7108346ef72 +Subproject commit 94b2b63767466bc7bead77b8cb4d0cae1422e264 From eb4e3bc793667df39f93336480514d360f4aa8c3 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 02:18:59 +0000 Subject: [PATCH 13/58] Fixes to screen class not being imported --- .../fabric/mixins/client/MixinMinecraft.java | 1 + .../forge/mixins/client/MixinMinecraft.java | 38 ++++++++++++++----- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java index ebf99e891..92d79850a 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java @@ -9,6 +9,7 @@ import com.seibel.distanthorizons.core.jar.installer.ModrinthGetter; import com.seibel.distanthorizons.core.jar.updater.SelfUpdater; import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java index 0b6b3e490..1aaa81bf7 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java @@ -25,16 +25,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MixinMinecraft { - #if MC_1_20_2 - // FIXME - //@Redirect( - // method = "Lnet/minecraft/client/Minecraft;buildInitialScreens(Lnet/minecraft/client/Minecraft$GameLoadCookie;)Ljava/lang/Runnable;", - // at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") - //) - public void onOpenScreen(Screen guiScreen) - { - Minecraft instance = Minecraft.getInstance(); - #elif MC_1_20_1 + #if PRE_MC_1_20_2 + #if MC_1_20_1 @Redirect( method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") @@ -67,6 +59,32 @@ public class MixinMinecraft instance.setScreen(guiScreen); // Sets the screen back to the vanilla screen as if nothing ever happened } } + #endif + + #if POST_MC_1_20_2 + @Redirect( + method = "Lnet/minecraft/client/Minecraft;onGameLoadFinished(Lnet/minecraft/client/Minecraft$GameLoadCookie;)V", + at = @At(value = "INVOKE", target = "Ljava/lang/Runnable;run()V") + ) + private void buildInitialScreens(Runnable runnable) + { + if ( + Config.Client.Advanced.AutoUpdater.enableAutoUpdater.get() // Don't do anything if the user doesn't want it + && SelfUpdater.onStart() + ) + { + runnable = () -> { + Minecraft.getInstance().setScreen(new UpdateModScreen( + // TODO: Change to runnable, instead of tittle screen + new TitleScreen(false), // We don't want to use the vanilla title screen as it would fade the buttons + (Config.Client.Advanced.AutoUpdater.updateBranch.get() == EUpdateBranch.STABLE ? ModrinthGetter.getLatestIDForVersion(SingletonInjector.INSTANCE.get(IVersionConstants.class).getMinecraftVersion()) : GitlabGetter.INSTANCE.projectPipelines.get(0).get("sha")) + )); + }; + } + + runnable.run(); + } + #endif @Inject(at = @At("HEAD"), method = "close()V", remap = false) public void close(CallbackInfo ci) From 90c53d8116853a9a4d6d49fb9fda10be00719b64 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 14:26:24 +1030 Subject: [PATCH 14/58] Fixed button textured stuff 1.20.1 and prior --- .../wrappers/gui/TexturedButtonWidget.java | 130 +++++++++++++----- coreSubProjects | 2 +- 2 files changed, 96 insertions(+), 36 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java index 52585e7d7..1e5658acf 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java @@ -19,79 +19,139 @@ package com.seibel.distanthorizons.common.wrappers.gui; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; - -#if PRE_MC_1_17_1 +#if PRE_MC_1_20_1 +import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; #else -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.gui.GuiGraphics; #endif - -#if MC_1_20_2 +#if POST_MC_1_20_2 import net.minecraft.client.gui.components.WidgetSprites; #endif - /** * Creates a button with a texture on it */ -// TODO: Is this still needed? Can we switch to vanilla's ImageButton? -// -// Note after 1.20.2: They changed how buttons work, and are asking for a WidgetSprites. -// This should probably still exist so that code only needs to be changed here to work on all mc versions public class TexturedButtonWidget extends ImageButton { - #if MC_1_20_2 - public static WidgetSprites locationToSprite(int width, int height, int u, int v, int hoveredVOffset, ResourceLocation resourceLocation) + #if POST_MC_1_20_2 + public static WidgetSprites locationToSprite(ResourceLocation resourceLocation, int u, int v) { - // FIXME[1.20.2]: Fix this - //Registries. - // - //ResourceLocation unfocused = new ResourceLocation(); - //ResourceLocation focused = new ResourceLocation(resourceLocation.getNamespace(), resourceLocation.getPath()); - + // FIXME[1.20.2]: Change the `-1`'s to use resourceLocation's texture values + return locationToSprite(resourceLocation, u, v, -1, -1, -1); + } + public static WidgetSprites locationToSprite(ResourceLocation resourceLocation, int u, int v, int textureWidth, int textureHeight, int hoveredVOffset) + { + // FIXME[1.20.2]: No idea how widget sprite works, and not documented anywhere + /* + Several things need to be done to fix this + - First of all, what do each of the paramiters mean + We know that they may relate to the normal, deactivated, hovered, and pressed textures, but which is which. And are these guesses correct? + - How do we move the texture + As Minecraft is now asking for several textures, instead of one big texture, what is the plan on getting this to work? + - One strategy is to split the textures in our assets, then combine them for older versions + - Another is to split it for newer versions + Either of those requires the texture files to be changed, and new resources to be mapped + */ return new WidgetSprites(resourceLocation, resourceLocation); } #endif - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text) + + + + #if POST_MC_1_17_1 + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction) { - #if MC_1_20_2 - super(x, y, width, height, locationToSprite(textureWidth, textureHeight, u, v, hoveredVOffset, texture), pressAction, text); + #if PRE_MC_1_20_2 + super(x, y, width, height, u, v, texture, pressAction); #else - super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); + super(x, y, width, height, locationToSprite(texture, u, v), pressAction); + #endif + } + #endif + + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction) + { + #if PRE_MC_1_20_2 + super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction); + #else + super(x, y, width, height, locationToSprite(texture, u, v, textureWidth, textureHeight, hoveredVOffset), pressAction); #endif } - #if PRE_MC_1_19_2 - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, OnTooltip tooltipSupplier, Component text) + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text) { - super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, tooltipSupplier, text); + #if PRE_MC_1_20_2 + super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); + #else + super(x, y, locationToSprite(texture, u, v, textureWidth, textureHeight, hoveredVOffset), pressAction, text); + #endif } + + #if PRE_MC_1_19_4 @Override - public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) - { - #if PRE_MC_1_17_1 - Minecraft.getInstance().getTextureManager().bind(WIDGETS_LOCATION); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.alpha); - #else + public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) { + #if PRE_MC_1_17_1 + Minecraft.getInstance().getTextureManager().bind(WIDGETS_LOCATION); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.alpha); + #else RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); - #endif + #endif + int i = this.getYImage(this.isHovered); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.enableDepthTest(); + #if PRE_MC_1_19_4 this.blit(matrices, this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height); this.blit(matrices, this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); - + #else + this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #endif + super.renderButton(matrices, mouseX, mouseY, delta); } + #else + @Override + #if PRE_MC_1_20_1 + public void renderWidget(PoseStack matrices, int mouseX, int mouseY, float delta) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); + #else + public void renderWidget(GuiGraphics matrices, int mouseX, int mouseY, float delta) + { + #endif + int i = 1; + if (!this.active) i = 0; + else if (this.isHovered) i = 2; + + #if PRE_MC_1_20_1 + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.enableDepthTest(); + + this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #elif MC_1_20_1 + matrices.blit(WIDGETS_LOCATION, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + matrices.blit(WIDGETS_LOCATION, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #else + // FIXME[1.20.2]: Later changed `.enabled()` to a proper thing taking the hovered and active into account + matrices.blit(sprites.enabled(), this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + matrices.blit(sprites.enabled(), this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #endif + + super.renderWidget(matrices, mouseX, mouseY, delta); + } #endif } diff --git a/coreSubProjects b/coreSubProjects index b18fcb581..877b0dae2 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit b18fcb5815ce172ea61a3a11c87da0c38cc174e2 +Subproject commit 877b0dae25a59b4e553e7045328938ff7ed24d85 From 2463d8c02436775ce137ce037a872650aed1f46f Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 14:38:52 +1030 Subject: [PATCH 15/58] Added option to allow button background to not appear --- .../wrappers/gui/TexturedButtonWidget.java | 104 +++++++++++------- .../wrappers/gui/updater/UpdateModScreen.java | 4 +- 2 files changed, 66 insertions(+), 42 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java index 1e5658acf..d3f0b8db4 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java @@ -33,10 +33,14 @@ import net.minecraft.client.gui.components.WidgetSprites; #endif /** - * Creates a button with a texture on it + * Creates a button with a texture on it (and a background) that works with all mc versions + * + * @author coolGi + * @version 2023-10-03 */ public class TexturedButtonWidget extends ImageButton { + public final boolean renderBackground; #if POST_MC_1_20_2 public static WidgetSprites locationToSprite(ResourceLocation resourceLocation, int u, int v) { @@ -64,58 +68,73 @@ public class TexturedButtonWidget extends ImageButton #if POST_MC_1_17_1 - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction) + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction) { + this(x, y, width, height, u, v, texture, pressAction, true); + } + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction, boolean renderBackground) { #if PRE_MC_1_20_2 super(x, y, width, height, u, v, texture, pressAction); #else super(x, y, width, height, locationToSprite(texture, u, v), pressAction); #endif + this.renderBackground = renderBackground; } #endif - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction) + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction) { + this(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, true); + } + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, boolean renderBackground) { #if PRE_MC_1_20_2 super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction); #else super(x, y, width, height, locationToSprite(texture, u, v, textureWidth, textureHeight, hoveredVOffset), pressAction); #endif + this.renderBackground = renderBackground; } - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text) + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text) { + this(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text, true); + } + public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text, boolean renderBackground) { #if PRE_MC_1_20_2 super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); #else super(x, y, locationToSprite(texture, u, v, textureWidth, textureHeight, hoveredVOffset), pressAction, text); #endif + this.renderBackground = renderBackground; } #if PRE_MC_1_19_4 @Override public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) { - #if PRE_MC_1_17_1 - Minecraft.getInstance().getTextureManager().bind(WIDGETS_LOCATION); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.alpha); - #else - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); - #endif + if (this.renderBackground) // Renders the background of the button + { + #if PRE_MC_1_17_1 + Minecraft.getInstance().getTextureManager().bind(WIDGETS_LOCATION); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.alpha); + #else + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); + #endif - int i = this.getYImage(this.isHovered); - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - RenderSystem.enableDepthTest(); - #if PRE_MC_1_19_4 - this.blit(matrices, this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height); - this.blit(matrices, this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); - #else - this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - #endif + int i = this.getYImage(this.isHovered); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.enableDepthTest(); + #if PRE_MC_1_19_4 + this.blit(matrices, this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height); + this.blit(matrices, this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); + #else + this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #endif + } super.renderButton(matrices, mouseX, mouseY, delta); } @@ -131,25 +150,28 @@ public class TexturedButtonWidget extends ImageButton public void renderWidget(GuiGraphics matrices, int mouseX, int mouseY, float delta) { #endif - int i = 1; - if (!this.active) i = 0; - else if (this.isHovered) i = 2; + if (this.renderBackground) // Renders the background of the button + { + int i = 1; + if (!this.active) i = 0; + else if (this.isHovered) i = 2; - #if PRE_MC_1_20_1 - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - RenderSystem.enableDepthTest(); - - this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - #elif MC_1_20_1 - matrices.blit(WIDGETS_LOCATION, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - matrices.blit(WIDGETS_LOCATION, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - #else - // FIXME[1.20.2]: Later changed `.enabled()` to a proper thing taking the hovered and active into account - matrices.blit(sprites.enabled(), this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - matrices.blit(sprites.enabled(), this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - #endif + #if PRE_MC_1_20_1 + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.enableDepthTest(); + + this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #elif MC_1_20_1 + matrices.blit(WIDGETS_LOCATION, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + matrices.blit(WIDGETS_LOCATION, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #else + // FIXME[1.20.2]: Later changed `.enabled()` to a proper thing taking the hovered and active into account + matrices.blit(sprites.enabled(), this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + matrices.blit(sprites.enabled(), this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); + #endif + } super.renderWidget(matrices, mouseX, mouseY, delta); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java index 0484da1aa..608592901 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/UpdateModScreen.java @@ -90,7 +90,9 @@ public class UpdateModScreen extends DhScreen // For now it goes to the client option by default (buttonWidget) -> System.out.println("Nice, you found an easter egg :)"), // TODO: Add a proper easter egg to pressing the logo (maybe with confetti) // Add a title to the button - Translatable(ModInfo.ID + ".updater.title") + Translatable(ModInfo.ID + ".updater.title"), + // Dont render the background of the button + false )); } catch (Exception e) From 40618bc35a2d2e1d961d369f9cfcfb61f8764948 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 16:01:30 +1030 Subject: [PATCH 16/58] Fixed up button for 1.20.2 --- .../wrappers/gui/TexturedButtonWidget.java | 130 +++++++++--------- .../1_20_2.distanthorizons.accesswidener | 3 + 2 files changed, 65 insertions(+), 68 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java index d3f0b8db4..febec6549 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java @@ -19,6 +19,17 @@ package com.seibel.distanthorizons.common.wrappers.gui; +/** + * Creates a button with a texture on it (and a background) that works with all mc versions + * + * @author coolGi + * @version 2023-10-03 + */ + + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gui.components.AbstractButton; +import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -28,73 +39,27 @@ import net.minecraft.client.Minecraft; #else import net.minecraft.client.gui.GuiGraphics; #endif -#if POST_MC_1_20_2 -import net.minecraft.client.gui.components.WidgetSprites; -#endif -/** - * Creates a button with a texture on it (and a background) that works with all mc versions - * - * @author coolGi - * @version 2023-10-03 - */ +#if PRE_MC_1_20_2 public class TexturedButtonWidget extends ImageButton +#else +public class TexturedButtonWidget extends Button +#endif { public final boolean renderBackground; + #if POST_MC_1_20_2 - public static WidgetSprites locationToSprite(ResourceLocation resourceLocation, int u, int v) - { - // FIXME[1.20.2]: Change the `-1`'s to use resourceLocation's texture values - return locationToSprite(resourceLocation, u, v, -1, -1, -1); - } - public static WidgetSprites locationToSprite(ResourceLocation resourceLocation, int u, int v, int textureWidth, int textureHeight, int hoveredVOffset) - { - // FIXME[1.20.2]: No idea how widget sprite works, and not documented anywhere - /* - Several things need to be done to fix this - - First of all, what do each of the paramiters mean - We know that they may relate to the normal, deactivated, hovered, and pressed textures, but which is which. And are these guesses correct? - - How do we move the texture - As Minecraft is now asking for several textures, instead of one big texture, what is the plan on getting this to work? - - One strategy is to split the textures in our assets, then combine them for older versions - - Another is to split it for newer versions - Either of those requires the texture files to be changed, and new resources to be mapped - */ - return new WidgetSprites(resourceLocation, resourceLocation); - } + private final int u; + private final int v; + private final int hoveredVOffset; + + private final ResourceLocation texture; + + private final int textureWidth; + private final int textureHeight; #endif - - - #if POST_MC_1_17_1 - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction) { - this(x, y, width, height, u, v, texture, pressAction, true); - } - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, ResourceLocation texture, OnPress pressAction, boolean renderBackground) - { - #if PRE_MC_1_20_2 - super(x, y, width, height, u, v, texture, pressAction); - #else - super(x, y, width, height, locationToSprite(texture, u, v), pressAction); - #endif - this.renderBackground = renderBackground; - } - #endif - - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction) { - this(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, true); - } - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, boolean renderBackground) - { - #if PRE_MC_1_20_2 - super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction); - #else - super(x, y, width, height, locationToSprite(texture, u, v, textureWidth, textureHeight, hoveredVOffset), pressAction); - #endif - this.renderBackground = renderBackground; - } - public TexturedButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, ResourceLocation texture, int textureWidth, int textureHeight, OnPress pressAction, Component text) { this(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text, true); } @@ -103,12 +68,24 @@ public class TexturedButtonWidget extends ImageButton #if PRE_MC_1_20_2 super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text); #else - super(x, y, locationToSprite(texture, u, v, textureWidth, textureHeight, hoveredVOffset), pressAction, text); + // We don't pass on the text option as otherwise it will render (we normally pass it for narration) + // TODO: Find a fix for it + super(x, y, width, height, Component.empty(), pressAction, DEFAULT_NARRATION); + + this.u = u; + this.v = v; + this.hoveredVOffset = hoveredVOffset; + + this.texture = texture; + + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; #endif + this.renderBackground = renderBackground; } - + #if PRE_MC_1_20_2 #if PRE_MC_1_19_4 @Override public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) { @@ -139,14 +116,15 @@ public class TexturedButtonWidget extends ImageButton super.renderButton(matrices, mouseX, mouseY, delta); } #else - @Override #if PRE_MC_1_20_1 + @Override public void renderWidget(PoseStack matrices, int mouseX, int mouseY, float delta) { RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); #else + @Override public void renderWidget(GuiGraphics matrices, int mouseX, int mouseY, float delta) { #endif @@ -163,17 +141,33 @@ public class TexturedButtonWidget extends ImageButton this.blit(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); this.blit(matrices, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - #elif MC_1_20_1 + #else matrices.blit(WIDGETS_LOCATION, this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); matrices.blit(WIDGETS_LOCATION, this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - #else - // FIXME[1.20.2]: Later changed `.enabled()` to a proper thing taking the hovered and active into account - matrices.blit(sprites.enabled(), this.getX(), this.getY(), 0, 46 + i * 20, this.getWidth() / 2, this.getHeight()); - matrices.blit(sprites.enabled(), this.getX() + this.getWidth() / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.getWidth() / 2, this.getHeight()); #endif } super.renderWidget(matrices, mouseX, mouseY, delta); } - #endif + #endif + #else + @Override + public void renderWidget(GuiGraphics matrices, int mouseX, int mouseY, float delta) + { + if (this.renderBackground) + { + //RenderSystem.enableBlend(); + //RenderSystem.enableDepthTest(); + matrices.blitSprite(SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight()); + } + + + // Renders the sprite + int i = 0; + if (!this.active) i = 2; + else if (this.isHovered) i = 1; + + matrices.blit(this.texture, this.getX(), this.getY(), this.u, this.v + (this.hoveredVOffset * i), this.width, this.height, this.textureWidth, this.textureHeight); + } + #endif } diff --git a/common/src/main/resources/1_20_2.distanthorizons.accesswidener b/common/src/main/resources/1_20_2.distanthorizons.accesswidener index 349bf84d9..c793fab68 100644 --- a/common/src/main/resources/1_20_2.distanthorizons.accesswidener +++ b/common/src/main/resources/1_20_2.distanthorizons.accesswidener @@ -30,6 +30,9 @@ accessible method net/minecraft/client/renderer/texture/SpriteContents$AnimatedT accessible field net/minecraft/client/renderer/texture/SpriteContents animatedTexture Lnet/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture; accessible field net/minecraft/client/renderer/texture/SpriteContents originalImage Lcom/mojang/blaze3d/platform/NativeImage; +# UI stuff +accessible field net/minecraft/client/gui/components/AbstractButton SPRITES Lnet/minecraft/client/gui/components/WidgetSprites; + # hacky stuff accessible field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; mutable field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; From 727d7ee3466038592df1ad4c36a947bd752d5472 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 16:21:42 +1030 Subject: [PATCH 17/58] used .equals for string --- .../common/wrappers/gui/ClassicConfigGUI.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java index c6b016b59..b3411c7e4 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java @@ -387,16 +387,16 @@ public class ClassicConfigGUI public void render(GuiGraphics matrices, int mouseX, int mouseY, float delta) #endif { - #if MC_1_20_2 - this.renderBackground(matrices, mouseX, mouseY, delta); // Renders background - #else + #if PRE_MC_1_20_2 // 1.20.2 now enables this by default in the `this.list.render` function this.renderBackground(matrices); // Renders background + #else + super.render(matrices, mouseX, mouseY, delta); #endif this.list.render(matrices, mouseX, mouseY, delta); // Render buttons DhDrawCenteredString(matrices, font, title, width / 2, 15, 0xFFFFFF); // Render title - if (this.configBase.modID == "distanthorizons") + if (this.configBase.modID.equals("distanthorizons")) { // Display version DhDrawString(matrices, font, TextOrLiteral(ModInfo.VERSION), 2, height - 10, 0xAAAAAA); @@ -443,7 +443,9 @@ public class ClassicConfigGUI } } } + #if PRE_MC_1_20_2 super.render(matrices, mouseX, mouseY, delta); + #endif } } From 76f7371057e1f6664697e21f6fdbcb69bfbe1fe7 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 16:44:18 +1030 Subject: [PATCH 18/58] Fixed building for all mc versions --- .../common/wrappers/gui/TexturedButtonWidget.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java index febec6549..866ef61c7 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/TexturedButtonWidget.java @@ -33,6 +33,10 @@ import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; + +#if POST_MC_1_17_1 +import net.minecraft.client.renderer.GameRenderer; +#endif #if PRE_MC_1_20_1 import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; From 1775a58938d861cca7b877f170098f696516ddd3 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 22:48:13 +1030 Subject: [PATCH 19/58] Updated core submodule --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 877b0dae2..e966d40ae 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 877b0dae25a59b4e553e7045328938ff7ed24d85 +Subproject commit e966d40ae24ee91df72697b22cb3ddb43f5128d2 From b5267a06586d292e36a042e3257db49c665773ac Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 23:09:08 +1030 Subject: [PATCH 20/58] Added "provides" for our old modid --- fabric/src/main/resources/fabric.mod.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 7110f74ca..dda42ec55 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -3,6 +3,9 @@ "id": "distanthorizons", "version": "${version}", + "provides": "lod", + + "name": "${mod_name}", "description": "${description}", "authors": $authors, From 7fb021010c4ea0d8c81a7df583d7c9655a23f1f5 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 23:25:10 +1030 Subject: [PATCH 21/58] Renamed cursedforge reference in gradle --- build.gradle | 4 +++- fabric/build.gradle | 4 ++-- fabric/src/main/resources/fabric.mod.json | 5 +++-- forge/build.gradle | 6 +++--- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 5d07bb5a6..b97ee24af 100644 --- a/build.gradle +++ b/build.gradle @@ -521,10 +521,12 @@ allprojects { p -> } // Required for importing CursedForge mods + // DONT USE CURSEDFORGE UNLESS NEEDED. Modrinth, and anywhere else is more reliable than cursedforge maven { + name = "CursedForge" url "https://www.cursemaven.com" content { - includeGroup "curse.maven" + includeGroup "maven.curse" } } diff --git a/fabric/build.gradle b/fabric/build.gradle index c2895fc2a..d211a3db8 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -67,10 +67,10 @@ dependencies { // Starlight - addMod("curse.maven:starlight-521783:${rootProject.starlight_version_fabric}", rootProject.enable_starlight) + addMod("maven.curse:starlight-521783:${rootProject.starlight_version_fabric}", rootProject.enable_starlight) // Phosphor - addMod("curse.maven:phosphor-372124:${rootProject.phosphor_version_fabric}", rootProject.enable_phosphor) + addMod("maven.curse:phosphor-372124:${rootProject.phosphor_version_fabric}", rootProject.enable_phosphor) // Sodium addMod("maven.modrinth:sodium:${rootProject.sodium_version}", rootProject.enable_sodium) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index dda42ec55..966bc9c82 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -3,7 +3,7 @@ "id": "distanthorizons", "version": "${version}", - "provides": "lod", + "provides": [ "lod" ], "name": "${mod_name}", @@ -51,7 +51,8 @@ "modmenu": { "links": { "modmenu.discord": "${discord}" - } + }, + "update_checker": false } }, diff --git a/forge/build.gradle b/forge/build.gradle index bc3dc25c3..66372931e 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -80,12 +80,12 @@ dependencies { // } // Starlight - addMod("curse.maven:starlight-forge-526854:${rootProject.starlight_version_forge}", rootProject.enable_starlight_forge) + addMod("maven.curse:starlight-forge-526854:${rootProject.starlight_version_forge}", rootProject.enable_starlight_forge) // annotationProcessor "org.spongepowered:mixin:0.8.4:processor" - addMod("curse.maven:TerraForged-363820:${rootProject.terraforged_version}", rootProject.enable_terraforged) + addMod("maven.curse:TerraForged-363820:${rootProject.terraforged_version}", rootProject.enable_terraforged) - addMod("curse.maven:TerraFirmaCraft-302973:4616004", rootProject.enable_terrafirmacraft) + addMod("maven.curse:TerraFirmaCraft-302973:4616004", rootProject.enable_terrafirmacraft) // if (System.getProperty("idea.sync.active") != "true") { // annotationProcessor "org.spongepowered:mixin:0.8.4:processor" From c3103810dbe791c5899441fac5b2f919f262c621 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 23:41:23 +1030 Subject: [PATCH 22/58] Moved run directory to root of the project --- fabric/build.gradle | 4 ++-- forge/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index d211a3db8..3bd1cad7a 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -11,13 +11,13 @@ loom { client() setConfigName("Fabric Client") ideConfigGenerated(true) - runDir("run") + runDir("../run") } server { server() setConfigName("Fabric Server") ideConfigGenerated(true) - runDir("run") + runDir("../run") } } } diff --git a/forge/build.gradle b/forge/build.gradle index 66372931e..c4de0dd72 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -35,14 +35,14 @@ loom { client() setConfigName("Forge Client") ideConfigGenerated(true) - runDir("run") + runDir("../run") vmArgs("-XX:-OmitStackTraceInFastThrow", minecraftMemoryJavaArg) } server { server() setConfigName("Forge Server") ideConfigGenerated(true) - runDir("run") + runDir("../run") } } } From aa0f274b87aa45352a3aab271dc8085a6609783e Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 3 Oct 2023 23:43:07 +1030 Subject: [PATCH 23/58] Updated root subproject --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index e966d40ae..f81b453c3 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit e966d40ae24ee91df72697b22cb3ddb43f5128d2 +Subproject commit f81b453c39bca440be626023651c96a721ec0418 From 796f45009176e75fbb089ae4969a6955aad94b8e Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 4 Oct 2023 13:02:01 +1030 Subject: [PATCH 24/58] Revert "Renamed cursedforge reference in gradle" This reverts commit 7fb021010c4ea0d8c81a7df583d7c9655a23f1f5. --- build.gradle | 4 +--- fabric/build.gradle | 4 ++-- fabric/src/main/resources/fabric.mod.json | 5 ++--- forge/build.gradle | 6 +++--- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index b97ee24af..5d07bb5a6 100644 --- a/build.gradle +++ b/build.gradle @@ -521,12 +521,10 @@ allprojects { p -> } // Required for importing CursedForge mods - // DONT USE CURSEDFORGE UNLESS NEEDED. Modrinth, and anywhere else is more reliable than cursedforge maven { - name = "CursedForge" url "https://www.cursemaven.com" content { - includeGroup "maven.curse" + includeGroup "curse.maven" } } diff --git a/fabric/build.gradle b/fabric/build.gradle index 3bd1cad7a..84c5e42ac 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -67,10 +67,10 @@ dependencies { // Starlight - addMod("maven.curse:starlight-521783:${rootProject.starlight_version_fabric}", rootProject.enable_starlight) + addMod("curse.maven:starlight-521783:${rootProject.starlight_version_fabric}", rootProject.enable_starlight) // Phosphor - addMod("maven.curse:phosphor-372124:${rootProject.phosphor_version_fabric}", rootProject.enable_phosphor) + addMod("curse.maven:phosphor-372124:${rootProject.phosphor_version_fabric}", rootProject.enable_phosphor) // Sodium addMod("maven.modrinth:sodium:${rootProject.sodium_version}", rootProject.enable_sodium) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 966bc9c82..dda42ec55 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -3,7 +3,7 @@ "id": "distanthorizons", "version": "${version}", - "provides": [ "lod" ], + "provides": "lod", "name": "${mod_name}", @@ -51,8 +51,7 @@ "modmenu": { "links": { "modmenu.discord": "${discord}" - }, - "update_checker": false + } } }, diff --git a/forge/build.gradle b/forge/build.gradle index c4de0dd72..2a2753f91 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -80,12 +80,12 @@ dependencies { // } // Starlight - addMod("maven.curse:starlight-forge-526854:${rootProject.starlight_version_forge}", rootProject.enable_starlight_forge) + addMod("curse.maven:starlight-forge-526854:${rootProject.starlight_version_forge}", rootProject.enable_starlight_forge) // annotationProcessor "org.spongepowered:mixin:0.8.4:processor" - addMod("maven.curse:TerraForged-363820:${rootProject.terraforged_version}", rootProject.enable_terraforged) + addMod("curse.maven:TerraForged-363820:${rootProject.terraforged_version}", rootProject.enable_terraforged) - addMod("maven.curse:TerraFirmaCraft-302973:4616004", rootProject.enable_terrafirmacraft) + addMod("curse.maven:TerraFirmaCraft-302973:4616004", rootProject.enable_terrafirmacraft) // if (System.getProperty("idea.sync.active") != "true") { // annotationProcessor "org.spongepowered:mixin:0.8.4:processor" From 64d2363050e5a8ecf46f524681b24c6c1487e008 Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 4 Oct 2023 13:02:24 +1030 Subject: [PATCH 25/58] Fixed fabric mod json --- fabric/src/main/resources/fabric.mod.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index dda42ec55..2ffe2d3cc 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -2,8 +2,8 @@ "schemaVersion": 1, "id": "distanthorizons", "version": "${version}", - - "provides": "lod", + + "provides": [ "lod" ], "name": "${mod_name}", From 69c5f49c727103b5d7e26f698f97f2686aea9359 Mon Sep 17 00:00:00 2001 From: coolGi Date: Thu, 5 Oct 2023 13:09:45 +1030 Subject: [PATCH 26/58] Seeing if this will fix DH auto-updates on windows --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index f81b453c3..f45a4b8d6 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit f81b453c39bca440be626023651c96a721ec0418 +Subproject commit f45a4b8d621d3981946a14b3389059a1a7b20abe From ec63a025fda087202e302a6a111bc967b6a63886 Mon Sep 17 00:00:00 2001 From: coolGi Date: Thu, 5 Oct 2023 13:12:39 +1030 Subject: [PATCH 27/58] Disabled updating to the same commit --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index f45a4b8d6..18ed2e7ee 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit f45a4b8d621d3981946a14b3389059a1a7b20abe +Subproject commit 18ed2e7eeec8975c66e0a82e5be12870da1d51ea From bee9cce88105670d7abeaf4d0294bb88481ee702 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 6 Oct 2023 16:26:44 +1030 Subject: [PATCH 28/58] Temporary fix for windows file locking --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 18ed2e7ee..1bea96b05 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 18ed2e7eeec8975c66e0a82e5be12870da1d51ea +Subproject commit 1bea96b050f275626dffc84c8366a83591de7de7 From 264a9b66fa67f752c1e74921305de73ad81a3748 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 6 Oct 2023 17:23:17 +1030 Subject: [PATCH 29/58] Fixed (hopefully) updater on Windows --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 1bea96b05..ffb1ce435 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1bea96b050f275626dffc84c8366a83591de7de7 +Subproject commit ffb1ce43552b4b39a68c520317e550140ab73e88 From f39d2d92f7251a6555ba94400af17b6d49c8526a Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 6 Oct 2023 17:24:37 +1030 Subject: [PATCH 30/58] Updated core submodule --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index ffb1ce435..820683783 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit ffb1ce43552b4b39a68c520317e550140ab73e88 +Subproject commit 820683783b3de42eba0cb97d7857cc3fcd970bf4 From 608e2d572303bb2b4ac0e27327e803c6a5346df9 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 6 Oct 2023 18:02:30 +1030 Subject: [PATCH 31/58] Used .renameTo instead of .canWrite to check if file is unlocked --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 820683783..417cf0a89 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 820683783b3de42eba0cb97d7857cc3fcd970bf4 +Subproject commit 417cf0a8917db0865f4d75d0e4b860a76138c1a7 From 71634f509a510343d7e71dfea1551b30f8c6c0d9 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 7 Oct 2023 18:50:46 -0500 Subject: [PATCH 32/58] Update coreSubProjects --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 94b2b6376..94f1d9967 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 94b2b63767466bc7bead77b8cb4d0cae1422e264 +Subproject commit 94f1d99672facf88d8a52aebe10bf90fee07091f From b93c5815c724b8fd69a1690f17b346b5de4bc257 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 7 Oct 2023 20:21:06 -0500 Subject: [PATCH 33/58] Update coreSubProjects --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 1a5bd288c..28649f428 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1a5bd288c863ba062803c9586ab73baeef77d293 +Subproject commit 28649f42878c305f5661a7712d6aabf89286f90f From 5f025808ab53414c59b6271009a24c4a530edcaa Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 7 Oct 2023 21:29:58 -0500 Subject: [PATCH 34/58] Fix singleplayer Forge worlds not updating loaded/saved chunks --- coreSubProjects | 2 +- .../forge/ForgeClientProxy.java | 2 - .../forge/ForgeServerProxy.java | 110 +++++++++--------- 3 files changed, 56 insertions(+), 58 deletions(-) diff --git a/coreSubProjects b/coreSubProjects index 28649f428..f3a83addd 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 28649f42878c305f5661a7712d6aabf89286f90f +Subproject commit f3a83addd40f8b7355eaef5aaa13ee46e6f6c430 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 0b03deb03..8e4218b87 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java @@ -182,8 +182,6 @@ public class ForgeClientProxy } private void onClientBlockChangeEvent(LevelAccessor level, ChunkAccess chunk) { - // TODO rate limit this event per blockPos to prevent spam - // if we have access to the server, use the chunk save event instead if (MC.clientConnectedToDedicatedServer()) { 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 ec2bb59f8..6fa24e8f5 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeServerProxy.java @@ -1,14 +1,16 @@ package com.seibel.distanthorizons.forge; 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 net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.TitleScreen; +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.event.TickEvent; #if PRE_MC_1_19_2 @@ -39,9 +41,9 @@ import java.util.function.Supplier; public class ForgeServerProxy { #if PRE_MC_1_19_2 - private static LevelAccessor GetLevel(WorldEvent e) { return e.getWorld(); } + private static LevelAccessor GetEventLevel(WorldEvent e) { return e.getWorld(); } #else - private static LevelAccessor GetLevel(LevelEvent e) { return e.getLevel(); } + private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); } #endif private final ServerApi serverApi = ServerApi.INSTANCE; @@ -49,34 +51,30 @@ public class ForgeServerProxy private final boolean isDedicated; public static Supplier isGenerationThreadChecker = null; + + //=============// + // constructor // + //=============// + public ForgeServerProxy(boolean isDedicated) { this.isDedicated = isDedicated; isGenerationThreadChecker = BatchGenerationEnvironment::isCurrentThreadDistantGeneratorThread; } - private boolean isValidTime() - { - if (this.isDedicated) - { - return true; - } - - //FIXME: This may cause init issue... - return !(Minecraft.getInstance().screen instanceof TitleScreen); - } - private ServerLevelWrapper getLevelWrapper(ServerLevel level) { return ServerLevelWrapper.getWrapper(level); } + + //========// + // events // + //========// + // ServerTickEvent (at end) @SubscribeEvent public void serverTickEvent(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.END) { - if (this.isValidTime()) - { - this.serverApi.serverTickEvent(); - } + this.serverApi.serverTickEvent(); } } @@ -84,20 +82,14 @@ public class ForgeServerProxy @SubscribeEvent public void dedicatedWorldLoadEvent(#if MC_1_16_5 || MC_1_17_1 FMLServerAboutToStartEvent #else ServerAboutToStartEvent #endif event) { - if (this.isValidTime()) - { - this.serverApi.serverLoadEvent(this.isDedicated); - } + this.serverApi.serverLoadEvent(this.isDedicated); } // ServerWorldUnloadEvent @SubscribeEvent public void serverWorldUnloadEvent(#if MC_1_16_5 || MC_1_17_1 FMLServerStoppingEvent #else ServerStoppingEvent #endif event) { - if (this.isValidTime()) - { - this.serverApi.serverUnloadEvent(); - } + this.serverApi.serverUnloadEvent(); } // ServerLevelLoadEvent @@ -108,12 +100,9 @@ public class ForgeServerProxy public void serverLevelLoadEvent(LevelEvent.Load event) #endif { - if (isValidTime()) + if (GetEventLevel(event) instanceof ServerLevel) { - if (GetLevel(event) instanceof ServerLevel) - { - serverApi.serverLevelLoadEvent(getLevelWrapper((ServerLevel) GetLevel(event))); - } + this.serverApi.serverLevelLoadEvent(this.getServerLevelWrapper((ServerLevel) GetEventLevel(event))); } } @@ -125,40 +114,51 @@ public class ForgeServerProxy public void serverLevelUnloadEvent(LevelEvent.Unload event) #endif { - if (isValidTime()) + if (GetEventLevel(event) instanceof ServerLevel) { - if (GetLevel(event) instanceof ServerLevel) - { - serverApi.serverLevelUnloadEvent(getLevelWrapper((ServerLevel) GetLevel(event))); - } + this.serverApi.serverLevelUnloadEvent(this.getServerLevelWrapper((ServerLevel) GetEventLevel(event))); } } @SubscribeEvent public void serverChunkLoadEvent(ChunkEvent.Load event) { - if (this.isValidTime()) - { - if (GetLevel(event) instanceof ServerLevel) - { - ServerLevelWrapper wrappedLevel = ServerLevelWrapper.getWrapper((ServerLevel) GetLevel(event)); - IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetLevel(event), wrappedLevel); - this.serverApi.serverChunkLoadEvent(chunk, this.getLevelWrapper((ServerLevel) GetLevel(event))); - } - } + ILevelWrapper levelWrapper = getLevelWrapper(GetEventLevel(event)); + + IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), levelWrapper); + this.serverApi.serverChunkLoadEvent(chunk, levelWrapper); } @SubscribeEvent public void serverChunkSaveEvent(ChunkEvent.Unload event) { - if (this.isValidTime()) - { - if (GetLevel(event) instanceof ServerLevel) - { - ServerLevelWrapper wrappedLevel = ServerLevelWrapper.getWrapper((ServerLevel) GetLevel(event)); - IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetLevel(event), wrappedLevel); - this.serverApi.serverChunkSaveEvent(chunk, this.getLevelWrapper((ServerLevel) GetLevel(event))); - } - } + ILevelWrapper levelWrapper = getLevelWrapper(GetEventLevel(event)); + + IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), levelWrapper); + this.serverApi.serverChunkSaveEvent(chunk, levelWrapper); } + + + //================// + // helper methods // + //================// + + private static ServerLevelWrapper getServerLevelWrapper(ServerLevel level) { return ServerLevelWrapper.getWrapper(level); } + + private static ILevelWrapper getLevelWrapper(LevelAccessor level) + { + ILevelWrapper levelWrapper; + if (level instanceof ServerLevel) + { + levelWrapper = ServerLevelWrapper.getWrapper((ServerLevel) level); + } + else + { + levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel) level); + } + + return levelWrapper; + } + + } From 3f6bc262cdc461daf0d85368a201d88421d950d6 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 8 Oct 2023 20:56:48 -0500 Subject: [PATCH 35/58] Fix forge (and fabric) not updating LODs when placing/breaking blocks --- .../wrappers/world/ServerLevelWrapper.java | 2 +- .../fabric/FabricClientProxy.java | 9 +-- .../client/MixinClientPacketListener.java | 3 +- .../forge/ForgeClientProxy.java | 58 +++++++++++-------- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java index 5d354a21c..b6fea22b8 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java @@ -140,7 +140,7 @@ public class ServerLevelWrapper implements IServerLevelWrapper public IChunkWrapper tryGetChunk(DhChunkPos pos) { if (!level.hasChunk(pos.x, pos.z)) return null; - ChunkAccess chunk = level.getChunk(pos.x, pos.z, ChunkStatus.EMPTY, false); + ChunkAccess chunk = level.getChunk(pos.x, pos.z, ChunkStatus.FULL, false); if (chunk == null) return null; return new ChunkWrapper(chunk, level, this); } 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 ed8bf8af3..0bea5de98 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -26,6 +26,7 @@ import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.mojang.blaze3d.platform.InputConstants; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; +import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; @@ -117,7 +118,7 @@ public class FabricClientProxy ClientChunkEvents.CHUNK_LOAD.register((level, chunk) -> { IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper(level); - ClientApi.INSTANCE.clientChunkLoadEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); + SharedApi.INSTANCE.chunkLoadEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); }); // (kinda) block break event @@ -133,7 +134,7 @@ public class FabricClientProxy LOGGER.trace("attack block at blockPos: " + blockPos); IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper((ClientLevel) level); - ClientApi.INSTANCE.clientChunkBlockChangedEvent( + SharedApi.INSTANCE.chunkBlockChangedEvent( new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel ); @@ -160,7 +161,7 @@ public class FabricClientProxy LOGGER.trace("use block at blockPos: " + hitResult.getBlockPos()); IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper((ClientLevel) level); - ClientApi.INSTANCE.clientChunkBlockChangedEvent( + SharedApi.INSTANCE.chunkBlockChangedEvent( new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel ); @@ -177,7 +178,7 @@ public class FabricClientProxy ClientChunkEvents.CHUNK_UNLOAD.register((level, chunk) -> { IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper(level); - ClientApi.INSTANCE.clientChunkSaveEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); + SharedApi.INSTANCE.chunkSaveEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); }); diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java index bb18f3744..a38e84d1f 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientPacketListener.java @@ -2,6 +2,7 @@ package com.seibel.distanthorizons.fabric.mixins.client; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; +import com.seibel.distanthorizons.core.api.internal.SharedApi; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; import org.spongepowered.asm.mixin.Mixin; @@ -57,7 +58,7 @@ public class MixinClientPacketListener void onEnableChunkLight(LevelChunk chunk, int x, int z, CallbackInfo ci) { IClientLevelWrapper clientLevel = ClientLevelWrapper.getWrapper((ClientLevel) chunk.getLevel()); - ClientApi.INSTANCE.clientChunkLoadEvent(new ChunkWrapper(chunk, chunk.getLevel(), clientLevel), clientLevel); + SharedApi.INSTANCE.chunkLoadEvent(new ChunkWrapper(chunk, chunk.getLevel(), clientLevel), clientLevel); } #endif 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 8e4218b87..f82de9e11 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java @@ -20,15 +20,20 @@ package com.seibel.distanthorizons.forge; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; +import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; +import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.distanthorizons.coreapi.ModInfo; //import io.netty.buffer.ByteBuf; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.LevelAccessor; import net.minecraft.client.multiplayer.ClientLevel; @@ -74,7 +79,7 @@ public class ForgeClientProxy #if PRE_MC_1_19_2 private static LevelAccessor GetLevel(WorldEvent e) { return e.getWorld(); } #else - private static LevelAccessor GetLevel(LevelEvent e) { return e.getLevel(); } + private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); } #endif @@ -164,7 +169,7 @@ public class ForgeClientProxy #endif ChunkAccess chunk = level.getChunk(event.getPos()); - this.onClientBlockChangeEvent(level, chunk); + this.onBlockChangeEvent(level, chunk); } @SubscribeEvent public void leftClickBlockEvent(PlayerInteractEvent.LeftClickBlock event) @@ -178,41 +183,28 @@ public class ForgeClientProxy #endif ChunkAccess chunk = level.getChunk(event.getPos()); - this.onClientBlockChangeEvent(level, chunk); + this.onBlockChangeEvent(level, chunk); } - private void onClientBlockChangeEvent(LevelAccessor level, ChunkAccess chunk) + private void onBlockChangeEvent(LevelAccessor level, ChunkAccess chunk) { - // if we have access to the server, use the chunk save event instead - if (MC.clientConnectedToDedicatedServer()) - { - if (chunk != null) - { - IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper((ClientLevel) level); - ClientApi.INSTANCE.clientChunkBlockChangedEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); - } - } + ILevelWrapper wrappedLevel = getLevelWrapper(level); + SharedApi.INSTANCE.chunkBlockChangedEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); } @SubscribeEvent public void clientChunkLoadEvent(ChunkEvent.Load event) { - if (GetLevel(event) instanceof ClientLevel) - { - IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper((ClientLevel) GetLevel(event)); - IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetLevel(event), wrappedLevel); - ClientApi.INSTANCE.clientChunkLoadEvent(chunk, ClientLevelWrapper.getWrapper((ClientLevel) GetLevel(event))); - } + ILevelWrapper wrappedLevel = getLevelWrapper(GetEventLevel(event)); + IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), wrappedLevel); + SharedApi.INSTANCE.chunkLoadEvent(chunk, wrappedLevel); } @SubscribeEvent public void clientChunkUnloadEvent(ChunkEvent.Unload event) { - if (GetLevel(event) instanceof ClientLevel) - { - IClientLevelWrapper wrappedLevel = ClientLevelWrapper.getWrapper((ClientLevel) GetLevel(event)); - IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetLevel(event), wrappedLevel); - ClientApi.INSTANCE.clientChunkSaveEvent(chunk, ClientLevelWrapper.getWrapper((ClientLevel) GetLevel(event))); - } + ILevelWrapper wrappedLevel = getLevelWrapper(GetEventLevel(event)); + IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), wrappedLevel); + SharedApi.INSTANCE.chunkSaveEvent(chunk, wrappedLevel); } @@ -296,4 +288,20 @@ public class ForgeClientProxy } } + + private static ILevelWrapper getLevelWrapper(LevelAccessor level) + { + ILevelWrapper levelWrapper; + if (level instanceof ServerLevel) + { + levelWrapper = ServerLevelWrapper.getWrapper((ServerLevel) level); + } + else + { + levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel) level); + } + + return levelWrapper; + } + } From 17f515ef062bc08f9221d0aef62c77791d7f5dec Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 8 Oct 2023 21:00:54 -0500 Subject: [PATCH 36/58] Move some ForgeApi code into common --- .../common/util/ProxyUtil.java | 47 +++++++++++++++++++ .../forge/ForgeClientProxy.java | 23 ++------- .../forge/ForgeServerProxy.java | 20 ++------ 3 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 common/src/main/java/com/seibel/distanthorizons/common/util/ProxyUtil.java diff --git a/common/src/main/java/com/seibel/distanthorizons/common/util/ProxyUtil.java b/common/src/main/java/com/seibel/distanthorizons/common/util/ProxyUtil.java new file mode 100644 index 000000000..ee805387b --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/util/ProxyUtil.java @@ -0,0 +1,47 @@ +/* + * 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.util; + +import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; +import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; +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.LevelAccessor; + +public class ProxyUtil +{ + + public static ILevelWrapper getLevelWrapper(LevelAccessor level) + { + ILevelWrapper levelWrapper; + if (level instanceof ServerLevel) + { + levelWrapper = ServerLevelWrapper.getWrapper((ServerLevel) level); + } + else + { + levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel) level); + } + + return levelWrapper; + } + +} 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 f82de9e11..d11104254 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.util.ProxyUtil; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; @@ -187,7 +188,7 @@ public class ForgeClientProxy } private void onBlockChangeEvent(LevelAccessor level, ChunkAccess chunk) { - ILevelWrapper wrappedLevel = getLevelWrapper(level); + ILevelWrapper wrappedLevel = ProxyUtil.getLevelWrapper(level); SharedApi.INSTANCE.chunkBlockChangedEvent(new ChunkWrapper(chunk, level, wrappedLevel), wrappedLevel); } @@ -195,14 +196,14 @@ public class ForgeClientProxy @SubscribeEvent public void clientChunkLoadEvent(ChunkEvent.Load event) { - ILevelWrapper wrappedLevel = getLevelWrapper(GetEventLevel(event)); + ILevelWrapper wrappedLevel = ProxyUtil.getLevelWrapper(GetEventLevel(event)); IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), wrappedLevel); SharedApi.INSTANCE.chunkLoadEvent(chunk, wrappedLevel); } @SubscribeEvent public void clientChunkUnloadEvent(ChunkEvent.Unload event) { - ILevelWrapper wrappedLevel = getLevelWrapper(GetEventLevel(event)); + ILevelWrapper wrappedLevel = ProxyUtil.getLevelWrapper(GetEventLevel(event)); IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), wrappedLevel); SharedApi.INSTANCE.chunkSaveEvent(chunk, wrappedLevel); } @@ -288,20 +289,4 @@ public class ForgeClientProxy } } - - private static ILevelWrapper getLevelWrapper(LevelAccessor level) - { - ILevelWrapper levelWrapper; - if (level instanceof ServerLevel) - { - levelWrapper = ServerLevelWrapper.getWrapper((ServerLevel) level); - } - else - { - levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel) level); - } - - return levelWrapper; - } - } 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 6fa24e8f5..46d2f5c6a 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.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; @@ -123,7 +124,7 @@ public class ForgeServerProxy @SubscribeEvent public void serverChunkLoadEvent(ChunkEvent.Load event) { - ILevelWrapper levelWrapper = getLevelWrapper(GetEventLevel(event)); + ILevelWrapper levelWrapper = ProxyUtil.getLevelWrapper(GetEventLevel(event)); IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), levelWrapper); this.serverApi.serverChunkLoadEvent(chunk, levelWrapper); @@ -131,7 +132,7 @@ public class ForgeServerProxy @SubscribeEvent public void serverChunkSaveEvent(ChunkEvent.Unload event) { - ILevelWrapper levelWrapper = getLevelWrapper(GetEventLevel(event)); + ILevelWrapper levelWrapper = ProxyUtil.getLevelWrapper(GetEventLevel(event)); IChunkWrapper chunk = new ChunkWrapper(event.getChunk(), GetEventLevel(event), levelWrapper); this.serverApi.serverChunkSaveEvent(chunk, levelWrapper); @@ -145,20 +146,5 @@ public class ForgeServerProxy private static ServerLevelWrapper getServerLevelWrapper(ServerLevel level) { return ServerLevelWrapper.getWrapper(level); } - private static ILevelWrapper getLevelWrapper(LevelAccessor level) - { - ILevelWrapper levelWrapper; - if (level instanceof ServerLevel) - { - levelWrapper = ServerLevelWrapper.getWrapper((ServerLevel) level); - } - else - { - levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel) level); - } - - return levelWrapper; - } - } From 682fb11e9e6c4938370e8e932a72ed0525c1b8b8 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 8 Oct 2023 21:17:44 -0500 Subject: [PATCH 37/58] Fix render cache clearing deleting the database instead of removing the cache data --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index f3a83addd..83999fd51 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit f3a83addd40f8b7355eaef5aaa13ee46e6f6c430 +Subproject commit 83999fd5164790978231f29a770f2befec97d0bc From 53a6b9fcd08ce7c4078b4472ba1b7bc499e313bd Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 10 Oct 2023 07:01:27 -0500 Subject: [PATCH 38/58] merge in Steveplays Frame/Depth buffer changes --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 83999fd51..82b2bf143 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 83999fd5164790978231f29a770f2befec97d0bc +Subproject commit 82b2bf1434cf3004e0b006e52be9be5fb28bebc6 From 1e9120c6d9733a4f14fa46237a7ff7057c0e6089 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 10 Oct 2023 22:48:20 +1030 Subject: [PATCH 39/58] Relocated the sqlite dependency in the jar --- build.gradle | 3 +++ gradle.properties | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 2f8a632a4..b8aac170a 100644 --- a/build.gradle +++ b/build.gradle @@ -303,6 +303,9 @@ subprojects { p -> // Compression (LZ4) relocate "net.jpountz", "${librariesLocation}.jpountz" + + // Sqlite Database + relocate "org.sqlite", "${librariesLocation}.sqlite" // NightConfig (includes Toml & Json) relocate "com.electronwill.nightconfig", "${librariesLocation}.electronwill.nightconfig" diff --git a/gradle.properties b/gradle.properties index 37a243e5c..b0ac53b24 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,14 +22,13 @@ manifold_version=2023.1.28 toml_version=3.6.4 lz4_version=1.8.0 nightconfig_version=3.6.6 -flatlaf_version=3.0 -svgSalamander_version=1.1.3 +sqlite_jdbc_version=3.43.0.0 +#svgSalamander_version=1.1.3 log4j_version=2.20.0 netty_version=4.1.94.Final lwjgl_version=3.2.3 joml_version=1.10.2 -sqlite_jdbc_version=3.43.0.0 # These are here so they can be changed with cmd arguments From 87c3f5549c3099c0530894bc50c91665c6fc2292 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 10 Oct 2023 22:57:59 +1030 Subject: [PATCH 40/58] Updated core subproject --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 82b2bf143..05c523ffd 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 82b2bf1434cf3004e0b006e52be9be5fb28bebc6 +Subproject commit 05c523ffdf8f670eb5f8b20a73b91231170e3868 From 8fc6d4a1def2e946d5ed4d1f0fbd4cb2860a4f75 Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 10 Oct 2023 23:05:42 +1030 Subject: [PATCH 41/58] Changed self updater location to use the class' path --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 05c523ffd..21b547086 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 05c523ffdf8f670eb5f8b20a73b91231170e3868 +Subproject commit 21b547086334e2c2ca6b5535ed07ba3c14f9a752 From fadc2e7ab4e78e596d70cf1b2a997b2cb46c9e7c Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 11 Oct 2023 01:19:31 +1030 Subject: [PATCH 42/58] Disabled relocation for sqlite (relocation bug on their end) --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b8aac170a..e57e72841 100644 --- a/build.gradle +++ b/build.gradle @@ -305,7 +305,8 @@ subprojects { p -> relocate "net.jpountz", "${librariesLocation}.jpountz" // Sqlite Database - relocate "org.sqlite", "${librariesLocation}.sqlite" + //At the moment, there is a bug in this library which doesnt allow it to be relocated +// relocate "org.sqlite", "${librariesLocation}.sqlite" // NightConfig (includes Toml & Json) relocate "com.electronwill.nightconfig", "${librariesLocation}.electronwill.nightconfig" From d04314a9eee8198ce9f9f4f23545eb0a8f61a00e Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 11 Oct 2023 01:40:15 +1030 Subject: [PATCH 43/58] Fixed compilation for older mc versions --- .../distanthorizons/fabric/mixins/client/MixinClientLevel.java | 3 ++- .../com/seibel/distanthorizons/forge/ForgeClientProxy.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java index 7f7836bd1..4343c34a7 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinClientLevel.java @@ -22,6 +22,7 @@ package com.seibel.distanthorizons.fabric.mixins.client; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; +import com.seibel.distanthorizons.core.api.internal.SharedApi; import net.minecraft.client.multiplayer.ClientLevel; #if POST_MC_1_18_2 #endif @@ -59,7 +60,7 @@ public class MixinClientLevel if (chunk != null && !chunk.isClientLightReady()) { - ClientApi.INSTANCE.clientChunkLoadEvent(new ChunkWrapper(chunk, clientLevel, ClientLevelWrapper.getWrapper(clientLevel)), ClientLevelWrapper.getWrapper(clientLevel)); + SharedApi.INSTANCE.chunkLoadEvent(new ChunkWrapper(chunk, clientLevel, ClientLevelWrapper.getWrapper(clientLevel)), ClientLevelWrapper.getWrapper(clientLevel)); } } #endif 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 d11104254..d9b1144b6 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/ForgeClientProxy.java @@ -78,7 +78,7 @@ public class ForgeClientProxy #if PRE_MC_1_19_2 - private static LevelAccessor GetLevel(WorldEvent e) { return e.getWorld(); } + private static LevelAccessor GetEventLevel(WorldEvent e) { return e.getWorld(); } #else private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); } #endif From 33aded734556daa8ded23a12f4e9eab9843eb18e Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 10 Oct 2023 19:33:10 -0500 Subject: [PATCH 44/58] Fix Light map flickering when multiple client levels are active --- .../minecraft/MinecraftClientWrapper.java | 5 +++-- .../minecraft/MinecraftRenderWrapper.java | 22 +++++++++++-------- coreSubProjects | 2 +- .../fabric/mixins/client/MixinLightmap.java | 12 ++++++++-- .../forge/mixins/client/MixinLightmap.java | 12 ++++++++-- 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java index 66f901834..611172844 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java @@ -31,6 +31,7 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.enums.EDhDirection; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; @@ -211,9 +212,9 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra @Nullable @Override - public ILevelWrapper getWrappedClientWorld() + public IClientLevelWrapper getWrappedClientLevel() { - if (mc.level == null) + if (this.mc.level == null) { return null; } 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 bc8020c4c..13fff0619 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 @@ -22,6 +22,7 @@ package com.seibel.distanthorizons.common.wrappers.minecraft; import java.awt.Color; import java.lang.invoke.MethodHandles; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.stream.Collectors; @@ -40,6 +41,8 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper; #if PRE_MC_1_19_4 import com.mojang.math.Vector3f; #else +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import org.joml.Vector3f; #endif #if MC_1_20_2 @@ -93,7 +96,11 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper private static final IOptifineAccessor OPTIFINE_ACCESSOR = ModAccessorInjector.INSTANCE.get(IOptifineAccessor.class); - public LightMapWrapper lightmap = null; + /** + * In the case of immersive portals multiple levels may be active at once, causing conflicting lightmaps.
+ * Requiring the use of multiple {@link LightMapWrapper}. + */ + public HashMap lightmapByLevelWrapper = new HashMap<>(); @@ -342,10 +349,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper } @Override - public ILightMapWrapper getLightmapWrapper() - { - return lightmap; - } + public ILightMapWrapper getLightmapWrapper(ILevelWrapper level) { return this.lightmapByLevelWrapper.get(level); } @Override public boolean isFogStateSpecial() @@ -365,13 +369,13 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper #endif } - public void updateLightmap(NativeImage lightPixels) + public void updateLightmap(NativeImage lightPixels, IClientLevelWrapper level) { - if (lightmap == null) + if (!this.lightmapByLevelWrapper.containsKey(level)) { - lightmap = new LightMapWrapper(); + this.lightmapByLevelWrapper.put(level, new LightMapWrapper()); } - lightmap.uploadLightmap(lightPixels); + this.lightmapByLevelWrapper.get(level).uploadLightmap(lightPixels); } } diff --git a/coreSubProjects b/coreSubProjects index 82b2bf143..ff90dc04b 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 82b2bf1434cf3004e0b006e52be9be5fb28bebc6 +Subproject commit ff90dc04b7e60d7415aa780934d8a824eb805f7f diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java index 5d37d1d86..e6d886dee 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java @@ -3,6 +3,10 @@ package com.seibel.distanthorizons.fabric.mixins.client; import com.mojang.blaze3d.platform.NativeImage; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.client.renderer.LightTexture; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -16,15 +20,19 @@ public class MixinLightmap { @Shadow @Final - public NativeImage lightPixels; + private NativeImage lightPixels; @Inject(method = "updateLightTexture", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V")) public void updateLightTexture(float f, CallbackInfo ci) { + // since the light map is always updated on the client render thread we should be able to access the client level at the same time + IMinecraftClientWrapper mc = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + IClientLevelWrapper clientLevel = mc.getWrappedClientLevel(); + //ApiShared.LOGGER.info("Lightmap update"); - MinecraftRenderWrapper.INSTANCE.updateLightmap(lightPixels); + MinecraftRenderWrapper.INSTANCE.updateLightmap(this.lightPixels, clientLevel); } } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java index ba7955ef5..c2b2bb9d4 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java @@ -3,6 +3,10 @@ package com.seibel.distanthorizons.forge.mixins.client; import com.mojang.blaze3d.platform.NativeImage; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.client.renderer.LightTexture; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -16,15 +20,19 @@ public class MixinLightmap { @Shadow @Final - public NativeImage lightPixels; + private NativeImage lightPixels; @Inject(method = "updateLightTexture", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V")) public void updateLightTexture(float f, CallbackInfo ci) { + // since the light map is always updated on the client render thread we should be able to access the client level at the same time + IMinecraftClientWrapper mc = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + IClientLevelWrapper clientLevel = mc.getWrappedClientLevel(); + //ApiShared.LOGGER.info("Lightmap update"); - MinecraftRenderWrapper.INSTANCE.updateLightmap(lightPixels); + MinecraftRenderWrapper.INSTANCE.updateLightmap(this.lightPixels, clientLevel); } } From ed64e838070ef8e2f7bfbcb7a2b9f2f328e23c05 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 10 Oct 2023 20:40:55 -0500 Subject: [PATCH 45/58] Re-add OpenGL debug config options, also remove debug LOD update configs --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index fb5b16e55..229e04299 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit fb5b16e557820c91a241849879f8bbb7470048d8 +Subproject commit 229e042994d0e42e06278b55c52994a254fe86ae From 40db006d62625c2bb3126b2b79213d039e138333 Mon Sep 17 00:00:00 2001 From: coolGi Date: Thu, 12 Oct 2023 23:08:12 +1030 Subject: [PATCH 46/58] Fixed compilation for older mc versions (again) --- .../common/wrappers/minecraft/MinecraftRenderWrapper.java | 2 ++ 1 file changed, 2 insertions(+) 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 13fff0619..0b1b91e22 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 @@ -49,6 +49,8 @@ import org.joml.Vector3f; import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; #endif +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; import com.seibel.distanthorizons.coreapi.util.math.Vec3d; import com.seibel.distanthorizons.coreapi.util.math.Vec3f; From adbb9cbc40fbd9899700b4e83acd9ea7bb4194c9 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 12 Oct 2023 07:49:11 -0500 Subject: [PATCH 47/58] Fix SSAO Rendering --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 229e04299..f4e7eb6a3 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 229e042994d0e42e06278b55c52994a254fe86ae +Subproject commit f4e7eb6a3864b7627f0f4446bc4b251a6836665b From 1a48d161d9fecbd5adccf7f4d09b7cddef0f13c9 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 13 Oct 2023 00:07:02 +1030 Subject: [PATCH 48/58] Updater now works with spaces in file paths --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 229e04299..2bf997e88 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 229e042994d0e42e06278b55c52994a254fe86ae +Subproject commit 2bf997e882317ef1cddf02960c7b90dc6c9bbeba From d4c94ea5e478ff88a65b4320783c309c4c4fa154 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 13 Oct 2023 02:00:16 +1030 Subject: [PATCH 49/58] Attempt to find Java's binary to use for the self updater on Windows --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 2bf997e88..ae65fb8e9 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 2bf997e882317ef1cddf02960c7b90dc6c9bbeba +Subproject commit ae65fb8e938bd710f0a8fa915600a5332921ec71 From c0bd3dda197f7ab7785a14ae27b954c173869ec7 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 13 Oct 2023 02:54:32 +1030 Subject: [PATCH 50/58] Surrounded the Java location with quotations so paths with spaces work --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index ae65fb8e9..7f4e5d9e5 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit ae65fb8e938bd710f0a8fa915600a5332921ec71 +Subproject commit 7f4e5d9e58246658cba0952008e2c6abe25b200c From fb4f0b0440e4d90a59cf5451e3df04b069365cfb Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 12 Oct 2023 19:42:53 -0500 Subject: [PATCH 51/58] Improve SSAO class readability --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index f4e7eb6a3..df097b942 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit f4e7eb6a3864b7627f0f4446bc4b251a6836665b +Subproject commit df097b9425b162e43a4e87cd353aebf04357fa8d From a5a01b8a7671dbead3e6d1fe6cc7d34bf7400655 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 12 Oct 2023 19:47:22 -0500 Subject: [PATCH 52/58] Disable the russian translation --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index df097b942..6e87a31e2 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit df097b9425b162e43a4e87cd353aebf04357fa8d +Subproject commit 6e87a31e2e93ddc5912093e6cdc946e320f35fec From c0f8b6729ba5a28eeab51fbef45f8584bb288985 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 12 Oct 2023 21:35:09 -0500 Subject: [PATCH 53/58] Fix missing MC sky --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 6e87a31e2..31971e03d 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 6e87a31e2e93ddc5912093e6cdc946e320f35fec +Subproject commit 31971e03db1fe87289f60d0e418f469d653b19fe From 6d7135ef293c892718230951cf8ff91dd7ffc5c2 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 13 Oct 2023 07:36:44 -0500 Subject: [PATCH 54/58] Fix black chunks when Sodium is installed --- .../distanthorizons/common/wrappers/misc/LightMapWrapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 568b87188..39d1f3e4a 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 @@ -61,7 +61,8 @@ public class LightMapWrapper implements ILightMapWrapper @Override public void bind() { - GL32.glBindTexture(GL32.GL_TEXTURE_2D, textureId); + GL32.glActiveTexture(GL32.GL_TEXTURE0); + GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); } @Override From 4b783df11ee15ffe4193e9175a9e25cbccd3f325 Mon Sep 17 00:00:00 2001 From: coolGi Date: Fri, 13 Oct 2023 23:25:03 +1030 Subject: [PATCH 55/58] Fixed lod's being rendered underwater --- .../wrappers/minecraft/MinecraftRenderWrapper.java | 12 ++++++------ coreSubProjects | 2 +- .../fabric/mixins/client/MixinFogRenderer.java | 2 +- .../forge/mixins/client/MixinFogRenderer.java | 2 +- 4 files changed, 9 insertions(+), 9 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 0b1b91e22..5a4a5dc46 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 @@ -123,6 +123,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper } @Override + /** Unless you really need to know if the player is blind, use {@link MinecraftRenderWrapper#isFogStateSpecial()}/{@link IMinecraftRenderWrapper#isFogStateSpecial()} instead */ public boolean playerHasBlindingEffect() { return MC.player.getActiveEffectsMap().get(MobEffects.BLINDNESS) != null @@ -360,13 +361,12 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera(); FluidState fluidState = camera.getFluidInCamera(); Entity entity = camera.getEntity(); - boolean isUnderWater = (entity instanceof LivingEntity) && ((LivingEntity)entity).hasEffect(MobEffects.BLINDNESS); - isUnderWater |= fluidState.is(FluidTags.WATER); - isUnderWater |= fluidState.is(FluidTags.LAVA); - return isUnderWater; + boolean isBlind = this.playerHasBlindingEffect(); + isBlind |= fluidState.is(FluidTags.WATER); + isBlind |= fluidState.is(FluidTags.LAVA); + return isBlind; #else - Entity entity = MC.gameRenderer.getMainCamera().getEntity(); - boolean isBlind = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS); + boolean isBlind = this.playerHasBlindingEffect(); return MC.gameRenderer.getMainCamera().getFluidInCamera() != FogType.NONE || isBlind; #endif } diff --git a/coreSubProjects b/coreSubProjects index 31971e03d..4b14fe82e 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 31971e03db1fe87289f60d0e418f469d653b19fe +Subproject commit 4b14fe82e7426ee2da22aa28cf9645588dad86b1 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinFogRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinFogRenderer.java index b498e5785..ead892c02 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinFogRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinFogRenderer.java @@ -68,7 +68,7 @@ public class MixinFogRenderer Entity entity = camera.getEntity(); boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS); if (!isSpecialFog && cameraNotInFluid && fogMode == FogMode.FOG_TERRAIN - && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).playerHasBlindingEffect() + && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial() && Config.Client.Advanced.Graphics.Fog.disableVanillaFog.get()) { #if PRE_MC_1_17_1 diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinFogRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinFogRenderer.java index 5e1d20f92..597a9850b 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinFogRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinFogRenderer.java @@ -68,7 +68,7 @@ public class MixinFogRenderer Entity entity = camera.getEntity(); boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS); if (!isSpecialFog && cameraNotInFluid && fogMode == FogMode.FOG_TERRAIN - && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).playerHasBlindingEffect() + && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial() && Config.Client.Advanced.Graphics.Fog.disableVanillaFog.get()) { #if PRE_MC_1_17_1 From 415c553308a5ac6514cb6c093e67e1b7457e3168 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 13 Oct 2023 19:58:12 -0500 Subject: [PATCH 56/58] Add IDhApiRenderProxy for getting/setting framebuffers and textures --- .../minecraft/MinecraftRenderWrapper.java | 15 +++++---------- coreSubProjects | 2 +- 2 files changed, 6 insertions(+), 11 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 5a4a5dc46..2a91bc4e7 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 @@ -36,6 +36,7 @@ import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.render.DhApiRenderProxy; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper; #if PRE_MC_1_19_4 @@ -250,23 +251,17 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper return height; } - private RenderTarget getRenderTarget() - { - RenderTarget r = null; //MC.levelRenderer.getCloudsTarget(); - return r != null ? r : MC.getMainRenderTarget(); - } + private RenderTarget getRenderTarget() { return MC.getMainRenderTarget(); } @Override public int getTargetFrameBuffer() { - return getRenderTarget().frameBufferId; + int frameBufferOverrideId = DhApiRenderProxy.INSTANCE.targetFrameBufferOverride; + return (frameBufferOverrideId == -1) ? this.getRenderTarget().frameBufferId : frameBufferOverrideId; } @Override - public int getDepthTextureId() - { - return getRenderTarget().getDepthTextureId(); - } + public int getDepthTextureId() { return this.getRenderTarget().getDepthTextureId(); } @Override public int getTargetFrameBufferViewportWidth() diff --git a/coreSubProjects b/coreSubProjects index 4b14fe82e..4c2c89de5 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 4b14fe82e7426ee2da22aa28cf9645588dad86b1 +Subproject commit 4c2c89de57290d1a131cf53e41f82d02c869069c From 9443f6d1e519c3317f4cc0362b7f91b19f4bf29f Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 13 Oct 2023 21:56:10 -0500 Subject: [PATCH 57/58] Have GLProxy attempt creating contexts with all supported GL versions --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 4c2c89de5..1e5a4d43f 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 4c2c89de57290d1a131cf53e41f82d02c869069c +Subproject commit 1e5a4d43f7b8cf3eef9172bba524d53986ea0a0a From 71e3e10280b35100c45c236c059bcd9fe3514977 Mon Sep 17 00:00:00 2001 From: coolGi Date: Sat, 14 Oct 2023 22:48:10 +1030 Subject: [PATCH 58/58] Updated core sub-module --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 1e5a4d43f..62bf59f09 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1e5a4d43f7b8cf3eef9172bba524d53986ea0a0a +Subproject commit 62bf59f098a167115d7dbbab3d992aded4b1be0d