mirror of
https://github.com/Artillex-Studios/AxTrade.git
synced 2025-01-04 18:47:51 +01:00
1.12.0 part 2
This commit is contained in:
parent
be34f66a48
commit
a8f043aca8
@ -3,7 +3,6 @@ package com.artillexstudios.axtrade.currency;
|
||||
import com.artillexstudios.axtrade.hooks.currency.CurrencyHook;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
@ -38,8 +38,22 @@ public class Trade {
|
||||
player2.getTradeGui().update();
|
||||
}
|
||||
|
||||
public void end() {
|
||||
ended = true;
|
||||
Scheduler.get().run(scheduledTask -> Trades.removeTrade(this));
|
||||
player1.getPlayer().closeInventory();
|
||||
player1.getPlayer().updateInventory();
|
||||
player2.getPlayer().closeInventory();
|
||||
player2.getPlayer().updateInventory();
|
||||
}
|
||||
|
||||
public void abort() {
|
||||
if (ended) return;
|
||||
abort(false);
|
||||
}
|
||||
|
||||
public void abort(boolean force) {
|
||||
if (!force && ended) return;
|
||||
end();
|
||||
player1.getTradeGui().getItems().forEach(itemStack -> {
|
||||
if (itemStack == null) return;
|
||||
player1.getPlayer().getInventory().addItem(itemStack);
|
||||
@ -53,55 +67,39 @@ public class Trade {
|
||||
MESSAGEUTILS.sendLang(player2.getPlayer(), "trade.aborted", Map.of("%player%", player1.getPlayer().getName()));
|
||||
SoundUtils.playSound(player1.getPlayer(), "aborted");
|
||||
SoundUtils.playSound(player2.getPlayer(), "aborted");
|
||||
end();
|
||||
close();
|
||||
}
|
||||
|
||||
public void end() {
|
||||
ended = true;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
Scheduler.get().run(scheduledTask -> Trades.removeTrade(this));
|
||||
player1.getPlayer().closeInventory();
|
||||
player1.getPlayer().updateInventory();
|
||||
player2.getPlayer().closeInventory();
|
||||
player2.getPlayer().updateInventory();
|
||||
}
|
||||
|
||||
public void complete() {
|
||||
end();
|
||||
for (Map.Entry<CurrencyHook, Double> entry : player1.getCurrencies().entrySet()) {
|
||||
if (entry.getKey().getBalance(player1.getPlayer().getUniqueId()) < entry.getValue()) {
|
||||
abort();
|
||||
abort(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<CurrencyHook, Double> entry : player2.getCurrencies().entrySet()) {
|
||||
if (entry.getKey().getBalance(player2.getPlayer().getUniqueId()) < entry.getValue()) {
|
||||
abort();
|
||||
abort(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
close();
|
||||
CurrencyProcessor currencyProcessor1 = new CurrencyProcessor(player1.getPlayer(), player1.getCurrencies().entrySet());
|
||||
currencyProcessor1.run().thenAccept(success1 -> {
|
||||
if (!success1) {
|
||||
abort();
|
||||
abort(true);
|
||||
return;
|
||||
}
|
||||
|
||||
CurrencyProcessor currencyProcessor2 = new CurrencyProcessor(player2.getPlayer(), player2.getCurrencies().entrySet());
|
||||
currencyProcessor2.run().thenAccept(success2 -> {
|
||||
if (!success2) {
|
||||
abort();
|
||||
abort(true);
|
||||
currencyProcessor1.reverse();
|
||||
return;
|
||||
}
|
||||
|
||||
end();
|
||||
|
||||
MESSAGEUTILS.sendLang(player1.getPlayer(), "trade.completed", Map.of("%player%", player2.getPlayer().getName()));
|
||||
MESSAGEUTILS.sendLang(player2.getPlayer(), "trade.completed", Map.of("%player%", player1.getPlayer().getName()));
|
||||
SoundUtils.playSound(player1.getPlayer(), "completed");
|
||||
|
@ -6,8 +6,8 @@ import com.artillexstudios.axtrade.utils.NumberUtils;
|
||||
import com.artillexstudios.axtrade.utils.SoundUtils;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static com.artillexstudios.axtrade.AxTrade.CONFIG;
|
||||
|
||||
@ -16,7 +16,7 @@ public class TradePlayer {
|
||||
private TradePlayer otherPlayer;
|
||||
private TradeGui tradeGui;
|
||||
private final Trade trade;
|
||||
private final HashMap<CurrencyHook, Double> currencies = new HashMap<>();
|
||||
private final ConcurrentHashMap<CurrencyHook, Double> currencies = new ConcurrentHashMap<>();
|
||||
|
||||
// confirmed
|
||||
// null > not confirmed
|
||||
@ -90,7 +90,7 @@ public class TradePlayer {
|
||||
SoundUtils.playSound(player, "countdown");
|
||||
}
|
||||
|
||||
public HashMap<CurrencyHook, Double> getCurrencies() {
|
||||
public ConcurrentHashMap<CurrencyHook, Double> getCurrencies() {
|
||||
return currencies;
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@ public class TradeTicker {
|
||||
public static void start() {
|
||||
Scheduler.get().runTimer(scheduledTask -> {
|
||||
for (Trade trade : Trades.getTrades()) {
|
||||
if (trade.isEnded()) continue;
|
||||
if (!(trade.player1.hasConfirmed() && trade.player2.hasConfirmed())) continue;
|
||||
|
||||
if (trade.player1.getConfirmed() == 1) {
|
||||
|
Loading…
Reference in New Issue
Block a user