apm2/src/main/java/com/kaijin/AdvPowerMan/CommonProxy.java
2015-02-11 16:42:18 -05:00

177 lines
5.5 KiB
Java
Executable file

/*******************************************************************************
* Copyright (c) 2012-2013 Yancarlo Ramsey and CJ Bowman
* Licensed as open source with restrictions. Please see attached LICENSE.txt.
******************************************************************************/
package com.kaijin.AdvPowerMan;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Arrays;
import com.kaijin.AdvPowerMan.containers.ContainerAdjustableTransformer;
import com.kaijin.AdvPowerMan.containers.ContainerAdvEmitter;
import com.kaijin.AdvPowerMan.containers.ContainerBatteryStation;
import com.kaijin.AdvPowerMan.containers.ContainerChargingBench;
import com.kaijin.AdvPowerMan.containers.ContainerStorageMonitor;
import com.kaijin.AdvPowerMan.gui.GuiAdjustableTransformer;
import com.kaijin.AdvPowerMan.gui.GuiAdvEmitter;
import com.kaijin.AdvPowerMan.gui.GuiBatteryStation;
import com.kaijin.AdvPowerMan.gui.GuiChargingBench;
import com.kaijin.AdvPowerMan.gui.GuiStorageMonitor;
import com.kaijin.AdvPowerMan.tileentities.TEAdjustableTransformer;
import com.kaijin.AdvPowerMan.tileentities.TEAdvEmitter;
import com.kaijin.AdvPowerMan.tileentities.TEBatteryStation;
import com.kaijin.AdvPowerMan.tileentities.TEChargingBench;
import com.kaijin.AdvPowerMan.tileentities.TECommon;
import com.kaijin.AdvPowerMan.tileentities.TEStorageMonitor;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
//import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.network.IGuiHandler;
//import cpw.mods.fml.common.network.PacketDispatcher;
//import cpw.mods.fml.common.network.Player;
import cpw.mods.fml.relauncher.Side;
public class CommonProxy implements IGuiHandler
{
public void load() {}
public boolean isClient()
{
return FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT;
}
public boolean isServer()
{
return FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER;
}
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if (!world.blockExists(x, y, z)) return null;
TileEntity tile = world.getTileEntity(x, y, z);
if (ID == 1 && tile instanceof TEChargingBench)
{
return new ContainerChargingBench(player.inventory, (TEChargingBench)tile);
}
else if (ID == 2 && tile instanceof TEBatteryStation)
{
return new ContainerBatteryStation(player.inventory, (TEBatteryStation)tile);
}
else if (ID == 3 && tile instanceof TEStorageMonitor)
{
return new ContainerStorageMonitor(player.inventory, (TEStorageMonitor)tile);
}
else if (ID == 4 && tile instanceof TEAdvEmitter)
{
return new ContainerAdvEmitter((TEAdvEmitter)tile);
}
else if (ID == 5 && tile instanceof TEAdjustableTransformer)
{
return new ContainerAdjustableTransformer((TEAdjustableTransformer)tile);
}
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if (!world.blockExists(x, y, z)) return null;
TileEntity tile = world.getTileEntity(x, y, z);
if (ID == 1 && tile instanceof TEChargingBench)
{
return new GuiChargingBench(player.inventory, (TEChargingBench)tile);
}
else if (ID == 2 && tile instanceof TEBatteryStation)
{
return new GuiBatteryStation(player.inventory, (TEBatteryStation)tile);
}
else if (ID == 3 && tile instanceof TEStorageMonitor)
{
return new GuiStorageMonitor(player.inventory, (TEStorageMonitor)tile);
}
else if (ID == 4 && tile instanceof TEAdvEmitter)
{
return new GuiAdvEmitter((TEAdvEmitter)tile);
}
else if (ID == 5 && tile instanceof TEAdjustableTransformer)
{
return new GuiAdjustableTransformer((TEAdjustableTransformer)tile);
}
return null;
}
/*
* Packet format:
* 0: byte Packet Type
* 1: int x location of TileEntity
* 2: int y location of TileEntity
* 3: int z location of TileEntity
*
* Currently used packet types
*
* Client-to-Server:
* 0 = GUI button command
* 4: int Button ID clicked
*/
public void onPacketDataClient(ByteBuf source, EntityPlayer entityPlayer)
{
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(Arrays.copyOfRange(source.array(), 1, source.array().length)));
// Determine packet type and coordinates of affected tile entity
int packetType = -1;
int x;
int y;
int z;
try
{
packetType = stream.readInt();
x = stream.readInt();
y = stream.readInt();
z = stream.readInt();
}
catch (IOException e)
{
FMLLog.getLogger().info("[AdvancedPowerManagement] " + "Failed to read packet from client. (Details: " + e.toString() + ")");
return;
}
if (packetType == 0)
{
Exception e;
try
{
World world = entityPlayer.worldObj;
TileEntity tile = world.getTileEntity(x, y, z);
int buttonID = stream.readInt();
((TECommon)tile).receiveGuiButton(buttonID);
return;
}
catch (ClassCastException ex) { e = ex; }
catch (NullPointerException ex) { e = ex; }
catch (IOException ex) { e = ex; }
FMLLog.getLogger().info("[AdvancedPowerManagement] " + "Server received GUI button packet for " + x + ", " + y + ", " + z +
" but couldn't deliver to tile entity. (Details: " + e.toString() + ")");
return;
}
}
}