Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.garsooon</groupId>
<artifactId>arenafighter</artifactId>
<version>1.0.9</version>
<version>1.1.0</version>

<packaging>jar</packaging>

Expand Down
86 changes: 82 additions & 4 deletions src/main/java/org/garsooon/arenafighter/Arena/ArenaFighter.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.LinkedHashMap;

import static org.bukkit.Bukkit.getLogger;

Expand All @@ -36,8 +38,16 @@ public class ArenaFighter extends JavaPlugin {
@SuppressWarnings("FieldMayBeFinal")
private Set<String> blockedCommands = new HashSet<>();

private boolean arenaEnabled = true;
private Map<String, Object> configData;

@Override
public void onEnable() {
// Create default config if missing
createDefaultConfig();

loadArenaEnabledFlag();

// Initialize ArenaManager
this.arenaManager = new ArenaManager(this);

Expand All @@ -60,7 +70,7 @@ public void onEnable() {

// Register commands
getCommand("fight").setExecutor(fightCommand);
getCommand("arena").setExecutor(new ArenaCommand(arenaManager));
getCommand("arena").setExecutor(new ArenaCommand(arenaManager, this));
getCommand("spectate").setExecutor(new SpectateCommand(fightManager));
getCommand("bet").setExecutor(new SpectateBetCommand(fightManager));
this.getCommand("fightabout").setExecutor(new FightAboutCommand(this));
Expand All @@ -72,9 +82,6 @@ public void onEnable() {
pm.registerEvents(new PlayerDropListener(fightManager), this);
pm.registerEvents(new PlayerCommandListener(this, fightManager), this);

// Create default config if missing
createDefaultConfig();

// Load blocked commands list
loadBlockedCommands();

Expand Down Expand Up @@ -105,6 +112,73 @@ public Set<String> getBlockedCommands() {
return blockedCommands;
}

public boolean isArenaEnabled() {
return arenaEnabled;
}

public void setArenaEnabled(boolean enabled) {
this.arenaEnabled = enabled;
if (configData == null) configData = new LinkedHashMap<>();
Map<String, Object> arenaSection;
if (configData.containsKey("arena") && configData.get("arena") instanceof Map) {
arenaSection = (Map<String, Object>) configData.get("arena");
} else {
arenaSection = new LinkedHashMap<>();
configData.put("arena", arenaSection);
}
arenaSection.put("enabled", enabled);
saveConfigFile();
}

private void loadArenaEnabledFlag() {
File configFile = new File(getDataFolder(), "config.yml");
Yaml yaml = new Yaml();
configData = null;

try (InputStream input = new FileInputStream(configFile)) {
configData = (Map<String, Object>) yaml.load(input);
} catch (Exception e) {
configData = new LinkedHashMap<>();
}

if (configData == null) configData = new LinkedHashMap<>();

boolean needSave = false;

Map<String, Object> arenaSection;
if (configData.containsKey("arena") && configData.get("arena") instanceof Map) {
arenaSection = (Map<String, Object>) configData.get("arena");
} else {
arenaSection = new LinkedHashMap<>();
configData.put("arena", arenaSection);
needSave = true;
}

if (!arenaSection.containsKey("enabled")) {
arenaSection.put("enabled", true);
this.arenaEnabled = true;
needSave = true;
} else {
Object value = arenaSection.get("enabled");
this.arenaEnabled = (value instanceof Boolean) ? (Boolean) value : Boolean.parseBoolean(String.valueOf(value));
}

if (needSave) saveConfigFile();
}

//I should pr a config api that isnt for poseidons own config xd
private void saveConfigFile() {
File configFile = new File(getDataFolder(), "config.yml");
org.yaml.snakeyaml.DumperOptions options = new org.yaml.snakeyaml.DumperOptions();
options.setDefaultFlowStyle(org.yaml.snakeyaml.DumperOptions.FlowStyle.BLOCK);
Yaml yaml = new Yaml(options);
try (FileWriter writer = new FileWriter(configFile)) {
yaml.dump(configData, writer);
} catch (Exception e) {
getLogger().warning("Failed to save config.yml: " + e.getMessage());
}
}

private void createDefaultConfig() {
if (!getDataFolder().exists()) {
getDataFolder().mkdirs();
Expand All @@ -121,6 +195,10 @@ private void createDefaultConfig() {
writer.write("# To configure your arenas, run /arena create <arena_name>\n");
writer.write("# then you can modify it in arenas.properties in this folder\n");
writer.write("\n");
writer.write("# Arena system enabled/disabled\n");
writer.write("arena:\n");
writer.write(" enabled: true\n");
writer.write("\n");
writer.write("punishment:\n");
writer.write(" duration-minute: 5\n");
writer.write("\n");
Expand Down
40 changes: 38 additions & 2 deletions src/main/java/org/garsooon/arenafighter/Commands/ArenaCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,23 @@
import org.bukkit.entity.Player;
import org.garsooon.arenafighter.Arena.Arena;
import org.garsooon.arenafighter.Arena.ArenaManager;
import org.garsooon.arenafighter.Arena.ArenaFighter;

import java.util.List;

@SuppressWarnings("SameReturnValue")
public class ArenaCommand implements CommandExecutor {

private final ArenaManager arenaManager;
private final ArenaFighter plugin;

public ArenaCommand(ArenaManager arenaManager) {
public ArenaCommand(ArenaManager arenaManager, ArenaFighter plugin) {
this.arenaManager = arenaManager;
this.plugin = plugin;
}

public ArenaCommand(ArenaManager arenaManager) {
this(arenaManager, null);
}

@SuppressWarnings("DuplicateBranchesInSwitch")
Expand All @@ -36,6 +43,10 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
}

switch (args[0].toLowerCase()) {
case "enable":
return handleEnable(player);
case "disable":
return handleDisable(player);
case "create":
return handleCreate(player, args);
case "remove":
Expand All @@ -55,6 +66,30 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
}
}

private boolean handleEnable(Player player) {
if (!player.hasPermission("arenafighter.admin")) {
player.sendMessage(ChatColor.RED + "You don't have permission to enable ArenaFighter!");
return true;
}
if (plugin != null) {
plugin.setArenaEnabled(true);
player.sendMessage(ChatColor.GREEN + "Arena Fighter enabled!");
}
return true;
}

private boolean handleDisable(Player player) {
if (!player.hasPermission("arenafighter.admin")) {
player.sendMessage(ChatColor.RED + "You don't have permission to disable ArenaFighter!");
return true;
}
if (plugin != null) {
plugin.setArenaEnabled(false);
player.sendMessage(ChatColor.RED + "Arena Fighter disabled!");
}
return true;
}

private boolean handleCreate(Player player, String[] args) {
if (!player.hasPermission("arenafighter.admin")) {
player.sendMessage(ChatColor.RED + "You don't have permission to create arenas!");
Expand Down Expand Up @@ -223,10 +258,11 @@ private boolean handleTeleport(Player player, String[] args) {

private void sendHelpMessage(Player player) {
player.sendMessage(ChatColor.GOLD + "=== Arena Fighter Commands ===");
player.sendMessage(ChatColor.YELLOW + "/arena enable" + ChatColor.WHITE + " - Enable Arena Fighter");
player.sendMessage(ChatColor.YELLOW + "/arena disable" + ChatColor.WHITE + " - Disable Arena Fighter");
player.sendMessage(ChatColor.YELLOW + "/arena create <name>" + ChatColor.WHITE + " - Create a new arena");
player.sendMessage(ChatColor.YELLOW + "/arena remove <name>" + ChatColor.WHITE + " - Remove an arena");
player.sendMessage(ChatColor.YELLOW + "/arena list" + ChatColor.WHITE + " - List all arenas");
//Still don't know how to force a line break \n doesn't seem to work. New line as a work around.
player.sendMessage(ChatColor.YELLOW + "/arena setspawn <name> <spawn1|spawn2|spectator>");
player.sendMessage(ChatColor.WHITE + " - Set spawn point");
player.sendMessage(ChatColor.YELLOW + "/arena tp <name> [spawn1|spawn2]" + ChatColor.WHITE + " - Teleport to an arena");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
}

private boolean handleChallenge(Player challenger, String[] args) {
if (plugin instanceof org.garsooon.arenafighter.Arena.ArenaFighter) {
org.garsooon.arenafighter.Arena.ArenaFighter afPlugin = (org.garsooon.arenafighter.Arena.ArenaFighter) plugin;
if (!afPlugin.isArenaEnabled()) {
challenger.sendMessage(ChatColor.RED + "Arena Fighter is currently disabled.");
return true;
}
}

if (args.length < 2) {
challenger.sendMessage(ChatColor.RED + "Usage: /fight challenge <player> [wagerAmount]");
return true;
Expand Down Expand Up @@ -141,8 +149,13 @@ private boolean handleChallenge(Player challenger, String[] args) {
double wagerAmount = 0.0;
if (args.length >= 3) {
try {
String[] split = args[2].split("\\.");
if (split.length == 2 && split[1].length() > 2) {
challenger.sendMessage(ChatColor.RED + "Wagers can only have up to two decimals.");
return true;
}
wagerAmount = Double.parseDouble(args[2]);
wagerAmount = Bet.roundDownTwoDecimals(wagerAmount); // <-- round down here
wagerAmount = Bet.roundDownTwoDecimals(wagerAmount);
if (wagerAmount < 0) {
challenger.sendMessage(ChatColor.RED + "Wager amount cannot be negative.");
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
double amount;

try {
String[] split = args[1].split("\\.");
if (split.length == 2 && split[1].length() > 2) {
player.sendMessage(ChatColor.RED + "Bets can only have up to two decimals.");
return true;
}
amount = Double.parseDouble(args[1]);
amount = Bet.roundDownTwoDecimals(amount);
if (amount <= 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,6 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
}
Player player = (Player) sender;

if (fightManager.isSpectating(player)) {
// If already spectating, stop and return
boolean stopped = fightManager.stopSpectating(player);
if (stopped) {
player.sendMessage(ChatColor.YELLOW + "You have stopped spectating and returned to your original location.");
} else {
player.sendMessage(ChatColor.RED + "An error occurred while stopping spectating.");
}
return true;
}

// Start spectating: requires arena name for multi-arena support
if (args.length == 0) {
player.sendMessage(ChatColor.RED + "Usage: /spectate <arena>");
Expand All @@ -48,4 +37,4 @@ public boolean onCommand(CommandSender sender, Command command, String label, St

return true;
}
}
}
4 changes: 4 additions & 0 deletions src/main/java/org/garsooon/arenafighter/Fight/Fight.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ public void resolveBets(String winner) {
double share = (bet.getAmount() / winnerPool) * loserPool;
double payout = base + share;

payout = Math.max(payout, base);

payout = Math.floor(payout * 100) / 100.0;

Methods.getMethod().depositPlayer(bet.getSpectator(), payout, p.getWorld());
p.sendMessage(ChatColor.GOLD + "You won your bet on " + winner + "! You receive " + payout);
} else {
Expand Down
Loading
Loading