From a86cc7689a291adc445dea76125c05104f12ac8c Mon Sep 17 00:00:00 2001 From: SashegDev Date: Fri, 25 Sep 2026 19:38:37 +0000 Subject: [PATCH] remove orb soulbound (free transfer, no mint) + remove 10% knife drop on SWOON --- .../sashegdev/blackknife/MagicListener.java | 77 +------------------ .../me/sashegdev/blackknife/SwoonHandler.java | 1 - 2 files changed, 4 insertions(+), 74 deletions(-) diff --git a/src/main/java/me/sashegdev/blackknife/MagicListener.java b/src/main/java/me/sashegdev/blackknife/MagicListener.java index d03f70d..5f35e5e 100644 --- a/src/main/java/me/sashegdev/blackknife/MagicListener.java +++ b/src/main/java/me/sashegdev/blackknife/MagicListener.java @@ -16,7 +16,6 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.persistence.PersistentDataType; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.HashMap; @@ -48,76 +47,9 @@ public class MagicListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent e) { - Player p = e.getPlayer(); - if (hasAnyBlackKnife(p)) return; - MagicProfile prof = mgr.getOrCreate(p); - if (!prof.awakened) return; - boolean hasMagic = false; - for (ItemStack it : p.getInventory().getContents()) if (MagicItem.is(it)) { hasMagic = true; break; } - if (!hasMagic) { - p.getInventory().addItem(MagicItem.create(prof)); - p.sendMessage("§d[Магия] §7Твой Magic Orb вернулся!"); - } - } - - private boolean hasAnyBlackKnife(Player p) { - for (ItemStack it : p.getInventory().getContents()) if (BlackKnifeItem.is(it)) return true; - return BlackKnifeItem.is(p.getInventory().getItemInMainHand()) || BlackKnifeItem.is(p.getInventory().getItemInOffHand()); - } - - @EventHandler - public void onDrop(org.bukkit.event.player.PlayerDropItemEvent e) { - if (!MagicItem.is(e.getItemDrop().getItemStack())) return; - } - - @EventHandler - public void onPickup(org.bukkit.event.entity.EntityPickupItemEvent e) { - if (!(e.getEntity() instanceof Player picker)) return; - ItemStack item = e.getItem().getItemStack(); - if (!MagicItem.is(item)) return; - String ownerStr = item.getItemMeta().getPersistentDataContainer().get(MagicItem.OWNER, PersistentDataType.STRING); - if (ownerStr == null) return; - if (ownerStr.equals(picker.getUniqueId().toString())) return; - e.setCancelled(true); - Player owner = plugin.getServer().getPlayer(UUID.fromString(ownerStr)); - if (owner != null && owner.isOnline()) { - owner.getInventory().addItem(MagicItem.create(mgr.getOrCreate(owner))); - owner.sendMessage("§d[Магия] §7Твой Orb пытались подобрать, он вернулся!"); - picker.sendMessage("§cЧужой Magic Orb вернулся владельцу!"); - } else { - e.getItem().remove(); - picker.sendMessage("§cЧужой Magic Orb исчез (владелец оффлайн)!"); - } - } - - @EventHandler - public void onDespawn(org.bukkit.event.entity.ItemDespawnEvent e) { - ItemStack item = e.getEntity().getItemStack(); - if (!MagicItem.is(item)) return; - String ownerStr = item.getItemMeta().getPersistentDataContainer().get(MagicItem.OWNER, PersistentDataType.STRING); - if (ownerStr == null) return; - try { - UUID ownerId = UUID.fromString(ownerStr); - MagicProfile prof = mgr.get(ownerId); - if (prof != null && prof.awakened) { - Player owner = plugin.getServer().getPlayer(ownerId); - if (owner != null && owner.isOnline()) { - plugin.getServer().getScheduler().runTask(plugin, () -> owner.getInventory().addItem(MagicItem.create(prof))); - } - } - } catch (Exception ignored) {} - } - - @EventHandler - public void onInventoryClick(org.bukkit.event.inventory.InventoryClickEvent e) { - if (!(e.getWhoClicked() instanceof Player p)) return; - ItemStack item = e.getCurrentItem(); - if (!MagicItem.is(item)) return; - String ownerStr = item.getItemMeta().getPersistentDataContainer().get(MagicItem.OWNER, PersistentDataType.STRING); - if (ownerStr != null && !ownerStr.equals(p.getUniqueId().toString())) { - e.setCancelled(true); - p.sendMessage("§cЧужой Magic Orb нельзя трогать!"); - } + // Орбы свободно передаются между игроками: никакой автовыдачи, + // иначе отданный орб + релог = бесконечный минт. + mgr.getOrCreate(e.getPlayer()); } @EventHandler @@ -126,8 +58,7 @@ public class MagicListener implements Listener { if (!MagicItem.is(item)) return; Player p = e.getPlayer(); if (BlackKnifeItem.is(p.getInventory().getItemInMainHand()) || BlackKnifeItem.is(p.getInventory().getItemInOffHand())) { p.sendActionBar(Component.text("Can't use Magic with BlackKnife!").color(NamedTextColor.RED)); return; } - String ownerStr = item.getItemMeta().getPersistentDataContainer().get(MagicItem.OWNER, PersistentDataType.STRING); - if (ownerStr != null && !ownerStr.equals(p.getUniqueId().toString())) { p.sendActionBar(Component.text("Not your Magic Orb!").color(NamedTextColor.RED)); return; } + // Орб не привязан к создателю: кастует тот, кто держит, со своим профилем. MagicProfile prof = mgr.getOrCreate(p); if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { if (p.isSneaking()) { diff --git a/src/main/java/me/sashegdev/blackknife/SwoonHandler.java b/src/main/java/me/sashegdev/blackknife/SwoonHandler.java index 83541fa..43ebcfb 100644 --- a/src/main/java/me/sashegdev/blackknife/SwoonHandler.java +++ b/src/main/java/me/sashegdev/blackknife/SwoonHandler.java @@ -67,7 +67,6 @@ public class SwoonHandler implements Listener { tp.sendActionBar(Component.text("SWOONED! -999 HP regen to revive").color(NamedTextColor.DARK_RED)); tp.getWorld().playSound(tp.getLocation(), Sound.ENTITY_WARDEN_SONIC_BOOM, 1f, 0.5f); tp.getWorld().playSound(tp.getLocation(), Sound.ENTITY_ELDER_GUARDIAN_CURSE, 1f, 0.7f); - if (Math.random() < 0.1) tp.getWorld().dropItemNaturally(tp.getLocation(), BlackKnifeItem.create()); startDisplayTask(tp); } else { target.getPersistentDataContainer().set(MAGIC_DAMAGE, PersistentDataType.BYTE, (byte) 1);