mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 13:16:45 +01:00
Cleanup and Optimizations
Abstracted TitleManagers Removed a lot of Statics. ETC.
This commit is contained in:
commit
9c81dfa5c3
@ -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.
|
||||||
*
|
*
|
||||||
|
@ -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,12 +131,10 @@ 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) {
|
||||||
@ -148,24 +145,21 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
|
|||||||
} catch (Throwable ignored) {
|
} catch (Throwable ignored) {
|
||||||
//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;
|
||||||
|
@ -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) {
|
||||||
|
ChunkLoc loc = new ChunkLoc(c.getX(), c.getZ());
|
||||||
|
byte[][] resultData;
|
||||||
|
if (!BukkitPlotGenerator.this.dataMap.containsKey(loc)) {
|
||||||
GenChunk result = (GenChunk) BukkitPlotGenerator.this.chunkSetter;
|
GenChunk result = (GenChunk) BukkitPlotGenerator.this.chunkSetter;
|
||||||
if (result.result_data != null) {
|
// Set the chunk location
|
||||||
for (int i = 0; i < result.result_data.length; i++) {
|
result.setChunkWrapper(SetQueue.IMP.new ChunkWrapper(world.getName(), loc.x, loc.z));
|
||||||
byte[] section = result.result_data[i];
|
// 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;
|
||||||
}
|
}
|
||||||
@ -248,7 +267,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
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";
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -41,8 +41,10 @@ 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) {
|
||||||
|
if (this.grid != null) {
|
||||||
this.grid.setBiome(x, z, this.biomes[biome]);
|
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) {
|
||||||
if (this.grid != null) {
|
if (this.grid != null) {
|
||||||
|
@ -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> {
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
try {
|
|
||||||
PS.instance = this;
|
PS.instance = this;
|
||||||
this.thread = Thread.currentThread();
|
this.thread = Thread.currentThread();
|
||||||
SetupUtils.generators = new HashMap<>();
|
this.IMP = iPlotMain;
|
||||||
this.IMP = imp_class;
|
this.platform = platform;
|
||||||
|
this.version = this.IMP.getPluginVersion();
|
||||||
|
try {
|
||||||
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);
|
||||||
|
@ -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")
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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 = "";
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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 {
|
||||||
/**
|
/**
|
||||||
|
@ -139,7 +139,6 @@ 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[])
|
||||||
*/
|
*/
|
||||||
|
@ -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<>();
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.intellectualcrafters.plot.flag;
|
||||||
|
|
||||||
|
public class IntegerFlag extends Flag<Integer> {
|
||||||
|
|
||||||
|
public IntegerFlag(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
}
|
@ -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)};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -8,15 +8,15 @@ public abstract class ChatManager<T> {
|
|||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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 {
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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>() {
|
||||||
//
|
//
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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"));
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
pom.xml
3
pom.xml
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user