added lightning sword and steven's wrath

This commit is contained in:
2025-02-04 12:09:04 +00:00
parent 4e03c6bf3b
commit b0c75df60f
8 changed files with 259 additions and 16 deletions
@@ -2,11 +2,10 @@ package dev.zxq5.fantasysmp;
import dev.zxq5.fantasysmp.events.HereticWarner;
import dev.zxq5.fantasysmp.events.StevenKillCheck;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.items.Items;
import dev.zxq5.fantasysmp.items.Witherite;
import dev.zxq5.fantasysmp.items.*;
import dev.zxq5.fantasysmp.warps.Warp;
import dev.zxq5.fantasysmp.warps.Warper;
import org.bukkit.entity.Panda;
import org.bukkit.plugin.java.JavaPlugin;
public final class Fantasysmp extends JavaPlugin {
@@ -37,6 +36,12 @@ public final class Fantasysmp extends JavaPlugin {
GenericGearSet witherite = new Witherite();
witherite.registerRecipes();
Lightning lightning = new Lightning();
lightning.registerRecipes();
StevensWrath stevensWrath = new StevensWrath();
stevensWrath.registerRecipes();
getServer().getPluginManager().registerEvents(new StevenKillCheck(), this);
HereticWarner hereticWarner = new HereticWarner();
@@ -61,7 +61,7 @@ public class StevenKillCheck implements Listener {
public void destroyHeretic(Player heretic) {
Location coords = heretic.getLocation();
World world = getServer().getWorlds().getFirst();
World world = coords.getWorld();
Plugin plugin = getPluginManager().getPlugin("fantasysmp");
broadcastMessage(ChatColor.DARK_RED + "HERESY!!!!");
@@ -1,6 +1,7 @@
package dev.zxq5.fantasysmp.items;
import org.bukkit.Bukkit;
import org.bukkit.block.data.type.Light;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player;
import org.bukkit.entity.Wither;
@@ -46,7 +47,9 @@ public class Items implements CommandExecutor {
public Items(JavaPlugin plugin) {
Witherite.init();
Lightning.init();
getServer().getPluginManager().registerEvents(new Witherite(), plugin);
getServer().getPluginManager().registerEvents(new Lightning(), plugin);
getServer().getPluginManager().registerEvents(new StevensWrath(), plugin);
}
}
@@ -0,0 +1,112 @@
package dev.zxq5.fantasysmp.items;
import dev.zxq5.fantasysmp.util.LoreChecker;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.List;
import static org.bukkit.Bukkit.broadcastMessage;
import static org.bukkit.Bukkit.getServer;
public class Lightning extends GenericGearSet implements Listener, CommandExecutor {
@Override
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
if (!(args[0].equals("lightning"))) {
return false;
}
Player player = (Player) sender;
player.getInventory().addItem(new Lightning().getSword());
return true;
}
@Override
public void registerRecipes() {
ItemStack sword = this.getSword();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", "lightning_sword");
ShapedRecipe swordRecipe = new ShapedRecipe(swordKey, sword);
swordRecipe.shape(" N ", " N ", " R ");
swordRecipe.setIngredient('N', Material.NETHER_STAR);
swordRecipe.setIngredient('R', Material.LIGHTNING_ROD);
getServer().addRecipe(swordRecipe);
}
@EventHandler
public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
// checks that it is a player that is performing the attack.
if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) {
return;
}
if (!( LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.swordLore) )) return;
if (
player.isOnGround()
|| player.getVelocity().getY() >= 0
|| player.isClimbing()
|| player.isInWater()
|| player.isInsideVehicle()
|| player.hasPotionEffect(PotionEffectType.BLINDNESS)
) return;
Location location = event.getEntity().getLocation();
World world = location.getWorld();
if (world == null) return;
world.strikeLightning(location);
}
@EventHandler
public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) {
if (event.getEntity() instanceof Player player) {
if (!(event
.getDamageSource()
.getDamageType()
.getKey()
.toString()
.equals("minecraft:lightning_bolt")
)) return;
if (LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.swordLore)) {
event.setCancelled(true);
}
}
}
@Override
public ItemStack getSword() {
ItemStack item = super.getSword();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:lightning_sword"));
item.setItemMeta(meta);
return item;
}
public static void init() {}
public Lightning() {
this.setTier5();
this.swordName = "Lightning Sword";
this.swordLore = "All who oppose shall be smitten.";
}
}
@@ -0,0 +1,104 @@
package dev.zxq5.fantasysmp.items;
import dev.zxq5.fantasysmp.util.LoreChecker;
import org.bukkit.*;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.ShapelessRecipe;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect;
import java.util.List;
import static org.bukkit.Bukkit.broadcastMessage;
import static org.bukkit.Bukkit.getServer;
public class StevensWrath extends GenericGearSet implements Listener, CommandExecutor {
@Override
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
if (!(args[0].equals("wrath"))) {
return false;
}
Player player = (Player) sender;
player.getInventory().addItem(new StevensWrath().getSword());
return true;
}
@EventHandler
public void onCraft(org.bukkit.event.inventory.PrepareItemCraftEvent event) {
if (!event.getInventory().contains(Material.NETHERITE_BLOCK)) return;
if (!event.getInventory().contains(new Lightning().getSword())) return;
event.getInventory().setResult(new StevensWrath().getSword());
}
@Override
public void registerRecipes() {}
@EventHandler
public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
// checks that it is a player that is performing the attack.
if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) {
return;
}
if (!(
LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.swordLore)
|| LoreChecker.itemLoreContains(player.getInventory().getItemInOffHand(), this.swordLore)
)) return;
Location location = event.getEntity().getLocation();
World world = location.getWorld();
if (world == null) return;
world.strikeLightning(location);
}
@EventHandler
public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) {
if (event.getEntity() instanceof Player player) {
if (!(event
.getDamageSource()
.getDamageType()
.getKey()
.toString()
.equals("minecraft:lightning_bolt")
)) return;
if (LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.swordLore) ||
LoreChecker.itemLoreContains(player.getInventory().getItemInOffHand(), this.swordLore)) {
event.setCancelled(true);
}
}
}
@Override
public ItemStack getSword() {
ItemStack item = super.getSword();
ItemMeta meta = item.getItemMeta();
meta.setItemModel(NamespacedKey.fromString("fantasysmp:stevens_wrath"));
item.setItemMeta(meta);
return item;
}
public static void init() {}
public StevensWrath() {
this.setTier6();
this.swordName = ChatColor.LIGHT_PURPLE + "Stevens Wrath" + ChatColor.RESET;
this.swordLore = ChatColor.LIGHT_PURPLE + "All who oppose the mighty Steven shall face his wrath of lightning.";
}
}
@@ -1,5 +1,6 @@
package dev.zxq5.fantasysmp.items;
import dev.zxq5.fantasysmp.util.LoreChecker;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.command.CommandExecutor;
@@ -77,12 +78,7 @@ public class Witherite extends GenericGearSet implements Listener, CommandExecut
return;
}
try {
if (!player.getInventory().getItemInMainHand().getItemMeta().getLore().toString().contains(this.swordLore)) {
return;
}
} catch (Exception e) {
e.printStackTrace();
if (!LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.swordLore)) {
return;
}
@@ -98,15 +94,18 @@ public class Witherite extends GenericGearSet implements Listener, CommandExecut
@EventHandler
public void onEntityPotionEffectEvent(org.bukkit.event.entity.EntityPotionEffectEvent event) {
if (event.getEntity() instanceof Player player) {
if (event.getNewEffect() == null) return;
if (event.getNewEffect().getType() != org.bukkit.potion.PotionEffectType.WITHER) {
return;
}
try {
if (player.getInventory().getHelmet().getItemMeta().getLore().toString().contains(this.helmetLore)
&& player.getInventory().getChestplate().getItemMeta().getLore().toString().contains(this.chestplateLore)
&& player.getInventory().getLeggings().getItemMeta().getLore().toString().contains(this.leggingsLore)
&& player.getInventory().getBoots().getItemMeta().getLore().toString().contains(this.bootsLore)) {
if (LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmetLore)
&& LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplateLore)
&& LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggingsLore)
&& LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.bootsLore)
) {
event.setCancelled(true);
}
} catch (Exception e) {
@@ -0,0 +1,20 @@
package dev.zxq5.fantasysmp.util;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.List;
public class LoreChecker {
public static boolean itemLoreContains(ItemStack item, String content) {
if (item == null) return false;
ItemMeta meta = item.getItemMeta();
if (meta == null) return false;
List<String> lore = meta.getLore();
if (lore == null) return false;
return lore.toString().contains(content);
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ website: https://zxq5.dev
commands:
items:
description: create custom items from plugin
usage: /items <set name>
usage: /items <name>
permission: fantasysmp.admin
home: