- Баллы
- 76
- Имя в Minecraft
- OJIEKCAHDP
Пишу свой скайварс, и встал вопрос как сделать клетки. Порылся в UltraSkyWars и понял, что там через WorldEdit, впрочем это наверное самый разумный вариант. Проблема в следующем: я храню все эдитсессии игроков, чтобы при нужде взять клетку игрока и удалить её, но иногда бывает такое, что клетка попросту не удаляется, особенно это актуально, когда игрок изначально заходит, я ставлю обычную клетку, после беру данные из бд и уже на место этой клетки ставлю его, но иногда его клетка удаляется, а так что была изначально, обычная, остаётся. Какие ваши идеи на счёт этого?
На всякий случай прикреплю код:
На всякий случай прикреплю код:
Код:
public static HashMap<Player, Cage> cageHashMap = new HashMap<>();
private final String cage;
private Player player;
private final List<EditSession> editSessions = new ArrayList<>();
public Cage(String cage) {
this.cage = cage;
}
public void create(Player player, Location location) {
this.player = player;
EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(location.getWorld()), -1);
File file = new File(Paths.get("/home/SkyWarsUlits/Cages").toUri().getPath(), this.cage);
try {
CuboidClipboard cc = CuboidClipboard.loadSchematic(file);
try {
cc.paste(editSession, new Vector().setX(location.getX()).setY(location.getY()).setZ(location.getZ()), true);
this.editSessions.add(editSession);
cageHashMap.put(player, this);
} catch (MaxChangedBlocksException e) {
e.printStackTrace();
}
} catch (DataException | IOException e) {
e.printStackTrace();
}
}
public void remove() {
this.editSessions.forEach(editSession -> {
editSession.undo(editSession);
});
cageHashMap.remove(player);
}