Initial commit of SurvivalPlus plugin
This commit is contained in:
106
src/main/java/de/viper/survivalplus/trade/TradeManager.java
Normal file
106
src/main/java/de/viper/survivalplus/trade/TradeManager.java
Normal file
@@ -0,0 +1,106 @@
|
||||
package de.viper.survivalplus.trade;
|
||||
|
||||
import de.viper.survivalplus.SurvivalPlus;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class TradeManager {
|
||||
|
||||
private final SurvivalPlus plugin;
|
||||
private final Map<UUID, TradeSession> activeTrades = new HashMap<>();
|
||||
private final Map<UUID, UUID> pendingRequests = new HashMap<>();
|
||||
|
||||
public TradeManager(SurvivalPlus plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void requestTrade(Player sender, Player target) {
|
||||
if (sender == null || target == null) return;
|
||||
if (isTrading(sender) || isTrading(target)) {
|
||||
sender.sendMessage(plugin.getLangConfig().getString("trade.already-trading", "§cEiner von euch ist bereits im Handel."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (sender.getUniqueId().equals(target.getUniqueId())) {
|
||||
sender.sendMessage(plugin.getLangConfig().getString("trade.with-yourself-not-allowed", "§cHandel mit dir selbst ist nicht erlaubt!"));
|
||||
return;
|
||||
}
|
||||
|
||||
pendingRequests.put(target.getUniqueId(), sender.getUniqueId());
|
||||
|
||||
String requestText = plugin.getLangConfig().getString("trade.request-text", "%player% möchte mit dir handeln. Klicke hier, um anzunehmen!")
|
||||
.replace("%player%", sender.getName());
|
||||
|
||||
try {
|
||||
net.md_5.bungee.api.chat.TextComponent message = new net.md_5.bungee.api.chat.TextComponent(requestText);
|
||||
message.setColor(net.md_5.bungee.api.ChatColor.GREEN);
|
||||
message.setClickEvent(new net.md_5.bungee.api.chat.ClickEvent(net.md_5.bungee.api.chat.ClickEvent.Action.RUN_COMMAND, "/tradeaccept " + sender.getName()));
|
||||
target.spigot().sendMessage(message);
|
||||
} catch (Throwable ex) {
|
||||
target.sendMessage(requestText + " (/tradeaccept " + sender.getName() + ")");
|
||||
}
|
||||
|
||||
sender.sendMessage(plugin.getLangConfig().getString("trade.request-sent", "§aHandelsanfrage an %player% gesendet.").replace("%player%", target.getName()));
|
||||
}
|
||||
|
||||
public void acceptTrade(Player target, String requesterName) {
|
||||
if (target == null || requesterName == null) return;
|
||||
|
||||
UUID pendingSenderUUID = pendingRequests.get(target.getUniqueId());
|
||||
if (pendingSenderUUID == null) {
|
||||
target.sendMessage(plugin.getLangConfig().getString("trade.no-pending-request", "§cKeine Handelsanfrage gefunden."));
|
||||
return;
|
||||
}
|
||||
|
||||
Player sender = Bukkit.getPlayer(pendingSenderUUID);
|
||||
if (sender == null || !sender.isOnline()) {
|
||||
target.sendMessage(plugin.getLangConfig().getString("trade.player-not-online", "§cDieser Spieler ist nicht online!"));
|
||||
pendingRequests.remove(target.getUniqueId());
|
||||
return;
|
||||
}
|
||||
|
||||
pendingRequests.remove(target.getUniqueId());
|
||||
startTrade(sender, target);
|
||||
}
|
||||
|
||||
public void startTrade(Player sender, Player receiver) {
|
||||
if (isTrading(sender) || isTrading(receiver)) {
|
||||
sender.sendMessage(plugin.getLangConfig().getString("trade.already-trading", "§cEiner von euch ist bereits im Handel."));
|
||||
return;
|
||||
}
|
||||
|
||||
TradeSession session = new TradeSession(plugin, sender, receiver);
|
||||
Bukkit.getPluginManager().registerEvents(session, plugin);
|
||||
|
||||
activeTrades.put(sender.getUniqueId(), session);
|
||||
activeTrades.put(receiver.getUniqueId(), session);
|
||||
|
||||
session.openInventories();
|
||||
|
||||
sender.sendMessage(plugin.getLangConfig().getString("trade.started-sender", "§aTrade gestartet mit %player%").replace("%player%", receiver.getName()));
|
||||
receiver.sendMessage(plugin.getLangConfig().getString("trade.started-receiver", "§a%player% hat dich zu einem Trade eingeladen.").replace("%player%", sender.getName()));
|
||||
}
|
||||
|
||||
public void endTrade(TradeSession session) {
|
||||
if (session == null) return;
|
||||
Player s = session.getSender();
|
||||
Player r = session.getReceiver();
|
||||
if (s != null) activeTrades.remove(s.getUniqueId());
|
||||
if (r != null) activeTrades.remove(r.getUniqueId());
|
||||
session.endSession();
|
||||
}
|
||||
|
||||
public TradeSession getTrade(Player player) {
|
||||
if (player == null) return null;
|
||||
return activeTrades.get(player.getUniqueId());
|
||||
}
|
||||
|
||||
public boolean isTrading(Player player) {
|
||||
if (player == null) return false;
|
||||
return activeTrades.containsKey(player.getUniqueId());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user