diff --git a/build.gradle.kts b/build.gradle.kts index f8827b4..9747d68 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,4 +61,5 @@ tasks.getByName("jar") { from(file("src/main/resources/META-INF/MANIFEST.MF")) attributes["Implementation-Version"] = project.version } + exclude("net") } \ No newline at end of file diff --git a/src/main/java/mods/betterfoliage/mixin/BlockMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinBlock.java similarity index 98% rename from src/main/java/mods/betterfoliage/mixin/BlockMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinBlock.java index 00e81f7..58e8b0f 100644 --- a/src/main/java/mods/betterfoliage/mixin/BlockMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinBlock.java @@ -18,7 +18,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; * {@link BlockState} properties with potential gameplay ramifications. */ @Mixin(Block.class) -public class BlockMixin { +public class MixinBlock { private static final String shouldSideBeRendered = "Lnet/minecraft/block/Block;shouldSideBeRendered(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IBlockReader;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Z"; private static final String getVoxelShape = "Lnet/minecraft/block/BlockState;func_215702_a(Lnet/minecraft/world/IBlockReader;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Lnet/minecraft/util/math/shapes/VoxelShape;"; diff --git a/src/main/java/mods/betterfoliage/mixin/BlockStateMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinBlockState.java similarity index 97% rename from src/main/java/mods/betterfoliage/mixin/BlockStateMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinBlockState.java index 89f0aca..55b3e4b 100644 --- a/src/main/java/mods/betterfoliage/mixin/BlockStateMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinBlockState.java @@ -16,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; */ @Mixin(BlockState.class) @SuppressWarnings({"UnnecessaryQualifiedMemberReference", "deprecation"}) -public class BlockStateMixin { +public class MixinBlockState { private static final String callFrom = "Lnet/minecraft/block/BlockState;func_215703_d(Lnet/minecraft/world/IBlockReader;Lnet/minecraft/util/math/BlockPos;)F"; private static final String callTo = "Lnet/minecraft/block/Block;func_220080_a(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IBlockReader;Lnet/minecraft/util/math/BlockPos;)F"; diff --git a/src/main/java/mods/betterfoliage/mixin/ChunkRenderMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinChunkRender.java similarity index 98% rename from src/main/java/mods/betterfoliage/mixin/ChunkRenderMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinChunkRender.java index cc2c1c0..5747fe7 100644 --- a/src/main/java/mods/betterfoliage/mixin/ChunkRenderMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinChunkRender.java @@ -16,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.Random; @Mixin(ChunkRender.class) -public class ChunkRenderMixin { +public class MixinChunkRender { private static final String rebuildChunk = "rebuildChunk(FFFLnet/minecraft/client/renderer/chunk/ChunkRenderTask;)V"; private static final String renderBlock = "Lnet/minecraft/client/renderer/BlockRendererDispatcher;renderBlock(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/IEnviromentBlockReader;Lnet/minecraft/client/renderer/BufferBuilder;Ljava/util/Random;Lnet/minecraftforge/client/model/data/IModelData;)Z"; diff --git a/src/main/java/mods/betterfoliage/mixin/ChunkRenderVanillaMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinChunkRenderVanilla.java similarity index 95% rename from src/main/java/mods/betterfoliage/mixin/ChunkRenderVanillaMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinChunkRenderVanilla.java index 18bbd9b..03a918e 100644 --- a/src/main/java/mods/betterfoliage/mixin/ChunkRenderVanillaMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinChunkRenderVanilla.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(ChunkRender.class) -public class ChunkRenderVanillaMixin { +public class MixinChunkRenderVanilla { private static final String rebuildChunk = "rebuildChunk(FFFLnet/minecraft/client/renderer/chunk/ChunkRenderTask;)V"; private static final String canRenderInLayer = "Lnet/minecraft/block/BlockState;canRenderInLayer(Lnet/minecraft/util/BlockRenderLayer;)Z"; diff --git a/src/main/java/mods/betterfoliage/mixin/ClientWorldMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinClientWorld.java similarity index 98% rename from src/main/java/mods/betterfoliage/mixin/ClientWorldMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinClientWorld.java index c35131b..a76519d 100644 --- a/src/main/java/mods/betterfoliage/mixin/ClientWorldMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinClientWorld.java @@ -15,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.Random; @Mixin(ClientWorld.class) -public class ClientWorldMixin { +public class MixinClientWorld { private static final String worldAnimateTick = "Lnet/minecraft/client/world/ClientWorld;animateTick(IIIILjava/util/Random;ZLnet/minecraft/util/math/BlockPos$MutableBlockPos;)V"; private static final String blockAnimateTick = "Lnet/minecraft/block/Block;animateTick(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Ljava/util/Random;)V"; diff --git a/src/main/java/mods/betterfoliage/mixin/ModelBakeryMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java similarity index 97% rename from src/main/java/mods/betterfoliage/mixin/ModelBakeryMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java index 25b66b8..0388eb6 100644 --- a/src/main/java/mods/betterfoliage/mixin/ModelBakeryMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(ModelBakery.class) -abstract public class ModelBakeryMixin { +abstract public class MixinModelBakery { private static final String processLoading = "processLoading(Lnet/minecraft/profiler/IProfiler;)V"; private static final String stitch = "Lnet/minecraft/client/renderer/texture/AtlasTexture;stitch(Lnet/minecraft/resources/IResourceManager;Ljava/lang/Iterable;Lnet/minecraft/profiler/IProfiler;)Lnet/minecraft/client/renderer/texture/AtlasTexture$SheetData;"; diff --git a/src/main/java/mods/betterfoliage/mixin/MixinOptifineBlockUtils.java b/src/main/java/mods/betterfoliage/mixin/MixinOptifineBlockUtils.java new file mode 100644 index 0000000..6809178 --- /dev/null +++ b/src/main/java/mods/betterfoliage/mixin/MixinOptifineBlockUtils.java @@ -0,0 +1,24 @@ +package mods.betterfoliage.mixin; + +import mods.betterfoliage.client.Hooks; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.optifine.util.BlockUtils; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(BlockUtils.class) +public class MixinOptifineBlockUtils { + private static final String shouldSideBeRenderedCached = "shouldSideBeRenderedCached(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IBlockReader;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;Lnet/optifine/render/RenderEnv;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)Z"; + private static final String getVoxelShape = "Lnet/minecraft/block/BlockState;func_215702_a(Lnet/minecraft/world/IBlockReader;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Direction;)Lnet/minecraft/util/math/shapes/VoxelShape;"; + + @SuppressWarnings("UnresolvedMixinReference") + @Redirect(method = shouldSideBeRenderedCached, at = @At(value = "INVOKE", target = getVoxelShape, ordinal = 1)) + private static VoxelShape getVoxelShapeOverride(BlockState state, IBlockReader reader, BlockPos pos, Direction dir) { + return Hooks.getVoxelShapeOverride(state, reader, pos, dir); + } +} diff --git a/src/main/java/mods/betterfoliage/mixin/ChunkRenderOptifineMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRender.java similarity index 97% rename from src/main/java/mods/betterfoliage/mixin/ChunkRenderOptifineMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRender.java index 5220a8c..9a83c3f 100644 --- a/src/main/java/mods/betterfoliage/mixin/ChunkRenderOptifineMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRender.java @@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Slice; @Mixin(ChunkRender.class) -public class ChunkRenderOptifineMixin { +public class MixinOptifineChunkRender { private static final String rebuildChunk = "rebuildChunk(FFFLnet/minecraft/client/renderer/chunk/ChunkRenderTask;)V"; private static final String invokeReflector = "Lnet/optifine/reflect/Reflector;callBoolean(Ljava/lang/Object;Lnet/optifine/reflect/ReflectorMethod;[Ljava/lang/Object;)Z"; diff --git a/src/main/java/mods/betterfoliage/mixin/ParticleManagerMixin.java b/src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java similarity index 97% rename from src/main/java/mods/betterfoliage/mixin/ParticleManagerMixin.java rename to src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java index 88c1942..7a536d5 100644 --- a/src/main/java/mods/betterfoliage/mixin/ParticleManagerMixin.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(ParticleManager.class) -public class ParticleManagerMixin { +public class MixinParticleManager { private static final String reload = "reload(Lnet/minecraft/resources/IFutureReloadListener$IStage;Lnet/minecraft/resources/IResourceManager;Lnet/minecraft/profiler/IProfiler;Lnet/minecraft/profiler/IProfiler;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"; private static final String stitch = "Lnet/minecraft/client/renderer/texture/AtlasTexture;stitch(Lnet/minecraft/resources/IResourceManager;Ljava/lang/Iterable;Lnet/minecraft/profiler/IProfiler;)Lnet/minecraft/client/renderer/texture/AtlasTexture$SheetData;"; diff --git a/src/main/java/mods/betterfoliage/mixin/MixinShadersBlockModelRenderer.java b/src/main/java/mods/betterfoliage/mixin/MixinShadersBlockModelRenderer.java new file mode 100644 index 0000000..7ff78ac --- /dev/null +++ b/src/main/java/mods/betterfoliage/mixin/MixinShadersBlockModelRenderer.java @@ -0,0 +1,24 @@ +package mods.betterfoliage.mixin; + +import mods.betterfoliage.client.integration.ShadersModIntegration; +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.BlockModelRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IEnviromentBlockReader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(BlockModelRenderer.class) +public class MixinShadersBlockModelRenderer { + + private static final String renderModel = "renderModel(Lnet/minecraft/world/IEnviromentBlockReader;Lnet/minecraft/client/renderer/model/IBakedModel;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/client/renderer/BufferBuilder;ZLjava/util/Random;JLnet/minecraftforge/client/model/data/IModelData;)Z"; + private static final String pushEntity = "Lnet/optifine/shaders/SVertexBuilder;pushEntity(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/IEnviromentBlockReader;Lnet/minecraft/client/renderer/BufferBuilder;)V"; + + @SuppressWarnings("UnresolvedMixinReference") + @ModifyArg(method = renderModel, at = @At(value = "INVOKE", target = pushEntity), remap = false) + BlockState overrideBlockState(BlockState state, BlockPos pos, IEnviromentBlockReader world, BufferBuilder buffer) { + return ShadersModIntegration.getBlockStateOverride(state, world, pos); + } +} diff --git a/src/main/java/net/optifine/util/BlockUtils.java b/src/main/java/net/optifine/util/BlockUtils.java new file mode 100644 index 0000000..0f9706c --- /dev/null +++ b/src/main/java/net/optifine/util/BlockUtils.java @@ -0,0 +1,5 @@ +package net.optifine.util; + +public class BlockUtils { + // whyyyy? +} diff --git a/src/main/kotlin/mods/betterfoliage/client/Client.kt b/src/main/kotlin/mods/betterfoliage/client/Client.kt index 895b006..432a3a1 100644 --- a/src/main/kotlin/mods/betterfoliage/client/Client.kt +++ b/src/main/kotlin/mods/betterfoliage/client/Client.kt @@ -3,10 +3,7 @@ package mods.betterfoliage.client import mods.betterfoliage.BetterFoliageMod import mods.betterfoliage.client.chunk.ChunkOverlayManager import mods.betterfoliage.client.config.BlockConfig -import mods.betterfoliage.client.integration.ForestryIntegration -import mods.betterfoliage.client.integration.IC2RubberIntegration -import mods.betterfoliage.client.integration.OptifineCustomColors -import mods.betterfoliage.client.integration.TechRebornRubberIntegration +import mods.betterfoliage.client.integration.* import mods.betterfoliage.client.render.* import mods.betterfoliage.client.texture.AsyncGrassDiscovery import mods.betterfoliage.client.texture.AsyncLeafDiscovery @@ -59,7 +56,7 @@ object Client { // init mod integrations val integrations = listOf( -// ShadersModIntegration, + ShadersModIntegration, OptifineCustomColors, ForestryIntegration, IC2RubberIntegration, diff --git a/src/main/kotlin/mods/betterfoliage/client/config/Config.kt b/src/main/kotlin/mods/betterfoliage/client/config/Config.kt index 4f7ac8b..8aad302 100644 --- a/src/main/kotlin/mods/betterfoliage/client/config/Config.kt +++ b/src/main/kotlin/mods/betterfoliage/client/config/Config.kt @@ -16,11 +16,6 @@ object Config : DelegatingConfig(BetterFoliageMod.MOD_ID, BetterFoliageMod.MOD_I val enabled by boolean(true) val nVidia by boolean(false) - object shaders { - val leavesId by long(min = 1, max = 65535, default = ShadersModIntegration.leavesDefaultBlockId) - val grassId by long(min = 1, max = 65535, default = ShadersModIntegration.grassDefaultBlockId) - } - object leaves : ConfigCategory() { val enabled by featureEnable() val snowEnabled by boolean(true) diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCustomColors.kt b/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCustomColors.kt index d65c000..c8011db 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCustomColors.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCustomColors.kt @@ -1,7 +1,6 @@ package mods.betterfoliage.client.integration import mods.betterfoliage.BetterFoliage -import mods.betterfoliage.client.Client import mods.octarinecore.* import mods.octarinecore.client.render.CombinedContext import mods.octarinecore.metaprog.allAvailable diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt index 6a03a25..53c7b35 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt @@ -1,10 +1,11 @@ package mods.betterfoliage.client.integration import mods.betterfoliage.BetterFoliage -import mods.betterfoliage.client.Client import mods.betterfoliage.client.config.BlockConfig import mods.betterfoliage.client.config.Config -import mods.octarinecore.SVertexBuilder +import mods.betterfoliage.client.texture.GrassRegistry +import mods.betterfoliage.client.texture.LeafRegistry +import mods.octarinecore.* import mods.octarinecore.client.render.CombinedContext import mods.octarinecore.metaprog.allAvailable import mods.octarinecore.metaprog.get @@ -12,9 +13,9 @@ import net.minecraft.block.BlockRenderType import net.minecraft.block.BlockRenderType.MODEL import net.minecraft.block.BlockState import net.minecraft.block.Blocks -import net.minecraft.block.TallGrassBlock import net.minecraft.client.renderer.BufferBuilder -import net.minecraftforge.registries.ForgeRegistries +import net.minecraft.util.math.BlockPos +import net.minecraft.world.IEnviromentBlockReader import org.apache.logging.log4j.Level.INFO /** @@ -24,45 +25,44 @@ object ShadersModIntegration { @JvmStatic val isAvailable = allAvailable(SVertexBuilder, SVertexBuilder.pushState, SVertexBuilder.pushNum, SVertexBuilder.pop) - val grassDefaultBlockId = 31L - val leavesDefaultBlockId = 18L + val defaultLeaves = Blocks.OAK_LEAVES.defaultState + val defaultGrass = Blocks.TALL_GRASS.defaultState /** * Called from transformed ShadersMod code. * @see mods.betterfoliage.loader.BetterFoliageTransformer */ - @JvmStatic fun getBlockIdOverride(original: Long, blockState: BlockState): Long { - if (BlockConfig.leafBlocks.matchesClass(blockState.block)) return Config.shaders.leavesId - if (BlockConfig.crops.matchesClass(blockState.block)) return Config.shaders.grassId - return original + @JvmStatic fun getBlockStateOverride(state: BlockState, world: IEnviromentBlockReader, pos: BlockPos): BlockState { + if (LeafRegistry[state, world, pos] != null) return defaultLeaves + if (BlockConfig.crops.matchesClass(state.block)) return defaultGrass + return state } init { BetterFoliage.log(INFO, "ShadersMod integration is ${if (isAvailable) "enabled" else "disabled" }") } + inline fun renderAs(ctx: CombinedContext, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) = + renderAs(ctx, ctx.state, renderType, enabled, func) + /** Quads rendered inside this block will use the given block entity data in shader programs. */ - inline fun renderAs(blockId: Long, renderType: BlockRenderType, renderer: BufferBuilder, enabled: Boolean = true, func: ()->Unit) { - if ((isAvailable && enabled)) { - val vertexBuilder = renderer[mods.octarinecore.BufferBuilder.sVertexBuilder]!! - SVertexBuilder.pushNum.invoke(vertexBuilder, blockId) + inline fun renderAs(ctx: CombinedContext, state: BlockState, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) { + if (isAvailable && enabled) { + val buffer = ctx.renderCtx.renderBuffer + val sVertexBuilder = buffer[BufferBuilder_sVertexBuilder] + SVertexBuilder.pushState.invoke(sVertexBuilder, ctx.state, ctx.pos, ctx.world, buffer) func() - SVertexBuilder.pop.invoke(vertexBuilder) + SVertexBuilder.pop.invoke(sVertexBuilder) } else { func() } } - /** Quads rendered inside this block will use the given block entity data in shader programs. */ - // temporarily NO-OP - inline fun renderAs(state: BlockState, renderType: BlockRenderType, renderer: BufferBuilder, enabled: Boolean = true, func: ()->Unit) = func() - inline fun renderAs(ctx: CombinedContext, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) = func() - /** Quads rendered inside this block will behave as tallgrass blocks in shader programs. */ inline fun grass(ctx: CombinedContext, enabled: Boolean = true, func: ()->Unit) = - renderAs(Config.shaders.grassId, MODEL, ctx.renderCtx.renderBuffer, enabled, func) + renderAs(ctx, defaultGrass, MODEL, enabled, func) /** Quads rendered inside this block will behave as leaf blocks in shader programs. */ inline fun leaves(ctx: CombinedContext, enabled: Boolean = true, func: ()->Unit) = - renderAs(Config.shaders.leavesId, MODEL, ctx.renderCtx.renderBuffer, enabled, func) + renderAs(ctx, defaultLeaves, MODEL, enabled, func) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt index b8ca01f..9c710d8 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt @@ -70,7 +70,7 @@ class RenderLeaves : RenderDecorator(BetterFoliageMod.MOD_ID, BetterFoliageMod.b if (isSnowed && Config.leaves.snowEnabled) ctx.render( leavesModel.model, translation = ctx.blockCenter + perturbs[rand[0]], - icon = { _, _, _ -> snowedIcon[rand[1]]!! }, + icon = { _, _, _ -> snowedIcon[rand[1]] }, postProcess = whitewash ) } diff --git a/src/main/kotlin/mods/octarinecore/CommonRefs.kt b/src/main/kotlin/mods/octarinecore/CommonRefs.kt index a25b221..5149bbb 100644 --- a/src/main/kotlin/mods/octarinecore/CommonRefs.kt +++ b/src/main/kotlin/mods/octarinecore/CommonRefs.kt @@ -1,6 +1,7 @@ package mods.octarinecore import mods.octarinecore.metaprog.ClassRef +import mods.octarinecore.metaprog.ClassRef.Companion.void import mods.octarinecore.metaprog.FieldRef import mods.octarinecore.metaprog.MethodRef import net.minecraft.block.Block @@ -8,6 +9,7 @@ import net.minecraft.block.BlockState import net.minecraft.client.renderer.BlockRendererDispatcher import net.minecraft.client.renderer.BufferBuilder import net.minecraft.client.renderer.chunk.ChunkRenderCache +import net.minecraft.client.renderer.model.BakedQuad import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.util.BlockRenderLayer import net.minecraft.util.ResourceLocation @@ -24,21 +26,20 @@ val Random = ClassRef("java.util.Random") // Minecraft val IBlockReader = ClassRef("net.minecraft.world.IBlockReader") -val IEnvironmentBlockReader = ClassRef("net.minecraft.world.IEnvironmentBlockReader") -val BlockState = ClassRef("net.minecraft.block.state.BlockState") +val IEnvironmentBlockReader = ClassRef("net.minecraft.world.IEnviromentBlockReader") +val BlockState = ClassRef("net.minecraft.block.BlockState") val BlockPos = ClassRef("net.minecraft.util.math.BlockPos") val BlockRenderLayer = ClassRef("net.minecraft.util.BlockRenderLayer") val Block = ClassRef("net.minecraft.block.Block") -object BufferBuilder : ClassRef("net.minecraft.client.renderer.BufferBuilder") { - /** Optifine only */ - val sVertexBuilder = FieldRef(this, "sVertexBuilder", SVertexBuilder) - /** Optifine only */ - val quadSprite = FieldRef(this, "quadSprite", TextureAtlasSprite) -} + +val TextureAtlasSprite = ClassRef("net.minecraft.client.renderer.texture.TextureAtlasSprite") +val BufferBuilder = ClassRef("net.minecraft.client.renderer.BufferBuilder") +val BufferBuilder_setSprite = MethodRef(BufferBuilder, "setSprite", void, TextureAtlasSprite) +val BufferBuilder_sVertexBuilder = FieldRef(BufferBuilder, "sVertexBuilder", SVertexBuilder) val BlockRendererDispatcher = ClassRef("net.minecraft.client.renderer.BlockRendererDispatcher") val ChunkRenderCache = ClassRef("net.minecraft.client.renderer.chunk.ChunkRenderCache") -val TextureAtlasSprite = ClassRef("net.minecraft.client.renderer.texture.TextureAtlasSprite") val ResourceLocation = ClassRef("net.minecraft.util.ResourceLocation") +val BakedQuad = ClassRef("net.minecraft.client.renderer.model.BakedQuad") // Optifine val OptifineClassTransformer = ClassRef("optifine.OptiFineClassTransformer") @@ -54,12 +55,12 @@ object RenderEnv : ClassRef("net.optifine.render.RenderEnv") { // Optifine custom colors val IColorizer = ClassRef("net.optifine.CustomColors\$IColorizer") object CustomColors : ClassRef("net.optifine.CustomColors") { - val getColorMultiplier = MethodRef(this, "getSmoothColorMultiplier", int, BlockState, IEnvironmentBlockReader, BlockPos, IColorizer, BlockPosM) + val getColorMultiplier = MethodRef(this, "getColorMultiplier", int, BakedQuad, BlockState, IEnvironmentBlockReader, BlockPos, RenderEnv) } // Optifine shaders object SVertexBuilder : ClassRef("net.optifine.shaders.SVertexBuilder") { - val pushState = MethodRef(this, "pushEntity", void, BlockState, BlockPos, IBlockReader, BufferBuilder) + val pushState = MethodRef(this, "pushEntity", void, BlockState, BlockPos, IEnvironmentBlockReader, BufferBuilder) val pushNum = MethodRef(this, "pushEntity", void, long) val pop = MethodRef(this, "popEntity", void) } diff --git a/src/main/kotlin/mods/octarinecore/client/render/CombinedContext.kt b/src/main/kotlin/mods/octarinecore/client/render/CombinedContext.kt index a2a0c75..d6b6570 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/CombinedContext.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/CombinedContext.kt @@ -3,6 +3,7 @@ package mods.octarinecore.client.render import mods.betterfoliage.client.render.canRenderInCutout import mods.betterfoliage.client.render.isCutout import mods.octarinecore.BufferBuilder +import mods.octarinecore.BufferBuilder_setSprite import mods.octarinecore.client.render.lighting.* import mods.octarinecore.common.Double3 import mods.octarinecore.common.Int3 @@ -62,7 +63,7 @@ class CombinedContext( if (drawIcon != null) { // let OptiFine know the texture we're using, so it can // transform UV coordinates to quad-relative - renderCtx.renderBuffer[BufferBuilder.quadSprite] = drawIcon + BufferBuilder_setSprite.invoke(renderCtx.renderBuffer, drawIcon) quad.verts.forEachIndexed { vertIdx, vert -> temp.init(vert).rotate(lightingCtx.modelRotation).translate(translation) diff --git a/src/main/resources/betterfoliage.common.mixins.json b/src/main/resources/betterfoliage.common.mixins.json index 5c179b4..221df73 100644 --- a/src/main/resources/betterfoliage.common.mixins.json +++ b/src/main/resources/betterfoliage.common.mixins.json @@ -7,12 +7,12 @@ "mixins": [ ], "client": [ - "BlockMixin", - "BlockStateMixin", - "ChunkRenderMixin", - "ClientWorldMixin", - "ModelBakeryMixin", - "ParticleManagerMixin" + "MixinBlock", + "MixinBlockState", + "MixinChunkRender", + "MixinClientWorld", + "MixinModelBakery", + "MixinParticleManager" ], "server": [ ], diff --git a/src/main/resources/betterfoliage.optifine.mixins.json b/src/main/resources/betterfoliage.optifine.mixins.json index d4b3c97..28a4e18 100644 --- a/src/main/resources/betterfoliage.optifine.mixins.json +++ b/src/main/resources/betterfoliage.optifine.mixins.json @@ -7,7 +7,9 @@ "mixins": [ ], "client": [ - "ChunkRenderOptifineMixin" + "MixinOptifineChunkRender", + "MixinShadersBlockModelRenderer", + "MixinOptifineBlockUtils" ], "server": [ ], diff --git a/src/main/resources/betterfoliage.vanilla.mixins.json b/src/main/resources/betterfoliage.vanilla.mixins.json index ecb9d8c..4608c01 100644 --- a/src/main/resources/betterfoliage.vanilla.mixins.json +++ b/src/main/resources/betterfoliage.vanilla.mixins.json @@ -7,7 +7,7 @@ "mixins": [ ], "client": [ - "ChunkRenderVanillaMixin" + "MixinChunkRenderVanilla" ], "server": [ ],