diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java index fff6e75..680d049 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -14,6 +14,7 @@ import org.bukkit.GameRule; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.block.Block; @@ -28,8 +29,12 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.vehicle.VehicleDamageEvent; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; import org.spigotmc.event.entity.EntityMountEvent; import java.util.ArrayList; @@ -52,6 +57,8 @@ private int taskId = -1; + private static final NamespacedKey UUIDKey = new NamespacedKey(Challenges.getPlugin(), "uuid_deathrun"); + @EventHandler public void onMove(PlayerMoveEvent e) { Player p = e.getPlayer(); @@ -173,9 +180,10 @@ @EventHandler public void onBoatMount(EntityMountEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrun")) { - if (e.getMount() instanceof Boat boat) { - if (!boat.getPassengers().isEmpty()) { - ChatUtil.sendErrorMessage(e.getEntity(), "Man kann nur alleine in einem Boot fahren."); + if (e.getMount() instanceof Boat boat && e.getEntity() instanceof Player player) { + PersistentDataContainer container = boat.getPersistentDataContainer(); + if (container.get(UUIDKey, PersistentDataType.STRING) != null && !container.get(UUIDKey, PersistentDataType.STRING).equals(player.getUniqueId().toString())) { + ChatUtil.sendWarningMessage(player, "Du kannst nur in deine eigenen Boote einsteigen."); e.setCancelled(true); } } @@ -185,7 +193,34 @@ @EventHandler public void onVehiclePlace(EntityPlaceEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrun")) { - //TODO + if (e.getEntity() instanceof Boat boat) { + if (e.getPlayer() != null) { + PersistentDataContainer container = boat.getPersistentDataContainer(); + container.set(UUIDKey, PersistentDataType.STRING, e.getPlayer().getUniqueId().toString()); + } + } + } + } + + @EventHandler + public void onBoatBreak(VehicleDamageEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (e.getVehicle() instanceof Boat boat && e.getAttacker() instanceof Player player) { + PersistentDataContainer container = boat.getPersistentDataContainer(); + if (container.get(UUIDKey, PersistentDataType.STRING) != null && !container.get(UUIDKey, PersistentDataType.STRING).equals(player.getUniqueId().toString())) { + ChatUtil.sendWarningMessage(player, "Du kannst nur deine eignen Boote zerstören."); + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + if (deadPlayer.contains(e.getPlayer().getUniqueId())) { + e.getPlayer().setScoreboard(plugin.getSBManager().getScoreboard()); + } } }