diff --git a/src/main/java/popa/popa.java b/src/main/java/popa/popa.java index f5f2473..1e96113 100644 --- a/src/main/java/popa/popa.java +++ b/src/main/java/popa/popa.java @@ -5,6 +5,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import java.io.IOException; @@ -43,6 +44,7 @@ public final class popa extends JavaPlugin implements Listener { private final Map playerNames = new HashMap<>(); private ScheduledExecutorService scheduler; private Gson gson; + private final Map lastActivityTimes = new HashMap<>(); @Override public void onEnable() { @@ -116,11 +118,22 @@ public final class popa extends JavaPlugin implements Listener { } } + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + // Игнорируем микродвижения (изменение направления взгляда) + if (event.getFrom().getX() != event.getTo().getX() || + event.getFrom().getY() != event.getTo().getY() || + event.getFrom().getZ() != event.getTo().getZ()) { + lastActivityTimes.put(event.getPlayer().getUniqueId(), System.currentTimeMillis()); + } + } + @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); UUID playerId = player.getUniqueId(); String playerName = player.getName(); + lastActivityTimes.put(playerId, System.currentTimeMillis()); playerLoginTimes.put(playerId, System.currentTimeMillis()); playerNames.put(playerId, playerName); @@ -162,11 +175,27 @@ public final class popa extends JavaPlugin implements Listener { private void sendOnlinePlayersUpdate() { StringBuilder playersJson = new StringBuilder("["); boolean first = true; + long currentTime = System.currentTimeMillis(); for (Map.Entry entry : playerLoginTimes.entrySet()) { UUID playerId = entry.getKey(); String playerName = playerNames.get(playerId); - long onlineTime = (System.currentTimeMillis() - entry.getValue()) / 1000; + Long lastActivity = lastActivityTimes.get(playerId); + + // Если время последней активности не записано, пропускаем игрока + if (lastActivity == null) { + continue; + } + + // Вычисляем, сколько секунд игрок неактивен + long inactiveSeconds = (currentTime - lastActivity) / 1000; + + // Если игрок неактивен больше минуты (60 секунд), пропускаем его + if (inactiveSeconds > 60) { + continue; + } + + long onlineTime = (currentTime - entry.getValue()) / 1000; if (!first) playersJson.append(","); first = false; @@ -501,6 +530,8 @@ public final class popa extends JavaPlugin implements Listener { handleSellOperation(operation); } else if ("buy".equals(type)) { handleBuyOperation(operation); + } else if ("cancel_sale".equals(type)) { + handleCancelSaleOperation(operation); } // Подтверждаем выполнение операции @@ -611,6 +642,40 @@ public final class popa extends JavaPlugin implements Listener { player.sendMessage("§aВы купили предмет за " + price + " монет"); } + /** + * Обрабатывает операцию отмены продажи предмета + */ + private void handleCancelSaleOperation(JsonObject operation) { + String playerName = operation.get("player_name").getAsString(); + JsonObject itemData = operation.getAsJsonObject("item_data"); + + Player player = Bukkit.getPlayer(playerName); + if (player == null || !player.isOnline()) { + sendOperationError(operation.get("id").getAsString(), "Игрок не в сети"); + return; + } + + // Создаем предмет из данных + ItemStack item = jsonToItemStack(itemData); + if (item == null) { + sendOperationError(operation.get("id").getAsString(), "Не удалось создать предмет"); + return; + } + + // Добавляем предмет в инвентарь + HashMap leftItems = player.getInventory().addItem(item); + + // Если предмет не поместился полностью, бросаем остаток на землю + if (!leftItems.isEmpty()) { + for (ItemStack leftItem : leftItems.values()) { + player.getWorld().dropItem(player.getLocation(), leftItem); + } + } + + // Отправляем сообщение игроку + player.sendMessage("§aПредмет был снят с продажи и возвращен в инвентарь"); + } + /** * Создает ItemStack из JSON данных */ diff --git a/target/classes/config.yml b/target/classes/config.yml deleted file mode 100644 index 4f74b03..0000000 --- a/target/classes/config.yml +++ /dev/null @@ -1,6 +0,0 @@ -# Настройки API -api-url: "http://localhost:8000/api/events" -commands-url: "http://localhost:8000/api/commands" - -# IP сервера (оставьте пустым для автоматического определения) -server-ip: "" \ No newline at end of file diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml deleted file mode 100644 index 0113497..0000000 --- a/target/classes/plugin.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: popa-plugin -version: '1.0-SNAPSHOT' -main: popa.popa -api-version: '1.21' diff --git a/target/classes/popa/popa.class b/target/classes/popa/popa.class deleted file mode 100644 index 3bfeeb8..0000000 Binary files a/target/classes/popa/popa.class and /dev/null differ diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties deleted file mode 100644 index a538ca2..0000000 --- a/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -artifactId=popa -groupId=popa-popa.ru -version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index 983ccb5..0000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1 +0,0 @@ -popa\popa.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 6be8b46..0000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1 +0,0 @@ -D:\Projects\Java\popa\src\main\java\popa\popa.java diff --git a/target/original-popa-1.0-SNAPSHOT.jar b/target/original-popa-1.0-SNAPSHOT.jar deleted file mode 100644 index e7c8da9..0000000 Binary files a/target/original-popa-1.0-SNAPSHOT.jar and /dev/null differ diff --git a/target/popa-1.0-SNAPSHOT.jar b/target/popa-1.0-SNAPSHOT.jar deleted file mode 100644 index 40e6e46..0000000 Binary files a/target/popa-1.0-SNAPSHOT.jar and /dev/null differ