mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 13:16:45 +01:00
parent
a85fd024b2
commit
27ae7ae1a7
@ -1,5 +1,16 @@
|
||||
Version 2.1.172
|
||||
Added 'mcmmo.broadcast.levelup' permission node, if a player lacks this node they will not have their level up milestones broadcast to chat
|
||||
Power Levels are now included in level up broadcasts and they have their own settings (mirroring the existing settings for skill broadcasts)
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Enabled' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Milestone_Interval' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Send_To_Console' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Only_Party_Members' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Only_Same_World' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Distance_Restrictions.Restrict_Distance' to config.yml
|
||||
Added 'General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Distance_Restrictions.Restricted_Radius' to config.yml
|
||||
Added 'Broadcasts.PowerLevelUpMilestone' to locale
|
||||
|
||||
You can now disable the XP orbs from being dropped when Knock On Wood triggers during Tree Feller
|
||||
Added 'Skills.Woodcutting.TreeFeller.Knock_On_Wood.Add_XP_Orbs_To_Drops' to advanced.yml
|
||||
Updated german locale (thanks TheBusyBiscuit)
|
||||
|
@ -589,4 +589,12 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public int getLevelUpBroadcastRadius() { return config.getInt("General.Level_Up_Chat_Broadcasts.Broadcast_Targets.Distance_Restrictions.Restricted_Radius", 100); }
|
||||
public int getLevelUpBroadcastInterval() { return config.getInt("General.Level_Up_Chat_Broadcasts.Milestone_Interval", 100); }
|
||||
|
||||
public boolean shouldPowerLevelUpBroadcasts() { return config.getBoolean("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Enabled", true); }
|
||||
public boolean shouldPowerLevelUpBroadcastToConsole() { return config.getBoolean("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Send_To_Console", true); }
|
||||
public boolean isPowerLevelUpBroadcastsPartyMembersOnly() { return config.getBoolean("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Only_Party_Members", false); }
|
||||
public boolean isPowerLevelUpBroadcastsSameWorldOnly() { return config.getBoolean("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Only_Same_World", false); }
|
||||
public boolean shouldPowerLevelUpBroadcastsRestrictDistance() { return config.getBoolean("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Distance_Restrictions.Restrict_Distance", false); }
|
||||
public int getPowerLevelUpBroadcastRadius() { return config.getInt("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Distance_Restrictions.Restricted_Radius", 100); }
|
||||
public int getPowerLevelUpBroadcastInterval() { return config.getInt("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Milestone_Interval", 100); }
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,100 @@
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.party.Party;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
//TODO: Allow for offline players to broadcast
|
||||
public class PowerLevelUpBroadcastPredicate<T extends CommandSender> implements Predicate<T> {
|
||||
|
||||
private final @NotNull T broadcaster;
|
||||
|
||||
public PowerLevelUpBroadcastPredicate(@NotNull T broadcaster) {
|
||||
this.broadcaster = broadcaster;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(@NotNull T t) {
|
||||
Player broadcastingPlayer = (Player) broadcaster; //Always a player no need to check cast
|
||||
|
||||
//Broadcaster should be online
|
||||
if(!broadcastingPlayer.isOnline()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
McMMOPlayer mmoBroadcastingPlayer = UserManager.getPlayer(broadcastingPlayer);
|
||||
|
||||
if(mmoBroadcastingPlayer == null) {
|
||||
//This should never be null, but just in case...
|
||||
mcMMO.p.getLogger().severe("McMMOPlayer was null for broadcaster in LevelUpBroadcastPredicate when it should never be null!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(t instanceof Player) {
|
||||
Player listeningPlayer = (Player) t;
|
||||
|
||||
//Party Member Check
|
||||
if(Config.getInstance().isPowerLevelUpBroadcastsPartyMembersOnly()) {
|
||||
McMMOPlayer mmoListeningPlayer = UserManager.getPlayer(listeningPlayer);
|
||||
|
||||
if(mmoListeningPlayer == null) {
|
||||
return false; //No profile so therefor no party
|
||||
}
|
||||
|
||||
Party playerWhoLeveledParty = mmoBroadcastingPlayer.getParty();
|
||||
Party broadcastRecipientParty = mmoListeningPlayer.getParty();
|
||||
|
||||
if(playerWhoLeveledParty == null || broadcastRecipientParty == null) {
|
||||
return false; //No party on either player when being in the same party is required
|
||||
}
|
||||
|
||||
if(!playerWhoLeveledParty.equals(broadcastRecipientParty)) {
|
||||
return false; //Not in the same party when it is required
|
||||
}
|
||||
}
|
||||
|
||||
//Same world check
|
||||
if(isPowerLevelUpBroadcastsSameWorldOnly()) {
|
||||
if(!mmoBroadcastingPlayer.getPlayer().getWorld().equals(listeningPlayer.getWorld())) {
|
||||
return false; //Not in the same world when its required
|
||||
}
|
||||
|
||||
//Distance checks
|
||||
if(Config.getInstance().shouldPowerLevelUpBroadcastsRestrictDistance()) {
|
||||
if(!Misc.isNear(mmoBroadcastingPlayer.getPlayer().getLocation(), listeningPlayer.getLocation(), Config.getInstance().getPowerLevelUpBroadcastRadius())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Visibility checks
|
||||
if(!listeningPlayer.canSee(mmoBroadcastingPlayer.getPlayer())) {
|
||||
return false; //Player who leveled should be invisible to this player so don't send the message
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
//Send out to console
|
||||
return Config.getInstance().shouldPowerLevelUpBroadcastToConsole();
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isPowerLevelUpBroadcastsSameWorldOnly() {
|
||||
return Config.getInstance().isPowerLevelUpBroadcastsSameWorldOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PowerLevelUpBroadcastPredicate{" +
|
||||
"broadcaster=" + broadcaster +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -245,6 +245,8 @@ public final class EventUtils {
|
||||
} else {
|
||||
if (isLevelUp) {
|
||||
NotificationManager.processLevelUpBroadcasting(mmoPlayer, skill, mmoPlayer.getSkillLevel(skill));
|
||||
NotificationManager.processPowerLevelUpBroadcasting(mmoPlayer, mmoPlayer.getPowerLevel());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -279,6 +281,7 @@ public final class EventUtils {
|
||||
} else {
|
||||
if (isLevelUp) {
|
||||
NotificationManager.processLevelUpBroadcasting(mmoPlayer, skill, mmoPlayer.getSkillLevel(skill));
|
||||
NotificationManager.processPowerLevelUpBroadcasting(mmoPlayer, mmoPlayer.getPowerLevel());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@ package com.gmail.nossr50.util.player;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.LevelUpBroadcastPredicate;
|
||||
import com.gmail.nossr50.datatypes.PowerLevelUpBroadcastPredicate;
|
||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||
import com.gmail.nossr50.datatypes.notifications.SensitiveCommandType;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
@ -299,9 +300,47 @@ public class NotificationManager {
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Remove the code duplication, am lazy atm
|
||||
public static void processPowerLevelUpBroadcasting(@NotNull McMMOPlayer mmoPlayer, int powerLevel) {
|
||||
if(powerLevel <= 0)
|
||||
return;
|
||||
|
||||
//Check if broadcasting is enabled
|
||||
if(Config.getInstance().shouldPowerLevelUpBroadcasts()) {
|
||||
//Permission check
|
||||
if(!Permissions.levelUpBroadcast(mmoPlayer.getPlayer())) {
|
||||
return;
|
||||
}
|
||||
|
||||
int levelInterval = Config.getInstance().getPowerLevelUpBroadcastInterval();
|
||||
int remainder = powerLevel % levelInterval;
|
||||
|
||||
if(remainder == 0) {
|
||||
//Grab appropriate audience
|
||||
Audience audience = mcMMO.getAudiences().filter(getPowerLevelUpBroadcastPredicate(mmoPlayer.getPlayer()));
|
||||
//TODO: Make prettier
|
||||
HoverEvent<Component> levelMilestoneHover = Component.text(mmoPlayer.getPlayer().getName())
|
||||
.append(Component.newline())
|
||||
.append(Component.text(LocalDate.now().toString()))
|
||||
.append(Component.newline())
|
||||
.append(Component.text("Power level has reached "+powerLevel)).color(TextColor.fromHexString(HEX_BEIGE_COLOR))
|
||||
.asHoverEvent();
|
||||
|
||||
String localeMessage = LocaleLoader.getString("Broadcasts.PowerLevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), powerLevel);
|
||||
Component message = Component.text(localeMessage).hoverEvent(levelMilestoneHover);
|
||||
|
||||
audience.sendMessage(Identity.nil(), message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Could cache
|
||||
public static @NotNull LevelUpBroadcastPredicate<CommandSender> getLevelUpBroadcastPredicate(@NotNull CommandSender levelUpPlayer) {
|
||||
return new LevelUpBroadcastPredicate<>(levelUpPlayer);
|
||||
}
|
||||
|
||||
public static @NotNull PowerLevelUpBroadcastPredicate<CommandSender> getPowerLevelUpBroadcastPredicate(@NotNull CommandSender levelUpPlayer) {
|
||||
return new PowerLevelUpBroadcastPredicate<>(levelUpPlayer);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,6 +12,23 @@ General:
|
||||
Level_Up_Chat_Broadcasts:
|
||||
# Whether or not level up broadcasts are enabled
|
||||
Enabled: true
|
||||
# Whether or not you want power level milestones to be broadcast
|
||||
Broadcast_Powerlevels:
|
||||
Enabled: true
|
||||
# How often to broadcast, you can change this to 1 to always broadcast a level up event, a setting of 100 will limit it to every 100 levels (for example level 100, level 200, etc)
|
||||
Milestone_Interval: 100
|
||||
Broadcast_Targets:
|
||||
# Send the message to the console as well
|
||||
Send_To_Console: true
|
||||
# Whether or not to only send chat messages to party members
|
||||
Only_Party_Members: false
|
||||
# Whether or not players who recieve a level up broadcast have to be on the same world as the one who leveled up
|
||||
Only_Same_World: false
|
||||
# Distance restrictions
|
||||
Distance_Restrictions:
|
||||
Restrict_Distance: false
|
||||
# When using Restrict_Distance the blow setting configures the range of the broadcast
|
||||
Restricted_Radius: 100
|
||||
# How often to broadcast, you can change this to 1 to always broadcast a level up event, a setting of 100 will limit it to every 100 levels (for example level 100, level 200, etc)
|
||||
Milestone_Interval: 100
|
||||
Broadcast_Targets:
|
||||
|
@ -1136,4 +1136,5 @@ Chat.Identity.Console=&6* Console *
|
||||
Chat.Channel.On=&6(&amcMMO-Chat&6) &eYour chat messages will now be automatically delivered to the &a{0}&e chat channel.
|
||||
Chat.Channel.Off=&6(&amcMMO-Chat&6) &7Your chat messages will no longer be automatically delivered to specific chat channels.
|
||||
Chat.Spy.Party=&6[&eSPY&6-&a{2}&6] &r{0} &b\u2192 &r{1}
|
||||
Broadcasts.LevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached level &a{1}&7 in [[DARK_AQUA]]{2}&7!
|
||||
Broadcasts.LevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached level &a{1}&7 in [[DARK_AQUA]]{2}&7!
|
||||
Broadcasts.PowerLevelUpMilestone=&6(&amcMMO&6) {0}&7 has reached a Power level of &a{1}&7!
|
Loading…
Reference in New Issue
Block a user