SimpleMultipart/src/main/java/net/shadowfacts/simplemultipart/client/MultipartContainerBakedMode...

87 lines
2.7 KiB
Java
Raw Normal View History

2018-12-20 00:39:10 +00:00
package net.shadowfacts.simplemultipart.client;
import net.minecraft.block.BlockState;
import net.minecraft.client.MinecraftClient;
2018-12-24 16:29:06 +00:00
import net.minecraft.client.render.block.BlockModels;
2018-12-20 00:39:10 +00:00
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.render.model.json.ModelItemPropertyOverrideList;
2018-12-22 18:37:19 +00:00
import net.minecraft.client.render.model.json.ModelTransformation;
2018-12-20 00:39:10 +00:00
import net.minecraft.client.texture.Sprite;
2018-12-24 16:29:06 +00:00
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.util.Identifier;
2018-12-20 00:39:10 +00:00
import net.minecraft.util.math.Direction;
2018-12-24 16:29:06 +00:00
import net.shadowfacts.simplemultipart.SimpleMultipart;
2018-12-25 15:30:46 +00:00
import net.shadowfacts.simplemultipart.container.ContainerBlockState;
2018-12-20 00:39:10 +00:00
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
/**
* @author shadowfacts
*/
public class MultipartContainerBakedModel implements BakedModel {
@Override
public List<BakedQuad> getQuads(BlockState state, Direction side, Random random) {
2018-12-25 15:30:46 +00:00
if (!(state instanceof ContainerBlockState)) {
2018-12-20 00:39:10 +00:00
return null;
}
2018-12-25 15:30:46 +00:00
ContainerBlockState containerState = (ContainerBlockState)state;
2018-12-20 01:33:20 +00:00
// TODO: would manually building the list be more efficient?
2018-12-24 22:16:38 +00:00
return containerState.getParts().stream()
2018-12-25 15:20:44 +00:00
.flatMap(view -> {
Identifier partId = SimpleMultipart.MULTIPART.getId(view.getMultipart());
String variant = BlockModels.propertyMapToString(view.getState().getEntries());
2018-12-24 16:29:06 +00:00
ModelIdentifier modelId = new ModelIdentifier(partId, variant);
BakedModel model = MinecraftClient.getInstance().getBakedModelManager().getModel(modelId);
if (model instanceof MultipartBakedModel) {
2018-12-25 15:20:44 +00:00
return ((MultipartBakedModel)model).getMultipartQuads(view, side, random).stream();
2018-12-24 16:29:06 +00:00
} else {
2018-12-24 20:43:12 +00:00
BlockState fakeState = null;
// Need to use the same fake block state as used when loading multi-models
// otherwise MultipartBakedModel will return no quads for a null state
MultipartFakeBlock fakeBlock = MultipartFakeBlock.fakeBlocks.get(partId);
if (fakeBlock != null) {
2018-12-25 15:20:44 +00:00
fakeState = fakeBlock.getFakeState(view.getState());
2018-12-24 20:43:12 +00:00
}
return model.getQuads(fakeState, side, random).stream();
2018-12-24 16:29:06 +00:00
}
2018-12-20 00:39:10 +00:00
})
.collect(Collectors.toList());
}
@Override
public boolean useAmbientOcclusion() {
return true;
}
@Override
public boolean hasDepthInGui() {
return false;
}
@Override
public boolean isBuiltin() {
return false;
}
@Override
public Sprite getSprite() {
2018-12-24 20:43:12 +00:00
return MinecraftClient.getInstance().getSpriteAtlas().getSprite("block/stone");
2018-12-20 00:39:10 +00:00
}
@Override
2018-12-29 18:36:29 +00:00
public ModelTransformation getTransformation() {
2018-12-22 18:37:19 +00:00
return ModelTransformation.ORIGIN;
2018-12-20 00:39:10 +00:00
}
@Override
public ModelItemPropertyOverrideList getItemPropertyOverrides() {
return ModelItemPropertyOverrideList.ORIGIN;
}
}