From c1eba3275e5bdb87ab46c6fc720d28f962e2432d Mon Sep 17 00:00:00 2001 From: Leclowndu93150 Date: Sun, 3 May 2026 21:09:52 +0200 Subject: [PATCH] hydrogen bomb --- build.gradle | 17 ++- gradle.properties | 16 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- .../java/com/goby56/wakes/WakesClient.java | 12 +- .../wakes/config/gui/ColorIntervalSlider.java | 17 +-- .../goby56/wakes/config/gui/ColorPicker.java | 48 ++++---- .../wakes/config/gui/ColorPickerScreen.java | 12 +- .../gui/HsvQuadGuiElementRenderState.java | 2 +- .../wakes/config/gui/TexturedButton.java | 4 +- .../wakes/config/gui/WakesConfigScreen.java | 8 +- .../com/goby56/wakes/duck/LightmapAccess.java | 7 -- .../goby56/wakes/event/WakeWorldTicker.java | 6 +- .../mixin/LightmapTextureManagerMixin.java | 99 ---------------- .../goby56/wakes/particle/ModParticles.java | 6 +- .../particle/custom/SplashCloudParticle.java | 2 +- .../particle/custom/SplashPlaneParticle.java | 3 +- .../goby56/wakes/render/FrustumManager.java | 10 +- .../com/goby56/wakes/render/LightmapInfo.java | 17 --- .../goby56/wakes/render/LightmapWrapper.java | 109 ------------------ .../wakes/render/SplashPlaneRenderer.java | 20 ++-- .../com/goby56/wakes/render/WakeColor.java | 8 ++ .../com/goby56/wakes/render/WakeRenderer.java | 26 ++--- .../goby56/wakes/simulation/WakeChunk.java | 8 +- .../com/goby56/wakes/utils/WakesUtils.java | 13 +-- src/main/resources/fabric.mod.json | 8 +- ...wakes.accesswidener => wakes.classtweaker} | 7 +- src/main/resources/wakes.mixins.json | 1 - 27 files changed, 136 insertions(+), 352 deletions(-) delete mode 100644 src/main/java/com/goby56/wakes/duck/LightmapAccess.java delete mode 100644 src/main/java/com/goby56/wakes/mixin/LightmapTextureManagerMixin.java delete mode 100644 src/main/java/com/goby56/wakes/render/LightmapInfo.java delete mode 100644 src/main/java/com/goby56/wakes/render/LightmapWrapper.java rename src/main/resources/{wakes.accesswidener => wakes.classtweaker} (67%) diff --git a/build.gradle b/build.gradle index c0f8814..7b98d3a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version "${loom_version}" + id 'net.fabricmc.fabric-loom' version "${loom_version}" id 'maven-publish' id 'me.fallenbreath.yamlang' version '1.4.1' } @@ -40,23 +40,22 @@ repositories { } loom { - accessWidenerPath = file("src/main/resources/wakes.accesswidener") + accessWidenerPath = file("src/main/resources/wakes.classtweaker") } dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings loom.officialMojangMappings() - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation include ("maven.modrinth:midnightlib:${project.midnightlib_version}") + implementation include ("maven.modrinth:midnightlib:${project.midnightlib_version}") - modCompileOnly "maven.modrinth:iris:${project.iris_version}" + compileOnly "maven.modrinth:iris:${project.iris_version}" - modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" + implementation "com.terraformersmc:modmenu:${project.modmenu_version}" testImplementation "org.junit.jupiter:junit-jupiter:5.10.0-M1" @@ -75,7 +74,7 @@ processResources { } tasks.withType(JavaCompile).configureEach { - it.options.release = 17 + it.options.release = 25 } java { diff --git a/gradle.properties b/gradle.properties index 802951b..e282228 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,19 +4,19 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.11 -loader_version=0.18.2 -loom_version=1.14-SNAPSHOT +minecraft_version=26.1.2 +loader_version=0.19.2 +loom_version=1.16-SNAPSHOT # Fabric API -fabric_version=0.139.5+1.21.11 +fabric_version=0.148.0+26.1.2 # Mod Properties -mod_version=0.5.1+1.21.11 +mod_version=0.5.1+26.1.2 maven_group=com.goby56.wakes archives_base_name=wakes # Dependencies -midnightlib_version=1.9.2+1.21.11-fabric -iris_version=1.10.2+1.21.11-fabric -modmenu_version=17.0.0-alpha.1 +midnightlib_version=1.9.3+26.1-fabric +iris_version=1.10.9+26.1-fabric +modmenu_version=18.0.0-alpha.8 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 20413ca..e1f0f9a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/goby56/wakes/WakesClient.java b/src/main/java/com/goby56/wakes/WakesClient.java index fef3e80..23481f6 100644 --- a/src/main/java/com/goby56/wakes/WakesClient.java +++ b/src/main/java/com/goby56/wakes/WakesClient.java @@ -13,8 +13,8 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents; -import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerEntityLevelChangeEvents; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.metadata.ModMetadata; import net.irisshaders.iris.api.v0.IrisApi; @@ -51,13 +51,13 @@ public void onInitializeClient() { // Wake handler handling ClientTickEvents.START_CLIENT_TICK.register(new WakeClientTicker()); - ClientTickEvents.END_WORLD_TICK.register(new WakeWorldTicker()); - ServerEntityWorldChangeEvents.AFTER_PLAYER_CHANGE_WORLD.register(new WakeWorldTicker()); + ClientTickEvents.END_LEVEL_TICK.register(new WakeWorldTicker()); + ServerEntityLevelChangeEvents.AFTER_PLAYER_CHANGE_LEVEL.register(new WakeWorldTicker()); // Rendering events wakeRenderer = new WakeRenderer(); - WorldRenderEvents.END_MAIN.register(wakeRenderer); - WorldRenderEvents.END_MAIN.register(new SplashPlaneRenderer()); + LevelRenderEvents.END_MAIN.register(wakeRenderer); + LevelRenderEvents.END_MAIN.register(new SplashPlaneRenderer()); SplashPlaneRenderer.initSplashPlane(); DebugScreenEntries.register( diff --git a/src/main/java/com/goby56/wakes/config/gui/ColorIntervalSlider.java b/src/main/java/com/goby56/wakes/config/gui/ColorIntervalSlider.java index e7c1667..9fe4e18 100644 --- a/src/main/java/com/goby56/wakes/config/gui/ColorIntervalSlider.java +++ b/src/main/java/com/goby56/wakes/config/gui/ColorIntervalSlider.java @@ -6,8 +6,10 @@ import com.goby56.wakes.simulation.WakeHandler; import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.AbstractSliderButton; +import net.minecraft.resources.Identifier; +import net.minecraft.util.ARGB; import net.minecraft.network.chat.Component; import java.util.ArrayList; @@ -46,12 +48,13 @@ private void unfocusHandles() { } } + private static final Identifier SLIDER_SPRITE = Identifier.withDefaultNamespace("widget/slider"); + private static final Identifier SLIDER_HIGHLIGHTED_SPRITE = Identifier.withDefaultNamespace("widget/slider_highlighted"); + @Override - public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { - //RenderSystem.enableBlend(); - //RenderSystem.defaultBlendFunc(); - //RenderSystem.enableDepthTest(); - context.blitSprite(RenderPipelines.GUI_TEXTURED, this.getSprite(), this.getX(), this.getY(), this.getWidth(), this.getHeight()); + public void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { + Identifier sliderSprite = this.isActive() && this.isFocused() ? SLIDER_HIGHLIGHTED_SPRITE : SLIDER_SPRITE; + context.blitSprite(RenderPipelines.GUI_TEXTURED, sliderSprite, this.getX(), this.getY(), this.getWidth(), this.getHeight(), ARGB.white(this.alpha)); this.isHovered = context.containsPointInScissor(mouseX, mouseY) && mouseX >= this.getX() && mouseY >= this.getY() && mouseX < this.getX() + this.width && mouseY < this.getY() + this.height; int n = handles.size(); @@ -74,7 +77,7 @@ public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delt boolean correctY = mouseY >= getY() && mouseY < getY() + height; for (SliderHandle handle : handles) { boolean isHovered = handle.inProximity(hoveredVal, width, 8) && correctY; - context.blitSprite(RenderPipelines.GUI_TEXTURED, handle.getHandleTexture(isHovered), this.getX() + (int)(handle.value * (double)(this.width - 4)), this.getY(), 8, this.getHeight()); + context.blitSprite(RenderPipelines.GUI_TEXTURED, handle.getHandleTexture(isHovered), this.getX() + (int)(handle.value * (double)(this.width - 4)), this.getY(), 8, this.getHeight(), ARGB.white(this.alpha)); } } diff --git a/src/main/java/com/goby56/wakes/config/gui/ColorPicker.java b/src/main/java/com/goby56/wakes/config/gui/ColorPicker.java index ec878c2..dfab80b 100644 --- a/src/main/java/com/goby56/wakes/config/gui/ColorPicker.java +++ b/src/main/java/com/goby56/wakes/config/gui/ColorPicker.java @@ -9,13 +9,14 @@ import net.minecraft.client.input.KeyEvent; import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.resources.Identifier; +import net.minecraft.util.ARGB; import net.minecraft.client.gui.components.AbstractSliderButton; import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; -import net.minecraft.util.Mth; import org.joml.Matrix3x2f; import org.joml.Vector2f; @@ -164,18 +165,17 @@ public void updateColor() { } @Override - protected void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { + protected void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { if (!active) return; context.blit(RenderPipelines.GUI_TEXTURED, PICKER_BG_TEXTURE, colorPickerBounds.x, colorPickerBounds.y, 0, 0, colorPickerBounds.width, colorPickerBounds.height, colorPickerBounds.width, colorPickerBounds.height); context.blit(RenderPipelines.GUI_TEXTURED, FRAME_TEXTURE, colorPickerBounds.x, colorPickerBounds.y, 0, 0, colorPickerBounds.width, colorPickerBounds.height, colorPickerBounds.width, colorPickerBounds.height); drawPickerBox(context); - // Draw picker knob int d = pickerKnobDim; context.blit(RenderPipelines.GUI_TEXTURED, PICKER_KNOB_TEXTURE, (int) pickerPos.x - 3, (int) pickerPos.y - 3, 0, 0, d, d, d, d); } - private void drawPickerBox(GuiGraphics context) { + private void drawPickerBox(GuiGraphicsExtractor context) { int y = colorPickerBounds.y + 3; int x = colorPickerBounds.x + 3; int w = colorPickerBounds.width - 6; @@ -183,7 +183,7 @@ private void drawPickerBox(GuiGraphics context) { int hue = (int) (((ColorPickerSlider) this.widgets.get("hueSlider").getWidget()).getValue() * 255); - context.guiRenderState.submitGuiElement(new HsvQuadGuiElementRenderState( + context.guiRenderState.addGuiElement(new HsvQuadGuiElementRenderState( new Matrix3x2f(context.pose()), x, y, w, h, 0x7F0000FF | hue << 16, @@ -239,7 +239,6 @@ public HexInputField(AABB bounds, ColorPicker colorPicker, Font textRenderer) { this.setMaxLength(9); // #AARRGGBB this.bounds = bounds; this.colorPicker = colorPicker; - this.setFilter(HexInputField::validHex); this.hexColorRegex = Pattern.compile("#[a-f0-9]{7,9}", Pattern.CASE_INSENSITIVE); } @@ -256,16 +255,17 @@ protected void onValueChange(String newText) { super.onValueChange(newText); } - private static boolean validHex(String text) { - if (text.length() > 9) { - return false; - } - for (char c : text.toLowerCase().toCharArray()) { - if (Character.digit(c, 16) == -1 && c != '#') { - return false; + @Override + public void insertText(String input) { + StringBuilder filtered = new StringBuilder(); + for (char c : input.toCharArray()) { + if (Character.digit(Character.toLowerCase(c), 16) != -1 || c == '#') { + filtered.append(c); } } - return true; + if (!filtered.isEmpty()) { + super.insertText(filtered.toString()); + } } public void setActive(boolean active) { @@ -337,12 +337,18 @@ public float getValue() { return (float) this.value; } + private static final Identifier SLIDER_SPRITE = Identifier.withDefaultNamespace("widget/slider"); + private static final Identifier SLIDER_HIGHLIGHTED_SPRITE = Identifier.withDefaultNamespace("widget/slider_highlighted"); + private static final Identifier SLIDER_HANDLE_SPRITE = Identifier.withDefaultNamespace("widget/slider_handle"); + private static final Identifier SLIDER_HANDLE_HIGHLIGHTED_SPRITE = Identifier.withDefaultNamespace("widget/slider_handle_highlighted"); + @Override - public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { - context.blitSprite(RenderPipelines.GUI_TEXTURED, this.getSprite(), this.getX(), this.getY(), this.getWidth(), this.getHeight()); + public void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { + Identifier sliderSprite = this.isActive() && this.isFocused() ? SLIDER_HIGHLIGHTED_SPRITE : SLIDER_SPRITE; + context.blitSprite(RenderPipelines.GUI_TEXTURED, sliderSprite, this.getX(), this.getY(), this.getWidth(), this.getHeight(), ARGB.white(this.alpha)); if (this.type.equals(SliderUpdateType.HUE)) { - context.guiRenderState.submitGuiElement(new HsvQuadGuiElementRenderState( + context.guiRenderState.addGuiElement(new HsvQuadGuiElementRenderState( new Matrix3x2f(context.pose()), this.getX() + 1, this.getY() + 1, this.getWidth() - 2, this.getHeight() - 2, 0x4000FFFF, @@ -353,9 +359,9 @@ public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delt ) ); } - context.blitSprite(RenderPipelines.GUI_TEXTURED, this.getHandleSprite(), this.getX() + (int)(this.value * (double)(this.width - 8)), this.getY(), 8, this.getHeight()); - int i = this.active ? 0xFFFFFF : 0xA0A0A0; - this.renderScrollingStringOverContents(context.textRenderer(), this.message, i | Mth.ceil(this.alpha * 255.0f) << 24); + Identifier handleSprite = !this.isActive() || !this.isHovered && !this.canChangeValue ? SLIDER_HANDLE_SPRITE : SLIDER_HANDLE_HIGHLIGHTED_SPRITE; + context.blitSprite(RenderPipelines.GUI_TEXTURED, handleSprite, this.getX() + (int)(this.value * (double)(this.width - 8)), this.getY(), 8, this.getHeight(), ARGB.white(this.alpha)); + this.extractScrollingStringOverContents(context.textRendererForWidget(this, GuiGraphicsExtractor.HoveredTextEffects.NONE), this.getMessage(), 2); } @Override diff --git a/src/main/java/com/goby56/wakes/config/gui/ColorPickerScreen.java b/src/main/java/com/goby56/wakes/config/gui/ColorPickerScreen.java index 2eaf957..ef6a103 100644 --- a/src/main/java/com/goby56/wakes/config/gui/ColorPickerScreen.java +++ b/src/main/java/com/goby56/wakes/config/gui/ColorPickerScreen.java @@ -6,7 +6,7 @@ import com.goby56.wakes.utils.WakesUtils; import com.google.common.collect.Lists; import eu.midnightdust.lib.config.MidnightConfig; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; @@ -79,16 +79,16 @@ public void onClose() { } @Override - public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { - super.render(context, mouseX, mouseY, delta); - context.drawCenteredString(font, WakesUtils.translatable("gui", "colorIntervalSlider", "title"), width / 2, 10, 0xffffffff); + public void extractRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { + super.extractRenderState(context, mouseX, mouseY, delta); + context.centeredText(font, WakesUtils.translatable("gui", "colorIntervalSlider", "title"), width / 2, 10, 0xffffffff); if (this.showInfoText) { - context.drawWordWrap(font, WakesUtils.translatable("gui", "colorIntervalSlider", "infoText"), width - 325, height - 45, 320, 0xffffffff, true); + context.textWithWordWrap(font, WakesUtils.translatable("gui", "colorIntervalSlider", "infoText"), width - 325, height - 45, 320, 0xffffffff); } } @Override - protected void renderBlurredBackground(GuiGraphics context) { + protected void extractBlurredBackground(GuiGraphicsExtractor context) { } diff --git a/src/main/java/com/goby56/wakes/config/gui/HsvQuadGuiElementRenderState.java b/src/main/java/com/goby56/wakes/config/gui/HsvQuadGuiElementRenderState.java index edfa24f..5476862 100644 --- a/src/main/java/com/goby56/wakes/config/gui/HsvQuadGuiElementRenderState.java +++ b/src/main/java/com/goby56/wakes/config/gui/HsvQuadGuiElementRenderState.java @@ -3,9 +3,9 @@ import com.goby56.wakes.WakesClient; import com.mojang.blaze3d.pipeline.RenderPipeline; import net.minecraft.client.gui.navigation.ScreenRectangle; -import net.minecraft.client.gui.render.state.GuiElementRenderState; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.gui.render.TextureSetup; +import net.minecraft.client.renderer.state.gui.GuiElementRenderState; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2f; diff --git a/src/main/java/com/goby56/wakes/config/gui/TexturedButton.java b/src/main/java/com/goby56/wakes/config/gui/TexturedButton.java index 34bb908..9d709d1 100644 --- a/src/main/java/com/goby56/wakes/config/gui/TexturedButton.java +++ b/src/main/java/com/goby56/wakes/config/gui/TexturedButton.java @@ -1,7 +1,7 @@ package com.goby56.wakes.config.gui; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; @@ -22,7 +22,7 @@ public static com.goby56.wakes.config.gui.TexturedButton.Builder builder(Button. } @Override - protected void renderContents(GuiGraphics context, int mouseX, int mouseY, float delta) { + protected void extractContents(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { int tw = this.textureWidth; int th = this.textureHeight; int x = this.getX() + this.getWidth() / 2 - this.textureWidth / 2; diff --git a/src/main/java/com/goby56/wakes/config/gui/WakesConfigScreen.java b/src/main/java/com/goby56/wakes/config/gui/WakesConfigScreen.java index 1cd3866..057d1ad 100644 --- a/src/main/java/com/goby56/wakes/config/gui/WakesConfigScreen.java +++ b/src/main/java/com/goby56/wakes/config/gui/WakesConfigScreen.java @@ -2,7 +2,7 @@ import com.goby56.wakes.utils.WakesUtils; import eu.midnightdust.lib.config.MidnightConfig; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; @@ -25,9 +25,9 @@ protected void init() { } @Override - public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { - super.render(context, mouseX, mouseY, delta); - context.drawCenteredString(font, this.title, width / 2, 10, 0xffffff); + public void extractRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) { + super.extractRenderState(context, mouseX, mouseY, delta); + context.centeredText(font, this.title, width / 2, 10, 0xffffff); } } diff --git a/src/main/java/com/goby56/wakes/duck/LightmapAccess.java b/src/main/java/com/goby56/wakes/duck/LightmapAccess.java deleted file mode 100644 index 48f33eb..0000000 --- a/src/main/java/com/goby56/wakes/duck/LightmapAccess.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.goby56.wakes.duck; - -import com.goby56.wakes.render.LightmapInfo; - -public interface LightmapAccess { - LightmapInfo wakes$getLightmapInfo(); -} diff --git a/src/main/java/com/goby56/wakes/event/WakeWorldTicker.java b/src/main/java/com/goby56/wakes/event/WakeWorldTicker.java index e02e54f..9351432 100644 --- a/src/main/java/com/goby56/wakes/event/WakeWorldTicker.java +++ b/src/main/java/com/goby56/wakes/event/WakeWorldTicker.java @@ -5,12 +5,12 @@ import com.goby56.wakes.simulation.WakeHandler; import com.goby56.wakes.debug.WakesDebugInfo; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerEntityLevelChangeEvents; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerLevel; -public class WakeWorldTicker implements ClientTickEvents.EndWorldTick, ServerEntityWorldChangeEvents.AfterPlayerChange { +public class WakeWorldTicker implements ClientTickEvents.EndLevelTick, ServerEntityLevelChangeEvents.AfterPlayerChange { @Override public void onEndTick(ClientLevel world) { @@ -21,7 +21,7 @@ public void onEndTick(ClientLevel world) { } @Override - public void afterChangeWorld(ServerPlayer player, ServerLevel origin, ServerLevel destination) { + public void afterChangeLevel(ServerPlayer player, ServerLevel origin, ServerLevel destination) { WakeHandler.init(destination); } } diff --git a/src/main/java/com/goby56/wakes/mixin/LightmapTextureManagerMixin.java b/src/main/java/com/goby56/wakes/mixin/LightmapTextureManagerMixin.java deleted file mode 100644 index 1b16126..0000000 --- a/src/main/java/com/goby56/wakes/mixin/LightmapTextureManagerMixin.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.goby56.wakes.mixin; - -import com.goby56.wakes.duck.LightmapAccess; -import com.goby56.wakes.render.LightmapInfo; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.EndFlashState; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.util.ARGB; -import net.minecraft.world.attribute.EnvironmentAttributeProbe; -import net.minecraft.world.attribute.EnvironmentAttributes; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.LivingEntity; -import org.joml.Vector3f; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -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.callback.CallbackInfo; - -@Mixin(LightTexture.class) -public abstract class LightmapTextureManagerMixin implements LightmapAccess { - @Shadow private float blockLightRedFlicker; - @Shadow @Final private Minecraft minecraft; - @Shadow @Final private GameRenderer renderer; - @Shadow protected abstract float calculateDarknessScale(LivingEntity entity, float factor, float tickProgress); - - @Unique - private int currentTick; - - @Unique - private LightmapInfo info; - - @Inject(method = "updateLightTexture", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/CommandEncoder;createRenderPass(Ljava/util/function/Supplier;Lcom/mojang/blaze3d/textures/GpuTextureView;Ljava/util/OptionalInt;)Lcom/mojang/blaze3d/systems/RenderPass;")) - private void wakes$onUpdate(float tickProgress, CallbackInfo ci) { - ClientLevel world = this.minecraft.level; - if (world == null || this.minecraft.player == null) { - return; - } - - EnvironmentAttributeProbe probe = this.minecraft.gameRenderer.getMainCamera().attributeProbe(); - int skyLightColorRgb = ((Integer) probe.getValue(EnvironmentAttributes.SKY_LIGHT_COLOR, tickProgress)).intValue(); - float skyFactor = ((Float) probe.getValue(EnvironmentAttributes.SKY_LIGHT_FACTOR, tickProgress)).floatValue(); - - EndFlashState endFlashState = world.endFlashState(); - Vector3f ambientColor; - if (endFlashState != null) { - ambientColor = new Vector3f(0.99f, 1.12f, 1.0f); - if (!this.minecraft.options.hideLightningFlash().get()) { - float intensity = endFlashState.getIntensity(tickProgress); - if (this.minecraft.gui.getBossOverlay().shouldCreateWorldFog()) { - skyFactor += intensity / 3.0f; - } else { - skyFactor += intensity; - } - } - } else { - ambientColor = new Vector3f(1.0f, 1.0f, 1.0f); - } - - float darknessScaleSetting = this.minecraft.options.darknessEffectScale().get().floatValue(); - float darknessBlend = this.minecraft.player.getEffectBlendFactor(MobEffects.DARKNESS, tickProgress) * darknessScaleSetting; - float darknessScale = this.calculateDarknessScale(this.minecraft.player, darknessBlend, tickProgress) * darknessScaleSetting; - - float waterVision = this.minecraft.player.getWaterVision(); - float nightVisionFactor; - if (this.minecraft.player.hasEffect(MobEffects.NIGHT_VISION)) { - nightVisionFactor = GameRenderer.getNightVisionScale(this.minecraft.player, tickProgress); - } else if (waterVision > 0.0f && this.minecraft.player.hasEffect(MobEffects.CONDUIT_POWER)) { - nightVisionFactor = waterVision; - } else { - nightVisionFactor = 0.0f; - } - - float blockFactor = this.blockLightRedFlicker + 1.5f; - float brightnessFactor = Math.max(0.0f, this.minecraft.options.gamma().get().floatValue() - darknessBlend); - - this.info = new LightmapInfo( - world.dimensionType().ambientLight(), - skyFactor, - blockFactor, - nightVisionFactor, - darknessScale, - this.renderer.getDarkenWorldAmount(tickProgress), - brightnessFactor, - ARGB.vector3fFromRGB24(skyLightColorRgb), - ambientColor, - currentTick++ - ); - } - - @Override - public LightmapInfo wakes$getLightmapInfo() { - return info; - } -} diff --git a/src/main/java/com/goby56/wakes/particle/ModParticles.java b/src/main/java/com/goby56/wakes/particle/ModParticles.java index ff0a30b..3b283a3 100644 --- a/src/main/java/com/goby56/wakes/particle/ModParticles.java +++ b/src/main/java/com/goby56/wakes/particle/ModParticles.java @@ -3,7 +3,7 @@ import com.goby56.wakes.WakesClient; import com.goby56.wakes.particle.custom.SplashCloudParticle; import com.goby56.wakes.particle.custom.SplashPlaneParticle; -import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import net.fabricmc.fabric.api.client.particle.v1.ParticleProviderRegistry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.Registry; import net.minecraft.resources.Identifier; @@ -14,9 +14,9 @@ public class ModParticles { public static void registerParticles() { SPLASH_PLANE = Registry.register(BuiltInRegistries.PARTICLE_TYPE, Identifier.fromNamespaceAndPath(WakesClient.MOD_ID, "splash_plane"), new WithOwnerParticleType(true)); - ParticleFactoryRegistry.getInstance().register(SPLASH_PLANE, SplashPlaneParticle.Factory::new); + ParticleProviderRegistry.getInstance().register(SPLASH_PLANE, SplashPlaneParticle.Factory::new); SPLASH_CLOUD = Registry.register(BuiltInRegistries.PARTICLE_TYPE, Identifier.fromNamespaceAndPath(WakesClient.MOD_ID, "splash_cloud"), new WithOwnerParticleType(true)); - ParticleFactoryRegistry.getInstance().register(SPLASH_CLOUD, SplashCloudParticle.Factory::new); + ParticleProviderRegistry.getInstance().register(SPLASH_CLOUD, SplashCloudParticle.Factory::new); } } diff --git a/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java b/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java index 9a0a77a..e5dfdac 100644 --- a/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java +++ b/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java @@ -38,7 +38,7 @@ public SplashCloudParticle(ClientLevel world, Entity owner, double x, double y, this.lifetime = this.isFromPaddles ? (int) (WakeNode.maxAge * 1.5) : WakeNode.maxAge / 3; - this.setSprite(sprites.get(world.random)); + this.setSprite(sprites.get(world.getRandom())); this.offset = velocityX; this.quadSize = isFromPaddles ? quadSize * 2 : 0.3f; diff --git a/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java b/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java index 2111f11..93ccaae 100644 --- a/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java +++ b/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java @@ -10,6 +10,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleProvider; @@ -148,7 +149,7 @@ public void updateYaw(float tickDelta) { public void translateMatrix(Camera camera, PoseStack matrices) { Vec3 cameraPos = camera.position(); - float tickDelta = camera.getPartialTickTime(); + float tickDelta = Minecraft.getInstance().getDeltaTracker().getGameTimeDeltaPartialTick(true); float x = (float) (Mth.lerp(tickDelta, this.xo, this.x) - cameraPos.x()); float y = (float) (Mth.lerp(tickDelta, this.yo, this.y) - cameraPos.y()); float z = (float) (Mth.lerp(tickDelta, this.zo, this.z) - cameraPos.z()); diff --git a/src/main/java/com/goby56/wakes/render/FrustumManager.java b/src/main/java/com/goby56/wakes/render/FrustumManager.java index 76c0398..fbd2773 100644 --- a/src/main/java/com/goby56/wakes/render/FrustumManager.java +++ b/src/main/java/com/goby56/wakes/render/FrustumManager.java @@ -1,11 +1,11 @@ package com.goby56.wakes.render; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldExtractionContext; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelExtractionContext; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderEvents; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.world.phys.AABB; -public class FrustumManager implements WorldRenderEvents.EndExtraction { +public class FrustumManager implements LevelRenderEvents.EndExtraction { private static Frustum frustum; public static boolean isVisible(AABB aabb) { @@ -16,7 +16,7 @@ public static boolean isVisible(AABB aabb) { } @Override - public void endExtraction(WorldExtractionContext context) { - frustum = context.frustum(); + public void endExtraction(LevelExtractionContext context) { + frustum = context.camera().getCapturedFrustum(); } } diff --git a/src/main/java/com/goby56/wakes/render/LightmapInfo.java b/src/main/java/com/goby56/wakes/render/LightmapInfo.java deleted file mode 100644 index debf35f..0000000 --- a/src/main/java/com/goby56/wakes/render/LightmapInfo.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.goby56.wakes.render; - -import org.joml.Vector3f; - -public record LightmapInfo( - float ambientLightFactor, - float skyFactor, - float blockFactor, - float nightVisionFactor, - float darknessScale, - float darkenWorldFactor, - float brightnessFactor, - Vector3f skyLightColor, - Vector3f ambientColor, - int currentTick -) { -} diff --git a/src/main/java/com/goby56/wakes/render/LightmapWrapper.java b/src/main/java/com/goby56/wakes/render/LightmapWrapper.java deleted file mode 100644 index 7096279..0000000 --- a/src/main/java/com/goby56/wakes/render/LightmapWrapper.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.goby56.wakes.render; - -import com.goby56.wakes.duck.LightmapAccess; -import net.minecraft.client.Minecraft; -import net.minecraft.util.ARGB; -import net.minecraft.util.Mth; -import org.joml.Matrix4f; -import org.joml.Vector3f; - -public class LightmapWrapper { - private static final int[][] color = new int[16][16]; - private static final int[][] tick = new int[16][16]; - - private static float mix(float x, float y, float a) { - return x * (1.0f - a) + y * a; - } - - private static float getBrightness(float level) { - return level / (4.0f - 3.0f * level); - } - - // Mirrors assets/minecraft/shaders/core/lightmap.fsh - private static Vector3f notGamma(Vector3f color) { - float maxComponent = Math.max(color.x, Math.max(color.y, color.z)); - if (maxComponent <= 0.0f) { - return new Vector3f(0.0f, 0.0f, 0.0f); - } - - float maxInverted = 1.0f - maxComponent; - float maxScaled = 1.0f - maxInverted * maxInverted * maxInverted * maxInverted; - float scale = maxScaled / maxComponent; - return new Vector3f(color).mul(scale); - } - - private static Vector3f mix3(Vector3f color, Vector3f c2, float v) { - return new Vector3f( - mix(color.x, c2.x, v), - mix(color.y, c2.y, v), - mix(color.z, c2.z, v) - ); - } - - private static Vector3f clamp3(Vector3f color, float min, float max) { - return color.set( - Mth.clamp(color.x, min, max), - Mth.clamp(color.y, min, max), - Mth.clamp(color.z, min, max) - ); - } - - private static int calculatePixel(LightmapInfo info, int block, int sky) { - float blockBrightness = getBrightness(block / 15.0f) * info.blockFactor(); - float skyBrightness = getBrightness(sky / 15.0f) * info.skyFactor(); - - // cubic nonsense, dips to yellowish in the middle, white when fully saturated - Vector3f c = new Vector3f( - blockBrightness, - blockBrightness * ((blockBrightness * 0.6f + 0.4f) * 0.6f + 0.4f), - blockBrightness * (blockBrightness * blockBrightness * 0.6f + 0.4f) - ); - - c = mix3(c, info.ambientColor(), info.ambientLightFactor()); - c.add(new Vector3f(info.skyLightColor()).mul(skyBrightness)); - c = mix3(c, new Vector3f(0.75f), 0.04f); - - if (info.ambientLightFactor() == 0.0f) { - Vector3f darkened = new Vector3f(c).mul(0.7f, 0.6f, 0.6f); - c = mix3(c, darkened, info.darkenWorldFactor()); - } - - if (info.nightVisionFactor() > 0.0f) { - float maxComponent = Math.max(c.x, Math.max(c.y, c.z)); - if (maxComponent > 0.0f && maxComponent < 1.0f) { - Vector3f bright = new Vector3f(c).div(maxComponent); - c = mix3(c, bright, info.nightVisionFactor()); - } - } - - if (info.ambientLightFactor() == 0.0f) { - c.sub(info.darknessScale(), info.darknessScale(), info.darknessScale()); - } - - c = clamp3(c, 0.0f, 1.0f); - c = mix3(c, notGamma(c), info.brightnessFactor()); - c = mix3(c, new Vector3f(0.75f), 0.04f); - - return ARGB.colorFromFloat(1.0f, c.x, c.y, c.z); - } - - public static int readPixel(int block, int sky) { - LightmapInfo info = ((LightmapAccess) Minecraft.getInstance().gameRenderer.lightTexture()) - .wakes$getLightmapInfo(); - - if (info == null) { - return color[block][sky]; - } - - if (tick[block][sky] != info.currentTick()) { - tick[block][sky] = info.currentTick(); - color[block][sky] = calculatePixel(info, block, sky); - } - - return color[block][sky]; - } - - public static void render(Matrix4f matrix) { - - } -} diff --git a/src/main/java/com/goby56/wakes/render/SplashPlaneRenderer.java b/src/main/java/com/goby56/wakes/render/SplashPlaneRenderer.java index ee4e84d..068d4e7 100644 --- a/src/main/java/com/goby56/wakes/render/SplashPlaneRenderer.java +++ b/src/main/java/com/goby56/wakes/render/SplashPlaneRenderer.java @@ -18,11 +18,11 @@ import io.github.jdiemke.triangulation.NotEnoughPointsException; import io.github.jdiemke.triangulation.Triangle2D; import io.github.jdiemke.triangulation.Vector2D; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderEvents; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.LightTexture; +import net.minecraft.util.LightCoordsUtil; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.world.entity.Entity; @@ -36,7 +36,7 @@ import java.util.OptionalDouble; import java.util.OptionalInt; -public class SplashPlaneRenderer implements WorldRenderEvents.EndMain { +public class SplashPlaneRenderer implements LevelRenderEvents.EndMain { private static final ByteBufferBuilder allocator = new ByteBufferBuilder(RenderType.BIG_BUFFER_SIZE); private static ArrayList points; @@ -58,25 +58,25 @@ Resolution.THIRTYTWO, new SplashPlaneTexture(Resolution.THIRTYTWO.res) private static RenderPipeline getPipeline() { if (WakesClient.areShadersEnabled) { - return RenderPipelines.TRANSLUCENT_MOVING_BLOCK; + return RenderPipelines.TRANSLUCENT_BLOCK; } else { return RenderPipelines.BEACON_BEAM_TRANSLUCENT; } } @Override - public void endMain(WorldRenderContext context) { + public void endMain(LevelRenderContext context) { if (WakeHandler.getInstance().isEmpty()) { return; } WakeHandler wakeHandler = WakeHandler.getInstance().get(); for (SplashPlaneParticle particle : wakeHandler.getVisibleSplashPlanes()) { - SplashPlaneRenderer.render(particle.owner, particle, context, context.matrices()); + SplashPlaneRenderer.render(particle.owner, particle, context, context.poseStack()); } } - public static void render(T entity, SplashPlaneParticle splashPlane, WorldRenderContext context, PoseStack matrices) { + public static void render(T entity, SplashPlaneParticle splashPlane, LevelRenderContext context, PoseStack matrices) { if (wakeTextures == null) initTextures(); if (WakesConfig.disableMod || !WakesUtils.getEffectRuleFromSource(entity).renderPlanes) { return; @@ -86,7 +86,7 @@ public static void render(T entity, SplashPlaneParticle splas splashPlane.owner instanceof LocalPlayer) { return; } - splashPlane.updateYaw(context.gameRenderer().getMainCamera().getPartialTickTime()); + splashPlane.updateYaw(Minecraft.getInstance().getDeltaTracker().getGameTimeDeltaPartialTick(true)); matrices.pushPose(); splashPlane.translateMatrix(context.gameRenderer().getMainCamera(), matrices); @@ -153,7 +153,7 @@ private static void addVertex(BufferBuilder bb, Matrix4f matrix, int side, Vec3 (float) (vertex.z * WakesConfig.splashPlaneHeight), (float) (vertex.y * WakesConfig.splashPlaneDepth)) .setUv((float) vertex.x, (float) vertex.y) - .setLight(LightTexture.FULL_BRIGHT) + .setLight(LightCoordsUtil.FULL_BRIGHT) .setColor(1f, 1f, 1f, 1f) .setNormal((float) normal.x, (float) normal.y, (float) normal.z); } diff --git a/src/main/java/com/goby56/wakes/render/WakeColor.java b/src/main/java/com/goby56/wakes/render/WakeColor.java index a53d3db..d14bf77 100644 --- a/src/main/java/com/goby56/wakes/render/WakeColor.java +++ b/src/main/java/com/goby56/wakes/render/WakeColor.java @@ -2,6 +2,8 @@ import com.goby56.wakes.WakesClient; import com.goby56.wakes.config.WakesConfig; +import net.minecraft.util.ARGB; +import net.minecraft.util.LightCoordsUtil; import java.awt.*; @@ -71,6 +73,12 @@ public WakeColor modifyOpacity(float opacityMultiplier) { return new WakeColor(r, g, b, (int) (this.a * opacityMultiplier)); } + public static int computeLightColor(int lightCoordinate) { + float brightness = Math.max(LightCoordsUtil.block(lightCoordinate), LightCoordsUtil.sky(lightCoordinate)) / 15f; + int c = (int) (brightness * 255); + return ARGB.color(255, c, c, c); + } + public WakeColor blend(WakeColor tint, int lightColor, float opacity) { double srcA = Math.pow(this.a / 255f, WakesConfig.blendStrength * 10); // Pow to make tint color have a larger influence diff --git a/src/main/java/com/goby56/wakes/render/WakeRenderer.java b/src/main/java/com/goby56/wakes/render/WakeRenderer.java index d592bb2..e83f2ab 100644 --- a/src/main/java/com/goby56/wakes/render/WakeRenderer.java +++ b/src/main/java/com/goby56/wakes/render/WakeRenderer.java @@ -16,11 +16,11 @@ import com.mojang.blaze3d.textures.GpuSampler; import com.mojang.blaze3d.textures.GpuTextureView; import com.mojang.blaze3d.vertex.*; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderEvents; import net.minecraft.client.Minecraft; import net.minecraft.client.model.geom.builders.UVPair; -import net.minecraft.client.renderer.LightTexture; +import net.minecraft.util.LightCoordsUtil; import net.minecraft.client.renderer.MappableRingBuffer; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.renderer.rendertype.RenderType; @@ -33,7 +33,7 @@ import java.util.*; -public class WakeRenderer implements WorldRenderEvents.EndMain { +public class WakeRenderer implements LevelRenderEvents.EndMain { private static final ByteBufferBuilder allocator = new ByteBufferBuilder(RenderType.BIG_BUFFER_SIZE); private BufferBuilder buffer; @@ -43,10 +43,10 @@ public class WakeRenderer implements WorldRenderEvents.EndMain { private static final Matrix4f TEXTURE_MATRIX = new Matrix4f(); private MappableRingBuffer vertexBuffer; - private final RenderPipeline PIPELINE = RenderPipelines.TRANSLUCENT_MOVING_BLOCK; + private final RenderPipeline PIPELINE = RenderPipelines.TRANSLUCENT_BLOCK; @Override - public void endMain(WorldRenderContext context) { + public void endMain(LevelRenderContext context) { if (WakesConfig.disableMod) { WakesDebugInfo.quadsRendered = 0; return; @@ -66,8 +66,8 @@ public void endMain(WorldRenderContext context) { } - PoseStack matrices = context.matrices(); - Vec3 camera = context.worldState().cameraRenderState.pos; + PoseStack matrices = context.poseStack(); + Vec3 camera = context.levelState().cameraRenderState.pos; matrices.pushPose(); matrices.translate(-camera.x, -camera.y, -camera.z); @@ -109,22 +109,22 @@ private void addVertices(Matrix4fc matrix, BufferBuilder bb, List chu bb.addVertex(matrix, x0, y, z0) .setUv(uv.u(), uv.v()) .setColor(1f, 1f, 1f, 1f) - .setLight(LightTexture.FULL_BRIGHT) + .setLight(LightCoordsUtil.FULL_BRIGHT) .setNormal(0f, 1f, 0f); bb.addVertex(matrix, x0, y, z1) .setUv(uv.u(), uv.v() + uvOffset) .setColor(1f, 1f, 1f, 1f) - .setLight(LightTexture.FULL_BRIGHT) + .setLight(LightCoordsUtil.FULL_BRIGHT) .setNormal(0f, 1f, 0f); bb.addVertex(matrix, x1, y, z1) .setUv(uv.u() + uvOffset, uv.v() + uvOffset) .setColor(1f, 1f, 1f, 1f) - .setLight(LightTexture.FULL_BRIGHT) + .setLight(LightCoordsUtil.FULL_BRIGHT) .setNormal(0f, 1f, 0f); bb.addVertex(matrix, x1, y, z0) .setUv(uv.u() + uvOffset, uv.v()) .setColor(1f, 1f, 1f, 1f) - .setLight(LightTexture.FULL_BRIGHT) + .setLight(LightCoordsUtil.FULL_BRIGHT) .setNormal(0f, 1f, 0f); } } @@ -188,7 +188,7 @@ private void draw(MeshData builtBuffer, MeshData.DrawState drawParameters, GpuBu pass.setUniform("DynamicTransforms", dynamicTransforms); pass.bindTexture("Sampler0", texture, sampler); - pass.bindTexture("Sampler2", Minecraft.getInstance().gameRenderer.lightTexture().getTextureView(), sampler); + pass.bindTexture("Sampler2", Minecraft.getInstance().gameRenderer.levelLightmap(), sampler); pass.setVertexBuffer(0, vertices); pass.setIndexBuffer(indices, indexType); diff --git a/src/main/java/com/goby56/wakes/simulation/WakeChunk.java b/src/main/java/com/goby56/wakes/simulation/WakeChunk.java index 63d67bf..7d318cd 100644 --- a/src/main/java/com/goby56/wakes/simulation/WakeChunk.java +++ b/src/main/java/com/goby56/wakes/simulation/WakeChunk.java @@ -6,9 +6,9 @@ import com.goby56.wakes.render.WakeTextureAtlas; import com.goby56.wakes.utils.WakesUtils; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.BiomeColors; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.world.level.Level; +import net.minecraft.util.LightCoordsUtil; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -153,12 +153,12 @@ private List getAdjacentNodes(int x, int z) { } public void drawWakes() { - Level world = Minecraft.getInstance().level; + ClientLevel world = Minecraft.getInstance().level; int nodeRes = WakeHandler.resolution.res; for (int nodeZ = 0; nodeZ < WIDTH; nodeZ++) { for (int nodeX = 0; nodeX < WIDTH; nodeX++) { WakeNode node = this.get(nodeX, nodeZ); - int lightCol = LightTexture.FULL_BRIGHT; + int lightCol = LightCoordsUtil.FULL_BRIGHT; int fluidColor = 0; float opacity = 0; if (node != null) { diff --git a/src/main/java/com/goby56/wakes/utils/WakesUtils.java b/src/main/java/com/goby56/wakes/utils/WakesUtils.java index 2f7dca8..51ca910 100644 --- a/src/main/java/com/goby56/wakes/utils/WakesUtils.java +++ b/src/main/java/com/goby56/wakes/utils/WakesUtils.java @@ -6,14 +6,14 @@ import com.goby56.wakes.duck.ProducesWake; import com.goby56.wakes.particle.ModParticles; import com.goby56.wakes.particle.WithOwnerParticleType; -import com.goby56.wakes.render.LightmapWrapper; +import com.goby56.wakes.render.WakeColor; import com.goby56.wakes.simulation.WakeHandler; import com.goby56.wakes.simulation.WakeNode; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.RemotePlayer; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.util.LightCoordsUtil; +import net.minecraft.world.level.LightLayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.LivingEntity; @@ -34,10 +34,9 @@ public class WakesUtils { public static int getLightColor(Level world, BlockPos blockPos) { - int lightCoordinate = LevelRenderer.getLightColor(world, blockPos); - int x = LightTexture.block(lightCoordinate); - int y = LightTexture.sky(lightCoordinate); - return LightmapWrapper.readPixel(x, y); + return WakeColor.computeLightColor(LightCoordsUtil.pack( + world.getBrightness(LightLayer.BLOCK, blockPos), + world.getBrightness(LightLayer.SKY, blockPos))); } public static void placeFallSplash(Entity entity) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index bb42944..829e139 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -23,14 +23,14 @@ "com.goby56.wakes.config.ModMenuIntegration" ] }, - "accessWidener": "wakes.accesswidener", + "accessWidener": "wakes.classtweaker", "mixins": [ "wakes.mixins.json" ], "depends": { - "fabricloader": ">=0.14.21", - "minecraft": "~1.21", - "java": ">=21", + "fabricloader": ">=0.19.2", + "minecraft": "~26.1", + "java": ">=25", "fabric-api": "*" } } diff --git a/src/main/resources/wakes.accesswidener b/src/main/resources/wakes.classtweaker similarity index 67% rename from src/main/resources/wakes.accesswidener rename to src/main/resources/wakes.classtweaker index a3ec847..6ee9d19 100644 --- a/src/main/resources/wakes.accesswidener +++ b/src/main/resources/wakes.classtweaker @@ -1,14 +1,15 @@ -accessWidener v1 named +classTweaker v2 official accessible field net/minecraft/world/entity/vehicle/boat/AbstractBoat PADDLE_SPEED F accessible field net/minecraft/world/entity/vehicle/boat/AbstractBoat paddlePositions [F accessible field net/minecraft/client/model/geom/ModelPart$Cube polygons [Lnet/minecraft/client/model/geom/ModelPart$Polygon; -accessible method net/minecraft/client/gui/components/AbstractSliderButton getSprite ()Lnet/minecraft/resources/Identifier; -accessible method net/minecraft/client/gui/components/AbstractSliderButton getHandleSprite ()Lnet/minecraft/resources/Identifier; accessible method net/minecraft/client/gui/components/AbstractWidget onDrag (Lnet/minecraft/client/input/MouseButtonEvent;DD)V extendable method net/minecraft/client/gui/components/EditBox onValueChange (Ljava/lang/String;)V +accessible field net/minecraft/client/gui/GuiGraphicsExtractor guiRenderState Lnet/minecraft/client/renderer/state/gui/GuiRenderState; +accessible field net/minecraft/client/gui/GuiGraphicsExtractor scissorStack Lnet/minecraft/client/gui/GuiGraphicsExtractor$ScissorStack; + accessible field net/minecraft/client/multiplayer/ClientLevel skyFlashTime I diff --git a/src/main/resources/wakes.mixins.json b/src/main/resources/wakes.mixins.json index 1b480b0..a535647 100644 --- a/src/main/resources/wakes.mixins.json +++ b/src/main/resources/wakes.mixins.json @@ -3,7 +3,6 @@ "package": "com.goby56.wakes.mixin", "compatibilityLevel": "JAVA_17", "client": [ - "LightmapTextureManagerMixin", "LilyPadFallMixin", "TameableTeleportMixin", "WakeRendererCleanup",