From 9bcdb6f378783f5f8c6a37df8807572b7849bac1 Mon Sep 17 00:00:00 2001 From: ZtereoHYPE <57519662+ZtereoHYPE@users.noreply.github.com> Date: Tue, 6 Dec 2022 02:01:56 +0100 Subject: [PATCH] new: nebula strength config option + fixed config screen --- .../example/core/NebulaSeedManager.java | 17 +++++++++++++++ .../ztereohype/example/gui/ConfigScreen.java | 10 +++++++++ .../example/mixin/MinecraftMixin.java | 18 ++++++++++++++++ .../example/mixin/MixinStarRendering.java | 21 +++++++++++++------ .../mixin/debug/MixinKeyboardHandler.java | 3 ++- .../ztereohype/example/sky/SkyManager.java | 4 ++++ src/main/resources/nicer_skies.mixins.json | 5 +++-- 7 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 src/main/java/codes/ztereohype/example/core/NebulaSeedManager.java create mode 100644 src/main/java/codes/ztereohype/example/mixin/MinecraftMixin.java diff --git a/src/main/java/codes/ztereohype/example/core/NebulaSeedManager.java b/src/main/java/codes/ztereohype/example/core/NebulaSeedManager.java new file mode 100644 index 0000000..5a4a175 --- /dev/null +++ b/src/main/java/codes/ztereohype/example/core/NebulaSeedManager.java @@ -0,0 +1,17 @@ +package codes.ztereohype.example.core; + +import net.minecraft.client.Minecraft; +import net.minecraft.world.level.Level; + +import java.util.Objects; + +public class NebulaSeedManager { + public static long getSeed() { + if (Minecraft.getInstance().hasSingleplayerServer()) { + // calculate seed from overworld seed + return Objects.hash(Minecraft.getInstance().getSingleplayerServer().getLevel(Level.OVERWORLD).getSeed()); + } else { + return Objects.requireNonNull(Minecraft.getInstance().getCurrentServer()).ip.hashCode(); + } + } +} diff --git a/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java b/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java index 99f0f74..c6b3dc6 100644 --- a/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java +++ b/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java @@ -7,6 +7,7 @@ import codes.ztereohype.example.gui.widget.Separator; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.AbstractSliderButton; +import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Checkbox; import net.minecraft.client.gui.components.CycleButton; import net.minecraft.client.gui.screens.Screen; @@ -73,6 +74,15 @@ public class ConfigScreen extends Screen { NicerSkies.config.setNebulaStrength((float)this.value); } }); + + //reload nebula button +// addRenderableWidget(new Button(this.width / 2 + (this.width / 2 - 150) / 2, 120, 150, 20, Component.literal("Reload Nebula"), (button) -> { +// NicerSkies.skyManager.generateSky(NebulaSeedManager.getSeed()); +// })); + + addRenderableWidget(new Button(this.width / 2 - 100, this.height - 30, 200, 20, Component.literal("Back"), (button) -> { + minecraft.setScreen(lastScreen); + })); } @Override diff --git a/src/main/java/codes/ztereohype/example/mixin/MinecraftMixin.java b/src/main/java/codes/ztereohype/example/mixin/MinecraftMixin.java new file mode 100644 index 0000000..4f7843a --- /dev/null +++ b/src/main/java/codes/ztereohype/example/mixin/MinecraftMixin.java @@ -0,0 +1,18 @@ +package codes.ztereohype.example.mixin; + +import codes.ztereohype.example.NicerSkies; +import codes.ztereohype.example.core.NebulaSeedManager; +import net.minecraft.client.Minecraft; +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; + +@Mixin(Minecraft.class) +public class MinecraftMixin { + @Inject(at = @At("TAIL"), method = "setLevel") + private void onWorldLoad(CallbackInfo ci) { + System.out.println("DONED THE LOADD"); + NicerSkies.skyManager.generateSky(NebulaSeedManager.getSeed()); + } +} diff --git a/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java b/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java index 17ed5ed..48c50c1 100644 --- a/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java +++ b/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java @@ -1,11 +1,11 @@ package codes.ztereohype.example.mixin; import codes.ztereohype.example.NicerSkies; +import codes.ztereohype.example.core.NebulaSeedManager; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexBuffer; +import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; +import lombok.Setter; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.GameRenderer; @@ -29,9 +29,14 @@ public abstract class MixinStarRendering { @Inject(at = @At("HEAD"), method = "createStars", cancellable = true) private void generateStars(CallbackInfo ci) { - NicerSkies.skyManager.generateSky(212421L); starBuffer = new VertexBuffer(); - NicerSkies.skyManager.tick(ticks, starBuffer); + + BufferBuilder builder = Tesselator.getInstance().getBuilder(); + builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + + starBuffer.bind(); + starBuffer.upload(builder.end()); + ci.cancel(); } @@ -57,9 +62,13 @@ public abstract class MixinStarRendering { locals = LocalCapture.CAPTURE_FAILHARD ) private void drawSkybox(PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean bl, Runnable skyFogSetup, CallbackInfo ci, FogType fogType, Vec3 vec3, float f, float g, float h, BufferBuilder bufferBuilder, ShaderInstance shaderInstance, float[] fs, float i, Matrix4f matrix4f2, float k, int r, int s, int m, float t, float o, float p, float q) { - if (!NicerSkies.config.getNebulas()) return; + if (!NicerSkies.config.getNebulas() || !NicerSkies.skyManager.isInitialized()) return; float alpha = 2 * level.getStarBrightness(partialTick) * (1.0F - this.level.getRainLevel(partialTick)); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, alpha); NicerSkies.skyManager.getSkybox().render(poseStack, projectionMatrix); } + +// public void setStarBuffer(VertexBuffer starBuffer) { +// this.starBuffer = starBuffer; +// } } diff --git a/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java b/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java index a02e2b2..18b483f 100644 --- a/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java +++ b/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java @@ -1,6 +1,7 @@ package codes.ztereohype.example.mixin.debug; import codes.ztereohype.example.NicerSkies; +import codes.ztereohype.example.core.NebulaSeedManager; import net.minecraft.client.KeyboardHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -13,7 +14,7 @@ public class MixinKeyboardHandler { private void printKey(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) { // \ key, keydown action if (key == 92 && action == 1) { - NicerSkies.skyManager.generateSky(15156); + NicerSkies.skyManager.generateSky(NebulaSeedManager.getSeed()); // NicerSkies.toggle = !NicerSkies.toggle; } } diff --git a/src/main/java/codes/ztereohype/example/sky/SkyManager.java b/src/main/java/codes/ztereohype/example/sky/SkyManager.java index 0cead73..f718e34 100644 --- a/src/main/java/codes/ztereohype/example/sky/SkyManager.java +++ b/src/main/java/codes/ztereohype/example/sky/SkyManager.java @@ -14,6 +14,7 @@ import java.util.stream.IntStream; public class SkyManager { private @Getter Starbox starbox; private @Getter Skybox skybox; + private @Getter boolean isInitialized = false; private final Gradient starGradient = new Gradient(); private final Gradient nebulaGradient = new Gradient(); @@ -25,6 +26,8 @@ public class SkyManager { buildGradients(); + System.out.println(seed); + RandomSource randomSource = RandomSource.create(seed); //todo: world seed/hash server ip PerlinNoise perlinNoise = PerlinNoise.create(randomSource, IntStream.of(1, 2, 3, 4, 5)); @@ -38,6 +41,7 @@ public class SkyManager { public void tick(int ticks, VertexBuffer starBuffer) { this.starbox.updateStars(ticks, starBuffer); + this.isInitialized = true; } public void buildGradients() { diff --git a/src/main/resources/nicer_skies.mixins.json b/src/main/resources/nicer_skies.mixins.json index e1aa13f..de4b165 100644 --- a/src/main/resources/nicer_skies.mixins.json +++ b/src/main/resources/nicer_skies.mixins.json @@ -5,11 +5,12 @@ "compatibilityLevel": "JAVA_17", "mixins": [], "client": [ - "debug.MixinKeyboardHandler", + "MinecraftMixin", + "MixinLightTexutre", "MixinStarRendering", "debug.LightTextureInvoker", "debug.MixinDebug", - "MixinLightTexutre" + "debug.MixinKeyboardHandler" ], "server": [], "injectors": {