package hunternif.mc.atlas.network.server;
import hunternif.mc.atlas.AntiqueAtlasMod;
import hunternif.mc.atlas.network.AbstractMessage.AbstractServerMessage;
import hunternif.mc.atlas.util.Log;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.relauncher.Side;
import java.io.IOException;
/**
* Packet used to save the last browsing position for a dimension in an atlas.
* @author Hunternif
*/
public class BrowsingPositionPacket extends AbstractServerMessage<BrowsingPositionPacket> {
public static final double ZOOM_SCALE_FACTOR = 1024;
private int atlasID;
private int dimension;
private int x, y;
private double zoom;
public BrowsingPositionPacket() {}
public BrowsingPositionPacket(int atlasID, int dimension, int x, int y, double zoom) {
this.atlasID = atlasID;
this.dimension = dimension;
this.x = x;
this.y = y;
this.zoom = zoom;
}
@Override
protected void read(PacketBuffer buffer) throws IOException {
atlasID = buffer.readVarInt();
dimension = buffer.readVarInt();
x = buffer.readVarInt();
y = buffer.readVarInt();
zoom = (double)buffer.readVarInt() / ZOOM_SCALE_FACTOR;
}
@Override
protected void write(PacketBuffer buffer) throws IOException {
buffer.writeVarInt(atlasID);
buffer.writeVarInt(dimension);
buffer.writeVarInt(x);
buffer.writeVarInt(y);
buffer.writeVarInt((int)Math.round(zoom * ZOOM_SCALE_FACTOR));
}
@Override
protected void process(EntityPlayer player, Side side) {
// Make sure it's this player's atlas :^)
if (AntiqueAtlasMod.settings.itemNeeded &&
!player.inventory.hasItemStack(new ItemStack(AntiqueAtlasMod.itemAtlas, 1, atlasID))) {
Log.warn("Player %s attempted to put position marker into someone else's Atlas #%d",
player.getGameProfile().getName(), atlasID);
return;
}
AntiqueAtlasMod.atlasData.getAtlasData(atlasID, player.getEntityWorld())
.getDimensionData(dimension).setBrowsingPosition(x, y, zoom);
}
}