Skip to content

Commit

Permalink
25w08a
Browse files Browse the repository at this point in the history
  • Loading branch information
1foxy2 committed Mar 5, 2025
1 parent bf0884a commit 5fef012
Show file tree
Hide file tree
Showing 35 changed files with 128 additions and 158 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
// see https://fabricmc.net/develop/ for new versions
id 'fabric-loom' version '1.9-SNAPSHOT' apply false
id 'fabric-loom' version '1.10-SNAPSHOT' apply false
// see https://projects.neoforged.net/neoforged/moddevgradle for new versions
id 'net.neoforged.moddev' version '2.0.74' apply false
id 'net.neoforged.moddev' version '2.0.78' apply false
}
2 changes: 1 addition & 1 deletion common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {

neoForge {
neoFormVersion = neo_form_version
validateAccessTransformers = true
//validateAccessTransformers = true
// Automatically enable AccessTransformers if the file exists
def at = file('src/main/resources/META-INF/accesstransformer.cfg')
if (at.exists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.block.ModelBlockRenderer;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -38,7 +38,7 @@ public interface ExtendedBlockModelRenderer {
* @since 0.25.0
*/
void moreculling$renderModelWithoutFace(PoseStack.Pose pose, VertexConsumer vertices,
@Nullable BlockState state, BakedModel bakedModel, float red,
@Nullable BlockState state, BlockStateModel bakedModel, float red,
float green, float blue, float alpha, int light, int overlay,
Direction withoutFace);

Expand All @@ -58,7 +58,7 @@ public interface ExtendedBlockModelRenderer {
* @since 0.25.0
*/
void moreculling$renderModelForFace(PoseStack.Pose pose, VertexConsumer vertices, @Nullable BlockState state,
BakedModel bakedModel, float red, float green, float blue, float alpha,
BlockStateModel bakedModel, float red, float green, float blue, float alpha,
int light, int overlay, Direction forFace);

/**
Expand All @@ -77,7 +77,7 @@ public interface ExtendedBlockModelRenderer {
* @since 0.25.0
*/
void moreculling$renderModelFor3Faces(PoseStack.Pose pose, VertexConsumer vertices, @Nullable BlockState state,
BakedModel bakedModel, float red, float green, float blue, float alpha,
BlockStateModel bakedModel, float red, float green, float blue, float alpha,
int light, int overlay, Direction faceX, Direction faceY, Direction faceZ);

/**
Expand All @@ -96,7 +96,7 @@ public interface ExtendedBlockModelRenderer {
* @since 0.25.0
*/
void moreculling$renderModelForFaces(PoseStack.Pose pose, VertexConsumer vertices, @Nullable BlockState state,
BakedModel bakedModel, float red, float green, float blue, float alpha,
BlockStateModel bakedModel, float red, float green, float blue, float alpha,
int light, int overlay, Direction[] faces);

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.entity.state.ItemFrameRenderState;
import net.minecraft.client.renderer.item.ItemStackRenderState;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import org.jetbrains.annotations.Nullable;

import java.util.List;

/**
* This interface allows you to call the MoreCulling methods used for item rendering.
* This gives you access to the custom MoreCulling rendering methods, in order to allow everyone to benefit from the
Expand All @@ -27,7 +29,7 @@ public interface ExtendedItemStackRenderState {
*
* @since 0.25.0
*/
void moreculling$renderBakedItemModelWithoutFace(BakedModel model, int light, int overlay,
void moreculling$renderBakedItemModelWithoutFace(List<BakedQuad> model, int light, int overlay,
PoseStack poseStack, VertexConsumer vertices,
@Nullable Direction withoutFace);

Expand All @@ -37,7 +39,7 @@ public interface ExtendedItemStackRenderState {
*
* @since 0.25.0
*/
void moreculling$renderBakedItemModelForFace(BakedModel model, int light, int overlay,
void moreculling$renderBakedItemModelForFace(List<BakedQuad> model, int light, int overlay,
PoseStack poseStack, VertexConsumer vertices, Direction face);

/**
Expand All @@ -46,7 +48,7 @@ public interface ExtendedItemStackRenderState {
*
* @since 0.25.0
*/
void moreculling$renderBakedItemModelOnly3Faces(BakedModel model, int light, int overlay,
void moreculling$renderBakedItemModelOnly3Faces(List<BakedQuad> model, int light, int overlay,
PoseStack poseStack, VertexConsumer vertices,
Direction faceX, Direction faceY, Direction faceZ);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ca.fxco.moreculling.mixin.accessors;

import net.minecraft.client.renderer.block.BlockModelShaper;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
Expand All @@ -12,5 +12,5 @@
public interface BlockModelShaperAccessor {

@Accessor("modelByStateCache")
Map<BlockState, BakedModel> getModels();
Map<BlockState, BlockStateModel> getModels();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,14 @@
import ca.fxco.moreculling.states.ItemRendererStates;
import ca.fxco.moreculling.utils.DirectionUtils;
import com.bawnorton.mixinsquared.TargetHandler;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Restriction(require = @Condition("sodium"))
@Mixin(value = ItemRenderer.class, priority = 1200)
public class ItemRenderer_sodiumMixin {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.ItemFrameRenderer;
import net.minecraft.client.renderer.entity.state.ItemFrameRenderState;
import net.minecraft.client.renderer.item.ItemStackRenderState;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.resources.model.ModelManager;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.resources.model.BlockStateDefinitions;
import net.minecraft.core.Direction;
import net.minecraft.world.entity.decoration.ItemFrame;
import net.minecraft.world.item.MapItem;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.saveddata.maps.MapId;
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
import net.minecraft.world.phys.Vec3;
Expand Down Expand Up @@ -51,11 +52,6 @@ public abstract class ItemFrameRenderer_cullMixin<T extends ItemFrame> extends E

@Shadow @Final private MapRenderer mapRenderer;

@Shadow
private static ModelResourceLocation getFrameModelResourceLocation(ItemFrameRenderState itemFrameRenderState) {
return null;
}

@Shadow protected abstract int getLightCoords(boolean bl, int i, int j);

protected ItemFrameRenderer_cullMixin(EntityRendererProvider.Context ctx) {
Expand Down Expand Up @@ -161,8 +157,8 @@ protected ItemFrameRenderer_cullMixin(EntityRendererProvider.Context ctx) {
poseStack.popPose();
}
if (!itemFrameState.isInvisible) { // Render Item Frame block model
ModelManager modelManager = this.blockRenderer.getBlockModelShaper().getModelManager();
ModelResourceLocation modelResourceLocation = getFrameModelResourceLocation(itemFrameState);
BlockState blockstate = BlockStateDefinitions.getItemFrameFakeState(itemFrameState.isGlowFrame, itemFrameState.mapId != null);
BlockStateModel blockstatemodel = this.blockRenderer.getBlockModel(blockstate);
poseStack.translate(-0.5, -0.5, -0.5);
var modelRenderer = (ExtendedBlockModelRenderer) this.blockRenderer.getModelRenderer();
if (CullingUtils.shouldCullBack(itemFrameState)) {
Expand All @@ -171,7 +167,7 @@ protected ItemFrameRenderer_cullMixin(EntityRendererProvider.Context ctx) {
poseStack.last(),
multiBufferSource.getBuffer(Sheets.solidBlockSheet()),
null,
modelManager.getModel(modelResourceLocation),
blockstatemodel,
1.0f,
1.0f,
1.0f,
Expand All @@ -185,7 +181,7 @@ protected ItemFrameRenderer_cullMixin(EntityRendererProvider.Context ctx) {
poseStack.last(),
multiBufferSource.getBuffer(Sheets.solidBlockSheet()),
null,
modelManager.getModel(modelResourceLocation),
blockstatemodel,
1.0f,
1.0f,
1.0f,
Expand All @@ -201,7 +197,7 @@ protected ItemFrameRenderer_cullMixin(EntityRendererProvider.Context ctx) {
poseStack.last(),
multiBufferSource.getBuffer(Sheets.solidBlockSheet()),
null,
modelManager.getModel(modelResourceLocation),
blockstatemodel,
1.0f,
1.0f,
1.0f,
Expand All @@ -215,7 +211,7 @@ protected ItemFrameRenderer_cullMixin(EntityRendererProvider.Context ctx) {
poseStack.last(),
multiBufferSource.getBuffer(Sheets.solidBlockSheet()),
null,
modelManager.getModel(modelResourceLocation),
blockstatemodel,
1.0f,
1.0f,
1.0f,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package ca.fxco.moreculling.mixin.models;

import ca.fxco.moreculling.api.model.BakedOpacity;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import org.spongepowered.asm.mixin.Mixin;

@Mixin(BakedModel.class)
@Mixin(BlockStateModel.class)
public interface BakedModel_extendsMixin extends BakedOpacity {}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package ca.fxco.moreculling.mixin.models;

import ca.fxco.moreculling.api.model.BakedOpacity;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.DelegateBakedModel;
import net.minecraft.client.renderer.block.model.BlockStateModel;
//import net.minecraft.client.resources.model.BakedModel;
//import net.minecraft.client.resources.model.DelegateBakedModel;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.VoxelShape;
Expand All @@ -11,10 +12,11 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

/* TODO
@Mixin(DelegateBakedModel.class)
public class DelegateBakedModel_cullMixin implements BakedOpacity {
@Shadow @Final protected BakedModel parent;
@Shadow @Final protected BlockStateModel parent;
@Override
public boolean moreculling$hasTextureTranslucency(@Nullable BlockState state, @Nullable Direction direction) {
Expand All @@ -40,4 +42,4 @@ public class DelegateBakedModel_cullMixin implements BakedOpacity {
public boolean moreculling$canSetCullingShape() {
return ((BakedOpacity) parent).moreculling$canSetCullingShape();
}
}
}*/
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import ca.fxco.moreculling.utils.CullingUtils;
import ca.fxco.moreculling.utils.DirectionUtils;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.client.resources.model.MultiPartBakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
Expand All @@ -26,9 +26,6 @@
@Mixin(value = MultiPartBakedModel.class, priority = 1010)
public abstract class MultiPartBakedModel_cacheMixin implements BakedOpacity {

//TODO: Find a proper way to declare all Multipart Caches on game load instead of using `getQuads`
//TODO: test how good moreculling$initTranslucencyCache works

@Shadow
@Final
private List<MultiPartBakedModel.Selector> selectors;
Expand All @@ -48,14 +45,14 @@ public abstract class MultiPartBakedModel_cacheMixin implements BakedOpacity {
public void moreculling$resetTranslucencyCache(BlockState state) {
solidFaces = 0;
for (Direction face : DirectionUtils.DIRECTIONS) {
List<BakedQuad> quads = Services.PLATFORM.getQuads((BakedModel) this, state,
List<BakedQuad> quads = Services.PLATFORM.getQuads((BlockStateModel) this, state,
face, CullingUtils.RANDOM, EmptyBlockGetter.INSTANCE, BlockPos.ZERO);
if (quads.isEmpty()) { // no faces = translucent
solidFaces = BitUtils.unset(solidFaces, face.ordinal());
} else {
solidFaces = BitUtils.set(solidFaces, face.ordinal());
for (BakedQuad quad : quads) {
if (((QuadOpacity) quad).moreculling$getTextureTranslucency()) {
if (((QuadOpacity) (Object) quad).moreculling$getTextureTranslucency()) {
solidFaces = BitUtils.unset(solidFaces, face.ordinal());
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import ca.fxco.moreculling.api.model.BakedOpacity;
import ca.fxco.moreculling.api.sprite.SpriteOpacity;
import ca.fxco.moreculling.utils.DirectionBits;
import ca.fxco.moreculling.utils.DirectionUtils;
import ca.fxco.moreculling.utils.VertexUtils;
import com.mojang.blaze3d.platform.NativeImage;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.SimpleBakedModel;
import net.minecraft.client.renderer.block.model.SimpleModelWrapper;
import net.minecraft.client.resources.model.QuadCollection;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.VoxelShape;
Expand All @@ -19,15 +21,11 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Mixin(SimpleBakedModel.class)
@Mixin(SimpleModelWrapper.class)
public abstract class SimpleBakedModel_cacheMixin implements BakedOpacity {

@Shadow
@Final
protected Map<Direction, List<BakedQuad>> culledFaces; // cullface quads

@Shadow @Final private QuadCollection quads;
@Unique
private final DirectionBits moreculling$solidFaces = new DirectionBits();
@Unique
Expand All @@ -45,19 +43,18 @@ public abstract class SimpleBakedModel_cacheMixin implements BakedOpacity {
@Override
public void moreculling$resetTranslucencyCache(BlockState state) {
moreculling$solidFaces.clear();
for (Map.Entry<Direction, List<BakedQuad>> entry : culledFaces.entrySet()) {
Direction direction = entry.getKey();
List<BakedQuad> layeredQuads = new ArrayList<>(entry.getValue());
for (Direction direction : DirectionUtils.DIRECTIONS) {
List<BakedQuad> layeredQuads = new ArrayList<>(quads.getQuads(direction));
if (!layeredQuads.isEmpty()) {
BakedQuad initialQuad = layeredQuads.removeFirst();
SpriteOpacity opacity = ((SpriteOpacity) initialQuad.getSprite());
SpriteOpacity opacity = ((SpriteOpacity) initialQuad.sprite());
NativeImage image = opacity.moreculling$getUnmipmappedImage();
QuadBounds bounds = VertexUtils.getQuadUvBounds(initialQuad, image.getWidth(), image.getHeight());
if (!opacity.moreculling$hasTranslucency(bounds)) {
if (!layeredQuads.isEmpty()) {
List<NativeImage> overlappingImages = new ArrayList<>();
for (BakedQuad quad : layeredQuads) {
overlappingImages.add(((SpriteOpacity) quad.getSprite())
overlappingImages.add(((SpriteOpacity) quad.sprite())
.moreculling$getUnmipmappedImage());
}
if (!opacity.moreculling$hasTranslucency(bounds, overlappingImages)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import ca.fxco.moreculling.utils.CullingUtils;
import ca.fxco.moreculling.utils.DirectionUtils;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.client.resources.model.WeightedBakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
Expand Down Expand Up @@ -37,14 +37,14 @@ public abstract class WeightedBakedModel_cacheMixin implements BakedOpacity {
public void moreculling$resetTranslucencyCache(BlockState state) {
solidFaces = 0;
for (Direction face : DirectionUtils.DIRECTIONS) {
List<BakedQuad> quads = Services.PLATFORM.getQuads((BakedModel) this, state,
List<BakedQuad> quads = Services.PLATFORM.getQuads((BlockStateModel) this, state,
face, CullingUtils.RANDOM, EmptyBlockGetter.INSTANCE, BlockPos.ZERO);
if (quads.isEmpty()) { // no faces = translucent
solidFaces = BitUtils.unset(solidFaces, face.ordinal());
} else {
solidFaces = BitUtils.set(solidFaces, face.ordinal());
for (BakedQuad quad : quads) {
if (((QuadOpacity) quad).moreculling$getTextureTranslucency()) {
if (((QuadOpacity) (Object) quad).moreculling$getTextureTranslucency()) {
solidFaces = BitUtils.unset(solidFaces, face.ordinal());
break;
}
Expand Down
Loading

0 comments on commit 5fef012

Please sign in to comment.