Compare commits

..

5 commits

Author SHA1 Message Date
583f8a1257 translatable StatsCommand 2024-05-15 18:55:12 +02:00
2bc7a3979e Merge branch “1.20.6” 2024-05-15 13:51:58 +02:00
f09c9772b2 whoops 2024-05-13 22:16:50 +02:00
75768ea587 nullpointer + settingsinv 2024-05-13 22:13:44 +02:00
b1193d4687 1.20.6 2024-05-09 22:26:37 +02:00
14 changed files with 308 additions and 240 deletions

View file

@ -48,7 +48,7 @@ public class MinecleanerListener implements Listener {
hasRightClicked = true; hasRightClicked = true;
} }
if(!arena.getCurrentMinecleanerGame().gameover && (arena.getArenaStatus() == ArenaStatus.PLAYING || arena.getArenaStatus() == ArenaStatus.COMPLETED)) { if(arena.getCurrentMinecleanerGame() != null && !arena.getCurrentMinecleanerGame().gameover && (arena.getArenaStatus() == ArenaStatus.PLAYING || arena.getArenaStatus() == ArenaStatus.COMPLETED)) {
if(arena.getArenaStatus() == ArenaStatus.PLAYING) { if(arena.getArenaStatus() == ArenaStatus.PLAYING) {
int d0x = arena.getOrientation().getModX(); int d0x = arena.getOrientation().getModX();
int d0z = arena.getOrientation().getModZ(); int d0z = arena.getOrientation().getModZ();
@ -131,117 +131,6 @@ public class MinecleanerListener implements Listener {
} }
} }
} }
if(e.getInventory().equals(plugin.getManager().getSettingsInventory())) {
int slot = e.getRawSlot();
switch (slot) {
case 10: {
if(plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) {
plugin.getManager().updateSettingsValue("allowmanualreset", 1, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
} else {
plugin.getManager().updateSettingsValue("allowmanualreset", 0, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
}
break;
}
case 12: {
if(plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) {
plugin.getManager().updateSettingsValue("additionaldisplay", 1, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
} else {
plugin.getManager().updateSettingsValue("additionaldisplay", 0, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
}
break;
}
case 14: {
if(plugin.getManager().getSettingsValue("timer", player) == 0) {
plugin.getManager().updateSettingsValue("timer", 1, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
} else {
plugin.getManager().updateSettingsValue("timer", 0, player);
if(arena != null) {
arena.updateIngameInfoTexts();
}
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
}
break;
}
case 16: {
switch (plugin.getManager().getSettingsValue("resettime", player)) {
case 1: {
plugin.getManager().updateSettingsValue("resettime", 2, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 2: {
plugin.getManager().updateSettingsValue("resettime", 3, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 3: {
plugin.getManager().updateSettingsValue("resettime", 4, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 4: {
plugin.getManager().updateSettingsValue("resettime", 5, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 5: {
plugin.getManager().updateSettingsValue("resettime", 6, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 6: {
plugin.getManager().updateSettingsValue("resettime", 7, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 7: {
plugin.getManager().updateSettingsValue("resettime", 8, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 8: {
plugin.getManager().updateSettingsValue("resettime", 9, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 9: {
plugin.getManager().updateSettingsValue("resettime", 10, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
case 10: {
plugin.getManager().updateSettingsValue("resettime", 1, player);
player.closeInventory();
player.openInventory(plugin.getManager().showSettingsInventory(player));
break;
}
}
}
default: {
break;
}
}
}
} }
} }

View file

@ -373,75 +373,6 @@ public class MinecleanerManager {
} }
} }
public Inventory showSettingsInventory(Player player) {
int current = getSettingsValue("allowmanualreset", player);
if(current == 0) {
settingsInventory.setItem(10,
ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.SHEARS), ChatColor.RED + "Manuelles Resetten deaktiviert")));
} else {
settingsInventory.setItem(10,
ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.SHEARS), ChatColor.GREEN + "Manuelles Resetten aktiviert")));
}
current = getSettingsValue("additionaldisplay", player);
if(current == 0) {
settingsInventory.setItem(12,
ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.RED + "Zusätzliche Anzeige in der Action Bar deaktiviert")));
} else {
settingsInventory.setItem(12,
ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar aktiviert")));
}
current = getSettingsValue("timer", player);
if(current == 0) {
settingsInventory.setItem(14,
ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.RED + "Timer wird nicht angezeigt")));
} else {
settingsInventory.setItem(14,
ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer wird angezeigt")));
}
current = getSettingsValue("resettime", player);
switch (current) {
case 1:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "1s")));
break;
case 2:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "2s")));
break;
case 3:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "3s")));
break;
case 4:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "4s")));
break;
case 5:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "5s")));
break;
case 6:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "6s")));
break;
case 7:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "7s")));
break;
case 8:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "8s")));
break;
case 9:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "9s")));
break;
case 10:
settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "10s")));
break;
}
return settingsInventory;
}
public int getSettingsValue(String settingsKeyString, Player player) { public int getSettingsValue(String settingsKeyString, Player player) {
PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId());
SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString);

