/* * This file is part of Spoutcraft (http://wiki.getspout.org/). * * Spoutcraft is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Spoutcraft is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.getspout.spout.client; import org.getspout.spout.ClipboardThread; import org.getspout.spout.DataMiningThread; import org.getspout.spout.SpoutVersion; import org.getspout.spout.entity.EntityManager; import org.getspout.spout.entity.SimpleEntityManager; import org.getspout.spout.inventory.ItemManager; import org.getspout.spout.inventory.SimpleItemManager; import org.getspout.spout.io.CustomTextureManager; import org.getspout.spout.io.FileDownloadThread; import org.getspout.spout.io.FileUtil; import org.getspout.spout.packet.CustomPacket; import org.getspout.spout.packet.PacketManager; import org.getspout.spout.packet.SpoutPacket; import org.getspout.spout.player.ActivePlayer; import org.getspout.spout.player.BiomeManager; import org.getspout.spout.player.ChatManager; import org.getspout.spout.player.ClientPlayer; import org.getspout.spout.player.SimpleBiomeManager; import org.getspout.spout.player.SimpleSkyManager; import org.getspout.spout.player.SkyManager; import net.minecraft.client.Minecraft; import net.minecraft.src.Entity; import net.minecraft.src.EntityClientPlayerMP; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Packet; import net.minecraft.src.WorldClient; public class SpoutClient implements Client { private static SpoutClient instance = null; private static Thread dataMiningThread = new DataMiningThread(); private static final SpoutVersion clientVersion = new SpoutVersion(1, 0, 2, 0); private SpoutVersion server = new SpoutVersion(); private SimpleItemManager itemManager = new SimpleItemManager(); private SimpleSkyManager skyManager = new SimpleSkyManager(); private ChatManager chatManager = new ChatManager(); private PacketManager packetManager = new PacketManager(); private EntityManager entityManager = new SimpleEntityManager(); private BiomeManager biomeManager = new SimpleBiomeManager(); private long tick = 0; private Thread clipboardThread = null; private ClientPlayer player = null; private boolean cheating = true; private static SpoutPacket reloadPacket = null; static { dataMiningThread.start(); Packet.addIdClassMapping(195, true, true, CustomPacket.class); } public static SpoutClient getInstance() { if (instance == null) { instance = new SpoutClient(); } return instance; } public static SpoutVersion getClientVersion() { return clientVersion; } public SpoutVersion getServerVersion() { return server; } public ItemManager getItemManager() { return itemManager; } public SkyManager getSkyManager() { return skyManager; } public ChatManager getChatManager() { return chatManager; } public PacketManager getPacketManager() { return packetManager; } public ActivePlayer getActivePlayer() { return player; } public EntityManager getEntityManager() { return entityManager; } public BiomeManager getBiomeManager() { return biomeManager; } public boolean isCheatMode() { return cheating || !getHandle().isMultiplayerWorld() || getHandle().theWorld == null; } public void setCheatMode(boolean cheat) { cheating = cheat; } public boolean isSpoutEnabled() { return server.getVersion() >= 100; } public void setSpoutVersion(SpoutVersion version) { server = version; } public void onTick() { tick++; FileDownloadThread.getInstance().onTick(); player.getMainScreen().onTick(); if (Minecraft.theMinecraft.theWorld != null) { Minecraft.theMinecraft.theWorld.doColorfulStuff(); } } public long getTick() { return tick; } public void onWorldExit() { FileUtil.deleteTempDirectory(); CustomTextureManager.resetTextures(); instance = null; if (clipboardThread != null) { clipboardThread.interrupt(); clipboardThread = null; } } public void onWorldEnter() { if (player == null) { player = new ClientPlayer(getHandle().thePlayer); } if (player.getHandle() instanceof EntityClientPlayerMP && isSpoutEnabled()) { clipboardThread = new ClipboardThread((EntityClientPlayerMP)player.getHandle()); clipboardThread.start(); } } public static Minecraft getHandle() { return Minecraft.theMinecraft; } @Override public EntityPlayer getPlayerFromId(int id) { if (getHandle().thePlayer.entityId == id) { return getHandle().thePlayer; } WorldClient world = (WorldClient)getHandle().theWorld; Entity e = world.func_709_b(id); if (e instanceof EntityPlayer) { return (EntityPlayer) e; } return null; } public static void setReloadPacket(SpoutPacket packet) { reloadPacket = packet; if (packet != null) { instance = null; //dump all saved data getInstance().player = new ClientPlayer(getHandle().thePlayer); } } public static SpoutPacket getReloadPacket() { return reloadPacket; } }