package mcjty.rftools.blocks.spaceprojector; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mcjty.lib.varia.Coordinate; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraft.world.WorldSettings; import java.util.HashMap; import java.util.Map; @SideOnly(Side.CLIENT) public class ProxyBlockTERenderer extends TileEntitySpecialRenderer { private static Map<Integer,WorldClient> cachedWorlds = new HashMap<Integer, WorldClient>(); @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { ProxyBlockTileEntity proxyBlockTileEntity = (ProxyBlockTileEntity) tileEntity; Block camoBlock = proxyBlockTileEntity.getBlock(); if (camoBlock != null) { Coordinate oc = proxyBlockTileEntity.getOrigCoordinate(); if (oc == null) { System.out.println("mcjty.rftools.blocks.spaceprojector.ProxyBlockTERenderer.renderTileEntityAt NULL"); return; } int dimension = proxyBlockTileEntity.getDimension(); World world = tileEntity.getWorldObj(); if (dimension != world.provider.dimensionId) { WorldClient wc = cachedWorlds.get(dimension); if (wc == null) { WorldSettings.GameType gameType = world.getWorldInfo().getGameType(); WorldSettings settings = new WorldSettings(0L, gameType, false, false /* @@@ for now! hardcore mode*/, world.getWorldInfo().getTerrainType()); wc = new WorldClient(Minecraft.getMinecraft().getNetHandler(), settings, dimension, Minecraft.getMinecraft().gameSettings.difficulty, Minecraft.getMinecraft().mcProfiler); cachedWorlds.put(dimension, wc); } world = wc; } TileEntity te = world.getTileEntity(oc.getX(), oc.getY(), oc.getZ()); if (te != null) { Object renderer = TileEntityRendererDispatcher.instance.mapSpecialRenderers.get(te.getClass()); if (renderer instanceof TileEntitySpecialRenderer) { ((TileEntitySpecialRenderer) renderer).renderTileEntityAt(te, x, y, z, f); } } } } } // int meta = world.getBlockMetadata(oc.getX(), oc.getY(), oc.getZ()); // tileEntity.getWorldObj().setBlockMetadataWithNotify(oc.getX(), oc.getY(), oc.getZ(), meta, 3); // tileEntity.getWorldObj().markBlockForUpdate((int) x, (int) y, (int) z); // GL11.glPushMatrix(); // GL11.glTranslatef((float) (oc.getX() - x), (float) (oc.getY() - y), (float) (oc.getZ() - z)); // TileEntityRendererDispatcher.instance.renderTileEntity(te, f); // ((TileEntitySpecialRenderer) renderer).renderTileEntityAt(te, oc.getX(), oc.getY(), oc.getZ(), f); // GL11.glPopMatrix();