package com.someluigi.slperiph;
import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import com.someluigi.slperiph.ccportable.FileUtils;
import com.someluigi.slperiph.ccportable.shared.IPacketHandler;
import com.someluigi.slperiph.ccportable.shared.PayloadManager.Payload;
import com.someluigi.slperiph.ccportable.shared.WirelessNetwork;
import cpw.mods.fml.common.FMLCommonHandler;
public class CommonProxy {
public static final String TEX_ITEMS = "/hu/mentlerd/ccportable/pp_items.png";
public static final String TEX_BLOCKS = "/hu/mentlerd/ccportable/pp_blocks.png";
public WirelessNetwork network = new WirelessNetwork();
public static void protocolViolation( EntityPlayer player ){
System.err.println( player + " - Protocol violation" );
}
public static <T extends TileEntity> T getTileEntity( World world, int x, int y, int z, Class<T> clazz ){
if ( world.blockExists(x, y, z) ){
TileEntity tile = world.getBlockTileEntity(x, y, z);
if ( clazz.isAssignableFrom( tile.getClass() ) )
return clazz.cast( tile );
}
return null;
}
public static Payload newTileUpdate( TileEntity tile ){
Payload payload = new Payload( Payload.TILE_UPDATE );
payload.writeInt( tile.xCoord );
payload.writeShort( tile.yCoord );
payload.writeInt( tile.zCoord );
return payload;
}
public static Payload newContainerUpdate( Container container ){
Payload payload = new Payload( Payload.GUI_UPDATE );
payload.writeInt( container.windowId );
return payload;
}
public void init(){
}
/*
* Network
*/
public void handlePacket( int type, DataInputStream stream, EntityPlayer player ) throws IOException{
switch( type ){
//Tile entity updates
case Payload.TILE_UPDATE:
World world = getPlayerWorld(player);
int x = stream.readInt();
int y = stream.readShort();
int z = stream.readInt();
if ( world.blockExists(x, y, z) ){
TileEntity tile = world.getBlockTileEntity(x, y, z);
dispatchPacket(tile, stream, player);
}
break;
//Container updates
case Payload.GUI_UPDATE:
int windowID = stream.readInt();
Container window = player.openContainer;
if ( window != null && window.windowId == windowID )
dispatchPacket(window, stream, player);
break;
//Protocol violation
default:
protocolViolation(player);
break;
}
}
protected void dispatchPacket( Object obj, DataInputStream stream, EntityPlayer player ) throws IOException{
if ( obj != null && obj instanceof IPacketHandler )
((IPacketHandler) obj).handlePacket(stream, player);
}
public World getPlayerWorld( EntityPlayer player ){
return player.worldObj;
}
/*
* Filesystem
*/
public File getBaseFolder(){
return FMLCommonHandler.instance().getMinecraftServerInstance().getFile(".");
}
public File getModJar(){
return FMLCommonHandler.instance().findContainerFor( SLPMod.instance ).getSource();
}
public void unpackResourceFolder( String from, String into ){
File mod = getModJar();
File target = new File( getBaseFolder(), into );
try {
if ( mod.isDirectory() ){
mod = new File( mod, from );
FileUtils.copyFolder(mod, target, true);
} else {
FileUtils.unzip(mod, from, target);
}
} catch (IOException e) {
e.printStackTrace();
System.err.println( "Unable to extract resource folder: " + from );
}
}
}