- Fixed not being able to rename non-AE items.
- Using correct version number again... - Removed unused methods in Metrics class, reducing jar size by 12.5%.
This commit is contained in:
parent
8eb6f094c8
commit
f1f8607dd4
2
pom.xml
2
pom.xml
@ -3,7 +3,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>nl.pim16aap2</groupId>
|
<groupId>nl.pim16aap2</groupId>
|
||||||
<artifactId>ArmoredElytra</artifactId>
|
<artifactId>ArmoredElytra</artifactId>
|
||||||
<version>2.1.9-SNAPSHOT</version>
|
<version>2.2.1-SNAPSHOT</version>
|
||||||
|
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
@ -26,32 +26,32 @@ import nl.pim16aap2.armoredElytra.util.Update;
|
|||||||
|
|
||||||
public class ArmoredElytra extends JavaPlugin implements Listener
|
public class ArmoredElytra extends JavaPlugin implements Listener
|
||||||
{
|
{
|
||||||
private NBTEditor nbtEditor;
|
private NBTEditor nbtEditor;
|
||||||
private ConfigLoader config;
|
private ConfigLoader config;
|
||||||
|
|
||||||
private String usageDeniedMessage;
|
private String usageDeniedMessage;
|
||||||
private String elytraReceivedMessage;
|
private String elytraReceivedMessage;
|
||||||
private String elytraName;
|
private String elytraName;
|
||||||
private String elytraLore;
|
private String elytraLore;
|
||||||
private boolean upToDate;
|
private boolean upToDate;
|
||||||
private boolean uninstallMode;
|
private boolean uninstallMode;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
{
|
{
|
||||||
// Load the settings from the config file.
|
// Load the settings from the config file.
|
||||||
config = new ConfigLoader(this);
|
config = new ConfigLoader(this);
|
||||||
|
|
||||||
// Replace color codes by the corresponding colors.
|
// Replace color codes by the corresponding colors.
|
||||||
usageDeniedMessage = config.getString("usageDeniedMessage" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
usageDeniedMessage = config.getString("usageDeniedMessage" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
||||||
elytraReceivedMessage = config.getString("elytraReceivedMessage").replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
elytraReceivedMessage = config.getString("elytraReceivedMessage" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
||||||
elytraName = config.getString("elytraName" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
elytraName = config.getString("elytraName" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
||||||
elytraLore = config.getString("elytraLore" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
elytraLore = config.getString("elytraLore" ).replaceAll("&((?i)[0-9a-fk-or])", "\u00A7$1");
|
||||||
|
|
||||||
// Change the string to null if it says "NONE".
|
// Change the string to null if it says "NONE".
|
||||||
usageDeniedMessage = (Objects.equals(usageDeniedMessage, new String("NONE")) ? null : usageDeniedMessage );
|
usageDeniedMessage = (Objects.equals(usageDeniedMessage, new String("NONE")) ? null : usageDeniedMessage );
|
||||||
elytraReceivedMessage = (Objects.equals(elytraReceivedMessage, new String("NONE")) ? null : elytraReceivedMessage);
|
elytraReceivedMessage = (Objects.equals(elytraReceivedMessage, new String("NONE")) ? null : elytraReceivedMessage);
|
||||||
elytraLore = (Objects.equals(elytraLore, new String("NONE")) ? null : elytraLore );
|
elytraLore = (Objects.equals(elytraLore, new String("NONE")) ? null : elytraLore );
|
||||||
|
|
||||||
// Check if the plugin should go into uninstall mode.
|
// Check if the plugin should go into uninstall mode.
|
||||||
uninstallMode = config.getBool("uninstallMode");
|
uninstallMode = config.getBool("uninstallMode");
|
||||||
@ -69,6 +69,7 @@ public class ArmoredElytra extends JavaPlugin implements Listener
|
|||||||
if (updateStatus > 0)
|
if (updateStatus > 0)
|
||||||
{
|
{
|
||||||
// TODO: Insert download link to latest version.
|
// TODO: Insert download link to latest version.
|
||||||
|
// TODO: Use Spiget instead of the unreliable BukkitDev's update stuff?
|
||||||
// TODO: Add auto update option?
|
// TODO: Add auto update option?
|
||||||
|
|
||||||
// Load the loginHandler to show messages to the user when they join.
|
// Load the loginHandler to show messages to the user when they join.
|
||||||
@ -91,13 +92,13 @@ public class ArmoredElytra extends JavaPlugin implements Listener
|
|||||||
// Are stats allowed?
|
// Are stats allowed?
|
||||||
if (config.getBool("allowStats"))
|
if (config.getBool("allowStats"))
|
||||||
{
|
{
|
||||||
myLogger(Level.INFO, "Enabling stats!");
|
myLogger(Level.INFO, "Enabling stats! Thanks, it really helps!");
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
Metrics metrics = new Metrics(this);
|
Metrics metrics = new Metrics(this);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// Y u do dis? :(
|
// Y u do dis? :(
|
||||||
myLogger(Level.INFO, "Stats disabled, not laoding stats :(");
|
myLogger(Level.INFO, "Stats disabled, not laoding stats ::(... Please consider enabling it! I am a simple man, seeing higher user numbers helps me stay motivated!");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,17 +1,13 @@
|
|||||||
package nl.pim16aap2.armoredElytra.handlers;
|
package nl.pim16aap2.armoredElytra.handlers;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryAnvil;
|
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -28,9 +24,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import net.minecraft.server.v1_12_R1.ContainerAnvil;
|
|
||||||
import net.minecraft.server.v1_12_R1.Container;
|
|
||||||
import net.minecraft.server.v1_12_R1.ContainerDispenser;
|
|
||||||
import nl.pim16aap2.armoredElytra.ArmoredElytra;
|
import nl.pim16aap2.armoredElytra.ArmoredElytra;
|
||||||
import nl.pim16aap2.armoredElytra.nms.NBTEditor;
|
import nl.pim16aap2.armoredElytra.nms.NBTEditor;
|
||||||
import nl.pim16aap2.armoredElytra.util.Action;
|
import nl.pim16aap2.armoredElytra.util.Action;
|
||||||
@ -390,8 +383,8 @@ public class EventHandlers implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if either itemA or itemB is unoccupied.
|
// Check if either itemA or itemB is unoccupied.
|
||||||
if (itemA == null || itemB == null)
|
if ((itemA == null || itemB == null) && nbtEditor.getArmorTier(event.getInventory().getItem(2)) != ArmorTier.NONE)
|
||||||
// If Item2 is occupied despite itemA or itemB not being occupied.
|
// If Item2 is occupied despite itemA or itemB not being occupied. (only for armored elytra)/
|
||||||
event.setResult(null);
|
event.setResult(null);
|
||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package nl.pim16aap2.armoredElytra.nms;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
@ -77,7 +78,12 @@ public class NBTEditor_V1_10_R1 implements NBTEditor
|
|||||||
// Get the armor tier of the supplied item.
|
// Get the armor tier of the supplied item.
|
||||||
@Override
|
@Override
|
||||||
public ArmorTier getArmorTier(ItemStack item)
|
public ArmorTier getArmorTier(ItemStack item)
|
||||||
{
|
{
|
||||||
|
if (item == null)
|
||||||
|
return ArmorTier.NONE;
|
||||||
|
if (item.getType() != Material.ELYTRA)
|
||||||
|
return ArmorTier.NONE;
|
||||||
|
|
||||||
// Get the NBT tags from the item.
|
// Get the NBT tags from the item.
|
||||||
NBTTagCompound compound = CraftItemStack.asNMSCopy(item).getTag();
|
NBTTagCompound compound = CraftItemStack.asNMSCopy(item).getTag();
|
||||||
if (compound == null)
|
if (compound == null)
|
||||||
|
@ -78,7 +78,9 @@ public class NBTEditor_V1_11_R1 implements NBTEditor
|
|||||||
// Get the armor tier of the supplied item.
|
// Get the armor tier of the supplied item.
|
||||||
@Override
|
@Override
|
||||||
public ArmorTier getArmorTier(ItemStack item)
|
public ArmorTier getArmorTier(ItemStack item)
|
||||||
{
|
{
|
||||||
|
if (item == null)
|
||||||
|
return ArmorTier.NONE;
|
||||||
if (item.getType() != Material.ELYTRA)
|
if (item.getType() != Material.ELYTRA)
|
||||||
return ArmorTier.NONE;
|
return ArmorTier.NONE;
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package nl.pim16aap2.armoredElytra.nms;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
@ -77,7 +78,12 @@ public class NBTEditor_V1_12_R1 implements NBTEditor
|
|||||||
// Get the armor tier of the supplied item.
|
// Get the armor tier of the supplied item.
|
||||||
@Override
|
@Override
|
||||||
public ArmorTier getArmorTier(ItemStack item)
|
public ArmorTier getArmorTier(ItemStack item)
|
||||||
{
|
{
|
||||||
|
if (item == null)
|
||||||
|
return ArmorTier.NONE;
|
||||||
|
if (item.getType() != Material.ELYTRA)
|
||||||
|
return ArmorTier.NONE;
|
||||||
|
|
||||||
// Get the NBT tags from the item.
|
// Get the NBT tags from the item.
|
||||||
NBTTagCompound compound = CraftItemStack.asNMSCopy(item).getTag();
|
NBTTagCompound compound = CraftItemStack.asNMSCopy(item).getTag();
|
||||||
if (compound == null)
|
if (compound == null)
|
||||||
|
@ -20,11 +20,9 @@ import java.net.URL;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.zip.GZIPOutputStream;
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
@ -108,35 +106,21 @@ public class Metrics {
|
|||||||
// Load the data
|
// Load the data
|
||||||
serverUUID = config.getString("serverUuid");
|
serverUUID = config.getString("serverUuid");
|
||||||
logFailedRequests = config.getBoolean("logFailedRequests", false);
|
logFailedRequests = config.getBoolean("logFailedRequests", false);
|
||||||
if (config.getBoolean("enabled", true)) {
|
boolean found = false;
|
||||||
boolean found = false;
|
// Search for all other bStats Metrics classes to see if we are the first one
|
||||||
// Search for all other bStats Metrics classes to see if we are the first one
|
for (Class<?> service : Bukkit.getServicesManager().getKnownServices()) {
|
||||||
for (Class<?> service : Bukkit.getServicesManager().getKnownServices()) {
|
try {
|
||||||
try {
|
service.getField("B_STATS_VERSION"); // Our identifier :)
|
||||||
service.getField("B_STATS_VERSION"); // Our identifier :)
|
found = true; // We aren't the first
|
||||||
found = true; // We aren't the first
|
break;
|
||||||
break;
|
} catch (NoSuchFieldException ignored) { }
|
||||||
} catch (NoSuchFieldException ignored) { }
|
|
||||||
}
|
|
||||||
// Register our service
|
|
||||||
Bukkit.getServicesManager().register(Metrics.class, this, plugin, ServicePriority.Normal);
|
|
||||||
if (!found) {
|
|
||||||
// We are the first!
|
|
||||||
startSubmitting();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
// Register our service
|
||||||
|
Bukkit.getServicesManager().register(Metrics.class, this, plugin, ServicePriority.Normal);
|
||||||
/**
|
if (!found) {
|
||||||
* Adds a custom chart.
|
// We are the first!
|
||||||
*
|
startSubmitting();
|
||||||
* @param chart The chart to add.
|
|
||||||
*/
|
|
||||||
public void addCustomChart(CustomChart chart) {
|
|
||||||
if (chart == null) {
|
|
||||||
throw new IllegalArgumentException("Chart cannot be null!");
|
|
||||||
}
|
}
|
||||||
charts.add(chart);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -376,303 +360,6 @@ public class Metrics {
|
|||||||
}
|
}
|
||||||
return chart;
|
return chart;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract JSONObject getChartData() throws Exception;
|
protected abstract JSONObject getChartData() throws Exception;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom simple pie.
|
|
||||||
*/
|
|
||||||
public static class SimplePie extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<String> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public SimplePie(String chartId, Callable<String> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
protected JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
String value = callable.call();
|
|
||||||
if (value == null || value.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.put("value", value);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom advanced pie.
|
|
||||||
*/
|
|
||||||
public static class AdvancedPie extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Integer>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public AdvancedPie(String chartId, Callable<Map<String, Integer>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
protected JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
JSONObject values = new JSONObject();
|
|
||||||
Map<String, Integer> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
|
||||||
if (entry.getValue() == 0) {
|
|
||||||
continue; // Skip this invalid
|
|
||||||
}
|
|
||||||
allSkipped = false;
|
|
||||||
values.put(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
if (allSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.put("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom drilldown pie.
|
|
||||||
*/
|
|
||||||
public static class DrilldownPie extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Map<String, Integer>>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public DrilldownPie(String chartId, Callable<Map<String, Map<String, Integer>>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
public JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
JSONObject values = new JSONObject();
|
|
||||||
Map<String, Map<String, Integer>> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean reallyAllSkipped = true;
|
|
||||||
for (Map.Entry<String, Map<String, Integer>> entryValues : map.entrySet()) {
|
|
||||||
JSONObject value = new JSONObject();
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, Integer> valueEntry : map.get(entryValues.getKey()).entrySet()) {
|
|
||||||
value.put(valueEntry.getKey(), valueEntry.getValue());
|
|
||||||
allSkipped = false;
|
|
||||||
}
|
|
||||||
if (!allSkipped) {
|
|
||||||
reallyAllSkipped = false;
|
|
||||||
values.put(entryValues.getKey(), value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (reallyAllSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.put("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom single line chart.
|
|
||||||
*/
|
|
||||||
public static class SingleLineChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Integer> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public SingleLineChart(String chartId, Callable<Integer> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
protected JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
int value = callable.call();
|
|
||||||
if (value == 0) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.put("value", value);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom multi line chart.
|
|
||||||
*/
|
|
||||||
public static class MultiLineChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Integer>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public MultiLineChart(String chartId, Callable<Map<String, Integer>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
protected JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
JSONObject values = new JSONObject();
|
|
||||||
Map<String, Integer> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
|
||||||
if (entry.getValue() == 0) {
|
|
||||||
continue; // Skip this invalid
|
|
||||||
}
|
|
||||||
allSkipped = false;
|
|
||||||
values.put(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
if (allSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.put("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom simple bar chart.
|
|
||||||
*/
|
|
||||||
public static class SimpleBarChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Integer>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public SimpleBarChart(String chartId, Callable<Map<String, Integer>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
protected JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
JSONObject values = new JSONObject();
|
|
||||||
Map<String, Integer> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
|
||||||
JSONArray categoryValues = new JSONArray();
|
|
||||||
categoryValues.add(entry.getValue());
|
|
||||||
values.put(entry.getKey(), categoryValues);
|
|
||||||
}
|
|
||||||
data.put("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom advanced bar chart.
|
|
||||||
*/
|
|
||||||
public static class AdvancedBarChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, int[]>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public AdvancedBarChart(String chartId, Callable<Map<String, int[]>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
|
||||||
protected JSONObject getChartData() throws Exception {
|
|
||||||
JSONObject data = new JSONObject();
|
|
||||||
JSONObject values = new JSONObject();
|
|
||||||
Map<String, int[]> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, int[]> entry : map.entrySet()) {
|
|
||||||
if (entry.getValue().length == 0) {
|
|
||||||
continue; // Skip this invalid
|
|
||||||
}
|
|
||||||
allSkipped = false;
|
|
||||||
JSONArray categoryValues = new JSONArray();
|
|
||||||
for (int categoryValue : entry.getValue()) {
|
|
||||||
categoryValues.add(categoryValue);
|
|
||||||
}
|
|
||||||
values.put(entry.getKey(), categoryValues);
|
|
||||||
}
|
|
||||||
if (allSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.put("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: ArmoredElytra
|
name: ArmoredElytra
|
||||||
main: nl.pim16aap2.armoredElytra.ArmoredElytra
|
main: nl.pim16aap2.armoredElytra.ArmoredElytra
|
||||||
version: 2.1.9
|
version: 2.2.1
|
||||||
author: Pim
|
author: Pim
|
||||||
commands:
|
commands:
|
||||||
ArmoredElytra:
|
ArmoredElytra:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user