diff --git a/build.gradle b/build.gradle index 60ddaba..c70495b 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ import org.apache.tools.ant.filters.ReplaceTokens plugins { id 'java' + id "com.github.johnrengelman.shadow" version "6.1.0" } group = 'io.github.simpledev' @@ -12,6 +13,17 @@ targetCompatibility = '1.8' repositories { mavenCentral() + + maven { + name = 'jitpack.io' + url = 'https://jitpack.io' + } + + maven { + name = 'npc-lib' + url = 'https://github.com/juliarn/NPC-Lib' + } + maven { name = 'papermc-repo' url = 'https://papermc.io/repo/repository/maven-public/' @@ -26,11 +38,13 @@ repositories { name = 'sonatype' url = 'https://oss.sonatype.org/content/groups/public/' } + } dependencies { compileOnly 'com.destroystokyo.paper:paper-api:1.16.4-R0.1-SNAPSHOT' - compile 'com.mojang:authlib:1.5.21' + compileOnly 'com.mojang:authlib:1.5.21' + implementation 'com.github.juliarn:npc-lib:2.4-RELEASE' } processResources { @@ -38,10 +52,3 @@ processResources { filter ReplaceTokens, tokens: [version: version] } } - -task copyJar(type: Copy) { - from jar - into "E:\\Rishi\\Codes\\Java Projects\\Minecraft Plugins\\PaperMC\\1.16.4\\Server Testing\\plugins" -} - -build.finalizedBy copyJar diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf..e708b1c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 59b5f89..6ce793f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 83f2acf..4f906e0 100644 --- a/gradlew +++ b/gradlew @@ -82,6 +82,7 @@ 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 @@ -129,6 +130,7 @@ fi 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 @@ -154,19 +156,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + 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" ;; + 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 @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +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" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9618d8d..107acd3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -29,6 +29,9 @@ 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" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :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 %CMD_LINE_ARGS% +"%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 diff --git a/settings.gradle b/settings.gradle index ae8c3dc..4d0323e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,3 @@ rootProject.name = 'strike' +include 'NPC-lib' + diff --git a/src/main/java/io/github/simplexdev/strike/StrikeCommand.java b/src/main/java/io/github/simplexdev/strike/StrikeCommand.java index 6d82081..07262bb 100644 --- a/src/main/java/io/github/simplexdev/strike/StrikeCommand.java +++ b/src/main/java/io/github/simplexdev/strike/StrikeCommand.java @@ -1,25 +1,33 @@ package io.github.simplexdev.strike; +import com.github.juliarn.npc.NPC; +import com.github.juliarn.npc.NPCPool; +import com.github.juliarn.npc.profile.Profile; import io.github.simplexdev.strike.api.ConfigUser; -import java.util.Arrays; - import io.github.simplexdev.strike.api.utils.InventoryEditConfigManager; import io.github.simplexdev.strike.listeners.InventoryEditGUI; import io.github.simplexdev.strike.listeners.SpawnController; +import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import java.util.*; + public class StrikeCommand implements CommandExecutor { + private static Map npcMap = new HashMap<>(); + private static ConfigUser[] configUsers; private final JavaPlugin plugin; + private final NPCPool npcPool; public StrikeCommand(JavaPlugin plugin) { this.plugin = plugin; + this.npcPool = new NPCPool(plugin); } public static void loadInstances(ConfigUser... configUsers) { @@ -34,24 +42,55 @@ public class StrikeCommand implements CommandExecutor { if ("reload".equalsIgnoreCase(args[0])) { this.plugin.reloadConfig(); Arrays.stream(configUsers).forEach(configUser -> configUser.refresh()); - } - - else if ("edit".equalsIgnoreCase(args[0]) && sender instanceof Player) { + sender.sendMessage(ChatColor.GREEN + "[Strike] Plugin Config Reloaded"); + } else if ("edit".equalsIgnoreCase(args[0]) && sender instanceof Player) { new InventoryEditGUI(plugin).openInventory((Player) sender); - } - - else if ("get".equalsIgnoreCase(args[0]) && sender instanceof Player) { + } else if ("get".equalsIgnoreCase(args[0]) && sender instanceof Player) { Player player = (Player) sender; player.getInventory().setContents(new InventoryEditConfigManager(plugin).getInventoryItems(player)); - } - - else if ("set-spawn".equalsIgnoreCase(args[0]) && sender instanceof Player) { + } else if ("set-spawn".equalsIgnoreCase(args[0]) && sender instanceof Player) { Player player = ((Player) sender); new SpawnController(plugin).setSpawn(player.getLocation()); } + else if ("spawn-npc".equalsIgnoreCase(args[0]) && sender instanceof Player) { + NPC.Builder zHenna = new NPC.Builder(new Profile(UUID.randomUUID(), "zHenna", null)); + NPC npc = zHenna.build(npcPool); + npc.getLocation().set(((Player) sender).getLocation().getX(), ((Player) sender).getLocation().getY(), ((Player) sender).getLocation().getZ()); + + int random; + + do { + random = new Random().nextInt(200000); + } + while (npcMap.containsKey(random)); + + npcMap.put(random, npc); + } + + else if ("remove-npc".equalsIgnoreCase(args[0]) && sender instanceof Player) { + if (npcMap.isEmpty() || args.length > 3) + return true; + Integer integer; + try { + integer = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + e.printStackTrace(); + return true; + } + + if (!npcMap.containsKey(integer)) + return true; + + npcPool.removeNPC(npcMap.get(integer).getEntityId()); + } + return true; } + + public static Map getNpcMap() { + return npcMap; + } } \ No newline at end of file diff --git a/src/main/java/io/github/simplexdev/strike/StrikePlugin.java b/src/main/java/io/github/simplexdev/strike/StrikePlugin.java index e6afeb6..72738c4 100644 --- a/src/main/java/io/github/simplexdev/strike/StrikePlugin.java +++ b/src/main/java/io/github/simplexdev/strike/StrikePlugin.java @@ -7,6 +7,7 @@ import org.bukkit.plugin.java.JavaPlugin; public final class StrikePlugin extends JavaPlugin { //TODO + // Custom Explosion // NPC Edit // LaunchPad diff --git a/src/main/java/io/github/simplexdev/strike/events/GrenadeKillEvent.java b/src/main/java/io/github/simplexdev/strike/api/events/GrenadeKillEvent.java similarity index 93% rename from src/main/java/io/github/simplexdev/strike/events/GrenadeKillEvent.java rename to src/main/java/io/github/simplexdev/strike/api/events/GrenadeKillEvent.java index 0a385d7..4a7ee86 100644 --- a/src/main/java/io/github/simplexdev/strike/events/GrenadeKillEvent.java +++ b/src/main/java/io/github/simplexdev/strike/api/events/GrenadeKillEvent.java @@ -1,4 +1,4 @@ -package io.github.simplexdev.strike.events; +package io.github.simplexdev.strike.api.events; import org.bukkit.entity.Player; import org.bukkit.event.Event; diff --git a/src/main/java/io/github/simplexdev/strike/events/GunKillEvent.java b/src/main/java/io/github/simplexdev/strike/api/events/GunKillEvent.java similarity index 93% rename from src/main/java/io/github/simplexdev/strike/events/GunKillEvent.java rename to src/main/java/io/github/simplexdev/strike/api/events/GunKillEvent.java index 6f3b9a9..c28a519 100644 --- a/src/main/java/io/github/simplexdev/strike/events/GunKillEvent.java +++ b/src/main/java/io/github/simplexdev/strike/api/events/GunKillEvent.java @@ -1,4 +1,4 @@ -package io.github.simplexdev.strike.events; +package io.github.simplexdev.strike.api.events; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; diff --git a/src/main/java/io/github/simplexdev/strike/api/events/PlayerDoubleJumpEvent.java b/src/main/java/io/github/simplexdev/strike/api/events/PlayerDoubleJumpEvent.java new file mode 100644 index 0000000..964a98b --- /dev/null +++ b/src/main/java/io/github/simplexdev/strike/api/events/PlayerDoubleJumpEvent.java @@ -0,0 +1,30 @@ +package io.github.simplexdev.strike.api.events; + +import com.destroystokyo.paper.event.player.PlayerJumpEvent; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.util.Vector; + +public class PlayerDoubleJumpEvent extends PlayerJumpEvent { + private static HandlerList handlerList = new HandlerList(); + private final World world; + + public PlayerDoubleJumpEvent(Player player, Vector vector) { + super(player, player.getLocation(), player.getLocation().clone().add(vector)); + this.world = player.getWorld(); + } + + public World getWorld() { + return world; + } + + @Override + public HandlerList getHandlers() { + return handlerList; + } + + public static HandlerList getHandlerList() { + return handlerList; + } +} diff --git a/src/main/java/io/github/simplexdev/strike/api/utils/InventoryEditConfigManager.java b/src/main/java/io/github/simplexdev/strike/api/utils/InventoryEditConfigManager.java index c3e10a9..ac2005a 100644 --- a/src/main/java/io/github/simplexdev/strike/api/utils/InventoryEditConfigManager.java +++ b/src/main/java/io/github/simplexdev/strike/api/utils/InventoryEditConfigManager.java @@ -3,7 +3,6 @@ package io.github.simplexdev.strike.api.utils; import io.github.simplexdev.strike.listeners.Grenade; import io.github.simplexdev.strike.listeners.Gun; import io.github.simplexdev.strike.listeners.HealthPackage; -import io.github.simplexdev.strike.listeners.ItemManager; import org.bukkit.Material; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; @@ -16,7 +15,6 @@ import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; import java.util.Arrays; -import java.util.Collections; import java.util.Set; public class InventoryEditConfigManager { @@ -30,9 +28,10 @@ public class InventoryEditConfigManager { dataFile = new File("plugins\\Strike\\inventories.yml"); try { - if (!dataFile.isFile()) { - + if (!dataFile.exists()) { + plugin.getDataFolder().mkdirs(); dataFile.createNewFile(); + plugin.saveResource("inventories.yml", false); } dataConfig = new YamlConfiguration(); diff --git a/src/main/java/io/github/simplexdev/strike/listeners/Grenade.java b/src/main/java/io/github/simplexdev/strike/listeners/Grenade.java index 6624071..8067b2e 100644 --- a/src/main/java/io/github/simplexdev/strike/listeners/Grenade.java +++ b/src/main/java/io/github/simplexdev/strike/listeners/Grenade.java @@ -2,7 +2,7 @@ package io.github.simplexdev.strike.listeners; import io.github.simplexdev.strike.api.ConfigUser; import io.github.simplexdev.strike.api.Spawn; -import io.github.simplexdev.strike.events.GrenadeKillEvent; +import io.github.simplexdev.strike.api.events.GrenadeKillEvent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -65,7 +65,7 @@ public class Grenade implements ConfigUser { } final Item item = player.getWorld().dropItem(player.getEyeLocation(), new ItemStack(Material.MAGMA_CREAM)); - item.setVelocity(player.getEyeLocation().getDirection().multiply(0.75D)); + item.setVelocity(player.getEyeLocation().getDirection().multiply(1.5)); (new BukkitRunnable() { public void run() { diff --git a/src/main/java/io/github/simplexdev/strike/listeners/Gun.java b/src/main/java/io/github/simplexdev/strike/listeners/Gun.java index 11ce104..bb4c0bf 100644 --- a/src/main/java/io/github/simplexdev/strike/listeners/Gun.java +++ b/src/main/java/io/github/simplexdev/strike/listeners/Gun.java @@ -2,10 +2,11 @@ package io.github.simplexdev.strike.listeners; import io.github.simplexdev.strike.api.ConfigUser; import io.github.simplexdev.strike.api.Spawn; -import io.github.simplexdev.strike.events.GunKillEvent; +import io.github.simplexdev.strike.api.events.GunKillEvent; import org.bukkit.*; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.NPC; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.EventHandler; @@ -27,6 +28,7 @@ import java.util.List; public class Gun implements ConfigUser { private static final HashMap ammoMap = new HashMap<>(); private static final List passThroughBlocks = setPassThroughBlocks(); + private static List delay = new ArrayList<>(); private final ItemStack gunItemStack; @@ -37,46 +39,36 @@ public class Gun implements ConfigUser { private int maxDistance; private static List setPassThroughBlocks() { + ArrayList blocks = new ArrayList<>(); blocks.add(Material.TALL_GRASS); blocks.add(Material.IRON_BARS); - blocks.add(Material.ACACIA_FENCE); - blocks.add(Material.BIRCH_FENCE); - blocks.add(Material.CRIMSON_FENCE); - blocks.add(Material.JUNGLE_FENCE); - blocks.add(Material.OAK_FENCE); - blocks.add(Material.SPRUCE_FENCE); - blocks.add(Material.WARPED_FENCE); - blocks.add(Material.DARK_OAK_FENCE); - blocks.add(Material.NETHER_BRICK_FENCE); - blocks.add(Material.WALL_TORCH); - blocks.add(Material.TORCH); - blocks.add(Material.REDSTONE_TORCH); - blocks.add(Material.REDSTONE_WALL_TORCH); - blocks.add(Material.SOUL_TORCH); - blocks.add(Material.ACACIA_FENCE_GATE); - blocks.add(Material.BIRCH_FENCE_GATE); - blocks.add(Material.CRIMSON_FENCE_GATE); - blocks.add(Material.JUNGLE_FENCE_GATE); - blocks.add(Material.OAK_FENCE_GATE); - blocks.add(Material.SPRUCE_FENCE_GATE); - blocks.add(Material.WARPED_FENCE_GATE); - blocks.add(Material.DARK_OAK_FENCE_GATE); blocks.add(Material.WATER); blocks.add(Material.LAVA); blocks.add(Material.AIR); blocks.add(Material.COBWEB); - blocks.add(Material.ACACIA_LEAVES); - blocks.add(Material.BIRCH_LEAVES); - blocks.add(Material.OAK_LEAVES); - blocks.add(Material.DARK_OAK_LEAVES); - blocks.add(Material.SPRUCE_LEAVES); + + for (Material material : Material.values()) { + if ( + material.toString().endsWith("FENCE") + || material.toString().endsWith("TORCH") + || material.toString().endsWith("GATE") + || material.toString().endsWith("LEAVES") + || material.toString().endsWith("PRESSURE_PLATE") + || material.toString().endsWith("BUTTON") + || material.toString().endsWith("GLASS") + || material.toString().endsWith("GLASS_PANE") + || material.toString().endsWith("TRAPDOOR") + ) + blocks.add(material); + } return blocks; } public Gun(JavaPlugin plugin) { + this.plugin = plugin; this.gunItemStack = createItem(); this.maxAmmo = plugin.getConfig().getInt("gun.ammo"); @@ -110,11 +102,11 @@ public class Gun implements ConfigUser { return; } - String ammoText = (Gun.ammoMap.containsKey(player) ? ((Integer) Gun.ammoMap.get(player)).intValue() : Gun.this.maxAmmo) + " | " + Gun.this.maxAmmo; + String ammoText = (Gun.ammoMap.containsKey(player) ? Gun.ammoMap.get(player).intValue() : Gun.this.maxAmmo) + " | " + Gun.this.maxAmmo; player.sendActionBar(ammoText); } - }).runTaskTimer((Plugin) this.plugin, 0L, 7L); + }).runTaskTimer(this.plugin, 0L, 7L); } @EventHandler @@ -130,7 +122,7 @@ public class Gun implements ConfigUser { Player player = e.getPlayer(); Action action = e.getAction(); - if (!player.getWorld().equals(Spawn.getWorld()) || itemStack == null || !itemStack.equals(this.gunItemStack) || !action.toString().startsWith("RIGHT_CLICK")) { + if (!player.getWorld().equals(Spawn.getWorld()) || itemStack == null || !itemStack.equals(this.gunItemStack) || delay.contains(player) || !action.toString().startsWith("RIGHT_CLICK")) { return; } int ammo = this.maxAmmo; @@ -139,23 +131,31 @@ public class Gun implements ConfigUser { ammoMap.put(player, Integer.valueOf(this.maxAmmo - 1)); } else { - ammo = ((Integer) ammoMap.get(player)).intValue(); + ammo = ammoMap.get(player).intValue(); if (ammo == 1) { (new BukkitRunnable() { public void run() { Gun.ammoMap.replace(player, Integer.valueOf(Gun.this.maxAmmo)); } - }).runTaskLater((Plugin) this.plugin, 20L * this.plugin.getConfig().getInt("gun.reload-time")); + }).runTaskLater(this.plugin, 20L * this.plugin.getConfig().getInt("gun.reload-time")); } - if (((Integer) ammoMap.get(player)).intValue() != 0) { + if (ammoMap.get(player).intValue() != 0) { ammoMap.replace(player, Integer.valueOf(ammo - 1)); } } if (ammo <= 0) { return; } + delay.add(player); + + new BukkitRunnable() { + @Override + public void run() { + delay.remove(player); + } + }.runTaskLater(plugin, 2); Entity entity = getEntity(player, player.getEyeLocation().clone(), 0.0D); diff --git a/src/main/java/io/github/simplexdev/strike/listeners/InventoryEditGUI.java b/src/main/java/io/github/simplexdev/strike/listeners/InventoryEditGUI.java index 214527c..3d84509 100644 --- a/src/main/java/io/github/simplexdev/strike/listeners/InventoryEditGUI.java +++ b/src/main/java/io/github/simplexdev/strike/listeners/InventoryEditGUI.java @@ -1,5 +1,7 @@ package io.github.simplexdev.strike.listeners; +import com.github.juliarn.npc.event.PlayerNPCInteractEvent; +import io.github.simplexdev.strike.StrikeCommand; import io.github.simplexdev.strike.api.utils.InventoryEditConfigManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -57,4 +59,12 @@ public class InventoryEditGUI implements Listener { } + @EventHandler + private void openGUI(PlayerNPCInteractEvent e) { + if (!StrikeCommand.getNpcMap().containsValue(e.getNPC())) + return; + + openInventory(e.getPlayer()); + } + } diff --git a/src/main/java/io/github/simplexdev/strike/listeners/ItemManager.java b/src/main/java/io/github/simplexdev/strike/listeners/ItemManager.java index f212d6b..5b25ca5 100644 --- a/src/main/java/io/github/simplexdev/strike/listeners/ItemManager.java +++ b/src/main/java/io/github/simplexdev/strike/listeners/ItemManager.java @@ -2,9 +2,9 @@ package io.github.simplexdev.strike.listeners; import io.github.simplexdev.strike.api.ConfigUser; import io.github.simplexdev.strike.api.Spawn; +import io.github.simplexdev.strike.api.events.GrenadeKillEvent; +import io.github.simplexdev.strike.api.events.GunKillEvent; import io.github.simplexdev.strike.api.utils.InventoryEditConfigManager; -import io.github.simplexdev.strike.events.GrenadeKillEvent; -import io.github.simplexdev.strike.events.GunKillEvent; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.PlayerDeathEvent; diff --git a/src/main/java/io/github/simplexdev/strike/listeners/Jumper.java b/src/main/java/io/github/simplexdev/strike/listeners/Jumper.java index 5303eb5..7532c75 100644 --- a/src/main/java/io/github/simplexdev/strike/listeners/Jumper.java +++ b/src/main/java/io/github/simplexdev/strike/listeners/Jumper.java @@ -3,9 +3,8 @@ package io.github.simplexdev.strike.listeners; import com.destroystokyo.paper.event.player.PlayerJumpEvent; import io.github.simplexdev.strike.api.ConfigUser; import io.github.simplexdev.strike.api.Spawn; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Material; +import io.github.simplexdev.strike.api.events.PlayerDoubleJumpEvent; +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -14,6 +13,7 @@ import org.bukkit.event.player.PlayerToggleFlightEvent; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; import java.util.HashMap; import java.util.Map; @@ -55,7 +55,6 @@ public class Jumper implements ConfigUser { } - @EventHandler private void onFlightAccessChange(PlayerToggleFlightEvent e) { final Player player = e.getPlayer(); @@ -67,7 +66,15 @@ public class Jumper implements ConfigUser { player.setAllowFlight(false); e.setCancelled(true); - player.setVelocity(player.getLocation().getDirection().multiply(0.5D).setY(0.5D)); + + double multiplier = plugin.getConfig().getDouble("double-jump.forward-distance"); + double yMultiplier = plugin.getConfig().getDouble("double-jump.upward-distance"); + + Vector vector = player.getLocation().getDirection().multiply(multiplier).setY(yMultiplier); + + player.setVelocity(vector); + + Bukkit.getPluginManager().callEvent(new PlayerDoubleJumpEvent(player, vector)); playersOnCoolDown.put(player.getPlayer().getUniqueId(), Long.valueOf((this.coolDownTime.intValue() * 1000) + System.currentTimeMillis())); @@ -78,7 +85,13 @@ public class Jumper implements ConfigUser { player.sendMessage(ChatColor.translateAlternateColorCodes('&', Jumper.this.plugin.getConfig().getString("double-jump.cooldown-finish-message"))); } - }).runTaskLater((Plugin) this.plugin, 20L * this.coolDownTime.intValue()); + }).runTaskLater(this.plugin, 20L * this.coolDownTime.intValue()); + } + + @EventHandler + private void onDoubleJump(PlayerDoubleJumpEvent e) { + e.getWorld().spawnParticle(Particle.EXPLOSION_NORMAL, e.getPlayer().getLocation(), 1); + e.getWorld().playSound(e.getPlayer().getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1 , 1); } diff --git a/src/main/java/io/github/simplexdev/strike/listeners/SpawnController.java b/src/main/java/io/github/simplexdev/strike/listeners/SpawnController.java index 8414754..613ca26 100644 --- a/src/main/java/io/github/simplexdev/strike/listeners/SpawnController.java +++ b/src/main/java/io/github/simplexdev/strike/listeners/SpawnController.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -24,6 +25,14 @@ public class SpawnController implements ConfigUser { } + @EventHandler + private void onItemClick(InventoryClickEvent e) { + if (e.getWhoClicked().getWorld().equals(Spawn.getWorld()) && + (e.getClickedInventory() != null + && e.getClickedInventory().equals(e.getWhoClicked().getOpenInventory().getBottomInventory()))) + e.setCancelled(true); + } + @EventHandler private void onPlayerWorldChange(PlayerChangedWorldEvent e) { if (e.getPlayer().getWorld().equals(Spawn.getWorld())) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4ef8896..5ff7248 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,7 @@ double-jump: cooldown: 10 #Time in Seconds + forward-distance: 0.5 #This is had to config up, U can use decimal number here + upward-distance: 0.75 #This is had to config up, U can use decimal number here cooldown-finish-message: "Done" message-enabled: true