1package com.runehive.content.clanchannel.channel;
3import com.google.gson.*;
4import com.runehive.Config;
5import com.runehive.content.Yell;
6import com.runehive.content.clanchannel.ClanMember;
7import com.runehive.content.clanchannel.ClanRank;
8import com.runehive.content.clanchannel.ClanRepository;
9import com.runehive.content.clanchannel.ClanType;
10import com.runehive.content.clanchannel.content.*;
11import com.runehive.game.world.entity.mob.Mob;
12import com.runehive.game.world.entity.mob.UpdateFlag;
13import com.runehive.game.world.entity.mob.player.Player;
14import com.runehive.game.world.items.Item;
15import com.runehive.game.world.items.containers.pricechecker.PriceType;
16import com.runehive.game.world.region.RegionManager;
17import com.runehive.net.packet.out.SendMessage;
18import com.runehive.net.packet.out.SendScrollbar;
19import com.runehive.net.packet.out.SendString;
20import com.runehive.net.packet.out.SendTooltip;
21import com.runehive.util.Difficulty;
22import com.runehive.util.Utility;
23import com.runehive.util.parser.GsonParser;
26import java.util.function.Consumer;
36 private static final Gson
GSON =
new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();
51 private final Set<ClanMember>
members =
new HashSet<>();
64 player.
send(
new SendMessage(
"There is already a clan channel under your name!"));
67 int[]
showcase =
new int[]{1155, 1117, 1075};
69 channel.management.name = player.
getName();
70 channel.details.owner = player.
getName();
71 channel.management.slogan =
"Generic slogan here";
75 channel.showcase.showcase =
showcase;
76 Arrays.stream(
showcase).forEach(i ->
channel.showcase.showcaseItems.add(i));
90 }
else if (!
members.contains(member)) {
91 handler.sendConnectionWarning(player, member);
104 if (!
handler.attemptConnection(player, member)) {
108 if (
handler.testPassword(player, member)) {
124 player.clanChannel =
this;
125 player.clanTag =
getTag();
126 player.clanTagColor =
details.level.getColor();
130 player.lastClan =
"";
135 member.player = Optional.of(player);
149 Iterator<ClanMember> iterator =
members.iterator();
150 while (iterator.hasNext()) {
152 if (member.
name.equals(name)) {
156 member.
player.ifPresent(player -> {
160 player.clanChannel =
null;
162 player.send(
new SendMessage(
"You have disconnected from the clan chat channel."));
165 player.lastClan =
details.owner;
167 member.player = Optional.empty();
177 public void ban(String name) {
179 Iterator<ClanMember> iterator =
members.iterator();
180 while (iterator.hasNext()) {
183 if (member.
name.equals(name)) {
188 member.
player.ifPresent(player -> {
191 player.lastClan =
details.owner;
192 player.clanChannel =
null;
194 player.send(
new SendMessage(
"You have been banned from the clan chat channel."));
195 member.player = Optional.empty();
215 for (
int idx = 0; idx <
size; idx++) {
217 Optional<String> banned = valid ? Optional.of(
bannedMembers.get(idx)) : Optional.empty();
223 player.
send(
new SendMessage(
"You have unbanned " + name +
" from the clan chat channel."));
228 if (experience +
details.experience > Double.MAX_VALUE)
230 details.experience += experience;
233 details.level = level;
236 player.clanTagColor = level.
getColor();
244 if (
details.clanTask ==
null) {
247 details.clanTask = task;
263 int progress = details.taskAmount - amount;
265 int reward =
details.clanTask.getReward();
266 details.points += reward;
268 details.clanTask =
null;
275 details.taskAmount = progress;
278 member.expGained += experience;
280 member.playerKills++;
285 member.player.ifPresent(player -> {
286 if (!player.lastClan.isEmpty() && !player.lastClan.equalsIgnoreCase(player.getName())) {
289 channel.disconnect(name,
false);
300 if (
details.completedAchievement(list)) {
301 message(
"Achievement completed! " + list.details,
"We have earned " + list.getPoints() +
" CP and " +
Utility.
formatDigits(list.getExperience()) +
" Clan EXP.");
308 member.
player.ifPresent(player -> {
309 if (!player.lastClan.isEmpty() && !player.lastClan.equalsIgnoreCase(player.getName())) {
319 if (
getName().equalsIgnoreCase(name)) {
320 player.
message(
"Your clan channel name is already set to " +
getName() +
"!");
324 player.
message(
"The name you have entered was prohibited! Try something else.");
328 player.
message(
"There is already a clan that exists with that name!");
335 management.name = name;
336 message(
"The clan name has been changed to: <col=255>" + name +
"</col>.");
341 if (tag.length() > 4)
343 if (
getTag().equalsIgnoreCase(tag)) {
344 player.
message(
"Your clan channel tag is already set to " +
getTag() +
"!");
348 player.
message(
"The tag you have entered was prohibited! Try something else.");
352 player.
message(
"There is already a clan that exists with that tag!");
358 message(
"The clan tag has been changed to: <col=255>" +
getTag() +
"</col>.");
364 player.
message(
"The slogan you have entered was prohibited! Try something else.");
373 if (member.name.equalsIgnoreCase(name))
374 return Optional.of(member);
376 return Optional.empty();
380 List<ClanMember> list =
new LinkedList<>();
381 forEach(member -> member.player.ifPresent(player -> list.add(member)));
388 member.player.ifPresent(player);
393 public void forEach(Consumer<ClanMember> member) {
399 forEach(member -> member.message(messages));
405 if (Arrays.stream(
Yell.
INVALID).anyMatch(message::contains)) {
406 member.message(
"Your message contains invalid characters.");
412 member.message(
"Your rank is too low to talk in this channel.");
422 Set<Player> players =
new HashSet<>();
424 long tax = value / 4;
428 if (Objects.equals(nearby.clanChannel, player.
clanChannel)) {
433 long split = (value - tax) / players.size();
434 players.forEach(other -> {
435 getMember(other.getName()).ifPresent(member ->
436 member.message(
Utility.
formatDigits(split) +
" coins have been deposited into your bank vault."));
462 return member !=
null &&
management.canManage(member);
467 if (banned.equalsIgnoreCase(name)) {
483 return management.password !=
null && !
management.password.isEmpty();
530 items[count] =
new Item(iem, 1);
531 if (items[count].isStackable()) {
540 management.color = color;
544 JsonObject
object =
new JsonObject();
545 object.addProperty(
"owner",
details.owner);
546 object.addProperty(
"established",
details.established);
548 object.addProperty(
"password",
management.password);
549 object.addProperty(
"forum",
management.forum);
550 object.addProperty(
"slogan",
management.slogan);
551 object.addProperty(
"clan-tag",
management.tag);
552 object.addProperty(
"clan-type", String.valueOf(
details.type));
553 object.addProperty(
"clan-color",
management.color);
554 object.addProperty(
"clan-points",
details.points);
555 object.addProperty(
"clan-experience",
details.experience);
556 object.addProperty(
"clan-level", String.valueOf(
details.level));
557 if (
details.clanTask !=
null) {
558 object.addProperty(
"clan-task", String.valueOf(
details.clanTask));
560 object.addProperty(
"task-amount",
details.taskAmount);
561 object.addProperty(
"locked",
management.locked);
562 object.addProperty(
"lootshare",
management.lootshare);
565 object.add(
"showcase",
GSON.toJsonTree(
showcase.showcase));
566 object.add(
"showcase-items",
GSON.toJsonTree(
showcase.showcaseItems));
569 JsonArray memberArray =
new JsonArray();
571 JsonObject memberObj =
new JsonObject();
572 memberObj.addProperty(
"name", member.name);
573 memberObj.addProperty(
"joined", member.joined);
574 memberObj.addProperty(
"rank", String.valueOf(member.rank));
575 memberObj.addProperty(
"exp-gained", member.expGained);
576 memberObj.addProperty(
"npc-kills", member.npcKills);
577 memberObj.addProperty(
"player-kills", member.playerKills);
578 memberObj.addProperty(
"total-level", member.totalLevel);
579 memberArray.add(memberObj);
581 object.add(
"members", memberArray);
585 public static void load(String owner) {
586 new GsonParser(
"/content/clan/" + owner,
false) {
588 protected void parse(JsonObject
object) {
591 channel.details.owner =
object.get(
"owner").getAsString();
592 channel.management.name =
object.get(
"name").getAsString();
593 if (
object.has(
"password")) {
594 channel.management.password =
object.get(
"password").getAsString();
596 channel.details.established =
object.get(
"established").getAsString();
597 if (
object.has(
"forum")) {
598 channel.management.forum =
object.get(
"forum").getAsString();
600 if (
object.has(
"slogan")) {
601 channel.management.slogan =
object.get(
"slogan").getAsString();
603 if (
object.has(
"clan-tag")) {
604 channel.management.tag =
object.get(
"clan-tag").getAsString();
606 channel.details.type =
ClanType.valueOf(
object.
get(
"clan-type").getAsString());
607 if (
object.has(
"clan-color")) {
608 channel.management.color =
object.get(
"clan-color").getAsString();
611 channel.details.points =
object.get(
"clan-points").getAsInt();
612 channel.details.experience =
object.get(
"clan-experience").getAsLong();
613 channel.details.level =
ClanLevel.valueOf(
object.
get(
"clan-level").getAsString());
614 if (
object.has(
"clan-task")) {
615 channel.details.clanTask =
ClanTask.valueOf(
object.
get(
"clan-task").getAsString());
617 channel.details.taskAmount =
object.get(
"task-amount").getAsInt();
618 channel.management.locked =
object.get(
"locked").getAsBoolean();
619 channel.management.lootshare =
object.get(
"lootshare").getAsBoolean();
620 channel.management.loadRanks(
object);
621 channel.showcase.showcase =
GSON.fromJson(
object.
get(
"showcase"),
int[].
class);
623 JsonArray array =
object.get(
"showcase-items").getAsJsonArray();
624 for (JsonElement element : array) {
625 channel.showcase.showcaseItems.add(element.getAsInt());
628 array =
object.get(
"banned-members").getAsJsonArray();
629 for (JsonElement element : array) {
630 channel.bannedMembers.add(element.getAsString());
633 JsonArray
members =
object.get(
"members").getAsJsonArray();
634 for (JsonElement element :
members) {
635 JsonObject memberObj = (JsonObject) element;
636 String name = memberObj.get(
"name").getAsString();
638 member.joined = memberObj.get(
"joined").getAsString();
639 member.rank =
ClanRank.valueOf(memberObj.get(
"rank").getAsString());
640 member.expGained = memberObj.get(
"exp-gained").getAsDouble();
641 member.npcKills = memberObj.get(
"npc-kills").getAsInt();
642 member.playerKills = memberObj.get(
"player-kills").getAsInt();
643 member.totalLevel = memberObj.get(
"total-level").getAsInt();
647 if (!
channel.getTag().isEmpty())
649 if (!
channel.getName().isEmpty())
667 return details.owner.hashCode();
672 if (obj ==
this)
return true;
678 return super.equals(obj);
The class that contains setting-related constants for the server.
static final String[] BAD_STRINGS
Strings that are classified as bad.
Handles the yelling command.
static final String[] INVALID
Array of all invalid strings.
Handles the clan channel member.
ClanRank rank
The rank of the clan member.
Optional< Player > player
The player instance of the clan member .
final String name
The name of the clan member.
The repository containing all the clans and their corresponding data.
static Set< ClanChannel > ALLTIME
Set of all active clan chat names.
static void addChannel(ClanChannel channel)
Adds the channel.
static void setInactive(ClanChannel channel)
static void setActive(ClanChannel channel)
static Set< String > ACTIVE_NAMES
Set of all active clan chat names.
static boolean tagExist(String tag)
static boolean nameExist(String name)
static Set< String > ACTIVE_TAGS
Set of all active clan chat tags.
static ClanChannel getChannel(String channel)
Returns the channel.
The handler for the clan channel.
static void clean(Player player)
Handles cleaning the clan tab itemcontainer.
boolean equals(Object obj)
void add(Player player, ClanMember member)
ClanDetails details
The clan channel details.
int active
The total active logged in members.
static ClanChannel create(Player player)
Optional< ClanMember > getMember(String name)
void activateTask(ClanTaskKey key, String name, int amount)
void addExperience(double experience)
ClanManagement getManagement()
void connect(Player player)
Handles a player connecting to the clan channel.
boolean isBanned(String name)
void setRank(ClanMember member, ClanRank rank)
final Set< ClanMember > members
The clan channel member set.
void splitLoot(Player player, Mob dead, Item item)
final List< String > bannedMembers
A list of banned members.
List< ClanMember > getActiveMembers()
boolean canEnter(ClanMember member)
void chat(String name, String message)
boolean lootshareEnabled()
ClanShowcase getShowcase()
boolean canManage(ClanMember member)
boolean addMember(ClanMember member)
ClanChannelHandler handler
The clan channel handler.
int compareTo(ClanChannel other)
void setColor(String color)
Item[] getShowcaseItems()
void activateAchievement(ClanAchievement achievement)
ClanManagement management
The clan channel management tab panel.
boolean isPassword(String input)
static void load(String owner)
void setSlogan(Player player, String slogan)
ClanChannelHandler getHandler()
void receiveTask(Difficulty difficulty)
void forEach(Consumer< ClanMember > member)
Handles looping through each clan member.
ClanShowcase showcase
The clan channel showcase items.
void establish(Player player, ClanMember member)
void setTag(Player player, String tag)
void message(Object... messages)
Handles messaging all the members in the clan channel.
void disconnect(String name, boolean logout)
Handles disconnecting a player from the clan channel.
Set< ClanMember > getMembers()
void unban(Player player, int index)
void activateTask(ClanTaskKey key, String name)
void setName(Player player, String name)
void forPlayers(Consumer< Player > player)
Handles looping through each clan member.
The clan channel details.
double experience
The clan channel total experience.
String name
The clan display name.
void update(ClanChannel channel)
final EnumSet< UpdateFlag > updateFlags
This class represents a character controlled by a player.
void message(String message)
String getName()
Gets the name of this entity.
final ClanViewer clanViewer
void send(OutgoingPacket encoder)
The container class that represents an item that can be interacted with.
final void setAmount(int amount)
Sets the quantity of this item.
final int getAmount()
Gets the quantity of this item.
int getValue(PriceType type)
Gets the value for this item.
Manages the world regions.
static void forNearbyPlayer(Mob mob, int distance, Consumer< Player > action)
Sends an action to Mob instance which is within a distance.
The OutgoingPacket that sends a message to a Players chatbox in the client.
The OutgoingPacket that sends a string to a Players itemcontainer in the client.
Handles miscellaneous methods.
static String formatName(final String input)
static String formatDigits(final int amount)
Formats digits for integers.
static String formatEnum(final String string)
Formats name of enum.
static String getSimpleDate()
Gets the date of server.
This class provides an easy to use google gson parser specifically designed for parsing JSON files.
The enum containing all the rank's data within a clan channel.
boolean greaterThanEqual(ClanRank other)
The different clan types.
PVM
Clans that are focused on PVM.
PVP
Clans that are focused on PVP.
SOCIAL
Clans that are focused on socialism.
Handles the clan achievements.
Handles the clan levels (based off the total experience earned).
int getPoints()
Gets the points rewarded for leveling up.
static ClanLevel getLevel(double experience)
Gets a clan level based off the experience.
String getColor()
Gets the clan level color.
Holds all the clan task data.
String getName(ClanChannel channel)
static ClanTask getAssignment(ClanType type, Difficulty difficulty)
double getProgressExperience()
HIGH_ALCH_VALUE
The high alchemy price type.
Created by Daniel on 2017-11-27.