remove orb soulbound (free transfer, no mint) + remove 10% knife drop on SWOON

This commit is contained in:
SashegDev
2026-09-25 19:38:37 +00:00
parent 53700b29ec
commit a86cc7689a
2 changed files with 4 additions and 74 deletions
@@ -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()) {
@@ -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);