@Subscribe public void onChat(PlayerChatEvent event) { final Player player = event.getEntity(); final String world = player.getWorld().getName(); if (!PS.get().isPlotWorld(world)) { return; } final PlotWorld plotworld = PS.get().getPlotWorld(world); final PlotPlayer plr = SpongeUtil.getPlayer(player); if (!plotworld.PLOT_CHAT && (plr.getMeta("chat") == null || !(Boolean) plr.getMeta("chat"))) { return; } final Location loc = SpongeUtil.getLocation(player); final Plot plot = MainUtil.getPlot(loc); if (plot == null) { return; } Text message = event.getUnformattedMessage(); // TODO use display name rather than username // - Getting displayname currently causes NPE, so wait until sponge fixes that String sender = player.getName(); PlotId id = plot.id; String newMessage = StringMan.replaceAll( C.PLOT_CHAT_FORMAT.s(), "%plot_id%", id.x + ";" + id.y, "%sender%", sender); Text forcedMessage = event.getMessage(); // String forcedMessage = StringMan.replaceAll(C.PLOT_CHAT_FORCED.s(), "%plot_id%", id.x // + ";" + id.y, "%sender%", sender); for (PlotPlayer user : UUIDHandler.getPlayers().values()) { String toSend; if (plot.equals(MainUtil.getPlot(user.getLocation()))) { toSend = newMessage; } else if (Permissions.hasPermission(user, C.PERMISSION_COMMANDS_CHAT)) { ((SpongePlayer) user).player.sendMessage(forcedMessage); continue; } else { continue; } String[] split = (toSend + " ").split("%msg%"); List<Text> components = new ArrayList<>(); Text prefix = null; for (String part : split) { if (prefix != null) { components.add(prefix); } else { prefix = message; } components.add(Texts.of(part)); } ((SpongePlayer) user).player.sendMessage(Texts.join(components)); } event.setNewMessage(Texts.of()); event.setCancelled(true); }
public void displaySaves(final PlotPlayer player, final int page) { final List<String> schematics = (List<String>) player.getMeta("plot_schematics"); for (int i = 0; i < Math.min(schematics.size(), 32); i++) { try { final String schem = schematics.get(i); final String[] split = schem.split("_"); if (split.length != 6) { continue; } final String time = secToTime((System.currentTimeMillis() / 1000) - (Long.parseLong(split[0]))); final String world = split[1]; final PlotId id = PlotId.fromString(split[2] + ";" + split[3]); final String size = split[4]; final String server = split[5].replaceAll(".schematic", ""); String color; if (PS.get().IMP.getServerName().replaceAll("[^A-Za-z0-9]", "").equals(server)) { color = "$4"; } else { color = "$1"; } MainUtil.sendMessage( player, "$3[$2" + (i + 1) + "$3] " + color + time + "$3 | " + color + world + ";" + id + "$3 | " + color + size + "x" + size); } catch (final Exception e) { e.printStackTrace(); } } MainUtil.sendMessage(player, C.LOAD_LIST); }
@Override public boolean onCommand(final PlotPlayer plr, final String[] args) { if (!Settings.METRICS) { MainUtil.sendMessage( plr, "&cPlease enable metrics in order to use this command.\n&7 - Or host it yourself if you don't like the free service"); return false; } final String world = plr.getLocation().getWorld(); if (!PS.get().isPlotWorld(world)) { return !sendMessage(plr, C.NOT_IN_PLOT_WORLD); } final Plot plot = MainUtil.getPlot(plr.getLocation()); if (plot == null) { return !sendMessage(plr, C.NOT_IN_PLOT); } if (!plot.hasOwner()) { MainUtil.sendMessage(plr, C.PLOT_UNOWNED); return false; } if (!plot.isOwner(plr.getUUID()) && !Permissions.hasPermission(plr, "plots.admin.command.load")) { MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return false; } if (MainUtil.runners.containsKey(plot)) { MainUtil.sendMessage(plr, C.WAIT_FOR_TIMER); return false; } if (args.length != 0) { if (args.length == 1) { // TODO load save here final List<String> schematics = (List<String>) plr.getMeta("plot_schematics"); if (schematics == null) { // No schematics found: MainUtil.sendMessage(plr, C.LOAD_NULL); return false; } String schem; try { schem = schematics.get(Integer.parseInt(args[0]) - 1); } catch (final Exception e) { // use /plot load <index> MainUtil.sendMessage(plr, C.NOT_VALID_NUMBER, "(1, " + schematics.size() + ")"); return false; } final URL url; try { url = new URL(Settings.WEB_URL + "saves/" + plr.getUUID() + "/" + schem + ".schematic"); } catch (final MalformedURLException e) { e.printStackTrace(); MainUtil.sendMessage(plr, C.LOAD_FAILED); return false; } MainUtil.runners.put(plot, 1); MainUtil.sendMessage(plr, C.GENERATING_COMPONENT); TaskManager.runTaskAsync( new Runnable() { @Override public void run() { final Schematic schematic = SchematicHandler.manager.getSchematic(url); if (schematic == null) { MainUtil.runners.remove(plot); sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent or not in gzip format"); return; } SchematicHandler.manager.paste( schematic, plot, 0, 0, new RunnableVal<Boolean>() { @Override public void run() { MainUtil.runners.remove(plot); if (value) { sendMessage(plr, C.SCHEMATIC_PASTE_SUCCESS); } else { sendMessage(plr, C.SCHEMATIC_PASTE_FAILED); } } }); } }); return true; } MainUtil.runners.remove(plot); MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot load <index>"); return false; } // list schematics final List<String> schematics = (List<String>) plr.getMeta("plot_schematics"); if (schematics == null) { MainUtil.runners.put(plot, 1); TaskManager.runTaskAsync( new Runnable() { @Override public void run() { final List<String> schematics = SchematicHandler.manager.getSaves(plr.getUUID()); MainUtil.runners.remove(plot); if ((schematics == null) || (schematics.size() == 0)) { MainUtil.sendMessage(plr, C.LOAD_FAILED); return; } plr.setMeta("plot_schematics", schematics); displaySaves(plr, 0); } }); } else { displaySaves(plr, 0); } return true; }
public static boolean plotEntry(final PlotPlayer pp, final Plot plot) { if (plot.isDenied(pp.getUUID()) && !Permissions.hasPermission(pp, "plots.admin.entry.denied")) { return false; } Plot last = pp.getMeta("lastplot"); if ((last != null) && !last.getId().equals(plot.getId())) { plotExit(pp, last); } if (ExpireManager.IMP != null) { ExpireManager.IMP.handleEntry(pp, plot); } pp.setMeta("lastplot", plot); EventUtil.manager.callEntry(pp, plot); if (plot.hasOwner()) { HashMap<String, Flag> flags = FlagManager.getPlotFlags(plot); int size = flags.size(); boolean titles = Settings.TITLES; final String greeting; if (size != 0) { Flag titleFlag = flags.get("titles"); if (titleFlag != null) { titles = (Boolean) titleFlag.getValue(); } Flag greetingFlag = flags.get("greeting"); if (greetingFlag != null) { greeting = (String) greetingFlag.getValue(); MainUtil.format( C.PREFIX_GREETING.s() + greeting, plot, pp, false, new RunnableVal<String>() { @Override public void run(String value) { MainUtil.sendMessage(pp, value); } }); } else { greeting = ""; } Flag enter = flags.get("notify-enter"); if (enter != null && (Boolean) enter.getValue()) { if (!Permissions.hasPermission(pp, "plots.flag.notify-enter.bypass")) { for (UUID uuid : plot.getOwners()) { PlotPlayer owner = UUIDHandler.getPlayer(uuid); if (owner != null && !owner.getUUID().equals(pp.getUUID())) { MainUtil.sendMessage( owner, C.NOTIFY_ENTER .s() .replace("%player", pp.getName()) .replace("%plot", plot.getId().toString())); } } } } Flag gamemodeFlag = flags.get("gamemode"); if (gamemodeFlag != null) { if (pp.getGameMode() != gamemodeFlag.getValue()) { if (!Permissions.hasPermission(pp, "plots.gamemode.bypass")) { pp.setGameMode((PlotGameMode) gamemodeFlag.getValue()); } else { MainUtil.sendMessage( pp, StringMan.replaceAll( C.GAMEMODE_WAS_BYPASSED.s(), "{plot}", plot.getId(), "{gamemode}", gamemodeFlag.getValue())); } } } Flag flyFlag = flags.get("fly"); if (flyFlag != null) { pp.setFlight((boolean) flyFlag.getValue()); } Flag timeFlag = flags.get("time"); if (timeFlag != null) { try { long time = (long) timeFlag.getValue(); pp.setTime(time); } catch (Exception e) { FlagManager.removePlotFlag(plot, "time"); } } Flag weatherFlag = flags.get("weather"); if (weatherFlag != null) { pp.setWeather((PlotWeather) weatherFlag.getValue()); } Flag musicFlag = flags.get("music"); if (musicFlag != null) { Integer id = (Integer) musicFlag.getValue(); if ((id >= 2256 && id <= 2267) || (id == 0)) { Location loc = pp.getLocation(); Location lastLoc = pp.getMeta("music"); if (lastLoc != null) { pp.playMusic(lastLoc, 0); if (id == 0) { pp.deleteMeta("music"); } } if (id != 0) { try { pp.setMeta("music", loc); pp.playMusic(loc, id); } catch (Exception ignored) { } } } } else { Location lastLoc = pp.getMeta("music"); if (lastLoc != null) { pp.deleteMeta("music"); pp.playMusic(lastLoc, 0); } } CommentManager.sendTitle(pp, plot); } else if (titles) { greeting = ""; } else { return true; } if (titles) { if (!C.TITLE_ENTERED_PLOT.s().isEmpty() || !C.TITLE_ENTERED_PLOT_SUB.s().isEmpty()) { TaskManager.runTaskLaterAsync( new Runnable() { @Override public void run() { Plot lastPlot = pp.getMeta("lastplot"); if ((lastPlot != null) && plot.getId().equals(lastPlot.getId())) { Map<String, String> replacements = new HashMap<>(); replacements.put("%x%", lastPlot.getId().x + ""); replacements.put("%z%", lastPlot.getId().y + ""); replacements.put("%world%", plot.getArea().toString()); replacements.put("%greeting%", greeting); replacements.put("%alias", plot.toString()); replacements.put("%s", MainUtil.getName(plot.owner)); String main = StringMan.replaceFromMap(C.TITLE_ENTERED_PLOT.s(), replacements); String sub = StringMan.replaceFromMap(C.TITLE_ENTERED_PLOT_SUB.s(), replacements); AbstractTitle.sendTitle(pp, main, sub); } } }, 20); } } return true; } return true; }
public static boolean plotExit(final PlotPlayer pp, Plot plot) { pp.deleteMeta("lastplot"); EventUtil.manager.callLeave(pp, plot); if (plot.hasOwner()) { PlotArea pw = plot.getArea(); if (pw == null) { return true; } if (FlagManager.getPlotFlagRaw(plot, "gamemode") != null) { if (pp.getGameMode() != pw.GAMEMODE) { if (!Permissions.hasPermission(pp, "plots.gamemode.bypass")) { pp.setGameMode(pw.GAMEMODE); } else { MainUtil.sendMessage( pp, StringMan.replaceAll( C.GAMEMODE_WAS_BYPASSED.s(), "{plot}", plot.toString(), "{gamemode}", pw.GAMEMODE.name().toLowerCase())); } } } Flag farewell = FlagManager.getPlotFlagRaw(plot, "farewell"); if (farewell != null) { MainUtil.format( C.PREFIX_FAREWELL.s() + farewell.getValueString(), plot, pp, false, new RunnableVal<String>() { @Override public void run(String value) { MainUtil.sendMessage(pp, value); } }); } Flag leave = FlagManager.getPlotFlagRaw(plot, "notify-leave"); if ((leave != null) && (Boolean) leave.getValue()) { if (!Permissions.hasPermission(pp, "plots.flag.notify-enter.bypass")) { for (UUID uuid : plot.getOwners()) { PlotPlayer owner = UUIDHandler.getPlayer(uuid); if ((owner != null) && !owner.getUUID().equals(pp.getUUID())) { MainUtil.sendMessage( pp, C.NOTIFY_LEAVE .s() .replace("%player", pp.getName()) .replace("%plot", plot.getId().toString())); } } } } if (FlagManager.getPlotFlagRaw(plot, "fly") != null) { PlotGameMode gamemode = pp.getGameMode(); if (gamemode == PlotGameMode.SURVIVAL || (gamemode == PlotGameMode.ADVENTURE)) { pp.setFlight(false); } } if (FlagManager.getPlotFlagRaw(plot, "time") != null) { pp.setTime(Long.MAX_VALUE); } if (FlagManager.getPlotFlagRaw(plot, "weather") != null) { pp.setWeather(PlotWeather.RESET); } Location lastLoc = pp.getMeta("music"); if (lastLoc != null) { pp.deleteMeta("music"); pp.playMusic(lastLoc, 0); } } return true; }
@Subscribe public void onWorldChange(EntityTeleportEvent event) { Entity entity = event.getEntity(); if (entity instanceof Player) { org.spongepowered.api.world.Location from = event.getOldLocation(); org.spongepowered.api.world.Location to = event.getNewLocation(); int x2; if (getInt(from.getX()) != (x2 = getInt(to.getX()))) { Player player = (Player) entity; PlotPlayer pp = SpongeUtil.getPlayer(player); Extent extent = to.getExtent(); if (!(extent instanceof World)) { pp.deleteMeta("location"); return; } pp.setMeta("location", SpongeUtil.getLocation(player)); World world = (World) extent; String worldname = ((World) extent).getName(); PlotWorld plotworld = PS.get().getPlotWorld(worldname); if (plotworld == null) { return; } PlotManager plotManager = PS.get().getPlotManager(worldname); PlotId id = plotManager.getPlotId(plotworld, x2, 0, getInt(to.getZ())); Plot lastPlot = (Plot) pp.getMeta("lastplot"); if (id == null) { if (lastPlot == null) { return; } if (!PlotListener.plotExit(pp, lastPlot)) { MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_EXIT_DENIED); if (lastPlot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) { event.setNewLocation(from); } else { event.setNewLocation(world.getSpawnLocation()); } return; } } else if (lastPlot != null && id.equals(lastPlot.id)) { return; } else { Plot plot = MainUtil.getPlot(worldname, id); if (!PlotListener.plotEntry(pp, plot)) { MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED); if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) { event.setNewLocation(from); } else { event.setNewLocation(world.getSpawnLocation()); } return; } } Integer border = MainUtil.worldBorder.get(worldname); if (border != null) { if (x2 > border) { Vector3d pos = to.getPosition(); to = to.setPosition(new Vector3d(border - 4, pos.getY(), pos.getZ())); event.setNewLocation(to); MainUtil.sendMessage(pp, C.BORDER); } else if (x2 < -border) { Vector3d pos = to.getPosition(); to = to.setPosition(new Vector3d(-border + 4, pos.getY(), pos.getZ())); event.setNewLocation(to); MainUtil.sendMessage(pp, C.BORDER); } } return; } int z2; if (getInt(from.getZ()) != (z2 = getInt(to.getZ()))) { Player player = (Player) entity; PlotPlayer pp = SpongeUtil.getPlayer(player); Extent extent = to.getExtent(); if (!(extent instanceof World)) { pp.deleteMeta("location"); return; } pp.setMeta("location", SpongeUtil.getLocation(player)); World world = (World) extent; String worldname = ((World) extent).getName(); PlotWorld plotworld = PS.get().getPlotWorld(worldname); if (plotworld == null) { return; } PlotManager plotManager = PS.get().getPlotManager(worldname); PlotId id = plotManager.getPlotId(plotworld, x2, 0, z2); Plot lastPlot = (Plot) pp.getMeta("lastplot"); if (id == null) { if (lastPlot == null) { return; } if (!PlotListener.plotExit(pp, lastPlot)) { MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_EXIT_DENIED); if (lastPlot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) { event.setNewLocation(from); } else { event.setNewLocation(player.getWorld().getSpawnLocation()); } return; } } else if (lastPlot != null && id.equals(lastPlot.id)) { return; } else { Plot plot = MainUtil.getPlot(worldname, id); if (!PlotListener.plotEntry(pp, plot)) { MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED); if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) { event.setNewLocation(from); } else { event.setNewLocation(player.getWorld().getSpawnLocation()); } return; } } Integer border = MainUtil.worldBorder.get(worldname); if (border != null) { if (z2 > border) { Vector3d pos = to.getPosition(); to = to.setPosition(new Vector3d(pos.getX(), pos.getY(), border - 4)); event.setNewLocation(to); MainUtil.sendMessage(pp, C.BORDER); } else if (z2 < -border) { Vector3d pos = to.getPosition(); to = to.setPosition(new Vector3d(pos.getX(), pos.getY(), -border + 4)); event.setNewLocation(to); MainUtil.sendMessage(pp, C.BORDER); } } } } }