mirror of
https://github.com/FabricMC/fabric.git
synced 2025-07-28 15:09:35 -04:00
22w17a
This commit is contained in:
parent
50e8465e2e
commit
56447d9b95
30 changed files with 104 additions and 433 deletions
fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome
fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/client
fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync
fabric-renderer-indigo
build.gradle
src/main
java/net/fabricmc/fabric
impl/client/indigo/renderer
accessor
AccessAmbientOcclusionCalculator.javaAccessBlockModelRenderer.javaAccessChunkRenderer.javaAccessChunkRendererData.javaAccessItemRenderer.java
aocalc
render
mixin/client/indigo/renderer
resources
fabric-rendering-fluids-v1/src
main/java/net/fabricmc/fabric
api/client/render/fluid/v1
impl/client/rendering/fluid
mixin/client/rendering/fluid
testmod/java/net/fabricmc/fabric/test/client/rendering/fluid
fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/client
gradle.propertiessrc/main/resources
|
@ -33,7 +33,7 @@ import net.minecraft.world.biome.Biome;
|
|||
import net.minecraft.world.biome.BiomeKeys;
|
||||
import net.minecraft.world.biome.source.TheEndBiomeSource;
|
||||
import net.minecraft.world.biome.source.util.MultiNoiseUtil;
|
||||
import net.minecraft.world.gen.random.AtomicSimpleRandom;
|
||||
import net.minecraft.util.math.random.AtomicSimpleRandom;
|
||||
import net.minecraft.util.math.random.ChunkRandom;
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.spongepowered.asm.mixin.Final;
|
|||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import net.minecraft.class_7436;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientCommandSource;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
|
@ -39,12 +40,12 @@ abstract class ClientCommandSourceMixin implements FabricClientCommandSource {
|
|||
|
||||
@Override
|
||||
public void sendFeedback(Text message) {
|
||||
client.inGameHud.addChatMessage(MessageType.SYSTEM, message, Util.NIL_UUID);
|
||||
client.inGameHud.method_43592(MessageType.SYSTEM, message, new class_7436(Util.NIL_UUID, message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendError(Text message) {
|
||||
client.inGameHud.addChatMessage(MessageType.SYSTEM, Text.literal("").append(message).formatted(Formatting.RED), Util.NIL_UUID);
|
||||
client.inGameHud.method_43592(MessageType.SYSTEM, Text.literal("").append(message).formatted(Formatting.RED), new class_7436(Util.NIL_UUID, message));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -61,7 +61,7 @@ public class MixinLevelStorageSession {
|
|||
|
||||
@Shadow
|
||||
@Final
|
||||
private LevelStorage.class_7411 directory;
|
||||
private LevelStorage.LevelSave directory;
|
||||
|
||||
@Unique
|
||||
private boolean fabric_readIdMapFile(File file) throws IOException, RemapException {
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
archivesBaseName = "fabric-renderer-indigo"
|
||||
version = getSubprojectVersion(project)
|
||||
|
||||
loom {
|
||||
accessWidenerPath = file("src/main/resources/fabric-renderer-indigo.accesswidener")
|
||||
}
|
||||
|
||||
moduleDependencies(project, [
|
||||
'fabric-api-base',
|
||||
'fabric-renderer-api-v1'
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.impl.client.indigo.renderer.accessor;
|
||||
|
||||
import java.util.BitSet;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
public interface AccessAmbientOcclusionCalculator {
|
||||
float[] fabric_colorMultiplier();
|
||||
|
||||
int[] fabric_brightness();
|
||||
|
||||
void fabric_apply(BlockRenderView blockRenderView, BlockState blockState, BlockPos pos, Direction face, float[] aoData, BitSet controlBits, boolean shade);
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.impl.client.indigo.renderer.accessor;
|
||||
|
||||
import java.util.BitSet;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
public interface AccessBlockModelRenderer {
|
||||
void fabric_updateShape(BlockRenderView blockRenderView, BlockState blockState, BlockPos pos, int[] vertexData, Direction face, float[] aoData, BitSet controlBits);
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.impl.client.indigo.renderer.accessor;
|
||||
|
||||
import net.minecraft.client.render.BufferBuilder;
|
||||
|
||||
public interface AccessChunkRenderer {
|
||||
void fabric_beginBufferBuilding(BufferBuilder bufferBuilder);
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.impl.client.indigo.renderer.accessor;
|
||||
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
|
||||
public interface AccessChunkRendererData {
|
||||
/**
|
||||
* Mark internal tracking set that buffer has content.
|
||||
*
|
||||
* @param renderLayer Layer with content.
|
||||
*/
|
||||
void fabric_markPopulated(RenderLayer renderLayer);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.impl.client.indigo.renderer.accessor;
|
||||
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface AccessItemRenderer {
|
||||
void fabric_renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer);
|
||||
}
|
|
@ -30,20 +30,20 @@ import static net.minecraft.util.math.Direction.WEST;
|
|||
import java.util.BitSet;
|
||||
import java.util.function.ToIntFunction;
|
||||
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
import net.minecraft.client.render.block.BlockModelRenderer;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.impl.client.indigo.Indigo;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessAmbientOcclusionCalculator;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.aocalc.AoFace.WeightFunction;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.EncodingFormat;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl;
|
||||
|
@ -77,7 +77,7 @@ public class AoCalculator {
|
|||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AoCalculator.class);
|
||||
|
||||
private final AccessAmbientOcclusionCalculator vanillaCalc;
|
||||
private final BlockModelRenderer.AmbientOcclusionCalculator vanillaCalc;
|
||||
private final BlockPos.Mutable lightPos = new BlockPos.Mutable();
|
||||
private final BlockPos.Mutable searchPos = new BlockPos.Mutable();
|
||||
private final BlockRenderInfo blockInfo;
|
||||
|
@ -101,7 +101,7 @@ public class AoCalculator {
|
|||
this.blockInfo = blockInfo;
|
||||
this.brightnessFunc = brightnessFunc;
|
||||
this.aoFunc = aoFunc;
|
||||
this.vanillaCalc = VanillaAoHelper.get();
|
||||
this.vanillaCalc = new BlockModelRenderer.AmbientOcclusionCalculator();
|
||||
|
||||
for (int i = 0; i < 12; i++) {
|
||||
faceData[i] = new AoFaceData();
|
||||
|
@ -119,12 +119,7 @@ public class AoCalculator {
|
|||
|
||||
switch (config) {
|
||||
case VANILLA:
|
||||
// prevent NPE in error case of failed reflection for vanilla calculator access
|
||||
if (vanillaCalc == null) {
|
||||
calcFastVanilla(quad);
|
||||
} else {
|
||||
calcVanilla(quad);
|
||||
}
|
||||
calcVanilla(quad);
|
||||
|
||||
// no point in comparing vanilla with itself
|
||||
shouldCompare = false;
|
||||
|
@ -152,7 +147,7 @@ public class AoCalculator {
|
|||
calcEnhanced(quad);
|
||||
}
|
||||
|
||||
if (shouldCompare && vanillaCalc != null) {
|
||||
if (shouldCompare) {
|
||||
float[] vanillaAo = new float[4];
|
||||
int[] vanillaLight = new int[4];
|
||||
calcVanilla(quad, vanillaAo, vanillaLight);
|
||||
|
@ -188,10 +183,10 @@ public class AoCalculator {
|
|||
quad.toVanilla(0, vertexData, 0, false);
|
||||
|
||||
VanillaAoHelper.updateShape(blockInfo.blockView, blockInfo.blockState, blockInfo.blockPos, vertexData, face, vanillaAoData, vanillaAoControlBits);
|
||||
vanillaCalc.fabric_apply(blockInfo.blockView, blockInfo.blockState, blockInfo.blockPos, quad.lightFace(), vanillaAoData, vanillaAoControlBits, quad.hasShade());
|
||||
vanillaCalc.apply(blockInfo.blockView, blockInfo.blockState, blockInfo.blockPos, quad.lightFace(), vanillaAoData, vanillaAoControlBits, quad.hasShade());
|
||||
|
||||
System.arraycopy(vanillaCalc.fabric_colorMultiplier(), 0, aoDest, 0, 4);
|
||||
System.arraycopy(vanillaCalc.fabric_brightness(), 0, lightDest, 0, 4);
|
||||
System.arraycopy(vanillaCalc.brightness, 0, aoDest, 0, 4);
|
||||
System.arraycopy(vanillaCalc.light, 0, lightDest, 0, 4);
|
||||
}
|
||||
|
||||
private void calcFastVanilla(MutableQuadViewImpl quad) {
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
|
||||
package net.fabricmc.fabric.impl.client.indigo.renderer.aocalc;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.BitSet;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.render.block.BlockModelRenderer;
|
||||
|
@ -26,58 +24,16 @@ import net.minecraft.util.math.BlockPos;
|
|||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
import net.fabricmc.fabric.impl.client.indigo.Indigo;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessAmbientOcclusionCalculator;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessBlockModelRenderer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
public class VanillaAoHelper {
|
||||
private static Supplier<AccessAmbientOcclusionCalculator> factory;
|
||||
|
||||
// Renderer method we call isn't declared as static, but uses no
|
||||
// instance data and is called from multiple threads in vanilla also.
|
||||
private static AccessBlockModelRenderer blockRenderer;
|
||||
private static BlockModelRenderer blockRenderer;
|
||||
|
||||
public static void initialize(BlockModelRenderer instance) {
|
||||
blockRenderer = (AccessBlockModelRenderer) instance;
|
||||
|
||||
final String target = FabricLoader.getInstance().getMappingResolver()
|
||||
.mapClassName("intermediary", "net.minecraft.class_778$class_780");
|
||||
|
||||
for (Class<?> innerClass : BlockModelRenderer.class.getDeclaredClasses()) {
|
||||
if (innerClass.getName().equals(target)) {
|
||||
Constructor<?> constructor = innerClass.getDeclaredConstructors()[0];
|
||||
constructor.setAccessible(true);
|
||||
|
||||
factory = new Supplier<AccessAmbientOcclusionCalculator>() {
|
||||
@Override
|
||||
public AccessAmbientOcclusionCalculator get() {
|
||||
try {
|
||||
return (AccessAmbientOcclusionCalculator) constructor.newInstance(instance);
|
||||
} catch (Exception e) {
|
||||
Indigo.LOGGER.warn("[Indigo] Exception accessing vanilla smooth lighter", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (factory != null && factory.get() == null) {
|
||||
factory = null;
|
||||
}
|
||||
|
||||
if (factory == null) {
|
||||
Indigo.LOGGER.warn("[Indigo] Vanilla smooth lighter unavailable. Indigo lighter will be used even if not configured.");
|
||||
}
|
||||
}
|
||||
|
||||
public static AccessAmbientOcclusionCalculator get() {
|
||||
return factory == null ? null : factory.get();
|
||||
blockRenderer = instance;
|
||||
}
|
||||
|
||||
public static void updateShape(BlockRenderView blockRenderView, BlockState blockState, BlockPos pos, int[] vertexData, Direction face, float[] aoData, BitSet controlBits) {
|
||||
blockRenderer.fabric_updateShape(blockRenderView, blockState, pos, vertexData, face, aoData, controlBits);
|
||||
blockRenderer.getQuadDimensions(blockRenderView, blockState, pos, vertexData, face, aoData, controlBits);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,13 +28,10 @@ import net.minecraft.client.render.RenderLayer;
|
|||
import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.ChunkData;
|
||||
import net.minecraft.client.render.chunk.ChunkRendererRegion;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessChunkRenderer;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessChunkRendererData;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.aocalc.AoLuminanceFix;
|
||||
|
||||
/**
|
||||
|
@ -71,7 +68,7 @@ public class ChunkRenderInfo {
|
|||
private final Long2FloatOpenHashMap aoLevelCache;
|
||||
|
||||
private final BlockPos.Mutable chunkOrigin = new BlockPos.Mutable();
|
||||
AccessChunkRendererData chunkData;
|
||||
BuiltChunk.RebuildTask.class_7435 chunkData;
|
||||
BuiltChunk chunkRenderer;
|
||||
BlockBufferBuilderStorage builders;
|
||||
Set<RenderLayer> initializedLayers;
|
||||
|
@ -86,10 +83,10 @@ public class ChunkRenderInfo {
|
|||
aoLevelCache.defaultReturnValue(Float.MAX_VALUE);
|
||||
}
|
||||
|
||||
void prepare(ChunkRendererRegion blockView, BuiltChunk chunkRenderer, ChunkData chunkData, BlockBufferBuilderStorage builders, Set<RenderLayer> initializedLayers) {
|
||||
void prepare(ChunkRendererRegion blockView, BuiltChunk chunkRenderer, BuiltChunk.RebuildTask.class_7435 chunkData, BlockBufferBuilderStorage builders, Set<RenderLayer> initializedLayers) {
|
||||
this.blockView = blockView;
|
||||
this.chunkOrigin.set(chunkRenderer.getOrigin());
|
||||
this.chunkData = (AccessChunkRendererData) chunkData;
|
||||
this.chunkData = chunkData;
|
||||
this.chunkRenderer = chunkRenderer;
|
||||
this.builders = builders;
|
||||
this.initializedLayers = initializedLayers;
|
||||
|
@ -106,20 +103,19 @@ public class ChunkRenderInfo {
|
|||
|
||||
/** Lazily retrieves output buffer for given layer, initializing as needed. */
|
||||
public BufferBuilder getInitializedBuffer(RenderLayer renderLayer) {
|
||||
BufferBuilder result = buffers.get(renderLayer);
|
||||
BufferBuilder builder = buffers.get(renderLayer);
|
||||
|
||||
if (result == null) {
|
||||
BufferBuilder builder = builders.get(renderLayer);
|
||||
result = builder;
|
||||
chunkData.fabric_markPopulated(renderLayer);
|
||||
buffers.put(renderLayer, result);
|
||||
if (builder == null) {
|
||||
builder = builders.get(renderLayer);
|
||||
|
||||
if (initializedLayers.add(renderLayer)) {
|
||||
((AccessChunkRenderer) chunkRenderer).fabric_beginBufferBuilding(builder);
|
||||
chunkRenderer.beginBufferBuilding(builder);
|
||||
}
|
||||
|
||||
buffers.put(renderLayer, builder);
|
||||
}
|
||||
|
||||
return result;
|
||||
return builder;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,21 +17,20 @@
|
|||
package net.fabricmc.fabric.impl.client.indigo.renderer.render;
|
||||
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.render.item.ItemRenderer;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessItemRenderer;
|
||||
|
||||
public class IndigoQuadHandler implements ItemRenderContext.VanillaQuadHandler {
|
||||
private final AccessItemRenderer itemRenderer;
|
||||
private final ItemRenderer itemRenderer;
|
||||
|
||||
public IndigoQuadHandler(AccessItemRenderer itemRenderer) {
|
||||
public IndigoQuadHandler(ItemRenderer itemRenderer) {
|
||||
this.itemRenderer = itemRenderer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(BakedModel model, ItemStack stack, int color, int overlay, MatrixStack matrixStack, VertexConsumer buffer) {
|
||||
itemRenderer.fabric_renderBakedItemModel(model, stack, color, overlay, matrixStack, buffer);
|
||||
itemRenderer.renderBakedItemModel(model, stack, color, overlay, matrixStack, buffer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import net.minecraft.block.BlockState;
|
|||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.ChunkData;
|
||||
import net.minecraft.client.render.chunk.ChunkRendererRegion;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
|
@ -86,9 +85,9 @@ public class TerrainRenderContext extends AbstractRenderContext {
|
|||
}
|
||||
};
|
||||
|
||||
public void prepare(ChunkRendererRegion blockView, BuiltChunk chunkRenderer, ChunkData chunkData, BlockBufferBuilderStorage builders, Set<RenderLayer> initializedLayers) {
|
||||
public void prepare(ChunkRendererRegion blockView, BuiltChunk chunkRenderer, BuiltChunk.RebuildTask.class_7435 renderData, BlockBufferBuilderStorage builders, Set<RenderLayer> initializedLayers) {
|
||||
blockInfo.setBlockView(blockView);
|
||||
chunkInfo.prepare(blockView, chunkRenderer, chunkData, builders, initializedLayers);
|
||||
chunkInfo.prepare(blockView, chunkRenderer, renderData, builders, initializedLayers);
|
||||
}
|
||||
|
||||
public void release() {
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.mixin.client.indigo.renderer;
|
||||
|
||||
import java.util.BitSet;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessAmbientOcclusionCalculator;
|
||||
|
||||
@Mixin(targets = "net.minecraft.client.render.block.BlockModelRenderer$AmbientOcclusionCalculator")
|
||||
public abstract class MixinAmbientOcclusionCalculator implements AccessAmbientOcclusionCalculator {
|
||||
@Shadow
|
||||
private float[] brightness;
|
||||
@Shadow
|
||||
private int[] light;
|
||||
|
||||
@Shadow
|
||||
public abstract void apply(BlockRenderView blockRenderView, BlockState blockState, BlockPos pos, Direction face, float[] aoData, BitSet controlBits, boolean shade);
|
||||
|
||||
@Override
|
||||
public float[] fabric_colorMultiplier() {
|
||||
return brightness;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] fabric_brightness() {
|
||||
return light;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fabric_apply(BlockRenderView blockRenderView, BlockState blockState, BlockPos pos, Direction face, float[] aoData, BitSet controlBits, boolean shade) {
|
||||
apply(blockRenderView, blockState, pos, face, aoData, controlBits, shade);
|
||||
}
|
||||
}
|
|
@ -16,15 +16,11 @@
|
|||
|
||||
package net.fabricmc.fabric.mixin.client.indigo.renderer;
|
||||
|
||||
import java.util.BitSet;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
|
@ -32,29 +28,25 @@ import net.minecraft.client.render.block.BlockModelRenderer;
|
|||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
import net.minecraft.util.math.random.AbstractRandom;
|
||||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessBlockModelRenderer;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.aocalc.VanillaAoHelper;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.render.BlockRenderContext;
|
||||
|
||||
@Mixin(BlockModelRenderer.class)
|
||||
public abstract class MixinBlockModelRenderer implements AccessBlockModelRenderer {
|
||||
public abstract class MixinBlockModelRenderer {
|
||||
@Unique
|
||||
private final ThreadLocal<BlockRenderContext> fabric_contexts = ThreadLocal.withInitial(BlockRenderContext::new);
|
||||
|
||||
@Shadow
|
||||
protected abstract void getQuadDimensions(BlockRenderView blockView, BlockState blockState, BlockPos blockPos, int[] vertexData, Direction face, float[] aoData, BitSet controlBits);
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;ZLnet/minecraft/util/math/random/AbstractRandom;JI)Z", cancellable = true)
|
||||
private void hookRender(BlockRenderView blockView, BakedModel model, BlockState state, BlockPos pos, MatrixStack matrix, VertexConsumer buffer, boolean checkSides, AbstractRandom rand, long seed, int overlay, CallbackInfoReturnable<Boolean> ci) {
|
||||
@Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;ZLnet/minecraft/util/math/random/AbstractRandom;JI)V", cancellable = true)
|
||||
private void hookRender(BlockRenderView blockView, BakedModel model, BlockState state, BlockPos pos, MatrixStack matrix, VertexConsumer buffer, boolean checkSides, AbstractRandom rand, long seed, int overlay, CallbackInfo ci) {
|
||||
if (!((FabricBakedModel) model).isVanillaAdapter()) {
|
||||
BlockRenderContext context = fabric_contexts.get();
|
||||
// Note that we do not support face-culling here (so checkSides is ignored)
|
||||
ci.setReturnValue(context.render(blockView, model, state, pos, matrix, buffer, rand, seed, overlay));
|
||||
context.render(blockView, model, state, pos, matrix, buffer, rand, seed, overlay);
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,9 +54,4 @@ public abstract class MixinBlockModelRenderer implements AccessBlockModelRendere
|
|||
private void onInit(CallbackInfo ci) {
|
||||
VanillaAoHelper.initialize((BlockModelRenderer) (Object) this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fabric_updateShape(BlockRenderView blockView, BlockState blockState, BlockPos pos, int[] vertexData, Direction face, float[] aoData, BitSet controlBits) {
|
||||
getQuadDimensions(blockView, blockState, pos, vertexData, face, aoData, controlBits);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package net.fabricmc.fabric.mixin.client.indigo.renderer;
|
|||
|
||||
import java.util.Set;
|
||||
|
||||
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;
|
||||
|
@ -33,7 +34,6 @@ import net.minecraft.client.render.RenderLayer;
|
|||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.render.block.BlockRenderManager;
|
||||
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
import net.minecraft.client.render.chunk.ChunkOcclusionDataBuilder;
|
||||
import net.minecraft.client.render.chunk.ChunkRendererRegion;
|
||||
|
@ -65,18 +65,19 @@ import net.fabricmc.fabric.impl.client.indigo.renderer.render.TerrainRenderConte
|
|||
* Renderer authors are responsible for creating the hooks they need.
|
||||
* (Though they can use these as an example if they wish.)
|
||||
*/
|
||||
@Mixin(targets = "net.minecraft.client.render.chunk.ChunkBuilder$BuiltChunk$RebuildTask")
|
||||
@Mixin(BuiltChunk.RebuildTask.class)
|
||||
public abstract class MixinChunkRebuildTask {
|
||||
@Final
|
||||
@Shadow
|
||||
protected BuiltChunk field_20839;
|
||||
BuiltChunk field_20839;
|
||||
|
||||
@Inject(method = "Lnet/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk$RebuildTask;render(FFFLnet/minecraft/client/render/chunk/ChunkBuilder$ChunkData;Lnet/minecraft/client/render/chunk/BlockBufferBuilderStorage;)Ljava/util/Set;",
|
||||
@Inject(method = "render",
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/BlockPos;iterate(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/BlockPos;)Ljava/lang/Iterable;"),
|
||||
locals = LocalCapture.CAPTURE_FAILHARD)
|
||||
private void hookChunkBuild(float cameraX, float cameraY, float cameraZ,
|
||||
ChunkBuilder.ChunkData renderData, BlockBufferBuilderStorage builder,
|
||||
CallbackInfoReturnable<Set<BlockEntity>> ci,
|
||||
int i, BlockPos blockPos, BlockPos blockPos2, ChunkOcclusionDataBuilder chunkOcclusionDataBuilder, Set set, ChunkRendererRegion region, MatrixStack matrixStack, Set<RenderLayer> initializedLayers/*, AbstractRandom abstractRandom, BlockRenderManager blockRenderManager*/) {
|
||||
BlockBufferBuilderStorage builder,
|
||||
CallbackInfoReturnable<BuiltChunk.RebuildTask.class_7435> ci,
|
||||
BuiltChunk.RebuildTask.class_7435 renderData, int i, BlockPos blockPos, BlockPos blockPos2, ChunkOcclusionDataBuilder chunkOcclusionDataBuilder, ChunkRendererRegion region, MatrixStack matrixStack, Set<RenderLayer> initializedLayers, AbstractRandom abstractRandom, BlockRenderManager blockRenderManager) {
|
||||
// hook just before iterating over the render chunk's chunks blocks, captures the used renderlayer set
|
||||
// accessing this.region is unsafe due to potential async cancellation, the LV has to be used!
|
||||
|
||||
|
@ -101,26 +102,27 @@ public abstract class MixinChunkRebuildTask {
|
|||
* Normally this does nothing but will allow mods to create rendering hooks that are
|
||||
* driven off of render type. (Not recommended or encouraged, but also not prevented.)
|
||||
*/
|
||||
@Redirect(method = "Lnet/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk$RebuildTask;render(FFFLnet/minecraft/client/render/chunk/ChunkBuilder$ChunkData;Lnet/minecraft/client/render/chunk/BlockBufferBuilderStorage;)Ljava/util/Set;", require = 1, at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/block/BlockRenderManager;renderBlock(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;ZLnet/minecraft/util/math/random/AbstractRandom;)Z"))
|
||||
private boolean hookChunkBuildTesselate(BlockRenderManager renderManager, BlockState blockState, BlockPos blockPos, BlockRenderView blockView, MatrixStack matrix, VertexConsumer bufferBuilder, boolean checkSides, AbstractRandom random) {
|
||||
@Redirect(method = "render", require = 1, at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/block/BlockRenderManager;renderBlock(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;ZLnet/minecraft/util/math/random/AbstractRandom;)V"))
|
||||
private void hookChunkBuildTesselate(BlockRenderManager renderManager, BlockState blockState, BlockPos blockPos, BlockRenderView blockView, MatrixStack matrix, VertexConsumer bufferBuilder, boolean checkSides, AbstractRandom random) {
|
||||
if (blockState.getRenderType() == BlockRenderType.MODEL) {
|
||||
final BakedModel model = renderManager.getModel(blockState);
|
||||
|
||||
if (Indigo.ALWAYS_TESSELATE_INDIGO || !((FabricBakedModel) model).isVanillaAdapter()) {
|
||||
Vec3d vec3d = blockState.getModelOffset(blockView, blockPos);
|
||||
matrix.translate(vec3d.x, vec3d.y, vec3d.z);
|
||||
return ((AccessChunkRendererRegion) blockView).fabric_getRenderer().tessellateBlock(blockState, blockPos, model, matrix);
|
||||
((AccessChunkRendererRegion) blockView).fabric_getRenderer().tessellateBlock(blockState, blockPos, model, matrix);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return renderManager.renderBlock(blockState, blockPos, blockView, matrix, bufferBuilder, checkSides, random);
|
||||
renderManager.renderBlock(blockState, blockPos, blockView, matrix, bufferBuilder, checkSides, random);
|
||||
}
|
||||
|
||||
/**
|
||||
* Release all references. Probably not necessary but would be $#%! to debug if it is.
|
||||
*/
|
||||
@Inject(method = "Lnet/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk$RebuildTask;render(FFFLnet/minecraft/client/render/chunk/ChunkBuilder$ChunkData;Lnet/minecraft/client/render/chunk/BlockBufferBuilderStorage;)Ljava/util/Set;",
|
||||
@Inject(method = "render",
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/BlockModelRenderer;disableBrightnessCache()V"))
|
||||
private void hookRebuildChunkReturn(CallbackInfoReturnable<Set<BlockEntity>> ci) {
|
||||
// hook after iterating over the render chunk's chunks blocks, must be called if and only if hookChunkBuild happened
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.mixin.client.indigo.renderer;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.ChunkData;
|
||||
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessChunkRendererData;
|
||||
|
||||
@Mixin(ChunkData.class)
|
||||
public abstract class MixinChunkRenderData implements AccessChunkRendererData {
|
||||
@Shadow
|
||||
private Set<RenderLayer> nonEmptyLayers;
|
||||
|
||||
@Override
|
||||
public void fabric_markPopulated(RenderLayer renderLayer) {
|
||||
nonEmptyLayers.add(renderLayer);
|
||||
}
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.mixin.client.indigo.renderer;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import net.minecraft.client.render.BufferBuilder;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessChunkRenderer;
|
||||
|
||||
@Mixin(BuiltChunk.class)
|
||||
public abstract class MixinChunkRenderer implements AccessChunkRenderer {
|
||||
@Shadow
|
||||
abstract void beginBufferBuilding(BufferBuilder builder);
|
||||
|
||||
/**
|
||||
* Access method for renderer.
|
||||
*/
|
||||
@Override
|
||||
public void fabric_beginBufferBuilding(BufferBuilder builder) {
|
||||
beginBufferBuilding(builder);
|
||||
}
|
||||
}
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package net.fabricmc.fabric.mixin.client.indigo.renderer;
|
||||
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
@ -24,7 +25,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import net.minecraft.client.color.item.ItemColors;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.item.ItemRenderer;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
|
@ -33,24 +33,21 @@ import net.minecraft.client.util.math.MatrixStack;
|
|||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.accessor.AccessItemRenderer;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.render.IndigoQuadHandler;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.render.ItemRenderContext;
|
||||
import net.fabricmc.fabric.impl.client.indigo.renderer.render.ItemRenderContext.VanillaQuadHandler;
|
||||
|
||||
@Mixin(ItemRenderer.class)
|
||||
public abstract class MixinItemRenderer implements AccessItemRenderer {
|
||||
public abstract class MixinItemRenderer {
|
||||
@Final
|
||||
@Shadow
|
||||
protected ItemColors colors;
|
||||
private ItemColors colors;
|
||||
|
||||
@Unique
|
||||
private final ThreadLocal<ItemRenderContext> fabric_contexts = ThreadLocal.withInitial(() -> new ItemRenderContext(colors));
|
||||
|
||||
@Unique
|
||||
private final VanillaQuadHandler fabric_vanillaHandler = new IndigoQuadHandler(this);
|
||||
|
||||
@Shadow
|
||||
protected abstract void renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer);
|
||||
private final VanillaQuadHandler fabric_vanillaHandler = new IndigoQuadHandler((ItemRenderer) (Object) this);
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V", cancellable = true)
|
||||
public void hook_renderItem(ItemStack stack, ModelTransformation.Mode transformMode, boolean invert, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, BakedModel model, CallbackInfo ci) {
|
||||
|
@ -59,9 +56,4 @@ public abstract class MixinItemRenderer implements AccessItemRenderer {
|
|||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fabric_renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer) {
|
||||
renderBakedItemModel(model, stack, light, overlay, matrixStack, buffer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
accessWidener v2 named
|
||||
|
||||
accessible class net/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk$RebuildTask
|
||||
accessible class net/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk$RebuildTask$class_7435
|
||||
|
||||
accessible class net/minecraft/client/render/block/BlockModelRenderer$AmbientOcclusionCalculator
|
||||
accessible field net/minecraft/client/render/block/BlockModelRenderer$AmbientOcclusionCalculator brightness [F
|
||||
accessible field net/minecraft/client/render/block/BlockModelRenderer$AmbientOcclusionCalculator light [I
|
||||
|
||||
accessible method net/minecraft/client/render/block/BlockModelRenderer getQuadDimensions (Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;[ILnet/minecraft/util/math/Direction;[FLjava/util/BitSet;)V
|
||||
|
||||
accessible method net/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk beginBufferBuilding (Lnet/minecraft/client/render/BufferBuilder;)V
|
||||
|
||||
accessible method net/minecraft/client/render/item/ItemRenderer renderBakedItemModel (Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/item/ItemStack;IILnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;)V
|
|
@ -6,11 +6,8 @@
|
|||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"MixinAmbientOcclusionCalculator",
|
||||
"MixinBlockModelRenderer",
|
||||
"MixinChunkRebuildTask",
|
||||
"MixinChunkRenderData",
|
||||
"MixinChunkRenderer",
|
||||
"MixinChunkRendererRegion",
|
||||
"MixinItemRenderer"
|
||||
],
|
||||
|
|
|
@ -32,5 +32,6 @@
|
|||
},
|
||||
"custom": {
|
||||
"fabric-api:module-lifecycle": "stable"
|
||||
}
|
||||
},
|
||||
"accessWidener" : "fabric-renderer-indigo.accesswidener"
|
||||
}
|
||||
|
|
|
@ -83,8 +83,8 @@ public interface FluidRenderHandler {
|
|||
* @param fluidState The fluid state being rendered.
|
||||
* @return Whether anything is tessellated.
|
||||
*/
|
||||
default boolean renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState) {
|
||||
return ((FluidRenderHandlerRegistryImpl) FluidRenderHandlerRegistry.INSTANCE).renderFluid(pos, world, vertexConsumer, blockState, fluidState);
|
||||
default void renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState) {
|
||||
((FluidRenderHandlerRegistryImpl) FluidRenderHandlerRegistry.INSTANCE).renderFluid(pos, world, vertexConsumer, blockState, fluidState);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -120,7 +120,7 @@ public class FluidRenderHandlerRegistryImpl implements FluidRenderHandlerRegistr
|
|||
}
|
||||
}
|
||||
|
||||
public boolean renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState) {
|
||||
return fluidRenderer.render(world, pos, vertexConsumer, blockState, fluidState);
|
||||
public void renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState) {
|
||||
fluidRenderer.render(world, pos, vertexConsumer, blockState, fluidState);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -61,7 +60,7 @@ public class MixinFluidRenderer {
|
|||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "render", cancellable = true)
|
||||
public void tesselate(BlockRenderView view, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfoReturnable<Boolean> info) {
|
||||
public void tesselate(BlockRenderView view, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfo info) {
|
||||
if (!fabric_customRendering.get()) {
|
||||
// Prevent recursively looking up custom fluid renderers when default behaviour is being invoked
|
||||
try {
|
||||
|
@ -81,7 +80,7 @@ public class MixinFluidRenderer {
|
|||
}
|
||||
|
||||
@Unique
|
||||
private void tessellateViaHandler(BlockRenderView view, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfoReturnable<Boolean> info) {
|
||||
private void tessellateViaHandler(BlockRenderView view, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfo info) {
|
||||
FluidRendererHookContainer ctr = fabric_renderHandler.get();
|
||||
FluidRenderHandler handler = ((FluidRenderHandlerRegistryImpl) FluidRenderHandlerRegistry.INSTANCE).getOverride(fluidState.getFluid());
|
||||
|
||||
|
@ -92,12 +91,13 @@ public class MixinFluidRenderer {
|
|||
ctr.handler = handler;
|
||||
|
||||
if (handler != null) {
|
||||
info.setReturnValue(handler.renderFluid(pos, view, vertexConsumer, blockState, fluidState));
|
||||
handler.renderFluid(pos, view, vertexConsumer, blockState, fluidState);
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "render")
|
||||
public void tesselateReturn(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfoReturnable<Boolean> cir) {
|
||||
public void tesselateReturn(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfo ci) {
|
||||
fabric_renderHandler.get().clear();
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ public class CustomizedFluidRenderer extends SimpleFluidRenderHandler {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState) {
|
||||
public void renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState) {
|
||||
int light = getLight(world, pos);
|
||||
float u1 = sprites[2].getFrameU(0);
|
||||
float v1 = sprites[2].getFrameV(0);
|
||||
|
@ -66,8 +66,6 @@ public class CustomizedFluidRenderer extends SimpleFluidRenderHandler {
|
|||
vertex(vertexConsumer, x2, y1, z1, 1, 1, 1, u2, v1, light);
|
||||
vertex(vertexConsumer, x2, y2, z1, 1, 1, 1, u2, v2, light);
|
||||
vertex(vertexConsumer, x1, y2, z2, 1, 1, 1, u1, v2, light);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void vertex(VertexConsumer vertexConsumer, double x, double y, double z, float red, float green, float blue, float u, float v, int light) {
|
||||
|
|
|
@ -105,8 +105,7 @@ public class FluidVariantRenderTest implements ClientModInitializer {
|
|||
bufferBuilder.vertex(model, x1, y1, z).color(r, g, b, 1).texture(u1, v1).next();
|
||||
bufferBuilder.vertex(model, x1, y0, z).color(r, g, b, 1).texture(u1, v0).next();
|
||||
bufferBuilder.vertex(model, x0, y0, z).color(r, g, b, 1).texture(u0, v0).next();
|
||||
bufferBuilder.end();
|
||||
BufferRenderer.method_43433(bufferBuilder);
|
||||
BufferRenderer.drawWithShader(bufferBuilder.end());
|
||||
|
||||
RenderSystem.enableDepthTest();
|
||||
}
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
org.gradle.jvmargs=-Xmx2560M
|
||||
|
||||
version=0.51.2
|
||||
minecraft_version=22w16b
|
||||
yarn_version=+build.3
|
||||
loader_version=0.14.0
|
||||
version=0.51.3
|
||||
minecraft_version=22w17a
|
||||
yarn_version=+build.1
|
||||
loader_version=0.14.3
|
||||
|
||||
prerelease=true
|
||||
|
||||
# Do not manually update, use the bumpversions task:
|
||||
fabric-api-base-version=0.4.5
|
||||
fabric-api-lookup-api-v1-version=1.6.1
|
||||
fabric-biome-api-v1-version=9.0.4
|
||||
fabric-biome-api-v1-version=9.0.5
|
||||
fabric-blockrenderlayer-v1-version=1.1.13
|
||||
fabric-command-api-v1-version=1.1.12
|
||||
fabric-commands-v0-version=0.2.11
|
||||
fabric-command-api-v1-version=1.1.13
|
||||
fabric-commands-v0-version=0.2.12
|
||||
fabric-containers-v0-version=0.1.22
|
||||
fabric-content-registries-v0-version=3.0.9
|
||||
fabric-crash-report-info-v1-version=0.1.11
|
||||
fabric-data-generation-api-v1-version=3.0.2
|
||||
fabric-data-generation-api-v1-version=3.0.3
|
||||
fabric-dimensions-v1-version=2.1.20
|
||||
fabric-entity-events-v1-version=1.4.11
|
||||
fabric-events-interaction-v0-version=0.4.22
|
||||
|
@ -36,12 +36,12 @@ fabric-networking-api-v1-version=1.0.22
|
|||
fabric-networking-v0-version=0.3.9
|
||||
fabric-object-builder-api-v1-version=3.1.2
|
||||
fabric-particles-v1-version=1.0.2
|
||||
fabric-registry-sync-v0-version=0.9.9
|
||||
fabric-registry-sync-v0-version=0.9.10
|
||||
fabric-renderer-api-v1-version=1.0.2
|
||||
fabric-renderer-indigo-version=0.5.1
|
||||
fabric-renderer-indigo-version=0.6.0
|
||||
fabric-renderer-registries-v1-version=3.2.13
|
||||
fabric-rendering-data-attachment-v1-version=0.3.8
|
||||
fabric-rendering-fluids-v1-version=2.0.3
|
||||
fabric-rendering-fluids-v1-version=3.0.0
|
||||
fabric-rendering-v0-version=1.1.15
|
||||
fabric-rendering-v1-version=1.10.9
|
||||
fabric-resource-conditions-api-v1-version=2.0.3
|
||||
|
@ -49,6 +49,6 @@ fabric-resource-loader-v0-version=0.4.24
|
|||
fabric-screen-api-v1-version=1.0.17
|
||||
fabric-screen-handler-api-v1-version=1.2.1
|
||||
fabric-textures-v0-version=1.0.13
|
||||
fabric-transfer-api-v1-version=1.6.1
|
||||
fabric-transfer-api-v1-version=2.0.0
|
||||
fabric-transitive-access-wideners-v1-version=1.0.2
|
||||
fabric-convention-tags-v1-version=1.0.2
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"FabricMC"
|
||||
],
|
||||
"depends": {
|
||||
"fabricloader": ">=0.14.0",
|
||||
"fabricloader": ">=0.14.3",
|
||||
"java": ">=17",
|
||||
"minecraft": "~1.19-alpha.22.11.a"
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue