Skip to content
This repository was archived by the owner on Dec 8, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
);
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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")))
);
}
}
}
Original file line number Diff line number Diff line change
@@ -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))
);
}

}


}