diff --git a/src/main/java/io/github/dre2n/dungeonsxl/sign/DSignTypeDefault.java b/src/main/java/io/github/dre2n/dungeonsxl/sign/DSignTypeDefault.java
index f5e3e011..34e75364 100644
--- a/src/main/java/io/github/dre2n/dungeonsxl/sign/DSignTypeDefault.java
+++ b/src/main/java/io/github/dre2n/dungeonsxl/sign/DSignTypeDefault.java
@@ -29,6 +29,7 @@ public enum DSignTypeDefault implements DSignType {
CHUNK_UPDATER("ChunkUpdater", "chunkupdater", true, ChunkUpdaterSign.class),
CLASSES("Classes", "classes", true, ClassesSign.class),
COMMAND("CMD", "cmd", false, CommandSign.class),
+ DESTINATION("Destination", "warp", false, DestinationSign.class),
DROP("Drop", "drop", false, DropSign.class),
END("End", "end", false, EndSign.class),
EXTERNAL_MOB("ExternalMob", "mob", false, ExternalMobSign.class),
@@ -49,7 +50,8 @@ public enum DSignTypeDefault implements DSignType {
START("Start", "start", true, StartSign.class),
TELEPORT("Teleport", "teleport", false, TeleportSign.class),
TRIGGER("Trigger", "trigger", true, TriggerSign.class),
- WAVE("Wave", "wave", false, WaveSign.class);
+ WAVE("Wave", "wave", false, WaveSign.class),
+ WARP("Warp", "warp", false, WarpSign.class);
private String name;
private String buildPermission;
diff --git a/src/main/java/io/github/dre2n/dungeonsxl/sign/DestinationSign.java b/src/main/java/io/github/dre2n/dungeonsxl/sign/DestinationSign.java
new file mode 100644
index 00000000..d4c2e85c
--- /dev/null
+++ b/src/main/java/io/github/dre2n/dungeonsxl/sign/DestinationSign.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2012-2016 Frank Baumann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package io.github.dre2n.dungeonsxl.sign;
+
+import io.github.dre2n.dungeonsxl.world.GameWorld;
+import org.bukkit.Material;
+import org.bukkit.block.Sign;
+
+/**
+ * @author Frank Baumann, Milan Albrecht, Daniel Saukel
+ */
+public class DestinationSign extends DSign {
+
+ private DSignType type = DSignTypeDefault.DESTINATION;
+
+ private String id;
+
+ public DestinationSign(Sign sign, String[] lines, GameWorld gameWorld) {
+ super(sign, lines, gameWorld);
+ }
+
+ /* Getters and setters */
+ /**
+ * @return the ID
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the ID of the destination sign
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /* Actions */
+ @Override
+ public boolean check() {
+ return true;
+ }
+
+ @Override
+ public void onInit() {
+ id = lines[1];
+ getSign().getBlock().setType(Material.AIR);
+ }
+
+ @Override
+ public DSignType getType() {
+ return type;
+ }
+
+}
diff --git a/src/main/java/io/github/dre2n/dungeonsxl/sign/WarpSign.java b/src/main/java/io/github/dre2n/dungeonsxl/sign/WarpSign.java
new file mode 100644
index 00000000..41df166c
--- /dev/null
+++ b/src/main/java/io/github/dre2n/dungeonsxl/sign/WarpSign.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2012-2016 Frank Baumann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package io.github.dre2n.dungeonsxl.sign;
+
+import io.github.dre2n.dungeonsxl.trigger.InteractTrigger;
+import io.github.dre2n.dungeonsxl.world.GameWorld;
+import io.github.dre2n.itemsxl.util.commons.util.playerutil.PlayerUtil;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Sign;
+import org.bukkit.entity.Player;
+
+/**
+ * @author Frank Baumann, Milan Albrecht, Daniel Saukel
+ */
+public class WarpSign extends DSign {
+
+ private DSignType type = DSignTypeDefault.WARP;
+
+ private String destination;
+
+ public WarpSign(Sign sign, String[] lines, GameWorld gameWorld) {
+ super(sign, lines, gameWorld);
+ }
+
+ /**
+ * @return the destination sign
+ */
+ public DestinationSign getDestinationSign() {
+ for (DSign dSign : getGameWorld().getDSigns()) {
+ if (dSign.getType() == DSignTypeDefault.DESTINATION) {
+ if (((DestinationSign) dSign).getId().equals(destination)) {
+ return (DestinationSign) dSign;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @return the destination
+ */
+ public Location getDestination() {
+ if (getDestinationSign() != null) {
+ return getDestinationSign().getSign().getLocation();
+
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param id
+ * the ID of the destination sign
+ */
+ public void setDestination(String id) {
+ destination = id;
+ }
+
+ @Override
+ public boolean check() {
+ return true;
+ }
+
+ @Override
+ public void onInit() {
+ destination = lines[1];
+
+ if (!getTriggers().isEmpty()) {
+ getSign().getBlock().setType(Material.AIR);
+ return;
+ }
+
+ InteractTrigger trigger = InteractTrigger.getOrCreate(0, getSign().getBlock(), getGameWorld());
+ if (trigger != null) {
+ trigger.addListener(this);
+ addTrigger(trigger);
+ }
+
+ getSign().setLine(0, ChatColor.DARK_BLUE + "############");
+ getSign().setLine(1, ChatColor.DARK_GREEN + "Warp");
+ getSign().setLine(2, "");
+ getSign().setLine(3, ChatColor.DARK_BLUE + "############");
+ getSign().update();
+ }
+
+ @Override
+ public boolean onPlayerTrigger(Player player) {
+ PlayerUtil.secureTeleport(player, getDestination());
+ return true;
+ }
+
+ @Override
+ public DSignType getType() {
+ return type;
+ }
+
+}