View file

@ -0,0 +1,124 @@
package de.lunarakai.minecleaner;
import de.iani.cubesideutils.bukkit.inventory.AbstractWindow;
import de.lunarakai.minecleaner.utils.ItemUtil;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack;
public class MinecleanerSettingsInventory extends AbstractWindow {
private static final int SETTINGS_ALLOW_MANUEL_RESET = 10;
private static final int SETTINGS_ADDITIONAL_DISPLAY = 12;
private static final int SETTINGS_TIMER = 14;
private static final int SETTINGS_RESETTIME = 16;
private static final int WINDOW_SIZE = 27;
private MinecleanerPlugin plugin;
public MinecleanerSettingsInventory(Player player, MinecleanerPlugin plugin) {
super(player, Bukkit.createInventory(player, InventoryType.CHEST, plugin.getDisplayedPluginName() + " Einstellungen"));
this.plugin = plugin;
}
@Override
protected void rebuildInventory() {
Player player = getPlayer();
for (int i = 0; i < WINDOW_SIZE; i++) {
ItemStack item;
switch (i) {
case SETTINGS_ALLOW_MANUEL_RESET -> {
if (plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) {
item = ItemUtil.createGuiItem(Material.SHEARS, ChatColor.RED + "Manuelles Resetten deaktiviert");
} else {
item = ItemUtil.createGuiItem(Material.SHEARS, ChatColor.GREEN + "Manuelles Resetten aktiviert");
}
}
case SETTINGS_ADDITIONAL_DISPLAY -> {
if (plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) {
item = ItemUtil.createGuiItem(Material.NAME_TAG, ChatColor.RED + "Zusätzliche Anzeige in der Action Bar deaktiviert\"");
} else {
item = ItemUtil.createGuiItem(Material.NAME_TAG, ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar aktiviert\"");
}
}
case SETTINGS_TIMER -> {
if (plugin.getManager().getSettingsValue("timer", player) == 0) {
item = ItemUtil.createGuiItem(Material.CLOCK, ChatColor.RED + "Timer wird nicht angezeigt");
} else {
item = ItemUtil.createGuiItem(Material.CLOCK, ChatColor.GREEN + "Timer wird angezeigt");
}
}
case SETTINGS_RESETTIME -> {
int current = plugin.getManager().getSettingsValue("resettime", player);
item = ItemUtil.createGuiItem(Material.CANDLE, ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + current + "s");
}
default -> item = ItemUtil.EMPTY_ICON;
}
this.getInventory().setItem(i, item);
}
}
@Override
public void onItemClicked(InventoryClickEvent event) {
if (!mayAffectThisInventory(event)) {
return;
}
event.setCancelled(true);
if (!getInventory().equals(event.getClickedInventory())) {
return;
}
Player player = getPlayer();
int slot = event.getSlot();
switch (slot) {
case SETTINGS_ALLOW_MANUEL_RESET -> {
if(plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) {
plugin.getManager().updateSettingsValue("allowmanualreset", 1, player);
} else {
plugin.getManager().updateSettingsValue("allowmanualreset", 0, player);
}
rebuildInventory();
}
case SETTINGS_ADDITIONAL_DISPLAY -> {
if(plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) {
plugin.getManager().updateSettingsValue("additionaldisplay", 1, player);
} else {
plugin.getManager().updateSettingsValue("additionaldisplay", 0, player);
}
rebuildInventory();
}
case SETTINGS_TIMER -> {
if(plugin.getManager().getSettingsValue("timer", player) == 0) {
plugin.getManager().updateSettingsValue("timer", 1, player);
} else {
MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player);
plugin.getManager().updateSettingsValue("timer", 0, player);
if(arena != null) {
arena.updateIngameInfoTexts();
}
}
rebuildInventory();
}
case SETTINGS_RESETTIME -> {
int current = plugin.getManager().getSettingsValue("resettime", player);
if(plugin.getManager().getSettingsValue("resettime", player) < 10) {
plugin.getManager().updateSettingsValue("resettime", current + 1, player);
} else {
plugin.getManager().updateSettingsValue("resettime", 1, player);
}
rebuildInventory();
}
default -> {
}
}
}
}

