-
-
Notifications
You must be signed in to change notification settings - Fork 19
GH-986 GH-1096 Moved sounds and enhanced death messages #1097
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
P1otrulla
wants to merge
11
commits into
master
Choose a base branch
from
2.0/move-sound-and-enhanced-death-messages
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+926
−288
Open
Changes from 8 commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
36fa752
moved sounds and enhanced death messages
P1otrulla b870cbd
Update eternalcore-core/src/main/java/com/eternalcode/core/feature/de…
P1otrulla 2fc87ae
remove comments
P1otrulla 8a91dc8
rollback new version of server
P1otrulla 2ddedbb
TNT -> PRIMED_TNT
P1otrulla 61f5114
Merge remote-tracking branch 'origin/master' into 2.0/move-sound-and-…
P1otrulla 1ac5699
Add dedicated section for death and joinQuit, add migrations for it
P1otrulla cd9697d
Add chatNotice for sound
P1otrulla 2fba71a
Update eternalcore-core/src/main/java/com/eternalcode/core/feature/ch…
P1otrulla 3cecdc1
standardization of types
P1otrulla cca9f7f
Merge remote-tracking branch 'origin/2.0/move-sound-and-enhanced-deat…
P1otrulla File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
...nalcode/core/configuration/migrations/Migration_0004_Move_death_to_dedicated_section.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.eternalcode.core.configuration.migrations; | ||
|
||
import eu.okaeri.configs.migrate.builtin.NamedMigration; | ||
|
||
import static eu.okaeri.configs.migrate.ConfigMigrationDsl.move; | ||
|
||
public class Migration_0004_Move_death_to_dedicated_section extends NamedMigration { | ||
|
||
Migration_0004_Move_death_to_dedicated_section() { | ||
super("Move death to dedicated section", | ||
move("event.deathMessage", "death.deathMessage"), | ||
move("event.unknownDeathCause", "death.unknownDeathCause"), | ||
move("event.deathMessageByDamageCause", "death.deathMessageByDamageCause") | ||
); | ||
} | ||
|
||
} |
17 changes: 17 additions & 0 deletions
17
.../configuration/migrations/Migration_0005_Move_join_quit_message_to_dedicated_section.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.eternalcode.core.configuration.migrations; | ||
|
||
import eu.okaeri.configs.migrate.builtin.NamedMigration; | ||
|
||
import static eu.okaeri.configs.migrate.ConfigMigrationDsl.move; | ||
|
||
public class Migration_0005_Move_join_quit_message_to_dedicated_section extends NamedMigration { | ||
|
||
Migration_0005_Move_join_quit_message_to_dedicated_section() { | ||
super("Move joinquit messages from event to joinQuit section", | ||
move("event.joinMessage", "joinQuit.joinMessage"), | ||
move("event.firstJoinMessage", "joinQuit.firstJoinMessage"), | ||
move("event.quitMessage", "joinQuit.quitMessage") | ||
); | ||
} | ||
|
||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
eternalcore-core/src/main/java/com/eternalcode/core/feature/chat/ChatSoundController.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.eternalcode.core.feature.chat; | ||
|
||
import com.eternalcode.core.injector.annotations.component.Controller; | ||
import com.eternalcode.core.notice.NoticeService; | ||
import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.Listener; | ||
import org.bukkit.event.player.AsyncPlayerChatEvent; | ||
|
||
@Controller | ||
class ChatSoundController implements Listener { | ||
|
||
private final NoticeService noticeService; | ||
private final ChatSettings settings; | ||
|
||
ChatSoundController(NoticeService noticeService, ChatSettings settings) { | ||
this.noticeService = noticeService; | ||
this.settings = settings; | ||
} | ||
|
||
@EventHandler | ||
void onSound(AsyncPlayerChatEvent event) { | ||
this.noticeService.create() | ||
.notice(this.settings.chatNotice()) | ||
.onlinePlayers() | ||
.send(); | ||
} | ||
|
||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,25 @@ | ||
package com.eternalcode.core.feature.deathmessage; | ||
|
||
|
||
import com.eternalcode.commons.RandomElementUtil; | ||
import com.eternalcode.core.feature.vanish.VanishService; | ||
import com.eternalcode.core.injector.annotations.Inject; | ||
import com.eternalcode.core.injector.annotations.component.Controller; | ||
import com.eternalcode.core.notice.NoticeService; | ||
import com.eternalcode.multification.notice.Notice; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
import org.bukkit.block.Block; | ||
import org.bukkit.entity.Entity; | ||
import org.bukkit.entity.Player; | ||
import org.bukkit.entity.Projectile; | ||
import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.Listener; | ||
import org.bukkit.event.entity.EntityDamageByEntityEvent; | ||
import org.bukkit.event.entity.EntityDamageEvent; | ||
import org.bukkit.event.entity.PlayerDeathEvent; | ||
import org.bukkit.inventory.ItemStack; | ||
import org.bukkit.projectiles.ProjectileSource; | ||
|
||
@Controller | ||
class DeathMessageController implements Listener { | ||
|
@@ -30,48 +35,190 @@ class DeathMessageController implements Listener { | |
|
||
@EventHandler | ||
void onPlayerDeath(PlayerDeathEvent event) { | ||
Player player = event.getEntity(); | ||
Player victim = event.getEntity(); | ||
event.setDeathMessage(null); | ||
if (this.vanishService.isVanished(player)) { | ||
|
||
if (this.vanishService.isVanished(victim)) { | ||
return; | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add option to not use custom death messages |
||
EntityDamageEvent damageCause = player.getLastDamageCause(); | ||
EntityDamageEvent damageCause = victim.getLastDamageCause(); | ||
if (!(damageCause instanceof EntityDamageByEntityEvent causeByEntity)) { | ||
this.handleEnvironmentalDeath(victim, damageCause); | ||
return; | ||
} | ||
|
||
Entity directDamager = causeByEntity.getDamager(); | ||
if (directDamager instanceof Projectile projectile) { | ||
this.handleProjectileDeath(victim, projectile); | ||
return; | ||
} | ||
|
||
if (directDamager instanceof Player killer) { | ||
this.handlePvPDeath(victim, killer); | ||
return; | ||
} | ||
this.handleEntityDeath(victim, directDamager); | ||
} | ||
|
||
private void handleProjectileDeath(Player victim, Projectile projectile) { | ||
ProjectileSource shooter = projectile.getShooter(); | ||
|
||
if (damageCause instanceof EntityDamageByEntityEvent causeByEntity && causeByEntity.getDamager() instanceof Player killer) { | ||
if (shooter instanceof Player killerPlayer) { | ||
String weaponType = this.getProjectileWeaponType(projectile); | ||
this.noticeService.create() | ||
.noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().deathMessage())) | ||
.placeholder("{PLAYER}", player.getName()) | ||
.placeholder("{KILLER}", killer.getName()) | ||
.noticeOptional(translation -> { | ||
List<Notice> weaponMessages = translation.death().deathMessageByWeapon().get(weaponType); | ||
return weaponMessages != null | ||
? RandomElementUtil.randomElement(weaponMessages) | ||
: RandomElementUtil.randomElement(translation.death().deathMessage()); | ||
}) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.placeholder("{KILLER}", killerPlayer.getName()) | ||
.placeholder("{WEAPON}", weaponType.toLowerCase().replace("_", " ")) | ||
.onlinePlayers() | ||
.send(); | ||
return; | ||
} | ||
|
||
if (damageCause != null) { | ||
EntityDamageEvent.DamageCause cause = damageCause.getCause(); | ||
if (shooter instanceof Entity shooterEntity) { | ||
String entityType = shooterEntity.getType().name(); | ||
String projectileType = projectile.getType().name(); | ||
this.noticeService.create() | ||
.noticeOptional(translation -> { | ||
List<Notice> notifications = translation.event().deathMessageByDamageCause().get(cause); | ||
|
||
if (notifications == null) { | ||
return RandomElementUtil.randomElement(translation.event().unknownDeathCause()); | ||
List<Notice> entityMessages = translation.death().deathMessageByEntity().get(entityType); | ||
if (entityMessages != null) { | ||
return RandomElementUtil.randomElement(entityMessages); | ||
} | ||
|
||
return RandomElementUtil.randomElement(notifications); | ||
List<Notice> projectileMessages = translation.death().deathMessageByEntity().get(projectileType); | ||
if (projectileMessages != null) { | ||
return RandomElementUtil.randomElement(projectileMessages); | ||
} | ||
return RandomElementUtil.randomElement(translation.death().deathMessage()); | ||
}) | ||
.placeholder("{PLAYER}", player.getName()) | ||
.placeholder("{CAUSE}", cause.name()) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.placeholder("{KILLER}", shooterEntity.getName()) | ||
.placeholder("{PROJECTILE}", projectileType.toLowerCase().replace("_", " ")) | ||
.onlinePlayers() | ||
.send(); | ||
return; | ||
} | ||
|
||
String projectileType = projectile.getType().name(); | ||
this.noticeService.create() | ||
.noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().unknownDeathCause())) | ||
.placeholder("{PLAYER}", player.getName()) | ||
.noticeOptional(translation -> { | ||
List<Notice> projectileMessages = translation.death().deathMessageByEntity().get(projectileType); | ||
return projectileMessages != null | ||
? RandomElementUtil.randomElement(projectileMessages) | ||
: RandomElementUtil.randomElement(translation.death().unknownDeathCause()); | ||
}) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.placeholder("{KILLER}", projectileType.toLowerCase().replace("_", " ")) | ||
.onlinePlayers() | ||
.send(); | ||
} | ||
|
||
private void handlePvPDeath(Player victim, Player killer) { | ||
String weaponType = this.getWeaponType(killer.getInventory().getItemInMainHand()); | ||
this.noticeService.create() | ||
.noticeOptional(translation -> Optional.ofNullable(translation.death().deathMessageByWeapon().get(weaponType)) | ||
.filter(list -> !list.isEmpty()) | ||
.map(RandomElementUtil::randomElement) | ||
.orElseGet(() -> RandomElementUtil.randomElement(translation.death().deathMessage()))) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.placeholder("{KILLER}", killer.getName()) | ||
.placeholder("{WEAPON}", weaponType.toLowerCase().replace("_", " ")) | ||
.onlinePlayers() | ||
.send(); | ||
} | ||
|
||
private void handleEntityDeath(Player victim, Entity damager) { | ||
String entityType = damager.getType().name(); | ||
this.noticeService.create() | ||
.noticeOptional(translation -> { | ||
List<Notice> entityMessages = translation.death().deathMessageByEntity().get(entityType); | ||
return entityMessages != null | ||
? RandomElementUtil.randomElement(entityMessages) | ||
: RandomElementUtil.randomElement(translation.death().deathMessage()); | ||
}) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.placeholder("{KILLER}", damager.getName()) | ||
.onlinePlayers() | ||
.send(); | ||
} | ||
|
||
private void handleEnvironmentalDeath(Player victim, EntityDamageEvent damageCause) { | ||
if (damageCause == null) { | ||
this.handleUnknownDeath(victim); | ||
return; | ||
} | ||
|
||
EntityDamageEvent.DamageCause cause = damageCause.getCause(); | ||
if (cause == EntityDamageEvent.DamageCause.CONTACT) { | ||
String blockType = this.getContactBlockType(victim); | ||
if (blockType != null) { | ||
this.noticeService.create() | ||
.noticeOptional(translation -> { | ||
List<Notice> blockMessages = translation.death().deathMessageByEntity().get(blockType); | ||
return blockMessages != null | ||
? RandomElementUtil.randomElement(blockMessages) | ||
: RandomElementUtil.randomElement(translation.death().unknownDeathCause()); | ||
}) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.onlinePlayers() | ||
.send(); | ||
return; | ||
} | ||
} | ||
|
||
this.noticeService.create() | ||
.noticeOptional(translation -> { | ||
List<Notice> notifications = translation.death().deathMessageByDamageCause().get(cause); | ||
return notifications != null | ||
? RandomElementUtil.randomElement(notifications) | ||
: RandomElementUtil.randomElement(translation.death().unknownDeathCause()); | ||
}) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.placeholder("{CAUSE}", cause.name()) | ||
.onlinePlayers() | ||
.send(); | ||
} | ||
|
||
private void handleUnknownDeath(Player victim) { | ||
this.noticeService.create() | ||
.noticeOptional(translation -> RandomElementUtil.randomElement(translation.death().unknownDeathCause())) | ||
.placeholder("{PLAYER}", victim.getName()) | ||
.onlinePlayers() | ||
.send(); | ||
} | ||
|
||
private String getProjectileWeaponType(Projectile projectile) { | ||
return switch (projectile.getType()) { | ||
case ARROW, SPECTRAL_ARROW -> "BOW"; | ||
case FIREBALL, SMALL_FIREBALL -> "FIREBALL"; | ||
default -> projectile.getType().name(); | ||
}; | ||
} | ||
|
||
private String getWeaponType(ItemStack item) { | ||
return item == null || item.getType().isAir() | ||
? "HAND" | ||
: item.getType().name(); | ||
} | ||
|
||
private String getContactBlockType(Player player) { | ||
Block blockAtFeet = player.getLocation().getBlock(); | ||
Block blockAtEyes = player.getEyeLocation().getBlock(); | ||
|
||
for (Block block : new Block[] { blockAtFeet, blockAtEyes }) { | ||
String type = switch (block.getType()) { | ||
case CACTUS, MAGMA_BLOCK, SWEET_BERRY_BUSH, WITHER_ROSE -> block.getType().name(); | ||
default -> null; | ||
}; | ||
if (type != null) { | ||
return type; | ||
} | ||
} | ||
return null; | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.