cancle sale
This commit is contained in:
@ -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<UUID, String> playerNames = new HashMap<>();
|
||||
private ScheduledExecutorService scheduler;
|
||||
private Gson gson;
|
||||
private final Map<UUID, Long> 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<UUID, Long> 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<Integer, ItemStack> leftItems = player.getInventory().addItem(item);
|
||||
|
||||
// Если предмет не поместился полностью, бросаем остаток на землю
|
||||
if (!leftItems.isEmpty()) {
|
||||
for (ItemStack leftItem : leftItems.values()) {
|
||||
player.getWorld().dropItem(player.getLocation(), leftItem);
|
||||
}
|
||||
}
|
||||
|
||||
// Отправляем сообщение игроку
|
||||
player.sendMessage("§aПредмет был снят с продажи и возвращен в инвентарь");
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает ItemStack из JSON данных
|
||||
*/
|
||||
|
@ -1,6 +0,0 @@
|
||||
# Настройки API
|
||||
api-url: "http://localhost:8000/api/events"
|
||||
commands-url: "http://localhost:8000/api/commands"
|
||||
|
||||
# IP сервера (оставьте пустым для автоматического определения)
|
||||
server-ip: ""
|
@ -1,4 +0,0 @@
|
||||
name: popa-plugin
|
||||
version: '1.0-SNAPSHOT'
|
||||
main: popa.popa
|
||||
api-version: '1.21'
|
Binary file not shown.
@ -1,3 +0,0 @@
|
||||
artifactId=popa
|
||||
groupId=popa-popa.ru
|
||||
version=1.0-SNAPSHOT
|
@ -1 +0,0 @@
|
||||
popa\popa.class
|
@ -1 +0,0 @@
|
||||
D:\Projects\Java\popa\src\main\java\popa\popa.java
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user