View file

@ -43,10 +43,10 @@ public class InfoCommand extends SubCommand{
ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException,
NoPermissionException, IllegalSyntaxException, InternalCommandException { NoPermissionException, IllegalSyntaxException, InternalCommandException {
sender.sendMessage(NamedChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); sender.sendMessage(NamedChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---");
sender.sendMessage(createLangComponent("minecleaner.info.version", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); sender.sendMessage(createLangComponent("minecleaner.info.version", ": ", plugin.getPluginMeta().getVersion(), NamedTextColor.AQUA, NamedTextColor.GREEN));
sender.sendMessage(createLangComponent("minecleaner.info.developer", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); sender.sendMessage(createLangComponent("minecleaner.info.developer", ": ", plugin.getPluginMeta().getAuthors().get(0), NamedTextColor.AQUA, NamedTextColor.GREEN));
sender.sendMessage(createLangComponent("minecleaner.info.website", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); sender.sendMessage(createLangComponent("minecleaner.info.website", ": ", plugin.getPluginMeta().getWebsite(), NamedTextColor.AQUA, NamedTextColor.GREEN));
sender.sendMessage(createLangComponent("minecleaner.info.license", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + "GPL-3.0"); sender.sendMessage(createLangComponent("minecleaner.info.license", ": ", "GPL-3.0", NamedTextColor.AQUA, NamedTextColor.GREEN));
return true; return true;
} }
} }

View file

@ -0,0 +1,37 @@
package de.lunarakai.minecleaner.commands;
import de.iani.cubesideutils.bukkit.commands.SubCommand;
import de.iani.cubesideutils.bukkit.commands.exceptions.*;
import de.iani.cubesideutils.commands.ArgsParser;
import de.lunarakai.minecleaner.MinecleanerPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
public class InviteCommand extends SubCommand {
/*
TODO:
- Invite other Players to play in Duo Mode
- Add Functionality to support multiple Players in the same game
- use settings of player that invited the other player
*/
@Override
public String getUsage() {
return "<Player>";
}
@Override
public boolean requiresPlayer() {
return true;
}
@Override
public String getRequiredPermission() {
return MinecleanerPlugin.PERMISSION_PLAY;
}
@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
return false;
}
}

View file

@ -8,6 +8,7 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException;
import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException;
import de.iani.cubesideutils.commands.ArgsParser; import de.iani.cubesideutils.commands.ArgsParser;
import de.lunarakai.minecleaner.MinecleanerPlugin; import de.lunarakai.minecleaner.MinecleanerPlugin;
import de.lunarakai.minecleaner.MinecleanerSettingsInventory;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -39,7 +40,7 @@ public class SettingsCommand extends SubCommand {
public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
Player player = (Player) sender; Player player = (Player) sender;
player.openInventory(plugin.getManager().showSettingsInventory(player)); new MinecleanerSettingsInventory(player, plugin).open();
return true; return true;
} }
} }

