- Fixed copycat models not returning correct values for getAppearance() on contraptions
- Fixed bogey drive belt obj not loading in
This commit is contained in:
simibubi 2025-02-12 13:16:25 +01:00
parent 13582f508a
commit 0104c97d55
6 changed files with 36 additions and 16 deletions

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.render;
import org.apache.commons.lang3.tuple.Pair;
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.content.contraptions.Contraption;
@ -22,9 +23,11 @@ import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import net.neoforged.neoforge.client.model.data.ModelData;
import net.neoforged.neoforge.client.model.data.ModelDataManager;
public class ContraptionRenderInfo {
public static final SuperByteBufferCache.Compartment<Pair<Contraption, RenderType>> CONTRAPTION = new SuperByteBufferCache.Compartment<>();
@ -86,10 +89,25 @@ public class ContraptionRenderInfo {
int minBuildHeight = contraptionWorld.getMinBuildHeight();
int height = contraptionWorld.getHeight();
VirtualRenderWorld renderWorld = new VirtualRenderWorld(level, minBuildHeight, height, origin) {
@Override
public boolean supportsVisualization() {
return VisualizationManager.supportsVisualization(level);
}
@Override
public ModelData getModelData(BlockPos pos) {
BlockEntity blockEntity = getBlockEntity(pos);
if (blockEntity == null)
return super.getModelData(pos);
return blockEntity.getModelData();
}
@Override
public @Nullable ModelDataManager getModelDataManager() {
return null;
}
};
renderWorld.setBlockEntities(c.presentBlockEntities.values());

View file

@ -48,7 +48,6 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import net.neoforged.neoforge.client.model.data.ModelData;
public class ContraptionVisual<E extends AbstractContraptionEntity> extends AbstractEntityVisual<E> implements DynamicVisual, TickableVisual, LightUpdatedVisual, ShaderLightVisual {
protected static final int LIGHT_PADDING = 1;
@ -92,13 +91,6 @@ public class ContraptionVisual<E extends AbstractContraptionEntity> extends Abst
public BlockState getBlockState(BlockPos pos) {
return blocks.lookup().apply(pos);
}
@Override
public ModelData getModelData(BlockPos pos) {
BlockEntity blockEntity = getBlockEntity(pos);
if (blockEntity == null)
return super.getModelData(pos);
return blockEntity.getModelData();
}
};
model = new MultiBlockModelBuilder(modelWorld, blocks.positions())

View file

@ -47,7 +47,7 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.client.model.data.ModelDataManager;
import net.neoforged.neoforge.client.model.data.ModelData;
public abstract class CopycatBlock extends Block implements IBE<CopycatBlockEntity>, IWrenchable {
@ -252,10 +252,10 @@ public abstract class CopycatBlock extends Block implements IBE<CopycatBlockEnti
if (isIgnoredConnectivitySide(level, state, side, pos, queryPos))
return state;
ModelDataManager modelDataManager = Minecraft.getInstance().level.getModelDataManager();
if (modelDataManager == null)
ModelData modelData = level.getModelData(pos);
if (modelData == ModelData.EMPTY)
return getMaterial(level, pos);
return CopycatModel.getMaterial(modelDataManager.getAt(pos));
return CopycatModel.getMaterial(modelData);
}
public boolean isIgnoredConnectivitySide(BlockAndTintGetter reader, BlockState state, Direction face,

View file

@ -2,8 +2,6 @@ package com.simibubi.create.content.decoration.copycat;
import java.util.function.Predicate;
import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockAndTintGetter;
@ -14,7 +12,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.lighting.LevelLightEngine;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import net.neoforged.neoforge.client.model.data.ModelDataManager;
import net.neoforged.neoforge.client.model.data.ModelData;
public class FilteredBlockAndTintGetter implements BlockAndTintGetter {
@ -66,4 +64,9 @@ public class FilteredBlockAndTintGetter implements BlockAndTintGetter {
return wrapped.getBlockTint(pBlockPos, pColorResolver);
}
@Override
public ModelData getModelData(BlockPos pPos) {
return filter.test(pPos) ? wrapped.getModelData(pPos) : ModelData.EMPTY;
}
}

View file

@ -8,6 +8,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.lighting.LevelLightEngine;
import net.minecraft.world.level.material.FluidState;
import net.neoforged.neoforge.client.model.data.ModelData;
public class WrappedBlockAndTintGetter implements BlockAndTintGetter {
protected final BlockAndTintGetter wrapped;
@ -55,4 +56,10 @@ public class WrappedBlockAndTintGetter implements BlockAndTintGetter {
public int getBlockTint(BlockPos pBlockPos, ColorResolver pColorResolver) {
return wrapped.getBlockTint(pBlockPos, pColorResolver);
}
@Override
public ModelData getModelData(BlockPos pPos) {
return wrapped.getModelData(pPos);
}
}

View file

@ -1,6 +1,6 @@
{
"parent": "create:block/track/bogey/textures",
"loader": "forge:obj",
"loader": "neoforge:obj",
"flip_v": true,
"model": "create:models/block/track/bogey/bogey_drive_belt.obj"
}