diff --git a/plugin/src/main/java/com/alttd/essentia/feature/godmode/GodModeFeature.java b/plugin/src/main/java/com/alttd/essentia/feature/godmode/GodModeFeature.java new file mode 100644 index 0000000..6dc91c2 --- /dev/null +++ b/plugin/src/main/java/com/alttd/essentia/feature/godmode/GodModeFeature.java @@ -0,0 +1,49 @@ +package com.alttd.essentia.feature.godmode; + +import com.alttd.essentia.EssentiaPlugin; +import com.alttd.essentia.api.model.UserSettings; +import com.alttd.essentia.api.user.User; +import com.alttd.essentia.api.user.UserManager; +import com.alttd.essentia.feature.EssentiaFeature; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; + +public class GodModeFeature implements EssentiaFeature { + + private final EssentiaPlugin plugin; + + private boolean enabled = false; + + public GodModeFeature() { + this.plugin = EssentiaPlugin.instance(); + } + + @Override + public String featureName() { + return "GodMode"; + } + + @Override + public void register() { + final PluginManager pluginManager = plugin.getServer().getPluginManager(); + pluginManager.registerEvents(new GodModeListener(this), plugin); + + this.enabled = true; + } + + @Override + public boolean isEnabled() { + return enabled; + } + + protected boolean isGodModeEnabled(Player player) { + UserManager userManager = plugin.userManager(); + User user = userManager.getUser(player); + if (user == null) + return false; + + UserSettings userSettings = user.getUserSettings(); + return userSettings.godMode(); + } + +} diff --git a/plugin/src/main/java/com/alttd/essentia/feature/godmode/GodModeListener.java b/plugin/src/main/java/com/alttd/essentia/feature/godmode/GodModeListener.java new file mode 100644 index 0000000..2e63602 --- /dev/null +++ b/plugin/src/main/java/com/alttd/essentia/feature/godmode/GodModeListener.java @@ -0,0 +1,114 @@ +package com.alttd.essentia.feature.godmode; + +import com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.*; + +public class GodModeListener implements Listener { + + private GodModeFeature godModeFeature; + public GodModeListener(GodModeFeature godModeFeature) { + this.godModeFeature = godModeFeature; + } + + @EventHandler + public void onFoodLevelChange(FoodLevelChangeEvent event) { + if (!(event.getEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + } + + + @EventHandler + public void onPhantomPreSpawn(PhantomPreSpawnEvent event) { + if (!(event.getSpawningEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + event.setShouldAbortSpawn(true); + } + + @EventHandler + public void onEntityTargetLivingEntity(EntityTargetLivingEntityEvent event) { + if (!(event.getEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + } + + @EventHandler + public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { + if (!(event.getEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + } + + @EventHandler + public void onPotionSplashEvent(PotionSplashEvent event) { + for (LivingEntity entity : event.getAffectedEntities()) { + if (!(entity instanceof Player player)) + continue; + + if (!isGodModeEnabled(player)) + return; + + event.setIntensity(player, 0f); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onEntityCombustByEntityEvent(EntityCombustByEntityEvent event) { + if (!(event.getEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onEntityCombust(final EntityCombustEvent event) { + if (!(event.getEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onEntityDamage(final EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player player)) + return; + + if (!isGodModeEnabled(player)) + return; + + event.setCancelled(true); + } + + private boolean isGodModeEnabled(Player player) { + return godModeFeature.isGodModeEnabled(player); + } + +} diff --git a/plugin/src/main/java/com/alttd/essentia/listeners/GodModeListener.java b/plugin/src/main/java/com/alttd/essentia/listeners/GodModeListener.java deleted file mode 100644 index 8cb9729..0000000 --- a/plugin/src/main/java/com/alttd/essentia/listeners/GodModeListener.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.alttd.essentia.listeners; - -import com.alttd.essentia.EssentiaPlugin; -import com.alttd.essentia.api.model.UserSettings; -import com.alttd.essentia.api.user.User; -import com.alttd.essentia.api.user.UserManager; -import com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityTargetLivingEntityEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; - -public class GodModeListener implements Listener { - - private final EssentiaPlugin plugin; - - public GodModeListener() { - this.plugin = EssentiaPlugin.instance(); - } - - @EventHandler - public void onFoodLevelChange(FoodLevelChangeEvent event) { - if (!(event.getEntity() instanceof Player player)) - return; - - if (!hasGodMode(player)) - return; - - event.setCancelled(true); - } - - - @EventHandler - public void onPhantomPreSpawn(PhantomPreSpawnEvent event) { - if (!(event.getSpawningEntity() instanceof Player player)) - return; - - if (!hasGodMode(player)) - return; - - event.setCancelled(true); - event.setShouldAbortSpawn(true); - } - - @EventHandler - public void onEntityTargetLivingEntity(EntityTargetLivingEntityEvent event) { - if (!(event.getEntity() instanceof Player player)) - return; - - if (!hasGodMode(player)) - return; - - event.setCancelled(true); - } - - private boolean hasGodMode(Player player) { - UserManager userManager = plugin.userManager(); - User user = userManager.getUser(player); - if (user == null) - return false; - - UserSettings userSettings = user.getUserSettings(); - return userSettings.godMode(); - } - -}