Cleanup and Optimizations

Abstracted TitleManagers
Removed a lot of Statics.
ETC.
This commit is contained in:
MattBDev 2016-04-05 12:37:11 -04:00
commit 9c81dfa5c3
50 changed files with 1100 additions and 1470 deletions

View File

@ -47,14 +47,6 @@ import java.util.UUID;
*/ */
public class PlotAPI { public class PlotAPI {
/**
* Permission that allows for admin access, this permission node will allow
* the player to use any part of the plugin, without limitations.
* @deprecated Use C.PERMISSION_ADMIN instead
*/
@Deprecated
public static final String ADMIN_PERMISSION = C.PERMISSION_ADMIN.s();
/** /**
* Deprecated, does nothing. * Deprecated, does nothing.
* @param plugin not needed * @param plugin not needed
@ -64,24 +56,6 @@ public class PlotAPI {
public PlotAPI(JavaPlugin plugin) { public PlotAPI(JavaPlugin plugin) {
} }
/**
* Default Constructor that does nothing.
*
* @deprecated Use this class if you just want to do a few simple things
* <ul>
* <li>It will remain stable for future versions
* of the plugin</li>
* <li>The PlotPlayer and Plot class should be considered
* relatively safe</li>
* <li>For more advanced/intensive tasks you should consider
* using other classes</li>
* </ul>
*
*/
@Deprecated
public PlotAPI() {
}
/** /**
* Get all plots. * Get all plots.
* *

View File

@ -75,6 +75,7 @@ import com.plotsquared.bukkit.uuid.SQLUUIDHandler;
import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.World; import org.bukkit.World;
@ -96,7 +97,6 @@ import java.util.UUID;
public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
public static BukkitMain THIS;
public static WorldEditPlugin worldEdit; public static WorldEditPlugin worldEdit;
private int[] version; private int[] version;
@ -124,7 +124,6 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
@Override @Override
public void onEnable() { public void onEnable() {
BukkitMain.THIS = this;
new PS(this, "Bukkit"); new PS(this, "Bukkit");
} }
@ -132,40 +131,35 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
public void onDisable() { public void onDisable() {
PS.get().disable(); PS.get().disable();
Bukkit.getScheduler().cancelTasks(this); Bukkit.getScheduler().cancelTasks(this);
BukkitMain.THIS = null;
} }
@Override @Override
public void log(String message) { public void log(String message) {
if (BukkitMain.THIS != null) { try {
try { message = C.color(message);
message = C.color(message); if (!Settings.CONSOLE_COLOR) {
if (!Settings.CONSOLE_COLOR) { message = ChatColor.stripColor(message);
message = ChatColor.stripColor(message);
}
this.getServer().getConsoleSender().sendMessage(message);
return;
} catch (Throwable ignored) {
//ignored
} }
this.getServer().getConsoleSender().sendMessage(message);
return;
} catch (Throwable ignored) {
//ignored
} }
System.out.println(ConsoleColors.fromString(message)); System.out.println(ConsoleColors.fromString(message));
} }
@Override @Override
public void disable() { public void disable() {
if (BukkitMain.THIS != null) { onDisable();
onDisable();
}
} }
@Override @Override
public int[] getPluginVersion() { public int[] getPluginVersion() {
String version = getDescription().getVersion(); String ver = getDescription().getVersion();
if (version.contains("-SNAPSHOT")) { if (ver.contains("-SNAPSHOT")) {
version = version.split("-SNAPSHOT")[0]; ver = ver.split("-SNAPSHOT")[0];
} }
String[] split = version.split("\\."); String[] split = ver.split("\\.");
return new int[]{Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2])}; return new int[]{Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2])};
} }
@ -190,7 +184,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
@Override @Override
public TaskManager getTaskManager() { public TaskManager getTaskManager() {
return new BukkitTaskManager(); return new BukkitTaskManager(this);
} }
@Override @Override
@ -403,7 +397,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
} }
@Override @Override
public PlotQueue initPlotQueue() { public PlotQueue<Chunk> initPlotQueue() {
try { try {
new SendChunk(); new SendChunk();
MainUtil.canSendChunk = true; MainUtil.canSendChunk = true;

View File

@ -4,6 +4,7 @@ import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.generator.GeneratorWrapper; import com.intellectualcrafters.plot.generator.GeneratorWrapper;
import com.intellectualcrafters.plot.generator.HybridGen; import com.intellectualcrafters.plot.generator.HybridGen;
import com.intellectualcrafters.plot.generator.IndependentPlotGenerator; import com.intellectualcrafters.plot.generator.IndependentPlotGenerator;
import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.PlotArea; import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotManager;
@ -22,6 +23,7 @@ import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
@ -34,6 +36,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
private final List<BlockPopulator> populators = new ArrayList<>(); private final List<BlockPopulator> populators = new ArrayList<>();
private final ChunkGenerator platformGenerator; private final ChunkGenerator platformGenerator;
private final boolean full; private final boolean full;
private final HashMap<ChunkLoc, byte[][]> dataMap = new HashMap<>();
private boolean loaded = false; private boolean loaded = false;
public BukkitPlotGenerator(IndependentPlotGenerator generator) { public BukkitPlotGenerator(IndependentPlotGenerator generator) {
@ -42,10 +45,26 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
this.populators.add(new BlockPopulator() { this.populators.add(new BlockPopulator() {
@Override @Override
public void populate(World world, Random r, Chunk c) { public void populate(World world, Random r, Chunk c) {
GenChunk result = (GenChunk) BukkitPlotGenerator.this.chunkSetter; ChunkLoc loc = new ChunkLoc(c.getX(), c.getZ());
if (result.result_data != null) { byte[][] resultData;
for (int i = 0; i < result.result_data.length; i++) { if (!BukkitPlotGenerator.this.dataMap.containsKey(loc)) {
byte[] section = result.result_data[i]; GenChunk result = (GenChunk) BukkitPlotGenerator.this.chunkSetter;
// Set the chunk location
result.setChunkWrapper(SetQueue.IMP.new ChunkWrapper(world.getName(), loc.x, loc.z));
// Set the result data
result.result = new short[16][];
result.result_data = new byte[16][];
result.grid = null;
result.cd = null;
// Catch any exceptions (as exceptions usually thrown)
generate(world, loc.x, loc.z, result);
resultData = result.result_data;
} else {
resultData = BukkitPlotGenerator.this.dataMap.remove(loc);
}
if (resultData != null) {
for (int i = 0; i < resultData.length; i++) {
byte[] section = resultData[i];
if (section == null) { if (section == null) {
continue; continue;
} }
@ -247,8 +266,8 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
// Return the result data // Return the result data
return result.cd; return result.cd;
} }
public void generate(World world, int cx, int cz, GenChunk result) { public void generate(World world, int cx, int cz, PlotChunk<?> result) {
// Load if improperly loaded // Load if improperly loaded
if (!this.loaded) { if (!this.loaded) {
String name = world.getName(); String name = world.getName();
@ -283,6 +302,8 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
return this.platformGenerator.generateExtBlockSections(world, r, cx, cz, grid); return this.platformGenerator.generateExtBlockSections(world, r, cx, cz, grid);
} else { } else {
generate(world, cx, cz, result); generate(world, cx, cz, result);
this.dataMap.put(new ChunkLoc(cx, cz), result.result_data);
} }
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
@ -306,7 +327,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
@Override @Override
public String toString() { public String toString() {
if (this.platformGenerator == this) { if (this.platformGenerator == this) {
return "" + this.plotGenerator; return this.plotGenerator.getName();
} }
if (this.platformGenerator == null) { if (this.platformGenerator == null) {
return "null"; return "null";

View File

@ -110,16 +110,6 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.projectiles.BlockProjectileSource; import org.bukkit.projectiles.BlockProjectileSource;
import org.bukkit.projectiles.ProjectileSource; import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -476,8 +466,8 @@ public class PlayerEvents extends PlotListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void playerRespawn(PlayerRespawnEvent event) { public void playerRespawn(PlayerRespawnEvent event) {
final Player player = event.getPlayer(); Player player = event.getPlayer();
final PlotPlayer pp = BukkitUtil.getPlayer(player); PlotPlayer pp = BukkitUtil.getPlayer(player);
EventUtil.manager.doDeathTask(pp); EventUtil.manager.doDeathTask(pp);
} }
@ -784,20 +774,16 @@ public class PlayerEvents extends PlotListener implements Listener {
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBS(BlockSpreadEvent e) { public void onBlockSpread(BlockSpreadEvent event) {
Block b = e.getBlock(); onBlockForm(event); //send to super class.
Location loc = BukkitUtil.getLocation(b.getLocation());
if (loc.isPlotRoad()) {
e.setCancelled(true);
}
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBF(BlockFormEvent e) { public void onBlockForm(BlockFormEvent event) {
Block b = e.getBlock(); Block block = event.getBlock();
Location loc = BukkitUtil.getLocation(b.getLocation()); Location loc = BukkitUtil.getLocation(block.getLocation());
if (loc.isPlotRoad()) { if (loc.isPlotRoad()) {
e.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -1,83 +1,14 @@
package com.plotsquared.bukkit.titles; package com.plotsquared.bukkit.titles;
import com.plotsquared.bukkit.chat.Reflection; import com.plotsquared.bukkit.chat.Reflection;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/** public class DefaultTitleManager extends TitleManager {
* [ PlotSquared DefaultTitleManager by Maxim Van de Wynckel ]
*
* @author Maxim Van de Wynckel
*
*/
public class DefaultTitleManager {
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>();
/* Title packet */
private Class<?> packetTitle;
/* Title packet actions ENUM */
private Class<?> packetActions;
/* Chat serializer */
private Class<?> nmsChatSerializer;
private Class<?> chatBaseComponent;
/* Title text and color */
private String title = "";
private ChatColor titleColor = ChatColor.WHITE;
/* Subtitle text and color */
private String subtitle = "";
private ChatColor subtitleColor = ChatColor.WHITE;
/* Title timings */
private int fadeInTime = -1;
private int stayTime = -1;
private int fadeOutTime = -1;
private boolean ticks = false;
/**
* Create a new 1.8 title.
*
* @param title Title
*/
public DefaultTitleManager(String title) {
this.title = title;
loadClasses();
}
/**
* Create a new 1.8 title.
*
* @param title Title text
* @param subtitle Subtitle text
*/
public DefaultTitleManager(String title, String subtitle) {
this.title = title;
this.subtitle = subtitle;
loadClasses();
}
/**
* Copy 1.8 title.
*
* @param title Title
*/
public DefaultTitleManager(DefaultTitleManager title) {
// Copy title
this.title = title.title;
this.subtitle = title.subtitle;
this.titleColor = title.titleColor;
this.subtitleColor = title.subtitleColor;
this.fadeInTime = title.fadeInTime;
this.fadeOutTime = title.fadeOutTime;
this.stayTime = title.stayTime;
this.ticks = title.ticks;
loadClasses();
}
/** /**
* Create a new 1.8 title. * Create a new 1.8 title.
@ -89,12 +20,7 @@ public class DefaultTitleManager {
* @param fadeOutTime Fade out time * @param fadeOutTime Fade out time
*/ */
public DefaultTitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) { public DefaultTitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
this.title = title; super(title, subtitle, fadeInTime, stayTime, fadeOutTime);
this.subtitle = subtitle;
this.fadeInTime = fadeInTime;
this.stayTime = stayTime;
this.fadeOutTime = fadeOutTime;
loadClasses();
} }
private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) { private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) {
@ -112,115 +38,20 @@ public class DefaultTitleManager {
/** /**
* Load spigot and NMS classes. * Load spigot and NMS classes.
*/ */
private void loadClasses() { @Override void loadClasses() {
this.packetTitle = Reflection.getNMSClass("PacketPlayOutTitle"); this.packetTitle = Reflection.getNMSClass("PacketPlayOutTitle");
this.packetActions = Reflection.getNMSClass("EnumTitleAction"); this.packetActions = Reflection.getNMSClass("EnumTitleAction");
this.chatBaseComponent = Reflection.getNMSClass("IChatBaseComponent"); this.chatBaseComponent = Reflection.getNMSClass("IChatBaseComponent");
this.nmsChatSerializer = Reflection.getNMSClass("ChatSerializer"); this.nmsChatSerializer = Reflection.getNMSClass("ChatSerializer");
} }
/**
* Get title text.
*
* @return Title text
*/
public String getTitle() {
return this.title;
}
/**
* Set title text.
*
* @param title Title
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Get subtitle text.
*
* @return Subtitle text
*/
public String getSubtitle() {
return this.subtitle;
}
/**
* Set subtitle text.
*
* @param subtitle Subtitle text
*/
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
/**
* Set the title color.
*
* @param color Chat color
*/
public void setTitleColor(ChatColor color) {
this.titleColor = color;
}
/**
* Set the subtitle color.
*
* @param color Chat color
*/
public void setSubtitleColor(ChatColor color) {
this.subtitleColor = color;
}
/**
* Set title fade in time.
*
* @param time Time
*/
public void setFadeInTime(int time) {
this.fadeInTime = time;
}
/**
* Set title fade out time.
*
* @param time Time
*/
public void setFadeOutTime(int time) {
this.fadeOutTime = time;
}
/**
* Set title stay time.
*
* @param time Time
*/
public void setStayTime(int time) {
this.stayTime = time;
}
/**
* Set timings to ticks.
*/
public void setTimingsToTicks() {
this.ticks = true;
}
/**
* Set timings to seconds.
*/
public void setTimingsToSeconds() {
this.ticks = false;
}
/** /**
* Send the title to a player. * Send the title to a player.
* *
* @param player Player * @param player Player
* @throws Exception * @throws Exception
*/ */
public void send(Player player) throws Exception { @Override public void send(Player player) throws Exception {
if (this.packetTitle != null) { if (this.packetTitle != null) {
// First reset previous settings // First reset previous settings
resetTitle(player); resetTitle(player);
@ -238,13 +69,14 @@ public class DefaultTitleManager {
} }
// Send title // Send title
Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.title) + "\",color:" + this.titleColor.name().toLowerCase() + "}"); "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getTitle()) + "\",color:" + this.titleColor.name().toLowerCase()
+ "}");
packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[0], serialized); packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[0], serialized);
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
if (!this.subtitle.isEmpty()) { if (!this.getSubtitle().isEmpty()) {
// Send subtitle if present // Send subtitle if present
serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.subtitle) + "\",color:" + this.subtitleColor.name() "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getSubtitle()) + "\",color:" + this.subtitleColor.name()
.toLowerCase() + "}"); .toLowerCase() + "}");
packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[1], serialized); packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[1], serialized);
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
@ -252,24 +84,13 @@ public class DefaultTitleManager {
} }
} }
/**
* Broadcast the title to all players.
*
* @throws Exception
*/
public void broadcast() throws Exception {
for (Player p : Bukkit.getOnlinePlayers()) {
send(p);
}
}
/** /**
* Clear the title. * Clear the title.
* *
* @param player Player * @param player Player
* @throws Exception * @throws Exception
*/ */
public void clearTitle(Player player) throws Exception { @Override public void clearTitle(Player player) throws Exception {
// Send timings first // Send timings first
Object handle = getHandle(player); Object handle = getHandle(player);
Object connection = getField(handle.getClass(), "playerConnection").get(handle); Object connection = getField(handle.getClass(), "playerConnection").get(handle);
@ -285,7 +106,7 @@ public class DefaultTitleManager {
* @param player Player * @param player Player
* @throws Exception * @throws Exception
*/ */
public void resetTitle(Player player) throws Exception { @Override public void resetTitle(Player player) throws Exception {
// Send timings first // Send timings first
Object handle = getHandle(player); Object handle = getHandle(player);
Object connection = getField(handle.getClass(), "playerConnection").get(handle); Object connection = getField(handle.getClass(), "playerConnection").get(handle);
@ -295,29 +116,10 @@ public class DefaultTitleManager {
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
} }
private Class<?> getPrimitiveType(Class<?> clazz) {
return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz;
}
private Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
int a = classes != null ? classes.length : 0;
Class<?>[] types = new Class<?>[a];
for (int i = 0; i < a; i++) {
types[i] = getPrimitiveType(classes[i]);
}
return types;
}
private Object getHandle(Object obj) { private Object getHandle(Object obj) {
try { try {
return getMethod("getHandle", obj.getClass()).invoke(obj); return getMethod("getHandle", obj.getClass()).invoke(obj);
} catch (IllegalAccessException e) { } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
return null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
return null;
} catch (InvocationTargetException e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
} }
@ -339,10 +141,7 @@ public class DefaultTitleManager {
Field field = clazz.getDeclaredField(name); Field field = clazz.getDeclaredField(name);
field.setAccessible(true); field.setAccessible(true);
return field; return field;
} catch (NoSuchFieldException e) { } catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
return null;
} catch (SecurityException e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
} }

View File

@ -1,83 +1,13 @@
package com.plotsquared.bukkit.titles; package com.plotsquared.bukkit.titles;
import com.plotsquared.bukkit.chat.Reflection; import com.plotsquared.bukkit.chat.Reflection;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/** public class DefaultTitleManager_183 extends TitleManager {
* [ PlotSquared DefaultTitleManager by Maxim Van de Wynckel ]
*
* @version 1.1.0
* @author Maxim Van de Wynckel
*
*/
public class DefaultTitleManager_183 {
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>();
/* Title packet */
private Class<?> packetTitle;
/* Title packet actions ENUM */
private Class<?> packetActions;
/* Chat serializer */
private Class<?> nmsChatSerializer;
private Class<?> chatBaseComponent;
/* Title text and color */
private String title = "";
private ChatColor titleColor = ChatColor.WHITE;
/* Subtitle text and color */
private String subtitle = "";
private ChatColor subtitleColor = ChatColor.WHITE;
/* Title timings */
private int fadeInTime = -1;
private int stayTime = -1;
private int fadeOutTime = -1;
private boolean ticks = false;
/**
* Create a new 1.8 title
*
* @param title Title
*/
public DefaultTitleManager_183(String title) {
this.title = title;
loadClasses();
}
/**
* Create a new 1.8 title.
*
* @param title Title text
* @param subtitle Subtitle text
*/
public DefaultTitleManager_183(String title, String subtitle) {
this.title = title;
this.subtitle = subtitle;
loadClasses();
}
/**
* Copy 1.8 title.
*
* @param title Title
*/
public DefaultTitleManager_183(DefaultTitleManager_183 title) {
// Copy title
this.title = title.title;
this.subtitle = title.subtitle;
this.titleColor = title.titleColor;
this.subtitleColor = title.subtitleColor;
this.fadeInTime = title.fadeInTime;
this.fadeOutTime = title.fadeOutTime;
this.stayTime = title.stayTime;
this.ticks = title.ticks;
loadClasses();
}
/** /**
* Create a new 1.8 title. * Create a new 1.8 title.
@ -89,12 +19,7 @@ public class DefaultTitleManager_183 {
* @param fadeOutTime Fade out time * @param fadeOutTime Fade out time
*/ */
public DefaultTitleManager_183(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) { public DefaultTitleManager_183(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
this.title = title; super(title, subtitle, fadeInTime, stayTime, fadeOutTime);
this.subtitle = subtitle;
this.fadeInTime = fadeInTime;
this.stayTime = stayTime;
this.fadeOutTime = fadeOutTime;
loadClasses();
} }
private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) { private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) {
@ -112,7 +37,8 @@ public class DefaultTitleManager_183 {
/** /**
* Load spigot and NMS classes. * Load spigot and NMS classes.
*/ */
private void loadClasses() { @Override
void loadClasses() {
this.packetTitle = Reflection.getNMSClass("PacketPlayOutTitle"); this.packetTitle = Reflection.getNMSClass("PacketPlayOutTitle");
this.chatBaseComponent = Reflection.getNMSClass("IChatBaseComponent"); this.chatBaseComponent = Reflection.getNMSClass("IChatBaseComponent");
this.packetActions = Reflection.getNMSClass("PacketPlayOutTitle$EnumTitleAction"); this.packetActions = Reflection.getNMSClass("PacketPlayOutTitle$EnumTitleAction");
@ -120,108 +46,7 @@ public class DefaultTitleManager_183 {
} }
/** @Override
* Get title text.
*
* @return Title text
*/
public String getTitle() {
return this.title;
}
/**
* Set title text.
*
* @param title Title
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Get subtitle text.
*
* @return Subtitle text
*/
public String getSubtitle() {
return this.subtitle;
}
/**
* Set subtitle text.
*
* @param subtitle Subtitle text
*/
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
/**
* Set the title color.
*
* @param color Chat color
*/
public void setTitleColor(ChatColor color) {
this.titleColor = color;
}
/**
* Set the subtitle color.
*
* @param color Chat color
*/
public void setSubtitleColor(ChatColor color) {
this.subtitleColor = color;
}
/**
* Set title fade in time.
*
* @param time
* Time
*/
public void setFadeInTime(int time) {
this.fadeInTime = time;
}
/**
* Set title fade out time.
*
* @param time Time
*/
public void setFadeOutTime(int time) {
this.fadeOutTime = time;
}
/**
* Set title stay time.
*
* @param time Time
*/
public void setStayTime(int time) {
this.stayTime = time;
}
/**
* Set timings to ticks.
*/
public void setTimingsToTicks() {
this.ticks = true;
}
/**
* Set timings to seconds.
*/
public void setTimingsToSeconds() {
this.ticks = false;
}
/**
* Send the title to a player.
*
* @param player Player
* @throws Exception
*/
public void send(Player player) throws Exception { public void send(Player player) throws Exception {
if (this.packetTitle != null) { if (this.packetTitle != null) {
// First reset previous settings // First reset previous settings
@ -242,13 +67,14 @@ public class DefaultTitleManager_183 {
} }
// Send title // Send title
Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.title) + "\",color:" + this.titleColor.name().toLowerCase() + "}"); "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getTitle()) + "\",color:" + this.titleColor.name().toLowerCase()
+ "}");
packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[0], serialized); packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[0], serialized);
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
if (!this.subtitle.isEmpty()) { if (!this.getSubtitle().isEmpty()) {
// Send subtitle if present // Send subtitle if present
serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.subtitle) + "\",color:" + this.subtitleColor.name() "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getSubtitle()) + "\",color:" + this.subtitleColor.name()
.toLowerCase() + "}"); .toLowerCase() + "}");
packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[1], serialized); packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[1], serialized);
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
@ -256,22 +82,13 @@ public class DefaultTitleManager_183 {
} }
} }
/**
* Broadcast the title to all players.
* @throws Exception
*/
public void broadcast() throws Exception {
for (Player p : Bukkit.getOnlinePlayers()) {
send(p);
}
}
/** /**
* Clear the title. * Clear the title.
* *
* @param player Player * @param player Player
* @throws Exception * @throws Exception
*/ */
@Override
public void clearTitle(Player player) throws Exception { public void clearTitle(Player player) throws Exception {
// Send timings first // Send timings first
Object handle = getHandle(player); Object handle = getHandle(player);
@ -288,6 +105,7 @@ public class DefaultTitleManager_183 {
* @param player Player * @param player Player
* @throws Exception * @throws Exception
*/ */
@Override
public void resetTitle(Player player) throws Exception { public void resetTitle(Player player) throws Exception {
// Send timings first // Send timings first
Object handle = getHandle(player); Object handle = getHandle(player);
@ -298,19 +116,6 @@ public class DefaultTitleManager_183 {
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
} }
private Class<?> getPrimitiveType(Class<?> clazz) {
return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz;
}
private Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
int a = classes != null ? classes.length : 0;
Class<?>[] types = new Class<?>[a];
for (int i = 0; i < a; i++) {
types[i] = getPrimitiveType(classes[i]);
}
return types;
}
private Object getHandle(Object obj) { private Object getHandle(Object obj) {
try { try {
return getMethod("getHandle", obj.getClass()).invoke(obj); return getMethod("getHandle", obj.getClass()).invoke(obj);

View File

@ -11,7 +11,7 @@ public class DefaultTitle_183 extends AbstractTitle {
try { try {
DefaultTitleManager_183 title = new DefaultTitleManager_183(head, sub, in, delay, out); DefaultTitleManager_183 title = new DefaultTitleManager_183(head, sub, in, delay, out);
title.send(((BukkitPlayer) player).player); title.send(((BukkitPlayer) player).player);
} catch (Throwable e) { } catch (Exception e) {
AbstractTitle.TITLE_CLASS = new HackTitle(); AbstractTitle.TITLE_CLASS = new HackTitle();
AbstractTitle.TITLE_CLASS.sendTitle(player, head, sub, in, delay, out); AbstractTitle.TITLE_CLASS.sendTitle(player, head, sub, in, delay, out);
} }

View File

@ -13,7 +13,7 @@ public class HackTitle extends AbstractTitle {
try { try {
HackTitleManager title = new HackTitleManager(head, sub, in, delay, out); HackTitleManager title = new HackTitleManager(head, sub, in, delay, out);
title.send(((BukkitPlayer) player).player); title.send(((BukkitPlayer) player).player);
} catch (Throwable e) { } catch (Exception e) {
PS.debug("&cYour server version does not support titles!"); PS.debug("&cYour server version does not support titles!");
Settings.TITLES = false; Settings.TITLES = false;
AbstractTitle.TITLE_CLASS = null; AbstractTitle.TITLE_CLASS = null;

View File

@ -8,75 +8,8 @@ import org.bukkit.entity.Player;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/** public class HackTitleManager extends TitleManager {
* Minecraft 1.8 Title.
*
* @version 1.0.4
* @author Maxim Van de Wynckel
*/
public class HackTitleManager {
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>();
/* Title packet */
private Class<?> packetTitle;
/* Title packet actions ENUM */
private Class<?> packetActions;
/* Chat serializer */
private Class<?> nmsChatSerializer;
/* Title text and color */
private String title = "";
private ChatColor titleColor = ChatColor.WHITE;
/* Subtitle text and color */
private String subtitle = "";
private ChatColor subtitleColor = ChatColor.WHITE;
/* Title timings. */
private int fadeInTime = -1;
private int stayTime = -1;
private int fadeOutTime = -1;
private boolean ticks = false;
/**
* Create a new 1.8 title.
*
* @param title Title
*/
public HackTitleManager(String title) {
this.title = title;
loadClasses();
}
/**
* Create a new 1.8 title.
*
* @param title Title text
* @param subtitle Subtitle text
*/
public HackTitleManager(String title, String subtitle) {
this.title = title;
this.subtitle = subtitle;
loadClasses();
}
/**
* Copy 1.8 title.
*
* @param title Title
*/
public HackTitleManager(HackTitleManager title) {
// Copy title
this.title = title.title;
this.subtitle = title.subtitle;
this.titleColor = title.titleColor;
this.subtitleColor = title.subtitleColor;
this.fadeInTime = title.fadeInTime;
this.fadeOutTime = title.fadeOutTime;
this.stayTime = title.stayTime;
this.ticks = title.ticks;
loadClasses();
}
/** /**
* Create a new 1.8 title. * Create a new 1.8 title.
@ -88,12 +21,7 @@ public class HackTitleManager {
* @param fadeOutTime Fade out time * @param fadeOutTime Fade out time
*/ */
public HackTitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) { public HackTitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
this.title = title; super(title, subtitle, fadeInTime, stayTime, fadeOutTime);
this.subtitle = subtitle;
this.fadeInTime = fadeInTime;
this.stayTime = stayTime;
this.fadeOutTime = fadeOutTime;
loadClasses();
} }
private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) { private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) {
@ -111,114 +39,20 @@ public class HackTitleManager {
/** /**
* Load spigot and NMS classes. * Load spigot and NMS classes.
*/ */
private void loadClasses() { @Override
void loadClasses() {
this.packetTitle = getClass("org.spigotmc.ProtocolInjector$PacketTitle"); this.packetTitle = getClass("org.spigotmc.ProtocolInjector$PacketTitle");
this.packetActions = getClass("org.spigotmc.ProtocolInjector$PacketTitle$Action"); this.packetActions = getClass("org.spigotmc.ProtocolInjector$PacketTitle$Action");
this.nmsChatSerializer = Reflection.getNMSClass("ChatSerializer"); this.nmsChatSerializer = Reflection.getNMSClass("ChatSerializer");
} }
/**
* Get title text.
*
* @return Title text
*/
public String getTitle() {
return this.title;
}
/**
* Set title text.
*
* @param title Title
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Get subtitle text.
*
* @return Subtitle text
*/
public String getSubtitle() {
return this.subtitle;
}
/**
* Set subtitle text.
*
* @param subtitle Subtitle text
*/
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
/**
* Set the title color.
*
* @param color Chat color
*/
public void setTitleColor(ChatColor color) {
this.titleColor = color;
}
/**
* Set the subtitle color.
*
* @param color Chat color
*/
public void setSubtitleColor(ChatColor color) {
this.subtitleColor = color;
}
/**
* Set title fade in time.
*
* @param time Time
*/
public void setFadeInTime(int time) {
this.fadeInTime = time;
}
/**
* Set title fade out time.
*
* @param time Time
*/
public void setFadeOutTime(int time) {
this.fadeOutTime = time;
}
/**
* Set title stay time.
*
* @param time Time
*/
public void setStayTime(int time) {
this.stayTime = time;
}
/**
* Set timings to ticks.
*/
public void setTimingsToTicks() {
this.ticks = true;
}
/**
* Set timings to seconds.
*/
public void setTimingsToSeconds() {
this.ticks = false;
}
/** /**
* Send the title to a player. * Send the title to a player.
* *
* @param player Player * @param player Player
* @throws Exception on NMS error * @throws Exception on NMS error
*/ */
public void send(Player player) throws Exception { @Override public void send(Player player) throws Exception {
if ((getProtocolVersion(player) >= 47) && isSpigot() && (this.packetTitle != null)) { if ((getProtocolVersion(player) >= 47) && isSpigot() && (this.packetTitle != null)) {
// First reset previous settings // First reset previous settings
resetTitle(player); resetTitle(player);
@ -237,14 +71,15 @@ public class HackTitleManager {
} }
// Send title // Send title
Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.title) + "\",color:" + this.titleColor.name().toLowerCase() + "}"); "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getTitle()) + "\",color:" + this.titleColor.name().toLowerCase()
+ "}");
packet = this.packetTitle.getConstructor(this.packetActions, Reflection.getNMSClass("IChatBaseComponent")) packet = this.packetTitle.getConstructor(this.packetActions, Reflection.getNMSClass("IChatBaseComponent"))
.newInstance(actions[0], serialized); .newInstance(actions[0], serialized);
sendPacket.invoke(connection, packet); sendPacket.invoke(connection, packet);
if (!this.subtitle.isEmpty()) { if (!this.getSubtitle().isEmpty()) {
// Send subtitle if present // Send subtitle if present
serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.subtitle) + "\",color:" + this.subtitleColor.name() "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getSubtitle()) + "\",color:" + this.subtitleColor.name()
.toLowerCase() + "}"); .toLowerCase() + "}");
packet = this.packetTitle.getConstructor(this.packetActions, Reflection.getNMSClass("IChatBaseComponent")) packet = this.packetTitle.getConstructor(this.packetActions, Reflection.getNMSClass("IChatBaseComponent"))
.newInstance(actions[1], serialized); .newInstance(actions[1], serialized);
@ -253,23 +88,13 @@ public class HackTitleManager {
} }
} }
/**
* Broadcast the title to all players.
* @throws Exception on NMS Error
*/
public void broadcast() throws Exception {
for (Player p : Bukkit.getOnlinePlayers()) {
send(p);
}
}
/** /**
* Clear the title. * Clear the title.
* *
* @param player Player * @param player Player
* @throws Exception on NMS Error * @throws Exception on NMS Error
*/ */
public void clearTitle(Player player) throws Exception { @Override public void clearTitle(Player player) throws Exception {
if ((getProtocolVersion(player) >= 47) && isSpigot()) { if ((getProtocolVersion(player) >= 47) && isSpigot()) {
// Send timings first // Send timings first
Object handle = getHandle(player); Object handle = getHandle(player);
@ -287,7 +112,7 @@ public class HackTitleManager {
* @param player Player * @param player Player
* @throws Exception on NMS error. * @throws Exception on NMS error.
*/ */
public void resetTitle(Player player) throws Exception { @Override public void resetTitle(Player player) throws Exception {
if ((getProtocolVersion(player) >= 47) && isSpigot()) { if ((getProtocolVersion(player) >= 47) && isSpigot()) {
// Send timings first // Send timings first
Object handle = getHandle(player); Object handle = getHandle(player);
@ -346,19 +171,6 @@ public class HackTitleManager {
return f.get(obj); return f.get(obj);
} }
private Class<?> getPrimitiveType(Class<?> clazz) {
return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz;
}
private Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
int a = classes != null ? classes.length : 0;
Class<?>[] types = new Class<?>[a];
for (int i = 0; i < a; i++) {
types[i] = getPrimitiveType(classes[i]);
}
return types;
}
private Object getHandle(Object obj) { private Object getHandle(Object obj) {
try { try {
return getMethod("getHandle", obj.getClass()).invoke(obj); return getMethod("getHandle", obj.getClass()).invoke(obj);

View File

@ -0,0 +1,204 @@
package com.plotsquared.bukkit.titles;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
public abstract class TitleManager {
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>();
/* Title packet */
Class<?> packetTitle;
/* Title packet actions ENUM */
Class<?> packetActions;
/* Chat serializer */
Class<?> nmsChatSerializer;
Class<?> chatBaseComponent;
ChatColor titleColor = ChatColor.WHITE;
ChatColor subtitleColor = ChatColor.WHITE;
/* Title timings */
int fadeInTime = -1;
int stayTime = -1;
int fadeOutTime = -1;
boolean ticks = false;
/* Title text and color */
private String title = "";
/* Subtitle text and color */
private String subtitle = "";
/**
* Create a new 1.8 title.
*
* @param title Title text
* @param subtitle Subtitle text
* @param fadeInTime Fade in time
* @param stayTime Stay on screen time
* @param fadeOutTime Fade out time
*/
TitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
this.title = title;
this.subtitle = subtitle;
this.fadeInTime = fadeInTime;
this.stayTime = stayTime;
this.fadeOutTime = fadeOutTime;
loadClasses();
}
abstract void loadClasses();
/**
* Get title text.
*
* @return Title text
*/
public final String getTitle() {
return this.title;
}
/**
* Set title text.
*
* @param title Title
*/
public final void setTitle(String title) {
this.title = title;
}
/**
* Get subtitle text.
*
* @return Subtitle text
*/
public final String getSubtitle() {
return this.subtitle;
}
/**
* Set subtitle text.
*
* @param subtitle Subtitle text
*/
public final void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
/**
* Set the title color.
*
* @param color Chat color
*/
public final void setTitleColor(ChatColor color) {
this.titleColor = color;
}
/**
* Set the subtitle color.
*
* @param color Chat color
*/
public final void setSubtitleColor(ChatColor color) {
this.subtitleColor = color;
}
/**
* Set title fade in time.
*
* @param time Time
*/
public final void setFadeInTime(int time) {
this.fadeInTime = time;
}
/**
* Set title fade out time.
*
* @param time Time
*/
public final void setFadeOutTime(int time) {
this.fadeOutTime = time;
}
/**
* Set title stay time.
*
* @param time Time
*/
public final void setStayTime(int time) {
this.stayTime = time;
}
/**
* Set timings to ticks.
*/
public final void setTimingsToTicks() {
this.ticks = true;
}
/**
* Set timings to seconds.
*/
public final void setTimingsToSeconds() {
this.ticks = false;
}
/**
* Send the title to a player.
*
* @param player Player
* @throws Exception
*/
public abstract void send(Player player) throws Exception;
/**
* Broadcast the title to all players.
*
* @throws Exception
*/
public final void broadcast() throws Exception {
for (Player p : Bukkit.getOnlinePlayers()) {
send(p);
}
}
/**
* Clear the title.
*
* @param player Player
* @throws Exception
*/
public abstract void clearTitle(Player player) throws Exception;
/**
* Reset the title settings.
*
* @param player Player
* @throws Exception
*/
public abstract void resetTitle(Player player) throws Exception;
private Class<?> getPrimitiveType(Class<?> clazz) {
if (CORRESPONDING_TYPES.containsKey(clazz)) {
return CORRESPONDING_TYPES.get(clazz);
} else {
return clazz;
}
}
final Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
int a;
if (classes != null) {
a = classes.length;
} else {
a = 0;
}
Class<?>[] types = new Class<?>[a];
for (int i = 0; i < a; i++) {
types[i] = getPrimitiveType(classes[i]);
}
return types;
}
}

View File

@ -15,16 +15,6 @@ public class BukkitEconHandler extends EconHandler {
private Economy econ; private Economy econ;
private Permission perms; private Permission perms;
public Economy getEconomy() {
init();
return this.econ;
}
public Permission getPermissions() {
init();
return this.perms;
}
public boolean init() { public boolean init() {
if (this.econ == null || this.perms == null) { if (this.econ == null || this.perms == null) {
setupPermissions(); setupPermissions();

View File

@ -6,35 +6,41 @@ import org.bukkit.Bukkit;
public class BukkitTaskManager extends TaskManager { public class BukkitTaskManager extends TaskManager {
private final BukkitMain bukkitMain;
public BukkitTaskManager(BukkitMain bukkitMain) {
this.bukkitMain = bukkitMain;
}
@Override @Override
public int taskRepeat(Runnable runnable, int interval) { public int taskRepeat(Runnable runnable, int interval) {
return BukkitMain.THIS.getServer().getScheduler().scheduleSyncRepeatingTask(BukkitMain.THIS, runnable, interval, interval); return this.bukkitMain.getServer().getScheduler().scheduleSyncRepeatingTask(this.bukkitMain, runnable, interval, interval);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@Override @Override
public int taskRepeatAsync(Runnable runnable, int interval) { public int taskRepeatAsync(Runnable runnable, int interval) {
return BukkitMain.THIS.getServer().getScheduler().scheduleAsyncRepeatingTask(BukkitMain.THIS, runnable, interval, interval); return this.bukkitMain.getServer().getScheduler().scheduleAsyncRepeatingTask(this.bukkitMain, runnable, interval, interval);
} }
@Override @Override
public void taskAsync(Runnable runnable) { public void taskAsync(Runnable runnable) {
BukkitMain.THIS.getServer().getScheduler().runTaskAsynchronously(BukkitMain.THIS, runnable).getTaskId(); this.bukkitMain.getServer().getScheduler().runTaskAsynchronously(this.bukkitMain, runnable).getTaskId();
} }
@Override @Override
public void task(Runnable runnable) { public void task(Runnable runnable) {
BukkitMain.THIS.getServer().getScheduler().runTask(BukkitMain.THIS, runnable).getTaskId(); this.bukkitMain.getServer().getScheduler().runTask(this.bukkitMain, runnable).getTaskId();
} }
@Override @Override
public void taskLater(Runnable runnable, int delay) { public void taskLater(Runnable runnable, int delay) {
BukkitMain.THIS.getServer().getScheduler().runTaskLater(BukkitMain.THIS, runnable, delay).getTaskId(); this.bukkitMain.getServer().getScheduler().runTaskLater(this.bukkitMain, runnable, delay).getTaskId();
} }
@Override @Override
public void taskLaterAsync(Runnable runnable, int delay) { public void taskLaterAsync(Runnable runnable, int delay) {
BukkitMain.THIS.getServer().getScheduler().runTaskLaterAsynchronously(BukkitMain.THIS, runnable, delay); this.bukkitMain.getServer().getScheduler().runTaskLaterAsynchronously(this.bukkitMain, runnable, delay);
} }
@Override @Override

View File

@ -12,7 +12,6 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod;
import com.intellectualcrafters.plot.util.SetQueue; import com.intellectualcrafters.plot.util.SetQueue;
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.SendChunk; import com.plotsquared.bukkit.util.SendChunk;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
@ -370,7 +369,6 @@ public class FastQueue_1_8 extends SlowQueue {
*/ */
@Override @Override
public void sendChunk(String world, Collection<ChunkLoc> locations) { public void sendChunk(String world, Collection<ChunkLoc> locations) {
World worldObj = BukkitUtil.getWorld(world);
for (ChunkLoc loc : locations) { for (ChunkLoc loc : locations) {
ChunkWrapper wrapper = SetQueue.IMP.new ChunkWrapper(world, loc.x, loc.z); ChunkWrapper wrapper = SetQueue.IMP.new ChunkWrapper(world, loc.x, loc.z);
this.toUpdate.remove(wrapper); this.toUpdate.remove(wrapper);

View File

@ -1,5 +1,7 @@
package com.plotsquared.bukkit.util.block; package com.plotsquared.bukkit.util.block;
import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass;
import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.PseudoRandom; import com.intellectualcrafters.plot.object.PseudoRandom;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
@ -15,6 +17,12 @@ import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.SendChunk; import com.plotsquared.bukkit.util.SendChunk;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Biome;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -24,14 +32,6 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Biome;
import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass;
public class FastQueue_1_8_3 extends SlowQueue { public class FastQueue_1_8_3 extends SlowQueue {
@ -266,7 +266,7 @@ public class FastQueue_1_8_3 extends SlowQueue {
World world = BukkitUtil.getWorld(worldname); World world = BukkitUtil.getWorld(worldname);
Chunk chunk = world.getChunkAt(loc.x, loc.z); Chunk chunk = world.getChunkAt(loc.x, loc.z);
if (chunk.getTileEntities().length > 0) { if (chunk.getTileEntities().length > 0) {
Object w = methodGetHandleWorld.of(world).call(); Object w = this.methodGetHandleWorld.of(world).call();
((Collection) this.tileEntityListTick.of(w).get()).clear(); ((Collection) this.tileEntityListTick.of(w).get()).clear();
} }
super.regenerateChunk(worldname, loc); super.regenerateChunk(worldname, loc);

View File

@ -1,5 +1,7 @@
package com.plotsquared.bukkit.util.block; package com.plotsquared.bukkit.util.block;
import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass;
import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.PseudoRandom; import com.intellectualcrafters.plot.object.PseudoRandom;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
@ -13,6 +15,12 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod.RefExecutor;
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Biome;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -22,14 +30,6 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Biome;
import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass;
public class FastQueue_1_9 extends SlowQueue { public class FastQueue_1_9 extends SlowQueue {
@ -85,8 +85,8 @@ public class FastQueue_1_9 extends SlowQueue {
World world = BukkitUtil.getWorld(worldname); World world = BukkitUtil.getWorld(worldname);
Chunk chunk = world.getChunkAt(loc.x, loc.z); Chunk chunk = world.getChunkAt(loc.x, loc.z);
if (chunk.getTileEntities().length > 0) { if (chunk.getTileEntities().length > 0) {
Object c = methodGetHandleChunk.of(chunk).call(); Object c = this.methodGetHandleChunk.of(chunk).call();
Object w = methodGetWorld.of(c).call(); Object w = this.methodGetWorld.of(c).call();
((Collection) this.tileEntityListTick.of(w).get()).clear(); ((Collection) this.tileEntityListTick.of(w).get()).clear();
} }
super.regenerateChunk(worldname, loc); super.regenerateChunk(worldname, loc);
@ -97,7 +97,7 @@ public class FastQueue_1_9 extends SlowQueue {
* @param plotChunk * @param plotChunk
*/ */
@Override @Override
public void execute(final PlotChunk<Chunk> plotChunk) { public void execute(PlotChunk<Chunk> plotChunk) {
final FastChunk_1_9 fs = (FastChunk_1_9) plotChunk; final FastChunk_1_9 fs = (FastChunk_1_9) plotChunk;
Chunk chunk = plotChunk.getChunk(); Chunk chunk = plotChunk.getChunk();
World world = chunk.getWorld(); World world = chunk.getWorld();
@ -425,7 +425,7 @@ public class FastQueue_1_9 extends SlowQueue {
* @param locations * @param locations
*/ */
@Override @Override
public void sendChunk(final String world, final Collection<ChunkLoc> locations) { public void sendChunk(String world, Collection<ChunkLoc> locations) {
World worldObj = BukkitUtil.getWorld(world); World worldObj = BukkitUtil.getWorld(world);
for (ChunkLoc loc : locations) { for (ChunkLoc loc : locations) {
worldObj.refreshChunk(loc.x, loc.z); worldObj.refreshChunk(loc.x, loc.z);

View File

@ -41,7 +41,9 @@ public class GenChunk extends PlotChunk<Chunk> {
@Override @Override
public void setBiome(int x, int z, int biome) { public void setBiome(int x, int z, int biome) {
this.grid.setBiome(x, z, this.biomes[biome]); if (this.grid != null) {
this.grid.setBiome(x, z, this.biomes[biome]);
}
} }
public void setBiome(int x, int z, Biome biome) { public void setBiome(int x, int z, Biome biome) {

View File

@ -9,13 +9,14 @@ import com.intellectualcrafters.plot.util.PlotQueue;
import com.intellectualcrafters.plot.util.SetQueue; import com.intellectualcrafters.plot.util.SetQueue;
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import org.bukkit.Chunk;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Chunk;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
public class SlowQueue implements PlotQueue<Chunk> { public class SlowQueue implements PlotQueue<Chunk> {

View File

@ -53,6 +53,7 @@ import com.intellectualcrafters.plot.util.WorldUtil;
import com.intellectualcrafters.plot.util.area.QuadMap; import com.intellectualcrafters.plot.util.area.QuadMap;
import com.plotsquared.listener.WESubscriber; import com.plotsquared.listener.WESubscriber;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -89,6 +90,7 @@ import java.util.zip.ZipInputStream;
public class PS { public class PS {
private static PS instance; private static PS instance;
public final IPlotMain IMP;
private final HashSet<Integer> plotAreaHashCheck = new HashSet<>(); private final HashSet<Integer> plotAreaHashCheck = new HashSet<>();
/** /**
* All plot areas mapped by world (quick world access). * All plot areas mapped by world (quick world access).
@ -98,6 +100,9 @@ public class PS {
* All plot areas mapped by location (quick location based access). * All plot areas mapped by location (quick location based access).
*/ */
private final HashMap<String, QuadMap<PlotArea>> plotAreaGrid = new HashMap<>(); private final HashMap<String, QuadMap<PlotArea>> plotAreaGrid = new HashMap<>();
private final int[] version;
private final String platform;
private final Thread thread;
public HashMap<String, Set<PlotCluster>> clusters_tmp; public HashMap<String, Set<PlotCluster>> clusters_tmp;
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp; public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
public File styleFile; public File styleFile;
@ -108,7 +113,6 @@ public class PS {
public YamlConfiguration config; public YamlConfiguration config;
public YamlConfiguration storage; public YamlConfiguration storage;
public YamlConfiguration commands; public YamlConfiguration commands;
public IPlotMain IMP = null;
public TaskManager TASK; public TaskManager TASK;
public WorldEdit worldedit; public WorldEdit worldedit;
public URL update; public URL update;
@ -117,25 +121,23 @@ public class PS {
* All plot areas (quick global access). * All plot areas (quick global access).
*/ */
private PlotArea[] plotAreas = new PlotArea[0]; private PlotArea[] plotAreas = new PlotArea[0];
private File storageFile; private File storageFile;
private File file = null; // This file private File file = null; // This file
private int[] version;
private int[] lastVersion; private int[] lastVersion;
private String platform = null;
private Database database; private Database database;
private Thread thread;
/** /**
* Initialize PlotSquared with the desired Implementation class. * Initialize PlotSquared with the desired Implementation class.
* @param imp_class * @param iPlotMain Implementation of {@link IPlotMain} used
* @param platform The platform being used
*/ */
public PS(IPlotMain imp_class, String platform) { public PS(IPlotMain iPlotMain, String platform) {
PS.instance = this;
this.thread = Thread.currentThread();
this.IMP = iPlotMain;
this.platform = platform;
this.version = this.IMP.getPluginVersion();
try { try {
PS.instance = this;
this.thread = Thread.currentThread();
SetupUtils.generators = new HashMap<>();
this.IMP = imp_class;
new ReflectionUtils(this.IMP.getNMSPackage()); new ReflectionUtils(this.IMP.getNMSPackage());
try { try {
URL url = PS.class.getProtectionDomain().getCodeSource().getLocation(); URL url = PS.class.getProtectionDomain().getCodeSource().getLocation();
@ -147,8 +149,6 @@ public class PS {
this.file = new File(this.IMP.getDirectory().getParentFile(), "PlotSquared-" + platform + ".jar"); this.file = new File(this.IMP.getDirectory().getParentFile(), "PlotSquared-" + platform + ".jar");
} }
} }
this.version = this.IMP.getPluginVersion();
this.platform = platform;
if (getJavaVersion() < 1.7) { if (getJavaVersion() < 1.7) {
PS.log(C.CONSOLE_JAVA_OUTDATED_1_7); PS.log(C.CONSOLE_JAVA_OUTDATED_1_7);
this.IMP.disable(); this.IMP.disable();
@ -194,50 +194,7 @@ public class PS {
} }
// create UUIDWrapper // create UUIDWrapper
UUIDHandler.implementation = this.IMP.initUUIDHandler(); UUIDHandler.implementation = this.IMP.initUUIDHandler();
TaskManager.runTaskLater(new Runnable() { startUuidCatching();
@Override
public void run() {
debug("Starting UUID caching");
UUIDHandler.startCaching(new Runnable() {
@Override
public void run() {
for (Plot plot : getPlots()) {
if (plot.hasOwner() && plot.temp != -1) {
if (UUIDHandler.getName(plot.owner) == null) {
UUIDHandler.implementation.unknown.add(plot.owner);
}
}
}
// Auto clearing
if (Settings.AUTO_CLEAR) {
ExpireManager.IMP = new ExpireManager();
if (Settings.AUTO_CLEAR_CONFIRMATION) {
ExpireManager.IMP.runConfirmedTask();
} else {
ExpireManager.IMP.runAutomatedTask();
}
}
// PlotMe
if (Settings.CONVERT_PLOTME || Settings.CACHE_PLOTME) {
TaskManager.runTaskLater(new Runnable() {
@Override
public void run() {
if (PS.this.IMP.initPlotMeConverter()) {
PS.log("&c=== IMPORTANT ===");
PS.log("&cTHIS MESSAGE MAY BE EXTREMELY HELPFUL IF YOU HAVE TROUBLE CONVERTING PLOTME!");
PS.log("&c - Make sure 'UUID.read-from-disk' is disabled (false)!");
PS.log("&c - Sometimes the database can be locked, deleting PlotMe.jar beforehand will fix the issue!");
PS.log("&c - After the conversion is finished, please set 'plotme-convert.enabled' to false in the "
+ "'settings.yml'");
}
}
}, 20);
}
}
});
}
}, 20);
// create event util class // create event util class
EventUtil.manager = this.IMP.initEventUtil(); EventUtil.manager = this.IMP.initEventUtil();
// create Hybrid utility class // create Hybrid utility class
@ -348,10 +305,6 @@ public class PS {
PS.get().IMP.log(StringMan.getString(message)); PS.get().IMP.log(StringMan.getString(message));
} }
public static void stacktrace() {
System.err.println(StringMan.join(new Exception().getStackTrace(), "\n\tat "));
}
/** /**
* Log a message to the IPlotMain logger. * Log a message to the IPlotMain logger.
* *
@ -364,6 +317,53 @@ public class PS {
} }
} }
private void startUuidCatching() {
TaskManager.runTaskLater(new Runnable() {
@Override
public void run() {
debug("Starting UUID caching");
UUIDHandler.startCaching(new Runnable() {
@Override
public void run() {
for (Plot plot : getPlots()) {
if (plot.hasOwner() && plot.temp != -1) {
if (UUIDHandler.getName(plot.owner) == null) {
UUIDHandler.implementation.unknown.add(plot.owner);
}
}
}
// Auto clearing
if (Settings.AUTO_CLEAR) {
ExpireManager.IMP = new ExpireManager();
if (Settings.AUTO_CLEAR_CONFIRMATION) {
ExpireManager.IMP.runConfirmedTask();
} else {
ExpireManager.IMP.runAutomatedTask();
}
}
// PlotMe
if (Settings.CONVERT_PLOTME || Settings.CACHE_PLOTME) {
TaskManager.runTaskLater(new Runnable() {
@Override
public void run() {
if (PS.this.IMP.initPlotMeConverter()) {
PS.log("&c=== IMPORTANT ===");
PS.log("&cTHIS MESSAGE MAY BE EXTREMELY HELPFUL IF YOU HAVE TROUBLE CONVERTING PLOTME!");
PS.log("&c - Make sure 'UUID.read-from-disk' is disabled (false)!");
PS.log("&c - Sometimes the database can be locked, deleting PlotMe.jar beforehand will fix the issue!");
PS.log("&c - After the conversion is finished, please set 'plotme-convert.enabled' to false in the "
+ "'settings.yml'");
}
}
}, 20);
}
}
});
}
}, 20);
}
public boolean isMainThread(Thread thread) { public boolean isMainThread(Thread thread) {
return this.thread == thread; return this.thread == thread;
} }
@ -2398,10 +2398,6 @@ public class PS {
return count; return count;
} }
public int getPlotAreaCount(String world) {
return this.plotAreaMap.size();
}
public Set<PlotArea> getPlotAreas() { public Set<PlotArea> getPlotAreas() {
HashSet<PlotArea> set = new HashSet<>(this.plotAreas.length); HashSet<PlotArea> set = new HashSet<>(this.plotAreas.length);
Collections.addAll(set, this.plotAreas); Collections.addAll(set, this.plotAreas);

View File

@ -357,8 +357,7 @@ public class DebugExec extends SubCommand {
@Override @Override
public void run(Integer i, File file, PlotMessage message) { public void run(Integer i, File file, PlotMessage message) {
String name; String name = file.getName();
name = file.getName();
message.text("[").color("$3") message.text("[").color("$3")
.text(i + "").color("$1") .text(i + "").color("$1")

View File

@ -19,7 +19,7 @@ import com.plotsquared.general.commands.CommandDeclaration;
description = "Mark a plot as done", description = "Mark a plot as done",
permission = "plots.done", permission = "plots.done",
category = CommandCategory.SETTINGS, category = CommandCategory.SETTINGS,
requiredType = RequiredType.NONE) requiredType = RequiredType.PLAYER)
public class Done extends SubCommand { public class Done extends SubCommand {
@Override @Override

View File

@ -22,7 +22,7 @@ import java.net.URL;
command = "download", command = "download",
aliases = {"dl"}, aliases = {"dl"},
category = CommandCategory.SCHEMATIC, category = CommandCategory.SCHEMATIC,
requiredType = RequiredType.NONE, requiredType = RequiredType.PLAYER,
description = "Download your plot", description = "Download your plot",
permission = "plots.download") permission = "plots.download")
public class Download extends SubCommand { public class Download extends SubCommand {

View File

@ -13,6 +13,7 @@ import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.Permissions;
import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.StringMan;
import com.plotsquared.general.commands.CommandDeclaration; import com.plotsquared.general.commands.CommandDeclaration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -24,7 +25,7 @@ import java.util.Map;
usage = "/plot flag <set|remove|add|list|info> <flag> <value>", usage = "/plot flag <set|remove|add|list|info> <flag> <value>",
description = "Set plot flags", description = "Set plot flags",
category = CommandCategory.SETTINGS, category = CommandCategory.SETTINGS,
requiredType = RequiredType.NONE, requiredType = RequiredType.PLAYER,
permission = "plots.flag") permission = "plots.flag")
public class FlagCmd extends SubCommand { public class FlagCmd extends SubCommand {
@ -75,18 +76,18 @@ public class FlagCmd extends SubCommand {
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info <flag>"); MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info <flag>");
return false; return false;
} }
AbstractFlag af = FlagManager.getFlag(args[1]); AbstractFlag flag = FlagManager.getFlag(args[1]);
if (af == null) { if (flag == null) {
MainUtil.sendMessage(player, C.NOT_VALID_FLAG); MainUtil.sendMessage(player, C.NOT_VALID_FLAG);
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info <flag>"); MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info <flag>");
return false; return false;
} }
// flag key // flag key
MainUtil.sendMessage(player, C.FLAG_KEY, af.getKey()); MainUtil.sendMessage(player, C.FLAG_KEY, flag.getKey());
// flag type // flag type
MainUtil.sendMessage(player, C.FLAG_TYPE, af.value.getClass().getSimpleName()); MainUtil.sendMessage(player, C.FLAG_TYPE, flag.value.getClass().getSimpleName());
// Flag type description // Flag type description
MainUtil.sendMessage(player, C.FLAG_DESC, af.getValueDesc()); MainUtil.sendMessage(player, C.FLAG_DESC, flag.getValueDesc());
return true; return true;
} }
case "set": { case "set": {
@ -167,7 +168,7 @@ public class FlagCmd extends SubCommand {
MainUtil.sendMessage(player, C.FLAG_REMOVED); MainUtil.sendMessage(player, C.FLAG_REMOVED);
return true; return true;
} }
case "add": { case "add":
if (!Permissions.hasPermission(player, "plots.flag.add")) { if (!Permissions.hasPermission(player, "plots.flag.add")) {
MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.add"); MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.add");
return false; return false;
@ -206,7 +207,6 @@ public class FlagCmd extends SubCommand {
} }
MainUtil.sendMessage(player, C.FLAG_ADDED); MainUtil.sendMessage(player, C.FLAG_ADDED);
return true; return true;
}
case "list": case "list":
if (!Permissions.hasPermission(player, "plots.flag.list")) { if (!Permissions.hasPermission(player, "plots.flag.list")) {
MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.list"); MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.list");
@ -217,12 +217,12 @@ public class FlagCmd extends SubCommand {
return false; return false;
} }
HashMap<String, ArrayList<String>> flags = new HashMap<>(); HashMap<String, ArrayList<String>> flags = new HashMap<>();
for (AbstractFlag af : FlagManager.getFlags()) { for (AbstractFlag flag1 : FlagManager.getFlags()) {
String type = af.value.getClass().getSimpleName().replaceAll("Value", ""); String type = flag1.value.getClass().getSimpleName().replaceAll("Value", "");
if (!flags.containsKey(type)) { if (!flags.containsKey(type)) {
flags.put(type, new ArrayList<String>()); flags.put(type, new ArrayList<String>());
} }
flags.get(type).add(af.getKey()); flags.get(type).add(flag1.getKey());
} }
String message = ""; String message = "";
String prefix = ""; String prefix = "";

View File

@ -22,7 +22,7 @@ import java.util.UUID;
description = "Merge the plot you are standing on, with another plot", description = "Merge the plot you are standing on, with another plot",
permission = "plots.merge", usage = "/plot merge <all|n|e|s|w> [removeroads]", permission = "plots.merge", usage = "/plot merge <all|n|e|s|w> [removeroads]",
category = CommandCategory.SETTINGS, category = CommandCategory.SETTINGS,
requiredType = RequiredType.NONE, requiredType = RequiredType.PLAYER,
confirmation = true) confirmation = true)
public class Merge extends SubCommand { public class Merge extends SubCommand {

View File

@ -15,7 +15,7 @@ import com.plotsquared.general.commands.CommandDeclaration;
usage = "/plot target <<plot>|nearest>", usage = "/plot target <<plot>|nearest>",
description = "Target a plot with your compass", description = "Target a plot with your compass",
permission = "plots.target", permission = "plots.target",
requiredType = RequiredType.NONE, requiredType = RequiredType.PLAYER,
category = CommandCategory.INFO) category = CommandCategory.INFO)
public class Target extends SubCommand { public class Target extends SubCommand {

View File

@ -5,6 +5,7 @@ import com.intellectualcrafters.configuration.file.YamlConfiguration;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.StringMan;
import com.plotsquared.general.commands.CommandCaller; import com.plotsquared.general.commands.CommandCaller;
import java.io.File; import java.io.File;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;

View File

@ -19,7 +19,7 @@ public class ConfigurationNode {
private final SettingValue type; private final SettingValue type;
private Object value; private Object value;
public ConfigurationNode(String constant, Object defaultValue, String description, SettingValue type, boolean required) { public ConfigurationNode(String constant, Object defaultValue, String description, SettingValue type) {
this.constant = constant; this.constant = constant;
this.defaultValue = defaultValue; this.defaultValue = defaultValue;
this.description = description; this.description = description;

View File

@ -6,16 +6,11 @@ import java.util.List;
/** /**
* Updater and DB settings * Updater and DB settings
* *
*/ */
public class Settings { public class Settings {
public static boolean USE_SQLUUIDHANDLER = false; public static boolean USE_SQLUUIDHANDLER = false;
public static boolean AUTO_PURGE = false; public static boolean AUTO_PURGE = false;
/**
*
*/
public static boolean UPDATE_NOTIFICATIONS = true; public static boolean UPDATE_NOTIFICATIONS = true;
public static boolean FAST_CLEAR = false; public static boolean FAST_CLEAR = false;
@ -163,8 +158,6 @@ public class Settings {
/** /**
* Database settings * Database settings
*
*/ */
public static class DB { public static class DB {
/** /**

View File

@ -139,8 +139,7 @@ public interface AbstractDB {
/** /**
* Set plot flags. * Set plot flags.
* * @param plot Plot Object
* @param plot Plot Object
* @param flags flags to set (flag[]) * @param flags flags to set (flag[])
*/ */
void setFlags(Plot plot, Collection<Flag> flags); void setFlags(Plot plot, Collection<Flag> flags);

View File

@ -26,6 +26,10 @@ import java.util.Set;
*/ */
public class FlagManager { public class FlagManager {
//TODO Default Flags
public static final IntegerFlag MUSIC = new IntegerFlag("music");
private static final HashSet<String> reserved = new HashSet<>(); private static final HashSet<String> reserved = new HashSet<>();
private static final HashSet<AbstractFlag> flags = new HashSet<>(); private static final HashSet<AbstractFlag> flags = new HashSet<>();

View File

@ -0,0 +1,8 @@
package com.intellectualcrafters.plot.flag;
public class IntegerFlag extends Flag<Integer> {
public IntegerFlag(String name) {
super(name);
}
}

View File

@ -34,18 +34,18 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld {
@Override @Override
public ConfigurationNode[] getSettingNodes() { public ConfigurationNode[] getSettingNodes() {
return new ConfigurationNode[] { return new ConfigurationNode[] {
new ConfigurationNode("plot.height", this.PLOT_HEIGHT, "Plot height", Configuration.INTEGER, true), new ConfigurationNode("plot.height", this.PLOT_HEIGHT, "Plot height", Configuration.INTEGER),
new ConfigurationNode("plot.size", this.PLOT_WIDTH, "Plot width", Configuration.INTEGER, true), new ConfigurationNode("plot.size", this.PLOT_WIDTH, "Plot width", Configuration.INTEGER),
new ConfigurationNode("plot.filling", this.MAIN_BLOCK, "Plot block", Configuration.BLOCKLIST, true), new ConfigurationNode("plot.filling", this.MAIN_BLOCK, "Plot block", Configuration.BLOCKLIST),
new ConfigurationNode("plot.floor", this.TOP_BLOCK, "Plot floor block", Configuration.BLOCKLIST, true), new ConfigurationNode("plot.floor", this.TOP_BLOCK, "Plot floor block", Configuration.BLOCKLIST),
new ConfigurationNode("wall.block", this.WALL_BLOCK, "Top wall block", Configuration.BLOCK, true), new ConfigurationNode("wall.block", this.WALL_BLOCK, "Top wall block", Configuration.BLOCK),
new ConfigurationNode("wall.block_claimed", this.CLAIMED_WALL_BLOCK, "Wall block (claimed)", Configuration.BLOCK, true), new ConfigurationNode("wall.block_claimed", this.CLAIMED_WALL_BLOCK, "Wall block (claimed)", Configuration.BLOCK),
new ConfigurationNode("road.width", this.ROAD_WIDTH, "Road width", Configuration.INTEGER, true), new ConfigurationNode("road.width", this.ROAD_WIDTH, "Road width", Configuration.INTEGER),
new ConfigurationNode("road.height", this.ROAD_HEIGHT, "Road height", Configuration.INTEGER, true), new ConfigurationNode("road.height", this.ROAD_HEIGHT, "Road height", Configuration.INTEGER),
new ConfigurationNode("road.block", this.ROAD_BLOCK, "Road block", Configuration.BLOCK, true), new ConfigurationNode("road.block", this.ROAD_BLOCK, "Road block", Configuration.BLOCK),
new ConfigurationNode("wall.filling", this.WALL_FILLING, "Wall filling block", Configuration.BLOCK, true), new ConfigurationNode("wall.filling", this.WALL_FILLING, "Wall filling block", Configuration.BLOCK),
new ConfigurationNode("wall.height", this.WALL_HEIGHT, "Wall height", Configuration.INTEGER, true), new ConfigurationNode("wall.height", this.WALL_HEIGHT, "Wall height", Configuration.INTEGER),
new ConfigurationNode("plot.bedrock", this.PLOT_BEDROCK, "Plot bedrock generation", Configuration.BOOLEAN, true)}; new ConfigurationNode("plot.bedrock", this.PLOT_BEDROCK, "Plot bedrock generation", Configuration.BOOLEAN)};
} }
/** /**

View File

@ -9,8 +9,8 @@ import com.intellectualcrafters.plot.object.SetupObject;
import com.intellectualcrafters.plot.util.PlotChunk; import com.intellectualcrafters.plot.util.PlotChunk;
/** /**
* This class allows for implementation independent world generation<br> * This class allows for implementation independent world generation.
* - Sponge/Bukkit API<br><br> * - Sponge/Bukkit API
* Use the specify method to get the generator for that platform. * Use the specify method to get the generator for that platform.
*/ */
public abstract class IndependentPlotGenerator { public abstract class IndependentPlotGenerator {

View File

@ -7,7 +7,7 @@ import com.intellectualcrafters.plot.object.SetupObject;
public abstract class PlotGenerator<T> { public abstract class PlotGenerator<T> {
public T generator; public final T generator;
public PlotGenerator(T generator) { public PlotGenerator(T generator) {
this.generator = generator; this.generator = generator;

View File

@ -1302,7 +1302,7 @@ public class Plot {
PlotArea plotworld = getArea(); PlotArea plotworld = getArea();
if (plotworld.SCHEMATIC_ON_CLAIM) { if (plotworld.SCHEMATIC_ON_CLAIM) {
SchematicHandler.Schematic sch; SchematicHandler.Schematic sch;
if (schematic.isEmpty()) { if (schematic == null || schematic.isEmpty()) {
sch = SchematicHandler.manager.getSchematic(plotworld.SCHEMATIC_FILE); sch = SchematicHandler.manager.getSchematic(plotworld.SCHEMATIC_FILE);
} else { } else {
sch = SchematicHandler.manager.getSchematic(schematic); sch = SchematicHandler.manager.getSchematic(schematic);

View File

@ -91,7 +91,7 @@ public abstract class PlotArea {
} }
/** /**
* Create a new PlotArea object with no functionality/information<br> * Create a new PlotArea object with no functionality/information.
* - Mainly used during startup before worlds are created as a temporary object * - Mainly used during startup before worlds are created as a temporary object
* @param world * @param world
* @return * @return
@ -106,8 +106,9 @@ public abstract class PlotArea {
} }
/** /**
* Returns the region for this PlotArea or a RegionWrapper encompassing the whole world if none exists * Returns the region for this PlotArea or a RegionWrapper encompassing
* @NotNull * the whole world if none exists.
*
* @return RegionWrapper * @return RegionWrapper
*/ */
public RegionWrapper getRegion() { public RegionWrapper getRegion() {
@ -119,7 +120,7 @@ public abstract class PlotArea {
} }
/** /**
* Returns the region for this PlotArea * Returns the region for this PlotArea.
* *
* @return RegionWrapper or null if no applicable region * @return RegionWrapper or null if no applicable region
*/ */
@ -135,7 +136,7 @@ public abstract class PlotArea {
} }
/** /**
* Returns the min PlotId * Returns the min PlotId.
* @return * @return
*/ */
public PlotId getMin() { public PlotId getMin() {
@ -143,7 +144,7 @@ public abstract class PlotArea {
} }
/** /**
* Returns the max PlotId * Returns the max PlotId.
* @return * @return
*/ */
public PlotId getMax() { public PlotId getMax() {
@ -151,7 +152,7 @@ public abstract class PlotArea {
} }
/** /**
* Get the implementation independent generator for this area * Get the implementation independent generator for this area.
* *
* @return * @return
*/ */
@ -179,7 +180,7 @@ public abstract class PlotArea {
} }
/** /**
* Check if a PlotArea is compatible (move/copy etc) * Check if a PlotArea is compatible (move/copy etc).
* @param plotArea * @param plotArea
* @return * @return
*/ */
@ -198,7 +199,7 @@ public abstract class PlotArea {
} }
/** /**
* When a world is created, the following method will be called for each * When a world is created, the following method will be called for each.
* *
* @param config Configuration Section * @param config Configuration Section
*/ */

View File

@ -7,16 +7,16 @@ public abstract class ChatManager<T> {
public static ChatManager<?> manager; public static ChatManager<?> manager;
public abstract T builder(); public abstract T builder();
public abstract void color(final PlotMessage message, final String color); public abstract void color(PlotMessage message, String color);
public abstract void tooltip(final PlotMessage message, final PlotMessage... tooltip); public abstract void tooltip(PlotMessage message, PlotMessage... tooltip);
public abstract void command(final PlotMessage message, final String command); public abstract void command(PlotMessage message, String command);
public abstract void text(final PlotMessage message, final String text); public abstract void text(PlotMessage message, String text);
public abstract void send(final PlotMessage plotMessage, final PlotPlayer player); public abstract void send(PlotMessage plotMessage, PlotPlayer player);
public abstract void suggest(final PlotMessage plotMessage, final String command); public abstract void suggest(PlotMessage plotMessage, String command);
} }

View File

@ -15,6 +15,7 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.Rating; import com.intellectualcrafters.plot.object.Rating;
import com.plotsquared.listener.PlayerBlockEventType; import com.plotsquared.listener.PlayerBlockEventType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.UUID; import java.util.UUID;

View File

@ -24,6 +24,7 @@ import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.object.RegionWrapper; import com.intellectualcrafters.plot.object.RegionWrapper;
import com.intellectualcrafters.plot.object.RunnableVal; import com.intellectualcrafters.plot.object.RunnableVal;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -705,7 +706,7 @@ public abstract class SchematicHandler {
* @return Map of block location to tag * @return Map of block location to tag
*/ */
public HashMap<BlockLoc, CompoundTag> getTiles() { public HashMap<BlockLoc, CompoundTag> getTiles() {
return this.tiles; return this.tiles == null ? new HashMap<BlockLoc, CompoundTag>() : this.tiles;
} }
/** /**

View File

@ -2,6 +2,7 @@ package com.intellectualcrafters.plot.util;
import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotBlock;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -150,7 +151,7 @@ public class SetQueue {
} }
public void regenerateChunk(String world, ChunkLoc loc) { public void regenerateChunk(String world, ChunkLoc loc) {
queue.regenerateChunk(world, loc); this.queue.regenerateChunk(world, loc);
} }
public class ChunkWrapper { public class ChunkWrapper {

View File

@ -11,10 +11,9 @@ import java.util.concurrent.atomic.AtomicInteger;
public abstract class TaskManager { public abstract class TaskManager {
public static HashSet<String> TELEPORT_QUEUE = new HashSet<>(); public static final HashSet<String> TELEPORT_QUEUE = new HashSet<>();
public static final HashMap<Integer, Integer> tasks = new HashMap<>();
public static AtomicInteger index = new AtomicInteger(0); public static AtomicInteger index = new AtomicInteger(0);
public static HashMap<Integer, Integer> tasks = new HashMap<>();
public static int runTaskRepeat(Runnable runnable, int interval) { public static int runTaskRepeat(Runnable runnable, int interval) {
if (runnable != null) { if (runnable != null) {

View File

@ -477,7 +477,7 @@ public abstract class Command {
return getCommandString() + " " + args + "]"; return getCommandString() + " " + args + "]";
} }
public Collection tab(PlotPlayer player, String[] args, boolean space) { public Collection<Command> tab(PlotPlayer player, String[] args, boolean space) {
switch (args.length) { switch (args.length) {
case 0: case 0:
return this.allCommands; return this.allCommands;

View File

@ -64,6 +64,7 @@ import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.plugin.Plugin; import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.plugin.PluginContainer; import org.spongepowered.api.plugin.PluginContainer;
import org.spongepowered.api.profile.GameProfileManager; import org.spongepowered.api.profile.GameProfileManager;
import org.spongepowered.api.world.Chunk;
import org.spongepowered.api.world.World; import org.spongepowered.api.world.World;
import org.spongepowered.api.world.gen.GenerationPopulator; import org.spongepowered.api.world.gen.GenerationPopulator;
import org.spongepowered.api.world.gen.WorldGenerator; import org.spongepowered.api.world.gen.WorldGenerator;
@ -217,7 +218,7 @@ public class SpongeMain implements IPlotMain {
@Override @Override
public TaskManager getTaskManager() { public TaskManager getTaskManager() {
return new SpongeTaskManager(); return new SpongeTaskManager(this);
} }
@Override @Override
@ -370,7 +371,7 @@ public class SpongeMain implements IPlotMain {
} }
@Override @Override
public PlotQueue initPlotQueue() { public PlotQueue<Chunk> initPlotQueue() {
if (PS.get().checkVersion(getServerVersion(), 1, 8, 0)) { if (PS.get().checkVersion(getServerVersion(), 1, 8, 0)) {
try { try {
MainUtil.canSendChunk = true; MainUtil.canSendChunk = true;

View File

@ -286,7 +286,7 @@ public class MainListener {
public void onNotifyNeighborBlock(NotifyNeighborBlockEvent event) throws Exception { public void onNotifyNeighborBlock(NotifyNeighborBlockEvent event) throws Exception {
AtomicBoolean cancelled = new AtomicBoolean(false); AtomicBoolean cancelled = new AtomicBoolean(false);
// SpongeUtil.printCause("physics", event.getCause()); // SpongeUtil.printCause("physics", event.getCause());
// PlotArea area = plotloc.getPlotArea(); // PlotArea area = plotloc.getPlotArea();
// event.filterDirections(new Predicate<Direction>() { // event.filterDirections(new Predicate<Direction>() {
// //

View File

@ -5,9 +5,6 @@ import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import org.spongepowered.api.entity.Entity; import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.living.Living; import org.spongepowered.api.entity.living.Living;
import org.spongepowered.api.entity.living.animal.Animal; import org.spongepowered.api.entity.living.animal.Animal;
@ -15,6 +12,10 @@ import org.spongepowered.api.entity.living.monster.Monster;
import org.spongepowered.api.world.Chunk; import org.spongepowered.api.world.Chunk;
import org.spongepowered.api.world.World; import org.spongepowered.api.world.World;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
public class SpongeChunkManager extends ChunkManager { public class SpongeChunkManager extends ChunkManager {
@Override @Override

View File

@ -36,25 +36,25 @@ public class SpongeEventUtil extends EventUtil {
public EventManager events; public EventManager events;
public SpongeEventUtil() { public SpongeEventUtil() {
events = SpongeMain.THIS.getGame().getEventManager(); this.events = SpongeMain.THIS.getGame().getEventManager();
} }
public boolean callEvent(final Event event) { public boolean callEvent(Event event) {
return !events.post(event); return !this.events.post(event);
} }
@Override @Override
public boolean callClaim(final PlotPlayer player, final Plot plot, final boolean auto) { public boolean callClaim(PlotPlayer player, Plot plot, boolean auto) {
return callEvent(new PlayerClaimPlotEvent(SpongeUtil.getPlayer(player), plot, auto)); return callEvent(new PlayerClaimPlotEvent(SpongeUtil.getPlayer(player), plot, auto));
} }
@Override @Override
public boolean callTeleport(final PlotPlayer player, final Location from, final Plot plot) { public boolean callTeleport(PlotPlayer player, Location from, Plot plot) {
return callEvent(new PlayerTeleportToPlotEvent(SpongeUtil.getPlayer(player), from, plot)); return callEvent(new PlayerTeleportToPlotEvent(SpongeUtil.getPlayer(player), from, plot));
} }
@Override @Override
public boolean callClear(final Plot plot) { public boolean callClear(Plot plot) {
return callEvent(new PlotClearEvent(plot)); return callEvent(new PlotClearEvent(plot));
} }
@ -64,59 +64,59 @@ public class SpongeEventUtil extends EventUtil {
} }
@Override @Override
public boolean callFlagAdd(final Flag flag, final Plot plot) { public boolean callFlagAdd(Flag flag, Plot plot) {
return callEvent(new PlotFlagAddEvent(flag, plot)); return callEvent(new PlotFlagAddEvent(flag, plot));
} }
@Override @Override
public boolean callFlagRemove(final Flag flag, final Plot plot) { public boolean callFlagRemove(Flag flag, Plot plot) {
return callEvent(new PlotFlagRemoveEvent(flag, plot)); return callEvent(new PlotFlagRemoveEvent(flag, plot));
} }
@Override @Override
public boolean callMerge(final Plot plot, final ArrayList<PlotId> plots) { public boolean callMerge(Plot plot, ArrayList<PlotId> plots) {
return callEvent(new PlotMergeEvent(SpongeUtil.getWorld(plot.getArea().worldname), plot, plots)); return callEvent(new PlotMergeEvent(SpongeUtil.getWorld(plot.getArea().worldname), plot, plots));
} }
@Override @Override
public boolean callUnlink(final PlotArea area, final ArrayList<PlotId> plots) { public boolean callUnlink(PlotArea area, ArrayList<PlotId> plots) {
return callEvent(new PlotUnlinkEvent(SpongeUtil.getWorld(area.worldname), plots)); return callEvent(new PlotUnlinkEvent(SpongeUtil.getWorld(area.worldname), plots));
} }
@Override @Override
public void callEntry(final PlotPlayer player, final Plot plot) { public void callEntry(PlotPlayer player, Plot plot) {
callEvent(new PlayerEnterPlotEvent(SpongeUtil.getPlayer(player), plot)); callEvent(new PlayerEnterPlotEvent(SpongeUtil.getPlayer(player), plot));
} }
@Override @Override
public void callLeave(final PlotPlayer player, final Plot plot) { public void callLeave(PlotPlayer player, Plot plot) {
callEvent(new PlayerLeavePlotEvent(SpongeUtil.getPlayer(player), plot)); callEvent(new PlayerLeavePlotEvent(SpongeUtil.getPlayer(player), plot));
} }
@Override @Override
public void callDenied(final PlotPlayer initiator, final Plot plot, final UUID player, final boolean added) { public void callDenied(PlotPlayer initiator, Plot plot, UUID player, boolean added) {
callEvent(new PlayerPlotDeniedEvent(SpongeUtil.getPlayer(initiator), plot, player, added)); callEvent(new PlayerPlotDeniedEvent(SpongeUtil.getPlayer(initiator), plot, player, added));
} }
@Override @Override
public void callTrusted(final PlotPlayer initiator, final Plot plot, final UUID player, final boolean added) { public void callTrusted(PlotPlayer initiator, Plot plot, UUID player, boolean added) {
callEvent(new PlayerPlotHelperEvent(SpongeUtil.getPlayer(initiator), plot, player, added)); callEvent(new PlayerPlotHelperEvent(SpongeUtil.getPlayer(initiator), plot, player, added));
} }
@Override @Override
public void callMember(final PlotPlayer initiator, final Plot plot, final UUID player, final boolean added) { public void callMember(PlotPlayer initiator, Plot plot, UUID player, boolean added) {
callEvent(new PlayerPlotTrustedEvent(SpongeUtil.getPlayer(initiator), plot, player, added)); callEvent(new PlayerPlotTrustedEvent(SpongeUtil.getPlayer(initiator), plot, player, added));
} }
@Override @Override
public boolean callFlagRemove(final Flag flag, final PlotCluster cluster) { public boolean callFlagRemove(Flag flag, PlotCluster cluster) {
return callEvent(new ClusterFlagRemoveEvent(flag, cluster)); return callEvent(new ClusterFlagRemoveEvent(flag, cluster));
} }
@Override @Override
public Rating callRating(final PlotPlayer player, final Plot plot, final Rating rating) { public Rating callRating(PlotPlayer player, Plot plot, Rating rating) {
final PlotRateEvent event = new PlotRateEvent(player, rating, plot); PlotRateEvent event = new PlotRateEvent(player, rating, plot);
events.post(event); this.events.post(event);
return event.getRating(); return event.getRating();
} }

View File

@ -12,13 +12,18 @@ public class SpongeTaskManager extends TaskManager {
private final AtomicInteger i = new AtomicInteger(); private final AtomicInteger i = new AtomicInteger();
private final HashMap<Integer, Task> tasks = new HashMap<>(); private final HashMap<Integer, Task> tasks = new HashMap<>();
private final SpongeMain spongeMain;
public SpongeTaskManager(SpongeMain spongeMain) {
this.spongeMain = spongeMain;
}
@Override @Override
public int taskRepeat(Runnable runnable, int interval) { public int taskRepeat(Runnable runnable, int interval) {
int val = this.i.incrementAndGet(); int val = this.i.incrementAndGet();
Task.Builder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder(); Task.Builder builder = this.spongeMain.getGame().getScheduler().createTaskBuilder();
Task.Builder built = builder.delayTicks(interval).intervalTicks(interval).execute(runnable); Task.Builder built = builder.delayTicks(interval).intervalTicks(interval).execute(runnable);
Task task = built.submit(SpongeMain.THIS.getPlugin()); Task task = built.submit(this.spongeMain.getPlugin());
this.tasks.put(val, task); this.tasks.put(val, task);
return val; return val;
} }
@ -26,35 +31,35 @@ public class SpongeTaskManager extends TaskManager {
@Override @Override
public int taskRepeatAsync(Runnable runnable, int interval) { public int taskRepeatAsync(Runnable runnable, int interval) {
int val = this.i.incrementAndGet(); int val = this.i.incrementAndGet();
Task.Builder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder(); Task.Builder builder = this.spongeMain.getGame().getScheduler().createTaskBuilder();
Task.Builder built = builder.delayTicks(interval).async().intervalTicks(interval).execute(runnable); Task.Builder built = builder.delayTicks(interval).async().intervalTicks(interval).execute(runnable);
Task task = built.submit(SpongeMain.THIS.getPlugin()); Task task = built.submit(this.spongeMain.getPlugin());
this.tasks.put(val, task); this.tasks.put(val, task);
return val; return val;
} }
@Override @Override
public void taskAsync(Runnable runnable) { public void taskAsync(Runnable runnable) {
Task.Builder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder(); Task.Builder builder = this.spongeMain.getGame().getScheduler().createTaskBuilder();
builder.async().execute(runnable).submit(SpongeMain.THIS.getPlugin()); builder.async().execute(runnable).submit(this.spongeMain.getPlugin());
} }
@Override @Override
public void task(Runnable runnable) { public void task(Runnable runnable) {
Task.Builder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder(); Task.Builder builder = this.spongeMain.getGame().getScheduler().createTaskBuilder();
builder.execute(runnable).submit(SpongeMain.THIS.getPlugin()); builder.execute(runnable).submit(this.spongeMain.getPlugin());
} }
@Override @Override
public void taskLater(Runnable runnable, int delay) { public void taskLater(Runnable runnable, int delay) {
Task.Builder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder(); Task.Builder builder = this.spongeMain.getGame().getScheduler().createTaskBuilder();
builder.delayTicks(delay).execute(runnable).submit(SpongeMain.THIS.getPlugin()); builder.delayTicks(delay).execute(runnable).submit(this.spongeMain.getPlugin());
} }
@Override @Override
public void taskLaterAsync(Runnable runnable, int delay) { public void taskLaterAsync(Runnable runnable, int delay) {
Task.Builder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder(); Task.Builder builder = this.spongeMain.getGame().getScheduler().createTaskBuilder();
builder.async().delayTicks(delay).execute(runnable).submit(SpongeMain.THIS.getPlugin()); builder.async().delayTicks(delay).execute(runnable).submit(this.spongeMain.getPlugin());
} }
@Override @Override

View File

@ -17,13 +17,6 @@ import com.intellectualcrafters.plot.util.UUIDHandler;
import com.intellectualcrafters.plot.util.WorldUtil; import com.intellectualcrafters.plot.util.WorldUtil;
import com.plotsquared.sponge.SpongeMain; import com.plotsquared.sponge.SpongeMain;
import com.plotsquared.sponge.object.SpongePlayer; import com.plotsquared.sponge.object.SpongePlayer;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenBase;
import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.NotImplementedException;
@ -49,6 +42,14 @@ import org.spongepowered.api.world.biome.BiomeType;
import org.spongepowered.api.world.biome.BiomeTypes; import org.spongepowered.api.world.biome.BiomeTypes;
import org.spongepowered.api.world.extent.Extent; import org.spongepowered.api.world.extent.Extent;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
public class SpongeUtil extends WorldUtil { public class SpongeUtil extends WorldUtil {
public static Cause CAUSE = Cause.of(NamedCause.source("PlotSquared")); public static Cause CAUSE = Cause.of(NamedCause.source("PlotSquared"));

View File

@ -10,17 +10,17 @@ import com.intellectualcrafters.plot.util.PlotQueue;
import com.intellectualcrafters.plot.util.SetQueue; import com.intellectualcrafters.plot.util.SetQueue;
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import com.plotsquared.sponge.util.SpongeUtil; import com.plotsquared.sponge.util.SpongeUtil;
import java.util.Optional;
import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.ChunkProviderServer; import net.minecraft.world.gen.ChunkProviderServer;
import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.world.Chunk; import org.spongepowered.api.world.Chunk;
import org.spongepowered.api.world.World;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.spongepowered.api.world.World;
public class SlowQueue implements PlotQueue<Chunk> { public class SlowQueue implements PlotQueue<Chunk> {
@ -148,7 +148,7 @@ public class SlowQueue implements PlotQueue<Chunk> {
else { else {
PS.debug("CHUNK IS NULL!?"); PS.debug("CHUNK IS NULL!?");
}*/ }*/
} catch (Throwable e){ } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
} }

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.intellectualcrafters</groupId> <groupId>com.intellectualcrafters</groupId>
<properties> <properties>