diff --git a/core b/core
index f3b6b15bc..65bfedc94 160000
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit f3b6b15bcbb50fe64a1eb1e2f3d5058474db1e5f
+Subproject commit 65bfedc942c84783614878dd7ae76ff75abee897
diff --git a/common/src/main/java/com/seibel/lod/common/mixins/MixinOptionsScreen.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinOptionsScreen.java
similarity index 98%
rename from common/src/main/java/com/seibel/lod/common/mixins/MixinOptionsScreen.java
rename to fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinOptionsScreen.java
index e22a21c92..6e6b4dbb5 100644
--- a/common/src/main/java/com/seibel/lod/common/mixins/MixinOptionsScreen.java
+++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinOptionsScreen.java
@@ -1,4 +1,4 @@
-package com.seibel.lod.common.mixins;
+package com.seibel.lod.fabric.mixins;
import com.seibel.lod.common.wrappers.config.ConfigGui;
import com.seibel.lod.common.wrappers.config.TexturedButtonWidget;
diff --git a/common/src/main/java/com/seibel/lod/common/mixins/MixinWorldRenderer.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinWorldRenderer.java
similarity index 97%
rename from common/src/main/java/com/seibel/lod/common/mixins/MixinWorldRenderer.java
rename to fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinWorldRenderer.java
index 7986e811b..8af2d6e6d 100644
--- a/common/src/main/java/com/seibel/lod/common/mixins/MixinWorldRenderer.java
+++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinWorldRenderer.java
@@ -17,27 +17,30 @@
* along with this program. If not, see .
*/
-package com.seibel.lod.common.mixins;
+package com.seibel.lod.fabric.mixins;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix4f;
import com.seibel.lod.common.wrappers.McObjectConverter;
-import com.seibel.lod.core.api.ClientApi;
-import com.seibel.lod.core.objects.math.Mat4f;
import net.minecraft.client.renderer.LevelRenderer;
-import net.minecraft.client.renderer.RenderType;
+import org.lwjgl.opengl.GL15;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import com.seibel.lod.core.api.ClientApi;
+import com.seibel.lod.core.objects.math.Mat4f;
+
+import net.minecraft.client.renderer.RenderType;
+
/**
* 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.
- *
+ *
* @author coolGi2007
* @author James Seibel
* @version 11-21-2021
diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json
index 56a6256c4..4148e80fc 100644
--- a/fabric/src/main/resources/fabric.mod.json
+++ b/fabric/src/main/resources/fabric.mod.json
@@ -31,8 +31,7 @@
},
"mixins": [
- "lod.mixins.json",
- "lod.common.mixins.json"
+ "lod.mixins.json"
],
"accessWidener" : "lod.accesswidener",
diff --git a/fabric/src/main/resources/lod.common.mixins.json b/fabric/src/main/resources/lod.common.mixins.json
deleted file mode 100644
index 610c2637e..000000000
--- a/fabric/src/main/resources/lod.common.mixins.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "required": true,
- "minVersion": "0.8",
- "package": "com.seibel.lod.common.mixins",
- "compatibilityLevel": "JAVA_16",
- "mixins": [],
- "client": [
- "MixinOptionsScreen",
- "MixinWorldRenderer"
- ],
- "server": [],
- "injectors": {
- "defaultRequire": 1
- }
-}
\ No newline at end of file
diff --git a/fabric/src/main/resources/lod.mixins.json b/fabric/src/main/resources/lod.mixins.json
index 478d3c133..c44a1469d 100644
--- a/fabric/src/main/resources/lod.mixins.json
+++ b/fabric/src/main/resources/lod.mixins.json
@@ -6,6 +6,8 @@
"mixins": [],
"client": [
"MixinMinecraft",
+ "MixinOptionsScreen",
+ "MixinWorldRenderer",
"events.MixinClientLevel",
"events.MixinMinecraft",
"events.MixinServerLevel"
diff --git a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java
new file mode 100644
index 000000000..45796ea69
--- /dev/null
+++ b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java
@@ -0,0 +1,48 @@
+package com.seibel.lod.forge.mixins;
+
+import com.seibel.lod.common.wrappers.config.ConfigGui;
+import com.seibel.lod.common.wrappers.config.TexturedButtonWidget;
+import com.seibel.lod.core.ModInfo;
+import net.minecraft.client.gui.screens.OptionsScreen;
+import net.minecraft.client.gui.screens.Screen;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.TranslatableComponent;
+import net.minecraft.resources.ResourceLocation;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import java.util.Objects;
+
+/**
+ * Adds a button to the menu to goto the config
+ *
+ * @author coolGi2007
+ * @version 12-02-2021
+ */
+@Mixin(OptionsScreen.class)
+public class MixinOptionsScreen extends Screen {
+ // Get the texture for the button
+ private static final ResourceLocation ICON_TEXTURE = new ResourceLocation(ModInfo.ID,"textures/gui/button.png");
+ protected MixinOptionsScreen(Component title) {
+ super(title);
+ }
+
+ @Inject(at = @At("HEAD"),method = "init")
+ private void lodconfig$init(CallbackInfo ci) {
+ this.addRenderableWidget(new TexturedButtonWidget(
+ // Where the button is on the screen
+ this.width / 2 - 180, this.height / 6 - 12,
+ // Width and height of the button
+ 20, 20,
+ // Offset
+ 0, 0,
+ // Some textuary stuff
+ 20, ICON_TEXTURE, 20, 40,
+ // Create the button and tell it where to go
+ (buttonWidget) -> Objects.requireNonNull(minecraft).setScreen(ConfigGui.getScreen(this, ModInfo.ID, "")),
+ // Add a title to the screen
+ new TranslatableComponent("text.autoconfig." + ModInfo.ID + ".title")));
+ }
+}
diff --git a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinWorldRenderer.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinWorldRenderer.java
new file mode 100644
index 000000000..bccfa4ea5
--- /dev/null
+++ b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinWorldRenderer.java
@@ -0,0 +1,72 @@
+/*
+ * This file is part of the Distant Horizon mod (formerly the LOD Mod),
+ * licensed under the GNU GPL v3 License.
+ *
+ * Copyright (C) 2020 James Seibel
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.seibel.lod.forge.mixins;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import com.mojang.blaze3d.vertex.PoseStack;
+import com.mojang.math.Matrix4f;
+import com.seibel.lod.core.api.ClientApi;
+import com.seibel.lod.core.objects.math.Mat4f;
+import com.seibel.lod.common.wrappers.McObjectConverter;
+
+import net.minecraft.client.renderer.LevelRenderer;
+import net.minecraft.client.renderer.RenderType;
+
+/**
+ * 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.
+ *
+ * @author James Seibel
+ * @version 9-19-2021
+ */
+@Mixin(LevelRenderer.class)
+public class MixinWorldRenderer
+{
+ private static float previousPartialTicks = 0;
+
+ @Inject(at = @At("RETURN"), method = "renderClouds(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/math/Matrix4f;FDDD)V")
+ private void renderClouds(PoseStack modelViewMatrixStack, Matrix4f projectionMatrix, float partialTicks, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, CallbackInfo callback)
+ {
+ // get the partial ticks since renderChunkLayer doesn't
+ // have access to them
+ previousPartialTicks = partialTicks;
+ }
+
+ // HEAD or RETURN
+ @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLcom/mojang/math/Matrix4f;)V")
+ private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback)
+ {
+ // only render before solid blocks
+ if (renderType.equals(RenderType.solid()))
+ {
+ Mat4f mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
+ Mat4f mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
+
+ ClientApi.INSTANCE.renderLods(mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks);
+ }
+ }
+}
\ No newline at end of file
diff --git a/forge/src/main/resources/lod.mixins.json b/forge/src/main/resources/lod.mixins.json
index c02078197..736cf4607 100644
--- a/forge/src/main/resources/lod.mixins.json
+++ b/forge/src/main/resources/lod.mixins.json
@@ -1,11 +1,11 @@
{
"required": true,
- "package": "com.seibel.lod.common.mixins",
+ "package": "com.seibel.lod.forge.mixins",
"compatibilityLevel": "JAVA_16",
"refmap": "lod.refmap.json",
"mixins": [
- "MixinWorldRenderer",
- "MixinOptionsScreen"
+ "MixinWorldRenderer",
+ "MixinOptionsScreen"
],
"minVersion": "0.8"
}
\ No newline at end of file