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.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -48,76 +47,9 @@ public class MagicListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onJoin(PlayerJoinEvent e) {
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
Player p = e.getPlayer();
|
// Орбы свободно передаются между игроками: никакой автовыдачи,
|
||||||
if (hasAnyBlackKnife(p)) return;
|
// иначе отданный орб + релог = бесконечный минт.
|
||||||
MagicProfile prof = mgr.getOrCreate(p);
|
mgr.getOrCreate(e.getPlayer());
|
||||||
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 нельзя трогать!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -126,8 +58,7 @@ public class MagicListener implements Listener {
|
|||||||
if (!MagicItem.is(item)) return;
|
if (!MagicItem.is(item)) return;
|
||||||
Player p = e.getPlayer();
|
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; }
|
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);
|
MagicProfile prof = mgr.getOrCreate(p);
|
||||||
if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||||
if (p.isSneaking()) {
|
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.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_WARDEN_SONIC_BOOM, 1f, 0.5f);
|
||||||
tp.getWorld().playSound(tp.getLocation(), Sound.ENTITY_ELDER_GUARDIAN_CURSE, 1f, 0.7f);
|
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);
|
startDisplayTask(tp);
|
||||||
} else {
|
} else {
|
||||||
target.getPersistentDataContainer().set(MAGIC_DAMAGE, PersistentDataType.BYTE, (byte) 1);
|
target.getPersistentDataContainer().set(MAGIC_DAMAGE, PersistentDataType.BYTE, (byte) 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user