Mineplex/GOD DAMN COSMETICS/gadget/gadgets/item/GameItemGadget.java

123 lines
3.9 KiB
Java
Raw Normal View History

package mineplex.core.gadget.gadgets.item;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import mineplex.core.common.Pair;
import mineplex.core.common.jsonchat.ClickEvent;
import mineplex.core.common.jsonchat.HoverEvent;
import mineplex.core.common.jsonchat.JsonMessage;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.common.util.UtilTime;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.gadgets.Ammo;
import mineplex.core.gadget.types.ItemGadget;
public abstract class GameItemGadget extends ItemGadget
{
private static final long COOLDOWN_INVITE = TimeUnit.SECONDS.toMillis(8);
protected final Map<String, Pair<String, Long>> _invites;
private final String _command;
public GameItemGadget(GadgetManager manager, String name, String[] desc, int cost, Material mat, byte data, Ammo ammo)
{
super(manager, name, desc, cost, mat, data, COOLDOWN_INVITE, ammo);
_invites = new HashMap<>(3);
_command = "/play-" + name.toLowerCase().replace(" ", "-");
}
@Override
public void ActivateCustom(Player player)
{
for (Player nearby : UtilPlayer.getNearby(player.getLocation(), 3))
{
if (player.equals(nearby))
{
continue;
}
sendGameInvite(nearby, player);
return;
}
}
protected abstract void startGame(Player invitee, Player inviter);
private void sendGameInvite(Player invitee, Player inviter)
{
inviter.sendMessage(F.main(Manager.getName(), "You challenged " + F.name(invitee.getName()) + " to play " + F.name(getName()) + "!"));
new JsonMessage(F.main(Manager.getName(), F.color("CLICK HERE", C.cYellowB) + " to play " + F.name(getName()) + " with " + F.name(inviter.getName()) + "!"))
.hover(HoverEvent.SHOW_TEXT, C.cYellow + "Click to play " + F.name(getName()) + " with " + F.name(inviter.getName()))
.click(ClickEvent.RUN_COMMAND, _command + " " + inviter.getName())
.sendToPlayer(invitee);
invitee.playSound(invitee.getLocation(), Sound.NOTE_PIANO, 1, 1);
inviter.playSound(inviter.getLocation(), Sound.NOTE_PIANO, 1, 1);
_invites.put(inviter.getName(), Pair.create(invitee.getName(), System.currentTimeMillis()));
}
@EventHandler
public void commandProcess(PlayerCommandPreprocessEvent event)
{
String command = event.getMessage();
String[] split = command.split(" ");
if (split.length != 2 || !split[0].equals(_command))
{
return;
}
event.setCancelled(true);
Player caller = event.getPlayer();
String player = split[1];
Pair<String, Long> pair = _invites.get(player);
if (pair == null || !pair.getLeft().equals(caller.getName()) || UtilTime.elapsed(pair.getRight(), COOLDOWN_INVITE))
{
return;
}
Player inviter = UtilPlayer.searchExact(player);
if (inviter == null)
{
caller.sendMessage(F.main(Manager.getName(), "Looks like the player who challenged you is no longer online."));
return;
}
_invites.remove(player);
caller.sendMessage(F.main(Manager.getName(), F.name(inviter.getName()) + " challenged you to a game of " + F.name(getName()) + "!"));
inviter.sendMessage(F.main(Manager.getName(), "You challenged " + F.name(caller.getName()) + " to a game of " + F.name(getName()) + "!"));
startGame(caller, inviter);
}
protected void endGame(Player winner, Player loser)
{
UtilTextMiddle.display(C.cYellowB + "YOU WON", "", 10, 30, 10, winner);
UtilTextMiddle.display(C.cRedB + "YOU LOST", "", 10, 30, 10, loser);
winner.getWorld().playSound(winner.getLocation(), Sound.VILLAGER_YES, 1, 1);
loser.getWorld().playSound(winner.getLocation(), Sound.VILLAGER_NO, 1, 1);
}
protected void drawGame(Player... players)
{
UtilTextMiddle.display(C.cRedB + "DRAW", "", 10, 30, 10, players);
}
}