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.parts; import java.io.IOException; import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; import appeng.api.implementations.IPowerChannelState; import appeng.api.networking.GridFlags; import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPowerStatusChange; import appeng.me.GridAccessException; public abstract class PartBasicState extends AEBasePart implements IPowerChannelState { protected static final int POWERED_FLAG = 1; protected static final int CHANNEL_FLAG = 2; private int clientFlags = 0; // sent as byte. public PartBasicState(final ItemStack is) { super(is); this.getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); } @MENetworkEventSubscribe public void chanRender(final MENetworkChannelsChanged c) { this.getHost().markForUpdate(); } @MENetworkEventSubscribe public void powerRender(final MENetworkPowerStatusChange c) { this.getHost().markForUpdate(); } @Override public void writeToStream(final ByteBuf data) throws IOException { super.writeToStream(data); this.setClientFlags(0); try { if (this.getProxy().getEnergy().isNetworkPowered()) { this.setClientFlags(this.getClientFlags() | POWERED_FLAG); } if (this.getProxy().getNode().meetsChannelRequirements()) { this.setClientFlags(this.getClientFlags() | CHANNEL_FLAG); } this.setClientFlags(this.populateFlags(this.getClientFlags())); } catch (final GridAccessException e) { // meh } data.writeByte((byte) this.getClientFlags()); } protected int populateFlags(final int cf) { return cf; } @Override public boolean readFromStream(final ByteBuf data) throws IOException { final boolean eh = super.readFromStream(data); final int old = this.getClientFlags(); this.setClientFlags(data.readByte()); return eh || old != this.getClientFlags(); } @Override public boolean isPowered() { return (this.getClientFlags() & POWERED_FLAG) == POWERED_FLAG; } @Override public boolean isActive() { return (this.getClientFlags() & CHANNEL_FLAG) == CHANNEL_FLAG; } public int getClientFlags() { return this.clientFlags; } private void setClientFlags(final int clientFlags) { this.clientFlags = clientFlags; } }