package net.slimevoid.library.network.executor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.NetHandlerPlayServer;
import net.minecraft.world.World;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.slimevoid.library.network.PacketUpdate;
public abstract class PacketExecutor<REQ extends PacketUpdate, REPLY extends IMessage> implements IPacketExecutor, IMessageHandler<REQ, REPLY> {
@SuppressWarnings("unchecked")
@Override
public REPLY onMessage(REQ message, MessageContext ctx) {
EntityPlayer entityplayer = null;
World world = null;
switch (ctx.side) {
case CLIENT:
entityplayer = this.getClientPlayer();
world = this.getClientWorld();
break;
case SERVER:
entityplayer = ((NetHandlerPlayServer) ctx.netHandler).playerEntity;
world = entityplayer.worldObj;
break;
}
return (REPLY) this.execute(message, world, entityplayer);
}
@SideOnly(Side.CLIENT)
private EntityPlayer getClientPlayer() {
return FMLClientHandler.instance().getClientPlayerEntity();
}
@SideOnly(Side.CLIENT)
private World getClientWorld() {
return FMLClientHandler.instance().getWorldClient();
}
}