From de0ae7ad3184848f4cf027ff12f8cb806927237e Mon Sep 17 00:00:00 2001 From: jonakls Date: Tue, 21 May 2024 09:07:57 -0500 Subject: [PATCH] feat(messages): add default custom death messages --- plugin/build.gradle.kts | 2 + .../pepitocore/plugin/module/Modules.java | 7 +- .../plugin/module/death/DeathModule.java | 27 +++ .../listener/PlayerMessageDeathListener.java | 115 ++++++++++++ .../plugin/module/death/util/DeathUtil.java | 170 ++++++++++++++++++ 5 files changed, 319 insertions(+), 2 deletions(-) create mode 100644 plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/DeathModule.java create mode 100644 plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/listener/PlayerMessageDeathListener.java create mode 100644 plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/util/DeathUtil.java diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index ef8e1f7..d5bacdf 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -31,6 +31,8 @@ dependencies { // https://mvnrepository.com/artifact/net.jodah/expiringmap implementation("net.jodah:expiringmap:0.5.11") + + compileOnly("net.luckperms:api:5.4") } tasks { diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/Modules.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/Modules.java index 349799c..fe902f9 100644 --- a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/Modules.java +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/Modules.java @@ -7,6 +7,7 @@ import team.devblook.pepitocore.plugin.module.back.GoBackModule; import team.devblook.pepitocore.plugin.module.broadcast.BroadcastModule; import team.devblook.pepitocore.plugin.module.chat.ChatModule; +import team.devblook.pepitocore.plugin.module.death.DeathModule; import team.devblook.pepitocore.plugin.module.event.EventModule; import team.devblook.pepitocore.plugin.module.indicator.IndicatorModule; import team.devblook.pepitocore.plugin.module.restart.RestartModule; @@ -26,10 +27,12 @@ public interface Modules { "events", injector -> injector.getInstance(EventModule.class), "sleep", injector -> injector.getInstance(SleepModule.class), "broadcast", injector -> injector.getInstance(BroadcastModule.class), - "warps", injector -> injector.createChildInjector(new WarpBindingModule(injector.getInstance(Plugin.class))).getInstance(WarpsModule.class), + "warps", injector -> injector.createChildInjector(new WarpBindingModule(injector.getInstance(Plugin.class))) + .getInstance(WarpsModule.class), "damage-indicator", injector -> injector.getInstance(IndicatorModule.class), "chat", injector -> injector.getInstance(ChatModule.class), "back", injector -> injector.createChildInjector(new GoBackBindingModule()).getInstance(GoBackModule.class), - "restart", injector -> injector.getInstance(RestartModule.class) + "restart", injector -> injector.getInstance(RestartModule.class), + "death", injector -> injector.getInstance(DeathModule.class) ); } \ No newline at end of file diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/DeathModule.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/DeathModule.java new file mode 100644 index 0000000..bd8954b --- /dev/null +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/DeathModule.java @@ -0,0 +1,27 @@ +package team.devblook.pepitocore.plugin.module.death; + +import com.google.inject.Inject; +import org.bukkit.Bukkit; +import org.bukkit.event.HandlerList; +import org.bukkit.plugin.Plugin; +import team.devblook.pepitocore.api.module.CoreModule; +import team.devblook.pepitocore.plugin.module.death.listener.PlayerMessageDeathListener; + +public class DeathModule implements CoreModule { + + private @Inject Plugin plugin; + private @Inject PlayerMessageDeathListener listener; + + @Override + public void enable() { + Bukkit.getPluginManager().registerEvents( + listener, + plugin + ); + } + + @Override + public void disable() { + HandlerList.unregisterAll(listener); + } +} diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/listener/PlayerMessageDeathListener.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/listener/PlayerMessageDeathListener.java new file mode 100644 index 0000000..e4b3a0c --- /dev/null +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/listener/PlayerMessageDeathListener.java @@ -0,0 +1,115 @@ +package team.devblook.pepitocore.plugin.module.death.listener; + +import net.kyori.adventure.key.Key; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import team.devblook.pepitocore.plugin.module.death.util.DeathUtil; + +public class PlayerMessageDeathListener implements Listener { + + @EventHandler + public void onDeath(PlayerDeathEvent event) { + final EntityDamageEvent damageEvent = event.getPlayer().getLastDamageCause(); + event.getPlayer() + .getWorld() + .strikeLightningEffect(event.getPlayer().getLocation()); + + final Sound sound = Sound.sound(Key.key("entity.lightning_bolt.thunder"), Sound.Source.AMBIENT, 1.0f, 1.0f); + Bukkit.getOnlinePlayers().forEach(player -> player.playSound(sound)); + + + if (damageEvent == null) { + event.deathMessage(Component.text("El jugador ha muerto sin causa aparente. O.o", TextColor.fromHexString("#ff505e"))); + return; + } + + final EntityDamageEvent.DamageCause cause = damageEvent.getCause(); + final Player player = event.getPlayer(); + + switch (cause) { + case ENTITY_ATTACK: + final Player killer = event.getPlayer().getKiller(); + final Entity entity = damageEvent.getEntity(); + + if (killer == null) { + DeathUtil.entityAttackDeathMessage(event, entity); + return; + } + + event.deathMessage( + player.name().append(Component.text(" fue asesinado por ", TextColor.fromHexString("#ff505e")) + .append(killer.name()) + )); + break; + case ENTITY_EXPLOSION: + event.deathMessage( + player.name().append(Component.text(" quedó hecho trizas por una explosión.", TextColor.fromHexString("#ff505e"))) + ); + break; + case FALL: + event.deathMessage( + player.name().append(Component.text(" es un capo, cayó al vacío.", TextColor.fromHexString("#ff505e"))) + ); + break; + case FIRE: + case FIRE_TICK: + event.deathMessage( + player.name().append(Component.text(" al parecer le gusta andar caliente, tanto que se murió.", TextColor.fromHexString("#ff505e"))) + ); + break; + case LAVA: + event.deathMessage( + player.name().append(Component.text(" se cayó en lava, que noob.", TextColor.fromHexString("#ff505e"))) + ); + break; + case DROWNING: + event.deathMessage( + player.name().append(Component.text(" se ahogó, que noob.", TextColor.fromHexString("#ff505e"))) + ); + break; + case VOID: + event.deathMessage( + player.name().append(Component.text(" tocó fondo, pero no el que esperaba.", TextColor.fromHexString("#ff505e"))) + ); + break; + case SUFFOCATION: + event.deathMessage( + player.name().append(Component.text(" se asfixió, pero es que hay que ser tarado.", TextColor.fromHexString("#ff505e"))) + ); + break; + case LIGHTNING: + event.deathMessage( + player.name().append(Component.text(" fue fulminado por un rayo.", TextColor.fromHexString("#ff505e"))) + ); + break; + case STARVATION: + event.deathMessage( + player.name().append(Component.text(" murió de hambre, sal de tu país bro.", TextColor.fromHexString("#ff505e"))) + ); + break; + case POISON: + case WITHER: + event.deathMessage( + player.name().append(Component.text(" murió envenenado, lol.", TextColor.fromHexString("#ff505e"))) + ); + break; + case MAGIC: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por magia negra.", TextColor.fromHexString("#ff505e"))) + ); + break; + default: + event.deathMessage( + player.name().append(Component.text(" es tan raro, que hasta su muerte es desconocida.", TextColor.fromHexString("#ff505e"))) + ); + } + } +} diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/util/DeathUtil.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/util/DeathUtil.java new file mode 100644 index 0000000..6b0e52f --- /dev/null +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/death/util/DeathUtil.java @@ -0,0 +1,170 @@ +package team.devblook.pepitocore.plugin.module.death.util; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.PlayerDeathEvent; + +public final class DeathUtil { + + private DeathUtil() { + throw new UnsupportedOperationException("This class cannot be instantiated"); + } + + public static final TextColor DEATH_COLOR_TEXT = TextColor.fromHexString("#ff505e"); + + public static void entityAttackDeathMessage( + final PlayerDeathEvent event, + final Entity entity + ) { + + final Player player = event.getEntity(); + + switch (entity.getType()) { + case ZOMBIE_VILLAGER: + case ZOMBIE: + event.deathMessage( + player.name().append(Component.text(" fue mordido por un zombie.", DEATH_COLOR_TEXT)) + ); + break; + case SKELETON: + event.deathMessage( + player.name().append(Component.text(" fue flechado por un esqueleto.", DEATH_COLOR_TEXT)) + ); + break; + case SPIDER: + event.deathMessage( + player.name().append(Component.text(" fue mordido por una araña.", DEATH_COLOR_TEXT)) + ); + break; + case CREEPER: + event.deathMessage( + player.name().append(Component.text(" fue explotado por un creeper.", DEATH_COLOR_TEXT)) + ); + break; + case ENDERMAN: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un enderman.", DEATH_COLOR_TEXT)) + ); + break; + case WITHER: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un wither.", TextColor.fromHexString("#1f1f42"))) + ); + break; + case WITCH: + event.deathMessage( + player.name().append(Component.text(" fue envenenado por una bruja.", DEATH_COLOR_TEXT)) + ); + break; + case VEX: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un vex.", DEATH_COLOR_TEXT)) + ); + break; + case VINDICATOR: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un vindicator.", DEATH_COLOR_TEXT)) + ); + break; + case PILLAGER: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un pillager.", DEATH_COLOR_TEXT)) + ); + break; + case RAVAGER: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un ravager.", DEATH_COLOR_TEXT)) + ); + break; + case ILLUSIONER: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un illusioner.", DEATH_COLOR_TEXT)) + ); + break; + case EVOKER: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un evoker.", DEATH_COLOR_TEXT)) + ); + break; + case DROWNED: + event.deathMessage( + player.name().append(Component.text(" fue ahogado por un ahogado.", DEATH_COLOR_TEXT)) + ); + break; + case BLAZE: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un blaze.", DEATH_COLOR_TEXT)) + ); + break; + case GHAST: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un ghast.", DEATH_COLOR_TEXT)) + ); + break; + case HUSK: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un husk.", DEATH_COLOR_TEXT)) + ); + break; + case MAGMA_CUBE: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un magma cube.", DEATH_COLOR_TEXT)) + ); + break; + case PHANTOM: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un phantom.", DEATH_COLOR_TEXT)) + ); + break; + case PIGLIN: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un piglin.", DEATH_COLOR_TEXT)) + ); + break; + case SHULKER: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un shulker.", DEATH_COLOR_TEXT)) + ); + break; + case SILVERFISH: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un silverfish.", DEATH_COLOR_TEXT)) + ); + break; + case STRAY: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un stray.", DEATH_COLOR_TEXT)) + ); + break; + case WITHER_SKELETON: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un wither skeleton.", DEATH_COLOR_TEXT)) + ); + break; + case ZOGLIN: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un hoglin.", DEATH_COLOR_TEXT)) + ); + break; + case ZOMBIFIED_PIGLIN: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por un zombificado piglin.", DEATH_COLOR_TEXT)) + ); + break; + case ENDER_DRAGON: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por el ender dragon.", TextColor.fromHexString("#7438ff"))) + ); + break; + default: + event.deathMessage( + player.name().append(Component.text(" fue asesinado por algún bicho (Me cansé de poner mobs, jodanse. ~ Jonakls).", DEATH_COLOR_TEXT)) + ); + } + + } + + +}