Player Seat #3
@ -1,8 +1,26 @@
|
||||
/*
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2021 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.lobby.listener;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import de.steamwar.lobby.LobbySystem;
|
||||
import org.bukkit.*;
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Hierfür wird keine eigene Klasse benötigt, Location/Block reicht vollkommen aus. Hierfür wird keine eigene Klasse benötigt, Location/Block reicht vollkommen aus.
|
||||
import org.bukkit.block.data.Bisected;
|
||||
import org.bukkit.block.data.type.Stairs;
|
||||
import org.bukkit.entity.AbstractArrow;
|
||||
@ -12,45 +30,29 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.spigotmc.event.entity.EntityDismountEvent;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class PlayerSeatListener extends BasicListener{
|
||||
|
||||
private static class SeatLocation {
|
||||
public static final World world = Bukkit.getWorlds().get(0);
|
||||
|
||||
private int x;
|
||||
private int y;
|
||||
private int z;
|
||||
|
||||
public SeatLocation(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof SeatLocation)) return false;
|
||||
SeatLocation that = (SeatLocation) o;
|
||||
return x == that.x &&
|
||||
y == that.y &&
|
||||
z == that.z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(x, y, z);
|
||||
}
|
||||
private Set<Location> seats = new HashSet<>();
|
||||
|
||||
static {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for(Arrow arrow : world.getEntitiesByClass(Arrow.class)) {
|
||||
arrow.setTicksLived(1);
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(LobbySystem.getPlugin(), 20*60,20*60);
|
||||
}
|
||||
|
||||
private Set<SeatLocation> seats = new HashSet<>();
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
|
||||
@ -75,7 +77,7 @@ public class PlayerSeatListener extends BasicListener{
|
||||
return;
|
||||
|
||||
Location location = event.getClickedBlock().getLocation();
|
||||
SeatLocation seatLocation = getSeatLocation(location);
|
||||
Location seatLocation = getSeatLocation(location);
|
||||
if (seats.contains(seatLocation))
|
||||
return;
|
||||
seats.add(seatLocation);
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Lixfel
hat
ggf. hier nochmal mit der Lebenszeit des Arrows schauen, das war bislang immer ein Problem. ggf. hier nochmal mit der Lebenszeit des Arrows schauen, das war bislang immer ein Problem.
|
||||
@ -91,7 +93,7 @@ public class PlayerSeatListener extends BasicListener{
|
||||
public void onEntityDismount(EntityDismountEvent event) {
|
||||
seats.remove(getSeatLocation(event.getDismounted().getLocation()));
|
||||
|
||||
if (event.getEntityType() != EntityType.PLAYER)
|
||||
if (event.getEntityType() != EntityType.PLAYER && event.getDismounted().getType() != EntityType.ARROW)
|
||||
return;
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Das ist zu allgemein (es sollte darauf geprüft werden, dass es tatsächlich ein Sitz ist), da ggf. später noch Bootsrennen in die Lobby kommen und da die Boote nicht unbedingt despawnen sollten. Das ist zu allgemein (es sollte darauf geprüft werden, dass es tatsächlich ein Sitz ist), da ggf. später noch Bootsrennen in die Lobby kommen und da die Boote nicht unbedingt despawnen sollten.
|
||||
|
||||
event.getDismounted().remove();
|
||||
@ -99,12 +101,12 @@ public class PlayerSeatListener extends BasicListener{
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Lixfel
hat
Siehe oben. Siehe oben.
|
||||
if (event.getPlayer().isInsideVehicle())
|
||||
if (event.getPlayer().isInsideVehicle() && event.getPlayer().getVehicle().getType() == EntityType.ARROW)
|
||||
event.getPlayer().getVehicle().remove();
|
||||
}
|
||||
|
||||
public SeatLocation getSeatLocation(Location location) {
|
||||
return new SeatLocation(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||
public Location getSeatLocation(Location location) {
|
||||
return new Location(world,location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||
}
|
||||
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Lizenz-Header