package de.take_weiland.mods.commons.internal.sync;
import de.take_weiland.mods.commons.internal.SevenCommons;
import de.take_weiland.mods.commons.net.MCDataOutput;
import net.minecraft.entity.Entity;
import net.minecraft.inventory.Container;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.IExtendedEntityProperties;
/**
* @author diesieben07
*/
public final class SyncHelpers {
public static MCDataOutput newOutStream(TileEntity te) {
MCDataOutput out = newStream(SyncType.TILE_ENTITY);
out.writeInt(te.xCoord);
out.writeByte(te.yCoord);
out.writeInt(te.zCoord);
return out;
}
public static MCDataOutput newOutStream(Entity entity) {
MCDataOutput out = newStream(SyncType.ENTITY);
out.writeInt(entity.entityId);
return out;
}
public static MCDataOutput newOutStream(Container container) {
MCDataOutput out = newStream(SyncType.CONTAINER);
out.writeByte(container.windowId);
return out;
}
public static MCDataOutput newOutStream(IEEPSyncCompanion companion) {
MCDataOutput out = newStream(SyncType.ENTITY_PROPS);
out.writeInt(companion._sc$entity.entityId);
out.writeVarInt(companion._sc$id);
return out;
}
private static MCDataOutput newStream(SyncType syncType) {
MCDataOutput out = SevenCommons.packets.createStream(SevenCommons.SYNC_PACKET_ID);
out.writeEnum(syncType);
return out;
}
public static void sendStream(TileEntity te, MCDataOutput out) {
SevenCommons.packets.makePacket(out).sendToAllTracking(te);
}
public static void sendStream(Entity entity, MCDataOutput out) {
SevenCommons.packets.makePacket(out).sendToAllAssociated(entity);
}
public static void sendStream(Container container, MCDataOutput out) {
SevenCommons.packets.makePacket(out).sendToViewing(container);
}
static SyncType getSyncType(Class<?> clazz) {
if (TileEntity.class.isAssignableFrom(clazz)) {
return SyncType.TILE_ENTITY;
} else if (Entity.class.isAssignableFrom(clazz)) {
return SyncType.ENTITY;
} else if (Container.class.isAssignableFrom(clazz)) {
return SyncType.CONTAINER;
} else if (IExtendedEntityProperties.class.isAssignableFrom(clazz)) {
return SyncType.ENTITY_PROPS;
} else {
throw new IllegalArgumentException("@Sync in invalid class " + clazz);
}
}
}