View file

@ -8,7 +8,6 @@ import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import de.iani.cubesideutils.StringUtil;
import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.bukkit.commands.SubCommand;
import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException;
import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException;
@ -19,7 +18,6 @@ import de.iani.cubesideutils.commands.ArgsParser;
import de.lunarakai.minecleaner.MinecleanerPlugin; import de.lunarakai.minecleaner.MinecleanerPlugin;
import de.lunarakai.minecleaner.PlayerStatisticsData; import de.lunarakai.minecleaner.PlayerStatisticsData;
import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; import de.lunarakai.minecleaner.utils.MinecleanerStringUtil;
import net.md_5.bungee.api.ChatColor;
import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent;
@ -61,8 +59,22 @@ public class StatsCommand extends SubCommand {
} else { } else {
sender.sendMessage(createLangComponent("data.player.other", plugin.getDisplayedPluginName(), data.getPlayerName(), NamedTextColor.AQUA).append(Component.text(":"))); sender.sendMessage(createLangComponent("data.player.other", plugin.getDisplayedPluginName(), data.getPlayerName(), NamedTextColor.AQUA).append(Component.text(":")));
} }
sender.sendMessage(ChatColor.BLUE + " Punkte erspielt: " + ChatColor.GREEN + data.getPointsAcquiredTotal() + " (Dieser Monat: " + data.getPointsAquiredMonth() + ")");
sender.sendMessage(ChatColor.BLUE + " Runden gewonnen: " + ChatColor.GREEN + data.getWonGamesPlayed() + " (Dieser Monat: " + data.getWonGamesPlayedThisMonth() + ")"); sender.sendMessage(createLangComponent("data.player.pointsscored", NamedTextColor.BLUE)
.append(Component.text(": ", NamedTextColor.BLUE))
.append(Component.text(String.valueOf(data.getPointsAcquiredTotal()), NamedTextColor.GREEN))
.append(Component.text(" (", NamedTextColor.GREEN))
.append(createLangComponent("data.player.thismonth", NamedTextColor.GREEN))
.append(Component.text(": " + String.valueOf(data.getPointsAquiredMonth()) + ")", NamedTextColor.GREEN)));
sender.sendMessage(createLangComponent("data.player.roundswon", NamedTextColor.BLUE)
.append(Component.text(": ", NamedTextColor.BLUE))
.append(Component.text(String.valueOf(data.getWonGamesPlayed()), NamedTextColor.GREEN))
.append(Component.text(" (", NamedTextColor.GREEN))
.append(createLangComponent("data.player.thismonth", NamedTextColor.GREEN))
.append(Component.text(": " + String.valueOf(data.getWonGamesPlayedThisMonth()) + ")", NamedTextColor.GREEN)));
for(Entry<Integer, String> e : plugin.getManager().getSizes().entrySet()) { for(Entry<Integer, String> e : plugin.getManager().getSizes().entrySet()) {
int totalWonSize = data.getGamesPlayedSize(e.getKey()); int totalWonSize = data.getGamesPlayedSize(e.getKey());
int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey()); int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey());
@ -70,14 +82,35 @@ public class StatsCommand extends SubCommand {
int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey()); int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey());
if(totalSize > 0) { if(totalSize > 0) {
String sizeName = StringUtil.capitalizeFirstLetter(e.getValue(), false); String sizeName = e.getValue();
sender.sendMessage(ChatColor.AQUA + " " + sizeName + ":"); if(sizeName.equals("groß")) {
sender.sendMessage(ChatColor.BLUE + " Runden gewonnen: " + ChatColor.GREEN + totalWonSize + " von " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize)+ ") "); sizeName = "gross";
sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + totalWonMonth + " von " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth)+ ")"); }
sender.sendMessage(createLangComponent("arena.width." + sizeName, NamedTextColor.AQUA).append(Component.text(":", NamedTextColor.AQUA)));
sender.sendMessage(Component.text(" ")
.append(createLangComponent("data.player.roundswon", NamedTextColor.BLUE))
.append(Component.text(" "))
.append(Component.text(String.valueOf(totalWonSize), NamedTextColor.GREEN))
.append(Component.text(" "))
.append(createLangComponent("data.player.outof", NamedTextColor.GREEN))
.append(Component.text(" " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize) + ")", NamedTextColor.GREEN)));
sender.sendMessage(Component.text(" ")
.append(createLangComponent("data.player.thismonth", NamedTextColor.BLUE))
.append(Component.text(" "))
.append(Component.text(String.valueOf(totalWonMonth), NamedTextColor.GREEN))
.append(Component.text(" "))
.append(createLangComponent("data.player.outof", NamedTextColor.GREEN))
.append(Component.text(" " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth) + ")", NamedTextColor.GREEN)));
Integer time = data.getBestTime(e.getKey()); Integer time = data.getBestTime(e.getKey());
Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey());
sender.sendMessage(ChatColor.BLUE + " Bestzeit: " + ChatColor.GREEN + (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false))); sender.sendMessage(Component.text(" ")
sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false))); .append(createLangComponent("data.player.besttime",": ", (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false)), NamedTextColor.BLUE, NamedTextColor.GREEN)));
sender.sendMessage(Component.text(" ")
.append(createLangComponent("data.player.thismonth", ": ", (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false)), NamedTextColor.BLUE, NamedTextColor.GREEN)));
} }
} }
} }
@ -86,7 +119,7 @@ public class StatsCommand extends SubCommand {
if(sender instanceof Player) { if(sender instanceof Player) {
plugin.getManager().getStatisticsForPlayer((Player) sender, callback); plugin.getManager().getStatisticsForPlayer((Player) sender, callback);
} else { } else {
sender.sendMessage(ChatColor.GREEN + "Für die Konsole existieren keine Daten."); sender.sendMessage(createLangComponent("data.console.nodata", NamedTextColor.GREEN));
} }
} else { } else {
plugin.getManager().getStatisticsForPlayerIfExists(playerName, callback); plugin.getManager().getStatisticsForPlayerIfExists(playerName, callback);

View file

@ -0,0 +1,32 @@
package de.lunarakai.minecleaner.utils;
import de.iani.cubesideutils.bukkit.items.ItemBuilder;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
public class ItemUtil {
public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, " ", true, true);
public static ItemStack createGuiItem(Material material, String name, String... lore) {
return createGuiItem(material, name, false, lore);
}
public static ItemStack createGuiItem(Material material, String name, boolean glowing, boolean showTooltip, String... lore) {
ItemBuilder builder = ItemBuilder.fromMaterial(material).displayName(name).lore(lore);
if (glowing) {
builder.enchantment(Enchantment.UNBREAKING, 1, true).flag(ItemFlag.HIDE_ENCHANTS);
}
if (!showTooltip) {
builder.flag(ItemFlag.HIDE_ADDITIONAL_TOOLTIP);
}
return builder.build();
}
public static ItemStack createGuiItem(Material material, String name, boolean glowing, String... lore) {
return createGuiItem(material, name, glowing, true, lore);
}
}

