This commit is contained in:
@@ -35,11 +35,13 @@ public final class Fantasysmp extends JavaPlugin {
|
||||
|
||||
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);
|
||||
|
||||
HereticWarner hereticWarner = new HereticWarner();
|
||||
hereticWarner.checkHereticInventory();
|
||||
|
||||
|
||||
XrayDetector xrayDetector = new XrayDetector();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user