added more features to heresy detector
Java CI with Maven / build (push) Successful in 28s

This commit is contained in:
2025-09-02 18:21:34 +01:00
parent 55972532a6
commit 373cfa3b3a
4 changed files with 153 additions and 120 deletions
@@ -35,11 +35,13 @@ public final class Fantasysmp extends JavaPlugin {
getServer().getPluginManager().registerEvents(new Chat(), this); getServer().getPluginManager().registerEvents(new Chat(), this);
getServer().getPluginManager().registerEvents(new StevenKillCheck(), this); HeresyChecker heresyChecker = new HeresyChecker();
heresyChecker.scheduleHeresyChecker();
getServer().getPluginManager().registerEvents(heresyChecker, this);
getServer().getPluginManager().registerEvents(new DeathMessageCustomiser(), this); getServer().getPluginManager().registerEvents(new DeathMessageCustomiser(), this);
HereticWarner hereticWarner = new HereticWarner();
hereticWarner.checkHereticInventory();
XrayDetector xrayDetector = new XrayDetector(); XrayDetector xrayDetector = new XrayDetector();
getServer().getPluginManager().registerEvents(xrayDetector, this); getServer().getPluginManager().registerEvents(xrayDetector, this);
@@ -0,0 +1,148 @@
package dev.zxq5.fantasysmp.events;
import org.bukkit.*;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.HashMap;
import java.util.Map;
import static org.bukkit.Bukkit.*;
public class HeresyChecker implements Listener {
private final HashMap<Player, Integer> heretics;
private final HashMap<Player, Integer> formerHeretics;
public HeresyChecker() {
this.heretics = new HashMap<>();
this.formerHeretics = new HashMap<>();
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getEntity() instanceof Chicken) {
event.setCancelled(true);
if (event.getDamager() instanceof Player heretic) {
executeHeretic(heretic);
}
}
}
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Chicken) {
event.setCancelled(true);
if ( event.getDamageSource().getCausingEntity() instanceof Player heretic) {
executeHeretic(heretic);
}
}
}
@EventHandler
public void onProjectileHit(ProjectileHitEvent event) {
if (event.getHitEntity() instanceof Chicken && event.getEntity().getShooter() instanceof Player heretic) {
if (event.getEntity().getType() == EntityType.EGG) return;
if (event.getEntity().getType() == EntityType.SNOWBALL) return;
event.setCancelled(true);
executeHeretic(heretic);
}
}
@EventHandler
public void onEntitySpawn(org.bukkit.event.entity.EntitySpawnEvent event) {
if (event.getEntity() instanceof Chicken steven) {
steven.setCustomName("Steven");
}
}
@EventHandler
public void onPlayerEatChicken(PlayerItemConsumeEvent event) {
Material type = event.getItem().getType();
if (type == Material.COOKED_CHICKEN || type == Material.CHICKEN) {
this.executeHeretic(event.getPlayer());
}
}
public void scheduleHeresyChecker() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(getPluginManager().getPlugin("fantasysmp"), this::checkHeretics, 0, 20);
Bukkit.getScheduler().scheduleSyncRepeatingTask(getPluginManager().getPlugin("fantasysmp"), () -> {
for (Player heretic : this.formerHeretics.keySet() ) {
this.formerHeretics.put(heretic, this.formerHeretics.get(heretic) - 1);
}
}, 0, 200);
}
public void checkHeretics() {
for ( Player player : Bukkit.getServer().getOnlinePlayers() ) {
if (player.getInventory().contains(Material.CHICKEN) || player.getInventory().contains(Material.COOKED_CHICKEN)) {
if (!this.heretics.containsKey(player)) {
this.heretics.put(player, this.formerHeretics.getOrDefault(player, 0));
}
} else if (this.heretics.containsKey(player)) {
this.formerHeretics.put(player, this.heretics.get(player));
this.heretics.remove(player);
}
}
for (Map.Entry<Player, Integer> entry : this.heretics.entrySet() ) {
entry.setValue(entry.getValue() + 1);
warnHeretic(entry.getKey());
if ( entry.getValue() >= 5 ) {
punishHeretic(entry.getKey());
}
}
}
public void punishHeretic(Player heretic) {
heretic.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 20 * 2, 0));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 20 * 2, 0));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.MINING_FATIGUE, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.DARKNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_DAMAGE, 20 * 2, 0));
}
public void warnHeretic(Player heretic) {
heretic.sendTitle(ChatColor.DARK_RED + "HOLDING CHICKEN IS HERESY!", ChatColor.YELLOW + "DROP IT IMMEDIATELY!", 5, 10, 5);
}
public void executeHeretic(Player heretic) {
Location coords = heretic.getLocation();
World world = coords.getWorld();
Plugin plugin = getPluginManager().getPlugin("fantasysmp");
heretic.sendTitle(ChatColor.DARK_RED + "HERESY!", ChatColor.YELLOW + "YOU SHALL PAY FOR YOUR CRIMES.", 5, 10, 5);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 0);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 1);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 2);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 3);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 4);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 5);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 6);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 7);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 8);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 9);
Bukkit.getScheduler().runTaskLater(plugin, () -> heretic.setHealth(0), 10);
}
}
@@ -1,40 +0,0 @@
package dev.zxq5.fantasysmp.events;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import static org.bukkit.Bukkit.getPluginManager;
public class HereticWarner {
int task;
public void checkHereticInventory() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(getPluginManager().getPlugin("fantasysmp"), () -> {
for ( Player heretic : Bukkit.getServer().getOnlinePlayers() ) {
if (heretic.getInventory().contains(Material.CHICKEN) || heretic.getInventory().contains(Material.COOKED_CHICKEN)) {
warnHeretic(heretic);
}
}
}, 0, 20);
}
public void warnHeretic(Player heretic) {
// apply poison to player
heretic.sendMessage(ChatColor.DARK_RED + "HOLDING CHICKEN IS HERESY!");
heretic.sendMessage(ChatColor.DARK_RED + "DROP IT IMMEDIATELY!");
heretic.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 20 * 2, 10));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 20 * 2, 10));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.MINING_FATIGUE, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.DARKNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 20 * 2, 3));
heretic.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_DAMAGE, 20 * 2, 0));
}
}
@@ -1,77 +0,0 @@
package dev.zxq5.fantasysmp.events;
import org.bukkit.*;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.plugin.Plugin;
import static org.bukkit.Bukkit.*;
public class StevenKillCheck implements Listener {
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getEntity() instanceof Chicken) {
event.setCancelled(true);
if (event.getDamager() instanceof Player heretic) {
destroyHeretic(heretic);
}
}
}
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Chicken) {
event.setCancelled(true);
if ( event.getDamageSource().getCausingEntity() instanceof Player heretic) {
destroyHeretic(heretic);
}
}
}
@EventHandler
public void onProjectileHit(ProjectileHitEvent event) {
if (event.getHitEntity() instanceof Chicken && event.getEntity().getShooter() instanceof Player heretic) {
if (event.getEntity().getType() == EntityType.EGG) return;
if (event.getEntity().getType() == EntityType.SNOWBALL) return;
event.setCancelled(true);
destroyHeretic(heretic);
}
}
@EventHandler
public void onEntitySpawn(org.bukkit.event.entity.EntitySpawnEvent event) {
if (event.getEntity() instanceof Chicken steven) {
steven.setCustomName("Steven");
}
}
public void destroyHeretic(Player heretic) {
Location coords = heretic.getLocation();
World world = coords.getWorld();
Plugin plugin = getPluginManager().getPlugin("fantasysmp");
broadcastMessage(ChatColor.DARK_RED + "HERESY!!!!");
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 0);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 1);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 2);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 3);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 4);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 5);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 6);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 7);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 8);
Bukkit.getScheduler().runTaskLater(plugin, () -> world.strikeLightning(coords), 9);
Bukkit.getScheduler().runTaskLater(plugin, () -> heretic.setHealth(0), 10);
}
}