View file

@ -2,6 +2,7 @@ package de.lunarakai.minecleaner.utils;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
public class MinecleanerComponentUtils { public class MinecleanerComponentUtils {
@ -27,4 +28,25 @@ public class MinecleanerComponentUtils {
.build(); .build();
} }
public static TextComponent createLangComponent(String langKey, String filler, String arg1, NamedTextColor namedColor, NamedTextColor namedColorArg1) {
if(MinecleanerStringUtil.isValidURL(arg1)) {
TextComponent urlMessage = Component.text(arg1);
urlMessage = urlMessage.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, arg1));
urlMessage = urlMessage.color(namedColorArg1);
return Component.text()
.color(namedColor)
.append(Component.translatable(langKey))
.append(Component.text(filler))
.append(urlMessage)
.build();
} else {
return Component.text()
.color(namedColor)
.append(Component.translatable(langKey))
.append(Component.text(filler))
.append(Component.text(arg1, namedColorArg1))
.build();
}
}
} }

View file

@ -1,14 +1,8 @@
package de.lunarakai.minecleaner.utils; package de.lunarakai.minecleaner.utils;
import java.util.Arrays; import de.iani.cubesideutils.bukkit.items.CustomHeads;
import java.util.UUID; import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import com.destroystokyo.paper.profile.PlayerProfile;
import com.destroystokyo.paper.profile.ProfileProperty;
public enum MinecleanerHeads { public enum MinecleanerHeads {
MINESWEEPER_TILE_0("38206373-5653-4431-85aa-6276f3f9a046", "Minesweeper Tile 0", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzRjMjg0YTRlOTc0MDA1ZWE4ZDFkNGQwNjc0ZWMwODk0ZWZkOGY2ZGQwMjQ4NjM5YTZjZmE5NGY4NTM4OCJ9fX0="), MINESWEEPER_TILE_0("38206373-5653-4431-85aa-6276f3f9a046", "Minesweeper Tile 0", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzRjMjg0YTRlOTc0MDA1ZWE4ZDFkNGQwNjc0ZWMwODk0ZWZkOGY2ZGQwMjQ4NjM5YTZjZmE5NGY4NTM4OCJ9fX0="),
@ -38,40 +32,11 @@ public enum MinecleanerHeads {
private ItemStack head; private ItemStack head;
private MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) {
head = createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); head = CustomHeads.createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty);
} }
public ItemStack getHead() { public ItemStack getHead() {
return new ItemStack(head); return new ItemStack(head);
} }
public ItemStack getHead(String displayName) {
return getHead(displayName, (String[]) null);
}
public ItemStack getHead(String displayName, String... lore) {
ItemStack stack = getHead();
ItemMeta meta = stack.getItemMeta();
meta.setDisplayName(displayName);
if (lore != null && lore.length > 0) {
meta.setLore(Arrays.asList(lore));
}
stack.setItemMeta(meta);
return stack;
}
public static ItemStack createHead(UUID ownerUUID, String ownerName, String texturesProperty) {
if (ownerName == null) {
ownerName = ownerUUID.toString().substring(0, 16);
}
ItemStack stack = new ItemStack(Material.PLAYER_HEAD);
SkullMeta meta = (SkullMeta) stack.getItemMeta();
PlayerProfile profile = Bukkit.createProfile(ownerUUID, ownerName);
profile.setProperty(new ProfileProperty("textures", texturesProperty));
meta.setPlayerProfile(profile);
stack.setItemMeta(meta);
return stack;
}
} }

