Update JDK 11

master
sky 2020-02-02 15:30:29 +08:00
parent 498854260d
commit 3a70acebd8
4 changed files with 390 additions and 4 deletions

View File

@ -6,7 +6,7 @@ plugins {
}
group = 'me.skymc'
version = '5.15'
version = '5.16'
sourceCompatibility = 1.8
targetCompatibility = 1.8

View File

@ -62,10 +62,10 @@ public class ListenerCommand implements Listener {
TabooLibAPI.debug(true);
TLogger.getGlobalLogger().info("&aEnabled.");
}
} else if ("libupdate".equalsIgnoreCase(e.getCommand())) {
} else if (e.getCommand().equalsIgnoreCase("libUpdate")) {
e.setCancelled(true);
e.getSender().sendMessage("§8[§fTabooLib§8] §cWARNING §7| §4Update TabooLib will force to restart your server. Please confirm this action by type §c/libupdateConfirm");
} else if ("libupdateConfirm".equalsIgnoreCase(e.getCommand()) || "libupdate confirm".equalsIgnoreCase(e.getCommand())) {
e.getSender().sendMessage("§8[§fTabooLib§8] §cWARNING §7| §4Update TabooLib will force to restart your server. Please confirm this action by type §c/libupdateconfirm");
} else if (e.getCommand().equalsIgnoreCase("libUpdateConfirm") || e.getCommand().equalsIgnoreCase("libUpdate confirm")) {
e.getSender().sendMessage("§8[§fTabooLib§8] §7Downloading TabooLib file...");
Files.downloadFile("https://skymc.oss-cn-shanghai.aliyuncs.com/plugins/TabooLib.jar", new File("libs/TabooLib.jar"));
e.getSender().sendMessage("§8[§fTabooLib§8] §2Download completed, the server will restart in 3 secs");

View File

@ -0,0 +1,57 @@
package io.izzel.taboolib.util;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
/**
* @author Arasple
* @date 2020/1/20 16:40
*/
public class Hastebin {
private static final String HASTEBIN_URL = "https://hasteb.in/";
public static Result paste(String content) {
try {
HttpURLConnection con = (HttpURLConnection) new URL(HASTEBIN_URL + "documents").openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Charset", "UTF-8");
con.setDoInput(true);
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(content.getBytes(StandardCharsets.UTF_8));
return new Result(IO.readFully(con.getInputStream(), StandardCharsets.UTF_8));
} catch (Throwable e) {
return null;
}
}
public static class Result {
private String source;
private JsonObject sourceJson;
public Result(String source) {
this.source = source;
this.sourceJson = new JsonParser().parse(source).getAsJsonObject();
}
public String getURL() {
return HASTEBIN_URL + sourceJson.get("key").getAsString();
}
public String getSource() {
return source;
}
public JsonObject getSourceJson() {
return sourceJson;
}
}
}

View File

@ -0,0 +1,329 @@
package io.izzel.taboolib.util.item;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.MapMeta;
import org.bukkit.map.*;
import org.bukkit.map.MapView.Scale;
import org.bukkit.plugin.AuthorNagException;
import javax.annotation.Nonnull;
import java.awt.image.BufferedImage;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author LagBug
*/
public class MapBuilder {
public static final String VERSION = "1.5";
private MapView map;
private BufferedImage image;
private List<Text> texts;
private MapCursorCollection cursors;
private boolean rendered;
private boolean renderOnce;
private boolean isNewVersion;
public MapBuilder() {
cursors = new MapCursorCollection();
texts = new ArrayList<>();
rendered = false;
renderOnce = true;
isNewVersion = Bukkit.getVersion().contains("1.15") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.13");
}
/**
* Get the image that's being used
*
* @return the image used
*/
public BufferedImage getImage() {
return image;
}
/**
* Set an image to be used
*
* @param image the buffered image to use
* @return the instance of this class
*/
public MapBuilder setImage(@Nonnull BufferedImage image) {
this.image = image;
return this;
}
/**
* Set and image to be used
*
* @param x, y the coordinates to add the text
* @param font the font to be used
* @param text the string that will be displayed
* @return the instance of this class
*/
public MapBuilder addText(@Nonnull int x, @Nonnull int y, @Nonnull MapFont font, @Nonnull String text) {
this.texts.add(new Text(x, y, font, text));
return this;
}
/**
* Gets the list of all the texts used
*
* @return a List of all the texts
*/
public List<Text> getTexts() {
return texts;
}
/**
* Adds a cursor to the map
*
* @param x, y the coordinates to add the cursor
* @param direction the direction to display the cursor
* @param type the type of the cursor
* @return the instance of this class
*/
@SuppressWarnings("deprecation")
public MapBuilder addCursor(@Nonnull int x, @Nonnull int y, @Nonnull CursorDirection direction, @Nonnull CursorType type) {
cursors.addCursor(x, y, (byte) direction.getId(), (byte) type.getId());
return this;
}
/**
* Gets all the currently used cursors
*
* @return a MapCursorCollection with all current cursors
*/
public MapCursorCollection getCursors() {
return cursors;
}
/**
* Sets whether the image should only be rendered once.
* Good for static images and reduces lag.
*
* @param renderOnce the value to determine if it's going to be rendered once
* @return the instance of this class
*/
public MapBuilder setRenderOnce(@Nonnull boolean renderOnce) {
this.renderOnce = renderOnce;
return this;
}
/**
* Builds an ItemStack of the map.
*
* @return the ItemStack of the map containing what's been set from the above methods
*/
@SuppressWarnings("deprecation")
public ItemStack build() {
ItemStack item = null;
try {
item = new ItemStack(isNewVersion ? Material.MAP : Material.valueOf("MAP"));
} catch (AuthorNagException ex) {
System.out.println("Could not get material for the current spigot version. This won't be shown again until server restats");
}
map = Bukkit.createMap(Bukkit.getWorlds().get(0));
map.setScale(Scale.NORMAL);
map.getRenderers().forEach(map::removeRenderer);
map.addRenderer(new MapRenderer() {
@Override
public void render(MapView mapView, MapCanvas mapCanvas, Player player) {
if (rendered && renderOnce) {
return;
}
if (player != null && player.isOnline()) {
if (image != null) {
mapCanvas.drawImage(0, 0, image);
}
if (!texts.isEmpty()) {
texts.forEach(text -> mapCanvas.drawText(text.getX(), text.getY(), text.getFont(), text.getMessage()));
}
if (cursors.size() > 0) {
mapCanvas.setCursors(cursors);
}
rendered = true;
}
}
});
if (isNewVersion) {
MapMeta mapMeta = (MapMeta) item.getItemMeta();
mapMeta.setMapView(map);
item.setItemMeta(mapMeta);
} else {
item.setDurability(getMapId(map));
}
return item;
}
/**
* Gets a map id cross-version using reflection
*
* @param mapView the map to get the id
* @return the instance of this class
*/
private short getMapId(@Nonnull MapView mapView) {
try {
return (short) mapView.getId();
} catch (NoSuchMethodError ex) {
try {
return (short) Class.forName("org.bukkit.map.MapView").getMethod("getId", (Class<?>[]) new Class[0])
.invoke(mapView, new Object[0]);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException | ClassNotFoundException e) {
e.printStackTrace();
return -1;
}
}
}
/**
* An enum containing user friendly cursor directions. Instead of using the integers, you can instead use this enum
*/
public enum CursorDirection {
SOUTH(0), SOUTH_WEST_SOUTH(1), SOUTH_WEST(2), SOUTH_WEST_WEST(3), WEST(4), NORTH_WEST_WEST(5), NORTH_WEST(6),
NORTH_WEST_NORTH(7), NORTH(8), NORTH_EAST_NORTH(9), NORTH_EAST(10), NORTH_EAST_EAST(11), EAST(12),
SOUTH_EAST_EAST(13), SOUNT_EAST(14), SOUTH_EAST_SOUTH(15);
private final int id;
CursorDirection(@Nonnull int id) {
this.id = id;
}
/**
* Returns the actual integer to use
*
* @return the integer of the specified enum type
*/
public int getId() {
return this.id;
}
}
/**
* An enum containing user friendly cursor types. Instead of using the integers, you can instead use this enum
*/
public enum CursorType {
WHITE_POINTER(0), GREEN_POINTER(1), RED_POINTER(2), BLUE_POINTER(3), WHITE_CLOVER(4), RED_BOLD_POINTER(5),
WHITE_DOT(6), LIGHT_BLUE_SQUARE(7);
private final int id;
CursorType(@Nonnull int id) {
this.id = id;
}
/**
* Returns the actual integer to use
*
* @return the integer of the specified enum type
*/
public int getId() {
return this.id;
}
}
/**
* A storage class to save text information to later be used in order to write in maps
*/
public static class Text {
private int x;
private int y;
private MapFont font;
private String message;
public Text(@Nonnull int x, @Nonnull int y, @Nonnull MapFont font, @Nonnull String message) {
setX(x);
setY(y);
setFont(font);
setMessage(message);
}
/**
* Gets the x position for the text to be displayed
*
* @return the x position
*/
public int getX() {
return x;
}
/**
* Sets the x position of the text to display it
*
* @param x the x postion
*/
public void setX(@Nonnull int x) {
this.x = x;
}
/**
* Gets the y position for the text to be displayed
*
* @return the y position
*/
public int getY() {
return y;
}
/**
* Sets the y position of the text to display it
*
* @param y the y position
*/
public void setY(@Nonnull int y) {
this.y = y;
}
/**
* Gets the font to be used
*
* @return the MapFont that is used
*/
public MapFont getFont() {
return font;
}
/**
* Sets what font should be used
*
* @param font the actual font
*/
public void setFont(@Nonnull MapFont font) {
this.font = font;
}
/**
* Gets what test will be displayed
*
* @return the text
*/
public String getMessage() {
return message;
}
/**
* Sets what text will be displayed
*
* @param message the actual text
*/
public void setMessage(@Nonnull String message) {
this.message = message;
}
}
}