Implement map marking features

Teleport still exists on fish hook mark.
Added mapMark-related protos.
Map marking data is stored in players collection.
This commit is contained in:
Angda Song
2022-05-04 08:26:55 -07:00
committed by Melledy
Unverified
parent d52fa0a989
commit 6943360f4a
12 changed files with 348 additions and 27 deletions
@@ -0,0 +1,61 @@
package emu.grasscutter.game.managers.MapMarkManager;
import dev.morphia.annotations.Entity;
import emu.grasscutter.utils.Position;
import java.util.HashMap;
@Entity
public class MapMarksManager {
static final int mapMarkMaxCount = 150;
private HashMap<String, MapMark> mapMarks;
public MapMarksManager() {
mapMarks = new HashMap<String, MapMark>();
}
public MapMarksManager(HashMap<String, MapMark> mapMarks) {
this.mapMarks = mapMarks;
}
public HashMap<String, MapMark> getAllMapMarks() {
return mapMarks;
}
public MapMark getMapMark(Position position) {
String key = getMapMarkKey(position);
if (mapMarks.containsKey(key)) {
return mapMarks.get(key);
} else {
return null;
}
}
public String getMapMarkKey(Position position) {
return "x" + (int)position.getX()+ "z" + (int)position.getZ();
}
public boolean removeMapMark(Position position) {
String key = getMapMarkKey(position);
if (mapMarks.containsKey(key)) {
mapMarks.remove(key);
return true;
}
return false;
}
public boolean addMapMark(MapMark mapMark) {
if (mapMarks.size() < mapMarkMaxCount) {
if (!mapMarks.containsKey(mapMark.getPosition())) {
mapMarks.put(getMapMarkKey(mapMark.getPosition()), mapMark);
return true;
}
}
return false;
}
public void setMapMarks(HashMap<String, MapMark> mapMarks) {
this.mapMarks = mapMarks;
}
}