remove orb soulbound (free transfer, no mint) + remove 10% knife drop on SWOON
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user