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