package openmods.renderer; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; import openmods.reflection.ClonerFactory; import openmods.reflection.ClonerFactory.ICloner; public abstract class WrappedBlockRenderer<T extends Block> implements IBlockRenderer<T> { private static final ICloner<RenderBlocks> CLONER = ClonerFactory.instance.getCloner(RenderBlocks.class); private final IBlockRenderer<T> wrapperRenderer; public WrappedBlockRenderer(IBlockRenderer<T> wrapperRenderer) { this.wrapperRenderer = wrapperRenderer; } @Override public void renderInventoryBlock(T block, int metadata, int modelID, RenderBlocks renderer) { final RenderBlocks fixedRenderer = createWrapper(renderer); CLONER.clone(renderer, fixedRenderer); wrapperRenderer.renderInventoryBlock(block, metadata, modelID, fixedRenderer); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, T block, int modelId, RenderBlocks renderer) { final RenderBlocks fixedRenderer = createWrapper(renderer); CLONER.clone(renderer, fixedRenderer); return wrapperRenderer.renderWorldBlock(world, x, y, z, block, modelId, fixedRenderer); } protected abstract RenderBlocks createWrapper(RenderBlocks renderer); }