summaryrefslogtreecommitdiff
path: root/src/main/java/com/encrox/zombie/GameListener.java
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2022-04-25 18:50:36 +0200
committerLeonard Kugis <leonard@kug.is>2022-04-25 18:50:36 +0200
commit9e2ddeb55321b09086a5a27254197d783847e6e3 (patch)
tree620e4a7b326df2a77fff51aff390e0a6bef43631 /src/main/java/com/encrox/zombie/GameListener.java
Initial commitHEADmaster
Diffstat (limited to 'src/main/java/com/encrox/zombie/GameListener.java')
-rwxr-xr-xsrc/main/java/com/encrox/zombie/GameListener.java159
1 files changed, 159 insertions, 0 deletions
diff --git a/src/main/java/com/encrox/zombie/GameListener.java b/src/main/java/com/encrox/zombie/GameListener.java
new file mode 100755
index 0000000..4d88aba
--- /dev/null
+++ b/src/main/java/com/encrox/zombie/GameListener.java
@@ -0,0 +1,159 @@
+package com.encrox.zombie;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Random;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.EntityDeathEvent;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.player.PlayerInteractEntityEvent;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.event.player.PlayerMoveEvent;
+import org.bukkit.inventory.ItemStack;
+
+import com.encrox.zombie.interactable.Chest;
+import com.encrox.zombie.interactable.Interactable;
+import com.encrox.zombie.interactable.Lever;
+import com.encrox.zombie.interactable.Powerup;
+
+public class GameListener implements Listener {
+
+ @EventHandler
+ public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
+ if(e.getEntity() instanceof Player) {
+ Player player = (Player)e.getEntity();
+ if(player.getHealth() <= e.getDamage()) {
+ Game current;
+ for(int i = 0, size = Zombie.games.size(); i<size; i++) {
+ current = Zombie.games.get(i);
+ if(current.getPlayers().contains(player)) {
+ current.playerDeath(player);
+ e.setCancelled(true);
+ }
+ }
+ }
+ } else {
+ if(e.getDamager() instanceof Player) {
+ int id = e.getEntity().getEntityId();
+ Player player = (Player)e.getDamager();
+ Game current;
+ for(int i = 0, size = Zombie.games.size(); i<size; i++) {
+ current = Zombie.games.get(i);
+ if(current.watchdog.contains(id)) {
+ if(current.getPlayers().contains(player)) {
+ int amount = (int)Math.round(e.getFinalDamage());
+ current.addPoints(player, amount);
+ player.sendMessage(ChatColor.GREEN + Zombie.lang.getProperty("game_points_gained").replace("%points%", ""+amount));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @EventHandler
+ public void onPlayerMove(PlayerMoveEvent e) {
+ for(int i = 0, size = Zombie.games.size(); i<size; i++) {
+ if(Zombie.games.get(i).isFrozen(e.getPlayer())) {
+ e.setCancelled(true);
+ }
+ }
+ }
+
+ @EventHandler
+ public void onPlayerInteract(PlayerInteractEvent e) {
+ try {
+ Player player = e.getPlayer();
+ Game current;
+ if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
+ for(int i = 0, size = Zombie.games.size(); i<size; i++) {
+ current = Zombie.games.get(i);
+ if(current.getPlayers().contains(player)) {
+ Block block = e.getClickedBlock();
+ Interactable inter = current.getInteractable(block);
+ if(inter != null) {
+ int cost = inter.getCost();
+ if(current.getPoints(player) >= cost) {
+ player.sendMessage(ChatColor.YELLOW + Zombie.lang.getProperty("game_paid").replace("%amount%", ""+cost));
+ current.substractPoints(player, cost);
+ if(inter instanceof Chest) {
+ if(Math.random() > 0.25) {
+ ItemStack item = new ItemStack((Material)Misc.random(Constants.Game.ITEMSET));
+ Enchantment ench;
+ while(!(ench = (Enchantment)Misc.random(Enchantment.values())).canEnchantItem(item));
+ item.addEnchantment(ench, 1+(new Random().nextInt(Integer.MAX_VALUE)%(ench.getMaxLevel()-1)));
+ player.getInventory().addItem(item);
+ } else {
+ player.getInventory().addItem(new ItemStack(Material.SKULL_ITEM));
+ current.randomizeChest();
+ }
+ e.setCancelled(true);
+ } else if(inter instanceof Powerup) {
+ Powerup powerup = (Powerup)inter;
+ player.getInventory().addItem(powerup.getItem());
+ } else if(inter instanceof Lever) {
+ Lever lever = (Lever)inter;
+ if(lever.isToggled()) {
+ player.sendMessage(ChatColor.RED + Zombie.lang.getProperty("game_impossible"));
+ current.addPoints(player, cost);
+ e.setCancelled(true);
+ } else {
+ lever.toggle();
+ }
+ }
+ } else {
+ player.sendMessage(ChatColor.RED + Zombie.lang.getProperty("game_no_points").replace("%amount%", ""+cost));
+ e.setCancelled(true);
+ }
+ }
+ }
+ }
+ }
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ @EventHandler
+ public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
+ Game current;
+ Player from = e.getPlayer();
+ if(e.getRightClicked() instanceof Player) {
+ Player to = (Player)e.getRightClicked();
+ for(int i = 0, size = Zombie.games.size(); i<size; i++) {
+ current = Zombie.games.get(i);
+ if(current.getPlayers().contains(from) && current.getPlayers().contains(to)) {
+ if(current.isFrozen(to)) {
+ current.revive(from, to);
+ }
+ }
+ }
+ }
+ }
+
+ @EventHandler
+ public void onEntityDeath(EntityDeathEvent e) {
+ int id = e.getEntity().getEntityId();
+ Game current;
+ for(int i = 0, size = Zombie.games.size(); i<size; i++) {
+ current = Zombie.games.get(i);
+ if(current.watchdog.contains(id)) {
+ current.addPoints(1000);
+ current.watchdog.remove((Integer)id);
+ }
+ }
+ }
+
+}