mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 07:06:44 +01:00
Plot analysis, Inventory GUI API, rating system
This commit is contained in:
parent
a81ea1726b
commit
8e499dffb2
@ -8,7 +8,7 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>PlotSquared</artifactId>
|
<artifactId>PlotSquared</artifactId>
|
||||||
<version>2.11.25</version>
|
<version>2.11.27</version>
|
||||||
<name>PlotSquared</name>
|
<name>PlotSquared</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<build>
|
<build>
|
||||||
|
@ -112,6 +112,7 @@ import com.intellectualcrafters.plot.util.ChunkManager;
|
|||||||
import com.intellectualcrafters.plot.util.ConsoleColors;
|
import com.intellectualcrafters.plot.util.ConsoleColors;
|
||||||
import com.intellectualcrafters.plot.util.EconHandler;
|
import com.intellectualcrafters.plot.util.EconHandler;
|
||||||
import com.intellectualcrafters.plot.util.EventUtil;
|
import com.intellectualcrafters.plot.util.EventUtil;
|
||||||
|
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||||
import com.intellectualcrafters.plot.util.MainUtil;
|
import com.intellectualcrafters.plot.util.MainUtil;
|
||||||
import com.intellectualcrafters.plot.util.PlayerManager;
|
import com.intellectualcrafters.plot.util.PlayerManager;
|
||||||
import com.intellectualcrafters.plot.util.SetupUtils;
|
import com.intellectualcrafters.plot.util.SetupUtils;
|
||||||
@ -119,6 +120,7 @@ import com.intellectualcrafters.plot.util.TaskManager;
|
|||||||
import com.intellectualcrafters.plot.util.bukkit.BukkitChunkManager;
|
import com.intellectualcrafters.plot.util.bukkit.BukkitChunkManager;
|
||||||
import com.intellectualcrafters.plot.util.bukkit.BukkitEconHandler;
|
import com.intellectualcrafters.plot.util.bukkit.BukkitEconHandler;
|
||||||
import com.intellectualcrafters.plot.util.bukkit.BukkitEventUtil;
|
import com.intellectualcrafters.plot.util.bukkit.BukkitEventUtil;
|
||||||
|
import com.intellectualcrafters.plot.util.bukkit.BukkitInventoryUtil;
|
||||||
import com.intellectualcrafters.plot.util.bukkit.BukkitPlayerManager;
|
import com.intellectualcrafters.plot.util.bukkit.BukkitPlayerManager;
|
||||||
import com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager;
|
import com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager;
|
||||||
import com.intellectualcrafters.plot.util.bukkit.BukkitSetupUtils;
|
import com.intellectualcrafters.plot.util.bukkit.BukkitSetupUtils;
|
||||||
@ -579,4 +581,9 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
|
|||||||
public PlayerManager initPlayerManager() {
|
public PlayerManager initPlayerManager() {
|
||||||
return new BukkitPlayerManager();
|
return new BukkitPlayerManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InventoryUtil initInventoryUtil() {
|
||||||
|
return new BukkitInventoryUtil();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.intellectualcrafters.plot.util.BlockManager;
|
|||||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||||
import com.intellectualcrafters.plot.util.EconHandler;
|
import com.intellectualcrafters.plot.util.EconHandler;
|
||||||
import com.intellectualcrafters.plot.util.EventUtil;
|
import com.intellectualcrafters.plot.util.EventUtil;
|
||||||
|
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||||
import com.intellectualcrafters.plot.util.PlayerManager;
|
import com.intellectualcrafters.plot.util.PlayerManager;
|
||||||
import com.intellectualcrafters.plot.util.SetupUtils;
|
import com.intellectualcrafters.plot.util.SetupUtils;
|
||||||
import com.intellectualcrafters.plot.util.TaskManager;
|
import com.intellectualcrafters.plot.util.TaskManager;
|
||||||
@ -61,6 +62,8 @@ public interface IPlotMain {
|
|||||||
|
|
||||||
public UUIDWrapper initUUIDHandler();
|
public UUIDWrapper initUUIDHandler();
|
||||||
|
|
||||||
|
public InventoryUtil initInventoryUtil();
|
||||||
|
|
||||||
public boolean initPlotMeConverter();
|
public boolean initPlotMeConverter();
|
||||||
|
|
||||||
public void unregister(PlotPlayer player);
|
public void unregister(PlotPlayer player);
|
||||||
|
@ -62,6 +62,7 @@ import com.intellectualcrafters.plot.util.ClusterManager;
|
|||||||
import com.intellectualcrafters.plot.util.EconHandler;
|
import com.intellectualcrafters.plot.util.EconHandler;
|
||||||
import com.intellectualcrafters.plot.util.EventUtil;
|
import com.intellectualcrafters.plot.util.EventUtil;
|
||||||
import com.intellectualcrafters.plot.util.ExpireManager;
|
import com.intellectualcrafters.plot.util.ExpireManager;
|
||||||
|
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||||
import com.intellectualcrafters.plot.util.Logger;
|
import com.intellectualcrafters.plot.util.Logger;
|
||||||
import com.intellectualcrafters.plot.util.Logger.LogLevel;
|
import com.intellectualcrafters.plot.util.Logger.LogLevel;
|
||||||
import com.intellectualcrafters.plot.util.MainUtil;
|
import com.intellectualcrafters.plot.util.MainUtil;
|
||||||
@ -555,6 +556,8 @@ public class PlotSquared {
|
|||||||
EventUtil.manager = IMP.initEventUtil();
|
EventUtil.manager = IMP.initEventUtil();
|
||||||
// create Hybrid utility class
|
// create Hybrid utility class
|
||||||
HybridUtils.manager = IMP.initHybridUtils();
|
HybridUtils.manager = IMP.initHybridUtils();
|
||||||
|
// Inventory utility class
|
||||||
|
InventoryUtil.manager = IMP.initInventoryUtil();
|
||||||
// create setup util class
|
// create setup util class
|
||||||
SetupUtils.manager = IMP.initSetupUtils();
|
SetupUtils.manager = IMP.initSetupUtils();
|
||||||
// Set block
|
// Set block
|
||||||
@ -720,6 +723,7 @@ public class PlotSquared {
|
|||||||
FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.UnsignedIntegerValue()));
|
FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.UnsignedIntegerValue()));
|
||||||
}
|
}
|
||||||
FlagManager.addFlag(new AbstractFlag("modified-blocks", new FlagValue.IntegerValue()), true);
|
FlagManager.addFlag(new AbstractFlag("modified-blocks", new FlagValue.IntegerValue()), true);
|
||||||
|
FlagManager.addFlag(new AbstractFlag("analysis", new FlagValue.DoubleListValue()), true);
|
||||||
FlagManager.addFlag(new AbstractFlag("disable-physics", new FlagValue.BooleanValue()));
|
FlagManager.addFlag(new AbstractFlag("disable-physics", new FlagValue.BooleanValue()));
|
||||||
FlagManager.addFlag(new AbstractFlag("fly", new FlagValue.BooleanValue()));
|
FlagManager.addFlag(new AbstractFlag("fly", new FlagValue.BooleanValue()));
|
||||||
FlagManager.addFlag(new AbstractFlag("explosion", new FlagValue.BooleanValue()));
|
FlagManager.addFlag(new AbstractFlag("explosion", new FlagValue.BooleanValue()));
|
||||||
@ -925,6 +929,10 @@ public class PlotSquared {
|
|||||||
Settings.PERMISSION_CACHING = config.getBoolean("cache.permissions");
|
Settings.PERMISSION_CACHING = config.getBoolean("cache.permissions");
|
||||||
Settings.CACHE_RATINGS = config.getBoolean("cache.ratings");
|
Settings.CACHE_RATINGS = config.getBoolean("cache.ratings");
|
||||||
|
|
||||||
|
// Rating system
|
||||||
|
Settings.RATING_CATEGORIES = config.getStringList("ratings.categories");
|
||||||
|
|
||||||
|
|
||||||
// Titles
|
// Titles
|
||||||
Settings.TITLES = config.getBoolean("titles");
|
Settings.TITLES = config.getBoolean("titles");
|
||||||
|
|
||||||
|
@ -35,7 +35,10 @@ import org.bukkit.Bukkit;
|
|||||||
|
|
||||||
import com.intellectualcrafters.plot.PlotSquared;
|
import com.intellectualcrafters.plot.PlotSquared;
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
|
import com.intellectualcrafters.plot.flag.Flag;
|
||||||
import com.intellectualcrafters.plot.flag.FlagManager;
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||||
|
import com.intellectualcrafters.plot.flag.FlagValue;
|
||||||
|
import com.intellectualcrafters.plot.flag.FlagValue.IntegerListValue;
|
||||||
import com.intellectualcrafters.plot.generator.BukkitHybridUtils;
|
import com.intellectualcrafters.plot.generator.BukkitHybridUtils;
|
||||||
import com.intellectualcrafters.plot.generator.HybridUtils;
|
import com.intellectualcrafters.plot.generator.HybridUtils;
|
||||||
import com.intellectualcrafters.plot.object.ChunkLoc;
|
import com.intellectualcrafters.plot.object.ChunkLoc;
|
||||||
@ -62,23 +65,20 @@ public class DebugExec extends SubCommand {
|
|||||||
final String arg = args[0].toLowerCase();
|
final String arg = args[0].toLowerCase();
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
case "analyze": {
|
case "analyze": {
|
||||||
Plot plot = MainUtil.getPlot(player.getLocation());
|
final Plot plot = MainUtil.getPlot(player.getLocation());
|
||||||
HybridUtils.manager.analyzePlot(plot, new RunnableVal<PlotAnalysis>() {
|
HybridUtils.manager.analyzePlot(plot, new RunnableVal<PlotAnalysis>() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
System.out.print("changes_sd: " + this.value.changes_sd);
|
List<Double> result = new ArrayList<>();
|
||||||
System.out.print("changes_total: " + this.value.changes_total);
|
result.add((double) (Math.round(value.air * 100) / 100d));
|
||||||
System.out.print("data_sd: " + this.value.data_sd);
|
result.add((double) (Math.round(value.changes * 100) / 100d));
|
||||||
System.out.print("data_total: " + this.value.data_total);
|
result.add((double) (Math.round(value.complexity * 100) / 100d));
|
||||||
System.out.print("height_sd: " + this.value.height_sd);
|
result.add((double) (Math.round(value.data * 100) / 100d));
|
||||||
System.out.print("height_total: " + this.value.height_total);
|
result.add((double) (Math.round(value.faces * 100) / 100d));
|
||||||
System.out.print("rotations_sd: " + this.value.rotations_sd);
|
result.add((double) (Math.round(value.air * 100) / 100d));
|
||||||
System.out.print("rotations_total: " + this.value.rotations_total);
|
result.add((double) (Math.round(value.variety * 100) / 100d));
|
||||||
System.out.print("uniformity_sd: " + this.value.uniformity_sd);
|
Flag flag = new Flag(FlagManager.getFlag("analysis"), result);
|
||||||
System.out.print("variety_sd: " + this.value.variety_sd);
|
FlagManager.addPlotFlag(plot, flag);
|
||||||
System.out.print("variety_total: " + this.value.variety_total);
|
|
||||||
System.out.print("verticies_sd: " + this.value.verticies_sd);
|
|
||||||
System.out.print("verticies_total: " + this.value.verticies_total);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
|
@ -30,6 +30,7 @@ import org.apache.commons.lang.StringUtils;
|
|||||||
|
|
||||||
import com.intellectualcrafters.plot.PlotSquared;
|
import com.intellectualcrafters.plot.PlotSquared;
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
|
import com.intellectualcrafters.plot.config.Settings;
|
||||||
import com.intellectualcrafters.plot.database.DBFunc;
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
import com.intellectualcrafters.plot.flag.FlagManager;
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||||
import com.intellectualcrafters.plot.object.InfoInventory;
|
import com.intellectualcrafters.plot.object.InfoInventory;
|
||||||
@ -55,6 +56,7 @@ public class Info extends SubCommand {
|
|||||||
@Override
|
@Override
|
||||||
public boolean execute(final PlotPlayer player, String... args) {
|
public boolean execute(final PlotPlayer player, String... args) {
|
||||||
String arg = null;
|
String arg = null;
|
||||||
|
Plot plot;
|
||||||
if (args.length > 0) arg = args[0] + "";
|
if (args.length > 0) arg = args[0] + "";
|
||||||
if (arg != null) {
|
if (arg != null) {
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
@ -69,10 +71,27 @@ public class Info extends SubCommand {
|
|||||||
case "members":
|
case "members":
|
||||||
case "owner":
|
case "owner":
|
||||||
case "rating":
|
case "rating":
|
||||||
|
plot = MainUtil.getPlotFromString(player, null, player == null);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("CHECKING: " + arg);
|
||||||
|
plot = MainUtil.getPlotFromString(player, arg, player == null);
|
||||||
|
System.out.print(plot);
|
||||||
|
if (args.length == 2) {
|
||||||
|
arg = args[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
arg = null;
|
arg = null;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plot = MainUtil.getPlotFromString(player, null, player == null);
|
||||||
|
}
|
||||||
|
if (plot == null && arg != null) {
|
||||||
|
plot = MainUtil.getPlotFromString(player, null, player == null);
|
||||||
}
|
}
|
||||||
Plot plot = MainUtil.getPlotFromString(player, arg, player == null);
|
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return false;
|
return false;
|
||||||
@ -113,14 +132,17 @@ public class Info extends SubCommand {
|
|||||||
owner = getPlayerList(plot.getOwners());
|
owner = getPlayerList(plot.getOwners());
|
||||||
}
|
}
|
||||||
String info = C.PLOT_INFO.s();
|
String info = C.PLOT_INFO.s();
|
||||||
if (args.length == 1) {
|
if (arg != null) {
|
||||||
info = getCaption(args[0].toLowerCase());
|
info = getCaption(arg);
|
||||||
if (info == null) {
|
if (info == null) {
|
||||||
MainUtil.sendMessage(player, "&6Categories&7: &amembers&7, &aalias&7, &abiome&7, &adenied&7, &aflags&7, &aid&7, &asize&7, &atrusted&7, &aowner&7, &arating");
|
MainUtil.sendMessage(player, "&6Categories&7: &amembers&7, &aalias&7, &abiome&7, &adenied&7, &aflags&7, &aid&7, &asize&7, &atrusted&7, &aowner&7, &arating");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
formatAndSend(info, plot.world, plot, player, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
formatAndSend(info, plot.world, plot, player, false);
|
||||||
}
|
}
|
||||||
formatAndSend(info, plot.world, plot, player);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +173,7 @@ public class Info extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void formatAndSend(String info, final String world, final Plot plot, final PlotPlayer player) {
|
private void formatAndSend(String info, final String world, final Plot plot, final PlotPlayer player, final boolean full) {
|
||||||
final PlotId id = plot.id;
|
final PlotId id = plot.id;
|
||||||
final PlotId id2 = MainUtil.getTopPlot(plot).id;
|
final PlotId id2 = MainUtil.getTopPlot(plot).id;
|
||||||
final int num = MainUtil.getPlotSelectionIds(id, id2).size();
|
final int num = MainUtil.getPlotSelectionIds(id, id2).size();
|
||||||
@ -191,7 +213,24 @@ public class Info extends SubCommand {
|
|||||||
TaskManager.runTaskAsync(new Runnable() {
|
TaskManager.runTaskAsync(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
String info = newInfo.replaceAll("%rating%", String.format("%.1f", MainUtil.getAverageRating(plot)));
|
int max = 10;
|
||||||
|
if (Settings.RATING_CATEGORIES != null && Settings.RATING_CATEGORIES.size() > 0) {
|
||||||
|
max = 8;
|
||||||
|
}
|
||||||
|
String info;
|
||||||
|
if (full && Settings.RATING_CATEGORIES != null && Settings.RATING_CATEGORIES.size() > 1) {
|
||||||
|
String rating = "";
|
||||||
|
String prefix = "";
|
||||||
|
double[] ratings = MainUtil.getAverageRatings(plot);
|
||||||
|
for (int i = 0; i < ratings.length; i++) {
|
||||||
|
rating += prefix + Settings.RATING_CATEGORIES.get(i) + "=" + String.format("%.1f", ratings[i]);
|
||||||
|
prefix = ",";
|
||||||
|
}
|
||||||
|
info = newInfo.replaceAll("%rating%", rating);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info = newInfo.replaceAll("%rating%", String.format("%.1f", MainUtil.getAverageRating(plot)) + "/" + max);
|
||||||
|
}
|
||||||
MainUtil.sendMessage(player, C.PLOT_INFO_HEADER);
|
MainUtil.sendMessage(player, C.PLOT_INFO_HEADER);
|
||||||
MainUtil.sendMessage(player, info, false);
|
MainUtil.sendMessage(player, info, false);
|
||||||
}
|
}
|
||||||
|
@ -20,19 +20,17 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
package com.intellectualcrafters.plot.commands;
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
import com.intellectualcrafters.plot.listeners.PlotPlusListener;
|
import com.intellectualcrafters.plot.flag.Flag;
|
||||||
import com.intellectualcrafters.plot.object.BukkitPlayer;
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||||
|
import com.intellectualcrafters.plot.listeners.PlotListener;
|
||||||
import com.intellectualcrafters.plot.object.Location;
|
import com.intellectualcrafters.plot.object.Location;
|
||||||
import com.intellectualcrafters.plot.object.Plot;
|
import com.intellectualcrafters.plot.object.Plot;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotInventory;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotItemStack;
|
||||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||||
|
import com.intellectualcrafters.plot.util.BlockManager;
|
||||||
import com.intellectualcrafters.plot.util.MainUtil;
|
import com.intellectualcrafters.plot.util.MainUtil;
|
||||||
|
|
||||||
public class MusicSubcommand extends SubCommand {
|
public class MusicSubcommand extends SubCommand {
|
||||||
@ -51,17 +49,24 @@ public class MusicSubcommand extends SubCommand {
|
|||||||
sendMessage(player, C.NO_PLOT_PERMS);
|
sendMessage(player, C.NO_PLOT_PERMS);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
final org.bukkit.inventory.Inventory inventory = Bukkit.createInventory(null, 9, ChatColor.RED + "Plot Jukebox");
|
PlotInventory inv = new PlotInventory(player, 2, "Plot Jukebox") {
|
||||||
for (final PlotPlusListener.RecordMeta meta : PlotPlusListener.RecordMeta.metaList) {
|
public boolean onClick(int index) {
|
||||||
final ItemStack stack = new ItemStack(meta.getMaterial());
|
PlotItemStack item = getItem(index);
|
||||||
final ItemMeta itemMeta = stack.getItemMeta();
|
FlagManager.addPlotFlag(plot, new Flag(FlagManager.getFlag("music"), item.id));
|
||||||
itemMeta.setDisplayName(ChatColor.GOLD + meta.toString());
|
PlotListener.manager.plotEntry(player, plot);
|
||||||
itemMeta.setLore(Arrays.asList(ChatColor.GRAY + "Click to play the record"));
|
close();
|
||||||
stack.setItemMeta(itemMeta);
|
return false;
|
||||||
inventory.addItem(stack);
|
|
||||||
}
|
}
|
||||||
// FIXME unchecked casting
|
};
|
||||||
((BukkitPlayer) player).player.openInventory(inventory);
|
int index = 0;
|
||||||
|
for (int i = 2256; i < 2268; i++) {
|
||||||
|
String name = "&r&6" + BlockManager.manager.getClosestMatchingName(new PlotBlock((short) i, (byte) 0));
|
||||||
|
String[] lore = {"&r&aClick to play!"};
|
||||||
|
PlotItemStack item = new PlotItemStack(i, (byte) 0, 1, name, lore);
|
||||||
|
inv.setItem(index, item);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
inv.openInventory();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,13 +29,22 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.commons.lang.mutable.MutableInt;
|
||||||
|
|
||||||
import com.intellectualcrafters.plot.PlotSquared;
|
import com.intellectualcrafters.plot.PlotSquared;
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
|
import com.intellectualcrafters.plot.config.Settings;
|
||||||
import com.intellectualcrafters.plot.database.DBFunc;
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.flag.Flag;
|
||||||
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||||
|
import com.intellectualcrafters.plot.listeners.PlotListener;
|
||||||
import com.intellectualcrafters.plot.object.Location;
|
import com.intellectualcrafters.plot.object.Location;
|
||||||
import com.intellectualcrafters.plot.object.Plot;
|
import com.intellectualcrafters.plot.object.Plot;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotInventory;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotItemStack;
|
||||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||||
|
import com.intellectualcrafters.plot.util.BlockManager;
|
||||||
import com.intellectualcrafters.plot.util.MainUtil;
|
import com.intellectualcrafters.plot.util.MainUtil;
|
||||||
import com.intellectualcrafters.plot.util.TaskManager;
|
import com.intellectualcrafters.plot.util.TaskManager;
|
||||||
|
|
||||||
@ -49,27 +58,9 @@ public class Rate extends SubCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(final PlotPlayer plr, final String... args) {
|
public boolean execute(final PlotPlayer player, final String... args) {
|
||||||
if (args.length < 1) {
|
if (args.length == 1) {
|
||||||
sendMessage(plr, C.RATING_NOT_VALID);
|
if (args[0].equalsIgnoreCase("next")) {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
final Location loc = plr.getLocation();
|
|
||||||
final Plot plot = MainUtil.getPlot(loc);
|
|
||||||
if (plot == null) {
|
|
||||||
return !sendMessage(plr, C.NOT_IN_PLOT);
|
|
||||||
}
|
|
||||||
if (!plot.hasOwner()) {
|
|
||||||
sendMessage(plr, C.RATING_NOT_OWNED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (plot.isOwner(plr.getUUID())) {
|
|
||||||
sendMessage(plr, C.RATING_NOT_YOUR_OWN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
final String arg = args[0];
|
|
||||||
|
|
||||||
if (arg.equalsIgnoreCase("next")) {
|
|
||||||
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.getPlots());
|
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.getPlots());
|
||||||
Collections.sort(plots, new Comparator<Plot>() {
|
Collections.sort(plots, new Comparator<Plot>() {
|
||||||
@Override
|
@Override
|
||||||
@ -89,41 +80,116 @@ public class Rate extends SubCommand {
|
|||||||
return v2 - v1;
|
return v2 - v1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
UUID uuid = plr.getUUID();
|
UUID uuid = player.getUUID();
|
||||||
for (Plot p : plots) {
|
for (Plot p : plots) {
|
||||||
if (plot.settings.ratings == null || !plot.settings.ratings.containsKey(uuid)) {
|
if (p.settings.ratings == null || !p.settings.ratings.containsKey(uuid)) {
|
||||||
MainUtil.teleportPlayer(plr, plr.getLocation(), p);
|
MainUtil.teleportPlayer(player, player.getLocation(), p);
|
||||||
MainUtil.sendMessage(plr, C.RATE_THIS);
|
MainUtil.sendMessage(player, C.RATE_THIS);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MainUtil.sendMessage(plr, C.FOUND_NO_PLOTS);
|
MainUtil.sendMessage(player, C.FOUND_NO_PLOTS);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
final Location loc = player.getLocation();
|
||||||
|
final Plot plot = MainUtil.getPlot(loc);
|
||||||
|
if (plot == null) {
|
||||||
|
return !sendMessage(player, C.NOT_IN_PLOT);
|
||||||
|
}
|
||||||
|
if (!plot.hasOwner()) {
|
||||||
|
sendMessage(player, C.RATING_NOT_OWNED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (plot.isOwner(player.getUUID())) {
|
||||||
|
sendMessage(player, C.RATING_NOT_YOUR_OWN);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (Settings.RATING_CATEGORIES != null && Settings.RATING_CATEGORIES.size() != 0) {
|
||||||
|
final Runnable run = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (plot.settings.ratings.containsKey(player.getUUID())) {
|
||||||
|
sendMessage(player, C.RATING_ALREADY_EXISTS, plot.getId().toString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final MutableInt index = new MutableInt(0);
|
||||||
|
final MutableInt rating = new MutableInt(0);
|
||||||
|
String title = Settings.RATING_CATEGORIES.get(0);
|
||||||
|
PlotInventory inventory = new PlotInventory(player, 1, title) {
|
||||||
|
public boolean onClick(int i) {
|
||||||
|
rating.add((i + 1) * Math.pow(10, index.intValue()));
|
||||||
|
index.increment();
|
||||||
|
if (index.intValue() >= Settings.RATING_CATEGORIES.size()) {
|
||||||
|
close();
|
||||||
|
// set rating!
|
||||||
|
plot.settings.ratings.put(player.getUUID(), rating.intValue());
|
||||||
|
DBFunc.setRating(plot, player.getUUID(), rating.intValue());
|
||||||
|
sendMessage(player, C.RATING_APPLIED, plot.getId().toString());
|
||||||
|
sendMessage(player, C.RATING_APPLIED, plot.getId().toString());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
setTitle(Settings.RATING_CATEGORIES.get(index.intValue()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
inventory.setItem(0, new PlotItemStack(35, (short) 12, 0, "0/8", null));
|
||||||
|
inventory.setItem(1, new PlotItemStack(35, (short) 14, 1, "1/8", null));
|
||||||
|
inventory.setItem(2, new PlotItemStack(35, (short) 1, 2, "2/8", null));
|
||||||
|
inventory.setItem(3, new PlotItemStack(35, (short) 4, 3, "3/8", null));
|
||||||
|
inventory.setItem(4, new PlotItemStack(35, (short) 5, 4, "4/8", null));
|
||||||
|
inventory.setItem(5, new PlotItemStack(35, (short) 9, 5, "5/8", null));
|
||||||
|
inventory.setItem(6, new PlotItemStack(35, (short) 11, 6, "6/8", null));
|
||||||
|
inventory.setItem(7, new PlotItemStack(35, (short) 10, 7, "7/8", null));
|
||||||
|
inventory.setItem(8, new PlotItemStack(35, (short) 2, 8, "8/8", null));
|
||||||
|
inventory.openInventory();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (plot.settings.ratings == null) {
|
||||||
|
TaskManager.runTaskAsync(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
plot.settings.ratings = DBFunc.getRatings(plot);
|
||||||
|
run.run();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
run.run();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (args.length < 1) {
|
||||||
|
sendMessage(player, C.RATING_NOT_VALID);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
final String arg = args[0];
|
||||||
|
|
||||||
|
if (arg.equalsIgnoreCase("next")) {
|
||||||
|
|
||||||
|
}
|
||||||
final int rating;
|
final int rating;
|
||||||
if (StringUtils.isNumeric(arg) && arg.length() < 3 && arg.length() > 0) {
|
if (StringUtils.isNumeric(arg) && arg.length() < 3 && arg.length() > 0) {
|
||||||
rating = Integer.parseInt(arg);
|
rating = Integer.parseInt(arg);
|
||||||
if (rating > 10) {
|
if (rating > 10) {
|
||||||
sendMessage(plr, C.RATING_NOT_VALID);
|
sendMessage(player, C.RATING_NOT_VALID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sendMessage(plr, C.RATING_NOT_VALID);
|
sendMessage(player, C.RATING_NOT_VALID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final UUID uuid = plr.getUUID();
|
final UUID uuid = player.getUUID();
|
||||||
final Runnable run = new Runnable() {
|
final Runnable run = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (plot.settings.ratings.containsKey(uuid)) {
|
if (plot.settings.ratings.containsKey(uuid)) {
|
||||||
sendMessage(plr, C.RATING_ALREADY_EXISTS, plot.getId().toString());
|
sendMessage(player, C.RATING_ALREADY_EXISTS, plot.getId().toString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plot.settings.ratings.put(uuid, rating);
|
plot.settings.ratings.put(uuid, rating);
|
||||||
DBFunc.setRating(plot, uuid, rating);
|
DBFunc.setRating(plot, uuid, rating);
|
||||||
sendMessage(plr, C.RATING_APPLIED, plot.getId().toString());
|
sendMessage(player, C.RATING_APPLIED, plot.getId().toString());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (plot.settings.ratings == null) {
|
if (plot.settings.ratings == null) {
|
||||||
|
@ -77,7 +77,7 @@ public class SchematicCmd extends SubCommand {
|
|||||||
final Plot plot = MainUtil.getPlot(loc);
|
final Plot plot = MainUtil.getPlot(loc);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
sendMessage(plr, C.NOT_IN_PLOT);
|
sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
break;
|
return false;
|
||||||
}
|
}
|
||||||
if (this.running) {
|
if (this.running) {
|
||||||
MainUtil.sendMessage(plr, "&cTask is already running.");
|
MainUtil.sendMessage(plr, "&cTask is already running.");
|
||||||
@ -168,18 +168,22 @@ public class SchematicCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
sendMessage(plr, C.SCHEMATIC_MISSING_ARG);
|
sendMessage(plr, C.SCHEMATIC_MISSING_ARG);
|
||||||
break;
|
return false;
|
||||||
|
}
|
||||||
|
final Location loc = plr.getLocation();
|
||||||
|
final Plot plot = MainUtil.getPlot(loc);
|
||||||
|
if (plot == null) {
|
||||||
|
sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
file = args[1];
|
file = args[1];
|
||||||
schematic = SchematicHandler.manager.getSchematic(file);
|
schematic = SchematicHandler.manager.getSchematic(file);
|
||||||
if (schematic == null) {
|
if (schematic == null) {
|
||||||
sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent");
|
sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent");
|
||||||
break;
|
return false;
|
||||||
}
|
}
|
||||||
final Location loc = plr.getLocation();
|
|
||||||
final int l1 = schematic.getSchematicDimension().getX();
|
final int l1 = schematic.getSchematicDimension().getX();
|
||||||
final int l2 = schematic.getSchematicDimension().getZ();
|
final int l2 = schematic.getSchematicDimension().getZ();
|
||||||
final Plot plot = MainUtil.getPlot(loc);
|
|
||||||
final int length = MainUtil.getPlotWidth(loc.getWorld(), plot.id);
|
final int length = MainUtil.getPlotWidth(loc.getWorld(), plot.id);
|
||||||
if ((l1 < length) || (l2 < length)) {
|
if ((l1 < length) || (l2 < length)) {
|
||||||
sendMessage(plr, C.SCHEMATIC_INVALID, String.format("Wrong size (x: %s, z: %d) vs %d ", l1, l2, length));
|
sendMessage(plr, C.SCHEMATIC_INVALID, String.format("Wrong size (x: %s, z: %d) vs %d ", l1, l2, length));
|
||||||
|
@ -350,7 +350,7 @@ public enum C {
|
|||||||
PLOT_UNOWNED("$2The current plot must have an owner to perform this action", "Info"),
|
PLOT_UNOWNED("$2The current plot must have an owner to perform this action", "Info"),
|
||||||
PLOT_INFO_UNCLAIMED("$2Plot $1%s$2 is not yet claimed", "Info"),
|
PLOT_INFO_UNCLAIMED("$2Plot $1%s$2 is not yet claimed", "Info"),
|
||||||
PLOT_INFO_HEADER("$3====== $1INFO $3======", false, "Info"),
|
PLOT_INFO_HEADER("$3====== $1INFO $3======", false, "Info"),
|
||||||
PLOT_INFO("$1ID: $2%id%$1\n" + "$1Alias: $2%alias%$1\n" + "$1Owner: $2%owner%$1\n" + "$1Biome: $2%biome%$1\n" + "$1Can Build: $2%build%$1\n" + "$1Rating: $2%rating%$1/$210$1\n" + "$1Trusted: $2%trusted%$1\n" + "$1Members: $2%members%$1\n" + "$1Denied: $2%denied%$1\n" + "$1Flags: $2%flags%", "Info"),
|
PLOT_INFO("$1ID: $2%id%$1\n" + "$1Alias: $2%alias%$1\n" + "$1Owner: $2%owner%$1\n" + "$1Biome: $2%biome%$1\n" + "$1Can Build: $2%build%$1\n" + "$1Rating: $2%rating%\n" + "$1Trusted: $2%trusted%$1\n" + "$1Members: $2%members%$1\n" + "$1Denied: $2%denied%$1\n" + "$1Flags: $2%flags%", "Info"),
|
||||||
PLOT_INFO_TRUSTED("$1Trusted:$2 %trusted%", "Info"),
|
PLOT_INFO_TRUSTED("$1Trusted:$2 %trusted%", "Info"),
|
||||||
PLOT_INFO_MEMBERS("$1Members:$2 %members%", "Info"),
|
PLOT_INFO_MEMBERS("$1Members:$2 %members%", "Info"),
|
||||||
PLOT_INFO_DENIED("$1Denied:$2 %denied%", "Info"),
|
PLOT_INFO_DENIED("$1Denied:$2 %denied%", "Info"),
|
||||||
|
@ -38,6 +38,10 @@ public class Settings {
|
|||||||
public static boolean PERMISSION_CACHING = false;
|
public static boolean PERMISSION_CACHING = false;
|
||||||
public static boolean CACHE_RATINGS = true;
|
public static boolean CACHE_RATINGS = true;
|
||||||
public static boolean UUID_FROM_DISK = false;
|
public static boolean UUID_FROM_DISK = false;
|
||||||
|
/**
|
||||||
|
* Ratings
|
||||||
|
*/
|
||||||
|
public static List<String> RATING_CATEGORIES = null;
|
||||||
/**
|
/**
|
||||||
* PlotMe settings
|
* PlotMe settings
|
||||||
*/
|
*/
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package com.intellectualcrafters.plot.flag;
|
package com.intellectualcrafters.plot.flag;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
||||||
@ -350,6 +353,100 @@ public abstract class FlagValue<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class IntegerListValue extends FlagValue<List<Integer>> implements ListValue {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public String toString(final Object t) {
|
||||||
|
return StringUtils.join((List<Integer>) t, ",");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public List<Integer> getValue(final Object t) {
|
||||||
|
return (List<Integer>) t;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Integer> parse(final String t) {
|
||||||
|
String[] split = (t.split(","));
|
||||||
|
ArrayList<Integer> numbers = new ArrayList<Integer>();
|
||||||
|
for (String element : split) {
|
||||||
|
numbers.add(Integer.parseInt(element));
|
||||||
|
}
|
||||||
|
return numbers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Flag value must be a integer list";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(final Object t, final String value) {
|
||||||
|
try {
|
||||||
|
((List<Integer>) t).addAll(parse(value));
|
||||||
|
} catch (final Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(final Object t, final String value) {
|
||||||
|
try {
|
||||||
|
for (final Integer item : parse(value)) {
|
||||||
|
((List<Integer>) t).remove(item);
|
||||||
|
}
|
||||||
|
} catch (final Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DoubleListValue extends FlagValue<List<Double>> implements ListValue {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public String toString(final Object t) {
|
||||||
|
return StringUtils.join((List<Double>) t, ",");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public List<Double> getValue(final Object t) {
|
||||||
|
return (List<Double>) t;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Double> parse(final String t) {
|
||||||
|
String[] split = (t.split(","));
|
||||||
|
ArrayList<Double> numbers = new ArrayList<Double>();
|
||||||
|
for (String element : split) {
|
||||||
|
numbers.add(Double.parseDouble(element));
|
||||||
|
}
|
||||||
|
return numbers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Flag value must be a integer list";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(final Object t, final String value) {
|
||||||
|
try {
|
||||||
|
((List<Double>) t).addAll(parse(value));
|
||||||
|
} catch (final Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(final Object t, final String value) {
|
||||||
|
try {
|
||||||
|
for (final Double item : parse(value)) {
|
||||||
|
((List<Double>) t).remove(item);
|
||||||
|
}
|
||||||
|
} catch (final Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class StringValue extends FlagValue<String> {
|
public static class StringValue extends FlagValue<String> {
|
||||||
@Override
|
@Override
|
||||||
public String parse(final String s) {
|
public String parse(final String s) {
|
||||||
|
@ -10,6 +10,7 @@ import java.util.Random;
|
|||||||
import org.apache.commons.lang.mutable.MutableInt;
|
import org.apache.commons.lang.mutable.MutableInt;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -54,8 +55,7 @@ public class BukkitHybridUtils extends HybridUtils {
|
|||||||
return count / array.length;
|
return count / array.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getSD(double[] array) {
|
public double getSD(double[] array, double av) {
|
||||||
double av = getMean(array);
|
|
||||||
double sd = 0;
|
double sd = 0;
|
||||||
for (int i=0; i<array.length;i++)
|
for (int i=0; i<array.length;i++)
|
||||||
{
|
{
|
||||||
@ -64,8 +64,7 @@ public class BukkitHybridUtils extends HybridUtils {
|
|||||||
return Math.sqrt(sd/array.length);
|
return Math.sqrt(sd/array.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getSD(int[] array) {
|
public double getSD(int[] array, double av) {
|
||||||
double av = getMean(array);
|
|
||||||
double sd = 0;
|
double sd = 0;
|
||||||
for (int i=0; i<array.length;i++)
|
for (int i=0; i<array.length;i++)
|
||||||
{
|
{
|
||||||
@ -103,41 +102,136 @@ public class BukkitHybridUtils extends HybridUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final BiomeGrid base = new BiomeGrid() { @Override public void setBiome(int a, int b, Biome c) {} @Override public Biome getBiome(int a, int b) {return null;}};
|
final BiomeGrid base = new BiomeGrid() { @Override public void setBiome(int a, int b, Biome c) {} @Override public Biome getBiome(int a, int b) {return null;}};
|
||||||
ClassicPlotWorld cpw = (ClassicPlotWorld) PlotSquared.getPlotWorld(plot.world);
|
Location bot = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1);
|
||||||
final Location bot = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1);
|
Location top = MainUtil.getPlotTopLoc(plot.world, plot.id);
|
||||||
final Location top = MainUtil.getPlotTopLoc(plot.world, plot.id).add(1, 0, 1);
|
final int bx = bot.getX();
|
||||||
final int bx = bot.getX() >> 4;
|
final int bz = bot.getZ();
|
||||||
final int bz = bot.getZ() >> 4;
|
final int tx = top.getX();
|
||||||
final int tx = top.getX() >> 4;
|
final int tz = top.getZ();
|
||||||
final int tz = top.getZ() >> 4;
|
final int cbx = bx >> 4;
|
||||||
|
final int cbz = bz >> 4;
|
||||||
|
final int ctx = tx >> 4;
|
||||||
|
final int ctz = tz >> 4;
|
||||||
final Random r = new Random();
|
final Random r = new Random();
|
||||||
AugmentedPopulator.initCache();
|
AugmentedPopulator.initCache();
|
||||||
|
|
||||||
final PlotAnalysis analysis = new PlotAnalysis();
|
final int width = tx - bx + 1;
|
||||||
|
final int length = tz - bz + 1;
|
||||||
|
|
||||||
int num_chunks = (tx - bx + 1) * (tz - bz + 1);
|
final short[][][] oldblocks = new short[256][width][length];
|
||||||
|
final short[][][] newblocks = new short[256][width][length];
|
||||||
short[][][] oldblocks = new short[256][top.getX() - bot.getX() + 1][top.getZ() - bot.getZ() + 1];
|
|
||||||
short[][][] newblocks = new short[256][top.getX() - bot.getX() + 1][top.getZ() - bot.getZ() + 1];
|
|
||||||
|
|
||||||
final List<Chunk> chunks = new ArrayList<>();
|
final List<Chunk> chunks = new ArrayList<>();
|
||||||
|
final List<Chunk> processed_chunks = new ArrayList<>();
|
||||||
|
|
||||||
for (int X = bx; X <= tx; X++) {
|
for (int X = cbx; X <= ctx; X++) {
|
||||||
for (int Z = bz; Z <= tz; Z++) {
|
for (int Z = cbz; Z <= ctz; Z++) {
|
||||||
Chunk chunk = world.getChunkAt(X, Z);
|
Chunk chunk = world.getChunkAt(X, Z);
|
||||||
chunks.add(chunk);
|
chunks.add(chunk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final double[] changes_sd = new double[num_chunks];
|
final Runnable run = new Runnable() {
|
||||||
final double[] rotations_sd = new double[num_chunks];
|
@Override
|
||||||
final double[] data_sd = new double[num_chunks];
|
public void run() {
|
||||||
final double[] variety_sd = new double[num_chunks];
|
int t = 0;
|
||||||
final double[] uniformity_sd = new double[num_chunks];
|
for (Chunk chunk : processed_chunks) {
|
||||||
final double[] verticies_sd = new double[num_chunks];
|
short[][] result = gen.generateExtBlockSections(world, r, chunk.getX(), chunk.getZ(), base);
|
||||||
final double[] height_sd = new double[num_chunks];
|
int X = chunk.getX();
|
||||||
|
int Z = chunk.getZ();
|
||||||
|
int xb = ((X - cbx) << 4) - bx;
|
||||||
|
int zb = ((Z - cbz) << 4) - bz;
|
||||||
|
for (int i = 0; i < result.length; i++) {
|
||||||
|
if (result[i] == null) {
|
||||||
|
for (int j = 0; j < 4096; j++) {
|
||||||
|
int x = AugmentedPopulator.x_loc[i][j] + xb;
|
||||||
|
if (x < 0 || x >= width) continue;
|
||||||
|
int z = AugmentedPopulator.z_loc[i][j] + zb;
|
||||||
|
if (z < 0 || z >= length) continue;
|
||||||
|
int y = AugmentedPopulator.y_loc[i][j];
|
||||||
|
oldblocks[y][x][z] = 0;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (int j = 0; j < result[i].length; j++) {
|
||||||
|
int x = AugmentedPopulator.x_loc[i][j] + xb;
|
||||||
|
if (x < 0 || x >= width) continue;
|
||||||
|
int z = AugmentedPopulator.z_loc[i][j] + zb;
|
||||||
|
if (z < 0 || z >= length) continue;
|
||||||
|
int y = AugmentedPopulator.y_loc[i][j];
|
||||||
|
oldblocks[y][x][z] = result[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final HashSet<Short> variety = new HashSet<>();
|
int size = width * length;
|
||||||
|
int[] changes = new int[size];
|
||||||
|
int[] faces = new int[size];
|
||||||
|
int[] data = new int[size];
|
||||||
|
int[] air = new int[size];
|
||||||
|
int[] variety = new int[size];
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (int x = 0; x < width;x++) {
|
||||||
|
for (int z = 0; z < length;z++) {
|
||||||
|
HashSet<Short> types = new HashSet<>();
|
||||||
|
for (int y = 0; y < 256; y++) {
|
||||||
|
short old = oldblocks[y][x][z];
|
||||||
|
short now = newblocks[y][x][z];
|
||||||
|
if (old != now) {
|
||||||
|
t++;
|
||||||
|
changes[i]++;
|
||||||
|
}
|
||||||
|
if (now == 0) {
|
||||||
|
air[i]++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// check verticies
|
||||||
|
// modifications_adjacent
|
||||||
|
|
||||||
|
if (x > 0 && z > 0 && y > 0 && x < width - 1 && z < length - 1 && y < 255) {
|
||||||
|
if (oldblocks[y - 1][x][z] == 0) faces[i]++;
|
||||||
|
if (oldblocks[y][x - 1][z] == 0) faces[i]++;
|
||||||
|
if (oldblocks[y][x][z - 1] == 0) faces[i]++;
|
||||||
|
if (oldblocks[y + 1][x][z] == 0) faces[i]++;
|
||||||
|
if (oldblocks[y][x + 1][z] == 0) faces[i]++;
|
||||||
|
if (oldblocks[y][x][z + 1] == 0) faces[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Material material = Material.getMaterial(now);
|
||||||
|
Class<? extends MaterialData> md = material.getData();
|
||||||
|
if (md.equals(Directional.class)) {
|
||||||
|
data[i] += 8;
|
||||||
|
}
|
||||||
|
else if (!md.equals(MaterialData.class)) {
|
||||||
|
data[i]++;
|
||||||
|
}
|
||||||
|
types.add(now);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
variety[i] = types.size();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// analyze plot
|
||||||
|
// put in analysis obj
|
||||||
|
|
||||||
|
// run whenDone
|
||||||
|
PlotAnalysis analysis = new PlotAnalysis();
|
||||||
|
analysis.changes = getMean(changes);
|
||||||
|
analysis.faces = getMean(faces);
|
||||||
|
analysis.data = getMean(data);
|
||||||
|
analysis.air = getMean(air);
|
||||||
|
analysis.variety = getMean(variety);
|
||||||
|
analysis.complexity = getSD(changes, analysis.changes) + getSD(faces, analysis.faces) + getSD(data, analysis.data) + getSD(air, analysis.air) + getSD(variety, analysis.variety);
|
||||||
|
whenDone.value = analysis;
|
||||||
|
whenDone.run();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
System.gc();
|
||||||
|
AugmentedPopulator.initCache();
|
||||||
|
|
||||||
TaskManager.index.increment();
|
TaskManager.index.increment();
|
||||||
final Integer currentIndex = TaskManager.index.toInteger();
|
final Integer currentIndex = TaskManager.index.toInteger();
|
||||||
@ -146,117 +240,41 @@ public class BukkitHybridUtils extends HybridUtils {
|
|||||||
public void run() {
|
public void run() {
|
||||||
int index = chunks.size() - 1;
|
int index = chunks.size() - 1;
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
TaskManager.runTaskAsync(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
PlotSquared.TASK.cancelTask(TaskManager.tasks.get(currentIndex));
|
PlotSquared.TASK.cancelTask(TaskManager.tasks.get(currentIndex));
|
||||||
analysis.variety_total = variety.size();
|
TaskManager.runTaskAsync(run);
|
||||||
analysis.changes_sd = getSD(changes_sd);
|
|
||||||
analysis.rotations_sd = getSD(rotations_sd);
|
|
||||||
analysis.data_sd = getSD(data_sd);
|
|
||||||
analysis.uniformity_sd = getSD(uniformity_sd);
|
|
||||||
analysis.variety_sd = getSD(variety_sd);
|
|
||||||
analysis.verticies_sd = getSD(verticies_sd);
|
|
||||||
analysis.height_sd = getSD(height_sd);
|
|
||||||
whenDone.value = analysis;
|
|
||||||
whenDone.run();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Chunk chunk = chunks.remove(0);
|
Chunk chunk = chunks.remove(0);
|
||||||
|
processed_chunks.add(chunk);
|
||||||
int X = chunk.getX();
|
int X = chunk.getX();
|
||||||
int Z = chunk.getZ();
|
int Z = chunk.getZ();
|
||||||
short[][] result = gen.generateExtBlockSections(world, r, chunk.getX(), chunk.getZ(), base);
|
|
||||||
short[][] current = new short[16][];
|
short[][] current = new short[16][];
|
||||||
int minX;
|
int minX;
|
||||||
int minZ;
|
int minZ;
|
||||||
int maxX;
|
int maxX;
|
||||||
int maxZ;
|
int maxZ;
|
||||||
if (X == bx) minX = mod(bot.getX());
|
if (X == cbx) minX = mod(bx);
|
||||||
else minX = 0;
|
else minX = 0;
|
||||||
if (Z == bz) minZ = mod(bot.getZ());
|
if (Z == cbz) minZ = mod(bz);
|
||||||
else minZ = 0;
|
else minZ = 0;
|
||||||
if (X == tx) maxX = mod(top.getX());
|
if (X == ctx) maxX = mod(tx);
|
||||||
else maxX = 16;
|
else maxX = 16;
|
||||||
if (Z == tz) maxZ = mod(top.getZ());
|
if (Z == ctz) maxZ = mod(tz);
|
||||||
else maxZ = 16;
|
else maxZ = 16;
|
||||||
long changes = 0;
|
|
||||||
long rotations = 0;
|
|
||||||
long materialdata = 0;
|
|
||||||
int[] height = new int[256];
|
|
||||||
|
|
||||||
int collumn_index = 0;
|
int xb = ((X - cbx) << 4) - bx;
|
||||||
for (int x = minX; x < maxX; x++) {
|
int zb = ((Z - cbz) << 4) - bz;
|
||||||
for (int z = minZ; z < maxZ; z++) {
|
|
||||||
int max = 0;
|
for (int x = minX; x <= maxX; x++) {
|
||||||
|
for (int z = minZ; z <= maxZ; z++) {
|
||||||
for (int y = 0; y < 256; y++) {
|
for (int y = 0; y < 256; y++) {
|
||||||
Block block = chunk.getBlock(x, y, z);
|
Block block = chunk.getBlock(x, y, z);
|
||||||
int i = y >> 4;
|
int xx = xb + x;
|
||||||
int j = ((y & 0xF) << 8) | (z << 4) | x;
|
int zz = zb + z;
|
||||||
short id = (short) block.getTypeId();
|
newblocks[y][xx][zz] = (short) block.getTypeId();
|
||||||
if (id != 0) {
|
|
||||||
if (y > max) {
|
|
||||||
max = y;
|
|
||||||
}
|
|
||||||
BlockState state = block.getState();
|
|
||||||
MaterialData data = state.getData();
|
|
||||||
if (data instanceof Directional) {
|
|
||||||
rotations++;
|
|
||||||
}
|
|
||||||
else if (!data.getClass().equals(MaterialData.class)) {
|
|
||||||
materialdata++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
variety.add(id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (current[i] == null) {
|
|
||||||
current[i] = new short[4096];
|
|
||||||
}
|
}
|
||||||
current[i][j] = id;
|
|
||||||
if (result[i] == null && id != 0 || result[i] != null && result[i][j] != id) {
|
|
||||||
changes++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
height[collumn_index] = max;
|
|
||||||
collumn_index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
long verticies = 0;
|
|
||||||
int[] uniformity = new int[254];
|
|
||||||
for (int y = 1; y < 255; y++) {
|
|
||||||
HashSet<Integer> blocks = new HashSet<>();
|
|
||||||
for (int x = minX + 1; x < maxX - 1; x++) {
|
|
||||||
for (int z = minZ + 1; z < maxZ - 1; z++) {
|
|
||||||
short id = current[y >> 4][((y & 0xF) << 8) | (z << 4) | x];
|
|
||||||
if (id == 0) continue;
|
|
||||||
blocks.add((int) id);
|
|
||||||
if (current[(y + 1) >> 4][(((y + 1) & 0xF) << 8) | (z << 4) | x] != 0) verticies--;
|
|
||||||
if (current[(y - 1) >> 4][(((y - 1) & 0xF) << 8) | (z << 4) | x] != 0) verticies--;
|
|
||||||
if (current[y >> 4][((y & 0xF) << 8) | ((z + 1) << 4) | x] != 0) verticies--;
|
|
||||||
if (current[y >> 4][((y & 0xF) << 8) | ((z - 1) << 4) | x] != 0) verticies--;
|
|
||||||
if (current[y >> 4][((y & 0xF) << 8) | (z << 4) | (x + 1)] != 0) verticies--;
|
|
||||||
if (current[y >> 4][((y & 0xF) << 8) | (z << 4) | (x - 1)] != 0) verticies--;
|
|
||||||
verticies += 6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uniformity[y-1] = blocks.size();
|
|
||||||
}
|
|
||||||
analysis.changes_total += changes;
|
|
||||||
analysis.rotations_total += rotations;
|
|
||||||
analysis.data_total += materialdata;
|
|
||||||
analysis.verticies_total += verticies;
|
|
||||||
double tmp = getSD(height);
|
|
||||||
analysis.height_total += tmp;
|
|
||||||
|
|
||||||
changes_sd[index] = changes;
|
|
||||||
rotations_sd[index] = rotations;
|
|
||||||
data_sd[index] = materialdata;
|
|
||||||
uniformity_sd[index] = getSD(uniformity);
|
|
||||||
variety_sd[index] = variety.size();
|
|
||||||
verticies_sd[index] = verticies;
|
|
||||||
height_sd[index] = tmp;
|
|
||||||
};
|
};
|
||||||
}, 1);
|
}, 1);
|
||||||
TaskManager.tasks.put(currentIndex, task);
|
TaskManager.tasks.put(currentIndex, task);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.intellectualcrafters.plot.listeners;
|
package com.intellectualcrafters.plot.listeners;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -7,6 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
@ -22,6 +24,7 @@ import org.bukkit.entity.Creature;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
import org.bukkit.entity.Monster;
|
import org.bukkit.entity.Monster;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -56,6 +59,7 @@ import org.bukkit.event.entity.ProjectileHitEvent;
|
|||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||||
@ -72,6 +76,7 @@ import org.bukkit.event.vehicle.VehicleCreateEvent;
|
|||||||
import org.bukkit.event.vehicle.VehicleDestroyEvent;
|
import org.bukkit.event.vehicle.VehicleDestroyEvent;
|
||||||
import org.bukkit.event.world.ChunkLoadEvent;
|
import org.bukkit.event.world.ChunkLoadEvent;
|
||||||
import org.bukkit.event.world.StructureGrowEvent;
|
import org.bukkit.event.world.StructureGrowEvent;
|
||||||
|
import org.bukkit.inventory.InventoryView;
|
||||||
import org.bukkit.material.MaterialData;
|
import org.bukkit.material.MaterialData;
|
||||||
import org.bukkit.material.Tree;
|
import org.bukkit.material.Tree;
|
||||||
import org.bukkit.material.Wool;
|
import org.bukkit.material.Wool;
|
||||||
@ -94,6 +99,7 @@ import com.intellectualcrafters.plot.object.Plot;
|
|||||||
import com.intellectualcrafters.plot.object.PlotBlock;
|
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||||
import com.intellectualcrafters.plot.object.PlotHandler;
|
import com.intellectualcrafters.plot.object.PlotHandler;
|
||||||
import com.intellectualcrafters.plot.object.PlotId;
|
import com.intellectualcrafters.plot.object.PlotId;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotInventory;
|
||||||
import com.intellectualcrafters.plot.object.PlotManager;
|
import com.intellectualcrafters.plot.object.PlotManager;
|
||||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||||
@ -292,7 +298,7 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi
|
|||||||
if (split[0].equals("plotme") || split[0].equals("ap")) {
|
if (split[0].equals("plotme") || split[0].equals("ap")) {
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
if (Settings.USE_PLOTME_ALIAS) {
|
if (Settings.USE_PLOTME_ALIAS) {
|
||||||
player.performCommand(message.replace("/plotme", "plots"));
|
player.performCommand("plots " + StringUtils.join(Arrays.copyOfRange(split, 1, split.length), " "));
|
||||||
} else {
|
} else {
|
||||||
MainUtil.sendMessage(BukkitUtil.getPlayer(player), C.NOT_USING_PLOTME);
|
MainUtil.sendMessage(BukkitUtil.getPlayer(player), C.NOT_USING_PLOTME);
|
||||||
}
|
}
|
||||||
@ -1158,11 +1164,30 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onInventoryClick(final InventoryClickEvent event) {
|
public void onInventoryClick(final InventoryClickEvent event) {
|
||||||
if (event.getInventory().getName().equalsIgnoreCase("PlotSquared Commands")) {
|
HumanEntity clicker = event.getWhoClicked();
|
||||||
event.setCancelled(true);
|
if (!(clicker instanceof Player) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player player = (Player) clicker;
|
||||||
|
PlotPlayer pp = BukkitUtil.getPlayer(player);
|
||||||
|
PlotInventory inv = (PlotInventory) pp.getMeta("inventory");
|
||||||
|
if (inv != null && event.getRawSlot() == event.getSlot()) {
|
||||||
|
if (!inv.onClick(event.getSlot())) {
|
||||||
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void onInventoryClose(final InventoryCloseEvent event) {
|
||||||
|
HumanEntity closer = event.getPlayer();
|
||||||
|
if (!(closer instanceof Player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player player = (Player) closer;
|
||||||
|
BukkitUtil.getPlayer(player).deleteMeta("inventory");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@EventHandler(priority= EventPriority.MONITOR)
|
@EventHandler(priority= EventPriority.MONITOR)
|
||||||
public void onLeave(final PlayerQuitEvent event) {
|
public void onLeave(final PlayerQuitEvent event) {
|
||||||
|
@ -22,10 +22,8 @@ package com.intellectualcrafters.plot.listeners;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -40,18 +38,14 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.BlockDamageEvent;
|
import org.bukkit.event.block.BlockDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
|
import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
|
||||||
import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
|
import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
|
||||||
import com.intellectualcrafters.plot.flag.Flag;
|
|
||||||
import com.intellectualcrafters.plot.flag.FlagManager;
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||||
import com.intellectualcrafters.plot.object.Plot;
|
import com.intellectualcrafters.plot.object.Plot;
|
||||||
import com.intellectualcrafters.plot.object.PlotHandler;
|
import com.intellectualcrafters.plot.object.PlotHandler;
|
||||||
@ -103,58 +97,6 @@ public class PlotPlusListener extends PlotListener implements Listener {
|
|||||||
}, 0l, 20l);
|
}, 0l, 20l);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onInventoryClick(final InventoryClickEvent event) {
|
|
||||||
final Player player = (Player) event.getWhoClicked();
|
|
||||||
Inventory inv = event.getInventory();
|
|
||||||
if (inv == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!event.getInventory().getName().equals(ChatColor.RED + "Plot Jukebox")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
|
||||||
final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(player));
|
|
||||||
final PlotPlayer pp = BukkitUtil.getPlayer(player);
|
|
||||||
if (plot == null) {
|
|
||||||
MainUtil.sendMessage(pp, C.NOT_IN_PLOT);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final UUID uuid = pp.getUUID();
|
|
||||||
if (!plot.isAdded(uuid)) {
|
|
||||||
MainUtil.sendMessage(pp, C.NO_PLOT_PERMS);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final Set<Player> plotPlayers = new HashSet<>();
|
|
||||||
for (final Player p : player.getWorld().getPlayers()) {
|
|
||||||
final Plot newPlot = MainUtil.getPlot(BukkitUtil.getLocation(player));
|
|
||||||
if (plot.equals(newPlot)) {
|
|
||||||
plotPlayers.add(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RecordMeta meta = null;
|
|
||||||
for (final RecordMeta m : RecordMeta.metaList) {
|
|
||||||
ItemStack item = event.getCurrentItem();
|
|
||||||
if (item != null && m.getMaterial() == item.getType()) {
|
|
||||||
meta = m;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (meta == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (meta != null) {
|
|
||||||
int id = meta.getMaterial().getId();
|
|
||||||
FlagManager.addPlotFlag(plot, new Flag(FlagManager.getFlag("music"), id));
|
|
||||||
player.playEffect(player.getLocation(), Effect.RECORD_PLAY, 0);
|
|
||||||
for (final Player p : plotPlayers) {
|
|
||||||
player.playEffect(player.getLocation(), Effect.RECORD_PLAY, 0);
|
|
||||||
player.playEffect(player.getLocation(), Effect.RECORD_PLAY, id);
|
|
||||||
APlotListener.manager.plotEntry(BukkitUtil.getPlayer(p), plot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onInteract(final BlockDamageEvent event) {
|
public void onInteract(final BlockDamageEvent event) {
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
@ -1,18 +1,10 @@
|
|||||||
package com.intellectualcrafters.plot.object;
|
package com.intellectualcrafters.plot.object;
|
||||||
|
|
||||||
public class PlotAnalysis {
|
public class PlotAnalysis {
|
||||||
public int changes_total;
|
public double changes;
|
||||||
public int rotations_total;
|
public double faces;
|
||||||
public int data_total;
|
public double data;
|
||||||
public int variety_total;
|
public double air;
|
||||||
public int verticies_total;
|
public double variety;
|
||||||
public double height_total;
|
public double complexity;
|
||||||
|
|
||||||
public double changes_sd;
|
|
||||||
public double rotations_sd;
|
|
||||||
public double data_sd;
|
|
||||||
public double variety_sd;
|
|
||||||
public double uniformity_sd;
|
|
||||||
public double verticies_sd;
|
|
||||||
public double height_sd;
|
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,29 @@ public abstract class PlotGenerator extends ChunkGenerator {
|
|||||||
public int X;
|
public int X;
|
||||||
public int Z;
|
public int Z;
|
||||||
private PseudoRandom random = new PseudoRandom();
|
private PseudoRandom random = new PseudoRandom();
|
||||||
|
public static short[][][] CACHE_I = null;
|
||||||
|
public static short[][][] CACHE_J = null;
|
||||||
|
|
||||||
public PlotGenerator(String world) {
|
public PlotGenerator(String world) {
|
||||||
WorldEvents.lastWorld = world;
|
WorldEvents.lastWorld = world;
|
||||||
|
initCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initCache() {
|
||||||
|
if (CACHE_I == null) {
|
||||||
|
CACHE_I = new short[256][16][16];
|
||||||
|
CACHE_J = new short[256][16][16];
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
for (int y = 0; y < 256; y++) {
|
||||||
|
short i = (short) (y >> 4);
|
||||||
|
short j = (short) (((y & 0xF) << 8) | (z << 4) | x);
|
||||||
|
CACHE_I[y][x][z] = i;
|
||||||
|
CACHE_J[y][x][z] = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@ -136,10 +156,10 @@ public abstract class PlotGenerator extends ChunkGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setBlock(final int x, final int y, final int z, final short blkid) {
|
public void setBlock(final int x, final int y, final int z, final short blkid) {
|
||||||
if (result[y >> 4] == null) {
|
if (result[CACHE_I[y][x][z]] == null) {
|
||||||
result[y >> 4] = new short[4096];
|
result[CACHE_I[y][x][z]] = new short[4096];
|
||||||
}
|
}
|
||||||
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = blkid;
|
result[CACHE_I[y][x][z]][CACHE_J[y][x][z]] = blkid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBlock(final int x, final int y, final int z, final short[] blkid) {
|
public void setBlock(final int x, final int y, final int z, final short[] blkid) {
|
||||||
@ -147,10 +167,10 @@ public abstract class PlotGenerator extends ChunkGenerator {
|
|||||||
setBlock(x, y, z, blkid[0]);
|
setBlock(x, y, z, blkid[0]);
|
||||||
}
|
}
|
||||||
short id = blkid[random.random(blkid.length)];
|
short id = blkid[random.random(blkid.length)];
|
||||||
if (result[y >> 4] == null) {
|
if (result[CACHE_I[y][x][z]] == null) {
|
||||||
result[y >> 4] = new short[4096];
|
result[CACHE_I[y][x][z]] = new short[4096];
|
||||||
}
|
}
|
||||||
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = id;
|
result[CACHE_I[y][x][z]][CACHE_J[y][x][z]] = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,81 @@
|
|||||||
|
package com.intellectualcrafters.plot.object;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||||
|
|
||||||
|
public class PlotInventory {
|
||||||
|
|
||||||
|
public final PlotPlayer player;
|
||||||
|
public final int size;
|
||||||
|
private String title;
|
||||||
|
private final PlotItemStack[] items;
|
||||||
|
|
||||||
|
private boolean open = false;
|
||||||
|
|
||||||
|
public PlotInventory(PlotPlayer player) {
|
||||||
|
this.size = 4;
|
||||||
|
this.title = null;
|
||||||
|
this.player = player;
|
||||||
|
items = InventoryUtil.manager.getItems(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlotInventory(PlotPlayer player, int size, String name) {
|
||||||
|
this.size = size;
|
||||||
|
this.title = name == null ? "" : name;
|
||||||
|
this.player = player;
|
||||||
|
items = new PlotItemStack[size * 9];
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onClick(int index) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openInventory() {
|
||||||
|
if (title == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
open = true;
|
||||||
|
InventoryUtil.manager.open(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
if (title == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
InventoryUtil.manager.close(this);
|
||||||
|
open = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItem(int index, PlotItemStack item) {
|
||||||
|
items[index] = item;
|
||||||
|
InventoryUtil.manager.setItem(this, index, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlotItemStack getItem(int index) {
|
||||||
|
return items[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
if (title == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean tmp = open;
|
||||||
|
close();
|
||||||
|
this.title = title;
|
||||||
|
if (tmp) {
|
||||||
|
openInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlotItemStack[] getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return this.title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOpen() {
|
||||||
|
return open;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.intellectualcrafters.plot.object;
|
||||||
|
|
||||||
|
public class PlotItemStack {
|
||||||
|
public final int id;
|
||||||
|
public final short data;
|
||||||
|
public final int amount;
|
||||||
|
public final String name;
|
||||||
|
public final String[] lore;
|
||||||
|
|
||||||
|
public PlotItemStack(int id, short data, int amount, String name, String[] lore) {
|
||||||
|
this.id = id;
|
||||||
|
this.data = data;
|
||||||
|
this.amount = amount;
|
||||||
|
this.name = name;
|
||||||
|
this.lore = lore;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.intellectualcrafters.plot.util;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.object.PlotInventory;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotItemStack;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is only used by internal functions, for most cases use the PlotInventory class
|
||||||
|
*/
|
||||||
|
public abstract class InventoryUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is only used by internal functions, for most cases use the PlotInventory class
|
||||||
|
*/
|
||||||
|
public static InventoryUtil manager = null;
|
||||||
|
public abstract void open(PlotInventory inv);
|
||||||
|
public abstract void close(PlotInventory inv);
|
||||||
|
public abstract void setItem(PlotInventory plotInventory, int index, PlotItemStack item);
|
||||||
|
public abstract PlotItemStack[] getItems(PlotPlayer player);
|
||||||
|
public abstract boolean isOpen(PlotInventory plotInventory);
|
||||||
|
}
|
@ -78,6 +78,7 @@ public class MainUtil {
|
|||||||
if (arg == null) {
|
if (arg == null) {
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
if (message) MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD);
|
if (message) MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD);
|
||||||
|
System.out.print(1);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getPlot(player.getLocation());
|
return getPlot(player.getLocation());
|
||||||
@ -87,7 +88,10 @@ public class MainUtil {
|
|||||||
if (player != null) {
|
if (player != null) {
|
||||||
worldname = player.getLocation().getWorld();
|
worldname = player.getLocation().getWorld();
|
||||||
}
|
}
|
||||||
|
System.out.print(arg);
|
||||||
String[] split = arg.split(";|,");
|
String[] split = arg.split(";|,");
|
||||||
|
System.out.print(split[0]);
|
||||||
|
System.out.print(split[1]);
|
||||||
if (split.length == 3) {
|
if (split.length == 3) {
|
||||||
worldname = split[0];
|
worldname = split[0];
|
||||||
id = PlotId.fromString(split[1] + ";" + split[2]);
|
id = PlotId.fromString(split[1] + ";" + split[2]);
|
||||||
@ -122,12 +126,15 @@ public class MainUtil {
|
|||||||
}
|
}
|
||||||
if (worldname == null || !PlotSquared.isPlotWorld(worldname)) {
|
if (worldname == null || !PlotSquared.isPlotWorld(worldname)) {
|
||||||
if (message) MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD);
|
if (message) MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD);
|
||||||
|
System.out.print("INVALID WORLD: ");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
|
System.out.print("INVALID ID: ");
|
||||||
if (message) MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID);
|
if (message) MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
System.out.print("VALID PLOT: ");
|
||||||
return getPlot(worldname, id);
|
return getPlot(worldname, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1566,9 +1573,55 @@ public class MainUtil {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
double val = 0;
|
double val = 0;
|
||||||
|
int size = 0;
|
||||||
for (Entry<UUID, Integer> entry : rating.entrySet()) {
|
for (Entry<UUID, Integer> entry : rating.entrySet()) {
|
||||||
val += entry.getValue();
|
int current = entry.getValue();
|
||||||
|
if (Settings.RATING_CATEGORIES == null || Settings.RATING_CATEGORIES.size() == 0) {
|
||||||
|
val += current;
|
||||||
|
size++;
|
||||||
}
|
}
|
||||||
return val / (double) rating.size();
|
else {
|
||||||
|
for (int i = 0 ; i < Settings.RATING_CATEGORIES.size(); i++) {
|
||||||
|
val += (current % 10) - 1;
|
||||||
|
current /= 10;
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return val / (double) size;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double[] getAverageRatings(Plot plot) {
|
||||||
|
HashMap<UUID, Integer> rating;
|
||||||
|
if (plot.settings.ratings != null) {
|
||||||
|
rating = plot.settings.ratings;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rating = DBFunc.getRatings(plot);
|
||||||
|
}
|
||||||
|
int size = 1;
|
||||||
|
if (Settings.RATING_CATEGORIES != null) {
|
||||||
|
size = Math.max(1, Settings.RATING_CATEGORIES.size());
|
||||||
|
}
|
||||||
|
double[] ratings = new double[size];
|
||||||
|
if (rating == null || rating.size() == 0) {
|
||||||
|
return ratings;
|
||||||
|
}
|
||||||
|
for (Entry<UUID, Integer> entry : rating.entrySet()) {
|
||||||
|
int current = entry.getValue();
|
||||||
|
if (Settings.RATING_CATEGORIES == null || Settings.RATING_CATEGORIES.size() == 0) {
|
||||||
|
ratings[0] += current;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (int i = 0 ; i < Settings.RATING_CATEGORIES.size(); i++) {
|
||||||
|
ratings[i] += (current % 10) - 1;
|
||||||
|
current /= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
ratings[i] /= (double) rating.size();
|
||||||
|
}
|
||||||
|
return ratings;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,127 @@
|
|||||||
|
package com.intellectualcrafters.plot.util.bukkit;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryView;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.object.PlotInventory;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotItemStack;
|
||||||
|
import com.intellectualcrafters.plot.object.BukkitPlayer;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||||
|
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||||
|
|
||||||
|
public class BukkitInventoryUtil extends InventoryUtil {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open(PlotInventory inv) {
|
||||||
|
BukkitPlayer bp = ((BukkitPlayer) inv.player);
|
||||||
|
Inventory inventory = Bukkit.createInventory(null, inv.size * 9, inv.getTitle());
|
||||||
|
PlotItemStack[] items = inv.getItems();
|
||||||
|
for (int i = 0; i < inv.size * 9; i++) {
|
||||||
|
PlotItemStack item = items[i];
|
||||||
|
if (item != null) {
|
||||||
|
inventory.setItem(i, getItem(item));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inv.player.setMeta("inventory", inv);
|
||||||
|
bp.player.openInventory(inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close(PlotInventory inv) {
|
||||||
|
if (!inv.isOpen()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
inv.player.deleteMeta("inventory");
|
||||||
|
BukkitPlayer bp = ((BukkitPlayer) inv.player);
|
||||||
|
bp.player.closeInventory();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItem(PlotInventory inv, int index, PlotItemStack item) {
|
||||||
|
BukkitPlayer bp = ((BukkitPlayer) inv.player);
|
||||||
|
InventoryView opened = bp.player.getOpenInventory();
|
||||||
|
if (!inv.isOpen()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
opened.setItem(index, getItem(item));
|
||||||
|
bp.player.updateInventory();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlotItemStack getItem(ItemStack item ) {
|
||||||
|
if (item == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int id = item.getTypeId();
|
||||||
|
short data = item.getDurability();
|
||||||
|
int amount = item.getAmount();
|
||||||
|
String name = null;
|
||||||
|
String[] lore = null;
|
||||||
|
if (item.hasItemMeta()) {
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
if (meta.hasDisplayName()) {
|
||||||
|
name = meta.getDisplayName();
|
||||||
|
}
|
||||||
|
if (meta.hasLore()) {
|
||||||
|
List<String> itemLore = meta.getLore();
|
||||||
|
lore = itemLore.toArray(new String[itemLore.size()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new PlotItemStack(id, data, amount, name, lore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ItemStack getItem(PlotItemStack item) {
|
||||||
|
if (item == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ItemStack stack = new ItemStack(item.id, item.amount, item.data);
|
||||||
|
ItemMeta meta = null;
|
||||||
|
if (item.name != null) {
|
||||||
|
meta = stack.getItemMeta();
|
||||||
|
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', item.name));
|
||||||
|
}
|
||||||
|
if (item.lore != null) {
|
||||||
|
if (meta == null) {
|
||||||
|
meta = stack.getItemMeta();
|
||||||
|
}
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
for (String entry : item.lore) {
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', entry));
|
||||||
|
}
|
||||||
|
meta.setLore(lore);
|
||||||
|
}
|
||||||
|
if (meta != null) {
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
}
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PlotItemStack[] getItems(PlotPlayer player) {
|
||||||
|
BukkitPlayer bp = ((BukkitPlayer) player);
|
||||||
|
PlayerInventory inv = bp.player.getInventory();
|
||||||
|
PlotItemStack[] items = new PlotItemStack[36];
|
||||||
|
for (int i = 0; i < 36; i++) {
|
||||||
|
items[i] = getItem(inv.getItem(i));
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOpen(PlotInventory inv) {
|
||||||
|
if (!inv.isOpen()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
BukkitPlayer bp = ((BukkitPlayer) inv.player);
|
||||||
|
InventoryView opened = bp.player.getOpenInventory();
|
||||||
|
return (inv.isOpen() && opened.getType() == InventoryType.CRAFTING && opened.getTitle() == null);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user