forked from SteamWar/SteamWar
Fix SpectatorListener running the techhider all the time
This commit is contained in:
@@ -27,8 +27,6 @@ import de.steamwar.sql.SteamwarUser;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@@ -39,13 +37,12 @@ public enum Permission {
|
|||||||
return bauweltMember.isSupervisor();
|
return bauweltMember.isSupervisor();
|
||||||
}),
|
}),
|
||||||
BUILD(bauweltMember -> {
|
BUILD(bauweltMember -> {
|
||||||
if (isTempOnlySpectator(bauweltMember)) return false;
|
|
||||||
return bauweltMember.isBuild() || SUPERVISOR.permissionPredicate.test(bauweltMember);
|
return bauweltMember.isBuild() || SUPERVISOR.permissionPredicate.test(bauweltMember);
|
||||||
}),
|
}),
|
||||||
/**
|
/**
|
||||||
* Only used for {@link BauMemberUpdate}
|
* Only used for {@link BauMemberUpdate}
|
||||||
*/
|
*/
|
||||||
REAL_SPECTATOR(bauweltMember -> {
|
SPECTATOR(bauweltMember -> {
|
||||||
return !bauweltMember.isBuild() && !bauweltMember.isSupervisor();
|
return !bauweltMember.isBuild() && !bauweltMember.isSupervisor();
|
||||||
}),
|
}),
|
||||||
/**
|
/**
|
||||||
@@ -55,28 +52,6 @@ public enum Permission {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
private static final Set<Integer> TEMP_ONLY_SPECTATOR = new HashSet<>();
|
|
||||||
|
|
||||||
private static boolean isTempOnlySpectator(BauweltMember bauweltMember) {
|
|
||||||
return TEMP_ONLY_SPECTATOR.contains(bauweltMember.getMemberID());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isTempOnlySpectator(Player player) {
|
|
||||||
return TEMP_ONLY_SPECTATOR.contains(SteamwarUser.get(player.getUniqueId()).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void forceOnlySpectator(Player player) {
|
|
||||||
TEMP_ONLY_SPECTATOR.add(SteamwarUser.get(player.getUniqueId()).getId());
|
|
||||||
BauMemberUpdate.baumemberUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only used by {@link BauMemberUpdate}
|
|
||||||
*/
|
|
||||||
public static void removeForceOnlySpectator(Player player) {
|
|
||||||
TEMP_ONLY_SPECTATOR.remove(SteamwarUser.get(player.getUniqueId()).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Predicate<BauweltMember> permissionPredicate;
|
private final Predicate<BauweltMember> permissionPredicate;
|
||||||
|
|
||||||
public boolean hasPermission(BauweltMember bauweltMember) {
|
public boolean hasPermission(BauweltMember bauweltMember) {
|
||||||
@@ -86,10 +61,10 @@ public enum Permission {
|
|||||||
|
|
||||||
public boolean hasPermission(Player member) {
|
public boolean hasPermission(Player member) {
|
||||||
if (SteamwarUser.get(member.getUniqueId()).getId() == BauServer.getInstance().getOwnerID()) {
|
if (SteamwarUser.get(member.getUniqueId()).getId() == BauServer.getInstance().getOwnerID()) {
|
||||||
return this != REAL_SPECTATOR;
|
return this != SPECTATOR;
|
||||||
}
|
}
|
||||||
BauweltMember bauweltMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), member.getUniqueId());
|
BauweltMember bauweltMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), member.getUniqueId());
|
||||||
if (bauweltMember == null) return this == REAL_SPECTATOR;
|
if (bauweltMember == null) return this == SPECTATOR;
|
||||||
return permissionPredicate.test(bauweltMember);
|
return permissionPredicate.test(bauweltMember);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-71
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2025 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.bausystem.features.bau;
|
|
||||||
|
|
||||||
import de.steamwar.bausystem.Permission;
|
|
||||||
import de.steamwar.command.PreviousArguments;
|
|
||||||
import de.steamwar.command.SWCommand;
|
|
||||||
import de.steamwar.command.TypeMapper;
|
|
||||||
import de.steamwar.linkage.Linked;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Linked
|
|
||||||
public class ForceSpectatorCommand extends SWCommand {
|
|
||||||
|
|
||||||
public ForceSpectatorCommand() {
|
|
||||||
super("forcespectator");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Register
|
|
||||||
public void forceSpectator(@Validator("supervisor") Player player, @Mapper("builder") Player other) {
|
|
||||||
Permission.forceOnlySpectator(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Mapper("builder")
|
|
||||||
public TypeMapper<Player> spectatorMapper() {
|
|
||||||
return new TypeMapper<>() {
|
|
||||||
@Override
|
|
||||||
public Player map(CommandSender commandSender, String[] previousArguments, String s) {
|
|
||||||
Player player = Bukkit.getPlayer(s);
|
|
||||||
if (player == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (Permission.BUILD.hasPermission(player) && !Permission.SUPERVISOR.hasPermission(player)) {
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
|
|
||||||
return Bukkit.getOnlinePlayers().stream()
|
|
||||||
.filter(Permission.BUILD::hasPermission)
|
|
||||||
.filter(player -> !Permission.SUPERVISOR.hasPermission(player))
|
|
||||||
.map(Player::getName)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -107,7 +107,7 @@ public class TechHiderCommand extends SWCommand implements Listener, ScoreboardE
|
|||||||
@Override
|
@Override
|
||||||
public Player map(CommandSender commandSender, String[] previousArguments, String s) {
|
public Player map(CommandSender commandSender, String[] previousArguments, String s) {
|
||||||
Player player = Bukkit.getPlayer(s);
|
Player player = Bukkit.getPlayer(s);
|
||||||
if (player != null && Permission.REAL_SPECTATOR.hasPermission(player)) {
|
if (player != null && Permission.SPECTATOR.hasPermission(player)) {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -116,7 +116,7 @@ public class TechHiderCommand extends SWCommand implements Listener, ScoreboardE
|
|||||||
@Override
|
@Override
|
||||||
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
|
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
|
||||||
return Bukkit.getOnlinePlayers().stream()
|
return Bukkit.getOnlinePlayers().stream()
|
||||||
.filter(Permission.REAL_SPECTATOR::hasPermission)
|
.filter(Permission.SPECTATOR::hasPermission)
|
||||||
.map(Player::getName)
|
.map(Player::getName)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-5
@@ -59,18 +59,14 @@ public class BauMemberUpdate extends PacketHandler implements Listener {
|
|||||||
Set<Player> newSpectator = new HashSet<>();
|
Set<Player> newSpectator = new HashSet<>();
|
||||||
Set<Player> newBuilder = new HashSet<>();
|
Set<Player> newBuilder = new HashSet<>();
|
||||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||||
if (Permission.REAL_SPECTATOR.hasPermission(player)) {
|
if (Permission.SPECTATOR.hasPermission(player)) {
|
||||||
if (!SPECTATORS.contains(player)) {
|
if (!SPECTATORS.contains(player)) {
|
||||||
SPECTATORS.add(player);
|
SPECTATORS.add(player);
|
||||||
Permission.removeForceOnlySpectator(player);
|
|
||||||
newSpectator.add(player);
|
newSpectator.add(player);
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, -1, 1, false,false, false));
|
player.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, -1, 1, false,false, false));
|
||||||
showSpectatorNotice(player);
|
showSpectatorNotice(player);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Permission.SUPERVISOR.hasPermission(player)) {
|
|
||||||
Permission.removeForceOnlySpectator(player);
|
|
||||||
}
|
|
||||||
if (SPECTATORS.contains(player)) {
|
if (SPECTATORS.contains(player)) {
|
||||||
SPECTATORS.remove(player);
|
SPECTATORS.remove(player);
|
||||||
newBuilder.add(player);
|
newBuilder.add(player);
|
||||||
|
|||||||
+18
-4
@@ -49,6 +49,7 @@ import java.util.Set;
|
|||||||
@Linked
|
@Linked
|
||||||
public class SpectatorListener implements Listener {
|
public class SpectatorListener implements Listener {
|
||||||
|
|
||||||
|
private static final TechHider techHider;
|
||||||
private static final Set<Player> NO_TECHHIDER = new HashSet<>();
|
private static final Set<Player> NO_TECHHIDER = new HashSet<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@@ -100,10 +101,20 @@ public class SpectatorListener implements Listener {
|
|||||||
materials.add(Material.WATER);
|
materials.add(Material.WATER);
|
||||||
materials.remove(Material.BARRIER);
|
materials.remove(Material.BARRIER);
|
||||||
materials.remove(Material.STONE);
|
materials.remove(Material.STONE);
|
||||||
TechHider techHider = new TechHider((TechHider.LocationEvaluator) (player, i, i1) -> {
|
techHider = new TechHider((TechHider.LocationEvaluator) (player, i, i1) -> {
|
||||||
return Permission.BUILD.hasPermission(player) || Permission.isTempOnlySpectator(player) || NO_TECHHIDER.contains(player);
|
return Permission.BUILD.hasPermission(player) || NO_TECHHIDER.contains(player);
|
||||||
}, Material.END_STONE, materials, new HashSet<>());
|
}, Material.END_STONE, materials, new HashSet<>());
|
||||||
techHider.enable();
|
}
|
||||||
|
|
||||||
|
private static void enableOrDisableTechhider() {
|
||||||
|
boolean enable = Bukkit.getOnlinePlayers()
|
||||||
|
.stream()
|
||||||
|
.anyMatch(player -> !(Permission.BUILD.hasPermission(player) || NO_TECHHIDER.contains(player)));
|
||||||
|
if (enable) {
|
||||||
|
techHider.enable();
|
||||||
|
} else {
|
||||||
|
techHider.disable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void toggleNoTechHider(Player player) {
|
public static void toggleNoTechHider(Player player) {
|
||||||
@@ -113,6 +124,7 @@ public class SpectatorListener implements Listener {
|
|||||||
NO_TECHHIDER.add(player);
|
NO_TECHHIDER.add(player);
|
||||||
}
|
}
|
||||||
resendChunks(player);
|
resendChunks(player);
|
||||||
|
enableOrDisableTechhider();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void resendChunks(Player player) {
|
private static void resendChunks(Player player) {
|
||||||
@@ -131,6 +143,7 @@ public class SpectatorListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
|
enableOrDisableTechhider();
|
||||||
if (BauSystem.DEV_SERVER) return;
|
if (BauSystem.DEV_SERVER) return;
|
||||||
if (event.getPlayer().getUniqueId().equals(BauServer.getInstance().getOwner())) {
|
if (event.getPlayer().getUniqueId().equals(BauServer.getInstance().getOwner())) {
|
||||||
return;
|
return;
|
||||||
@@ -152,6 +165,7 @@ public class SpectatorListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
|
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
|
||||||
|
enableOrDisableTechhider();
|
||||||
if (!anySupervisorOnline(null) && !BauSystem.DEV_SERVER) {
|
if (!anySupervisorOnline(null) && !BauSystem.DEV_SERVER) {
|
||||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||||
player.kickPlayer("");
|
player.kickPlayer("");
|
||||||
@@ -161,7 +175,6 @@ public class SpectatorListener implements Listener {
|
|||||||
|
|
||||||
event.getChanged().forEach(player -> {
|
event.getChanged().forEach(player -> {
|
||||||
NO_TECHHIDER.remove(player);
|
NO_TECHHIDER.remove(player);
|
||||||
if (Permission.isTempOnlySpectator(player)) return;
|
|
||||||
resendChunks(player);
|
resendChunks(player);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -169,6 +182,7 @@ public class SpectatorListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
NO_TECHHIDER.remove(event.getPlayer());
|
NO_TECHHIDER.remove(event.getPlayer());
|
||||||
|
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), SpectatorListener::enableOrDisableTechhider, 1);
|
||||||
if (BauSystem.DEV_SERVER) return;
|
if (BauSystem.DEV_SERVER) return;
|
||||||
if (!anySupervisorOnline(event.getPlayer())) {
|
if (!anySupervisorOnline(event.getPlayer())) {
|
||||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user