WIP: different method for grief detection
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiGrief;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
|
||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiGrief.player.PlayerGriefListener;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
|
||||
public class AntiGrief extends Appliance {
|
||||
public record GriefIncident(Location location, @Nullable Block block) {
|
||||
public static final Long timestamp = System.currentTimeMillis();
|
||||
}
|
||||
private final Map<UUID, List<GriefIncident>> griefRegistry = new HashMap<>();
|
||||
|
||||
public void addTracking(Player player, GriefIncident incident) {
|
||||
this.griefRegistry.computeIfAbsent(player.getUniqueId(), uuid -> new ArrayList<>());
|
||||
this.griefRegistry.get(player.getUniqueId()).add(incident);
|
||||
}
|
||||
|
||||
public Map<UUID, List<GriefIncident>> getGriefRegistry() {
|
||||
return this.griefRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NotNull List<Listener> listeners() {
|
||||
return List.of(new PlayerGriefListener());
|
||||
}
|
||||
}
|
@@ -0,0 +1,39 @@
|
||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiGrief.commands;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand;
|
||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiGrief.AntiGrief;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentBuilder;
|
||||
import net.kyori.adventure.text.ScopedComponent;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GriefOverviewCommand extends ApplianceCommand<AntiGrief> {
|
||||
public GriefOverviewCommand() {
|
||||
super("griefOverview");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception {
|
||||
sender.sendMessage(
|
||||
this.getAppliance().getGriefRegistry().entrySet().stream()
|
||||
.map(griefEntry -> {
|
||||
List<TextComponent> entries = griefEntry.getValue().stream()
|
||||
.map(incident -> Component.text(incident.location().toString()))
|
||||
.toList();
|
||||
ComponentBuilder<TextComponent, TextComponent.Builder> builder = Component.text()
|
||||
.append(Component.text(griefEntry.getKey().toString()))
|
||||
.append(Component.text(": "));
|
||||
entries.forEach(builder::append);
|
||||
|
||||
return builder.build();
|
||||
})
|
||||
.reduce(ScopedComponent::append)
|
||||
.orElseThrow()
|
||||
);
|
||||
}
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiGrief.player;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener;
|
||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiGrief.AntiGrief;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
|
||||
public class PlayerGriefListener extends ApplianceListener<AntiGrief> {
|
||||
@EventHandler
|
||||
public void onIgnite(BlockIgniteEvent event) {
|
||||
if(event.getPlayer() == null) return;
|
||||
this.getAppliance().addTracking(event.getPlayer(), new AntiGrief.GriefIncident(event.getBlock().getLocation(), event.getBlock()));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onTnt(ExplosionPrimeEvent event) {
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user