This commit is contained in:
BuildTools 2018-08-12 15:41:09 +02:00
parent 15b494b4ba
commit c4abf4ea9e
5 changed files with 157 additions and 168 deletions

View File

@ -8,43 +8,38 @@ import org.bukkit.entity.Player;
public class JeffChestSortCommandExecutor implements CommandExecutor {
JeffChestSortPlugin plugin;
JeffChestSortCommandExecutor(JeffChestSortPlugin plugin)
{
this.plugin = plugin;
}
JeffChestSortCommandExecutor(JeffChestSortPlugin plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] arg3) {
if(!(sender instanceof Player))
{
if (!(sender instanceof Player)) {
return false;
}
if(arg1.getName().equalsIgnoreCase("chestsort"))
{
if ( !(sender instanceof Player)) {
if (arg1.getName().equalsIgnoreCase("chestsort")) {
if (!(sender instanceof Player)) {
sender.sendMessage(plugin.msg.MSG_PLAYERSONLY);
return true;
}
Player p = (Player) sender;
JeffChestSortPlayerSetting setting = plugin.PerPlayerSettings.get(p.getUniqueId().toString());
setting.sortingEnabled = !setting.sortingEnabled;
if(setting.sortingEnabled) {
if (setting.sortingEnabled) {
p.sendMessage(plugin.msg.MSG_ACTIVATED);
} else {
p.sendMessage(plugin.msg.MSG_DEACTIVATED);
}
return true;
}
return false;
}
}

View File

@ -20,138 +20,130 @@ import org.bukkit.inventory.ItemStack;
public class JeffChestSortListener implements Listener {
JeffChestSortPlugin plugin;
JeffChestSortListener(JeffChestSortPlugin plugin){
this.plugin = plugin;
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
UUID uniqueId=event.getPlayer().getUniqueId();
if(!plugin.PerPlayerSettings.containsKey(uniqueId.toString())) {
File playerFile = new File(plugin.getDataFolder() + File.separator + "playerdata" ,event.getPlayer().getUniqueId().toString() + ".yml");
YamlConfiguration playerConfig = YamlConfiguration.loadConfiguration(playerFile);
boolean activeForThisPlayer;
if(!playerFile.exists()) {
activeForThisPlayer = plugin.getConfig().getBoolean("sorting-enabled-by-default");
} else {
activeForThisPlayer = playerConfig.getBoolean("sortingEnabled");
}
JeffChestSortPlayerSetting newSettings = new JeffChestSortPlayerSetting(activeForThisPlayer);
if (!plugin.getConfig().getBoolean("show-message-again-after-logout")) {
newSettings.hasSeenMessage = playerConfig.getBoolean("hasSeenMessage");
}
plugin.PerPlayerSettings.put(uniqueId.toString(),newSettings);
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
UUID uniqueId=event.getPlayer().getUniqueId();
if(plugin.PerPlayerSettings.containsKey(uniqueId.toString())) {
JeffChestSortPlayerSetting setting = plugin.PerPlayerSettings.get(event.getPlayer().getUniqueId().toString());
File playerFile = new File(plugin.getDataFolder() + File.separator + "playerdata" ,event.getPlayer().getUniqueId().toString() + ".yml");
YamlConfiguration playerConfig = YamlConfiguration.loadConfiguration(playerFile);
playerConfig.set("sortingEnabled", setting.sortingEnabled);
playerConfig.set("hasSeenMessage", setting.hasSeenMessage);
try {
playerConfig.save(playerFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JeffChestSortPlugin plugin;
plugin.PerPlayerSettings.remove(uniqueId.toString());
JeffChestSortListener(JeffChestSortPlugin plugin) {
this.plugin = plugin;
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
UUID uniqueId = event.getPlayer().getUniqueId();
if (!plugin.PerPlayerSettings.containsKey(uniqueId.toString())) {
File playerFile = new File(plugin.getDataFolder() + File.separator + "playerdata",
event.getPlayer().getUniqueId().toString() + ".yml");
YamlConfiguration playerConfig = YamlConfiguration.loadConfiguration(playerFile);
boolean activeForThisPlayer;
if (!playerFile.exists()) {
activeForThisPlayer = plugin.getConfig().getBoolean("sorting-enabled-by-default");
} else {
activeForThisPlayer = playerConfig.getBoolean("sortingEnabled");
}
JeffChestSortPlayerSetting newSettings = new JeffChestSortPlayerSetting(activeForThisPlayer);
if (!plugin.getConfig().getBoolean("show-message-again-after-logout")) {
newSettings.hasSeenMessage = playerConfig.getBoolean("hasSeenMessage");
}
plugin.PerPlayerSettings.put(uniqueId.toString(), newSettings);
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
UUID uniqueId = event.getPlayer().getUniqueId();
if (plugin.PerPlayerSettings.containsKey(uniqueId.toString())) {
JeffChestSortPlayerSetting setting = plugin.PerPlayerSettings
.get(event.getPlayer().getUniqueId().toString());
File playerFile = new File(plugin.getDataFolder() + File.separator + "playerdata",
event.getPlayer().getUniqueId().toString() + ".yml");
YamlConfiguration playerConfig = YamlConfiguration.loadConfiguration(playerFile);
playerConfig.set("sortingEnabled", setting.sortingEnabled);
playerConfig.set("hasSeenMessage", setting.hasSeenMessage);
try {
playerConfig.save(playerFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
plugin.PerPlayerSettings.remove(uniqueId.toString());
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
if (!(event.getPlayer() instanceof Player)) {
return;
}
Player p = (Player) event.getPlayer();
JeffChestSortPlayerSetting setting = plugin.PerPlayerSettings.get(p.getUniqueId().toString());
if (!(event.getInventory().getHolder() instanceof Chest)
&& !(event.getInventory().getHolder() instanceof DoubleChest)
&& !(event.getInventory().getHolder() instanceof ShulkerBox)) {
return;
}
if (!plugin.sortingEnabled(p)) {
if (!setting.hasSeenMessage) {
setting.hasSeenMessage = true;
if (plugin.getConfig().getBoolean("show-message-when-using-chest")) {
p.sendMessage(plugin.msg.MSG_COMMANDMESSAGE);
}
}
return;
}
Inventory inv = event.getInventory();
ItemStack[] items = inv.getContents();
event.getInventory().clear();
String[] itemList = new String[inv.getSize()];
int i = 0;
for (ItemStack item : items) {
if (item != null) {
itemList[i] = item.getType().name() + "," + String.valueOf(item.hashCode());
i++;
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event)
{
if(!(event.getPlayer() instanceof Player)) {
return;
// count all items that are not null
int count = 0;
for (String s : itemList) {
if (s != null) {
count++;
}
Player p = (Player) event.getPlayer();
JeffChestSortPlayerSetting setting = plugin.PerPlayerSettings.get(p.getUniqueId().toString());
if(!(event.getInventory().getHolder() instanceof Chest)
&& !(event.getInventory().getHolder() instanceof DoubleChest)
&& !(event.getInventory().getHolder() instanceof ShulkerBox))
{
return;
}
if(!plugin.sortingEnabled(p)) {
if(!setting.hasSeenMessage) {
setting.hasSeenMessage = true;
if(plugin.getConfig().getBoolean("show-message-when-using-chest")) {
//p.sendMessage(JeffChestSortMessages.MSG_COMMANDMESSAGE);
p.sendMessage(plugin.msg.MSG_COMMANDMESSAGE);
}
// create new array with just the size we need
String[] shortenedArray = new String[count];
// fill new array with items
for (int j = 0; j < count; j++) {
shortenedArray[j] = itemList[j];
}
// sort array alphabetically
Arrays.sort(shortenedArray);
// put everything back in the inventory
for (String s : shortenedArray) {
// System.out.println(s);
for (ItemStack item : items) {
if (item != null && s != null) {
if (item.hashCode() == Integer.parseInt(s.split(",")[1])) {
inv.addItem(item);
item = null;
s = null;
}
}
return;
}
Inventory inv = event.getInventory();
ItemStack[] items = inv.getContents();
event.getInventory().clear();
String[] itemList = new String[inv.getSize()];
int i=0;
for(ItemStack item : items)
{
if(item!=null)
{
itemList[i] = item.getType().name() + "," + String.valueOf(item.hashCode());
i++;
}
}
// count all items that are not null
int count = 0;
for(String s: itemList)
{
if(s!=null)
{
count++;
}
}
// create new array with just the size we need
String[] shortenedArray = new String[count];
// fill new array with items
for(int j=0; j < count; j++)
{
shortenedArray[j] = itemList[j];
}
// sort array alphabetically
Arrays.sort(shortenedArray);
// put everything back in the inventory
for(String s : shortenedArray)
{
//System.out.println(s);
for(ItemStack item : items) {
if(item!=null && s != null) {
if(item.hashCode() == Integer.parseInt(s.split(",")[1])) {
inv.addItem(item);
item = null;
s = null;
}
}
}
}
}
}
}

View File

@ -3,20 +3,22 @@ package de.jeffclan.JeffChestSort;
import org.bukkit.ChatColor;
public class JeffChestSortMessages {
JeffChestSortPlugin plugin;
final String MSG_ACTIVATED, MSG_DEACTIVATED, MSG_COMMANDMESSAGE, MSG_PLAYERSONLY;
JeffChestSortMessages(JeffChestSortPlugin plugin) {
this.plugin=plugin;
MSG_ACTIVATED=ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("message-sorting-enabled"));
MSG_DEACTIVATED=ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("message-sorting-disabled"));
MSG_COMMANDMESSAGE=ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("message-when-using-chest"));
MSG_PLAYERSONLY=ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("message-error-players-only"));
this.plugin = plugin;
MSG_ACTIVATED = ChatColor.translateAlternateColorCodes('&',
plugin.getConfig().getString("message-sorting-enabled"));
MSG_DEACTIVATED = ChatColor.translateAlternateColorCodes('&',
plugin.getConfig().getString("message-sorting-disabled"));
MSG_COMMANDMESSAGE = ChatColor.translateAlternateColorCodes('&',
plugin.getConfig().getString("message-when-using-chest"));
MSG_PLAYERSONLY = ChatColor.translateAlternateColorCodes('&',
plugin.getConfig().getString("message-error-players-only"));
}
}

View File

@ -1,15 +1,15 @@
package de.jeffclan.JeffChestSort;
public class JeffChestSortPlayerSetting {
// Sorting enabled for this player?
boolean sortingEnabled;
// Did we already show the message how to activate sorting?
boolean hasSeenMessage = false;
JeffChestSortPlayerSetting(boolean sortingEnabled) {
this.sortingEnabled = sortingEnabled;
}
}

View File

@ -9,29 +9,29 @@ import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class JeffChestSortPlugin extends JavaPlugin {
Map<String, JeffChestSortPlayerSetting> PerPlayerSettings = new HashMap<String, JeffChestSortPlayerSetting>();
FileConfiguration config = getConfig();
JeffChestSortMessages msg;
@Override
public void onEnable() {
createConfig();
msg = new JeffChestSortMessages(this);
getServer().getPluginManager().registerEvents(new JeffChestSortListener(this), this);
JeffChestSortCommandExecutor commandExecutor = new JeffChestSortCommandExecutor(this);
JeffChestSortCommandExecutor commandExecutor = new JeffChestSortCommandExecutor(this);
this.getCommand("chestsort").setExecutor(commandExecutor);
}
public boolean sortingEnabled(Player p) {
return PerPlayerSettings.get(p.getUniqueId().toString()).sortingEnabled;
}
void createConfig() {
this.saveDefaultConfig();
File playerDataFolder = new File(getDataFolder().getPath() + File.separator+"playerdata");
if(!playerDataFolder.exists())
playerDataFolder.mkdir();
File playerDataFolder = new File(getDataFolder().getPath() + File.separator + "playerdata");
if (!playerDataFolder.exists())
playerDataFolder.mkdir();
}
}