Split game settings into submenus, enhance setting GUI

This commit is contained in:
Javi 2017-08-02 00:42:07 +02:00 committed by GitHub
parent c66a2de7bb
commit 5c43ba07ab
5 changed files with 153 additions and 9 deletions

View File

@ -38,6 +38,7 @@ import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.MatchLoader;
import tc.oc.pgm.match.MatchManager;
import tc.oc.pgm.match.MatchPlayer;
import tc.oc.pgm.menu.gui.SettingMenuHelper;
import tc.oc.pgm.pollablemaps.PollableMaps;
import tc.oc.pgm.polls.PollListener;
import tc.oc.pgm.polls.PollManager;
@ -173,6 +174,7 @@ public final class PGM extends JavaPlugin {
navigatorInterface.setOpenButtonSlot(Slot.Hotbar.forPosition(7));
new MainTokenButton();
SettingMenuHelper.initializeSettings();
}
@Override

View File

@ -56,7 +56,7 @@ public class MainMenuInterface extends ChestInterface {
, 15) {
@Override
public void function(Player player) {
player.openInventory(new SettingsInterface(player).getInventory());
player.openInventory(new SettingsTypeInterface(player).getInventory());
}
});

View File

@ -0,0 +1,49 @@
package tc.oc.pgm.menu.gui;
import me.anxuiz.settings.Setting;
import me.anxuiz.settings.bukkit.PlayerSettings;
import tc.oc.commons.bukkit.broadcast.BroadcastSettings;
import tc.oc.commons.bukkit.punishment.PunishmentMessageSetting;
import tc.oc.commons.bukkit.users.JoinMessageSetting;
import tc.oc.commons.bukkit.whisper.WhisperSettings;
import tc.oc.pgm.damage.DamageSettings;
import tc.oc.pgm.death.DeathMessageSetting;
import tc.oc.pgm.picker.PickerSettings;
import tc.oc.pgm.playerstats.StatSettings;
import tc.oc.pgm.settings.ObserverSetting;
import tc.oc.pgm.settings.Settings;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class SettingMenuHelper {
private static Map<Setting, SettingType> settings = new HashMap<>();
public static void initializeSettings() {
Setting[] chat = {DeathMessageSetting.get(), JoinMessageSetting.get(), WhisperSettings.receive(), PunishmentMessageSetting.get(), BroadcastSettings.TIPS};
Setting[] gameplay = {DamageSettings.ATTACK_SPEEDOMETER, DamageSettings.DAMAGE_NUMBERS, DamageSettings.KNOCKBACK_PARTICLES, Settings.BLOOD};
Setting[] misc = {ObserverSetting.get(), PickerSettings.PICKER, Settings.SOUNDS, WhisperSettings.sound(), StatSettings.STATS};
for (Setting s : chat) { settings.put(s,SettingType.CHAT); }
for (Setting s : gameplay) { settings.put(s,SettingType.GAMEPLAY); }
for (Setting s : misc) { settings.put(s,SettingType.MISC); }
}
public static List<Setting> getAllOfType (SettingType settingType) {
return PlayerSettings.getRegistry().getSettings().stream().filter(setting -> getSettingType(setting) == settingType).collect(Collectors.toList());
}
private static SettingType getSettingType(Setting setting) {
if (settings.get(setting) != null) {
return settings.get(setting);
}
return SettingType.MISC;
}
public enum SettingType {
CHAT,GAMEPLAY,MISC
}
}

View File

@ -31,20 +31,19 @@ import java.util.*;
public class SettingsInterface extends SinglePageInterface {
public SettingsInterface(Player player) {
super(player, new ArrayList<>(), 54, "Settings");
SettingMenuHelper.SettingType settingType;
public SettingsInterface(Player player, SettingMenuHelper.SettingType settingType) {
super(player, new ArrayList<>(), 54, settingType.toString() + "Settings");
this.settingType = settingType;
update();
}
@Override
public void setButtons() {
List<Button> buttons = new ArrayList<>();
List<Setting> settings = Lists.newArrayList(PlayerSettings.getRegistry().getSettings());
Collections.sort(settings, new Comparator<Setting>() {
public int compare(Setting s1, Setting s2) {
return s1.getName().compareTo(s2.getName());
}
});
List<Setting> settings = SettingMenuHelper.getAllOfType(settingType);
Collections.sort(settings, (s1, s2) -> s1.getName().compareTo(s2.getName()));
for(Iterator<Setting> it = settings.iterator(); it.hasNext(); ) {
Setting setting = it.next();

View File

@ -0,0 +1,94 @@
package tc.oc.pgm.menu.gui;
import com.google.api.client.util.Lists;
import me.anxuiz.settings.Setting;
import me.anxuiz.settings.SettingManager;
import me.anxuiz.settings.Toggleable;
import me.anxuiz.settings.bukkit.PlayerSettings;
import me.anxuiz.settings.bukkit.plugin.Permissions;
import me.anxuiz.settings.types.BooleanType;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import tc.oc.commons.bukkit.gui.buttons.Button;
import tc.oc.commons.bukkit.gui.buttons.empty.EmptyButton;
import tc.oc.commons.bukkit.gui.interfaces.SinglePageInterface;
import tc.oc.commons.bukkit.tokens.TokenUtil;
import tc.oc.commons.bukkit.util.Constants;
import tc.oc.commons.bukkit.util.ItemCreator;
import tc.oc.pgm.PGM;
import tc.oc.pgm.PGMTranslations;
import tc.oc.pgm.mutation.Mutation;
import tc.oc.pgm.mutation.MutationMatchModule;
import tc.oc.pgm.mutation.command.MutationCommands;
import tc.oc.pgm.picker.PickerSettings;
import tc.oc.pgm.tokens.gui.MainTokenMenu;
import tc.oc.pgm.tokens.gui.MutationConfirmInterface;
import java.util.*;
public class SettingsTypeInterface extends SinglePageInterface {
public SettingsTypeInterface(Player player) {
super(player, new ArrayList<>(), 27, "Setting Types");
update();
}
@Override
public void setButtons() {
List<Button> buttons = new ArrayList<>();
buttons.add(new Button(
new ItemCreator(Material.BOOK_AND_QUILL)
.setName(Constants.PREFIX + "Chat")
, 11) {
@Override
public void function(Player player) {
player.openInventory(new SettingsInterface(player, SettingMenuHelper.SettingType.CHAT).getInventory());
}
});
buttons.add(new Button(
new ItemCreator(Material.DIAMOND_SWORD)
.setName(Constants.PREFIX + "Gameplay")
, 13) {
@Override
public void function(Player player) {
player.openInventory(new SettingsInterface(player, SettingMenuHelper.SettingType.GAMEPLAY).getInventory());
}
});
buttons.add(new Button(
new ItemCreator(Material.SLIME_BALL)
.setName(Constants.PREFIX + "Miscellaneous")
, 15) {
@Override
public void function(Player player) {
player.openInventory(new SettingsInterface(player, SettingMenuHelper.SettingType.MISC).getInventory());
}
});
setButtons(buttons);
}
@Override
public void setDefaultButtons() {
defaultButtons.clear();
defaultButtons.add(new Button(new ItemCreator(Material.WOOL)
.setData(14)
.setName(ChatColor.GREEN + "Go Back"), 22) {
@Override
public void function(Player player) {
player.openInventory(new MainMenuInterface(player).getInventory());
}
});
for (Integer integer : new Integer[]{
0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 12, 14, 16, 17,
18,19, 20, 21, 23, 24, 25, 26}) {
EmptyButton button = new EmptyButton(integer);
defaultButtons.add(button);
}
}
}