From 4738fcae97ff9749cdb74008792427e078c84228 Mon Sep 17 00:00:00 2001 From: Minat0_ Date: Sun, 11 Jul 2021 23:22:43 +0300 Subject: [PATCH 01/30] Fixes StaffCommands#demote for permanent feature --- .../phaed/simpleclans/commands/staff/StaffCommands.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java index 0de44cba5..52bda435d 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java @@ -304,7 +304,7 @@ public void promote(CommandSender sender, @Conditions("online|clan_member") @Nam public void demote(CommandSender sender, @Conditions("clan_member") @Name("leader") ClanPlayerInput other) { ClanPlayer otherCp = other.getClanPlayer(); Clan clan = Objects.requireNonNull(otherCp.getClan()); - if (clan.getLeaders().size() == 1) { + if (clan.getLeaders().size() == 1 && !clan.isPermanent()) { ChatBlock.sendMessage(sender, RED + lang("you.cannot.demote.the.last.leader", sender)); return; } From c1a3a5a5fe78cc744d245ad31e2b1c67719d111d Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Mon, 12 Jul 2021 10:37:40 -0300 Subject: [PATCH 02/30] New translations messages.properties (Chinese Simplified) --- src/main/resources/messages_zh_CN.properties | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index ee1072fac..16971f25a 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -582,20 +582,72 @@ gui.main.reset.kdr.lore.price=&7价格\: &b{0} gui.main.reset.kdr.lore=&7左键单击重置你的 KDR gui.main.leaderboard.title=&f排行榜 gui.main.leaderboard.lore=&7左键点击查看排行榜 +gui.main.staff.title=&f工作人员 +gui.main.staff.lore=&7左键打开工作人员菜单 +gui.staff.title=工作人员 +gui.staff.clan.list.lore.left.click=&7左键点击查看所有宗派 +gui.staff.clan.list.lore.right.click=&7右键查看所有未验证的宗派 +gui.player.list.title=玩家列表 +gui.staff.player.list.title=&f玩家列表 +gui.staff.player.list.lore.left.click=&7左键点击查看所有玩家 +gui.staff.player.list.lore.right.click=&7左键点击查看所有在线玩家 +gui.staff.global.ff.title=&f全局友军伤害 +gui.staff.global.ff.lore.status=&7状态\: &b{0} +gui.staff.global.ff.lore.toggle=&7左键单击切换你的友军伤害 +gui.staff.reload.title=&f重新加载 +gui.staff.reload.lore=&7左键点击重载插件 +gui.staff.clanlist.unverified.title=未验证的宗派 - 总计数\: {0} +gui.staff.clanlist.toplace.title=选择 {0} 的新宗派 gui.warning.title=警告 gui.warning.no.permission.title=&f没有权限 gui.warning.no.permission.plugin.lore=&7你没有这样做的权限! +gui.warning.no.permission.leader.lore=&7您是否是该宗派的领袖之一? +gui.warning.no.permission.rank.lore=&7你必须是等级 {0}, 或者宗派的领袖必须给予你所在的等级权限 {1} 才能使用这个\! +gui.warning.not.verified.title=&f未验证 +gui.warning.not.verified.lore=&7你的宗派必须经过验证\! gui.allies.title=联盟 +gui.allies.clan.lore=&7右键删除此联盟 +gui.allies.add.title=&f添加盟友 +gui.add.ally.title=添加盟友 +gui.add.ally.clan.lore=&7左键单击将此宗派设置为盟友 gui.rivals.title=敌对 +gui.rivals.clan.lore=&7右键删除此敌对宗派 +gui.rivals.add.title=&7添加敌对宗派 +gui.add.rival.title=添加敌对关系 +gui.add.rival.clan.lore=&7左键单击将此宗派设置为敌对宗派 +gui.clanlist.title=宗派列表 - 总计\: {0} +gui.clanlist.clan.title=&f宗派\: [{0}&f] {1} +gui.clanlist.clan.lore.position=&b\#{0} +gui.clanlist.clan.lore.kdr=&7KD 比\: &b{0} +gui.clanlist.clan.lore.members=&7成员\: &b{0} +gui.coords.title=坐标 +gui.coords.player.lore.distance=&7距离\: &b{0} +gui.coords.player.lore.coords=&7坐标\: &b{0} {1} {2} +gui.coords.player.lore.world=&7世界\: &b{0} +gui.invite.title=邀请玩家 +gui.invite.player.title=&f{0} gui.invite.player.price.lore=&7价格\: &b{0} +gui.invite.player.lore=&7左键点击邀请 +gui.roster.title={0} 的成员列表 +gui.roster.invite.title=&f邀请 +gui.roster.invite.lore=&7邀请玩家至你的宗派 +gui.leaderboard.title=排行榜 - 玩家\: {0} +gui.leaderboard.player.title=&f\#{0} {1} +gui.ranks.title=称号 +gui.ranks.title.set.rank=设置等级 - 当前等级\: {0} +gui.ranks.create.title=&f创建一个等级 +gui.ranks.create.lore=&7左键单击以创建等级 +gui.ranks.rank.title=&称号\: {0} gui.ranks.rank.displayname.lore=&7显示名称\: &b{0} gui.ranks.rank.remove.lore=&7右键删除此等级 gui.ranks.rank.edit.permissions.lore=&7左键单击编辑此等级的权限 gui.ranks.rank.assign.lore=&7左键点击将此等级分配给 {0} gui.permissions.title={0} 的权限 gui.permissions.add.title=&f添加权限 +gui.permissions.permission.title=&f{0} gui.permissions.permission.lore=&7右键点击从等级中删除此权限 gui.add.permission.title=添加权限 +gui.add.permission.permission.title=&f{0} gui.add.permission.permission.lore=&7左键单击可将此权限添加到该等级 gui.clandetails.title=[{0}] {1} gui.clandetails.free.agent.title=&f自由支配 @@ -603,8 +655,10 @@ gui.clandetails.free.agent.create.clan.price.lore=&7价格\: &b{0} gui.clandetails.free.agent.create.clan.lore=&7左键单击创建宗派 gui.clandetails.clan.title=&f[{0}&f] {1} gui.clandetails.clan.lore.description=&7描述\: &b{0} +gui.clandetails.clan.lore.status=&7状态\: &b{0} gui.clandetails.clan.lore.leaders=&7领袖\: {0} gui.clandetails.clan.lore.online.members=&7在线成员\: &b{0}/{1} +gui.clandetails.clan.lore.kdr=&7KD 比\: &b{0} gui.clandetails.clan.lore.kill.totals=&7总击杀数\: &b[敌对\:{0} 中立\:{1} 友好\:{2}] gui.clandetails.clan.lore.deaths=&死亡次数\: {0} gui.clandetails.clan.lore.fee=&7费用\:&b{0}, {1} $ @@ -641,13 +695,22 @@ gui.clandetails.ff.title=&f友军伤害 gui.clandetails.ff.personal.lore=&7个人\: &b{0} gui.clandetails.ff.clan.lore=&7宗派\: &b{0} gui.clandetails.ff.personal.toggle.lore=&7左键单击切换你的友军伤害 +gui.clandetails.fee.status.lore=&7状态\: &b{0} +gui.clandetails.not.verified.title=&f未验证 gui.clandetails.verify.price.lore=&7价格\: &b{0} gui.clandetails.chat.clan.status.lore=&7宗派\: &b{0} +gui.playerdetails.player.title=&f{0} +gui.playerdetails.player.lore.status=&7状态\: &b{0} +gui.playerdetails.player.lore.kdr=&7KD 比\: &b{0} gui.playerdetails.player.lore.kill.totals=&7总击杀数\: &b[敌对\:{0} 中立\:{1} 友好\:{2}] gui.playerdetails.player.lore.deaths=&死亡次数\: {0} # suppress inspection "TrailingSpacesInProperty" gui.playerdetails.player.lore.past.clans.separator=&b、 gui.playerdetails.player.lore.inactive=&7不活跃\: &b{0}/{1} 天 +gui.playerdetails.purge.lore=&7左键单击清除此玩家的数据 +gui.playerdetails.place.title=&f安置 +gui.playerdetails.place.lore=&7左键单击为此玩家选择宗派 +gui.languageselector.language.title=&f{0} gui.languageselector.language.lore.right.click=&7右键点击以打开翻译界面 # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" From 650d8d4d5045a1d2604cd0732fe2188c49a57939 Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Tue, 13 Jul 2021 15:57:06 -0300 Subject: [PATCH 03/30] New translations messages.properties (Swedish) --- src/main/resources/messages_sv_SE.properties | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 1907bff48..902d8749d 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -1,6 +1,19 @@ description.command=beskrivning create.command=skapa +delete.command=radera +rank.command=rang +setdisplayname.command=väljnamn +setdefault.command=sättstandard +removedefault.command=raderastandard +permissions.command=behörigheter list.command=lista +list.order.asc=stigande +list.order.desc=fallande +list.type.name=namn +list.type.kdr=kdr +list.type.size=storlek +list.type.founded=grundad +list.type.active=aktiv profile.command=profil roster.command=deltagarlista lookup.command=slå upp @@ -11,6 +24,14 @@ vitals.command=livsstatus coords.command=kordinater stats.command=status ally.command=allierade +add.command=lägg till +remove.command=ta bort +allow.command=tillåt +block.command=blockera +auto.command=auto +check.command=kolla +assign.command=tilldela +unassign.command=ta bort tilldelning rival.command=fiende bb.command=bb modtag.command=modtag @@ -32,6 +53,8 @@ verify.command=verifiera ban.command=ban unban.command=avbanna reload.command=omladda +acf-core.parameter.rank=rang +acf-core.parameter.name=namn acf-core.parameter.fee=avgift acf-core.parameter.description=beskrivning alliances=allianser @@ -42,6 +65,11 @@ stats=status vitals=livsstatus profile=profil # suppress inspection "TrailingSpacesInProperty" +add=lägg till +remove=ta bort +allow=tillåt +block=blockera +auto=auto # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" From 339bacf6d48b15af8ec02f0f4ba7f7f60c25dfc8 Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Wed, 14 Jul 2021 16:19:02 -0300 Subject: [PATCH 04/30] New translations messages.properties (Portuguese) --- src/main/resources/messages_pt_PT.properties | 85 ++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index 4df9b184f..7f0f6df93 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -22,20 +22,105 @@ alliances.command=aliança rivalries.command=rivalidades vitals.command=vitais coords.command=coordenadas +stats.command=estatísticas +ally.command=aliar +add.command=adicionar +remove.command=remover +allow.command=permitir +block.command=bloquear +auto.command=auto +check.command=verificar +assign.command=atribuir +unassign.command=desatribuir +rival.command=rival +bb.command=bb +clear.command=limpar +modtag.command=modtag +toggle.command=toggle +tag.command=tag +deposit.command=depositar +all.command=all +withdraw.command=levantar +invite.command=convidar kick.command=expulsar bank.command=banco +give.command=dar +take.command=pegar +status.command=estado +fee.command=taxa +set.command=definir purge.command=purgar +trust.command=trust +untrust.command=untrust +admin.command=admin +mod.command=mod +promote.command=promover +demote.command=demover +clanff.command=clanff +ff.command=ff +resign.command=resignar +disband.command=desfazer +verify.command=verificar +ban.command=ban +unban.command=unban +reload.command=reload +globalff.command=globalff +kills.command=abates +mostkilled.command=mostkilled +war.command=guerra +start.command=iniciar +end.command=terminar +home.command=home +regroup.command=regroup +me.command=me +tp.command=tp +setrank.command=setrank everyone.command=todos acf-core.parameter.rank=cargo +acf-core.parameter.tag=tag acf-core.parameter.name=nome +acf-core.parameter.fee=taxa acf-core.parameter.description=descrição +command.description.globalff.auto=Define o fogo amigável global para automático +command.description.clanff.allow=Define o fogo amigo do seu clã como permitido +command.description.clanff.block=Define o fogo amigo do seu clã como bloqueado +command.description.description=Define a descrição do seu clã +command.description.ban=Bane um jogador dos comandos do clã +command.description.unban=Desbane um jogador dos comandos do clã +command.description.regroup.me=Reagrupa os membros do clã para a sua localização +command.description.regroup.home=Reagrupa os membros do teu clã em casa do teu clã +command.description.home.tp=Teleporta para a casa do teu clã +command.description.home.clear=Limpa a casa do seu clã +command.description.home.set=Define a casa do seu clã +command.description.mod.home.set=Define casa de um clã +command.description.mod.home.tp=Teletransporta para a casa do clã +command.description.rival.remove=Remove um rival +command.description.rival.add=Adiciona um rival +command.description.ally.remove=Remove um aliado +command.description.kick=Expulsa um membro do seu clã +command.description.bb.display=Mostra o quadro de anúncios do seu clã +command.description.bb.clear=Limpa o quadro de avisos do seu clã +command.description.bb.post=Publica uma mensagem no quadro de avisos do seu clã +command.description.place=Coloca um jogador no clã +command.description.reload=Recarrega o plugin e sua configuração +command.description.trust=Traga um membro +command.description.untrust=Desconfia de um membro alliances=aliança coords=coordenadas rivalries=rivalidades roster=membros +stats=estatísticas vitals=vitais profile=perfil # suppress inspection "TrailingSpacesInProperty" +start=iniciar +end=terminar +add=adicionar +remove=remover +allow=permitir +block=bloquear +auto=auto +war=guerra # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" From 7b415e883f5d53fd12a4b42e4f5e7dff7647c7d4 Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Thu, 15 Jul 2021 16:21:28 -0300 Subject: [PATCH 05/30] New translations messages.properties (Hungarian) --- src/main/resources/messages_hu_HU.properties | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index ad36c7925..708b201e3 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -45,9 +45,14 @@ give.command=adni take.command=elvétel status.command=állapot fee.command=adó +set.command=beállít purge.command=törlés trust.command=megbízható untrust.command=megbízhatatlan +admin.command=admin +mod.command=mod +promote.command=előléptetés +demote.command=lefokozás verify.command=megerősítés ban.command=kitíltás unban.command=tiltás visszavonása @@ -55,6 +60,11 @@ reload.command=újratöltés kills.command=ölések war.command=háború start.command=indítás +home.command=otthon +me.command=én +tp.command=teleport +setrank.command=rank beállítása +place.command=letevés acf-core.parameter.rank=rang acf-core.parameter.leader=vezető acf-core.parameter.name=név From 5a2efab233fd6331eb5a77235eec2059335e7c05 Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Wed, 21 Jul 2021 16:37:44 -0300 Subject: [PATCH 06/30] New translations messages.properties (Vietnamese) --- src/main/resources/messages_vi_VN.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/messages_vi_VN.properties b/src/main/resources/messages_vi_VN.properties index 8e6e855f4..44742460c 100644 --- a/src/main/resources/messages_vi_VN.properties +++ b/src/main/resources/messages_vi_VN.properties @@ -3,6 +3,8 @@ create.command=Tạo delete.command=xóa rank.command=hạng setdisplayname.command=tên hiển thị +setdefault.command=đặtmặcđịnh +removedefault.command=xoámặcđịnh permissions.command=quyền list.command=danh sách list.order.asc=tăn dần @@ -17,6 +19,7 @@ roster.command=đội hình lookup.command=tra cứu leaderboard.command=bảng xếp hạng alliances.command=đồng minh +rivalries.command=cạnhtranh coords.command=tọa độ stats.command=thông số ally.command=đồng minh @@ -35,6 +38,7 @@ acf-core.parameter.name=tên acf-core.parameter.description=mô tả alliances=đồng minh coords=tọa độ +rivalries=cạnhtranh roster=đội hình stats=thông số profile=hồ sơ From 387ea7fb7b687db8a089e7cdd9a9e3bc1590c1bc Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Thu, 22 Jul 2021 16:33:18 -0300 Subject: [PATCH 07/30] New translations messages.properties (Vietnamese) --- src/main/resources/messages_vi_VN.properties | 123 +++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/src/main/resources/messages_vi_VN.properties b/src/main/resources/messages_vi_VN.properties index 44742460c..35da41a1b 100644 --- a/src/main/resources/messages_vi_VN.properties +++ b/src/main/resources/messages_vi_VN.properties @@ -20,6 +20,7 @@ lookup.command=tra cứu leaderboard.command=bảng xếp hạng alliances.command=đồng minh rivalries.command=cạnhtranh +vitals.command=sựsống coords.command=tọa độ stats.command=thông số ally.command=đồng minh @@ -31,18 +32,140 @@ auto.command=tự động check.command=kiểm tra assign.command=phân công unassign.command=hủy phân công +rival.command=đốithủ +bb.command=bb +clear.command=xóa +modtag.command=nhãn +toggle.command=chuyển +tag.command=thẻ +deposit.command=thêm tiền +all.command=tất cả +withdraw.command=rút tiền +invite.command=mời +kick.command=đuổi +bank.command=ngân hàng +give.command=cho +take.command=lấy +status.command=trạng thái +fee.command=thuế +set.command=đặt +purge.command=tẩy +trust.command=tin cậy +untrust.command=bỏ tin cậy +admin.command=quản trị viên +mod.command=người điều hành +promote.command=thăng chức +demote.command=hạ chức +clanff.command=clanff +ff.command=ff +resign.command=từ chức +disband.command=giải tán +verify.command=xác thức +ban.command=cấm +unban.command=bỏ cấm +reload.command=tải lại +globalff.command=ff chung +kills.command=giết +mostkilled.command=giết nhiều nhất war.command=cuộc chiến +start.command=bắt đầu end.command=kết thúc +home.command=nhà +regroup.command=tập hợp +me.command=tôi +tp.command=tp +setrank.command=đặt thứ hạng +place.command=đặt +resetkdr.command=đặt lại kdr +everyone.command=mọi người +setbanner.command=đặt banner +help.command=trợ giúp +acf-core.parameter.member=người chơi acf-core.parameter.rank=hạng +acf-core.parameter.leader=lãnh đạo +acf-core.parameter.displayname=tên hiển thị +acf-core.parameter.tag=thẻ acf-core.parameter.name=tên +acf-core.parameter.fee=thuế acf-core.parameter.description=mô tả +command.description.regroup.home=Tập hợp các thành viên trong clan của bạn đến nhà của clan bạn +command.description.home.tp=Dịch chuyển đến nhà của clan bạn +command.description.home.clear=Xóa nhà clan của bạn +command.description.home.set=Đặt nhà clan của bạn +command.description.mod.home.set=Đặt một ngôi nhà của clan +command.description.mod.home.tp=Dịch chuyển đến một ngôi nhà của clan +command.description.rival.remove=Xóa một đối thủ +command.description.rival.add=Thêm một đối thủ +command.description.ally.remove=Xóa một đồng minh +command.description.kick=Đuổi thành viên nào đó từ clan của bạn +command.description.bb.display=Hiển thị bảng thông báo của clan bạn +command.description.bb.clear=Xóa bảng thông báo của clan bạn +command.description.bb.post=Đăng tin nhắn lên bảng thông báo của clan bạn +command.description.place=Đặt một người chơi trong một clan +command.description.reload=Tải lại plugin và cấu hình của chúng +command.description.trust=Tin cậy một thành viên +command.description.untrust=Bỏ tin cậy một thành viên +command.description.resign=Từ chức từ clan của bạn +command.description.help=Hiện thị trợ giúp này hoặc tìm trong trợ giúp +command.description.ally.add=Thêm một đồng minh +command.description.clan=Mở GUI +command.description.disband=Giải tán clan của bạn +command.description.mod.disband=Giải tán một clan +command.description.mod.kick=Đuổi mot thành viên nào đó từ clan của bạn +command.description.modtag=Tùy chỉnh lại thẻ của clan bạn +command.description.purge=Xóa dữ liệu của người chơi nào đó +command.description.setbanner=Đặt banner cho clan của bạn +command.description.verify=Xác minh clan của bạn +command.description.mod.verify=Xác minh một clan +command.description.invite=Mời một người chơi vào clan của bạn +command.description.fee.check=Kiểm tra giá trị thuế của clan bạn và nếu nó được bật +command.description.fee.set=Đặt thuế của clan bạn +command.description.bank.status=Kiểm tra số dư ngân hàng clan của bạn +command.description.bank.admin.status=Kiểm tra số dư ngân hàng của một clan +command.description.bank.withdraw.all=Rút tất cả tiền từ ngân hàng clan của bạn +command.description.bank.withdraw.amount=Rút một só lượng tiền từ ngân hàng clan của bạn +command.description.bank.admin.take=Lấy một số lượng tiền từ một ngân hàng clan +command.description.bank.deposit.all=Thêm tất cả tiền của bạn vào ngân hàng của clan +command.description.bank.deposit.amount=Thêm một số lượng tiền của bạn vào ngân hàng của clan +command.description.bank.admin.give=Thêm một số lượng tiền vào một ngân hàng clan +command.description.bank.admin.set=Đặt một số lượng tiền vào một ngân hàng clan +command.description.war.start=Bắt đầu chiến tranh +command.description.war.end=Kết thúc chiến tranh +command.description.resetkdr.everyone=Đặt lại KDR của tất cả mọi người +command.description.resetkdr.player=Đặt lại KDR của một người chơi +command.description.resetkdr=Đặt lại KDR của bạn +command.description.admin.demote=Hạ chức của một lãnh đạo của clan nào đó +command.description.demote=Hạ chức một lãnh đạo +command.description.admin.promote=Thăng chức một thành viên nào đó của clan nào đó +command.description.promote=Thăng chức một thành viên thành lãnh đạo alliances=đồng minh coords=tọa độ rivalries=cạnhtranh +leader=lãnh đạo roster=đội hình stats=thông số +food=Đồ ăn +vitals=sựsống +verified=Đã xác minh +unverified=Chưa xác minh +permanent=Vĩnh viễn profile=hồ sơ +civilian.abbreviation=Civ +rank=Thứ hạng +leaders=Lãnh đạo +none=&8Không +today=Hôm nay +kills=Giết +mostkilled=Giết nhiều nhất +killcount=Số lần giết +attacker=Người tấn công +victim=Nạn nhân +kill.death.ratio=Tỉ lệ Giết/Chết +nokillsfound=Không tìm thấy kẻ giết +promoted.to.leader={0} đã được thăng chức lên lãnh đạo +denied.demotion={0} đã từ chối hạ chức của {1}. Sự đồng thuận không thành công. # suppress inspection "TrailingSpacesInProperty" +start=bắt đầu end=kết thúc add=thêm remove=xóa bỏ From b4447054fbfd71d2421ce6ce3565fbb52fcbb668 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Mon, 26 Jul 2021 19:52:29 -0300 Subject: [PATCH 08/30] Replaces Threads with BukkitTasks on MySQLCore --- .../phaed/simpleclans/storage/DBCore.java | 27 +++++++++++++++++++ .../phaed/simpleclans/storage/MySQLCore.java | 9 +++---- .../phaed/simpleclans/storage/SQLiteCore.java | 21 --------------- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/DBCore.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/DBCore.java index 41a283fbc..9d9c2ce8e 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/DBCore.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/DBCore.java @@ -1,7 +1,13 @@ package net.sacredlabyrinth.phaed.simpleclans.storage; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import org.bukkit.scheduler.BukkitRunnable; + import java.sql.Connection; import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -9,6 +15,7 @@ */ public interface DBCore { + /** * @return connection */ @@ -71,4 +78,24 @@ public interface DBCore * @return */ Boolean existsColumn(String tabell, String colum); + + default void executeAsync(String query, String sqlType) { + new BukkitRunnable() { + @Override + public void run() { + try { + if (getConnection() != null) { + getConnection().createStatement().executeUpdate(query); + } + } + catch (SQLException ex) { + if (!ex.toString().contains("not return ResultSet")) { + Logger.getLogger("SimpleClans") + .log(Level.SEVERE, String.format("Error at SQL %s query: %s", sqlType, query), ex); + } + } + } + }.runTaskAsynchronously(SimpleClans.getInstance()); + + } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java index 39bdbaff6..1ab0dbd59 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java @@ -111,8 +111,7 @@ public ResultSet select(String query) { @Override public void insert(String query) { if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { - Thread th = new Thread(new ThreadUpdateSQL(getConnection(), query, "INSERT")); - th.start(); + executeAsync(query, "INSERT"); } else { try { getConnection().createStatement().executeUpdate(query); @@ -133,8 +132,7 @@ public void insert(String query) { @Override public void update(String query) { if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { - Thread th = new Thread(new ThreadUpdateSQL(getConnection(), query, "UPDATE")); - th.start(); + executeAsync(query, "UPDATE"); } else { try { getConnection().createStatement().executeUpdate(query); @@ -155,8 +153,7 @@ public void update(String query) { @Override public void delete(String query) { if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { - Thread th = new Thread(new ThreadUpdateSQL(getConnection(), query, "DELETE")); - th.start(); + executeAsync(query, "DELETE"); } else { try { getConnection().createStatement().executeUpdate(query); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java index d07c7c1a0..4ce180205 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java @@ -225,25 +225,4 @@ public Boolean existsColumn(String table, String column) { return false; } } - - private void executeAsync(String query, String sqlType) { - new BukkitRunnable() { - @Override - public void run() { - try { - if (connection != null && !connection.isClosed()) { - connection.createStatement().executeUpdate(query); - } - } - catch (SQLException ex) { - if (!ex.toString().contains("not return ResultSet")) - { - log.severe("[Thread] Error at SQL " + sqlType + " Query: " + ex); - log.severe("[Thread] Query: " + query); - } - } - } - }.runTaskAsynchronously(SimpleClans.getInstance()); - - } } From 74752b434103477bb012ea8aa4593df0dd37d562 Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Mon, 2 Aug 2021 01:14:01 -0300 Subject: [PATCH 09/30] New translations messages.properties (Spanish) --- src/main/resources/messages_es_ES.properties | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index b05f22d53..44c64857a 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -2,9 +2,9 @@ description.command=description create.command=create delete.command=eliminar rank.command=rank -setdisplayname.command=setdisplayname -setdefault.command=setdefault -removedefault.command=removedefault +setdisplayname.command=establecer nombre de visualización +setdefault.command=establecer predeterminado +removedefault.command=eliminar predeterminado permissions.command=permisos list.command=list list.order.asc=asc @@ -48,7 +48,7 @@ give.command=dar take.command=tomar status.command=estado fee.command=fee -set.command=poner +set.command=colocar purge.command=purge trust.command=trust untrust.command=untrust @@ -71,19 +71,19 @@ war.command=war start.command=start end.command=end home.command=home -regroup.command=reagrupar +regroup.command=reagruparse me.command=yo tp.command=tp setrank.command=setrank place.command=place resetkdr.command=resetkdr everyone.command=todos -setbanner.command=fijarbanner +setbanner.command=pancarta help.command=ayuda acf-core.parameter.member=miembro acf-core.parameter.rank=rango acf-core.parameter.leader=lider -acf-core.parameter.displayname=nombre de pantalla +acf-core.parameter.displayname=nombre para mostrar acf-core.parameter.permission=permisos acf-core.parameter.message=mensaje acf-core.parameter.tag=etiqueta @@ -94,7 +94,7 @@ acf-core.parameter.player=jugador acf-core.parameter.clan=clan acf-core.parameter.type=tipo acf-core.parameter.order=orden -acf-core.parameter.help=pagina o palabras clave +acf-core.parameter.help=página o palabras clave command.description.land.allow.all=&7Permite todas las acciones en tu tierra. command.description.land.allow.interact_entity=&7Permite a los miembros del clan interactuar con entidades en tu tierra. command.description.land.allow.interact=&7Permite a los miembros del clan interactuar con tu tierra. From 4d0c39c0dc113c1a63d6f2d8f5506d3915213c3f Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Tue, 3 Aug 2021 18:43:26 -0300 Subject: [PATCH 10/30] Suppresses exceptions on GriefPreventionProvider #237 --- .../hooks/protection/ProtectionProvider.java | 2 +- .../providers/GriefPreventionProvider.java | 5 ++++- .../protection/providers/PlotSquared3Provider.java | 12 ++++-------- .../protection/providers/WorldGuard6Provider.java | 13 +++++-------- .../protection/providers/WorldGuardProvider.java | 1 + 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/ProtectionProvider.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/ProtectionProvider.java index b2ff9324c..3e9a70ef7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/ProtectionProvider.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/ProtectionProvider.java @@ -12,7 +12,7 @@ public interface ProtectionProvider { - void setup(); + void setup() throws LinkageError, Exception; @NotNull Set getLandsAt(@NotNull Location location); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/GriefPreventionProvider.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/GriefPreventionProvider.java index 7f8e503af..f284c7960 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/GriefPreventionProvider.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/GriefPreventionProvider.java @@ -24,7 +24,10 @@ public class GriefPreventionProvider implements ProtectionProvider { @Override - public void setup() {} + public void setup() throws NoSuchMethodException { + //noinspection ResultOfMethodCallIgnored + Claim.class.getMethod("getOwnerID"); + } @Override public @NotNull Set getLandsAt(@NotNull Location location) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared3Provider.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared3Provider.java index f30efa872..31cbdb396 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared3Provider.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared3Provider.java @@ -28,14 +28,10 @@ public class PlotSquared3Provider implements ProtectionProvider { private Method getPlots; @Override - public void setup() { - try { - Class.forName("com.intellectualcrafters.plot.object.Location"); - Class.forName("com.intellectualcrafters.plot.object.Plot"); - getLocation = BukkitUtil.class.getMethod("getLocation", Location.class); - } catch (NoSuchMethodException | ClassNotFoundException e) { - throw new RuntimeException(e); - } + public void setup() throws ClassNotFoundException, NoSuchMethodException { + Class.forName("com.intellectualcrafters.plot.object.Location"); + Class.forName("com.intellectualcrafters.plot.object.Plot"); + getLocation = BukkitUtil.class.getMethod("getLocation", Location.class); } @Override diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuard6Provider.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuard6Provider.java index 7918502fc..8b4453520 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuard6Provider.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuard6Provider.java @@ -28,15 +28,12 @@ public class WorldGuard6Provider implements ProtectionProvider { private Method getApplicableRegions; @Override - public void setup() { + public void setup() throws NoSuchMethodException { worldGuard = WorldGuardPlugin.inst(); - try { - getRegionManager = worldGuard.getClass().getMethod("getRegionManager", World.class); - //noinspection JavaReflectionMemberAccess - getApplicableRegions = RegionManager.class.getMethod("getApplicableRegions", Location.class); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } + getRegionManager = worldGuard.getClass().getMethod("getRegionManager", World.class); + //noinspection JavaReflectionMemberAccess + getApplicableRegions = RegionManager.class.getMethod("getApplicableRegions", Location.class); + } private @Nullable RegionManager getRegionManager(@Nullable World world) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuardProvider.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuardProvider.java index 9a91a7ecb..eb34e8066 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuardProvider.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/WorldGuardProvider.java @@ -25,6 +25,7 @@ public class WorldGuardProvider implements ProtectionProvider { private RegionContainer regionContainer; + @Override public void setup() { regionContainer = WorldGuard.getInstance().getPlatform().getRegionContainer(); } From 9811e2e1dbd9a520031b4bc084e5110a44ddc45d Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Thu, 19 Aug 2021 13:52:02 -0300 Subject: [PATCH 11/30] Implements relational placeholder color %rel_simpleclans_color% This returns GREEN when both players are in the same clan, RED for rivals, AQUA for allies --- .../hooks/papi/SimpleClansExpansion.java | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java index 89c6df7e4..4b537e784 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java @@ -1,11 +1,13 @@ package net.sacredlabyrinth.phaed.simpleclans.hooks.papi; import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import me.clip.placeholderapi.expansion.Relational; import net.sacredlabyrinth.phaed.simpleclans.Clan; import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.reflections.Reflections; @@ -18,7 +20,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public class SimpleClansExpansion extends PlaceholderExpansion { +import static org.bukkit.ChatColor.*; + +public class SimpleClansExpansion extends PlaceholderExpansion implements Relational { private static final Pattern TOP_CLANS_PATTERN = Pattern.compile("(?^topclans_(?\\d+)_)clan_"); private static final Pattern TOP_PLAYERS_PATTERN = Pattern.compile("(?^topplayers_(?\\d+)_)"); @@ -68,22 +72,37 @@ public boolean persist() { return placeholders; } - private void addPlaceholders(String prefix, Class clazz, List placeholders) { - for (Method method : clazz.getDeclaredMethods()) { - Placeholder[] annotations = method.getAnnotationsByType(Placeholder.class); - for (Placeholder annotation : annotations) { - placeholders.add("%" + prefix + annotation.value() + "%"); - //Commented because the list would be very long - //placeholders.add("%simpleclans_topplayers__" + annotation.value() + "%"); - } - } - } - @Override public boolean canRegister() { return true; } + @Override + @Nullable + public String onPlaceholderRequest(Player player1, Player player2, String params) { + if (player1 == null || player2 == null) { + return null; + } + if (params.equalsIgnoreCase("color")) { + ClanPlayer cp1 = clanManager.getClanPlayer(player1); + if (cp1 == null) { + return ""; + } + //noinspection ConstantConditions -- getClanPlayer != null == getClan() != null + if (cp1.getClan().isMember(player2)) { + return GREEN.toString(); + } + if (cp1.isRival(player2)) { + return RED.toString(); + } + if (cp1.isAlly(player2)) { + return AQUA.toString(); + } + return ""; + } + return null; + } + @Override public String onRequest(@Nullable OfflinePlayer player, @NotNull String params) { ClanPlayer cp = null; @@ -181,4 +200,15 @@ private void registerResolvers() { } } + private void addPlaceholders(String prefix, Class clazz, List placeholders) { + for (Method method : clazz.getDeclaredMethods()) { + Placeholder[] annotations = method.getAnnotationsByType(Placeholder.class); + for (Placeholder annotation : annotations) { + placeholders.add("%" + prefix + annotation.value() + "%"); + //Commented because the list would be very long + //placeholders.add("%simpleclans_topplayers__" + annotation.value() + "%"); + } + } + } + } From ad22a4c75c8c307c37c2fa58d5d77689434184be Mon Sep 17 00:00:00 2001 From: Minat0_ <42711312+Tomut0@users.noreply.github.com> Date: Fri, 27 Aug 2021 05:26:25 +0300 Subject: [PATCH 12/30] ChatManager implementation | Refactoring (#215) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds integration with Discord Removes deprecated methods in Helper.java New config value: settings.global-friendly-fire Using ACF commands for ally/clan chat ClanPlayer#setMuted and ClanPlayer#setMutedAlly was moved to ClanPlayer#mute You may use HEX colors at chat format. 😎 This PR also solves Spy: ally chat has the same format as clan chat #160 and adds spy chat for DiscordChat. Updates maven dependencies: bStats, JetBrain Annotations and JUnit. Adds a message, if player tries to join to the same chat (ally/clan) Adds a message, if chat is disabled (ally/clan) Adds a message, if player tries to leave the chat, in which it is not located Adds a message, if staff sends message trough discord to minecraft and he is not located in current clan. Adds a message, if admin player tries to demote someone, who is not a leader. --- pom.xml | 31 +- .../phaed/simpleclans/Clan.java | 111 +- .../phaed/simpleclans/ClanPlayer.java | 50 +- .../phaed/simpleclans/Helper.java | 706 +----- .../phaed/simpleclans/Request.java | 4 +- .../phaed/simpleclans/SimpleClans.java | 94 +- .../phaed/simpleclans/TeleportState.java | 4 +- .../phaed/simpleclans/VoteResult.java | 5 +- .../phaed/simpleclans/chat/ChatHandler.java | 15 + .../phaed/simpleclans/chat/SCMessage.java | 80 + .../chat/handlers/DiscordChatHandler.java | 49 + .../chat/handlers/SpigotChatHandler.java | 54 + .../chat/handlers/SpyChatHandler.java | 51 + .../commands/SCCommandManager.java | 42 +- .../commands/clan/AllyChatCommand.java | 54 +- .../commands/clan/BankCommand.java | 22 +- .../commands/clan/ChatCommand.java | 54 +- .../commands/clan/ClanCommands.java | 23 +- .../commands/clan/HomeCommands.java | 11 +- .../commands/clan/LandCommand.java | 4 +- .../commands/clan/LeaderCommands.java | 11 +- .../ChatSubcommandsCompletion.java | 44 - .../completions/ClanMembersCompletion.java | 2 +- .../conditions/CanChangeFeeCondition.java | 7 +- .../commands/conditions/CanChatCondition.java | 31 + .../conditions/CanWarTargetCondition.java | 6 +- .../conditions/LandSharingCondition.java | 8 +- .../conditions/MemberFeeEnabledCondition.java | 3 +- .../conditions/MinimumToAllyCondition.java | 6 +- .../conditions/MinimumToRivalCondition.java | 5 +- .../conditions/NotBlacklistedCondition.java | 4 +- .../simpleclans/commands/data/Alliances.java | 6 +- .../simpleclans/commands/data/ClanCoords.java | 9 +- .../simpleclans/commands/data/ClanList.java | 18 +- .../commands/data/ClanProfile.java | 3 +- .../simpleclans/commands/data/ClanRoster.java | 20 +- .../simpleclans/commands/data/ClanStats.java | 15 +- .../simpleclans/commands/data/Kills.java | 6 +- .../commands/data/Leaderboard.java | 9 +- .../simpleclans/commands/data/Lookup.java | 11 +- .../simpleclans/commands/data/MostKilled.java | 6 +- .../simpleclans/commands/data/Rivalries.java | 6 +- .../simpleclans/commands/data/Sendable.java | 11 +- .../simpleclans/commands/data/Vitals.java | 9 +- .../commands/general/GeneralCommands.java | 11 +- .../commands/staff/StaffCommands.java | 26 +- .../conversation/CreateClanNamePrompt.java | 27 +- .../phaed/simpleclans/events/ChatEvent.java | 28 +- .../simpleclans/events/FrameOpenEvent.java | 1 - .../phaed/simpleclans/hooks/DiscordHook.java | 481 ++++ .../hooks/papi/SimpleClansExpansion.java | 7 +- .../papi/resolvers/PlayerColorResolver.java | 19 +- .../language/LanguageResource.java | 555 ++--- .../simpleclans/listeners/FriendlyFire.java | 8 +- .../simpleclans/listeners/LandProtection.java | 7 +- .../simpleclans/listeners/PlayerDeath.java | 15 +- .../simpleclans/listeners/PvPOnlyInWar.java | 7 +- .../listeners/SCPlayerListener.java | 53 +- .../listeners/TamableMobsSharing.java | 22 +- .../phaed/simpleclans/loggers/BankLog.java | 1 + .../phaed/simpleclans/loggers/BankLogger.java | 7 + .../simpleclans/loggers/CSVBankLogger.java | 26 +- .../simpleclans/managers/ChatManager.java | 150 ++ .../simpleclans/managers/ClanManager.java | 295 +-- .../managers/PermissionsManager.java | 7 +- .../managers/ProtectionManager.java | 17 +- .../simpleclans/managers/RequestManager.java | 3 +- .../simpleclans/managers/SettingsManager.java | 2142 ++++------------- .../simpleclans/managers/StorageManager.java | 32 +- .../simpleclans/managers/TeleportManager.java | 22 +- .../phaed/simpleclans/storage/MySQLCore.java | 23 +- .../phaed/simpleclans/storage/SQLiteCore.java | 12 +- .../simpleclans/tasks/CollectFeeTask.java | 6 +- .../simpleclans/tasks/CollectUpkeepTask.java | 15 +- .../phaed/simpleclans/tasks/SaveDataTask.java | 5 +- .../simpleclans/tasks/UpkeepWarningTask.java | 17 +- .../simpleclans/ui/InventoryController.java | 3 +- .../phaed/simpleclans/ui/InventoryDrawer.java | 9 +- .../phaed/simpleclans/ui/SCComponentImpl.java | 10 +- .../ui/frames/ClanDetailsFrame.java | 29 +- .../simpleclans/ui/frames/ClanListFrame.java | 3 +- .../simpleclans/ui/frames/Components.java | 5 +- .../simpleclans/ui/frames/InviteFrame.java | 3 +- .../ui/frames/LeaderboardFrame.java | 150 +- .../simpleclans/ui/frames/MainFrame.java | 9 +- .../ui/frames/PlayerDetailsFrame.java | 8 +- .../ui/frames/staff/PlayerListFrame.java | 16 +- .../ui/frames/staff/StaffFrame.java | 3 +- .../utils/ChatFormatMigration.java | 42 +- .../phaed/simpleclans/utils/ChatUtils.java | 24 + .../phaed/simpleclans/utils/TagValidator.java | 27 +- .../phaed/simpleclans/utils/VanishUtils.java | 2 +- src/main/resources/config.yml | 19 +- src/main/resources/messages.properties | 14 +- src/main/resources/plugin.yml | 1 + .../simpleclans/hooks/DiscordHookTest.java | 26 + .../language/ResourceControlTest.java | 33 +- .../simpleclans/utils/ChatUtilsTest.java | 6 +- .../simpleclans/utils/UpdateCheckerTest.java | 9 +- .../simpleclans/utils/WordWrapperTest.java | 12 +- 100 files changed, 2748 insertions(+), 3482 deletions(-) create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/ChatHandler.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/SCMessage.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/DiscordChatHandler.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpigotChatHandler.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpyChatHandler.java delete mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ChatSubcommandsCompletion.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChatCondition.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java create mode 100644 src/test/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHookTest.java diff --git a/pom.xml b/pom.xml index 02ff8aae4..abbe6c5f1 100644 --- a/pom.xml +++ b/pom.xml @@ -84,14 +84,6 @@ com.cryptomorin.xseries net.sacredlabyrinth.phaed.simpleclans.xseries - - org.reflections - net.sacredlabyrinth.phaed.simpleclans.reflections - - - javassist - net.sacredlabyrinth.phaed.simpleclans.javassist - @@ -133,7 +125,7 @@ org.bstats bstats-bukkit - 1.7 + 2.2.1 compile @@ -145,7 +137,7 @@ org.jetbrains annotations - 16.0.2 + 22.0.0 io.papermc @@ -161,17 +153,12 @@ com.github.cryptomorin XSeries - 7.2.1 - - - org.reflections - reflections - 0.9.12 + 8.3.0 org.junit.jupiter junit-jupiter-api - 5.4.0 + 5.7.2 test @@ -232,6 +219,12 @@ + + com.discordsrv + discordsrv + 1.23.0 + provided + @@ -268,6 +261,10 @@ plotsquared https://plotsquared.com/mvn/ + + Scarsz-Nexus + https://nexus.scarsz.me/content/groups/public/ + jitpack.io https://jitpack.io diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Clan.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Clan.java index 253cea093..23db22ac6 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Clan.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Clan.java @@ -6,10 +6,11 @@ import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.Placeholder; import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLog; import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger; +import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -28,6 +29,7 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.Cause; import static net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger.Operation.*; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; /** @@ -74,7 +76,7 @@ public Clan(String tag, String name, boolean verified) { this.lastUsed = (new Date()).getTime(); this.verified = verified; this.capeUrl = ""; - if (SimpleClans.getInstance().getSettingsManager().isClanFFOnByDefault()) { + if (SimpleClans.getInstance().getSettingsManager().is(CLAN_FF_ON_BY_DEFAULT)) { friendlyFire = true; } } @@ -340,8 +342,8 @@ public int getMaxInactiveDays() { return -1; } - int verifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getPurgeClan(); - int unverifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getPurgeUnverified(); + int verifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getInt(PURGE_INACTIVE_CLAN_DAYS); + int unverifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getInt(PURGE_UNVERIFIED_CLAN_DAYS); return this.isVerified() ? verifiedClanInactiveDays : unverifiedClanInactiveDays; } @@ -489,7 +491,7 @@ public void addBb(String msg) { * Adds a bulletin board message without saving it to the database */ public void addBbWithoutSaving(String msg) { - while (bb.size() > SimpleClans.getInstance().getSettingsManager().getBbSize()) { + while (bb.size() > SimpleClans.getInstance().getSettingsManager().getInt(BB_SIZE)) { bb.remove(0); } @@ -588,7 +590,7 @@ public boolean isAlly(String tag) { */ @Placeholder("is_verified") public boolean isVerified() { - return !SimpleClans.getInstance().getSettingsManager().isRequireVerification() || verified; + return !SimpleClans.getInstance().getSettingsManager().is(REQUIRE_VERIFICATION) || verified; } @@ -645,7 +647,7 @@ public String getPackedBb() { * @param packedBb the packedBb to set */ public void setPackedBb(String packedBb) { - this.bb = Helper.fromArray(packedBb.split("[|]")); + this.bb = Helper.fromArrayToList(packedBb.split("[|]")); } /** @@ -663,7 +665,7 @@ public String getPackedAllies() { * @param packedAllies the packedAllies to set */ public void setPackedAllies(String packedAllies) { - this.allies = Helper.fromArray(packedAllies.split("[|]")); + this.allies = Helper.fromArrayToList(packedAllies.split("[|]")); } /** @@ -681,7 +683,7 @@ public String getPackedRivals() { * @param packedRivals the packedRivals to set */ public void setPackedRivals(String packedRivals) { - this.rivals = Helper.fromArray(packedRivals.split("[|]")); + this.rivals = Helper.fromArrayToList(packedRivals.split("[|]")); } /** @@ -812,16 +814,8 @@ public boolean isLeader(String playerName) { * @return the fee payers */ public Set getFeePayers() { - Set feePayers = new HashSet<>(); - - getNonLeaders().forEach(cp -> { - OfflinePlayer op = Bukkit.getOfflinePlayer(cp.getUniqueId()); - if (!SimpleClans.getInstance().getPermissionsManager().has(null, op, "simpleclans.member.bypass-fee")) { - feePayers.add(cp); - } - }); - - return feePayers; + PermissionsManager permissions = SimpleClans.getInstance().getPermissionsManager(); + return getNonLeaders().stream().filter(cp -> !permissions.has(cp.toPlayer(), "simpleclans.member.bypass-fee")).collect(Collectors.toSet()); } /** @@ -867,6 +861,7 @@ public List getOnlineMembers() { return out; } + /** * Get all leaders in the clan * @@ -1081,9 +1076,9 @@ public int getTotalAlly() { public boolean reachedRivalLimit() { int rivalCount = rivals.size(); int clanCount = SimpleClans.getInstance().getClanManager().getRivableClanCount() - 1; - int rivalPercent = SimpleClans.getInstance().getSettingsManager().getRivalLimitPercent(); + double rivalPercent = SimpleClans.getInstance().getSettingsManager().getPercent(RIVAL_LIMIT_PERCENT); - double limit = ((double) clanCount) * (((double) rivalPercent) / ((double) 100)); + double limit = ((double) clanCount) * (rivalPercent / ((double) 100)); return rivalCount > limit; } @@ -1095,7 +1090,7 @@ public void addPlayerToClan(ClanPlayer cp) { cp.removePastClan(getColorTag()); cp.setClan(this); cp.setLeader(false); - cp.setTrusted(SimpleClans.getInstance().getSettingsManager().isClanTrustByDefault()); + cp.setTrusted(SimpleClans.getInstance().getSettingsManager().is(CLAN_TRUST_MEMBERS_BY_DEFAULT)); if (defaultRank != null) { cp.setRank(defaultRank); } @@ -1266,13 +1261,7 @@ public void verifyClan() { */ @Placeholder("is_anyonline") public boolean isAnyOnline() { - for (String member : members) { - if (Helper.isOnline(UUID.fromString(member))) { - return true; - } - } - - return false; + return members.stream().map(UUID::fromString).map(Bukkit::getPlayer).anyMatch(Objects::nonNull); } /** @@ -1285,7 +1274,7 @@ public boolean enoughLeadersOnlineToDemote(ClanPlayer cp) { List online = getOnlineLeaders(); online.remove(cp); - double minimum = SimpleClans.getInstance().getSettingsManager().getPercentageOnlineToDemote(); + double minimum = SimpleClans.getInstance().getSettingsManager().getPercent(CLAN_PERCENTAGE_ONLINE_TO_DEMOTE); // all leaders minus the one being demoted double totalLeaders = getLeaders().size() - 1; double onlineLeaders = online.size(); @@ -1310,7 +1299,7 @@ public boolean allLeadersOnline() { List leaders = getLeaders(); for (ClanPlayer leader : leaders) { - if (!Helper.isOnline(leader.getUniqueId())) { + if (leader.toPlayer() == null) { return false; } } @@ -1330,7 +1319,7 @@ public boolean allOtherLeadersOnline(String playerName) { continue; } - if (!Helper.isOnline(leader.getName())) { + if (leader.toPlayer() == null) { return false; } } @@ -1349,7 +1338,7 @@ public boolean allOtherLeadersOnline(UUID playerUniqueId) { continue; } - if (!Helper.isOnline(leader.getUniqueId())) { + if (leader.toPlayer() == null) { return false; } } @@ -1369,7 +1358,7 @@ public void changeClanTag(String tag) { * Announce message to a whole clan */ public void clanAnnounce(String playerName, String msg) { - String message = SimpleClans.getInstance().getSettingsManager().getClanChatAnnouncementColor() + msg; + String message = SimpleClans.getInstance().getSettingsManager().getColored(CLANCHAT_ANNOUNCEMENT_COLOR) + msg; for (ClanPlayer cp : getMembers()) { Player pl = cp.toPlayer(); @@ -1386,7 +1375,7 @@ public void clanAnnounce(String playerName, String msg) { * Announce message to a all the leaders of a clan */ public void leaderAnnounce(String msg) { - String message = SimpleClans.getInstance().getSettingsManager().getClanChatAnnouncementColor() + msg; + String message = SimpleClans.getInstance().getSettingsManager().getColored(CLANCHAT_ANNOUNCEMENT_COLOR) + msg; List leaders = getLeaders(); @@ -1405,8 +1394,8 @@ public void leaderAnnounce(String msg) { */ public void addBb(String announcerName, String msg) { if (isVerified()) { - addBb(SimpleClans.getInstance().getSettingsManager().getBbColor() + msg); - clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + ChatUtils.parseColors(msg)); + addBb(SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + msg); + clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR) + "* " + SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + ChatUtils.parseColors(msg)); } } @@ -1415,8 +1404,8 @@ public void addBb(String announcerName, String msg) { */ public void addBb(String announcerName, String msg, boolean updateLastUsed) { if (isVerified()) { - addBb(SimpleClans.getInstance().getSettingsManager().getBbColor() + msg, updateLastUsed); - clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + ChatUtils.parseColors(msg)); + addBb(SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + msg, updateLastUsed); + clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR) + "* " + SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + ChatUtils.parseColors(msg)); } } @@ -1435,14 +1424,14 @@ public void displayBb(Player player) { public void displayBb(Player player, int maxSize) { if (isVerified()) { ChatBlock.sendBlank(player); - String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getBbAccentColor(); - String pageHeadingsColor = SimpleClans.getInstance().getSettingsManager().getPageHeadingsColor(); + String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR); + String pageHeadingsColor = SimpleClans.getInstance().getSettingsManager().getColored(PAGE_HEADINGS_COLOR); ChatBlock.saySingle(player, lang("bulletin.board.header", bbAccentColor, pageHeadingsColor, getName())); List localBb; if (maxSize == -1) { localBb = bb; - maxSize = SimpleClans.getInstance().getSettingsManager().getBbSize(); + maxSize = SimpleClans.getInstance().getSettingsManager().getInt(BB_SIZE); } else { localBb = new ArrayList<>(bb); } @@ -1452,7 +1441,7 @@ public void displayBb(Player player, int maxSize) { for (String msg : localBb) { if (!sendBbTime(player, msg)) { - String bbColor = SimpleClans.getInstance().getSettingsManager().getBbColor(); + String bbColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR); ChatBlock.sendMessage(player, bbAccentColor + "* " + bbColor + ChatUtils.parseColors(msg)); } } @@ -1474,8 +1463,8 @@ private boolean sendBbTime(Player player, String msg) { return false; } long time = (System.currentTimeMillis() - Long.parseLong(msg.substring(0, index))) / 1000L; - String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getBbAccentColor(); - String bbColor = SimpleClans.getInstance().getSettingsManager().getBbColor(); + String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR); + String bbColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR); msg = ChatUtils.parseColors(bbAccentColor + "* " + bbColor + msg.substring(++index)); TextComponent textComponent = new TextComponent(msg); textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText( @@ -1504,7 +1493,7 @@ public void disband(@Nullable CommandSender sender, boolean announce, boolean fo } if (announce) { - if (SimpleClans.getInstance().getSettingsManager().isDisableMessages() && sender != null) { + if (SimpleClans.getInstance().getSettingsManager().is(DISABLE_MESSAGES) && sender != null) { this.clanAnnounce(sender.getName(), AQUA + lang("clan.has.been.disbanded", this.getName())); } else { SimpleClans.getInstance().getClanManager().serverAnnounce(AQUA + lang("clan.has.been.disbanded", this.getName())); @@ -1689,27 +1678,15 @@ public void setHomeLocation(@Nullable Location home) { } public String getTagLabel(boolean isLeader) { - SimpleClans plugin = SimpleClans.getInstance(); - - if (isLeader) { - return plugin.getSettingsManager().getTagBracketLeaderColor() + - plugin.getSettingsManager().getTagBracketLeft() + - plugin.getSettingsManager().getTagDefaultColor() + - getColorTag() + - plugin.getSettingsManager().getTagBracketLeaderColor() + - plugin.getSettingsManager().getTagBracketRight() + - plugin.getSettingsManager().getTagSeparatorLeaderColor() + - plugin.getSettingsManager().getTagSeparator(); - } else { - return plugin.getSettingsManager().getTagBracketColor() + - plugin.getSettingsManager().getTagBracketLeft() + - plugin.getSettingsManager().getTagDefaultColor() + - getColorTag() + - plugin.getSettingsManager().getTagBracketColor() + - plugin.getSettingsManager().getTagBracketRight() + - plugin.getSettingsManager().getTagSeparatorColor() + - plugin.getSettingsManager().getTagSeparator(); - } + SettingsManager sm = SimpleClans.getInstance().getSettingsManager(); + String bracketColor = isLeader ? sm.getColored(TAG_BRACKET_LEADER_COLOR) : sm.getColored(TAG_BRACKET_COLOR); + String bracketDefaultColor = sm.getColored(TAG_DEFAULT_COLOR); + String bracketLeft = sm.getColored(TAG_BRACKET_LEFT); + String bracketRight = sm.getColored(TAG_BRACKET_RIGHT); + String tagSeparatorColor = isLeader ? sm.getColored(TAG_SEPARATOR_LEADER_COLOR) : sm.getColored(TAG_SEPARATOR_COLOR); + String tagSeparator = sm.getString(TAG_SEPARATOR_char); + + return bracketColor + bracketLeft + bracketDefaultColor + getColorTag() + bracketColor + bracketRight + tagSeparatorColor + tagSeparator; } /** diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java index 56411c58d..4c34a6308 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java @@ -2,6 +2,7 @@ import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.Placeholder; import net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager.Action; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -18,6 +19,7 @@ import java.util.*; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; /** * @author phaed @@ -431,11 +433,11 @@ public void addDeath() { */ @Placeholder("weighted_kills") public double getWeightedKills() { - SimpleClans plugin = SimpleClans.getInstance(); - double kills = ((double) getRivalKills() * plugin.getSettingsManager().getKwRival()) + - ((double) getNeutralKills() * plugin.getSettingsManager().getKwNeutral()) + - ((double) getAllyKills() * plugin.getSettingsManager().getKwAlly()) + - ((double) getCivilianKills() * plugin.getSettingsManager().getKwCivilian()); + SettingsManager settings = SimpleClans.getInstance().getSettingsManager(); + double kills = getRivalKills() * settings.getDouble(KILL_WEIGHTS_RIVAL) + + getNeutralKills() * settings.getDouble(KILL_WEIGHTS_NEUTRAL) + + getAllyKills() * settings.getDouble(KILL_WEIGHTS_ALLY) + + getCivilianKills() * settings.getDouble(KILL_WEIGHTS_CIVILIAN); if (kills < 0) { return 0; } @@ -544,7 +546,7 @@ public String getPackedPastClans() { * @param PackedPastClans the PackedPastClans to set */ public void setPackedPastClans(String PackedPastClans) { - this.pastClans = Helper.fromArray2(PackedPastClans.split("[|]")); + this.pastClans = Helper.fromArrayToSet(PackedPastClans.split("[|]")); } /** @@ -626,7 +628,7 @@ public Long getResignTime(String tag) { */ public void setResignTimes(Map resignTimes) { if (resignTimes != null) { - final int cooldown = SimpleClans.getInstance().getSettingsManager().getRejoinCooldown(); + final int cooldown = SimpleClans.getInstance().getSettingsManager().getInt(REJOIN_COOLDOWN); resignTimes.forEach((k, v) -> { long timePassed = Instant.ofEpochMilli(v).until(Instant.now(), ChronoUnit.MINUTES); if (timePassed < cooldown) { @@ -739,7 +741,8 @@ public void setFlags(String flagString) { if (channelName != null) { return Channel.valueOf(channelName); } - } catch (IllegalArgumentException ignored) {} + } catch (IllegalArgumentException ignored) { + } return Channel.NONE; } @@ -759,13 +762,16 @@ public boolean isClanChat() { } @Deprecated - public void setGlobalChat(boolean globalChat) {} + public void setGlobalChat(boolean globalChat) { + } @Deprecated - public void setAllyChat(boolean allyChat) {} + public void setAllyChat(boolean allyChat) { + } @Deprecated - public void setClanChat(boolean clanChat) {} + public void setClanChat(boolean clanChat) { + } public void setChannel(@NotNull Channel channel) { flags.put("channel", channel.toString()); @@ -787,7 +793,8 @@ public boolean isCapeEnabled() { } @Deprecated - public void setCapeEnabled(boolean capeEnabled) {} + public void setCapeEnabled(boolean capeEnabled) { + } @Placeholder("is_tag_enabled") public boolean isTagEnabled() { @@ -858,10 +865,29 @@ public void setLocale(@Nullable Locale locale) { } } + public void mute(Channel channel, boolean b) { + switch (channel) { + case CLAN: + clanChatMute = b; + break; + case ALLY: + allyChatMute = b; + } + } + + + /** + * @deprecated use {@link ClanPlayer#mute(Channel, boolean)} + */ + @Deprecated public void setMuted(boolean b) { clanChatMute = b; } + /** + * @deprecated use {@link ClanPlayer#mute(Channel, boolean)} + */ + @Deprecated public void setMutedAlly(boolean b) { allyChatMute = b; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Helper.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Helper.java index 3b8f70224..287b5a54f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Helper.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Helper.java @@ -1,17 +1,10 @@ package net.sacredlabyrinth.phaed.simpleclans; import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager; -import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; -import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; -import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat; -import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.json.simple.JSONArray; @@ -20,45 +13,33 @@ import org.json.simple.parser.ParseException; import java.io.IOException; -import java.lang.reflect.Method; -import java.net.HttpURLConnection; -import java.net.URL; -import java.text.DecimalFormat; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.Map.Entry; +import java.util.function.Predicate; +import java.util.logging.Level; +import java.util.stream.Collectors; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils.stripColors; /** * @author phaed */ + public class Helper { private Helper() { } - /** - * Dumps stacktrace to log - */ - @Deprecated - public static void dumpStackTrace() { - for (StackTraceElement el : Thread.currentThread().getStackTrace()) { - SimpleClans.debug(el.toString()); - } - } - - /** - * @deprecated use {@link KDRFormat} - */ - @Deprecated - public static String formatKDR(float kdr) { - DecimalFormat formatter = new DecimalFormat("#.#"); - return formatter.format(kdr); - } - @NotNull public static Locale forLanguageTag(@Nullable String languageTag) { Locale defaultLanguage = SimpleClans.getInstance().getSettingsManager().getLanguage(); @@ -67,21 +48,6 @@ public static Locale forLanguageTag(@Nullable String languageTag) { } return Locale.forLanguageTag(languageTag); } - - /** - * Gets the Player locale - * - * @param player the player - * @return the locale - */ - @Nullable - public static Locale getLocale(@NotNull Player player) { - ClanPlayer clanPlayer = SimpleClans.getInstance().getClanManager().getAnyClanPlayer(player.getUniqueId()); - if (clanPlayer != null) { - return clanPlayer.getLocale(); - } - return null; - } public static @Nullable JSONObject parseJson(String json) { if (json != null && !json.isEmpty()) { @@ -93,15 +59,71 @@ public static Locale getLocale(@NotNull Player player) { } return null; } - + + public static Set getPathsIn(String path, Predicate filter) { + Set files = new LinkedHashSet<>(); + String packagePath = path.replace(".", "/"); + + try { + URI uri = SimpleClans.class.getProtectionDomain().getCodeSource().getLocation().toURI(); + FileSystem fileSystem = FileSystems.newFileSystem(URI.create("jar:" + uri), Collections.emptyMap()); + files = Files.walk(fileSystem.getPath(packagePath)). + filter(Objects::nonNull). + filter(filter). + collect(Collectors.toSet()); + fileSystem.close(); + } catch (URISyntaxException | IOException ex) { + SimpleClans.getInstance().getLogger(). + log(Level.WARNING, "An error occurred while trying to load files: " + ex.getMessage(), ex); + } + + return files; + } + + public static Set> getClasses(String packageName) { + Set> classes = new LinkedHashSet<>(); + + Predicate filter = entry -> { + String path = entry.getFileName().toString(); + return !path.contains("$") && path.endsWith(".class"); + }; + + for (Path filesPath : getPathsIn(packageName, filter)) { + // Compatibility with different Java versions + String path = filesPath.toString(); + if (path.charAt(0) == '/') { + path = path.substring(1); + } + + String fileName = path.replace("/", ".").split(".class")[0]; + + try { + Class clazz = Class.forName(fileName); + classes.add(clazz); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + return classes; + } + + @SuppressWarnings("unchecked") + public static Set> getSubTypesOf(String packageName, Class type) { + return getClasses(packageName).stream(). + filter(type::isAssignableFrom). + map(aClass -> ((Class) aClass)). + collect(Collectors.toSet()); + } + /** * Parses a list of ranks from the specified JSONObject - * + * * @param jo the JSON Object * @return a list of ranks or null if the JSON String is null/empty */ - public static @Nullable List ranksFromJson(@Nullable JSONObject jo) { - if (jo != null && !jo.isEmpty()) { + public static @Nullable List ranksFromJson(@Nullable JSONObject jo) { + if (jo != null && !jo.isEmpty()) { Object ranks = jo.get("ranks"); if (ranks != null) { JSONArray array = (JSONArray) ranks; @@ -121,7 +143,7 @@ public static Locale getLocale(@NotNull Player player) { return rankList; } } - return null; + return null; } /** @@ -131,85 +153,83 @@ public static Locale getLocale(@NotNull Player player) { * @return the default rank or null if not found and/or it does not exist */ public static @Nullable String defaultRankFromJson(@Nullable JSONObject jo) { - if (jo != null && !jo.isEmpty()) { + if (jo != null && !jo.isEmpty()) { if (!jo.containsKey("defaultRank")) { return null; } else { return (String) jo.get("defaultRank"); } } - return null; + return null; } - + /** * Converts a list of ranks and the default rank to a JSON String - * - * @param ranks the ranks + * + * @param ranks the ranks * @param defaultRank the default rank * @return a JSON String */ @SuppressWarnings("unchecked") - public static String ranksToJson(List ranks, @Nullable String defaultRank) { - if (ranks == null) - ranks = new ArrayList(); - - JSONArray array = new JSONArray(); - for (Rank rank : ranks) { - JSONObject o = new JSONObject(); - o.put("name", rank.getName()); - o.put("displayName", rank.getDisplayName()); - JSONArray permArray = new JSONArray(); - for (String p : rank.getPermissions()) { - permArray.add(p); - } - o.put("permissions", permArray); - array.add(o); - } - - JSONObject object = new JSONObject(); - object.put("ranks", array); - object.put("defaultRank", defaultRank); - return object.toJSONString(); + public static String ranksToJson(List ranks, @Nullable String defaultRank) { + if (ranks == null) + ranks = new ArrayList<>(); + + JSONArray array = new JSONArray(); + for (Rank rank : ranks) { + JSONObject o = new JSONObject(); + o.put("name", rank.getName()); + o.put("displayName", rank.getDisplayName()); + JSONArray permArray = new JSONArray(); + permArray.addAll(rank.getPermissions()); + o.put("permissions", permArray); + array.add(o); + } + + JSONObject object = new JSONObject(); + object.put("ranks", array); + object.put("defaultRank", defaultRank); + return object.toJSONString(); } - + /** * Converts a resign times map to a JSON String - * + * * @param resignTimes * @return a JSON String */ public static String resignTimesToJson(Map resignTimes) { - return JSONObject.toJSONString(resignTimes); + return JSONObject.toJSONString(resignTimes); } - + /** * Converts a JSON String to a resign times map - * + * * @param json JSON String * @return a map */ @SuppressWarnings("unchecked") - public static Map resignTimesFromJson(String json) { - if (json != null) { - try { - return (Map) new JSONParser().parse(json); - } catch (ParseException e) { - e.printStackTrace(); - } - } - return null; + public static Map resignTimesFromJson(String json) { + if (json != null) { + try { + return (Map) new JSONParser().parse(json); + } catch (ParseException e) { + e.printStackTrace(); + } + } + return null; } - + /** * Returns the delay in seconds to the specified hour and minute. - * - * @param hour hour + * + * @param hour hour * @param minute minute * @return the delay in seconds */ public static long getDelayTo(int hour, int minute) { - if (hour < 0 || hour > 23) hour = 1; - if (minute < 0 || minute > 59) minute = 0; + if (hour < 0 || hour > 23) hour = 1; + if (minute < 0 || minute > 59) minute = 0; LocalDateTime now = LocalDateTime.now(); LocalDateTime d = LocalDateTime.of(now.toLocalDate(), LocalTime.of(hour, minute)); long delay; @@ -238,191 +258,13 @@ public static String getColorName(String playerName) { return playerName; } - /** - * Check for integer - * - * @param o - * @return - */ - public static boolean isInteger(Object o) { - return o instanceof java.lang.Integer; - } - - /** - * Check for byte - * - * @param input - * @return - */ - public static boolean isByte(String input) { - try { - Byte.parseByte(input); - return true; - } catch (Exception ex) { - return false; - } - } - - /** - * Check for short - * - * @param input - * @return - */ - public static boolean isShort(String input) { - try { - Short.parseShort(input); - return true; - } catch (Exception ex) { - return false; - } - } - - /** - * Check for integer - * - * @param input - * @return - */ - public static boolean isInteger(String input) { - try { - Integer.parseInt(input); - return true; - } catch (Exception ex) { - return false; - } - } - - /** - * Check for float - * - * @param input - * @return - */ - public static boolean isFloat(String input) { - try { - Float.parseFloat(input); - return true; - } catch (Exception ex) { - return false; - } - } - - /** - * Check for string - * - * @param o - * @return - */ - public static boolean isString(Object o) { - return o instanceof java.lang.String; - } - - /** - * Check for boolean - * - * @param o - * @return - */ - public static boolean isBoolean(Object o) { - return o instanceof java.lang.Boolean; - } - - /** - * Remove a character from a string - * - * @param s - * @param c - * @return - */ - public static String removeChar(String s, char c) { - String r = ""; - - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) != c) { - r += s.charAt(i); - } - } - - return r; - } - - /** - * Remove first character from a string - * - * @param s - * @param c - * @return - */ - public static String removeFirstChar(String s, char c) { - String r = ""; - - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) != c) { - r += s.charAt(i); - break; - } - } - - return r; - } - - /** - * Capitalize first word of sentence - * - * @param content - * @return - */ - public static String capitalize(String content) { - if (content.length() < 2) { - return content; - } - - String first = content.substring(0, 1).toUpperCase(); - return first + content.substring(1); - } - - /** - * Return plural word if count is bigger than one - * - * @param count - * @param word - * @param ending - * @return - */ - public static String plural(int count, String word, String ending) { - return count == 1 ? word : word + ending; - } - - /** - * Hex value to ChatColor - * - * @param hexValue - * @return - */ - @NotNull - public static String toColor(@Nullable String hexValue) { - if (hexValue == null) { - return ""; - } - if (hexValue.startsWith("&#")) { - return ChatUtils.parseColors(hexValue); - } - - ChatColor color = ChatColor.getByChar(hexValue); - if (color == null) { - return ""; - } - return color.toString(); - } - /** * Converts string array to ArrayList, remove empty strings * * @param values * @return */ - public static List fromArray(String... values) { + public static List fromArrayToList(String... values) { List results = new ArrayList<>(); Collections.addAll(results, values); results.remove(""); @@ -435,25 +277,13 @@ public static List fromArray(String... values) { * @param values * @return */ - public static Set fromArray2(String... values) { + public static Set fromArrayToSet(String... values) { HashSet results = new HashSet<>(); Collections.addAll(results, values); results.remove(""); return results; } - /** - * Converts a player array to ArrayList - * - * @param values - * @return - */ - public static List fromPlayerArray(Player... values) { - List results = new ArrayList<>(); - Collections.addAll(results, values); - return results; - } - /** * Converts ArrayList to string array * @@ -461,52 +291,21 @@ public static List fromPlayerArray(Player... values) { * @return */ public static String[] toArray(List list) { - return list.toArray(new String[list.size()]); - } - - /** - * Converts the Permission values array to a String array - * - * @return - */ - public static String[] fromPermissionArray() { - RankPermission[] permissions = RankPermission.values(); - String[] sa = new String[permissions.length]; - for (int i = 0; i < permissions.length; i++) { - sa[i] = permissions[i].toString(); - } - return sa; + return list.toArray(new String[0]); } /** - * Removes first item from a string array - * - * @param args - * @return - */ - public static String[] removeFirst(String[] args) { - List out = fromArray(args); - - if (!out.isEmpty()) { - out.remove(0); - } - return toArray(out); - } - - /** - * Converts a string array to a space separated string + * Converts the Permission values array to a String array * - * @param args * @return */ - public static String toMessage(String[] args) { - StringBuilder out = new StringBuilder(); - - for (String arg : args) { - out.append(arg).append(" "); + public static String[] fromPermissionArray() { + RankPermission[] permissions = RankPermission.values(); + String[] sa = new String[permissions.length]; + for (int i = 0; i < permissions.length; i++) { + sa[i] = permissions[i].toString(); } - - return out.toString().trim(); + return sa; } /** @@ -543,51 +342,6 @@ public static String toMessage(List args, String sep) { return stripTrailing(out, sep); } - /** - * @deprecated use {@link ChatUtils#parseColors(String)} - */ - @Deprecated - public static String parseColors(String msg) { - return ChatUtils.parseColors(msg); - } - - /** - * Removes color codes from strings - * - * @deprecated use {@link ChatUtils#stripColors(String)} - */ - @Deprecated - public static String stripColors(String msg) { - return ChatUtils.stripColors(msg); - } - - /* - * Retrieves the last color code - * - * @param msg - * @return - */ - public static String getLastColorCode(String msg) { - msg = msg.replaceAll(String.valueOf((char) 194), "").trim(); - - if (msg.length() < 2) { - return ""; - } - - String one = msg.substring(msg.length() - 2, msg.length() - 1); - String two = msg.substring(msg.length() - 1); - - if (one.equals("\u00a7")) { - return one + two; - } - - if (one.equals("&")) { - return Helper.toColor(two); - } - - return ""; - } - /** * Cleans up the tag from color codes and makes it lowercase * @@ -640,43 +394,6 @@ public static String generatePageSeparator(String sep) { return out; } - /** - * Check whether a player is online - * - * @param playerName - * @return - */ - @Deprecated - public static boolean isOnline(String playerName) { - Collection online = getOnlinePlayers(); - - for (Player o : online) { - if (o.getName().equalsIgnoreCase(playerName)) { - return true; - } - } - - return false; - } - - /** - * Check whether a player is online - * - * @param playerUniqueId - * @return - */ - public static boolean isOnline(UUID playerUniqueId) { - Collection online = getOnlinePlayers(); - - for (Player o : online) { - if (o.getUniqueId().equals(playerUniqueId)) { - return true; - } - } - - return false; - } - /** * Remove offline players from a ClanPlayer array * @@ -695,28 +412,6 @@ public static List stripOffLinePlayers(List in) { return out; } - /** - * Test if a url is valid - * - * @param strUrl - * @return - */ - public static boolean testURL(String strUrl) { - try { - URL url = new URL(strUrl); - HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); - urlConn.connect(); - - if (urlConn.getResponseCode() != HttpURLConnection.HTTP_OK) { - return false; - } - } catch (IOException e) { - return false; - } - - return true; - } - /** * Escapes single quotes * @@ -751,18 +446,6 @@ public static boolean isSameBlock(Location loc, Location loc2) { return loc.getBlockX() == loc2.getBlockX() && loc.getBlockY() == loc2.getBlockY() && loc.getBlockZ() == loc2.getBlockZ(); } - /** - * Whether the two locations refer to the same location, ignoring pitch and - * yaw - * - * @param loc - * @param loc2 - * @return - */ - public static boolean isSameLocation(Location loc, Location loc2) { - return loc.getX() == loc2.getX() && loc.getY() == loc2.getY() && loc.getZ() == loc2.getZ(); - } - /** * Sorts a Map by value * @@ -780,145 +463,6 @@ public static > Map sortByValue(Map map) return result; } - /** - * @deprecated use {@link VanishUtils#isVanished(CommandSender, Player)} - */ - @Deprecated - @Contract("_, null -> false") - public static boolean isVanished(@Nullable CommandSender viewer, @Nullable Player player) { - if (isVanished(player)) { - return true; - } - if (viewer instanceof Player && player != null) { - return !((Player) viewer).canSee(player); - } - - return false; - } - - /** - * @deprecated use {@link VanishUtils#isVanished(Player)} - */ - @Deprecated - @Contract("null -> false") - public static boolean isVanished(@Nullable Player player) { - if (player != null && player.hasMetadata("vanished") && !player.getMetadata("vanished").isEmpty()) { - return player.getMetadata("vanished").get(0).asBoolean(); - } - return false; - } - - @SuppressWarnings("unchecked") - public static Collection getOnlinePlayers() { - try { - Method method = Bukkit.class.getDeclaredMethod("getOnlinePlayers"); - Object players = method.invoke(null); - - if (players instanceof Player[]) { - return new ArrayList<>(Arrays.asList((Player[]) players)); - } else { - return (Collection) players; - } - } catch (Exception e) { - e.printStackTrace(); - } - - return new ArrayList<>(); - } - - @Deprecated - @Nullable - public static Player getPlayer(String playerName) { - return Bukkit.getPlayerExact(playerName); - } - - /** - * Formats the ally chat - * - * @param cp Sender - * @param msg The message - * @param placeholders The placeholders - * @return The formatted message - */ - public static String formatAllyChat(ClanPlayer cp, String msg, Map placeholders) { - SettingsManager sm = SimpleClans.getInstance().getSettingsManager(); - - String leaderColor = sm.getAllyChatLeaderColor(); - String memberColor = sm.getAllyChatMemberColor(); - String trustedColor = sm.getClanChatTrustedColor(); - - String rank = cp.getRankId().isEmpty() ? null : ChatUtils.parseColors(cp.getRankDisplayName()); - String rankFormat = rank != null ? ChatUtils.parseColors(sm.getAllyChatRank()).replace("%rank%", rank) : ""; - - String message = replacePlaceholders(sm.getAllyChatFormat(), cp, leaderColor, trustedColor, memberColor, rankFormat, msg); - if (placeholders != null) { - for (Entry e : placeholders.entrySet()) { - message = message.replace("%"+e.getKey()+"%", e.getValue()); - } - } - return message; - } - - private static String replacePlaceholders(String messageFormat, - ClanPlayer cp, - String leaderColor, - String trustedColor, - String memberColor, - String rankFormat, - String msg) { - return ChatUtils.parseColors(messageFormat) - .replace("%clan%", Objects.requireNonNull(cp.getClan()).getColorTag()) - .replace("%nick-color%", (cp.isLeader() ? leaderColor : cp.isTrusted() ? trustedColor : memberColor)) - .replace("%player%", cp.getName()) - .replace("%rank%", rankFormat) - .replace("%message%", msg); - } - - /** - * Formats the clan chat - * - * @param cp Sender - * @param msg The message - * @param placeholders The placeholders - * @return The formatted message - */ - public static String formatClanChat(ClanPlayer cp, String msg, Map placeholders) { - SettingsManager sm = SimpleClans.getInstance().getSettingsManager(); - - String leaderColor = sm.getClanChatLeaderColor(); - String memberColor = sm.getClanChatMemberColor(); - String trustedColor = sm.getClanChatTrustedColor(); - - String rank = cp.getRankId().isEmpty() ? null : ChatUtils.parseColors(cp.getRankDisplayName()); - String rankFormat = rank != null ? ChatUtils.parseColors(sm.getClanChatRank()).replace("%rank%", rank) : ""; - - String message = replacePlaceholders(sm.getClanChatFormat(), cp, leaderColor, trustedColor, memberColor, rankFormat, msg); - - if (placeholders != null) { - for (Entry e : placeholders.entrySet()) { - message = message.replace("%"+e.getKey()+"%", e.getValue()); - } - } - return message; - } - - /** - * Formats the chat in a way that the Clan Tag is always there, so infractors can be easily identified - * - * @param cp Sender - * @param msg The chat message - * @return The formatted message - */ - public static String formatSpyClanChat(ClanPlayer cp, String msg) { - msg = stripColors(msg); - - if (msg.contains(stripColors(cp.getClan().getColorTag()))) { - return ChatColor.DARK_GRAY + msg; - } else { - return ChatColor.DARK_GRAY + "[" + cp.getTag() + "] " + msg; - } - } - /** * Formats max inactive days to an infinity symbol if it's negative or 0 * diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Request.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Request.java index e24169b98..f1d342417 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Request.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/Request.java @@ -6,6 +6,8 @@ import java.util.Collections; import java.util.List; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.REQUEST_MAX; + /** * @author phaed */ @@ -178,6 +180,6 @@ public void incrementAskCount() { } public boolean reachedRequestLimit() { - return askCount > SimpleClans.getInstance().getSettingsManager().getMaxAsksPerRequest(); + return askCount > SimpleClans.getInstance().getSettingsManager().getInt(REQUEST_MAX); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java index 376ca19a6..c6a0af03d 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java @@ -6,9 +6,9 @@ import net.sacredlabyrinth.phaed.simpleclans.language.LanguageMigration; import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource; import net.sacredlabyrinth.phaed.simpleclans.listeners.*; -import net.sacredlabyrinth.phaed.simpleclans.managers.*; import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger; import net.sacredlabyrinth.phaed.simpleclans.loggers.CSVBankLogger; +import net.sacredlabyrinth.phaed.simpleclans.managers.*; import net.sacredlabyrinth.phaed.simpleclans.tasks.*; import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController; import net.sacredlabyrinth.phaed.simpleclans.utils.ChatFormatMigration; @@ -16,6 +16,8 @@ import net.sacredlabyrinth.phaed.simpleclans.utils.UpdateChecker; import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration; import org.bstats.bukkit.Metrics; +import org.bstats.charts.SimplePie; +import org.bstats.charts.SingleLineChart; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; @@ -31,6 +33,8 @@ import java.util.logging.Logger; import java.util.regex.Pattern; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; + /** * @author Phaed */ @@ -49,6 +53,7 @@ public class SimpleClans extends JavaPlugin { private PermissionsManager permissionsManager; private TeleportManager teleportManager; private ProtectionManager protectionManager; + private ChatManager chatManager; private boolean hasUUID; private static final Pattern ACF_PLACEHOLDER_PATTERN = Pattern.compile("\\{(?[a-zA-Z]+?)}"); @@ -63,7 +68,7 @@ public static Logger getLog() { } public static void debug(String msg) { - if (getInstance().getSettingsManager().isDebugging()) { + if (getInstance().getSettingsManager().is(DEBUG)) { logger.log(Level.INFO, msg); } } @@ -88,7 +93,7 @@ public static void log(String msg, Object... arg) { public void onEnable() { instance = this; new LanguageMigration(this).migrate(); - settingsManager = new SettingsManager(); + settingsManager = new SettingsManager(this); languageResource = new LanguageResource(); this.hasUUID = UUIDMigration.canReturnUUID(); @@ -99,11 +104,11 @@ public void onEnable() { teleportManager = new TeleportManager(); protectionManager = new ProtectionManager(); protectionManager.registerListeners(); + chatManager = new ChatManager(this); migrateChatFormat(); registerEvents(); permissionsManager.loadPermissions(); commandManager = new SCCommandManager(this); - bankLogger = new CSVBankLogger(this); logStatus(); @@ -114,8 +119,8 @@ public void onEnable() { } private void logStatus() { - getLogger().info("Multithreading: " + SimpleClans.getInstance().getSettingsManager().getUseThreads()); - getLogger().info("BungeeCord: " + SimpleClans.getInstance().getSettingsManager().getUseBungeeCord()); + getLogger().info("Multithreading: " + SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)); + getLogger().info("BungeeCord: " + SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_BUNGEECORD)); getLogger().info("Help us translate SimpleClans to your language! " + "Access https://crowdin.com/project/simpleclans/"); } @@ -149,43 +154,42 @@ private void startMetrics() { ClanManager cm = getClanManager(); String on = "enabled"; String off = "disabled"; - - metrics.addCustomChart(new Metrics.SingleLineChart("clans", () -> cm.getClans().size())); - metrics.addCustomChart(new Metrics.SingleLineChart("clan_players", () -> cm.getAllClanPlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("language", () -> sm.getLanguage().toString())); - metrics.addCustomChart(new Metrics.SimplePie("machine_language", () -> Locale.getDefault().toString())); - metrics.addCustomChart(new Metrics.SimplePie("language_chooser", () -> sm.isLanguagePerPlayer() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("database", () -> sm.isUseMysql() ? "MySQL" : "SQLite")); - metrics.addCustomChart(new Metrics.SimplePie("save_periodically", () -> sm.isSavePeriodically() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("save_interval", () -> String.valueOf(sm.getSaveInterval()))); - metrics.addCustomChart(new Metrics.SimplePie("upkeep", () -> sm.isClanUpkeep() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("member_fee", () -> sm.isMemberFee() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("rejoin_cooldown", () -> sm.isRejoinCooldown() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("clan_verification", () -> sm.isRequireVerification() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("money_per_kill", () -> sm.isMoneyPerKill() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("threads", () -> sm.getUseThreads() ? on : off)); - metrics.addCustomChart(new Metrics.SimplePie("bungeecord", () -> sm.getUseBungeeCord() ? on : off)); + metrics.addCustomChart(new SingleLineChart("clans", () -> cm.getClans().size())); + metrics.addCustomChart(new SingleLineChart("clan_players", () -> cm.getAllClanPlayers().size())); + metrics.addCustomChart(new SimplePie("language", () -> sm.getLanguage().toString())); + metrics.addCustomChart(new SimplePie("machine_language", () -> Locale.getDefault().toString())); + metrics.addCustomChart(new SimplePie("language_chooser", () -> sm.is(LANGUAGE_SELECTOR) ? on : off)); + metrics.addCustomChart(new SimplePie("database", () -> sm.is(MYSQL_ENABLE) ? "MySQL" : "SQLite")); + metrics.addCustomChart(new SimplePie("save_periodically", () -> sm.is(PERFORMANCE_SAVE_PERIODICALLY) ? on : off)); + metrics.addCustomChart(new SimplePie("save_interval", () -> sm.getString(PERFORMANCE_SAVE_INTERVAL))); + metrics.addCustomChart(new SimplePie("upkeep", () -> sm.is(ECONOMY_UPKEEP_ENABLED) ? on : off)); + metrics.addCustomChart(new SimplePie("member_fee", () -> sm.is(ECONOMY_MEMBER_FEE_ENABLED) ? on : off)); + metrics.addCustomChart(new SimplePie("rejoin_cooldown", () -> sm.is(ENABLE_REJOIN_COOLDOWN) ? on : off)); + metrics.addCustomChart(new SimplePie("clan_verification", () -> sm.is(REQUIRE_VERIFICATION) ? on : off)); + metrics.addCustomChart(new SimplePie("money_per_kill", () -> sm.is(ECONOMY_MONEY_PER_KILL) ? on : off)); + metrics.addCustomChart(new SimplePie("threads", () -> sm.is(PERFORMANCE_USE_THREADS) ? on : off)); + metrics.addCustomChart(new SimplePie("bungeecord", () -> sm.is(PERFORMANCE_USE_BUNGEECORD) ? on : off)); } private void startTasks() { - if (getSettingsManager().isSavePeriodically()) { + if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) { new SaveDataTask().start(); } - if (getSettingsManager().isMemberFee()) { + if (getSettingsManager().is(ECONOMY_MEMBER_FEE_ENABLED)) { new CollectFeeTask().start(); } - if (getSettingsManager().isClanUpkeep()) { + if (getSettingsManager().is(ECONOMY_UPKEEP_ENABLED)) { new CollectUpkeepTask().start(); new UpkeepWarningTask().start(); } - if (getSettingsManager().isCachePlayerHeads()) { + if (getSettingsManager().is(PERFORMANCE_HEAD_CACHING)) { new PlayerHeadCacheTask(this).start(); } } @Override public void onDisable() { - if (getSettingsManager().isSavePeriodically()) { + if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) { getStorageManager().saveModified(); } getStorageManager().closeConnection(); @@ -237,6 +241,10 @@ public ProtectionManager getProtectionManager() { return protectionManager; } + public ChatManager getChatManager() { + return chatManager; + } + public BankLogger getBankLogger() { return bankLogger; } @@ -256,13 +264,10 @@ public String getLang(@NotNull String key, @Nullable Player player) { } @Nullable - public static String optionalLang(@NotNull String key, @Nullable Player player, Object... arguments) { - Locale locale = getInstance().getSettingsManager().getLanguage(); - if (player != null && instance.getSettingsManager().isLanguagePerPlayer()) { - Locale playerLocale = Helper.getLocale(player); - if (playerLocale != null) { - locale = playerLocale; - } + public static String optionalLang(@NotNull String key, @Nullable ClanPlayer clanPlayer, Object... arguments) { + Locale locale = instance.getSettingsManager().getLanguage(); + if (clanPlayer != null && instance.getSettingsManager().is(LANGUAGE_SELECTOR)) { + locale = clanPlayer.getLocale(); } String lang = languageResource.getLang(key, locale); @@ -277,13 +282,25 @@ public static String optionalLang(@NotNull String key, @Nullable Player player, return MessageFormat.format(message, arguments); } + @Nullable + public static String optionalLang(@NotNull String key, @Nullable Player player, Object... arguments) { + ClanPlayer clanPlayer = null; + if (player != null) { + clanPlayer = instance.getClanManager().getAnyClanPlayer(player.getUniqueId()); + } + return optionalLang(key, clanPlayer, arguments); + } + @NotNull public static String lang(@NotNull String key, @Nullable Player player, Object... arguments) { String lang = optionalLang(key, player, arguments); - if (lang == null) { - return key; - } - return lang; + return (lang == null) ? key : lang; + } + + @NotNull + public static String lang(@NotNull String key, @Nullable ClanPlayer clanPlayer, Object... arguments) { + String lang = optionalLang(key, clanPlayer, arguments); + return (lang == null) ? key : lang; } @NotNull @@ -322,6 +339,7 @@ public boolean hasUUID() { return this.hasUUID; } + @Deprecated public void setUUID(boolean trueOrFalse) { this.hasUUID = trueOrFalse; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/TeleportState.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/TeleportState.java index 9ec25b160..1dcc244d8 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/TeleportState.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/TeleportState.java @@ -6,6 +6,8 @@ import java.util.UUID; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_TELEPORT_DELAY; + public class TeleportState { private final UUID playerUniqueId; private final Location playerLocation; @@ -18,7 +20,7 @@ public TeleportState(Player player, Location destination, String clanName) { this.destination = destination; this.playerLocation = player.getLocation(); this.clanName = clanName; - this.counter = SimpleClans.getInstance().getSettingsManager().getWaitSecs(); + this.counter = SimpleClans.getInstance().getSettingsManager().getInt(CLAN_TELEPORT_DELAY); this.playerUniqueId = player.getUniqueId(); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/VoteResult.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/VoteResult.java index 2507615ef..20bb128b0 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/VoteResult.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/VoteResult.java @@ -2,12 +2,9 @@ /** * Possible vote values - */ -/** * * @author cc_madelg */ -public enum VoteResult -{ +public enum VoteResult { ACCEPT, DENY } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/ChatHandler.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/ChatHandler.java new file mode 100644 index 000000000..c40c37a09 --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/ChatHandler.java @@ -0,0 +1,15 @@ +package net.sacredlabyrinth.phaed.simpleclans.chat; + +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; + +public interface ChatHandler { + SimpleClans plugin = SimpleClans.getInstance(); + SettingsManager settingsManager = plugin.getSettingsManager(); + ChatManager chatManager = plugin.getChatManager(); + + void sendMessage(SCMessage message); + + boolean canHandle(SCMessage.Source source); +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/SCMessage.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/SCMessage.java new file mode 100644 index 000000000..51ccbbf48 --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/SCMessage.java @@ -0,0 +1,80 @@ +package net.sacredlabyrinth.phaed.simpleclans.chat; + +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class SCMessage { + + private final Source source; + private final ClanPlayer.Channel channel; + private final ClanPlayer sender; + private List receivers; + private String content; + + /** + * Creates a message with initial parameters + * + * @param source The source of message + * @param channel The channel of clan player + * @param sender The clan player sender + * @param content The content of message + * @param receivers The clan players, who will receive the content + */ + public SCMessage(@NotNull Source source, @NotNull ClanPlayer.Channel channel, @NotNull ClanPlayer sender, String content, @NotNull List receivers) { + this.source = source; + this.channel = channel; + this.sender = sender; + this.content = content; + this.receivers = receivers; + } + + /** + * Creates a new SCMessage without receivers + * + * @see SCMessage#SCMessage(Source, ClanPlayer.Channel, ClanPlayer, String, List instantiate with initial receievers + */ + public SCMessage(@NotNull Source source, @NotNull ClanPlayer.Channel channel, @NotNull ClanPlayer sender, String content) { + this(source, channel, sender, content, new ArrayList<>()); + } + + public ClanPlayer.Channel getChannel() { + return channel; + } + + public ClanPlayer getSender() { + return sender; + } + + public String getContent() { + return content; + } + + public Source getSource() { + return source; + } + + public List getReceivers() { + return receivers; + } + + public void setContent(@NotNull String content) { + this.content = content; + } + + public void setReceivers(@NotNull List receivers) { + this.receivers = receivers; + } + + /** + * The place where the message came from. + * Used by ChatHandlers to know which SCMessages they can handle. + * + * @see ChatHandler initiate the handler + */ + public enum Source { + SPIGOT, DISCORD, BUNGEE + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/DiscordChatHandler.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/DiscordChatHandler.java new file mode 100644 index 000000000..94db2354a --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/DiscordChatHandler.java @@ -0,0 +1,49 @@ +package net.sacredlabyrinth.phaed.simpleclans.chat.handlers; + +import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel; +import github.scarsz.discordsrv.util.DiscordUtil; +import net.sacredlabyrinth.phaed.simpleclans.Clan; +import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler; +import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage; +import net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook; + +import java.util.Objects; +import java.util.Optional; + +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_FORMAT_TO; +import static org.bukkit.Bukkit.getPluginManager; + +/** + * Handles delivering messages from {@link Source#SPIGOT} to {@link Source#DISCORD}. + */ +public class DiscordChatHandler implements ChatHandler { + + @Override + public void sendMessage(SCMessage message) { + if (message.getChannel() != CLAN) { + return; + } + + String format = settingsManager.getString(DISCORDCHAT_FORMAT_TO); + String formattedMessage = chatManager.parseChatFormat(format, message); + + Clan clan = message.getSender().getClan(); + if (clan == null) { + return; + } + + DiscordHook discordHook = Objects.requireNonNull(chatManager.getDiscordHook(), "DiscordHook cannot be null"); + Optional channel = discordHook.getChannel(clan.getTag()); + channel.ifPresent(textChannel -> DiscordUtil.sendMessage(textChannel, formattedMessage)); + } + + @Override + public boolean canHandle(SCMessage.Source source) { + return source == SPIGOT && settingsManager.is(DISCORDCHAT_ENABLE) && + getPluginManager().getPlugin("DiscordSRV") != null; + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpigotChatHandler.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpigotChatHandler.java new file mode 100644 index 000000000..e5d15c1a9 --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpigotChatHandler.java @@ -0,0 +1,54 @@ +package net.sacredlabyrinth.phaed.simpleclans.chat.handlers; + +import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler; +import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage; +import net.sacredlabyrinth.phaed.simpleclans.events.ChatEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE; +import static org.bukkit.Bukkit.getPluginManager; + +public class SpigotChatHandler implements ChatHandler { + + @Override + public void sendMessage(SCMessage message) { + /* + TODO: Make it async, change Type to Channel in 3.0 + */ + new BukkitRunnable() { + @Override + public void run() { + ChatEvent event = new ChatEvent(message.getContent(), message.getSender(), message.getReceivers(), + ChatEvent.Type.valueOf(message.getChannel().name())); + + getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + + ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_FORMAT", + message.getSource() == SPIGOT ? message.getChannel() : message.getSource())); + + String format = settingsManager.getString(configField); + String formattedMessage = chatManager.parseChatFormat(format, message, event.getPlaceholders()); + + plugin.getLogger().info(formattedMessage); + + for (ClanPlayer cp : message.getReceivers()) { + ChatBlock.sendMessage(cp, formattedMessage); + } + } + }.runTask(plugin); + } + + @Override + public boolean canHandle(SCMessage.Source source) { + return source == SPIGOT || (source == DISCORD && settingsManager.is(DISCORDCHAT_ENABLE) && + getPluginManager().getPlugin("DiscordSRV") != null); + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpyChatHandler.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpyChatHandler.java new file mode 100644 index 000000000..d0889d785 --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/chat/handlers/SpyChatHandler.java @@ -0,0 +1,51 @@ +package net.sacredlabyrinth.phaed.simpleclans.chat.handlers; + +import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler; +import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage; + +import java.util.List; +import java.util.stream.Collectors; + +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE; +import static org.bukkit.Bukkit.getPluginManager; + +/** + * Handles delivering messages from {@link Source#SPIGOT} and {@link Source#DISCORD} to internal spy chat. + */ +public class SpyChatHandler implements ChatHandler { + + @Override + public void sendMessage(SCMessage message) { + ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_SPYFORMAT", + message.getSource() == SPIGOT ? message.getChannel() : message.getSource())); + String format = settingsManager.getString(configField); + + String formattedMessage = chatManager.parseChatFormat(format, message); + + List onlinePlayers = getOnlineClanPlayers().stream() + .filter(player -> plugin.getPermissionsManager().has(player.toPlayer(), "simpleclans.admin.all-seeing-eye")) + .filter(player -> !player.isMuted()) + .collect(Collectors.toList()); + + onlinePlayers.removeAll(message.getReceivers()); + onlinePlayers.forEach(receiver -> ChatBlock.sendMessage(receiver, formattedMessage)); + } + + @Override + public boolean canHandle(SCMessage.Source source) { + return source == SPIGOT || (source == DISCORD && settingsManager.is(DISCORDCHAT_ENABLE) && + getPluginManager().getPlugin("DiscordSRV") != null); + } + + private List getOnlineClanPlayers() { + return plugin.getClanManager().getAllClanPlayers().stream(). + filter(cp -> cp.toPlayer() != null). + collect(Collectors.toList()); + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java index ed76f1b0c..4bcd06bff 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java @@ -6,6 +6,8 @@ import co.aikar.commands.PaperCommandManager; import co.aikar.locales.MessageKey; import co.aikar.locales.MessageKeyProvider; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractAsyncCompletion; import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractCompletion; @@ -22,7 +24,6 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.reflections.Reflections; import java.lang.reflect.Modifier; import java.util.Arrays; @@ -32,6 +33,7 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.optionalLang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class SCCommandManager extends PaperCommandManager { private final SimpleClans plugin; @@ -60,11 +62,13 @@ private void registerDependencies() { registerDependency(PermissionsManager.class, plugin.getPermissionsManager()); registerDependency(RequestManager.class, plugin.getRequestManager()); registerDependency(ProtectionManager.class, plugin.getProtectionManager()); + registerDependency(ChatManager.class, plugin.getChatManager()); } private void registerCompletions() { - Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands.completions"); - Set> completions = reflections.getSubTypesOf(AbstractCompletion.class); + Set> completions = + Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.completions", + AbstractCompletion.class); plugin.getLogger().info(String.format("Registering %d command completions...", completions.size())); for (Class c : completions) { if (Modifier.isAbstract(c.getModifiers())) { @@ -90,8 +94,9 @@ private void registerCompletions() { @SuppressWarnings("unchecked") private void registerConditions() { - Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands.conditions"); - Set> conditions = reflections.getSubTypesOf(AbstractCondition.class); + Set> conditions = + Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.conditions", + AbstractCondition.class); plugin.getLogger().info(String.format("Registering %d command conditions...", conditions.size())); for (Class c : conditions) { if (Modifier.isAbstract(c.getModifiers())) { @@ -116,8 +121,9 @@ private void registerConditions() { @SuppressWarnings({"rawtypes", "unchecked"}) private void registerContexts() { - Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands.contexts"); - Set> resolvers = reflections.getSubTypesOf(AbstractContextResolver.class); + Set> resolvers = + Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.contexts", + AbstractContextResolver.class); plugin.getLogger().info(String.format("Registering %d command contexts...", resolvers.size())); for (Class cr : resolvers) { if (Modifier.isAbstract(cr.getModifiers())) { @@ -138,9 +144,8 @@ private void registerContexts() { } private void registerCommands() { - boolean forceCommandPriority = plugin.getSettingsManager().isForceCommandPriority(); - Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands"); - Set> commands = reflections.getSubTypesOf(BaseCommand.class); + boolean forceCommandPriority = plugin.getSettingsManager().is(COMMANDS_FORCE_PRIORITY); + Set> commands = Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands", BaseCommand.class); plugin.getLogger().info(String.format("Registering %d base commands...", commands.size())); for (Class c : commands) { //ACF already registers nested classes @@ -160,16 +165,16 @@ private void addCommandReplacements() { SettingsManager sm = plugin.getSettingsManager(); getCommandReplacements().addReplacements( "basic_conditions", "not_blacklisted|not_banned", - "clan", sm.getCommandClan(), - "deny", sm.getCommandDeny() + "|deny", - "more", sm.getCommandMore(), - "ally_chat", sm.getCommandAlly(), - "accept", sm.getCommandAccept() + "|accept", - "clan_chat", sm.getCommandClanChat() + "clan", sm.getString(COMMANDS_CLAN), + "deny", sm.getString(COMMANDS_DENY) + "|deny", + "more", sm.getString(COMMANDS_MORE), + "ally_chat", sm.getString(COMMANDS_ALLY), + "accept", sm.getString(COMMANDS_ACCEPT) + "|accept", + "clan_chat", sm.getString(COMMANDS_CLAN_CHAT) ); SUBCOMMANDS.forEach(s -> { - String command = optionalLang(s + ".command", null); + String command = optionalLang(s + ".command", (ClanPlayer) null); if (command == null) { command = s; } @@ -206,7 +211,6 @@ public String getMessage(CommandIssuer issuer, MessageKeyProvider key) { }; //this.locales.loadLanguages(); } - return this.locales; } @@ -219,6 +223,6 @@ public String getMessage(CommandIssuer issuer, MessageKeyProvider key) { "setdisplayname", "permissions", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone", "lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod", "setdefault", "removedefault", "land", "break", "interact", "place_block", "damage", "interact_entity", - "container", "permanent", "take", "give"); + "container", "permanent", "take", "give", "join", "leave", "mute"); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java index c8d44cfdd..a6964a4fc 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java @@ -2,29 +2,67 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.*; -import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; +import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager; import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; -import org.bukkit.entity.Player; +import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager; + +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.ALLY; +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; @CommandAlias("%ally_chat") @Description("{@@command.description.ally}") @CommandPermission("simpleclans.member.ally") -@Conditions("%basic_conditions|clan_member|rank:name=ALLY_CHAT") +@Conditions("%basic_conditions|clan_member|can_chat:type=ALLY|rank:name=ALLY_CHAT") public class AllyChatCommand extends BaseCommand { @Dependency - private ClanManager clanManager; + private ChatManager chatManager; @Dependency private SettingsManager settingsManager; + @Dependency + private StorageManager storageManager; @Default @HelpSearchTags("chat") - @CommandCompletion("@chat_subcommands") - public void sendMessage(Player player, @Name("message") String message) { - if (!settingsManager.isAllyChatEnable()) { + public void sendMessage(ClanPlayer cp, @Name("message") String message) { + chatManager.processChat(SPIGOT, ALLY, cp, message); + } + + @Subcommand("%join") + public void join(ClanPlayer clanPlayer) { + if (clanPlayer.getChannel() == ALLY) { + ChatBlock.sendMessage(clanPlayer, lang("already.joined.ally.chat")); return; } - clanManager.processAllyChat(player, message); + + clanPlayer.setChannel(ALLY); + storageManager.updateClanPlayer(clanPlayer); + ChatBlock.sendMessage(clanPlayer, lang("joined.ally.chat")); + } + + @Subcommand("%leave") + public void leave(ClanPlayer clanPlayer) { + if (clanPlayer.getChannel() == ALLY) { + clanPlayer.setChannel(NONE); + storageManager.updateClanPlayer(clanPlayer); + ChatBlock.sendMessage(clanPlayer, lang("left.ally.chat", clanPlayer)); + } else { + ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer)); + } } + @Subcommand("%mute") + public void mute(ClanPlayer clanPlayer) { + if (!clanPlayer.isMutedAlly()) { + clanPlayer.mute(ALLY, true); + ChatBlock.sendMessage(clanPlayer, lang("muted.ally.chat", clanPlayer)); + } else { + clanPlayer.mute(ALLY, false); + ChatBlock.sendMessage(clanPlayer, lang("unmuted.ally.chat", clanPlayer)); + } + } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/BankCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/BankCommand.java index 07dd09749..072490086 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/BankCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/BankCommand.java @@ -5,12 +5,11 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; import net.sacredlabyrinth.phaed.simpleclans.Clan; import net.sacredlabyrinth.phaed.simpleclans.EconomyResponse; -import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.events.BankDepositEvent; import net.sacredlabyrinth.phaed.simpleclans.events.BankWithdrawEvent; import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent; -import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager; import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger; +import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -49,7 +48,6 @@ public void bankWithdraw(Player player, Clan clan, double amount) { processWithdraw(player, clan, amount); } - @SuppressWarnings("deprecation") private void processWithdraw(Player player, Clan clan, double amount) { if (!clan.isAllowWithdraw()) { String message = getCurrentCommandManager().getCommandReplacements() @@ -58,15 +56,20 @@ private void processWithdraw(Player player, Clan clan, double amount) { return; } amount = Math.abs(amount); + /* + TODO: Remove at SimpleClans 3.0 + */ BankWithdrawEvent event = new BankWithdrawEvent(player, clan, amount); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { return; } - + /* + * —————————————————————————————————— + */ switch (clan.withdraw(player, ClanBalanceUpdateEvent.Cause.COMMAND, amount)) { case SUCCESS: - if (SimpleClans.getInstance().getPermissionsManager().playerGrantMoney(player, amount)) { + if (permissions.playerGrantMoney(player, amount)) { player.sendMessage(AQUA + lang("player.clan.withdraw", player, amount)); clan.addBb(player.getName(), AQUA + lang("bb.clan.withdraw", amount)); } else { @@ -95,7 +98,6 @@ public void bankDeposit(Player player, Clan clan, double amount) { processDeposit(player, clan, amount); } - @SuppressWarnings("deprecation") private void processDeposit(Player player, Clan clan, double amount) { if (!clan.isAllowDeposit()) { String message = getCurrentCommandManager().getCommandReplacements() @@ -104,11 +106,19 @@ private void processDeposit(Player player, Clan clan, double amount) { return; } amount = Math.abs(amount); + + /* + TODO: Remove at SimpleClans 3.0 + */ BankDepositEvent event = new BankDepositEvent(player, clan, amount); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { return; } + /* + * —————————————————————————————————— + */ + if (!permissions.playerHasMoney(player, amount)) { player.sendMessage(AQUA + lang("not.sufficient.money", player)); return; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java index 83bc8793e..3d4d0f777 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java @@ -2,29 +2,67 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.*; +import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; -import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager; import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; -import org.bukkit.entity.Player; +import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager; + +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN; +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; @CommandAlias("%clan_chat") -@Conditions("%basic_conditions|clan_member") +@Conditions("%basic_conditions|clan_member|can_chat:type=CLAN") @CommandPermission("simpleclans.member.chat") @Description("{@@command.description.chat}") public class ChatCommand extends BaseCommand { @Dependency - private ClanManager clanManager; + private ChatManager chatManager; @Dependency private SettingsManager settingsManager; + @Dependency + private StorageManager storageManager; @Default @HelpSearchTags("chat") - @CommandCompletion("@chat_subcommands") - public void sendMessage(Player player, ClanPlayer cp, @Name("message") String message) { - if (!settingsManager.getClanChatEnable()) { + public void sendMessage(ClanPlayer cp, @Name("message") String message) { + chatManager.processChat(SPIGOT, CLAN, cp, message); + } + + @Subcommand("%join") + public void join(ClanPlayer clanPlayer) { + if (clanPlayer.getChannel() == CLAN) { + ChatBlock.sendMessage(clanPlayer, lang("already.joined.clan.chat")); return; } - clanManager.processClanChat(player, cp.getTag(), message); + + clanPlayer.setChannel(CLAN); + storageManager.updateClanPlayer(clanPlayer); + ChatBlock.sendMessage(clanPlayer, lang("joined.clan.chat")); + } + + @Subcommand("%leave") + public void leave(ClanPlayer clanPlayer) { + if (clanPlayer.getChannel() == CLAN) { + clanPlayer.setChannel(NONE); + storageManager.updateClanPlayer(clanPlayer); + ChatBlock.sendMessage(clanPlayer, lang("left.clan.chat", clanPlayer)); + } else { + ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer)); + } + } + + @Subcommand("%mute") + public void mute(ClanPlayer clanPlayer) { + if (!clanPlayer.isMuted()) { + clanPlayer.mute(CLAN, true); + ChatBlock.sendMessage(clanPlayer, lang("muted.clan.chat", clanPlayer)); + } else { + clanPlayer.mute(CLAN, false); + ChatBlock.sendMessage(clanPlayer, lang("unmuted.clan.chat", clanPlayer)); + } } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java index f39adeeb4..38827538f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java @@ -18,6 +18,7 @@ import java.util.Objects; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.AQUA; import static org.bukkit.ChatColor.RED; @@ -49,7 +50,7 @@ public void startWar(Player player, ClanPlayer requester, Clan requestClan, @Con List onlineLeaders = Helper.stripOffLinePlayers(requestClan.getLeaders()); - if (settings.isWarRequestEnabled()) { + if (settings.is(WAR_START_REQUEST_ENABLED)) { if (!onlineLeaders.isEmpty()) { requestManager.addWarStartRequest(requester, targetClan, requestClan); ChatBlock.sendMessage(player, AQUA + lang("leaders.have.been.asked.to.accept.the.war.request", @@ -67,13 +68,13 @@ public void startWar(Player player, ClanPlayer requester, Clan requestClan, @Con @Conditions("verified|rank:name=WAR_END") @Description("{@@command.description.war.end}") @CommandCompletion("@warring_clans") - public void endWar(Player player, ClanPlayer cp, Clan issuerClan, @Name("clan") ClanInput other) { + public void endWar(ClanPlayer cp, Clan issuerClan, @Name("clan") ClanInput other) { Clan war = other.getClan(); if (issuerClan.isWarring(war.getTag())) { requestManager.addWarEndRequest(cp, war, issuerClan); - ChatBlock.sendMessage(player, AQUA + lang("leaders.asked.to.end.rivalry", player, war.getName())); + ChatBlock.sendMessage(cp, AQUA + lang("leaders.asked.to.end.rivalry", cp, war.getName())); } else { - ChatBlock.sendMessage(player, RED + lang("clans.not.at.war", player)); + ChatBlock.sendMessage(cp, RED + lang("clans.not.at.war", cp)); } } @@ -149,7 +150,7 @@ public void invite(Player sender, ClanPlayer cp, Clan clan, return; } - if (clan.getSize() >= settings.getMaxMembers() && settings.getMaxMembers() > 0) { + if (clan.getSize() >= settings.getInt(CLAN_MAX_MEMBERS) && settings.getInt(CLAN_MAX_MEMBERS) > 0) { ChatBlock.sendMessage(sender, RED + lang("the.clan.members.reached.limit", sender)); return; } @@ -180,7 +181,7 @@ public void checkFee(Player player, Clan clan) { @Description("{@@command.description.fee.set}") public void setFee(Player player, Clan clan, @Name("fee") double fee) { fee = Math.abs(fee); - double maxFee = settings.getMaxMemberFee(); + double maxFee = settings.getDouble(ECONOMY_MAX_MEMBER_FEE); if (fee > maxFee) { ChatBlock.sendMessage(player, RED + lang("max.fee.allowed.is.0", player, maxFee)); @@ -218,14 +219,14 @@ public void blockClanFf(Player player, Clan clan) { @Conditions("verified|rank:name=DESCRIPTION") @Description("{@@command.description.description}") public void setDescription(Player player, Clan clan, @Name("description") String description) { - if (description.length() < settings.getClanMinDescriptionLength()) { + if (description.length() < settings.getInt(CLAN_MIN_DESCRIPTION_LENGTH)) { ChatBlock.sendMessage(player, RED + lang("your.clan.description.must.be.longer.than", - player, settings.getClanMinDescriptionLength())); + player, settings.getInt(CLAN_MIN_DESCRIPTION_LENGTH))); return; } - if (description.length() > settings.getClanMaxDescriptionLength()) { + if (description.length() > settings.getInt(CLAN_MAX_DESCRIPTION_LENGTH)) { ChatBlock.sendMessage(player, RED + lang("your.clan.description.cannot.be.longer.than", - player, settings.getClanMaxDescriptionLength())); + player, settings.getInt(CLAN_MAX_DESCRIPTION_LENGTH))); return; } clan.setDescription(description); @@ -292,7 +293,7 @@ public void addAlly(Player player, ChatBlock.sendMessage(player, RED + lang("your.clans.are.already.allies", player)); return; } - int maxAlliances = settings.getClanMaxAlliances(); + int maxAlliances = settings.getInt(CLAN_MAX_ALLIANCES); if (maxAlliances != -1) { if (issuerClan.getAllies().size() >= maxAlliances) { ChatBlock.sendMessage(player, lang("your.clan.reached.max.alliances", player)); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/HomeCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/HomeCommands.java index 848906ee9..d76256186 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/HomeCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/HomeCommands.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Player; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; @CommandAlias("%clan") @@ -35,7 +36,7 @@ public class HomeCommands extends BaseCommand { @Conditions("rank:name=REGROUP_ME") @Description("{@@command.description.regroup.me}") public void regroupMe(Player player, ClanPlayer cp, Clan clan) { - if (!settings.getAllowReGroupCommand()) { + if (!settings.is(ALLOW_REGROUP)) { ChatBlock.sendMessage(player, RED + lang("insufficient.permissions", player)); return; } @@ -59,7 +60,7 @@ private void processRegroup(Player player, ClanPlayer cp, Clan clan, Location lo @Conditions("rank:name=REGROUP_HOME") @Description("{@@command.description.regroup.home}") public void regroupHome(Player player, ClanPlayer cp, Clan clan) { - if (!settings.getAllowReGroupCommand()) { + if (!settings.is(ALLOW_REGROUP)) { ChatBlock.sendMessage(player, RED + lang("insufficient.permissions", player)); return; } @@ -94,7 +95,7 @@ public void teleport(Player player, Clan clan, ClanPlayer cp) { @Conditions("rank:name=HOME_SET") @Description("{@@command.description.home.clear}") public void clear(Player player, Clan clan) { - if (settings.isHomebaseSetOnce() && clan.getHomeLocation() != null && + if (settings.is(CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE) && clan.getHomeLocation() != null && !permissions.has(player, "simpleclans.mod.home")) { ChatBlock.sendMessage(player, RED + lang("home.base.only.once", player)); return; @@ -109,12 +110,12 @@ public void clear(Player player, Clan clan) { @CommandPermission("simpleclans.leader.home-set") @Description("{@@command.description.home.set}") public void set(Player player, ClanPlayer cp, Clan clan) { - if (settings.isHomebaseSetOnce() && clan.getHomeLocation() != null && + if (settings.is(CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE) && clan.getHomeLocation() != null && !permissions.has(player, "simpleclans.mod.home")) { ChatBlock.sendMessage(player, RED + lang("home.base.only.once", player)); return; } - if (settings.isSetBaseOnlyInLand()) { + if (settings.is(LAND_SET_BASE_ONLY_IN_LAND)) { if (!protection.isOwner(player, player.getLocation())) { ChatBlock.sendMessageKey(player, "you.can.only.set.base.in.your.land"); return; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LandCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LandCommand.java index d16f72304..d2ce7596f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LandCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LandCommand.java @@ -14,6 +14,8 @@ import java.util.Set; import java.util.stream.Collectors; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.LAND_EDIT_ALL_LANDS; + @CommandAlias("%clan") @Subcommand("%land") @Conditions("%basic_conditions|land_sharing|own_land") @@ -27,7 +29,7 @@ public class LandCommand extends BaseCommand { private Set getLands(ClanPlayer cp, Location location) { Player player = Objects.requireNonNull(cp.toPlayer()); - if (settings.isEditAllLands()) { + if (settings.is(LAND_EDIT_ALL_LANDS)) { return protection.getLands(player, location); } else { return protection.getLandsAt(location).stream().filter(l -> l.getOwners().contains(player.getUniqueId())) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LeaderCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LeaderCommands.java index bc6f2ffa1..ad22ab64b 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LeaderCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/LeaderCommands.java @@ -13,6 +13,7 @@ import java.util.Objects; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.AQUA; import static org.bukkit.ChatColor.RED; @@ -48,7 +49,7 @@ public void demote(Player player, ChatBlock.sendMessage(player, RED + lang("player.is.not.a.leader.of.your.clan", player)); return; } - if (clan.getLeaders().size() > 2 && settings.isConfirmationForDemote()) { + if (clan.getLeaders().size() > 2 && settings.is(CLAN_CONFIRMATION_FOR_DEMOTE)) { requestManager.addDemoteRequest(cp, otherCp.getName(), clan); ChatBlock.sendMessage(player, AQUA + lang("demotion.vote.has.been.requested.from.all.leaders", player)); @@ -80,7 +81,7 @@ public void promote(Player player, ChatBlock.sendMessage(player, RED + lang("the.player.is.already.a.leader", player)); return; } - if (settings.isConfirmationForPromote() && clan.getLeaders().size() > 1) { + if (settings.is(CLAN_CONFIRMATION_FOR_PROMOTE) && clan.getLeaders().size() > 1) { requestManager.addPromoteRequest(cp, otherPl.getName(), clan); ChatBlock.sendMessage(player, AQUA + lang("promotion.vote.has.been.requested.from.all.leaders", player)); @@ -113,12 +114,12 @@ public void verify(Player player, Clan clan) { ChatBlock.sendMessageKey(player, "your.clan.already.verified"); return; } - if (!settings.isePurchaseVerification()) { + if (!settings.is(ECONOMY_PURCHASE_CLAN_VERIFY)) { ChatBlock.sendMessageKey(player, "staff.member.verify.clan"); return; } - int minToVerify = settings.getMinToVerify(); - if (minToVerify > clan.getAllMembers().size()) { + int minToVerify = settings.getInt(CLAN_MIN_TO_VERIFY); + if (minToVerify > clan.getMembers().size()) { ChatBlock.sendMessage(player, lang("your.clan.must.have.members.to.verify", player, minToVerify)); return; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ChatSubcommandsCompletion.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ChatSubcommandsCompletion.java deleted file mode 100644 index 292fad6dd..000000000 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ChatSubcommandsCompletion.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.sacredlabyrinth.phaed.simpleclans.commands.completions; - -import co.aikar.commands.BukkitCommandCompletionContext; -import co.aikar.commands.InvalidCommandArgument; -import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; -import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.util.*; - -import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; - -@SuppressWarnings("unused") -public class ChatSubcommandsCompletion extends AbstractSyncCompletion { - - public ChatSubcommandsCompletion(@NotNull SimpleClans plugin) { - super(plugin); - } - - @Override - public @NotNull String getId() { - return "chat_subcommands"; - } - - @Override - public Collection getCompletions(BukkitCommandCompletionContext context) throws InvalidCommandArgument { - Player player = context.getPlayer(); - if (player == null) { - return Collections.emptyList(); - } - String leave = lang("leave", player); - List subcommands = new ArrayList<>(Arrays.asList(lang("join", player), leave, lang("mute", - player))); - ClanPlayer cp = clanManager.getAnyClanPlayer(player.getUniqueId()); - if (cp != null) { - if (cp.getChannel() == ClanPlayer.Channel.NONE) { - subcommands.remove(leave); - } - } - - return subcommands; - } -} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ClanMembersCompletion.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ClanMembersCompletion.java index 059232e73..8e60e8da7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ClanMembersCompletion.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/completions/ClanMembersCompletion.java @@ -23,7 +23,7 @@ public Collection getCompletions(BukkitCommandCompletionContext c) throw if (player != null) { Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId()); if (clan != null) { - return clan.getAllMembers().stream().map(ClanPlayer::getName).collect(Collectors.toList()); + return clan.getMembers().stream().map(ClanPlayer::getName).collect(Collectors.toList()); } } return Collections.emptyList(); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChangeFeeCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChangeFeeCondition.java index 54499a40f..8753ddebe 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChangeFeeCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChangeFeeCondition.java @@ -11,6 +11,7 @@ import static java.time.temporal.ChronoUnit.MINUTES; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; @SuppressWarnings("unused") public class CanChangeFeeCondition extends AbstractCommandCondition { @@ -26,7 +27,7 @@ public void validateCondition(ConditionContext context) thr LocalDateTime now = LocalDateTime.now(); LocalDateTime collectTime = getCollectTime(); long interval = now.until(collectTime, MINUTES); - if (interval <= settingsManager.geteMemberFeeLastMinuteChangeInterval() * HOUR_IN_MINUTES) { + if (interval <= settingsManager.getInt(ECONOMY_MEMBER_FEE_LAST_MINUTE_CHANGE_INTERVAL) * HOUR_IN_MINUTES) { BukkitCommandIssuer issuer = context.getIssuer(); String error = lang("cannot.change.member.fee.now", issuer); if (interval <= 60) { @@ -40,8 +41,8 @@ public void validateCondition(ConditionContext context) thr private LocalDateTime getCollectTime() { LocalDateTime now = LocalDateTime.now(); - LocalDateTime collectTime = now.withHour(settingsManager.getTasksCollectFeeHour()) - .withMinute(settingsManager.getTasksCollectFeeMinute()); + LocalDateTime collectTime = now.withHour(settingsManager.getInt(TASKS_COLLECT_FEE_HOUR)) + .withMinute(settingsManager.getInt(TASKS_COLLECT_FEE_MINUTE)); if (collectTime.isBefore(now)) { collectTime = collectTime.plusDays(1); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChatCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChatCondition.java new file mode 100644 index 000000000..9b2a121dc --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanChatCondition.java @@ -0,0 +1,31 @@ +package net.sacredlabyrinth.phaed.simpleclans.commands.conditions; + +import co.aikar.commands.BukkitCommandIssuer; +import co.aikar.commands.ConditionContext; +import co.aikar.commands.ConditionFailedException; +import co.aikar.commands.InvalidCommandArgument; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import org.jetbrains.annotations.NotNull; + +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField; + +public class CanChatCondition extends AbstractCommandCondition { + public CanChatCondition(@NotNull SimpleClans plugin) { + super(plugin); + } + + @Override + public void validateCondition(ConditionContext context) throws InvalidCommandArgument { + String type = context.getConfigValue("type", (String) null).toUpperCase(); + ConfigField chatEnabled = ConfigField.valueOf(type + "CHAT_ENABLE"); + if (!settingsManager.is(chatEnabled)) { + throw new ConditionFailedException(lang(type.toLowerCase() + ".chat.disabled", context.getIssuer())); + } + } + + @Override + public @NotNull String getId() { + return "can_chat"; + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanWarTargetCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanWarTargetCondition.java index 1822e54b1..57ff4518d 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanWarTargetCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/CanWarTargetCondition.java @@ -7,6 +7,8 @@ import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.WAR_MAX_MEMBERS_DIFFERENCE; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.WAR_START_REQUEST_ENABLED; public class CanWarTargetCondition extends AbstractParameterCondition { public CanWarTargetCondition(@NotNull SimpleClans plugin) { @@ -32,8 +34,8 @@ public void validateCondition(ConditionContext context, Buk throw new ConditionFailedException(lang("clans.already.at.war", issuer)); } - boolean isWarRequestEnabled = settingsManager.isWarRequestEnabled(); - int maxDifference = settingsManager.getMembersOnlineMaxDifference(); + boolean isWarRequestEnabled = settingsManager.is(WAR_START_REQUEST_ENABLED); + int maxDifference = settingsManager.getInt(WAR_MAX_MEMBERS_DIFFERENCE); if (!isWarRequestEnabled && maxDifference >= 0) { int difference = Math.abs(issuerClan.getOnlineMembers().size() - targetClan.getOnlineMembers().size()); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/LandSharingCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/LandSharingCondition.java index 7a4eae5ee..34a41f879 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/LandSharingCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/LandSharingCondition.java @@ -1,10 +1,14 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.conditions; -import co.aikar.commands.*; +import co.aikar.commands.BukkitCommandIssuer; +import co.aikar.commands.ConditionContext; +import co.aikar.commands.ConditionFailedException; +import co.aikar.commands.InvalidCommandArgument; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.LAND_SHARING; @SuppressWarnings("unused") public class LandSharingCondition extends AbstractCommandCondition { @@ -15,7 +19,7 @@ public LandSharingCondition(@NotNull SimpleClans plugin) { @Override public void validateCondition(ConditionContext context) throws InvalidCommandArgument { - if (!settingsManager.isLandSharing()) { + if (!settingsManager.is(LAND_SHARING)) { throw new ConditionFailedException(lang("land.sharing.disabled", context.getIssuer())); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MemberFeeEnabledCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MemberFeeEnabledCondition.java index beb247f2a..01b6814fd 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MemberFeeEnabledCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MemberFeeEnabledCondition.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_MEMBER_FEE_ENABLED; public class MemberFeeEnabledCondition extends AbstractCommandCondition { public MemberFeeEnabledCondition(@NotNull SimpleClans plugin) { @@ -17,7 +18,7 @@ public MemberFeeEnabledCondition(@NotNull SimpleClans plugin) { @Override public void validateCondition(ConditionContext context) throws InvalidCommandArgument { - if (!settingsManager.isMemberFee()) { + if (!settingsManager.is(ECONOMY_MEMBER_FEE_ENABLED)) { throw new ConditionFailedException(ChatColor.RED + lang("disabled.command", context.getIssuer().getIssuer())); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToAllyCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToAllyCondition.java index c426fa49f..b873ca552 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToAllyCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToAllyCondition.java @@ -6,10 +6,10 @@ import co.aikar.commands.InvalidCommandArgument; import net.sacredlabyrinth.phaed.simpleclans.Clan; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; -import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_MIN_SIZE_TO_SET_ALLY; import static org.bukkit.ChatColor.RED; @SuppressWarnings("unused") @@ -21,9 +21,9 @@ public MinimumToAllyCondition(@NotNull SimpleClans plugin) { @Override public void validateCondition(ConditionContext context) throws InvalidCommandArgument { Clan clan = Conditions.assertClanMember(clanManager, context.getIssuer()); - if (clan.getSize() < settingsManager.getClanMinSizeToAlly()) { + if (clan.getSize() < settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_ALLY)) { throw new ConditionFailedException(RED + - lang("minimum.to.make.alliance", context.getIssuer(), settingsManager.getClanMinSizeToAlly())); + lang("minimum.to.make.alliance", context.getIssuer(), settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_ALLY))); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToRivalCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToRivalCondition.java index 35e96abdf..831a92d8c 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToRivalCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/MinimumToRivalCondition.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_MIN_SIZE_TO_SET_RIVAL; import static org.bukkit.ChatColor.RED; @SuppressWarnings("unused") @@ -21,9 +22,9 @@ public MinimumToRivalCondition(@NotNull SimpleClans plugin) { public void validateCondition(ConditionContext context) throws InvalidCommandArgument { BukkitCommandIssuer issuer = context.getIssuer(); Clan clan = Conditions.assertClanMember(clanManager, issuer); - if (clan.getSize() < settingsManager.getClanMinSizeToRival()) { + if (clan.getSize() < settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_RIVAL)) { throw new ConditionFailedException(RED + lang("min.players.rivalries", issuer, - settingsManager.getClanMinSizeToRival())); + settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_RIVAL))); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotBlacklistedCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotBlacklistedCondition.java index 5dd12a843..8d69b8c49 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotBlacklistedCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotBlacklistedCondition.java @@ -9,6 +9,8 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.BLACKLISTED_WORLDS; + @SuppressWarnings("unused") public class NotBlacklistedCondition extends AbstractCommandCondition { @@ -22,7 +24,7 @@ public void validateCondition(ConditionContext context) thr if (player != null) { World world = player.getLocation().getWorld(); if (world != null) { - if (settingsManager.isBlacklistedWorld(world.getName())) { + if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(world.getName())) { throw new ConditionFailedException(); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Alliances.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Alliances.java index 0173c906f..31e79e265 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Alliances.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Alliances.java @@ -10,6 +10,8 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SERVER_NAME; import static org.bukkit.ChatColor.AQUA; import static org.bukkit.ChatColor.DARK_GRAY; @@ -38,9 +40,9 @@ public void send() { private void sendHeader() { ChatBlock.sendBlank(sender); - ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " + + ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " + lang("alliances", sender) + " " + headColor + - Helper.generatePageSeparator(sm.getPageSep())); + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); chatBlock.setAlignment("l", "l"); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanCoords.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanCoords.java index e051f6ded..60454c074 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanCoords.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanCoords.java @@ -12,6 +12,7 @@ import java.util.TreeMap; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.AQUA; import static org.bukkit.ChatColor.WHITE; @@ -32,8 +33,8 @@ private void populateRows() { Player p = cpm.toPlayer(); if (p != null) { - String name = (cpm.isLeader() ? sm.getPageLeaderColor() : (cpm.isTrusted() ? - sm.getPageTrustedColor() : sm.getPageUnTrustedColor())) + cpm.getName(); + String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ? + sm.getColored(PAGE_TRUSTED_COLOR) : sm.getColored(PAGE_UNTRUSTED_COLOR))) + cpm.getName(); Location loc = p.getLocation(); int distance = (int) Math.ceil(loc.toVector().distance(player.getLocation().toVector())); String coords = loc.getBlockX() + " " + loc.getBlockY() + " " + loc.getBlockZ(); @@ -57,8 +58,8 @@ private void configureAndSendHeader() { chatBlock.setAlignment("l", "c", "c", "c"); ChatBlock.sendBlank(player); - ChatBlock.saySingle(player, sm.getPageClanNameColor() + clan.getName() + subColor + " " + - lang("coords", player) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(player, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " + + lang("coords", player) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(player); chatBlock.addRow(" " + headColor + lang("name", player), lang("distance", player), diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanList.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanList.java index 144e8d25b..4835d8d8e 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanList.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanList.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType.ORDINAL; import static org.bukkit.ChatColor.*; @@ -52,7 +53,7 @@ public void send() { @Nullable String order) { boolean ascending = order == null || lang("list.order.asc").equalsIgnoreCase(order); if (type == null) { - type = sm.getListDefaultOrderBy(); + type = sm.getString(LIST_DEFAULT_ORDER_BY); } if (type.equalsIgnoreCase(lang("list.type.size"))) { return new RankingNumberResolver<>(clans, Clan::getSize, order != null && ascending, ORDINAL); @@ -73,15 +74,15 @@ public void send() { @NotNull private List getListableClans() { List clans = plugin.getClanManager().getClans(); - clans = clans.stream().filter(clan -> clan.isVerified() || sm.isShowUnverifiedOnList()) + clans = clans.stream().filter(clan -> clan.isVerified() || sm.is(SHOW_UNVERIFIED_ON_LIST)) .collect(Collectors.toList()); return clans; } private void sendHeader(List clans) { ChatBlock.sendBlank(sender); - ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " + lang("clans.lower", sender) - + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " + lang("clans.lower", sender) + + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); ChatBlock.sendMessage(sender, headColor + lang("total.clans", sender) + " " + subColor + clans.size()); ChatBlock.sendBlank(sender); @@ -91,12 +92,11 @@ private void sendHeader(List clans) { lang("kdr", sender), lang("members", sender)); } - @SuppressWarnings("deprecation") private void addLine(RankingNumberResolver> ranking, Clan clan) { - String tag = sm.getClanChatBracketColor() + sm.getClanChatTagBracketLeft() - + sm.getTagDefaultColor() + clan.getColorTag() + sm.getClanChatBracketColor() - + sm.getClanChatTagBracketRight(); - String name = (clan.isVerified() ? sm.getPageClanNameColor() : GRAY) + clan.getName(); + String tag = sm.getColored(CLANCHAT_BRACKET_COLOR) + sm.getString(CLANCHAT_BRACKET_LEFT) + + sm.getColored(TAG_DEFAULT_COLOR) + clan.getColorTag() + sm.getColored(CLANCHAT_BRACKET_COLOR) + + sm.getString(CLANCHAT_BRACKET_RIGHT); + String name = (clan.isVerified() ? sm.getColored(PAGE_CLAN_NAME_COLOR) : GRAY) + clan.getName(); String fullname = tag + " " + name; String size = WHITE + "" + clan.getSize(); String kdr = clan.isVerified() ? YELLOW + "" + KDRFormat.format(clan.getTotalKDR()) : ""; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanProfile.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanProfile.java index 8ad5eb0fb..280cf86cf 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanProfile.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanProfile.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_LEADER_COLOR; public class ClanProfile extends Sendable { @@ -25,7 +26,7 @@ public void send() { .replace("%clan_color_tag%", clan.getColorTag()) .replace("%clan_description%", getDescription()) .replace("%clan_status%", Helper.getFormattedClanStatus(clan, sender)) - .replace("%clan_leaders%", clan.getLeadersString(sm.getPageLeaderColor(), subColor + ", ")) + .replace("%clan_leaders%", clan.getLeadersString(sm.getColored(PAGE_LEADER_COLOR), subColor + ", ")) .replace("%clan_online_count%", String.valueOf(VanishUtils.getNonVanished(sender, clan).size())) .replace("%clan_size%", String.valueOf(clan.getSize())) .replace("%clan_kdr%", KDRFormat.format(clan.getTotalKDR())) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanRoster.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanRoster.java index 58cffc71b..1f874d95d 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanRoster.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanRoster.java @@ -1,6 +1,7 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.data; import net.sacredlabyrinth.phaed.simpleclans.*; +import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -9,6 +10,7 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; public class ClanRoster extends Sendable { @@ -35,10 +37,10 @@ private void addMembers() { for (ClanPlayer cp : members) { Player p = cp.toPlayer(); - String name = (cp.isTrusted() ? sm.getPageTrustedColor() : sm.getPageUnTrustedColor()) + cp.getName(); + String name = (cp.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) : sm.getColored(PAGE_UNTRUSTED_COLOR)) + cp.getName(); String lastSeen = p != null && p.isOnline() && !VanishUtils.isVanished(sender, p) ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender); - chatBlock.addRow(" " + name, YELLOW + Helper.parseColors(cp.getRankDisplayName()) + RESET, lastSeen); + chatBlock.addRow(" " + name, YELLOW + ChatUtils.parseColors(cp.getRankDisplayName()) + RESET, lastSeen); } } @@ -48,22 +50,22 @@ private void addLeaders() { for (ClanPlayer cp : leaders) { Player p = cp.toPlayer(); - String name = sm.getPageLeaderColor() + cp.getName(); + String name = sm.getColored(PAGE_LEADER_COLOR) + cp.getName(); String lastSeen = p != null && p.isOnline() && !VanishUtils.isVanished(sender, p) ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender); - chatBlock.addRow(" " + name, YELLOW + Helper.parseColors(cp.getRankDisplayName()) + RESET, lastSeen); + chatBlock.addRow(" " + name, YELLOW + ChatUtils.parseColors(cp.getRankDisplayName()) + RESET, lastSeen); } } private void configureAndSendHeader() { ChatBlock.sendBlank(sender); - ChatBlock.saySingle(sender, sm.getPageClanNameColor() + clan.getName() + subColor + " " + - lang("roster", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(sender, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " + + lang("roster", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); - ChatBlock.sendMessage(sender, headColor + lang("legend", sender) + " " + sm.getPageLeaderColor() + - lang("leader", sender) + headColor + ", " + sm.getPageTrustedColor() + lang("trusted", sender) + - headColor + ", " + sm.getPageUnTrustedColor() + lang("untrusted", sender)); + ChatBlock.sendMessage(sender, headColor + lang("legend", sender) + " " + sm.getColored(PAGE_LEADER_COLOR) + + lang("leader", sender) + headColor + ", " + sm.getColored(PAGE_TRUSTED_COLOR) + lang("trusted", sender) + + headColor + ", " + sm.getColored(PAGE_UNTRUSTED_COLOR) + lang("untrusted", sender)); ChatBlock.sendBlank(sender); chatBlock.setFlexibility(false, true, false, true); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanStats.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanStats.java index 098e937e5..c46c4f6b7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanStats.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/ClanStats.java @@ -9,6 +9,7 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; public class ClanStats extends Sendable { @@ -36,15 +37,15 @@ public void send() { } private void configureAndSendHeader() { - ChatBlock.saySingle(sender, sm.getPageClanNameColor() + clan.getName() + subColor + " " + - lang("stats", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(sender, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " + + lang("stats", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); ChatBlock.sendMessage(sender, headColor + lang("kdr", sender) + " = " + subColor + lang("kill.death.ratio", sender)); ChatBlock.sendMessage(sender, headColor + lang("weights", sender) + " = " + lang("rival", sender) - + ": " + subColor + sm.getKwRival() + headColor + " " + lang("neutral", sender) + ": " + subColor + - sm.getKwNeutral() + headColor + " " + lang("civilian", sender) + ": " + subColor + - sm.getKwCivilian()); + + ": " + subColor + sm.getDouble(KILL_WEIGHTS_RIVAL) + headColor + " " + lang("neutral", sender) + ": " + subColor + + sm.getDouble(KILL_WEIGHTS_NEUTRAL) + headColor + " " + lang("civilian", sender) + ": " + subColor + + sm.getDouble(KILL_WEIGHTS_CIVILIAN)); ChatBlock.sendBlank(sender); chatBlock.setFlexibility(true, false, false, false, false, false, false); @@ -56,8 +57,8 @@ private void configureAndSendHeader() { private void addRows(List clanPlayers) { for (ClanPlayer cpm : clanPlayers) { - String name = (cpm.isLeader() ? sm.getPageLeaderColor() : (cpm.isTrusted() ? sm.getPageTrustedColor() : - sm.getPageUnTrustedColor())) + cpm.getName(); + String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) : + sm.getColored(PAGE_UNTRUSTED_COLOR)) + cpm.getName()); String rival = NumberFormat.getInstance().format(cpm.getRivalKills()); String neutral = NumberFormat.getInstance().format(cpm.getNeutralKills()); String civilian = NumberFormat.getInstance().format(cpm.getCivilianKills()); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Kills.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Kills.java index b818e5a98..e1543b325 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Kills.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Kills.java @@ -11,6 +11,8 @@ import java.util.Map; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_CLAN_NAME_COLOR; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR; public class Kills extends Sendable { @@ -53,9 +55,9 @@ private void configureAndSendHeader() { chatBlock.setFlexibility(true, false); chatBlock.setAlignment("l", "c"); chatBlock.addRow(" " + headColor + lang("victim", player), lang("killcount", player)); - ChatBlock.saySingle(player, sm.getPageClanNameColor() + polled + subColor + ChatBlock.saySingle(player, sm.getColored(PAGE_CLAN_NAME_COLOR) + polled + subColor + " " + lang("kills", player) + " " + headColor + - Helper.generatePageSeparator(sm.getPageSep())); + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(player); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Leaderboard.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Leaderboard.java index 68ce745fb..e1e37a759 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Leaderboard.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Leaderboard.java @@ -13,6 +13,7 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; public class Leaderboard extends Sendable { @@ -38,8 +39,8 @@ private void addLines() { for (ClanPlayer cp : clanPlayers) { boolean online = cp.toPlayer() != null; - String name = (cp.isLeader() ? sm.getPageLeaderColor() : (cp.isTrusted() ? sm.getPageTrustedColor() : - sm.getPageUnTrustedColor())) + cp.getName(); + String name = (cp.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cp.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) : + sm.getColored(PAGE_UNTRUSTED_COLOR))) + cp.getName(); String lastSeen = online ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender); String clanTag = WHITE + lang("free.agent", sender); @@ -55,8 +56,8 @@ private void addLines() { private void configureAndSendHeader() { ChatBlock.sendBlank(sender); - ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " + lang("leaderboard.command", sender) - + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " + lang("leaderboard.command", sender) + + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); ChatBlock.sendMessage(sender, headColor + lang("total.clan.players.0", sender, subColor + clanPlayers.size())); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Lookup.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Lookup.java index 141aee078..377f06de3 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Lookup.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Lookup.java @@ -11,6 +11,7 @@ import java.util.UUID; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; public class Lookup extends Sendable { @@ -51,7 +52,7 @@ public void send() { .replace("%player_last_seen%", target.getLastSeenString(sender)) .replace("%player_past_clans%", target.getPastClansString(headColor + ", ")) .replace("%player_inactive_days%", String.valueOf(target.getInactiveDays())) - .replace("%player_max_inactive_days%", Helper.formatMaxInactiveDays(sm.getPurgePlayers())) + .replace("%player_max_inactive_days%", Helper.formatMaxInactiveDays(sm.getInt(PURGE_INACTIVE_PLAYER_DAYS))) .replace("%kill_type_line%", getKillTypeLine()); sender.sendMessage(lookup); } else { @@ -81,15 +82,15 @@ private String getPlayerStatus() { return lang("free.agent", sender); } if (target.isLeader()) { - return sm.getPageLeaderColor() + lang("leader", sender); + return sm.getColored(PAGE_LEADER_COLOR) + lang("leader", sender); } if (target.isTrusted()) { - return sm.getPageTrustedColor() + lang("trusted", sender); + return sm.getColored(PAGE_TRUSTED_COLOR) + lang("trusted", sender); } if (!target.getRankId().isEmpty()) { - return sm.getPageTrustedColor() + lang("in.rank", sender); + return sm.getColored(PAGE_TRUSTED_COLOR) + lang("in.rank", sender); } - return sm.getPageUnTrustedColor() + lang("untrusted", sender); + return sm.getColored(PAGE_UNTRUSTED_COLOR) + lang("untrusted", sender); } @NotNull diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/MostKilled.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/MostKilled.java index aef67575d..fd0b02e6f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/MostKilled.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/MostKilled.java @@ -10,6 +10,8 @@ import java.util.Map; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SERVER_NAME; import static org.bukkit.ChatColor.*; public class MostKilled extends Sendable { @@ -64,8 +66,8 @@ private void sendHeader() { chatBlock.addRow(" " + headColor + lang("victim", player), headColor + lang("killcount", player), headColor + lang("attacker", player)); - ChatBlock.saySingle(player, sm.getServerName() + subColor + " " + lang("mostkilled", - player) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(player, sm.getColored(SERVER_NAME) + subColor + " " + lang("mostkilled", + player) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(player); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Rivalries.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Rivalries.java index ff19d7811..0f621cfb9 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Rivalries.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Rivalries.java @@ -10,6 +10,8 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SERVER_NAME; import static org.bukkit.ChatColor.*; public class Rivalries extends Sendable { @@ -37,8 +39,8 @@ public void send() { private void sendHeader() { ChatBlock.sendBlank(sender); - ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " + - lang("rivalries", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " + + lang("rivalries", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); ChatBlock.sendMessage(sender, headColor + lang("legend", sender) + DARK_RED + " [" + lang("war", sender) + "]"); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Sendable.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Sendable.java index 0c2de8061..e923745b0 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Sendable.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Sendable.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.NotNull; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public abstract class Sendable { @@ -25,19 +26,19 @@ public Sendable(@NotNull SimpleClans plugin, @NotNull CommandSender sender) { sm = plugin.getSettingsManager(); cm = plugin.getClanManager(); this.sender = sender; - headColor = sm.getPageHeadingsColor(); - subColor = sm.getPageSubTitleColor(); + headColor = sm.getColored(PAGE_HEADINGS_COLOR); + subColor = sm.getColored(PAGE_SUBTITLE_COLOR); } protected void sendBlock() { SettingsManager sm = plugin.getSettingsManager(); - boolean more = chatBlock.sendBlock(sender, sm.getPageSize()); + boolean more = chatBlock.sendBlock(sender, sm.getInt(PAGE_SIZE)); if (more) { plugin.getStorageManager().addChatBlock(sender, chatBlock); ChatBlock.sendBlank(sender); - ChatBlock.sendMessage(sender, sm.getPageHeadingsColor() + lang("view.next.page", sender, - sm.getCommandMore())); + ChatBlock.sendMessage(sender, sm.getColored(PAGE_HEADINGS_COLOR) + lang("view.next.page", sender, + sm.getString(COMMANDS_MORE))); } ChatBlock.sendBlank(sender); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Vitals.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Vitals.java index 84cf84913..47e2581f3 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Vitals.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/data/Vitals.java @@ -9,6 +9,7 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; public class Vitals extends Sendable { @@ -38,8 +39,8 @@ public void send() { private void configureAndSendHeader() { ChatBlock.sendBlank(sender); - ChatBlock.saySingle(sender, sm.getPageClanNameColor() + clan.getName() + subColor + " " + - lang("vitals", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep())); + ChatBlock.saySingle(sender, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " + + lang("vitals", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR))); ChatBlock.sendBlank(sender); ChatBlock.sendMessage(sender, headColor + lang("weapons", sender) + ": " + lang("0.s.sword.1.2.b.bow.3.4.a.arrow", sender, WHITE, DARK_GRAY, WHITE, DARK_GRAY, WHITE)); @@ -63,8 +64,8 @@ private void addRows(Collection players){ Player p = cpm.toPlayer(); if (p != null) { - String name = (cpm.isLeader() ? sm.getPageLeaderColor() : (cpm.isTrusted() ? sm.getPageTrustedColor() - : sm.getPageUnTrustedColor())) + cpm.getName(); + String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) + : sm.getColored(PAGE_UNTRUSTED_COLOR))) + cpm.getName(); String health = cm.getHealthString(p.getHealth()); String hunger = cm.getHungerString(p.getFoodLevel()); String armor = cm.getArmorString(p.getInventory()); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java index 6d90ec1d4..cc7d2c42c 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java @@ -29,6 +29,7 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanNamePrompt.NAME_KEY; import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt.TAG_KEY; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static org.bukkit.ChatColor.*; @CommandAlias("%clan") @@ -51,7 +52,7 @@ public class GeneralCommands extends BaseCommand { @CommandAlias("%clan") @HelpSearchTags("menu gui interface ui") public void main(CommandSender sender) { - if (sender instanceof Player && settings.isEnableGUI()) { + if (sender instanceof Player && settings.is(ENABLE_GUI)) { InventoryDrawer.open(new MainFrame((Player) sender)); } else { help(sender, new CommandHelp(getCurrentCommandManager(), @@ -157,7 +158,7 @@ public void autoPersonalFf(Player player, ClanPlayer cp) { @CommandPermission("simpleclans.vip.resetkdr") @Description("{@@command.description.resetkdr}") public void resetKdr(Player player, ClanPlayer cp) { - if (!settings.isAllowResetKdr()) { + if (!settings.is(ALLOW_RESET_KDR)) { ChatBlock.sendMessage(player, RED + lang("disabled.command", player)); return; } @@ -199,12 +200,12 @@ public void more(Player player) { return; } - chatBlock.sendBlock(player, settings.getPageSize()); + chatBlock.sendBlock(player, settings.getInt(PAGE_SIZE)); if (chatBlock.size() > 0) { ChatBlock.sendBlank(player); - ChatBlock.sendMessage(player, settings.getPageHeadingsColor() + lang("view.next.page", player, - settings.getCommandMore())); + ChatBlock.sendMessage(player, settings.getColored(PAGE_HEADINGS_COLOR) + lang("view.next.page", player, + settings.getString(COMMANDS_MORE))); } ChatBlock.sendBlank(player); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java index 52bda435d..1720b2db4 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/staff/StaffCommands.java @@ -8,10 +8,7 @@ import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput; import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent; import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource; -import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; -import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager; -import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; -import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.*; import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController; import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator; @@ -26,6 +23,7 @@ import java.util.UUID; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.GLOBAL_FRIENDLY_FIRE; import static org.bukkit.ChatColor.AQUA; import static org.bukkit.ChatColor.RED; @@ -194,10 +192,10 @@ public void unban(CommandSender sender, @Name("player") OfflinePlayer player) { @CommandPermission("simpleclans.mod.globalff") @Description("{@@command.description.globalff.allow}") public void allowGlobalFf(CommandSender sender) { - if (settings.isGlobalff()) { + if (settings.is(GLOBAL_FRIENDLY_FIRE)) { ChatBlock.sendMessage(sender, AQUA + lang("global.friendly.fire.is.already.being.allowed", sender)); } else { - settings.setGlobalff(true); + settings.set(GLOBAL_FRIENDLY_FIRE, true); ChatBlock.sendMessage(sender, AQUA + lang("global.friendly.fire.is.set.to.allowed", sender)); } } @@ -206,11 +204,11 @@ public void allowGlobalFf(CommandSender sender) { @CommandPermission("simpleclans.mod.globalff") @Description("{@@command.description.globalff.auto}") public void autoGlobalFf(CommandSender sender) { - if (!settings.isGlobalff()) { + if (!settings.is(GLOBAL_FRIENDLY_FIRE)) { ChatBlock.sendMessage(sender, AQUA + lang("global.friendy.fire.is.already.being.managed.by.each.clan", sender)); } else { - settings.setGlobalff(false); + settings.set(GLOBAL_FRIENDLY_FIRE, false); ChatBlock.sendMessage(sender, AQUA + lang("global.friendy.fire.is.now.managed.by.each.clan", sender)); } @@ -280,13 +278,14 @@ public void disband(CommandSender sender, @Name("clan") ClanInput clan) { @CommandPermission("simpleclans.admin.promote") @Description("{@@command.description.admin.promote}") public void promote(CommandSender sender, @Conditions("online|clan_member") @Name("player") ClanPlayerInput promote) { - Player promotePl = Objects.requireNonNull(promote.getClanPlayer().toPlayer()); + ClanPlayer clanPlayer = promote.getClanPlayer(); + Player promotePl = Objects.requireNonNull(clanPlayer.toPlayer()); if (!permissions.has(promotePl, "simpleclans.leader.promotable")) { ChatBlock.sendMessage(sender, RED + lang("the.player.does.not.have.the.permissions.to.lead.a.clan", sender)); return; } - Clan clan = Objects.requireNonNull(promote.getClanPlayer().getClan()); + Clan clan = Objects.requireNonNull(clanPlayer.getClan()); if (clan.isLeader(promotePl)) { ChatBlock.sendMessage(sender, RED + lang("the.player.is.already.a.leader", sender)); return; @@ -304,12 +303,17 @@ public void promote(CommandSender sender, @Conditions("online|clan_member") @Nam public void demote(CommandSender sender, @Conditions("clan_member") @Name("leader") ClanPlayerInput other) { ClanPlayer otherCp = other.getClanPlayer(); Clan clan = Objects.requireNonNull(otherCp.getClan()); + + if (!otherCp.isLeader()) { + ChatBlock.sendMessage(sender, RED + lang("player.is.not.a.leader", sender)); + return; + } + if (clan.getLeaders().size() == 1 && !clan.isPermanent()) { ChatBlock.sendMessage(sender, RED + lang("you.cannot.demote.the.last.leader", sender)); return; } clan.demote(otherCp.getUniqueId()); - clan.addBb(sender.getName(), AQUA + lang("demoted.back.to.member", otherCp.getName())); ChatBlock.sendMessage(sender, AQUA + lang("player.successfully.demoted", sender)); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/CreateClanNamePrompt.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/CreateClanNamePrompt.java index 53ffdc43e..708481af5 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/CreateClanNamePrompt.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/CreateClanNamePrompt.java @@ -5,9 +5,7 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.events.PreCreateClanEvent; import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; - import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; import org.bukkit.conversations.Prompt; import org.bukkit.conversations.StringPrompt; @@ -17,6 +15,9 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt.TAG_KEY; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static org.bukkit.ChatColor.AQUA; +import static org.bukkit.ChatColor.RED; public class CreateClanNamePrompt extends StringPrompt { public static final String NAME_KEY = "name"; @@ -65,16 +66,16 @@ private void processClanCreation(@NotNull SimpleClans plugin, @NotNull Player pl plugin.getClanManager().createClan(player, tag, name); Clan clan = plugin.getClanManager().getClan(tag); - clan.addBb(player.getName(), ChatColor.AQUA + + clan.addBb(player.getName(), AQUA + lang("clan.created", name)); plugin.getStorageManager().updateClan(clan); - if (plugin.getSettingsManager().isRequireVerification()) { - boolean verified = !plugin.getSettingsManager().isRequireVerification() + if (plugin.getSettingsManager().is(REQUIRE_VERIFICATION)) { + boolean verified = !plugin.getSettingsManager().is(REQUIRE_VERIFICATION) || plugin.getPermissionsManager().has(player, "simpleclans.mod.verify"); if (!verified) { - ChatBlock.sendMessage(player, ChatColor.AQUA + + ChatBlock.sendMessage(player, AQUA + lang("get.your.clan.verified.to.access.advanced.features", player)); } } @@ -85,19 +86,19 @@ private void processClanCreation(@NotNull SimpleClans plugin, @NotNull Player pl private Prompt validateName(@NotNull SimpleClans plugin, @NotNull Player player, @NotNull String input) { boolean bypass = plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass"); if (!bypass) { - if (ChatUtils.stripColors(input).length() > plugin.getSettingsManager().getClanMaxLength()) { - return new MessagePromptImpl(ChatColor.RED + + if (ChatUtils.stripColors(input).length() > plugin.getSettingsManager().getInt(CLAN_MAX_LENGTH)) { + return new MessagePromptImpl(RED + lang("your.clan.name.cannot.be.longer.than.characters", player, - plugin.getSettingsManager().getClanMaxLength()), this); + plugin.getSettingsManager().getInt(CLAN_MAX_LENGTH)), this); } - if (ChatUtils.stripColors(input).length() <= plugin.getSettingsManager().getClanMinLength()) { - return new MessagePromptImpl(ChatColor.RED + + if (ChatUtils.stripColors(input).length() <= plugin.getSettingsManager().getInt(CLAN_MIN_LENGTH)) { + return new MessagePromptImpl(RED + lang("your.clan.name.must.be.longer.than.characters", player, - plugin.getSettingsManager().getClanMinLength()), this); + plugin.getSettingsManager().getInt(CLAN_MIN_LENGTH)), this); } } if (input.contains("&")) { - return new MessagePromptImpl(ChatColor.RED + + return new MessagePromptImpl(RED + lang("your.clan.name.cannot.contain.color.codes", player), this); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/ChatEvent.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/ChatEvent.java index 6162d6c65..1c28bb5bb 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/ChatEvent.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/ChatEvent.java @@ -1,21 +1,25 @@ package net.sacredlabyrinth.phaed.simpleclans.events; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** - * * @author RoinujNosde */ public class ChatEvent extends Event implements Cancellable { + /* + * Todo: refactor Type to Channel in 3.0 + */ + private static final HandlerList HANDLER_LIST = new HandlerList(); private String message; private final ClanPlayer sender; @@ -23,7 +27,7 @@ public class ChatEvent extends Event implements Cancellable { private final Map placeholders = new HashMap<>(); private final Type type; private boolean cancelled; - + public ChatEvent(String message, ClanPlayer sender, List receivers, Type type) { if (message == null || sender == null || receivers == null || type == null) { throw new IllegalArgumentException("none of the args can be null"); @@ -32,7 +36,7 @@ public ChatEvent(String message, ClanPlayer sender, List receivers, this.sender = sender; this.receivers = receivers; this.type = type; - } + } @Override public boolean isCancelled() { @@ -47,9 +51,10 @@ public void setCancelled(boolean cancel) { public enum Type { ALLY, CLAN } - + /** * Gets the chat type + * * @return the chat type */ public Type getType() { @@ -69,10 +74,10 @@ public Map getPlaceholders() { * Adds a placeholder and its value to the chat message * * @param placeholderName the placeholder name - * @param value the String to be replaced + * @param value the String to be replaced * @throws IllegalArgumentException if one of the args are null; if one of - * the args are empty; if the placeholder name equals "clan", "nick-color", - * "player", "rank" or "message" + * the args are empty; if the placeholder name equals "clan", "nick-color", + * "player", "rank" or "message" */ public void addPlaceholder(String placeholderName, String value) { if (placeholderName == null || value == null) { @@ -107,6 +112,7 @@ public List getReceivers() { /** * Changes the chat message + * * @param message the new message */ public void setMessage(String message) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/FrameOpenEvent.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/FrameOpenEvent.java index 757eb398a..08e8228ed 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/FrameOpenEvent.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/events/FrameOpenEvent.java @@ -3,7 +3,6 @@ import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java new file mode 100644 index 000000000..653591df8 --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java @@ -0,0 +1,481 @@ +package net.sacredlabyrinth.phaed.simpleclans.hooks; + +import github.scarsz.discordsrv.DiscordSRV; +import github.scarsz.discordsrv.api.Subscribe; +import github.scarsz.discordsrv.api.events.AccountLinkedEvent; +import github.scarsz.discordsrv.api.events.AccountUnlinkedEvent; +import github.scarsz.discordsrv.api.events.DiscordGuildMessageReceivedEvent; +import github.scarsz.discordsrv.dependencies.commons.lang3.StringUtils; +import github.scarsz.discordsrv.dependencies.emoji.EmojiParser; +import github.scarsz.discordsrv.dependencies.jda.api.Permission; +import github.scarsz.discordsrv.dependencies.jda.api.entities.*; +import github.scarsz.discordsrv.dependencies.jda.api.requests.RestAction; +import github.scarsz.discordsrv.dependencies.kyori.adventure.text.Component; +import github.scarsz.discordsrv.objects.managers.AccountLinkManager; +import github.scarsz.discordsrv.util.DiscordUtil; +import github.scarsz.discordsrv.util.MessageUtil; +import net.sacredlabyrinth.phaed.simpleclans.Clan; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.events.*; +import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; +import java.util.List; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import static github.scarsz.discordsrv.dependencies.jda.api.Permission.VIEW_CHANNEL; +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD; +import static net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook.DiscordAction.ADD; +import static net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook.DiscordAction.REMOVE; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; + +/** + * Hooks SimpleClans and Discord, using DiscordSRV. + *

+ * On server' startup: + *

+ *
    + *
  • Creates categories and channels, respecting discord's limits.
  • + *
  • Removes invalid channels, resets permissions.
  • + *
+ *

+ * Manages events: + *

+ *
    + *
  • Clan creation/deletion
  • + *
  • ClanPlayer joining/resigning
  • + *
  • Player linking
  • + *
+ *

+ * Currently, works with clan chat only. + */ +public class DiscordHook implements Listener { + + private static final int MAX_CHANNELS_PER_CATEGORY = 50; + private static final int MAX_CHANNELS_PER_GUILD = 500; + + private final SimpleClans plugin; + private final SettingsManager settingsManager; + private final ChatManager chatManager; + private final ClanManager clanManager; + private final AccountLinkManager accountManager = DiscordSRV.getPlugin().getAccountLinkManager(); + + private final Guild guild = DiscordSRV.getPlugin().getMainGuild(); + private final List textCategories; + private final List discordClanTags; + private final List clanTags; + private final Role leaderRole; + + public DiscordHook(SimpleClans plugin) { + this.plugin = plugin; + settingsManager = plugin.getSettingsManager(); + chatManager = plugin.getChatManager(); + clanManager = plugin.getClanManager(); + textCategories = settingsManager.getStringList(DISCORDCHAT_TEXT_CATEGORY_IDS).stream(). + filter(this::categoryExists).collect(Collectors.toList()); + + List whitelist = settingsManager.getStringList(DISCORDCHAT_TEXT_WHITELIST); + + clanTags = clanManager.getClans().stream(). + filter(Clan::isVerified). + filter(clan -> clan.getMembers().stream(). + anyMatch(clanPlayer -> getMember(clanPlayer) != null) || clan.isPermanent()). + map(Clan::getTag). + filter(clanTag -> whitelist.isEmpty() || whitelist.contains(clanTag)). + limit(settingsManager.getInt(DISCORDCHAT_TEXT_LIMIT)). + collect(Collectors.toList()); + + discordClanTags = getChannels().stream(). + map(GuildChannel::getName). + collect(Collectors.toList()); + + leaderRole = getLeaderRole(); + setupDiscord(); + } + + @Subscribe + public void onMessageReceived(DiscordGuildMessageReceivedEvent event) { + Optional channel = getChannel(event.getChannel().getName()); + + if (channel.isPresent()) { + Message eventMessage = event.getMessage(); + User Author = event.getAuthor(); + TextChannel textChannel = channel.get(); + UUID uuid = accountManager.getUuid(Author.getId()); + + if (uuid == null) { + sendPrivateMessage(textChannel, eventMessage, lang("you.did.not.link.your.account")); + return; + } + + ClanPlayer clanPlayer = clanManager.getClanPlayer(uuid); + if (clanPlayer == null) { + return; + } + + Clan clan = clanPlayer.getClan(); + if (clan == null) { + return; + } + + if (!Objects.equals(textChannel.getName(), clan.getTag())) { + String channelLink = "<#" + textChannel.getId() + ">"; + sendPrivateMessage(textChannel, eventMessage, lang("cannot.send.discord.message", clanPlayer, channelLink)); + return; + } + + String emojiBehavior = DiscordSRV.config().getString("DiscordChatChannelEmojiBehavior"); + + boolean hideEmoji = emojiBehavior.equalsIgnoreCase("hide"); + boolean nameEmoji = emojiBehavior.equalsIgnoreCase("name"); + + Component component = MessageUtil.reserializeToMinecraft(eventMessage.getContentRaw()); + String message = MessageUtil.toLegacy(component); + + if (hideEmoji && StringUtils.isBlank(EmojiParser.removeAllEmojis(message))) { + DiscordSRV.debug("Ignoring message from " + + Author.getName() + + " because it became completely blank after removing unicode emojis"); + return; + } + + if (hideEmoji) { + // remove all emojis + message = EmojiParser.removeAllEmojis(message); + } else if (nameEmoji) { + // parse emojis from unicode back to :code: + message = EmojiParser.parseToAliases(message); + } + + chatManager.processChat(DISCORD, CLAN, clanPlayer, message); + } + } + + @EventHandler + public void onClanDisband(DisbandClanEvent event) { + deleteChannel(event.getClan().getTag()); + } + + @EventHandler + public void onClanCreate(CreateClanEvent event) { + createChannel(event.getClan().getTag()); + } + + @EventHandler + public void onPlayerClanLeave(PlayerKickedClanEvent event) { + ClanPlayer clanPlayer = event.getClanPlayer(); + + updatePermissions(clanPlayer, REMOVE); + updateRole(clanPlayer, REMOVE); + } + + @EventHandler + public void onPlayerClanJoin(PlayerJoinedClanEvent event) { + ClanPlayer clanPlayer = event.getClanPlayer(); + + updatePermissions(clanPlayer, ADD); + updateRole(clanPlayer, ADD); + } + + @EventHandler + public void onPlayerPromote(PlayerPromoteEvent event) { + updateRole(event.getClanPlayer(), ADD); + } + + @EventHandler + public void onPlayerDemote(PlayerDemoteEvent event) { + updateRole(event.getClanPlayer(), REMOVE); + } + + @Subscribe + public void onPlayerLinking(AccountLinkedEvent event) { + ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer()); + if (clanPlayer == null) { + return; + } + + updatePermissions(clanPlayer, ADD); + } + + @Subscribe + public void onPlayerUnlinking(AccountUnlinkedEvent event) { + ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer()); + if (clanPlayer == null) { + return; + } + + updatePermissions(clanPlayer, REMOVE); + guild.removeRoleFromMember(event.getDiscordId(), leaderRole).queue(); + } + + protected void setupDiscord() { + removeInvalidChannels(); + resetPermissions(); + createChannels(); + } + + @NotNull + public Guild getGuild() { + return guild; + } + + /** + * @return A leader role from guild, otherwise creates one. + */ + @NotNull + public Role getLeaderRole() { + Role role = guild.getRoleById(settingsManager.getString(DISCORDCHAT_LEADER_ID)); + + if (role == null || !role.getName().equals(settingsManager.getString(DISCORDCHAT_LEADER_ROLE))) { + role = guild.createRole(). + setName(settingsManager.getString(DISCORDCHAT_LEADER_ROLE)). + setColor(getLeaderColor()). + setMentionable(true). + complete(); + + settingsManager.set(DISCORDCHAT_LEADER_ID, role.getId()); + settingsManager.save(); + } + + return role; + } + + /** + * @return A leader color from configuration + */ + public Color getLeaderColor() { + String[] colors = settingsManager.getString(DISCORDCHAT_LEADER_COLOR). + replaceAll("\\s", "").split(","); + try { + int red = Integer.parseInt(colors[0]); + int green = Integer.parseInt(colors[1]); + int blue = Integer.parseInt(colors[2]); + int alpha = Integer.parseInt(colors[3]); + + return new Color(red, green, blue, alpha); + } catch (IllegalArgumentException ex) { + plugin.getLogger().warning("Color is invalid, using default color: " + ex.getMessage()); + return Color.RED; + } + } + + /** + * Creates a new SimpleClans {@link Category} + * + * @return Category or null, if reached the limit + */ + @Nullable + public Category createCategory() { + if (guild.getChannels().size() >= MAX_CHANNELS_PER_GUILD) { + return null; + } + + String categoryName = settingsManager.getString(DISCORDCHAT_TEXT_CATEGORY_FORMAT); + Category category = null; + try { + category = guild.createCategory(categoryName). + addRolePermissionOverride( + guild.getPublicRole().getIdLong(), + Collections.emptyList(), + Collections.singletonList(VIEW_CHANNEL)). + submit().get(); + + textCategories.add(category.getId()); + settingsManager.set(DISCORDCHAT_TEXT_CATEGORY_IDS, textCategories); + settingsManager.save(); + } catch (InterruptedException | ExecutionException ex) { + plugin.getLogger().log(Level.SEVERE, "Error while trying to create {0} category: " + + ex.getMessage(), categoryName); + } + + return category; + } + + /** + * Creates a new {@link ClanPlayer.Channel} in available categories, + * otherwise creates one + */ + public boolean createChannel(@NotNull String clanTag) { + Category availableCategory = getCategories().stream(). + filter(category -> category.getTextChannels().size() < MAX_CHANNELS_PER_CATEGORY). + findAny().orElseGet(this::createCategory); + + return availableCategory != null && createChannel(availableCategory, clanTag); + } + + /** + * Retrieves channel in SimpleClans categories. + * + * @see #getCategories() retreive categories. + */ + public Optional getChannel(@NotNull String channelName) { + return getChannels().stream().filter(textChannel -> textChannel.getName().equals(channelName)).findFirst(); + } + + /** + * Checks if category can be obtained by id. + */ + public boolean categoryExists(String categoryId) { + return guild.getCategoryById(categoryId) != null; + } + + /** + * Creates a new {@link ClanPlayer.Channel} in defined {@link Category} + * + *

Sets {@link Permission#VIEW_CHANNEL} permission to all linked clan members.

+ * + * @return true, if channel was created. False, if category reached the limit. + */ + public boolean createChannel(@NotNull Category category, @NotNull String clanTag) { + if (category.getTextChannels().size() >= MAX_CHANNELS_PER_CATEGORY) { + return false; + } + + TextChannel textChannel = category.createTextChannel(clanTag).complete(); + Clan clan = clanManager.getClan(clanTag); + + if (clan != null) { + for (ClanPlayer member : clan.getMembers()) { + updatePermissions(member, ADD); + } + } + return true; + } + + /** + * Deletes channel from SimpleClans categories. + * If there are no channels, removes category as well. + */ + public void deleteChannel(@NotNull String channelName) { + for (Category category : getCategories()) { + if (category.getTextChannels().size() > 0) { + for (TextChannel textChannel : category.getTextChannels()) { + if (textChannel.getName().equals(channelName)) { + textChannel.delete().complete(); + } + } + + if (category.getTextChannels().size() == 0) { + textCategories.remove(category.getId()); + settingsManager.set(DISCORDCHAT_TEXT_CATEGORY_IDS, textCategories); + settingsManager.save(); + category.delete().complete(); + } + } + } + } + + /** + * @return All categories, which contains in configuration. + */ + public List getCategories() { + return textCategories.stream(). + filter(this::categoryExists). + map(guild::getCategoryById). + collect(Collectors.toList()); + } + + /** + * @return All channels in categories + */ + public List getChannels() { + return getCategories().stream().map(Category::getTextChannels).flatMap(Collection::stream). + collect(Collectors.toList()); + } + + @Nullable + public Member getMember(@NotNull ClanPlayer clanPlayer) { + String discordId = accountManager.getDiscordId(clanPlayer.getUniqueId()); + return DiscordUtil.getMemberById(discordId); + } + + private void removeInvalidChannels() { + ArrayList clansToDelete = new ArrayList<>(discordClanTags); + clansToDelete.removeAll(clanTags); + clansToDelete.forEach(this::deleteChannel); + } + + private void resetPermissions() { + getChannels().stream(). + map(TextChannel::getMemberPermissionOverrides). + flatMap(Collection::stream). + filter(permissionOverride -> !Objects.equals(permissionOverride.getPermissionHolder(), guild.getPublicRole())). + forEach(permissionOverride -> permissionOverride.delete().queue()); + + clanTags.stream().map(clanManager::getClan). + filter(Objects::nonNull). + map(Clan::getMembers). + flatMap(Collection::stream). + forEach(clanPlayer -> updatePermissions(clanPlayer, ADD)); + } + + private void createChannels() { + clanTags.removeAll(discordClanTags); + Iterator tagIter = clanTags.iterator(); + while (tagIter.hasNext()) { + if (createChannel(tagIter.next())) { + tagIter.remove(); + } else { + break; + } + } + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + private void sendPrivateMessage(TextChannel textChannel, Message eventMessage, String message) { + RestAction privateChannelAction = eventMessage.getAuthor().openPrivateChannel(); + textChannel.deleteMessageById(eventMessage.getId()).queue(unused -> { + String channelLink = "<#" + textChannel.getId() + ">"; + privateChannelAction.flatMap(privateChannel -> privateChannel.sendMessage(message)); + }); + } + + private void updateRole(ClanPlayer clanPlayer, DiscordAction action) { + Member member = getMember(clanPlayer); + if (member == null) { + return; + } + + if (action == ADD) { + guild.addRoleToMember(member, leaderRole).queue(); + } else { + guild.removeRoleFromMember(member, leaderRole).queue(); + } + } + + private void updatePermissions(@NotNull ClanPlayer clanPlayer, DiscordAction action) { + Clan clan = clanPlayer.getClan(); + Member member = getMember(clanPlayer); + if (clan == null || member == null) { + return; + } + + Optional channel = getChannel(clan.getTag()); + if (channel.isPresent()) { + TextChannel textChannel = channel.get(); + + if (action == ADD) { + textChannel.upsertPermissionOverride(member). + setPermissions(Collections.singletonList(VIEW_CHANNEL), Collections.emptyList()).queue(); + } else { + textChannel.getManager().removePermissionOverride(member).queue(); + } + } + } + + enum DiscordAction { + ADD, REMOVE + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java index 4b537e784..303ff6ac9 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java @@ -4,13 +4,13 @@ import me.clip.placeholderapi.expansion.Relational; import net.sacredlabyrinth.phaed.simpleclans.Clan; import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.reflections.Reflections; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -186,8 +186,9 @@ private Map getConfigMap(@NotNull String config) { } private void registerResolvers() { - Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.hooks.papi.resolvers"); - Set> resolvers = reflections.getSubTypesOf(PlaceholderResolver.class); + Set> resolvers = + Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.hooks.papi.resolvers", + PlaceholderResolver.class); plugin.getLogger().info(String.format("Registering %d placeholder resolvers...", resolvers.size())); for (Class r : resolvers) { try { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/resolvers/PlayerColorResolver.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/resolvers/PlayerColorResolver.java index cef1456ec..480390fab 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/resolvers/PlayerColorResolver.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/resolvers/PlayerColorResolver.java @@ -3,6 +3,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.PlaceholderResolver; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -10,10 +11,16 @@ import java.lang.reflect.Method; import java.util.Map; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; + @SuppressWarnings("unused") public class PlayerColorResolver extends PlaceholderResolver { + + private final SettingsManager settings; + public PlayerColorResolver(@NotNull SimpleClans plugin) { super(plugin); + settings = plugin.getSettingsManager(); } @Override @@ -39,26 +46,26 @@ public PlayerColorResolver(@NotNull SimpleClans plugin) { private String getClanChatColor(ClanPlayer player) { if (player.isLeader()) { - return plugin.getSettingsManager().getClanChatLeaderColor(); + return settings.getColored(CLANCHAT_LEADER_COLOR); } if (player.isTrusted()) { - return plugin.getSettingsManager().getClanChatTrustedColor(); + return settings.getColored(CLANCHAT_TRUSTED_COLOR); } if (player.getClan() != null) { - return plugin.getSettingsManager().getClanChatMemberColor(); + return settings.getColored(CLANCHAT_MEMBER_COLOR); } return ""; } private String getAllyChatColor(ClanPlayer player) { if (player.isLeader()) { - return plugin.getSettingsManager().getAllyChatLeaderColor(); + return settings.getColored(ALLYCHAT_LEADER_COLOR); } if (player.isTrusted()) { - return plugin.getSettingsManager().getAllyChatTrustedColor(); + return settings.getColored(ALLYCHAT_TRUSTED_COLOR); } if (player.getClan() != null) { - return plugin.getSettingsManager().getAllyChatMemberColor(); + return settings.getColored(ALLYCHAT_MEMBER_COLOR); } return ""; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/language/LanguageResource.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/language/LanguageResource.java index 535b0101f..ce792831b 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/language/LanguageResource.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/language/LanguageResource.java @@ -1,288 +1,291 @@ package net.sacredlabyrinth.phaed.simpleclans.language; -import java.io.*; -import java.net.*; -import java.nio.charset.StandardCharsets; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.util.*; -import java.util.logging.Level; - +import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.*; +import java.util.function.Predicate; + /** - * * @author RoinujNosde - * */ public class LanguageResource { - private static final ResourceLoader DATA_FOLDER_LOADER = new ResourceLoader(SimpleClans.getInstance().getDataFolder()); - private final Locale defaultLocale; - private static List availableLocales; - private static final Map TRANSLATION_STATUS = new HashMap<>(); - - public LanguageResource() { - this.defaultLocale = SimpleClans.getInstance().getSettingsManager().getLanguage(); - } - - @Nullable - public String getLang(@NotNull String key, @NotNull Locale locale) { - if (!key.startsWith("acf-core.parameter.") && key.startsWith("acf")) { - return getACFLang(key, locale); - } - try { - ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, DATA_FOLDER_LOADER, - new ResourceControl(defaultLocale, false)); - return bundle.getString(key); - } catch (MissingResourceException ignored) {} - if (locale.equals(Locale.ENGLISH)) { - // English is the root messages.properties inside the jar - locale = Locale.ROOT; - } - try { - ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, - SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale)); - - return bundle.getString(key); - } catch (MissingResourceException ignored) {} - - return null; - } - - @Nullable - private String getACFMinecraftLang(@NotNull String key, @NotNull Locale locale) { - try { - ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale, DATA_FOLDER_LOADER, - new ResourceControl(defaultLocale, false)); - - return bundle.getString(key); - } catch (MissingResourceException ignored) {} - - try { - ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale, - SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale)); - - return bundle.getString(key); - } catch (MissingResourceException ignored) {} - - return null; - } - - @Nullable - private String getACFLang(@NotNull String key, @NotNull Locale locale) { - if (key.startsWith("acf-minecraft")) { - return getACFMinecraftLang(key, locale); - } - try { - ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale, DATA_FOLDER_LOADER, - new ResourceControl(defaultLocale, false)); - - return bundle.getString(key); - } catch (MissingResourceException ignored) {} - - try { - ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale, - SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale)); - - return bundle.getString(key); - } catch (MissingResourceException ignored) {} - - return null; - } - - public static int getTranslationStatus(@NotNull Locale locale) { - if (locale.equals(Locale.ENGLISH)) { - return 100; - } - Integer lines = TRANSLATION_STATUS.get(locale); - Integer englishLines = TRANSLATION_STATUS.get(Locale.ENGLISH); - if (lines == null || englishLines == null) { - return -1; - } - - return Math.round((lines / englishLines.floatValue()) * 100); - } - - public static void clearCache() { - ResourceBundle.clearCache(DATA_FOLDER_LOADER); - } - - public static List getAvailableLocales() { - if (availableLocales != null) { - return availableLocales; - } - loadAvailableLocales(); - return availableLocales; - } - - private static void loadAvailableLocales() { - ArrayList locales = new ArrayList<>(); - try { - URI uri = LanguageResource.class.getProtectionDomain().getCodeSource().getLocation().toURI(); - FileSystem fileSystem = FileSystems.newFileSystem(URI.create("jar:" + uri.toString()), Collections.emptyMap()); - Files.walk(fileSystem.getPath("/")).forEach(p -> { - String name = p.getFileName() == null ? "" : p.getFileName().toString(); - if (name.startsWith("messages") && name.endsWith(".properties")) { - Locale locale = getLocaleByFileName(name); - locales.add(locale); - loadTranslationStatus(locale, name); - } - }); - fileSystem.close(); - } catch (URISyntaxException | IOException e) { - SimpleClans.getInstance().getLogger().log(Level.WARNING, "An error occurred while getting the available languages", e); - } - locales.sort(Comparator.comparing(Locale::toLanguageTag)); - availableLocales = locales; - } - - private static @NotNull Locale getLocaleByFileName(@NotNull String name) { - Locale locale; - if (name.equalsIgnoreCase("messages.properties")) { - locale = Locale.ENGLISH; - } else { - String[] extensionSplit = name.split(".properties"); - String[] split = extensionSplit[0].split("_"); - if (split.length == 2) { - locale = new Locale(split[1]); - } else { - locale = new Locale(split[1], split[2]); - } - } - return locale; - } - - private static void loadTranslationStatus(@NotNull Locale locale, @NotNull String fileName) { - InputStream stream = SimpleClans.getInstance().getClass().getResourceAsStream("/" + fileName); - if (stream == null) return; - - BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - int lineCount = 0; - try { - while (true) { - String line = reader.readLine(); - if (line == null) { - break; - } - if (!line.startsWith("#")) { - lineCount++; - } - } - } catch (IOException ex) { - lineCount = -1; - } - TRANSLATION_STATUS.put(locale, lineCount); - } - - static class ResourceLoader extends ClassLoader { - - private final File dataFolder; - - public ResourceLoader(File dataFolder) { - this.dataFolder = dataFolder; - } - - @Override - public URL getResource(String name) { - File file = new File(dataFolder, name); - if (file.exists()) { - try { - return file.toURI().toURL(); - } catch (MalformedURLException ignored) { - } - } - - return null; - } - } - - static class ResourceControl extends ResourceBundle.Control { - - private final Locale defaultLocale; - private final boolean defaultAsFallback; - - public ResourceControl(@NotNull Locale defaultLocale) { - this.defaultLocale = defaultLocale; - this.defaultAsFallback = true; - } - - public ResourceControl(@NotNull Locale defaultLocale, boolean defaultAsFallback) { - this.defaultLocale = defaultLocale; - this.defaultAsFallback = defaultAsFallback; - } - - @Override - public List getFormats(String baseName) { - if (baseName == null) { - throw new NullPointerException(); - } - - return Collections.singletonList("java.properties"); - } - - @Override - public List getCandidateLocales(String baseName, Locale locale) { - List candidateLocales = new ArrayList<>(super.getCandidateLocales(baseName, locale)); - if (!defaultAsFallback && candidateLocales.size() != 1) { - candidateLocales.remove(Locale.ROOT); - } - if (baseName.startsWith("acf") && !candidateLocales.contains(Locale.ENGLISH) && defaultAsFallback) { - candidateLocales.add(Locale.ENGLISH); - } - return candidateLocales; - } - - @Override - @Nullable - public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, - boolean reload) throws IOException { - String bundleName = toBundleName(baseName, locale); - - ResourceBundle bundle; - if (format.equals("java.properties")) { - - String resourceName = toResourceName(bundleName, "properties"); - - URL url = loader.getResource(resourceName); - if (url == null) { - return null; - } - - URLConnection connection = url.openConnection(); - if (reload) { - connection.setUseCaches(false); - } - - InputStreamReader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8); - bundle = new PropertyResourceBundle(reader); - reader.close(); - } else { - throw new IllegalArgumentException("unknown format: " + format); - } - - return bundle; - } - - - @Override - @Nullable - public Locale getFallbackLocale(String baseName, Locale locale) { - if (!defaultAsFallback) { - return null; - } - Locale root = baseName.startsWith("acf") ? Locale.ENGLISH : Locale.ROOT; - if (!locale.equals(defaultLocale) && !locale.equals(root)) { - return defaultLocale; - } - if (locale.equals(defaultLocale) && !defaultLocale.equals(root)) { - return root; - } - - return null; - } - } + private static final ResourceLoader DATA_FOLDER_LOADER = new ResourceLoader(SimpleClans.getInstance().getDataFolder()); + private final Locale defaultLocale; + private static List availableLocales; + private static final Map TRANSLATION_STATUS = new HashMap<>(); + + public LanguageResource() { + this.defaultLocale = SimpleClans.getInstance().getSettingsManager().getLanguage(); + } + + @Nullable + public String getLang(@NotNull String key, @NotNull Locale locale) { + if (!key.startsWith("acf-core.parameter.") && key.startsWith("acf")) { + return getACFLang(key, locale); + } + try { + ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, DATA_FOLDER_LOADER, + new ResourceControl(defaultLocale, false)); + return bundle.getString(key); + } catch (MissingResourceException ignored) { + } + if (locale.equals(Locale.ENGLISH)) { + // English is the root messages.properties inside the jar + locale = Locale.ROOT; + } + try { + ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, + SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale)); + + return bundle.getString(key); + } catch (MissingResourceException ignored) { + } + + return null; + } + + @Nullable + private String getACFMinecraftLang(@NotNull String key, @NotNull Locale locale) { + try { + ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale, DATA_FOLDER_LOADER, + new ResourceControl(defaultLocale, false)); + + return bundle.getString(key); + } catch (MissingResourceException ignored) { + } + + try { + ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale, + SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale)); + + return bundle.getString(key); + } catch (MissingResourceException ignored) { + } + + return null; + } + + @Nullable + private String getACFLang(@NotNull String key, @NotNull Locale locale) { + if (key.startsWith("acf-minecraft")) { + return getACFMinecraftLang(key, locale); + } + try { + ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale, DATA_FOLDER_LOADER, + new ResourceControl(defaultLocale, false)); + + return bundle.getString(key); + } catch (MissingResourceException ignored) { + } + + try { + ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale, + SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale)); + + return bundle.getString(key); + } catch (MissingResourceException ignored) { + } + + return null; + } + + public static int getTranslationStatus(@NotNull Locale locale) { + if (locale.equals(Locale.ENGLISH)) { + return 100; + } + Integer lines = TRANSLATION_STATUS.get(locale); + Integer englishLines = TRANSLATION_STATUS.get(Locale.ENGLISH); + if (lines == null || englishLines == null) { + return -1; + } + + return Math.round((lines / englishLines.floatValue()) * 100); + } + + public static void clearCache() { + ResourceBundle.clearCache(DATA_FOLDER_LOADER); + } + + public static List getAvailableLocales() { + if (availableLocales != null) { + return availableLocales; + } + loadAvailableLocales(); + return availableLocales; + } + + private static void loadAvailableLocales() { + ArrayList locales = new ArrayList<>(); + + Predicate filter = entry -> { + String path = (entry.getFileName() != null) ? entry.getFileName().toString() : ""; + return path.startsWith("messages") && path.endsWith(".properties"); + }; + + for (Path filePath : Helper.getPathsIn("/", filter)) { + String fileName = filePath.getFileName().toString(); + Locale locale = getLocaleByFileName(fileName); + locales.add(locale); + loadTranslationStatus(locale, fileName); + } + + locales.sort(Comparator.comparing(Locale::toLanguageTag)); + availableLocales = locales; + } + + private static @NotNull Locale getLocaleByFileName(@NotNull String name) { + Locale locale; + if (name.equalsIgnoreCase("messages.properties")) { + locale = Locale.ENGLISH; + } else { + String[] extensionSplit = name.split(".properties"); + String[] split = extensionSplit[0].split("_"); + if (split.length == 2) { + locale = new Locale(split[1]); + } else { + locale = new Locale(split[1], split[2]); + } + } + return locale; + } + + private static void loadTranslationStatus(@NotNull Locale locale, @NotNull String fileName) { + InputStream stream = SimpleClans.getInstance().getClass().getResourceAsStream("/" + fileName); + if (stream == null) return; + + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + int lineCount = 0; + try { + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + if (!line.startsWith("#")) { + lineCount++; + } + } + } catch (IOException ex) { + lineCount = -1; + } + TRANSLATION_STATUS.put(locale, lineCount); + } + + static class ResourceLoader extends ClassLoader { + + private final File dataFolder; + + public ResourceLoader(File dataFolder) { + this.dataFolder = dataFolder; + } + + @Override + public URL getResource(String name) { + File file = new File(dataFolder, name); + if (file.exists()) { + try { + return file.toURI().toURL(); + } catch (MalformedURLException ignored) { + } + } + + return null; + } + } + + static class ResourceControl extends ResourceBundle.Control { + + private final Locale defaultLocale; + private final boolean defaultAsFallback; + + public ResourceControl(@NotNull Locale defaultLocale) { + this.defaultLocale = defaultLocale; + this.defaultAsFallback = true; + } + + public ResourceControl(@NotNull Locale defaultLocale, boolean defaultAsFallback) { + this.defaultLocale = defaultLocale; + this.defaultAsFallback = defaultAsFallback; + } + + @Override + public List getFormats(String baseName) { + if (baseName == null) { + throw new NullPointerException(); + } + + return Collections.singletonList("java.properties"); + } + + @Override + public List getCandidateLocales(String baseName, Locale locale) { + List candidateLocales = new ArrayList<>(super.getCandidateLocales(baseName, locale)); + if (!defaultAsFallback && candidateLocales.size() != 1) { + candidateLocales.remove(Locale.ROOT); + } + if (baseName.startsWith("acf") && !candidateLocales.contains(Locale.ENGLISH) && defaultAsFallback) { + candidateLocales.add(Locale.ENGLISH); + } + return candidateLocales; + } + + @Override + @Nullable + public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, + boolean reload) throws IOException { + String bundleName = toBundleName(baseName, locale); + + ResourceBundle bundle; + if (format.equals("java.properties")) { + + String resourceName = toResourceName(bundleName, "properties"); + + URL url = loader.getResource(resourceName); + if (url == null) { + return null; + } + + URLConnection connection = url.openConnection(); + if (reload) { + connection.setUseCaches(false); + } + + InputStreamReader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8); + bundle = new PropertyResourceBundle(reader); + reader.close(); + } else { + throw new IllegalArgumentException("unknown format: " + format); + } + + return bundle; + } + + + @Override + @Nullable + public Locale getFallbackLocale(String baseName, Locale locale) { + if (!defaultAsFallback) { + return null; + } + Locale root = baseName.startsWith("acf") ? Locale.ENGLISH : Locale.ROOT; + if (!locale.equals(defaultLocale) && !locale.equals(root)) { + return defaultLocale; + } + if (locale.equals(defaultLocale) && !defaultLocale.equals(root)) { + return root; + } + + return null; + } + } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/FriendlyFire.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/FriendlyFire.java index ca51f927d..b5a6fff9a 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/FriendlyFire.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/FriendlyFire.java @@ -16,6 +16,8 @@ import java.util.Map; import java.util.UUID; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; + public class FriendlyFire implements Listener { private final SimpleClans plugin; @@ -29,7 +31,7 @@ public FriendlyFire(@NotNull SimpleClans plugin) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { if (!(event.getEntity() instanceof Player) || - plugin.getSettingsManager().isBlacklistedWorld(event.getEntity().getWorld())) { + plugin.getSettingsManager().getStringList(BLACKLISTED_WORLDS).contains(event.getEntity().getWorld().getName())) { return; } Player victim = (Player) event.getEntity(); @@ -53,14 +55,14 @@ private void process(EntityDamageEvent event, @Nullable Clan victimClan, @Nullable Clan attackerClan) { if (vcp == null || victimClan == null || attackerClan == null) { - if (plugin.getSettingsManager().getSafeCivilians()) { + if (plugin.getSettingsManager().is(SAFE_CIVILIANS)) { ChatBlock.sendMessageKey(attacker, "cannot.attack.civilians"); event.setCancelled(true); } return; } - if (vcp.isFriendlyFire() || victimClan.isFriendlyFire() || plugin.getSettingsManager().isGlobalff()) { + if (vcp.isFriendlyFire() || victimClan.isFriendlyFire() || plugin.getSettingsManager().is(GLOBAL_FRIENDLY_FIRE)) { return; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/LandProtection.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/LandProtection.java index 2c803d341..58b981da7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/LandProtection.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/LandProtection.java @@ -29,6 +29,7 @@ import java.util.Set; import static net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager.Action.*; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class LandProtection implements Listener { @@ -43,7 +44,7 @@ public LandProtection(@NotNull SimpleClans plugin) { protectionManager = plugin.getProtectionManager(); clanManager = plugin.getClanManager(); settingsManager = plugin.getSettingsManager(); - priority = settingsManager.getWarListenerPriority(); + priority = EventPriority.valueOf(settingsManager.getString(WAR_LISTENERS_PRIORITY)); } public void registerListeners() { @@ -65,11 +66,11 @@ public void registerCreateLandEvent(ProtectionProvider provider, @Nullable Class Player player = provider.getPlayer(event); if (player == null) return; Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId()); - if ((clan == null || !clan.isLeader(player)) && settingsManager.isOnlyLeadersCanCreateLands()) { + if ((clan == null || !clan.isLeader(player)) && settingsManager.is(LAND_CREATION_ONLY_LEADERS)) { cancelWithMessage(player, event, "only.leaders.can.create.lands"); return; } - if (settingsManager.isOnlyOneLandPerClan()) { + if (settingsManager.is(LAND_CREATION_ONLY_ONE_PER_CLAN)) { if (clan == null) { cancelWithMessage(player, event, "only.clan.members.can.create.lands"); return; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PlayerDeath.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PlayerDeath.java index 57ad7ab0a..b9148ff6e 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PlayerDeath.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PlayerDeath.java @@ -19,6 +19,7 @@ import java.util.logging.Level; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; /** * @author phaed @@ -35,7 +36,7 @@ public PlayerDeath() { public void onEntityDeath(PlayerDeathEvent event) { SimpleClans.debug("A player died"); Player victim = event.getEntity(); - if (plugin.getSettingsManager().isBlacklistedWorld(victim.getLocation().getWorld()) + if (plugin.getSettingsManager().getStringList(BLACKLISTED_WORLDS).contains(victim.getLocation().getWorld().getName()) || victim.hasMetadata("NPC")) { SimpleClans.debug("Blacklisted world"); return; @@ -86,7 +87,7 @@ private void classifyKill(@NotNull ClanPlayer victim, @NotNull ClanPlayer attack } private void giveMoneyReward(@NotNull ClanPlayer victim, @NotNull ClanPlayer attacker) { - if (!plugin.getSettingsManager().isMoneyPerKill()) { + if (!plugin.getSettingsManager().is(ECONOMY_MONEY_PER_KILL)) { return; } Clan attackerClan = attacker.getClan(); @@ -115,7 +116,7 @@ private boolean isInvalidKill(@NotNull Player victim, @Nullable Player attacker) return true; } - if (SimpleClans.getInstance().getSettingsManager().isDenySameIPKills()) { + if (SimpleClans.getInstance().getSettingsManager().is(KILL_WEIGHTS_DENY_SAME_IP_KILLS)) { InetSocketAddress attackerAddress = attacker.getAddress(); InetSocketAddress victimAddress = victim.getAddress(); if (attackerAddress != null && victimAddress != null) { @@ -144,13 +145,13 @@ private void addKill(Kill.Type type, ClanPlayer attacker, ClanPlayer victim) { return; } final Kill kill = new Kill(attacker, victim, LocalDateTime.now()); - if (plugin.getSettingsManager().isDelayBetweenKills() && plugin.getClanManager().isKillBeforeDelay(kill)) { + if (plugin.getSettingsManager().is(KDR_ENABLE_KILL_DELAY) && plugin.getClanManager().isKillBeforeDelay(kill)) { return; } - if (plugin.getSettingsManager().isMaxKillsPerVictim()) { + if (plugin.getSettingsManager().is(KDR_ENABLE_MAX_KILLS)) { plugin.getStorageManager().getKillsPerPlayer(attacker.getName(), data -> { - final int max = plugin.getSettingsManager().getMaxKillsPerVictim(); + final int max = plugin.getSettingsManager().getInt(KDR_MAX_KILLS_PER_VICTIM); Integer kills = data.get(kill.getVictim().getName()); if (kills != null) { if (kills < max) { @@ -175,7 +176,7 @@ private void saveKill(Kill kill, Kill.Type type) { private double calculateReward(@NotNull ClanPlayer attacker, @NotNull ClanPlayer victim) { double reward; - double multiplier = plugin.getSettingsManager().getKDRMultipliesPerKill(); + double multiplier = plugin.getSettingsManager().getDouble(ECONOMY_MONEY_PER_KILL_KDR_MULTIPLIER); double kdr = attacker.getKDR() * multiplier; Clan attackerClan = attacker.getClan(); Clan victimClan = victim.getClan(); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PvPOnlyInWar.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PvPOnlyInWar.java index 8919d4a6b..9fbe5b8b9 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PvPOnlyInWar.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/PvPOnlyInWar.java @@ -11,6 +11,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.BLACKLISTED_WORLDS; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PVP_ONLY_WHILE_IN_WAR; + public class PvPOnlyInWar implements Listener { private final SimpleClans plugin; @@ -22,7 +25,7 @@ public PvPOnlyInWar(@NotNull SimpleClans plugin) { @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onEntityDamage(EntityDamageEvent event) { if (!(event.getEntity() instanceof Player) || - plugin.getSettingsManager().isBlacklistedWorld(event.getEntity().getWorld())) { + plugin.getSettingsManager().getStringList(BLACKLISTED_WORLDS).contains(event.getEntity().getWorld().getName())) { return; } Player victim = (Player) event.getEntity(); @@ -35,7 +38,7 @@ public void onEntityDamage(EntityDamageEvent event) { Clan attackerClan = plugin.getClanManager().getClanByPlayerUniqueId(attacker.getUniqueId()); Clan victimClan = plugin.getClanManager().getClanByPlayerUniqueId(victim.getUniqueId()); - if (plugin.getSettingsManager().isPvpOnlywhileInWar()) { + if (plugin.getSettingsManager().is(PVP_ONLY_WHILE_IN_WAR)) { process(event, attacker, victim, attackerClan, victimClan); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java index f67be4ab0..9cf5d75a7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java @@ -21,6 +21,8 @@ import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN; import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; /** * @author phaed @@ -40,12 +42,12 @@ public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { String[] split = event.getMessage().substring(1).split(" "); String command = split[0]; - if (settingsManager.isTagBasedClanChat()) { + if (settingsManager.is(CLANCHAT_TAG_BASED)) { Clan clan = plugin.getClanManager().getClan(command); if (clan == null || !clan.isMember(event.getPlayer())) { return; } - String replaced = event.getMessage().replaceFirst(command, settingsManager.getCommandClanChat()); + String replaced = event.getMessage().replaceFirst(command, settingsManager.getString(COMMANDS_CLAN_CHAT)); event.setMessage(replaced); } } @@ -54,7 +56,7 @@ public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { public void onPlayerChat(AsyncPlayerChatEvent event) { Player player = event.getPlayer(); ClanPlayer cp = plugin.getClanManager().getClanPlayer(player.getUniqueId()); - if (cp == null || settingsManager.isBlacklistedWorld(player.getLocation().getWorld())) { + if (cp == null || settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getLocation().getWorld().getName())) { return; } @@ -66,13 +68,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player)); return; } - switch (channel) { - case CLAN: - plugin.getClanManager().processClanChat(player, event.getMessage()); - break; - case ALLY: - plugin.getClanManager().processAllyChat(player, event.getMessage()); - } + plugin.getChatManager().processChat(SPIGOT, channel, cp, event.getMessage()); event.setCancelled(true); } } @@ -80,14 +76,13 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { @EventHandler(priority = EventPriority.HIGH) public void handleChatTags(AsyncPlayerChatEvent event) { Player player = event.getPlayer(); - if (settingsManager.isBlacklistedWorld(player.getWorld())) { + if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getWorld().getName())) { return; } ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId()); String tagLabel = cp != null && cp.isTagEnabled() ? cp.getTagLabel() : null; - - if (settingsManager.isCompatMode() && settingsManager.isChatTags()) { + if (settingsManager.is(CHAT_COMPATIBILITY_MODE) && settingsManager.is(DISPLAY_CHAT_TAGS)) { if (tagLabel != null) { if (player.getDisplayName().contains("{clan}")) { player.setDisplayName(player.getDisplayName().replace("{clan}", tagLabel)); @@ -110,39 +105,39 @@ public void handleChatTags(AsyncPlayerChatEvent event) { public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); - if (SimpleClans.getInstance().getSettingsManager().isBlacklistedWorld(player.getLocation().getWorld())) { + if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getLocation().getWorld().getName())) { return; } ClanPlayer cp; - if (SimpleClans.getInstance().getSettingsManager().getUseBungeeCord()) { - cp = SimpleClans.getInstance().getClanManager().getClanPlayerJoinEvent(player); + if (settingsManager.is(PERFORMANCE_USE_BUNGEECORD)) { + cp = plugin.getClanManager().getClanPlayerJoinEvent(player); } else { - cp = SimpleClans.getInstance().getClanManager().getAnyClanPlayer(player.getUniqueId()); + cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId()); } - SimpleClans.getInstance().getStorageManager().updatePlayerNameAsync(player); - SimpleClans.getInstance().getClanManager().updateLastSeen(player); - SimpleClans.getInstance().getClanManager().updateDisplayName(player); + plugin.getStorageManager().updatePlayerNameAsync(player); + plugin.getClanManager().updateLastSeen(player); + plugin.getClanManager().updateDisplayName(player); if (cp == null) { return; } cp.setName(player.getName()); - SimpleClans.getInstance().getPermissionsManager().addPlayerPermissions(cp); + plugin.getPermissionsManager().addPlayerPermissions(cp); - if (settingsManager.isBbShowOnLogin() && cp.isBbEnabled() && cp.getClan() != null) { - cp.getClan().displayBb(player, settingsManager.getBbLoginSize()); + if (settingsManager.is(BB_SHOW_ON_LOGIN) && cp.isBbEnabled() && cp.getClan() != null) { + cp.getClan().displayBb(player, settingsManager.getInt(BB_LOGIN_SIZE)); } - SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp); + plugin.getPermissionsManager().addClanPermissions(cp); } @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); - if (!settingsManager.isTeleportOnSpawn() || settingsManager.isBlacklistedWorld(player.getWorld())) { + if (!settingsManager.is(TELEPORT_HOME_ON_SPAWN) || settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getWorld().getName())) { return; } @@ -163,23 +158,23 @@ public void onPlayerQuit(PlayerQuitEvent event) { Bukkit.getScheduler().runTask(plugin, () -> { if (clan.getOnlineMembers().isEmpty()) { plugin.getProtectionManager().setWarExpirationTime(cp.getClan(), - settingsManager.getWarDisconnectExpirationTime()); + settingsManager.getMinutes(WAR_DISCONNECT_EXPIRATION_TIME)); } }); } - if (settingsManager.isBlacklistedWorld(event.getPlayer().getLocation().getWorld())) { + if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(event.getPlayer().getLocation().getWorld().getName())) { return; } - SimpleClans.getInstance().getPermissionsManager().removeClanPlayerPermissions(cp); + plugin.getPermissionsManager().removeClanPlayerPermissions(cp); plugin.getClanManager().updateLastSeen(event.getPlayer()); plugin.getRequestManager().endPendingRequest(event.getPlayer().getName()); } @EventHandler public void onPlayerKick(PlayerKickEvent event) { - if (settingsManager.isBlacklistedWorld(event.getPlayer().getLocation().getWorld())) { + if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(event.getPlayer().getLocation().getWorld().getName())) { return; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/TamableMobsSharing.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/TamableMobsSharing.java index ba7504c0e..9a3d51885 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/TamableMobsSharing.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/TamableMobsSharing.java @@ -2,6 +2,8 @@ import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import org.bukkit.entity.AnimalTamer; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; @@ -14,19 +16,23 @@ import org.bukkit.event.player.PlayerInteractEntityEvent; import org.jetbrains.annotations.NotNull; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TAMABLE_MOBS_SHARING; + public class TamableMobsSharing implements Listener { - private final SimpleClans plugin; + private final SettingsManager settings; + private final ClanManager clanManager; public TamableMobsSharing(@NotNull SimpleClans plugin) { - this.plugin = plugin; + settings = plugin.getSettingsManager(); + clanManager = plugin.getClanManager(); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onEntityDamage(EntityDamageByEntityEvent event) { - if (plugin.getSettingsManager().isTamableMobsSharing()) { + if (settings.is(TAMABLE_MOBS_SHARING)) { if (event.getEntity() instanceof Wolf && event.getDamager() instanceof Player) { - ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(event.getDamager().getUniqueId()); + ClanPlayer cp = clanManager.getAnyClanPlayer(event.getDamager().getUniqueId()); if (cp == null || cp.getClan() == null) { return; } @@ -42,9 +48,9 @@ public void onEntityDamage(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onEntityTarget(EntityTargetLivingEntityEvent event) { - if (plugin.getSettingsManager().isTamableMobsSharing()) { + if (settings.is(TAMABLE_MOBS_SHARING)) { if (event.getEntity() instanceof Tameable && event.getTarget() instanceof Player) { - ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(event.getTarget().getUniqueId()); + ClanPlayer cp = clanManager.getAnyClanPlayer(event.getTarget().getUniqueId()); if (cp == null || cp.getClan() == null) { return; } @@ -63,9 +69,9 @@ public void onEntityTarget(EntityTargetLivingEntityEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEntityEvent event) { - if (plugin.getSettingsManager().isTamableMobsSharing() && event.getRightClicked() instanceof Tameable) { + if (settings.is(TAMABLE_MOBS_SHARING) && event.getRightClicked() instanceof Tameable) { Player player = event.getPlayer(); - ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId()); + ClanPlayer cp = clanManager.getAnyClanPlayer(player.getUniqueId()); if (cp == null || cp.getClan() == null) { return; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLog.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLog.java index aa873611f..93e4f04a4 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLog.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLog.java @@ -18,6 +18,7 @@ /** * Class responsible for logging bank related transactions. + * * @since 2.15.3 */ public class BankLog { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLogger.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLogger.java index a52666dd5..b720b3922 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLogger.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/BankLogger.java @@ -1,5 +1,12 @@ package net.sacredlabyrinth.phaed.simpleclans.loggers; +/** + * The core interface for all bank loggers, + * which may log all economy actions, + * with its defining ({@link Operation}) + * + * @since 2.15.3 + */ public interface BankLogger { void log(BankLog log); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/CSVBankLogger.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/CSVBankLogger.java index c5c3424f8..9aabdfb3a 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/CSVBankLogger.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/loggers/CSVBankLogger.java @@ -11,8 +11,21 @@ import java.util.Date; import java.util.logging.*; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DEBUG; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_BANK_LOG_ENABLED; + /** - * Logs all bank actions to one csv file per day. + * Logs all bank actions to one CSV file per day. + *

+ * It accepts {@link BankLog} as a record + * and uses the format from {@link CSVFormatter} + *

+ * Typical usage: + *

{@code
+ *     CSVBankLogger bankLogger = new CSVBankLogger(plugin);
+ *     bankLogger.log(new BankLog(sender, clan, economyResponse, operation, cause, amount));
+ * }
+ * * @since 2.15.3 */ public class CSVBankLogger implements BankLogger { @@ -20,20 +33,23 @@ public class CSVBankLogger implements BankLogger { private final Logger logger = Logger.getLogger(getClass().getSimpleName()); private final SimpleClans plugin; + static final int FILE_SIZE = (int) (100 * Math.pow(10, 6)); + static final int FILE_COUNT = 1; + public CSVBankLogger(SimpleClans plugin) { this.plugin = plugin; - if (!plugin.getSettingsManager().isBankLogEnabled()) { + if (!plugin.getSettingsManager().is(ECONOMY_BANK_LOG_ENABLED)) { return; } try { - FileHandler fh = new FileHandler(getFilePath(), (int) (100 * Math.pow(10, 6)), 1, true); + FileHandler fh = new FileHandler(getFilePath(), FILE_SIZE, FILE_COUNT, true); fh.setFormatter(new CSVFormatter()); fh.setLevel(Level.INFO); fh.setEncoding("UTF-8"); logger.addHandler(fh); - if (!plugin.getSettingsManager().isDebugging()) { + if (!plugin.getSettingsManager().is(DEBUG)) { logger.setUseParentHandlers(false); } } catch (IOException e) { @@ -43,7 +59,7 @@ public CSVBankLogger(SimpleClans plugin) { @Override public void log(BankLog log) { - if (!plugin.getSettingsManager().isBankLogEnabled()) { + if (!plugin.getSettingsManager().is(ECONOMY_BANK_LOG_ENABLED)) { return; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java new file mode 100644 index 000000000..1ae5a66d5 --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java @@ -0,0 +1,150 @@ +package net.sacredlabyrinth.phaed.simpleclans.managers; + +import github.scarsz.discordsrv.DiscordSRV; +import github.scarsz.discordsrv.api.Subscribe; +import github.scarsz.discordsrv.api.events.DiscordReadyEvent; +import me.clip.placeholderapi.PlaceholderAPI; +import net.sacredlabyrinth.phaed.simpleclans.Clan; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.Helper; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler; +import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage; +import net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook; +import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; +import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.InvocationTargetException; +import java.util.*; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source; +import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static org.bukkit.Bukkit.getPluginManager; + +public final class ChatManager { + + private final SimpleClans plugin; + + private DiscordHook discordHook; + private final Set handlers = new HashSet<>(); + + public ChatManager(SimpleClans plugin) { + this.plugin = plugin; + registerHandlers(); + if (getPluginManager().getPlugin("DiscordSRV") != null && plugin.getSettingsManager().is(DISCORDCHAT_ENABLE)) { + DiscordSRV.api.subscribe(this); + } + } + + @Subscribe + public void registerDiscord(DiscordReadyEvent event) { + discordHook = new DiscordHook(plugin); + DiscordSRV.api.subscribe(discordHook); + getPluginManager().registerEvents(discordHook, plugin); + } + + @Nullable + public DiscordHook getDiscordHook() { + return discordHook; + } + + public void processChat(@NotNull Source source, @NotNull Channel channel, + @NotNull ClanPlayer clanPlayer, String message) { + Clan clan = Objects.requireNonNull(clanPlayer.getClan(), "Clan cannot be null"); + List receivers = new ArrayList<>(); + + switch (channel) { + case ALLY: + if (!plugin.getSettingsManager().is(ALLYCHAT_ENABLE)) { + return; + } + + receivers.addAll(getOnlineAllyMembers(clan).stream().filter(allymember -> + !allymember.isMutedAlly()).collect(Collectors.toList())); + receivers.addAll(clan.getOnlineMembers().stream().filter(allymember -> + !allymember.isMutedAlly()).collect(Collectors.toList())); + break; + case CLAN: + if (!plugin.getSettingsManager().is(CLANCHAT_ENABLE)) { + return; + } + + receivers.addAll(clan.getOnlineMembers().stream(). + filter(member -> !member.isMuted()). + collect(Collectors.toList())); + } + + SCMessage scMessage = new SCMessage(source, channel, clanPlayer, message, receivers); + + for (ChatHandler ch : handlers) { + if (ch.canHandle(source)) { + ch.sendMessage(scMessage); + } + } + } + + public String parseChatFormat(String format, SCMessage message) { + return parseChatFormat(format, message, new HashMap<>()); + } + + public String parseChatFormat(String format, SCMessage message, Map placeholders) { + SettingsManager sm = plugin.getSettingsManager(); + ClanPlayer sender = message.getSender(); + Channel channel = message.getChannel(); + + String leaderColor = sm.getColored(ConfigField.valueOf(message.getChannel() + "CHAT_LEADER_COLOR")); + String memberColor = sm.getColored(ConfigField.valueOf(message.getChannel() + "CHAT_MEMBER_COLOR")); + String trustedColor = sm.getColored(ConfigField.valueOf(message.getChannel() + "CHAT_TRUSTED_COLOR")); + + String rank = sender.getRankId().isEmpty() ? null : ChatUtils.parseColors(sender.getRankDisplayName()); + ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_RANK", + message.getSource() == SPIGOT ? message.getChannel() : message.getSource())); + String rankFormat = (rank != null) ? sm.getColored(configField).replace("%rank%", rank) : ""; + + if (placeholders != null) { + for (Map.Entry e : placeholders.entrySet()) { + format = format.replace("%" + e.getKey() + "%", e.getValue()); + } + } + + String parsedFormat = ChatUtils.parseColors(format) + .replace("%clan%", Objects.requireNonNull(sender.getClan()).getColorTag()) + .replace("%nick-color%", + (sender.isLeader() ? leaderColor : sender.isTrusted() ? trustedColor : memberColor)) + .replace("%player%", sender.getName()) + .replace("%rank%", rankFormat) + .replace("%message%", message.getContent()); + + return getPluginManager().getPlugin("PlaceholderAPI") != null ? + PlaceholderAPI.setPlaceholders(Bukkit.getOfflinePlayer(message.getSender().getUniqueId()), parsedFormat) + : parsedFormat; + } + + private void registerHandlers() { + Set> chatHandlers = + Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.chat.handlers", ChatHandler.class); + plugin.getLogger().log(Level.INFO, "Registering {0} chat handlers...", chatHandlers.size()); + + for (Class handler : chatHandlers) { + try { + handlers.add(handler.getConstructor().newInstance()); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + plugin.getLogger().log(Level.SEVERE, "Error while trying to register {0} handler: " + + ex.getMessage(), handler.getSimpleName()); + } + } + } + + private List getOnlineAllyMembers(Clan clan) { + return clan.getAllAllyMembers().stream(). + filter(allyPlayer -> allyPlayer.toPlayer() != null). + collect(Collectors.toList()); + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ClanManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ClanManager.java index 555b10b24..f34fbcdc8 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ClanManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ClanManager.java @@ -2,9 +2,9 @@ import com.cryptomorin.xseries.XMaterial; import net.sacredlabyrinth.phaed.simpleclans.*; -import net.sacredlabyrinth.phaed.simpleclans.events.ChatEvent; import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent; import net.sacredlabyrinth.phaed.simpleclans.events.CreateClanEvent; +import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration; import org.bukkit.Bukkit; @@ -15,7 +15,6 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,6 +25,8 @@ import java.util.*; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static org.bukkit.ChatColor.RED; /** * @author phaed @@ -72,7 +73,7 @@ public void addKill(Kill kill) { } //cleaning - final int delay = plugin.getSettingsManager().getDelayBetweenKills(); + final int delay = plugin.getSettingsManager().getInt(KDR_DELAY_BETWEEN_KILLS); long timePassed = oldKill.getTime().until(LocalDateTime.now(), ChronoUnit.MINUTES); if (timePassed >= delay) { iterator.remove(); @@ -97,7 +98,7 @@ public boolean isKillBeforeDelay(Kill kill) { for (Kill oldKill : list) { if (oldKill.getVictim().equals(kill.getVictim())) { - final int delay = plugin.getSettingsManager().getDelayBetweenKills(); + final int delay = plugin.getSettingsManager().getInt(KDR_DELAY_BETWEEN_KILLS); long timePassed = oldKill.getTime().until(kill.getTime(), ChronoUnit.MINUTES); if (timePassed < delay) { return true; @@ -130,7 +131,7 @@ public void importClanPlayer(ClanPlayer cp) { public void createClan(Player player, String colorTag, String name) { ClanPlayer cp = getCreateClanPlayer(player.getUniqueId()); - boolean verified = !plugin.getSettingsManager().isRequireVerification() || plugin.getPermissionsManager().has(player, "simpleclans.mod.verify"); + boolean verified = !plugin.getSettingsManager().is(REQUIRE_VERIFICATION) || plugin.getPermissionsManager().has(player, "simpleclans.mod.verify"); Clan clan = new Clan(colorTag, name, verified); clan.addPlayerToClan(cp); @@ -245,7 +246,7 @@ public List getAllClanPlayers() { * Gets the ClanPlayer data object if a player is currently in a clan, null * if he's not in a clan */ - public @Nullable ClanPlayer getClanPlayer(OfflinePlayer player) { + public @Nullable ClanPlayer getClanPlayer(@NotNull OfflinePlayer player) { return getClanPlayer(player.getUniqueId()); } @@ -253,7 +254,7 @@ public List getAllClanPlayers() { * Gets the ClanPlayer data object if a player is currently in a clan, null * if he's not in a clan */ - public @Nullable ClanPlayer getClanPlayer(Player player) { + public @Nullable ClanPlayer getClanPlayer(@NotNull Player player) { return getClanPlayer((OfflinePlayer) player); } @@ -311,6 +312,7 @@ public ClanPlayer getClanPlayer(String playerName) { * not currently in one, their data file persists and can be accessed. their * clan will be null though. */ + @Nullable public ClanPlayer getAnyClanPlayer(UUID playerUniqueId) { return clanPlayers.get(playerUniqueId.toString()); @@ -368,10 +370,10 @@ public ClanPlayer getCreateClanPlayer(String playerName) { * @param msg the message */ public void serverAnnounce(String msg) { - if (plugin.getSettingsManager().isDisableMessages()) { + if (plugin.getSettingsManager().is(DISABLE_MESSAGES)) { return; } - Collection players = Helper.getOnlinePlayers(); + Collection players = Bukkit.getOnlinePlayers(); for (Player player : players) { ChatBlock.sendMessage(player, ChatColor.DARK_GRAY + "* " + ChatColor.AQUA + msg); @@ -386,7 +388,7 @@ public void serverAnnounce(String msg) { public void updateDisplayName(@Nullable Player player) { // do not update displayname if in compat mode - if (plugin.getSettingsManager().isCompatMode()) { + if (plugin.getSettingsManager().is(CHAT_COMPATIBILITY_MODE)) { return; } @@ -394,10 +396,10 @@ public void updateDisplayName(@Nullable Player player) { return; } - if (plugin.getSettingsManager().isChatTags()) { + if (plugin.getSettingsManager().is(DISPLAY_CHAT_TAGS)) { String prefix = plugin.getPermissionsManager().getPrefix(player); //String suffix = plugin.getPermissionsManager().getSuffix(player); - String lastColor = plugin.getSettingsManager().isUseColorCodeFromPrefix() ? Helper.getLastColorCode(prefix) : ChatColor.WHITE + ""; + String lastColor = plugin.getSettingsManager().is(COLOR_CODE_FROM_PREFIX_FOR_NAME) ? ChatUtils.getLastColorCode(prefix) : ChatColor.WHITE + ""; String fullName = player.getName(); ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId()); @@ -517,7 +519,7 @@ public String getArmorString(PlayerInventory inv) { } else if (h.getType().equals(XMaterial.AIR.parseMaterial())) { out += ChatColor.BLACK + lang("armor.h", player); } else { - out += ChatColor.RED + lang("armor.h", player); + out += RED + lang("armor.h", player); } } ItemStack c = inv.getChestplate(); @@ -536,7 +538,7 @@ public String getArmorString(PlayerInventory inv) { } else if (c.getType().equals(XMaterial.AIR.parseMaterial())) { out += ChatColor.BLACK + lang("armor.c", player); } else { - out += ChatColor.RED + lang("armor.c", player); + out += RED + lang("armor.c", player); } } ItemStack l = inv.getLeggings(); @@ -574,7 +576,7 @@ public String getArmorString(PlayerInventory inv) { } else if (b.getType().equals(XMaterial.AIR.parseMaterial())) { out += ChatColor.BLACK + lang("armor.B", player); } else { - out += ChatColor.RED + lang("armor.B", player); + out += RED + lang("armor.B", player); } } @@ -589,7 +591,7 @@ public String getArmorString(PlayerInventory inv) { * Returns a formatted string detailing the players weapons */ public String getWeaponString(PlayerInventory inv) { - String headColor = plugin.getSettingsManager().getPageHeadingsColor(); + String headColor = plugin.getSettingsManager().getColored(PAGE_HEADINGS_COLOR); String out = ""; @@ -755,7 +757,7 @@ public String getHealthString(double health) { } else if (health >= 8) { out.append(ChatColor.GOLD); } else { - out.append(ChatColor.RED); + out.append(RED); } for (int i = 0; i < health; i++) { @@ -776,7 +778,7 @@ public String getHungerString(int health) { } else if (health >= 8) { out.append(ChatColor.GOLD); } else { - out.append(ChatColor.RED); + out.append(RED); } for (int i = 0; i < health; i++) { @@ -873,8 +875,8 @@ public void sortClansByKDR(List clans) { */ public void sortClansBySize(List clans) { clans.sort((c1, c2) -> { - Integer o1 = c1.getAllMembers().size(); - Integer o2 = c2.getAllMembers().size(); + Integer o1 = c1.getMembers().size(); + Integer o2 = c2.getMembers().size(); return o2.compareTo(o1); }); @@ -906,11 +908,11 @@ public void sortClanPlayersByLastSeen(List cps) { public long getMinutesBeforeRejoin(@NotNull ClanPlayer cp, @NotNull Clan clan) { SettingsManager settings = plugin.getSettingsManager(); - if (settings.isRejoinCooldown()) { + if (settings.is(ENABLE_REJOIN_COOLDOWN)) { Long resign = cp.getResignTime(clan.getTag()); if (resign != null) { long timePassed = Instant.ofEpochMilli(resign).until(Instant.now(), ChronoUnit.MINUTES); - int cooldown = settings.getRejoinCooldown(); + int cooldown = settings.getInt(REJOIN_COOLDOWN); if (timePassed < cooldown) { return cooldown - timePassed; } @@ -923,18 +925,18 @@ public long getMinutesBeforeRejoin(@NotNull ClanPlayer cp, @NotNull Clan clan) { * Purchase member fee set */ public boolean purchaseMemberFeeSet(Player player) { - if (!plugin.getSettingsManager().isePurchaseMemberFeeSet()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_MEMBER_FEE_SET)) { return true; } - double price = plugin.getSettingsManager().geteMemberFeeSetPrice(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_MEMBER_FEE_SET_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -946,18 +948,18 @@ public boolean purchaseMemberFeeSet(Player player) { * Purchase clan creation */ public boolean purchaseCreation(Player player) { - if (!plugin.getSettingsManager().isePurchaseCreation()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_CREATE)) { return true; } - double price = plugin.getSettingsManager().getCreationPrice(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_CREATION_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -969,18 +971,18 @@ public boolean purchaseCreation(Player player) { * Purchase invite */ public boolean purchaseInvite(Player player) { - if (!plugin.getSettingsManager().isePurchaseInvite()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_INVITE)) { return true; } - double price = plugin.getSettingsManager().getInvitePrice(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_INVITE_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -992,18 +994,18 @@ public boolean purchaseInvite(Player player) { * Purchase Home Teleport */ public boolean purchaseHomeTeleport(Player player) { - if (!plugin.getSettingsManager().isePurchaseHomeTeleport()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_HOME_TELEPORT)) { return true; } - double price = plugin.getSettingsManager().getHomeTeleportPrice(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_HOME_TELEPORT_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -1015,18 +1017,18 @@ public boolean purchaseHomeTeleport(Player player) { * Purchase Home Teleport Set */ public boolean purchaseHomeTeleportSet(Player player) { - if (!plugin.getSettingsManager().isePurchaseHomeTeleportSet()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_HOME_TELEPORT_SET)) { return true; } - double price = plugin.getSettingsManager().getHomeTeleportPriceSet(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_HOME_TELEPORT_SET_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -1038,18 +1040,18 @@ public boolean purchaseHomeTeleportSet(Player player) { * Purchase Reset Kdr */ public boolean purchaseResetKdr(Player player) { - if (!plugin.getSettingsManager().isePurchaseResetKdr()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_RESET_KDR)) { return true; } - double price = plugin.getSettingsManager().geteResetKdr(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_RESET_KDR_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -1062,24 +1064,27 @@ public boolean purchaseResetKdr(Player player) { */ public boolean purchaseHomeRegroup(Player player) { ClanPlayer cp = plugin.getClanManager().getClanPlayer(player); + if (cp == null) { + return false; + } - if (!plugin.getSettingsManager().isePurchaseHomeRegroup()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_HOME_REGROUP)) { return true; } - double price = plugin.getSettingsManager().getHomeRegroupPrice(); - Clan clan = Objects.requireNonNull(cp.getClan()); - if (!plugin.getSettingsManager().iseUniqueTaxOnRegroup()) { + double price = plugin.getSettingsManager().getDouble(ECONOMY_REGROUP_PRICE); + Clan clan = Objects.requireNonNull(cp.getClan(), "Clan cannot be null"); + if (!plugin.getSettingsManager().is(ECONOMY_UNIQUE_TAX_ON_REGROUP)) { price = price * VanishUtils.getNonVanished(player, clan).size(); } - if (plugin.getSettingsManager().iseIssuerPaysRegroup()) { + if (plugin.getSettingsManager().is(ECONOMY_ISSUER_PAYS_REGROUP)) { if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -1105,18 +1110,18 @@ public boolean purchaseHomeRegroup(Player player) { * Purchase clan verification */ public boolean purchaseVerification(Player player) { - if (!plugin.getSettingsManager().isePurchaseVerification()) { + if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_VERIFY)) { return true; } - double price = plugin.getSettingsManager().getVerificationPrice(); + double price = plugin.getSettingsManager().getDouble(ECONOMY_VERIFICATION_PRICE); if (plugin.getPermissionsManager().hasEconomy()) { if (plugin.getPermissionsManager().playerHasMoney(player, price)) { plugin.getPermissionsManager().playerChargeMoney(player, price); - player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price)); + player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price)); } else { - player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player)); + player.sendMessage(RED + lang("not.sufficient.money", player)); return false; } } @@ -1124,182 +1129,6 @@ public boolean purchaseVerification(Player player) { return true; } - /** - * Processes a clan chat command - */ - public void processClanChat(Player player, String tag, String msg) { - Clan clan = plugin.getClanManager().getClan(tag); - - if (clan == null || !clan.isMember(player)) { - return; - } - - processClanChat(player, msg); - } - - /** - * Processes a clan chat command - */ - public void processClanChat(Player player, final String msg) { - final ClanPlayer cp = plugin.getClanManager().getClanPlayer(player); - - if (cp == null) { - return; - } - - String[] split = msg.split(" "); - - if (split.length == 0) { - return; - } - - String command = split[0]; - - if (command.equals(lang("join", player))) { - cp.setChannel(ClanPlayer.Channel.CLAN); - plugin.getStorageManager().updateClanPlayer(cp); - ChatBlock.sendMessage(player, lang("joined.clan.chat", player)); - } else if (command.equals(lang("leave", player))) { - cp.setChannel(ClanPlayer.Channel.NONE); - plugin.getStorageManager().updateClanPlayer(cp); - ChatBlock.sendMessage(player, lang("left.clan.chat", player)); - } else if (command.equals(lang("mute", player))) { - if (!cp.isMuted()) { - cp.setMuted(true); - ChatBlock.sendMessage(player, lang("muted.clan.chat", player)); - } else { - cp.setMuted(false); - ChatBlock.sendMessage(player, lang("unmuted.clan.chat", player)); - } - } else { - final List receivers = new LinkedList<>(); - for (ClanPlayer p : cp.getClan().getOnlineMembers()) { - if (!p.isMuted()) { - receivers.add(p); - } - } - - new BukkitRunnable() { - @Override - public void run() { - ChatEvent ce = new ChatEvent(msg, cp, receivers, ChatEvent.Type.CLAN); - Bukkit.getServer().getPluginManager().callEvent(ce); - - if (ce.isCancelled()) { - return; - } - - String message = Helper.formatClanChat(cp, ce.getMessage(), ce.getPlaceholders()); - String eyeMessage = Helper.formatSpyClanChat(cp, message); - plugin.getServer().getConsoleSender().sendMessage(eyeMessage); - - for (ClanPlayer p : ce.getReceivers()) { - ChatBlock.sendMessage(p.toPlayer(), message); - } - - sendToAllSeeing(eyeMessage, ce.getReceivers()); - } - }.runTask(plugin); - } - } - - public void sendToAllSeeing(String msg, List cps) { - Collection players = Helper.getOnlinePlayers(); - - for (Player player : players) { - if (plugin.getPermissionsManager().has(player, "simpleclans.admin.all-seeing-eye")) { - boolean alreadySent = false; - - ClanPlayer cp = plugin.getClanManager().getClanPlayer(player); - - if (cp != null && cp.isMuted()) { - continue; - } - - for (ClanPlayer cpp : cps) { - if (cpp.getName().equalsIgnoreCase(player.getName())) { - alreadySent = true; - } - } - - if (!alreadySent) { - ChatBlock.sendMessage(player, msg); - } - } - } - } - - /** - * Processes a ally chat command - */ - public void processAllyChat(Player player, final String msg) { - final ClanPlayer cp = getClanPlayer(player); - - if (cp == null) { - return; - } - - String[] split = msg.split(" "); - - if (split.length == 0) { - return; - } - - String command = split[0]; - - if (command.equals(lang("join", player))) { - cp.setChannel(ClanPlayer.Channel.ALLY); - plugin.getStorageManager().updateClanPlayer(cp); - ChatBlock.sendMessage(player, lang("joined.ally.chat", player)); - } else if (command.equals(lang("leave", player))) { - cp.setChannel(ClanPlayer.Channel.NONE); - plugin.getStorageManager().updateClanPlayer(cp); - ChatBlock.sendMessage(player, lang("left.ally.chat", player)); - } else if (command.equals(lang("mute", player))) { - if (!cp.isMutedAlly()) { - cp.setMutedAlly(true); - ChatBlock.sendMessage(player, lang("muted.ally.chat", player)); - } else { - cp.setMutedAlly(false); - ChatBlock.sendMessage(player, lang("unmuted.ally.chat", player)); - } - } else { - final List receivers = new LinkedList<>(); - Set allies = cp.getClan().getAllAllyMembers(); - allies.addAll(cp.getClan().getMembers()); - for (ClanPlayer ally : allies) { - if (ally.isMutedAlly()) { - continue; - } - if (player.getUniqueId().equals(ally.getUniqueId())) { - continue; - } - receivers.add(ally); - } - - new BukkitRunnable() { - @Override - public void run() { - ChatEvent ce = new ChatEvent(msg, cp, receivers, ChatEvent.Type.ALLY); - Bukkit.getServer().getPluginManager().callEvent(ce); - - if (ce.isCancelled()) { - return; - } - - String message = Helper.formatAllyChat(cp, ce.getMessage(), ce.getPlaceholders()); - plugin.getLogger().info(message); - - ChatBlock.sendMessage(cp, message); - - for (ClanPlayer p : ce.getReceivers()) { - ChatBlock.sendMessage(p, message); - } - } - }.runTask(plugin); - } - } - /** * Processes a global chat command */ diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/PermissionsManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/PermissionsManager.java index f094faf56..4e5242507 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/PermissionsManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/PermissionsManager.java @@ -17,6 +17,7 @@ import java.util.Map; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ENABLE_AUTO_GROUPS; /** * @author phaed @@ -113,7 +114,7 @@ public void addPlayerPermissions(@Nullable ClanPlayer cp) { for (String perm : getPermissions(clan)) { permAttaches.get(player).setPermission(perm, true); } - if (plugin.getSettingsManager().isAutoGroupGroupName()) { + if (plugin.getSettingsManager().is(ENABLE_AUTO_GROUPS)) { permAttaches.get(player).setPermission("group." + clan.getTag(), true); } player.recalculatePermissions(); @@ -387,7 +388,7 @@ public boolean has(Player player, RankPermission permission, boolean notify) { * */ public void addClanPermissions(ClanPlayer cp) { - if (!plugin.getSettingsManager().isEnableAutoGroups()) { + if (!plugin.getSettingsManager().is(ENABLE_AUTO_GROUPS)) { return; } @@ -433,7 +434,7 @@ public void addClanPermissions(ClanPlayer cp) { * */ public void removeClanPermissions(ClanPlayer cp) { - if (!plugin.getSettingsManager().isEnableAutoGroups()) { + if (!plugin.getSettingsManager().is(ENABLE_AUTO_GROUPS)) { return; } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java index 3050d3007..5c84b80cd 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java @@ -22,6 +22,7 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class ProtectionManager { @@ -38,7 +39,7 @@ public ProtectionManager() { settingsManager = plugin.getSettingsManager(); clanManager = plugin.getClanManager(); logger = plugin.getLogger(); - if (!settingsManager.isWarEnabled() && !settingsManager.isLandSharing()) { + if (!settingsManager.is(ENABLE_WAR) && !settingsManager.is(LAND_SHARING)) { return; } //running on next tick, so all plugins are already loaded @@ -48,7 +49,7 @@ public ProtectionManager() { public void registerListeners() { landProtection = new LandProtection(plugin); - if (!settingsManager.isWarEnabled() && !settingsManager.isLandSharing()) { + if (!settingsManager.is(ENABLE_WAR) && !settingsManager.is(LAND_SHARING)) { return; } landProtection.registerListeners(); @@ -141,7 +142,7 @@ public boolean addWar(@NotNull ClanPlayer requester, Clan requestClan, Clan targ requestClan.addWarringClan(requester, targetClan); targetClan.addWarringClan(requester, requestClan); - wars.put(war, scheduleTask(war, settingsManager.getWarNormalExpirationTime())); + wars.put(war, scheduleTask(war, settingsManager.getMinutes(WAR_NORMAL_EXPIRATION_TIME))); return true; } @@ -199,7 +200,7 @@ public void removeWar(@Nullable War war, @NotNull WarEndEvent.Reason reason) { } private void clearWars() { - if (!settingsManager.isWarEnabled()) { + if (!settingsManager.is(ENABLE_WAR)) { return; } for (Clan clan : clanManager.getClans()) { @@ -210,7 +211,7 @@ private void clearWars() { } private boolean isSameClanAndAllowed(Action action, UUID owner, Player involved, String landId) { - if (!settingsManager.isLandSharing()) { + if (!settingsManager.is(LAND_SHARING)) { return false; } ClanPlayer cp = clanManager.getCreateClanPlayer(owner); @@ -222,7 +223,7 @@ private boolean isSameClanAndAllowed(Action action, UUID owner, Player involved, } private boolean isWarringAndAllowed(@NotNull Action action, @NotNull UUID owner, @NotNull Player involved) { - if (!settingsManager.isActionAllowedInWar(action) || !settingsManager.isWarEnabled()) { + if (!settingsManager.isActionAllowedInWar(action) || !settingsManager.is(ENABLE_WAR)) { return false; } Clan ownerClan = clanManager.getClanByPlayerUniqueId(owner); @@ -234,7 +235,7 @@ private boolean isWarringAndAllowed(@NotNull Action action, @NotNull UUID owner, } private void registerProviders() { - for (String className : settingsManager.getProtectionProviders()) { + for (String className : settingsManager.getStringList(LAND_PROTECTION_PROVIDERS)) { Object instance = null; try { Class clazz = getProviderClass(className); @@ -265,7 +266,7 @@ public void registerProvider(@NotNull ProtectionProvider provider) { provider.setup(); } catch (LinkageError | Exception throwable) { logger.log(Level.WARNING, String.format("Error registering provider %s", providerName)); - if (settingsManager.isDebugging()) { + if (settingsManager.is(DEBUG)) { throwable.printStackTrace(); } return; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/RequestManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/RequestManager.java index 52c52fbdc..5eef3a703 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/RequestManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/RequestManager.java @@ -17,6 +17,7 @@ import java.util.*; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.REQUEST_FREQUENCY; /** * @author phaed @@ -416,7 +417,7 @@ public void run() { ask(req); req.incrementAskCount(); } - }}.runTaskTimerAsynchronously(plugin, 0, plugin.getSettingsManager().getRequestFrequencySecs() * 20L); + }}.runTaskTimerAsynchronously(plugin, 0, plugin.getSettingsManager().getSeconds(REQUEST_FREQUENCY)); } /** diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java index 5593d075e..bb248681b 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java @@ -1,531 +1,124 @@ package net.sacredlabyrinth.phaed.simpleclans.managers; import com.cryptomorin.xseries.XMaterial; -import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; -import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType; -import org.bukkit.Bukkit; import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.event.EventPriority; import org.bukkit.plugin.Plugin; -import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; import java.util.*; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType; +import static org.bukkit.Bukkit.getPluginManager; + /** * @author phaed */ public final class SettingsManager { - private boolean enableGUI; - private boolean disableMessages; - private String clanChatRankColor; - private boolean tagBasedClanChat; - private boolean teleportOnSpawn; - private boolean dropOnHome; - private boolean keepOnHome; - private boolean debugging; + private final SimpleClans plugin; - private boolean pvpOnlywhileInWar; - private boolean useColorCodeFromPrefix; - private boolean confirmationForPromote; - private boolean confirmationForDemote; - private double percentageOnlineToDemote; - private boolean globalff; - private boolean allowResetKdr; - private boolean showUnverifiedOnList; - private boolean requireVerification; - private boolean rejoinCooldownEnabled; - private boolean acceptOtherAlphabetsLettersOnTag; - private int minToVerify; - private int rejoinCooldown; - private String listDefaultOrderBy; - private final List itemsList = new ArrayList<>(); - private List blacklistedWorlds; - private List bannedPlayers; - private List disallowedWords; - private List disallowedColors; - private List unRivableClans; - private int rivalLimitPercent; - private boolean ePurchaseCreation; - private boolean ePurchaseVerification; - private boolean ePurchaseInvite; - private boolean ePurchaseHomeTeleport; - private boolean ePurchaseHomeRegroup; - private boolean eUniqueTaxOnRegroup; - private boolean eIssuerPaysRegroup; - private boolean ePurchaseHomeTeleportSet; - private boolean ePurchaseResetKdr; - private boolean eMemberFee; - private boolean ePurchaseMemberFeeSet; - private boolean eClanUpkeepEnabled; - private boolean eMultiplyUpkeepBySize; - private boolean eChargeUpkeepOnlyIfMemberFeeEnabled; - private double eCreationPrice; - private double eVerificationPrice; - private double eInvitePrice; - private double eHomeTeleportPrice; - private double eHomeRegroupPrice; - private double eHomeTeleportPriceSet; - private double eResetKdr; - private double eMaxMemberFee; - private double eMemberFeeSetPrice; - private int eMemberFeeLastMinuteChangeInterval; - private double eClanUpkeep; - private String serverName; - private boolean chatTags; - private int purgeClan; - private int purgeUnverified; - private int purgePlayers; - private int requestFreqencySecs; - private String requestMessageColor; - private int pageSize; - private String pageSep; - private String pageHeadingsColor; - private String pageSubTitleColor; - private String pageLeaderColor; - private String pageTrustedColor; - private String pageUnTrustedColor; - private boolean bbShowOnLogin; - private int bbSize; - private int bbLoginSize; - private String bbColor; - private String bbAccentColor; - private String commandClan; - private String commandAlly; - private String commandGlobal; - private String commandMore; - private String commandDeny; - private String commandAccept; - private String commandClanChat; - private int clanMinSizeToAlly; - private int clanMinSizeToRival; - private int clanMinLength; - private int clanMaxAlliances; - private int clanMaxLength; - private int clanMaxDescriptionLength; - private int clanMinDescriptionLength; - private String pageClanNameColor; - private int tagMinLength; - private int tagMaxLength; - private String tagDefaultColor; - private String tagSeparator; - private String tagSeparatorColor; - private String tagSeparatorLeaderColor; - private String tagBracketLeft; - private String tagBracketRight; - private String tagBracketColor; - private String tagBracketLeaderColor; - private boolean clanTrustByDefault; - private boolean allyChatEnable; - private String allyChatFormat; - private String allyChatRank; - private String allyChatLeaderColor; - private String allyChatTrustedColor; - private String allyChatMemberColor; - private String allyChatMessageColor; - private String allyChatNameColor; - private String allyChatTagColor; - private String allyChatTagBracketLeft; - private String allyChatTagBracketRight; - private String allyChatBracketColor; - private String allyChatPlayerBracketLeft; - private String allyChatPlayerBracketRight; - private boolean clanChatEnable; - private String clanChatFormat; - private String clanChatRank; - private String clanChatLeaderColor; - private String clanChatTrustedColor; - private String clanChatMemberColor; - private String clanChatAnnouncementColor; - private String clanChatMessageColor; - private String clanChatNameColor; - private String clanChatTagBracketLeft; - private String clanChatTagBracketRight; - private String clanChatBracketColor; - private String clanChatPlayerBracketLeft; - private String clanChatPlayerBracketRight; - private int tasksCollectUpkeepHour; - private int tasksCollectUpkeepMinute; - private int tasksCollectUpkeepWarningHour; - private int tasksCollectUpkeepWarningMinute; - private int tasksCollectFeeHour; - private int tasksCollectFeeMinute; - private boolean clanFFOnByDefault; - private double kwRival; - private double kwNeutral; - private double kwCivilian; - private boolean useMysql; - private String host; - private int port; - private String database; - private String username; - private String password; - private boolean safeCivilians; - private final File configFile; + private final FileConfiguration config; - private boolean compatMode; - private boolean homebaseSetOnce; - private int waitSecs; - private boolean enableAutoGroups; - private boolean denySameIPKills; - private boolean moneyperkill; - private double KDRMultipliesPerKill; - private boolean teleportBlocks; - private boolean autoGroupGroupName; - private boolean tamableMobsSharing; - private boolean allowReGroupCommand; - private boolean useThreads; - private boolean useBungeeCord; - private boolean forceCommandPriority; - private int maxAsksPerRequest; - private int maxMembers; - private boolean maxKillsPerVictimEnabled; - private int maxKillsPerVictim; - private boolean delayBetweenKillsEnabled; - private int delayBetweenKills; - private String language; - private boolean languagePerPlayer; - private boolean savePeriodically; - private boolean cachePlayerHeads; - private int saveInterval; - private String rankingType; - private int loreLength; - private boolean warEnabled; - private boolean landSharing; - private List protectionProviders; - private boolean onlyLeadersCanCreateLands; - private boolean onlyOneLandPerClan; - private boolean setBaseOnlyInLand; + private final File configFile; - /** - * - */ - public SettingsManager() { - plugin = SimpleClans.getInstance(); - config = plugin.getConfig(); + public SettingsManager(SimpleClans plugin) { + this.plugin = plugin; + this.config = plugin.getConfig(); config.options().copyDefaults(true); configFile = new File(plugin.getDataFolder() + File.separator + "config.yml"); loadAndSave(); - warnAboutAutoGroupGroupName(); - } - - /** - * Load the configuration - */ - - public void loadAndSave() { - if (configFile.exists()) { - try { - config.load(configFile); - } catch (IOException | InvalidConfigurationException ex) { - plugin.getLogger().severe("Error while trying to load plugin's configuration: " + ex.getMessage()); - } - } - - enableGUI = getConfig().getBoolean("settings.enable-gui"); - disableMessages = getConfig().getBoolean("settings.disable-messages"); - teleportOnSpawn = getConfig().getBoolean("settings.teleport-home-on-spawn"); - dropOnHome = getConfig().getBoolean("settings.drop-items-on-clan-home"); - keepOnHome = getConfig().getBoolean("settings.keep-items-on-clan-home"); - for (String material : getConfig().getStringList("settings.item-list")) { - Optional x = XMaterial.matchXMaterial(material); - if (x.isPresent()) { - itemsList.add(x.get().parseMaterial()); - } else { - plugin.getLogger().warning("Error with Material: " + material); - } - } - debugging = getConfig().getBoolean("settings.show-debug-info"); - pvpOnlywhileInWar = getConfig().getBoolean("settings.pvp-only-while-at-war"); - enableAutoGroups = getConfig().getBoolean("settings.enable-auto-groups"); - useColorCodeFromPrefix = getConfig().getBoolean("settings.use-colorcode-from-prefix-for-name"); - bannedPlayers = getConfig().getStringList("settings.banned-players"); - allowResetKdr = getConfig().getBoolean("settings.allow-reset-kdr"); - compatMode = getConfig().getBoolean("settings.chat-compatibility-mode"); - disallowedColors = getConfig().getStringList("settings.disallowed-tag-colors"); - blacklistedWorlds = getConfig().getStringList("settings.blacklisted-worlds"); - disallowedWords = getConfig().getStringList("settings.disallowed-tags"); - unRivableClans = getConfig().getStringList("settings.unrivable-clans"); - showUnverifiedOnList = getConfig().getBoolean("settings.show-unverified-on-list"); - requireVerification = getConfig().getBoolean("settings.new-clan-verification-required"); - rejoinCooldown = getConfig().getInt("settings.rejoin-cooldown"); - rejoinCooldownEnabled = getConfig().getBoolean("settings.rejoin-cooldown-enabled"); - acceptOtherAlphabetsLettersOnTag = getConfig().getBoolean("settings.accept-other-alphabets-letters-on-tag"); - minToVerify = getConfig().getInt("clan.min-to-verify", 1); - rankingType = getConfig().getString("settings.ranking-type", "DENSE"); - listDefaultOrderBy = getConfig().getString("settings.list-default-order-by", "kdr"); - serverName = getConfig().getString("settings.server-name", "SimpleClans"); - chatTags = getConfig().getBoolean("settings.display-chat-tags"); - rivalLimitPercent = getConfig().getInt("settings.rival-limit-percent"); - ePurchaseCreation = getConfig().getBoolean("economy.purchase-clan-create"); - ePurchaseVerification = getConfig().getBoolean("economy.purchase-clan-verify"); - ePurchaseInvite = getConfig().getBoolean("economy.purchase-clan-invite"); - ePurchaseHomeTeleport = getConfig().getBoolean("economy.purchase-home-teleport"); - ePurchaseHomeRegroup = getConfig().getBoolean("economy.purchase-home-regroup"); - ePurchaseHomeTeleportSet = getConfig().getBoolean("economy.purchase-home-teleport-set"); - ePurchaseResetKdr = getConfig().getBoolean("economy.purchase-reset-kdr"); - ePurchaseMemberFeeSet = getConfig().getBoolean("economy.purchase-member-fee-set"); - eMemberFeeSetPrice = getConfig().getDouble("economy.member-fee-set-price"); - eMemberFeeLastMinuteChangeInterval = getConfig().getInt("member-fee-last-minute-change-interval", 8); - eResetKdr = getConfig().getDouble("economy.reset-kdr-price"); - eCreationPrice = getConfig().getDouble("economy.creation-price"); - eVerificationPrice = getConfig().getDouble("economy.verification-price"); - eInvitePrice = getConfig().getDouble("economy.invite-price"); - eHomeTeleportPrice = getConfig().getDouble("economy.home-teleport-price"); - eHomeRegroupPrice = getConfig().getDouble("economy.home-regroup-price"); - eUniqueTaxOnRegroup = getConfig().getBoolean("economy.unique-tax-on-regroup"); - eIssuerPaysRegroup = getConfig().getBoolean("economy.issuer-pays-regroup"); - eHomeTeleportPriceSet = getConfig().getDouble("economy.home-teleport-set-price"); - eMaxMemberFee = getConfig().getDouble("economy.max-member-fee"); - eClanUpkeep = getConfig().getDouble("economy.upkeep"); - eClanUpkeepEnabled = getConfig().getBoolean("economy.upkeep-enabled"); - eChargeUpkeepOnlyIfMemberFeeEnabled = getConfig().getBoolean("economy.charge-upkeep-only-if-member-fee-enabled"); - eMultiplyUpkeepBySize = getConfig().getBoolean("economy.multiply-upkeep-by-clan-size"); - eMemberFee = getConfig().getBoolean("economy.member-fee-enabled"); - purgeClan = getConfig().getInt("purge.inactive-clan-days"); - purgeUnverified = getConfig().getInt("purge.unverified-clan-days"); - purgePlayers = getConfig().getInt("purge.inactive-player-data-days"); - requestFreqencySecs = getConfig().getInt("request.ask-frequency-secs"); - requestMessageColor = getConfig().getString("request.message-color"); - setMaxAsksPerRequest(getConfig().getInt("request.max-asks-per-request")); - pageSize = getConfig().getInt("page.size"); - pageSep = getConfig().getString("page.separator"); - pageSubTitleColor = getConfig().getString("page.subtitle-color"); - pageHeadingsColor = getConfig().getString("page.headings-color"); - pageLeaderColor = getConfig().getString("page.leader-color"); - pageTrustedColor = getConfig().getString("page.trusted-color"); - pageUnTrustedColor = getConfig().getString("page.untrusted-color"); - pageClanNameColor = getConfig().getString("page.clan-name-color"); - bbShowOnLogin = getConfig().getBoolean("bb.show-on-login"); - bbSize = getConfig().getInt("bb.size"); - bbLoginSize = getConfig().getInt("bb.login-size", bbSize); - bbColor = getConfig().getString("bb.color"); - bbAccentColor = getConfig().getString("bb.accent-color"); - commandClan = getConfig().getString("commands.clan", "clan"); - commandAlly = getConfig().getString("commands.ally", "ally"); - commandGlobal = getConfig().getString("commands.global", "global"); - commandMore = getConfig().getString("commands.more", "more"); - commandDeny = getConfig().getString("commands.deny", "deny"); - commandAccept = getConfig().getString("commands.accept", "accept"); - commandClanChat = getConfig().getString("commands.clan_chat", "."); - forceCommandPriority = getConfig().getBoolean("commands.force-priority"); - homebaseSetOnce = getConfig().getBoolean("clan.homebase-can-be-set-only-once"); - waitSecs = getConfig().getInt("clan.homebase-teleport-wait-secs"); - confirmationForPromote = getConfig().getBoolean("clan.confirmation-for-demote"); - confirmationForDemote = getConfig().getBoolean("clan.confirmation-for-promote"); - percentageOnlineToDemote = getConfig().getDouble("clan.percentage-online-to-demote"); - clanTrustByDefault = getConfig().getBoolean("clan.trust-members-by-default"); - clanMinSizeToAlly = getConfig().getInt("clan.min-size-to-set-ally"); - clanMinSizeToRival = getConfig().getInt("clan.min-size-to-set-rival"); - clanMinLength = getConfig().getInt("clan.min-length"); - clanMaxAlliances = getConfig().getInt("clan.max-alliances"); - clanMaxLength = getConfig().getInt("clan.max-length"); - clanMaxDescriptionLength = getConfig().getInt("clan.max-description-length"); - clanMinDescriptionLength = getConfig().getInt("clan.min-description-length"); - clanFFOnByDefault = getConfig().getBoolean("clan.ff-on-by-default"); - tagMinLength = getConfig().getInt("tag.min-length"); - tagMaxLength = getConfig().getInt("tag.max-length"); - tagDefaultColor = getConfig().getString("tag.default-color"); - tagSeparator = getConfig().getString("tag.separator.char"); - tagSeparatorColor = getConfig().getString("tag.separator.color"); - tagSeparatorLeaderColor = getConfig().getString("tag.separator.leader-color"); - tagBracketColor = getConfig().getString("tag.bracket.color"); - tagBracketLeaderColor = getConfig().getString("tag.bracket.leader-color"); - tagBracketLeft = getConfig().getString("tag.bracket.left"); - tagBracketRight = getConfig().getString("tag.bracket.right"); - allyChatEnable = getConfig().getBoolean("allychat.enable"); - allyChatFormat = getConfig().getString("allychat.format"); - allyChatRank = getConfig().getString("allychat.rank"); - allyChatLeaderColor = getConfig().getString("allychat.leader-color"); - allyChatTrustedColor = getConfig().getString("allychat.trusted-color"); - allyChatMemberColor = getConfig().getString("allychat.member-color"); - allyChatMessageColor = getConfig().getString("allychat.message-color"); - allyChatTagColor = getConfig().getString("allychat.tag-color"); - allyChatNameColor = getConfig().getString("allychat.name-color"); - allyChatBracketColor = getConfig().getString("allychat.tag-bracket.color"); - allyChatTagBracketLeft = getConfig().getString("allychat.tag-bracket.left"); - allyChatTagBracketRight = getConfig().getString("allychat.tag-bracket.right"); - allyChatPlayerBracketLeft = getConfig().getString("allychat.player-bracket.left"); - allyChatPlayerBracketRight = getConfig().getString("allychat.player-bracket.right"); - clanChatEnable = getConfig().getBoolean("clanchat.enable"); - clanChatFormat = getConfig().getString("clanchat.format"); - clanChatRank = getConfig().getString("clanchat.rank"); - clanChatLeaderColor = getConfig().getString("clanchat.leader-color"); - clanChatTrustedColor = getConfig().getString("clanchat.trusted-color"); - clanChatMemberColor = getConfig().getString("clanchat.member-color"); - tagBasedClanChat = getConfig().getBoolean("clanchat.tag-based-clan-chat"); - clanChatAnnouncementColor = getConfig().getString("clanchat.announcement-color"); - clanChatMessageColor = getConfig().getString("clanchat.message-color"); - clanChatNameColor = getConfig().getString("clanchat.name-color"); - clanChatRankColor = getConfig().getString("clanchat.rank.color"); - clanChatBracketColor = getConfig().getString("clanchat.tag-bracket.color"); - clanChatTagBracketLeft = getConfig().getString("clanchat.tag-bracket.left"); - clanChatTagBracketRight = getConfig().getString("clanchat.tag-bracket.right"); - clanChatPlayerBracketLeft = getConfig().getString("clanchat.player-bracket.left"); - clanChatPlayerBracketRight = getConfig().getString("clanchat.player-bracket.right"); - tasksCollectFeeHour = getConfig().getInt("tasks.collect-fee.hour"); - tasksCollectFeeMinute = getConfig().getInt("tasks.collect-fee.minute"); - tasksCollectUpkeepHour = getConfig().getInt("tasks.collect-upkeep.hour"); - tasksCollectUpkeepMinute = getConfig().getInt("tasks.collect-upkeep.minute"); - tasksCollectUpkeepWarningHour = getConfig().getInt("tasks.collect-upkeep-warning.hour"); - tasksCollectUpkeepWarningMinute = getConfig().getInt("tasks.collect-upkeep-warning.minute"); - kwRival = getConfig().getDouble("kill-weights.rival"); - kwNeutral = getConfig().getDouble("kill-weights.neutral"); - kwCivilian = getConfig().getDouble("kill-weights.civilian"); - denySameIPKills = getConfig().getBoolean("kill-weights.deny-same-ip-kills"); - useMysql = getConfig().getBoolean("mysql.enable"); - host = getConfig().getString("mysql.host"); - port = getConfig().getInt("mysql.port"); - database = getConfig().getString("mysql.database"); - username = getConfig().getString("mysql.username"); - password = getConfig().getString("mysql.password"); - port = getConfig().getInt("mysql.port"); - safeCivilians = getConfig().getBoolean("safe-civilians"); - moneyperkill = getConfig().getBoolean("economy.money-per-kill"); - KDRMultipliesPerKill = getConfig().getDouble("economy.money-per-kill-kdr-multipier"); - teleportBlocks = getConfig().getBoolean("settings.teleport-blocks"); - language = getConfig().getString("settings.language", ""); - languagePerPlayer = getConfig().getBoolean("settings.user-language-selector", true); - autoGroupGroupName = getConfig().getBoolean("permissions.auto-group-groupname"); - tamableMobsSharing = getConfig().getBoolean("settings.tameable-mobs-sharing"); - allowReGroupCommand = getConfig().getBoolean("settings.allow-regroup-command"); - loreLength = getConfig().getInt("settings.lore-length", 38); - savePeriodically = getConfig().getBoolean("performance.save-periodically"); - saveInterval = getConfig().getInt("performance.save-interval"); - useThreads = getConfig().getBoolean("performance.use-threads"); - useBungeeCord = getConfig().getBoolean("performance.use-bungeecord"); - cachePlayerHeads = getConfig().getBoolean("performance.cache-player-heads"); - maxMembers = getConfig().getInt("clan.max-members"); - maxKillsPerVictim = getConfig().getInt("kdr-grinding-prevention.max-kills-per-victim"); - maxKillsPerVictimEnabled = getConfig().getBoolean("kdr-grinding-prevention.enable-max-kills"); - delayBetweenKills = getConfig().getInt("kdr-grinding-prevention.delay-between-kills"); - delayBetweenKillsEnabled = getConfig().getBoolean("kdr-grinding-prevention.enable-kill-delay"); - warEnabled = getConfig().getBoolean("war-and-protection.war-enabled", false); - landSharing = getConfig().getBoolean("war-and-protection.land-sharing", true); - protectionProviders = getConfig().getStringList("war-and-protection.protection-providers"); - onlyLeadersCanCreateLands = getConfig().getBoolean("war-and-protection.land-creation.only-leaders", false); - onlyOneLandPerClan = getConfig().getBoolean("war-and-protection.land-creation.only-one-per-clan", false); - setBaseOnlyInLand = getConfig().getBoolean("war-and-protection.set-base-only-in-land", false); - - // migrate from old way of adding ports - if (database.contains(":")) { - String[] strings = database.split(":"); - database = strings[0]; - port = Integer.parseInt(strings[1]); - } - - save(); + warnAboutPluginDependencies(); } - public void save() { - try { - config.save(configFile); - } catch (IOException ex) { - plugin.getLogger().severe("Error while trying to save plugin's configuration: " + ex.getMessage()); - } - } - - private void warnAboutAutoGroupGroupName() { - Plugin luckPerms = Bukkit.getServer().getPluginManager().getPlugin("LuckPerms"); - if (luckPerms != null && autoGroupGroupName) { - plugin.getLogger().warning("LuckPerms was found and the setting auto-group-groupname is enabled."); - plugin.getLogger().warning("Be careful with that as players will be automatically added in the group" + - " that matches their clan tag."); - } - } - - public boolean isBankLogEnabled() { - return getConfig().getBoolean("economy.bank-log.enable", false); - } - - public boolean isWarRequestEnabled() { - return getConfig().getBoolean("war-and-protection.war-start.request-enabled", true); - } - - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - public boolean isWarEnabled() { - return warEnabled; + public void set(ConfigField field, T value) { + config.set(field.path, value); } - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - public boolean isLandSharing() { - return landSharing; + public int getInt(ConfigField field) { + return config.getInt(field.path, (Integer) field.defaultValue); } - public boolean isEditAllLands() { - return getConfig().getBoolean("war-and-protection.edit-all-lands", false); + public double getDouble(ConfigField field) { + return config.getDouble(field.path, (Double) field.defaultValue); } - public int getWarNormalExpirationTime() { - return getConfig().getInt("war-and-protection.war-normal-expiration-time", 60) * 60 * 20; + public List getStringList(ConfigField field) { + return config.getStringList(field.path); } - public int getWarDisconnectExpirationTime() { - return getConfig().getInt("war-and-protection.war-disconnect-expiration-time", 10) * 60 * 20; + public String getString(ConfigField field) { + return config.getString(field.path, String.valueOf(field.defaultValue)); } - public List getProtectionProviders() { - return protectionProviders; + public String getColored(ConfigField field) { + String value = getString(field); + return (value.length() == 1) ? ChatUtils.getColorByChar(value.charAt(0)) : ChatUtils.parseColors(value); } - public EventPriority getWarListenerPriority() { - return EventPriority.valueOf(getConfig().getString("war-and-protection.listeners.priority", "HIGHEST")); + public int getMinutes(ConfigField field) { + int value = getInt(field); + return (value >= 1) ? value * 20 * 60 : (int) field.defaultValue * 20 * 60; } - public List getIgnoredList(ProtectionManager.Action action) { - return getConfig().getStringList("war-and-protection.listeners.ignored-list." + action.name()); + public int getSeconds(ConfigField field) { + int value = getInt(field); + return (value >= 1) ? value * 20 : (int) field.defaultValue * 20; } - public boolean isActionAllowedInWar(@NotNull ProtectionManager.Action action) { - return getConfig().getBoolean("war-and-protection.war-actions." + action.name(), false); - } - - public boolean isOnlyLeadersCanCreateLands() { - return onlyLeadersCanCreateLands; + public double getPercent(ConfigField field) { + double value = getDouble(field); + return (getDouble(field) >= 0 || getDouble(field) <= 100) ? value : (double) field.defaultValue; } - public boolean isOnlyOneLandPerClan() { - return onlyOneLandPerClan; + public boolean is(ConfigField field) { + return config.getBoolean(field.path, (Boolean) field.defaultValue); } - public boolean isSetBaseOnlyInLand() { - return setBaseOnlyInLand; - } + /** + * Load the configuration + */ + public void loadAndSave() { + if (configFile.exists()) { + try { + config.load(configFile); + } catch (Exception e) { + e.printStackTrace(); + } + } - public int getLoreLength() { - return loreLength; + save(); } - public boolean isCachePlayerHeads() { - return cachePlayerHeads; + public void save() { + try { + config.save(configFile); + } catch (IOException e) { + e.printStackTrace(); + } } - public boolean isEnableGUI() { - return enableGUI; - } + private void warnAboutPluginDependencies() { + Plugin luckPerms = getPluginManager().getPlugin("LuckPerms"); + Plugin discordSrv = getPluginManager().getPlugin("DiscordSRV"); - public void setEnableGUI(boolean enableGUI) { - this.enableGUI = enableGUI; - getConfig().set("settings.enable-gui", enableGUI); - save(); - } + if (luckPerms != null && is(PERMISSIONS_AUTO_GROUP_GROUPNAME)) { + plugin.getLogger().warning("LuckPerms was found and the setting auto-group-groupname is enabled."); + plugin.getLogger().warning("Be careful with that as players will be automatically added in the group" + + " that matches their clan tag."); + } - /** - * @return if the tag can contain letters from other alphabets - */ - public boolean isAcceptOtherAlphabetsLettersOnTag() { - return acceptOtherAlphabetsLettersOnTag; + if (discordSrv == null && is (DISCORDCHAT_ENABLE)) { + plugin.getLogger().warning("DiscordChat can't be initialized, please, install DiscordSRV."); + } } public Locale getLanguage() { + String language = getString(LANGUAGE); String[] split = language.split("_"); if (split.length == 2) { @@ -535,148 +128,17 @@ public Locale getLanguage() { return new Locale(language); } - @NotNull - public RankingType getRankingType() { - try { - return RankingType.valueOf(rankingType); - } catch (IllegalArgumentException ex) { - return RankingType.DENSE; - } - } - - public boolean isLanguagePerPlayer() { - return languagePerPlayer; - } - - public int getTasksCollectUpkeepHour() { - return tasksCollectUpkeepHour; - } - - public void setTasksCollectUpkeepHour(int tasksCollectUpkeepHour) { - this.tasksCollectUpkeepHour = tasksCollectUpkeepHour; - } - - public int getTasksCollectUpkeepMinute() { - return tasksCollectUpkeepMinute; - } - - public void setTasksCollectUpkeepMinute(int tasksCollectUpkeepMinute) { - this.tasksCollectUpkeepMinute = tasksCollectUpkeepMinute; - } - - public int getTasksCollectUpkeepWarningHour() { - return tasksCollectUpkeepWarningHour; - } - - public void setTasksCollectUpkeepWarningHour(int tasksCollectUpkeepWarningHour) { - this.tasksCollectUpkeepWarningHour = tasksCollectUpkeepWarningHour; - } - - public int getTasksCollectUpkeepWarningMinute() { - return tasksCollectUpkeepWarningMinute; - } - - public void setTasksCollectUpkeepWarningMinute(int tasksCollectUpkeepWarningMinute) { - this.tasksCollectUpkeepWarningMinute = tasksCollectUpkeepWarningMinute; - } - - public int getTasksCollectFeeHour() { - return tasksCollectFeeHour; - } - - public void setTasksCollectFeeHour(int tasksCollectFeeHour) { - this.tasksCollectFeeHour = tasksCollectFeeHour; - } - - public int getTasksCollectFeeMinute() { - return tasksCollectFeeMinute; - } - - public void setTasksCollectFeeMinute(int tasksCollectFeeMinute) { - this.tasksCollectFeeMinute = tasksCollectFeeMinute; - } - - public int getMinToVerify() { - return minToVerify; - } - - /** - * Returns the delay between kills - * - * @return - */ - public int getDelayBetweenKills() { - return delayBetweenKills; - } - - /** - * Checks if the delay between kills is enabled - * - * @return - */ - public boolean isDelayBetweenKills() { - return delayBetweenKillsEnabled; - } - - /** - * Returns the max number of kills per victim - * - * @return - */ - public int getMaxKillsPerVictim() { - return maxKillsPerVictim; - } - - /** - * Checks if there is a max number of kills per victim - * - * @return - */ - public boolean isMaxKillsPerVictim() { - return maxKillsPerVictimEnabled; - } - - /** - * Check whether an item is in the list - * - * @param typeId the type - * @return whether the world is blacklisted - */ - public boolean isItemInList(Material typeId) { - return itemsList.contains(typeId); - } - - /** - * Gets the command set as the clan chat command - * - * @return the clan chat command - */ - public String getCommandClanChat() { - return commandClanChat; - } - - @Contract("null -> false") - public boolean isBlacklistedWorld(@Nullable World world) { - if (world != null) { - return isBlacklistedWorld(world.getName()); - } - return false; - } - - /** - * Check whether a worlds is blacklisted - * - * @param world the world - * @return whether the world is blacklisted - */ - public boolean isBlacklistedWorld(String world) { - for (String w : blacklistedWorlds) { - if (w.equalsIgnoreCase(world)) { - return true; + public List getItemList() { + List itemsList = new ArrayList<>(); + for (String material : getStringList(ITEM_LIST)) { + Optional x = XMaterial.matchXMaterial(material); + if (x.isPresent()) { + itemsList.add(x.get().parseMaterial()); + } else { + plugin.getLogger().warning("Error with Material: " + material); } } - - return false; + return itemsList; } /** @@ -686,111 +148,12 @@ public boolean isBlacklistedWorld(String world) { * @return whether its a disallowed word */ public boolean isDisallowedWord(String word) { - for (Object w : disallowedWords) { - if (((String) w).equalsIgnoreCase(word)) { - return true; - } - } - - return word.equalsIgnoreCase("clan") || word.equalsIgnoreCase(commandMore) || word.equalsIgnoreCase(commandDeny) || word.equalsIgnoreCase(commandAccept); - - } - - /** - * Checks if the upkeep is to be charged only from clans with the member fee enabled - * - * @return - */ - public boolean isChargeUpkeepOnlyIfMemberFeeEnabled() { - return eChargeUpkeepOnlyIfMemberFeeEnabled; - } - - /** - * Checks if the upkeep should be multiplied by the clan size - * - * @return - */ - public boolean isMultiplyUpkeepBySize() { - return eMultiplyUpkeepBySize; - } - - /** - * Checks if the upkeep is enabled - * - * @return - */ - public boolean isClanUpkeep() { - return eClanUpkeepEnabled; - } - - /** - * Returns the upkeep - * - * @return - */ - public double getClanUpkeep() { - if (eClanUpkeep < 0) { - eClanUpkeep = 0; + for (String disallowedTag : getStringList(DISALLOWED_TAGS)) { + return disallowedTag.equalsIgnoreCase(word); } - return eClanUpkeep; - } - - - /** - * Returns the max member fee allowed - * - * @return - */ - public double getMaxMemberFee() { - return eMaxMemberFee; - } - - /** - * Checks if the member fee is enabled - * - * @return - */ - public boolean isMemberFee() { - return eMemberFee; - } - - public boolean isAllowResetKdr() { - return allowResetKdr; - } - - public boolean isePurchaseResetKdr() { - return ePurchaseResetKdr; - } - - /** - * Gets the price to pay for setting the member fee - * - * @return the price - */ - public double geteMemberFeeSetPrice() { - return eMemberFeeSetPrice; - } - - public int geteMemberFeeLastMinuteChangeInterval() { - return eMemberFeeLastMinuteChangeInterval; - } - - /** - * Do leaders need to pay for setting the member fee? - * - * @return true if so - */ - public boolean isePurchaseMemberFeeSet() { - return ePurchaseMemberFeeSet; - } - /** - * Gets the price to reset the KDR - * - * @return the price - */ - public double geteResetKdr() { - return eResetKdr; + return word.equalsIgnoreCase(getString(COMMANDS_CLAN)) || word.equalsIgnoreCase(getString(COMMANDS_MORE)) || + word.equalsIgnoreCase(getString(COMMANDS_DENY)) || word.equalsIgnoreCase(getString(COMMANDS_ACCEPT)); } /** @@ -800,8 +163,8 @@ public double geteResetKdr() { * @return whether the string contains the color code */ public boolean hasDisallowedColor(String str) { - for (Object c : getDisallowedColors()) { - if (str.contains("&" + c)) { + for (String disallowedTag : getStringList(DISALLOWED_TAG_COLORS)) { + if (str.contains("&" + disallowedTag)) { return true; } } @@ -813,69 +176,45 @@ public boolean hasDisallowedColor(String str) { * @return a comma delimited string with all disallowed colors */ public String getDisallowedColorString() { - String out = ""; - - for (Object c : getDisallowedColors()) { - out += c + ", "; - } - - return Helper.stripTrailing(out, ", "); + return String.join(", ", getStringList(DISALLOWED_TAG_COLORS)); } /** - * Check whether a clan is un-rivable + * Check whether a clan is unrivable * * @param tag the tag * @return whether the clan is unrivable */ public boolean isUnrivable(String tag) { - for (Object t : getunRivableClans()) { - if (((String) t).equalsIgnoreCase(tag)) { - return true; - } - } - - return false; - } - - @SuppressWarnings("deprecation") - public boolean isBanned(String playerName) { - return isBanned(Bukkit.getOfflinePlayer(playerName).getUniqueId()); + return getStringList(UNRIVABLE_CLANS).stream(). + map(String::toLowerCase). + anyMatch(unrivable -> unrivable.equals(tag.toLowerCase())); } /** - * Check whether a player is banned + * Add a player to the banned list * * @param playerUniqueId the player's name - * @return whether player is banned */ - public boolean isBanned(UUID playerUniqueId) { - for (String pl : getBannedPlayers()) { - if (pl.equals(playerUniqueId.toString())) { - return true; - } + public void addBanned(UUID playerUniqueId) { + List bannedPlayers = getStringList(BANNED_PLAYERS); + if (isBanned(playerUniqueId)) { + return; } - return false; + bannedPlayers.add(playerUniqueId.toString()); + set(BANNED_PLAYERS, bannedPlayers); + save(); } /** - * Add a player to the banned list + * Check whether a player is banned * * @param playerUniqueId the player's name + * @return whether player is banned */ - public void addBanned(UUID playerUniqueId) { - if (!bannedPlayers.contains(playerUniqueId.toString())) { - bannedPlayers.add(playerUniqueId.toString()); - } - - getConfig().set("settings.banned-players", bannedPlayers); - save(); - } - - @SuppressWarnings("deprecation") - public void addBanned(String playerName) { - addBanned(Bukkit.getOfflinePlayer(playerName).getUniqueId()); + public boolean isBanned(UUID playerUniqueId) { + return getStringList(BANNED_PLAYERS).contains(playerUniqueId.toString()); } /** @@ -884,970 +223,357 @@ public void addBanned(String playerName) { * @param playerUniqueId the player's name */ public void removeBanned(UUID playerUniqueId) { + List bannedPlayers = getStringList(BANNED_PLAYERS); bannedPlayers.remove(playerUniqueId.toString()); - - getConfig().set("settings.banned-players", bannedPlayers); - save(); + set(BANNED_PLAYERS, bannedPlayers); } - @SuppressWarnings("deprecation") - public void removeBanned(String playerName) { - removeBanned(Bukkit.getOfflinePlayer(playerName).getUniqueId()); + public boolean isActionAllowedInWar(@NotNull ProtectionManager.Action action) { + return is(ConfigField.valueOf("WAR_ACTIONS_" + action.name())); } - /** - * @return the plugin - */ - public SimpleClans getPlugin() { - return plugin; + public List getIgnoredList(@NotNull ProtectionManager.Action action) { + return getStringList(ConfigField.valueOf("WAR_LISTENERS_IGNORED_LIST_" + action.name())); } - /** - * @return the requireVerification - */ - public boolean isRequireVerification() { - return requireVerification; + @NotNull + public RankingType getRankingType() { + try { + return RankingType.valueOf(getString(RANKING_TYPE)); + } catch (IllegalArgumentException ex) { + return RankingType.DENSE; + } } - public boolean isRejoinCooldown() { - return rejoinCooldownEnabled; - } - - public int getRejoinCooldown() { - return rejoinCooldown; - } - - @NotNull - public String getListDefaultOrderBy() { - return listDefaultOrderBy; - } - - @Deprecated - public String getListDefault() { - return getListDefaultOrderBy(); - } - - @Deprecated - public String getListSize() { - return "size"; - } - - @Deprecated - public String getListKdr() { - return "kdr"; - } - - @Deprecated - public String getListName() { - return "name"; - } - - @Deprecated - public String getListFounded() { - return "founded"; - } - - @Deprecated - public String getListActive() { - return "active"; - } - - @Deprecated - public String getListAsc() { - return "asc"; - } - - @Deprecated - public String getListDesc() { - return "desc"; - } - - /** - * @return the bannedPlayers - */ - public List getBannedPlayers() { - return Collections.unmodifiableList(bannedPlayers); - } - - /** - * @return the disallowedColors - */ - public List getDisallowedColors() { - return Collections.unmodifiableList(disallowedColors); - } - - /** - * @return the unRivableClans - */ - public List getunRivableClans() { - return Collections.unmodifiableList(unRivableClans); - } - - /** - * @return the rivalLimitPercent - */ - public int getRivalLimitPercent() { - return rivalLimitPercent; - } - - /** - * @return the serverName - */ - public String getServerName() { - return ChatUtils.parseColors(serverName); - } - - /** - * @return the chatTags - */ - public boolean isChatTags() { - return chatTags; - } - - /** - * @return the purgeClan - */ - public int getPurgeClan() { - return purgeClan; - } - - /** - * @return the purgeUnverified - */ - public int getPurgeUnverified() { - return purgeUnverified; - } - - /** - * @return the purgePlayers - */ - public int getPurgePlayers() { - return purgePlayers; - } - - /** - * @return the requestFrequencySecs - */ - public int getRequestFrequencySecs() { - return requestFreqencySecs; - } - - /** - * @return the requestMessageColor - */ - public String getRequestMessageColor() { - return Helper.toColor(requestMessageColor); - } - - /** - * @return the pageSize - */ - public int getPageSize() { - return pageSize; - } - - /** - * @return the pageSep - */ - public String getPageSep() { - return pageSep; - } - - /** - * @return the pageHeadingsColor - */ - public String getPageHeadingsColor() { - return Helper.toColor(pageHeadingsColor); - } - - /** - * @return the pageSubTitleColor - */ - public String getPageSubTitleColor() { - return Helper.toColor(pageSubTitleColor); - } - - /** - * @return the pageLeaderColor - */ - public String getPageLeaderColor() { - return Helper.toColor(pageLeaderColor); - } - - /** - * @return the bbSize - */ - public int getBbSize() { - return bbSize; - } - - /** - * @return the bbLoginSize - */ - public int getBbLoginSize() { - return bbLoginSize; - } - - /** - * @return the bbColor - */ - public String getBbColor() { - return Helper.toColor(bbColor); - } - - /** - * @return the bbAccentColor - */ - public String getBbAccentColor() { - return Helper.toColor(bbAccentColor); - } - - /** - * @return the commandClan - */ - public String getCommandClan() { - return commandClan; - } - - /** - * @return the commandMore - */ - public String getCommandMore() { - return commandMore; - } - - /** - * @return the commandDeny - */ - public String getCommandDeny() { - return commandDeny; - } - - /** - * @return the commandAccept - */ - public String getCommandAccept() { - return commandAccept; - } - - /** - * @return the clanMinSizeToAlly - */ - public int getClanMinSizeToAlly() { - return clanMinSizeToAlly; - } - - /** - * @return the clanMinSizeToRival - */ - public int getClanMinSizeToRival() { - return clanMinSizeToRival; - } - - /** - * Returns the max length of the clan description - * - * @return the max length - */ - public int getClanMaxDescriptionLength() { - if (clanMaxDescriptionLength > 255 || clanMaxDescriptionLength < 0) { - clanMaxDescriptionLength = 255; - } - return clanMaxDescriptionLength; - } - - /** - * Returns the min length of the clan description - * - * @return the min length - */ - public int getClanMinDescriptionLength() { - if (clanMinDescriptionLength < 0 || clanMinDescriptionLength > getClanMaxDescriptionLength()) { - clanMinDescriptionLength = 0; - } - return clanMinDescriptionLength; - } - - /** - * @return the clanMinLength - */ - public int getClanMinLength() { - return clanMinLength; - } - - /** - * @return the max number of alliances a clan can have - */ - public int getClanMaxAlliances() { - return clanMaxAlliances; - } - - /** - * @return the clanMaxLength - */ - public int getClanMaxLength() { - return clanMaxLength; - } - - /** - * @return the pageClanNameColor - */ - public String getPageClanNameColor() { - return Helper.toColor(pageClanNameColor); - } - - /** - * @return the tagMinLength - */ - public int getTagMinLength() { - return tagMinLength; - } - - /** - * @return the tagMaxLength - */ - public int getTagMaxLength() { - return tagMaxLength; - } - - /** - * @return the tagDefaultColor - */ - public String getTagDefaultColor() { - return Helper.toColor(tagDefaultColor); - } - - /** - * @return the tagSeparator - */ - public String getTagSeparator() { - if (tagSeparator == null) { - return ""; - } - - if (tagSeparator.equals(" .")) { - return "."; - } - - return tagSeparator; - } - - /** - * @return the tagSeparatorColor - */ - public String getTagSeparatorColor() { - return Helper.toColor(tagSeparatorColor); - } - - public String getClanChatFormat() { - return clanChatFormat; - } - - public String getClanChatRank() { - return clanChatRank; - } - - public String getClanChatLeaderColor() { - return Helper.toColor(clanChatLeaderColor); - } - - public String getClanChatTrustedColor() { - return Helper.toColor(clanChatTrustedColor); - } - - public String getClanChatMemberColor() { - return Helper.toColor(clanChatMemberColor); - } - - /** - * @return the clanChatAnnouncementColor - */ - public String getClanChatAnnouncementColor() { - return Helper.toColor(clanChatAnnouncementColor); - } - - @Deprecated - /** - * @return the clanChatMessageColor - */ - public String getClanChatMessageColor() { - return clanChatMessageColor; - } - - @Deprecated - /** - * @return the clanChatNameColor - */ - public String getClanChatNameColor() { - return clanChatNameColor; - } - - @Deprecated - /** - * @return the clanChatTagBracketLeft - */ - public String getClanChatTagBracketLeft() { - return clanChatTagBracketLeft == null ? "[" : clanChatTagBracketLeft; - } - - @Deprecated - /** - * @return the clanChatTagBracketRight - */ - public String getClanChatTagBracketRight() { - return clanChatTagBracketRight == null ? "]" : clanChatTagBracketRight; - } - - @Deprecated - /** - * @return the clanChatBracketColor - */ - public String getClanChatBracketColor() { - return clanChatBracketColor == null ? Helper.toColor("e") : clanChatBracketColor; - } - - @Deprecated - /** - * @return the clanChatPlayerBracketLeft - */ - public String getClanChatPlayerBracketLeft() { - return clanChatPlayerBracketLeft; - } - - @Deprecated - /** - * @return the clanChatPlayerBracketRight - */ - public String getClanChatPlayerBracketRight() { - return clanChatPlayerBracketRight; - } - - public double getKwAlly() { - return getConfig().getDouble("kill-weights.ally"); - } - - /** - * @return the kwRival - */ - public double getKwRival() { - return kwRival; - } - - /** - * @return the kwNeutral - */ - public double getKwNeutral() { - return kwNeutral; - } - - /** - * @return the kwCivilian - */ - public double getKwCivilian() { - return kwCivilian; - } - - /** - * @return the useMysql - */ - public boolean isUseMysql() { - return useMysql; - } - - /** - * @return the host - */ - public String getHost() { - return host; - } - - /** - * @return the port - */ - public int getPort() { - return port; - } - - /** - * @return the database - */ - public String getDatabase() { - return database; - } - - /** - * @return the username - */ - public String getUsername() { - return username; - } - - /** - * @return the password - */ - public String getPassword() { - return password; - } - - /** - * @return the showUnverifiedOnList - */ - public boolean isShowUnverifiedOnList() { - return showUnverifiedOnList; - } - - /** - * @return the clanTrustByDefault - */ - public boolean isClanTrustByDefault() { - return clanTrustByDefault; - } - - /** - * @return the pageTrustedColor - */ - public String getPageTrustedColor() { - return Helper.toColor(pageTrustedColor); - } - - /** - * @return the pageUnTrustedColor - */ - public String getPageUnTrustedColor() { - return Helper.toColor(pageUnTrustedColor); - } - - /** - * @return the globalff - */ - public boolean isGlobalff() { - return globalff; - } - - /** - * @param globalff the globalff to set - */ - public void setGlobalff(boolean globalff) { - this.globalff = globalff; - } - - /** - * @return the clanChatEnable - */ - public boolean getClanChatEnable() { - return clanChatEnable; - } - - /** - * @return the tagBracketLeft - */ - public String getTagBracketLeft() { - return tagBracketLeft; - } - - /** - * @return the tagBracketRight - */ - public String getTagBracketRight() { - return tagBracketRight; - } - - /** - * @return the tagBracketColor - */ - public String getTagBracketColor() { - return Helper.toColor(tagBracketColor); - } - - /** - * @return the ePurchaseCreation - */ - public boolean isePurchaseCreation() { - return ePurchaseCreation; - } - - /** - * @return the ePurchaseVerification - */ - public boolean isePurchaseVerification() { - return ePurchaseVerification; - } - - /** - * @return the ePurchaseInvite - */ - public boolean isePurchaseInvite() { - return ePurchaseInvite; - } - - /** - * @return the eCreationPrice - */ - public double getCreationPrice() { - return eCreationPrice; - } - - /** - * @return the eVerificationPrice - */ - public double getVerificationPrice() { - return eVerificationPrice; - } - - /** - * @return the eInvitePrice - */ - public double getInvitePrice() { - return eInvitePrice; - } - - public boolean isBbShowOnLogin() { - return bbShowOnLogin; - } - - public boolean getSafeCivilians() { - return safeCivilians; - } - - public boolean isConfirmationForPromote() { - return confirmationForPromote; - } - - public boolean isConfirmationForDemote() { - return confirmationForDemote; - } - - /** - * Returns the min percentage of leaders online required to demote someone - * - * @return the percentage - */ - public double getPercentageOnlineToDemote() { - if (percentageOnlineToDemote <= 0 || percentageOnlineToDemote > 100) { - percentageOnlineToDemote = 100; - } - return percentageOnlineToDemote; - } - - public boolean isDenySameIPKills() { - return denySameIPKills; - } - - public boolean isUseColorCodeFromPrefix() { - return useColorCodeFromPrefix; - } - - public String getCommandAlly() { - return commandAlly; - } - - public boolean isAllyChatEnable() { - return allyChatEnable; - } - - @Deprecated - public String getAllyChatMessageColor() { - return allyChatMessageColor; - } - - public String getAllyChatFormat() { - return allyChatFormat; - } - - public String getAllyChatRank() { - return allyChatRank; - } - - public String getAllyChatLeaderColor() { - return Helper.toColor(allyChatLeaderColor); - } - - public String getAllyChatTrustedColor() { - return Helper.toColor(allyChatTrustedColor); - } - - public String getAllyChatMemberColor() { - return Helper.toColor(allyChatMemberColor); - } - - @Deprecated - public String getAllyChatNameColor() { - return allyChatNameColor; - } - - @Deprecated - public String getAllyChatTagBracketLeft() { - return allyChatTagBracketLeft; - } - - @Deprecated - public String getAllyChatTagBracketRight() { - return allyChatTagBracketRight; - } - - @Deprecated - public String getAllyChatBracketColor() { - return allyChatBracketColor; - } - - @Deprecated - public String getAllyChatPlayerBracketLeft() { - return allyChatPlayerBracketLeft; - } - - @Deprecated - public String getAllyChatPlayerBracketRight() { - return allyChatPlayerBracketRight; - } - - public String getCommandGlobal() { - return commandGlobal; - } - - @Deprecated - public String getAllyChatTagColor() { - return allyChatTagColor; - } - - public boolean isClanFFOnByDefault() { - return clanFFOnByDefault; - } - - public boolean isCompatMode() { - return compatMode; - } - - public void setCompatMode(boolean compatMode) { - this.compatMode = compatMode; - } - - public boolean isHomebaseSetOnce() { - return homebaseSetOnce; - } - - public int getWaitSecs() { - return waitSecs; - } - - public void setWaitSecs(int waitSecs) { - this.waitSecs = waitSecs; - } - - public boolean isEnableAutoGroups() { - return enableAutoGroups; - } - - public boolean isPvpOnlywhileInWar() { - return pvpOnlywhileInWar; - } - - public boolean isDebugging() { - return debugging; - } - - public boolean isKeepOnHome() { - return keepOnHome; - } - - public boolean isDropOnHome() { - return dropOnHome; - } - - public List getItemsList() { - return Collections.unmodifiableList(itemsList); - } - - public boolean isTeleportOnSpawn() { - return teleportOnSpawn; - } - - public boolean isTagBasedClanChat() { - return tagBasedClanChat; - } - - public String getClanChatRankColor() { - return Helper.toColor(clanChatRankColor); - } - - /** - * @return the ePurchaseHomeTeleport - */ - public boolean isePurchaseHomeTeleport() { - return ePurchaseHomeTeleport; - } - - /** - * @return the eUniqueTaxOnRegroup - */ - public boolean iseUniqueTaxOnRegroup() { - return eUniqueTaxOnRegroup; - } - - /** - * @return the eIssuerPaysRegroup - */ - public boolean iseIssuerPaysRegroup() { - return eIssuerPaysRegroup; - } - - /** - * @return the ePurchaseHomeRegroup - */ - public boolean isePurchaseHomeRegroup() { - return ePurchaseHomeRegroup; - } - - /** - * @return the HomeTeleportPrice - */ - public double getHomeTeleportPrice() { - return eHomeTeleportPrice; - } - - /** - * @return the HomeRegroupPrice - */ - public double getHomeRegroupPrice() { - return Math.abs(eHomeRegroupPrice); - } - - /** - * @return the ePurchaseHomeTeleportSet - */ - public boolean isePurchaseHomeTeleportSet() { - return ePurchaseHomeTeleportSet; - } - - /** - * @return the HomeTeleportPriceSet - */ - public double getHomeTeleportPriceSet() { - return eHomeTeleportPriceSet; - } - - /** - * @return the config - */ public FileConfiguration getConfig() { return config; } - /** - * @return the moneyperkill - */ - public boolean isMoneyPerKill() { - return moneyperkill; - } - - /** - * @return the KDRMultipliesPerKill - */ - public double getKDRMultipliesPerKill() { - return KDRMultipliesPerKill; - } - - /** - * @return the teleportBlocks - */ - public boolean isTeleportBlocks() { - return teleportBlocks; - } - - /** - * @return the AutoGroupGroupName - */ - public boolean isAutoGroupGroupName() { - return autoGroupGroupName; - } - - /** - * @return the tamableMobsSharing - */ - public boolean isTamableMobsSharing() { - return tamableMobsSharing; - } - - @Deprecated - public boolean isOnlineMode() { - return true; - } - - /** - * Checks if server announcements are disabled - * - * @return if they are disabled - */ - public boolean isDisableMessages() { - return disableMessages; - } - - /** - * @return the allowReGroupCommand - */ - public boolean getAllowReGroupCommand() { - return allowReGroupCommand; - } - - /** - * @return the useThreads - */ - public boolean getUseThreads() { - return useThreads; - } - - /** - * @return the useBungeeCord - */ - public boolean getUseBungeeCord() { - return useBungeeCord; - } - - public String getTagSeparatorLeaderColor() { - return Helper.toColor(tagSeparatorLeaderColor); - } - - public String getTagBracketLeaderColor() { - return Helper.toColor(tagBracketLeaderColor); - } - - public int getMaxAsksPerRequest() { - return maxAsksPerRequest; - } - - public void setMaxAsksPerRequest(int maxAsksPerRequest) { - this.maxAsksPerRequest = maxAsksPerRequest; - } - - public boolean isForceCommandPriority() { - return forceCommandPriority; - } - - public void setForceCommandPriority(boolean forceCommandPriority) { - this.forceCommandPriority = forceCommandPriority; - } - - public int getMembersOnlineMaxDifference() { - return getConfig().getInt("war-and-protection.war-start.members-online-max-difference", 5); - } - - public int getMaxMembers() { - return this.maxMembers; - } - - public boolean isSavePeriodically() { - return savePeriodically; - } - - /** - * Gets the interval to save the data - * - * @return the interval in seconds - */ - public int getSaveInterval() { - if (saveInterval < 1) { - saveInterval = 5; + public enum ConfigField { + /* + ================ + > General Settings + ================ + * + */ + ENABLE_GUI("settings.enable-gui", true), + DISABLE_MESSAGES("settings.disable-messages", false), + TAMABLE_MOBS_SHARING("settings.tameable-mobs-sharing", false), + TELEPORT_BLOCKS("settings.teleport-blocks", false), + TELEPORT_HOME_ON_SPAWN("settings.teleport-home-on-spawn", false), + DROP_ITEMS_ON_CLAN_HOME("settings.drop-items-on-clan-home", false), + KEEP_ITEMS_ON_CLAN_HOME("settings.keep-items-on-clan-home", false), + ITEM_LIST("settings.item-list"), + DEBUG("settings.show-debug-info", false), + ENABLE_AUTO_GROUPS("settings.enable-auto-groups", false), + CHAT_COMPATIBILITY_MODE("settings.chat-compatibility-mode", true), + RIVAL_LIMIT_PERCENT("settings.rival-limit-percent", 50), + COLOR_CODE_FROM_PREFIX_FOR_NAME("settings.use-colorcode-from-prefix-for-name", true), + DISPLAY_CHAT_TAGS("settings.display-chat-tags", true), + GLOBAL_FRIENDLY_FIRE("settings.global-friendly-fire", false), + UNRIVABLE_CLANS("settings.unrivable-clans"), + SHOW_UNVERIFIED_ON_LIST("settings.show-unverified-on-list", false), + BLACKLISTED_WORLDS("settings.blacklisted-worlds"), + BANNED_PLAYERS("settings.banned-players"), + DISALLOWED_TAGS("settings.disallowed-tags"), + LANGUAGE("settings.language", "en"), + LANGUAGE_SELECTOR("settings.user-language-selector", true), + DISALLOWED_TAG_COLORS("settings.disallowed-tag-colors"), + SERVER_NAME("settings.server-name", "&4SimpleClans"), + REQUIRE_VERIFICATION("settings.new-clan-verification-required", true), + ALLOW_REGROUP("settings.allow-regroup-command", true), + ALLOW_RESET_KDR("settings.allow-reset-kdr", false), + REJOIN_COOLDOWN("settings.rejoin-cooldown", 60), + ENABLE_REJOIN_COOLDOWN("settings.rejoin-cooldown-enabled", false), + ACCEPT_OTHER_ALPHABETS_LETTERS("settings.accept-other-alphabets-letters-on-tag", false), + RANKING_TYPE("settings.ranking-type", "DENSE"), + LIST_DEFAULT_ORDER_BY("settings.list-default-order-by", "kdr"), + LORE_LENGTH("settings.lore-length", 36), + PVP_ONLY_WHILE_IN_WAR("settings.pvp-only-while-at-war", false), + /* + ================ + > Tag Settings + ================ + * + */ + TAG_DEFAULT_COLOR("tag.default-color", "8"), + TAG_MAX_LENGTH("tag.max-length", 5), + TAG_BRACKET_COLOR("tag.bracket.color", "8"), + TAG_BRACKET_LEADER_COLOR("tag.bracket.leader-color", "4"), + TAG_BRACKET_LEFT("tag.bracket.left", ""), + TAG_BRACKET_RIGHT("tag.bracket.right", ""), + TAG_MIN_LENGTH("tag.min-length", 2), + TAG_SEPARATOR_COLOR("tag.separator.color", "8"), + TAG_SEPARATOR_LEADER_COLOR("tag.separator.leader-color", "4"), + TAG_SEPARATOR_char("tag.separator.char", " ."), + /* + ================ + > War and Protection Settings + ================ + * + */ + ENABLE_WAR("war-and-protection.war-enabled", false), + LAND_SHARING("war-and-protection.land-sharing", true), + LAND_PROTECTION_PROVIDERS("war-and-protection.protection-providers"), + WAR_LISTENERS_PRIORITY("war-and-protection.listeners.priority", "HIGHEST"), + WAR_LISTENERS_IGNORED_LIST_PLACE("war-and-protection.listeners.ignored-list.PLACE"), + WAR_LISTENERS_IGNORED_LIST_BREAK("war-and-protection.listeners.ignored-list.BREAK"), + LAND_SET_BASE_ONLY_IN_LAND("war-and-protection.set-base-only-in-land", false), + WAR_NORMAL_EXPIRATION_TIME("war-and-protection.war-normal-expiration-time", 0), + WAR_DISCONNECT_EXPIRATION_TIME("war-and-protection.war-disconnect-expiration-time", 0), + LAND_EDIT_ALL_LANDS("war-and-protection.edit-all-lands", false), + LAND_CREATION_ONLY_LEADERS("war-and-protection.land-creation.only-leaders", false), + LAND_CREATION_ONLY_ONE_PER_CLAN("war-and-protection.land-creation.only-one-per-clan", false), + WAR_ACTIONS_CONTAINER("war-and-protection.war-actions.CONTAINER", true), + WAR_ACTIONS_INTERACT("war-and-protection.war-actions.INTERACT", true), + WAR_ACTIONS_BREAK("war-and-protection.war-actions.BREAK", true), + WAR_ACTIONS_PLACE("war-and-protection.war-actions.PLACE", true), + WAR_ACTIONS_DAMAGE("war-and-protection.war-actions.DAMAGE", true), + WAR_ACTIONS_INTERACT_ENTITY("war-and-protection.war-actions.INTERACT_ENTITY", true), + WAR_START_REQUEST_ENABLED("war-and-protection.war-start.request-enabled", true), + WAR_MAX_MEMBERS_DIFFERENCE("war-and-protection.war-start.members-online-max-difference", 5), + /* + ================ + > KDR Grinding Prevention Settings + ================ + * + */ + KDR_ENABLE_MAX_KILLS("kdr-grinding-prevention.enable-max-kills", false), + KDR_MAX_KILLS_PER_VICTIM("kdr-grinding-prevention.max-kills-per-victim", 10), + KDR_ENABLE_KILL_DELAY("kdr-grinding-prevention.enable-kill-delay", false), + KDR_DELAY_BETWEEN_KILLS("kdr-grinding-prevention.delay-between-kills", 5), + /* + ================ + > Commands Settings + ================ + * + */ + COMMANDS_MORE("commands.more", "more"), + COMMANDS_ALLY("commands.ally", "ally"), + COMMANDS_CLAN("commands.clan", "clan"), + COMMANDS_ACCEPT("commands.accept", "accept"), + COMMANDS_DENY("commands.deny", "deny"), + COMMANDS_GLOBAL("commands.global", "global"), + COMMANDS_CLAN_CHAT("commands.clan_chat", "."), + COMMANDS_FORCE_PRIORITY("commands.force-priority", true), + /* + ================ + > Economy Settings + ================ + * + */ + ECONOMY_CREATION_PRICE("economy.creation-price", 100.0), + ECONOMY_PURCHASE_CLAN_CREATE("economy.purchase-clan-create", false), + ECONOMY_VERIFICATION_PRICE("economy.verification-price", 1000.0), + ECONOMY_PURCHASE_CLAN_VERIFY("economy.purchase-clan-verify", false), + ECONOMY_INVITE_PRICE("economy.invite-price", 20), + ECONOMY_PURCHASE_CLAN_INVITE("economy.purchase-clan-invite", false), + ECONOMY_HOME_TELEPORT_PRICE("economy.home-teleport-price", 5.0), + ECONOMY_PURCHASE_HOME_TELEPORT("economy.purchase-home-teleport", false), + ECONOMY_HOME_TELEPORT_SET_PRICE("economy.home-teleport-set-price", 5.0), + ECONOMY_PURCHASE_HOME_TELEPORT_SET("economy.purchase-home-teleport-set", false), + ECONOMY_REGROUP_PRICE("economy.home-regroup-price", 5.0), + ECONOMY_PURCHASE_HOME_REGROUP("economy.purchase-home-regroup", false), + ECONOMY_UNIQUE_TAX_ON_REGROUP("economy.unique-tax-on-regroup", true), + ECONOMY_ISSUER_PAYS_REGROUP("economy.issuer-pays-regroup", true), + ECONOMY_MONEY_PER_KILL("economy.money-per-kill", false), + ECONOMY_MONEY_PER_KILL_KDR_MULTIPLIER("economy.money-per-kill-kdr-multipier", 10), + ECONOMY_RESET_KDR_PRICE("economy.reset-kdr-price", 10000.0), + ECONOMY_PURCHASE_RESET_KDR("economy.purchase-reset-kdr", true), + ECONOMY_PURCHASE_MEMBER_FEE_SET("economy.purchase-member-fee-set", false), + ECONOMY_MEMBER_FEE_SET_PRICE("economy.member-fee-set-price", 1000.0), + ECONOMY_MEMBER_FEE_ENABLED("economy.member-fee-enabled", false), + ECONOMY_MEMBER_FEE_LAST_MINUTE_CHANGE_INTERVAL("economy.member-fee-last-minute-change-interval", 8), + ECONOMY_MAX_MEMBER_FEE("economy.max-member-fee", 200.0), + ECONOMY_UPKEEP("economy.upkeep", false), + ECONOMY_UPKEEP_ENABLED("economy.upkeep-enabled", false), + ECONOMY_MULTIPLY_UPKEEP_BY_CLAN_SIZE("economy.multiply-upkeep-by-clan-size", false), + ECONOMY_UPKEEP_REQUIRES_MEMBER_FEE("economy.charge-upkeep-only-if-member-fee-enabled", true), + ECONOMY_BANK_LOG_ENABLED("economy.bank-log.enable", true), + /* + ================ + > Kill Weights Settings + ================ + * + */ + KILL_WEIGHTS_RIVAL("kill-weights.rival", 2.0), + KILL_WEIGHTS_CIVILIAN("kill-weights.civilian", 0.0), + KILL_WEIGHTS_NEUTRAL("kill-weights.neutral", 1.0), + KILL_WEIGHTS_ALLY("kill-weights.ally", -1.0), + KILL_WEIGHTS_DENY_SAME_IP_KILLS("kill-weights.deny-same-ip-kills", false), + /* + ================ + > Clan Settings + ================ + * + */ + CLAN_TELEPORT_DELAY("clan.homebase-teleport-wait-secs", 10), + CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE("clan.homebase-can-be-set-only-once", true), + CLAN_MIN_SIZE_TO_SET_RIVAL("clan.min-size-to-set-rival", 3), + CLAN_MIN_SIZE_TO_SET_ALLY("clan.min-size-to-set-ally", 3), + CLAN_MAX_LENGTH("clan.max-length", 25), + CLAN_MIN_LENGTH("clan.min-length", 2), + CLAN_MAX_DESCRIPTION_LENGTH("clan.max-description-length", 120), + CLAN_MIN_DESCRIPTION_LENGTH("clan.min-description-length", 10), + CLAN_MAX_MEMBERS("clan.max-members", 25), + CLAN_MAX_ALLIANCES("clan.max-alliances", -1), + CLAN_CONFIRMATION_FOR_PROMOTE("clan.confirmation-for-promote", false), + CLAN_TRUST_MEMBERS_BY_DEFAULT("clan.trust-members-by-default", false), + CLAN_CONFIRMATION_FOR_DEMOTE("clan.confirmation-for-demote", false), + CLAN_PERCENTAGE_ONLINE_TO_DEMOTE("clan.percentage-online-to-demote", 100.0), + CLAN_FF_ON_BY_DEFAULT("clan.ff-on-by-default", false), + CLAN_MIN_TO_VERIFY("clan.min-to-verify", 1), + /* + ================ + > Tasks Settings + ================ + * + */ + TASKS_COLLECT_UPKEEP_HOUR("tasks.collect-upkeep.hour", 1), + TASKS_COLLECT_UPKEEP_MINUTE("tasks.collect-upkeep.minute", 30), + TASKS_COLLECT_UPKEEP_WARNING_HOUR("tasks.collect-upkeep-warning.hour", 12), + TASKS_COLLECT_UPKEEP_WARNING_MINUTE("tasks.collect-upkeep-warning.minute", 0), + TASKS_COLLECT_FEE_HOUR("tasks.collect-fee.hour", 1), + TASKS_COLLECT_FEE_MINUTE("tasks.collect-fee.minute", 0), + /* + ================ + > Page Settings + ================ + */ + PAGE_LEADER_COLOR("page.leader-color", "4"), + PAGE_UNTRUSTED_COLOR("page.untrusted-color", "8"), + PAGE_TRUSTED_COLOR("page.trusted-color", "f"), + PAGE_CLAN_NAME_COLOR("page.clan-name-color", "b"), + PAGE_SUBTITLE_COLOR("page.subtitle-color", "7"), + PAGE_HEADINGS_COLOR("page.headings-color", "8"), + PAGE_SEPARATOR("page.separator", "-"), + PAGE_SIZE("page.size", 100), + /* + ================ + > Clan Chat Settings + ================ + * + */ + CLANCHAT_ENABLE("clanchat.enable", true), + CLANCHAT_TAG_BASED("clanchat.tag-based-clan-chat", false), + CLANCHAT_ANNOUNCEMENT_COLOR("clanchat.announcement-color", "e"), + CLANCHAT_FORMAT("clanchat.format", "&b[%clan%&b] &4<%nick-color%%player%&4> %rank%: &b%message%"), + CLANCHAT_SPYFORMAT("clanchat.spy-format", "&8[Spy] [&bC&8] <%clan%&8> <%nick-color%*&8%player%>&8 %rank%: %message%"), + CLANCHAT_RANK("clanchat.rank", "&f[%rank%&f]"), + CLANCHAT_LEADER_COLOR("clanchat.leader-color", "4"), + CLANCHAT_TRUSTED_COLOR("clanchat.trusted-color", "f"), + CLANCHAT_MEMBER_COLOR("clanchat.member-color", "7"), + CLANCHAT_BRACKET_COLOR("clanchat.tag-bracket.color", "e"), + CLANCHAT_BRACKET_LEFT("clanchat.tag-bracket.left", ""), + CLANCHAT_BRACKET_RIGHT("clanchat.tag-bracket.right", ""), + CLANCHAT_NAME_COLOR("clanchat.name-color", "e"), + CLANCHAT_PLAYER_BRACKET_LEFT("clanchat.player-bracket.left", ""), + CLANCHAT_PLAYER_BRACKET_RIGHT("clanchat.player-bracket.right", ""), + CLANCHAT_MESSAGE_COLOR("clanchat.message-color", "b"), + /* + ================ + > Request Settings + ================ + * + */ + REQUEST_MESSAGE_COLOR("request.message-color", "b"), + REQUEST_FREQUENCY("request.ask-frequency-secs", 60), + REQUEST_MAX("request.max-asks-per-request", 1440), + /* + ================ + > BB Settings + ================ + */ + BB_COLOR("clanchat.color", "e"), + BB_ACCENT_COLOR("clanchat.accent-color", "8"), + BB_SHOW_ON_LOGIN("clanchat.show-on-login", true), + BB_SIZE("clanchat.size", 6), + BB_LOGIN_SIZE("clanchat.login-size", 6), + /* + ================ + > Ally Chat Settings + ================ + */ + ALLYCHAT_ENABLE("allychat.enable", true), + ALLYCHAT_FORMAT("allychat.format", "&b[Ally Chat] &4<%clan%&4> <%nick-color%%player%&4> %rank%: &b%message%"), + ALLYCHAT_SPYFORMAT("allychat.spy-format", "&8[Spy] [&cA&8] <%clan%&8> <%nick-color%*&8%player%>&8 %rank%: %message%"), + ALLYCHAT_RANK("allychat.rank", "&f[%rank%&f]"), + ALLYCHAT_LEADER_COLOR("allychat.leader-color", "4"), + ALLYCHAT_TRUSTED_COLOR("allychat.trusted-color", "f"), + ALLYCHAT_MEMBER_COLOR("allychat.member-color", "7"), + ALLYCHAT_BRACKET_COLOR("allychat.tag-bracket.color", "8"), + ALLYCHAT_BRACKET_lEFT("allychat.tag-bracket.left", ""), + ALLYCHAT_BRACKET_RIGHT("allychat.tag-bracket.right", ""), + ALLYCHAT_PLAYER_BRACKET_LEFT("allychat.player-bracket.left", ""), + ALLYCHAT_PLAYER_BRACKET_RIGHT("allychat.player-bracket.right", ""), + ALLYCHAT_MESSAGE_COLOR("allychat.message-color", "3"), + ALLYCHAT_TAG_COLOR("allychat.tag-color", ""), + /* + ================ + > Discord Chat Settings + ================ + */ + DISCORDCHAT_ENABLE("discordchat.enable", false), + DISCORDCHAT_FORMAT_TO("discordchat.discord-format", "%player% » %message%"), + DISCORDCHAT_FORMAT("discordchat.format", "&b[&9D&b] &b[%clan%&b] &4<%nick-color%%player%&4> %rank%: &b%message%"), + DISCORDCHAT_SPYFORMAT("discordchat.spy-format", "&8[Spy] [&9D&8] <%clan%&8> <%nick-color%*&8%player%>&8 %rank%: %message%"), + DISCORDCHAT_RANK("discordchat.rank", "[%rank%]"), + DISCORDCHAT_LEADER_ROLE("discordchat.leader-role", "Leader"), + DISCORDCHAT_LEADER_ID("discordchat.leader-id", "0"), + DISCORDCHAT_LEADER_COLOR("discordchat.leader-color", "231, 76, 60, 100"), + DISCORDCHAT_TEXT_CATEGORY_FORMAT("discordchat.text.category-format", "SC - TextChannels"), + DISCORDCHAT_TEXT_CATEGORY_IDS("discordchat.text.category-ids"), + DISCORDCHAT_TEXT_WHITELIST("discordchat.text.whitelist"), + DISCORDCHAT_TEXT_LIMIT("discordchat.text.clans-limit", 100), + /* + ================ + > Purge Settings + ================ + */ + PURGE_INACTIVE_PLAYER_DAYS("purge.inactive-player-data-days", 30), + PURGE_INACTIVE_CLAN_DAYS("purge.inactive-clan-days", 7), + PURGE_UNVERIFIED_CLAN_DAYS("purge.unverified-clan-days", 2), + /* + ================ + > MySQL Settings + ================ + */ + MYSQL_USERNAME("mysql.username", ""), + MYSQL_HOST("mysql.host", "localhost"), + MYSQL_PORT("mysql.port", 3306), + MYSQL_ENABLE("mysql.enable", false), + MYSQL_PASSWORD("mysql.password", ""), + MYSQL_DATABASE("mysql.database", ""), + /* + ================ + > Permissions Settings + ================ + */ + PERMISSIONS_AUTO_GROUP_GROUPNAME("permissions.auto-group-groupname", false), + /* + ================ + > Performance Settings + ================ + */ + PERFORMANCE_SAVE_PERIODICALLY("performance.save-periodically", true), + PERFORMANCE_SAVE_INTERVAL("performance.save-interval", 10), + PERFORMANCE_USE_THREADS("performance.use-threads", true), + PERFORMANCE_USE_BUNGEECORD("performance.use-bungeecord", false), + PERFORMANCE_HEAD_CACHING("performance.cache-player-heads", false), + + SAFE_CIVILIANS("safe-civilians", false); + + private final String path; + private final Object defaultValue; + + ConfigField(String path, Object defaultValue) { + this.path = path; + this.defaultValue = defaultValue; } - return saveInterval * 60; + ConfigField(String path) { + this.path = path; + this.defaultValue = null; + } } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/StorageManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/StorageManager.java index fc396c7e6..9e2c5dc0d 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/StorageManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/StorageManager.java @@ -27,6 +27,7 @@ import java.util.logging.Level; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; /** * @author phaed @@ -77,8 +78,9 @@ public void addChatBlock(CommandSender player, ChatBlock cb) { * Initiates the db */ public void initiateDB() { - if (plugin.getSettingsManager().isUseMysql()) { - core = new MySQLCore(plugin.getSettingsManager().getHost(), plugin.getSettingsManager().getDatabase(), plugin.getSettingsManager().getPort(), plugin.getSettingsManager().getUsername(), plugin.getSettingsManager().getPassword()); + SettingsManager settings = plugin.getSettingsManager(); + if (settings.is(MYSQL_ENABLE)) { + core = new MySQLCore(settings.getString(MYSQL_HOST), settings.getString(MYSQL_DATABASE), settings.getInt(MYSQL_PORT), settings.getString(MYSQL_USERNAME), settings.getString(MYSQL_PASSWORD)); if (core.checkConnection()) { plugin.getLogger().info(lang("mysql.connection.successful")); @@ -151,7 +153,7 @@ public void initiateDB() { core.execute(query); } } else { - SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("mysql.connection.failed")); + plugin.getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("mysql.connection.failed")); } } else { core = new SQLiteCore(plugin.getDataFolder().getPath()); @@ -228,7 +230,7 @@ public void initiateDB() { core.execute(query); } } else { - SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("sqlite.connection.failed")); + plugin.getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("sqlite.connection.failed")); } } } @@ -308,12 +310,12 @@ private void purgeClans(List clans) { continue; } if (clan.isVerified()) { - int purgeClan = plugin.getSettingsManager().getPurgeClan(); + int purgeClan = plugin.getSettingsManager().getInt(PURGE_INACTIVE_CLAN_DAYS); if (clan.getInactiveDays() > purgeClan && purgeClan > 0) { purge.add(clan); } } else { - int purgeUnverified = plugin.getSettingsManager().getPurgeUnverified(); + int purgeUnverified = plugin.getSettingsManager().getInt(PURGE_UNVERIFIED_CLAN_DAYS); if (clan.getInactiveDays() > purgeUnverified && purgeUnverified > 0) { purge.add(clan); } @@ -328,7 +330,7 @@ private void purgeClans(List clans) { } private void purgeClanPlayers(List cps) { - int purgePlayers = plugin.getSettingsManager().getPurgePlayers(); + int purgePlayers = plugin.getSettingsManager().getInt(PURGE_INACTIVE_PLAYER_DAYS); if (purgePlayers < 1) { return; } @@ -560,7 +562,7 @@ public List retrieveClanPlayers() { cp.setLocale(locale); if (!tag.isEmpty()) { - Clan clan = SimpleClans.getInstance().getClanManager().getClan(tag); + Clan clan = plugin.getClanManager().getClan(tag); if (clan != null) { cp.setClan(clan); @@ -643,7 +645,7 @@ public List retrieveClanPlayers() { if (!tag.isEmpty()) { Clan clanDB = retrieveOneClan(tag); - Clan clan = SimpleClans.getInstance().getClanManager().getClan(tag); + Clan clan = plugin.getClanManager().getClan(tag); if (clan != null && clanDB != null) { Clan clanReSync = SimpleClans.getInstance().getClanManager().getClan(tag); @@ -663,8 +665,8 @@ public List retrieveClanPlayers() { } else { plugin.getClanManager().importClan(clanDB); clanDB.validateWarring(); - Clan newclan = SimpleClans.getInstance().getClanManager().getClan(clanDB.getTag()); - cp.setClan(newclan); + Clan newClan = plugin.getClanManager().getClan(clanDB.getTag()); + cp.setClan(newClan); } } @@ -769,7 +771,7 @@ public void updateClan(Clan clan, boolean updateLastUsed) { if (updateLastUsed) { clan.updateLastUsed(); } - if (plugin.getSettingsManager().isSavePeriodically()) { + if (plugin.getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) { modifiedClans.add(clan); return; } @@ -847,7 +849,7 @@ public void run() { */ public void updateClanPlayer(ClanPlayer cp) { cp.updateLastSeen(); - if (plugin.getSettingsManager().isSavePeriodically()) { + if (plugin.getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) { modifiedClanPlayers.add(cp); return; } @@ -1115,7 +1117,7 @@ private void updateDatabase() { core.execute("ALTER TABLE sc_players ADD COLUMN `ally_kills` int(11) DEFAULT NULL;"); } - if (plugin.getSettingsManager().isUseMysql()) { + if (plugin.getSettingsManager().is(MYSQL_ENABLE)) { core.execute("ALTER TABLE sc_clans MODIFY color_tag VARCHAR(255);"); } @@ -1130,7 +1132,7 @@ private void updateDatabase() { query = "ALTER TABLE sc_kills ADD victim_uuid VARCHAR( 255 ) DEFAULT NULL;"; core.execute(query); } - boolean useMysql = plugin.getSettingsManager().isUseMysql(); + boolean useMysql = plugin.getSettingsManager().is(MYSQL_ENABLE); if (!core.existsColumn("sc_players", "uuid")) { query = "ALTER TABLE sc_players ADD uuid VARCHAR( 255 ) DEFAULT NULL;"; core.execute(query); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/TeleportManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/TeleportManager.java index 3c91dff01..fd98fa331 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/TeleportManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/TeleportManager.java @@ -3,7 +3,6 @@ import io.papermc.lib.PaperLib; import net.sacredlabyrinth.phaed.simpleclans.*; import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -20,6 +19,9 @@ import java.util.logging.Level; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static org.bukkit.ChatColor.AQUA; +import static org.bukkit.ChatColor.RED; public final class TeleportManager { private final SimpleClans plugin; @@ -38,11 +40,11 @@ public TeleportManager() { * @param clanName the Clan name */ public void addPlayer(Player player, Location destination, String clanName) { - int secs = SimpleClans.getInstance().getSettingsManager().getWaitSecs(); + int secs = SimpleClans.getInstance().getSettingsManager().getInt(CLAN_TELEPORT_DELAY); waitingPlayers.put(player.getUniqueId().toString(), new TeleportState(player, destination, clanName)); if (secs > 0) { - ChatBlock.sendMessage(player, ChatColor.AQUA + ChatBlock.sendMessage(player, AQUA + MessageFormat.format(lang("waiting.for.teleport.stand.still.for.0.seconds", player), secs)); } } @@ -52,7 +54,7 @@ private void sendTeleportBlocks(Player player, Location loc) { int x = loc.getBlockX(); int z = loc.getBlockZ(); - if (plugin.getSettingsManager().isTeleportBlocks()) { + if (plugin.getSettingsManager().is(TELEPORT_BLOCKS)) { player.sendBlockChange(new Location(loc.getWorld(), x + 1, loc.getBlockY() - 1, z + 1), Material.GLASS, (byte) 0); player.sendBlockChange(new Location(loc.getWorld(), x - 1, loc.getBlockY() - 1, z - 1), @@ -100,10 +102,10 @@ private void dropItems(Player player) { if (plugin.getPermissionsManager().has(player, "simpleclans.mod.keep-items")) { return; } - List itemsList = plugin.getSettingsManager().getItemsList(); + List itemsList = plugin.getSettingsManager().getItemList(); PlayerInventory inv = player.getInventory(); - boolean dropOnHome = plugin.getSettingsManager().isDropOnHome(); - boolean keepOnHome = plugin.getSettingsManager().isKeepOnHome(); + boolean dropOnHome = plugin.getSettingsManager().is(DROP_ITEMS_ON_CLAN_HOME); + boolean keepOnHome = plugin.getSettingsManager().is(KEEP_ITEMS_ON_CLAN_HOME); ItemStack[] contents = inv.getContents(); for (ItemStack item : contents) { if (item == null) { @@ -129,7 +131,7 @@ private void startCounter() { state.setProcessing(true); if (!Helper.isSameBlock(player.getLocation(), state.getLocation())) { - ChatBlock.sendMessage(player, ChatColor.RED + lang("you.moved.teleport.cancelled", player)); + ChatBlock.sendMessage(player, RED + lang("you.moved.teleport.cancelled", player)); iter.remove(); continue; } @@ -137,7 +139,7 @@ private void startCounter() { teleport(state); iter.remove(); } else { - ChatBlock.sendMessage(player, ChatColor.AQUA + "" + state.getCounter()); + ChatBlock.sendMessage(player, AQUA + "" + state.getCounter()); } state.setProcessing(false); @@ -160,7 +162,7 @@ private void teleport(TeleportState state) { public void teleportToHome(@NotNull Player player, @NotNull Location destination, @NotNull String clanName) { PaperLib.teleportAsync(player, destination, PlayerTeleportEvent.TeleportCause.COMMAND).thenAccept(result -> { if (result) { - ChatBlock.sendMessage(player, ChatColor.AQUA + lang("now.at.homebase", player, clanName)); + ChatBlock.sendMessage(player, AQUA + lang("now.at.homebase", player, clanName)); } else { plugin.getLogger().log(Level.WARNING, "An error occurred while teleporting a player"); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java index 1ab0dbd59..14a6664a7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/MySQLCore.java @@ -1,26 +1,27 @@ package net.sacredlabyrinth.phaed.simpleclans.storage; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; + import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Logger; -import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; -import net.sacredlabyrinth.phaed.simpleclans.threads.ThreadUpdateSQL; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_THREADS; /** * @author cc_madelg */ public class MySQLCore implements DBCore { - private Logger log; + private final Logger log; private Connection connection; - private String host; - private String username; - private String password; - private String database; - private int port; + private final String host; + private final String username; + private final String password; + private final String database; + private final int port; /** * @param host @@ -110,7 +111,7 @@ public ResultSet select(String query) { */ @Override public void insert(String query) { - if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { + if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) { executeAsync(query, "INSERT"); } else { try { @@ -131,7 +132,7 @@ public void insert(String query) { */ @Override public void update(String query) { - if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { + if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) { executeAsync(query, "UPDATE"); } else { try { @@ -152,7 +153,7 @@ public void update(String query) { */ @Override public void delete(String query) { - if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { + if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) { executeAsync(query, "DELETE"); } else { try { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java index 4ce180205..061dbe5df 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/storage/SQLiteCore.java @@ -1,5 +1,7 @@ package net.sacredlabyrinth.phaed.simpleclans.storage; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; + import java.io.File; import java.sql.Connection; import java.sql.DriverManager; @@ -7,9 +9,7 @@ import java.sql.SQLException; import java.util.logging.Logger; -import org.bukkit.scheduler.BukkitRunnable; - -import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_THREADS; /** * @author cc_madelg @@ -119,7 +119,7 @@ public ResultSet select(String query) { */ @Override public void insert(String query) { - if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { + if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) { executeAsync(query, "INSERT"); } else { try { @@ -140,7 +140,7 @@ public void insert(String query) { */ @Override public void update(String query) { - if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { + if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) { executeAsync(query, "UPDATE"); } else { try { @@ -161,7 +161,7 @@ public void update(String query) { */ @Override public void delete(String query) { - if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) { + if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) { executeAsync(query, "DELETE"); } else { try { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java index 1c1781236..f63c81fcf 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java @@ -10,6 +10,8 @@ import java.text.MessageFormat; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TASKS_COLLECT_FEE_HOUR; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TASKS_COLLECT_FEE_MINUTE; /** * @@ -28,8 +30,8 @@ public CollectFeeTask() { public void start() { SettingsManager sm = plugin.getSettingsManager(); - int hour = sm.getTasksCollectFeeHour(); - int minute = sm.getTasksCollectFeeMinute(); + int hour = sm.getInt(TASKS_COLLECT_FEE_HOUR); + int minute = sm.getInt(TASKS_COLLECT_FEE_MINUTE); long delay = Helper.getDelayTo(hour, minute); this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java index 138d1ccef..982b85037 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java @@ -1,6 +1,5 @@ package net.sacredlabyrinth.phaed.simpleclans.tasks; -import net.md_5.bungee.api.ChatColor; import net.sacredlabyrinth.phaed.simpleclans.EconomyResponse; import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; @@ -11,6 +10,8 @@ import java.text.MessageFormat; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static org.bukkit.ChatColor.AQUA; /** * @@ -29,8 +30,8 @@ public CollectUpkeepTask() { * Starts the repetitive task */ public void start() { - int hour = settingsManager.getTasksCollectUpkeepHour(); - int minute = settingsManager.getTasksCollectUpkeepMinute(); + int hour = settingsManager.getInt(TASKS_COLLECT_UPKEEP_HOUR); + int minute = settingsManager.getInt(TASKS_COLLECT_UPKEEP_MINUTE); long delay = Helper.getDelayTo(hour, minute); this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20); @@ -45,11 +46,11 @@ public void run() { throw new IllegalStateException("Use the start() method!"); } plugin.getClanManager().getClans().forEach((clan) -> { - if (settingsManager.isChargeUpkeepOnlyIfMemberFeeEnabled() && !clan.isMemberFeeEnabled()) { + if (settingsManager.is(ECONOMY_UPKEEP_REQUIRES_MEMBER_FEE) && !clan.isMemberFeeEnabled()) { return; } - double upkeep = settingsManager.getClanUpkeep(); - if (settingsManager.isMultiplyUpkeepBySize()) { + double upkeep = settingsManager.getDouble(ECONOMY_UPKEEP); + if (settingsManager.is(ECONOMY_MULTIPLY_UPKEEP_BY_CLAN_SIZE)) { upkeep = upkeep * clan.getSize(); } @@ -58,7 +59,7 @@ public void run() { clan.disband(null, true, false); } if (response == EconomyResponse.SUCCESS) { - clan.addBb(ChatColor.AQUA + MessageFormat.format(lang("upkeep.collected"), upkeep), false); + clan.addBb(AQUA + MessageFormat.format(lang("upkeep.collected"), upkeep), false); } }); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/SaveDataTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/SaveDataTask.java index 1e0dcd9f7..98bc9b5ba 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/SaveDataTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/SaveDataTask.java @@ -1,8 +1,9 @@ package net.sacredlabyrinth.phaed.simpleclans.tasks; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import org.bukkit.scheduler.BukkitRunnable; -import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_SAVE_INTERVAL; /** * @@ -17,7 +18,7 @@ public class SaveDataTask extends BukkitRunnable { * Starts the repetitive task */ public void start() { - long interval = plugin.getSettingsManager().getSaveInterval() * 20L; + long interval = plugin.getSettingsManager().getMinutes(PERFORMANCE_SAVE_INTERVAL); runTaskTimerAsynchronously(plugin, interval, interval); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java index 5d9f659b3..82758b203 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java @@ -1,12 +1,15 @@ package net.sacredlabyrinth.phaed.simpleclans.tasks; -import java.text.MessageFormat; import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; -import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import org.bukkit.scheduler.BukkitRunnable; +import java.text.MessageFormat; + +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; + /** * * @author roinujnosde @@ -25,8 +28,8 @@ public UpkeepWarningTask() { * */ public void start() { - int hour = sm.getTasksCollectUpkeepWarningHour(); - int minute = sm.getTasksCollectUpkeepWarningMinute(); + int hour = sm.getInt(TASKS_COLLECT_UPKEEP_WARNING_HOUR); + int minute = sm.getInt(TASKS_COLLECT_UPKEEP_WARNING_MINUTE); long delay = Helper.getDelayTo(hour, minute); this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20); @@ -41,12 +44,12 @@ public void run() { throw new IllegalStateException("Use the start() method!"); } plugin.getClanManager().getClans().forEach((clan) -> { - if (sm.isChargeUpkeepOnlyIfMemberFeeEnabled() && !clan.isMemberFeeEnabled()) { + if (sm.is(ECONOMY_UPKEEP_REQUIRES_MEMBER_FEE) && !clan.isMemberFeeEnabled()) { return; } final double balance = clan.getBalance(); - double upkeep = sm.getClanUpkeep(); - if (sm.isMultiplyUpkeepBySize()) { + double upkeep = sm.getDouble(ECONOMY_UPKEEP); + if (sm.is(ECONOMY_MULTIPLY_UPKEEP_BY_CLAN_SIZE)) { upkeep = upkeep * clan.getSize(); } if (balance < upkeep) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryController.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryController.java index 18373b4a5..57af72199 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryController.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryController.java @@ -24,6 +24,7 @@ import java.util.*; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.COMMANDS_CLAN; /** * @@ -173,7 +174,7 @@ public static boolean isRegistered(@NotNull Player player) { */ public static void runSubcommand(@NotNull Player player, @NotNull String subcommand, boolean update, String... args) { SimpleClans plugin = SimpleClans.getInstance(); - String baseCommand = plugin.getSettingsManager().getCommandClan(); + String baseCommand = plugin.getSettingsManager().getString(COMMANDS_CLAN); String finalCommand = String.format("%s %s ", baseCommand, subcommand) + String.join(" ", args); new BukkitRunnable() { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryDrawer.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryDrawer.java index 1b30245bc..1f0c88c0f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryDrawer.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/InventoryDrawer.java @@ -17,6 +17,7 @@ import java.util.logging.Level; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class InventoryDrawer { private static final SimpleClans plugin = SimpleClans.getInstance(); @@ -60,7 +61,7 @@ private static Inventory prepareInventory(@NotNull SCFrame frame) { long start = System.currentTimeMillis(); setComponents(inventory, frame); - if (plugin.getSettingsManager().isDebugging()) { + if (plugin.getSettingsManager().is(DEBUG)) { plugin.getLogger().log(Level.INFO, String.format("It took %s millisecond(s) to load the frame %s for %s", System.currentTimeMillis() - start, frame.getTitle(), frame.getViewer().getName())); @@ -111,7 +112,7 @@ private static void processLineBreaks(SCComponent c) { if (line.isEmpty()) { continue; } - WordWrapper wrapper = new WordWrapper(line, plugin.getSettingsManager().getLoreLength()); + WordWrapper wrapper = new WordWrapper(line, plugin.getSettingsManager().getInt(LORE_LENGTH)); newLore.addAll(Arrays.asList(wrapper.wrap())); } itemMeta.setLore(newLore); @@ -123,8 +124,8 @@ private static void processLineBreaks(SCComponent c) { private static void runHelpCommand(@NotNull Player player) { Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getConsoleSender().sendMessage(lang("gui.not.supported"))); SettingsManager settingsManager = plugin.getSettingsManager(); - settingsManager.setEnableGUI(false); - String commandClan = settingsManager.getCommandClan(); + settingsManager.set(ENABLE_GUI, false); + String commandClan = settingsManager.getString(COMMANDS_CLAN); player.performCommand(commandClan); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/SCComponentImpl.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/SCComponentImpl.java index 3417a2223..ba0855b73 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/SCComponentImpl.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/SCComponentImpl.java @@ -1,8 +1,5 @@ package net.sacredlabyrinth.phaed.simpleclans.ui; -import java.util.ArrayList; -import java.util.List; - import com.cryptomorin.xseries.XMaterial; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; @@ -11,6 +8,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; + public class SCComponentImpl extends SCComponent { @NotNull @@ -29,7 +29,7 @@ public SCComponentImpl(@Nullable String displayName, @Nullable List lore public SCComponentImpl(@Nullable String displayName, @Nullable List lore, @NotNull XMaterial material, int slot) { - this(displayName, lore, material.parseItem(true), slot); + this(displayName, lore, material.parseItem(), slot); } public SCComponentImpl(@Nullable String displayName, @Nullable List lore, @Nullable ItemStack item, @@ -63,7 +63,7 @@ public static class Builder { private @Nullable List lore; public Builder(@NotNull XMaterial material) { - this(material.parseItem(true)); + this(material.parseItem()); } public Builder(@NotNull Material material) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanDetailsFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanDetailsFrame.java index 624c2c1a2..26b577897 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanDetailsFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanDetailsFrame.java @@ -5,6 +5,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel; import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import net.sacredlabyrinth.phaed.simpleclans.ui.*; +import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils; import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -16,16 +17,19 @@ import java.util.*; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class ClanDetailsFrame extends SCFrame { private final Clan clan; private final ClanPlayer cp; private final SimpleClans plugin; + private final SettingsManager settings; public ClanDetailsFrame(@Nullable SCFrame parent, @NotNull Player viewer, @NotNull Clan clan) { super(parent, viewer); this.clan = clan; plugin = SimpleClans.getInstance(); + settings = plugin.getSettingsManager(); cp = plugin.getClanManager().getClanPlayer(getViewer()); } @@ -91,16 +95,15 @@ private SCComponent createChatComponent(boolean clanEnabled, boolean allyEnabled String clanStatus = clanEnabled ? joined : notJoined; String allyStatus = allyEnabled ? joined : notJoined; - SettingsManager sm = plugin.getSettingsManager(); - String chatCommand = sm.isTagBasedClanChat() ? clan.getTag() : sm.getCommandClanChat(); + String chatCommand = settings.is(CLANCHAT_TAG_BASED) ? clan.getTag() : settings.getString(COMMANDS_CLAN_CHAT); String joinArg = lang("join", getViewer()); String leaveArg = lang("leave", getViewer()); return new SCComponentImpl(lang("gui.clandetails.chat.title", getViewer()), Arrays.asList( lang("gui.clandetails.chat.clan.chat.lore", getViewer(), chatCommand), lang("gui.clandetails.chat.clan.join.leave.lore", getViewer(), chatCommand, joinArg, leaveArg), - lang("gui.clandetails.chat.ally.chat.lore", getViewer(), sm.getCommandAlly()), - lang("gui.clandetails.chat.ally.join.leave.lore", getViewer(), sm.getCommandAlly(), joinArg, leaveArg), + lang("gui.clandetails.chat.ally.chat.lore", getViewer(), settings.getString(COMMANDS_ALLY)), + lang("gui.clandetails.chat.ally.join.leave.lore", getViewer(), settings.getString(COMMANDS_ALLY), joinArg, leaveArg), lang("gui.clandetails.chat.clan.status.lore", getViewer(), clanStatus), lang("gui.clandetails.chat.ally.status.lore", getViewer(), allyStatus), lang("gui.clandetails.chat.clan.toggle.lore", getViewer()), @@ -151,8 +154,7 @@ private void addResign() { private void addVerify() { boolean verified = clan.isVerified(); - boolean purchaseVerification = plugin.getSettingsManager().isRequireVerification() - && plugin.getSettingsManager().isePurchaseVerification(); + boolean purchaseVerification = settings.is(REQUIRE_VERIFICATION) && settings.is(ECONOMY_PURCHASE_CLAN_VERIFY); XMaterial material = verified ? XMaterial.REDSTONE_TORCH : XMaterial.LEVER; String title = verified ? lang("gui.clandetails.verified.title", getViewer()) @@ -160,7 +162,7 @@ private void addVerify() { List lore = verified ? null : new ArrayList<>(); if (!verified) { if (purchaseVerification) { - lore.add(lang("gui.clandetails.verify.price.lore", getViewer(), plugin.getSettingsManager().getVerificationPrice())); + lore.add(lang("gui.clandetails.verify.price.lore", getViewer(), settings.getDouble(ECONOMY_VERIFICATION_PRICE))); } lore.add(lang("gui.clandetails.not.verified.lore", getViewer())); } @@ -233,9 +235,9 @@ private void togglePersonalFf() { private void addRegroup() { double price = 0; - if (plugin.getSettingsManager().isePurchaseHomeRegroup()) { - price = plugin.getSettingsManager().getHomeRegroupPrice(); - if (!plugin.getSettingsManager().iseUniqueTaxOnRegroup()) { + if (settings.is(ECONOMY_PURCHASE_HOME_REGROUP)) { + price = settings.getDouble(ECONOMY_REGROUP_PRICE); + if (!settings.is(ECONOMY_UNIQUE_TAX_ON_REGROUP)) { price = price * VanishUtils.getNonVanished(getViewer(), clan).size(); } } @@ -259,9 +261,8 @@ private void addRegroup() { } private void addHome() { - SettingsManager sm = plugin.getSettingsManager(); - double homePrice = sm.isePurchaseHomeTeleport() ? sm.getHomeTeleportPrice() : 0; - double setPrice = sm.isePurchaseHomeTeleportSet() ? sm.getHomeTeleportPriceSet() : 0; + double homePrice = settings.is(ECONOMY_PURCHASE_HOME_TELEPORT) ? settings.getDouble(ECONOMY_HOME_TELEPORT_PRICE) : 0; + double setPrice = settings.is(ECONOMY_PURCHASE_HOME_TELEPORT_SET) ? settings.getDouble(ECONOMY_HOME_TELEPORT_SET_PRICE) : 0; List lore = new ArrayList<>(); if (homePrice != 0) lore.add(lang("gui.clandetails.home.lore.teleport.price", getViewer(), homePrice)); @@ -336,7 +337,7 @@ private void updateFrame() { @Override public @NotNull String getTitle() { - return lang("gui.clandetails.title",getViewer(), Helper.stripColors(clan.getColorTag()), + return lang("gui.clandetails.title",getViewer(), ChatUtils.stripColors(clan.getColorTag()), clan.getName()); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanListFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanListFrame.java index 2ccb1a98d..6fdd13a27 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanListFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/ClanListFrame.java @@ -21,6 +21,7 @@ import java.util.stream.Collectors; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SHOW_UNVERIFIED_ON_LIST; public class ClanListFrame extends SCFrame { private final List clans; @@ -32,7 +33,7 @@ public ClanListFrame(SCFrame parent, Player viewer) { SimpleClans plugin = SimpleClans.getInstance(); SettingsManager sm = plugin.getSettingsManager(); clans = plugin.getClanManager().getClans().stream() - .filter(clan -> clan.isVerified() || sm.isShowUnverifiedOnList()).collect(Collectors.toList()); + .filter(clan -> clan.isVerified() || sm.is(SHOW_UNVERIFIED_ON_LIST)).collect(Collectors.toList()); paginator = new Paginator(getSize() - 9, clans); plugin.getClanManager().sortClansByKDR(clans); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/Components.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/Components.java index 5bf644e58..a0400126e 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/Components.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/Components.java @@ -25,6 +25,7 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class Components { @@ -60,7 +61,7 @@ public static SCComponent getPlayerComponent(SCFrame frame, Player viewer, ClanP lang("gui.playerdetails.player.lore.past.clans", viewer, cp.getPastClansString( lang("gui.playerdetails.player.lore.past.clans.separator", viewer))), lang("gui.playerdetails.player.lore.inactive", viewer, cp.getInactiveDays(), - pl.getSettingsManager().getPurgePlayers())), + pl.getSettingsManager().getInt(PURGE_INACTIVE_PLAYER_DAYS))), XMaterial.PLAYER_HEAD, slot); OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId()); setOwningPlayer(c.getItem(), offlinePlayer); @@ -117,7 +118,7 @@ public static SCComponent getClanComponent(@NotNull SCFrame frame, @NotNull Play lang("gui.clandetails.clan.lore.inactive", viewer, clan.getInactiveDays(), Helper.formatMaxInactiveDays(clan.getMaxInactiveDays()))); } else { name = lang("gui.clandetails.free.agent.title", viewer); - double price = pl.getSettingsManager().isePurchaseCreation() ? pl.getSettingsManager().getCreationPrice() : 0; + double price = pl.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_CREATE) ? pl.getSettingsManager().getDouble(ECONOMY_CREATION_PRICE) : 0; lore = new ArrayList<>(); if (price != 0) { lore.add(lang("gui.clandetails.free.agent.create.clan.price.lore", frame.getViewer(), price)); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/InviteFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/InviteFrame.java index 8f5c091c3..3c5804e1f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/InviteFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/InviteFrame.java @@ -17,6 +17,7 @@ import java.util.stream.Collectors; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class InviteFrame extends SCFrame { @@ -50,7 +51,7 @@ public void createComponents() { @NotNull private SCComponent createPlayerComponent(@NotNull Player player, int slot) { - double price = plugin.getSettingsManager().isePurchaseInvite() ? plugin.getSettingsManager().getInvitePrice() : 0; + double price = plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_INVITE) ? plugin.getSettingsManager().getDouble(ECONOMY_INVITE_PRICE) : 0; List lore = new ArrayList<>(); if (price != 0) lore.add(lang("gui.invite.player.price.lore", getViewer(), price)); lore.add(lang("gui.invite.player.lore", getViewer())); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/LeaderboardFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/LeaderboardFrame.java index f2500bea4..263e50708 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/LeaderboardFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/LeaderboardFrame.java @@ -24,80 +24,80 @@ public class LeaderboardFrame extends SCFrame { - private final Paginator paginator; - private final List clanPlayers; - private final RankingNumberResolver rankingResolver; - - public LeaderboardFrame(Player viewer, SCFrame parent) { - super(parent, viewer); - - SimpleClans plugin = SimpleClans.getInstance(); - clanPlayers = plugin.getClanManager().getAllClanPlayers(); - - rankingResolver = new RankingNumberResolver<>(clanPlayers, c -> KDRFormat.toBigDecimal(c.getKDR()), false, - plugin.getSettingsManager().getRankingType()); - paginator = new Paginator(getSize() - 9, this.clanPlayers); - } - - @Override - public void createComponents() { - for (int slot = 0; slot < 9; slot++) { - if (slot == 2 || slot == 6 || slot == 7) - continue; - add(Components.getPanelComponent(slot)); - } - add(Components.getBackComponent(getParent(), 2, getViewer())); - - add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer())); - add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer())); - - int slot = 9; - for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) { - ClanPlayer cp = clanPlayers.get(i); - SCComponent c = new SCComponentImpl( - lang("gui.leaderboard.player.title", getViewer(), - rankingResolver.getRankingNumber(cp), cp.getName()), - Arrays.asList( - cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan",getViewer()) - : lang("gui.playerdetails.player.lore.clan",getViewer(), - cp.getClan().getColorTag(), cp.getClan().getName()), - lang("gui.playerdetails.player.lore.kdr",getViewer(), KDRFormat.format(cp.getKDR())), - lang("gui.playerdetails.player.lore.last.seen",getViewer(), cp.getLastSeenString(getViewer()))), - XMaterial.PLAYER_HEAD, slot); - OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId()); - Components.setOwningPlayer(c.getItem(), offlinePlayer); - c.setListener(ClickType.LEFT, - () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer))); - c.setLorePermission("simpleclans.anyone.leaderboard"); - add(c); - slot++; - } - } - - private void previousPage() { - if (paginator.previousPage()) { - updateFrame(); - } - } - - private void nextPage() { - if (paginator.nextPage()) { - updateFrame(); - } - } - - private void updateFrame() { - InventoryDrawer.open(this); - } - - @Override - public @NotNull String getTitle() { - return lang("gui.leaderboard.title",getViewer(), clanPlayers.size()); - } - - @Override - public int getSize() { - return 6 * 9; - } + private final Paginator paginator; + private final List clanPlayers; + private final RankingNumberResolver rankingResolver; + + public LeaderboardFrame(Player viewer, SCFrame parent) { + super(parent, viewer); + + SimpleClans plugin = SimpleClans.getInstance(); + clanPlayers = plugin.getClanManager().getAllClanPlayers(); + + rankingResolver = new RankingNumberResolver<>(clanPlayers, c -> KDRFormat.toBigDecimal(c.getKDR()), false, + plugin.getSettingsManager().getRankingType()); + paginator = new Paginator(getSize() - 9, this.clanPlayers); + } + + @Override + public void createComponents() { + for (int slot = 0; slot < 9; slot++) { + if (slot == 2 || slot == 6 || slot == 7) + continue; + add(Components.getPanelComponent(slot)); + } + add(Components.getBackComponent(getParent(), 2, getViewer())); + + add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer())); + add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer())); + + int slot = 9; + for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) { + ClanPlayer cp = clanPlayers.get(i); + SCComponent c = new SCComponentImpl( + lang("gui.leaderboard.player.title", getViewer(), + rankingResolver.getRankingNumber(cp), cp.getName()), + Arrays.asList( + cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer()) + : lang("gui.playerdetails.player.lore.clan", getViewer(), + cp.getClan().getColorTag(), cp.getClan().getName()), + lang("gui.playerdetails.player.lore.kdr", getViewer(), KDRFormat.format(cp.getKDR())), + lang("gui.playerdetails.player.lore.last.seen", getViewer(), cp.getLastSeenString(getViewer()))), + XMaterial.PLAYER_HEAD, slot); + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId()); + Components.setOwningPlayer(c.getItem(), offlinePlayer); + c.setListener(ClickType.LEFT, + () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer))); + c.setLorePermission("simpleclans.anyone.leaderboard"); + add(c); + slot++; + } + } + + private void previousPage() { + if (paginator.previousPage()) { + updateFrame(); + } + } + + private void nextPage() { + if (paginator.nextPage()) { + updateFrame(); + } + } + + private void updateFrame() { + InventoryDrawer.open(this); + } + + @Override + public @NotNull String getTitle() { + return lang("gui.leaderboard.title", getViewer(), clanPlayers.size()); + } + + @Override + public int getSize() { + return 6 * 9; + } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/MainFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/MainFrame.java index 0c5e2c057..ba2725750 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/MainFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/MainFrame.java @@ -13,6 +13,7 @@ import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; public class MainFrame extends SCFrame { @@ -70,7 +71,7 @@ private void addClanList() { } private void addLanguageSelector() { - if (plugin.getSettingsManager().isLanguagePerPlayer()) { + if (plugin.getSettingsManager().is(LANGUAGE_SELECTOR)) { SCComponent language = new SCComponentImpl.Builder(XMaterial.MAP) .withDisplayName(lang("gui.main.languageselector.title", getViewer())) .withSlot(7).withLore(Arrays.asList(lang("gui.main.languageselector.lore.left.click", getViewer()) @@ -87,9 +88,9 @@ private void addLanguageSelector() { public void addResetKdr() { List resetKrLore; - if (plugin.getSettingsManager().isePurchaseResetKdr()) { + if (plugin.getSettingsManager().is(ECONOMY_PURCHASE_RESET_KDR)) { resetKrLore = Arrays.asList( - lang("gui.main.reset.kdr.lore.price", getViewer(), plugin.getSettingsManager().geteResetKdr()), + lang("gui.main.reset.kdr.lore.price", getViewer(), plugin.getSettingsManager().getString(ECONOMY_RESET_KDR_PRICE)), lang("gui.main.reset.kdr.lore", getViewer())); } else { resetKrLore = Collections.singletonList(lang("gui.main.reset.kdr.lore", getViewer())); @@ -104,7 +105,7 @@ public void addResetKdr() { @Override public @NotNull String getTitle() { - return lang("gui.main.title", getViewer(), plugin.getSettingsManager().getServerName()); + return lang("gui.main.title", getViewer(), plugin.getSettingsManager().getColored(SERVER_NAME)); } @Override diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/PlayerDetailsFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/PlayerDetailsFrame.java index 69ba45006..158ae9420 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/PlayerDetailsFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/PlayerDetailsFrame.java @@ -5,6 +5,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.RankPermission; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import net.sacredlabyrinth.phaed.simpleclans.ui.*; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -14,6 +15,8 @@ import java.util.Arrays; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_CONFIRMATION_FOR_DEMOTE; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_CONFIRMATION_FOR_PROMOTE; public class PlayerDetailsFrame extends SCFrame { @@ -61,16 +64,17 @@ private void addKick() { } private void addPromoteDemote() { + SettingsManager settings = plugin.getSettingsManager(); SCComponent promoteDemote = new SCComponentImpl(lang("gui.playerdetails.promote.demote.title",getViewer()), Arrays.asList(lang("gui.playerdetails.promote.lore.left.click",getViewer()), lang("gui.playerdetails.demote.lore.right.click",getViewer())), XMaterial.GUNPOWDER, 30); promoteDemote.setConfirmationRequired(ClickType.LEFT); promoteDemote.setListener(ClickType.LEFT, - () -> InventoryController.runSubcommand(getViewer(), "promote", !plugin.getSettingsManager().isConfirmationForPromote(), subjectName)); + () -> InventoryController.runSubcommand(getViewer(), "promote", !settings.is(CLAN_CONFIRMATION_FOR_PROMOTE), subjectName)); promoteDemote.setPermission(ClickType.LEFT, "simpleclans.leader.promote"); promoteDemote.setListener(ClickType.RIGHT, - () -> InventoryController.runSubcommand(getViewer(), "demote", !plugin.getSettingsManager().isConfirmationForDemote(), subjectName)); + () -> InventoryController.runSubcommand(getViewer(), "demote", !settings.is(CLAN_CONFIRMATION_FOR_DEMOTE), subjectName)); promoteDemote.setConfirmationRequired(ClickType.RIGHT); add(promoteDemote); promoteDemote.setPermission(ClickType.RIGHT, "simpleclans.leader.demote"); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java index 22562eb12..604cb299a 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java @@ -1,8 +1,6 @@ package net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff; -import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; -import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer; import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent; import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame; @@ -19,6 +17,7 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; @@ -58,16 +57,15 @@ public void createComponents() { } private void loadPlayers() { - SimpleClans plugin = SimpleClans.getInstance(); - ClanManager clanManager = plugin.getClanManager(); if (onlineOnly) { players = new ArrayList<>(Bukkit.getOnlinePlayers()); } else { - players = clanManager.getAllClanPlayers().stream().map(ClanPlayer::getUniqueId) - .map(Bukkit::getOfflinePlayer).collect(Collectors.toList()); - List onlinePlayers = Bukkit.getOnlinePlayers().stream().filter(p -> !players.contains(p)) - .collect(Collectors.toList()); - players.addAll(onlinePlayers); + List allClanPlayers = Stream.concat(SimpleClans.getInstance().getClanManager(). + getAllClanPlayers().stream().map(cp -> Bukkit.getOfflinePlayer(cp.getUniqueId())), + Bukkit.getOnlinePlayers().stream()) + .distinct() + .collect(Collectors.toList()); + players.addAll(allClanPlayers); } players = players.stream().filter(p -> p.getName() != null).collect(Collectors.toList()); players.sort(Comparator.comparing(OfflinePlayer::getName)); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/StaffFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/StaffFrame.java index ccf39ee79..8a5a1b964 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/StaffFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/StaffFrame.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.Nullable; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.GLOBAL_FRIENDLY_FIRE; import static net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff.ClanListFrame.Type; public class StaffFrame extends SCFrame { @@ -79,7 +80,7 @@ private void addReload() { private void addGlobalFf() { SettingsManager sm = SimpleClans.getInstance().getSettingsManager(); - boolean globalffAllowed = sm.isGlobalff(); + boolean globalffAllowed = sm.is(GLOBAL_FRIENDLY_FIRE); String status = globalffAllowed ? lang("allowed", getViewer()) : lang("auto", getViewer()); SCComponent globalFf = new SCComponentImpl.Builder(XMaterial.DIAMOND_SWORD).withSlot(12) .withDisplayName(lang("gui.staff.global.ff.title", getViewer())) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatFormatMigration.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatFormatMigration.java index 1e7c17a38..c321efafe 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatFormatMigration.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatFormatMigration.java @@ -4,6 +4,8 @@ import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import org.bukkit.configuration.file.FileConfiguration; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; + /** * * @author RoinujNosde @@ -25,24 +27,24 @@ public void migrateClanChat() { StringBuilder sb = new StringBuilder(); sb.append('&'); - sb.append(sm.getClanChatBracketColor()); - sb.append(sm.getClanChatTagBracketLeft()); + sb.append(sm.getColored(CLANCHAT_BRACKET_COLOR)); + sb.append(sm.getString(CLANCHAT_BRACKET_LEFT)); sb.append("%clan%"); sb.append("&"); - sb.append(sm.getClanChatBracketColor()); - sb.append(sm.getClanChatTagBracketRight()); + sb.append(sm.getColored(CLANCHAT_BRACKET_COLOR)); + sb.append(sm.getString(CLANCHAT_BRACKET_RIGHT)); sb.append(" "); sb.append('&'); - sb.append(sm.getClanChatNameColor()); - sb.append(sm.getClanChatPlayerBracketLeft()); + sb.append(sm.getColored(CLANCHAT_NAME_COLOR)); + sb.append(sm.getString(CLANCHAT_PLAYER_BRACKET_LEFT)); sb.append("%nick-color%"); sb.append("%player%"); sb.append('&'); - sb.append(sm.getClanChatNameColor()); - sb.append(sm.getClanChatPlayerBracketRight()); + sb.append(sm.getColored(CLANCHAT_NAME_COLOR)); + sb.append(sm.getString(CLANCHAT_PLAYER_BRACKET_RIGHT)); sb.append(" %rank%: "); sb.append('&'); - sb.append(sm.getClanChatMessageColor()); + sb.append(sm.getColored(CLANCHAT_MESSAGE_COLOR)); sb.append("%message%"); c.set("clanchat.format", sb.toString()); @@ -66,27 +68,27 @@ public void migrateAllyChat() { StringBuilder sb = new StringBuilder(); sb.append('&'); - sb.append(sm.getAllyChatBracketColor()); - sb.append(sm.getAllyChatTagBracketLeft()); + sb.append(sm.getColored(ALLYCHAT_BRACKET_COLOR)); + sb.append(sm.getString(ALLYCHAT_BRACKET_lEFT)); sb.append('&'); - sb.append(sm.getAllyChatTagColor()); - sb.append(sm.getCommandAlly()); + sb.append(sm.getColored(ALLYCHAT_TAG_COLOR)); + sb.append(sm.getString(COMMANDS_ALLY)); sb.append('&'); - sb.append(sm.getAllyChatBracketColor()); - sb.append(sm.getAllyChatTagBracketRight()); + sb.append(sm.getColored(ALLYCHAT_BRACKET_COLOR)); + sb.append(sm.getString(ALLYCHAT_BRACKET_RIGHT)); sb.append(" "); sb.append("&4<%clan%&4> "); sb.append('&'); - sb.append(sm.getAllyChatBracketColor()); - sb.append(sm.getAllyChatPlayerBracketLeft()); + sb.append(sm.getColored(ALLYCHAT_BRACKET_COLOR)); + sb.append(sm.getString(ALLYCHAT_PLAYER_BRACKET_LEFT)); sb.append("%nick-color%"); sb.append("%player%"); sb.append('&'); - sb.append(sm.getAllyChatBracketColor()); - sb.append(sm.getAllyChatPlayerBracketRight()); + sb.append(sm.getColored(ALLYCHAT_BRACKET_COLOR)); + sb.append(sm.getString(ALLYCHAT_PLAYER_BRACKET_RIGHT)); sb.append(" %rank%: "); sb.append('&'); - sb.append(sm.getAllyChatMessageColor()); + sb.append(sm.getColored(ALLYCHAT_MESSAGE_COLOR)); sb.append("%message%"); c.set("allychat.format", sb.toString()); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java index b9a9167d9..0f01a2f89 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java @@ -34,6 +34,11 @@ public class ChatUtils { private ChatUtils() { } + public static String getColorByChar(char character) { + ChatColor color = ChatColor.getByChar(character); + return color != null ? color.toString() : ""; + } + public static String parseColors(@NotNull String text) { // Special thanks to the Spigot community! // https://www.spigotmc.org/threads/hex-color-code-translate.449748/#post-3867795 @@ -60,6 +65,25 @@ public static String stripColors(String text) { return oldStripColors(text); } + public static String getLastColorCode(String msg) { + if (msg.length() < 2) { + return ""; + } + + String one = msg.substring(msg.length() - 2, msg.length() - 1); + String two = msg.substring(msg.length() - 1); + + if (one.equals("\u00a7")) { + return one + two; + } + + if (one.equals("&")) { + return getColorByChar(two.charAt(0)); + } + + return ""; + } + private static String oldStripColors(String text) { return text.replaceAll("[&][0-9A-Fa-fk-orx]", "") .replaceAll(String.valueOf((char) 194), "") //don't know why diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/TagValidator.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/TagValidator.java index a835fda7c..ecda42b87 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/TagValidator.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/TagValidator.java @@ -2,12 +2,13 @@ import net.sacredlabyrinth.phaed.simpleclans.Helper; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static org.bukkit.ChatColor.RED; public class TagValidator { @@ -30,29 +31,29 @@ public TagValidator(@NotNull SimpleClans plugin, @NotNull Player player, @NotNul @Nullable public String getErrorMessage() { String cleanTag = ChatUtils.stripColors(this.tag); - if (tag.length() > 255 && plugin.getSettingsManager().isUseMysql()) { + if (tag.length() > 255 && plugin.getSettingsManager().is(MYSQL_ENABLE)) { return lang("your.clan.color.tag.cannot.be.longer.than.characters", player, 255); } if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass")) { if (plugin.getSettingsManager().isDisallowedWord(cleanTag.toLowerCase())) { - error = ChatColor.RED + lang("that.tag.name.is.disallowed", player); + error = RED + lang("that.tag.name.is.disallowed", player); } if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.coloredtag") && tag.contains("&")) { - error = ChatColor.RED + lang("your.tag.cannot.contain.color.codes", player); + error = RED + lang("your.tag.cannot.contain.color.codes", player); } - if (cleanTag.length() < plugin.getSettingsManager().getTagMinLength()) { - error = ChatColor.RED + + if (cleanTag.length() < plugin.getSettingsManager().getInt(TAG_MIN_LENGTH)) { + error = RED + lang("your.clan.tag.must.be.longer.than.characters", player, - plugin.getSettingsManager().getTagMinLength()); + plugin.getSettingsManager().getInt(TAG_MIN_LENGTH)); } - if (cleanTag.length() > plugin.getSettingsManager().getTagMaxLength()) { - error = ChatColor.RED + + if (cleanTag.length() > plugin.getSettingsManager().getInt(TAG_MAX_LENGTH)) { + error = RED + lang("your.clan.tag.cannot.be.longer.than.characters", player, - plugin.getSettingsManager().getTagMaxLength()); + plugin.getSettingsManager().getInt(TAG_MAX_LENGTH)); } if (plugin.getSettingsManager().hasDisallowedColor(tag)) { - error = ChatColor.RED + + error = RED + lang("your.tag.cannot.contain.the.following.colors", player, plugin.getSettingsManager().getDisallowedColorString()); } @@ -64,8 +65,8 @@ public String getErrorMessage() { private void checkAlphabet() { String cleanTag = Helper.cleanTag(tag); - String alphabetError = ChatColor.RED + lang("your.clan.tag.can.only.contain.letters.numbers.and.color.codes", player); - if (plugin.getSettingsManager().isAcceptOtherAlphabetsLettersOnTag()) { + String alphabetError = RED + lang("your.clan.tag.can.only.contain.letters.numbers.and.color.codes", player); + if (plugin.getSettingsManager().is(ACCEPT_OTHER_ALPHABETS_LETTERS)) { for (char c : cleanTag.toCharArray()) { if (!Character.isLetterOrDigit(c)) { error = alphabetError; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/VanishUtils.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/VanishUtils.java index 523c026cc..55960bd91 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/VanishUtils.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/VanishUtils.java @@ -16,7 +16,7 @@ public class VanishUtils { private VanishUtils() {} public static @NotNull List getNonVanished(@Nullable CommandSender viewer, @NotNull Clan clan) { - return getNonVanished(viewer, clan.getAllMembers()); + return getNonVanished(viewer, clan.getMembers()); } public static @NotNull List getNonVanished(@Nullable CommandSender viewer, diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 702373e65..c00c653b9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -27,6 +27,7 @@ settings: rival-limit-percent: 50 use-colorcode-from-prefix-for-name: true display-chat-tags: true + global-friendly-fire: false unrivable-clans: - admin - staff @@ -175,6 +176,7 @@ clanchat: tag-based-clan-chat: false announcement-color: e format: "&b[%clan%&b] &4<%nick-color%%player%&4> %rank%: &b%message%" + spy-format: "&8[Spy] [&bC&8] <%clan%&8> <%nick-color%*&8%player%>&8 %rank%&8: %message%" rank: "&f[%rank%&f]" leader-color: '4' trusted-color: 'f' @@ -192,10 +194,25 @@ bb: allychat: enable: true format: "&b[Ally Chat] &4<%clan%&4> <%nick-color%%player%&4> %rank%: &b%message%" + spy-format: "&8[Spy] [&cA&8] <%clan%&8> <%nick-color%*&8%player%>&8 %rank%&8: %message%" rank: "&f[%rank%&f]" leader-color: '4' trusted-color: 'f' member-color: '7' +discordchat: + enable: false + discord-format: "%player% » %message%" + format: "&b[&9D&b] &b[%clan%&b] &4<%nick-color%%player%&4> %rank%: &b%message%" + spy-format: "&8[Spy] [&9D&8] <%clan%&8> <%nick-color%*&8%player%>&8 %rank%&8: %message%" + rank: "[%rank%]" + leader-role: "Leader" + leader-color: 231, 76, 60, 100 + leader-id: 0 + text: + category-format: "SC - TextChannels" + category-ids: [] + whitelist: [] + clans-limit: 100 purge: inactive-player-data-days: 30 inactive-clan-days: 7 @@ -215,4 +232,4 @@ performance: save-periodically: true save-interval: 10 use-threads: true - use-bungeecord: false \ No newline at end of file + use-bungeecord: false diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 7a8b67a98..69c09fb06 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -80,6 +80,9 @@ resetkdr.command=resetkdr everyone.command=everyone setbanner.command=setbanner help.command=help +leave.command=leave +join.command=join +mute.command=mute acf-core.parameter.member=member acf-core.parameter.rank=rank acf-core.parameter.leader=leader @@ -354,6 +357,7 @@ clan.created=Clan {0} created not.enough.leaders.online.to.vote.on.demotion=There aren''t enough leaders online to vote on this demotion demotion.vote.has.been.requested.from.all.leaders=Demotion vote has been requested from all leaders player.is.not.a.leader.of.your.clan=The player is not a leader of your clan +player.is.not.a.leader=The player is not a leader clan.has.been.disbanded=Clan {0} has been disbanded clan.disband.vote.has.been.requested.from.all.leaders=Clan disband vote has been requested from all leaders friendy.fire.is.now.managed.by.your.clan=Friendy-fire is now managed by your clan @@ -474,9 +478,6 @@ you.moved.teleport.cancelled=You moved, teleport cancelled waiting.for.teleport.stand.still.for.0.seconds=Waiting for teleport, stand still for {0} seconds on=on off=off -leave=leave -join=join -mute=mute player.rank.changed=Rank has been set your.clans.are.already.rivals=Your clans are already rivals player.got.money=You got {0} for killing {1} based on you KDR: {2} @@ -564,6 +565,7 @@ allowed=allowed blocked=blocked chat.joined=joined chat.not.joined=not joined +chat.didnt.join=&bYou didn''t join this channel gui.loading=&7Loading... gui.back.title=&fBack gui.previous.page.title=&fPrevious Page @@ -772,6 +774,7 @@ gui.not.supported=&cAn error occurred while opening the GUI! Disabling it... Did staff.member.verify.clan=&cA staff member must verify your clan! player.already.has.that.rank=&cThe player already has that rank! joined.clan.chat=&bYou have joined clan chat +already.joined.clan.chat=&bYou''re already joined to clan chat left.clan.chat=&bYou have left clan chat muted.clan.chat=&bYou have muted clan chat unmuted.clan.chat=&bYou have unmuted clan chat @@ -779,6 +782,7 @@ joined.ally.chat=&bYou have joined ally chat left.ally.chat=&bYou have left ally chat muted.ally.chat=&bYou have muted ally chat unmuted.ally.chat=&bYou have unmuted ally chat +already.joined.ally.chat=&bYou''re already joined to ally chat player.already.in.this.clan=&cThe player is already in this clan your.clan.reached.max.alliances=&cYour clan has reached the max number of alliances other.clan.reached.max.alliances=&cThe other clan has reached the max number of alliances @@ -805,6 +809,8 @@ clans.not.at.war.pvp.denied=&cYour clan is not at war with {0}! cannot.attack.civilians=&cYou cannot attack civilians! cannot.attack.clan.member=&cYou cannot attack another clan member! cannot.attack.ally=&cYou cannot attack an ally! +cannot.send.discord.message=You cannot send messages to {0}. You''re not a member of that clan! +you.did.not.link.your.account=You did not link your account! # suppress inspection "TrailingSpacesInProperty" cannot.change.member.fee.now=&cYou cannot change the member fee close to its collection time. cannot.change.member.fee.hours=&cTry again in {0} hours... @@ -821,6 +827,8 @@ land.allowed.action=&bAllowed action! land.blocked.action=&bBlocked action! you.do.not.own.lands=&cYou do not own a land! land.sharing.disabled=&cLand sharing is disabled! +clan.chat.disabled=&cClan chat is disabled! +ally.chat.disabled=&cAlly chat is disabled! war.expired=The war with {0} has expired! you.cant.start.war.online.members.difference=You can''t start the war. One clan has more members online than the other. diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2e1efbb1c..f5ecd8030 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,6 +6,7 @@ softdepend: - PlaceholderAPI - LuckPerms - WorldGuard + - DiscordSRV loadbefore: - GriefPrevention - PlotSquared diff --git a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHookTest.java b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHookTest.java new file mode 100644 index 000000000..54dcec6ed --- /dev/null +++ b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHookTest.java @@ -0,0 +1,26 @@ +package net.sacredlabyrinth.phaed.simpleclans.hooks; + +import org.junit.Test; +import org.junit.jupiter.api.DisplayName; + +import java.awt.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class DiscordHookTest { + + @Test + @DisplayName("Checks if colors from configuration can be transformed to java.awt.Color") + public void leaderColorTest() throws IllegalArgumentException { + Color expectedColor = new Color(231, 76, 60, 100); + String[] colors = "231, 76, 60, 100".replaceAll("\\s", "").split(","); + + int red = Integer.parseInt(colors[0]); + int green = Integer.parseInt(colors[1]); + int blue = Integer.parseInt(colors[2]); + int alpha = Integer.parseInt(colors[3]); + Color actualColor = new Color(red, green, blue, alpha); + + assertEquals(expectedColor, actualColor); + } +} diff --git a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/language/ResourceControlTest.java b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/language/ResourceControlTest.java index e3de3ba9f..b28bb6f2e 100644 --- a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/language/ResourceControlTest.java +++ b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/language/ResourceControlTest.java @@ -1,52 +1,51 @@ package net.sacredlabyrinth.phaed.simpleclans.language; -import org.junit.jupiter.api.Test; +import org.junit.Assert; +import org.junit.Test; import java.util.Locale; -import static org.junit.Assert.*; - -class ResourceControlTest { +public class ResourceControlTest { @Test - void getFallbackLocaleAcf() { + public void getFallbackLocaleAcf() { LanguageResource.ResourceControl resourceControl = new LanguageResource.ResourceControl(Locale.ENGLISH, true); String acfBaseName = "acf"; Locale locale = resourceControl.getFallbackLocale(acfBaseName, Locale.ENGLISH); - assertNull(locale); + Assert.assertNull(locale); locale = resourceControl.getFallbackLocale(acfBaseName, new Locale("es", "ES")); - assertEquals(Locale.ENGLISH, locale); + Assert.assertEquals(Locale.ENGLISH, locale); Locale ptBR = new Locale("pt", "BR"); resourceControl = new LanguageResource.ResourceControl(ptBR, true); locale = resourceControl.getFallbackLocale(acfBaseName, Locale.ENGLISH); - assertNull(locale); + Assert.assertNull(locale); locale = resourceControl.getFallbackLocale(acfBaseName, ptBR); - assertEquals(Locale.ENGLISH, locale); + Assert.assertEquals(Locale.ENGLISH, locale); } @Test - void getFallbackLocale() { + public void getFallbackLocale() { LanguageResource.ResourceControl resourceControl = new LanguageResource.ResourceControl(Locale.ENGLISH, true); String pluginBaseName = "messages"; Locale locale = resourceControl.getFallbackLocale(pluginBaseName, Locale.ENGLISH); - assertEquals(Locale.ROOT, locale); + Assert.assertEquals(Locale.ROOT, locale); locale = resourceControl.getFallbackLocale(pluginBaseName, Locale.ROOT); - assertNull(locale); + Assert.assertNull(locale); locale = resourceControl.getFallbackLocale(pluginBaseName, Locale.CANADA); - assertNotSame(Locale.CANADA, locale); + Assert.assertNotSame(Locale.CANADA, locale); Locale ptBR = new Locale("pt", "BR"); resourceControl = new LanguageResource.ResourceControl(ptBR, true); locale = resourceControl.getFallbackLocale(pluginBaseName, ptBR); - assertEquals(Locale.ROOT, locale); + Assert.assertEquals(Locale.ROOT, locale); locale = resourceControl.getFallbackLocale(pluginBaseName, Locale.ROOT); - assertNull(locale); + Assert.assertNull(locale); locale = resourceControl.getFallbackLocale(pluginBaseName, Locale.CANADA); - assertNotSame(Locale.CANADA, locale); + Assert.assertNotSame(Locale.CANADA, locale); locale = resourceControl.getFallbackLocale(pluginBaseName, Locale.ENGLISH); - assertEquals(ptBR, locale); + Assert.assertEquals(ptBR, locale); } } \ No newline at end of file diff --git a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtilsTest.java b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtilsTest.java index c3ff68c10..f4f5f2730 100644 --- a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtilsTest.java +++ b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtilsTest.java @@ -1,13 +1,13 @@ package net.sacredlabyrinth.phaed.simpleclans.utils; -import org.junit.jupiter.api.Test; +import org.junit.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -class ChatUtilsTest { +public class ChatUtilsTest { @Test - void getLastColors() { + public void getLastColors() { String lastColors = ChatUtils.getLastColors("§aa mensagem§x termina com §4vermelho"); assertEquals("§4", lastColors); lastColors = ChatUtils.getLastColors("§aa mensagem§x termina com §a§4vermelho"); diff --git a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/UpdateCheckerTest.java b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/UpdateCheckerTest.java index f765c3525..5d9f58631 100644 --- a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/UpdateCheckerTest.java +++ b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/UpdateCheckerTest.java @@ -1,13 +1,14 @@ package net.sacredlabyrinth.phaed.simpleclans.utils; -import org.junit.jupiter.api.Test; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; -class UpdateCheckerTest { +public class UpdateCheckerTest { @Test - void compareVersions() { + public void compareVersions() { assertEquals(UpdateChecker.compareVersions("0.0", "0"), 0); assertTrue(UpdateChecker.compareVersions("0.1", "0") > 0); assertTrue(UpdateChecker.compareVersions("1", "1.1.1") < 0); diff --git a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/WordWrapperTest.java b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/WordWrapperTest.java index 36c966978..8625dfd85 100644 --- a/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/WordWrapperTest.java +++ b/src/test/java/net/sacredlabyrinth/phaed/simpleclans/utils/WordWrapperTest.java @@ -1,6 +1,6 @@ package net.sacredlabyrinth.phaed.simpleclans.utils; -import org.junit.jupiter.api.Test; +import org.junit.Test; import java.util.Arrays; import java.util.Collections; @@ -8,18 +8,18 @@ import static org.junit.jupiter.api.Assertions.*; -class WordWrapperTest { +public class WordWrapperTest { @Test - void wrap() { + public void wrap() { String[] wrap = new WordWrapper("a§aa", 2).wrap(); - assertArrayEquals(new String[] {"§fa§aa"}, wrap); + assertArrayEquals(new String[]{"§fa§aa"}, wrap); wrap = new WordWrapper("a§aa a§aa", 2).wrap(); - assertArrayEquals(new String[] {"§fa§aa", "§aa§aa"}, wrap); + assertArrayEquals(new String[]{"§fa§aa", "§aa§aa"}, wrap); } @Test - void split() { + public void split() { String s = "§x§f§f§f§f§f§f"; List split = WordWrapper.split(s, 1); assertEquals(1, split.size()); From 47d4a215fba858f1dc7af8a37ea0d71c4565b1ee Mon Sep 17 00:00:00 2001 From: Minat0_ Date: Sat, 28 Aug 2021 04:50:53 +0300 Subject: [PATCH 13/30] Returns message after conversation expiring Fixes getting null of all players on PlayerListFrame Updates JavaDoc Updates messages.properties --- pom.xml | 2 +- .../phaed/simpleclans/DamageRecord.java | 2 + .../conversation/InactivityCanceller.java | 30 ++++ .../conversation/SCConversation.java | 9 +- .../phaed/simpleclans/hooks/DiscordHook.java | 3 +- .../ui/frames/staff/PlayerListFrame.java | 147 +++++++++--------- src/main/resources/messages.properties | 1 + 7 files changed, 115 insertions(+), 79 deletions(-) create mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/InactivityCanceller.java diff --git a/pom.xml b/pom.xml index abbe6c5f1..46d68b860 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ - org.bstats.bukkit + org.bstats net.sacredlabyrinth.phaed.simpleclans.metrics diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java index 985323656..1ecd6f5d7 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java @@ -5,7 +5,9 @@ /** * @author phaed + * @deprecated No usage */ +@Deprecated public class DamageRecord { private String victim; private String attacker; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/InactivityCanceller.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/InactivityCanceller.java new file mode 100644 index 000000000..bad9db62f --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/InactivityCanceller.java @@ -0,0 +1,30 @@ +package net.sacredlabyrinth.phaed.simpleclans.conversation; + +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.conversations.Conversation; +import org.bukkit.conversations.InactivityConversationCanceller; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; + +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static org.bukkit.ChatColor.RED; + +public class InactivityCanceller extends InactivityConversationCanceller { + + /** + * Creates an InactivityConversationCanceller. + * + * @param plugin The owning plugin. + * @param timeoutSeconds The number of seconds of inactivity to wait. + */ + public InactivityCanceller(@NotNull Plugin plugin, int timeoutSeconds) { + super(plugin, timeoutSeconds); + } + + @Override + protected void cancelling(@NotNull Conversation conversation) { + Player forWhom = (Player) conversation.getForWhom(); + forWhom.spigot().sendMessage(new TextComponent(RED + lang("you.did.not.answer.in.time", forWhom))); + } +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/SCConversation.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/SCConversation.java index 6e8297fae..de3329991 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/SCConversation.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/conversation/SCConversation.java @@ -1,6 +1,9 @@ package net.sacredlabyrinth.phaed.simpleclans.conversation; -import org.bukkit.conversations.*; +import org.bukkit.conversations.Conversable; +import org.bukkit.conversations.Conversation; +import org.bukkit.conversations.ConversationCanceller; +import org.bukkit.conversations.Prompt; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; @@ -28,7 +31,7 @@ public SCConversation(@NotNull Plugin plugin, @NotNull Conversable forWhom, @Nul public SCConversation(@NotNull Plugin plugin, @NotNull Conversable forWhom, @Nullable Prompt firstPrompt, @NotNull Map initialSessionData, int timeout) { super(plugin, forWhom, firstPrompt, initialSessionData); this.setLocalEchoEnabled(true); - this.addConversationCanceller(new InactivityConversationCanceller(plugin, timeout)); + this.addConversationCanceller(new InactivityCanceller(plugin, timeout)); } @Override @@ -46,6 +49,6 @@ public void begin() { public void addConversationCanceller(@NotNull ConversationCanceller canceller) { canceller.setConversation(this); - this.cancellers.add(canceller); + cancellers.add(canceller); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java index 653591df8..4791a45cc 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/DiscordHook.java @@ -48,7 +48,7 @@ *

*
    *
  • Creates categories and channels, respecting discord's limits.
  • - *
  • Removes invalid channels, resets permissions.
  • + *
  • Removes invalid channels, resets permissions and roles.
  • *
*

* Manages events: @@ -57,6 +57,7 @@ *

  • Clan creation/deletion
  • *
  • ClanPlayer joining/resigning
  • *
  • Player linking
  • + *
  • ClanPlayer promoting/demoting
  • * *

    * Currently, works with clan chat only. diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java index 604cb299a..636fea9fd 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/frames/staff/PlayerListFrame.java @@ -23,79 +23,78 @@ public class PlayerListFrame extends SCFrame { - private final boolean onlineOnly; - private Paginator paginator; - private List players; - - public PlayerListFrame(@NotNull Player viewer, @Nullable SCFrame parent, boolean onlineOnly) { - super(parent, viewer); - this.onlineOnly = onlineOnly; - loadPlayers(); - } - - @Override - public void createComponents() { - for (int slot = 0; slot < 9; slot++) { - if (slot == 2 || slot == 6 || slot == 7) - continue; - add(Components.getPanelComponent(slot)); - } - add(Components.getBackComponent(getParent(), 2, getViewer())); - - add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer())); - add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer())); - - int slot = 9; - for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) { - OfflinePlayer player = players.get(i); - SCComponent c = Components.getPlayerComponent(this, getViewer(), player, slot, false); - c.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, player))); - - add(c); - slot++; - } - } - - private void loadPlayers() { - if (onlineOnly) { - players = new ArrayList<>(Bukkit.getOnlinePlayers()); - } else { - List allClanPlayers = Stream.concat(SimpleClans.getInstance().getClanManager(). - getAllClanPlayers().stream().map(cp -> Bukkit.getOfflinePlayer(cp.getUniqueId())), - Bukkit.getOnlinePlayers().stream()) - .distinct() - .collect(Collectors.toList()); - players.addAll(allClanPlayers); - } - players = players.stream().filter(p -> p.getName() != null).collect(Collectors.toList()); - players.sort(Comparator.comparing(OfflinePlayer::getName)); - paginator = new Paginator(getSize() - 9, players.size()); - } - - private void previousPage() { - if (paginator.previousPage()) { - updateFrame(); - } - } - - private void nextPage() { - if (paginator.nextPage()) { - updateFrame(); - } - } - - private void updateFrame() { - InventoryDrawer.open(this); - } - - @Override - public @NotNull String getTitle() { - return lang("gui.player.list.title", getViewer()); - } - - @Override - public int getSize() { - return 6 * 9; - } + private final boolean onlineOnly; + private Paginator paginator; + private List players; + + public PlayerListFrame(@NotNull Player viewer, @Nullable SCFrame parent, boolean onlineOnly) { + super(parent, viewer); + this.onlineOnly = onlineOnly; + loadPlayers(); + } + + @Override + public void createComponents() { + for (int slot = 0; slot < 9; slot++) { + if (slot == 2 || slot == 6 || slot == 7) + continue; + add(Components.getPanelComponent(slot)); + } + add(Components.getBackComponent(getParent(), 2, getViewer())); + + add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer())); + add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer())); + + int slot = 9; + for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) { + OfflinePlayer player = players.get(i); + SCComponent c = Components.getPlayerComponent(this, getViewer(), player, slot, false); + c.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, player))); + + add(c); + slot++; + } + } + + private void loadPlayers() { + if (onlineOnly) { + players = new ArrayList<>(Bukkit.getOnlinePlayers()); + } else { + players = Stream.concat( + SimpleClans.getInstance().getClanManager().getAllClanPlayers().stream(). + map(cp -> Bukkit.getOfflinePlayer(cp.getUniqueId())), + Bukkit.getOnlinePlayers().stream()) + .distinct().collect(Collectors.toList()); + } + players = players.stream().filter(p -> p.getName() != null).collect(Collectors.toList()); + players.sort(Comparator.comparing(OfflinePlayer::getName)); + paginator = new Paginator(getSize() - 9, players.size()); + } + + private void previousPage() { + if (paginator.previousPage()) { + updateFrame(); + } + } + + private void nextPage() { + if (paginator.nextPage()) { + updateFrame(); + } + } + + private void updateFrame() { + InventoryDrawer.open(this); + } + + @Override + public @NotNull String getTitle() { + return lang("gui.player.list.title", getViewer()); + } + + @Override + public int getSize() { + return 6 * 9; + } } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 69c09fb06..19e481a6b 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -368,6 +368,7 @@ global.friendly.fire.is.set.to.allowed=Global friendly-fire is set to allowed global.friendly.fire.is.already.being.allowed=Global friendly-fire is already being allowed the.player.doesn.t.not.have.the.permissions.to.join.clans=The player doesn''t not have the permissions to join clans you.cannot.invite.yourself=You cannot invite yourself +you.did.not.answer.in.time=You didn''t answer in time, canceling... this.player.is.banned.from.using.clan.commands=This player is banned from using clan commands the.player.is.already.member.of.another.clan=The player is already member of another clan has.been.asked.to.join={0} has been asked to join {1} From ebe79fe3408d75e3da8b4490a33031a0719eceff Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Sat, 28 Aug 2021 13:50:41 -0300 Subject: [PATCH 14/30] Fixes casting exception on config default values --- SimpleClans.iml | 70 +++++++++++++++---- .../commands/SCCommandManager.java | 2 +- .../simpleclans/managers/SettingsManager.java | 12 ++-- 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/SimpleClans.iml b/SimpleClans.iml index a5f314c96..0bcd5b998 100644 --- a/SimpleClans.iml +++ b/SimpleClans.iml @@ -22,18 +22,17 @@ - + + - + - - - - - - - + + + + + @@ -54,7 +53,6 @@ - @@ -84,8 +82,6 @@ - - @@ -96,5 +92,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java index 4bcd06bff..2deb3a36e 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java @@ -46,8 +46,8 @@ public SCCommandManager(@NotNull SimpleClans plugin) { } private void configure() { - registerDependencies(); enableUnstableAPI("help"); + registerDependencies(); addCommandReplacements(); registerContexts(); registerCommands(); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java index bb248681b..b6b01cca4 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java @@ -15,6 +15,8 @@ import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType; import static org.bukkit.Bukkit.getPluginManager; +import static org.bukkit.util.NumberConversions.toDouble; +import static org.bukkit.util.NumberConversions.toInt; /** * @author phaed @@ -40,11 +42,11 @@ public void set(ConfigField field, T value) { } public int getInt(ConfigField field) { - return config.getInt(field.path, (Integer) field.defaultValue); + return config.getInt(field.path, toInt(field.defaultValue)); } public double getDouble(ConfigField field) { - return config.getDouble(field.path, (Double) field.defaultValue); + return config.getDouble(field.path, toDouble(field.defaultValue)); } public List getStringList(ConfigField field) { @@ -62,17 +64,17 @@ public String getColored(ConfigField field) { public int getMinutes(ConfigField field) { int value = getInt(field); - return (value >= 1) ? value * 20 * 60 : (int) field.defaultValue * 20 * 60; + return (value >= 1) ? value * 20 * 60 : toInt(field.defaultValue) * 20 * 60; } public int getSeconds(ConfigField field) { int value = getInt(field); - return (value >= 1) ? value * 20 : (int) field.defaultValue * 20; + return (value >= 1) ? value * 20 : toInt(field.defaultValue) * 20; } public double getPercent(ConfigField field) { double value = getDouble(field); - return (getDouble(field) >= 0 || getDouble(field) <= 100) ? value : (double) field.defaultValue; + return (getDouble(field) >= 0 || getDouble(field) <= 100) ? value : toDouble(field.defaultValue); } public boolean is(ConfigField field) { From fef3763039bfefc6ae596dfd07a9ad9e9d08db58 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Sat, 28 Aug 2021 19:11:53 -0300 Subject: [PATCH 15/30] Fixes empty tag brackets --- .../net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java index 0f01a2f89..fbd3a11fb 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/utils/ChatUtils.java @@ -36,7 +36,7 @@ private ChatUtils() { public static String getColorByChar(char character) { ChatColor color = ChatColor.getByChar(character); - return color != null ? color.toString() : ""; + return color != null ? color.toString() : Character.toString(character); } public static String parseColors(@NotNull String text) { From 420d8fae8e37f81aae0d38cba986f0964cd99a87 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Sat, 28 Aug 2021 19:20:20 -0300 Subject: [PATCH 16/30] Added debug messages to some conditions --- .../simpleclans/commands/conditions/NotInClanCondition.java | 6 +++++- .../simpleclans/commands/conditions/OnlineCondition.java | 6 +++++- .../commands/conditions/PlayerClanMemberCondition.java | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotInClanCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotInClanCondition.java index 854b76fae..5676959ba 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotInClanCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/NotInClanCondition.java @@ -1,10 +1,12 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.conditions; import co.aikar.commands.*; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput; import org.jetbrains.annotations.NotNull; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import static org.bukkit.ChatColor.RED; @@ -24,7 +26,9 @@ public Class getType() { public void validateCondition(ConditionContext context, BukkitCommandExecutionContext execContext, ClanPlayerInput value) throws InvalidCommandArgument { - if (value.getClanPlayer().getClan() != null) { + ClanPlayer clanPlayer = value.getClanPlayer(); + debug(String.format("NotInClanCondition -> %s %s", clanPlayer.getName(), clanPlayer.getUniqueId())); + if (clanPlayer.getClan() != null) { throw new ConditionFailedException(RED + lang("the.player.is.already.member.of.another.clan", execContext.getSender())); } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/OnlineCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/OnlineCondition.java index 767034feb..691d4d37d 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/OnlineCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/OnlineCondition.java @@ -1,12 +1,14 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.conditions; import co.aikar.commands.*; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput; import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; @SuppressWarnings("unused") @@ -23,7 +25,9 @@ public Class getType() { @Override public void validateCondition(ConditionContext context, BukkitCommandExecutionContext execContext, ClanPlayerInput value) throws InvalidCommandArgument { - Player player = value.getClanPlayer().toPlayer(); + ClanPlayer clanPlayer = value.getClanPlayer(); + debug(String.format("OnlineCondition -> %s %s", clanPlayer.getName(), clanPlayer.getUniqueId())); + Player player = clanPlayer.toPlayer(); if (player != null) { boolean isVanished = VanishUtils.isVanished(execContext.getSender(), player); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/PlayerClanMemberCondition.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/PlayerClanMemberCondition.java index 8399b5a42..a2b827348 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/PlayerClanMemberCondition.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/conditions/PlayerClanMemberCondition.java @@ -8,6 +8,8 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug; + @SuppressWarnings("unused") public class PlayerClanMemberCondition extends AbstractParameterCondition { public PlayerClanMemberCondition(@NotNull SimpleClans plugin) { @@ -23,6 +25,7 @@ public Class getType() { public void validateCondition(ConditionContext context, BukkitCommandExecutionContext execContext, Player value) throws InvalidCommandArgument { + debug(String.format("PlayerClanMemberCondition -> %s %s", value.getName(), value.getUniqueId())); Conditions.assertClanMember(clanManager, context.getIssuer()); } From 115e1c5083333bb563593730bf254d1800a05bf2 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Sat, 28 Aug 2021 20:40:46 -0300 Subject: [PATCH 17/30] Checks if user has already played in the server before saving to db --- .../commands/contexts/ClanPlayerInputContextResolver.java | 5 +++++ src/main/resources/messages.properties | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/contexts/ClanPlayerInputContextResolver.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/contexts/ClanPlayerInputContextResolver.java index 141bc7d6e..281159327 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/contexts/ClanPlayerInputContextResolver.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/contexts/ClanPlayerInputContextResolver.java @@ -9,6 +9,8 @@ import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; +import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; + @SuppressWarnings("unused") public class ClanPlayerInputContextResolver extends AbstractInputOnlyContextResolver { public ClanPlayerInputContextResolver(@NotNull SimpleClans plugin) { @@ -22,6 +24,9 @@ public ClanPlayerInput getContext(BukkitCommandExecutionContext context) throws if (cp == null) { @SuppressWarnings("deprecation") OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(arg); + if (!offlinePlayer.hasPlayedBefore()) { + throw new InvalidCommandArgument(lang("user.hasnt.played.before", context.getSender())); + } cp = clanManager.getCreateClanPlayer(offlinePlayer.getUniqueId()); } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 19e481a6b..02cbc2217 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -832,7 +832,6 @@ clan.chat.disabled=&cClan chat is disabled! ally.chat.disabled=&cAlly chat is disabled! war.expired=The war with {0} has expired! you.cant.start.war.online.members.difference=You can''t start the war. One clan has more members online than the other. - land.command=land break.command=break interact.command=interact @@ -840,3 +839,4 @@ place_block.command=place_block damage.command=damage interact_entity.command=interact_entity container.command=container +user.hasnt.played.before=&cThis user has not played before \ No newline at end of file From 0f1e0164839b9740e2cb947d584cda1decb78d3c Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Mon, 30 Aug 2021 18:43:31 -0300 Subject: [PATCH 18/30] New Crowdin updates (#239) --- src/main/resources/messages_af_ZA.properties | 3 +- src/main/resources/messages_ar_SA.properties | 3 +- src/main/resources/messages_ca_ES.properties | 3 +- src/main/resources/messages_cs_CZ.properties | 12 +- src/main/resources/messages_da_DK.properties | 3 +- src/main/resources/messages_de_DE.properties | 6 +- src/main/resources/messages_el_GR.properties | 3 +- src/main/resources/messages_es_ES.properties | 6 +- src/main/resources/messages_fi_FI.properties | 3 +- src/main/resources/messages_fr_FR.properties | 6 +- src/main/resources/messages_he_IL.properties | 3 +- src/main/resources/messages_hu_HU.properties | 5 +- src/main/resources/messages_it_IT.properties | 3 +- src/main/resources/messages_ja_JP.properties | 3 +- src/main/resources/messages_ko_KR.properties | 3 +- src/main/resources/messages_nl_NL.properties | 6 +- src/main/resources/messages_no_NO.properties | 3 +- src/main/resources/messages_pl_PL.properties | 6 +- src/main/resources/messages_pt_BR.properties | 17 ++- src/main/resources/messages_pt_PT.properties | 134 ++++++++++++++++++- src/main/resources/messages_ro_RO.properties | 3 +- src/main/resources/messages_ru_RU.properties | 28 ++-- src/main/resources/messages_sr_SP.properties | 4 +- src/main/resources/messages_sv_SE.properties | 3 +- src/main/resources/messages_tr_TR.properties | 6 +- src/main/resources/messages_uk_UA.properties | 3 +- src/main/resources/messages_vi_VN.properties | 3 +- src/main/resources/messages_zh_CN.properties | 43 +++++- src/main/resources/messages_zh_TW.properties | 3 +- 29 files changed, 236 insertions(+), 91 deletions(-) diff --git a/src/main/resources/messages_af_ZA.properties b/src/main/resources/messages_af_ZA.properties index 42515d531..6f72b161b 100644 --- a/src/main/resources/messages_af_ZA.properties +++ b/src/main/resources/messages_af_ZA.properties @@ -4,5 +4,4 @@ # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_ar_SA.properties b/src/main/resources/messages_ar_SA.properties index 13903c206..9656baf35 100644 --- a/src/main/resources/messages_ar_SA.properties +++ b/src/main/resources/messages_ar_SA.properties @@ -87,5 +87,4 @@ war=الحَرْبُ # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_ca_ES.properties b/src/main/resources/messages_ca_ES.properties index 42515d531..6f72b161b 100644 --- a/src/main/resources/messages_ca_ES.properties +++ b/src/main/resources/messages_ca_ES.properties @@ -4,5 +4,4 @@ # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_cs_CZ.properties b/src/main/resources/messages_cs_CZ.properties index d2293c29b..f1cda4a97 100644 --- a/src/main/resources/messages_cs_CZ.properties +++ b/src/main/resources/messages_cs_CZ.properties @@ -15,10 +15,15 @@ list.type.active=aktivní profile.command=profil roster.command=roster leaderboard.command=žebříček +coords.command=Souřadníce +stats.command=Statistiky ally.command=spojenec add.command=přidat remove.command=odstranit allow.command=povolit +block.command=Blokovat +auto.command=Automaticky +check.command=Zkontrolovat assign.command=přiřadit rival.command=soupeř war.command=válka @@ -35,18 +40,21 @@ acf-core.parameter.help=stránka nebo klíčová slova command.description.land.allow.all=Umožňuje všechny akce ve vaší zemi command.description.land.allow.interact_entity=Umožňuje členům klanu interagovat s entitami ve vaší zemi command.description.create=Vytvoří klan +coords=Souřadníce leader=vůdce roster=roster +stats=Statistiky profile=profil # suppress inspection "TrailingSpacesInProperty" add=přidat remove=odstranit allow=povolit +block=Blokovat +auto=Automaticky war=válka # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_da_DK.properties b/src/main/resources/messages_da_DK.properties index 42515d531..6f72b161b 100644 --- a/src/main/resources/messages_da_DK.properties +++ b/src/main/resources/messages_da_DK.properties @@ -4,5 +4,4 @@ # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 639e50c3b..41cbd9f63 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -474,9 +474,6 @@ you.moved.teleport.cancelled=Du hast dich bewegt, Teleportation abgebrochen waiting.for.teleport.stand.still.for.0.seconds=Warte auf Teleportation, bleibe stehen für {0} Sekunden on=An off=Aus -leave=verlassen -join=beitreten -mute=stummschalten player.rank.changed=Rang würde gesetzt your.clans.are.already.rivals=Eure Clans sind bereits Rivalen player.got.money=Du hast für das töten von {1} Spielern basieren auf deiner KDR ({2}) {0} Geld bekommen @@ -823,11 +820,10 @@ you.do.not.own.lands=&cDu besitzt kein Land\! land.sharing.disabled=&cDas Teilen von Land ist deaktiviert\! war.expired=Der Krieg mit {0} ist abgelaufen\! you.cant.start.war.online.members.difference=Du kannst den Krieg nicht starten. Ein Clan mehr aktive Mitglieder, als der andere. - land.command=Land break.command=Abbauen interact.command=interagieren place_block.command=place_block damage.command=Schaden interact_entity.command=interact_entity -container.command=Behälter +container.command=Behälter \ No newline at end of file diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index cfed7b014..c25e18220 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -51,5 +51,4 @@ auto=αυτόματο # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 44c64857a..7894514e2 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -474,9 +474,6 @@ you.moved.teleport.cancelled=Te moviste, teletransporte cancelado waiting.for.teleport.stand.still.for.0.seconds=Esperando para teletransportar, quedate quieto por {0} segundos on=on off=off -leave=leave -join=join -mute=mute player.rank.changed=El rango se ha asignado your.clans.are.already.rivals=Sus clanes ya son rivales player.got.money=Obtuviste {0} por matar a {1} basado en tu KDR\: {2} @@ -823,11 +820,10 @@ you.do.not.own.lands=&8(&cClan&8)&7 No eres dueño de una tierra. land.sharing.disabled=&8(&cClan&8)&7 Compartir tierras está deshabilitado. war.expired=&8(&cClan&8)&7 La guerra con &c{0}&7 ha finalizado. you.cant.start.war.online.members.difference=&8(&cClan&8)&7 No puedes empezar la guerra. Un clan tiene más miembros en línea que el otro. - land.command=terreno break.command=romper interact.command=interactuar place_block.command=colocar_bloque damage.command=daño interact_entity.command=interactuar_entidad -container.command=contenedor +container.command=contenedor \ No newline at end of file diff --git a/src/main/resources/messages_fi_FI.properties b/src/main/resources/messages_fi_FI.properties index a90bf7824..02db26e8b 100644 --- a/src/main/resources/messages_fi_FI.properties +++ b/src/main/resources/messages_fi_FI.properties @@ -16,5 +16,4 @@ seen=Nähty # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 96375a958..a3077a110 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -398,9 +398,6 @@ you.moved.teleport.cancelled=Vous avez bougé, téléportation annulée waiting.for.teleport.stand.still.for.0.seconds=En attente de téléportation, restez immobile pendant {0} secondes on=on off=off -leave=quitter -join=rejoindre -mute=rendre muet player.rank.changed=Le rang a été défini your.clans.are.already.rivals=Vos clans sont déjà rivaux player.got.money=Vous avez reçu {0} pour avoir tué {1} selon votre KDR \: {2} @@ -633,5 +630,4 @@ other.clan.reached.max.alliances=&cL'autre clan a atteint le nombre maximum d'al you.changed.clan.banner=&bVous avez changé la bannière de votre clan\! # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_he_IL.properties b/src/main/resources/messages_he_IL.properties index 42515d531..6f72b161b 100644 --- a/src/main/resources/messages_he_IL.properties +++ b/src/main/resources/messages_he_IL.properties @@ -4,5 +4,4 @@ # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index 708b201e3..50912cd87 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -299,8 +299,6 @@ you.moved.teleport.cancelled=Elmozdultál, a teleportálás megszakítva waiting.for.teleport.stand.still.for.0.seconds=Várakozás a teleportálásra, állj meg {0} másodpercig on=be off=ki -leave=elhagy -join=csatlakoz player.rank.changed=A rang beállítva your.clans.are.already.rivals=A klánod már riválisok player.got.money=Megkaptad {0} a(z) {1} megöléséért KDR-ed alapján\: {2} @@ -323,5 +321,4 @@ gui.rivals.title=Versenytárs # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 37eaf2feb..1cc62b331 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -498,8 +498,7 @@ you.do.not.own.lands=&cNon possiedi una terra\! land.sharing.disabled=&cCondivisione di terra è disattivata\! war.expired=La guerra con {0} è scaduta\! you.cant.start.war.online.members.difference=Non puoi iniziare la guerra. Un clan ha più membri online dell'altro. - land.command=terra interact.command=interagire damage.command=danno -container.command=contenitore +container.command=contenitore \ No newline at end of file diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 42515d531..6f72b161b 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -4,5 +4,4 @@ # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index cf9b04458..f037d4d22 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -8,5 +8,4 @@ acf-core.parameter.description=상세정보 # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index fdb329c63..f2a14288c 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -474,9 +474,6 @@ you.moved.teleport.cancelled=Je bent verplaatst, teleport geannuleerd waiting.for.teleport.stand.still.for.0.seconds=Wachten op teleportatie, blijf stil staan voor {0} seconden on=aan off=uit -leave=verlaten -join=toetreden -mute=dempen player.rank.changed=Rank is ingesteld your.clans.are.already.rivals=Je clans zijn al rivalen player.got.money=Je hebt {0} gekregen voor het doden van {1} gebaseerd op je KDR\: {2} @@ -823,11 +820,10 @@ you.do.not.own.lands=&cJe bezit geen land\! land.sharing.disabled=&cLand delen is uitgeschakeld\! war.expired=De oorlog met {0} is verlopen\! you.cant.start.war.online.members.difference=Je kunt de oorlog niet starten. De ene clan heeft meer leden online dan de andere. - land.command=land break.command=break interact.command=interact place_block.command=place_block damage.command=damage interact_entity.command=interact_entity -container.command=container +container.command=container \ No newline at end of file diff --git a/src/main/resources/messages_no_NO.properties b/src/main/resources/messages_no_NO.properties index 6c0f91fc6..77b091bc4 100644 --- a/src/main/resources/messages_no_NO.properties +++ b/src/main/resources/messages_no_NO.properties @@ -58,5 +58,4 @@ war=krig # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 02a33eb66..a65b0c95c 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -474,9 +474,6 @@ you.moved.teleport.cancelled=Poruszyłeś się, teleportowanie anulowane waiting.for.teleport.stand.still.for.0.seconds=Oczekiwanie na teleport, stój w miejscu na {0} sekund on=wł off=wył -leave=opuść -join=dołącz -mute=wycisz player.rank.changed=Ranking został ustawiony your.clans.are.already.rivals=Wasze klany to juz sojusznicy player.got.money=Masz {0} za zabicie {1} na podstawie KDR\: {2} @@ -823,11 +820,10 @@ you.do.not.own.lands=&cNie posiadasz ziemi\! land.sharing.disabled=&cDzielenie ziemi jest wyłączone\! war.expired=Wojna z {0} wygasła\! you.cant.start.war.online.members.difference=Nie możesz rozpocząć wojny. Jeden klan ma więcej członków online niż drugi. - land.command=ziemia break.command=zniszcz interact.command=interakcja place_block.command=umieść_blok damage.command=obrażenia interact_entity.command=jednostka_interakcyjna -container.command=pojemnik +container.command=pojemnik \ No newline at end of file diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 7946b1f1f..b5acfd54d 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -80,6 +80,9 @@ resetkdr.command=redefinirkdr everyone.command=todos setbanner.command=defestandarte help.command=ajuda +leave.command=sair +join.command=entrar +mute.command=silenciar acf-core.parameter.member=membro acf-core.parameter.rank=cargo acf-core.parameter.leader=líder @@ -354,6 +357,7 @@ clan.created=Clã {0} criado not.enough.leaders.online.to.vote.on.demotion=Não há líderes suficientes online para votar nesse rebaixamento demotion.vote.has.been.requested.from.all.leaders=Um voto de rebaixamento foi pedido a todos os líderes player.is.not.a.leader.of.your.clan=O jogador não é um líder do seu clã +player.is.not.a.leader=O jogador não é um líder clan.has.been.disbanded=Clã {0} foi debandado clan.disband.vote.has.been.requested.from.all.leaders=Um voto para debandar o clã foi pedido a todos os líderes friendy.fire.is.now.managed.by.your.clan=Fogo amigo é agora gerenciado pelo seu clã @@ -364,6 +368,7 @@ global.friendly.fire.is.set.to.allowed=Fogo amigo global foi definido como permi global.friendly.fire.is.already.being.allowed=Fogo amigo global já está permitido the.player.doesn.t.not.have.the.permissions.to.join.clans=O jogador não tem permissão para entrar em clãs you.cannot.invite.yourself=Você não pode se convidar +you.did.not.answer.in.time=Você não respondeu a tempo, cancelando... this.player.is.banned.from.using.clan.commands=Este jogador foi banido de usar comandos de clãs the.player.is.already.member.of.another.clan=Este jogador já é membro de outro clã has.been.asked.to.join=Um convite foi enviado a {0} para entrar em {1} @@ -474,9 +479,6 @@ you.moved.teleport.cancelled=Você se mexeu, teleporte cancelado waiting.for.teleport.stand.still.for.0.seconds=Aguardando teleporte, fique parado por {0} segundos on=ligar off=desligar -leave=sair -join=entrar -mute=silenciar player.rank.changed=O cargo foi definido your.clans.are.already.rivals=Seus clãs já são rivais player.got.money=Você ganhou {0} por matar {1} baseado no seu KDR\: {2} @@ -564,6 +566,7 @@ allowed=permitido blocked=bloqueado chat.joined=entrou chat.not.joined=não entrou +chat.didnt.join=&bVocê não entrou neste canal gui.loading=&7Carregando... gui.back.title=&fVoltar gui.previous.page.title=&fPágina anterior @@ -772,6 +775,7 @@ gui.not.supported=&cOcorreu um erro ao abrir a GUI\! Desabilitando... Você fez staff.member.verify.clan=&cUm membro da equipe deve verificar o seu clã\! player.already.has.that.rank=&cO jogador já possui este cargo\! joined.clan.chat=&bVocê entrou no chat do clã +already.joined.clan.chat=&bVocê já entrou no chat do clã left.clan.chat=&bVocê saiu do chat do clã muted.clan.chat=&bVocê silenciou o chat do clã unmuted.clan.chat=&bVocê desmutou o chat do clã @@ -779,6 +783,7 @@ joined.ally.chat=&bVocê se juntou ao chat dos aliados left.ally.chat=&bVocê saiu do chat dos aliados muted.ally.chat=&bVocê silenciou o chat dos aliados unmuted.ally.chat=&bVocê desmutou o chat dos aliados +already.joined.ally.chat=&bVocê já entrou no chat dos aliados player.already.in.this.clan=&cO jogador já está no clã your.clan.reached.max.alliances=&cSeu clã atingiu o número máximo de alianças other.clan.reached.max.alliances=&cO outro clã atingiu o número máximo de alianças @@ -805,6 +810,8 @@ clans.not.at.war.pvp.denied=&cSeu clã não está em guerra com {0}\! cannot.attack.civilians=&cVocê não pode atacar civis\! cannot.attack.clan.member=&cVocê não pode atacar um membro do clã\! cannot.attack.ally=&cVocê não pode atacar um aliado\! +cannot.send.discord.message=Você não pode enviar mensagens para {0}. Você não é membro desse clã\! +you.did.not.link.your.account=Você não vinculou sua conta\! # suppress inspection "TrailingSpacesInProperty" cannot.change.member.fee.now=&cVocê não pode modificar a taxa perto do horário de coleta. cannot.change.member.fee.hours=&cTente novamente em {0} horas... @@ -821,9 +828,10 @@ land.allowed.action=&bAção permitida\! land.blocked.action=&bAção bloqueada\! you.do.not.own.lands=&cVocê não tem um terreno\! land.sharing.disabled=&cCompartilhamento de terrenos está desabilitado\! +clan.chat.disabled=&cO chat do clã está desativado\! +ally.chat.disabled=&cO chat dos aliados está desativado\! war.expired=A guerra com {0} expirou\! you.cant.start.war.online.members.difference=Você não pode começar a guerra. Um clã tem mais membros online do que o outro. - land.command=terreno break.command=quebrar interact.command=interagir @@ -831,3 +839,4 @@ place_block.command=colocar_bloco damage.command=atacar interact_entity.command=interagir_entidade container.command=bau +user.hasnt.played.before=&cEsse usuário nunca jogou antes \ No newline at end of file diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index 7f0f6df93..98b8a3146 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -75,12 +75,62 @@ regroup.command=regroup me.command=me tp.command=tp setrank.command=setrank +place.command=definir +resetkdr.command=redefinirkdr everyone.command=todos +setbanner.command=definirestandarte +help.command=ajuda +acf-core.parameter.member=membro acf-core.parameter.rank=cargo +acf-core.parameter.leader=líder +acf-core.parameter.displayname=nome de exibição +acf-core.parameter.permission=permissão +acf-core.parameter.message=mensagem acf-core.parameter.tag=tag acf-core.parameter.name=nome acf-core.parameter.fee=taxa acf-core.parameter.description=descrição +acf-core.parameter.player=jogador +acf-core.parameter.clan=clã +acf-core.parameter.type=tipo +acf-core.parameter.order=ordem +acf-core.parameter.help=página ou palavras-chave +command.description.land.allow.all=Permite todas as ações no teu terreno +command.description.land.allow.interact_entity=Permite que os membros do clã interajam com entidades no teu terreno +command.description.land.allow.interact=Permite que os membros do clã interajam com o teu terreno +command.description.land.allow.container=Permite que os membros do clã abram baús/shulkers/etc no teu terreno +command.description.land.allow.place=Permite que os membros do clã coloquem blocos no teu terreno +command.description.land.allow.break=Permite que os membros do clã partam blocos no teu terreno +command.description.land.allow.damage=Permite que os membros do clã causem estragos no teu terreno +command.description.land.block.all=Bloqueia todas as ações no teu terreno +command.description.land.block.interact_entity=Proíbe que os membros do clã interajam com entidades no teu terreno +command.description.land.block.interact=Proíbe que os membros do clã interajam com o teu terreno +command.description.land.block.container=Proíbe que os membros do clã abram baús/shulkers/etc no teu terreno +command.description.land.block.place=Proíbe que os membros do clã coloquem blocos no teu terreno +command.description.land.block.break=Proíbe que os membros do clã partam blocos no teu terreno +command.description.land.block.damage=Proíbe que os membros do clã causem estragos no teu terreno +command.description.stats=Mostra as estatísticas dos membros do teu clã +command.description.rivalries=Mostra todas as rivalidades do clã +command.description.mostkilled=Mostra as maiores contagens de matança no servidor +command.description.kills=Mostra a tua contagem de matança ou de outro jogador +command.description.lookup=Procura pelas tuas informações +command.description.lookup.other=Procura pelas informações de um jogador +command.description.leaderboard=Mostra a tabela de liderança +command.description.roster.other=Listagem dos membros de outros clãs +command.description.roster=Listagem dos membros do teu clã +command.description.profile.other=Mostra o perfil de outro clã +command.description.profile=Mostra o perfil do teu clã +command.description.vitals=Mostra a vida do teu clã e dos teus aliados +command.description.list=Listagem de todos os clãs +command.description.chat=Fala no chat do clã +command.description.ally=Fala no chat dos aliados +command.description.deny=Nega um pedido +command.description.accept=Aceita um pedido +command.description.more=Mostra mais informação +command.description.create=Cria um clã +command.description.ff.allow=Define o teu fogo-amigável para permitido +command.description.ff.auto=Define o teu fogo-amigável para automático +command.description.globalff.allow=Define o fogo-amigável global para permitido command.description.globalff.auto=Define o fogo amigável global para automático command.description.clanff.allow=Define o fogo amigo do seu clã como permitido command.description.clanff.block=Define o fogo amigo do seu clã como bloqueado @@ -105,14 +155,92 @@ command.description.place=Coloca um jogador no clã command.description.reload=Recarrega o plugin e sua configuração command.description.trust=Traga um membro command.description.untrust=Desconfia de um membro +command.description.rank.setdefault=Define o cargo padrão +command.description.rank.removedefault=Remove o cargo padrão +command.description.rank.permissions.available=Listagem de permissões dos cargos disponíveis +command.description.rank.permissions.rank=Listagem das permissões de um cargo +command.description.rank.permissions.add=Adiciona uma permissão a um cargo +command.description.rank.permissions.remove=Remove uma permissão a um cargo +home-menu=/{0} casa{1} - Teleportar para a casa do clã +home-set-menu=/{0} casa set{1} - Definir a casa do clã +home-clear-menu=/{0} casa apagar{1} - Apaga a base do clã +clan=Clã +allies=Aliados alliances=aliança coords=coordenadas +name=Nome +distance=Distância +coords.upper=Coordenadas +world=Mundo +kdr=KDR +members=Membros +clans.lower=clãs +rival=Rival +civilian=Civil +neutral=Neutro +ally=Aliado +free.agent=Agente Livre +days=dias +rivals=Rivais rivalries=rivalidades +online=Online +player=Jogador +seen=Visto +leader=líder roster=membros +trusted=confiável +untrusted=não confiável +in.rank=no cargo +deaths=Mortes +weights=Pesos stats=estatísticas +health=Vida +armor=Armadura +weapons=Armas +food=Comida vitals=vitais +verified=Verificado +unverified=Não verificado +permanent=Permanente profile=perfil +civilian.abbreviation=Civ +rank=Cargo +leaders=Líderes +none=Nada +today=Hoje +kills=Matanças +mostkilled=Mais matanças +killcount=Contagem de Matanças +attacker=Atacante +victim=Vítima # suppress inspection "TrailingSpacesInProperty" +has.been.disbanded.alliance.ended={0} foi desfeita. A Aliança acabou. +clan.disbanded=Clã desfeito +1.color.day=1 {0}dia +many.color.days={0}{1} dias +insufficient.permissions=Permissões insuficientes +clan.is.not.verified=Clã não é verificado +player.not.a.member.of.any.clan=&cO jogador não é membro de nenhum clã +not.a.member.of.any.clan=Tu não és membro de nenhum clã +minimum.to.make.alliance=O teu clã deve ter pelo menos {0} membros para fazer alianças +cannot.be.same.clan=&cDeves colocar um clã diferente do teu\! +other.clan.not.verified=&cO outro clã não é verificado\! +your.clans.are.not.allies=Os teus clãs não são aliados +has.broken.the.alliance={0} terminou a aliança com {1} +at.least.one.leader.accept.the.alliance=Pelo menos um líder dos aliados deve estar online para aceitar a aliança +leaders.have.been.asked.for.an.alliance={0} líderes foram solicitados para uma aliança +your.clans.are.already.allies=Os teus clãs já são aliados +your.clan.cannot.create.rivals=O teu clã não pode criar rivais +min.players.rivalries=O teu clã deve ter pelo menos {0} membros para fazer rivalidades +this.player.is.already.banned=O membro já está banido +player.added.to.banned.list=Jogador adicionado à lista negra +you.banned=Foste banido de usar os comandos de clã +clan.wide.friendly.fire.blocked=Fogo-amigável entre clãs bloqueado +clan.wide.friendly.fire.is.allowed=Fogo-amigável entre clãs permitido +you.are.the.only.member.online=Tu és o único membro online +your.clan.color.tag.cannot.be.longer.than.characters=&cA cor da tag do teu clã não pode ter mais de {0} caracteres +your.clan.tag.cannot.be.longer.than.characters=A tag do teu clã não pode ter mais de {0} caracteres +your.clan.tag.must.be.longer.than.characters=A tag do teu clã deve ter mais de {0} caracteres start=iniciar end=terminar add=adicionar @@ -121,10 +249,12 @@ allow=permitir block=bloquear auto=auto war=guerra +bb.days= dias +gui.allies.title=Aliados +gui.rivals.title=Rivais # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index c6ff146e5..7e18a596f 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -90,5 +90,4 @@ block=blocheaza # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 3755c5078..b1429a884 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -80,6 +80,9 @@ resetkdr.command=resetkdr everyone.command=everyone setbanner.command=setbanner help.command=help +leave.command=leave +join.command=join +mute.command=mute acf-core.parameter.member=участник acf-core.parameter.rank=ранг acf-core.parameter.leader=лидер @@ -93,7 +96,7 @@ acf-core.parameter.description=описание acf-core.parameter.player=игрок acf-core.parameter.clan=клан acf-core.parameter.type=тип -acf-core.parameter.order=список заказов +acf-core.parameter.order=порядок acf-core.parameter.help=страница или ключевые слова command.description.land.allow.all=Разрешить все действия на вашей территории command.description.land.allow.interact_entity=Разрешить участникам клана взаимодействовать с сущностями на вашей территории @@ -209,7 +212,7 @@ command.description.rank.permissions.rank=Показать список прав command.description.rank.permissions.add=Добавить право для ранга command.description.rank.permissions.remove=Удалить право у ранга home-menu=/{0} home{1} - Телепортироваться на базу клана -home-set-menu=/{0} home set{1} - Установить базу клана +home-set-menu=/{0} home set{1} - Установить точку базы клана home-clear-menu=/{0} home clear{1} - Удалить базу клана clan=Clan allies=Allies @@ -354,6 +357,7 @@ clan.created=Клан {0} создан not.enough.leaders.online.to.vote.on.demotion=Нет лидеров в сети, чтобы проголосовать за это понижение demotion.vote.has.been.requested.from.all.leaders=Поступила просьба о проведении голосования по предложению от всех лидеров player.is.not.a.leader.of.your.clan=Игрок не является лидером вашего клана +player.is.not.a.leader=Игрок не является лидером clan.has.been.disbanded=Клан {0} был распущен clan.disband.vote.has.been.requested.from.all.leaders=Запрос на расформирование клана был отправлен всем лидерам friendy.fire.is.now.managed.by.your.clan="Огонь по своим" теперь управляется вашим кланом @@ -364,6 +368,7 @@ global.friendly.fire.is.set.to.allowed=Глобальный параметр "О global.friendly.fire.is.already.being.allowed=Глобальный параметр "Огонь по своим" уже разрешён the.player.doesn.t.not.have.the.permissions.to.join.clans=У игрока нет прав для вступления в клан you.cannot.invite.yourself=Вы не можете пригласить себя +you.did.not.answer.in.time=Вы не ответили вовремя, отмена... this.player.is.banned.from.using.clan.commands=Этот игрок заблокирован от использования команд клана the.player.is.already.member.of.another.clan=Игрок уже является участником другого клана has.been.asked.to.join={0} было предложено присоединиться к {1} @@ -465,7 +470,7 @@ feeoff=Участники клана больше не вносят комисс feeon=Участники клана теперь вносят комиссию на банковский счёт вашего клана. Участники, не имеющие достаточное количество денег, будут автоматически кикнуты с клана. home.base.only.once=База клана может быть установлена лишь один раз now.at.homebase=Вы сейчас находитесь на базе клана {0} -hombase.set=База клана\: {0} +hombase.set=База клана установлена\: {0} hombase.cleared=База клана была удалена hombase.mod.set=База клана {0} была установлена на координатах\: hombase.not.set=У клана нет базы @@ -474,9 +479,6 @@ you.moved.teleport.cancelled=Вы сдвинулись, телепортация waiting.for.teleport.stand.still.for.0.seconds=Ожидание телепортирования, оставайтесь на месте ещё {0} секунд on=on off=off -leave=leave -join=join -mute=mute player.rank.changed=Ранг был установлен your.clans.are.already.rivals=Ваши кланы уже являются соперниками player.got.money=Вы получили {0} за убийство {1} , основанном на вашем KDR\: {2} @@ -564,6 +566,7 @@ allowed=Разрешено blocked=запрещено chat.joined=присоединился chat.not.joined=не присоединился +chat.didnt.join=&bВы не присоединились к этому каналу gui.loading=&7Загрузка... gui.back.title=&fНазад gui.previous.page.title=&fПредыдущая страница @@ -679,10 +682,10 @@ gui.clandetails.roster.lore=&7ЛКМ\: Посмотреть список уча gui.staffclandetails.roster.lore=&7ЛКМ\: Посмотреть участников клана gui.clandetails.coords.title=&fКоординаты gui.clandetails.coords.lore=&7ЛКМ\: Просмотреть координаты участников вашего клана -gui.clandetails.home.title=&fДом +gui.clandetails.home.title=&fБаза клана gui.clandetails.home.lore.teleport.price=&7Цена телепортирования\: &b{0} gui.clandetails.home.lore.teleport=&7ЛКМ\: Телепортироваться на базу вашего клана -gui.staffclandetails.home.lore.teleport=&7ЛКМ\: Телепорироваться на базу этого клана +gui.staffclandetails.home.lore.teleport=&7ЛКМ\: Телепортироваться на базу этого клана gui.clandetails.home.lore.clear=&7СКМ\: Удалить точку базы вашего клана gui.clandetails.home.lore.set.price=&7Цена установки \: &b{0} gui.clandetails.home.lore.set=&7ПКМ\: Установить точку базы вашего клана @@ -772,6 +775,7 @@ gui.not.supported=&cПроизошла ошибка при открытии GUI\ staff.member.verify.clan=&cАдминистратор должен подтвердить ваш клан\! player.already.has.that.rank=&cУ игрока уже есть этот ранг\! joined.clan.chat=&bВы присоединились к клановому чату +already.joined.clan.chat=&bВы уже присоединились к чату клана left.clan.chat=&bВы покинули клановый чат muted.clan.chat=&bВы заглушили чат Клана unmuted.clan.chat=&bВы включили чат Клана @@ -779,6 +783,7 @@ joined.ally.chat=&bВы присоединились к союзному чат left.ally.chat=&bВы покинули чат с союзниками muted.ally.chat=&bВы заглушили чат с союзниками unmuted.ally.chat=&bВы включили чат с союзниками +already.joined.ally.chat=&bВы уже присоединились к союзному чату player.already.in.this.clan=&cИгрок уже состоит в этом клане your.clan.reached.max.alliances=&cВаш клан достиг максимального количества союзников other.clan.reached.max.alliances=&cДругой клан достиг максимального количества союзников @@ -805,6 +810,8 @@ clans.not.at.war.pvp.denied=&cВаш клан не воюет с {0}\! cannot.attack.civilians=&cВы не можете атаковать гражданских\! cannot.attack.clan.member=&cВы не можете атаковать участников других кланов\! cannot.attack.ally=&cВы не можете атаковать союзника\! +cannot.send.discord.message=Вы не можете отправить сообщения для {0}. Вы не являетесь участником этого клана\! +you.did.not.link.your.account=Вы не привязали ваш аккаунт\! # suppress inspection "TrailingSpacesInProperty" cannot.change.member.fee.now=&cИзменить комиссию участника клана невозможно, так как приближается время её сбора. cannot.change.member.fee.hours=&cПовторите попытку через {0} часов... @@ -821,13 +828,14 @@ land.allowed.action=&bДействие разрешено\! land.blocked.action=&bДействие запрещено\! you.do.not.own.lands=&cВы не владеете территорией\! land.sharing.disabled=&cРазделение территорий отключено\! +clan.chat.disabled=&cЧат клана отключен\! +ally.chat.disabled=&cСоюзный чат отключен\! war.expired=Война с {0} истекла\! you.cant.start.war.online.members.difference=Вы не можете начать войну. Один из кланов имеет больше участников в сети, чем у другого. - land.command=land break.command=break interact.command=interact place_block.command=place_block damage.command=damage interact_entity.command=interact_entity -container.command=container +container.command=container \ No newline at end of file diff --git a/src/main/resources/messages_sr_SP.properties b/src/main/resources/messages_sr_SP.properties index 782eb0d18..70ba8fad1 100644 --- a/src/main/resources/messages_sr_SP.properties +++ b/src/main/resources/messages_sr_SP.properties @@ -1,5 +1,6 @@ description.command=опис create.command=kреирај +delete.command=delete acf-core.parameter.description=опис # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" @@ -7,5 +8,4 @@ acf-core.parameter.description=опис # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 902d8749d..9bcc8813d 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -75,5 +75,4 @@ auto=auto # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index 8f039b623..3e830f944 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -474,9 +474,6 @@ you.moved.teleport.cancelled=Hareket ettiğiniz için ışınlanma iptal edildi waiting.for.teleport.stand.still.for.0.seconds=Işınlanılıyor, {0} saniye boyunca hareket etmeyin on=açık off=kapalı -leave=ayrıl -join=katıl -mute=sustur player.rank.changed=Rütbe belirlendi your.clans.are.already.rivals=Klanlarınız zaten rakip player.got.money=KDR''nize göre {1} kişi öldürmekten {0}$ para aldınız\: {2} @@ -823,11 +820,10 @@ you.do.not.own.lands=&cAraziniz yok\! land.sharing.disabled=&cArazi paylaşımı devre dışı bırakıldı\! war.expired={0} ile olan savaşın süresi doldu\! you.cant.start.war.online.members.difference=Savaş başlatamazsınız. Bir klanın diğerinden daha fazla çevrimiçi üyesi var. - land.command=arazi break.command=kırma interact.command=etkileşim place_block.command=blok_koyma damage.command=hasar interact_entity.command=varlık_etkileşimi -container.command=sandıklar +container.command=sandıklar \ No newline at end of file diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index a9ee09ae7..cc8f84a8c 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -192,5 +192,4 @@ war=війна # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_vi_VN.properties b/src/main/resources/messages_vi_VN.properties index 35da41a1b..3c4114d7d 100644 --- a/src/main/resources/messages_vi_VN.properties +++ b/src/main/resources/messages_vi_VN.properties @@ -178,5 +178,4 @@ war=cuộc chiến # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 16971f25a..40e1c14ce 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -80,6 +80,9 @@ resetkdr.command=重置死亡比值 everyone.command=所有人 setbanner.command=设置标语 help.command=用户指南 +leave.command=离开 +join.command=加入 +mute.command=禁言 acf-core.parameter.member=成员 acf-core.parameter.rank=排名 acf-core.parameter.leader=老大 @@ -354,6 +357,7 @@ clan.created=帮派 {0} 创建了 not.enough.leaders.online.to.vote.on.demotion=没有足够的在线领袖对此降级投票 demotion.vote.has.been.requested.from.all.leaders=所有老大都要求降级 player.is.not.a.leader.of.your.clan=这个玩家不是你的帮派的老大 +player.is.not.a.leader=该玩家不是领袖 clan.has.been.disbanded=帮派 {0} 已经解散了 clan.disband.vote.has.been.requested.from.all.leaders=所有老大都要求解散帮派 friendy.fire.is.now.managed.by.your.clan=友军伤害现在由您的帮派管理 @@ -364,6 +368,7 @@ global.friendly.fire.is.set.to.allowed=全局的友军伤害已经启用 global.friendly.fire.is.already.being.allowed=全局的友军伤害已经启用了 the.player.doesn.t.not.have.the.permissions.to.join.clans=玩家没有加入此帮派的权限 you.cannot.invite.yourself=你不能邀请你自己 +you.did.not.answer.in.time=未在指定时间内输入, 取消操作... this.player.is.banned.from.using.clan.commands=此玩家被禁止使用此命令 the.player.is.already.member.of.another.clan=此玩家已经是其他帮派的成员了 has.been.asked.to.join={0} 已经被请求加入 {1} 了 @@ -474,9 +479,6 @@ you.moved.teleport.cancelled=你移动了,传送请求取消 waiting.for.teleport.stand.still.for.0.seconds=等待传送于 {0} 秒内开始 on=开 off=关 -leave=离开 -join=加入 -mute=禁言 player.rank.changed=称号被设置为 your.clans.are.already.rivals=你的帮派已经是敌对了 player.got.money=你因为击杀 {1} 而获得了基于 KD\: {2} 的 {0} @@ -564,6 +566,7 @@ allowed=允许 blocked=禁止 chat.joined=已加入 chat.not.joined=未加入 +chat.didnt.join=&b你未加入该频道 gui.loading=&7载入中... gui.back.title=&f返回 gui.previous.page.title=&f上一页 @@ -695,11 +698,42 @@ gui.clandetails.ff.title=&f友军伤害 gui.clandetails.ff.personal.lore=&7个人\: &b{0} gui.clandetails.ff.clan.lore=&7宗派\: &b{0} gui.clandetails.ff.personal.toggle.lore=&7左键单击切换你的友军伤害 +gui.clandetails.ff.clan.toggle.lore=&7右键单击切换你宗派的友军伤害 +gui.clandetails.bank.title=&f银行 +gui.clandetails.bank.balance.lore=&7存款\: &b{0} +gui.clandetails.bank.withdraw.status.lore=&7取出\: &b{0} +gui.clandetails.bank.deposit.status.lore=&7存入\: &b{0} +gui.clandetails.bank.withdraw.toggle.lore=&7中键点击切换提款状态 +gui.clandetails.bank.deposit.toggle.lore=&7右键点击切换存入状态 +gui.clandetails.fee.title=&f费用 gui.clandetails.fee.status.lore=&7状态\: &b{0} +gui.clandetails.fee.value.lore=&7消耗费用\: &b{0} +gui.clandetails.fee.toggle.lore=&7左键点击切换费用显示状态 +gui.clandetails.rank.title=&f等级 +gui.clandetails.rank.lore=&7左键点击查看该宗派排名并编 +gui.clandetails.verified.title=&f已验证 gui.clandetails.not.verified.title=&f未验证 gui.clandetails.verify.price.lore=&7价格\: &b{0} +gui.clandetails.not.verified.lore=&7左键单击以验证宗派 +gui.staffclandetails.not.verified.lore=&7左键单击以验证该宗派 +gui.clandetails.resign.title=&f重新注册 +gui.clandetails.resign.lore=&7左键单击以离开你的宗派 +gui.clandetails.disband.title=&f解散 +gui.clandetails.disband.lore=&7鼠标中键解散你的宗派 +gui.staffclandetails.disband.lore=&7左键单击解散宗派 +gui.clandetails.chat.title=&f聊天 +gui.clandetails.chat.clan.chat.lore=&7/{0} [message] - &b发送一条消息到宗派聊天栏 +gui.clandetails.chat.clan.join.leave.lore=&7/{0} {1}/{2} - &b加入/离开部落聊天室 +gui.clandetails.chat.ally.chat.lore=&7/{0} [message] - &b发送一条消息到盟军聊天栏 +gui.clandetails.chat.ally.join.leave.lore=&7/{0} {1}/{2} - &b加入/离开盟军聊天室 gui.clandetails.chat.clan.status.lore=&7宗派\: &b{0} +gui.clandetails.chat.ally.status.lore=&7联盟\: &b{0} +gui.clandetails.chat.clan.toggle.lore=&7左键单击切换宗派聊天状态 +gui.clandetails.chat.ally.toggle.lore=&7右键单击切换盟军聊天状态 +gui.playerdetails.title={0} gui.playerdetails.player.title=&f{0} +gui.playerdetails.player.lore.noclan=&7宗派\: &b无 +gui.playerdetails.player.lore.clan=&7宗派\: &b[{0}&b] {1} gui.playerdetails.player.lore.status=&7状态\: &b{0} gui.playerdetails.player.lore.kdr=&7KD 比\: &b{0} gui.playerdetails.player.lore.kill.totals=&7总击杀数\: &b[敌对\:{0} 中立\:{1} 友好\:{2}] @@ -714,5 +748,4 @@ gui.languageselector.language.title=&f{0} gui.languageselector.language.lore.right.click=&7右键点击以打开翻译界面 # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 6364a4a9b..2cebc4740 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -80,5 +80,4 @@ auto=自動 # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" - +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file From 55e82dab5f321dc98b7e41379f098939ca7ac49f Mon Sep 17 00:00:00 2001 From: Mehmet <84019475+mehmet-27@users.noreply.github.com> Date: Tue, 31 Aug 2021 00:57:58 +0300 Subject: [PATCH 19/30] Toggle Clan Invitation (#244) #57 --- SimpleClans.iml | 2 +- dependency-reduced-pom.xml | 2 +- .../phaed/simpleclans/ClanPlayer.java | 9 ++ .../commands/clan/ClanCommands.java | 4 + .../commands/clan/ToggleCommand.java | 103 ++++++++++-------- src/main/resources/messages.properties | 6 +- src/main/resources/plugin.yml | 5 +- 7 files changed, 79 insertions(+), 52 deletions(-) diff --git a/SimpleClans.iml b/SimpleClans.iml index 0bcd5b998..3e0a9569a 100644 --- a/SimpleClans.iml +++ b/SimpleClans.iml @@ -143,4 +143,4 @@ - \ No newline at end of file + diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 32a1b13de..8c9dd28a5 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ net.sacredlabyrinth.phaed.simpleclans SimpleClans SimpleClans - 2.15.2 + 2.15.3 https://www.spigotmc.org/resources/simpleclans.71242/ diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java index 4c34a6308..a5aaae775 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/ClanPlayer.java @@ -787,6 +787,15 @@ public void setBbEnabled(boolean bbEnabled) { SimpleClans.getInstance().getStorageManager().updateClanPlayer(this); } + public boolean isInviteEnabled() { + return flags.getBoolean("invite", true); + } + + public void setInviteEnabled(boolean inviteEnabled) { + flags.put("invite", inviteEnabled); + SimpleClans.getInstance().getStorageManager().updateClanPlayer(this); + } + @Deprecated public boolean isCapeEnabled() { return false; diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java index 38827538f..a0ab32f19 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java @@ -132,6 +132,10 @@ public void setbanner(Player player, Clan clan) { @Description("{@@command.description.invite}") public void invite(Player sender, ClanPlayer cp, Clan clan, @Conditions("not_banned|not_in_clan|online:ignore_vanished") @Name("player") ClanPlayerInput invited) { + if (!invited.getClanPlayer().isInviteEnabled()){ + ChatBlock.sendMessage(sender, RED + lang("invitedplayer.invite.off", sender)); + return; + } Player invitedPlayer = invited.getClanPlayer().toPlayer(); if (invitedPlayer == null) return; if (!permissions.has(invitedPlayer, "simpleclans.member.can-join")) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ToggleCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ToggleCommand.java index d5a7ec612..bcd290a3a 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ToggleCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ToggleCommand.java @@ -16,61 +16,68 @@ @CommandAlias("%clan") @Subcommand("%toggle") -@Conditions("%basic_conditions|verified") +@Conditions("%basic_conditions") public class ToggleCommand extends BaseCommand { @Dependency private StorageManager storage; - @Subcommand("%bb") - @CommandPermission("simpleclans.member.bb-toggle") - @Description("{@@command.description.toggle.bb}") - public void bb(Player player, ClanPlayer cp) { - toggle(player, "bbon", "bboff", cp.isBbEnabled(), cp::setBbEnabled); - - storage.updateClanPlayer(cp); - } - - @Subcommand("%tag") - @CommandPermission("simpleclans.member.tag-toggle") - @Description("{@@command.description.toggle.tag}") - public void tag(Player player, ClanPlayer cp) { - toggle(player, "tagon", "tagoff", cp.isTagEnabled(), cp::setTagEnabled); - - storage.updateClanPlayer(cp); + @Conditions("verified") + public class Verified extends BaseCommand { + + @Subcommand("%bb") + @CommandPermission("simpleclans.member.bb-toggle") + @Description("{@@command.description.toggle.bb}") + public void bb(Player player, ClanPlayer cp) { + toggle(player, "bbon", "bboff", cp.isBbEnabled(), cp::setBbEnabled); + } + + @Subcommand("%tag") + @CommandPermission("simpleclans.member.tag-toggle") + @Description("{@@command.description.toggle.tag}") + public void tag(Player player, ClanPlayer cp) { + toggle(player, "tagon", "tagoff", cp.isTagEnabled(), cp::setTagEnabled); + } + + @Subcommand("%deposit") + @CommandPermission("simpleclans.leader.deposit-toggle") + @Conditions("leader") + @Description("{@@command.description.toggle.deposit}") + public void deposit(Player player, Clan clan) { + toggle(player, "depositon", "depositoff", clan.isAllowDeposit(), + clan::setAllowDeposit); + + storage.updateClan(clan); + } + + @Subcommand("%fee") + @CommandPermission("simpleclans.leader.fee") + @Conditions("rank:name=FEE_ENABLE|change_fee") + @Description("{@@command.description.toggle.fee}") + public void fee(Player player, Clan clan) { + toggle(player, "feeon", "feeoff", clan.isMemberFeeEnabled(), + clan::setMemberFeeEnabled); + + storage.updateClan(clan); + } + + @Subcommand("%withdraw") + @CommandPermission("simpleclans.leader.withdraw-toggle") + @Conditions("leader") + @Description("{@@command.description.toggle.withdraw}") + public void withdraw(Player player, Clan clan) { + toggle(player, "withdrawon", "withdrawoff", clan.isAllowWithdraw(), + clan::setAllowWithdraw); + + storage.updateClan(clan); + } } - @Subcommand("%deposit") - @CommandPermission("simpleclans.leader.deposit-toggle") - @Conditions("leader") - @Description("{@@command.description.toggle.deposit}") - public void deposit(Player player, Clan clan) { - toggle(player, "depositon", "depositoff", clan.isAllowDeposit(), - clan::setAllowDeposit); - - storage.updateClan(clan); - } - - @Subcommand("%fee") - @CommandPermission("simpleclans.leader.fee") - @Conditions("rank:name=FEE_ENABLE|change_fee") - @Description("{@@command.description.toggle.fee}") - public void fee(Player player, Clan clan) { - toggle(player, "feeon", "feeoff", clan.isMemberFeeEnabled(), - clan::setMemberFeeEnabled); - - storage.updateClan(clan); - } - - @Subcommand("%withdraw") - @CommandPermission("simpleclans.leader.withdraw-toggle") - @Conditions("leader") - @Description("{@@command.description.toggle.withdraw}") - public void withdraw(Player player, Clan clan) { - toggle(player, "withdrawon", "withdrawoff", clan.isAllowWithdraw(), - clan::setAllowWithdraw); - - storage.updateClan(clan); + @Subcommand("%invite") + @CommandPermission("simpleclans.anyone.invite-toggle") + @Description("{@@command.description.toggle.invite}") + public void invite(Player player, ClanPlayer cp) { + toggle(player, "inviteon", "inviteoff", cp.isInviteEnabled(), cp::setInviteEnabled); } private void toggle(CommandSender sender, String onMessageKey, String offMessageKey, boolean status, diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 02cbc2217..4d667b823 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -193,6 +193,7 @@ command.description.admin.promote=Promotes any member from any clan command.description.promote=Promotes a member to leader command.description.admin.permanent=Toggles the permanent status of any clan command.description.toggle.bb=Toggles whether the bulletin board should be displayed when you login +command.description.toggle.invite=Toggles whether players can send you clan invites command.description.toggle.tag=Toggles whether your clan''s tag should be displayed next to your name command.description.toggle.deposit=Toggles whether deposits are allowed on your clan command.description.toggle.withdraw=Toggles whether withdraws are allowed on your clan @@ -460,6 +461,8 @@ iron=iron the.clan.cannot.be.rivaled=The clan cannot be rivaled bboff=BB toggled off bbon=BB toggled on +inviteon=Invite toggled on +inviteoff=Invite toggled off tagoff=Tag toggled off tagon=Tag toggled on depositon=Deposit toggled on @@ -832,6 +835,7 @@ clan.chat.disabled=&cClan chat is disabled! ally.chat.disabled=&cAlly chat is disabled! war.expired=The war with {0} has expired! you.cant.start.war.online.members.difference=You can''t start the war. One clan has more members online than the other. +invitedplayer.invite.off=This player has disabled clan invites land.command=land break.command=break interact.command=interact @@ -839,4 +843,4 @@ place_block.command=place_block damage.command=damage interact_entity.command=interact_entity container.command=container -user.hasnt.played.before=&cThis user has not played before \ No newline at end of file +user.hasnt.played.before=&cThis user has not played before diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f5ecd8030..4696d9dde 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -68,6 +68,8 @@ permissions: description: Can view alliances by clan simpleclans.anyone.rivalries: description: Can view rivalries by clan + simpleclans.anyone.invite-toggle: + description: Can toggle invite on/off simpleclans.other.kdr-exempt: description: The player's KDR is not affected on killing/dying default: false @@ -238,6 +240,7 @@ permissions: simpleclans.anyone.leaderboard: true simpleclans.anyone.alliances: true simpleclans.anyone.rivalries: true + simpleclans.anyone.invite-toggle: true simpleclans.member.land.*: description: Permissions for allowing/blocking actions in lands default: false @@ -320,4 +323,4 @@ permissions: simpleclans.leader.rank.permissions.available: true simpleclans.leader.rank.permissions.add: true simpleclans.leader.rank.permissions.remove: true - simpleclans.leader.rank.permissions.list: true \ No newline at end of file + simpleclans.leader.rank.permissions.list: true From 8eaa86ae4592d83aee3780ad778c154120f545ed Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Fri, 3 Sep 2021 20:13:49 -0300 Subject: [PATCH 20/30] Marks annoying provider messages as debug Logs when a provider is registered Adds debug messages for ProtectionManager#can() Checks if getPlot exists on PlotSquared5Provider --- .../hooks/protection/providers/PlotSquared5Provider.java | 4 +++- .../phaed/simpleclans/managers/ProtectionManager.java | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared5Provider.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared5Provider.java index 789f7bcd9..51c615469 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared5Provider.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/protection/providers/PlotSquared5Provider.java @@ -21,7 +21,9 @@ public class PlotSquared5Provider implements ProtectionProvider { @Override - public void setup() { + public void setup() throws NoSuchMethodException { + //noinspection ResultOfMethodCallIgnored + BukkitUtil.class.getMethod("getPlot", Location.class); } @Override diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java index 5c84b80cd..67db4b5b1 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ProtectionManager.java @@ -105,8 +105,10 @@ public boolean can(@NotNull Action action, @NotNull Location location, @NotNull } public boolean can(@NotNull Action action, @NotNull Location location, @NotNull Player player, @Nullable Player other) { + debug(String.format("Action %s, Player %s (%s), Other Player %s", action, player, player.getUniqueId(), other)); for (Land land : getLandsAt(location)) { for (UUID owner : land.getOwners()) { + debug(String.valueOf(owner)); if (owner == null) { continue; } @@ -118,10 +120,12 @@ public boolean can(@NotNull Action action, @NotNull Location location, @NotNull } if (isWarringAndAllowed(action, owner, involved) || isSameClanAndAllowed(action, owner, involved, land.getId())) { + debug("Allowed action"); return true; } } } + debug("Denied action"); return false; } @@ -258,8 +262,7 @@ public void registerProvider(@NotNull ProtectionProvider provider) { String requiredPlugin = provider.getRequiredPluginName(); String providerName = provider.getClass().getSimpleName(); if (requiredPlugin != null && Bukkit.getPluginManager().getPlugin(requiredPlugin) == null) { - logger.warning(String.format("Required plugin %s for the provider %s was not found!", - requiredPlugin, providerName)); + debug(String.format("Required plugin %s for the provider %s was not found!", requiredPlugin, providerName)); return; } try { @@ -273,6 +276,7 @@ public void registerProvider(@NotNull ProtectionProvider provider) { } providers.add(provider); landProtection.registerCreateLandEvent(provider, provider.getCreateLandEvent()); + logger.info(String.format("Registered %s successfully", providerName)); } @NotNull From 84dd6a4cbd2afa0576d77a66debc1ea8b3eb1a48 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Fri, 3 Sep 2021 23:55:14 -0300 Subject: [PATCH 21/30] Adds command /clan resign confirm #163 This will bypass the conversation to confirm the resign --- .../commands/SCCommandManager.java | 2 +- .../commands/clan/ClanCommands.java | 20 +++++++++++++++++++ src/main/resources/messages.properties | 15 +++++++------- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java index 2deb3a36e..165cc6e43 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java @@ -223,6 +223,6 @@ public String getMessage(CommandIssuer issuer, MessageKeyProvider key) { "setdisplayname", "permissions", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone", "lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod", "setdefault", "removedefault", "land", "break", "interact", "place_block", "damage", "interact_entity", - "container", "permanent", "take", "give", "join", "leave", "mute"); + "container", "permanent", "take", "give", "join", "leave", "mute", "confirm"); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java index a0ab32f19..72408ca8c 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ClanCommands.java @@ -359,6 +359,26 @@ public void kick(@Conditions("clan_member") Player sender, clan.removePlayerFromClan(clanPlayer.getUniqueId()); } + @Subcommand("%resign %confirm") + @CommandPermission("simpleclans.member.resign") + @Description("{@@command.description.resign}") + @HelpSearchTags("leave") + public void resignConfirm(Player player, ClanPlayer cp, Clan clan) { + if (clan.isPermanent() || !clan.isLeader(player) || clan.getLeaders().size() > 1) { + clan.addBb(player.getName(), AQUA + lang("0.has.resigned", player.getName())); + cp.addResignTime(clan.getTag()); + clan.removePlayerFromClan(player.getUniqueId()); + + ChatBlock.sendMessage(cp,AQUA + lang("resign.success", player)); + } else if (clan.isLeader(player) && clan.getLeaders().size() == 1) { + clan.disband(player, true, false); + ChatBlock.sendMessage(cp, RED + lang("clan.has.been.disbanded", player, clan.getName())); + } else { + ChatBlock.sendMessage(cp, RED + + lang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan", player)); + } + } + @Subcommand("%resign") @CommandPermission("simpleclans.member.resign") @Description("{@@command.description.resign}") diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 4d667b823..22425f5ca 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -14,6 +14,14 @@ list.type.kdr=kdr list.type.size=size list.type.founded=founded list.type.active=active +land.command=land +break.command=break +interact.command=interact +place_block.command=place_block +damage.command=damage +interact_entity.command=interact_entity +container.command=container +confirm.command=confirm profile.command=profile roster.command=roster lookup.command=lookup @@ -836,11 +844,4 @@ ally.chat.disabled=&cAlly chat is disabled! war.expired=The war with {0} has expired! you.cant.start.war.online.members.difference=You can''t start the war. One clan has more members online than the other. invitedplayer.invite.off=This player has disabled clan invites -land.command=land -break.command=break -interact.command=interact -place_block.command=place_block -damage.command=damage -interact_entity.command=interact_entity -container.command=container user.hasnt.played.before=&cThis user has not played before From 37ffb93808c9b805238137284745ed1ba5430ca2 Mon Sep 17 00:00:00 2001 From: Minat0_ <42711312+Tomut0@users.noreply.github.com> Date: Sat, 4 Sep 2021 18:51:29 +0300 Subject: [PATCH 22/30] Adds new metrics for discord chat feature (#247) * Adds new metrics for discord chat feature Marks CommandHelper as deprecated * Deletes CommandHelper.java && DamageRecord.java because of non-usage --- .../phaed/simpleclans/CommandHelper.java | 60 ----------------- .../phaed/simpleclans/DamageRecord.java | 67 ------------------- .../phaed/simpleclans/SimpleClans.java | 1 + 3 files changed, 1 insertion(+), 127 deletions(-) delete mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/CommandHelper.java delete mode 100644 src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/CommandHelper.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/CommandHelper.java deleted file mode 100644 index fb7c18f70..000000000 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/CommandHelper.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.sacredlabyrinth.phaed.simpleclans; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandMap; -import org.bukkit.command.PluginCommand; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.SimplePluginManager; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.util.Arrays; - -public class CommandHelper { - - private CommandHelper() { - } - - public static void registerCommand(String... aliases) { - if (aliases != null) { - PluginCommand command = getCommand(aliases[0], SimpleClans.getInstance()); - - if (command != null) { - command.setAliases(Arrays.asList(aliases)); - getCommandMap().register(SimpleClans.getInstance().getDescription().getName(), command); - } - } - } - - private static PluginCommand getCommand(String name, Plugin plugin) { - PluginCommand command = null; - - try { - Constructor c = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class); - c.setAccessible(true); - - command = c.newInstance(name, plugin); - } catch (Exception e) { - e.printStackTrace(); - } - - return command; - } - - private static CommandMap getCommandMap() { - CommandMap commandMap = null; - - try { - if (Bukkit.getPluginManager() instanceof SimplePluginManager) { - Field f = SimplePluginManager.class.getDeclaredField("commandMap"); - f.setAccessible(true); - - commandMap = (CommandMap) f.get(Bukkit.getPluginManager()); - } - } catch (Exception e) { - e.printStackTrace(); - } - - return commandMap; - } -} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java deleted file mode 100644 index 1ecd6f5d7..000000000 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/DamageRecord.java +++ /dev/null @@ -1,67 +0,0 @@ - -package net.sacredlabyrinth.phaed.simpleclans; - -import java.util.Date; - -/** - * @author phaed - * @deprecated No usage - */ -@Deprecated -public class DamageRecord { - private String victim; - private String attacker; - private Date time; - - /** - * @param victim - * @param attacker - */ - public DamageRecord(String victim, String attacker) { - this.victim = victim; - this.attacker = attacker; - this.time = new Date(); - } - - /** - * @return the victim - */ - public String getVictim() { - return victim; - } - - /** - * @param victim the victim to set - */ - public void setVictim(String victim) { - this.victim = victim; - } - - /** - * @return the attacker - */ - public String getAttacker() { - return attacker; - } - - /** - * @param attacker the attacker to set - */ - public void setAttacker(String attacker) { - this.attacker = attacker; - } - - /** - * @return the time - */ - public Date getTime() { - return new Date(time.getTime()); - } - - /** - * @param time the time to set - */ - public void setTime(Date time) { - this.time = new Date(time.getTime()); - } -} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java index c6a0af03d..ae169f25c 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java @@ -169,6 +169,7 @@ private void startMetrics() { metrics.addCustomChart(new SimplePie("money_per_kill", () -> sm.is(ECONOMY_MONEY_PER_KILL) ? on : off)); metrics.addCustomChart(new SimplePie("threads", () -> sm.is(PERFORMANCE_USE_THREADS) ? on : off)); metrics.addCustomChart(new SimplePie("bungeecord", () -> sm.is(PERFORMANCE_USE_BUNGEECORD) ? on : off)); + metrics.addCustomChart(new SimplePie("discord_chat", () -> sm.is(DISCORDCHAT_ENABLE) ? on : off)); } private void startTasks() { From c3b9c68d456cd17d4aa131ecbf5ce3f506e5cafa Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Sat, 4 Sep 2021 21:27:41 -0300 Subject: [PATCH 23/30] Creates a ClanPlayer object on placeholder request --- .../phaed/simpleclans/hooks/papi/SimpleClansExpansion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java index 303ff6ac9..958e07dd1 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/hooks/papi/SimpleClansExpansion.java @@ -107,7 +107,7 @@ public String onPlaceholderRequest(Player player1, Player player2, String params public String onRequest(@Nullable OfflinePlayer player, @NotNull String params) { ClanPlayer cp = null; if (player != null) { - cp = clanManager.getAnyClanPlayer(player.getUniqueId()); + cp = clanManager.getCreateClanPlayer(player.getUniqueId()); } Clan clan = cp != null ? cp.getClan() : null; Matcher matcher = TOP_CLANS_PATTERN.matcher(params); From e66e18756628d4702bff13d5e298100d95d6db97 Mon Sep 17 00:00:00 2001 From: Minat0_ <42711312+Tomut0@users.noreply.github.com> Date: Sun, 5 Sep 2021 05:59:02 +0300 Subject: [PATCH 24/30] Running checks on different Java versions (#248) --- .github/workflows/maven.yml | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 964564fd1..b11d9d790 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -11,19 +11,28 @@ on: jobs: build: + strategy: + fail-fast: false + max-parallel: 4 + matrix: + java-version: [ 8, 11, 16 ] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build with Maven - run: mvn -B package --file pom.xml - - name: Upload a Build Artifact - uses: actions/upload-artifact@v2 - with: - name: SimpleClans - path: target/SimpleClans.jar + - name: Checkout + uses: actions/checkout@v2 + - name: "Set up JDK ${{ matrix.java-version }}" + uses: actions/setup-java@v2 + with: + java-version: "${{ matrix.java-version }}" + distribution: 'adopt' + cache: maven + - name: Build with Maven + run: mvn -B -U package --file pom.xml + - name: Upload a Build Artifact + if: "${{ matrix.java-version == 8 }}" + uses: actions/upload-artifact@v2 + with: + name: SimpleClans + path: target/SimpleClans.jar From 51241b3ae5af3271b4183a82889af6f1b4ab1a45 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Tue, 7 Sep 2021 19:22:23 -0300 Subject: [PATCH 25/30] Adds /clan list balance command Permission: simpleclans.anyone.list.balance - default false --- dependency-reduced-pom.xml | 112 ++++++++++++++++-- .../commands/SCCommandManager.java | 2 +- .../commands/general/GeneralCommands.java | 28 +++++ src/main/resources/messages.properties | 4 + src/main/resources/plugin.yml | 2 + 5 files changed, 135 insertions(+), 13 deletions(-) diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 8c9dd28a5..48fd014df 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ net.sacredlabyrinth.phaed.simpleclans SimpleClans SimpleClans - 2.15.3 + 2.15.2 https://www.spigotmc.org/resources/simpleclans.71242/ @@ -57,7 +57,7 @@ - org.bstats.bukkit + org.bstats net.sacredlabyrinth.phaed.simpleclans.metrics @@ -76,14 +76,6 @@ com.cryptomorin.xseries net.sacredlabyrinth.phaed.simpleclans.xseries - - org.reflections - net.sacredlabyrinth.phaed.simpleclans.reflections - - - javassist - net.sacredlabyrinth.phaed.simpleclans.javassist - @@ -127,6 +119,10 @@ plotsquared https://plotsquared.com/mvn/ + + Scarsz-Nexus + https://nexus.scarsz.me/content/groups/public/ + jitpack.io https://jitpack.io @@ -194,13 +190,13 @@ org.jetbrains annotations - 16.0.2 + 22.0.0 compile org.junit.jupiter junit-jupiter-api - 5.4.0 + 5.7.2 test @@ -313,6 +309,98 @@ + + com.discordsrv + discordsrv + 1.23.0 + provided + + + JDA + net.dv8tion + + + nv-websocket-client + com.neovisionaries + + + trove4j + net.sf.trove4j + + + configuralize + github.scarsz + + + slf4j-jdk14 + org.slf4j + + + commons-io + commons-io + + + commons-collections + commons-collections + + + commons-lang3 + org.apache.commons + + + commons-codec + commons-codec + + + emoji-java + com.vdurmont + + + java-semver + com.github.zafarkhaja + + + http-request + com.github.kevinsawicki + + + minidns-hla + org.minidns + + + spring-expression + org.springframework + + + MCDiscordReserializer + dev.vankka + + + adventure-api + net.kyori + + + adventure-text-serializer-legacy + net.kyori + + + adventure-text-serializer-gson + net.kyori + + + adventure-platform-bukkit + net.kyori + + + adventure-text-minimessage + net.kyori + + + guava + com.google.guava + + + diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java index 165cc6e43..32257bd25 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/SCCommandManager.java @@ -223,6 +223,6 @@ public String getMessage(CommandIssuer issuer, MessageKeyProvider key) { "setdisplayname", "permissions", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone", "lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod", "setdefault", "removedefault", "land", "break", "interact", "place_block", "damage", "interact_entity", - "container", "permanent", "take", "give", "join", "leave", "mute", "confirm"); + "container", "permanent", "take", "give", "join", "leave", "mute", "confirm", "balance"); } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java index cc7d2c42c..04678defb 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/general/GeneralCommands.java @@ -24,7 +24,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.text.MessageFormat; +import java.util.Comparator; import java.util.HashMap; +import java.util.List; import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanNamePrompt.NAME_KEY; @@ -234,6 +237,31 @@ public void mostKilled(Player player) { mk.send(); } + @Subcommand("%list %balance") + @CommandPermission("simpleclans.anyone.list.balance") + @Description("{@@command.description.list.balance}") + public void listBalance(CommandSender sender) { + List clans = cm.getClans(); + if (clans.isEmpty()) { + sender.sendMessage(RED + lang("no.clans.have.been.created", sender)); + return; + } + clans.sort(Comparator.comparingDouble(Clan::getBalance).reversed()); + + sender.sendMessage(lang("clan.list.balance.header", sender, settings.getColored(SERVER_NAME), clans.size())); + String lineFormat = lang("clan.list.balance.line", sender); + + String leftBracket = settings.getColored(TAG_BRACKET_COLOR) + settings.getColored(TAG_BRACKET_LEFT); + String rightBracket = settings.getColored(TAG_BRACKET_COLOR) + settings.getColored(TAG_BRACKET_RIGHT); + for (int i = 0; i < 10 && i < clans.size(); i++) { + Clan clan = clans.get(i); + String name = " " + (clan.isVerified() ? settings.getColored(PAGE_CLAN_NAME_COLOR) : GRAY) + clan.getName(); + String line = MessageFormat.format(lineFormat, i + 1, leftBracket, clan.getColorTag(), + rightBracket, name, clan.getBalance()); + sender.sendMessage(line); + } + } + @Subcommand("%list") @CommandPermission("simpleclans.anyone.list") @Description("{@@command.description.list}") diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 22425f5ca..344ba00d3 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -7,6 +7,7 @@ setdefault.command=setdefault removedefault.command=removedefault permissions.command=permissions list.command=list +balance.command=balance list.order.asc=asc list.order.desc=desc list.type.name=name @@ -133,6 +134,7 @@ command.description.profile.other=Shows another clan''s profile command.description.profile=Shows your clan''s profile command.description.vitals=Shows your clan''s and allies' vitals command.description.list=Lists all clans +command.description.list.balance=Shows the most rich clans command.description.chat=Talks in the clan chat command.description.ally=Talks in the ally chat command.description.deny=Denies a request @@ -845,3 +847,5 @@ war.expired=The war with {0} has expired! you.cant.start.war.online.members.difference=You can''t start the war. One clan has more members online than the other. invitedplayer.invite.off=This player has disabled clan invites user.hasnt.played.before=&cThis user has not played before +clan.list.balance.header=\n{0} &7top balance &8-----------------------\n \n&8Total clans: &7{1}\n \n&8#&7. &8Clan &7- &8Balance +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$ \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4696d9dde..a20104bab 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -56,6 +56,8 @@ permissions: description: Can bypass pvp in wars simpleclans.anyone.list: description: Can list simpleclans + simpleclans.anyone.list.balance: + description: Can list clans by balance simpleclans.anyone.profile: description: Can view a clan's profile simpleclans.anyone.roster: From da397676f69920fbe1a6ad613665c84aaf090f5f Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Thu, 9 Sep 2021 19:38:41 -0300 Subject: [PATCH 26/30] New Crowdin updates (#245) --- src/main/resources/messages_be_BY.properties | 40 ++++++++++++++++++++ src/main/resources/messages_de_DE.properties | 16 ++++---- src/main/resources/messages_es_ES.properties | 16 ++++---- src/main/resources/messages_it_IT.properties | 10 ++--- src/main/resources/messages_nl_NL.properties | 16 ++++---- src/main/resources/messages_pl_PL.properties | 32 ++++++++++++---- src/main/resources/messages_pt_BR.properties | 19 ++++++---- src/main/resources/messages_ru_RU.properties | 28 ++++++++------ src/main/resources/messages_tr_TR.properties | 16 ++++---- src/main/resources/messages_uk_UA.properties | 1 + 10 files changed, 132 insertions(+), 62 deletions(-) create mode 100644 src/main/resources/messages_be_BY.properties diff --git a/src/main/resources/messages_be_BY.properties b/src/main/resources/messages_be_BY.properties new file mode 100644 index 000000000..d116fd3f4 --- /dev/null +++ b/src/main/resources/messages_be_BY.properties @@ -0,0 +1,40 @@ +description.command=апісанне +create.command=стварыць +delete.command=выдаліць +acf-core.parameter.description=апісанне +command.description.land.allow.all=Дазваляе ўсе дзеянні на вашай зямлі +command.description.land.allow.interact_entity=Дазваляе членам клана ўзаемадзейнічаць з істотамі на вашай зямлі +command.description.land.allow.interact=Дазваляе членам клана узаемадзейнічаць з вашай зямлёй +command.description.land.allow.container=Дазваляе членам клана адкрываць сховішча на вашай зямлі +command.description.land.allow.place=Дазваляе членам клана ставіць блокі на вашай зямлі +command.description.land.allow.break=Дазваляе членам клана ламаць блокі на вашай зямлі +command.description.land.allow.damage=Дазваляе членам клана наносіць і атрымліваць пашкоджання на вашай зямлі +command.description.land.block.all=Забараняе ўсе дзеянні на вашай зямлі +command.description.land.block.interact_entity=Забараняе членам клана ўзаемадзейнічаць з істотамі на вашай зямлі +command.description.land.block.interact=Забараняе членам клана узаемадзейнічаць з вашай зямлёй +command.description.land.block.container=Забараняе членам клана адкрываць сховішча на вашай зямлі +command.description.land.block.place=Забараняе членам клана ставіць блокі на вашай зямлі +command.description.land.block.break=Забараняе членам клана ламаць блокі на вашай зямлі +command.description.land.block.damage=Забараняе членам клана наносіць і атрымліваць пашкоджання на вашай зямлі +command.description.stats=Паказвае статыстыку членаў вашага клана +command.description.rivalries=Паказвае ўсіх ворагаў клана +command.description.kills=Паказвае колькасць вашых забойств, або іншага гульца +command.description.lookup=Паказвае інфармацыю аб вас +command.description.lookup.other=Паглядзець інфармацыю аб гульцу +command.description.leaderboard=Паказвае табліцу лідараў +command.description.roster.other=Паказвае спіс членаў клана +command.description.roster=Паказвае спіс членаў вашага клана +command.description.profile.other=Паказвае інфармацыю аб іншым клане +command.description.profile=Паказвае інфармацыю аб вашым клане +command.description.list=Паказвае спіс усіх кланаў +command.description.chat=Размаўляць у чаце клана +command.description.ally=Размаўляць у чаце саюзнікаў +command.description.deny=Адмаўляе запыт +command.description.accept=Прымае запыт +# suppress inspection "TrailingSpacesInProperty" +# suppress inspection "TrailingSpacesInProperty" +# suppress inspection "TrailingSpacesInProperty" +# suppress inspection "TrailingSpacesInProperty" +# suppress inspection "TrailingSpacesInProperty" +# suppress inspection "TrailingSpacesInProperty" +# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 41cbd9f63..3900f252e 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -14,6 +14,13 @@ list.type.kdr=kdr list.type.size=Größe list.type.founded=gegründet list.type.active=aktiv +land.command=Land +break.command=Abbauen +interact.command=interagieren +place_block.command=place_block +damage.command=Schaden +interact_entity.command=interact_entity +container.command=Behälter profile.command=Profil roster.command=Mitglieder lookup.command=suchen @@ -819,11 +826,4 @@ land.blocked.action=&bVerbotene Aktion\! you.do.not.own.lands=&cDu besitzt kein Land\! land.sharing.disabled=&cDas Teilen von Land ist deaktiviert\! war.expired=Der Krieg mit {0} ist abgelaufen\! -you.cant.start.war.online.members.difference=Du kannst den Krieg nicht starten. Ein Clan mehr aktive Mitglieder, als der andere. -land.command=Land -break.command=Abbauen -interact.command=interagieren -place_block.command=place_block -damage.command=Schaden -interact_entity.command=interact_entity -container.command=Behälter \ No newline at end of file +you.cant.start.war.online.members.difference=Du kannst den Krieg nicht starten. Ein Clan mehr aktive Mitglieder, als der andere. \ No newline at end of file diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 7894514e2..29e4d4c16 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -14,6 +14,13 @@ list.type.kdr=kdr list.type.size=tamaño list.type.founded=fundado list.type.active=activo +land.command=terreno +break.command=romper +interact.command=interactuar +place_block.command=colocar_bloque +damage.command=daño +interact_entity.command=interactuar_entidad +container.command=contenedor profile.command=profile roster.command=roster lookup.command=lookup @@ -819,11 +826,4 @@ land.blocked.action=&8(&cClan&8)&7 Acción bloqueada. you.do.not.own.lands=&8(&cClan&8)&7 No eres dueño de una tierra. land.sharing.disabled=&8(&cClan&8)&7 Compartir tierras está deshabilitado. war.expired=&8(&cClan&8)&7 La guerra con &c{0}&7 ha finalizado. -you.cant.start.war.online.members.difference=&8(&cClan&8)&7 No puedes empezar la guerra. Un clan tiene más miembros en línea que el otro. -land.command=terreno -break.command=romper -interact.command=interactuar -place_block.command=colocar_bloque -damage.command=daño -interact_entity.command=interactuar_entidad -container.command=contenedor \ No newline at end of file +you.cant.start.war.online.members.difference=&8(&cClan&8)&7 No puedes empezar la guerra. Un clan tiene más miembros en línea que el otro. \ No newline at end of file diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 1cc62b331..f790904f8 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -9,6 +9,10 @@ list.type.name=nome list.type.kdr=kdr list.type.founded=fondato list.type.active=attivo +land.command=terra +interact.command=interagire +damage.command=danno +container.command=contenitore profile.command=profilo roster.command=membri lookup.command=ricerca @@ -497,8 +501,4 @@ land.blocked.action=&bAzione bloccata\! you.do.not.own.lands=&cNon possiedi una terra\! land.sharing.disabled=&cCondivisione di terra è disattivata\! war.expired=La guerra con {0} è scaduta\! -you.cant.start.war.online.members.difference=Non puoi iniziare la guerra. Un clan ha più membri online dell'altro. -land.command=terra -interact.command=interagire -damage.command=danno -container.command=contenitore \ No newline at end of file +you.cant.start.war.online.members.difference=Non puoi iniziare la guerra. Un clan ha più membri online dell'altro. \ No newline at end of file diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index f2a14288c..5b3143bb7 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -14,6 +14,13 @@ list.type.kdr=kdr list.type.size=grootte list.type.founded=opgericht list.type.active=actief +land.command=land +break.command=break +interact.command=interact +place_block.command=place_block +damage.command=damage +interact_entity.command=interact_entity +container.command=container profile.command=profiel roster.command=rooster lookup.command=opzoeken @@ -819,11 +826,4 @@ land.blocked.action=&bGeblokkeerde actie\! you.do.not.own.lands=&cJe bezit geen land\! land.sharing.disabled=&cLand delen is uitgeschakeld\! war.expired=De oorlog met {0} is verlopen\! -you.cant.start.war.online.members.difference=Je kunt de oorlog niet starten. De ene clan heeft meer leden online dan de andere. -land.command=land -break.command=break -interact.command=interact -place_block.command=place_block -damage.command=damage -interact_entity.command=interact_entity -container.command=container \ No newline at end of file +you.cant.start.war.online.members.difference=Je kunt de oorlog niet starten. De ene clan heeft meer leden online dan de andere. \ No newline at end of file diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index a65b0c95c..26be0b5d3 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -14,6 +14,14 @@ list.type.kdr=k/d/r list.type.size=rozmiar list.type.founded=reputacja list.type.active=aktywne +land.command=ziemia +break.command=zniszcz +interact.command=interakcja +place_block.command=umieść_blok +damage.command=obrażenia +interact_entity.command=jednostka_interakcyjna +container.command=pojemnik +confirm.command=potwierdź profile.command=profil roster.command=lista lookup.command=wyszukaj @@ -80,6 +88,9 @@ resetkdr.command=resetuj kdr everyone.command=wszyscy setbanner.command=ustaw baner help.command=pomoc +leave.command=opuść +join.command=dołącz +mute.command=wycisz acf-core.parameter.member=Członek acf-core.parameter.rank=Ranga acf-core.parameter.leader=Przywódca @@ -190,6 +201,7 @@ command.description.admin.promote=Promuj dowolnego członka z klanu command.description.promote=Awansuje członka do lidera command.description.admin.permanent=Przełącza stały status klanu command.description.toggle.bb=Ustala czy tablica bulletin powinna być wyświetlana podczas logowania +command.description.toggle.invite=Przełącza, czy gracze mogą wysyłać Ci zaproszenia do klanu command.description.toggle.tag=Ustala czy tag klanu ma być wyświetlany obok Twojego imienia command.description.toggle.deposit=Przełącza, czy wpłaty są dozwolone na klanu command.description.toggle.withdraw=Przełącza, czy wpłaty są dozwolone na klanu @@ -354,6 +366,7 @@ clan.created=Clan {0} pomyslnie utworzony not.enough.leaders.online.to.vote.on.demotion=Brak wystarczającej liczby liderów online, aby głosować na ta degradacje demotion.vote.has.been.requested.from.all.leaders=Wszyscy przywodcy zostali poproszeni o glos w sprawie degradacji player.is.not.a.leader.of.your.clan=Ten gracz nie jest przywodca twojego klanu +player.is.not.a.leader=Gracz nie jest przywódcą clan.has.been.disbanded=Klan {0} zostal rozwiazany clan.disband.vote.has.been.requested.from.all.leaders=Wszyscy przywodcy zostali poproszeni o glos w sprawie rozwiazania klanu friendy.fire.is.now.managed.by.your.clan=Ustawienie Friendly fire zgodne z obecnym ustawieniem twojego klanu @@ -364,6 +377,7 @@ global.friendly.fire.is.set.to.allowed=Włączono globalny ogień przyjacielski global.friendly.fire.is.already.being.allowed=Globalny ogień przyjacielski jest już włączony the.player.doesn.t.not.have.the.permissions.to.join.clans=Gracz nie ma uprawnień do dołączenia do klanów you.cannot.invite.yourself=Nie możesz zaprosić samego siebie +you.did.not.answer.in.time=Nie odpowiedziałeś w czasie, anulowanie... this.player.is.banned.from.using.clan.commands=Ten gracz ma zablokowany dostęp do komend klanowych the.player.is.already.member.of.another.clan=Ten gracz jest już członkiem innego klanu has.been.asked.to.join={0} został zapytany o dołączenie do {1} @@ -455,6 +469,8 @@ iron=żelazo the.clan.cannot.be.rivaled=Klan nie moze byc rywalizowal bboff=BB wyłączony bbon=BB włączony +inviteon=Zaproszenie włączone +inviteoff=Zaproszenie wyłączone tagoff=Tag wyłączony tagon=Tag włączony depositon=Depozyt włączony @@ -561,6 +577,7 @@ allowed=dozwolone blocked=zablokowane chat.joined=dołączył chat.not.joined=nie dołączył +chat.didnt.join=&bNie dołączyłeś do tego kanału gui.loading=&7Ładowanie... gui.back.title=&Wstecz gui.previous.page.title=&fPoprzednia strona @@ -769,6 +786,7 @@ gui.not.supported=&cWystąpił błąd podczas otwierania GUI\! Wyłączanie... C staff.member.verify.clan=&cAdmin musi zweryfikować Twój klan\! player.already.has.that.rank=&cGracz ma już taką rangę\! joined.clan.chat=&bDołączyłeś do klanowego czatu +already.joined.clan.chat=&bJuż dołączyłeś do czatu klanowego left.clan.chat=&bOpuściłeś czat klanowy muted.clan.chat=&bWyciszyłeś czat klanowy unmuted.clan.chat=&bWyciszyłeś czat klanowy @@ -776,6 +794,7 @@ joined.ally.chat=&bDołączyłeś do czatu sojusznika left.ally.chat=&bOpuściłeś czat sojusznika muted.ally.chat=&bWyciszyłeś czat klanowy unmuted.ally.chat=&bWłączyłeś czat klanowy +already.joined.ally.chat=&bJuż dołączyłeś do czatu sojuszniczego player.already.in.this.clan=&cGracz jest już w tym klanu your.clan.reached.max.alliances=&cTwój klan osiągnął maksymalną liczbę sojuszy other.clan.reached.max.alliances=&cTen klan osiągnął maksymalną liczbę sojuszy @@ -802,6 +821,8 @@ clans.not.at.war.pvp.denied=&cTwój klan nie jest w wojnie z {0}\! cannot.attack.civilians=&cNie możesz atakować cywilów\! cannot.attack.clan.member=&cNie możesz zaatakować innego członka klanu\! cannot.attack.ally=&cNie możesz zaatakować sojusznika\! +cannot.send.discord.message=Nie możesz wysyłać wiadomości do {0}. Nie jesteś członkiem tego klanu\! +you.did.not.link.your.account=Nie połączyłeś swojego konta\! # suppress inspection "TrailingSpacesInProperty" cannot.change.member.fee.now=&cNie możesz zmienić składki członkowskiej blisko czasu jej pobrania. cannot.change.member.fee.hours=&cSpróbuj ponownie za {0} godzin... @@ -818,12 +839,9 @@ land.allowed.action=&bAkcja dozwolona\! land.blocked.action=&bAkcja zablokowana\! you.do.not.own.lands=&cNie posiadasz ziemi\! land.sharing.disabled=&cDzielenie ziemi jest wyłączone\! +clan.chat.disabled=&cCzat klanowy jest wyłączony\! +ally.chat.disabled=&cCzat sojuszniczy jest wyłączony\! war.expired=Wojna z {0} wygasła\! you.cant.start.war.online.members.difference=Nie możesz rozpocząć wojny. Jeden klan ma więcej członków online niż drugi. -land.command=ziemia -break.command=zniszcz -interact.command=interakcja -place_block.command=umieść_blok -damage.command=obrażenia -interact_entity.command=jednostka_interakcyjna -container.command=pojemnik \ No newline at end of file +invitedplayer.invite.off=Ten gracz wyłączył zaproszenia do klanów +user.hasnt.played.before=&cTen użytkownik nie grał wcześniej \ No newline at end of file diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index b5acfd54d..f8b8e96e0 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -14,6 +14,14 @@ list.type.kdr=kdr list.type.size=tamanho list.type.founded=fundado list.type.active=ativo +land.command=terreno +break.command=quebrar +interact.command=interagir +place_block.command=colocar_bloco +damage.command=atacar +interact_entity.command=interagir_entidade +container.command=bau +confirm.command=confirmar profile.command=perfil roster.command=membros lookup.command=detalhes @@ -193,6 +201,7 @@ command.description.admin.promote=Promove qualquer membro de qualquer clã command.description.promote=Promove um membro para líder command.description.admin.permanent=Alterna o status permanente de qualquer clã command.description.toggle.bb=Alterna se o quadro de avisos deve ser exibido quando você entra no servidor +command.description.toggle.invite=Altera se os jogadores podem enviar convites de clã para você command.description.toggle.tag=Alterna se a tag do seu clã deve ser exibida ao lado do seu nome command.description.toggle.deposit=Alterna se os depósitos são permitidos em seu clã command.description.toggle.withdraw=Alterna se os saques são permitidos em seu clã @@ -460,6 +469,8 @@ iron=ferro the.clan.cannot.be.rivaled=O clã não pode ser rivalizado bboff=Quadro de avisos desativado bbon=Quadro de avisos ativado +inviteon=Convite ativado +inviteoff=Convite desativado tagoff=Tag desativada tagon=Tag ativada depositon=Depósitos ativados @@ -832,11 +843,5 @@ clan.chat.disabled=&cO chat do clã está desativado\! ally.chat.disabled=&cO chat dos aliados está desativado\! war.expired=A guerra com {0} expirou\! you.cant.start.war.online.members.difference=Você não pode começar a guerra. Um clã tem mais membros online do que o outro. -land.command=terreno -break.command=quebrar -interact.command=interagir -place_block.command=colocar_bloco -damage.command=atacar -interact_entity.command=interagir_entidade -container.command=bau +invitedplayer.invite.off=Este jogador desativou convites de clã user.hasnt.played.before=&cEsse usuário nunca jogou antes \ No newline at end of file diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index b1429a884..d9254ca04 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -14,6 +14,14 @@ list.type.kdr=kdr list.type.size=size list.type.founded=founded list.type.active=active +land.command=land +break.command=break +interact.command=interact +place_block.command=place_block +damage.command=damage +interact_entity.command=interact_entity +container.command=container +confirm.command=confirm profile.command=profile roster.command=roster lookup.command=lookup @@ -87,7 +95,7 @@ acf-core.parameter.member=участник acf-core.parameter.rank=ранг acf-core.parameter.leader=лидер acf-core.parameter.displayname=отображаемое имя -acf-core.parameter.permission=права +acf-core.parameter.permission=разрешение acf-core.parameter.message=сообщение acf-core.parameter.tag=тег acf-core.parameter.name=имя @@ -193,6 +201,7 @@ command.description.admin.promote=Повысить любого участник command.description.promote=Повысить участника до лидера command.description.admin.permanent=Переключить постоянный статус любого клана command.description.toggle.bb=Следует ли показывать доску объявлений при входе на сервер +command.description.toggle.invite=Переключает возможность получать приглашения в кланы command.description.toggle.tag=Показывать ли рядом с вашим именем тег клана command.description.toggle.deposit=Можно ли вносить средства в банковский счёт вашего клана command.description.toggle.withdraw=Можно ли выводить средства с банковского счёта вашего клана @@ -229,7 +238,7 @@ rival=Соперник civilian=Мирный neutral=Общие ally=Союзник -free.agent=без клана +free.agent=Без клана days=дней rivals=Соперники rivalries=соперничество @@ -460,6 +469,8 @@ iron=железо the.clan.cannot.be.rivaled=Клан не может быть соперником bboff=Доска объявлений выключена bbon=Доска объявлений включена +inviteon=Приглашения включены +inviteoff=Приглашения выключены tagoff=Тег клана выключен tagon=Тег клана включен depositon=Пополнение включено @@ -481,7 +492,7 @@ on=on off=off player.rank.changed=Ранг был установлен your.clans.are.already.rivals=Ваши кланы уже являются соперниками -player.got.money=Вы получили {0} за убийство {1} , основанном на вашем KDR\: {2} +player.got.money=Вы получили {0} за убийство {1}, основанном на вашем KDR\: {2} cleared.bb=Доска объявлений очищена clan.balance=Баланс Клана\: {0} clan.admin.balance=Баланс {0}\: {1} $ @@ -537,7 +548,7 @@ your.clan.description.must.be.longer.than=Описание вашего клан your.clan.description.cannot.be.longer.than=Описание клана не может быть длиннее {0} символов description.changed=Вы успешно изменили описание клана no.description=Нет описания -the.player.must.wait.0.before.joining.your.clan.again=Этот игрок должен подождать {0} минут, прежде чем сможет вступить в ваш клан\! +the.player.must.wait.0.before.joining.your.clan.again=Этот игрок должен подождать {0} минут(ы), прежде чем сможет вступить в ваш клан disabled.command=Команда отключена rank.displayname.updated=Отображаемое имя ранга обновлено\! rank.setdefault=Ранг клана по умолчанию теперь установлен на {0} @@ -832,10 +843,5 @@ clan.chat.disabled=&cЧат клана отключен\! ally.chat.disabled=&cСоюзный чат отключен\! war.expired=Война с {0} истекла\! you.cant.start.war.online.members.difference=Вы не можете начать войну. Один из кланов имеет больше участников в сети, чем у другого. -land.command=land -break.command=break -interact.command=interact -place_block.command=place_block -damage.command=damage -interact_entity.command=interact_entity -container.command=container \ No newline at end of file +invitedplayer.invite.off=Данный игрок отключил приглашения кланов +user.hasnt.played.before=&cЭтот игрок не играл ранее \ No newline at end of file diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index 3e830f944..f7fc2ea43 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -14,6 +14,13 @@ list.type.kdr=kd list.type.size=boyut list.type.founded=kuruldu list.type.active=etkin +land.command=arazi +break.command=kırma +interact.command=etkileşim +place_block.command=blok_koyma +damage.command=hasar +interact_entity.command=varlık_etkileşimi +container.command=sandıklar profile.command=profil roster.command=klanbilgi lookup.command=oyuncubilgi @@ -819,11 +826,4 @@ land.blocked.action=&bEngellenen eylem\! you.do.not.own.lands=&cAraziniz yok\! land.sharing.disabled=&cArazi paylaşımı devre dışı bırakıldı\! war.expired={0} ile olan savaşın süresi doldu\! -you.cant.start.war.online.members.difference=Savaş başlatamazsınız. Bir klanın diğerinden daha fazla çevrimiçi üyesi var. -land.command=arazi -break.command=kırma -interact.command=etkileşim -place_block.command=blok_koyma -damage.command=hasar -interact_entity.command=varlık_etkileşimi -container.command=sandıklar \ No newline at end of file +you.cant.start.war.online.members.difference=Savaş başlatamazsınız. Bir klanın diğerinden daha fazla çevrimiçi üyesi var. \ No newline at end of file diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index cc8f84a8c..5d988aee8 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -43,6 +43,7 @@ withdraw.command=зняти invite.command=запрошення kick.command=виключення bank.command=банк +give.command=дати status.command=статус fee.command=комісія set.command=set From c25bd8206c13898fa2cbebd8e336b4e0e88745f6 Mon Sep 17 00:00:00 2001 From: Thiago Gebrim <75040244+thiagogebrimm@users.noreply.github.com> Date: Thu, 9 Sep 2021 19:59:10 -0300 Subject: [PATCH 27/30] =?UTF-8?q?=20Adi=C3=A7=C3=A3o=20do=20R=20antes=20do?= =?UTF-8?q?=20$=20para=20ficar:=20"R$"=20(#250)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adição do R antes do $ para ficar: "R$", pois PT-BR fica mais certo, e tradução de algumas mensagens. * Changed currency symbol position Co-authored-by: Edson Passos --- src/main/resources/messages_pt_BR.properties | 51 ++++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index f8b8e96e0..40b738af8 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -469,8 +469,8 @@ iron=ferro the.clan.cannot.be.rivaled=O clã não pode ser rivalizado bboff=Quadro de avisos desativado bbon=Quadro de avisos ativado -inviteon=Convite ativado -inviteoff=Convite desativado +inviteon=Convites de clã ativados +inviteoff=Convites de clã desativados tagoff=Tag desativada tagon=Tag ativada depositon=Depósitos ativados @@ -495,19 +495,19 @@ your.clans.are.already.rivals=Seus clãs já são rivais player.got.money=Você ganhou {0} por matar {1} baseado no seu KDR\: {2} cleared.bb=Você limpou o quadro de avisos clan.balance=Saldo do clã\: {0} -clan.admin.balance=Saldo de {0}\: {1} $ +clan.admin.balance=Saldo de {0}\: R$ {1} bb.fee.player.kicked={0} foi expulso por não pagar a taxa -bb.fee.set=A taxa é {0} $ -bb.clan.deposit={0} $ foram depositados -player.clan.deposit=Você depositou {0} -bb.clan.withdraw={0} $ foram sacados -bb.clan.take={0} $ foram tirados -bb.clan.give={0} $ foram dados -bb.clan.set={0} $ foram definidos -player.clan.withdraw=Você sacou {0} -clan.admin.take=Você tirou {0} $ do banco de {1} -clan.admin.give=Você deu {0} $ para o banco de {1} -clan.admin.set=Você definiu o saldo do banco de {0} para {1} +bb.fee.set=A taxa é R$ {0} +bb.clan.deposit=R$ {0} foram depositados +player.clan.deposit=Você depositou R$ {0} +bb.clan.withdraw=R$ {0} foram sacados +bb.clan.take=R$ {0} foram tirados +bb.clan.give=R$ {0} foram dados +bb.clan.set=R$ {0} foram definidos +player.clan.withdraw=Você sacou R$ {0} +clan.admin.take=Você tirou R$ {0} do banco de {1} +clan.admin.give=Você deu R$ {0} para o banco de {1} +clan.admin.set=Você definiu o saldo do banco de {0} para R$ {1} clan.admin.bank.not.enough.money=O banco de {0} não tem saldo suficiente\! clan.bank.not.enough.money=O banco do seu clã não tem saldo suficiente your.clans.are.not.rivals=Seus clãs não são rivais @@ -535,15 +535,15 @@ bb.hours= \ horas bb.one.hour=1 hora bb.days= dias bb.one.day=1 dia -the.fee.is.0.and.its.current.value.is.1=A taxa está {0} e seu valor atual é {1} $ +the.fee.is.0.and.its.current.value.is.1=A taxa está {0} e seu valor atual é R$ {1} fee.enabled=ativada fee.disabled=desativada fee.set=A taxa foi definida com sucesso max.fee.allowed.is.0=A taxa máxima permitida é {0} -fee.collected={0} $ foram sacados para a taxa do clã +fee.collected=R$ {0} foram sacados para a taxa do clã player.purged=Os dados do jogador foram apagados com sucesso -upkeep.collected={0} $ foram sacados para a taxa de manutenção -balance.is.not.enough.for.upkeep=O saldo do clã não é suficiente para pagar a taxa de manutenção ({0} $), deposite a quantidade para evitar que seu clã seja debandado +upkeep.collected=R$ {0} foram sacados para a taxa de manutenção +balance.is.not.enough.for.upkeep=O saldo do clã não é suficiente para pagar a taxa de manutenção (R$ {0}), deposite a quantidade para evitar que seu clã seja debandado your.clan.description.must.be.longer.than=A descrição do seu clã deve ser mais longa que {0} caracteres your.clan.description.cannot.be.longer.than=A descrição do seu clã não pode ser mais longa que {0} caracteres description.changed=Você mudou com sucesso a descrição do seu clã @@ -675,7 +675,7 @@ gui.clandetails.clan.lore.online.members=&7Membros Online\: &b{0}/{1} gui.clandetails.clan.lore.kdr=&7KDR\: &b{0} gui.clandetails.clan.lore.kill.totals=&7Matou\: &b[Rival\:{0} Neutro\:{1} Civil\:{2}] gui.clandetails.clan.lore.deaths=&7Morreu\: &b{0} -gui.clandetails.clan.lore.fee=&7Taxa\: &b{0}, {1} $ +gui.clandetails.clan.lore.fee=&7Taxa\: &b{0}, R$ {1} # suppress inspection "TrailingSpacesInProperty" gui.clandetails.clan.lore.allies.separator=&b, # suppress inspection "TrailingSpacesInProperty" @@ -807,7 +807,7 @@ you.must.hold.a.banner=&cVocê precisa ter um estandarte em sua mão\! you.changed.clan.banner=&bVocê mudou o estandarte do seu clã\! your.clan.already.verified=&cSeu clã já está verificado\! # suppress inspection "TrailingSpacesInProperty" -clan.profile=\n&b%clan_name%&7 perfil &8-------------------------------------------\n \n &7Nome\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Descrição\: &f%clan_description%\n &7Status\: &f%clan_status%\n &7Líderes\: %clan_leaders%\n &7Membros Online\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Eliminações\: &8[Rival\:&f%clan_rival_kills% &8Aliado\:&f%clan_ally_kills% &8Neutro\:&f%clan_neutral_kills% &8Civil\:&f%clan_civilian_kills%&8]\n &7Mortes\: &f%clan_deaths%\n &7Taxa\: &f%clan_fee_enabled%&7, &f%clan_fee_value% $\n &7Aliados\: &f%clan_allies%\n &7Rivais\: &f%clan_rivals%\n &7Fundado\: &f%clan_founded%\n &7Inativo\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% dias\n +clan.profile=\n&b%clan_name%&7 perfil &8-------------------------------------------\n \n &7Nome\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Descrição\: &f%clan_description%\n &7Status\: &f%clan_status%\n &7Líderes\: %clan_leaders%\n &7Membros Online\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Eliminações\: &8[Rival\:&f%clan_rival_kills% &8Aliado\:&f%clan_ally_kills% &8Neutro\:&f%clan_neutral_kills% &8Civil\:&f%clan_civilian_kills%&8]\n &7Mortes\: &f%clan_deaths%\n &7Taxa\: &f%clan_fee_enabled%&7, &f%clan_fee_value% R$\n &7Aliados\: &f%clan_allies%\n &7Rivais\: &f%clan_rivals%\n &7Fundado\: &f%clan_founded%\n &7Inativo\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% dias\n player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name% # suppress inspection "TrailingSpacesInProperty" player.lookup.killtype=&7Tipo de Morte\: %player_kill_type%\n @@ -843,5 +843,14 @@ clan.chat.disabled=&cO chat do clã está desativado\! ally.chat.disabled=&cO chat dos aliados está desativado\! war.expired=A guerra com {0} expirou\! you.cant.start.war.online.members.difference=Você não pode começar a guerra. Um clã tem mais membros online do que o outro. +land.command=terreno +break.command=quebrar +interact.command=interagir +place_block.command=colocar_bloco +damage.command=atacar +interact_entity.command=interagir_entidade +container.command=bau +user.hasnt.played.before=&cEsse usuário nunca jogou antes invitedplayer.invite.off=Este jogador desativou convites de clã -user.hasnt.played.before=&cEsse usuário nunca jogou antes \ No newline at end of file +clan.list.balance.header=\n{0} &7clans top saldo &8-----------------------\n \n&8Total de clans: &7{1}\n \n&8#&7. &8Clan &7- &8Saldo +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &eR$ {5} From 08aae94637c403eee2317c7b32f658fd9aebf61a Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Sun, 12 Sep 2021 10:27:18 -0300 Subject: [PATCH 28/30] Changes tasks to be sync --- .../simpleclans/tasks/CollectFeeTask.java | 37 +++++++------------ .../simpleclans/tasks/CollectUpkeepTask.java | 2 +- .../simpleclans/tasks/UpkeepWarningTask.java | 2 +- 3 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java index f63c81fcf..254edb7cd 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectFeeTask.java @@ -1,17 +1,15 @@ package net.sacredlabyrinth.phaed.simpleclans.tasks; import net.sacredlabyrinth.phaed.simpleclans.*; -import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent; import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.scheduler.BukkitRunnable; -import java.text.MessageFormat; - import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang; +import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.Cause; import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TASKS_COLLECT_FEE_HOUR; import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TASKS_COLLECT_FEE_MINUTE; +import static org.bukkit.ChatColor.AQUA; /** * @@ -34,7 +32,7 @@ public void start() { int minute = sm.getInt(TASKS_COLLECT_FEE_MINUTE); long delay = Helper.getDelayTo(hour, minute); - this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20); + this.runTaskTimer(plugin, delay * 20, 86400 * 20); } /** @@ -47,24 +45,17 @@ public void run() { if (clan.isMemberFeeEnabled() && memberFee > 0) { for (ClanPlayer cp : clan.getFeePayers()) { - - final boolean success = plugin.getPermissionsManager() - .playerChargeMoney(Bukkit.getOfflinePlayer(cp.getUniqueId()), memberFee); - new BukkitRunnable() { - @Override - public void run() { - if (success) { - ChatBlock.sendMessage(cp.toPlayer(), ChatColor.AQUA + - MessageFormat.format(lang("fee.collected",cp.toPlayer()), memberFee)); - clan.deposit(cp.toPlayer(), ClanBalanceUpdateEvent.Cause.MEMBER_FEE, memberFee); - plugin.getStorageManager().updateClan(clan); - } else { - clan.removePlayerFromClan(cp.getUniqueId()); - clan.addBb(ChatColor.AQUA + - MessageFormat.format(lang("bb.fee.player.kicked"), cp.getName())); - } - } - }.runTask(plugin); + boolean success = plugin.getPermissionsManager() + .playerChargeMoney(Bukkit.getOfflinePlayer(cp.getUniqueId()), memberFee); + if (success) { + ChatBlock.sendMessage(cp.toPlayer(), AQUA + lang("fee.collected", cp, memberFee)); + clan.deposit(cp.toPlayer(), Cause.MEMBER_FEE, memberFee); + plugin.getStorageManager().updateClan(clan); + } else { + clan.removePlayerFromClan(cp.getUniqueId()); + clan.addBb(AQUA + lang("bb.fee.player.kicked", cp.getName())); + } + } } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java index 982b85037..d2d91448c 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/CollectUpkeepTask.java @@ -34,7 +34,7 @@ public void start() { int minute = settingsManager.getInt(TASKS_COLLECT_UPKEEP_MINUTE); long delay = Helper.getDelayTo(hour, minute); - this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20); + this.runTaskTimer(plugin, delay * 20, 86400 * 20); } /** diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java index 82758b203..d0f453a39 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/tasks/UpkeepWarningTask.java @@ -32,7 +32,7 @@ public void start() { int minute = sm.getInt(TASKS_COLLECT_UPKEEP_WARNING_MINUTE); long delay = Helper.getDelayTo(hour, minute); - this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20); + this.runTaskTimer(plugin, delay * 20, 86400 * 20); } /** From 33ea872e4d6ef9f657732f5d7541b520b7375694 Mon Sep 17 00:00:00 2001 From: RoinujNosde Date: Mon, 13 Sep 2021 20:10:38 -0300 Subject: [PATCH 29/30] Bump version --- SimpleClans.iml | 7 +++---- dependency-reduced-pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/SimpleClans.iml b/SimpleClans.iml index 3e0a9569a..6a19f8336 100644 --- a/SimpleClans.iml +++ b/SimpleClans.iml @@ -135,12 +135,11 @@ - - - + + - + \ No newline at end of file diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 48fd014df..7414b013d 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ net.sacredlabyrinth.phaed.simpleclans SimpleClans SimpleClans - 2.15.2 + 2.16.0 https://www.spigotmc.org/resources/simpleclans.71242/ diff --git a/pom.xml b/pom.xml index 46d68b860..0cf178047 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.sacredlabyrinth.phaed.simpleclans SimpleClans - 2.15.2 + 2.16.0 SimpleClans https://www.spigotmc.org/resources/simpleclans.71242/ From 3bae27db2d1af71a0f6569f2fce56420a7b92f6c Mon Sep 17 00:00:00 2001 From: Edson Passos Date: Mon, 13 Sep 2021 20:11:38 -0300 Subject: [PATCH 30/30] New Crowdin updates (#252) --- src/main/resources/messages_pl_PL.properties | 5 +- src/main/resources/messages_pt_BR.properties | 21 ++-- src/main/resources/messages_ru_RU.properties | 6 +- src/main/resources/messages_tr_TR.properties | 26 ++++- src/main/resources/messages_zh_CN.properties | 104 ++++++++++++++++++- 5 files changed, 143 insertions(+), 19 deletions(-) diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 26be0b5d3..eb072fdfd 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -7,6 +7,7 @@ setdefault.command=setdefault removedefault.command=removedefault permissions.command=uprawnienia list.command=lista +balance.command=saldo list.order.asc=asc list.order.desc=opis list.type.name=nazwa @@ -133,6 +134,7 @@ command.description.profile.other=Pokazuje profil innego klanu command.description.profile=Pokazuje profil klanu command.description.vitals=Pokazuje życia klanu i sojuszników command.description.list=Lista wszystkich klanów +command.description.list.balance=Pokazuje najbogatsze klany command.description.chat=Rozmawiaj na chacie sojuszu command.description.ally=Rozmawiaj na chacie sojuszu command.description.deny=Odrzuć zapytanie @@ -844,4 +846,5 @@ ally.chat.disabled=&cCzat sojuszniczy jest wyłączony\! war.expired=Wojna z {0} wygasła\! you.cant.start.war.online.members.difference=Nie możesz rozpocząć wojny. Jeden klan ma więcej członków online niż drugi. invitedplayer.invite.off=Ten gracz wyłączył zaproszenia do klanów -user.hasnt.played.before=&cTen użytkownik nie grał wcześniej \ No newline at end of file +user.hasnt.played.before=&cTen użytkownik nie grał wcześniej +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$ \ No newline at end of file diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 40b738af8..dcef50dc2 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -7,6 +7,7 @@ setdefault.command=definirpadrao removedefault.command=removerpadrao permissions.command=permissoes list.command=listar +balance.command=saldo list.order.asc=asc list.order.desc=desc list.type.name=nome @@ -133,6 +134,7 @@ command.description.profile.other=Mostra o perfil de outro clã command.description.profile=Mostra o perfil do seu clã command.description.vitals=Mostra os sinais vitais do seu clã e de aliados command.description.list=Lista todos os clãs +command.description.list.balance=Mostra os clãs mais ricos command.description.chat=Fala no chat do clã command.description.ally=Fala no chat dos aliados command.description.deny=Nega um pedido @@ -469,8 +471,8 @@ iron=ferro the.clan.cannot.be.rivaled=O clã não pode ser rivalizado bboff=Quadro de avisos desativado bbon=Quadro de avisos ativado -inviteon=Convites de clã ativados -inviteoff=Convites de clã desativados +inviteon=Convite ativado +inviteoff=Convite desativado tagoff=Tag desativada tagon=Tag ativada depositon=Depósitos ativados @@ -807,7 +809,7 @@ you.must.hold.a.banner=&cVocê precisa ter um estandarte em sua mão\! you.changed.clan.banner=&bVocê mudou o estandarte do seu clã\! your.clan.already.verified=&cSeu clã já está verificado\! # suppress inspection "TrailingSpacesInProperty" -clan.profile=\n&b%clan_name%&7 perfil &8-------------------------------------------\n \n &7Nome\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Descrição\: &f%clan_description%\n &7Status\: &f%clan_status%\n &7Líderes\: %clan_leaders%\n &7Membros Online\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Eliminações\: &8[Rival\:&f%clan_rival_kills% &8Aliado\:&f%clan_ally_kills% &8Neutro\:&f%clan_neutral_kills% &8Civil\:&f%clan_civilian_kills%&8]\n &7Mortes\: &f%clan_deaths%\n &7Taxa\: &f%clan_fee_enabled%&7, &f%clan_fee_value% R$\n &7Aliados\: &f%clan_allies%\n &7Rivais\: &f%clan_rivals%\n &7Fundado\: &f%clan_founded%\n &7Inativo\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% dias\n +clan.profile=\n&b%clan_name%&7 perfil &8-------------------------------------------\n \n &7Nome\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Descrição\: &f%clan_description%\n &7Status\: &f%clan_status%\n &7Líderes\: %clan_leaders%\n &7Membros Online\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Eliminações\: &8[Rival\:&f%clan_rival_kills% &8Aliado\:&f%clan_ally_kills% &8Neutro\:&f%clan_neutral_kills% &8Civil\:&f%clan_civilian_kills%&8]\n &7Mortes\: &f%clan_deaths%\n &7Taxa\: &f%clan_fee_enabled%&7, &fR$ %clan_fee_value%\n &7Aliados\: &f%clan_allies%\n &7Rivais\: &f%clan_rivals%\n &7Fundado\: &f%clan_founded%\n &7Inativo\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% dias\n player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name% # suppress inspection "TrailingSpacesInProperty" player.lookup.killtype=&7Tipo de Morte\: %player_kill_type%\n @@ -843,14 +845,7 @@ clan.chat.disabled=&cO chat do clã está desativado\! ally.chat.disabled=&cO chat dos aliados está desativado\! war.expired=A guerra com {0} expirou\! you.cant.start.war.online.members.difference=Você não pode começar a guerra. Um clã tem mais membros online do que o outro. -land.command=terreno -break.command=quebrar -interact.command=interagir -place_block.command=colocar_bloco -damage.command=atacar -interact_entity.command=interagir_entidade -container.command=bau -user.hasnt.played.before=&cEsse usuário nunca jogou antes invitedplayer.invite.off=Este jogador desativou convites de clã -clan.list.balance.header=\n{0} &7clans top saldo &8-----------------------\n \n&8Total de clans: &7{1}\n \n&8#&7. &8Clan &7- &8Saldo -clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &eR$ {5} +user.hasnt.played.before=&cEsse usuário nunca jogou antes +clan.list.balance.header=\n{0} &7clans top saldo &8-----------------------\n \n&8Total de clans\: &7{1}\n \n&8\#&7. &8Clan &7- &8Saldo +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &eR$ {5} \ No newline at end of file diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index d9254ca04..8f1bd0c0b 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -7,6 +7,7 @@ setdefault.command=setdefault removedefault.command=removedefault permissions.command=permissions list.command=list +balance.command=balance list.order.asc=asc list.order.desc=desc list.type.name=name @@ -133,6 +134,7 @@ command.description.profile.other=Показать информацию о пр command.description.profile=Показать информацию о профиле вашего клана command.description.vitals=Показать боеспособность вашего и союзных кланов command.description.list=Список всех кланов +command.description.list.balance=Показать самые богатые кланы command.description.chat=Переговоры в клановом чате command.description.ally=Переговоры в союзном чате command.description.deny=Отклонить запрос @@ -844,4 +846,6 @@ ally.chat.disabled=&cСоюзный чат отключен\! war.expired=Война с {0} истекла\! you.cant.start.war.online.members.difference=Вы не можете начать войну. Один из кланов имеет больше участников в сети, чем у другого. invitedplayer.invite.off=Данный игрок отключил приглашения кланов -user.hasnt.played.before=&cЭтот игрок не играл ранее \ No newline at end of file +user.hasnt.played.before=&cЭтот игрок не играл ранее +clan.list.balance.header=\n{0} &7топ по балансу &8-----------------------\n \n&8Всего кланов\: &7{1}\n \n&8\#7. &8Клан &7- &8Баланс +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$ \ No newline at end of file diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index f7fc2ea43..5f0f234ef 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -1,4 +1,4 @@ -description.command=açıklama +description.command=Açıklama create.command=oluştur delete.command=sil rank.command=rütbe @@ -7,6 +7,7 @@ setdefault.command=varsayılanayarla removedefault.command=varsayılanıkaldır permissions.command=izinler list.command=liste +balance.command=bakiye list.order.asc=artan list.order.desc=azalan list.type.name=isim @@ -21,6 +22,7 @@ place_block.command=blok_koyma damage.command=hasar interact_entity.command=varlık_etkileşimi container.command=sandıklar +confirm.command=Onayla profile.command=profil roster.command=klanbilgi lookup.command=oyuncubilgi @@ -87,6 +89,9 @@ resetkdr.command=kdrsıfırla everyone.command=herkes setbanner.command=sancakayarla help.command=yardım +leave.command=ayrıl +join.command=katıl +mute.command=sustur acf-core.parameter.member=üye acf-core.parameter.rank=rütbe acf-core.parameter.leader=Lider @@ -129,6 +134,7 @@ command.description.profile.other=Başka bir klanın profilini gösterir command.description.profile=Klanınızın profilini gösterir command.description.vitals=Klanınızın ve müttefiklerinizin durumlarını gösterir command.description.list=Tüm klanları listeler +command.description.list.balance=En zengin klanlar listesi command.description.chat=Klan sohbetindeki konuşmalar command.description.ally=Müttefik sohbetinde konuşmalar command.description.deny=Bir isteği reddeder @@ -197,6 +203,7 @@ command.description.admin.promote=Herhangi bir klandan herhangi bir üyeyi yüks command.description.promote=Üyeyi liderliğe yükseltir command.description.admin.permanent=Herhangi bir klanın durumunu kalıcı değiştirir command.description.toggle.bb=Oturum açtığınızda ilan tahtasının görüntülenip görüntülenmeyeceğini değiştirir +command.description.toggle.invite=Oyuncuların klan daveti gönderebilmesi command.description.toggle.tag=Klanınızın etiketinin adınızın yanında görüntülenip görüntülenmeyeceğini değiştirir command.description.toggle.deposit=Klanınızda para yatırmaya izin verilip verilmediğini değiştirir command.description.toggle.withdraw=Klanınızda para çekme işlemlerine izin verilip verilmediğini değiştirir @@ -361,6 +368,7 @@ clan.created={0} klanı oluşturuldu not.enough.leaders.online.to.vote.on.demotion=Bu indirgemeye oy vermek için çevrimiçi yeterli lider yok demotion.vote.has.been.requested.from.all.leaders=Tüm liderlerden indirgeme oyu talep edildi player.is.not.a.leader.of.your.clan=Oyuncu klanınızın lideri değil +player.is.not.a.leader=Oyuncu lider değil clan.has.been.disbanded={0} klanı dağıtıldı clan.disband.vote.has.been.requested.from.all.leaders=Tüm liderlerden klanın dağılması oyu talep edildi friendy.fire.is.now.managed.by.your.clan=Dostluk ateşi artık klanınız tarafından yönetiliyor @@ -371,6 +379,7 @@ global.friendly.fire.is.set.to.allowed=Genel dost ateşine izin verildi global.friendly.fire.is.already.being.allowed=Genel dost ateşine zaten izin veriliyor the.player.doesn.t.not.have.the.permissions.to.join.clans=Oyuncunun klanlara katılma izni yok you.cannot.invite.yourself=Kendini davet edemezsin +you.did.not.answer.in.time=Zamanında cevap vermediniz, iptal ediliyor... this.player.is.banned.from.using.clan.commands=Bu oyuncunun klan komutlarını kullanması yasaklandı the.player.is.already.member.of.another.clan=Oyuncu zaten başka bir klanın üyesi has.been.asked.to.join={0} oyuncusundan {1} klanına katılması istendi @@ -462,6 +471,8 @@ iron=demir the.clan.cannot.be.rivaled=Bu klan rakip olamaz. bboff=BB kapatıldı bbon=BB açıldı +inviteon=Klan daveti açıldı +inviteoff=Klan daveti kapatıldı tagoff=Etiket kapatıldı tagon=Etiket açıldı depositon=Para yatırma açıldı @@ -568,6 +579,7 @@ allowed=izin verildi blocked=engellendi chat.joined=katıldı chat.not.joined=katılmadı +chat.didnt.join=&bBu kanala katılmadın gui.loading=&7Yükleniyor... gui.back.title=&fGeri gui.previous.page.title=&fÖnceki Sayfa @@ -776,6 +788,7 @@ gui.not.supported=&cArayüz açılırken bir hata oluştu\! Devre dışı bırak staff.member.verify.clan=&cBir yetkili klanınızı doğrulamalıdır\! player.already.has.that.rank=&cOyuncu zaten bu rütbeye sahip\! joined.clan.chat=&bKlan sohbetine katıldınız +already.joined.clan.chat=&bKlan sohbetine zaten katıldınız left.clan.chat=&bKlan sohbetinden ayrıldınız muted.clan.chat=&bKlan sohbetini kapattınız unmuted.clan.chat=&bKlan sohbetini açtınız @@ -783,6 +796,7 @@ joined.ally.chat=&bMüttefik sohbetine katıldın left.ally.chat=&bMüttefik sohbetinden ayrıldın muted.ally.chat=&bMüttefik sohbetinin kapattınız unmuted.ally.chat=&bMüttefik sohbetinin açtınız +already.joined.ally.chat=&bMüttefik sohbetine zaten katıldınız player.already.in.this.clan=&cOyuncu zaten bu klanda your.clan.reached.max.alliances=&cKlanınız maksimum müttefik sayısına ulaştı other.clan.reached.max.alliances=&cDiğer klan maksimum müttefik sayısına ulaştı @@ -809,6 +823,8 @@ clans.not.at.war.pvp.denied=&cKlanınız {0} ile savaşta değil\! cannot.attack.civilians=&cSivillere saldıramazsın\! cannot.attack.clan.member=&cKlan üyelerine saldıramazsın\! cannot.attack.ally=&cBir müttefiğe saldıramazsın\! +cannot.send.discord.message={0} adlı kişiye mesaj gönderemezsiniz. Sen o klanın üyesi değilsin\! +you.did.not.link.your.account=Hesabınızı bağlamadınız\! # suppress inspection "TrailingSpacesInProperty" cannot.change.member.fee.now=&cVergi ücretini tahsilat saatine yakın bir zamanda değiştiremezsiniz. cannot.change.member.fee.hours=&c{0} saat sonra tekrar deneyin... @@ -825,5 +841,11 @@ land.allowed.action=&bİzin verilen eylem\! land.blocked.action=&bEngellenen eylem\! you.do.not.own.lands=&cAraziniz yok\! land.sharing.disabled=&cArazi paylaşımı devre dışı bırakıldı\! +clan.chat.disabled=&cKlan sohbeti kapatıldı\! +ally.chat.disabled=&cMüttefik sohbeti kapatıldı\! war.expired={0} ile olan savaşın süresi doldu\! -you.cant.start.war.online.members.difference=Savaş başlatamazsınız. Bir klanın diğerinden daha fazla çevrimiçi üyesi var. \ No newline at end of file +you.cant.start.war.online.members.difference=Savaş başlatamazsınız. Bir klanın diğerinden daha fazla çevrimiçi üyesi var. +invitedplayer.invite.off=Bu oyuncu klan davetlerini devre dışı bıraktı +user.hasnt.played.before=&cBu kullanıcı daha önce oynamadı +clan.list.balance.header=\n{0}&7Toplam bakiye &8-----------------------\n \n&8Toplam klan sayısı\: &7{1}\n\n&8\#&7. &8Klan &7- &8Bakiye +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}₺ \ No newline at end of file diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 40e1c14ce..958258020 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -7,6 +7,7 @@ setdefault.command=设置默认属性 removedefault.command=移除默认属性 permissions.command=权限 list.command=列表 +balance.command=余额 list.order.asc=升序 list.order.desc=降序 list.type.name=名称 @@ -14,6 +15,14 @@ list.type.kdr=kd比 list.type.size=大小 list.type.founded=组建时间 list.type.active=启用 +land.command=地点 +break.command=破坏 +interact.command=交互 +place_block.command=方块放置 +damage.command=损害 +interact_entity.command=实体交互 +container.command=容器 +confirm.command=确认 profile.command=信息 roster.command=名单 lookup.command=详情 @@ -85,7 +94,7 @@ join.command=加入 mute.command=禁言 acf-core.parameter.member=成员 acf-core.parameter.rank=排名 -acf-core.parameter.leader=老大 +acf-core.parameter.leader=宗主 acf-core.parameter.displayname=展示名称 acf-core.parameter.permission=权限 acf-core.parameter.message=信息 @@ -125,6 +134,7 @@ command.description.profile.other=显示另一个部族的基本信息 command.description.profile=显示你的部族的基本信息 command.description.vitals=显示你的部族和盟友的关系 command.description.list=列出所有部族 +command.description.list.balance=显示最富有的宗派 command.description.chat=在部族频道聊天 command.description.ally=在盟友频道中聊天 command.description.deny=拒绝请求 @@ -193,6 +203,7 @@ command.description.admin.promote=从任意宗派提升一名成员 command.description.promote=将该成员提升为领袖 command.description.admin.permanent=切换任何宗派的永久地位 command.description.toggle.bb=切换登录显示公告板内容 +command.description.toggle.invite=切换玩家是否可向你发送加入宗派邀请 command.description.toggle.tag=切换在玩家名旁显示加入的宗派名称 command.description.toggle.deposit=切换宗派银行存款是否允许 command.description.toggle.withdraw=切换宗派银行提款是否允许 @@ -460,6 +471,8 @@ iron=铁 the.clan.cannot.be.rivaled=这个帮派不能敌对 bboff=公告板已关闭 bbon=公告板已开启 +inviteon=邀请已开启 +inviteoff=邀请已关闭 tagoff=标签已关闭 tagon=标签已开启 depositon=存款启用 @@ -734,18 +747,105 @@ gui.playerdetails.title={0} gui.playerdetails.player.title=&f{0} gui.playerdetails.player.lore.noclan=&7宗派\: &b无 gui.playerdetails.player.lore.clan=&7宗派\: &b[{0}&b] {1} +gui.playerdetails.player.lore.rank=&7等级\: &b{0} gui.playerdetails.player.lore.status=&7状态\: &b{0} gui.playerdetails.player.lore.kdr=&7KD 比\: &b{0} gui.playerdetails.player.lore.kill.totals=&7总击杀数\: &b[敌对\:{0} 中立\:{1} 友好\:{2}] gui.playerdetails.player.lore.deaths=&死亡次数\: {0} +gui.playerdetails.player.lore.join.date=&7加入日期\: &b{0} +gui.playerdetails.player.lore.last.seen=&7最后上线\: &b{0} # suppress inspection "TrailingSpacesInProperty" gui.playerdetails.player.lore.past.clans.separator=&b、 +gui.playerdetails.player.lore.past.clans=&7上一宗派\: &b{0} gui.playerdetails.player.lore.inactive=&7不活跃\: &b{0}/{1} 天 +gui.playerdetails.kick.title=&f踢出 +gui.playerdetails.promote.demote.title=&f升级/降级 +gui.playerdetails.promote.lore.left.click=&7左键点击升级 +gui.playerdetails.demote.lore.right.click=&7右键点击降级 +gui.playerdetails.assign.unassign.title=&f指定/取消指定宗派 +gui.playerdetails.assign.lore.left.click=&7左键点击指定 +gui.playerdetails.unassign.lore.right.click=&7右键点击取消指定 +gui.playerdetails.trust.untrust.title=&f信任/取消信任 +gui.playerdetails.trust.lore.left.click=&7左键点击信任 +gui.playerdetails.untrust.lore.right.click=&7右键点击取消信任 +gui.playerdetails.ban.unban.title=&f封禁/取消封禁 +gui.playerdetails.ban.left.click=&7左键点击把玩家从宗派中封禁 +gui.playerdetails.unban.right.click=&7右键点击解封玩家 +gui.playerdetails.resetkdr.lore=&7左键点击重置玩家的K/D比 +gui.playerdetails.purge.title=&f清除 gui.playerdetails.purge.lore=&7左键单击清除此玩家的数据 gui.playerdetails.place.title=&f安置 gui.playerdetails.place.lore=&7左键单击为此玩家选择宗派 +gui.languageselector.title=语言 - 当前: {0} gui.languageselector.language.title=&f{0} +gui.languageselector.language.lore.left.click=&7左键点击选择你的语言 +gui.languageselector.language.lore.translation.status=&7翻译状态: &b{0}% gui.languageselector.language.lore.right.click=&7右键点击以打开翻译界面 +gui.confirmation.title=确认 +gui.confirmation.confirm=&7点击这里确认 +gui.confirmation.return=&7点击返回 +gui.not.supported=&c打开GUI时发生错误!已禁用GUI!请检查你是否使用了正确的版本! +staff.member.verify.clan=&c宗派需要得到管理成员的验证! +player.already.has.that.rank=&c玩家已经有了这个等级! +joined.clan.chat=&b你已加入宗派聊天 +already.joined.clan.chat=&b你已经加入到宗派聊天 +left.clan.chat=&b你离开了宗派聊天 +muted.clan.chat=&b你已屏蔽宗派聊天 +unmuted.clan.chat=&b你已解除屏蔽宗派聊天 +joined.ally.chat=&b你已经加入了盟友聊天 +left.ally.chat=&b你已退出盟友聊天 +muted.ally.chat=&b你已屏蔽盟友聊天 +unmuted.ally.chat=&b你已解除屏蔽盟友聊天 +already.joined.ally.chat=&b你已经加入到盟友聊天 +player.already.in.this.clan=&c该玩家已经加入这个宗派 +your.clan.reached.max.alliances=&c你宗派的盟友数量已经达到最大 +other.clan.reached.max.alliances=&c另一个宗派的盟友数量已经达到最大 +insert.clan.tag=&b输入宗派标签 (或"{0}): +insert.clan.name=&b输入宗派名称: +insert.rank.name=&b输入等级名称 (或"{0}): +click.to.help.translating=&b点击此链接来帮助翻译:\n&r{0} +your.clan.must.have.members.to.verify=&c你的宗派必须至少有 {0} 个成员才能被验证! +you.must.hold.a.banner=&c你的手中必须有一个旗帜! +you.changed.clan.banner=&b你更改了你宗派的旗帜! +your.clan.already.verified=&这个宗派已被验证\! # suppress inspection "TrailingSpacesInProperty" +clan.profile=\n&b%clan_name%&7 信息&8--------------------------------------------------------------------\n \n &7名称\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7描述\: &f%clan_description%\n &7状态\: &f%clan_status%\n &7宗主\: %clan_leaders%\n &7在线成员\: &f%clan_online_count%&7/&f%clan_size%\n &7K/D比\: &e%clan_kdr%\n &7击杀总计\: &8[敌对\:&f%clan_rival_kills% &8盟友\:&f%clan_ally_kills% &8中立\:&f%clan_neutral_kills% &8无辜\:&f%clan_civilian_kills%&8]\n &7死亡\: &f%clan_deaths%\n &7费用\: &f%clan_fee_enabled%&7, &f%clan_fee_value% 金币\n &7盟友\: &f%clan_allies%\n &7敌对\: &f%clan_rivals%\n &7已建立\: &f%clan_founded%\n &7沉寂时间\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% 天\n +player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name% # suppress inspection "TrailingSpacesInProperty" -# suppress inspection "TrailingSpacesInProperty" \ No newline at end of file +player.lookup.killtype=&7击杀类型\: %player_kill_type%\n +player.lookup=\n&b%player_name%&7's 玩家信息 &8--------------------------------------------------------------------\n \n &7隶属宗派\: &f%clan_name%\n &7等级\: &f%player_rank%\n &7状态\: &f%player_status%\n &7K/D比\: &e%player_kdr%\n &7击杀总计\: &8[敌对\:&f%player_rival_kills% &8盟友\:&7%player_ally_kills% &8中立\:&f%player_neutral_kills% &8无辜\:&f%player_civilian_kills%&8]\n &7死亡\: &f%player_deaths%\n &7加入时间\: &f%player_join_date%\n &7上次在线\: &f%player_last_seen%\n &7上一宗派\: &f%player_past_clans%\n &7沉寂时间\: &f%player_inactive_days%&7/&f%player_max_inactive_days% 天\n %kill_type_line% +economy.disabled=&c经济已禁用! +has.been.purged={0} 的数据已被清除 +accepted.invitation=&b你已接受了 {0} 的邀请 +denied.invitation=&c你拒绝了 {0} 的邀请 +must.be.in.clan.to.pvp=&c你和 {0} 必须是宗派成员才能进行PVP! +clans.not.at.war.pvp.denied=&c你的宗派和 {0} 没有处于战争状态! +cannot.attack.civilians=&c你不能攻击无辜平民! +cannot.attack.clan.member=&c你不能攻击另一个宗派成员! +cannot.attack.ally=&c你不能攻击盟友! +cannot.send.discord.message=你不能向 {0} 发送消息,因为你不是那个宗派的成员! +you.did.not.link.your.account=你没有链接您的账户! +# suppress inspection "TrailingSpacesInProperty" +cannot.change.member.fee.now=&c临近收费时间,你不能更改会员费用 +cannot.change.member.fee.hours=&c在 {0} 小时后再试一次... +cannot.change.member.fee.minutes=&c在 {0} 分钟后再试一次... +cannot.kick.last.leader=&你不能踢出前任宗主\! +cannot.disband.permanent=&c你不能解散这个宗派,因为它是永久的。 +you.can.only.set.base.in.your.land=&c你只能在自己的地盘上设置家\! +only.leaders.can.create.lands=&c只有宗派的宗主可以创建地盘! +only.one.land.per.clan=&c你的宗派已经有了一块地盘! +only.clan.members.can.create.lands=&c只有宗派成员可以创建地盘! +land.allowed.all.actions=&b现在所有操作均被允许\! +land.blocked.all.actions=&b现在所有操作均被禁止\! +land.allowed.action=&b允许操作! +land.blocked.action=&b禁止操作! +you.do.not.own.lands=&c你没有地盘! +land.sharing.disabled=&c地盘分享已禁用! +clan.chat.disabled=&c宗派聊天已禁用! +ally.chat.disabled=&c盟友聊天已禁用! +war.expired=与 {0} 的战争已超时! +you.cant.start.war.online.members.difference=你不能开始战争,因为一个宗派的在线成员比另一个宗派多。 +invitedplayer.invite.off=此玩家已禁用宗派邀请 +user.hasnt.played.before=&c此用户不存在 +clan.list.balance.header=\n{0} &7金钱排行榜 &8--------------------------------\n \n&8总宗派: &7{1}\n \n&8\#&7. &8宗派 &7- &8金钱 +clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5} $ \ No newline at end of file