View file

@ -1,5 +1,7 @@
package de.lunarakai.minecleaner.utils; package de.lunarakai.minecleaner.utils;
import java.net.URL;
public class MinecleanerStringUtil { public class MinecleanerStringUtil {
private MinecleanerStringUtil() { private MinecleanerStringUtil() {
} }
@ -50,4 +52,14 @@ public class MinecleanerStringUtil {
String percentageString = String.format("%.1f", percent); String percentageString = String.format("%.1f", percent);
return percentageString + "%"; return percentageString + "%";
} }
public static boolean isValidURL(String urlString) {
try {
URL url = new URL(urlString);
url.toURI();
return true;
} catch (Exception e) {
return false;
}
}
} }

View file

@ -5,6 +5,10 @@ minecleaner.info.license=Lizenz
arena.name.invalid=Ungueltiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich arena.name.invalid=Ungueltiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich
arena.name.exists=Eine Arena mit diesem Namen existiert bereits arena.name.exists=Eine Arena mit diesem Namen existiert bereits
arena.width.klein=Klein
arena.width.mittel=Mittel
arena.width.gross=Gross
arena.width.experte=Experte
arena.widthindex.invalid=Kein Valider Arena WidthIndex! arena.widthindex.invalid=Kein Valider Arena WidthIndex!
arena.widthindex.validOptions=0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33 arena.widthindex.validOptions=0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33
arena.widthindex.toolarge=Arena WidthIndex darf nicht groesser als 3 sein arena.widthindex.toolarge=Arena WidthIndex darf nicht groesser als 3 sein
@ -19,6 +23,13 @@ arena.list.none=(keine)
data.player.noData=Fuer Spieler "{0}" existieren keine Daten. data.player.noData=Fuer Spieler "{0}" existieren keine Daten.
data.player.self=Deine {0} Statistik data.player.self=Deine {0} Statistik
data.player.other={0}-Statistik von {1} data.player.other={0}-Statistik von {1}
data.player.roundswon=Runden gewonnen
data.player.pointsscored=Punkte erspielt
data.player.from=von
data.player.besttime=Bestzeit
data.player.thismonth=Dieser Monat
data.delete.playerNotFound=Ein Spieler mit dem Namen "{0}" konnte nicht gefunden werden. data.delete.playerNotFound=Ein Spieler mit dem Namen "{0}" konnte nicht gefunden werden.
data.delete.deleted=Alle {0}-Statistiken von Spieler "{1}" wurden geloescht. data.delete.deleted=Alle {0}-Statistiken von Spieler "{1}" wurden geloescht.
data.console.nodata=Fuer die Konsole existieren keine Daten.

