diff --git a/build.gradle b/build.gradle index dcfa89aad..8030b570d 100755 --- a/build.gradle +++ b/build.gradle @@ -111,9 +111,6 @@ allprojects { unimined.minecraft { runs.off = true defaultRemapJar = false - accessWidener { - accessWidener(file("src/launch/resources/baritone.accesswidener")) - } } archivesBaseName = archivesBaseName + "-common" diff --git a/fabric/build.gradle b/fabric/build.gradle index f3681442f..c607dbab2 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -27,7 +27,6 @@ archivesBaseName = archivesBaseName + "-fabric" unimined.minecraft { fabric { loader project.fabric_version - accessWidener(file("../src/launch/resources/baritone.accesswidener")) } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 5ccee7fad..4dda3aa76 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -23,8 +23,6 @@ "mixins": [ "mixins.baritone.json" ], - "accessWidener": "baritone.accesswidener", - "depends": { "fabricloader": ">=0.14.22", "minecraft": ["1.21.5"] diff --git a/scripts/proguard.pro b/scripts/proguard.pro index aee51fb0c..627fb5f53 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -21,8 +21,6 @@ -dontwarn baritone.launch.BaritoneForgeModXD # progard doesn't like signature polymorphism -dontwarn java.lang.invoke.MethodHandle -# todo: fix IRenderer accesswidener'd members --dontwarn ** # please do not change the comment below -keep class baritone.api.** { *; } # this is the keep api diff --git a/src/launch/java/baritone/launch/mixins/MixinRenderPipelines.java b/src/launch/java/baritone/launch/mixins/MixinRenderPipelines.java new file mode 100644 index 000000000..756d73001 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinRenderPipelines.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.launch.mixins; + +import baritone.utils.accessor.IRenderPipelines; +import com.mojang.blaze3d.pipeline.RenderPipeline; +import net.minecraft.client.renderer.RenderPipelines; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(RenderPipelines.class) +public class MixinRenderPipelines implements IRenderPipelines { + @Final @Shadow + private static RenderPipeline.Snippet LINES_SNIPPET; + + public RenderPipeline.Snippet getLinesSnippet() { + return LINES_SNIPPET; + } +} diff --git a/src/launch/resources/baritone.accesswidener b/src/launch/resources/baritone.accesswidener deleted file mode 100644 index eb4a44e11..000000000 --- a/src/launch/resources/baritone.accesswidener +++ /dev/null @@ -1,67 +0,0 @@ -accessWidener v2 named -transitive-accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;ILcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; -transitive-accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;IZZLcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; -transitive-accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType -transitive-accessible class net/minecraft/client/renderer/RenderType$CompositeState -transitive-accessible class net/minecraft/client/renderer/RenderType$OutlineProperty -transitive-accessible field net/minecraft/client/renderer/RenderStateShard BLOCK_SHEET_MIPPED Lnet/minecraft/client/renderer/RenderStateShard$TextureStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard BLOCK_SHEET Lnet/minecraft/client/renderer/RenderStateShard$TextureStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard NO_TEXTURE Lnet/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard DEFAULT_TEXTURING Lnet/minecraft/client/renderer/RenderStateShard$TexturingStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard GLINT_TEXTURING Lnet/minecraft/client/renderer/RenderStateShard$TexturingStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard ENTITY_GLINT_TEXTURING Lnet/minecraft/client/renderer/RenderStateShard$TexturingStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard ARMOR_ENTITY_GLINT_TEXTURING Lnet/minecraft/client/renderer/RenderStateShard$TexturingStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard LIGHTMAP Lnet/minecraft/client/renderer/RenderStateShard$LightmapStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard NO_LIGHTMAP Lnet/minecraft/client/renderer/RenderStateShard$LightmapStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard OVERLAY Lnet/minecraft/client/renderer/RenderStateShard$OverlayStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard NO_OVERLAY Lnet/minecraft/client/renderer/RenderStateShard$OverlayStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard NO_LAYERING Lnet/minecraft/client/renderer/RenderStateShard$LayeringStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard VIEW_OFFSET_Z_LAYERING Lnet/minecraft/client/renderer/RenderStateShard$LayeringStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard VIEW_OFFSET_Z_LAYERING_FORWARD Lnet/minecraft/client/renderer/RenderStateShard$LayeringStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard MAIN_TARGET Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard OUTLINE_TARGET Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard TRANSLUCENT_TARGET Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard PARTICLES_TARGET Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard WEATHER_TARGET Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard ITEM_ENTITY_TARGET Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard; -transitive-accessible field net/minecraft/client/renderer/RenderStateShard DEFAULT_LINE Lnet/minecraft/client/renderer/RenderStateShard$LineStateShard; -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$TextureStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$TexturingStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$LightmapStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$OverlayStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$LayeringStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$OutputStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$LineStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$OffsetTexturingStateShard -transitive-accessible class net/minecraft/client/renderer/RenderStateShard$MultiTextureStateShard -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setTextureState (Lnet/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setLightmapState (Lnet/minecraft/client/renderer/RenderStateShard$LightmapStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setOverlayState (Lnet/minecraft/client/renderer/RenderStateShard$OverlayStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setLayeringState (Lnet/minecraft/client/renderer/RenderStateShard$LayeringStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setOutputState (Lnet/minecraft/client/renderer/RenderStateShard$OutputStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setTexturingState (Lnet/minecraft/client/renderer/RenderStateShard$TexturingStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder setLineState (Lnet/minecraft/client/renderer/RenderStateShard$LineStateShard;)Lnet/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder createCompositeState (Z)Lnet/minecraft/client/renderer/RenderType$CompositeState; -transitive-accessible method net/minecraft/client/renderer/RenderType$CompositeState$CompositeStateBuilder createCompositeState (Lnet/minecraft/client/renderer/RenderType$OutlineProperty;)Lnet/minecraft/client/renderer/RenderType$CompositeState; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines MATRICES_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines FOG_NO_COLOR_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines FOG_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines MATRICES_COLOR_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines MATRICES_COLOR_FOG_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines MATRICES_COLOR_FOG_OFFSET_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines MATRICES_COLOR_FOG_LIGHT_DIR_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines TERRAIN_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines ENTITY_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines BEACON_BEAM_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines TEXT_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines END_PORTAL_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines CLOUDS_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines LINES_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines DEBUG_FILLED_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines PARTICLE_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines WEATHER_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines GUI_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines GUI_TEXTURED_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible field net/minecraft/client/renderer/RenderPipelines OUTLINE_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; -transitive-accessible method net/minecraft/client/renderer/RenderPipelines register (Lcom/mojang/blaze3d/pipeline/RenderPipeline;)Lcom/mojang/blaze3d/pipeline/RenderPipeline; diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index 9d526addc..0b845f3a0 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -25,6 +25,7 @@ "MixinPalettedContainer", "MixinPalettedContainer$Data", "MixinPlayerController", + "MixinRenderPipelines", "MixinScreen", "MixinWorldRenderer" ], diff --git a/src/main/java/baritone/utils/BaritoneRenderType.java b/src/main/java/baritone/utils/BaritoneRenderType.java new file mode 100644 index 000000000..a572a7166 --- /dev/null +++ b/src/main/java/baritone/utils/BaritoneRenderType.java @@ -0,0 +1,121 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import com.mojang.blaze3d.buffers.GpuBuffer; +import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.systems.RenderPass; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.textures.GpuTexture; +import com.mojang.blaze3d.vertex.MeshData; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; + +import java.util.OptionalDouble; +import java.util.OptionalInt; + +public class BaritoneRenderType extends RenderType { + private final RenderPipeline renderPipeline; + + public BaritoneRenderType(String name, int bufferSize, boolean affectsCrumbling, boolean sortOnUpload, RenderPipeline renderPipeline) { + super(name, bufferSize, affectsCrumbling, sortOnUpload, () -> {}, () -> {}); + this.renderPipeline = renderPipeline; + } + + public static BaritoneRenderType create(String name, int bufferSize, RenderPipeline renderPipeline) { + return new BaritoneRenderType(name, bufferSize, false, false, renderPipeline); + } + + @Override + public RenderPipeline getRenderPipeline() { + return this.renderPipeline; + } + + @Override + public VertexFormat format() { + return this.renderPipeline.getVertexFormat(); + } + + @Override + public VertexFormat.Mode mode() { + return this.renderPipeline.getVertexFormatMode(); + } + + @Override + public void draw(final MeshData meshData) { + RenderPipeline renderPipeline = this.getRenderPipeline(); + this.setupRenderState(); + + try { + GpuBuffer gpuBuffer = renderPipeline.getVertexFormat().uploadImmediateVertexBuffer(meshData.vertexBuffer()); + GpuBuffer gpuBuffer2; + VertexFormat.IndexType indexType; + if (meshData.indexBuffer() == null) { + RenderSystem.AutoStorageIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(meshData.drawState().mode()); + gpuBuffer2 = autoStorageIndexBuffer.getBuffer(meshData.drawState().indexCount()); + indexType = autoStorageIndexBuffer.type(); + } else { + gpuBuffer2 = renderPipeline.getVertexFormat().uploadImmediateIndexBuffer(meshData.indexBuffer()); + indexType = meshData.drawState().indexType(); + } + + RenderTarget renderTarget = getRenderTarget(); + + try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass( + renderTarget.getColorTexture(), + OptionalInt.empty(), + renderTarget.useDepth ? renderTarget.getDepthTexture() : null, + OptionalDouble.empty()) + ) { + renderPass.setPipeline(renderPipeline); + renderPass.setVertexBuffer(0, gpuBuffer); + if (RenderSystem.SCISSOR_STATE.isEnabled()) { + renderPass.enableScissor(RenderSystem.SCISSOR_STATE); + } + + for(int i = 0; i < 12; ++i) { + GpuTexture gpuTexture = RenderSystem.getShaderTexture(i); + if (gpuTexture != null) { + renderPass.bindSampler("Sampler" + i, gpuTexture); + } + } + + renderPass.setIndexBuffer(gpuBuffer2, indexType); + renderPass.drawIndexed(0, meshData.drawState().indexCount()); + } + } catch (Throwable e) { + try { + meshData.close(); + } catch (Throwable e2) { + e.addSuppressed(e2); + } + throw e; + } + + meshData.close(); + + this.clearRenderState(); + } + + @Override + public RenderTarget getRenderTarget() { + return RenderStateShard.MAIN_TARGET.getRenderTarget(); + } +} diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 1533563d6..0cadb37f1 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -20,6 +20,7 @@ package baritone.utils; import baritone.api.BaritoneAPI; import baritone.api.Settings; import baritone.utils.accessor.IEntityRenderManager; +import baritone.utils.accessor.IRenderPipelines; import com.mojang.blaze3d.pipeline.BlendFunction; import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.platform.DepthTestFunction; @@ -40,7 +41,7 @@ public interface IRenderer { Tesselator tessellator = Tesselator.getInstance(); IEntityRenderManager renderManager = (IEntityRenderManager) Minecraft.getInstance().getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); - RenderPipeline.Snippet BARITONE_LINES_SNIPPET = RenderPipeline.builder(RenderPipelines.LINES_SNIPPET) + RenderPipeline.Snippet BARITONE_LINES_SNIPPET = RenderPipeline.builder(((IRenderPipelines) new RenderPipelines()).getLinesSnippet()) .withBlend(new BlendFunction( SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA, @@ -50,25 +51,21 @@ public interface IRenderer { .withDepthWrite(false) .withCull(false) .buildSnippet(); - RenderType linesWithDepthRenderType = RenderType.create( + RenderType linesWithDepthRenderType = BaritoneRenderType.create( "renderType/baritone_lines_with_depth", 256, RenderPipeline.builder(BARITONE_LINES_SNIPPET) .withLocation("pipelines/baritone_lines_with_depth") .withDepthTestFunction(DepthTestFunction.LEQUAL_DEPTH_TEST) - .build(), - RenderType.CompositeState.builder() - .createCompositeState(false) + .build() ); - RenderType linesNoDepthRenderType = RenderType.create( + RenderType linesNoDepthRenderType = BaritoneRenderType.create( "renderType/baritone_lines_no_depth", 256, RenderPipeline.builder(BARITONE_LINES_SNIPPET) .withLocation("pipelines/baritone_lines_no_depth") .withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST) - .build(), - RenderType.CompositeState.builder() - .createCompositeState(false) + .build() ); float[] color = new float[]{1.0F, 1.0F, 1.0F, 255.0F}; diff --git a/src/main/java/baritone/utils/accessor/IRenderPipelines.java b/src/main/java/baritone/utils/accessor/IRenderPipelines.java new file mode 100644 index 000000000..8dca8292f --- /dev/null +++ b/src/main/java/baritone/utils/accessor/IRenderPipelines.java @@ -0,0 +1,24 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import com.mojang.blaze3d.pipeline.RenderPipeline; + +public interface IRenderPipelines { + RenderPipeline.Snippet getLinesSnippet(); +}