From 56b0fce44dd422768dc903a5a27583aad0c36390 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 5 May 2024 11:05:33 -0400
Subject: [PATCH 01/55] Port to 1.20.4
---
buildSrc/build.gradle.kts | 4 +-
.../gradle/subproject/SubprojectPlugin.kt | 4 +-
.../impl/mixin/LevelRendererMixin.java | 3 +-
.../mixin/visualmanage/RebuildTaskMixin.java | 4 +-
.../flywheel/impl/mixin/MinecraftMixin.java | 7 ++--
.../impl/mixin/fabric/MinecraftMixin.java | 2 +-
forge/build.gradle.kts | 12 +++---
forge/gradle.properties | 2 +-
.../flywheel/api/event/BeginFrameEvent.java | 2 +-
.../event/EndClientResourceReloadEvent.java | 4 +-
.../api/event/ReloadLevelRendererEvent.java | 3 +-
.../flywheel/api/event/RenderStageEvent.java | 3 +-
.../lib/model/baked/BakedModelBufferer.java | 5 ++-
.../model/baked/ForgeBakedModelBuilder.java | 3 +-
.../model/baked/ForgeBlockModelBuilder.java | 3 +-
.../baked/ForgeMultiBlockModelBuilder.java | 3 +-
.../model/baked/PartialModelEventHandler.java | 3 +-
.../flywheel/impl/FlwCommands.java | 9 ++--
.../flywheel/impl/FlwImplXplatImpl.java | 9 ++--
.../flywheel/impl/FlwLibXplatImpl.java | 6 ++-
.../flywheel/impl/FlywheelForge.java | 41 +++++++++++++++----
.../flywheel/impl/ForgeFlwConfig.java | 19 +++++----
.../flywheel/impl/mixin/MinecraftMixin.java | 16 ++++----
.../impl/mixin/sodium/SodiumMixinPlugin.java | 4 +-
forge/src/main/resources/META-INF/mods.toml | 21 ++++++----
gradle.properties | 21 +++++-----
settings.gradle.kts | 4 +-
27 files changed, 129 insertions(+), 88 deletions(-)
diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts
index 4853b6a15..6393c5701 100644
--- a/buildSrc/build.gradle.kts
+++ b/buildSrc/build.gradle.kts
@@ -7,8 +7,8 @@ plugins {
repositories {
gradlePluginPortal()
mavenCentral()
- maven("https://maven.minecraftforge.net/") {
- name = "MinecraftForge"
+ maven("https://maven.neoforged.net/releases/") {
+ name = "NeoForged"
}
maven("https://maven.architectury.dev/") {
name = "Architectury"
diff --git a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
index 8dd2dbd9d..8398fa57e 100644
--- a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
+++ b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
@@ -53,6 +53,8 @@ class SubprojectPlugin: Plugin {
val loom = project.the()
loom.silentMojangMappingsLicense()
+ // FIXME y tho? :(
+ loom.mixin.useLegacyMixinAp = true
loom.mixin.defaultRefmapName = "flywheel.refmap.json"
}
@@ -182,6 +184,6 @@ val processResourcesExpandProperties = listOf(
"minecraft_semver_version_range",
"minecraft_maven_version_range",
"fabric_api_version_range",
- "forge_version_range",
+ "neoforge_version_range",
)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 9cbcf2790..dadebbbf1 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -102,7 +102,7 @@ abstract class LevelRendererMixin {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
}
- @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", ordinal = 6, shift = Shift.AFTER))
+ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", ordinal = 6, shift = Shift.AFTER))
private void flywheel$onStage$afterTranslucentTerrain(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
}
@@ -113,6 +113,7 @@ abstract class LevelRendererMixin {
flywheel$dispatch(RenderStage.AFTER_PARTICLES);
}
+ //fixme take a look over if this is still needed
@Group(name = "onStage$afterParticles")
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$forge(CallbackInfo ci) {
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java
index c55c532fa..cd98fb932 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java
@@ -9,9 +9,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.lib.visual.VisualizationHelper;
import net.minecraft.world.level.block.entity.BlockEntity;
-@Mixin(targets = "net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$RenderChunk$RebuildTask")
+@Mixin(targets = "net.minecraft.client.renderer.chunk.SectionRenderDispatcher$RenderSection$RebuildTask")
abstract class RebuildTaskMixin {
- @Inject(method = "handleBlockEntity(Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk$RebuildTask$CompileResults;Lnet/minecraft/world/level/block/entity/BlockEntity;)V", at = @At("HEAD"), cancellable = true)
+ @Inject(method = "handleBlockEntity(Lnet/minecraft/client/renderer/chunk/SectionRenderDispatcher$RenderSection$RebuildTask$CompileResults;Lnet/minecraft/world/level/block/entity/BlockEntity;)V", at = @At("HEAD"), cancellable = true)
private void flywheel$tryAddBlockEntity(@Coerce Object compileResults, BlockEntity blockEntity, CallbackInfo ci) {
if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
ci.cancel();
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index f96a68595..dcab8eeec 100644
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -7,6 +7,7 @@ import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Coerce;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -30,14 +31,14 @@ abstract class MinecraftMixin {
FabricFlwConfig.INSTANCE.load();
}
- @Inject(method = "method_24040", at = @At("HEAD"))
- private void flywheel$onEndInitialResourceReload(Optional error, CallbackInfo ci) {
+ @Inject(method = "method_53522", at = @At("HEAD"))
+ private void flywheel$onEndInitialResourceReload(@Coerce Object gameLoadCookie, Optional error, CallbackInfo ci) {
EndClientResourceReloadCallback.EVENT.invoker()
.onEndClientResourceReload((Minecraft) (Object) this, resourceManager, true, error);
}
@Inject(method = "method_24228", at = @At("HEAD"))
- private void flywheel$onEndManualResourceReload(boolean recovery, CompletableFuture future,
+ private void flywheel$onEndManualResourceReload(boolean recovery, @Coerce Object gameLoadCookie, CompletableFuture future,
Optional error, CallbackInfo ci) {
EndClientResourceReloadCallback.EVENT.invoker()
.onEndClientResourceReload((Minecraft) (Object) this, resourceManager, false, error);
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
index e7d8b7af2..6ff63b33d 100644
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
+++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
@@ -22,7 +22,7 @@ abstract class MinecraftMixin {
}
}
- @Inject(method = "clearLevel(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At("HEAD"))
+ @Inject(method = "clearClientLevel(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At("HEAD"))
private void flywheel$onClearLevel(CallbackInfo ci) {
if (level != null) {
LevelAttached.invalidateLevel(level);
diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts
index 5f51cc55e..c2779acd8 100644
--- a/forge/build.gradle.kts
+++ b/forge/build.gradle.kts
@@ -61,12 +61,6 @@ defaultPackageInfos {
}
loom {
- forge {
- mixinConfig("flywheel.backend.mixins.json")
- mixinConfig("flywheel.impl.mixins.json")
- mixinConfig("flywheel.impl.sodium.mixins.json")
- }
-
runs {
configureEach {
property("forge.logging.markers", "")
@@ -75,8 +69,12 @@ loom {
}
}
+repositories {
+ maven("https://maven.neoforged.net/releases/")
+}
+
dependencies {
- forge("net.minecraftforge:forge:${property("minecraft_version")}-${property("forge_version")}")
+ neoForge("net.neoforged:neoforge:${property("neoforge_version")}")
modCompileOnly("maven.modrinth:embeddium:${property("embeddium_version")}")
modCompileOnly("maven.modrinth:oculus:${property("oculus_version")}")
diff --git a/forge/gradle.properties b/forge/gradle.properties
index a58ba1416..2e6ed7676 100644
--- a/forge/gradle.properties
+++ b/forge/gradle.properties
@@ -1 +1 @@
-loom.platform = forge
+loom.platform = neoforge
diff --git a/forge/src/api/java/dev/engine_room/flywheel/api/event/BeginFrameEvent.java b/forge/src/api/java/dev/engine_room/flywheel/api/event/BeginFrameEvent.java
index 5da48c419..d96741099 100644
--- a/forge/src/api/java/dev/engine_room/flywheel/api/event/BeginFrameEvent.java
+++ b/forge/src/api/java/dev/engine_room/flywheel/api/event/BeginFrameEvent.java
@@ -1,6 +1,6 @@
package dev.engine_room.flywheel.api.event;
-import net.minecraftforge.eventbus.api.Event;
+import net.neoforged.bus.api.Event;
/**
* This event is posted to the Forge event bus.
diff --git a/forge/src/api/java/dev/engine_room/flywheel/api/event/EndClientResourceReloadEvent.java b/forge/src/api/java/dev/engine_room/flywheel/api/event/EndClientResourceReloadEvent.java
index 8e102c4ba..bacc99531 100644
--- a/forge/src/api/java/dev/engine_room/flywheel/api/event/EndClientResourceReloadEvent.java
+++ b/forge/src/api/java/dev/engine_room/flywheel/api/event/EndClientResourceReloadEvent.java
@@ -4,8 +4,8 @@ import java.util.Optional;
import net.minecraft.client.Minecraft;
import net.minecraft.server.packs.resources.ResourceManager;
-import net.minecraftforge.eventbus.api.Event;
-import net.minecraftforge.fml.event.IModBusEvent;
+import net.neoforged.bus.api.Event;
+import net.neoforged.fml.event.IModBusEvent;
/**
* This event is posted to mod event buses.
diff --git a/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java b/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java
index e74e792c9..a6a9ed00c 100644
--- a/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java
+++ b/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java
@@ -1,9 +1,10 @@
package dev.engine_room.flywheel.api.event;
+import net.neoforged.bus.api.Event;
+
import org.jetbrains.annotations.Nullable;
import net.minecraft.client.multiplayer.ClientLevel;
-import net.minecraftforge.eventbus.api.Event;
/**
* This event is posted to the Forge event bus.
diff --git a/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java b/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
index 4b0ec8254..d9c27aad7 100644
--- a/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
+++ b/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
@@ -1,5 +1,7 @@
package dev.engine_room.flywheel.api.event;
+import net.neoforged.bus.api.Event;
+
import org.joml.Matrix4f;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -7,7 +9,6 @@ import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.RenderBuffers;
-import net.minecraftforge.eventbus.api.Event;
/**
* This event is posted to the Forge event bus.
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
index 50162d4b9..4453ec5b8 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
@@ -3,6 +3,9 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.Iterator;
import java.util.function.Function;
+import net.neoforged.neoforge.client.ChunkRenderTypeSet;
+import net.neoforged.neoforge.client.model.data.ModelData;
+
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
@@ -20,8 +23,6 @@ import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
-import net.minecraftforge.client.ChunkRenderTypeSet;
-import net.minecraftforge.client.model.data.ModelData;
final class BakedModelBufferer {
static final RenderType[] CHUNK_LAYERS = RenderType.chunkBufferLayers().toArray(RenderType[]::new);
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java
index 10714e848..3d9cf4885 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java
@@ -2,6 +2,8 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.function.BiFunction;
+import net.neoforged.neoforge.client.model.data.ModelData;
+
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -16,7 +18,6 @@ import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
-import net.minecraftforge.client.model.data.ModelData;
public final class ForgeBakedModelBuilder extends BakedModelBuilder {
@Nullable
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java
index 4e1d9df82..d09730dc7 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java
@@ -2,6 +2,8 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.function.BiFunction;
+import net.neoforged.neoforge.client.model.data.ModelData;
+
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -14,7 +16,6 @@ import dev.engine_room.flywheel.lib.model.SimpleModel;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
-import net.minecraftforge.client.model.data.ModelData;
public final class ForgeBlockModelBuilder extends BlockModelBuilder {
@Nullable
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java
index 183e03d84..9bbf47079 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java
@@ -3,6 +3,8 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.function.BiFunction;
import java.util.function.Function;
+import net.neoforged.neoforge.client.model.data.ModelData;
+
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -15,7 +17,6 @@ import dev.engine_room.flywheel.lib.model.SimpleModel;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter;
-import net.minecraftforge.client.model.data.ModelData;
public final class ForgeMultiBlockModelBuilder extends MultiBlockModelBuilder {
@Nullable
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
index 5c490dcd7..f84fc5ff3 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
@@ -2,11 +2,12 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.Map;
+import net.neoforged.neoforge.client.event.ModelEvent;
+
import org.jetbrains.annotations.ApiStatus;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.resources.ResourceLocation;
-import net.minecraftforge.client.event.ModelEvent;
@ApiStatus.Internal
public final class PartialModelEventHandler {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
index 227973f4e..830c0fb0f 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
@@ -15,9 +15,8 @@ import net.minecraft.commands.arguments.coordinates.BlockPosArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
-import net.minecraftforge.client.event.RegisterClientCommandsEvent;
-import net.minecraftforge.common.ForgeConfigSpec.BooleanValue;
-import net.minecraftforge.common.ForgeConfigSpec.ConfigValue;
+import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent;
+import net.neoforged.neoforge.common.ModConfigSpec;
public final class FlwCommands {
private FlwCommands() {
@@ -26,7 +25,7 @@ public final class FlwCommands {
public static void registerClientCommands(RegisterClientCommandsEvent event) {
LiteralArgumentBuilder command = Commands.literal("flywheel");
- ConfigValue backendValue = ForgeFlwConfig.INSTANCE.client.backend;
+ ModConfigSpec.ConfigValue backendValue = ForgeFlwConfig.INSTANCE.client.backend;
command.then(Commands.literal("backend")
.executes(context -> {
Backend backend = BackendManager.getBackend();
@@ -56,7 +55,7 @@ public final class FlwCommands {
return Command.SINGLE_SUCCESS;
})));
- BooleanValue limitUpdatesValue = ForgeFlwConfig.INSTANCE.client.limitUpdates;
+ ModConfigSpec.BooleanValue limitUpdatesValue = ForgeFlwConfig.INSTANCE.client.limitUpdates;
command.then(Commands.literal("limitUpdates")
.executes(context -> {
if (limitUpdatesValue.get()) {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
index 4ebf4532b..cddd85e4e 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
@@ -1,5 +1,7 @@
package dev.engine_room.flywheel.impl;
+import net.neoforged.neoforge.common.NeoForge;
+
import org.jetbrains.annotations.Nullable;
import dev.engine_room.flywheel.api.event.BeginFrameEvent;
@@ -8,22 +10,21 @@ import dev.engine_room.flywheel.api.event.RenderContext;
import dev.engine_room.flywheel.api.event.RenderStage;
import dev.engine_room.flywheel.api.event.RenderStageEvent;
import net.minecraft.client.multiplayer.ClientLevel;
-import net.minecraftforge.common.MinecraftForge;
public class FlwImplXplatImpl implements FlwImplXplat {
@Override
public void dispatchBeginFrameEvent(RenderContext context) {
- MinecraftForge.EVENT_BUS.post(new BeginFrameEvent(context));
+ NeoForge.EVENT_BUS.post(new BeginFrameEvent(context));
}
@Override
public void dispatchReloadLevelRendererEvent(@Nullable ClientLevel level) {
- MinecraftForge.EVENT_BUS.post(new ReloadLevelRendererEvent(level));
+ NeoForge.EVENT_BUS.post(new ReloadLevelRendererEvent(level));
}
@Override
public void dispatchRenderStageEvent(RenderContext context, RenderStage stage) {
- MinecraftForge.EVENT_BUS.post(new RenderStageEvent(context, stage));
+ NeoForge.EVENT_BUS.post(new RenderStageEvent(context, stage));
}
@Override
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
index 7aa29a9b0..203460ef1 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
@@ -2,6 +2,9 @@ package dev.engine_room.flywheel.impl;
import java.lang.reflect.Field;
+import net.neoforged.fml.ModList;
+import net.neoforged.fml.util.ObfuscationReflectionHelper;
+
import org.jetbrains.annotations.Nullable;
import dev.engine_room.flywheel.lib.internal.FlwLibXplat;
@@ -20,8 +23,6 @@ import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
-import net.minecraftforge.fml.ModList;
-import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
public class FlwLibXplatImpl implements FlwLibXplat {
@Override
@@ -33,6 +34,7 @@ public class FlwLibXplatImpl implements FlwLibXplat {
field.setAccessible(true);
field.set(dispatcher, field.get(defaultDispatcher));
}
+ // fixme ~ is this still needed? neoforge uses mojmap at runtime
ObfuscationReflectionHelper.setPrivateValue(BlockRenderDispatcher.class, dispatcher, new ModelBlockRenderer(Minecraft.getInstance().getBlockColors()), "f_110900_");
} catch (Exception e) {
FlwImpl.LOGGER.error("Failed to initialize vanilla BlockRenderDispatcher!", e);
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
index 72e5ada1f..7eb1fd24f 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
@@ -1,5 +1,30 @@
package dev.engine_room.flywheel.impl;
+import net.minecraft.core.registries.Registries;
+import net.neoforged.api.distmarker.Dist;
+import net.neoforged.bus.api.IEventBus;
+import net.neoforged.fml.CrashReportCallables;
+import net.neoforged.fml.DistExecutor;
+import net.neoforged.fml.LogicalSide;
+import net.neoforged.fml.ModLoadingContext;
+
+import net.neoforged.fml.common.Mod;
+
+import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
+import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent;
+import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
+import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
+import net.neoforged.neoforge.common.NeoForge;
+
+import net.neoforged.neoforge.event.TickEvent;
+
+import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
+
+import net.neoforged.neoforge.event.entity.EntityLeaveLevelEvent;
+
+import net.neoforged.neoforge.event.level.LevelEvent;
+import net.neoforged.neoforge.registries.RegisterEvent;
+
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.jetbrains.annotations.UnknownNullability;
@@ -41,7 +66,7 @@ public final class FlywheelForge {
@UnknownNullability
private static ArtifactVersion version;
- public FlywheelForge() {
+ public FlywheelForge(IEventBus modEventBus) {
ModLoadingContext modLoadingContext = ModLoadingContext.get();
version = modLoadingContext
@@ -49,9 +74,7 @@ public final class FlywheelForge {
.getModInfo()
.getVersion();
- IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
- IEventBus modEventBus = FMLJavaModLoadingContext.get()
- .getModEventBus();
+ IEventBus forgeEventBus = NeoForge.EVENT_BUS;
ForgeFlwConfig.INSTANCE.registerSpecs(modLoadingContext);
@@ -86,23 +109,23 @@ public final class FlywheelForge {
forgeEventBus.addListener((CustomizeGuiOverlayEvent.DebugText e) -> {
Minecraft minecraft = Minecraft.getInstance();
- if (!minecraft.options.renderDebug) {
+ if (!minecraft.getDebugOverlay().showDebugScreen()) {
return;
}
FlwDebugInfo.addDebugInfo(minecraft, e.getRight());
});
- modEventBus.addListener((EndClientResourceReloadEvent e) -> BackendManagerImpl.onEndClientResourceReload(e.error().isPresent()));
+ modEventBus.addListener((EndClientResourceReloadEvent e) -> BackendManagerImpl.onEndClientResourceReload(e.error() != null));
modEventBus.addListener((FMLCommonSetupEvent e) -> {
ArgumentTypeInfos.registerByClass(BackendArgument.class, BackendArgument.INFO);
ArgumentTypeInfos.registerByClass(DebugModeArgument.class, DebugModeArgument.INFO);
});
modEventBus.addListener((RegisterEvent e) -> {
- if (e.getRegistryKey().equals(ForgeRegistries.Keys.COMMAND_ARGUMENT_TYPES)) {
- e.register(ForgeRegistries.Keys.COMMAND_ARGUMENT_TYPES, Flywheel.rl("backend"), () -> BackendArgument.INFO);
- e.register(ForgeRegistries.Keys.COMMAND_ARGUMENT_TYPES, Flywheel.rl("debug_mode"), () -> DebugModeArgument.INFO);
+ if (e.getRegistryKey().equals(Registries.COMMAND_ARGUMENT_TYPE)) {
+ e.register(Registries.COMMAND_ARGUMENT_TYPE, Flywheel.rl("backend"), () -> BackendArgument.INFO);
+ e.register(Registries.COMMAND_ARGUMENT_TYPE, Flywheel.rl("debug_mode"), () -> DebugModeArgument.INFO);
}
});
}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
index 69fd054c0..60832455d 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
@@ -1,5 +1,9 @@
package dev.engine_room.flywheel.impl;
+import net.neoforged.fml.ModLoadingContext;
+import net.neoforged.fml.config.ModConfig;
+import net.neoforged.neoforge.common.ModConfigSpec;
+
import org.apache.commons.lang3.tuple.Pair;
import org.jetbrains.annotations.Nullable;
@@ -7,18 +11,15 @@ import dev.engine_room.flywheel.api.backend.Backend;
import dev.engine_room.flywheel.api.backend.BackendManager;
import net.minecraft.ResourceLocationException;
import net.minecraft.resources.ResourceLocation;
-import net.minecraftforge.common.ForgeConfigSpec;
-import net.minecraftforge.fml.ModLoadingContext;
-import net.minecraftforge.fml.config.ModConfig;
public class ForgeFlwConfig implements FlwConfig {
public static final ForgeFlwConfig INSTANCE = new ForgeFlwConfig();
public final ClientConfig client;
- private final ForgeConfigSpec clientSpec;
+ private final ModConfigSpec clientSpec;
private ForgeFlwConfig() {
- Pair clientPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new);
+ Pair clientPair = new ModConfigSpec.Builder().configure(ClientConfig::new);
this.client = clientPair.getLeft();
clientSpec = clientPair.getRight();
}
@@ -68,11 +69,11 @@ public class ForgeFlwConfig implements FlwConfig {
}
public static class ClientConfig {
- public final ForgeConfigSpec.ConfigValue backend;
- public final ForgeConfigSpec.BooleanValue limitUpdates;
- public final ForgeConfigSpec.IntValue workerThreads;
+ public final ModConfigSpec.ConfigValue backend;
+ public final ModConfigSpec.BooleanValue limitUpdates;
+ public final ModConfigSpec.IntValue workerThreads;
- private ClientConfig(ForgeConfigSpec.Builder builder) {
+ private ClientConfig(ModConfigSpec.Builder builder) {
backend = builder.comment("Select the backend to use.")
.define("backend", Backend.REGISTRY.getIdOrThrow(BackendManager.getDefaultBackend()).toString());
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index 99ca5d570..2305ba681 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -4,10 +4,13 @@ import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
+import net.neoforged.fml.ModLoader;
+
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Coerce;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -17,12 +20,9 @@ import com.mojang.realmsclient.client.RealmsClient;
import dev.engine_room.flywheel.api.event.EndClientResourceReloadEvent;
import dev.engine_room.flywheel.impl.FlwImpl;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.main.GameConfig;
-import net.minecraft.server.packs.resources.ReloadInstance;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
-import net.minecraftforge.fml.ModLoader;
-@Mixin(Minecraft.class)
+@Mixin(value = Minecraft.class, remap = false)
abstract class MinecraftMixin {
@Shadow
@Final
@@ -35,13 +35,13 @@ abstract class MinecraftMixin {
return arg0;
}
- @Inject(method = "lambda$new$5", at = @At("HEAD"))
- private void flywheel$onEndInitialResourceReload(RealmsClient realmsClient, ReloadInstance reloadInstance, GameConfig gameConfig, Optional error, CallbackInfo ci) {
+ @Inject(method = "lambda$new$7", at = @At("HEAD"))
+ private void flywheel$onEndInitialResourceReload(@Coerce Object minecraft$gameloadcookie, Optional error, CallbackInfo ci) {
ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, true, error));
}
- @Inject(method = "lambda$reloadResourcePacks$28", at = @At("HEAD"))
- private void flywheel$onEndManualResourceReload(boolean recovery, CompletableFuture future, Optional error, CallbackInfo ci) {
+ @Inject(method = "lambda$reloadResourcePacks$39", at = @At("HEAD"))
+ private void flywheel$onEndManualResourceReload(boolean bl, @Coerce Object minecraft$gameloadcookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
}
}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
index 1048d91fd..5ee303ff0 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
@@ -4,14 +4,14 @@ import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
+import net.neoforged.fml.loading.LoadingModList;
+
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import com.google.common.base.Suppliers;
-import net.minecraftforge.fml.loading.LoadingModList;
-
public class SodiumMixinPlugin implements IMixinConfigPlugin {
private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("rubidium") != null);
diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml
index 2dc330582..546372adf 100644
--- a/forge/src/main/resources/META-INF/mods.toml
+++ b/forge/src/main/resources/META-INF/mods.toml
@@ -14,22 +14,29 @@ authors = "Jozufozu, PepperCode1"
displayURL = "${mod_homepage}"
displayTest = "IGNORE_ALL_VERSION"
+[[mixins]]
+config = "flywheel.backend.mixins.json"
+[[mixins]]
+config = "flywheel.impl.mixins.json"
+[[mixins]]
+config = "flywheel.impl.sodium.mixins.json"
+
[[dependencies.${mod_id}]]
modId = "minecraft"
-mandatory = true
+type = "required"
versionRange = "${minecraft_maven_version_range}"
side = "CLIENT"
[[dependencies.${mod_id}]]
-modId = "forge"
-mandatory = true
-versionRange = "${forge_version_range}"
+modId = "neoforge"
+type = "required"
+versionRange = "${neoforge_version_range}"
side = "CLIENT"
+# Breaks dependency
[[dependencies.${mod_id}]]
-# This replicates a "breaks" dependency.
-# There's a mixin crash with Rubidium <0.7.0.
modId = "rubidium"
-mandatory = false
+type = "incompatible"
+reason = "mixin crash with any version of rubidium under 0.7.0"
versionRange = "[0.7.0,)"
side = "CLIENT"
diff --git a/gradle.properties b/gradle.properties
index 431fbe0d6..db47dc3ce 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -12,22 +12,21 @@ mod_issues = https://github.com/Jozufozu/Flywheel/issues
mod_homepage = https://github.com/Jozufozu/Flywheel
# Mod dependency declarations
-minecraft_semver_version_range = >=1.20.1 <1.20.2
-minecraft_maven_version_range = [1.20.1,1.20.2)
-fabric_api_version_range = >=0.86.0
-forge_version_range = [47.0.0,)
+minecraft_semver_version_range = >=1.20.4 <1.20.5
+minecraft_maven_version_range = [1.20.4,1.20.5)
+fabric_api_version_range = >=0.97.0
+neoforge_version_range = [20.4.234,)
# General build dependency versions
java_version = 17
arch_loom_version = 1.6-SNAPSHOT
-cursegradle_version = 1.4.0
-parchment_version = 2023.09.03
+parchment_version = 2024.04.14
# Minecraft build dependency versions
-minecraft_version = 1.20.1
-forge_version = 47.2.19
-fabric_loader_version = 0.15.9
-fabric_api_version = 0.92.1+1.20.1
+minecraft_version = 1.20.4
+neoforge_version = 20.4.234
+fabric_loader_version = 0.15.10
+fabric_api_version = 0.97.0+1.20.4
# Build dependency mod versions
sodium_version = mc1.20.1-0.5.8
@@ -37,4 +36,4 @@ oculus_version = 1.20.1-1.6.15a
# Publication info
group = dev.engine_room.flywheel
-artifact_minecraft_version = 1.20.1
+artifact_minecraft_version = 1.20.4
diff --git a/settings.gradle.kts b/settings.gradle.kts
index cf8fd7a12..5bb943455 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -2,8 +2,8 @@ pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
- maven("https://maven.minecraftforge.net/") {
- name = "MinecraftForge"
+ maven("https://maven.neoforged.net/releases/") {
+ name = "NeoForged"
}
maven("https://maven.architectury.dev/") {
name = "Architectury"
From 8c61f3fc1e9cf5d1f063567510d7d9acd96a9696 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sat, 11 May 2024 21:14:18 -0400
Subject: [PATCH 02/55] Obfuscated Obfuscation
- Fix ObfuscationReflectionHelper#setPrivateValue using SRG mapped names, Neoforge has switched to mojmap at runtime
---
.../java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
index 203460ef1..c4bc9ffae 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
@@ -34,8 +34,7 @@ public class FlwLibXplatImpl implements FlwLibXplat {
field.setAccessible(true);
field.set(dispatcher, field.get(defaultDispatcher));
}
- // fixme ~ is this still needed? neoforge uses mojmap at runtime
- ObfuscationReflectionHelper.setPrivateValue(BlockRenderDispatcher.class, dispatcher, new ModelBlockRenderer(Minecraft.getInstance().getBlockColors()), "f_110900_");
+ ObfuscationReflectionHelper.setPrivateValue(BlockRenderDispatcher.class, dispatcher, new ModelBlockRenderer(Minecraft.getInstance().getBlockColors()), "modelRenderer");
} catch (Exception e) {
FlwImpl.LOGGER.error("Failed to initialize vanilla BlockRenderDispatcher!", e);
return defaultDispatcher;
From cbdc3189e23c7809f07a0adfcf4d2f1e1b5fa700 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 12 May 2024 17:41:27 -0400
Subject: [PATCH 03/55] fixme fixedme fixed...
---
.../dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index dadebbbf1..86e87717f 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -113,7 +113,6 @@ abstract class LevelRendererMixin {
flywheel$dispatch(RenderStage.AFTER_PARTICLES);
}
- //fixme take a look over if this is still needed
@Group(name = "onStage$afterParticles")
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$forge(CallbackInfo ci) {
From 68d40b9a7d624b407905f36fa6e1aac1b907331d Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 12 May 2024 20:10:35 -0400
Subject: [PATCH 04/55] port rebase fixes
---
.../flywheel/impl/FlywheelForge.java | 19 -------------------
1 file changed, 19 deletions(-)
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
index 7eb1fd24f..c0892ed56 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
@@ -11,7 +11,6 @@ import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
-import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent;
import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
import net.neoforged.neoforge.common.NeoForge;
@@ -42,24 +41,6 @@ import dev.engine_room.flywheel.lib.model.baked.PartialModelEventHandler;
import dev.engine_room.flywheel.lib.util.LevelAttached;
import net.minecraft.client.Minecraft;
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.client.event.CustomizeGuiOverlayEvent;
-import net.minecraftforge.client.event.RegisterClientReloadListenersEvent;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.event.TickEvent;
-import net.minecraftforge.event.entity.EntityJoinLevelEvent;
-import net.minecraftforge.event.entity.EntityLeaveLevelEvent;
-import net.minecraftforge.event.level.LevelEvent;
-import net.minecraftforge.eventbus.api.IEventBus;
-import net.minecraftforge.fml.CrashReportCallables;
-import net.minecraftforge.fml.DistExecutor;
-import net.minecraftforge.fml.LogicalSide;
-import net.minecraftforge.fml.ModLoadingContext;
-import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
-import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
-import net.minecraftforge.registries.ForgeRegistries;
-import net.minecraftforge.registries.RegisterEvent;
@Mod(Flywheel.ID)
public final class FlywheelForge {
From 25a55227e41f849317398e17861d3fc2238e1038 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Tue, 4 Jun 2024 15:50:00 -0400
Subject: [PATCH 05/55] fix deps
---
gradle.properties | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/gradle.properties b/gradle.properties
index db47dc3ce..de2db2e5a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -29,9 +29,10 @@ fabric_loader_version = 0.15.10
fabric_api_version = 0.97.0+1.20.4
# Build dependency mod versions
-sodium_version = mc1.20.1-0.5.8
-iris_version = 1.6.17+1.20.1
-embeddium_version = 0.3.9+mc1.20.1
+sodium_version = mc1.20.4-0.5.8
+iris_version = 1.7.0+1.20.4
+embeddium_version = 0.3.14+mc1.20.4
+# not on 1.20.4
oculus_version = 1.20.1-1.6.15a
# Publication info
From 4190ac72c5b6cc1303a4c4c93823cb1de43f791e Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 7 Jun 2024 16:00:21 -0400
Subject: [PATCH 06/55] fix issues here and there
---
.../dev/engine_room/gradle/subproject/SubprojectPlugin.kt | 6 ++----
.../java/dev/engine_room/flywheel/impl/FlwCommands.java | 6 ++++--
.../java/dev/engine_room/flywheel/impl/FlywheelForge.java | 8 ++++----
.../engine_room/flywheel/impl/mixin/MinecraftMixin.java | 2 +-
.../flywheel/impl/mixin/sodium/SodiumMixinPlugin.java | 2 +-
forge/src/main/resources/META-INF/mods.toml | 8 --------
6 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
index 8398fa57e..e0c8ea1f1 100644
--- a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
+++ b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
@@ -48,14 +48,12 @@ class SubprojectPlugin: Plugin {
}
}
- @Suppress("UnstableApiUsage")
private fun setupLoom(project: Project) {
val loom = project.the()
loom.silentMojangMappingsLicense()
- // FIXME y tho? :(
- loom.mixin.useLegacyMixinAp = true
- loom.mixin.defaultRefmapName = "flywheel.refmap.json"
+ //fixme is this still needed?
+// loom.mixin.defaultRefmapName = "flywheel.refmap.json"
}
private fun setupJava(project: Project) {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
index 830c0fb0f..a9bf69df4 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
@@ -17,6 +17,8 @@ import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent;
import net.neoforged.neoforge.common.ModConfigSpec;
+import net.neoforged.neoforge.common.ModConfigSpec.BooleanValue;
+import net.neoforged.neoforge.common.ModConfigSpec.ConfigValue;
public final class FlwCommands {
private FlwCommands() {
@@ -25,7 +27,7 @@ public final class FlwCommands {
public static void registerClientCommands(RegisterClientCommandsEvent event) {
LiteralArgumentBuilder command = Commands.literal("flywheel");
- ModConfigSpec.ConfigValue backendValue = ForgeFlwConfig.INSTANCE.client.backend;
+ ConfigValue backendValue = ForgeFlwConfig.INSTANCE.client.backend;
command.then(Commands.literal("backend")
.executes(context -> {
Backend backend = BackendManager.getBackend();
@@ -55,7 +57,7 @@ public final class FlwCommands {
return Command.SINGLE_SUCCESS;
})));
- ModConfigSpec.BooleanValue limitUpdatesValue = ForgeFlwConfig.INSTANCE.client.limitUpdates;
+ BooleanValue limitUpdatesValue = ForgeFlwConfig.INSTANCE.client.limitUpdates;
command.then(Commands.literal("limitUpdates")
.executes(context -> {
if (limitUpdatesValue.get()) {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
index c0892ed56..cc1c871a3 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
@@ -6,6 +6,7 @@ import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.CrashReportCallables;
import net.neoforged.fml.DistExecutor;
import net.neoforged.fml.LogicalSide;
+import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.common.Mod;
@@ -47,11 +48,10 @@ public final class FlywheelForge {
@UnknownNullability
private static ArtifactVersion version;
- public FlywheelForge(IEventBus modEventBus) {
+ public FlywheelForge(IEventBus modEventBus, ModContainer modContainer) {
ModLoadingContext modLoadingContext = ModLoadingContext.get();
- version = modLoadingContext
- .getActiveContainer()
+ version = modContainer
.getModInfo()
.getVersion();
@@ -97,7 +97,7 @@ public final class FlywheelForge {
FlwDebugInfo.addDebugInfo(minecraft, e.getRight());
});
- modEventBus.addListener((EndClientResourceReloadEvent e) -> BackendManagerImpl.onEndClientResourceReload(e.error() != null));
+ modEventBus.addListener((EndClientResourceReloadEvent e) -> BackendManagerImpl.onEndClientResourceReload(e.error().isPresent()));
modEventBus.addListener((FMLCommonSetupEvent e) -> {
ArgumentTypeInfos.registerByClass(BackendArgument.class, BackendArgument.INFO);
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index 2305ba681..282e0f7e6 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -22,7 +22,7 @@ import dev.engine_room.flywheel.impl.FlwImpl;
import net.minecraft.client.Minecraft;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
-@Mixin(value = Minecraft.class, remap = false)
+@Mixin(Minecraft.class)
abstract class MinecraftMixin {
@Shadow
@Final
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
index 5ee303ff0..d5dda574a 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
@@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import com.google.common.base.Suppliers;
public class SodiumMixinPlugin implements IMixinConfigPlugin {
- private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("rubidium") != null);
+ private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("embeddium") != null);
@Override
public void onLoad(String mixinPackage) {
diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml
index 546372adf..0fe5ee7c5 100644
--- a/forge/src/main/resources/META-INF/mods.toml
+++ b/forge/src/main/resources/META-INF/mods.toml
@@ -32,11 +32,3 @@ modId = "neoforge"
type = "required"
versionRange = "${neoforge_version_range}"
side = "CLIENT"
-
-# Breaks dependency
-[[dependencies.${mod_id}]]
-modId = "rubidium"
-type = "incompatible"
-reason = "mixin crash with any version of rubidium under 0.7.0"
-versionRange = "[0.7.0,)"
-side = "CLIENT"
From 52d99e3a6195fd716f7d6a8139fcccb024944776 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 7 Jun 2024 16:02:09 -0400
Subject: [PATCH 07/55] fix param name
---
.../dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index 282e0f7e6..174a9a766 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -36,12 +36,12 @@ abstract class MinecraftMixin {
}
@Inject(method = "lambda$new$7", at = @At("HEAD"))
- private void flywheel$onEndInitialResourceReload(@Coerce Object minecraft$gameloadcookie, Optional error, CallbackInfo ci) {
+ private void flywheel$onEndInitialResourceReload(@Coerce Object gameLoadCookie, Optional error, CallbackInfo ci) {
ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, true, error));
}
@Inject(method = "lambda$reloadResourcePacks$39", at = @At("HEAD"))
- private void flywheel$onEndManualResourceReload(boolean bl, @Coerce Object minecraft$gameloadcookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
+ private void flywheel$onEndManualResourceReload(boolean bl, @Coerce Object gameLoadCookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
}
}
From 47e80a66a03954ad2b2aa100ddde87dec433472e Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 7 Jun 2024 16:15:10 -0400
Subject: [PATCH 08/55] optimize imports
---
.../api/event/ReloadLevelRendererEvent.java | 3 +-
.../flywheel/api/event/RenderStageEvent.java | 3 +-
.../lib/model/baked/BakedModelBufferer.java | 5 +--
.../model/baked/ForgeBakedModelBuilder.java | 3 +-
.../model/baked/ForgeBlockModelBuilder.java | 3 +-
.../baked/ForgeMultiBlockModelBuilder.java | 3 +-
.../model/baked/PartialModelEventHandler.java | 3 +-
.../flywheel/impl/FlwCommands.java | 1 -
.../flywheel/impl/FlwImplXplatImpl.java | 3 +-
.../flywheel/impl/FlwLibXplatImpl.java | 5 +--
.../flywheel/impl/FlywheelForge.java | 43 ++++++++-----------
.../flywheel/impl/ForgeFlwConfig.java | 7 ++-
.../flywheel/impl/mixin/MinecraftMixin.java | 5 +--
.../impl/mixin/sodium/SodiumMixinPlugin.java | 4 +-
14 files changed, 35 insertions(+), 56 deletions(-)
diff --git a/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java b/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java
index a6a9ed00c..ae4a0077f 100644
--- a/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java
+++ b/forge/src/api/java/dev/engine_room/flywheel/api/event/ReloadLevelRendererEvent.java
@@ -1,10 +1,9 @@
package dev.engine_room.flywheel.api.event;
-import net.neoforged.bus.api.Event;
-
import org.jetbrains.annotations.Nullable;
import net.minecraft.client.multiplayer.ClientLevel;
+import net.neoforged.bus.api.Event;
/**
* This event is posted to the Forge event bus.
diff --git a/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java b/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
index d9c27aad7..1062e93e8 100644
--- a/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
+++ b/forge/src/api/java/dev/engine_room/flywheel/api/event/RenderStageEvent.java
@@ -1,7 +1,5 @@
package dev.engine_room.flywheel.api.event;
-import net.neoforged.bus.api.Event;
-
import org.joml.Matrix4f;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -9,6 +7,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.RenderBuffers;
+import net.neoforged.bus.api.Event;
/**
* This event is posted to the Forge event bus.
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
index 4453ec5b8..8709e20a1 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
@@ -3,9 +3,6 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.Iterator;
import java.util.function.Function;
-import net.neoforged.neoforge.client.ChunkRenderTypeSet;
-import net.neoforged.neoforge.client.model.data.ModelData;
-
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
@@ -23,6 +20,8 @@ import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
+import net.neoforged.neoforge.client.ChunkRenderTypeSet;
+import net.neoforged.neoforge.client.model.data.ModelData;
final class BakedModelBufferer {
static final RenderType[] CHUNK_LAYERS = RenderType.chunkBufferLayers().toArray(RenderType[]::new);
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java
index 3d9cf4885..dccefefec 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java
@@ -2,8 +2,6 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.function.BiFunction;
-import net.neoforged.neoforge.client.model.data.ModelData;
-
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -18,6 +16,7 @@ import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
+import net.neoforged.neoforge.client.model.data.ModelData;
public final class ForgeBakedModelBuilder extends BakedModelBuilder {
@Nullable
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java
index d09730dc7..fabe098f6 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java
@@ -2,8 +2,6 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.function.BiFunction;
-import net.neoforged.neoforge.client.model.data.ModelData;
-
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -16,6 +14,7 @@ import dev.engine_room.flywheel.lib.model.SimpleModel;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
+import net.neoforged.neoforge.client.model.data.ModelData;
public final class ForgeBlockModelBuilder extends BlockModelBuilder {
@Nullable
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java
index 9bbf47079..e8fd93325 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java
@@ -3,8 +3,6 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.function.BiFunction;
import java.util.function.Function;
-import net.neoforged.neoforge.client.model.data.ModelData;
-
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -17,6 +15,7 @@ import dev.engine_room.flywheel.lib.model.SimpleModel;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter;
+import net.neoforged.neoforge.client.model.data.ModelData;
public final class ForgeMultiBlockModelBuilder extends MultiBlockModelBuilder {
@Nullable
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
index f84fc5ff3..0e2189468 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
@@ -2,12 +2,11 @@ package dev.engine_room.flywheel.lib.model.baked;
import java.util.Map;
-import net.neoforged.neoforge.client.event.ModelEvent;
-
import org.jetbrains.annotations.ApiStatus;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.resources.ResourceLocation;
+import net.neoforged.neoforge.client.event.ModelEvent;
@ApiStatus.Internal
public final class PartialModelEventHandler {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
index a9bf69df4..3ff42e291 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
@@ -16,7 +16,6 @@ import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent;
-import net.neoforged.neoforge.common.ModConfigSpec;
import net.neoforged.neoforge.common.ModConfigSpec.BooleanValue;
import net.neoforged.neoforge.common.ModConfigSpec.ConfigValue;
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
index cddd85e4e..dcbcce71c 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
@@ -1,7 +1,5 @@
package dev.engine_room.flywheel.impl;
-import net.neoforged.neoforge.common.NeoForge;
-
import org.jetbrains.annotations.Nullable;
import dev.engine_room.flywheel.api.event.BeginFrameEvent;
@@ -10,6 +8,7 @@ import dev.engine_room.flywheel.api.event.RenderContext;
import dev.engine_room.flywheel.api.event.RenderStage;
import dev.engine_room.flywheel.api.event.RenderStageEvent;
import net.minecraft.client.multiplayer.ClientLevel;
+import net.neoforged.neoforge.common.NeoForge;
public class FlwImplXplatImpl implements FlwImplXplat {
@Override
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
index c4bc9ffae..2557efc45 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
@@ -2,9 +2,6 @@ package dev.engine_room.flywheel.impl;
import java.lang.reflect.Field;
-import net.neoforged.fml.ModList;
-import net.neoforged.fml.util.ObfuscationReflectionHelper;
-
import org.jetbrains.annotations.Nullable;
import dev.engine_room.flywheel.lib.internal.FlwLibXplat;
@@ -23,6 +20,8 @@ import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
+import net.neoforged.fml.ModList;
+import net.neoforged.fml.util.ObfuscationReflectionHelper;
public class FlwLibXplatImpl implements FlwLibXplat {
@Override
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
index cc1c871a3..e60ade889 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
@@ -1,30 +1,5 @@
package dev.engine_room.flywheel.impl;
-import net.minecraft.core.registries.Registries;
-import net.neoforged.api.distmarker.Dist;
-import net.neoforged.bus.api.IEventBus;
-import net.neoforged.fml.CrashReportCallables;
-import net.neoforged.fml.DistExecutor;
-import net.neoforged.fml.LogicalSide;
-import net.neoforged.fml.ModContainer;
-import net.neoforged.fml.ModLoadingContext;
-
-import net.neoforged.fml.common.Mod;
-
-import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
-import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
-import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
-import net.neoforged.neoforge.common.NeoForge;
-
-import net.neoforged.neoforge.event.TickEvent;
-
-import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
-
-import net.neoforged.neoforge.event.entity.EntityLeaveLevelEvent;
-
-import net.neoforged.neoforge.event.level.LevelEvent;
-import net.neoforged.neoforge.registries.RegisterEvent;
-
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.jetbrains.annotations.UnknownNullability;
@@ -42,6 +17,24 @@ import dev.engine_room.flywheel.lib.model.baked.PartialModelEventHandler;
import dev.engine_room.flywheel.lib.util.LevelAttached;
import net.minecraft.client.Minecraft;
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
+import net.minecraft.core.registries.Registries;
+import net.neoforged.api.distmarker.Dist;
+import net.neoforged.bus.api.IEventBus;
+import net.neoforged.fml.CrashReportCallables;
+import net.neoforged.fml.DistExecutor;
+import net.neoforged.fml.LogicalSide;
+import net.neoforged.fml.ModContainer;
+import net.neoforged.fml.ModLoadingContext;
+import net.neoforged.fml.common.Mod;
+import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
+import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
+import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
+import net.neoforged.neoforge.common.NeoForge;
+import net.neoforged.neoforge.event.TickEvent;
+import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
+import net.neoforged.neoforge.event.entity.EntityLeaveLevelEvent;
+import net.neoforged.neoforge.event.level.LevelEvent;
+import net.neoforged.neoforge.registries.RegisterEvent;
@Mod(Flywheel.ID)
public final class FlywheelForge {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
index 60832455d..9ef397337 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
@@ -1,9 +1,5 @@
package dev.engine_room.flywheel.impl;
-import net.neoforged.fml.ModLoadingContext;
-import net.neoforged.fml.config.ModConfig;
-import net.neoforged.neoforge.common.ModConfigSpec;
-
import org.apache.commons.lang3.tuple.Pair;
import org.jetbrains.annotations.Nullable;
@@ -11,6 +7,9 @@ import dev.engine_room.flywheel.api.backend.Backend;
import dev.engine_room.flywheel.api.backend.BackendManager;
import net.minecraft.ResourceLocationException;
import net.minecraft.resources.ResourceLocation;
+import net.neoforged.fml.ModLoadingContext;
+import net.neoforged.fml.config.ModConfig;
+import net.neoforged.neoforge.common.ModConfigSpec;
public class ForgeFlwConfig implements FlwConfig {
public static final ForgeFlwConfig INSTANCE = new ForgeFlwConfig();
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index 174a9a766..a6c82dd10 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -4,8 +4,6 @@ import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
-import net.neoforged.fml.ModLoader;
-
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -15,12 +13,11 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import com.mojang.realmsclient.client.RealmsClient;
-
import dev.engine_room.flywheel.api.event.EndClientResourceReloadEvent;
import dev.engine_room.flywheel.impl.FlwImpl;
import net.minecraft.client.Minecraft;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
+import net.neoforged.fml.ModLoader;
@Mixin(Minecraft.class)
abstract class MinecraftMixin {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
index d5dda574a..c2fe3df02 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
@@ -4,14 +4,14 @@ import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
-import net.neoforged.fml.loading.LoadingModList;
-
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import com.google.common.base.Suppliers;
+import net.neoforged.fml.loading.LoadingModList;
+
public class SodiumMixinPlugin implements IMixinConfigPlugin {
private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("embeddium") != null);
From 349e7b3cb319bca9901c3ef9dd296ab9e2c5e71c Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 7 Jun 2024 16:24:52 -0400
Subject: [PATCH 09/55] fix mixin
---
.../flywheel/impl/mixin/fabric/MinecraftMixin.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
index 6ff63b33d..c07e7b037 100644
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
+++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
@@ -22,8 +22,8 @@ abstract class MinecraftMixin {
}
}
- @Inject(method = "clearClientLevel(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At("HEAD"))
- private void flywheel$onClearLevel(CallbackInfo ci) {
+ @Inject(method = "disconnect(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At("HEAD"))
+ private void flywheel$onDisconnect(CallbackInfo ci) {
if (level != null) {
LevelAttached.invalidateLevel(level);
}
From 045771dce540ce81b07a0be001d0defe6806d3d2 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 7 Jun 2024 16:46:30 -0400
Subject: [PATCH 10/55] fix param names
---
.../dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index a6c82dd10..b88686cd8 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -38,7 +38,7 @@ abstract class MinecraftMixin {
}
@Inject(method = "lambda$reloadResourcePacks$39", at = @At("HEAD"))
- private void flywheel$onEndManualResourceReload(boolean bl, @Coerce Object gameLoadCookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
+ private void flywheel$onEndManualResourceReload(boolean recovery, @Coerce Object gameLoadCookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
}
}
From a9127bee1c2987584db81a03cdef391e59ad8f42 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 7 Jun 2024 16:57:02 -0400
Subject: [PATCH 11/55] fix instance textures
---
.../engine_room/flywheel/lib/model/part/ModelPartConverter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java
index 637c5523e..eee979b09 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java
@@ -53,7 +53,7 @@ public final class ModelPartConverter {
void map(Vector2f uv);
static TextureMapper toSprite(TextureAtlasSprite sprite) {
- return uv -> uv.set(sprite.getU(uv.x * 16), sprite.getV(uv.y * 16));
+ return uv -> uv.set(sprite.getU(uv.x), sprite.getV(uv.y));
}
}
From eccbfbc64921eb497e90404e83ccf446f16b86aa Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Wed, 10 Jul 2024 10:24:12 -0400
Subject: [PATCH 12/55] build: update dependencies
---
gradle.properties | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/gradle.properties b/gradle.properties
index 35192faf3..a7320e1e0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -12,30 +12,30 @@ mod_issues = https://github.com/Jozufozu/Flywheel/issues
mod_homepage = https://github.com/Jozufozu/Flywheel
# Mod dependency declarations
-minecraft_semver_version_range = >=1.20.4 <1.20.5
-minecraft_maven_version_range = [1.20.4,1.20.5)
-fabric_api_version_range = >=0.97.0
-neoforge_version_range = [20.4.234,)
+minecraft_semver_version_range = >=1.21 <1.21.1
+minecraft_maven_version_range = [1.21,1.21.0)
+fabric_api_version_range = >=0.100.6
+neoforge_version_range = [21.0.79-beta,)
# General build dependency versions
-java_version = 17
+java_version = 21
# FIXME: This doesn't do anything.
# arch_loom_version = 1.6-SNAPSHOT
-parchment_version = 2024.04.14
+parchment_version = 2024.07.07
# Minecraft build dependency versions
-minecraft_version = 1.20.4
-neoforge_version = 20.4.234
-fabric_loader_version = 0.15.10
-fabric_api_version = 0.97.0+1.20.4
+minecraft_version = 1.21
+neoforge_version = 21.0.79-beta
+fabric_loader_version = 0.15.11
+fabric_api_version = 0.100.6+1.21
# Build dependency mod versions
-sodium_version = mc1.20.4-0.5.8
-iris_version = 1.7.0+1.20.4
-embeddium_version = 0.3.14+mc1.20.4
-# not on 1.20.4
+sodium_version = mc1.21-0.5.11
+iris_version = 1.7.3+1.21
+embeddium_version = 1.0.4+mc1.21
+# no 1.21 :(
oculus_version = 1.20.1-1.6.15a
# Publication info
group = dev.engine_room.flywheel
-artifact_minecraft_version = 1.20.4
+artifact_minecraft_version = 1.21
From d587ec0ec8b7763f60d8d07cf136e9e4db97047f Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Wed, 10 Jul 2024 11:27:18 -0400
Subject: [PATCH 13/55] 1.21 Port I
---
.github/workflows/build.yml | 2 +-
.../engine_room/flywheel/api/Flywheel.java | 2 +-
.../flywheel/lib/material/Materials.java | 2 +-
.../flywheel/lib/model/baked/MeshHelper.java | 8 +--
.../lib/model/baked/PartialModel.java | 8 +--
.../baked/TransformingVertexConsumer.java | 57 ++++++-------------
.../flywheel/lib/model/part/VertexWriter.java | 44 ++++++--------
.../flywheel/lib/util/ResourceUtil.java | 2 +-
.../lib/visual/component/ShadowComponent.java | 2 +-
.../lib/model/baked/BakedModelBufferer.java | 4 +-
.../lib/model/baked/UniversalMeshEmitter.java | 51 ++++++-----------
.../flywheel/impl/FabricFlwConfig.java | 2 +-
.../lib/model/baked/BakedModelBufferer.java | 4 +-
.../flywheel/lib/model/baked/MeshEmitter.java | 37 +++---------
.../model/baked/PartialModelEventHandler.java | 4 +-
.../flywheel/impl/FlywheelForge.java | 21 ++++---
.../flywheel/impl/ForgeFlwConfig.java | 6 +-
.../flywheel/impl/mixin/MinecraftMixin.java | 6 +-
.../sodium/ChunkBuilderMeshingTaskMixin.java | 4 +-
19 files changed, 102 insertions(+), 164 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index dd1169eae..6a538b35b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -7,7 +7,7 @@ jobs:
strategy:
matrix:
java: [
- 17 # Current Java LTS & minimum supported by Minecraft
+ 21 # Current Java LTS & minimum supported by Minecraft
]
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}
diff --git a/common/src/api/java/dev/engine_room/flywheel/api/Flywheel.java b/common/src/api/java/dev/engine_room/flywheel/api/Flywheel.java
index ef18b8b27..8193fa8e5 100644
--- a/common/src/api/java/dev/engine_room/flywheel/api/Flywheel.java
+++ b/common/src/api/java/dev/engine_room/flywheel/api/Flywheel.java
@@ -9,6 +9,6 @@ public final class Flywheel {
}
public static ResourceLocation rl(String path) {
- return new ResourceLocation(ID, path);
+ return ResourceLocation.fromNamespaceAndPath(ID, path);
}
}
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/material/Materials.java b/common/src/lib/java/dev/engine_room/flywheel/lib/material/Materials.java
index 2cab44864..9b696f001 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/material/Materials.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/material/Materials.java
@@ -6,7 +6,7 @@ import net.minecraft.client.renderer.Sheets;
import net.minecraft.resources.ResourceLocation;
public final class Materials {
- private static final ResourceLocation MINECART_LOCATION = new ResourceLocation("textures/entity/minecart.png");
+ private static final ResourceLocation MINECART_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/minecart.png");
public static final Material CHUNK_SOLID_SHADED = SimpleMaterial.builder()
.build();
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java
index e6326600b..5558a6316 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java
@@ -5,7 +5,7 @@ import java.nio.ByteBuffer;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.system.MemoryUtil;
-import com.mojang.blaze3d.vertex.BufferBuilder;
+import com.mojang.blaze3d.vertex.MeshData;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
@@ -16,15 +16,15 @@ final class MeshHelper {
private MeshHelper() {
}
- public static SimpleMesh blockVerticesToMesh(BufferBuilder.RenderedBuffer buffer, @Nullable String meshDescriptor) {
- BufferBuilder.DrawState drawState = buffer.drawState();
+ public static SimpleMesh blockVerticesToMesh(MeshData data, @Nullable String meshDescriptor) {
+ MeshData.DrawState drawState = data.drawState();
int vertexCount = drawState.vertexCount();
long srcStride = drawState.format().getVertexSize();
VertexView vertexView = new NoOverlayVertexView();
long dstStride = vertexView.stride();
- ByteBuffer src = buffer.vertexBuffer();
+ ByteBuffer src = data.vertexBuffer();
MemoryBlock dst = MemoryBlock.malloc((long) vertexCount * dstStride);
long srcPtr = MemoryUtil.memAddress(src);
long dstPtr = dst.ptr();
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java
index ba96c09c0..4b0d375f6 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.resources.model.BakedModel;
-import net.minecraft.resources.ResourceLocation;
+import net.minecraft.client.resources.model.ModelResourceLocation;
/**
* A helper class for loading and accessing JSON models not directly used by any blocks or items.
@@ -19,10 +19,10 @@ public class PartialModel {
static final List ALL = new ArrayList<>();
static boolean tooLate = false;
- protected final ResourceLocation modelLocation;
+ protected final ModelResourceLocation modelLocation;
protected BakedModel bakedModel;
- public PartialModel(ResourceLocation modelLocation) {
+ public PartialModel(ModelResourceLocation modelLocation) {
if (tooLate) {
throw new RuntimeException("Attempted to create PartialModel with location '" + modelLocation + "' after start of initial resource reload!");
}
@@ -34,7 +34,7 @@ public class PartialModel {
}
}
- public ResourceLocation getLocation() {
+ public ModelResourceLocation getLocation() {
return modelLocation;
}
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/TransformingVertexConsumer.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/TransformingVertexConsumer.java
index d40a4df79..0e8b91380 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/TransformingVertexConsumer.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/TransformingVertexConsumer.java
@@ -26,67 +26,46 @@ class TransformingVertexConsumer implements VertexConsumer {
}
@Override
- public VertexConsumer vertex(double x, double y, double z) {
+ public VertexConsumer addVertex(float x, float y, float z) {
Matrix4f matrix = poseStack.last().pose();
- float fx = (float) x;
- float fy = (float) y;
- float fz = (float) z;
- delegate.vertex(
- MatrixMath.transformPositionX(matrix, fx, fy, fz),
- MatrixMath.transformPositionY(matrix, fx, fy, fz),
- MatrixMath.transformPositionZ(matrix, fx, fy, fz));
+ delegate.addVertex(
+ MatrixMath.transformPositionX(matrix, x, y, z),
+ MatrixMath.transformPositionY(matrix, x, y, z),
+ MatrixMath.transformPositionZ(matrix, x, y, z));
return this;
}
@Override
- public VertexConsumer color(int red, int green, int blue, int alpha) {
- delegate.color(red, green, blue, alpha);
+ public VertexConsumer setColor(int red, int green, int blue, int alpha) {
+ delegate.setColor(red, green, blue, alpha);
return this;
}
@Override
- public VertexConsumer uv(float u, float v) {
- delegate.uv(u, v);
+ public VertexConsumer setUv(float u, float v) {
+ delegate.setUv(u, v);
return this;
}
@Override
- public VertexConsumer overlayCoords(int u, int v) {
- delegate.overlayCoords(u, v);
+ public VertexConsumer setUv1(int u, int v) {
+ delegate.setUv1(u, v);
return this;
}
@Override
- public VertexConsumer uv2(int u, int v) {
- delegate.uv2(u, v);
+ public VertexConsumer setUv2(int u, int v) {
+ delegate.setUv2(u, v);
return this;
}
@Override
- public VertexConsumer normal(float x, float y, float z) {
+ public VertexConsumer setNormal(float x, float y, float z) {
Matrix3f matrix = poseStack.last().normal();
- float fx = (float) x;
- float fy = (float) y;
- float fz = (float) z;
- delegate.normal(
- MatrixMath.transformNormalX(matrix, fx, fy, fz),
- MatrixMath.transformNormalY(matrix, fx, fy, fz),
- MatrixMath.transformNormalZ(matrix, fx, fy, fz));
+ delegate.setNormal(
+ MatrixMath.transformNormalX(matrix, x, y, z),
+ MatrixMath.transformNormalY(matrix, x, y, z),
+ MatrixMath.transformNormalZ(matrix, x, y, z));
return this;
}
-
- @Override
- public void endVertex() {
- delegate.endVertex();
- }
-
- @Override
- public void defaultColor(int red, int green, int blue, int alpha) {
- delegate.defaultColor(red, green, blue, alpha);
- }
-
- @Override
- public void unsetDefaultColor() {
- delegate.unsetDefaultColor();
- }
}
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/VertexWriter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/VertexWriter.java
index f8b9aa5f6..b76613cb3 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/VertexWriter.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/VertexWriter.java
@@ -34,25 +34,24 @@ class VertexWriter implements VertexConsumer {
}
@Override
- public VertexConsumer vertex(double x, double y, double z) {
+ public VertexConsumer addVertex(float x, float y, float z) {
if (!filledPosition) {
long ptr = vertexPtr();
- MemoryUtil.memPutFloat(ptr, (float) x);
- MemoryUtil.memPutFloat(ptr + 4, (float) y);
- MemoryUtil.memPutFloat(ptr + 8, (float) z);
+ MemoryUtil.memPutFloat(ptr, x);
+ MemoryUtil.memPutFloat(ptr + 4, y);
+ MemoryUtil.memPutFloat(ptr + 8, z);
filledPosition = true;
}
- return this;
+ return endVertexIfNeeded();
}
@Override
- public VertexConsumer color(int red, int green, int blue, int alpha) {
- // ignore color
- return this;
+ public VertexConsumer setColor(int red, int green, int blue, int alpha) {
+ return endVertexIfNeeded();
}
@Override
- public VertexConsumer uv(float u, float v) {
+ public VertexConsumer setUv(float u, float v) {
if (!filledTexture) {
if (textureMapper != null) {
uvVec.set(u, v);
@@ -66,23 +65,23 @@ class VertexWriter implements VertexConsumer {
MemoryUtil.memPutFloat(ptr + 16, v);
filledTexture = true;
}
- return this;
+ return endVertexIfNeeded();
}
@Override
- public VertexConsumer overlayCoords(int u, int v) {
+ public VertexConsumer setUv1(int u, int v) {
// ignore overlay
- return this;
+ return endVertexIfNeeded();
}
@Override
- public VertexConsumer uv2(int u, int v) {
+ public VertexConsumer setUv2(int u, int v) {
// ignore light
- return this;
+ return endVertexIfNeeded();
}
@Override
- public VertexConsumer normal(float x, float y, float z) {
+ public VertexConsumer setNormal(float x, float y, float z) {
if (!filledNormal) {
long ptr = vertexPtr();
MemoryUtil.memPutByte(ptr + 20, RenderMath.nb(x));
@@ -90,13 +89,12 @@ class VertexWriter implements VertexConsumer {
MemoryUtil.memPutByte(ptr + 22, RenderMath.nb(z));
filledNormal = true;
}
- return this;
+ return endVertexIfNeeded();
}
- @Override
- public void endVertex() {
+ public VertexConsumer endVertexIfNeeded() {
if (!filledPosition || !filledTexture || !filledNormal) {
- throw new IllegalStateException("Not filled all elements of the vertex");
+ return this;
}
filledPosition = false;
@@ -109,14 +107,8 @@ class VertexWriter implements VertexConsumer {
if (byteSize > capacity) {
data = data.realloc(capacity * 2);
}
- }
- @Override
- public void defaultColor(int red, int green, int blue, int alpha) {
- }
-
- @Override
- public void unsetDefaultColor() {
+ return this;
}
private long vertexPtr() {
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java b/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java
index 9eb0f1419..0bc16e618 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java
@@ -30,7 +30,7 @@ public final class ResourceUtil {
}
}
- return new ResourceLocation(namespace, path);
+ return ResourceLocation.fromNamespaceAndPath(namespace, path);
}
/**
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java b/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
index 337be2128..fe411ddeb 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
@@ -44,7 +44,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
*/
public class ShadowComponent implements EntityComponent {
private static final Material SHADOW_MATERIAL = SimpleMaterial.builder()
- .texture(new ResourceLocation("textures/misc/shadow.png"))
+ .texture(ResourceLocation.withDefaultNamespace("textures/misc/shadow.png"))
.mipmap(false)
.polygonOffset(true) // vanilla shadows use "view offset" but this seems to work fine
.transparency(Transparency.TRANSLUCENT)
diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
index 2f8a09ca6..349b46164 100644
--- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
+++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
@@ -4,7 +4,7 @@ import java.util.Iterator;
import org.jetbrains.annotations.Nullable;
-import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
+import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.objects.Reference2ReferenceMap;
@@ -129,7 +129,7 @@ final class BakedModelBufferer {
}
public interface ResultConsumer {
- void accept(RenderType renderType, boolean shaded, RenderedBuffer data);
+ void accept(RenderType renderType, boolean shaded, MeshData data);
}
private static class ThreadLocalObjects {
diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/UniversalMeshEmitter.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/UniversalMeshEmitter.java
index feb560bcc..5547b4791 100644
--- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/UniversalMeshEmitter.java
+++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/UniversalMeshEmitter.java
@@ -56,69 +56,54 @@ class UniversalMeshEmitter implements VertexConsumer {
}
@Override
- public VertexConsumer vertex(double x, double y, double z) {
- currentDelegate.vertex(x, y, z);
+ public VertexConsumer addVertex(float x, float y, float z) {
+ currentDelegate.addVertex(x, y, z);
return this;
}
@Override
- public VertexConsumer color(int red, int green, int blue, int alpha) {
- currentDelegate.color(red, green, blue, alpha);
+ public VertexConsumer setColor(int red, int green, int blue, int alpha) {
+ currentDelegate.setColor(red, green, blue, alpha);
return this;
}
@Override
- public VertexConsumer uv(float u, float v) {
- currentDelegate.uv(u, v);
+ public VertexConsumer setUv(float u, float v) {
+ currentDelegate.setUv(u, v);
return this;
}
@Override
- public VertexConsumer overlayCoords(int u, int v) {
- currentDelegate.overlayCoords(u, v);
+ public VertexConsumer setUv1(int u, int v) {
+ currentDelegate.setUv1(u, v);
return this;
}
@Override
- public VertexConsumer uv2(int u, int v) {
- currentDelegate.uv2(u, v);
+ public VertexConsumer setUv2(int u, int v) {
+ currentDelegate.setUv2(u, v);
return this;
}
@Override
- public VertexConsumer normal(float x, float y, float z) {
- currentDelegate.normal(x, y, z);
+ public VertexConsumer setNormal(float x, float y, float z) {
+ currentDelegate.setNormal(x, y, z);
return this;
}
@Override
- public void endVertex() {
- currentDelegate.endVertex();
+ public void addVertex(float x, float y, float z, int color, float u, float v, int packedOverlay, int packedLight, float normalX, float normalY, float normalZ) {
+ currentDelegate.addVertex(x, y, z, color, u, v, packedOverlay, packedLight, normalX, normalY, normalZ);
}
@Override
- public void defaultColor(int red, int green, int blue, int alpha) {
- currentDelegate.defaultColor(red, green, blue, alpha);
+ public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, float alpha, int packedLight, int packedOverlay) {
+ currentDelegate.putBulkData(pose, quad, red, green, blue, alpha, packedLight, packedOverlay);
}
@Override
- public void unsetDefaultColor() {
- currentDelegate.unsetDefaultColor();
- }
-
- @Override
- public void vertex(float x, float y, float z, float red, float green, float blue, float alpha, float u, float v, int overlay, int light, float normalX, float normalY, float normalZ) {
- currentDelegate.vertex(x, y, z, red, green, blue, alpha, u, v, overlay, light, normalX, normalY, normalZ);
- }
-
- @Override
- public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, int light, int overlay) {
- currentDelegate.putBulkData(pose, quad, red, green, blue, light, overlay);
- }
-
- @Override
- public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float[] brightnesses, float red, float green, float blue, int[] lights, int overlay, boolean readExistingColor) {
- currentDelegate.putBulkData(pose, quad, brightnesses, red, green, blue, lights, overlay, readExistingColor);
+ public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float[] brightness, float red, float green, float blue, float alpha, int[] lightmap, int packedOverlay, boolean readAlpha) {
+ currentDelegate.putBulkData(pose, quad, brightness, red, green, blue, alpha, lightmap, packedOverlay, readAlpha);
}
private class WrapperModel extends ForwardingBakedModel {
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/FabricFlwConfig.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/FabricFlwConfig.java
index 9c9554917..b8a7cecc0 100644
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/FabricFlwConfig.java
+++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/FabricFlwConfig.java
@@ -99,7 +99,7 @@ public class FabricFlwConfig implements FlwConfig {
if (backendJson instanceof JsonPrimitive primitive && primitive.isString()) {
var value = primitive.getAsString();
try {
- this.backend = Backend.REGISTRY.getOrThrow(new ResourceLocation(value));
+ this.backend = Backend.REGISTRY.getOrThrow(ResourceLocation.parse(value));
return;
} catch (ResourceLocationException e) {
msg = "'backend' value '" + value + "' is not a valid resource location";
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
index 8709e20a1..8f3bae0b0 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java
@@ -5,7 +5,7 @@ import java.util.function.Function;
import org.jetbrains.annotations.Nullable;
-import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
+import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
@@ -130,7 +130,7 @@ final class BakedModelBufferer {
}
public interface ResultConsumer {
- void accept(RenderType renderType, boolean shaded, RenderedBuffer data);
+ void accept(RenderType renderType, boolean shaded, MeshData data);
}
private static class ThreadLocalObjects {
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
index e878ae95c..c6e181a5c 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
@@ -63,12 +63,6 @@ class MeshEmitter implements VertexConsumer {
}
}
- @Override
- public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, int light, int overlay) {
- prepareForGeometry(quad);
- bufferBuilder.putBulkData(pose, quad, red, green, blue, light, overlay);
- }
-
@Override
public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, float alpha, int light, int overlay, boolean readExistingColor) {
prepareForGeometry(quad);
@@ -76,9 +70,9 @@ class MeshEmitter implements VertexConsumer {
}
@Override
- public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float[] brightnesses, float red, float green, float blue, int[] lights, int overlay, boolean readExistingColor) {
+ public void putBulkData(PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, float alpha, int packedLight, int packedOverlay) {
prepareForGeometry(quad);
- bufferBuilder.putBulkData(pose, quad, brightnesses, red, green, blue, lights, overlay, readExistingColor);
+ bufferBuilder.putBulkData(pose, quad, red, green, blue, alpha, packedLight, packedOverlay);
}
@Override
@@ -88,47 +82,32 @@ class MeshEmitter implements VertexConsumer {
}
@Override
- public VertexConsumer vertex(double x, double y, double z) {
+ public VertexConsumer addVertex(float x, float y, float z) {
throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
}
@Override
- public VertexConsumer color(int red, int green, int blue, int alpha) {
+ public VertexConsumer setColor(int red, int green, int blue, int alpha) {
throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
}
@Override
- public VertexConsumer uv(float u, float v) {
+ public VertexConsumer setUv(float u, float v) {
throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
}
@Override
- public VertexConsumer overlayCoords(int u, int v) {
+ public VertexConsumer setUv1(int u, int v) {
throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
}
@Override
- public VertexConsumer uv2(int u, int v) {
+ public VertexConsumer setUv2(int u, int v) {
throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
}
@Override
- public VertexConsumer normal(float x, float y, float z) {
- throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
- }
-
- @Override
- public void endVertex() {
- throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
- }
-
- @Override
- public void defaultColor(int red, int green, int blue, int alpha) {
- throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
- }
-
- @Override
- public void unsetDefaultColor() {
+ public VertexConsumer setNormal(float normalX, float normalY, float normalZ) {
throw new UnsupportedOperationException("MeshEmitter only supports putBulkData!");
}
}
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
index 0e2189468..f403b7c44 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
@@ -5,7 +5,7 @@ import java.util.Map;
import org.jetbrains.annotations.ApiStatus;
import net.minecraft.client.resources.model.BakedModel;
-import net.minecraft.resources.ResourceLocation;
+import net.minecraft.client.resources.model.ModelResourceLocation;
import net.neoforged.neoforge.client.event.ModelEvent;
@ApiStatus.Internal
@@ -22,7 +22,7 @@ public final class PartialModelEventHandler {
}
public static void onBakingCompleted(ModelEvent.BakingCompleted event) {
- Map models = event.getModels();
+ Map models = event.getModels();
for (PartialModel partial : PartialModel.ALL) {
partial.set(models.get(partial.getLocation()));
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
index e60ade889..dc8e93a72 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
@@ -1,5 +1,7 @@
package dev.engine_room.flywheel.impl;
+import java.util.function.Supplier;
+
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.jetbrains.annotations.UnknownNullability;
@@ -18,22 +20,20 @@ import dev.engine_room.flywheel.lib.util.LevelAttached;
import net.minecraft.client.Minecraft;
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
import net.minecraft.core.registries.Registries;
-import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.CrashReportCallables;
-import net.neoforged.fml.DistExecutor;
-import net.neoforged.fml.LogicalSide;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
+import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
import net.neoforged.neoforge.common.NeoForge;
-import net.neoforged.neoforge.event.TickEvent;
import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
import net.neoforged.neoforge.event.entity.EntityLeaveLevelEvent;
import net.neoforged.neoforge.event.level.LevelEvent;
+import net.neoforged.neoforge.event.tick.LevelTickEvent;
import net.neoforged.neoforge.registries.RegisterEvent;
@Mod(Flywheel.ID)
@@ -50,9 +50,12 @@ public final class FlywheelForge {
IEventBus forgeEventBus = NeoForge.EVENT_BUS;
- ForgeFlwConfig.INSTANCE.registerSpecs(modLoadingContext);
+ ForgeFlwConfig.INSTANCE.registerSpecs(modContainer);
- DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FlywheelForge.clientInit(forgeEventBus, modEventBus));
+ if (FMLLoader.getDist().isClient()) {
+ Supplier toRun = () -> () -> FlywheelForge.clientInit(forgeEventBus, modEventBus);
+ toRun.get().run();
+ }
}
private static void clientInit(IEventBus forgeEventBus, IEventBus modEventBus) {
@@ -67,10 +70,10 @@ public final class FlywheelForge {
private static void registerImplEventListeners(IEventBus forgeEventBus, IEventBus modEventBus) {
forgeEventBus.addListener((ReloadLevelRendererEvent e) -> BackendManagerImpl.onReloadLevelRenderer(e.level()));
- forgeEventBus.addListener((TickEvent.LevelTickEvent e) -> {
+ forgeEventBus.addListener((LevelTickEvent.Post e) -> {
// Make sure we don't tick on the server somehow.
- if (e.phase == TickEvent.Phase.END && e.side == LogicalSide.CLIENT) {
- VisualizationEventHandler.onClientTick(Minecraft.getInstance(), e.level);
+ if (FMLLoader.getDist().isClient()) {
+ VisualizationEventHandler.onClientTick(Minecraft.getInstance(), e.getLevel());
}
});
forgeEventBus.addListener((BeginFrameEvent e) -> VisualizationEventHandler.onBeginFrame(e.context()));
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
index 9ef397337..4ae9d449b 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
@@ -7,7 +7,7 @@ import dev.engine_room.flywheel.api.backend.Backend;
import dev.engine_room.flywheel.api.backend.BackendManager;
import net.minecraft.ResourceLocationException;
import net.minecraft.resources.ResourceLocation;
-import net.neoforged.fml.ModLoadingContext;
+import net.neoforged.fml.ModContainer;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.neoforge.common.ModConfigSpec;
@@ -38,7 +38,7 @@ public class ForgeFlwConfig implements FlwConfig {
private static Backend parseBackend(String idStr) {
ResourceLocation backendId;
try {
- backendId = new ResourceLocation(idStr);
+ backendId = ResourceLocation.parse(idStr);
} catch (ResourceLocationException e) {
FlwImpl.CONFIG_LOGGER.warn("'backend' value '{}' is not a valid resource location", idStr);
return null;
@@ -63,7 +63,7 @@ public class ForgeFlwConfig implements FlwConfig {
return client.workerThreads.get();
}
- public void registerSpecs(ModLoadingContext context) {
+ public void registerSpecs(ModContainer context) {
context.registerConfig(ModConfig.Type.CLIENT, clientSpec);
}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index b88686cd8..fb83f05a7 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -17,7 +17,7 @@ import dev.engine_room.flywheel.api.event.EndClientResourceReloadEvent;
import dev.engine_room.flywheel.impl.FlwImpl;
import net.minecraft.client.Minecraft;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
-import net.neoforged.fml.ModLoader;
+import net.neoforged.neoforge.common.NeoForge;
@Mixin(Minecraft.class)
abstract class MinecraftMixin {
@@ -34,11 +34,11 @@ abstract class MinecraftMixin {
@Inject(method = "lambda$new$7", at = @At("HEAD"))
private void flywheel$onEndInitialResourceReload(@Coerce Object gameLoadCookie, Optional error, CallbackInfo ci) {
- ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, true, error));
+ NeoForge.EVENT_BUS.post(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, true, error));
}
@Inject(method = "lambda$reloadResourcePacks$39", at = @At("HEAD"))
private void flywheel$onEndManualResourceReload(boolean recovery, @Coerce Object gameLoadCookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
- ModLoader.get().postEvent(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
+ NeoForge.EVENT_BUS.post(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
}
}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
index dd03548d3..51ddef6e1 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
@@ -1,18 +1,18 @@
package dev.engine_room.flywheel.impl.mixin.sodium;
+import org.embeddedt.embeddium.impl.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import dev.engine_room.flywheel.lib.visual.VisualizationHelper;
-import me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.world.level.block.entity.BlockEntity;
@Mixin(value = ChunkBuilderMeshingTask.class, remap = false)
abstract class ChunkBuilderMeshingTaskMixin {
- @Redirect(method = "execute", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
+ @Redirect(method = "execute(Lorg/embeddedt/embeddium/impl/render/chunk/compile/ChunkBuildContext;Lorg/embeddedt/embeddium/impl/util/task/CancellationToken;)Lorg/embeddedt/embeddium/impl/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
private BlockEntityRenderer> flywheel$redirectGetRenderer(BlockEntityRenderDispatcher dispatcher, BlockEntity blockEntity) {
if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
return null;
From d0924175deffe8327e9fa36b38e4d90140a413d4 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Wed, 10 Jul 2024 11:44:52 -0400
Subject: [PATCH 14/55] 1.21 Port II
---
.../impl/mixin/BufferBuilderAccessor.java | 12 ++++++++
.../main/resources/flywheel.impl.mixins.json | 1 +
.../flywheel/lib/model/baked/MeshEmitter.java | 20 +++++++------
.../flywheel/lib/model/baked/MeshEmitter.java | 28 +++++++++++--------
4 files changed, 41 insertions(+), 20 deletions(-)
create mode 100644 common/src/main/java/dev/engine_room/flywheel/impl/mixin/BufferBuilderAccessor.java
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BufferBuilderAccessor.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BufferBuilderAccessor.java
new file mode 100644
index 000000000..1b9e4b0a3
--- /dev/null
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BufferBuilderAccessor.java
@@ -0,0 +1,12 @@
+package dev.engine_room.flywheel.impl.mixin;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+import com.mojang.blaze3d.vertex.BufferBuilder;
+
+@Mixin(BufferBuilder.class)
+public interface BufferBuilderAccessor {
+ @Accessor("building")
+ boolean flywheel$getBuilding();
+}
diff --git a/common/src/main/resources/flywheel.impl.mixins.json b/common/src/main/resources/flywheel.impl.mixins.json
index c8d878e85..927b23ce3 100644
--- a/common/src/main/resources/flywheel.impl.mixins.json
+++ b/common/src/main/resources/flywheel.impl.mixins.json
@@ -6,6 +6,7 @@
"refmap": "flywheel.refmap.json",
"client": [
"BlockEntityTypeMixin",
+ "BufferBuilderAccessor",
"ClientChunkCacheMixin",
"ClientLevelMixin",
"EntityTypeMixin",
diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
index 268a6e1da..db3eb85ba 100644
--- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
+++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
@@ -3,21 +3,25 @@ package dev.engine_room.flywheel.lib.model.baked;
import org.jetbrains.annotations.UnknownNullability;
import com.mojang.blaze3d.vertex.BufferBuilder;
+import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
+import dev.engine_room.flywheel.impl.mixin.BufferBuilderAccessor;
import net.minecraft.client.renderer.RenderType;
class MeshEmitter {
private final RenderType renderType;
- private final BufferBuilder bufferBuilder;
+ private final ByteBufferBuilder byteBufferBuilder;
+ private BufferBuilder bufferBuilder;
private BakedModelBufferer.@UnknownNullability ResultConsumer resultConsumer;
private boolean currentShade;
MeshEmitter(RenderType renderType) {
this.renderType = renderType;
- this.bufferBuilder = new BufferBuilder(renderType.bufferSize());
+ this.byteBufferBuilder = new ByteBufferBuilder(renderType.bufferSize());
+ this.bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}
public void prepare(BakedModelBufferer.ResultConsumer resultConsumer) {
@@ -25,7 +29,7 @@ class MeshEmitter {
}
public void end() {
- if (bufferBuilder.building()) {
+ if (((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
emit();
}
resultConsumer = null;
@@ -37,22 +41,22 @@ class MeshEmitter {
}
void prepareForGeometry(boolean shade) {
- if (!bufferBuilder.building()) {
- bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
+ if (!((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
+ bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
} else if (shade != currentShade) {
emit();
- bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
+ bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}
currentShade = shade;
}
void emit() {
- var renderedBuffer = bufferBuilder.endOrDiscardIfEmpty();
+ var renderedBuffer = bufferBuilder.build();
if (renderedBuffer != null) {
resultConsumer.accept(renderType, currentShade, renderedBuffer);
- renderedBuffer.release();
+ renderedBuffer.close();
}
}
}
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
index c6e181a5c..b45845d6f 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
@@ -3,32 +3,36 @@ package dev.engine_room.flywheel.lib.model.baked;
import org.jetbrains.annotations.UnknownNullability;
import com.mojang.blaze3d.vertex.BufferBuilder;
+import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormat;
+import dev.engine_room.flywheel.impl.mixin.BufferBuilderAccessor;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
class MeshEmitter implements VertexConsumer {
private final RenderType renderType;
- private final BufferBuilder bufferBuilder;
+ private final ByteBufferBuilder byteBufferBuilder;
+ private BufferBuilder bufferBuilder;
private BakedModelBufferer.@UnknownNullability ResultConsumer resultConsumer;
private boolean currentShade;
- MeshEmitter(RenderType renderType) {
- this.renderType = renderType;
- this.bufferBuilder = new BufferBuilder(renderType.bufferSize());
- }
+ MeshEmitter(RenderType renderType) {
+ this.renderType = renderType;
+ this.byteBufferBuilder = new ByteBufferBuilder(renderType.bufferSize());
+ this.bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
+ }
public void prepare(BakedModelBufferer.ResultConsumer resultConsumer) {
this.resultConsumer = resultConsumer;
}
public void end() {
- if (bufferBuilder.building()) {
+ if (((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
emit();
}
resultConsumer = null;
@@ -39,12 +43,12 @@ class MeshEmitter implements VertexConsumer {
return bufferBuilder;
}
- private void prepareForGeometry(boolean shade) {
- if (!bufferBuilder.building()) {
- bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
+ void prepareForGeometry(boolean shade) {
+ if (!((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
+ bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
} else if (shade != currentShade) {
emit();
- bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
+ bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}
currentShade = shade;
@@ -55,11 +59,11 @@ class MeshEmitter implements VertexConsumer {
}
private void emit() {
- var renderedBuffer = bufferBuilder.endOrDiscardIfEmpty();
+ var renderedBuffer = bufferBuilder.build();
if (renderedBuffer != null) {
resultConsumer.accept(renderType, currentShade, renderedBuffer);
- renderedBuffer.release();
+ renderedBuffer.close();
}
}
From e374365ce45961d59bdd2ec9b8c5c6b7f9192f49 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Wed, 10 Jul 2024 12:51:47 -0400
Subject: [PATCH 15/55] 1.21 Port III
---
.../resources/flywheel.backend.mixins.json | 2 +-
.../impl/mixin/LevelRendererMixin.java | 20 ++++++++++----
.../impl/mixin/fix/FixNormalScalingMixin.java | 26 +++++++++----------
...skMixin.java => SectionCompilerMixin.java} | 7 ++---
.../main/resources/flywheel.impl.mixins.json | 4 +--
.../flywheel.impl.fabric.mixins.json | 2 +-
.../flywheel.impl.sodium.mixins.json | 2 +-
.../{mods.toml => neoforge.mods.toml} | 0
.../flywheel.impl.sodium.mixins.json | 2 +-
9 files changed, 38 insertions(+), 27 deletions(-)
rename common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/{RebuildTaskMixin.java => SectionCompilerMixin.java} (63%)
rename forge/src/main/resources/META-INF/{mods.toml => neoforge.mods.toml} (100%)
diff --git a/common/src/backend/resources/flywheel.backend.mixins.json b/common/src/backend/resources/flywheel.backend.mixins.json
index 2d924bef0..a961b6a1f 100644
--- a/common/src/backend/resources/flywheel.backend.mixins.json
+++ b/common/src/backend/resources/flywheel.backend.mixins.json
@@ -2,7 +2,7 @@
"required": true,
"minVersion": "0.8",
"package": "dev.engine_room.flywheel.backend.mixin",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_21",
"refmap": "backend-flywheel.refmap.json",
"client": [
"AbstractClientPlayerAccessor",
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 86e87717f..3fe10e5d4 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -13,8 +13,11 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Group;
import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import com.llamalad7.mixinextras.sugar.Share;
+import com.llamalad7.mixinextras.sugar.ref.LocalRef;
import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.event.RenderStage;
@@ -23,6 +26,7 @@ import dev.engine_room.flywheel.impl.event.RenderContextImpl;
import dev.engine_room.flywheel.impl.visualization.VisualizationManagerImpl;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import net.minecraft.client.Camera;
+import net.minecraft.client.DeltaTracker;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer;
@@ -50,12 +54,18 @@ abstract class LevelRendererMixin {
// @Inject(method = "renderLevel", at = @At("HEAD"))
@Inject(method = "renderLevel", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runLightUpdates()I"))
- private void flywheel$beginRender(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo ci) {
- flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, poseStack, projectionMatrix, camera, partialTick);
+ private void flywheel$beginRender(DeltaTracker deltaTracker, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f frustumMatrix, Matrix4f projectionMatrix, CallbackInfo ci, @Share("flywheel$poseStack") LocalRef poseStack) {
+ PoseStack flywheel$poseStack = new PoseStack();
+ flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, flywheel$poseStack, projectionMatrix, camera, deltaTracker.getGameTimeDeltaTicks());
FlwImplXplat.INSTANCE.dispatchBeginFrameEvent(flywheel$renderContext);
}
+ @Redirect(method = "renderLevel", at = @At(value = "NEW", target = "()Lcom/mojang/blaze3d/vertex/PoseStack;"))
+ private PoseStack flywheel$fixPoseStack(@Share("flywheel$poseStack") LocalRef poseStack) {
+ return poseStack.get();
+ }
+
@Inject(method = "renderLevel", at = @At("RETURN"))
private void flywheel$endRender(CallbackInfo ci) {
flywheel$renderContext = null;
@@ -102,19 +112,19 @@ abstract class LevelRendererMixin {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
}
- @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", ordinal = 6, shift = Shift.AFTER))
+ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V", ordinal = 6, shift = Shift.AFTER))
private void flywheel$onStage$afterTranslucentTerrain(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
}
@Group(name = "onStage$afterParticles", min = 2, max = 2)
- @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
+ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$fabric(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_PARTICLES);
}
@Group(name = "onStage$afterParticles")
- @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", shift = Shift.AFTER))
+ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;Ljava/util/function/Predicate;)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$forge(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_PARTICLES);
}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java
index f6a9ca887..5ea214dab 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java
@@ -4,7 +4,6 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.mojang.blaze3d.vertex.PoseStack;
@@ -17,20 +16,21 @@ abstract class FixNormalScalingMixin {
* applied, which negates the matrix again, resulting in the matrix being the
* same as in the beginning.
*/
- @Inject(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix3f;scale(F)Lorg/joml/Matrix3f;", shift = Shift.AFTER, remap = false), cancellable = true)
+ @Inject(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;scale(FFF)Lorg/joml/Matrix4f;", shift = Shift.AFTER, remap = false), cancellable = true)
private void flywheel$returnAfterNegate(float x, float y, float z, CallbackInfo ci) {
ci.cancel();
}
- /**
- * Minecraft takes the inverse cube root of the product of all scales to provide a
- * rough estimate for normalization so that it does not need to be done later. It
- * does not make sense for this "normalization factor" to be negative though, as
- * that would invert all normals. Additionally, Minecraft's fastInvCubeRoot method
- * does not work for negative numbers.
- */
- @ModifyArg(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;fastInvCubeRoot(F)F"))
- private float flywheel$absInvCbrtInput(float input) {
- return Math.abs(input);
- }
+ //fixme not needed anymore?
+// /**
+// * Minecraft takes the inverse cube root of the product of all scales to provide a
+// * rough estimate for normalization so that it does not need to be done later. It
+// * does not make sense for this "normalization factor" to be negative though, as
+// * that would invert all normals. Additionally, Minecraft's fastInvCubeRoot method
+// * does not work for negative numbers.
+// */
+// @ModifyArg(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;fastInvCubeRoot(F)F"))
+// private float flywheel$absInvCbrtInput(float input) {
+// return Math.abs(input);
+// }
}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/SectionCompilerMixin.java
similarity index 63%
rename from common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java
rename to common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/SectionCompilerMixin.java
index cd98fb932..e86b1a2d2 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/SectionCompilerMixin.java
@@ -7,11 +7,12 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.lib.visual.VisualizationHelper;
+import net.minecraft.client.renderer.chunk.SectionCompiler;
import net.minecraft.world.level.block.entity.BlockEntity;
-@Mixin(targets = "net.minecraft.client.renderer.chunk.SectionRenderDispatcher$RenderSection$RebuildTask")
-abstract class RebuildTaskMixin {
- @Inject(method = "handleBlockEntity(Lnet/minecraft/client/renderer/chunk/SectionRenderDispatcher$RenderSection$RebuildTask$CompileResults;Lnet/minecraft/world/level/block/entity/BlockEntity;)V", at = @At("HEAD"), cancellable = true)
+@Mixin(SectionCompiler.class)
+abstract class SectionCompilerMixin {
+ @Inject(method = "handleBlockEntity", at = @At("HEAD"), cancellable = true)
private void flywheel$tryAddBlockEntity(@Coerce Object compileResults, BlockEntity blockEntity, CallbackInfo ci) {
if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
ci.cancel();
diff --git a/common/src/main/resources/flywheel.impl.mixins.json b/common/src/main/resources/flywheel.impl.mixins.json
index 927b23ce3..97dab99a4 100644
--- a/common/src/main/resources/flywheel.impl.mixins.json
+++ b/common/src/main/resources/flywheel.impl.mixins.json
@@ -2,7 +2,7 @@
"required": true,
"minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json",
"client": [
"BlockEntityTypeMixin",
@@ -19,7 +19,7 @@
"visualmanage.BlockEntityMixin",
"visualmanage.LevelChunkMixin",
"visualmanage.LevelRendererMixin",
- "visualmanage.RebuildTaskMixin"
+ "visualmanage.SectionCompilerMixin"
],
"injectors": {
"defaultRequire": 1
diff --git a/fabric/src/main/resources/flywheel.impl.fabric.mixins.json b/fabric/src/main/resources/flywheel.impl.fabric.mixins.json
index ea3900fdd..43d75fb9d 100644
--- a/fabric/src/main/resources/flywheel.impl.fabric.mixins.json
+++ b/fabric/src/main/resources/flywheel.impl.fabric.mixins.json
@@ -2,7 +2,7 @@
"required": true,
"minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin.fabric",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json",
"client": [
"DebugScreenOverlayMixin",
diff --git a/fabric/src/main/resources/flywheel.impl.sodium.mixins.json b/fabric/src/main/resources/flywheel.impl.sodium.mixins.json
index 7820cb594..0fd5cf55f 100644
--- a/fabric/src/main/resources/flywheel.impl.sodium.mixins.json
+++ b/fabric/src/main/resources/flywheel.impl.sodium.mixins.json
@@ -2,7 +2,7 @@
"required": true,
"minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin.sodium",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json",
"plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin",
"client": [
diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/neoforge.mods.toml
similarity index 100%
rename from forge/src/main/resources/META-INF/mods.toml
rename to forge/src/main/resources/META-INF/neoforge.mods.toml
diff --git a/forge/src/main/resources/flywheel.impl.sodium.mixins.json b/forge/src/main/resources/flywheel.impl.sodium.mixins.json
index 7820cb594..0fd5cf55f 100644
--- a/forge/src/main/resources/flywheel.impl.sodium.mixins.json
+++ b/forge/src/main/resources/flywheel.impl.sodium.mixins.json
@@ -2,7 +2,7 @@
"required": true,
"minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin.sodium",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json",
"plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin",
"client": [
From 10d032c53ecef73bc0b516ab375b2ff00b1e24f9 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Wed, 10 Jul 2024 13:03:07 -0400
Subject: [PATCH 16/55] 1.21 Port IV
---
.../engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
index c07e7b037..f87736ad1 100644
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
+++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/fabric/MinecraftMixin.java
@@ -15,7 +15,7 @@ abstract class MinecraftMixin {
@Shadow
public ClientLevel level;
- @Inject(method = "setLevel(Lnet/minecraft/client/multiplayer/ClientLevel;)V", at = @At("HEAD"))
+ @Inject(method = "setLevel(Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/client/gui/screens/ReceivingLevelScreen$Reason;)V", at = @At("HEAD"))
private void flywheel$onSetLevel(CallbackInfo ci) {
if (level != null) {
LevelAttached.invalidateLevel(level);
From dfbd451fdb4db2c33d869545dcbeea0e98e5bb47 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Wed, 10 Jul 2024 13:04:42 -0400
Subject: [PATCH 17/55] 1.21 Port V
---
.../engine_room/flywheel/impl/mixin/LevelRendererMixin.java | 6 ------
1 file changed, 6 deletions(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 3fe10e5d4..a2afcb78e 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -13,7 +13,6 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Group;
import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.llamalad7.mixinextras.sugar.Share;
@@ -61,11 +60,6 @@ abstract class LevelRendererMixin {
FlwImplXplat.INSTANCE.dispatchBeginFrameEvent(flywheel$renderContext);
}
- @Redirect(method = "renderLevel", at = @At(value = "NEW", target = "()Lcom/mojang/blaze3d/vertex/PoseStack;"))
- private PoseStack flywheel$fixPoseStack(@Share("flywheel$poseStack") LocalRef poseStack) {
- return poseStack.get();
- }
-
@Inject(method = "renderLevel", at = @At("RETURN"))
private void flywheel$endRender(CallbackInfo ci) {
flywheel$renderContext = null;
From 1cce5da6734cc18eba6ce127b90d51b4513183c2 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 14 Jul 2024 22:18:14 -0400
Subject: [PATCH 18/55] Mixin Fixin'
---
.../engine_room/flywheel/impl/mixin/LevelRendererMixin.java | 2 +-
.../dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java | 4 ++--
gradle.properties | 6 +++---
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index a2afcb78e..885475b02 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -111,7 +111,7 @@ abstract class LevelRendererMixin {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
}
- @Group(name = "onStage$afterParticles", min = 2, max = 2)
+ @Group(name = "onStage$afterParticles", min = 2, max = 3)
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$fabric(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_PARTICLES);
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index fb83f05a7..15f884c12 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -32,12 +32,12 @@ abstract class MinecraftMixin {
return arg0;
}
- @Inject(method = "lambda$new$7", at = @At("HEAD"))
+ @Inject(method = "lambda$new$8", at = @At("HEAD"))
private void flywheel$onEndInitialResourceReload(@Coerce Object gameLoadCookie, Optional error, CallbackInfo ci) {
NeoForge.EVENT_BUS.post(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, true, error));
}
- @Inject(method = "lambda$reloadResourcePacks$39", at = @At("HEAD"))
+ @Inject(method = "lambda$reloadResourcePacks$22", at = @At("HEAD"))
private void flywheel$onEndManualResourceReload(boolean recovery, @Coerce Object gameLoadCookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
NeoForge.EVENT_BUS.post(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
}
diff --git a/gradle.properties b/gradle.properties
index a7320e1e0..7dc5dc633 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,9 +13,9 @@ mod_homepage = https://github.com/Jozufozu/Flywheel
# Mod dependency declarations
minecraft_semver_version_range = >=1.21 <1.21.1
-minecraft_maven_version_range = [1.21,1.21.0)
+minecraft_maven_version_range = [1.21,1.21.1)
fabric_api_version_range = >=0.100.6
-neoforge_version_range = [21.0.79-beta,)
+neoforge_version_range = [21.0.95-beta,)
# General build dependency versions
java_version = 21
@@ -25,7 +25,7 @@ parchment_version = 2024.07.07
# Minecraft build dependency versions
minecraft_version = 1.21
-neoforge_version = 21.0.79-beta
+neoforge_version = 21.0.95-beta
fabric_loader_version = 0.15.11
fabric_api_version = 0.100.6+1.21
From eeb6e0f37a3040cc8ef824a35274eaf2647a5c6e Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 14 Jul 2024 22:19:35 -0400
Subject: [PATCH 19/55] style: javadoc fixes
---
.../java/dev/engine_room/flywheel/lib/util/ResourceUtil.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java b/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java
index 0bc16e618..2563e78ff 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/util/ResourceUtil.java
@@ -16,7 +16,7 @@ public final class ResourceUtil {
}
/**
- * Same as {@link ResourceLocation#ResourceLocation(String)}, but defaults to Flywheel namespace.
+ * Same as {@link ResourceLocation#parse(String)}, but defaults to Flywheel namespace.
*/
public static ResourceLocation parseFlywheelDefault(String location) {
String namespace = Flywheel.ID;
From 1d9f96a8225878988bf71e24e260c8e8793a6a9d Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 14 Jul 2024 22:20:47 -0400
Subject: [PATCH 20/55] string substitution fixes
---
.../dev/engine_room/gradle/subproject/SubprojectPlugin.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
index e0c8ea1f1..eeff691a4 100644
--- a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
+++ b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
@@ -168,7 +168,7 @@ class SubprojectPlugin: Plugin {
}
}
-val processResourcesExpandFiles = listOf("pack.mcmeta", "fabric.mod.json", "META-INF/mods.toml")
+val processResourcesExpandFiles = listOf("pack.mcmeta", "fabric.mod.json", "META-INF/neoforge.mods.toml")
val processResourcesExpandProperties = listOf(
"mod_id",
From 6533723fdf907f029f7fcff59bf2cded4da0b492 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Mon, 15 Jul 2024 17:36:57 -0400
Subject: [PATCH 21/55] feat(api): Make PartialModel's use RL's instead of
MRL's
---
.../flywheel/lib/model/baked/PartialModel.java | 8 ++++----
.../lib/model/baked/PartialModelEventHandler.java | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java
index 4b0d375f6..ba96c09c0 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModel.java
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.resources.model.BakedModel;
-import net.minecraft.client.resources.model.ModelResourceLocation;
+import net.minecraft.resources.ResourceLocation;
/**
* A helper class for loading and accessing JSON models not directly used by any blocks or items.
@@ -19,10 +19,10 @@ public class PartialModel {
static final List ALL = new ArrayList<>();
static boolean tooLate = false;
- protected final ModelResourceLocation modelLocation;
+ protected final ResourceLocation modelLocation;
protected BakedModel bakedModel;
- public PartialModel(ModelResourceLocation modelLocation) {
+ public PartialModel(ResourceLocation modelLocation) {
if (tooLate) {
throw new RuntimeException("Attempted to create PartialModel with location '" + modelLocation + "' after start of initial resource reload!");
}
@@ -34,7 +34,7 @@ public class PartialModel {
}
}
- public ModelResourceLocation getLocation() {
+ public ResourceLocation getLocation() {
return modelLocation;
}
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
index f403b7c44..ec3ff4123 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
@@ -15,7 +15,7 @@ public final class PartialModelEventHandler {
public static void onRegisterAdditional(ModelEvent.RegisterAdditional event) {
for (PartialModel partial : PartialModel.ALL) {
- event.register(partial.getLocation());
+ event.register(ModelResourceLocation.standalone(partial.getLocation()));
}
PartialModel.tooLate = true;
@@ -25,7 +25,7 @@ public final class PartialModelEventHandler {
Map models = event.getModels();
for (PartialModel partial : PartialModel.ALL) {
- partial.set(models.get(partial.getLocation()));
+ partial.set(models.get(ModelResourceLocation.standalone(partial.getLocation())));
}
}
}
From 44c2f784581702bacf0f33fb6519cf44d11220f7 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sat, 27 Jul 2024 22:03:46 -0400
Subject: [PATCH 22/55] merge: post merge fixes & porting
---
.../flywheel/lib/visual/component/ShadowComponent.java | 2 +-
.../dev/engine_room/flywheel/vanilla/MinecartVisual.java | 2 +-
.../flywheel/lib/model/baked/PartialModelEventHandler.java | 5 +++--
.../java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java | 2 +-
.../java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java | 3 ++-
5 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java b/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
index 65a2d8dcd..0f8d0a97d 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/visual/component/ShadowComponent.java
@@ -42,7 +42,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
* The shadow will be cast on blocks at most {@code min(radius, 2 * strength)} blocks below the entity.
*/
public final class ShadowComponent implements EntityComponent {
- private static final ResourceLocation SHADOW_TEXTURE = new ResourceLocation("textures/misc/shadow.png");
+ private static final ResourceLocation SHADOW_TEXTURE = ResourceLocation.withDefaultNamespace("textures/misc/shadow.png");
private static final Material SHADOW_MATERIAL = SimpleMaterial.builder()
.texture(SHADOW_TEXTURE)
.mipmap(false)
diff --git a/common/src/main/java/dev/engine_room/flywheel/vanilla/MinecartVisual.java b/common/src/main/java/dev/engine_room/flywheel/vanilla/MinecartVisual.java
index bc58879d8..c11e99d1a 100644
--- a/common/src/main/java/dev/engine_room/flywheel/vanilla/MinecartVisual.java
+++ b/common/src/main/java/dev/engine_room/flywheel/vanilla/MinecartVisual.java
@@ -32,7 +32,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
public class MinecartVisual extends ComponentEntityVisual implements SimpleTickableVisual, SimpleDynamicVisual {
- private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/minecart.png");
+ private static final ResourceLocation TEXTURE = ResourceLocation.withDefaultNamespace("textures/entity/minecart.png");
private static final Material MATERIAL = SimpleMaterial.builder()
.texture(TEXTURE)
.mipmap(false)
diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
index 534360ff9..d87eee208 100644
--- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
+++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/PartialModelEventHandler.java
@@ -6,6 +6,7 @@ import org.jetbrains.annotations.ApiStatus;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation;
+import net.minecraft.resources.ResourceLocation;
import net.neoforged.neoforge.client.event.ModelEvent;
@ApiStatus.Internal
@@ -15,7 +16,7 @@ public final class PartialModelEventHandler {
public static void onRegisterAdditional(ModelEvent.RegisterAdditional event) {
for (ResourceLocation modelLocation : PartialModel.ALL.keySet()) {
- event.register(modelLocation);
+ event.register(ModelResourceLocation.standalone(modelLocation));
}
}
@@ -24,7 +25,7 @@ public final class PartialModelEventHandler {
Map models = event.getModels();
for (PartialModel partial : PartialModel.ALL.values()) {
- partial.bakedModel = models.get(partial.modelLocation());
+ partial.bakedModel = models.get(ModelResourceLocation.standalone(partial.modelLocation()));
}
}
}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
index 70b6ac028..2cc0dee9d 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwImplXplatImpl.java
@@ -7,7 +7,7 @@ import net.neoforged.neoforge.common.NeoForge;
public class FlwImplXplatImpl implements FlwImplXplat {
@Override
public void dispatchReloadLevelRendererEvent(ClientLevel level) {
- MinecraftForge.EVENT_BUS.post(new ReloadLevelRendererEvent(level));
+ NeoForge.EVENT_BUS.post(new ReloadLevelRendererEvent(level));
}
@Override
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
index b2cadac44..3671f3bf1 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
@@ -19,6 +19,7 @@ import net.minecraft.client.renderer.block.BlockRenderDispatcher;
import net.minecraft.client.renderer.block.ModelBlockRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelManager;
+import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.BlockAndTintGetter;
@@ -30,7 +31,7 @@ public class FlwLibXplatImpl implements FlwLibXplat {
@Override
@UnknownNullability
public BakedModel getBakedModel(ModelManager modelManager, ResourceLocation location) {
- return modelManager.getModel(location);
+ return modelManager.getModel(ModelResourceLocation.standalone(location));
}
@Override
From 68393d11bb622540ab06064a1d02e2dd5c027010 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Mon, 29 Jul 2024 19:19:58 -0400
Subject: [PATCH 23/55] fix(mixins): broken LevelRenderer injector
---
.../dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 619dccf7e..ee90067e6 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -104,7 +104,7 @@ abstract class LevelRendererMixin {
}
@Group(name = "afterParticles", min = 2, max = 2)
- @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
+ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
private void flywheel$afterParticles$fabric(CallbackInfo ci) {
if (flywheel$renderContext != null) {
VisualizationManager manager = VisualizationManager.get(level);
From 475b1d8d7d14b036ed6e52e9fa81ea9e683029c7 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sat, 10 Aug 2024 10:31:20 -0400
Subject: [PATCH 24/55] fix view -IMS
---
.../java/dev/engine_room/flywheel/api/RenderContext.java | 2 +-
.../flywheel/backend/engine/uniform/FrameUniforms.java | 2 +-
.../flywheel/impl/event/RenderContextImpl.java | 9 ++++-----
.../flywheel/impl/mixin/LevelRendererMixin.java | 9 ++++-----
4 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/common/src/api/java/dev/engine_room/flywheel/api/RenderContext.java b/common/src/api/java/dev/engine_room/flywheel/api/RenderContext.java
index 5fc9f68b5..2a1e77c59 100644
--- a/common/src/api/java/dev/engine_room/flywheel/api/RenderContext.java
+++ b/common/src/api/java/dev/engine_room/flywheel/api/RenderContext.java
@@ -16,7 +16,7 @@ public interface RenderContext {
RenderBuffers buffers();
- PoseStack stack();
+ Matrix4fc modelView();
Matrix4fc projection();
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java
index 33bb81901..7ca60b0d9 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java
@@ -71,7 +71,7 @@ public final class FrameUniforms extends UniformWriter {
var camY = (float) (cameraPos.y - renderOrigin.getY());
var camZ = (float) (cameraPos.z - renderOrigin.getZ());
- VIEW.set(context.stack().last().pose());
+ VIEW.set(context.modelView());
VIEW.translate(-camX, -camY, -camZ);
PROJECTION.set(context.projection());
VIEW_PROJECTION.set(context.viewProjection());
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java b/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java
index 1ee538a73..df85a11dd 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java
@@ -11,14 +11,13 @@ import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.RenderBuffers;
-public record RenderContextImpl(LevelRenderer renderer, ClientLevel level, RenderBuffers buffers, PoseStack stack,
+public record RenderContextImpl(LevelRenderer renderer, ClientLevel level, RenderBuffers buffers, Matrix4fc modelView,
Matrix4fc projection, Matrix4fc viewProjection, Camera camera,
float partialTick) implements RenderContext {
- public static RenderContextImpl create(LevelRenderer renderer, ClientLevel level, RenderBuffers buffers, PoseStack stack, Matrix4f projection, Camera camera, float partialTick) {
+ public static RenderContextImpl create(LevelRenderer renderer, ClientLevel level, RenderBuffers buffers, Matrix4fc modelView, Matrix4f projection, Camera camera, float partialTick) {
Matrix4f viewProjection = new Matrix4f(projection);
- viewProjection.mul(stack.last()
- .pose());
+ viewProjection.mul(modelView);
- return new RenderContextImpl(renderer, level, buffers, stack, projection, viewProjection, camera, partialTick);
+ return new RenderContextImpl(renderer, level, buffers, modelView, projection, viewProjection, camera, partialTick);
}
}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index ee90067e6..9fda02fce 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -51,9 +51,8 @@ abstract class LevelRendererMixin {
// @Inject(method = "renderLevel", at = @At("HEAD"))
@Inject(method = "renderLevel", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runLightUpdates()I"))
- private void flywheel$beginRender(DeltaTracker deltaTracker, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f frustumMatrix, Matrix4f projectionMatrix, CallbackInfo ci, @Share("flywheel$poseStack") LocalRef poseStack) {
- PoseStack flywheel$poseStack = new PoseStack();
- flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, flywheel$poseStack, projectionMatrix, camera, deltaTracker.getGameTimeDeltaTicks());
+ private void flywheel$beginRender(DeltaTracker deltaTracker, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f modelMatrix, Matrix4f projectionMatrix, CallbackInfo ci) {
+ flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, modelMatrix, projectionMatrix, camera, deltaTracker.getGameTimeDeltaTicks());
VisualizationManager manager = VisualizationManager.get(level);
if (manager != null) {
@@ -114,8 +113,8 @@ abstract class LevelRendererMixin {
}
}
- @Group(name = "afterParticles")
- @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;Ljava/util/function/Predicate;)V", shift = Shift.AFTER))
+ //@Group(name = "afterParticles")
+ //@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;Ljava/util/function/Predicate;)V", shift = Shift.AFTER))
private void flywheel$afterParticles$forge(CallbackInfo ci) {
if (flywheel$renderContext != null) {
VisualizationManager manager = VisualizationManager.get(level);
From f2c0b79085f78e155d1ca82760520b0152ed6854 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sat, 10 Aug 2024 10:32:46 -0400
Subject: [PATCH 25/55] uncomment the comments
"i commented out the particle stuff for testing something
uh you can revert that" -IMS
---
.../flywheel/impl/mixin/LevelRendererMixin.java | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 9fda02fce..5fd4a1d4f 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -14,10 +14,6 @@ import org.spongepowered.asm.mixin.injection.Group;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import com.llamalad7.mixinextras.sugar.Share;
-import com.llamalad7.mixinextras.sugar.ref.LocalRef;
-import com.mojang.blaze3d.vertex.PoseStack;
-
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import dev.engine_room.flywheel.impl.FlwImplXplat;
import dev.engine_room.flywheel.impl.event.RenderContextImpl;
@@ -113,8 +109,8 @@ abstract class LevelRendererMixin {
}
}
- //@Group(name = "afterParticles")
- //@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;Ljava/util/function/Predicate;)V", shift = Shift.AFTER))
+ @Group(name = "afterParticles")
+ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;Ljava/util/function/Predicate;)V", shift = Shift.AFTER))
private void flywheel$afterParticles$forge(CallbackInfo ci) {
if (flywheel$renderContext != null) {
VisualizationManager manager = VisualizationManager.get(level);
From 5313585f3e2d0f0f647d14d56bad51f4c379b555 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sun, 11 Aug 2024 10:05:39 -0400
Subject: [PATCH 26/55] update neoforge & fix mixins
---
.../engine_room/flywheel/impl/mixin/LevelRendererMixin.java | 2 +-
.../dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java | 2 +-
gradle.properties | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 5fd4a1d4f..0451150b9 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -98,7 +98,7 @@ abstract class LevelRendererMixin {
}
}
- @Group(name = "afterParticles", min = 2, max = 2)
+ @Group(name = "afterParticles", min = 2, max = 3)
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
private void flywheel$afterParticles$fabric(CallbackInfo ci) {
if (flywheel$renderContext != null) {
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
index 15f884c12..a248d541d 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java
@@ -37,7 +37,7 @@ abstract class MinecraftMixin {
NeoForge.EVENT_BUS.post(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, true, error));
}
- @Inject(method = "lambda$reloadResourcePacks$22", at = @At("HEAD"))
+ @Inject(method = "lambda$reloadResourcePacks$21", at = @At("HEAD"))
private void flywheel$onEndManualResourceReload(boolean recovery, @Coerce Object gameLoadCookie, CompletableFuture completablefuture, Optional error, CallbackInfo ci) {
NeoForge.EVENT_BUS.post(new EndClientResourceReloadEvent((Minecraft) (Object) this, resourceManager, false, error));
}
diff --git a/gradle.properties b/gradle.properties
index 7dc5dc633..a8b43738f 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,7 +15,7 @@ mod_homepage = https://github.com/Jozufozu/Flywheel
minecraft_semver_version_range = >=1.21 <1.21.1
minecraft_maven_version_range = [1.21,1.21.1)
fabric_api_version_range = >=0.100.6
-neoforge_version_range = [21.0.95-beta,)
+neoforge_version_range = [21.0.167,)
# General build dependency versions
java_version = 21
@@ -25,7 +25,7 @@ parchment_version = 2024.07.07
# Minecraft build dependency versions
minecraft_version = 1.21
-neoforge_version = 21.0.95-beta
+neoforge_version = 21.0.167
fabric_loader_version = 0.15.11
fabric_api_version = 0.100.6+1.21
From 44f045b96183a5e20880bfd71b7bafb177db7c69 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Thu, 15 Aug 2024 17:51:25 -0400
Subject: [PATCH 27/55] Fix lighting
---
.../impl/event/RenderContextImpl.java | 2 --
.../impl/mixin/fix/FixNormalScalingMixin.java | 36 -------------------
.../main/resources/flywheel.impl.mixins.json | 1 -
3 files changed, 39 deletions(-)
delete mode 100644 common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java b/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java
index df85a11dd..bf8e7c0c5 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/event/RenderContextImpl.java
@@ -3,8 +3,6 @@ package dev.engine_room.flywheel.impl.event;
import org.joml.Matrix4f;
import org.joml.Matrix4fc;
-import com.mojang.blaze3d.vertex.PoseStack;
-
import dev.engine_room.flywheel.api.RenderContext;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java
deleted file mode 100644
index 5ea214dab..000000000
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/fix/FixNormalScalingMixin.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package dev.engine_room.flywheel.impl.mixin.fix;
-
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.At.Shift;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-import com.mojang.blaze3d.vertex.PoseStack;
-
-@Mixin(PoseStack.class)
-abstract class FixNormalScalingMixin {
- /**
- * Minecraft negates the normal matrix if all scales are equal and negative, but
- * does not return afterward. This allows the rest of the method's logic to be
- * applied, which negates the matrix again, resulting in the matrix being the
- * same as in the beginning.
- */
- @Inject(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;scale(FFF)Lorg/joml/Matrix4f;", shift = Shift.AFTER, remap = false), cancellable = true)
- private void flywheel$returnAfterNegate(float x, float y, float z, CallbackInfo ci) {
- ci.cancel();
- }
-
- //fixme not needed anymore?
-// /**
-// * Minecraft takes the inverse cube root of the product of all scales to provide a
-// * rough estimate for normalization so that it does not need to be done later. It
-// * does not make sense for this "normalization factor" to be negative though, as
-// * that would invert all normals. Additionally, Minecraft's fastInvCubeRoot method
-// * does not work for negative numbers.
-// */
-// @ModifyArg(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;fastInvCubeRoot(F)F"))
-// private float flywheel$absInvCbrtInput(float input) {
-// return Math.abs(input);
-// }
-}
diff --git a/common/src/main/resources/flywheel.impl.mixins.json b/common/src/main/resources/flywheel.impl.mixins.json
index 97dab99a4..a932159b9 100644
--- a/common/src/main/resources/flywheel.impl.mixins.json
+++ b/common/src/main/resources/flywheel.impl.mixins.json
@@ -15,7 +15,6 @@
"MinecraftMixin",
"PoseStackMixin",
"fix.FixFabulousDepthMixin",
- "fix.FixNormalScalingMixin",
"visualmanage.BlockEntityMixin",
"visualmanage.LevelChunkMixin",
"visualmanage.LevelRendererMixin",
From 4e1a4b64907644a6465eac9172b0231114a619e8 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Fri, 16 Aug 2024 22:54:01 -0400
Subject: [PATCH 28/55] fix jittery visual animations
---
.../dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 0451150b9..f246bed96 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -48,7 +48,7 @@ abstract class LevelRendererMixin {
// @Inject(method = "renderLevel", at = @At("HEAD"))
@Inject(method = "renderLevel", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runLightUpdates()I"))
private void flywheel$beginRender(DeltaTracker deltaTracker, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f modelMatrix, Matrix4f projectionMatrix, CallbackInfo ci) {
- flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, modelMatrix, projectionMatrix, camera, deltaTracker.getGameTimeDeltaTicks());
+ flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, modelMatrix, projectionMatrix, camera, deltaTracker.getGameTimeDeltaPartialTick(false));
VisualizationManager manager = VisualizationManager.get(level);
if (manager != null) {
From c32fccc1337d1f7754a141f60e888ed629a1cc07 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Thu, 22 Aug 2024 19:41:28 -0400
Subject: [PATCH 29/55] Sodium 0.6
---
buildSrc/build.gradle.kts | 2 +-
fabric/build.gradle.kts | 4 ++--
.../sodium/ChunkBuilderMeshingTaskMixin.java | 4 ++--
forge/build.gradle.kts | 7 +++++--
.../sodium/ChunkBuilderMeshingTaskMixin.java | 4 ++--
.../impl/mixin/sodium/SodiumMixinPlugin.java | 2 +-
gradle.properties | 8 ++++----
gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43583 bytes
gradle/wrapper/gradle-wrapper.properties | 2 +-
gradlew | 7 +++++--
gradlew.bat | 2 ++
11 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts
index 36fc3fec0..ff4e92c48 100644
--- a/buildSrc/build.gradle.kts
+++ b/buildSrc/build.gradle.kts
@@ -32,5 +32,5 @@ gradlePlugin {
dependencies {
// FIXME: This should not hard-code the Loom version.
- implementation("dev.architectury.loom:dev.architectury.loom.gradle.plugin:1.6.397")
+ implementation("dev.architectury.loom:dev.architectury.loom.gradle.plugin:1.7.+")
}
diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts
index b2c53440d..911424e38 100644
--- a/fabric/build.gradle.kts
+++ b/fabric/build.gradle.kts
@@ -64,8 +64,8 @@ dependencies {
modImplementation("net.fabricmc:fabric-loader:${property("fabric_loader_version")}")
modApi("net.fabricmc.fabric-api:fabric-api:${property("fabric_api_version")}")
- modCompileOnly("maven.modrinth:sodium:${property("sodium_version")}")
- modCompileOnly("maven.modrinth:iris:${property("iris_version")}")
+ modCompileOnly("maven.modrinth:sodium:${property("sodium_version")}-fabric")
+ modCompileOnly("maven.modrinth:iris:${property("iris_version")}-fabric")
"forApi"(project(path = ":common", configuration = "commonApiOnly"))
"forLib"(project(path = ":common", configuration = "commonLib"))
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
index 64e4b31e2..865ba1978 100644
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
+++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
@@ -5,14 +5,14 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
-import me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
+import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.world.level.block.entity.BlockEntity;
@Mixin(value = ChunkBuilderMeshingTask.class, remap = false)
abstract class ChunkBuilderMeshingTaskMixin {
- @Redirect(method = "execute", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
+ @Redirect(method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
private BlockEntityRenderer> flywheel$redirectGetRenderer(BlockEntityRenderDispatcher dispatcher, BlockEntity blockEntity) {
if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
return null;
diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts
index c2779acd8..ccd4aec73 100644
--- a/forge/build.gradle.kts
+++ b/forge/build.gradle.kts
@@ -76,8 +76,11 @@ repositories {
dependencies {
neoForge("net.neoforged:neoforge:${property("neoforge_version")}")
- modCompileOnly("maven.modrinth:embeddium:${property("embeddium_version")}")
- modCompileOnly("maven.modrinth:oculus:${property("oculus_version")}")
+ modCompileOnly("maven.modrinth:sodium:${property("sodium_version")}-neoforge")
+ modCompileOnly("maven.modrinth:iris:${property("iris_version")}-neoforge")
+
+ //modCompileOnly("maven.modrinth:embeddium:${property("embeddium_version")}")
+ //modCompileOnly("maven.modrinth:oculus:${property("oculus_version")}")
"forApi"(project(path = ":common", configuration = "commonApiOnly"))
"forLib"(project(path = ":common", configuration = "commonLib"))
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
index c7714934a..865ba1978 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
@@ -1,18 +1,18 @@
package dev.engine_room.flywheel.impl.mixin.sodium;
-import org.embeddedt.embeddium.impl.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
+import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.world.level.block.entity.BlockEntity;
@Mixin(value = ChunkBuilderMeshingTask.class, remap = false)
abstract class ChunkBuilderMeshingTaskMixin {
- @Redirect(method = "execute(Lorg/embeddedt/embeddium/impl/render/chunk/compile/ChunkBuildContext;Lorg/embeddedt/embeddium/impl/util/task/CancellationToken;)Lorg/embeddedt/embeddium/impl/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
+ @Redirect(method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
private BlockEntityRenderer> flywheel$redirectGetRenderer(BlockEntityRenderDispatcher dispatcher, BlockEntity blockEntity) {
if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
return null;
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
index c2fe3df02..94d5d560f 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
@@ -13,7 +13,7 @@ import com.google.common.base.Suppliers;
import net.neoforged.fml.loading.LoadingModList;
public class SodiumMixinPlugin implements IMixinConfigPlugin {
- private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("embeddium") != null);
+ private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("sodium") != null);
@Override
public void onLoad(String mixinPackage) {
diff --git a/gradle.properties b/gradle.properties
index a8b43738f..ef84f6a53 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -30,11 +30,11 @@ fabric_loader_version = 0.15.11
fabric_api_version = 0.100.6+1.21
# Build dependency mod versions
-sodium_version = mc1.21-0.5.11
-iris_version = 1.7.3+1.21
-embeddium_version = 1.0.4+mc1.21
+sodium_version = mc1.21-0.6.0-beta.1
+iris_version = 1.8.0-beta.1+1.21
+#embeddium_version = 1.0.4+mc1.21
# no 1.21 :(
-oculus_version = 1.20.1-1.6.15a
+#oculus_version = 1.20.1-1.6.15a
# Publication info
group = dev.engine_room.flywheel
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index e6441136f3d4ba8a0da8d277868979cfbc8ad796..a4b76b9530d66f5e68d973ea569d8e19de379189 100644
GIT binary patch
delta 12612
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
HJ4oML2Lo<@i8BwbL^1~GkG`E7C$SEa_
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
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e7646dead..9355b4155 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-8.7-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index 1aa94a426..f5feea6d6 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
diff --git a/gradlew.bat b/gradlew.bat
index 25da30dbd..9d21a2183 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
From 6cf9f36c0c8e188451e41bb2f9311a0abd4911db Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Thu, 22 Aug 2024 20:28:52 -0400
Subject: [PATCH 30/55] iris support
---
.../java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
index 3671f3bf1..cf62e3d7e 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java
@@ -70,7 +70,7 @@ public class FlwLibXplatImpl implements FlwLibXplat {
@Nullable
public ShadersModHandler.InternalHandler createIrisHandler() {
if (!ModList.get()
- .isLoaded("oculus")) {
+ .isLoaded("iris")) {
return null;
}
From 3453715f813d6255db7b6619b0e9c67d75ecfc45 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Thu, 22 Aug 2024 20:31:52 -0400
Subject: [PATCH 31/55] forge porting
---
.../java/dev/engine_room/flywheel/impl/FlywheelForge.java | 2 +-
.../java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
index 7bef593f8..2bc2f9cd9 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java
@@ -101,7 +101,7 @@ public final class FlywheelForge {
if (e.getRegistryKey().equals(Registries.COMMAND_ARGUMENT_TYPE)) {
e.register(Registries.COMMAND_ARGUMENT_TYPE, Flywheel.rl("backend"), () -> BackendArgument.INFO);
e.register(Registries.COMMAND_ARGUMENT_TYPE, Flywheel.rl("debug_mode"), () -> DebugModeArgument.INFO);
- e.register(ForgeRegistries.Keys.COMMAND_ARGUMENT_TYPES, Flywheel.rl("light_smoothness"), () -> LightSmoothnessArgument.INFO);
+ e.register(Registries.COMMAND_ARGUMENT_TYPE, Flywheel.rl("light_smoothness"), () -> LightSmoothnessArgument.INFO);
}
});
}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
index 9e897ff3b..db8563519 100644
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
+++ b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java
@@ -98,9 +98,9 @@ public class ForgeFlwConfig implements FlwConfig {
}
public static class ForgeBackendConfig implements BackendConfig {
- public final ForgeConfigSpec.EnumValue lightSmoothness;
+ public final ModConfigSpec.EnumValue lightSmoothness;
- public ForgeBackendConfig(ForgeConfigSpec.Builder builder) {
+ public ForgeBackendConfig(ModConfigSpec.Builder builder) {
lightSmoothness = builder.comment("How smooth flywheel's shader-based lighting should be. May have a large performance impact.")
.defineEnum("lightSmoothness", LightSmoothness.SMOOTH);
}
From fc61ff1c9810e23ccac53e2b52a1a8df4d1b33f5 Mon Sep 17 00:00:00 2001
From: IThundxr
Date: Sat, 14 Sep 2024 09:20:59 -0400
Subject: [PATCH 32/55] Add sodium 0.6 compat
---
.../gradle/subproject/SubprojectPlugin.kt | 3 ++
common/build.gradle.kts | 2 +
.../flywheel/impl/compat/CompatMods.java | 22 ++++++++
.../flywheel/impl/compat/SodiumCompat.java | 19 +++++++
.../impl/mixin/BlockEntityTypeMixin.java | 14 +++++
fabric/build.gradle.kts | 2 +-
.../sodium/ChunkBuilderMeshingTaskMixin.java | 22 --------
.../impl/mixin/sodium/SodiumMixinPlugin.java | 48 ------------------
fabric/src/main/resources/fabric.mod.json | 3 +-
.../flywheel.impl.sodium.mixins.json | 14 -----
forge/build.gradle.kts | 8 +--
.../sodium/ChunkBuilderMeshingTaskMixin.java | 22 --------
.../impl/mixin/sodium/SodiumMixinPlugin.java | 48 ------------------
.../resources/META-INF/neoforge.mods.toml | 2 -
.../flywheel.impl.sodium.mixins.json | 14 -----
gradle.properties | 1 -
libs/sodium-fabric-0.6.0-beta.2+mc1.21.1.jar | Bin 0 -> 1263840 bytes
.../sodium-neoforge-0.6.0-beta.2+mc1.21.1.jar | Bin 0 -> 1125609 bytes
18 files changed, 63 insertions(+), 181 deletions(-)
create mode 100644 common/src/main/java/dev/engine_room/flywheel/impl/compat/CompatMods.java
create mode 100644 common/src/main/java/dev/engine_room/flywheel/impl/compat/SodiumCompat.java
delete mode 100644 fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
delete mode 100644 fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
delete mode 100644 fabric/src/main/resources/flywheel.impl.sodium.mixins.json
delete mode 100644 forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
delete mode 100644 forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
delete mode 100644 forge/src/main/resources/flywheel.impl.sodium.mixins.json
create mode 100644 libs/sodium-fabric-0.6.0-beta.2+mc1.21.1.jar
create mode 100644 libs/sodium-neoforge-0.6.0-beta.2+mc1.21.1.jar
diff --git a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
index 8eda2f418..8fea37a9c 100644
--- a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
+++ b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt
@@ -89,6 +89,9 @@ class SubprojectPlugin: Plugin {
includeGroup("maven.modrinth")
}
}
+ flatDir {
+ dirs = setOf(project.rootProject.file("libs"))
+ }
}
}
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
index 23d1f23b4..3f9247a3f 100644
--- a/common/build.gradle.kts
+++ b/common/build.gradle.kts
@@ -72,6 +72,8 @@ jarSets {
dependencies {
modCompileOnly("net.fabricmc:fabric-loader:${property("fabric_loader_version")}")
+ modCompileOnly(":sodium-fabric-0.6.0-beta.2+mc1.21.1")
+
testImplementation("org.junit.jupiter:junit-jupiter:5.8.1")
}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/compat/CompatMods.java b/common/src/main/java/dev/engine_room/flywheel/impl/compat/CompatMods.java
new file mode 100644
index 000000000..612316dc3
--- /dev/null
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/compat/CompatMods.java
@@ -0,0 +1,22 @@
+package dev.engine_room.flywheel.impl.compat;
+
+import java.util.function.Supplier;
+
+import com.google.common.base.Suppliers;
+
+import net.fabricmc.loader.api.FabricLoader;
+
+public enum CompatMods {
+ SODIUM,
+ EMBEDDIUM;
+
+ private final Supplier isLoaded;
+
+ CompatMods() {
+ isLoaded = Suppliers.memoize(() -> FabricLoader.getInstance().isModLoaded(name()));
+ }
+
+ public boolean isLoaded() {
+ return isLoaded.get();
+ }
+}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/compat/SodiumCompat.java b/common/src/main/java/dev/engine_room/flywheel/impl/compat/SodiumCompat.java
new file mode 100644
index 000000000..7b39a062b
--- /dev/null
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/compat/SodiumCompat.java
@@ -0,0 +1,19 @@
+package dev.engine_room.flywheel.impl.compat;
+
+import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
+import net.caffeinemc.mods.sodium.api.blockentity.BlockEntityRenderHandler;
+import net.caffeinemc.mods.sodium.api.blockentity.BlockEntityRenderPredicate;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.entity.BlockEntityType;
+
+public class SodiumCompat {
+ public static Object forBlockEntityType(BlockEntityType type) {
+ BlockEntityRenderPredicate predicate = (getter, pos, be) -> VisualizationHelper.tryAddBlockEntity(be);
+ BlockEntityRenderHandler.instance().addRenderPredicate(type, predicate);
+ return predicate;
+ }
+
+ public static void removePredicate(BlockEntityType type, Object predicate) {
+ BlockEntityRenderHandler.instance().removeRenderPredicate(type, (BlockEntityRenderPredicate) predicate);
+ }
+}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BlockEntityTypeMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BlockEntityTypeMixin.java
index 93c660d8d..ab9ef91f2 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BlockEntityTypeMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/BlockEntityTypeMixin.java
@@ -5,6 +5,8 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
+import dev.engine_room.flywheel.impl.compat.CompatMods;
+import dev.engine_room.flywheel.impl.compat.SodiumCompat;
import dev.engine_room.flywheel.impl.extension.BlockEntityTypeExtension;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
@@ -12,8 +14,13 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
@Mixin(BlockEntityType.class)
abstract class BlockEntityTypeMixin implements BlockEntityTypeExtension {
@Unique
+ @Nullable
private BlockEntityVisualizer super T> flywheel$visualizer;
+ @Unique
+ @Nullable
+ private Object flywheel$sodiumPredicate;
+
@Override
@Nullable
public BlockEntityVisualizer super T> flywheel$getVisualizer() {
@@ -22,6 +29,13 @@ abstract class BlockEntityTypeMixin implements BlockEntit
@Override
public void flywheel$setVisualizer(@Nullable BlockEntityVisualizer super T> visualizer) {
+ if (CompatMods.SODIUM.isLoaded() && !CompatMods.EMBEDDIUM.isLoaded()) {
+ if (flywheel$visualizer == null && visualizer != null) {
+ flywheel$sodiumPredicate = SodiumCompat.forBlockEntityType((BlockEntityType>) (Object) this);
+ } else if (flywheel$visualizer != null && visualizer == null && flywheel$sodiumPredicate != null) {
+ SodiumCompat.removePredicate((BlockEntityType>) (Object) this, flywheel$sodiumPredicate);
+ }
+ }
this.flywheel$visualizer = visualizer;
}
}
diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts
index 0e6bc0621..3fb91957c 100644
--- a/fabric/build.gradle.kts
+++ b/fabric/build.gradle.kts
@@ -72,7 +72,7 @@ dependencies {
modImplementation("net.fabricmc:fabric-loader:${property("fabric_loader_version")}")
modApi("net.fabricmc.fabric-api:fabric-api:${property("fabric_api_version")}")
- modCompileOnly("maven.modrinth:sodium:${property("sodium_version")}-fabric")
+ modCompileOnly(":sodium-fabric-0.6.0-beta.2+mc1.21.1")
modCompileOnly("maven.modrinth:iris:${property("iris_version")}-fabric")
"forApi"(project(path = ":common", configuration = "commonApiOnly"))
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
deleted file mode 100644
index 865ba1978..000000000
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package dev.engine_room.flywheel.impl.mixin.sodium;
-
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
-import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
-import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
-import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
-import net.minecraft.world.level.block.entity.BlockEntity;
-
-@Mixin(value = ChunkBuilderMeshingTask.class, remap = false)
-abstract class ChunkBuilderMeshingTaskMixin {
- @Redirect(method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
- private BlockEntityRenderer> flywheel$redirectGetRenderer(BlockEntityRenderDispatcher dispatcher, BlockEntity blockEntity) {
- if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
- return null;
- }
- return dispatcher.getRenderer(blockEntity);
- }
-}
diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
deleted file mode 100644
index 0eda36012..000000000
--- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package dev.engine_room.flywheel.impl.mixin.sodium;
-
-import java.util.List;
-import java.util.Set;
-import java.util.function.Supplier;
-
-import org.objectweb.asm.tree.ClassNode;
-import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
-import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
-
-import com.google.common.base.Suppliers;
-
-import net.fabricmc.loader.api.FabricLoader;
-
-public class SodiumMixinPlugin implements IMixinConfigPlugin {
- private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> FabricLoader.getInstance().isModLoaded("sodium"));
-
- @Override
- public void onLoad(String mixinPackage) {
- }
-
- @Override
- public String getRefMapperConfig() {
- return null;
- }
-
- @Override
- public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
- return IS_SODIUM_LOADED.get();
- }
-
- @Override
- public void acceptTargets(Set myTargets, Set otherTargets) {
- }
-
- @Override
- public List getMixins() {
- return null;
- }
-
- @Override
- public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- }
-
- @Override
- public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- }
-}
diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json
index 7bfb5a37f..995855618 100644
--- a/fabric/src/main/resources/fabric.mod.json
+++ b/fabric/src/main/resources/fabric.mod.json
@@ -24,7 +24,6 @@
"mixins": [
"flywheel.backend.mixins.json",
"flywheel.impl.mixins.json",
- "flywheel.impl.sodium.mixins.json",
"flywheel.impl.fabric.mixins.json"
],
"depends": {
@@ -32,6 +31,6 @@
"fabric-api": "${fabric_api_version_range}"
},
"breaks": {
- "sodium": "<0.5.0"
+ "sodium": ["<0.6.0-beta.2"]
}
}
diff --git a/fabric/src/main/resources/flywheel.impl.sodium.mixins.json b/fabric/src/main/resources/flywheel.impl.sodium.mixins.json
deleted file mode 100644
index 0fd5cf55f..000000000
--- a/fabric/src/main/resources/flywheel.impl.sodium.mixins.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "required": true,
- "minVersion": "0.8",
- "package": "dev.engine_room.flywheel.impl.mixin.sodium",
- "compatibilityLevel": "JAVA_21",
- "refmap": "flywheel.refmap.json",
- "plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin",
- "client": [
- "ChunkBuilderMeshingTaskMixin"
- ],
- "injectors": {
- "defaultRequire": 1
- }
-}
diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts
index 3ee25ef3c..2bdcad863 100644
--- a/forge/build.gradle.kts
+++ b/forge/build.gradle.kts
@@ -67,12 +67,6 @@ loom {
add(backend, "backend-flywheel.refmap.json")
}
- forge {
- mixinConfig("flywheel.backend.mixins.json")
- mixinConfig("flywheel.impl.mixins.json")
- mixinConfig("flywheel.impl.sodium.mixins.json")
- }
-
runs {
configureEach {
property("forge.logging.markers", "")
@@ -88,7 +82,7 @@ repositories {
dependencies {
neoForge("net.neoforged:neoforge:${property("neoforge_version")}")
- modCompileOnly("maven.modrinth:sodium:${property("sodium_version")}-neoforge")
+ modCompileOnly(":sodium-neoforge-0.6.0-beta.2+mc1.21.1")
modCompileOnly("maven.modrinth:iris:${property("iris_version")}-neoforge")
//modCompileOnly("maven.modrinth:embeddium:${property("embeddium_version")}")
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
deleted file mode 100644
index 865ba1978..000000000
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package dev.engine_room.flywheel.impl.mixin.sodium;
-
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
-import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
-import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
-import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
-import net.minecraft.world.level.block.entity.BlockEntity;
-
-@Mixin(value = ChunkBuilderMeshingTask.class, remap = false)
-abstract class ChunkBuilderMeshingTaskMixin {
- @Redirect(method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;getRenderer(Lnet/minecraft/world/level/block/entity/BlockEntity;)Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderer;", remap = true))
- private BlockEntityRenderer> flywheel$redirectGetRenderer(BlockEntityRenderDispatcher dispatcher, BlockEntity blockEntity) {
- if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
- return null;
- }
- return dispatcher.getRenderer(blockEntity);
- }
-}
diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
deleted file mode 100644
index 94d5d560f..000000000
--- a/forge/src/main/java/dev/engine_room/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package dev.engine_room.flywheel.impl.mixin.sodium;
-
-import java.util.List;
-import java.util.Set;
-import java.util.function.Supplier;
-
-import org.objectweb.asm.tree.ClassNode;
-import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
-import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
-
-import com.google.common.base.Suppliers;
-
-import net.neoforged.fml.loading.LoadingModList;
-
-public class SodiumMixinPlugin implements IMixinConfigPlugin {
- private static final Supplier IS_SODIUM_LOADED = Suppliers.memoize(() -> LoadingModList.get().getModFileById("sodium") != null);
-
- @Override
- public void onLoad(String mixinPackage) {
- }
-
- @Override
- public String getRefMapperConfig() {
- return null;
- }
-
- @Override
- public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
- return IS_SODIUM_LOADED.get();
- }
-
- @Override
- public void acceptTargets(Set myTargets, Set otherTargets) {
- }
-
- @Override
- public List getMixins() {
- return null;
- }
-
- @Override
- public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- }
-
- @Override
- public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- }
-}
diff --git a/forge/src/main/resources/META-INF/neoforge.mods.toml b/forge/src/main/resources/META-INF/neoforge.mods.toml
index 0fe5ee7c5..4256c62e6 100644
--- a/forge/src/main/resources/META-INF/neoforge.mods.toml
+++ b/forge/src/main/resources/META-INF/neoforge.mods.toml
@@ -18,8 +18,6 @@ displayTest = "IGNORE_ALL_VERSION"
config = "flywheel.backend.mixins.json"
[[mixins]]
config = "flywheel.impl.mixins.json"
-[[mixins]]
-config = "flywheel.impl.sodium.mixins.json"
[[dependencies.${mod_id}]]
modId = "minecraft"
diff --git a/forge/src/main/resources/flywheel.impl.sodium.mixins.json b/forge/src/main/resources/flywheel.impl.sodium.mixins.json
deleted file mode 100644
index 0fd5cf55f..000000000
--- a/forge/src/main/resources/flywheel.impl.sodium.mixins.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "required": true,
- "minVersion": "0.8",
- "package": "dev.engine_room.flywheel.impl.mixin.sodium",
- "compatibilityLevel": "JAVA_21",
- "refmap": "flywheel.refmap.json",
- "plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin",
- "client": [
- "ChunkBuilderMeshingTaskMixin"
- ],
- "injectors": {
- "defaultRequire": 1
- }
-}
diff --git a/gradle.properties b/gradle.properties
index 336e9a4a6..2be244cd0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -20,7 +20,6 @@ neoforge_version_range = [21.0.167,)
# General build dependency versions
java_version = 21
arch_loom_version=1.7.412
-cursegradle_version = 1.4.0
parchment_version = 2024.07.07
# Minecraft build dependency versions
diff --git a/libs/sodium-fabric-0.6.0-beta.2+mc1.21.1.jar b/libs/sodium-fabric-0.6.0-beta.2+mc1.21.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..537f16846165bc5025fcac4a5f35dda5de41c9e0
GIT binary patch
literal 1263840
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