/* * 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 . */ package de.steamwar.lobby.display; import de.steamwar.entity.RPlayer; import de.steamwar.lobby.LobbySystem; import org.bukkit.Location; import java.util.UUID; public class NPC { private Location location; private final RPlayer entity; public NPC(Location location, UUID uuid, String name) { this.location = location; this.entity = new RPlayer(LobbySystem.getEntityServer(false), uuid, name, location); } public void setLocation(Location location) { if (isSimilarLocation(location)) { return; } this.location = location; entity.move(location); } private boolean isSimilarLocation(Location location) { if (this.location == null) { return false; } if (Location.normalizeYaw(this.location.getYaw()) != Location.normalizeYaw(location.getYaw())) { return false; } if (Location.normalizePitch(this.location.getPitch()) != Location.normalizePitch(location.getPitch())) { return false; } if (Math.abs(this.location.getX() - location.getX()) > 0.1) { return false; } if (Math.abs(this.location.getY() - location.getY()) > 0.1) { return false; } return !(Math.abs(this.location.getZ() - location.getZ()) > 0.1); } public Location getLocation() { return location; } public UUID getUuid() { return entity.getUuid(); } public void delete() { entity.die(); } }