package hunternif.mc.atlas.api.impl;
import net.minecraft.world.World;
import hunternif.mc.atlas.AntiqueAtlasMod;
import hunternif.mc.atlas.api.MarkerAPI;
import hunternif.mc.atlas.marker.Marker;
import hunternif.mc.atlas.marker.MarkersData;
import hunternif.mc.atlas.network.PacketDispatcher;
import hunternif.mc.atlas.network.bidirectional.DeleteMarkerPacket;
import hunternif.mc.atlas.network.client.MarkersPacket;
import hunternif.mc.atlas.network.server.AddMarkerPacket;
import hunternif.mc.atlas.registry.MarkerRegistry;
import hunternif.mc.atlas.registry.MarkerType;
import hunternif.mc.atlas.util.Log;
public class MarkerApiImpl implements MarkerAPI {
/** Used in place of atlasID to signify that the marker is global. */
private static final int GLOBAL = -1;
@Override
public void putMarker(World world, boolean visibleAhead, int atlasID, MarkerType markerType, String label, int x, int z) {
doPutMarker(world, visibleAhead, atlasID, markerType, label, x, z);
}
@Override
public void putGlobalMarker(World world, boolean visibleAhead, MarkerType markerType, String label, int x, int z) {
doPutMarker(world, visibleAhead, GLOBAL, markerType, label, x, z);
}
private void doPutMarker(World world, boolean visibleAhead, int atlasID, MarkerType markerType, String label, int x, int z) {
if (world.isRemote) {
if (atlasID == GLOBAL) {
Log.warn("Client tried to add a global marker!");
} else {
PacketDispatcher.sendToServer(new AddMarkerPacket(atlasID,
world.provider.getDimension(), markerType, label, x, z, visibleAhead));
}
} else {
if (atlasID == GLOBAL) {
MarkersData data = AntiqueAtlasMod.globalMarkersData.getData();
Marker marker = data.createAndSaveMarker(markerType, label, world.provider.getDimension(), x, z, visibleAhead);
PacketDispatcher.sendToAll(new MarkersPacket(world.provider.getDimension(), marker));
} else {
MarkersData data = AntiqueAtlasMod.markersData.getMarkersData(atlasID, world);
Marker marker = data.createAndSaveMarker(markerType, label, world.provider.getDimension(), x, z, visibleAhead);
PacketDispatcher.sendToAll(new MarkersPacket(atlasID, world.provider.getDimension(), marker));
}
}
}
@Override
public void deleteMarker(World world, int atlasID, int markerID) {
doDeleteMarker(world, atlasID, markerID);
}
@Override
public void deleteGlobalMarker(World world, int markerID) {
doDeleteMarker(world, GLOBAL, markerID);
}
private void doDeleteMarker(World world, int atlasID, int markerID) {
DeleteMarkerPacket packet = atlasID == GLOBAL ?
new DeleteMarkerPacket(markerID) :
new DeleteMarkerPacket(atlasID, markerID);
if (world.isRemote) {
if (atlasID == GLOBAL) {
Log.warn("Client tried to delete a global marker!");
} else {
PacketDispatcher.sendToServer(packet);
}
} else {
MarkersData data = atlasID == GLOBAL ?
AntiqueAtlasMod.globalMarkersData.getData() :
AntiqueAtlasMod.markersData.getMarkersData(atlasID, world);
data.removeMarker(markerID);
PacketDispatcher.sendToAll(packet);
}
}
@Override
public void registerMarker(MarkerType markerType) {
MarkerRegistry.register(markerType);
}
}