From ff7235400497de5ecc13b54753a552547fc83416 Mon Sep 17 00:00:00 2001 From: Barazok Date: Sat, 24 Oct 2020 22:59:27 +0200 Subject: [PATCH] Change ender elf effects on hunger --- .../mineclass/classes/EnderElfClass.java | 13 +++++++++++- .../mineclass/classes/MineClassImpl.java | 1 + .../listeners/MineClassListeners.java | 21 +++++++++++++++++-- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java b/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java index c1f5d88..521515c 100644 --- a/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java @@ -2,9 +2,11 @@ package net.babamod.mineclass.classes; import net.babamod.mineclass.utils.Pair; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import java.util.*; @@ -45,7 +47,6 @@ public class EnderElfClass extends MineClassImpl { private static final Map potionEffects = Stream.of( new Object[][] { - {PotionEffectType.HUNGER, 10}, {PotionEffectType.NIGHT_VISION, 1}, {PotionEffectType.ABSORPTION, 1}, }) @@ -77,6 +78,16 @@ public class EnderElfClass extends MineClassImpl { return "ender_elf"; } + @Override + public void reapplyEffects(Player player) { + super.reapplyEffects(player); + if (player.getWorld().getEnvironment().equals(World.Environment.THE_END)) { + PotionEffect saturation = + new PotionEffect(PotionEffectType.SATURATION, Integer.MAX_VALUE, 9, false, false); + player.addPotionEffect(saturation); + } + } + @Override public void giveItems(Player player) { if (!player.getInventory().contains(Material.ENDER_PEARL)) { diff --git a/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java b/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java index d963bf8..45cead2 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java @@ -21,6 +21,7 @@ public abstract class MineClassImpl implements MineClass { @Override public void reapplyEffects(Player player) { + MineClassFactory.clearAllClassEffects(player); getPotionEffects() .forEach( (key, value) -> { diff --git a/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java b/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java index eaf235d..84ab358 100644 --- a/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java +++ b/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java @@ -4,6 +4,7 @@ import net.babamod.mineclass.Mineclass; import net.babamod.mineclass.classes.MineClass; import net.babamod.mineclass.classes.MineClassFactory; import net.babamod.mineclass.utils.*; +import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.AbstractArrow; @@ -11,12 +12,11 @@ import org.bukkit.entity.EnderPearl; 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.block.BlockDropItemEvent; import org.bukkit.event.entity.*; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -192,6 +192,12 @@ public class MineClassListeners implements Listener { if (AppliedStatus.getInstance().getStatus(player).equals("elf")) { event.setCancelled(true); } + if (AppliedStatus.getInstance().getStatus(player).equals("ender_elf")) { + int difference = player.getFoodLevel() - event.getFoodLevel(); + if (difference > 0) { + event.setFoodLevel(player.getFoodLevel() - (difference * 2)); + } + } } } @@ -233,6 +239,9 @@ public class MineClassListeners implements Listener { public void on(ProjectileHitEvent event) { if (event.getEntity().getShooter() instanceof Player) { Player player = (Player) event.getEntity().getShooter(); + if (player.getGameMode().equals(GameMode.CREATIVE)) { + return; + } if (AppliedStatus.getInstance().getStatus(player).equals("ender_elf") && event.getEntity() instanceof EnderPearl) { ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 1); @@ -241,4 +250,12 @@ public class MineClassListeners implements Listener { } } } + + @EventHandler + public void on(PlayerChangedWorldEvent event) { + Player player = event.getPlayer(); + MineClassFactory.getInstance() + .getRightClass(player) + .ifPresent(mineClass -> mineClass.reapplyEffects(player)); + } }