diff --git a/.gitignore b/.gitignore index 82e5c63..3f94e87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ # Project exclude paths -/target/ -/.idea/ +.idea/ +.gradle/ +build/ +*.class +.vscode +bin \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..754a310 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# IridiumChunkBusters +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/b4024c5efc094efaa5561762c3566bb6)](https://www.codacy.com/gh/Iridium-Development/IridiumChunkBusters/dashboard) diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..b78cd13 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,100 @@ +plugins { + java + `maven-publish` + id("com.github.johnrengelman.shadow") version "6.1.0" +} + +group = "com.iridium" +version = "1.0.8" +description = "IridiumChunkBusters" + +repositories { + maven("https://repo.mvdw-software.com/content/groups/public/") + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") + maven("https://ci.ender.zone/plugin/repository/everything/") + maven("https://jitpack.io") + maven("https://papermc.io/repo/repository/maven-public/") + maven("https://repo.rosewooddev.io/repository/public/") + maven("https://hub.jeff-media.com/nexus/repository/jeff-media-public/") + maven("https://moyskleytech.com/debian/m2/") + mavenLocal() + mavenCentral() + maven("https://nexus.iridiumdevelopment.net/repository/maven-releases/") +} + +dependencies { + // Dependencies that we want to shade in + implementation("org.jetbrains:annotations:22.0.0") + implementation("com.iridium:IridiumCore:1.6.7") + implementation("org.bstats:bstats-bukkit:3.0.0") + implementation("com.j256.ormlite:ormlite-core:6.1") + implementation("com.j256.ormlite:ormlite-jdbc:6.1") + implementation("de.jeff_media:SpigotUpdateChecker:1.3.2") + + // Other dependencies that are not required or already available at runtime + compileOnly("org.projectlombok:lombok:1.18.22") + compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT") + compileOnly("net.prosavage:FactionsX:1.2") + compileOnly("com.massivecraft.massivesuper:MassiveCore:2.14") + compileOnly("com.massivecraft.massivesuper:Factions:2.14.0") + compileOnly("com.massivecraft:Factions:1.6.9.5-U0.6.8") { + exclude("com.darkblade12") + exclude("org.kitteh") + } + compileOnly("com.github.TownyAdvanced:Towny:0.96.7.0") + + // Enable lombok annotation processing + annotationProcessor("org.projectlombok:lombok:1.18.20") +} + +tasks { + // "Replace" the build task with the shadowJar task (probably bad but who cares) + jar { + dependsOn("shadowJar") + enabled = false + } + + shadowJar { + // Remove the archive classifier suffix + archiveClassifier.set("") + + // Relocate dependencies + relocate("com.fasterxml.jackson", "com.iridium.iridiumchunkbusters.dependencies.fasterxml") + relocate("com.j256.ormlite", "com.iridium.iridiumchunkbusters.dependencies.ormlite") + relocate("org.bstats", "com.iridium.iridiumchunkbusters.dependencies.bstats") + relocate("de.jeff_media", "com.iridium.iridiumchunkbusters.dependencies") + + // Remove unnecessary files from the jar + minimize() + } + + // Set UTF-8 as the encoding + compileJava { + options.encoding = "UTF-8" + } + + // Process Placeholders for the plugin.yml + processResources { + filesMatching("**/plugin.yml") { + expand(rootProject.project.properties) + } + + // Always re-run this task + outputs.upToDateWhen { false } + } +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + vendor.set(JvmVendorSpec.ADOPTOPENJDK) + } +} + +// Maven publishing +publishing { + publications.create("maven") { + from(components["java"]) + } +} diff --git a/dependancies/Factions.jar b/dependancies/Factions.jar deleted file mode 100644 index fb89feb..0000000 Binary files a/dependancies/Factions.jar and /dev/null differ diff --git a/dependancies/MassiveCore.jar b/dependancies/MassiveCore.jar deleted file mode 100644 index 502049f..0000000 Binary files a/dependancies/MassiveCore.jar and /dev/null differ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..41dfb87 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 113bcd2..0000000 --- a/pom.xml +++ /dev/null @@ -1,322 +0,0 @@ - - - 4.0.0 - - com.peaches - IridiumChunkBusters - 1.0.0 - - - - codemc-repo - https://repo.codemc.org/repository/maven-public/ - default - - - mvdw-software - MVdW Public Repositories - http://repo.mvdw-software.be/content/groups/public/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - sk89q-snapshots - http://maven.sk89q.com/artifactory/repo - - true - - - true - - - - - placeholderapi - http://repo.extendedclip.com/content/repositories/placeholderapi/ - - - ess-repo - https://ci.ender.zone/plugin/repository/everything/ - - - jitpack.io - https://jitpack.io - - - rosewood-repo - https://repo.rosewooddev.io/repository/public/ - - - savagelabs - https://nexus.savagelabs.net/repository/maven-releases/ - - - - - org.spigotmc - spigot-api - LATEST - provided - - - persistence-api - javax.persistence - - - junit - junit - - - guava - com.google.guava - - - gson - com.google.code.gson - - - - - - org.spigotmc. - spigot - 1.8 - provided - - - org.spigotmc.. - spigot - 1.8.3 - provided - - - org.spigotmc... - spigot - 1.8.8 - provided - - - org.spigotmc.... - spigot - 1.9.2 - provided - - - org.spigotmc..... - spigot - 1.9.4 - provided - - - org.spigotmc...... - spigot - 1.10.2 - provided - - - org.spigotmc....... - spigot - 1.11.2 - provided - - - org.spigotmc........ - spigot - 1.12.2 - provided - - - org.spigotmc......... - spigot - 1.13 - provided - - - org.spigotmc.......... - spigot - 1.13.2 - provided - - - org.spigotmc........... - spigot - 1.14.4 - provided - - - org.spigotmc............ - spigot - 1.15.2 - provided - - - org.spigotmc............. - spigot - 1.16.1 - provided - - - org.spigotmc.............. - spigot - 1.16.2 - provided - - - org.spigotmc............... - spigot - 1.16.3 - provided - - - org.spigotmc................ - spigot - 1.16.4 - provided - - - - de.tr7zw - item-nbt-api - 2.7.1 - - - - com.iridium - IridiumColorAPI - 1.0.2 - - - - com.github.cryptomorin - XSeries - LATEST - - - - org.jetbrains - annotations - 16.0.1 - - - - com.j256.ormlite - ormlite-core - 5.3 - - - com.j256.ormlite - ormlite-jdbc - 5.3 - - - - org.projectlombok - lombok - 1.18.16 - provided - - - - com.fasterxml.jackson.core - jackson-databind - LATEST - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - 2.12.1 - - - - - net.prosavage.factionsx - FactionsX - LATEST - provided - - - com.massivecraft - Factions - LATEST - provided - - - com.massivecraft.massivesuper - MassiveSuper - 2.14.0 - system - ${project.basedir}/dependancies/Factions.jar - - - com.massivecraft.massivesuper. - MassiveSuper - 2.14.0 - system - ${project.basedir}/dependancies/MassiveCore.jar - - - - - com.j256.ormlite - ormlite-core - 5.3 - - - com.j256.ormlite - ormlite-jdbc - 5.3 - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.1 - - - shade - package - - shade - - - - - - - de.tr7zw.changeme.nbtapi - com.iridium.chunkbusters.nbtapi - - - com.cryptomorin.xseries - com.iridium.chunkbusters.xseries - - - org.bstats - com.iridium.chunkbusters.bstats - - - com.iridium.iridiumcolorapi - com.iridium.chunkbusters - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - - - - - \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..ef04714 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "IridiumChunkBusters" diff --git a/src/main/java/com/iridium/chunkbusters/ChunkLayer.java b/src/main/java/com/iridium/chunkbusters/ChunkLayer.java new file mode 100644 index 0000000..2a2790a --- /dev/null +++ b/src/main/java/com/iridium/chunkbusters/ChunkLayer.java @@ -0,0 +1,8 @@ +package com.iridium.chunkbusters; + +import org.bukkit.Material; + +public class ChunkLayer { + public Material[][] blocks = new Material[16][16]; + public byte[][] data = new byte[16][16]; +} diff --git a/src/main/java/com/iridium/chunkbusters/IridiumChunkBusters.java b/src/main/java/com/iridium/chunkbusters/IridiumChunkBusters.java index b32a5b2..1f1f10e 100644 --- a/src/main/java/com/iridium/chunkbusters/IridiumChunkBusters.java +++ b/src/main/java/com/iridium/chunkbusters/IridiumChunkBusters.java @@ -1,23 +1,26 @@ package com.iridium.chunkbusters; + import com.iridium.chunkbusters.commands.CommandManager; import com.iridium.chunkbusters.configs.Configuration; import com.iridium.chunkbusters.configs.Messages; import com.iridium.chunkbusters.configs.SQL; import com.iridium.chunkbusters.database.ChunkBuster; import com.iridium.chunkbusters.database.DatabaseManager; +import com.iridium.chunkbusters.gui.ConfirmationGUI; import com.iridium.chunkbusters.listeners.BlockPlaceListener; import com.iridium.chunkbusters.listeners.InventoryClickListener; -import com.iridium.chunkbusters.nms.NMS; +import com.iridium.chunkbusters.listeners.PlayerInteractListener; import com.iridium.chunkbusters.support.*; -import com.iridium.chunkbusters.utils.ItemStackUtils; -import com.iridium.chunkbusters.utils.Placeholder; -import de.tr7zw.changeme.nbtapi.NBTItem; +import com.iridium.iridiumcore.IridiumCore; +import com.iridium.iridiumcore.dependencies.nbtapi.NBTItem; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; import lombok.Getter; +import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.java.JavaPlugin; import java.sql.SQLException; import java.util.ArrayList; @@ -25,10 +28,9 @@ import java.util.List; @Getter -public class IridiumChunkBusters extends JavaPlugin { +public class IridiumChunkBusters extends IridiumCore { private static IridiumChunkBusters instance; - private Persist persist; private DatabaseManager databaseManager; private CommandManager commandManager; @@ -39,45 +41,25 @@ public class IridiumChunkBusters extends JavaPlugin { private Support support; - private NMS nms; - private List activeChunkBusters = new ArrayList<>(); + private final List activeChunkBusters = new ArrayList<>(); + + private final List confirmationGUIS = new ArrayList<>(); @Override public void onEnable() { - try { - nms = (NMS) Class.forName("com.iridium.chunkbusters.nms." + Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]).newInstance(); - } catch (ClassNotFoundException e) { - //Unsupported Version - getLogger().info("Unsupported Version Detected: " + Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]); - getLogger().info("Try updating from spigot"); - Bukkit.getPluginManager().disablePlugin(this); - return; - } catch (IllegalAccessException | InstantiationException e) { - e.printStackTrace(); - Bukkit.getPluginManager().disablePlugin(this); - return; - } + super.onEnable(); getDataFolder().mkdir(); instance = this; - this.persist = new Persist(Persist.PersistType.YAML); - super.onEnable(); this.commandManager = new CommandManager("chunkbusters"); - loadConfigs(); - saveConfigs(); try { this.databaseManager = new DatabaseManager(); } catch (SQLException throwables) { throwables.printStackTrace(); } - databaseManager.getChunkBusters().thenAccept(chunkBusters -> { - chunkBusters.stream().filter(chunkBuster -> chunkBuster.getY() != 0).forEach(chunkBuster -> { - activeChunkBusters.add(chunkBuster); - chunkBuster.deleteChunks(); - }); - }); - registerListeners(); this.support = getSupport(); + databaseManager.getChunkBusters().thenAccept(chunkBusters -> chunkBusters.stream().filter(chunkBuster -> chunkBuster.getY() != 0).forEach(ChunkBuster::deleteChunks)); + new Metrics(this, 9403); getLogger().info("----------------------------------------"); getLogger().info(""); getLogger().info(getDescription().getName() + " Enabled!"); @@ -87,31 +69,24 @@ public void onEnable() { } @Override - public void onDisable() { - super.onDisable(); - activeChunkBusters.forEach(chunkBuster -> databaseManager.saveChunkBuster(chunkBuster)); - getLogger().info("-------------------------------"); - getLogger().info(""); - getLogger().info(getDescription().getName() + " Disabled!"); - getLogger().info(""); - getLogger().info("-------------------------------"); - } - public void loadConfigs() { - this.configuration = persist.load(Configuration.class); - this.messages = persist.load(Messages.class); - this.sql = persist.load(SQL.class); + this.configuration = getPersist().load(Configuration.class); + this.messages = getPersist().load(Messages.class); + this.sql = getPersist().load(SQL.class); } + @Override public void saveConfigs() { - this.persist.save(configuration); - this.persist.save(messages); - this.persist.save(sql); + getPersist().save(configuration); + getPersist().save(messages); + getPersist().save(sql); } + @Override public void registerListeners() { Bukkit.getPluginManager().registerEvents(new BlockPlaceListener(), this); Bukkit.getPluginManager().registerEvents(new InventoryClickListener(), this); + Bukkit.getPluginManager().registerEvents(new PlayerInteractListener(), this); } public Support getSupport() { @@ -139,6 +114,11 @@ public int getChunkBusterSize(ItemStack itemStack) { return nbtItem.hasKey("IridiumChunkBuster") ? nbtItem.getInteger("IridiumChunkBuster") : 0; } + @Override + public void saveData() { + activeChunkBusters.forEach(chunkBuster -> databaseManager.saveChunkBuster(chunkBuster)); + } + public static IridiumChunkBusters getInstance() { return instance; } diff --git a/src/main/java/com/iridium/chunkbusters/Item.java b/src/main/java/com/iridium/chunkbusters/Item.java deleted file mode 100644 index bfc922e..0000000 --- a/src/main/java/com/iridium/chunkbusters/Item.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.iridium.chunkbusters; - -import com.cryptomorin.xseries.XMaterial; - -import java.util.List; - -public class Item { - - public XMaterial material; - public int amount; - public String title; - public String headData; - public String headOwner; - public List lore; - public Integer slot; - - public Item() { - } - - public Item(XMaterial material, int amount, String title, List lore) { - this.material = material; - this.amount = amount; - this.lore = lore; - this.title = title; - } - - public Item(XMaterial material, int slot, int amount, String title, List lore) { - this.material = material; - this.amount = amount; - this.lore = lore; - this.title = title; - this.slot = slot; - } - - public Item(XMaterial material, int slot, String headData, int amount, String title, List lore) { - this.material = material; - this.amount = amount; - this.lore = lore; - this.title = title; - this.slot = slot; - this.headData = headData; - } - - public Item(XMaterial material, int slot, int amount, String title, String headOwner, List lore) { - this.material = material; - this.amount = amount; - this.lore = lore; - this.title = title; - this.headOwner = headOwner; - this.slot = slot; - } - - public Item(XMaterial material, int amount, String title, String headOwner, List lore) { - this.material = material; - this.amount = amount; - this.lore = lore; - this.title = title; - this.headOwner = headOwner; - } -} diff --git a/src/main/java/com/iridium/chunkbusters/Persist.java b/src/main/java/com/iridium/chunkbusters/Persist.java deleted file mode 100644 index 676f3bc..0000000 --- a/src/main/java/com/iridium/chunkbusters/Persist.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.iridium.chunkbusters; - -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import org.bukkit.Bukkit; -import org.bukkit.plugin.java.JavaPlugin; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Type; - -public class Persist { - private final ObjectMapper objectMapper; - private final PersistType persistType; - - public Persist(PersistType persistType) { - this.persistType = persistType; - switch (persistType) { - case YAML: - objectMapper = new ObjectMapper(new YAMLFactory()); - break; - default: - objectMapper = new ObjectMapper(new JsonFactory()); - } - } - - public static String getName(Class clazz) { - return clazz.getSimpleName().toLowerCase(); - } - - // ------------------------------------------------------------ // - // GET NAME - What should we call this type of object? - // ------------------------------------------------------------ // - - public static String getName(Object o) { - return getName(o.getClass()); - } - - public static String getName(Type type) { - return getName(type.getClass()); - } - - // ------------------------------------------------------------ // - // GET FILE - In which file would we like to store this object? - // ------------------------------------------------------------ // - - public File getFile(String name) { - return new File(IridiumChunkBusters.getInstance().getDataFolder(), name + persistType.getExtension()); - } - - public File getFile(Class clazz) { - return getFile(getName(clazz)); - } - - public File getFile(Object obj) { - return getFile(getName(obj)); - } - - // SAVE - - public void save(Object instance) { - save(instance, getFile(instance)); - } - - public void save(Object instance, File file) { - try { - objectMapper.writeValue(file, instance); - } catch (IOException e) { - IridiumChunkBusters.getInstance().getLogger().severe("Failed to save " + file.toString() + ": " + e.getMessage()); - Bukkit.getPluginManager().disablePlugin(IridiumChunkBusters.getInstance()); - } - } - - public String toString(Object instance) { - try { - return objectMapper.writeValueAsString(instance); - } catch (IOException e) { - IridiumChunkBusters.getInstance().getLogger().severe("Failed to save " + instance.toString() + ": " + e.getMessage()); - Bukkit.getPluginManager().disablePlugin(IridiumChunkBusters.getInstance()); - } - return ""; - } - - // LOAD BY CLASS - - public T load(Class clazz) { - return load(clazz, getFile(clazz)); - } - - public T load(Class clazz, File file) { - if (file.exists()) { - try { - return objectMapper.readValue(file, clazz); - } catch (IOException e) { - IridiumChunkBusters.getInstance().getLogger().severe("Failed to parse " + file.toString() + ": " + e.getMessage()); - Bukkit.getPluginManager().disablePlugin(IridiumChunkBusters.getInstance()); - } - } - try { - return clazz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - return null; - } - - public T load(Class clazz, String content) { - try { - return objectMapper.readValue(content, clazz); - } catch (IOException e) { - Bukkit.getPluginManager().disablePlugin(IridiumChunkBusters.getInstance()); - } - - return null; - } - - public enum PersistType { - YAML(".yml"), JSON(".json"); - private final String extension; - - PersistType(String extension) { - this.extension = extension; - } - - public String getExtension() { - return extension; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/iridium/chunkbusters/commands/Command.java b/src/main/java/com/iridium/chunkbusters/commands/Command.java index e687fb9..8de2710 100644 --- a/src/main/java/com/iridium/chunkbusters/commands/Command.java +++ b/src/main/java/com/iridium/chunkbusters/commands/Command.java @@ -26,5 +26,5 @@ public Command(@NotNull List aliases, @NotNull String description, @NotN public abstract void execute(CommandSender sender, String[] args); - public abstract List TabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args); + public abstract List onTabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args); } diff --git a/src/main/java/com/iridium/chunkbusters/commands/CommandManager.java b/src/main/java/com/iridium/chunkbusters/commands/CommandManager.java index 5414f5b..856d9df 100644 --- a/src/main/java/com/iridium/chunkbusters/commands/CommandManager.java +++ b/src/main/java/com/iridium/chunkbusters/commands/CommandManager.java @@ -1,13 +1,15 @@ package com.iridium.chunkbusters.commands; import com.iridium.chunkbusters.IridiumChunkBusters; -import com.iridium.chunkbusters.utils.StringUtils; +import com.iridium.iridiumcore.utils.StringUtils; +import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; public class CommandManager implements CommandExecutor, TabCompleter { @@ -25,6 +27,8 @@ public void registerCommands() { registerCommand(new ReloadCommand()); registerCommand(new GiveCommand()); registerCommand(new LogsCommand()); + + commands.sort(Comparator.comparing(command -> command.getAliases().get(0))); } public void registerCommand(Command command) { @@ -56,6 +60,7 @@ public boolean onCommand(CommandSender cs, org.bukkit.command.Command cmd, Strin } } else { if (cs instanceof Player) { + Bukkit.dispatchCommand(cs, "cb help"); Player p = (Player) cs; return true; } @@ -85,7 +90,7 @@ public List onTabComplete(CommandSender cs, org.bukkit.command.Command c if (command.getAliases().contains(args[0]) && (command.isEnabled() && ( cs.hasPermission(command.getPermission()) || command.getPermission().equalsIgnoreCase("") || command.getPermission().equalsIgnoreCase("iridiumchunkbusters.")))) { - return command.TabComplete(cs, cmd, s, args); + return command.onTabComplete(cs, cmd, s, args); } } return null; diff --git a/src/main/java/com/iridium/chunkbusters/commands/GiveCommand.java b/src/main/java/com/iridium/chunkbusters/commands/GiveCommand.java index 83ef642..b63fca8 100644 --- a/src/main/java/com/iridium/chunkbusters/commands/GiveCommand.java +++ b/src/main/java/com/iridium/chunkbusters/commands/GiveCommand.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import java.util.Arrays; +import java.util.Collections; import java.util.List; public class GiveCommand extends Command { @@ -18,12 +19,12 @@ public GiveCommand() { @Override public void execute(CommandSender cs, String[] args) { if (args.length != 3) { - cs.sendMessage("/chunkbuster give "); + cs.sendMessage(com.iridium.iridiumcore.utils.StringUtils.color(IridiumChunkBusters.getInstance().getConfiguration().prefix + " &7/chunkbuster give ")); return; } if (!StringUtils.isNumeric(args[2])) { - cs.sendMessage(com.iridium.chunkbusters.utils.StringUtils.color(IridiumChunkBusters.getInstance().getMessages().mustBeANumber.replace("%prefix%", IridiumChunkBusters.getInstance().getConfiguration().prefix))); + cs.sendMessage(com.iridium.iridiumcore.utils.StringUtils.color(IridiumChunkBusters.getInstance().getMessages().mustBeANumber.replace("%prefix%", IridiumChunkBusters.getInstance().getConfiguration().prefix))); return; } Player player = Bukkit.getPlayer(args[1]); @@ -34,7 +35,9 @@ public void execute(CommandSender cs, String[] args) { } @Override - public List TabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { - return null; + public List onTabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { + if (args.length == 2) return null; + if (args.length == 3) return Arrays.asList("1", "2", "3"); + return Collections.emptyList(); } } diff --git a/src/main/java/com/iridium/chunkbusters/commands/HelpCommand.java b/src/main/java/com/iridium/chunkbusters/commands/HelpCommand.java index 3f80892..adfbcd2 100644 --- a/src/main/java/com/iridium/chunkbusters/commands/HelpCommand.java +++ b/src/main/java/com/iridium/chunkbusters/commands/HelpCommand.java @@ -1,11 +1,8 @@ package com.iridium.chunkbusters.commands; import com.iridium.chunkbusters.IridiumChunkBusters; -import net.md_5.bungee.api.chat.*; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; +import com.iridium.iridiumcore.utils.StringUtils; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import java.util.Collections; import java.util.List; @@ -13,50 +10,21 @@ public class HelpCommand extends Command { public HelpCommand() { - super(Collections.singletonList("help"), "Displays the plugin commands", "", true); + super(Collections.singletonList("help"), "Displays the plugin commands", "", false); } @Override public void execute(CommandSender cs, String[] args) { - Player p = (Player) cs; - int page = 1; - if (args.length == 2) { - if (!StringUtils.isNumeric(args[1])) { - cs.sendMessage(com.iridium.chunkbusters.utils.StringUtils.color(IridiumChunkBusters.getInstance().getMessages().mustBeANumber.replace("%prefix%", IridiumChunkBusters.getInstance().getConfiguration().prefix))); - return; - } - page = Integer.parseInt(args[1]); - } - int maxpage = (int) Math.ceil(IridiumChunkBusters.getInstance().getCommandManager().commands.size() / 18.00); - int current = 0; - p.sendMessage(com.iridium.chunkbusters.utils.StringUtils.color(IridiumChunkBusters.getInstance().getMessages().helpHeader)); + cs.sendMessage(StringUtils.color(IridiumChunkBusters.getInstance().getMessages().helpHeader)); for (Command command : IridiumChunkBusters.getInstance().getCommandManager().commands) { - if ((p.hasPermission(command.getPermission()) || command.getPermission().equalsIgnoreCase("") || command.getPermission().equalsIgnoreCase("iridiumskyblock.")) && command.isEnabled()) { - if (current >= (page - 1) * 18 && current < page * 18) - p.sendMessage(com.iridium.chunkbusters.utils.StringUtils.color(IridiumChunkBusters.getInstance().getMessages().helpMessage.replace("%command%", command.getAliases().get(0)).replace("%description%", command.getDescription()))); - current++; - } - } - BaseComponent[] components = TextComponent.fromLegacyText(com.iridium.chunkbusters.utils.StringUtils.color(IridiumChunkBusters.getInstance().getMessages().helpfooter.replace("%maxpage%", maxpage + "").replace("%page%", page + ""))); - - for (BaseComponent component : components) { - if (ChatColor.stripColor(component.toLegacyText()).contains(IridiumChunkBusters.getInstance().getMessages().nextPage)) { - if (page < maxpage) { - component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/is help " + (page + 1))); - component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(IridiumChunkBusters.getInstance().getMessages().helpPageHoverMessage.replace("%page%", "" + (page + 1))).create())); - } - } else if (ChatColor.stripColor(component.toLegacyText()).contains(IridiumChunkBusters.getInstance().getMessages().previousPage)) { - if (page > 1) { - component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/is help " + (page - 1))); - component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(IridiumChunkBusters.getInstance().getMessages().helpPageHoverMessage.replace("%page%", "" + (page - 1))).create())); - } + if ((cs.hasPermission(command.getPermission()) || command.getPermission().equalsIgnoreCase("") || command.getPermission().equalsIgnoreCase("iridiumchunkbusters.")) && command.isEnabled()) { + cs.sendMessage(StringUtils.color(IridiumChunkBusters.getInstance().getMessages().helpMessage.replace("%command%", command.getAliases().get(0)).replace("%description%", command.getDescription()))); } } - p.getPlayer().spigot().sendMessage(components); } @Override - public List TabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { - return null; + public List onTabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { + return Collections.emptyList(); } } diff --git a/src/main/java/com/iridium/chunkbusters/commands/LogsCommand.java b/src/main/java/com/iridium/chunkbusters/commands/LogsCommand.java index bcf3c6d..a7dbc1a 100644 --- a/src/main/java/com/iridium/chunkbusters/commands/LogsCommand.java +++ b/src/main/java/com/iridium/chunkbusters/commands/LogsCommand.java @@ -2,19 +2,19 @@ import com.iridium.chunkbusters.IridiumChunkBusters; import com.iridium.chunkbusters.gui.LogsGUI; -import com.iridium.chunkbusters.utils.StringUtils; +import com.iridium.iridiumcore.utils.StringUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; +import java.util.Collections; import java.util.List; public class LogsCommand extends Command { public LogsCommand() { - super(Arrays.asList("logs"), "Show recent chunkbusters used", "", true); + super(Collections.singletonList("logs"), "Show recent chunkbusters used", "", true); } @Override @@ -24,7 +24,7 @@ public void execute(CommandSender sender, String[] args) { player.openInventory(new LogsGUI(player.getUniqueId(), 1).getInventory()); } else if (player.hasPermission("iridiumchunkbusters.viewotherlogs")) { OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[1]); - if (offlinePlayer != null) { + if (offlinePlayer.hasPlayedBefore()) { player.openInventory(new LogsGUI(offlinePlayer.getUniqueId(), 1).getInventory()); } else { sender.sendMessage(StringUtils.color(IridiumChunkBusters.getInstance().getMessages().unknownPlayer.replace("%prefix%", IridiumChunkBusters.getInstance().getConfiguration().prefix))); @@ -33,7 +33,7 @@ public void execute(CommandSender sender, String[] args) { } @Override - public List TabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { + public List onTabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { return null; } } diff --git a/src/main/java/com/iridium/chunkbusters/commands/ReloadCommand.java b/src/main/java/com/iridium/chunkbusters/commands/ReloadCommand.java index f1a81f6..ff9183e 100644 --- a/src/main/java/com/iridium/chunkbusters/commands/ReloadCommand.java +++ b/src/main/java/com/iridium/chunkbusters/commands/ReloadCommand.java @@ -1,7 +1,7 @@ package com.iridium.chunkbusters.commands; import com.iridium.chunkbusters.IridiumChunkBusters; -import com.iridium.chunkbusters.utils.StringUtils; +import com.iridium.iridiumcore.utils.StringUtils; import org.bukkit.command.CommandSender; import java.util.Collections; @@ -20,7 +20,7 @@ public void execute(CommandSender sender, String[] args) { } @Override - public List TabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { - return null; + public List onTabComplete(CommandSender cs, org.bukkit.command.Command cmd, String s, String[] args) { + return Collections.emptyList(); } } diff --git a/src/main/java/com/iridium/chunkbusters/configs/Configuration.java b/src/main/java/com/iridium/chunkbusters/configs/Configuration.java index 56d05b4..2287920 100644 --- a/src/main/java/com/iridium/chunkbusters/configs/Configuration.java +++ b/src/main/java/com/iridium/chunkbusters/configs/Configuration.java @@ -1,7 +1,7 @@ package com.iridium.chunkbusters.configs; -import com.cryptomorin.xseries.XMaterial; -import com.iridium.chunkbusters.Item; +import com.iridium.iridiumcore.Item; +import com.iridium.iridiumcore.dependencies.xseries.XMaterial; import java.util.Arrays; import java.util.Collections; @@ -9,21 +9,23 @@ public class Configuration { - public String prefix = "&e&lChunkBusters &8»"; + public String prefix = "&lIridiumChunkBusters &8»"; public String confirmationGUITitle = "&7Are you sure?"; - public String actionBarMessage = "&e&lY-Level: {ylevel}"; + public String actionBarMessage = "&e&lY-Level: %ylevel%"; public String dateTimeFormat = "EEEE, MMMM dd HH:mm:ss"; public boolean startYWherePlaced = true; + public boolean restoreChunkBusters = true; + public boolean onlyRestoreWhenBlockIsAir = true; public int deleteInterval = 3; - public Item chunkBuster = new Item(XMaterial.END_PORTAL_FRAME, 1, "&e&l>> Chunk Buster <<", Collections.singletonList("&7A {size}x{size} ChunkBuster")); + public Item chunkBuster = new Item(XMaterial.END_PORTAL_FRAME, 1, "&e&l>> Chunk Buster <<", Collections.singletonList("&7A %size%x%size% ChunkBuster")); public Item yes = new Item(XMaterial.GREEN_STAINED_GLASS_PANE, 1, "&a&lYes", Collections.emptyList()); public Item no = new Item(XMaterial.RED_STAINED_GLASS_PANE, 1, "&c&lNo", Collections.emptyList()); public Item nextPage = new Item(XMaterial.GREEN_STAINED_GLASS_PANE, 1, "&a&lNext", Collections.emptyList()); public Item previousPage = new Item(XMaterial.RED_STAINED_GLASS_PANE, 1, "&c&lPrevious", Collections.emptyList()); - public Item chunkBusterLog = new Item(XMaterial.PLAYER_HEAD, 0, 1, "&e&l{player}", "{player}", Arrays.asList("&7Size: {size}x{size}", "&7Time: {time}", "&7Chunk: {chunk}")); + public Item chunkBusterLog = new Item(XMaterial.PLAYER_HEAD, 0, 1, "&e&l%player%", "%player%", Arrays.asList("&7Size: %size%x%size%", "&7Time: %time%", "&7Chunk: %chunk%", "", "&e&l[!] &7Click to restore chunks")); public List blacklist = Arrays.asList(XMaterial.BEDROCK, XMaterial.SPAWNER); diff --git a/src/main/java/com/iridium/chunkbusters/configs/Messages.java b/src/main/java/com/iridium/chunkbusters/configs/Messages.java index 0fd826f..af9691a 100644 --- a/src/main/java/com/iridium/chunkbusters/configs/Messages.java +++ b/src/main/java/com/iridium/chunkbusters/configs/Messages.java @@ -5,12 +5,8 @@ public class Messages { public String noPermission = "%prefix% &7You don't have permission for that."; public String mustBeAPlayer = "%prefix% &7You must be a player to execute this command."; public String unknownCommand = "%prefix% &7Unknown Command, Try /chunkbusters help"; - public String helpMessage = "&e&l * &7 %command% : &e %description%"; - public String helpHeader = "&e&lIridiumChunkBusters: &eHelp"; - public String helpfooter = "&e<< &7Page %page% of %maxpage% &e>>"; - public String previousPage = "<<"; - public String nextPage = ">>"; - public String helpPageHoverMessage = "Click to go to page %page%"; + public String helpMessage = "/cb %command%&f: &7%description%"; + public String helpHeader = "&lIridiumChunkBusters: &eHelp"; public String mustBeANumber = "%prefix% &7That argument was not a number"; - public String unknownPlayer = "%prefix% &7Unknwon player."; + public String unknownPlayer = "%prefix% &7Unknown player."; } diff --git a/src/main/java/com/iridium/chunkbusters/configs/SQL.java b/src/main/java/com/iridium/chunkbusters/configs/SQL.java index 5a2a52a..1e6d318 100644 --- a/src/main/java/com/iridium/chunkbusters/configs/SQL.java +++ b/src/main/java/com/iridium/chunkbusters/configs/SQL.java @@ -8,7 +8,6 @@ public class SQL { public String username = ""; public String password = ""; public int port = 3306; - public int poolSize = 25; public enum Driver { @@ -19,7 +18,4 @@ public enum Driver { H2, SQLITE } - - public long connectionTimeout = 30000; - public long leakDetectionThreshold = 60000; } diff --git a/src/main/java/com/iridium/chunkbusters/database/BlockData.java b/src/main/java/com/iridium/chunkbusters/database/BlockData.java new file mode 100644 index 0000000..74959fc --- /dev/null +++ b/src/main/java/com/iridium/chunkbusters/database/BlockData.java @@ -0,0 +1,147 @@ +package com.iridium.chunkbusters.database; + +import com.iridium.chunkbusters.ChunkLayer; +import com.iridium.chunkbusters.IridiumChunkBusters; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.jetbrains.annotations.NotNull; + +import java.io.StringReader; +import java.util.Base64; + +@Getter +@NoArgsConstructor +@DatabaseTable(tableName = "blockdata") +public class BlockData { + @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) + @NotNull + private Integer id; + + @DatabaseField(columnName = "chunkbuster", canBeNull = false, foreign = true) + @NotNull + private ChunkBuster chunkBuster; + + @DatabaseField(columnName = "world", canBeNull = false) + @NotNull + private String world; + + @DatabaseField(columnName = "y", canBeNull = false) + @NotNull + private int y; + + @DatabaseField(columnName = "chunk_x", canBeNull = false) + @NotNull + private int x; + + @DatabaseField(columnName = "chunk_z", canBeNull = false) + @NotNull + private int z; + + @DatabaseField(columnName = "blocks", canBeNull = false) + @NotNull + private String blocks; + + public ChunkLayer getBlocks() { + return alternateDeserializer(blocks); + } + + public Chunk getChunk() { + return Bukkit.getWorld(world).getChunkAt(x, z); + } + + public BlockData(@NotNull ChunkBuster chunkBuster, @NotNull String world, int x, int y, int z, ChunkLayer blocks) { + this.chunkBuster = chunkBuster; + this.world = world; + this.x = x; + this.y = y; + this.z = z; + this.blocks = new String(Base64.getEncoder().encode(alternateSerialize(blocks).getBytes())); + } + private ChunkLayer alternateDeserializer(String base64) + { + String ymlString = new String(Base64.getDecoder().decode(base64)); + //System.out.println(ymlString); + ChunkLayer cl = new ChunkLayer(); + //ChunkLayer cl = IridiumChunkBusters.getInstance().getPersist().load(ChunkLayer.class, ); + String[] lines = ymlString.split("\n"); + boolean isReadingBlocks = false,isReadingData=false; + int index1=0,index2=0; + + for (String line : lines) { + if(line.contains("blocks:")) + { + isReadingBlocks=true; + index1=-1; + index2=0; + continue; + } + if(line.contains("data:")) + { + isReadingBlocks=false; + isReadingData=true; + index1=0; + continue; + } + if(isReadingBlocks) + { + if(line.contains("- - ")) + { + index1++; + index2=0; + } + //System.out.println("Line {"+line+"} Reading, i1="+index1+",i2="+index2); + String substringed = line.substring(4); + Material matched = Material.getMaterial(substringed); + //System.out.println("Line {"+substringed+"} matched as "+matched); + + cl.blocks[index1][index2++]= matched; + } + if(isReadingData) + { + if(line.startsWith(" ")) + cl.data[index1++] = Base64.getDecoder().decode(line.substring(2)); + } + } + + return cl; + } + private String alternateSerialize(ChunkLayer cl) + { + //return IridiumChunkBusters.getInstance().getPersist().toString(cl); + StringBuilder sb = new StringBuilder("---\n"); + sb.append("blocks:\n"); + + for(Material[] row:cl.blocks) + { + boolean first=true; + + for(Material mat:row) + { + sb.append(first?"- ":" "); + sb.append("- "); + if(mat!=null) + sb.append(mat.name()); + else + sb.append("null"); + sb.append("\n"); + first=false; + } + } + + sb.append("data:\n"); + for(byte[] row:cl.data) + { + sb.append("- !!binary |-\n"); + sb.append(" "); + sb.append(new String(Base64.getEncoder().encode(row))); + sb.append("\n"); + } + + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/iridium/chunkbusters/database/ChunkBuster.java b/src/main/java/com/iridium/chunkbusters/database/ChunkBuster.java index 472425d..5b4b7f1 100644 --- a/src/main/java/com/iridium/chunkbusters/database/ChunkBuster.java +++ b/src/main/java/com/iridium/chunkbusters/database/ChunkBuster.java @@ -1,13 +1,17 @@ package com.iridium.chunkbusters.database; -import com.cryptomorin.xseries.XMaterial; +import com.iridium.chunkbusters.ChunkLayer; import com.iridium.chunkbusters.IridiumChunkBusters; -import com.iridium.chunkbusters.utils.StringUtils; +import com.iridium.chunkbusters.gui.ConfirmationGUI; +import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.j256.ormlite.dao.ForeignCollection; import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.field.ForeignCollectionField; import com.j256.ormlite.table.DatabaseTable; import lombok.Getter; import lombok.NoArgsConstructor; import org.bukkit.*; +import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -24,8 +28,6 @@ @DatabaseTable(tableName = "chunkbusters") public class ChunkBuster { - private static final boolean NOTLEGACY = XMaterial.supports(12); - @DatabaseField(columnName = "id", generatedId = true, canBeNull = false) @NotNull private Integer id; @@ -51,6 +53,9 @@ public class ChunkBuster { @DatabaseField(columnName = "starting_level", canBeNull = false) private int startingLevel; + @ForeignCollectionField(eager = true) + private ForeignCollection blockDataList; + public LocalDateTime getTime() { return LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()); } @@ -58,7 +63,7 @@ public LocalDateTime getTime() { public Chunk getChunk() { String[] coords = chunk.split(","); World world = Bukkit.getWorld(coords[0]); - return world.getChunkAt(Integer.valueOf(coords[1]), Integer.valueOf(coords[2])); + return world.getChunkAt(Integer.parseInt(coords[1]), Integer.parseInt(coords[2])); } public ChunkBuster(@NotNull UUID uuid, @NotNull Chunk chunk, int radius, int y) { @@ -74,71 +79,97 @@ public void deleteChunks() { Chunk c = getChunk(); int cx = c.getX(); int cz = c.getZ(); - HashMap chunks = new HashMap<>(); + List chunks = new ArrayList<>(); for (int x = cx - (radius - 1); x <= cx + (radius - 1); x++) { for (int z = cz - (radius - 1); z <= cz + (radius - 1); z++) { Chunk chunk = c.getWorld().getChunkAt(x, z); - chunks.put(chunk, chunk.getChunkSnapshot()); + chunks.add(chunk); } } - deleteChunks(chunks); - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> IridiumChunkBusters.getInstance().getDatabaseManager().saveChunkBuster(this)); + int minheight = XMaterial.getVersion() >= 17 ? c.getWorld().getMinHeight() : 0; + Bukkit.getScheduler().runTask(IridiumChunkBusters.getInstance(), () -> deleteChunks(chunks, minheight)); IridiumChunkBusters.getInstance().getActiveChunkBusters().add(this); } - private void deleteChunks(final HashMap chunks) { + private void deleteChunks(final List chunks, int minHeight) { Player player = Bukkit.getPlayer(uuid); - if (y == 0) { - for (Chunk c : chunks.keySet()) { - IridiumChunkBusters.getInstance().getNms().sendChunk(c, c.getWorld().getPlayers()); + if (y == minHeight) { + for (Chunk c : chunks) { + IridiumChunkBusters.getInstance().getNms().sendChunk(c.getWorld().getPlayers(), c); } Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> IridiumChunkBusters.getInstance().getDatabaseManager().saveChunkBuster(this)); IridiumChunkBusters.getInstance().getActiveChunkBusters().remove(this); return; } if (player != null) { - IridiumChunkBusters.getInstance().getNms().sendActionBar(player, StringUtils.color(IridiumChunkBusters.getInstance().getConfiguration().actionBarMessage.replace("{ylevel}", String.valueOf(y)))); +// IridiumChunkBusters.getInstance().getNms().sendActionBar(player, StringUtils.color(IridiumChunkBusters.getInstance().getConfiguration().actionBarMessage.replace("{ylevel}", String.valueOf(y)))); } - - for (Chunk c : chunks.keySet()) { - List tileEntities = Arrays.stream(c.getTileEntities()).map(BlockState::getLocation).collect(Collectors.toList()); - ChunkSnapshot chunkSnapshot = chunks.get(c); + HashSet chunkBusters = IridiumChunkBusters.getInstance().getConfirmationGUIS().stream().map(ConfirmationGUI::getLocation).collect(Collectors.toCollection(HashSet::new)); + for (Chunk c : chunks) { + ChunkLayer chunkLayer = new ChunkLayer(); int cx = c.getX() << 4; int cz = c.getZ() << 4; - List changedBlocks = new ArrayList<>(); - World world = c.getWorld(); for (int x = cx; x < cx + 16; x++) { for (int z = cz; z < cz + 16; z++) { Location location = new Location(world, x, y, z); - Material material; - if (NOTLEGACY) { - material = chunkSnapshot.getBlockType(x - cx, y, z - cz); - } else { - material = location.getBlock().getType(); - } - changedBlocks.add(location); - if (!IridiumChunkBusters.getInstance().getConfiguration().blacklist.contains(XMaterial.matchXMaterial(material))) { - if (IridiumChunkBusters.getInstance().getSupport().canDelete(player, location)) { - if (tileEntities.contains(location)) { - //NMS will throw errors when trying to delete a Tile Entity - location.getBlock().setType(Material.AIR, false); - } else { - IridiumChunkBusters.getInstance().getNms().setBlockFast(c.getWorld(), x, y, z, 0, (byte) 0, false); - } - } + Block block = location.getBlock(); + BlockState blockState = block.getState(); + if (IridiumChunkBusters.getInstance().getConfiguration().blacklist.contains(XMaterial.matchXMaterial(blockState.getType())) || !IridiumChunkBusters.getInstance().getSupport().canDelete(player, location) || blockState.getType().equals(Material.AIR) || chunkBusters.contains(location)) { + continue; } + chunkLayer.blocks[x - cx][z - cz] = block.getType(); + chunkLayer.data[x - cx][z - cz] = blockState.getRawData(); + IridiumChunkBusters.getInstance().getNms().deleteBlockFast(location); } } - IridiumChunkBusters.getInstance().getNms().sendChunk(c, changedBlocks, c.getWorld().getPlayers()); + IridiumChunkBusters.getInstance().getNms().sendChunk(c.getWorld().getPlayers(), c); + IridiumChunkBusters.getInstance().getDatabaseManager().saveBlockData(new BlockData(this, world.getName(), c.getX(), y, c.getZ(), chunkLayer)); } y--; if (IridiumChunkBusters.getInstance().getConfiguration().deleteInterval < 1) { - deleteChunks(chunks); + deleteChunks(chunks, minHeight); + } else { + Bukkit.getScheduler().runTaskLater(IridiumChunkBusters.getInstance(), () -> deleteChunks(chunks, minHeight), IridiumChunkBusters.getInstance().getConfiguration().deleteInterval); + } + } + + public void undo() { + Player player = Bukkit.getPlayer(uuid); + if (y > startingLevel) { + Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> IridiumChunkBusters.getInstance().getDatabaseManager().deleteChunkBuster(this)); + return; + } + if (player != null) { +// IridiumChunkBusters.getInstance().getNms().sendActionBar(player, StringUtils.color(IridiumChunkBusters.getInstance().getConfiguration().actionBarMessage.replace("{ylevel}", String.valueOf(y)))); + } + blockDataList.stream().filter(bd -> bd.getY() == y).forEach(blockData -> { + Chunk chunk = blockData.getChunk(); + ChunkLayer chunkLayer = blockData.getBlocks(); + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + if (chunkLayer.blocks[x][z] == null) continue; + Block block=chunk.getBlock(x, y, z); + + if (IridiumChunkBusters.getInstance().getConfiguration().onlyRestoreWhenBlockIsAir && !block.getType().equals(Material.AIR)) + continue; + + block.setType(chunkLayer.blocks[x][z],false); + BlockState blockState = block.getState(); + blockState.setType(chunkLayer.blocks[x][z]); + blockState.getData().setData(chunkLayer.data[x][z]); + //blockState.setRawData(chunkLayer.data[x][z]); + blockState.update(true, false); + } + } + }); + y++; + if (IridiumChunkBusters.getInstance().getConfiguration().deleteInterval < 1) { + undo(); } else { - Bukkit.getScheduler().runTaskLater(IridiumChunkBusters.getInstance(), () -> deleteChunks(chunks), IridiumChunkBusters.getInstance().getConfiguration().deleteInterval); + Bukkit.getScheduler().runTaskLater(IridiumChunkBusters.getInstance(), this::undo, IridiumChunkBusters.getInstance().getConfiguration().deleteInterval); } } diff --git a/src/main/java/com/iridium/chunkbusters/database/DatabaseManager.java b/src/main/java/com/iridium/chunkbusters/database/DatabaseManager.java index 43606d6..52ede83 100644 --- a/src/main/java/com/iridium/chunkbusters/database/DatabaseManager.java +++ b/src/main/java/com/iridium/chunkbusters/database/DatabaseManager.java @@ -6,6 +6,8 @@ import com.j256.ormlite.dao.DaoManager; import com.j256.ormlite.jdbc.JdbcConnectionSource; import com.j256.ormlite.jdbc.db.DatabaseTypeUtils; +import com.j256.ormlite.logger.LoggerFactory; +import com.j256.ormlite.logger.NullLogBackend; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import org.jetbrains.annotations.NotNull; @@ -22,12 +24,16 @@ public class DatabaseManager { private static final SQL SQL_CONFIG = IridiumChunkBusters.getInstance().getSql(); - private final Dao chunkBusters; + private final Dao chunkBustersDao; + private final Dao blockDataDao; + + private final ConnectionSource connectionSource; public DatabaseManager() throws SQLException { + LoggerFactory.setLogBackendFactory(new NullLogBackend.NullLogBackendFactory()); String databaseURL = getDatabaseURL(); - ConnectionSource connectionSource = new JdbcConnectionSource( + connectionSource = new JdbcConnectionSource( databaseURL, SQL_CONFIG.username, SQL_CONFIG.password, @@ -35,8 +41,12 @@ public DatabaseManager() throws SQLException { ); TableUtils.createTableIfNotExists(connectionSource, ChunkBuster.class); + TableUtils.createTableIfNotExists(connectionSource, BlockData.class); + + chunkBustersDao = DaoManager.createDao(connectionSource, ChunkBuster.class); + blockDataDao = DaoManager.createDao(connectionSource, BlockData.class); - chunkBusters = DaoManager.createDao(connectionSource, ChunkBuster.class); + blockDataDao.setAutoCommit(connectionSource.getReadWriteConnection(null), false); } private @NotNull String getDatabaseURL() { @@ -59,7 +69,7 @@ public DatabaseManager() throws SQLException { public CompletableFuture> getChunkBusters() { return CompletableFuture.supplyAsync(() -> { try { - return chunkBusters.queryBuilder().query().stream().sorted(Comparator.comparing(ChunkBuster::getTime).reversed()).collect(Collectors.toList()); + return chunkBustersDao.queryBuilder().query().stream().sorted(Comparator.comparing(ChunkBuster::getTime).reversed()).collect(Collectors.toList()); } catch (SQLException exception) { exception.printStackTrace(); } @@ -69,7 +79,18 @@ public CompletableFuture> getChunkBusters() { public void saveChunkBuster(@NotNull ChunkBuster chunkBuster) { try { - chunkBusters.createOrUpdate(chunkBuster); + chunkBustersDao.createOrUpdate(chunkBuster); + blockDataDao.commit(connectionSource.getReadWriteConnection(null)); + } catch (SQLException exception) { + exception.printStackTrace(); + } + } + + public void saveBlockData(@NotNull BlockData blockData) { + if(!IridiumChunkBusters.getInstance().getConfiguration().restoreChunkBusters)return; + try { + blockDataDao.createOrUpdate(blockData); + blockDataDao.commit(connectionSource.getReadWriteConnection(null)); } catch (SQLException exception) { exception.printStackTrace(); } @@ -77,7 +98,11 @@ public void saveChunkBuster(@NotNull ChunkBuster chunkBuster) { public void deleteChunkBuster(@NotNull ChunkBuster chunkBuster) { try { - chunkBusters.delete(chunkBuster); + chunkBustersDao.delete(chunkBuster); + for (BlockData blockData : chunkBuster.getBlockDataList()) { + blockDataDao.delete(blockData); + } + blockDataDao.commit(connectionSource.getReadWriteConnection(null)); } catch (SQLException exception) { exception.printStackTrace(); } diff --git a/src/main/java/com/iridium/chunkbusters/gui/ConfirmationGUI.java b/src/main/java/com/iridium/chunkbusters/gui/ConfirmationGUI.java index 50d64c5..65eded1 100644 --- a/src/main/java/com/iridium/chunkbusters/gui/ConfirmationGUI.java +++ b/src/main/java/com/iridium/chunkbusters/gui/ConfirmationGUI.java @@ -1,29 +1,33 @@ package com.iridium.chunkbusters.gui; -import com.cryptomorin.xseries.XMaterial; import com.iridium.chunkbusters.IridiumChunkBusters; -import com.iridium.chunkbusters.utils.ItemStackUtils; -import com.iridium.chunkbusters.utils.StringUtils; +import com.iridium.chunkbusters.database.ChunkBuster; +import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.StringUtils; import lombok.Getter; import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; import org.jetbrains.annotations.NotNull; +import java.util.Optional; + @Getter -public class ConfirmationGUI implements InventoryHolder { +public class ConfirmationGUI implements GUI { private final int size; private final Location location; @Setter - private boolean activated; + private boolean clickAction = false; public ConfirmationGUI(int size, Location location) { this.size = size; this.location = location; - this.activated = false; + IridiumChunkBusters.getInstance().getConfirmationGUIS().add(this); } @NotNull @@ -37,4 +41,29 @@ public Inventory getInventory() { inventory.setItem(15, ItemStackUtils.makeItem(IridiumChunkBusters.getInstance().getConfiguration().yes)); return inventory; } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + if (event.getSlot() == 15) { + ChunkBuster chunkBuster = new ChunkBuster(event.getWhoClicked().getUniqueId(), location.getChunk(), size, IridiumChunkBusters.getInstance().getConfiguration().startYWherePlaced ? location.getBlockY() : location.getWorld().getMaxHeight()); + location.getBlock().setType(Material.AIR, false); + + //We need to save the chunkBuster to the db first so the id gets generated so its not null + Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> { + IridiumChunkBusters.getInstance().getDatabaseManager().saveChunkBuster(chunkBuster); + IridiumChunkBusters.getInstance().getDatabaseManager().getChunkBusters().thenAccept(chunkBusters -> { + Optional chunkBusterOptional = chunkBusters.stream().filter(cb -> cb.getTime().equals(chunkBuster.getTime()) && cb.getChunk().equals(chunkBuster.getChunk())).findFirst(); + chunkBusterOptional.ifPresent(buster -> Bukkit.getScheduler().runTask(IridiumChunkBusters.getInstance(), buster::deleteChunks)); + }); + }); + + this.clickAction = true; + event.getWhoClicked().closeInventory(); + } else if (event.getSlot() == 11) { + clickAction = true; + location.getBlock().setType(Material.AIR, false); + event.getWhoClicked().getInventory().addItem(IridiumChunkBusters.getInstance().getChunkBuster(size)); + event.getWhoClicked().closeInventory(); + } + } } diff --git a/src/main/java/com/iridium/chunkbusters/gui/GUI.java b/src/main/java/com/iridium/chunkbusters/gui/GUI.java new file mode 100644 index 0000000..2b47006 --- /dev/null +++ b/src/main/java/com/iridium/chunkbusters/gui/GUI.java @@ -0,0 +1,8 @@ +package com.iridium.chunkbusters.gui; + +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.InventoryHolder; + +public interface GUI extends InventoryHolder { + void onInventoryClick(InventoryClickEvent event); +} diff --git a/src/main/java/com/iridium/chunkbusters/gui/LogsGUI.java b/src/main/java/com/iridium/chunkbusters/gui/LogsGUI.java index 63114b9..061bae8 100644 --- a/src/main/java/com/iridium/chunkbusters/gui/LogsGUI.java +++ b/src/main/java/com/iridium/chunkbusters/gui/LogsGUI.java @@ -1,31 +1,34 @@ package com.iridium.chunkbusters.gui; -import com.cryptomorin.xseries.XMaterial; import com.iridium.chunkbusters.IridiumChunkBusters; import com.iridium.chunkbusters.database.ChunkBuster; -import com.iridium.chunkbusters.utils.ItemStackUtils; -import com.iridium.chunkbusters.utils.Placeholder; +import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.iridium.iridiumcore.utils.ItemStackUtils; +import com.iridium.iridiumcore.utils.Placeholder; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; import org.jetbrains.annotations.NotNull; import java.time.format.DateTimeFormatter; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @Getter -public class LogsGUI implements InventoryHolder { +public class LogsGUI implements GUI { private final UUID uuid; - private int page; + private final int page; private boolean next; - private boolean previous; + private final boolean previous; + + private final HashMap chunkBusters = new HashMap<>(); public LogsGUI(UUID uuid, int page) { this.uuid = uuid; @@ -42,16 +45,17 @@ public Inventory getInventory() { inventory.setItem(i, XMaterial.GRAY_STAINED_GLASS_PANE.parseItem()); } IridiumChunkBusters.getInstance().getDatabaseManager().getChunkBusters().thenAccept(list -> { - List chunkBusters = list.stream().filter(chunkBuster -> IridiumChunkBusters.getInstance().getSupport().isRelevant(this.uuid, chunkBuster)).collect(Collectors.toList()); + List chunkBustersList = list.stream().filter(chunkBuster -> IridiumChunkBusters.getInstance().getSupport().isRelevant(this.uuid, chunkBuster)).collect(Collectors.toList()); int i = 0; int slot = 0; - for (ChunkBuster chunkBuster : chunkBusters) { + for (ChunkBuster chunkBuster : chunkBustersList) { if (i >= 45 * (page - 1) && i < 45 * page) { + chunkBusters.put(slot, chunkBuster); OfflinePlayer player = Bukkit.getOfflinePlayer(chunkBuster.getUuid()); String chunk = chunkBuster.getChunk().getWorld().getName() + " " + chunkBuster.getChunk().getX() + "," + chunkBuster.getChunk().getZ(); inventory.setItem(slot, ItemStackUtils.makeItem(IridiumChunkBusters.getInstance().getConfiguration().chunkBusterLog, Arrays.asList( new Placeholder("player", player.getName()), - new Placeholder("size", String.valueOf(chunkBuster.getRadius()*2-1)), + new Placeholder("size", String.valueOf(chunkBuster.getRadius() * 2 - 1)), new Placeholder("time", chunkBuster.getTime().format(DateTimeFormatter.ofPattern(IridiumChunkBusters.getInstance().getConfiguration().dateTimeFormat))), new Placeholder("chunk", chunk) ))); @@ -61,8 +65,25 @@ public Inventory getInventory() { } inventory.setItem(48, ItemStackUtils.makeItem(IridiumChunkBusters.getInstance().getConfiguration().previousPage)); inventory.setItem(51, ItemStackUtils.makeItem(IridiumChunkBusters.getInstance().getConfiguration().nextPage)); - next = 45 * page < chunkBusters.size(); + next = 45 * page < chunkBustersList.size(); }); return inventory; } + + @Override + public void onInventoryClick(InventoryClickEvent event) { + if (chunkBusters.containsKey(event.getSlot())) { + ChunkBuster chunkBuster = chunkBusters.get(event.getSlot()); + int minHeight = XMaterial.getVersion() >= 17 ? chunkBuster.getChunk().getWorld().getMinHeight() : 0; + if (chunkBuster.getY() == minHeight && IridiumChunkBusters.getInstance().getConfiguration().restoreChunkBusters) { + chunkBuster.undo(); + Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> IridiumChunkBusters.getInstance().getDatabaseManager().deleteChunkBuster(chunkBuster)); + event.getWhoClicked().closeInventory(); + } + } else if (event.getSlot() == 51 && isNext()) { + event.getWhoClicked().openInventory(new LogsGUI(getUuid(), getPage() + 1).getInventory()); + } else if (event.getSlot() == 48 && isPrevious()) { + event.getWhoClicked().openInventory(new LogsGUI(getUuid(), getPage() - 1).getInventory()); + } + } } \ No newline at end of file diff --git a/src/main/java/com/iridium/chunkbusters/listeners/InventoryClickListener.java b/src/main/java/com/iridium/chunkbusters/listeners/InventoryClickListener.java index c6792d8..dad2c11 100644 --- a/src/main/java/com/iridium/chunkbusters/listeners/InventoryClickListener.java +++ b/src/main/java/com/iridium/chunkbusters/listeners/InventoryClickListener.java @@ -1,9 +1,8 @@ package com.iridium.chunkbusters.listeners; import com.iridium.chunkbusters.IridiumChunkBusters; -import com.iridium.chunkbusters.database.ChunkBuster; import com.iridium.chunkbusters.gui.ConfirmationGUI; -import com.iridium.chunkbusters.gui.LogsGUI; +import com.iridium.chunkbusters.gui.GUI; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,31 +14,9 @@ public class InventoryClickListener implements Listener { @EventHandler public void onInventoryClick(InventoryClickEvent event) { - if (event.getClickedInventory() == null) return; - InventoryHolder inventoryHolder = event.getClickedInventory().getHolder(); - if (inventoryHolder == null) return; - if (inventoryHolder instanceof ConfirmationGUI) { - ConfirmationGUI confirmationGUI = (ConfirmationGUI) inventoryHolder; + if (event.getClickedInventory() != null && event.getInventory().getHolder() != null && event.getInventory().getHolder() instanceof GUI) { event.setCancelled(true); - if (event.getSlot() == 15) { - ChunkBuster chunkBuster = new ChunkBuster(event.getWhoClicked().getUniqueId(), confirmationGUI.getLocation().getChunk(), confirmationGUI.getSize(), IridiumChunkBusters.getInstance().getConfiguration().startYWherePlaced ? confirmationGUI.getLocation().getBlockY() : confirmationGUI.getLocation().getWorld().getMaxHeight()); - confirmationGUI.getLocation().getBlock().setType(Material.AIR, false); - chunkBuster.deleteChunks(); - confirmationGUI.setActivated(true); - event.getWhoClicked().closeInventory(); - } else if (event.getSlot() == 11) { - confirmationGUI.getLocation().getBlock().setType(Material.AIR, false); - event.getWhoClicked().getInventory().addItem(IridiumChunkBusters.getInstance().getChunkBuster(confirmationGUI.getSize())); - event.getWhoClicked().closeInventory(); - } - } else if (inventoryHolder instanceof LogsGUI) { - LogsGUI logsGUI = (LogsGUI) inventoryHolder; - event.setCancelled(true); - if (event.getSlot() == 51 && logsGUI.isNext()) { - event.getWhoClicked().openInventory(new LogsGUI(logsGUI.getUuid(), logsGUI.getPage() + 1).getInventory()); - } else if (event.getSlot() == 48 && logsGUI.isPrevious()) { - event.getWhoClicked().openInventory(new LogsGUI(logsGUI.getUuid(), logsGUI.getPage() - 1).getInventory()); - } + ((GUI) event.getInventory().getHolder()).onInventoryClick(event); } } @@ -48,10 +25,11 @@ public void onInventoryClose(InventoryCloseEvent event) { InventoryHolder inventoryHolder = event.getInventory().getHolder(); if (inventoryHolder instanceof ConfirmationGUI) { ConfirmationGUI confirmationGUI = (ConfirmationGUI) inventoryHolder; - if (confirmationGUI.isActivated()) return; + IridiumChunkBusters.getInstance().getConfirmationGUIS().remove(confirmationGUI); + if (confirmationGUI.isClickAction()) return; + confirmationGUI.setClickAction(true); confirmationGUI.getLocation().getBlock().setType(Material.AIR, false); event.getPlayer().getInventory().addItem(IridiumChunkBusters.getInstance().getChunkBuster(confirmationGUI.getSize())); } } - } diff --git a/src/main/java/com/iridium/chunkbusters/listeners/PlayerInteractListener.java b/src/main/java/com/iridium/chunkbusters/listeners/PlayerInteractListener.java new file mode 100644 index 0000000..95d02ea --- /dev/null +++ b/src/main/java/com/iridium/chunkbusters/listeners/PlayerInteractListener.java @@ -0,0 +1,20 @@ +package com.iridium.chunkbusters.listeners; + +import com.iridium.chunkbusters.IridiumChunkBusters; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; + +public class PlayerInteractListener implements Listener { + + @EventHandler + public void onInteract(PlayerInteractEvent event) { + if (event.getClickedBlock() != null) { + boolean isChunkBuster = IridiumChunkBusters.getInstance().getConfirmationGUIS().stream().anyMatch(confirmationGUI -> confirmationGUI.getLocation().equals(event.getClickedBlock().getLocation())); + if (isChunkBuster) { + event.setCancelled(true); + } + } + } + +} diff --git a/src/main/java/com/iridium/chunkbusters/nms/NMS.java b/src/main/java/com/iridium/chunkbusters/nms/NMS.java deleted file mode 100644 index 652be76..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/NMS.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import java.util.List; - -public interface NMS { - void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics); - - void sendChunk(Chunk chunk, List blocks, List players); - - void sendChunk(Chunk chunk, List players); - - void sendActionBar(Player player, String message); -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_10_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_10_R1.java deleted file mode 100644 index e7459dd..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_10_R1.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_10_R1.*; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_10_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_10_R1 implements NMS { - - @Override - public void setBlockFast(org.bukkit.World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_10_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_10_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_10_R1.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_10_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_10_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_10_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_10_R1.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_10_R1.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(iChatBaseComponent, (byte) 2); - ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutChat); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_11_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_11_R1.java deleted file mode 100644 index 2fcaf78..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_11_R1.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_11_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_11_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_11_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_11_R1 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_11_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_11_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_11_R1.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_11_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_11_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_11_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_11_R1.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - IChatBaseComponent iChatBaseComponent = IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_12_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_12_R1.java deleted file mode 100644 index 5f2a07f..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_12_R1.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_12_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_12_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_12_R1 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_12_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_12_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_12_R1.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_12_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_12_R1.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - IChatBaseComponent iChatBaseComponent = IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_13_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_13_R1.java deleted file mode 100644 index 1fd56ab..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_13_R1.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_13_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_13_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_13_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_13_R1 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_13_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_13_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_13_R1.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_13_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_13_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_13_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_13_R1.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - IChatBaseComponent iChatBaseComponent = IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_13_R2.java b/src/main/java/com/iridium/chunkbusters/nms/v1_13_R2.java deleted file mode 100644 index 4e75b1e..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_13_R2.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_13_R2.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_13_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_13_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_13_R2 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_13_R2.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_13_R2.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_13_R2.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_13_R2.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_13_R2.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_13_R2.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_13_R2.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - IChatBaseComponent iChatBaseComponent = IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_14_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_14_R1.java deleted file mode 100644 index d4cc0e0..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_14_R1.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_14_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_14_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_14_R1 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_14_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_14_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_14_R1.Block.getByCombinedId(blockId + (data << 12)); - - net.minecraft.server.v1_14_R1.ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - nmsChunk.getWorld().getChunkProvider().getLightEngine().a(new BlockPosition(x, y, z)); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_14_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_14_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_14_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_14_R1.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_14_R1.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_14_R1.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - net.minecraft.server.v1_14_R1.PacketPlayOutTitle packetPlayOutTitle = new net.minecraft.server.v1_14_R1.PacketPlayOutTitle(net.minecraft.server.v1_14_R1.PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_15_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_15_R1.java deleted file mode 100644 index 41d2543..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_15_R1.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_15_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_15_R1 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_15_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_15_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_15_R1.Block.getByCombinedId(blockId + (data << 12)); - - net.minecraft.server.v1_15_R1.ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - nmsChunk.getWorld().getChunkProvider().getLightEngine().a(new BlockPosition(x, y, z)); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_15_R1.Chunk nmsChunk = ((org.bukkit.craftbukkit.v1_15_R1.CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_15_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_15_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_15_R1.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_15_R1.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_15_R1.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - net.minecraft.server.v1_15_R1.PacketPlayOutTitle packetPlayOutTitle = new net.minecraft.server.v1_15_R1.PacketPlayOutTitle(net.minecraft.server.v1_15_R1.PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_16_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_16_R1.java deleted file mode 100644 index 40b51c5..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_16_R1.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_16_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_16_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_16_R1 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_16_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_16_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_16_R1.Block.getByCombinedId(blockId + (data << 12)); - - net.minecraft.server.v1_16_R1.ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - nmsChunk.getWorld().getChunkProvider().getLightEngine().a(new BlockPosition(x, y, z)); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_16_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_16_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_16_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_16_R1.CraftChunk) chunk).getHandle(), 65535, true); - ((org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_16_R1.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_16_R1.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - net.minecraft.server.v1_16_R1.PacketPlayOutTitle packetPlayOutTitle = new net.minecraft.server.v1_16_R1.PacketPlayOutTitle(net.minecraft.server.v1_16_R1.PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_16_R2.java b/src/main/java/com/iridium/chunkbusters/nms/v1_16_R2.java deleted file mode 100644 index 109a249..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_16_R2.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_16_R2.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.shorts.ShortArraySet; -import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.shorts.ShortSet; -import org.bukkit.craftbukkit.v1_16_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.*; - -public class v1_16_R2 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_16_R2.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_16_R2.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_16_R2.Block.getByCombinedId(blockId + (data << 12)); - - net.minecraft.server.v1_16_R2.ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - nmsChunk.getWorld().getChunkProvider().getLightEngine().a(new BlockPosition(x, y, z)); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_16_R2.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - Map> changedBlocks = new HashMap<>(); - - for (Location location : blocks) { - Set shortSet = changedBlocks.computeIfAbsent(location.getBlockY() >> 4, i -> new ShortArraySet()); - shortSet.add((short) ((location.getBlockX() & 15) << 8 | (location.getBlockZ() & 15) << 4 | (location.getBlockY() & 15))); - } - - Set packetsToSend = new HashSet<>(); - - for (Map.Entry> entry : changedBlocks.entrySet()) { - PacketPlayOutMultiBlockChange packetPlayOutMultiBlockChange = new PacketPlayOutMultiBlockChange(SectionPosition.a(nmsChunk.getPos(), entry.getKey()), (ShortSet) entry.getValue(), nmsChunk.getSections() - [entry.getKey()], true); - packetsToSend.add(packetPlayOutMultiBlockChange); - } - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - packetsToSend.forEach(packet -> entityPlayer.playerConnection.sendPacket(packet)); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> players.forEach(player -> { - net.minecraft.server.v1_16_R2.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_16_R2.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_16_R2.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_16_R2.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_16_R2.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - net.minecraft.server.v1_16_R2.PacketPlayOutTitle packetPlayOutTitle = new net.minecraft.server.v1_16_R2.PacketPlayOutTitle(net.minecraft.server.v1_16_R2.PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_16_R3.java b/src/main/java/com/iridium/chunkbusters/nms/v1_16_R3.java deleted file mode 100644 index 3341867..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_16_R3.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_16_R3.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.shorts.ShortArraySet; -import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.shorts.ShortSet; -import org.bukkit.craftbukkit.v1_16_R3.CraftChunk; -import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.*; - -public class v1_16_R3 implements NMS { - - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_16_R3.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_16_R3.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_16_R3.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - nmsChunk.getWorld().getChunkProvider().getLightEngine().a(new BlockPosition(x, y, z)); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_16_R3.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - Map> changedBlocks = new HashMap<>(); - - for (Location location : blocks) { - Set shortSet = changedBlocks.computeIfAbsent(location.getBlockY() >> 4, i -> new ShortArraySet()); - shortSet.add((short) ((location.getBlockX() & 15) << 8 | (location.getBlockZ() & 15) << 4 | (location.getBlockY() & 15))); - } - - Set packetsToSend = new HashSet<>(); - - for (Map.Entry> entry : changedBlocks.entrySet()) { - PacketPlayOutMultiBlockChange packetPlayOutMultiBlockChange = new PacketPlayOutMultiBlockChange(SectionPosition.a(nmsChunk.getPos(), entry.getKey()), (ShortSet) entry.getValue(), nmsChunk.getSections() - [entry.getKey()], true); - packetsToSend.add(packetPlayOutMultiBlockChange); - } - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - packetsToSend.forEach(packet -> entityPlayer.playerConnection.sendPacket(packet)); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> players.forEach(player -> { - net.minecraft.server.v1_16_R3.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_16_R3.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_16_R3.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - IChatBaseComponent iChatBaseComponent = IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, iChatBaseComponent, 0, 20, 0); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutTitle); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_8_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_8_R1.java deleted file mode 100644 index 52aea87..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_8_R1.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_8_R1.ChunkSection; -import net.minecraft.server.v1_8_R1.EntityPlayer; -import net.minecraft.server.v1_8_R1.IBlockData; -import net.minecraft.server.v1_8_R1.PacketPlayOutMultiBlockChange; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_8_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_8_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_8_R1 implements NMS { - @Override - public void setBlockFast(org.bukkit.World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_8_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_8_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_8_R1.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_8_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_8_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_8_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_8_R1.CraftChunk) chunk).getHandle(), true, 65535); - ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_8_R2.java b/src/main/java/com/iridium/chunkbusters/nms/v1_8_R2.java deleted file mode 100644 index ac9b0a8..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_8_R2.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_8_R2.*; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_8_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_8_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_8_R2 implements NMS { - @Override - public void setBlockFast(org.bukkit.World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_8_R2.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_8_R2.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_8_R2.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_8_R2.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_8_R2.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_8_R2.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_8_R2.CraftChunk) chunk).getHandle(), true, 65535); - ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_8_R2.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(iChatBaseComponent, (byte) 2); - ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutChat); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_8_R3.java b/src/main/java/com/iridium/chunkbusters/nms/v1_8_R3.java deleted file mode 100644 index c29b8f4..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_8_R3.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_8_R3.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_8_R3.CraftChunk; -import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_8_R3 implements NMS { - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_8_R3.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_8_R3.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_8_R3.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_8_R3.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_8_R3.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_8_R3.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_8_R3.CraftChunk) chunk).getHandle(), true, 65535); - ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_8_R3.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(iChatBaseComponent, (byte) 2); - ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutChat); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_9_R1.java b/src/main/java/com/iridium/chunkbusters/nms/v1_9_R1.java deleted file mode 100644 index b9154df..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_9_R1.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_9_R1.*; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.*; -import org.bukkit.craftbukkit.v1_9_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_9_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_9_R1 implements NMS { - @Override - public void setBlockFast(World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_9_R1.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_9_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_9_R1.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_9_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_9_R1.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_9_R1.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_9_R1.CraftChunk) chunk).getHandle(), true, 65535); - ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_9_R1.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(iChatBaseComponent, (byte) 2); - ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutChat); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/nms/v1_9_R2.java b/src/main/java/com/iridium/chunkbusters/nms/v1_9_R2.java deleted file mode 100644 index abeb1ab..0000000 --- a/src/main/java/com/iridium/chunkbusters/nms/v1_9_R2.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.iridium.chunkbusters.nms; - -import com.iridium.chunkbusters.IridiumChunkBusters; -import net.minecraft.server.v1_9_R2.*; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_9_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_9_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.List; - -public class v1_9_R2 implements NMS { - - @Override - public void setBlockFast(org.bukkit.World world, int x, int y, int z, int blockId, byte data, boolean applyPhysics) { - net.minecraft.server.v1_9_R2.World nmsWorld = ((CraftWorld) world).getHandle(); - net.minecraft.server.v1_9_R2.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - IBlockData ibd = net.minecraft.server.v1_9_R2.Block.getByCombinedId(blockId + (data << 12)); - - ChunkSection cs = nmsChunk.getSections()[y >> 4]; - if (cs == null) { - cs = new ChunkSection(y >> 4 << 4, true); - nmsChunk.getSections()[y >> 4] = cs; - } - cs.setType(x & 15, y & 15, z & 15, ibd); - } - - @Override - public void sendChunk(Chunk chunk, List blocks, List players) { - net.minecraft.server.v1_9_R2.Chunk nmsChunk = ((CraftChunk) chunk).getHandle(); - int blocksAmount = blocks.size(); - short[] values = new short[blocksAmount]; - - Location firstLocation = null; - - int counter = 0; - for (Location location : blocks) { - if (firstLocation == null) - firstLocation = location; - - values[counter++] = (short) ((location.getBlockX() & 15) << 12 | (location.getBlockZ() & 15) << 8 | location.getBlockY()); - } - - PacketPlayOutMultiBlockChange multiBlockChange = new PacketPlayOutMultiBlockChange(blocksAmount, values, nmsChunk); - - players.forEach(player -> { - EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - entityPlayer.playerConnection.sendPacket(multiBlockChange); - }); - } - - @Override - public void sendChunk(Chunk chunk, List players) { - Bukkit.getScheduler().runTaskAsynchronously(IridiumChunkBusters.getInstance(), () -> chunk.getWorld().getPlayers().forEach(player -> { - net.minecraft.server.v1_9_R2.PacketPlayOutMapChunk packetPlayOutMapChunk = new net.minecraft.server.v1_9_R2.PacketPlayOutMapChunk(((org.bukkit.craftbukkit.v1_9_R2.CraftChunk) chunk).getHandle(), 65535); - ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMapChunk); - })); - } - - @Override - public void sendActionBar(Player player, String message) { - net.minecraft.server.v1_9_R2.IChatBaseComponent iChatBaseComponent = net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes('&', "{\"text\":\"" + message + "\"}")); - PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(iChatBaseComponent, (byte) 2); - ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutChat); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/support/Factions.java b/src/main/java/com/iridium/chunkbusters/support/Factions.java index ffd3dac..3e7489e 100644 --- a/src/main/java/com/iridium/chunkbusters/support/Factions.java +++ b/src/main/java/com/iridium/chunkbusters/support/Factions.java @@ -1,6 +1,5 @@ package com.iridium.chunkbusters.support; - import com.iridium.chunkbusters.database.ChunkBuster; import com.massivecraft.factions.entity.BoardColl; import com.massivecraft.factions.entity.Faction; @@ -18,7 +17,7 @@ public class Factions implements Support { public boolean canDelete(Player player, Location location) { Faction P = MPlayer.get(player).getFaction(); Faction B = BoardColl.get().getFactionAt(PS.valueOf(location)); - return (ChatColor.stripColor(B.getName()).equalsIgnoreCase("Wilderness")) || (P == B); + return (ChatColor.stripColor(B.getName()).equalsIgnoreCase("Wilderness")) || (P.equals(B)); } @Override diff --git a/src/main/java/com/iridium/chunkbusters/support/FactionsUUID.java b/src/main/java/com/iridium/chunkbusters/support/FactionsUUID.java index f808781..caff3cd 100644 --- a/src/main/java/com/iridium/chunkbusters/support/FactionsUUID.java +++ b/src/main/java/com/iridium/chunkbusters/support/FactionsUUID.java @@ -16,7 +16,7 @@ public boolean canDelete(Player player, Location location) { Faction faction = FPlayers.getInstance().getByPlayer(player).getFaction(); FLocation loc = new FLocation(location); Faction B = Board.getInstance().getFactionAt(loc); - return (ChatColor.stripColor(B.getTag()).equalsIgnoreCase("Wilderness")) || (faction == B); + return (ChatColor.stripColor(B.getTag()).equalsIgnoreCase("Wilderness")) || (faction.equals(B)); } @Override diff --git a/src/main/java/com/iridium/chunkbusters/support/Towny.java b/src/main/java/com/iridium/chunkbusters/support/Towny.java new file mode 100644 index 0000000..b0c74e4 --- /dev/null +++ b/src/main/java/com/iridium/chunkbusters/support/Towny.java @@ -0,0 +1,32 @@ +package com.iridium.chunkbusters.support; + +import com.iridium.chunkbusters.database.ChunkBuster; +import com.palmergames.bukkit.towny.TownyAPI; +import com.palmergames.bukkit.towny.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyPermission; +import com.palmergames.bukkit.towny.object.TownyWorld; +import com.palmergames.bukkit.towny.utils.PlayerCacheUtil; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class Towny implements Support { + @Override + public boolean canDelete(Player player, Location location) { + + TownyWorld world = TownyUniverse.getInstance().getWorldMap().get(location.getWorld().getName()); + if (world == null) { + return true; + } + if (TownyAPI.getInstance().isWilderness(location)) { + return true; + } + return PlayerCacheUtil.getCachePermission(player, location, location.getBlock().getType(), TownyPermission.ActionType.DESTROY); + } + + @Override + public boolean isRelevant(UUID uuid, ChunkBuster chunkBuster) { + return uuid.equals(chunkBuster.getUuid()); + } +} diff --git a/src/main/java/com/iridium/chunkbusters/utils/InventoryUtils.java b/src/main/java/com/iridium/chunkbusters/utils/InventoryUtils.java deleted file mode 100644 index 02d6877..0000000 --- a/src/main/java/com/iridium/chunkbusters/utils/InventoryUtils.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.iridium.chunkbusters.utils; - -import com.cryptomorin.xseries.XMaterial; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -public class InventoryUtils { - - public static int getAmount(Inventory inventory, XMaterial materials) { - int total = 0; - for (ItemStack item : inventory.getContents()) { - if (item == null) continue; - if (materials.isSimilar(item)) { - total += item.getAmount(); - } - } - return total; - } - - public static void removeAmount(Inventory inventory, XMaterial material, int amount) { - int removed = 0; - int index = 0; - for (ItemStack itemStack : inventory.getContents()) { - if (itemStack == null) { - index++; - continue; - } - if (removed >= amount) break; - if (itemStack != null) { - if (material.isSimilar(itemStack)) { - if (removed + itemStack.getAmount() <= amount) { - removed += itemStack.getAmount(); - inventory.setItem(index, null); - } else { - itemStack.setAmount(itemStack.getAmount() - (amount - removed)); - removed += amount; - } - } - } - index++; - } - } - - public static boolean hasOpenSlot(Inventory inv) { - return inv.firstEmpty() == -1; - } -} diff --git a/src/main/java/com/iridium/chunkbusters/utils/ItemStackUtils.java b/src/main/java/com/iridium/chunkbusters/utils/ItemStackUtils.java deleted file mode 100644 index 725f164..0000000 --- a/src/main/java/com/iridium/chunkbusters/utils/ItemStackUtils.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.iridium.chunkbusters.utils; - -import com.cryptomorin.xseries.XMaterial; -import com.iridium.chunkbusters.Item; -import de.tr7zw.changeme.nbtapi.NBTCompound; -import de.tr7zw.changeme.nbtapi.NBTItem; -import de.tr7zw.changeme.nbtapi.NBTListCompound; -import org.bukkit.ChatColor; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; - -import java.util.List; -import java.util.UUID; - -public class ItemStackUtils { - - private static final boolean supports = XMaterial.supports(14); - - public static ItemStack makeItem(XMaterial material, int amount, String name) { - ItemStack item = material.parseItem(); - if (item == null) return null; - item.setAmount(amount); - ItemMeta m = item.getItemMeta(); - m.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); - item.setItemMeta(m); - return item; - } - - public static ItemStack makeItem(XMaterial material, int amount, String name, List lore) { - ItemStack item = material.parseItem(); - if (item == null) return null; - item.setAmount(amount); - ItemMeta m = item.getItemMeta(); - m.setLore(StringUtils.color(lore)); - m.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); - item.setItemMeta(m); - return item; - } - - public static ItemStack makeItem(Item item, List placeholders) { - try { - ItemStack itemstack = makeItem(item.material, item.amount, StringUtils.processMultiplePlaceholders(item.title, placeholders), StringUtils.processMultiplePlaceholders(item.lore, placeholders)); - if (item.material == XMaterial.PLAYER_HEAD && item.headData != null) { - NBTItem nbtItem = new NBTItem(itemstack); - NBTCompound skull = nbtItem.addCompound("SkullOwner"); - if (supports) { - skull.setUUID("Id", UUID.randomUUID()); - } else { - skull.setString("Id", UUID.randomUUID().toString()); - } - NBTListCompound texture = skull.addCompound("Properties").getCompoundList("textures").addCompound(); - texture.setString("Value", item.headData); - return nbtItem.getItem(); - } else if (item.material == XMaterial.PLAYER_HEAD && item.headOwner != null) { - SkullMeta m = (SkullMeta) itemstack.getItemMeta(); - m.setOwner(StringUtils.processMultiplePlaceholders(item.headOwner, placeholders)); - itemstack.setItemMeta(m); - } - return itemstack; - } catch (Exception e) { - return makeItem(XMaterial.STONE, item.amount, StringUtils.processMultiplePlaceholders(item.title, placeholders), StringUtils.processMultiplePlaceholders(item.lore, placeholders)); - } - } - - public static ItemStack makeItem(Item item) { - try { - ItemStack itemstack = makeItem(item.material, item.amount, item.title, item.lore); - if (item.material == XMaterial.PLAYER_HEAD && item.headData != null) { - NBTItem nbtItem = new NBTItem(itemstack); - NBTCompound skull = nbtItem.addCompound("SkullOwner"); - if (supports) { - skull.setUUID("Id", UUID.randomUUID()); - } else { - skull.setString("Id", UUID.randomUUID().toString()); - } - NBTListCompound texture = skull.addCompound("Properties").getCompoundList("textures").addCompound(); - texture.setString("Value", item.headData); - return nbtItem.getItem(); - } else if (item.material == XMaterial.PLAYER_HEAD && item.headOwner != null) { - SkullMeta m = (SkullMeta) itemstack.getItemMeta(); - m.setOwner(item.headOwner); - itemstack.setItemMeta(m); - } - return itemstack; - } catch (Exception e) { - return makeItem(XMaterial.STONE, item.amount, item.title, item.lore); - } - } - - public static ItemStack makeItemHidden(Item item) { - try { - ItemStack itemstack = makeItemHidden(item.material, item.amount, item.title, item.lore); - if (item.material == XMaterial.PLAYER_HEAD && item.headData != null) { - NBTItem nbtItem = new NBTItem(itemstack); - NBTCompound skull = nbtItem.addCompound("SkullOwner"); - if (supports) { - skull.setUUID("Id", UUID.randomUUID()); - } else { - skull.setString("Id", UUID.randomUUID().toString()); - } - NBTListCompound texture = skull.addCompound("Properties").getCompoundList("textures").addCompound(); - texture.setString("Value", item.headData); - return nbtItem.getItem(); - } else if (item.material == XMaterial.PLAYER_HEAD && item.headOwner != null) { - SkullMeta m = (SkullMeta) itemstack.getItemMeta(); - m.setOwner(item.headOwner); - itemstack.setItemMeta(m); - } - return itemstack; - } catch (Exception e) { - return makeItemHidden(XMaterial.STONE, item.amount, item.title, item.lore); - } - } - - public static ItemStack makeItemHidden(Item item, List placeholders) { - try { - ItemStack itemstack = makeItemHidden(item.material, item.amount, StringUtils.processMultiplePlaceholders(item.title, placeholders), StringUtils.color(StringUtils.processMultiplePlaceholders(item.lore, placeholders))); - if (item.material == XMaterial.PLAYER_HEAD && item.headData != null) { - NBTItem nbtItem = new NBTItem(itemstack); - NBTCompound skull = nbtItem.addCompound("SkullOwner"); - if (supports) { - skull.setUUID("Id", UUID.randomUUID()); - } else { - skull.setString("Id", UUID.randomUUID().toString()); - } - NBTListCompound texture = skull.addCompound("Properties").getCompoundList("textures").addCompound(); - texture.setString("Value", item.headData); - return nbtItem.getItem(); - } else if (item.material == XMaterial.PLAYER_HEAD && item.headOwner != null) { - SkullMeta m = (SkullMeta) itemstack.getItemMeta(); - m.setOwner(item.headOwner); - itemstack.setItemMeta(m); - } - return itemstack; - } catch (Exception e) { - e.printStackTrace(); - return makeItemHidden(XMaterial.STONE, item.amount, StringUtils.processMultiplePlaceholders(item.title, placeholders), StringUtils.color(StringUtils.processMultiplePlaceholders(item.lore, placeholders))); - } - } - - public static ItemStack makeItemHidden(XMaterial material, int amount, String name, List lore) { - ItemStack item = material.parseItem(); - if (item == null) return null; - item.setAmount(amount); - ItemMeta m = item.getItemMeta(); - m.setLore(StringUtils.color(lore)); - m.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_DESTROYS, ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_PLACED_ON, ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_UNBREAKABLE); - m.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); - item.setItemMeta(m); - return item; - } -} diff --git a/src/main/java/com/iridium/chunkbusters/utils/Placeholder.java b/src/main/java/com/iridium/chunkbusters/utils/Placeholder.java deleted file mode 100644 index 3e0c93e..0000000 --- a/src/main/java/com/iridium/chunkbusters/utils/Placeholder.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iridium.chunkbusters.utils; - -public class Placeholder { - - private final String key; - private final String value; - - public Placeholder(String key, String value) { - this.key = "{" + key + "}"; - this.value = value; - } - - public String process(String line) { - if (line == null) return ""; - return line.replace(key, value); - } -} diff --git a/src/main/java/com/iridium/chunkbusters/utils/PlayerUtils.java b/src/main/java/com/iridium/chunkbusters/utils/PlayerUtils.java deleted file mode 100644 index c57a3c2..0000000 --- a/src/main/java/com/iridium/chunkbusters/utils/PlayerUtils.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.iridium.chunkbusters.utils; - -import org.bukkit.entity.Player; - -public class PlayerUtils { - - private static int getExpAtLevel(final int level) { - if (level <= 15) { - return (2 * level) + 7; - } else if (level <= 30) { - return (5 * level) - 38; - } - return (9 * level) - 158; - } - - public static int getTotalExperience(final Player player) { - int exp = Math.round(getExpAtLevel(player.getLevel()) * player.getExp()); - int currentLevel = player.getLevel(); - - while (currentLevel > 0) { - currentLevel--; - exp += getExpAtLevel(currentLevel); - } - if (exp < 0) { - exp = Integer.MAX_VALUE; - } - return exp; - } - - public static void setTotalExperience(final Player player, final int exp) { - if (exp < 0) { - throw new IllegalArgumentException("Experience is negative!"); - } - player.setExp(0); - player.setLevel(0); - player.setTotalExperience(0); - - int amount = exp; - while (amount > 0) { - final int expToLevel = getExpAtLevel(player.getLevel()); - amount -= expToLevel; - if (amount >= 0) { - // give until next level - player.giveExp(expToLevel); - } else { - // give the rest - amount += expToLevel; - player.giveExp(amount); - amount = 0; - } - } - } -} diff --git a/src/main/java/com/iridium/chunkbusters/utils/StringUtils.java b/src/main/java/com/iridium/chunkbusters/utils/StringUtils.java deleted file mode 100644 index 00263a6..0000000 --- a/src/main/java/com/iridium/chunkbusters/utils/StringUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.iridium.chunkbusters.utils; - -import com.iridium.iridiumcolorapi.IridiumColorAPI; - -import java.util.List; -import java.util.stream.Collectors; - -public class StringUtils { - - public static String color(String string) { - return IridiumColorAPI.process(string); - } - - public static List color(List strings) { - return strings.stream().map(StringUtils::color).collect(Collectors.toList()); - } - - public static List processMultiplePlaceholders(List lines, List placeholders) { - return lines.stream().map(s -> processMultiplePlaceholders(s, placeholders)).collect(Collectors.toList()); - } - - public static String processMultiplePlaceholders(String line, List placeholders) { - for (Placeholder placeholder : placeholders) { - line = placeholder.process(line); - } - return color(line); - } -} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f00e0d6..4944990 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: IridiumChunkBusters -version: 1.0.0 +version: 1.0.8 description: A plugin for removing chunks main: com.iridium.chunkbusters.IridiumChunkBusters api-version: '1.13'