ProjectAres/PGM/src/main/java/tc/oc/pgm/listeners/FormattingListener.java

93 lines
4.3 KiB
Java

package tc.oc.pgm.listeners;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TranslatableComponent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import tc.oc.commons.bukkit.chat.ListComponent;
import tc.oc.commons.bukkit.chat.NameStyle;
import tc.oc.commons.bukkit.util.BukkitUtils;
import tc.oc.commons.core.chat.Component;
import tc.oc.commons.core.chat.Components;
import tc.oc.pgm.core.CoreLeakEvent;
import tc.oc.pgm.destroyable.Destroyable;
import tc.oc.pgm.destroyable.DestroyableContribution;
import tc.oc.pgm.destroyable.DestroyableDestroyedEvent;
import tc.oc.pgm.wool.PlayerWoolPlaceEvent;
public class FormattingListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void playerWoolPlace(final PlayerWoolPlaceEvent event) {
if (event.getWool().isVisible()) {
event.getMatch().sendMessage(new TranslatableComponent("match.complete.wool",
event.getPlayer().getStyledName(NameStyle.COLOR),
BukkitUtils.woolName(event.getWool().getDyeColor()),
event.getPlayer().getParty().getComponentName()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void coreLeak(final CoreLeakEvent event) {
if (event.getCore().isVisible()) {
event.getMatch().sendMessage(new Component(new TranslatableComponent("match.complete.core",
Components.blank(),
event.getCore().getComponentName(),
event.getCore().getOwner().getComponentName()),
net.md_5.bungee.api.ChatColor.RED));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void destroyableDestroyed(final DestroyableDestroyedEvent event) {
Destroyable destroyable = event.getDestroyable();
if (destroyable.isVisible()) {
List<DestroyableContribution> sorted = new ArrayList<>(event.getDestroyable().getContributions());
Collections.sort(sorted, new Comparator<DestroyableContribution>() {
@Override
public int compare(DestroyableContribution o1, DestroyableContribution o2) {
return Double.compare(o2.getPercentage(), o1.getPercentage()); // reverse
}
});
List<BaseComponent> contributors = new ArrayList<>();
boolean someExcluded = false;
for(DestroyableContribution entry : sorted) {
if(entry.getPercentage() > 0.2) { // 20% necessary to be included
contributors.add(new TranslatableComponent(
"objective.credit.player.percentage",
entry.getPlayerState().getStyledName(NameStyle.COLOR),
new Component(String.valueOf(Math.round(entry.getPercentage() * 100)), net.md_5.bungee.api.ChatColor.AQUA)
));
} else {
someExcluded = true;
}
}
BaseComponent credit;
if(contributors.isEmpty()) {
credit = someExcluded ? new TranslatableComponent("objective.credit.many") // All contributors < 20%
: new TranslatableComponent("objective.credit.unknown"); // No contributors
} else {
if(someExcluded) {
contributors.add(new TranslatableComponent("objective.credit.etc")); // Some contributors < 20%
}
credit = new ListComponent(contributors);
}
event.getMatch().sendMessage(new TranslatableComponent(
"match.complete.destroyable",
credit,
destroyable.getComponentName(),
destroyable.getOwner().getComponentName()
));
}
}
}