Update JDK 11
This commit is contained in:
		@@ -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");
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								src/main/scala/io/izzel/taboolib/util/Hastebin.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/main/scala/io/izzel/taboolib/util/Hastebin.java
									
									
									
									
									
										Normal 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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										329
									
								
								src/main/scala/io/izzel/taboolib/util/item/MapBuilder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										329
									
								
								src/main/scala/io/izzel/taboolib/util/item/MapBuilder.java
									
									
									
									
									
										Normal 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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user