public void save() { Multimap<String, Multimap<String, String>> sections = LinkedListMultimap.create(); for (Entry<Location, TrackedSign> entry : trackedSigns.entrySet()) { final TrackedSign trackedSign = entry.getValue(); sections.put("sign", trackedSign.save()); } Ini.save(plugin.getConfigFileName("signs.txt"), sections); }
public void load() { trackedSigns.clear(); final Multimap<String, Multimap<String, String>> sections = Ini.load(plugin.getConfigFileName("signs.txt")); if (sections == null) return; for (Multimap<String, String> section : sections.get("sign")) { final TrackedSign trackedSign = new TrackedSign(section); trackedSigns.put(trackedSign.getLocation(), trackedSign); } }
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerRightClickBlock(Event event) { final Location location = event.getLocation(); final BlockState blockState = location.getBlockState(); if (!(blockState instanceof Sign)) return; // We only want signs TrackedSign trackedSign = trackedSigns.get(location); if (trackedSign == null) return; // We only want tracked signs final Player player = event.getPlayer(); final Location eyeLocation = player.getEyeLocation(); final SignShape shape = new SignShape(location); final SignTraceResult trace = shape.trace(eyeLocation); final int index = trace.index; if (index < 0 || index >= 4) return; // We only want valid indexes if (!trackedSign.hasEntry(index)) return; // We only want indexes for which the sign has a tracked entry final SignSession session = getOrCreateSession(player); if (session.isSelected(trackedSign, index)) { session.close(); final String routeName = trackedSign.getEntry(index); try { plugin.travelAgency.addTravellerWithMount( routeName, player, MobType.ENDER_DRAGON, "travel.sign", plugin.config.travelSignMaxDistance); player.sendMessage("Travelling on route '" + routeName + "'."); } catch (CommandException e) { player.sendMessage(e.getMessage()); } } else { session.select(trackedSign, index); } }