apm2/src/main/java/com/kaijin/AdvPowerMan/CommonProxy.java
2015-05-25 08:55:25 -04:00

149 lines
5.4 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;
}
}
}