Java tutorial
/* * This file is part of Applied Energistics 2. * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. * * Applied Energistics 2 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Applied Energistics 2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>. */ package appeng.core.sync; import java.io.IOException; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.INetHandler; import net.minecraft.network.Packet; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; import appeng.core.AEConfig; import appeng.core.AELog; import appeng.core.features.AEFeature; import appeng.core.sync.network.INetworkInfo; import appeng.core.sync.network.NetworkHandler; public abstract class AppEngPacket implements Packet { private AppEngPacketHandlerBase.PacketTypes id; private PacketBuffer p; private PacketCallState caller; public void serverPacketData(final INetworkInfo manager, final AppEngPacket packet, final EntityPlayer player) { throw new UnsupportedOperationException( "This packet ( " + this.getPacketID() + " does not implement a server side handler."); } public final int getPacketID() { return AppEngPacketHandlerBase.PacketTypes.getID(this.getClass()).ordinal(); } public void clientPacketData(final INetworkInfo network, final AppEngPacket packet, final EntityPlayer player) { throw new UnsupportedOperationException( "This packet ( " + this.getPacketID() + " does not implement a client side handler."); } protected void configureWrite(final ByteBuf data) { data.capacity(data.readableBytes()); this.p = new PacketBuffer(data); } public FMLProxyPacket getProxy() { if (this.p.array().length > 2 * 1024 * 1024) // 2k walking room :) { throw new IllegalArgumentException( "Sorry AE2 made a " + this.p.array().length + " byte packet by accident!"); } final FMLProxyPacket pp = new FMLProxyPacket(this.p, NetworkHandler.instance().getChannel()); if (AEConfig.instance().isFeatureEnabled(AEFeature.PACKET_LOGGING)) { AELog.info(this.getClass().getName() + " : " + pp.payload().readableBytes()); } return pp; } @Override public void readPacketData(final PacketBuffer buf) throws IOException { throw new RuntimeException("Not Implemented"); } @Override public void writePacketData(final PacketBuffer buf) throws IOException { throw new RuntimeException("Not Implemented"); } public void setCallParam(final PacketCallState call) { this.caller = call; } @Override public void processPacket(final INetHandler handler) { this.caller.call(this); } }