From 3d0d7a8a8161470e2c9b701867d6924e0f9b28c3 Mon Sep 17 00:00:00 2001 From: Paul Schulze Date: Tue, 26 Jul 2016 20:01:57 +0200 Subject: [PATCH] Version 2.0 Using Spigot maven repository now. Improved test deployment scripts. Removed checks for updates. Code-style. --- LICENSE.md | 2 +- pom.xml | 40 +-- scripts/minecraft.sh | 250 ++++++++++-------- scripts/test-deployment.sh | 50 +++- .../craftinc/borderprotection/Messages.java | 62 ++--- .../de/craftinc/borderprotection/Plugin.java | 7 +- .../borderprotection/borders/Border.java | 23 +- .../borderprotection/borders/CircBorder.java | 14 +- .../borderprotection/borders/RectBorder.java | 10 +- .../commands/CancelGenerateCommand.java | 10 +- .../commands/CheckVersionCommand.java | 58 ---- .../commands/CommandSwitch.java | 16 +- .../commands/GenerateCommand.java | 12 +- .../borderprotection/commands/GetCommand.java | 8 +- .../commands/HelpCommand.java | 8 +- .../commands/OnOffCommand.java | 8 +- .../borderprotection/commands/SetCommand.java | 12 +- .../borderprotection/commands/SubCommand.java | 11 +- .../events/PlayerJoinListener.java | 16 +- .../events/PlayerMoveListener.java | 4 +- .../events/PlayerQuitListener.java | 4 +- .../events/PlayerTeleportListener.java | 4 +- .../borderprotection/util/ChunkGenerator.java | 125 +++++---- .../util/LocationSerializer2D.java | 13 +- .../util/PlayerMovementUtil.java | 2 +- .../borderprotection/util/UpdateHelper.java | 102 ------- src/main/resources/plugin.yml | 9 +- 27 files changed, 378 insertions(+), 502 deletions(-) delete mode 100644 src/main/java/de/craftinc/borderprotection/commands/CheckVersionCommand.java delete mode 100644 src/main/java/de/craftinc/borderprotection/util/UpdateHelper.java diff --git a/LICENSE.md b/LICENSE.md index 1700fb1..96cce5e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -5,6 +5,6 @@ full text of GPLv3 can be found in the file "GPLv3" # LGPLv3 -* src/main/java/de/craftinc/borderprotection/LocationSerializer.java +* src/main/java/de/craftinc/borderprotection/util/LocationSerializer2D.java full text of LGPLv3 can be found in the file "LGPLv3" diff --git a/pom.xml b/pom.xml index af3d231..2bd699d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,16 +4,16 @@ 4.0.0 de.craftinc CraftincBorderProtection - Craft Inc. BorderProtection + CraftInc-BorderProtection jar - 2.0-beta + 2.0 UTF-8 - ${project.name} ${project.version} + ${project.name}-${project.version} src/main/resources @@ -55,27 +55,27 @@ + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + org.spigotmc + spigot-api + 1.10.2-R0.1-SNAPSHOT + provided + + org.bukkit bukkit - 1.6.4-R2.0 - jar - compile - - - org.bukkit - craftbukkit - 1.6.4-R2.0 - jar - compile + 1.10.2-R0.1-SNAPSHOT + provided - - - - bukkit-repo - http://repo.bukkit.org/content/groups/public - - diff --git a/scripts/minecraft.sh b/scripts/minecraft.sh index 756ad10..7416a7b 100755 --- a/scripts/minecraft.sh +++ b/scripts/minecraft.sh @@ -1,160 +1,202 @@ #!/bin/bash -SCRIPT_DIR=$(readlink -f $(dirname "$0")) -SERVICE='craftbukkit*.jar' -#USERNAME="minecraft" -CPU_COUNT=2 -BUKKIT="$SCRIPT_DIR/../target/lib/$SERVICE" -INVOCATION="java -Xmx1000M -Xms300M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $BUKKIT nogui" -MCPATH="$SCRIPT_DIR/../bukkit-testserver" +# Craft Inc. BorderProtection +# Copyright (C) 2016 Paul Schulze +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . -if [ ! -d "$MCPATH" ]; then - mkdir -p "$MCPATH" + +SERVICE='craftbukkit-1.10.2.jar' + +# numbers of CPU cores; used only for the parallel garbage collector threads +CPU_COUNT=8 + +# maximum memory which the JAVA VM is allowed to allocate (M is megabyte) +XMX=-Xmx10000M + +# initial memory which the JAVA VM is allocating (M is megabyte) +XMS=-Xms3000M + +# Replace with path which contains your craftbukkit.jar +MCPATH="$(dirname "$0")/../bukkit-testserver" + + + +# ======================================================================== +# == Don't change anything below this line unless you know what you do. == +# ======================================================================== +BUKKIT="$MCPATH/$SERVICE" +INVOCATION="java $XMX $XMS -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $BUKKIT nogui" + +if [[ "$MCPATH" == '/my/path/to/craftbukkit' ]]; then + echo "Please configure the \"MCPATH\" variable in the $0 file." >&2 + exit 1 fi -ME=$(whoami) -as_user() { - #if [ $ME == $USERNAME ] ; then - bash -c "$1" - #else - #su - $USERNAME -c "$1" - #fi +SCREEN_NAME="$(cat "$MCPATH/screen_name" 2> /dev/null)" +if [[ -z "$SCREEN_NAME" ]]; then + SCREEN_NAME="minecraft.$(head -c12 /dev/urandom | xxd -p)" + echo -n "$SCREEN_NAME" > "$MCPATH/screen_name" +fi + +psgrep() { + psgreptmp=$(mktemp) + + ps auxww > "$psgreptmp" + grep -v "$$" "$psgreptmp" | egrep --color=auto -i "$1" + rm "$psgreptmp" +} + +send_to_screen() { + screen -p 0 -S "$SCREEN_NAME" -X stuff "$1 +" +} + +mc_service_running() { + psgrep "$SERVICE" | grep -v -i 'screen' | grep 'java' | grep -- "$XMX" | grep -- "$XMS" | grep "$BUKKIT" > /dev/null + return $? } mc_start() { - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "Tried to start but $SERVICE was already running!" - else - echo "$SERVICE was not running... starting." + if ! mc_status; then + echo "Starting..." cd "$MCPATH" - as_user "cd "$MCPATH" && screen -dmS minecraft $INVOCATION" - sleep 7 - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is now running." - else - echo "Could not start $SERVICE." - fi + screen -dmS "$SCREEN_NAME" $INVOCATION + sleep 2 + mc_status fi } mc_stop() { - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is running... stopping." - as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" - sleep 2 - as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'" - sleep 6 - else - echo "$SERVICE was not running." - fi - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE could not be shut down... still running." - else - echo "$SERVICE is shut down." + if mc_status; then +# echo "Sending message to users..." +# send_to_screen 'say SERVER SHUTTING DOWN IN 10 SECONDS!' +# sleep 10 + echo "Saving..." + send_to_screen 'save-all' + sleep 1 + echo "Stopping..." + send_to_screen 'stop' + sleep 3 + mc_status fi + } mc_save() { - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is running... saving." - as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" - else - echo "$SERVICE was not running." + if mc_status; then + echo "Saving..." + send_to_screen 'save-all' fi } -mc_reload() { - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is running... reloading." - as_user "screen -p 0 -S minecraft -X eval 'stuff \"reload\"\015'" + +mc_restart_or_start() { + if mc_service_running; then + mc_stop + sleep 1 + mc_start else - echo "$SERVICE was not running." + mc_start fi } -mc_reload_or_start() { - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE was already running! Doing a reload now!" - mc_reload - else - echo "$SERVICE was not running... starting." - cd "$MCPATH" - as_user "cd \"$MCPATH\" && screen -dmS minecraft $INVOCATION" - sleep 7 - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is now running." - else - echo "Could not start $SERVICE." +mc_reset_permissions() { + if mc_status; then + echo "Unbanning ddidderr..." + send_to_screen 'pardon ddidderr' + echo "Unbanning mice_on_drugs..." + send_to_screen 'pardon mice_on_drugs' + echo "Unbanning Mochaccino..." + send_to_screen 'pardon Mochaccino' + + echo "ddidder -> admin" + send_to_screen 'pex user ddidderr group set admin' + echo "mice_on_drugs -> mod" + send_to_screen 'pex user mice_on_drugs group set mod' + echo "Mochaccino -> mod" + send_to_screen 'pex user Mochaccino group set mod' + + echo "Reloading permissions..." + send_to_screen 'pex reload' + echo "DONE" + fi +} + +mc_custom_command() { + if mc_status; then + if [[ -z "$1" ]]; then + echo "You must specify a command." >&2 + exit 1 fi + + echo "Trying to issue command: \"$1\"" + send_to_screen "$1" + tail -fn50 "$MCPATH/logs/latest.log" fi } -mc_ddidderr_admin() { - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is running... making ddidder to admin and reloading permissions." - as_user "screen -p 0 -S minecraft -X eval 'stuff \"pex user ddidderr group set admin\"\015'" - as_user "screen -p 0 -S minecraft -X eval 'stuff \"pex reload\"\015'" +mc_status() { + if mc_service_running; then + echo "$SERVICE is running." + return 0 else - echo "$SERVICE was not running." + echo "$SERVICE is stopped." + return 1 + fi +} + +mc_online() { + if mc_status; then + send_to_screen 'list' + sleep 2s + tac "$MCPATH/logs/latest.log" | egrep -om 1 "There are.*players online" fi } case "$1" in start) - echo "Starting Minecraft..." mc_start - echo "DONE" ;; stop) - echo "Stopping Minecraft..." - as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN!\"\015'" mc_stop - echo "DONE" ;; restart) - as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER REBOOT IN 10 SECONDS.\"\015'" $0 stop - sleep 1 + sleep 2 $0 start ;; - reload) - mc_reload + restart_or_start) + mc_restart_or_start ;; - reload_or_start) - echo "Starting or reloading Minecraft..." - mc_reload_or_start - echo "DONE" + reset_permissions) + mc_reset_permissions ;; - ddidderr_admin) - mc_ddidderr_admin + custom) + mc_custom_command "${*:2}" ;; - connected) - as_user "screen -p 0 -S minecraft -X eval 'stuff \"who\"\015'" - sleep 2s - tac "$MCPATH"/server.log | grep -m 1 "Connected" + online) + mc_online ;; status) - if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null - then - echo "$SERVICE is running." - else - echo "$SERVICE is not running." - fi + mc_status ;; save) mc_save ;; *) - echo "Usage: /etc/init.d/minecraft {start|stop|restart|connected|status}" + echo "Usage: $0 {start|stop|restart|save|online|status|reset_permissions}" exit 1 ;; esac diff --git a/scripts/test-deployment.sh b/scripts/test-deployment.sh index ebdf61f..a7c6310 100755 --- a/scripts/test-deployment.sh +++ b/scripts/test-deployment.sh @@ -1,29 +1,57 @@ #!/bin/bash +# Craft Inc. BorderProtection +# Copyright (C) 2016 Paul Schulze +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + SCRIPT_DIR="$(dirname "$0")" -DEVELOPER=$(whoami) +DEVELOPER="$(whoami)" -if [ $DEVELOPER = "tobi" ]; then - BUKKIT_DIR="$HOME/minecraft/testbuk" - PLUGIN_DIR="$HOME/minecraft/testbuk/plugins" - START_STOP_SCRIPT="$BUKKIT_DIR/../minecraft.sh" -else - BUKKIT_DIR="$SCRIPT_DIR/../bukkit-testserver" - PLUGIN_DIR="$SCRIPT_DIR/../bukkit-testserver/plugins" - START_STOP_SCRIPT="$SCRIPT_DIR/minecraft.sh" +BUKKIT_DIR="$SCRIPT_DIR/../bukkit-testserver" +PLUGIN_DIR="$SCRIPT_DIR/../bukkit-testserver/plugins" +START_STOP_SCRIPT="$SCRIPT_DIR/minecraft.sh" +BUILD_TOOLS_DIR="$BUKKIT_DIR/buildtools" + +mkdir -p "$BUILD_TOOLS_DIR" +# get build tools +if [ ! -f "$BUILD_TOOLS_DIR/BuildTools.jar" ]; then + wget -O- 'https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar' > "$BUILD_TOOLS_DIR/BuildTools.jar" fi +cp -f "$BUILD_TOOLS_DIR"/craftbukkit*.jar "$BUKKIT_DIR/" + +# run build tools +if [ ! -f "$BUKKIT_DIR"/craftbukkit*.jar ]; then + cd "$BUILD_TOOLS_DIR" + java -jar ./BuildTools.jar +fi + +echo 'eula=TRUE' > "$BUKKIT_DIR/eula.txt" + # TODO: This is a bad solution! Maven should write necessary information into an extra file. ARTIFACT_ID="$(grep -C5 'de.craftinc' "$SCRIPT_DIR/../pom.xml" | grep '' | sed 's/[ \t]*//g' | sed 's/<\/name>[ \t]*//g')" # TODO: This is a bad solution! Maven should write necessary information into an extra file. VERSION="$(grep -C5 'de.craftinc' "$SCRIPT_DIR/../pom.xml" | grep '' | sed 's/[ \t]*//g' | sed 's/<\/version>[ \t]*//g')" +rm -rf "$PLUGIN_DIR" mkdir -p "$PLUGIN_DIR" -cp "$SCRIPT_DIR/../target/$ARTIFACT_ID $VERSION".jar "$PLUGIN_DIR/" +cp "$SCRIPT_DIR/../target/$ARTIFACT_ID-$VERSION".jar "$PLUGIN_DIR/" echo -e "ddidderr\nmice_on_drugs\nMochaccino" > "$BUKKIT_DIR/ops.txt" -$START_STOP_SCRIPT reload_or_start +$START_STOP_SCRIPT restart_or_start diff --git a/src/main/java/de/craftinc/borderprotection/Messages.java b/src/main/java/de/craftinc/borderprotection/Messages.java index cc04cb3..da79e47 100644 --- a/src/main/java/de/craftinc/borderprotection/Messages.java +++ b/src/main/java/de/craftinc/borderprotection/Messages.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -65,21 +65,21 @@ public class Messages return sb.toString(); } - private static String borderExplanation = + private static final String borderExplanation = "One day the holy mods and administrators will expand the border. It is then your mission to explore " + "strange new worlds, to seek out new life and new civilizations, to boldly go where no one has gone before."; - public static String borderMessage = + public static final String borderMessage = ChatColor.YELLOW + "Sorry Dude! " + ChatColor.WHITE + "This is the border... the final frontier! " + borderExplanation + NEWLINE + makeCmd("/cibp get", "shows the borders of the current world"); - public static String borderTeleportMessage = + public static final String borderTeleportMessage = ChatColor.YELLOW + "Sorry Dude! " + ChatColor.WHITE + "You cannot teleport outside the border. " + borderExplanation + NEWLINE + makeCmd("/cibp get", "shows the borders of the current world"); - public static String helpGeneral = + public static final String helpGeneral = ChatColor.GREEN + pluginName + " - Usage:" + NEWLINE + ChatColor.WHITE + "Commands are always related to the current world." + NEWLINE + makeCmd("help", "shows this help") + @@ -90,15 +90,14 @@ public class Messages makeCmd("set", "Square border with distance (d) from 0,0.", "r", "") + makeCmd("set", "Rectangle defined by two points. Point=x,z.", "r", "", "") + makeCmd("set", "Circle border with radius from 0,0.", "c", "") + - makeCmd("set", "Circle defined by center and radius. Center=x,z.", "c", "", "") + - makeCmd("checkversion", "Checks for a newer version."); + makeCmd("set", "Circle defined by center and radius. Center=x,z.", "c", "", ""); - public static String borderCreationSuccessful + public static final String borderCreationSuccessful = ChatColor.YELLOW + "New border was set " + ChatColor.GREEN + "successfully" + ChatColor.YELLOW + "!"; - public static String commandIssuedByNonPlayer + public static final String commandIssuedByNonPlayer = ChatColor.RED + "Only a player can use " + pluginName + " commands!"; public static String borderInfo( String worldName, Border border ) @@ -115,56 +114,41 @@ public class Messages ChatColor.WHITE + "Border is " + borderEnabled + ChatColor.WHITE + "."; } - public static String borderInfoNoBorderSet = + public static final String borderInfoNoBorderSet = ChatColor.YELLOW + "No border in this world."; - public static String noPermissionSet = + public static final String noPermissionSet = ChatColor.RED + "Sorry, you don't have permission to change the border."; - public static String noPermissionCheckversion = - ChatColor.RED + "Sorry, you don't have permission to check for new versions."; - - public static String borderEnabled = + public static final String borderEnabled = ChatColor.YELLOW + "Border enabled."; - public static String borderDisabled = + public static final String borderDisabled = ChatColor.YELLOW + "Border disabled."; - public static String borderSaveException = + public static final String borderSaveException = ChatColor.RED + "Error: Could not save border on server. After the next reload this border will be lost!"; - public static String borderEnableDisableException = + public static final String borderEnableDisableException = ChatColor.RED + "Error: Could not save border state on server. After the next reload this border state will be lost!"; - public static String generationCanceled = + public static final String generationCanceled = ChatColor.GREEN + "World generation canceled!"; - public static String generationNotCanceled = + public static final String generationNotCanceled = ChatColor.RED + "No world generation happening. Cannot cancel!"; - public static String generationAlreadyInProgress = - ChatColor.YELLOW + "World generation is already in progress. It will continue after all players are logged out."; + public static final String generationAlreadyInProgress = + ChatColor.YELLOW + + "World generation is already in progress. It will continue after all players are logged out."; - public static String generationStarted = + public static final String generationStarted = ChatColor.GREEN + "World generation will start after all players left the server."; - public static String generationCouldNotBeStarted = + public static final String generationCouldNotBeStarted = ChatColor.RED + "Could not start world generation! Is there a border?"; - public static String updateMessage( String newVersion, String curVersion ) - { - return ChatColor.RED + pluginName + ": New version available!" + NEWLINE + - ChatColor.YELLOW + "Current version: " + ChatColor.WHITE + curVersion + NEWLINE + - ChatColor.YELLOW + "New version: " + ChatColor.WHITE + newVersion + NEWLINE + - ChatColor.YELLOW + "Please visit:" + NEWLINE + - ChatColor.AQUA + "http://dev.bukkit.org/bukkit-mods/craftinc-borderprotection" + NEWLINE + - ChatColor.YELLOW + "to get the latest version!"; - } - - public static String noUpdateAvailable = - ChatColor.YELLOW + "No updates available."; - /** * Display a message to a player and then wait for timeout seconds before displaying it again. * @@ -190,8 +174,8 @@ public class Messages { lastMessage.put(player.getName(), new HashMap() {{ - put(message, now); - }}); + put(message, now); + }}); } else { diff --git a/src/main/java/de/craftinc/borderprotection/Plugin.java b/src/main/java/de/craftinc/borderprotection/Plugin.java index af2e09a..8f4fb99 100644 --- a/src/main/java/de/craftinc/borderprotection/Plugin.java +++ b/src/main/java/de/craftinc/borderprotection/Plugin.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,7 +19,10 @@ package de.craftinc.borderprotection; import de.craftinc.borderprotection.borders.CircBorder; import de.craftinc.borderprotection.borders.RectBorder; import de.craftinc.borderprotection.commands.CommandSwitch; -import de.craftinc.borderprotection.events.*; +import de.craftinc.borderprotection.events.PlayerJoinListener; +import de.craftinc.borderprotection.events.PlayerMoveListener; +import de.craftinc.borderprotection.events.PlayerQuitListener; +import de.craftinc.borderprotection.events.PlayerTeleportListener; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; diff --git a/src/main/java/de/craftinc/borderprotection/borders/Border.java b/src/main/java/de/craftinc/borderprotection/borders/Border.java index f3f2b09..fc24948 100644 --- a/src/main/java/de/craftinc/borderprotection/borders/Border.java +++ b/src/main/java/de/craftinc/borderprotection/borders/Border.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,12 +32,12 @@ public abstract class Border { private static final String dataFileName = "borders.yml"; - protected Boolean isActive; + private Boolean isActive; - protected static final String isActiveKey = "enabled"; - protected static final String bordersKey = "borders"; + private static final String isActiveKey = "enabled"; + private static final String bordersKey = "borders"; - protected static final HashMap borders = new HashMap(); + static final HashMap borders = new HashMap(); private static final File bordersFile = new File(Plugin.instance.getDataFolder(), dataFileName); private static final FileConfiguration bordersFileConf = YamlConfiguration.loadConfiguration(bordersFile); @@ -46,7 +46,7 @@ public abstract class Border * The buffer in blocks which applies when a player is teleported inside the border. 0 means the player * will be teleported directly to the border. */ - public static final double buffer = 0.5; + static final double buffer = 0.5; public static HashMap getBorders() { @@ -79,11 +79,12 @@ public abstract class Border /** * Checks if the given location is inside or outside the border. If it is outside a new location (inside the border) * is returned, otherwise null. Applies padding to the border. (Simulates a larger border using padding.) - * @param l Location to check if inside the border + * + * @param l Location to check if inside the border * @param padding number of Blocks of padding applied to the border. * @return null if l is inside the border otherwise a new Location which is inside */ - public abstract Location checkBorder (Location l, double padding); + public abstract Location checkBorder( Location l, double padding ); /** * Returns an array of two Location objects defining a rectangle bigger or at size of the border. There are no @@ -96,7 +97,7 @@ public abstract class Border return isActive; } - public Border( Map map ) + Border( Map map ) { try { @@ -109,7 +110,7 @@ public abstract class Border } } - public Border() + Border() { // new borders are enabled by default isActive = true; @@ -137,7 +138,7 @@ public abstract class Border isActive = false; } - protected void serialize( Map map ) + void serialize( Map map ) { map.put(isActiveKey, isActive); } diff --git a/src/main/java/de/craftinc/borderprotection/borders/CircBorder.java b/src/main/java/de/craftinc/borderprotection/borders/CircBorder.java index 74ffa9a..9404dc2 100644 --- a/src/main/java/de/craftinc/borderprotection/borders/CircBorder.java +++ b/src/main/java/de/craftinc/borderprotection/borders/CircBorder.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,8 +16,8 @@ */ package de.craftinc.borderprotection.borders; -import de.craftinc.borderprotection.util.LocationSerializer2D; import de.craftinc.borderprotection.Plugin; +import de.craftinc.borderprotection.util.LocationSerializer2D; import de.craftinc.borderprotection.util.PlayerMovementUtil; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -31,8 +31,8 @@ public class CircBorder extends Border implements ConfigurationSerializable private Double radius; private Location center; - private static String centerKey = "center"; - private static String radiusKey = "radius"; + private static final String centerKey = "center"; + private static final String radiusKey = "radius"; @SuppressWarnings("unchecked unused") public CircBorder( Map map ) @@ -126,9 +126,9 @@ public class CircBorder extends Border implements ConfigurationSerializable @Override public Location[] getSurroundingRect() { - Location l1 = new Location(center.getWorld(), center.getX()+radius, center.getY(), center.getX()+radius); - Location l2 = new Location(center.getWorld(), center.getX()-radius, center.getY(), center.getX()-radius); + Location l1 = new Location(center.getWorld(), center.getX() + radius, center.getY(), center.getX() + radius); + Location l2 = new Location(center.getWorld(), center.getX() - radius, center.getY(), center.getX() - radius); - return new Location[]{ l1, l2 }; + return new Location[] { l1, l2 }; } } \ No newline at end of file diff --git a/src/main/java/de/craftinc/borderprotection/borders/RectBorder.java b/src/main/java/de/craftinc/borderprotection/borders/RectBorder.java index 898c6b3..9f69bf8 100644 --- a/src/main/java/de/craftinc/borderprotection/borders/RectBorder.java +++ b/src/main/java/de/craftinc/borderprotection/borders/RectBorder.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,8 +16,8 @@ */ package de.craftinc.borderprotection.borders; -import de.craftinc.borderprotection.util.LocationSerializer2D; import de.craftinc.borderprotection.Plugin; +import de.craftinc.borderprotection.util.LocationSerializer2D; import de.craftinc.borderprotection.util.PlayerMovementUtil; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -31,8 +31,8 @@ public class RectBorder extends Border implements ConfigurationSerializable private Location rectPoint1; private Location rectPoint2; - private static String rectPoint1Name = "p1"; - private static String rectPoint2Name = "p2"; + private static final String rectPoint1Name = "p1"; + private static final String rectPoint2Name = "p2"; @SuppressWarnings("unchecked unused") public RectBorder( Map map ) @@ -179,6 +179,6 @@ public class RectBorder extends Border implements ConfigurationSerializable @Override public Location[] getSurroundingRect() { - return new Location[]{ rectPoint1, rectPoint2 }; + return new Location[] { rectPoint1, rectPoint2 }; } } diff --git a/src/main/java/de/craftinc/borderprotection/commands/CancelGenerateCommand.java b/src/main/java/de/craftinc/borderprotection/commands/CancelGenerateCommand.java index 2596ed1..e48e8d8 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/CancelGenerateCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/CancelGenerateCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,10 +26,9 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; -public class CancelGenerateCommand implements SubCommand +class CancelGenerateCommand implements SubCommand { - @Override - public boolean execute(CommandSender sender, String[] parameters) + public boolean execute( CommandSender sender, String[] parameters ) { if ( !sender.hasPermission("craftinc.borderprotection.generate") ) { @@ -39,7 +38,7 @@ public class CancelGenerateCommand implements SubCommand World world = ( (Player) sender ).getWorld(); - if (!ChunkGenerator.isGenerating(world)) + if ( !ChunkGenerator.isGenerating(world) ) { sender.sendMessage(Messages.generationNotCanceled); } @@ -52,7 +51,6 @@ public class CancelGenerateCommand implements SubCommand return true; } - @Override public List commandNames() { ArrayList names = new ArrayList(); diff --git a/src/main/java/de/craftinc/borderprotection/commands/CheckVersionCommand.java b/src/main/java/de/craftinc/borderprotection/commands/CheckVersionCommand.java deleted file mode 100644 index 279eac7..0000000 --- a/src/main/java/de/craftinc/borderprotection/commands/CheckVersionCommand.java +++ /dev/null @@ -1,58 +0,0 @@ -/* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -package de.craftinc.borderprotection.commands; - -import de.craftinc.borderprotection.Messages; -import de.craftinc.borderprotection.util.UpdateHelper; -import org.bukkit.command.CommandSender; - -import java.util.ArrayList; -import java.util.List; - -public class CheckVersionCommand implements SubCommand -{ - @Override - public boolean execute(CommandSender sender, String[] parameters) - { - if ( !sender.hasPermission("craftinc.borderprotection.update") ) - { - sender.sendMessage(Messages.noPermissionCheckversion); - return false; - } - - if ( UpdateHelper.newVersionAvailable() ) - { - sender.sendMessage( - Messages.updateMessage(UpdateHelper.cachedLatestVersion, UpdateHelper.getCurrentVersion())); - return true; - } - else - { - sender.sendMessage(Messages.noUpdateAvailable); - return true; - } - } - - @Override - public List commandNames() - { - ArrayList names = new ArrayList(); - names.add("checkversion"); - - return names; - } -} diff --git a/src/main/java/de/craftinc/borderprotection/commands/CommandSwitch.java b/src/main/java/de/craftinc/borderprotection/commands/CommandSwitch.java index 2fe8b66..c5391d3 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/CommandSwitch.java +++ b/src/main/java/de/craftinc/borderprotection/commands/CommandSwitch.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,12 +27,11 @@ import java.util.Map; public class CommandSwitch implements CommandExecutor { - protected Map subCommandsMap = new HashMap(); + private final Map subCommandsMap = new HashMap(); public CommandSwitch() { registerCommand(new CancelGenerateCommand()); - registerCommand(new CheckVersionCommand()); registerCommand(new GenerateCommand()); registerCommand(new GetCommand()); registerCommand(new HelpCommand()); @@ -40,15 +39,14 @@ public class CommandSwitch implements CommandExecutor registerCommand(new SetCommand()); } - protected void registerCommand(SubCommand command) + private void registerCommand( SubCommand command ) { - for (String commandName : command.commandNames()) + for ( String commandName : command.commandNames() ) { subCommandsMap.put(commandName, command); } } - @Override public boolean onCommand( CommandSender sender, Command command, String label, String[] args ) { // Check if command comes from a player. @@ -63,18 +61,18 @@ public class CommandSwitch implements CommandExecutor // command for all actions if ( command.getName().equalsIgnoreCase("cibp") ) { - if (args.length > 0) + if ( args.length > 0 ) { String lowerCaseSubCommandName = args[0].toLowerCase(); SubCommand subCommand = subCommandsMap.get(lowerCaseSubCommandName); - if (subCommand != null) + if ( subCommand != null ) { success = subCommand.execute(sender, args); } } - if (!success) + if ( !success ) { subCommandsMap.get("help").execute(sender, args); } diff --git a/src/main/java/de/craftinc/borderprotection/commands/GenerateCommand.java b/src/main/java/de/craftinc/borderprotection/commands/GenerateCommand.java index 29079c6..9d3feaa 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/GenerateCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/GenerateCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,10 +25,9 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; -public class GenerateCommand implements SubCommand +class GenerateCommand implements SubCommand { - @Override - public boolean execute(CommandSender sender, String[] parameters) + public boolean execute( CommandSender sender, String[] parameters ) { if ( !sender.hasPermission("craftinc.borderprotection.generate") ) { @@ -38,13 +37,13 @@ public class GenerateCommand implements SubCommand World world = ( (Player) sender ).getWorld(); - if (ChunkGenerator.isGenerating(world)) + if ( ChunkGenerator.isGenerating(world) ) { sender.sendMessage(Messages.generationAlreadyInProgress); } else { - if (ChunkGenerator.generate(world)) + if ( ChunkGenerator.generate(world) ) { sender.sendMessage(Messages.generationStarted); } @@ -57,7 +56,6 @@ public class GenerateCommand implements SubCommand return true; } - @Override public List commandNames() { ArrayList names = new ArrayList(); diff --git a/src/main/java/de/craftinc/borderprotection/commands/GetCommand.java b/src/main/java/de/craftinc/borderprotection/commands/GetCommand.java index fdb4da9..4cae78f 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/GetCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/GetCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,10 +25,9 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; -public class GetCommand implements SubCommand +class GetCommand implements SubCommand { - @Override - public boolean execute(CommandSender sender, String[] parameters) + public boolean execute( CommandSender sender, String[] parameters ) { World world = ( (Player) sender ).getWorld(); @@ -45,7 +44,6 @@ public class GetCommand implements SubCommand return true; } - @Override public List commandNames() { ArrayList names = new ArrayList(); diff --git a/src/main/java/de/craftinc/borderprotection/commands/HelpCommand.java b/src/main/java/de/craftinc/borderprotection/commands/HelpCommand.java index 8c29cb6..96a03af 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/HelpCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/HelpCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,16 +22,14 @@ import org.bukkit.command.CommandSender; import java.util.ArrayList; import java.util.List; -public class HelpCommand implements SubCommand +public class HelpCommand implements SubCommand { - @Override - public boolean execute(CommandSender sender, String[] parameters) + public boolean execute( CommandSender sender, String[] parameters ) { sender.sendMessage(Messages.helpGeneral); return true; } - @Override public List commandNames() { ArrayList names = new ArrayList(); diff --git a/src/main/java/de/craftinc/borderprotection/commands/OnOffCommand.java b/src/main/java/de/craftinc/borderprotection/commands/OnOffCommand.java index 1e2d244..0c669b3 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/OnOffCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/OnOffCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,10 +27,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class OnOffCommand implements SubCommand +class OnOffCommand implements SubCommand { - @Override - public boolean execute(CommandSender sender, String[] parameters) + public boolean execute( CommandSender sender, String[] parameters ) { if ( !sender.hasPermission("craftinc.borderprotection.set") ) { @@ -72,7 +71,6 @@ public class OnOffCommand implements SubCommand return true; } - @Override public List commandNames() { ArrayList names = new ArrayList(); diff --git a/src/main/java/de/craftinc/borderprotection/commands/SetCommand.java b/src/main/java/de/craftinc/borderprotection/commands/SetCommand.java index 935a642..9fff15b 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/SetCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/SetCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,10 +30,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class SetCommand implements SubCommand +class SetCommand implements SubCommand { - @Override - public boolean execute(CommandSender sender, String[] parameters) + public boolean execute( CommandSender sender, String[] parameters ) { if ( !( parameters.length == 3 || parameters.length == 4 ) ) { @@ -60,7 +59,7 @@ public class SetCommand implements SubCommand if ( parameters[1].equalsIgnoreCase("r") ) { newBorder = new RectBorder(new Location(world, distance, 0, distance), - new Location(world, -distance, 0, -distance)); + new Location(world, -distance, 0, -distance)); } // circ border else if ( parameters[1].equalsIgnoreCase("c") ) @@ -96,7 +95,7 @@ public class SetCommand implements SubCommand Double p2Z = Double.parseDouble(parameters[3].split(",")[1]); newBorder = new RectBorder(new Location(world, p1X, 0, p1Z), - new Location(world, p2X, 0, p2Z)); + new Location(world, p2X, 0, p2Z)); } // circ border else if ( parameters[1].equalsIgnoreCase("c") ) @@ -133,7 +132,6 @@ public class SetCommand implements SubCommand return true; } - @Override public List commandNames() { ArrayList names = new ArrayList(); diff --git a/src/main/java/de/craftinc/borderprotection/commands/SubCommand.java b/src/main/java/de/craftinc/borderprotection/commands/SubCommand.java index acaa786..28f6f75 100644 --- a/src/main/java/de/craftinc/borderprotection/commands/SubCommand.java +++ b/src/main/java/de/craftinc/borderprotection/commands/SubCommand.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,18 +22,17 @@ import org.bukkit.command.CommandSender; import java.util.List; -public interface SubCommand +interface SubCommand { /** - * - * @param sender The sender (player) who executed the command. + * @param sender The sender (player) who executed the command. * @param parameters All parameters for executing this subcommand. Includes the subcommand name at index 0. * @return Returns an boolean indicating if the subcommand got could be executed. */ - public boolean execute(CommandSender sender, String[] parameters); + boolean execute( CommandSender sender, String[] parameters ); /** * Returns a list of names of the command. All strings should be lowercase! */ - public List commandNames(); + List commandNames(); } diff --git a/src/main/java/de/craftinc/borderprotection/events/PlayerJoinListener.java b/src/main/java/de/craftinc/borderprotection/events/PlayerJoinListener.java index bfbaaa4..520a968 100644 --- a/src/main/java/de/craftinc/borderprotection/events/PlayerJoinListener.java +++ b/src/main/java/de/craftinc/borderprotection/events/PlayerJoinListener.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze + Copyright (C) 2016 Paul Schulze This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,10 +16,7 @@ */ package de.craftinc.borderprotection.events; -import de.craftinc.borderprotection.Messages; import de.craftinc.borderprotection.util.ChunkGenerator; -import de.craftinc.borderprotection.util.UpdateHelper; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -31,17 +28,6 @@ public class PlayerJoinListener implements Listener @EventHandler(priority = EventPriority.LOWEST) public void onPlayerLogin( PlayerJoinEvent e ) { - final Player player = e.getPlayer(); - - if ( e.getPlayer().hasPermission("craftinc.borderprotection.update") ) - { - if ( UpdateHelper.newVersionAvailable() ) - { - String updateMessage = Messages.updateMessage(UpdateHelper.cachedLatestVersion, UpdateHelper.getCurrentVersion()); - e.setJoinMessage(e.getJoinMessage() + "\n" + updateMessage); - } - } - ChunkGenerator.pause(); } } diff --git a/src/main/java/de/craftinc/borderprotection/events/PlayerMoveListener.java b/src/main/java/de/craftinc/borderprotection/events/PlayerMoveListener.java index 83a0fee..960a396 100644 --- a/src/main/java/de/craftinc/borderprotection/events/PlayerMoveListener.java +++ b/src/main/java/de/craftinc/borderprotection/events/PlayerMoveListener.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ public class PlayerMoveListener implements Listener @SuppressWarnings("unused") - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerMove( PlayerMoveEvent e ) { // do nothing if the event is already cancelled diff --git a/src/main/java/de/craftinc/borderprotection/events/PlayerQuitListener.java b/src/main/java/de/craftinc/borderprotection/events/PlayerQuitListener.java index dd5ed8c..a233207 100644 --- a/src/main/java/de/craftinc/borderprotection/events/PlayerQuitListener.java +++ b/src/main/java/de/craftinc/borderprotection/events/PlayerQuitListener.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ public class PlayerQuitListener implements Listener @EventHandler(priority = EventPriority.NORMAL) public void onPlayerQuit( PlayerQuitEvent e ) { - if (Plugin.instance.getServer().getOnlinePlayers().length == 1) + if ( Plugin.instance.getServer().getOnlinePlayers().size() == 1 ) { ChunkGenerator.resume(); } diff --git a/src/main/java/de/craftinc/borderprotection/events/PlayerTeleportListener.java b/src/main/java/de/craftinc/borderprotection/events/PlayerTeleportListener.java index 21fb2eb..40c9975 100644 --- a/src/main/java/de/craftinc/borderprotection/events/PlayerTeleportListener.java +++ b/src/main/java/de/craftinc/borderprotection/events/PlayerTeleportListener.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; public class PlayerTeleportListener implements Listener { @SuppressWarnings("unused") - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerTeleport( PlayerTeleportEvent e ) { // do nothing if the event is already cancelled diff --git a/src/main/java/de/craftinc/borderprotection/util/ChunkGenerator.java b/src/main/java/de/craftinc/borderprotection/util/ChunkGenerator.java index 5fad027..e234b37 100644 --- a/src/main/java/de/craftinc/borderprotection/util/ChunkGenerator.java +++ b/src/main/java/de/craftinc/borderprotection/util/ChunkGenerator.java @@ -1,5 +1,5 @@ /* Craft Inc. BorderProtection - Copyright (C) 2013 Paul Schulze, Tobias Ottenweller + Copyright (C) 2016 Paul Schulze, Tobias Ottenweller This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,13 +28,13 @@ import java.util.HashMap; public class ChunkGenerator { - protected static HashMap chunkGenerationStatus = new HashMap(); - protected static boolean isPaused = true; - protected static HashMap lastGenerationLogTime = new HashMap(); + private static final HashMap chunkGenerationStatus = new HashMap(); + private static boolean isPaused = true; + private static final HashMap lastGenerationLogTime = new HashMap(); - public static long waitTicks = 5; // TODO: make adjustable via config file - public static int batchGenerationSize = 5; //TODO: make adjustable via config file - public static int paddingChunksAroundBorder = 15; // TODO: make adjustable via config file + private static final long waitTicks = 5; // TODO: make adjustable via config file + private static final int batchGenerationSize = 5; //TODO: make adjustable via config file + private static final int paddingChunksAroundBorder = 15; // TODO: make adjustable via config file public static void pause() { @@ -43,20 +43,20 @@ public class ChunkGenerator public static void resume() { - if (isPaused) + if ( isPaused ) { isPaused = false; - for (World w : chunkGenerationStatus.keySet()) + for ( World w : chunkGenerationStatus.keySet() ) { slowLoadNextChunk(w); } } } - public static void cancelRender(World w) + public static void cancelRender( World w ) { - if (w == null) + if ( w == null ) { throw new IllegalArgumentException("World 'w' must not be null!"); } @@ -64,9 +64,9 @@ public class ChunkGenerator chunkGenerationStatus.remove(w); } - public static boolean isGenerating(World w) + public static boolean isGenerating( World w ) { - if (w == null) + if ( w == null ) { throw new IllegalArgumentException("World 'w' must not be null!"); } @@ -76,45 +76,48 @@ public class ChunkGenerator /** * Starts the generation of all chunks inside a border. + * * @param w The world in which chunks will be generated. Must not be 'null'. An exception will be thrown otherwise! * @return A boolean indicating if the generation was successfully started. Will return false if no border exists * for a given world. Will return true if the generation was already running but will not restart the generation. */ - public static boolean generate(World w) + public static boolean generate( World w ) { - if (w == null) + if ( w == null ) { throw new IllegalArgumentException("World 'w' must not be null!"); } Border border = Border.getBorders().get(w); - if (border == null) + if ( border == null ) { return false; } Location[] borderRect = border.getSurroundingRect(); - int firstChunkX = (Math.min(borderRect[0].getBlockX(), borderRect[1].getBlockX()) >> 4) - paddingChunksAroundBorder; - int firstChunkZ = (Math.min(borderRect[0].getBlockZ(), borderRect[1].getBlockZ()) >> 4) - paddingChunksAroundBorder; + int firstChunkX = + ( Math.min(borderRect[0].getBlockX(), borderRect[1].getBlockX()) >> 4 ) - paddingChunksAroundBorder; + int firstChunkZ = + ( Math.min(borderRect[0].getBlockZ(), borderRect[1].getBlockZ()) >> 4 ) - paddingChunksAroundBorder; firstChunkX--; - chunkGenerationStatus.put(w, new Integer[]{firstChunkX, firstChunkZ}); + chunkGenerationStatus.put(w, new Integer[] { firstChunkX, firstChunkZ }); // the actual generation will start when resume is called! return true; } - protected static void slowLoadNextChunk(World w) + static void slowLoadNextChunk( World w ) { - if (w == null) + if ( w == null ) { throw new IllegalArgumentException("World 'w' must not be null!"); } - if (isPaused) + if ( isPaused ) { return; } @@ -129,23 +132,23 @@ public class ChunkGenerator /** * Will only load/generate the next chunks inside the border of the given world. Will stop if no border exists. */ - protected static void loadNextChunk(World w) + static void loadNextChunk( World w ) { - if (w == null) + if ( w == null ) { throw new IllegalArgumentException("World 'w' must not be null!"); } Border border = Border.getBorders().get(w); - if (border == null) + if ( border == null ) { return; } Integer[] lastGeneratedChunk = chunkGenerationStatus.get(w); - if (lastGeneratedChunk == null) + if ( lastGeneratedChunk == null ) { return; // the generation got most likely canceled } @@ -154,32 +157,37 @@ public class ChunkGenerator int chunkZ = lastGeneratedChunk[1]; final Location[] borderRect = border.getSurroundingRect(); - final int minChunkX = (Math.min(borderRect[0].getBlockX(), borderRect[1].getBlockX()) >> 4) - paddingChunksAroundBorder; - final int minChunkZ = (Math.min(borderRect[0].getBlockZ(), borderRect[1].getBlockZ()) >> 4) - paddingChunksAroundBorder; - final int maxChunkX = (Math.max(borderRect[0].getBlockX(), borderRect[1].getBlockX()) >> 4) + paddingChunksAroundBorder; - final int maxChunkZ = (Math.max(borderRect[0].getBlockZ(), borderRect[1].getBlockZ()) >> 4) + paddingChunksAroundBorder; + final int minChunkX = + ( Math.min(borderRect[0].getBlockX(), borderRect[1].getBlockX()) >> 4 ) - paddingChunksAroundBorder; + final int minChunkZ = + ( Math.min(borderRect[0].getBlockZ(), borderRect[1].getBlockZ()) >> 4 ) - paddingChunksAroundBorder; + final int maxChunkX = + ( Math.max(borderRect[0].getBlockX(), borderRect[1].getBlockX()) >> 4 ) + paddingChunksAroundBorder; + final int maxChunkZ = + ( Math.max(borderRect[0].getBlockZ(), borderRect[1].getBlockZ()) >> 4 ) + paddingChunksAroundBorder; chunkX++; - while (!chunkIsInsideBorder(chunkX, chunkZ, w, border) - && chunkZ <= maxChunkZ) + while ( !chunkIsInsideBorder(chunkX, chunkZ, w, border) + && chunkZ <= maxChunkZ ) { chunkX++; - if (chunkX > maxChunkX) + if ( chunkX > maxChunkX ) { chunkZ++; chunkX = minChunkX; } } - if (chunkZ <= maxChunkZ) + if ( chunkZ <= maxChunkZ ) { - chunkGenerationStatus.put(w, new Integer[]{chunkX, chunkZ}); + chunkGenerationStatus.put(w, new Integer[] { chunkX, chunkZ }); Chunk chunk = w.getChunkAt(chunkX, chunkZ); chunk.load(true); - loadSurroundingChunks(chunkX, chunkZ, w); // this will get the server to generate trees, … inside the new chunk + loadSurroundingChunks(chunkX, chunkZ, + w); // this will get the server to generate trees, … inside the new chunk logProgress(minChunkX, maxChunkX, minChunkZ, maxChunkZ, chunkX, chunkZ, w); } @@ -190,69 +198,75 @@ public class ChunkGenerator } } - protected static boolean chunkIsInsideBorder(int x, int z, World w, Border b) + private static boolean chunkIsInsideBorder( int x, int z, World w, Border b ) { - double xLoc = (double)(x << 4) + 8.0; + double xLoc = (double) ( x << 4 ) + 8.0; double yLoc = 0.0; - double zLoc = (double)(z << 4) + 8.0; + double zLoc = (double) ( z << 4 ) + 8.0; - double padding = (double)(paddingChunksAroundBorder << 4); + double padding = (double) ( paddingChunksAroundBorder << 4 ); Location l = new Location(w, xLoc, yLoc, zLoc); return b.checkBorder(l, padding) == null; } - protected static void loadSurroundingChunks(int x, int z, World w) + private static void loadSurroundingChunks( int x, int z, World w ) { int radius = 1; - for (int i=-radius; i 30000) { + if ( lastLogTime == null || ( now - lastLogTime ) > 30000 ) + { lastGenerationLogTime.put(world, now); final int numXChunks, offsetX; - if (((maxChunkX > 0) && (minChunkX > 0)) || ((maxChunkX < 0) && (minChunkX < 0))) + if ( ( ( maxChunkX > 0 ) && ( minChunkX > 0 ) ) || ( ( maxChunkX < 0 ) && ( minChunkX < 0 ) ) ) { numXChunks = minChunkX * maxChunkX; offsetX = 0; } - else { + else + { numXChunks = Math.abs(minChunkX) + maxChunkX; offsetX = Math.abs(minChunkX); } final int numZChunks, offsetZ; - if (((maxChunkZ > 0) && (minChunkZ > 0)) || ((maxChunkZ < 0) && (minChunkZ < 0))) + if ( ( ( maxChunkZ > 0 ) && ( minChunkZ > 0 ) ) || ( ( maxChunkZ < 0 ) && ( minChunkZ < 0 ) ) ) { numZChunks = minChunkZ * maxChunkZ; offsetZ = 0; } - else { + else + { numZChunks = Math.abs(minChunkZ) + maxChunkZ; offsetZ = Math.abs(minChunkZ); } final int totalNumChunks = numXChunks * numZChunks; - final int currentChunk = ((offsetZ+chunkZ) * numXChunks) + offsetX+chunkX; - Plugin.instance.getLogger().info("Generation progress: " + currentChunk + "/" + totalNumChunks + " Chunks in World " + world.getName()); + final int currentChunk = ( ( offsetZ + chunkZ ) * numXChunks ) + offsetX + chunkX; + Plugin.instance.getLogger() + .info("Generation progress: " + currentChunk + "/" + totalNumChunks + " Chunks in World " + + world.getName()); } } } @@ -261,12 +275,11 @@ public class ChunkGenerator class DelayedCall implements Runnable { public World w; - public int batchGenerationSize; + int batchGenerationSize; - @Override public void run() { - for (int i=0; i. -*/ -package de.craftinc.borderprotection.util; - -import de.craftinc.borderprotection.Plugin; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; - -public class UpdateHelper -{ - /** - * The URL from which the Plugin tries to get the latest version. - */ - @SuppressWarnings("FieldCanBeLocal") - private static final String updateUrl = "http://www.craftinc.de/plugins/update/craftinc-borderprotection"; - - /** - * The latest version which was seen on last check. - */ - public static String cachedLatestVersion = null; - - /** - * Gets the latest version from the updateURL and returns it as String. - * - * @return latest version as String. - */ - @SuppressWarnings("StringBufferMayBeStringBuilder") - public static String getLatestVersion() - { - // StringBuffer is thread-safe. Don't know if this is really important here, but safe is safe :). - StringBuffer s = new StringBuffer(); - try - { - URLConnection c = new URL(updateUrl).openConnection(); - BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); - String inputLine; - while ( ( inputLine = br.readLine() ) != null ) - { - s.append(inputLine); - } - br.close(); - } - catch ( MalformedURLException e ) - { - Plugin.instance.getLogger().warning("Could not check for latest version. Update URL is malformed."); - } - catch ( IOException e ) - { - Plugin.instance.getLogger().warning("Could not check for latest version. Update URL was not readable."); - } - - // update cached latest version - cachedLatestVersion = s.toString(); - - return s.toString(); - } - - /** - * Gets the current version of this plugin directly from the plugin.yml version entry. - * - * @return current version as String. - */ - public static String getCurrentVersion() - { - return Plugin.instance.getDescription().getVersion(); - } - - /** - * Checks if a newer version is available. - * - * @return Boolean - */ - public static Boolean newVersionAvailable() - { - final String version = getLatestVersion(); - - // do not show beta or dev versions - if (version.contains("beta") || version.contains("dev")) - return false; - - return !getCurrentVersion().equals(getLatestVersion()); - } -} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f33410d..e2efb20 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ # Craft Inc. BorderProtection -# Copyright (C) 2013 Paul Schulze, Tobias Ottenweller +# Copyright (C) 2016 Paul Schulze, Tobias Ottenweller # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,9 +17,9 @@ name: ${project.name} main: de.craftinc.borderprotection.Plugin version: ${project.version} -softdepend: [Multiverse-Core] +softdepend: [] authors: [ddidderr, mice_on_drugs] -website: http://www.craftinc.de/plugins/borderprotection +website: https://www.craftinc.de/plugins/borderprotection commands: @@ -33,9 +33,6 @@ permissions: craftinc.borderprotection.ignoreborders: default: false description: Allows to be everywhere on the map (ignoring the borders). - craftinc.borderprotection.update: - default: op - description: Allows to get notified on login, when a new update is available. craftinc.borderprotection.generate: default: op description: Allows to generate the complete world inside the border. \ No newline at end of file