use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.
the class ResCommands method onCommand.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!requirePlayer(sender))
return true;
Player player = player(sender);
User user = user(sender);
if (label.equalsIgnoreCase("res")) {
if (args.length == 0) {
sender.sendMessage(ChatColor.GRAY + "To create a residence, open the door");
sender.sendMessage(ChatColor.GRAY + "of the residence you would like to claim.");
sender.sendMessage(ChatColor.GRAY + "You have claimed " + ChatColor.RESET + resLoader.getAllResidencesOf(user).size() + "/" + DragonsResidences.MAX_RES_PER_USER + " allowed residences.");
sender.sendMessage(ChatColor.YELLOW + "/res mine");
sender.sendMessage(ChatColor.YELLOW + "/res exit");
sender.sendMessage(ChatColor.YELLOW + "/res delete <ID>");
} else if (args[0].equalsIgnoreCase("mine")) {
sender.sendMessage(ChatColor.GREEN + "Listing your residences:");
for (Residence res : resLoader.getAllResidencesOf(user)) {
Location door = res.getResPoint().getDoorLocation();
sender.sendMessage(ChatColor.DARK_GREEN + "#" + res.getId() + ChatColor.GRAY + " (" + res.getAccessLevel() + ")" + " (" + FloorLoader.fromWorld(door.getWorld()).getDisplayName() + " " + door.getBlockX() + ", " + door.getBlockZ() + ")");
}
} else if (args[0].equalsIgnoreCase("exit")) {
Document saved = user.getData().get("resExitTo", Document.class);
if (saved == null) {
sender.sendMessage(ChatColor.RED + "You're not in a residence right now!");
return true;
}
Location to = StorageUtil.docToLoc(saved);
player.teleport(to);
sender.sendMessage(ChatColor.GREEN + "Exited residence successfully.");
user.getStorageAccess().set("resExitTo", null);
} else if (args[0].equalsIgnoreCase("delete")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/res delete <ID>");
return true;
}
Integer id = parseInt(sender, args[1]);
if (id == null)
return true;
Residence res = resLoader.getResidenceById(id);
if (res == null) {
sender.sendMessage(ChatColor.RED + "Invalid residence ID! You can see your residences with /res mine");
return true;
}
if (res.isLocked()) {
sender.sendMessage(ChatColor.RED + "This residence has been locked by an administrator.");
return true;
}
if (!res.getOwner().getIdentifier().equals(user.getIdentifier())) {
sender.sendMessage(ChatColor.RED + "You do not own this residence! You can see your residences with /res mine");
return true;
}
resLoader.deleteResidence(id);
resPointLoader.updateResHologramOn(user, res.getResPoint());
if (player.getWorld().getName().equals("res_temp") && user.getData().getInteger("lastResId") == id) {
Document saved = user.getData().get("resExitTo", Document.class);
Location to = StorageUtil.docToLoc(saved);
player.teleport(to);
user.getStorageAccess().set("resExitTo", null);
}
sender.sendMessage(ChatColor.GREEN + "Deleted residence #" + id + " successfully.");
}
return true;
}
if (!requirePermission(sender, PermissionLevel.DEVELOPER))
return true;
if (label.equalsIgnoreCase("resadmin")) {
if (!requirePermission(sender, PermissionLevel.ADMIN))
return true;
// Res commands for admins
if (args.length == 0) {
sender.sendMessage(ChatColor.YELLOW + "/resadmin linkpoint <Name> <Price> <Display Name...>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin setprice <Name> <NewPrice>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin displayname <Name> <New Display Name...>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin delpoint <Name>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin listpoints");
sender.sendMessage(ChatColor.YELLOW + "/resadmin listowned <Player>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin [un]lock <ID>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin delete <ID>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin flag <ID> <Flag> <Value>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin goto <ID>");
sender.sendMessage(ChatColor.YELLOW + "/resadmin rebuild <ID>");
} else if (args[0].equalsIgnoreCase("linkpoint")) {
if (args.length < 3) {
sender.sendMessage(ChatColor.RED + "/resadmin linkpoint <Name> <Price> <Display Name...>");
return true;
}
Block target = player.getTargetBlock(null, 5);
if (target == null) {
sender.sendMessage(ChatColor.RED + "Please look at the door you want to link!");
return true;
}
if (!(target.getBlockData() instanceof Door)) {
sender.sendMessage(ChatColor.RED + "Please look at the " + ChatColor.ITALIC + "door " + ChatColor.RED + "you want to link!");
return true;
}
Door door = (Door) target.getBlockData();
if (door.getHalf() == Half.TOP) {
target = target.getRelative(BlockFace.DOWN);
}
resPointLoader.addResPoint(args[1], StringUtil.concatArgs(args, 3), Double.valueOf(args[2]), target.getLocation());
sender.sendMessage(ChatColor.GREEN + "Added res point successfully.");
} else if (args[0].equalsIgnoreCase("setprice")) {
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "/resadmin setprice <Name> <NewPrice>");
return true;
}
ResPoint resPoint = resPointLoader.getResPointByName(args[1]);
if (resPoint == null) {
sender.sendMessage(ChatColor.RED + "Invalid res point! /respoint listpoints");
return true;
}
resPoint.setPrice(Double.valueOf(args[2]));
sender.sendMessage(ChatColor.GREEN + "Updated res point price successfully.");
} else if (args[0].equalsIgnoreCase("displayname")) {
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "/resadmin displayname <Name> <New Display Name...>");
return true;
}
ResPoint resPoint = resPointLoader.getResPointByName(args[1]);
if (resPoint == null) {
sender.sendMessage(ChatColor.RED + "Invalid res point! /respoint listpoints");
return true;
}
resPoint.setDisplayName(StringUtil.concatArgs(args, 2));
sender.sendMessage(ChatColor.GREEN + "Updated res point display name successfully.");
} else if (args[0].equalsIgnoreCase("delpoint")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/reasdmin delpoint <Name>");
return true;
}
resPointLoader.deleteResPoint(args[1]);
sender.sendMessage(ChatColor.GREEN + "If a res point by this name existed, it has been deleted successfully.");
return true;
} else if (args[0].equalsIgnoreCase("listpoints")) {
sender.sendMessage(ChatColor.GREEN + "Listing all res points:");
for (ResPoint resPoint : resPointLoader.getAllResPoints()) {
sender.sendMessage(ChatColor.GRAY + "- " + resPoint.getName() + " - " + resPoint.getPrice() + " gold" + " (" + StringUtil.locToString(resPoint.getDoorLocation()) + ")");
if (!(resPoint.getDoorLocation().getBlock().getBlockData() instanceof Door)) {
sender.sendMessage(ChatColor.RED + " (Invalid: No door at that location!)");
}
}
} else if (args[0].equalsIgnoreCase("listowned")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/resadmin listowned <Player>");
return true;
}
sender.sendMessage(ChatColor.GREEN + "Listing residences owned by " + args[1] + ":");
for (Residence res : resLoader.getAllResidencesOf(GameObjectType.USER.<User, UserLoader>getLoader().loadObject(args[1]))) {
sender.sendMessage(ChatColor.DARK_GREEN + "#" + res.getId() + ChatColor.GRAY + ": " + res.getAccessLevel() + (res.isLocked() ? " (Locked)" : ""));
}
} else if (args[0].equalsIgnoreCase("lock") || args[0].equalsIgnoreCase("unlock")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/resadmin " + args[0].toLowerCase() + " <ID>");
return true;
}
Residence res = resLoader.getResidenceById(Integer.valueOf(args[1]));
if (res == null) {
sender.sendMessage(ChatColor.RED + "Invalid residence ID!");
return true;
}
res.setLocked(args[0].equalsIgnoreCase("lock"));
sender.sendMessage(ChatColor.GREEN + (args[0].equalsIgnoreCase("lock") ? "Locked" : "Unlocked") + " residence #" + args[1]);
} else if (args[0].equalsIgnoreCase("delete")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/resadmin delete <ID>");
return true;
}
Residence res = resLoader.getResidenceById(Integer.valueOf(args[1]));
if (res == null) {
sender.sendMessage(ChatColor.RED + "Invalid residence ID!");
return true;
}
resLoader.deleteResidence(res.getId());
sender.sendMessage(ChatColor.GREEN + "Deleted residence #" + args[1]);
} else if (args[0].equalsIgnoreCase("flag")) {
if (args.length < 3) {
sender.sendMessage(ChatColor.RED + "/resadmin flag <ID> <Flag> <Value>");
return true;
}
Residence res = resLoader.getResidenceById(Integer.valueOf(args[1]));
if (res == null) {
sender.sendMessage(ChatColor.RED + "Invalid residence ID!");
return true;
}
res.getProperties().append(args[2], args[3]);
res.save();
sender.sendMessage(ChatColor.GREEN + "Set flag " + args[2] + " to " + args[3] + " for residence #" + args[1]);
} else if (args[0].equalsIgnoreCase("goto")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/resadmin goto <ID>");
return true;
}
Residence res = resLoader.getResidenceById(Integer.valueOf(args[1]));
if (res == null) {
sender.sendMessage(ChatColor.RED + "Invalid residence ID!");
return true;
}
resLoader.goToResidence(user, res.getId(), true);
} else if (args[0].equalsIgnoreCase("rebuild")) {
if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "/resadmin rebuild <ID>");
return true;
}
int id = Integer.valueOf(args[1]);
Residence res = resLoader.getResidenceById(id);
if (res == null) {
sender.sendMessage(ChatColor.RED + "Invalid residence ID!");
return true;
}
resLoader.removeResidenceLocally(id);
resLoader.generateResidence(id);
sender.sendMessage(ChatColor.GREEN + "Rebuilt residence #" + id + " successfully.");
} else {
sender.sendMessage(ChatColor.RED + "/resadmin");
}
} else if (label.equalsIgnoreCase("testcontextualholograms")) {
for (ResPoint resPoint : resPointLoader.getAllResPoints()) {
resPointLoader.updateResHologramOn(user, resPoint);
}
} else if (label.equalsIgnoreCase("testschematic")) {
if (args[1].equalsIgnoreCase("good")) {
DragonsResidences.pasteSchematic(DragonsResidences.loadSchematic(args[0]), DragonsResidences.getEditSession(new BukkitWorld(player.getWorld())), player.getLocation());
} else if (args[1].equalsIgnoreCase("bad")) {
// DragonsResPlugin.pasteSchematic(args[0], DragonsResPlugin.getEditSession(new BukkitWorld(player.getWorld())), player.getLocation());
sender.sendMessage(ChatColor.RED + "No! Don't be bad");
sender.sendMessage(ChatColor.GREEN + "Be good instead ;)");
}
} else if (label.equalsIgnoreCase("restest")) {
// Test commands for devs
if (args.length == 0) {
sender.sendMessage("/restest new <ResPoint>");
sender.sendMessage("/restest go <ID>");
sender.sendMessage("/restest my");
sender.sendMessage("/restest whatsthatrespoint");
} else if (args[0].equalsIgnoreCase("new")) {
Residence res = resLoader.addResidence(user, resPointLoader.getResPointByName(args[1]), ResAccess.PRIVATE);
sender.sendMessage("Created new residence #" + res.getId());
} else if (args[0].equalsIgnoreCase("go")) {
Residence res = resLoader.getResidenceById(Integer.valueOf(args[1]));
if (res == null) {
sender.sendMessage("No residence by that ID exists! (highest ID=" + resPointLoader.getCurrentMaxId() + ")");
return true;
}
resLoader.goToResidence(user, res.getId(), true);
} else if (args[0].equalsIgnoreCase("my")) {
for (Residence res : resLoader.getAllResidencesOf(user)) {
sender.sendMessage("#" + res.getId() + " (owner=" + res.getOwner().getName() + ", access=" + res.getAccessLevel() + ")");
}
} else if (args[0].equalsIgnoreCase("whatsthatrespoint")) {
// bottom half only
Block target = player.getTargetBlock(null, 5);
if (target == null) {
sender.sendMessage("No target block");
return true;
}
sender.sendMessage("Target block is " + target.getType());
sender.sendMessage("Target block location is " + StringUtil.locToString(target.getLocation()));
ResPoint resPoint = resPointLoader.getResPointByDoorLocation(target.getLocation());
if (resPoint == null) {
sender.sendMessage("No res point here");
return true;
}
sender.sendMessage("Res point is " + resPoint.getName());
}
}
return true;
}
use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.
the class IWannaCompanionCommand method onCommand.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!requirePlayer(sender) || !requirePermission(sender, PermissionLevel.TESTER))
return true;
Player player = player(sender);
User user = user(sender);
if (user.getStorageAccess().get("companion") != null) {
sender.sendMessage("You already have a companion");
return true;
}
NPC companion = GameObjectType.NPC.<NPC, NPCLoader>getLoader().registerNew(player.getLocation(), "Companion-Kitty");
companion.getStorageAccess().set("companionOwner", user.getUUID());
user.getStorageAccess().set("companion", companion.getUUID());
sender.sendMessage("Spawned a companion (companion uuid: " + companion.getUUID() + ")");
return true;
}
use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.
the class TestCompanionCommand method onCommand.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!requirePlayer(sender) || !requirePermission(sender, PermissionLevel.GM))
return true;
Player player = player(sender);
User user = user(sender);
if (args.length == 0) {
sender.sendMessage("/testcompanion remove");
sender.sendMessage("/testcompanion create <class>");
sender.sendMessage("/testcompanion tphere");
sender.sendMessage("/testcompanion mine");
return true;
}
if (args[0].equalsIgnoreCase("create")) {
NPC companion = GameObjectType.getLoader(NPCLoader.class).registerNew(player.getLocation(), args[1]);
companion.getStorageAccess().set("companionOwner", user.getUUID());
user.getStorageAccess().set("companion", companion.getUUID());
return true;
}
UUID companionUUID = user.getStorageAccess().getDocument().get("companion", UUID.class);
if (companionUUID == null) {
sender.sendMessage("You don't have a companion");
return true;
}
NPC companion = GameObjectType.getLoader(NPCLoader.class).loadObject(companionUUID);
if (args[0].equalsIgnoreCase("mine")) {
sender.sendMessage("companionUUID=" + companionUUID);
sender.sendMessage("companion name=" + companion.getName());
sender.sendMessage("companion location=" + StringUtil.locToString(companion.getEntity().getLocation()));
} else if (args[0].equalsIgnoreCase("tphere")) {
companion.getEntity().teleport(player);
} else if (args[0].equalsIgnoreCase("remove")) {
user.getStorageAccess().set("companion", null);
companion.remove();
addon.getCompanions().remove(companion);
} else {
sender.sendMessage("I dont understandddddd");
}
return true;
}
use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.
the class SoulStealerAddon method initializeParts.
@Override
public void initializeParts(NPC npc) {
List<ArmorStand> souls = new ArrayList<>();
for (int i = 0; i < N_SOULS; i++) {
ArmorStand soul = newPart(npc);
soul.getEquipment().setHelmet(new ItemStack(Material.MAGMA_CREAM));
soul.setHeadPose(NPCUtil.randomRotation());
souls.add(soul);
}
capturedSouls.put(npc, souls);
attackRunnables.put(npc, new BukkitRunnable() {
@Override
public void run() {
User target = null;
for (Entity e : npc.getEntity().getNearbyEntities(10.0, 10.0, 10.0)) {
if (e instanceof Player) {
target = UserLoader.fromPlayer((Player) e);
break;
}
}
if (target == null)
return;
final User fTarget = target;
if (!(target instanceof User))
return;
ArmorStand soul = (ArmorStand) npc.getEntity().getWorld().spawnEntity(npc.getEntity().getLocation(), EntityType.ARMOR_STAND);
if (target.getPlayer().getWorld() != soul.getWorld()) {
this.cancel();
return;
}
soul.setMetadata("allow", new FixedMetadataValue(JavaPlugin.getPlugin(DragonsNPCAddons.class), true));
soul.getEquipment().setHelmet(new ItemStack(Material.MAGMA_CREAM));
soul.setHeadPose(NPCUtil.randomRotation());
soul.setVisible(false);
Vector move = target.getPlayer().getLocation().subtract(soul.getLocation()).toVector().normalize().multiply(0.7);
new BukkitRunnable() {
private int i = 0;
@Override
public void run() {
if (fTarget.getPlayer().getWorld() != soul.getWorld()) {
this.cancel();
soul.remove();
return;
}
Location to = soul.getLocation();
if (soul.isDead() || !soul.isValid()) {
this.cancel();
soul.remove();
return;
}
try {
to.add(move);
to.checkFinite();
soul.teleport(to);
} catch (Exception e) {
this.cancel();
soul.remove();
return;
}
if (soul.getLocation().distanceSquared(fTarget.getPlayer().getLocation()) < 1.0) {
this.cancel();
soul.remove();
fTarget.getPlayer().damage(5.0, npc.getEntity());
}
i++;
if (i > 250) {
this.cancel();
soul.remove();
}
}
}.runTaskTimer(dragons, 0L, 2L);
}
});
attackRunnables.get(npc).runTaskTimer(dragons, 0L, 20L * 5);
}
use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.
the class BlockCommands method onCommand.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
boolean block = label.equalsIgnoreCase("block");
String action = block ? "block" : "unblock";
User user = user(sender);
if (label.equalsIgnoreCase("toggleselfblock")) {
toggleSelfBlock(sender);
return true;
}
if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Specify a player to " + action + "! /" + label + " <Player>");
List<User> blockedUsers = user.getBlockedUsers();
if (!block && blockedUsers.size() > 0) {
sender.sendMessage(ChatColor.GRAY + "Click a user below to unblock them:");
for (User blocked : blockedUsers) {
sender.spigot().sendMessage(StringUtil.clickableHoverableText(ChatColor.GRAY + "- " + ChatColor.RESET + blocked.getName(), "/unblock " + blocked.getName(), "Click to un-block " + blocked.getName()));
}
}
return true;
}
User target = lookupUser(sender, args[0]);
if (target == null)
return true;
if (target.equals(user) && !user.getLocalData().getBoolean("canSelfBlock", false)) {
sender.sendMessage(ChatColor.RED + "You can't block yourself!");
return true;
}
if (user.getBlockedUsers().contains(target) == block) {
sender.sendMessage(ChatColor.RED + (block ? "You have already blocked " : "You have not blocked ") + target.getName() + "!");
return true;
}
doBlock(sender, user, target, block);
return true;
}
Aggregations