Skip to content
Draft
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
dependency-reduced-pom.xml
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MMBattlegrounds

MMBattlegrounds is the plugin used in the server internally known as batt2 it is NOT a plugin used on the battlegrounds smp
MMBattlegrounds is the plugin used in the server Breakneck Battlegrounds it is NOT a plugin used on the battlegrounds smp

> **Versioning**
>
Expand Down
14 changes: 12 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.github.minemaniauk</groupId>
<artifactId>mmbattlegrounds</artifactId>
<version>2.0.2</version>
<version>3.0.0</version>
<packaging>jar</packaging>

<name>mmbattlegrounds</name>
Expand Down Expand Up @@ -88,6 +88,16 @@
<version>5.1.2</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>net.megavex</groupId>
<artifactId>scoreboard-library-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>net.megavex</groupId>
<artifactId>scoreboard-library-implementation</artifactId>
<version>2.8.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.github.minemaniauk.MMBattlegrounds;

import com.booksaw.betterTeams.Main;
import com.booksaw.betterTeams.Team;
import com.booksaw.betterTeams.database.BetterTeamsDatabase;
import com.booksaw.betterTeams.customEvents.*;
import com.github.minemaniauk.MMBattlegrounds.commands.DropTimeTable;
import com.github.minemaniauk.MMBattlegrounds.commands.ResetAllBorders;
import com.github.minemaniauk.MMBattlegrounds.commands.StartSuddenDeath;
Expand All @@ -15,6 +14,9 @@
import com.github.minemaniauk.MMBattlegrounds.homes.commands.HomeCommand;
import com.github.minemaniauk.MMBattlegrounds.homes.commands.Homes;
import com.github.minemaniauk.MMBattlegrounds.homes.commands.SetHome;
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary;
import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException;
import net.megavex.scoreboardlibrary.api.noop.NoopScoreboardLibrary;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
Expand All @@ -23,10 +25,8 @@
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockExplodeEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.*;
Expand All @@ -47,8 +47,9 @@ public final class MMBattlegrounds extends JavaPlugin implements Listener {

private static MMBattlegrounds instance;
private ScoreboardManager scoreboardManager;
private ScoreboardLibrary scoreboardLibrary;
private DropManager dropManager;
private RestrictionManager restictionManager;
private RestrictionManager restrictionManager;
private FileConfiguration config;
private File configFile;
private FileConfiguration data;
Expand Down Expand Up @@ -82,13 +83,20 @@ public void onEnable() {
20L
);

try {
scoreboardLibrary = ScoreboardLibrary.loadScoreboardLibrary(this);
} catch (NoPacketAdapterAvailableException e) {
scoreboardLibrary = new NoopScoreboardLibrary();
this.getLogger().warning("Server version unsupported, scoreboard functionality will not be visible!");
}

scoreboardManager = new ScoreboardManager();
dropManager = new DropManager(this);
restictionManager = new RestrictionManager(this);
restrictionManager = new RestrictionManager(this);

Bukkit.getScheduler().runTaskTimer(this, this::update, 0L, 20L);
getServer().getPluginManager().registerEvents(this, this);
getServer().getPluginManager().registerEvents(restictionManager, this);
getServer().getPluginManager().registerEvents(restrictionManager, this);
TeleportHelper.register(this);
getCommand("startsuddendeath").setExecutor(new StartSuddenDeath());
getCommand("dropcreate").setExecutor(new DropCreate());
Expand Down Expand Up @@ -130,8 +138,8 @@ public void onEnable() {

@Override
public void onDisable() {
if (restictionManager != null) {
restictionManager.disableAllSilently();
if (restrictionManager != null) {
restrictionManager.disableAllSilently();
}
}

Expand Down Expand Up @@ -167,6 +175,8 @@ public void onInventoryClose(InventoryCloseEvent event) {

@EventHandler
public void onPlayerLeave(PlayerQuitEvent event) {
scoreboardManager.removePlayerScoreBoard(event.getPlayer());

if (isTagged(event.getPlayer())) {
event.getPlayer().setHealth(0);
}
Expand All @@ -179,8 +189,59 @@ public void onPlayerLeave(PlayerQuitEvent event) {
}
}

@EventHandler
public void onTeamJoin(PlayerJoinTeamEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}

@EventHandler
public void onTeamLeave(PlayerLeaveTeamEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}

@EventHandler
public void onTeamCreate(CreateTeamEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}

@EventHandler
public void onTeamDisband(DisbandTeamEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}

@EventHandler
public void onTeamNameChange(TeamNameChangeEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}

@EventHandler
public void onTeamTagChange(TeamTagChangeEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}

@EventHandler
public void onTeamColorChange(TeamColorChangeEvent event) {
Bukkit.getScheduler().runTask(this, () -> {
scoreboardManager.updatePlayerStatuses();
});
}


@EventHandler
public void onPlayerKicked(PlayerKickEvent event) {
scoreboardManager.removePlayerScoreBoard(event.getPlayer());
combatTags.remove(event.getPlayer().getUniqueId());
if (gamePhase != GamePhase.NORMAL){
if (event.getPlayer().getGameMode() == GameMode.SURVIVAL){
Expand Down Expand Up @@ -285,14 +346,27 @@ public void onPlayerDeath(PlayerDeathEvent event) {
if (event.getEntity().getKiller() != null){
combatTags.remove(event.getEntity().getKiller().getUniqueId());
event.getEntity().getKiller().sendMessage(ChatColor.GREEN + "You are no longer in combat");

// Increment player deaths
FileConfiguration playerData = loadPlayerData(player);
int playerDeaths = playerData.getInt("deaths", 0);
playerData.set("deaths", playerDeaths + 1);
savePlayerData(player, playerData);

// Increment killer kills
Player killer = event.getEntity().getKiller();
FileConfiguration killerData = loadPlayerData(killer);
int killerKills = killerData.getInt("kills", 0);
killerData.set("kills", killerKills + 1);
savePlayerData(killer, killerData);
}

if (isTagged(player)) {
combatTags.remove(player.getUniqueId());
player.sendMessage(ChatColor.GREEN + "You are no longer in combat");
}


scoreboardManager.updatePlayerStatuses();

if (gamePhase != GamePhase.NORMAL) {

Expand Down Expand Up @@ -513,9 +587,7 @@ public void onPlayerDamaged(EntityDamageEvent event) {
return;
}

if (event.getEntity() instanceof Player) {
event.setCancelled(true);
}
event.setCancelled(true);
}

@EventHandler
Expand Down Expand Up @@ -570,7 +642,7 @@ public void update() {
case NORMAL:
long normRemainingTimeMillis = Math.max(0L, suddenDeathScheduledStartTime - now);

scoreboardManager.update(normRemainingTimeMillis, GamePhase.NORMAL);
scoreboardManager.updateTime(normRemainingTimeMillis, GamePhase.NORMAL);
break;

case SUDDEN_DEATH:
Expand All @@ -583,15 +655,15 @@ public void update() {
return;
}

scoreboardManager.update(teamDisbandRemainingMillis, GamePhase.SUDDEN_DEATH);
scoreboardManager.updateTime(teamDisbandRemainingMillis, GamePhase.SUDDEN_DEATH);
break;

case SUDDEN_DEATH_NO_TEAMS:
scoreboardManager.update(0L, GamePhase.SUDDEN_DEATH_NO_TEAMS);
scoreboardManager.updateTime(0L, GamePhase.SUDDEN_DEATH_NO_TEAMS);
break;

case GAME_OVER:
scoreboardManager.update(0L, GamePhase.GAME_OVER);
scoreboardManager.updateTime(0L, GamePhase.GAME_OVER);
break;
}
}
Expand Down Expand Up @@ -730,12 +802,69 @@ public void saveData() {
}
}

public File getPlayerDataFolder() {
File playerDataFolder = new File(getDataFolder(), "player-data");

if (!playerDataFolder.exists() && !playerDataFolder.mkdirs()) {
getLogger().warning("Failed to create player data folder at " + playerDataFolder.getAbsolutePath());
}

return playerDataFolder;
}

public File getPlayerDataFile(Player player) {
return getPlayerDataFile(player.getUniqueId());
}

public File getPlayerDataFile(UUID playerId) {
return new File(getPlayerDataFolder(), playerId + ".yml");
}

public FileConfiguration loadPlayerData(Player player) {
return loadPlayerData(player.getUniqueId());
}

public FileConfiguration loadPlayerData(UUID playerId) {
return YamlConfiguration.loadConfiguration(getPlayerDataFile(playerId));
}

public boolean savePlayerData(Player player, FileConfiguration playerData) {
return savePlayerData(player.getUniqueId(), playerData);
}

public boolean savePlayerData(UUID playerId, FileConfiguration playerData) {
try {
playerData.save(getPlayerDataFile(playerId));
return true;
} catch (IOException e) {
getLogger().log(java.util.logging.Level.SEVERE, "Failed to save player data for " + playerId, e);
return false;
}
}

public boolean deletePlayerData(Player player) {
return deletePlayerData(player.getUniqueId());
}

public boolean deletePlayerData(UUID playerId) {
File playerDataFile = getPlayerDataFile(playerId);
return !playerDataFile.exists() || playerDataFile.delete();
}

public ScoreboardLibrary getScoreboardLibrary() {
return this.scoreboardLibrary;
}

public ScoreboardManager getScoreboardManager() {
return this.scoreboardManager;
}

public DropManager getDropManager() {
return this.dropManager;
}

public RestrictionManager getRestictionManager() {
return this.restictionManager;
return this.restrictionManager;
}

public FileConfiguration getData() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -332,15 +332,11 @@ private void broadcastKeepInventoryState(boolean enabled) {
return;
}

String title = enabled ? ChatColor.GREEN + "KEEP INVENTORY ON" : ChatColor.RED + "KEEP INVENTORY OFF";
String subtitle = enabled
? ChatColor.YELLOW + "All deaths keep items"
: ChatColor.YELLOW + "Normal death rules restored";
String message = enabled
? "&7&l> &aKeep inventory is now force-enabled for everyone"
: "&7&l> &cKeep inventory force-enable has ended. Normal rules now apply";

broadcast(title, subtitle, message);
broadcast(message);
}

private void broadcastKeepInventoryManualEnable() {
Expand Down Expand Up @@ -378,16 +374,13 @@ private void broadcastUpcomingKeepInventoryChange(long remainingTicks) {
}

broadcast(
ChatColor.GOLD + "KEEP INVENTORY ENDING",
ChatColor.YELLOW + "Turns off in " + formatDuration(remainingTicks),
"&7&l> &eKeep inventory force-enable will end in &f" + formatDuration(remainingTicks)
+ "&e. Normal death rules will return after that"
);
}

private void broadcast(String title, String subtitle, String message) {
private void broadcast(String message) {
for (Player player : plugin.getServer().getOnlinePlayers()) {
player.sendTitle(title, subtitle, 10, 50, 20);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
}
}
Expand Down
Loading
Loading