Merge pull request 'Add enable/disable/clear functionality for Piston Calculator' (#160) from BauSystem/piston-calculator-enable into main

Reviewed-on: SteamWar/SteamWar#160
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
This commit is contained in:
2025-10-18 07:50:42 +02:00
4 changed files with 46 additions and 12 deletions
@@ -49,7 +49,8 @@ import java.util.stream.Collectors;
@MinVersion(20)
public class PistonCalculator implements Listener {
private final Map<Player, Long> DEBOUNCE = new HashMap<>();
private final Map<Player, Long> debounce = new HashMap<>();
protected final Set<Player> disablePistonCalculator = new HashSet<>();
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
@@ -58,15 +59,16 @@ public class PistonCalculator implements Listener {
if (event.getItem() == null) {
} else if (event.getItem() != null && event.getItem().getType() == Material.SLIME_BALL) {
} else if (!event.getItem().getType().isBlock()) {
DEBOUNCE.put(event.getPlayer(), System.currentTimeMillis());
debounce.put(event.getPlayer(), System.currentTimeMillis());
return;
} else return;
if (event.getClickedBlock() == null) return;
Block clickedBlock = event.getClickedBlock();
Material blockType = clickedBlock.getType();
if (!(blockType == Material.PISTON || blockType == Material.STICKY_PISTON)) return;
if (System.currentTimeMillis() - DEBOUNCE.getOrDefault(event.getPlayer(), 0L) <= 200) return;
DEBOUNCE.put(event.getPlayer(), System.currentTimeMillis());
if (disablePistonCalculator.contains(event.getPlayer())) return;
if (System.currentTimeMillis() - debounce.getOrDefault(event.getPlayer(), 0L) <= 200) return;
debounce.put(event.getPlayer(), System.currentTimeMillis());
Location location = event.getClickedBlock().getLocation();
if (pistOrders.containsKey(location)) {
@@ -143,11 +145,14 @@ public class PistonCalculator implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
DEBOUNCE.remove(event.getPlayer());
debounce.remove(event.getPlayer());
disablePistonCalculator.remove(event.getPlayer());
}
public void clear(Player player) {
Set<Location> toRemove = new HashSet<>();
pistOrders.forEach((location, pistOrder) -> {
pistOrder.server.removePlayer(event.getPlayer());
pistOrder.server.removePlayer(player);
if (pistOrder.server.getPlayers().isEmpty()) {
toRemove.add(location);
pistOrder.server.close();
@@ -22,21 +22,46 @@ package de.steamwar.bausystem.features.util;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
import de.steamwar.linkage.MinVersion;
import org.bukkit.entity.Player;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
@Linked
@MinVersion(20)
public class PistonCalculatorCommand extends SWCommand {
@LinkedInstance
public PistonCalculator pistonCalculator;
private final Set<UUID> helpMessageShowed = new HashSet<>();
public PistonCalculatorCommand() {
super("piston", "pistoncalculator", "pistoncalc");
}
@Register
public void help(@Validator Player player) {
BauSystem.MESSAGE.send("PISTON_HELP_1", player);
BauSystem.MESSAGE.send("PISTON_HELP_2", player);
BauSystem.MESSAGE.send("PISTON_HELP_3", player);
public void genericCommand(@Validator Player player) {
if (pistonCalculator.disablePistonCalculator.contains(player)) {
pistonCalculator.disablePistonCalculator.remove(player);
if (!helpMessageShowed.contains(player.getUniqueId())) {
BauSystem.MESSAGE.send("PISTON_HELP_1", player);
BauSystem.MESSAGE.send("PISTON_HELP_2", player);
BauSystem.MESSAGE.send("PISTON_HELP_3", player);
helpMessageShowed.add(player.getUniqueId());
}
BauSystem.MESSAGE.send("PISTON_ENABLED", player);
} else {
pistonCalculator.disablePistonCalculator.add(player);
BauSystem.MESSAGE.send("PISTON_DISABLED", player);
}
}
@Register("clear")
public void clearCommand(@Validator Player player) {
pistonCalculator.clear(player);
}
}