a little bit less spaghetti and statistics should work for groups now
This commit is contained in:
parent
50f51126bb
commit
5df021e3dd
2 changed files with 109 additions and 79 deletions
|
|
@ -3,7 +3,6 @@ package de.lunarakai.minecleaner;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
@ -227,62 +226,72 @@ public class MinecleanerListener implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent e) {
|
public void onPlayerQuit(PlayerQuitEvent e) {
|
||||||
MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer());
|
Player player = e.getPlayer();
|
||||||
|
MinecleanerGroupManager groupManager = plugin.getGroupManager();
|
||||||
|
MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player);
|
||||||
|
|
||||||
if(arena != null) {
|
if(arena != null) {
|
||||||
if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) {
|
if(groupManager.getGroup(player) != null) {
|
||||||
if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) {
|
MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player);
|
||||||
Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()];
|
Player ownerPlayer = Bukkit.getPlayer(group.getOwner());
|
||||||
int i = 0;
|
if(player == ownerPlayer) {
|
||||||
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) {
|
Player[] players = iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group);
|
||||||
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
|
||||||
players[i] = iteratorPlayer;
|
|
||||||
}
|
|
||||||
plugin.getManager().leaveArena(players, false, true);
|
plugin.getManager().leaveArena(players, false, true);
|
||||||
return;
|
} else {
|
||||||
|
iterateOverGroupMembersOnPlayerQuit(player, group);
|
||||||
}
|
}
|
||||||
Player[] players = new Player[] {
|
|
||||||
e.getPlayer()
|
|
||||||
};
|
|
||||||
plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer());
|
|
||||||
plugin.getManager().leaveArena(players, false, false);
|
|
||||||
} else {
|
} else {
|
||||||
Player[] players = new Player[] {
|
Player[] players = new Player[] {
|
||||||
e.getPlayer()
|
e.getPlayer()
|
||||||
};
|
};
|
||||||
plugin.getManager().leaveArena(players, false, true);
|
plugin.getManager().leaveArena(players, false, true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) {
|
if(groupManager.getGroup(player) != null) {
|
||||||
if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) {
|
MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player);
|
||||||
int i = 0;
|
Player ownerPlayer = Bukkit.getPlayer(group.getOwner());
|
||||||
Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()];
|
if(player == ownerPlayer) {
|
||||||
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) {
|
iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group);
|
||||||
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
} else {
|
||||||
if(iteratorPlayer == e.getPlayer()) {
|
iterateOverGroupMembersOnPlayerQuit(player, group);
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
players[i] = iteratorPlayer;
|
|
||||||
players[i].sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW));
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) {
|
|
||||||
plugin.getManager().leaveArena(players, false, true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
Player[] players = new Player[] {
|
} else {
|
||||||
e.getPlayer()
|
return;
|
||||||
};
|
|
||||||
plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer());
|
|
||||||
if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) {
|
|
||||||
plugin.getManager().leaveArena(players, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void iterateOverGroupMembersOnPlayerQuit(Player player, MinecleanerGroupManager.MinecleanerGroup group) {
|
||||||
|
Player[] players = new Player[group.players.size()];
|
||||||
|
int i = 0;
|
||||||
|
for(Iterator<UUID> iterator = group.getPlayers().iterator(); iterator.hasNext();) {
|
||||||
|
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
||||||
|
if(iteratorPlayer == player) {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
players[i] = iteratorPlayer;
|
||||||
|
iteratorPlayer.sendMessage(Component.text(player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt.", NamedTextColor.YELLOW));
|
||||||
|
}
|
||||||
|
group.removePlayerFromGroup(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Player[] iterateOverGroupMembersOnCreatorPlayerQuit(Player player, MinecleanerGroupManager groupManager, MinecleanerGroupManager.MinecleanerGroup group) {
|
||||||
|
Player[] players = new Player[group.players.size()];
|
||||||
|
int i = 0;
|
||||||
|
for(Iterator<UUID> iterator = group.getPlayers().iterator(); iterator.hasNext();) {
|
||||||
|
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
||||||
|
if(iteratorPlayer == player) {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
players[i] = iteratorPlayer;
|
||||||
|
iteratorPlayer.sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW));
|
||||||
|
}
|
||||||
|
groupManager.deleteGroup(group);
|
||||||
|
return players;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockBurn(BlockBurnEvent e) {
|
public void onBlockBurn(BlockBurnEvent e) {
|
||||||
if(plugin.getArenaList().getArenaAtBlock(e.getBlock()) != null) {
|
if(plugin.getArenaList().getArenaAtBlock(e.getBlock()) != null) {
|
||||||
|
|
|
||||||
|
|
@ -216,41 +216,57 @@ public class MinecleanerManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) {
|
public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) {
|
||||||
|
|
||||||
if(plugin.getGroupManager().getGroup(player[0]) != null) {
|
if(plugin.getGroupManager().getGroup(player[0]) != null) {
|
||||||
World world = player[0].getWorld();
|
World world = player[0].getWorld();
|
||||||
|
|
||||||
if(!isSuccessfullyCleared) {
|
if(!isSuccessfullyCleared) {
|
||||||
world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f);
|
world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f);
|
||||||
|
|
||||||
int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1;
|
|
||||||
Player[] players = new Player[arraySize];
|
|
||||||
|
|
||||||
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) {
|
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) {
|
||||||
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
||||||
assert iteratorPlayer != null;
|
assert iteratorPlayer != null;
|
||||||
iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW));
|
iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW));
|
||||||
|
if(plugin.isStatisticsEnabled()) {
|
||||||
|
|
||||||
|
PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(iteratorPlayer.getUniqueId());
|
||||||
|
ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
arena.showMines();
|
arena.showMines();
|
||||||
scheduleArenaReset(player[0], arena);
|
scheduleArenaReset(Bukkit.getPlayer(plugin.getGroupManager().getGroup(player[0]).getOwner()), arena);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Todo: Punkte durch Anzahl der Leute in der Gruppe teilen => bei floats abrunden (heißt für Kleine (1 Punkt normal) => 0 Punkte in der Gruppe)
|
|
||||||
int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime());
|
int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime());
|
||||||
world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f);
|
world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f);
|
||||||
int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1;
|
MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]);
|
||||||
Player[] players = new Player[arraySize];
|
|
||||||
|
|
||||||
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) {
|
for(UUID currentPlayer : group.getPlayers()) {
|
||||||
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
|
|
||||||
assert iteratorPlayer != null;
|
Player iteratorPlayer = Bukkit.getPlayer(currentPlayer);
|
||||||
iteratorPlayer.sendMessage(Component.text(
|
if(iteratorPlayer != null)
|
||||||
"Glückwunsch, ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW)
|
iteratorPlayer.sendMessage(Component.text(
|
||||||
.append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED))
|
"Glückwunsch, ihr konntet das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW)
|
||||||
.append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW)));
|
.append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED))
|
||||||
|
.append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW)));
|
||||||
|
|
||||||
|
if(!plugin.isStatisticsEnabled())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(currentPlayer);
|
||||||
|
ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1);
|
||||||
|
ps.increaseScore(statisticsWonGamesTotal, 1);
|
||||||
|
ps.increaseScore(statisticsGames.get(arena.getWidthIndex()), 1);
|
||||||
|
|
||||||
|
int wIndex = arena.getWidthIndex();
|
||||||
|
increaseScore(wIndex, ps, group.getPlayers().size());
|
||||||
}
|
}
|
||||||
scheduleArenaReset(player[0], arena);
|
scheduleArenaReset(Bukkit.getPlayer(group.getOwner()), arena);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
World world = player[0].getWorld();
|
World world = player[0].getWorld();
|
||||||
PlayerStatistics ps = null;
|
PlayerStatistics ps = null;
|
||||||
StatisticKey sg = null;
|
StatisticKey sg = null;
|
||||||
|
|
@ -298,27 +314,7 @@ public class MinecleanerManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
int wIndex = arena.getWidthIndex();
|
int wIndex = arena.getWidthIndex();
|
||||||
switch (wIndex) {
|
increaseScore(wIndex, ps, 1);
|
||||||
case 0: {
|
|
||||||
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1: {
|
|
||||||
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2: {
|
|
||||||
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3: {
|
|
||||||
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert"));
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
ps.increaseScore(statisticsPointsAcquired, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!");
|
player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!");
|
||||||
}
|
}
|
||||||
|
|
@ -326,6 +322,31 @@ public class MinecleanerManager {
|
||||||
scheduleArenaReset(player[0], arena);
|
scheduleArenaReset(player[0], arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void increaseScore(int wIndex, PlayerStatistics ps, int groupSize) {
|
||||||
|
switch (wIndex) {
|
||||||
|
case 0: {
|
||||||
|
ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.small") /groupSize));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.medium") /groupSize));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.large") /groupSize));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3: {
|
||||||
|
ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.expert") /groupSize));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
ps.increaseScore(statisticsPointsAcquired, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void scheduleArenaReset(Player player, MinecleanerArena arena) {
|
private void scheduleArenaReset(Player player, MinecleanerArena arena) {
|
||||||
schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> {
|
schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> {
|
||||||
if(arena.getArenaStatus() == ArenaStatus.COMPLETED) {
|
if(arena.getArenaStatus() == ArenaStatus.COMPLETED) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue