Make Techhider more robust

This commit is contained in:
2026-11-04 21:11:45 +01:00
parent a5bfc2fa44
commit 1eef62add3
7 changed files with 60 additions and 55 deletions
@@ -108,7 +108,7 @@ public class SpectatorListener implements Listener {
}
public void addHidingRules(Player player, List<HidingRule> rules) {
if (!(Permission.BUILD.hasPermission(player) || NO_TECHHIDER.contains(player))) {
if (!NO_TECHHIDER.contains(player)) {
rules.add(SPECTATOR_RULE);
}
}
@@ -138,6 +138,9 @@ public class SpectatorListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
if (Permission.BUILD.hasPermission(event.getPlayer())) {
NO_TECHHIDER.add(event.getPlayer());
}
if (BauSystem.DEV_SERVER) return;
if (event.getPlayer().getUniqueId().equals(BauServer.getInstance().getOwner())) {
return;
@@ -159,17 +162,20 @@ public class SpectatorListener implements Listener {
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getChanged().forEach(player -> {
if (Permission.BUILD.hasPermission(player)) {
NO_TECHHIDER.add(player);
} else {
NO_TECHHIDER.remove(player);
}
resendChunks(player);
});
if (!anySupervisorOnline(null) && !BauSystem.DEV_SERVER) {
Bukkit.getOnlinePlayers().forEach(player -> {
player.kickPlayer("");
});
return;
}
event.getChanged().forEach(player -> {
NO_TECHHIDER.remove(player);
resendChunks(player);
});
}
@EventHandler
@@ -19,7 +19,6 @@
package de.steamwar.bausystem.features.xray;
import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.hullhider.HullHiderCommand;
import de.steamwar.bausystem.features.techhider.HidingRule;
@@ -30,12 +29,10 @@ import de.steamwar.core.CraftbukkitWrapper;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
import de.steamwar.techhider.ObfuscationConfig;
import io.papermc.paper.event.player.PlayerFailMoveEvent;
import io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason;
import net.md_5.bungee.api.ChatMessageType;
import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
import net.minecraft.server.level.ServerPlayer;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -45,7 +42,6 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
@Linked
public class XrayCommand extends SWCommand implements Listener {
@@ -103,27 +99,12 @@ public class XrayCommand extends SWCommand implements Listener {
});
}
{
BiFunction<Player, ServerboundMovePlayerPacket, Object> positionSetter = (player, packet) -> {
Region region = Region.getRegion(player.getLocation());
if (hidden.containsKey(region) && hidden.get(region).contains(player)) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
if (packet.hasPos) {
serverPlayer.setPosRaw(packet.x, packet.y, packet.z);
}
if (packet.hasRot) {
serverPlayer.setXRot(packet.xRot);
serverPlayer.setYRot(packet.yRot);
}
}, 0);
return null;
}
return packet;
};
TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.Pos.class, positionSetter);
TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.PosRot.class, positionSetter);
@EventHandler
public void onFailMove(PlayerFailMoveEvent event) {
if (event.getFailReason() != FailReason.CLIPPED_INTO_BLOCK) return;
Region region = Region.getRegion(event.getTo());
if (!hidden.containsKey(region) || !hidden.get(region).contains(event.getPlayer())) return;
event.setAllowed(true);
}
@EventHandler