Fixed guild, party chat and some other messages

This commit is contained in:
Jules 2025-10-13 03:09:39 +02:00
parent 05bd396a40
commit 864f4a2f67
8 changed files with 44 additions and 37 deletions

View File

@ -5,32 +5,36 @@ import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.guild.provided.Guild;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
public class GuildChatEvent extends PlayerDataEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private final Guild guild;
private boolean cancelled;
@Deprecated
private String message;
private boolean cancelled;
public GuildChatEvent(PlayerData playerData, String message) {
super(playerData);
this.guild = playerData.getGuild();
this.message = message;
}
public void setMessage(String message) {
public void setMessage(@Nullable String message) {
this.message = message;
}
@Deprecated
@Nullable
public String getMessage() {
return message;
}
@NotNull
public Guild getGuild() {
return guild;
}

View File

@ -5,6 +5,10 @@ import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.provided.Party;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
public class PartyChatEvent extends PlayerDataEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
@ -12,23 +16,25 @@ public class PartyChatEvent extends PlayerDataEvent implements Cancellable {
private final Party party;
private boolean cancelled;
private String message;
private String rawMessage;
public PartyChatEvent(Party party, PlayerData playerData, String message) {
public PartyChatEvent(Party party, PlayerData playerData, String rawMessage) {
super(playerData);
this.party = party;
this.message = message;
this.rawMessage = rawMessage;
}
public void setMessage(String message) {
this.message = message;
public void setMessage(@Nullable String rawMessage) {
this.rawMessage = Objects.requireNonNull(rawMessage, "Message cannot be null");
}
@Nullable
public String getMessage() {
return message;
return rawMessage;
}
@NotNull
public Party getParty() {
return party;
}

View File

@ -42,8 +42,7 @@ public class WithdrawCommand extends RegisteredCommand {
else amount = Integer.parseInt(args[args.length - 1]);
Validate.isTrue(amount >= 0);
} catch (IllegalArgumentException exception) {
if (sender instanceof Player)
Message.WITHDRAW_INVALID_AMOUNT.prepare("arg", args[0]).send((MMOPlayerData) sender);
if (sender instanceof Player) Message.WITHDRAW_INVALID_AMOUNT.send((Player) sender, "arg", args[0]);
else sender.sendMessage(ChatColor.RED + "Please specify a valid number.");
return true;
}

View File

@ -78,7 +78,7 @@ public class PvPModeListener implements Listener {
if (event.getDamage() > 0) {
final var left = targetData.getCombat().getInvulnerableTill() - System.currentTimeMillis();
final var leftFormatted = MythicLib.plugin.getMMOConfig().decimal.format(left / 1000d);
Message.PVP_MODE_CANNOT_HIT_INVULNERABLE_TARGET.prepare("left", leftFormatted).send(source);
Message.PVP_MODE_CANNOT_HIT_INVULNERABLE_TARGET.send(source, "left", leftFormatted);
}
event.setCancelled(true);
return;
@ -89,7 +89,7 @@ public class PvPModeListener implements Listener {
if (event.getDamage() > 0) {
final var left = sourceData.getCombat().getInvulnerableTill() - System.currentTimeMillis();
final var leftFormatted = MythicLib.plugin.getMMOConfig().decimal.format(left / 1000d);
Message.PVP_MODE_CANNOT_HIT_INVULNERABLE_SELF.prepare("left", leftFormatted).send(source);
Message.PVP_MODE_CANNOT_HIT_INVULNERABLE_SELF.send(source, "left", leftFormatted);
}
event.setCancelled(true);
return;

View File

@ -228,7 +228,7 @@ public class PlayerProfessions {
var mainExpGiven = profession.getExperience().evaluate(newLevel, playerData);
playerData.giveExperience(mainExpGiven, EXPSource.PROFESSION_TO_CLASS);
} catch (FormulaFailsafeException exception) {
exception.log("Could not evaluate profession newLevel-up exp for %s", profession.getId());
exception.log("Could not evaluate profession level-up exp for %s", profession.getId());
}
// Apply profession experience table
@ -240,8 +240,10 @@ public class PlayerProfessions {
if (newLevel > oldLevel) {
setLevel(profession, newLevel, PlayerLevelChangeEvent.Reason.LEVEL_UP);
new SmallParticleEffect(playerData.getPlayer(), VParticle.INSTANT_EFFECT.get()); // TODO move to playerMessage
Message.PROFESSION_LEVEL_UP.send(playerData, "newLevel", newLevel, "profession", profession.getName());
if (playerData.isOnline()) {
new SmallParticleEffect(playerData.getPlayer(), VParticle.INSTANT_EFFECT.get()); // TODO move to playerMessage
Message.PROFESSION_LEVEL_UP.send(playerData, "level", newLevel, "profession", profession.getName());
}
}
if (playerData.isOnline()) {

View File

@ -68,13 +68,14 @@ public class MMOCorePartyModule implements PartyModule, Listener {
event.setCancelled(true);
// Running it in a delayed task is recommended
// Run it on main server thread
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
var rawMessage = event.getMessage().substring(MMOCore.plugin.configManager.partyChatPrefix.length());
var message = Message.PARTY_CHAT.prepare("player", data.getPlayer().getName(), "message", rawMessage);
var called = new PartyChatEvent(party, data, message.getRawContent());
final var rawMessage = event.getMessage().substring(MMOCore.plugin.configManager.partyChatPrefix.length());
final var called = new PartyChatEvent(party, data, rawMessage);
Bukkit.getPluginManager().callEvent(called);
if (!called.isCancelled()) party.getOnlineMembers().forEach(member -> message.send(member.getPlayer()));
if (called.isCancelled() || called.getMessage() == null) return;
party.getOnlineMembers().forEach(member -> Message.PARTY_CHAT.send(member.getPlayer(), "player", data.getPlayer().getName(), "message", called.getMessage()));
});
}

View File

@ -2,7 +2,6 @@ package net.Indyuce.mmocore.player;
import io.lumine.mythic.lib.UtilityMethods;
import io.lumine.mythic.lib.message.PlayerMessage;
import io.lumine.mythic.lib.message.ReadyMessage;
import io.lumine.mythic.lib.message.type.EmptyMessage;
import io.lumine.mythic.lib.util.config.YamlFile;
import io.lumine.mythic.lib.util.config.YamlUtils;
@ -204,14 +203,8 @@ public enum Message {
this.candidates = array;
}
@NotNull
public ReadyMessage prepare(@NotNull Object... placeholders) {
return this.wrapped.prepare(null, placeholders);
}
public <T extends Player> void send(@NotNull Iterable<T> players, @NotNull Object... placeholders) {
final var message = this.wrapped.prepare(null, placeholders);
for (var player : players) message.send(player);
for (var player : players) this.send(player, placeholders);
}
public void send(@NotNull Player player, @NotNull Object... placeholders) {

View File

@ -22,15 +22,17 @@ public class GuildListener implements Listener {
event.setCancelled(true);
// Run it sync
// Run it on main server thread
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
var rawMessage = event.getMessage().substring(MMOCore.plugin.nativeGuildManager.getConfig().getPrefix().length());
var message = Message.GUILD_CHAT.prepare("player", data.getPlayer().getName(), "tag", data.getGuild().getTag(), "message", rawMessage);
GuildChatEvent called = new GuildChatEvent(data, message.getRawContent());
final var rawMessage = event.getMessage().substring(MMOCore.plugin.nativeGuildManager.getConfig().getPrefix().length());
final var called = new GuildChatEvent(data, rawMessage);
Bukkit.getPluginManager().callEvent(called);
if (!called.isCancelled()) data.getGuild().forEachMember(member -> {
if (called.isCancelled() || called.getMessage() == null) return;
data.getGuild().forEachMember(member -> {
Player online = Bukkit.getPlayer(member);
if (online != null) message.send(online);
if (online != null)
Message.GUILD_CHAT.send(online, "player", data.getPlayer().getName(), "tag", data.getGuild().getTag(), "message", called.getMessage());
});
});
}