From 4914255c407272001cb60ff346d2e04f97bbfd61 Mon Sep 17 00:00:00 2001 From: Dan E Date: Mon, 6 May 2024 15:15:18 +0100 Subject: [PATCH] TP keeps player pitch and yaw --- .../java/fantasypvp/kand_smp/Kand_smp.java | 6 ++ .../commands/GiveDashItemCommand.java | 36 ++++++++++++ .../kand_smp/events/DashItemListener.java | 58 +++++++++++++++++++ .../fantasypvp/kand_smp/events/Events.java | 1 + .../fantasypvp/kand_smp/items/DashItem.java | 36 ++++++++++++ .../java/fantasypvp/kand_smp/items/items.md | 9 ++- src/main/resources/config.yml | 1 + src/main/resources/plugin.yml | 5 ++ 8 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 src/main/java/fantasypvp/kand_smp/commands/GiveDashItemCommand.java create mode 100644 src/main/java/fantasypvp/kand_smp/events/DashItemListener.java create mode 100644 src/main/java/fantasypvp/kand_smp/items/DashItem.java diff --git a/src/main/java/fantasypvp/kand_smp/Kand_smp.java b/src/main/java/fantasypvp/kand_smp/Kand_smp.java index e0a98f4..1f415fa 100644 --- a/src/main/java/fantasypvp/kand_smp/Kand_smp.java +++ b/src/main/java/fantasypvp/kand_smp/Kand_smp.java @@ -2,8 +2,11 @@ package fantasypvp.kand_smp; import fantasypvp.kand_smp.commands.CmdLightningSword; import fantasypvp.kand_smp.commands.CmdTeleportSpawn; +import fantasypvp.kand_smp.commands.GiveDashItemCommand; import fantasypvp.kand_smp.commands.SetSpawnCommand; +import fantasypvp.kand_smp.events.DashItemListener; import fantasypvp.kand_smp.events.Events; +import fantasypvp.kand_smp.items.DashItem; import fantasypvp.kand_smp.items.LightningGear; import fantasypvp.kand_smp.items.TrueNetherite; import fantasypvp.kand_smp.items.Witherite; @@ -20,10 +23,13 @@ public final class Kand_smp extends JavaPlugin { Witherite.init(); // register listeners getServer().getPluginManager().registerEvents(new Events(), this); + getServer().getPluginManager().registerEvents(new DashItemListener(),this); getCommand("lightning_sword").setExecutor(new CmdLightningSword()); getCommand("spawn").setExecutor(new CmdTeleportSpawn(this)); getCommand("setSpawnTp").setExecutor(new SetSpawnCommand(this)); + getCommand("dashstick").setExecutor(new GiveDashItemCommand()); + getServer().broadcastMessage("§aKand SMP has been enabled!"); } diff --git a/src/main/java/fantasypvp/kand_smp/commands/GiveDashItemCommand.java b/src/main/java/fantasypvp/kand_smp/commands/GiveDashItemCommand.java new file mode 100644 index 0000000..5d75636 --- /dev/null +++ b/src/main/java/fantasypvp/kand_smp/commands/GiveDashItemCommand.java @@ -0,0 +1,36 @@ +package fantasypvp.kand_smp.commands; + +import fantasypvp.kand_smp.items.DashItem; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class GiveDashItemCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { + + if(!(sender instanceof Player)){ + sender.sendMessage("You must be a player to execute this command"); + return true; + } + + Player player = (Player) sender; + + if(!(player.hasPermission("giveDashItem"))){ + player.sendMessage(ChatColor.RED+"You don't have permission to run this command."); + return true; + } + + ItemStack dashItem = new DashItem().createDashItem(); + + player.getInventory().addItem(dashItem); + + + return true; + } +} diff --git a/src/main/java/fantasypvp/kand_smp/events/DashItemListener.java b/src/main/java/fantasypvp/kand_smp/events/DashItemListener.java new file mode 100644 index 0000000..c9940bb --- /dev/null +++ b/src/main/java/fantasypvp/kand_smp/events/DashItemListener.java @@ -0,0 +1,58 @@ +package fantasypvp.kand_smp.events; + +import fantasypvp.kand_smp.items.DashItem; + +import org.bukkit.Location; + +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +public class DashItemListener implements Listener { + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + ItemStack item = event.getItem(); // Get the item the player interacted with + if (item != null && item.isSimilar(new DashItem().createDashItem())) { + + Player player = event.getPlayer(); + + Location location = player.getLocation(); + + Vector direction = location.getDirection(); + + player.setVelocity(direction.multiply(2.0)); + + player.playSound(location, Sound.ENTITY_DRAGON_FIREBALL_EXPLODE, 1.0f, 1.0f); + + World world = player.getWorld(); + + world.spawnParticle(Particle.EXPLOSION_LARGE,location,1); + + } + } + + @EventHandler + public void OnEntityDamage(EntityDamageEvent event){ + if(event.getEntity() instanceof Player){ + + Player player = (Player) event.getEntity(); + + ItemStack itemInMainHand = player.getInventory().getItemInMainHand(); + + if (itemInMainHand.isSimilar(new DashItem().createDashItem())) { + + event.setCancelled(true); + + } + + } + } +} diff --git a/src/main/java/fantasypvp/kand_smp/events/Events.java b/src/main/java/fantasypvp/kand_smp/events/Events.java index 1e81005..8a96a14 100644 --- a/src/main/java/fantasypvp/kand_smp/events/Events.java +++ b/src/main/java/fantasypvp/kand_smp/events/Events.java @@ -12,6 +12,7 @@ import static org.bukkit.Bukkit.*; public class Events implements Listener { @EventHandler public static void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event) { + getServer().broadcastMessage("§a" + event.getPlayer().getName() + " has joined the server!"); } diff --git a/src/main/java/fantasypvp/kand_smp/items/DashItem.java b/src/main/java/fantasypvp/kand_smp/items/DashItem.java new file mode 100644 index 0000000..7441b72 --- /dev/null +++ b/src/main/java/fantasypvp/kand_smp/items/DashItem.java @@ -0,0 +1,36 @@ +package fantasypvp.kand_smp.items; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class DashItem extends ItemStack { + + public ItemStack createDashItem(){ + + ItemStack item = new ItemStack(Material.STICK,1); + + ItemMeta meta = item.getItemMeta(); + + ListstickLore = new ArrayList<>(); + stickLore.add("Click this stick and you'll be there in a jiffy."); + stickLore.add("About this, don't get sniffy."); + + + meta.setLore(stickLore); + + meta.setDisplayName(ChatColor.AQUA+"[Dash"+ChatColor.BLUE+" Stick]"); + + item.setItemMeta(meta); + + return item; + + + + } + +} diff --git a/src/main/java/fantasypvp/kand_smp/items/items.md b/src/main/java/fantasypvp/kand_smp/items/items.md index 153c58d..b4f37a6 100644 --- a/src/main/java/fantasypvp/kand_smp/items/items.md +++ b/src/main/java/fantasypvp/kand_smp/items/items.md @@ -76,7 +76,12 @@ # Other ## Lightning Sword - - Rename necessary? + - Rename necessary? (Zeus Staff?) - (Critical) attacking strikes lightning on a target - independent item - - crafted with a lightning rod, two diamonds and two nether stars \ No newline at end of file + - crafted with a lightning rod, two diamonds and two nether stars + +## Dash Stick + - Rename + - Right click launches player where they are looking, plays a sound and summons explosion particles + - Disables fall damage when active \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e69de29..2d9182e 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -0,0 +1 @@ +lightning-sword-name:"LIGHTNING SWORD" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e2c514d..c3846e1 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -12,6 +12,11 @@ commands: setSpawnTp: description: Sets the world spawn tp point usage: /setSpawnTp + dashstick: + description: gives the user a dash stick + usage: /dashstick + + permissions: lightning_sword: description: Allows player to run /lightning_sword