View file

@ -5,6 +5,10 @@ minecleaner.info.license=License
arena.name.invalid=Invalid arena name. Allowed are letters, numbers and the underscore arena.name.invalid=Invalid arena name. Allowed are letters, numbers and the underscore
arena.name.exists=An arena with this name already exists arena.name.exists=An arena with this name already exists
arena.width.klein=Small
arena.width.mittel=Medium
arena.width.gross=Large
arena.width.experte=Expert
arena.widthindex.invalid=Not a valid Arena WidthIndex arena.widthindex.invalid=Not a valid Arena WidthIndex
arena.widthindex.validOptions=0 (or leave empty) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33 arena.widthindex.validOptions=0 (or leave empty) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33
arena.widthindex.toolarge=Arena WidthIndex must not be greater than 3 arena.widthindex.toolarge=Arena WidthIndex must not be greater than 3
@ -19,6 +23,13 @@ arena.list.none=(none)
data.player.noData=No data exists for player "{0}". data.player.noData=No data exists for player "{0}".
data.player.self=Your {0} statistics data.player.self=Your {0} statistics
data.player.other={0} statistics from {1} data.player.other={0} statistics from {1}
data.player.roundswon=Rounds won
data.player.pointsscored=Points scored
data.player.outof=out of
data.player.besttime=Best time
data.player.thismonth=This month
data.delete.playerNotFound=A player with the name "{0}" could not be found. data.delete.playerNotFound=A player with the name "{0}" could not be found.
data.delete.deleted=All {0} stats of player "{1}" have been deleted. data.delete.deleted=All {0} stats of player "{1}" have been deleted.
data.console.nodata=No data exists for the console.

View file

@ -1,7 +1,7 @@
name: Minecleaner name: Minecleaner
version: '${project.version}-${git.commit.id.abbrev}' version: '${project.version}-${git.commit.id.abbrev}'
author: LunarAkai author: LunarAkai
website: https://github.com/LunarAkai/Minecleaner website: https://git.lunarakai.de/LunarAkai/NewMinecleaner
main: de.lunarakai.minecleaner.MinecleanerPlugin main: de.lunarakai.minecleaner.MinecleanerPlugin
api-version: '1.20' api-version: '1.20'
depend: depend: