net.bdew.neiaddons.ServerHandler.java Source code

Java tutorial

Introduction

Here is the source code for net.bdew.neiaddons.ServerHandler.java

Source

/**
 * Copyright (c) bdew, 2013
 * https://github.com/bdew/neiaddons
 *
 * This mod is distributed under the terms of the Minecraft Mod Public
 * License 1.0, or MMPL. Please check the contents of the license located in
 * https://raw.github.com/bdew/neiaddons/master/MMPL-1.0.txt
 */

package net.bdew.neiaddons;

import java.util.HashMap;
import java.util.Map;

import net.bdew.neiaddons.api.SubPacketHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet250CustomPayload;

import org.apache.commons.lang3.StringUtils;

import cpw.mods.fml.common.IPlayerTracker;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.Player;

public class ServerHandler implements IPacketHandler, IPlayerTracker {
    private static Map<String, SubPacketHandler> handlers = new HashMap<String, SubPacketHandler>();

    public static void registerHandler(String command, SubPacketHandler handler) {
        if (handlers.containsKey(command)) {
            throw new RuntimeException(
                    String.format("Tried to register handler for command %s that's already registered for %s",
                            command, handler.toString()));
        }
        handlers.put(command, handler);
    }

    @Override
    public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) {
        EntityPlayerMP p = (EntityPlayerMP) player;

        try {
            NBTTagCompound data = CompressedStreamTools.decompress(packet.data);
            String cmd = data.getString("cmd");

            if (handlers.containsKey(cmd)) {
                NEIAddons.logInfo("Handling %s from %s -> %s", cmd, p.username, handlers.get(cmd).toString());
                handlers.get(cmd).handle(data.getCompoundTag("data"), p);
            } else {
                NEIAddons.logWarning("Uknown packet from client '%s': %s", p.username, cmd);
            }
        } catch (Throwable e) {
            NEIAddons.logWarning("Error handling packet from client '%s'", p.username);
            e.printStackTrace();
        }
    }

    private void sendPlayerHello(EntityPlayer player) {
        NBTTagCompound nbt = new NBTTagCompound();
        nbt.setString("commands", StringUtils.join(handlers.keySet(), ';'));
        nbt.setInteger("version", NEIAddons.netVersion);
        PacketHelper.sendToClient("hello", nbt, (EntityPlayerMP) player);
    }

    @Override
    public void onPlayerLogin(EntityPlayer player) {
        sendPlayerHello(player);
    }

    @Override
    public void onPlayerLogout(EntityPlayer player) {
    }

    @Override
    public void onPlayerChangedDimension(EntityPlayer player) {
        sendPlayerHello(player);
    }

    @Override
    public void onPlayerRespawn(EntityPlayer player) {
    }
}