package joshie.harvest.crops.render;
import joshie.harvest.api.crops.Crop;
import joshie.harvest.core.base.render.BakedHF;
import joshie.harvest.core.util.annotations.HFEvents;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.DefaultStateMapper;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.registry.IRegistry;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public class BakedCrops extends BakedHF {
public BakedCrops(IBakedModel parent) {
super(parent);
}
@Override
public List<BakedQuad> getQuads(final @Nullable IBlockState state, final @Nullable EnumFacing side, final long rand) {
List<BakedQuad> quads = new ArrayList<>();
BakedCrops.super.getQuads(state, side, rand).stream().map(BakedTintedQuad :: new).forEachOrdered(quads::add);
return quads;
}
@HFEvents
@SuppressWarnings("unused")
public static class TintedMapper extends DefaultStateMapper {
@SubscribeEvent
public void onBaking(ModelBakeEvent event) {
IRegistry<ModelResourceLocation, IBakedModel> registry = event.getModelRegistry();
Crop.REGISTRY.values().stream().filter(crop -> crop != Crop.NULL_CROP).filter(Crop::skipLoadingRender).forEachOrdered(crop -> {
for (Object object : crop.getStateHandler().getValidStates()) {
IBlockState state = (IBlockState) object;
IBakedModel original = registry.getObject(getModelResourceLocation(state));
registry.putObject(getModelResourceLocation(state), new BakedCrops(original));
}
});
}
}
}