package joshie.harvest.buildings.render;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import joshie.harvest.api.buildings.Building;
import joshie.harvest.buildings.HFBuildings;
import joshie.harvest.buildings.render.BuildingItemRenderer.BuildingTile;
import joshie.harvest.core.base.render.FakeEntityRenderer.EntityItemRenderer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.util.Rotation;
import javax.annotation.Nullable;
import java.util.concurrent.ExecutionException;
public class BuildingItemRenderer extends TileEntitySpecialRenderer<BuildingTile> {
private final BuildingVertexUploader vertexUploader = new BuildingVertexUploader();
private Cache<Building, BuildingRenderer> cache = CacheBuilder.newBuilder().build();
private BuildingRenderer getRenderer(Building building) throws ExecutionException {
return cache.get(building, () -> building == HFBuildings.FESTIVAL_GROUNDS ?
new BuildingRenderer(new BuildingAccess(building, Rotation.NONE), new BuildingKey(Rotation.NONE, building)):
new BuildingRendererNoFloor(new BuildingAccess(building, Rotation.NONE), new BuildingKey(Rotation.NONE, building)));
}
@Override
public void renderTileEntityAt(@Nullable BuildingTile fake, double x, double y, double z, float partialTicks, int destroyStage) {
try {
if (fake != null) {
Building building = HFBuildings.TOWNHALL;
RenderHelper.disableStandardItemLighting();
GlStateManager.color(1F, 1F, 1F);
GlStateManager.pushMatrix();
GlStateManager.translate(0.8F, 0.6F, 0.5F);
float scale = 0.068F;
GlStateManager.scale(scale, scale, scale);
GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(180F, 1.0F, 0.0F, 0.0F);
GlStateManager.pushMatrix();
GlStateManager.disableCull();
GlStateManager.enableRescaleNormal();
GlStateManager.scale(-1.0F, -1.0F, 1.0F);
GlStateManager.translate(0.0F, -1.501F, 0.0F);
getRenderer(building).draw(vertexUploader);
GlStateManager.disableRescaleNormal();
GlStateManager.enableCull();
GlStateManager.popMatrix();
GlStateManager.popMatrix();
}
} catch (ExecutionException ex) { /**/}
}
public static class BuildingTile extends EntityItemRenderer {
public static final BuildingTile INSTANCE = new BuildingTile();
}
}