Implement GodModeFeature

This commit is contained in:
Len 2025-06-29 13:25:33 +02:00
parent d4f33b8c2e
commit 612a0281d6
3 changed files with 163 additions and 67 deletions

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}