package openmods.renderer.rotations;
import net.minecraft.client.renderer.RenderBlocks;
import openmods.geometry.Orientation;
import openmods.reflection.ClonerFactory;
import openmods.reflection.ClonerFactory.ICloner;
import openmods.renderer.FixedRenderBlocks;
import openmods.renderer.TweakedRenderBlocks;
public abstract class ClonerSetup implements IRendererSetup {
static final IRendererSetup fixedSetup = new ClonerSetup() {
@Override
protected RenderBlocks createRenderer() {
return new FixedRenderBlocks();
}
};
static final IRendererSetup tweakedSetup = new ClonerSetup() {
@Override
protected RenderBlocks createRenderer() {
return new TweakedRenderBlocks();
}
};
private final SideRotationConfigurator configurator = new SideRotationConfigurator();
private static final ICloner<RenderBlocks> CLONER = ClonerFactory.instance.getCloner(RenderBlocks.class);
ClonerSetup() {}
protected abstract RenderBlocks createRenderer();
@Override
public RenderBlocks enter(Orientation orientation, int metadata, RenderBlocks renderer) {
final RenderBlocks tweakedRenderer = createRenderer();
CLONER.clone(renderer, tweakedRenderer);
configurator.setupFaces(tweakedRenderer, orientation);
return tweakedRenderer;
}
@Override
public void exit(RenderBlocks renderer) {
// NO-OP, since we were operating on copy
}
}