Beispiel #1
0
  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);
  }
Beispiel #2
0
  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);
    }
  }
Beispiel #3
0
  @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);
    }
  }