package com.sk89q.forge;
import io.netty.buffer.ByteBufInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
/**
* An abstract implementation of {@link Behavior} that allows the registration
* of listeners and do-nothing implementations of all of {@link Behavior}'s
* methods.
*/
public abstract class AbstractBehavior implements Behavior {
private List<BehaviorListener> listeners = new ArrayList<BehaviorListener>();
@Override
public void writeSaveNBT(NBTTagCompound tag) {
}
@Override
public void readSaveNBT(NBTTagCompound tag) {
}
@Override
public void writeNetworkedNBT(NBTTagCompound tag) {
}
@Override
public void readNetworkedNBT(NBTTagCompound tag) {
}
@Override
public void readPayload(EntityPlayer player, BehaviorPayload payload, ByteBufInputStream in) throws IOException {
}
@Override
public void addBehaviorListener(BehaviorListener listener) {
listeners.add(listener);
}
@Override
public void removeBehaviorListener(BehaviorListener listener) {
listeners.remove(listener);
}
/**
* Fire a networked NBT event that is to be handled by listeners.
*
* @param tag
* the tag
*/
public void fireNetworkedNbt(NBTTagCompound tag) {
for (BehaviorListener listener : listeners) {
listener.networkedNbt(tag);
}
}
/**
* Fire a payload send event that is handled by listeners.
*
* @param payload
* the payload
* @param players
* the player(s)
* @see BehaviorListener#payloadSend(BehaviorPayload, List) for more
* information
*/
public void firePayloadSend(BehaviorPayload payload, List<EntityPlayer> players) {
for (BehaviorListener listener : listeners) {
listener.payloadSend(payload, players);
}
}
}