mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2024-12-28 12:47:36 +00:00
Cyclic Dependency Patch
- Fixed cyclic dependencies - Added a TFShoppe class for effective plugin initialization - Registered discord commands, did not before - Added SLF4J loggers for module logging.
This commit is contained in:
parent
b5804c7eb1
commit
3a96c853d2
@ -46,22 +46,6 @@
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>me.totalfreedom</groupId>
|
||||
<artifactId>discord</artifactId>
|
||||
<version>2023.02</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>me.totalfreedom</groupId>
|
||||
<artifactId>shop</artifactId>
|
||||
<version>2023.02</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.reflections</groupId>
|
||||
<artifactId>reflections</artifactId>
|
||||
|
@ -151,7 +151,7 @@ public class ChatManager extends FreedomService
|
||||
FLog.info("[ADMIN] " + sender.getName() + " " + display.getTag() + ": " + message, true);
|
||||
|
||||
if (plugin.dc != null) {
|
||||
plugin.dc.getUtils().messageAdminChatChannel(sender.getName() + " \u00BB " + message);
|
||||
plugin.dc.messageAdminChatChannel(sender.getName() + " \u00BB " + message);
|
||||
}
|
||||
|
||||
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)).forEach(player ->
|
||||
|
@ -4,9 +4,12 @@ import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
|
||||
import me.totalfreedom.discord.TFM_Accessor;
|
||||
import me.totalfreedom.totalfreedommod.admin.ActivityLog;
|
||||
import me.totalfreedom.totalfreedommod.admin.AdminList;
|
||||
import me.totalfreedom.totalfreedommod.api.Aggregator;
|
||||
import me.totalfreedom.totalfreedommod.api.ShoppeCommons;
|
||||
import me.totalfreedom.totalfreedommod.api.TFD4JCommons;
|
||||
import me.totalfreedom.totalfreedommod.api.VotifierCommons;
|
||||
import me.totalfreedom.totalfreedommod.banning.BanManager;
|
||||
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
||||
import me.totalfreedom.totalfreedommod.blocking.BlockBlocker;
|
||||
@ -74,8 +77,8 @@ public class TotalFreedomMod extends JavaPlugin
|
||||
public CommandLoader cl;
|
||||
// Services
|
||||
public WorldManager wm;
|
||||
public AdminList al;
|
||||
public ActivityLog acl;
|
||||
public AdminList al;
|
||||
public RankManager rm;
|
||||
public CommandBlocker cb;
|
||||
public EventBlocker eb;
|
||||
@ -87,12 +90,12 @@ public class TotalFreedomMod extends JavaPlugin
|
||||
public AntiNuke nu;
|
||||
public AntiSpam as;
|
||||
public PlayerList pl;
|
||||
public Shop sh;
|
||||
public Votifier vo;
|
||||
public ShoppeCommons sh;
|
||||
public SQLite sql;
|
||||
public Announcer an;
|
||||
public ChatManager cm;
|
||||
public TFD4J dc;
|
||||
public TFD4JCommons dc;
|
||||
public Aggregator ag;
|
||||
public PunishmentList pul;
|
||||
public BanManager bm;
|
||||
public IndefiniteBanList im;
|
||||
@ -266,6 +269,18 @@ public class TotalFreedomMod extends JavaPlugin
|
||||
}
|
||||
}
|
||||
|
||||
public void registerDiscord() {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("TFD4J")) {
|
||||
dc = ag.getDiscordContext().getValue();
|
||||
}
|
||||
}
|
||||
|
||||
public void registerShoppe() {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("TF-Shoppe")) {
|
||||
sh = ag.getShoppeContext().getValue();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is provided to please Codacy.
|
||||
*/
|
||||
@ -299,18 +314,11 @@ public class TotalFreedomMod extends JavaPlugin
|
||||
as = new AntiSpam();
|
||||
wr = new WorldRestrictions();
|
||||
pl = new PlayerList();
|
||||
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("TF-Shoppe")) {
|
||||
sh = new Shop();
|
||||
vo = new Votifier();
|
||||
}
|
||||
ag = new Aggregator();
|
||||
|
||||
an = new Announcer();
|
||||
cm = new ChatManager();
|
||||
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("TFD4J")) {
|
||||
dc = new TFM_Accessor().botAccessor();
|
||||
}
|
||||
|
||||
pul = new PunishmentList();
|
||||
bm = new BanManager();
|
||||
|
@ -0,0 +1,27 @@
|
||||
package me.totalfreedom.totalfreedommod.api;
|
||||
|
||||
public class Aggregator
|
||||
{
|
||||
private Context<TFD4JCommons> discord;
|
||||
private Context<ShoppeCommons> shoppe;
|
||||
|
||||
public Context<TFD4JCommons> getDiscordContext()
|
||||
{
|
||||
return discord;
|
||||
}
|
||||
|
||||
public void setDiscordContext(Context<TFD4JCommons> discord)
|
||||
{
|
||||
this.discord = discord;
|
||||
}
|
||||
|
||||
public Context<ShoppeCommons> getShoppeContext()
|
||||
{
|
||||
return shoppe;
|
||||
}
|
||||
|
||||
public void setShoppeContext(Context<ShoppeCommons> shoppe)
|
||||
{
|
||||
this.shoppe = shoppe;
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package me.totalfreedom.totalfreedommod.api;
|
||||
|
||||
public class Context<T>
|
||||
{
|
||||
private final T value;
|
||||
|
||||
public Context(T value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public T getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.totalfreedom.shop;
|
||||
package me.totalfreedom.totalfreedommod.api;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import org.bukkit.ChatColor;
|
@ -0,0 +1,55 @@
|
||||
package me.totalfreedom.totalfreedommod.api;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
public interface ShoppeCommons
|
||||
{
|
||||
|
||||
int getCoinsPerReactionWin();
|
||||
|
||||
void startReactionTimer();
|
||||
|
||||
void forceStartReaction();
|
||||
|
||||
void startReaction();
|
||||
|
||||
void endReaction(String winner);
|
||||
|
||||
String getShopPrefix();
|
||||
|
||||
String getShopTitle();
|
||||
|
||||
Inventory generateShopGUI(PlayerData playerData);
|
||||
|
||||
Inventory generateLoginMessageGUI(Player player);
|
||||
|
||||
boolean isRealItem(PlayerData data, ShopItem shopItem, PlayerInventory inventory, ItemStack realItem);
|
||||
|
||||
boolean isRealItem(PlayerData data, ShopItem shopItem, ItemStack givenItem, ItemStack realItem);
|
||||
|
||||
ItemStack getLightningRod();
|
||||
|
||||
ItemStack getGrapplingHook();
|
||||
|
||||
ItemStack getFireBall();
|
||||
|
||||
ItemStack getRideablePearl();
|
||||
|
||||
ItemStack getStackingPotato();
|
||||
|
||||
ItemStack getClownFish();
|
||||
|
||||
boolean canAfford(int price, int coins);
|
||||
|
||||
int amountNeeded(int price, int coins);
|
||||
|
||||
ItemStack shopGUIItem(ShopItem item, PlayerData data);
|
||||
|
||||
ShopItem getShopItem(int slot);
|
||||
|
||||
String getReactionString();
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package me.totalfreedom.totalfreedommod.api;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface TFD4JCommons
|
||||
{
|
||||
void messageAdminChatChannel(String message);
|
||||
|
||||
void clearQueue();
|
||||
|
||||
void messageChatChannel(String message, boolean system);
|
||||
|
||||
boolean syncRoles(Admin admin, String id);
|
||||
|
||||
String getCode(PlayerData playerData);
|
||||
|
||||
String generateCode(int size);
|
||||
|
||||
Map<String, PlayerData> getLinkCodes();
|
||||
|
||||
String formatBotTag();
|
||||
|
||||
boolean sendReportOffline(Player reporter, OfflinePlayer reported, String reason);
|
||||
|
||||
boolean sendReport(Player reporter, Player reported, String reason);
|
||||
|
||||
boolean isEnabled();
|
||||
}
|
@ -18,7 +18,7 @@ public class Command_cleardiscordqueue extends FreedomCommand
|
||||
return true;
|
||||
}
|
||||
|
||||
plugin.dc.getUtils().clearQueue();
|
||||
plugin.dc.clearQueue();
|
||||
msg("Cleared the discord message queue.");
|
||||
return true;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
|
@ -25,7 +25,7 @@ public class Command_consolesay extends FreedomCommand
|
||||
FUtil.bcastMsg(String.format("§7[CONSOLE] §c%s §8» §f%s", sender.getName(), StringUtils.join(args, " ")));
|
||||
|
||||
if (plugin.dc != null) {
|
||||
plugin.dc.getUtils().messageChatChannel("[CONSOLE] " + sender.getName() + " \u00BB " + ChatColor.stripColor(message), true);
|
||||
plugin.dc.messageChatChannel("[CONSOLE] " + sender.getName() + " \u00BB " + ChatColor.stripColor(message), true);
|
||||
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ public class Command_doom extends FreedomCommand
|
||||
plugin.al.updateTables();
|
||||
if (plugin.dc != null && plugin.dc.isEnabled() && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||
{
|
||||
plugin.dc.getBot().syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||
plugin.dc.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -44,16 +44,16 @@ public class Command_linkdiscord extends FreedomCommand
|
||||
return true;
|
||||
}
|
||||
|
||||
if (plugin.dc.getBot().getLinkCodes().containsValue(data))
|
||||
if (plugin.dc.getLinkCodes().containsValue(data))
|
||||
{
|
||||
code = plugin.dc.getBot().getCode(data);
|
||||
code = plugin.dc.getCode(data);
|
||||
} else
|
||||
{
|
||||
code = plugin.dc.getBot().generateCode(5);
|
||||
plugin.dc.getBot().getLinkCodes().put(code, data);
|
||||
code = plugin.dc.generateCode(5);
|
||||
plugin.dc.getLinkCodes().put(code, data);
|
||||
}
|
||||
msg("Your linking code is " + ChatColor.AQUA + code, ChatColor.GREEN);
|
||||
msg("Take this code and DM the server bot (" + plugin.dc.getBot().formatBotTag() + ") the code (do not put anything else in the message, only the code)");
|
||||
msg("Take this code and DM the server bot (" + plugin.dc.formatBotTag() + ") the code (do not put anything else in the message, only the code)");
|
||||
return true;
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@ package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
|
@ -2,7 +2,7 @@ package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
|
@ -173,7 +173,7 @@ public class Command_myadmin extends FreedomCommand
|
||||
msg("Please run /linkdiscord first!", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
boolean synced = plugin.dc.getBot().syncRoles(target, playerData.getDiscordID());
|
||||
boolean synced = plugin.dc.syncRoles(target, playerData.getDiscordID());
|
||||
if (synced)
|
||||
{
|
||||
msg("Successfully synced your roles.", ChatColor.GREEN);
|
||||
|
@ -56,7 +56,7 @@ public class Command_report extends FreedomCommand
|
||||
|
||||
if (plugin.dc != null && plugin.dc.isEnabled())
|
||||
{
|
||||
logged = (player == null) ? plugin.dc.getUtils().sendReportOffline(playerSender, offlinePlayer, report) : plugin.dc.getUtils().sendReport(playerSender, player, report);
|
||||
logged = (player == null) ? plugin.dc.sendReportOffline(playerSender, offlinePlayer, report) : plugin.dc.sendReport(playerSender, player, report);
|
||||
}
|
||||
|
||||
msg(ChatColor.GREEN + "Thank you, your report has been successfully logged."
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -108,7 +108,7 @@ public class Command_saconfig extends FreedomCommand
|
||||
|
||||
if (plugin.dc != null && plugin.dc.isEnabled() && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||
{
|
||||
plugin.dc.getBot().syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||
plugin.dc.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||
}
|
||||
|
||||
msg("Set " + admin.getName() + "'s rank to " + rank.getName());
|
||||
@ -204,7 +204,7 @@ public class Command_saconfig extends FreedomCommand
|
||||
|
||||
if (plugin.dc != null && plugin.dc.isEnabled() && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||
{
|
||||
plugin.dc.getBot().syncRoles(admin, plugin.pl.getData(player).getDiscordID());
|
||||
plugin.dc.syncRoles(admin, plugin.pl.getData(player).getDiscordID());
|
||||
}
|
||||
}
|
||||
|
||||
@ -258,7 +258,7 @@ public class Command_saconfig extends FreedomCommand
|
||||
|
||||
if (plugin.dc != null && plugin.dc.isEnabled() && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||
{
|
||||
plugin.dc.getBot().syncRoles(admin, plugin.pl.getData(adminName).getDiscordID());
|
||||
plugin.dc.syncRoles(admin, plugin.pl.getData(adminName).getDiscordID());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -43,7 +43,7 @@ public class Command_say extends FreedomCommand
|
||||
FUtil.bcastMsg(String.format("[Server:%s] %s", sender.getName(), message), ChatColor.LIGHT_PURPLE);
|
||||
|
||||
if (plugin.dc != null) {
|
||||
plugin.dc.getUtils().messageChatChannel(String.format("[Server:%s] \u00BB %s", sender.getName(), message), true);
|
||||
plugin.dc.messageChatChannel(String.format("[Server:%s] \u00BB %s", sender.getName(), message), true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -48,7 +48,7 @@ public class Command_vanish extends FreedomCommand
|
||||
.color(NamedTextColor.YELLOW));
|
||||
|
||||
if (plugin.dc != null) {
|
||||
plugin.dc.getUtils().messageChatChannel("**" + playerSender.getName() + " joined the server" + "**", true);
|
||||
plugin.dc.messageChatChannel("**" + playerSender.getName() + " joined the server" + "**", true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ public class Command_vanish extends FreedomCommand
|
||||
server.broadcast(Component.translatable("multiplayer.player.left", Component.text(playerSender.getName()))
|
||||
.color(NamedTextColor.YELLOW));
|
||||
if (plugin.dc != null) {
|
||||
plugin.dc.getUtils().messageChatChannel("**" + playerSender.getName() + " left the server" + "**", true);
|
||||
plugin.dc.messageChatChannel("**" + playerSender.getName() + " left the server" + "**", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package me.totalfreedom.totalfreedommod.fun;
|
||||
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||
|
@ -7,7 +7,7 @@ import java.util.SplittableRandom;
|
||||
import java.util.UUID;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
@ -5,7 +5,7 @@ import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
import me.totalfreedom.shop.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
@ -80,22 +80,6 @@ public class Bot
|
||||
RATELIMIT_EXECUTOR.setRemoveOnCancelPolicy(true);
|
||||
}
|
||||
|
||||
public String getCode(PlayerData playerData) {
|
||||
for (String code : LINK_CODES.keySet())
|
||||
{
|
||||
if (LINK_CODES.get(code).equals(playerData))
|
||||
{
|
||||
return code;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String generateCode(int size)
|
||||
{
|
||||
return RandomStringUtils.randomNumeric(size);
|
||||
}
|
||||
|
||||
public String formatBotTag() {
|
||||
return client.getSelf()
|
||||
.blockOptional()
|
||||
@ -106,94 +90,6 @@ public class Bot
|
||||
.getDiscriminator();
|
||||
}
|
||||
|
||||
public boolean syncRoles(Admin admin, String discordID)
|
||||
{
|
||||
if (discordID == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Guild server = client.getGuildById(SnowflakeEntry.serverID)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
Member member = server.getMemberById(Snowflake.of(discordID))
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
Role adminRole = server.getRoleById(SnowflakeEntry.adminRoleID)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
Role senioradminRole = server.getRoleById(SnowflakeEntry.seniorRoleID)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
if (!admin.isActive())
|
||||
{
|
||||
syncRolesActivityCheck(member, adminRole, senioradminRole);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (admin.getRank().equals(Rank.ADMIN))
|
||||
{
|
||||
syncRolesAdminAssignment(member, adminRole, senioradminRole);
|
||||
return true;
|
||||
}
|
||||
else if (admin.getRank().equals(Rank.SENIOR_ADMIN))
|
||||
{
|
||||
syncRolesSeniorAssignment(member, adminRole, senioradminRole);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void syncRolesAdminAssignment(Member member, Role adminRole, Role senioradminRole) {
|
||||
member.getRoles().doFirst(() -> {
|
||||
if (!member.getRoles().collectList().blockOptional().orElseThrow().contains(adminRole))
|
||||
{
|
||||
member.addRole(adminRole.getId()).block();
|
||||
}
|
||||
}).doOnEach(r -> {
|
||||
Role role = r.get();
|
||||
if (role == null) return;
|
||||
|
||||
if (role.equals(senioradminRole))
|
||||
{
|
||||
member.removeRole(role.getId()).block();
|
||||
}
|
||||
}).subscribe();
|
||||
}
|
||||
|
||||
private void syncRolesActivityCheck(Member member, Role adminRole, Role senioradminRole) {
|
||||
member.getRoles().doOnEach(r -> {
|
||||
Role role = r.get();
|
||||
if (role == null) return;
|
||||
|
||||
if (role.equals(adminRole) || role.equals(senioradminRole))
|
||||
{
|
||||
member.removeRole(role.getId()).block();
|
||||
}
|
||||
}).subscribe();
|
||||
}
|
||||
|
||||
private void syncRolesSeniorAssignment(Member member, Role adminRole, Role senioradminRole) {
|
||||
member.getRoles().doFirst(() -> {
|
||||
if (!member.getRoles().collectList().blockOptional().orElseThrow().contains(senioradminRole))
|
||||
{
|
||||
member.addRole(senioradminRole.getId()).block();
|
||||
}
|
||||
}).doOnEach(r -> {
|
||||
Role role = r.get();
|
||||
if (role == null) return;
|
||||
|
||||
if (role.equals(adminRole))
|
||||
{
|
||||
member.removeRole(role.getId()).block();
|
||||
}
|
||||
}).subscribe();
|
||||
}
|
||||
|
||||
|
||||
private String poolIdentifier()
|
||||
{
|
||||
|
@ -1,35 +1,77 @@
|
||||
package me.totalfreedom.discord;
|
||||
|
||||
import me.totalfreedom.discord.command.HelpCommand;
|
||||
import me.totalfreedom.discord.command.ListCommand;
|
||||
import me.totalfreedom.discord.command.TPSCommand;
|
||||
import me.totalfreedom.discord.handling.CommandHandler;
|
||||
import me.totalfreedom.discord.listener.AdminChatListener;
|
||||
import me.totalfreedom.discord.listener.BukkitNative;
|
||||
import me.totalfreedom.discord.listener.MinecraftListener;
|
||||
import me.totalfreedom.discord.util.Utilities;
|
||||
import me.totalfreedom.totalfreedommod.api.Context;
|
||||
import me.totalfreedom.totalfreedommod.api.TFD4JCommons;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TFD4J extends JavaPlugin
|
||||
{
|
||||
private final Logger slf4j = LoggerFactory.getLogger("TFD4J");
|
||||
private Bot bot;
|
||||
private Utilities utils;
|
||||
private MinecraftListener mc;
|
||||
private AdminChatListener ac;
|
||||
private TFD4JCommons tfd4jcommons;
|
||||
private BukkitNative bn;
|
||||
private CommandHandler ch;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
slf4j().info("Hello from TFD4J! Initializing our API implementation...");
|
||||
this.tfd4jcommons = new TFD4JCommonsImpl(this);
|
||||
|
||||
slf4j().info("API successfully initialized! Initializing our bot...");
|
||||
this.bot = new Bot();
|
||||
this.utils = new Utilities(this);
|
||||
new BukkitNative(this);
|
||||
|
||||
slf4j().info("Bot successfully initialized! Registering the Bukkit Native listener...");
|
||||
this.bn = new BukkitNative(this);
|
||||
|
||||
slf4j().info("Bukkit Native listener successfully registered! Registering the Discord4J Listeners...");
|
||||
this.mc = new MinecraftListener(this);
|
||||
this.ac = new AdminChatListener(this);
|
||||
|
||||
mc.minecraftChatBound();
|
||||
ac.adminChatBound();
|
||||
|
||||
slf4j().info("Discord4J listeners successfully registered! Registering the Command Handler...");
|
||||
this.ch = new CommandHandler(bot.getClient().getRestClient());
|
||||
|
||||
slf4j().info("Command Handler successfully registered! Registering commands...");
|
||||
this.ch.registerCommand(new HelpCommand());
|
||||
this.ch.registerCommand(new ListCommand());
|
||||
this.ch.registerCommand(new TPSCommand());
|
||||
|
||||
slf4j().info("Commands successfully registered! Providing context to TFM...");
|
||||
Context<TFD4JCommons> context = new Context<>(tfd4jcommons);
|
||||
bot.getTFM().getCommons().ag.setDiscordContext(context);
|
||||
bot.getTFM().getCommons().registerDiscord();
|
||||
|
||||
slf4j().info("Context provided! TFD4J is now ready to go!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable()
|
||||
{
|
||||
bot.getClient().onDisconnect().subscribe();
|
||||
slf4j().info("Disconnecting the Discord bot...");
|
||||
bot.getClient()
|
||||
.onDisconnect()
|
||||
.doOnError(th -> slf4j().error("Error disconnecting the bot!", th))
|
||||
.doOnSuccess(v -> slf4j().info("Bot disconnected!"))
|
||||
.subscribe();
|
||||
slf4j().info("Goodbye from TFD4J!");
|
||||
}
|
||||
|
||||
public Logger slf4j()
|
||||
{
|
||||
return slf4j;
|
||||
}
|
||||
|
||||
public Bot getBot()
|
||||
@ -37,9 +79,9 @@ public class TFD4J extends JavaPlugin
|
||||
return bot;
|
||||
}
|
||||
|
||||
public Utilities getUtils()
|
||||
public TFD4JCommons getImpl()
|
||||
{
|
||||
return utils;
|
||||
return tfd4jcommons;
|
||||
}
|
||||
|
||||
public MinecraftListener getMinecraftListener()
|
||||
|
@ -0,0 +1,372 @@
|
||||
package me.totalfreedom.discord;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import discord4j.common.util.Snowflake;
|
||||
import discord4j.core.object.entity.Guild;
|
||||
import discord4j.core.object.entity.Member;
|
||||
import discord4j.core.object.entity.Message;
|
||||
import discord4j.core.object.entity.Role;
|
||||
import discord4j.core.object.entity.channel.TextChannel;
|
||||
import discord4j.core.object.reaction.ReactionEmoji;
|
||||
import discord4j.core.spec.EmbedCreateSpec;
|
||||
import discord4j.core.spec.MessageCreateSpec;
|
||||
import me.totalfreedom.discord.util.SnowflakeEntry;
|
||||
import me.totalfreedom.discord.util.Utilities;
|
||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||
import me.totalfreedom.totalfreedommod.api.TFD4JCommons;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import org.apache.commons.lang.RandomStringUtils;
|
||||
import org.apache.commons.lang.WordUtils;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class TFD4JCommonsImpl implements TFD4JCommons
|
||||
{
|
||||
private final TFD4J tfd4J;
|
||||
private final ImmutableList<String> DISCORD_SUBDOMAINS;
|
||||
private Flux<Message> sentMessages;
|
||||
|
||||
public TFD4JCommonsImpl(TFD4J tfd4J)
|
||||
{
|
||||
this.tfd4J = tfd4J;
|
||||
this.sentMessages = Flux.fromIterable(new ArrayList<>());
|
||||
this.DISCORD_SUBDOMAINS = (ImmutableList<String>)
|
||||
List.of("discordapp.com",
|
||||
"discord.com",
|
||||
"discord.gg");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void messageAdminChatChannel(String message)
|
||||
{
|
||||
String chat_channel_id = ConfigEntry.DISCORD_ADMINCHAT_CHANNEL_ID.getString();
|
||||
|
||||
String sanitizedMessage = sanitizeChatMessage(message);
|
||||
|
||||
if (sanitizedMessage.isBlank()) return;
|
||||
|
||||
if (!chat_channel_id.isEmpty())
|
||||
{
|
||||
MessageCreateSpec spec = MessageCreateSpec.builder()
|
||||
.content(sanitizedMessage)
|
||||
.build();
|
||||
|
||||
Mono<Message> sentMessage = tfd4J
|
||||
.getBot()
|
||||
.getClient()
|
||||
.getChannelById(SnowflakeEntry.adminChatChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.flatMap(c -> c.createMessage(spec));
|
||||
|
||||
insert(sentMessage);
|
||||
}
|
||||
}
|
||||
|
||||
public Flux<Message> getMessagesSent()
|
||||
{
|
||||
return sentMessages;
|
||||
}
|
||||
|
||||
private void insert(Mono<Message> messageMono)
|
||||
{
|
||||
sentMessages.concatWith(messageMono);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearQueue()
|
||||
{
|
||||
sentMessages = Flux.fromIterable(new ArrayList<>());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void messageChatChannel(String message, boolean system)
|
||||
{
|
||||
String chat_channel_id = ConfigEntry.DISCORD_CHAT_CHANNEL_ID.getString();
|
||||
|
||||
String sanitizedMessage = (system) ? message : sanitizeChatMessage(message);
|
||||
|
||||
if (sanitizedMessage.isBlank()) return;
|
||||
|
||||
if (!chat_channel_id.isEmpty())
|
||||
{
|
||||
MessageCreateSpec spec = MessageCreateSpec.builder()
|
||||
.content(sanitizedMessage)
|
||||
.build();
|
||||
|
||||
Mono<Message> sentMessage = tfd4J
|
||||
.getBot()
|
||||
.getClient()
|
||||
.getChannelById(SnowflakeEntry.chatChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.flatMap(c -> c.createMessage(spec));
|
||||
|
||||
insert(sentMessage);
|
||||
}
|
||||
}
|
||||
|
||||
private String sanitizeChatMessage(String message)
|
||||
{
|
||||
String newMessage = message;
|
||||
|
||||
if (message.contains("@"))
|
||||
{
|
||||
// \u200B is Zero Width Space, invisible on Discord
|
||||
newMessage = message.replace("@", "@\u200B");
|
||||
}
|
||||
|
||||
if (message.toLowerCase().contains("discord.gg")) // discord.gg/invite works as an invite
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
for (String subdomain : DISCORD_SUBDOMAINS)
|
||||
{
|
||||
if (message.toLowerCase().contains(subdomain + "/invite"))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
if (message.contains("§"))
|
||||
{
|
||||
newMessage = message.replace("§", "");
|
||||
}
|
||||
|
||||
return Utilities.deformat(newMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean syncRoles(Admin admin, String discordID)
|
||||
{
|
||||
if (discordID == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Guild server = tfd4J.getBot().getGuildById()
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
Member member = server.getMemberById(Snowflake.of(discordID))
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
Role adminRole = server.getRoleById(SnowflakeEntry.adminRoleID)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
Role senioradminRole = server.getRoleById(SnowflakeEntry.seniorRoleID)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
if (!admin.isActive())
|
||||
{
|
||||
syncRolesActivityCheck(member, adminRole, senioradminRole);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (admin.getRank().equals(Rank.ADMIN))
|
||||
{
|
||||
syncRolesAdminAssignment(member, adminRole, senioradminRole);
|
||||
return true;
|
||||
} else if (admin.getRank().equals(Rank.SENIOR_ADMIN))
|
||||
{
|
||||
syncRolesSeniorAssignment(member, adminRole, senioradminRole);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void syncRolesAdminAssignment(Member member, Role adminRole, Role senioradminRole)
|
||||
{
|
||||
member.getRoles().doFirst(() ->
|
||||
{
|
||||
if (!member.getRoles().collectList().blockOptional().orElseThrow().contains(adminRole))
|
||||
{
|
||||
member.addRole(adminRole.getId()).block();
|
||||
}
|
||||
}).doOnEach(r ->
|
||||
{
|
||||
Role role = r.get();
|
||||
if (role == null) return;
|
||||
|
||||
if (role.equals(senioradminRole))
|
||||
{
|
||||
member.removeRole(role.getId()).block();
|
||||
}
|
||||
}).subscribe();
|
||||
}
|
||||
|
||||
private void syncRolesActivityCheck(Member member, Role adminRole, Role senioradminRole)
|
||||
{
|
||||
member.getRoles().doOnEach(r ->
|
||||
{
|
||||
Role role = r.get();
|
||||
if (role == null) return;
|
||||
|
||||
if (role.equals(adminRole) || role.equals(senioradminRole))
|
||||
{
|
||||
member.removeRole(role.getId()).block();
|
||||
}
|
||||
}).subscribe();
|
||||
}
|
||||
|
||||
private void syncRolesSeniorAssignment(Member member, Role adminRole, Role senioradminRole)
|
||||
{
|
||||
member.getRoles().doFirst(() ->
|
||||
{
|
||||
if (!member.getRoles().collectList().blockOptional().orElseThrow().contains(senioradminRole))
|
||||
{
|
||||
member.addRole(senioradminRole.getId()).block();
|
||||
}
|
||||
}).doOnEach(r ->
|
||||
{
|
||||
Role role = r.get();
|
||||
if (role == null) return;
|
||||
|
||||
if (role.equals(adminRole))
|
||||
{
|
||||
member.removeRole(role.getId()).block();
|
||||
}
|
||||
}).subscribe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCode(PlayerData playerData)
|
||||
{
|
||||
for (String code : this.getLinkCodes().keySet())
|
||||
{
|
||||
if (this.getLinkCodes().get(code).equals(playerData))
|
||||
{
|
||||
return code;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateCode(int size)
|
||||
{
|
||||
return RandomStringUtils.randomNumeric(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, PlayerData> getLinkCodes()
|
||||
{
|
||||
return tfd4J.getBot().getLinkCodes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String formatBotTag()
|
||||
{
|
||||
return tfd4J.getBot().formatBotTag();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sendReportOffline(Player reporter, OfflinePlayer reported, String reason)
|
||||
{
|
||||
if (!tfd4J.getBot().shouldISendReport())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final Guild server = tfd4J.getBot().getGuildById().block();
|
||||
|
||||
if (server == null) return false;
|
||||
|
||||
final TextChannel channel = server.getChannelById(SnowflakeEntry.reportChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
final EmbedCreateSpec.Builder builder = EmbedCreateSpec.builder()
|
||||
.title("Report for " + reported.getName() + " (offline)")
|
||||
.description(reason)
|
||||
.footer("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png")
|
||||
.timestamp(Instant.from(ZonedDateTime.now()));
|
||||
if (tfd4J.getBot().getTFM().getCommons().esb.isEnabled())
|
||||
{
|
||||
com.earth2me.essentials.User user = tfd4J.getBot().getTFM().getCommons().esb.getEssentialsUser(reported.getName());
|
||||
String location = "World: " + Objects.requireNonNull(user.getLastLocation().getWorld()).getName() + ", X: " + user.getLastLocation().getBlockX() + ", Y: " + user.getLastLocation().getBlockY() + ", Z: " + user.getLastLocation().getBlockZ();
|
||||
builder.addField("Location", location, true);
|
||||
builder.addField("God Mode", WordUtils.capitalizeFully(String.valueOf(user.isGodModeEnabled())), true);
|
||||
if (user.getNickname() != null)
|
||||
{
|
||||
builder.addField("Nickname", user.getNickname(), true);
|
||||
}
|
||||
}
|
||||
EmbedCreateSpec embed = builder.build();
|
||||
Message message = channel.createMessage(embed).block();
|
||||
|
||||
if (message != null && !ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString().isEmpty())
|
||||
{
|
||||
message.addReaction(ReactionEmoji.unicode("\uD83D\uDCCB")).subscribe();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sendReport(Player reporter, Player reported, String reason)
|
||||
{
|
||||
if (!tfd4J.getBot().shouldISendReport())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final Guild server = tfd4J.getBot()
|
||||
.getClient()
|
||||
.getGuildById(SnowflakeEntry.serverID)
|
||||
.block();
|
||||
|
||||
if (server == null)
|
||||
{
|
||||
FLog.severe("The guild ID specified in the config is invalid.");
|
||||
return false;
|
||||
}
|
||||
|
||||
final TextChannel channel = server.getChannelById(SnowflakeEntry.reportChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
String location = "World: " + Objects.requireNonNull(reported.getLocation().getWorld()).getName() + ", X: " + reported.getLocation().getBlockX() + ", Y: " + reported.getLocation().getBlockY() + ", Z: " + reported.getLocation().getBlockZ();
|
||||
|
||||
final EmbedCreateSpec spec = EmbedCreateSpec.builder()
|
||||
.title("Report for " + reported.getName())
|
||||
.description(reason)
|
||||
.footer("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png")
|
||||
.timestamp(Instant.from(ZonedDateTime.now()))
|
||||
.addField("Location", location, true)
|
||||
.addField("Game Mode", WordUtils.capitalizeFully(reported.getGameMode().name()), true)
|
||||
.build();
|
||||
|
||||
Message message = channel.createMessage(spec).block();
|
||||
|
||||
if (!ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString().isEmpty() && message != null)
|
||||
{
|
||||
ReactionEmoji emoji = ReactionEmoji.unicode("\uD83D\uDCCB");
|
||||
message.addReaction(emoji);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
return tfd4J.isEnabled();
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package me.totalfreedom.discord;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class TFM_Accessor
|
||||
{
|
||||
private final TFD4J accessor;
|
||||
|
||||
public TFM_Accessor()
|
||||
{
|
||||
this.accessor = (TFD4J) Bukkit.getPluginManager().getPlugin("TFD4J");
|
||||
}
|
||||
|
||||
public TFD4J botAccessor()
|
||||
{
|
||||
return accessor;
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package me.totalfreedom.discord.listener;
|
||||
|
||||
import me.totalfreedom.discord.Bot;
|
||||
import me.totalfreedom.discord.TFD4J;
|
||||
import me.totalfreedom.discord.util.Utilities;
|
||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -28,8 +29,6 @@ public class BukkitNative implements Listener
|
||||
this.tfd4j = tfd4j;
|
||||
this.bot = tfd4j.getBot();
|
||||
this.commons = bot.getTFM().getCommons();
|
||||
|
||||
tfd4j.getServer().getPluginManager().registerEvents(this, tfd4j);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
@ -37,8 +36,8 @@ public class BukkitNative implements Listener
|
||||
{
|
||||
if (!commons.al.isVanished(event.getPlayer().getUniqueId()))
|
||||
{
|
||||
tfd4j.getUtils().messageChatChannel("**"
|
||||
+ tfd4j.getUtils().deformat(event.getPlayer().getName())
|
||||
tfd4j.getImpl().messageChatChannel("**"
|
||||
+ Utilities.deformat(event.getPlayer().getName())
|
||||
+ " joined the server" + "**", true);
|
||||
}
|
||||
}
|
||||
@ -48,8 +47,8 @@ public class BukkitNative implements Listener
|
||||
{
|
||||
if (!commons.al.isVanished(event.getPlayer().getUniqueId()))
|
||||
{
|
||||
tfd4j.getUtils().messageChatChannel("**"
|
||||
+ tfd4j.getUtils().deformat(event.getPlayer().getName())
|
||||
tfd4j.getImpl().messageChatChannel("**"
|
||||
+ Utilities.deformat(event.getPlayer().getName())
|
||||
+ " left the server" + "**", true);
|
||||
}
|
||||
}
|
||||
@ -68,8 +67,8 @@ public class BukkitNative implements Listener
|
||||
|
||||
if (deathMessage != null)
|
||||
{
|
||||
tfd4j.getUtils().messageChatChannel("**"
|
||||
+ tfd4j.getUtils().deformat(PlainTextComponentSerializer.plainText().serialize(deathMessage))
|
||||
tfd4j.getImpl().messageChatChannel("**"
|
||||
+ Utilities.deformat(PlainTextComponentSerializer.plainText().serialize(deathMessage))
|
||||
+ "**", true);
|
||||
}
|
||||
}
|
||||
@ -83,7 +82,7 @@ public class BukkitNative implements Listener
|
||||
if (!ConfigEntry.ADMIN_ONLY_MODE.getBoolean() && !tfd4j.getServer().hasWhitelist()
|
||||
&& !commons.pl.getPlayer(player).isMuted() && bot != null)
|
||||
{
|
||||
tfd4j.getUtils().messageChatChannel(player.getName()
|
||||
tfd4j.getImpl().messageChatChannel(player.getName()
|
||||
+ " \u00BB "
|
||||
+ ChatColor.stripColor(message), true);
|
||||
}
|
||||
|
@ -28,204 +28,13 @@ import java.util.Objects;
|
||||
|
||||
public class Utilities
|
||||
{
|
||||
private Flux<Message> sentMessages = Flux.fromIterable(new ArrayList<>());
|
||||
private final TFD4J tfd4J;
|
||||
private final ImmutableList<String> DISCORD_SUBDOMAINS = (ImmutableList<String>)
|
||||
List.of("discordapp.com",
|
||||
"discord.com",
|
||||
"discord.gg");
|
||||
|
||||
public Utilities(TFD4J tfd4J)
|
||||
{
|
||||
this.tfd4J = tfd4J;
|
||||
private Utilities() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
public void clearQueue()
|
||||
{
|
||||
sentMessages = Flux.fromIterable(new ArrayList<>());
|
||||
}
|
||||
|
||||
public String sanitizeChatMessage(String message)
|
||||
{
|
||||
String newMessage = message;
|
||||
|
||||
if (message.contains("@"))
|
||||
{
|
||||
// \u200B is Zero Width Space, invisible on Discord
|
||||
newMessage = message.replace("@", "@\u200B");
|
||||
}
|
||||
|
||||
if (message.toLowerCase().contains("discord.gg")) // discord.gg/invite works as an invite
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
for (String subdomain : DISCORD_SUBDOMAINS)
|
||||
{
|
||||
if (message.toLowerCase().contains(subdomain + "/invite"))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
if (message.contains("§"))
|
||||
{
|
||||
newMessage = message.replace("§", "");
|
||||
}
|
||||
|
||||
return deformat(newMessage);
|
||||
}
|
||||
|
||||
public void messageChatChannel(String message, boolean system)
|
||||
{
|
||||
String chat_channel_id = ConfigEntry.DISCORD_CHAT_CHANNEL_ID.getString();
|
||||
|
||||
String sanitizedMessage = (system) ? message : sanitizeChatMessage(message);
|
||||
|
||||
if (sanitizedMessage.isBlank()) return;
|
||||
|
||||
if (!chat_channel_id.isEmpty())
|
||||
{
|
||||
MessageCreateSpec spec = MessageCreateSpec.builder()
|
||||
.content(sanitizedMessage)
|
||||
.build();
|
||||
|
||||
Mono<Message> sentMessage = tfd4J
|
||||
.getBot()
|
||||
.getClient()
|
||||
.getChannelById(SnowflakeEntry.chatChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.flatMap(c -> c.createMessage(spec));
|
||||
|
||||
insert(sentMessage);
|
||||
}
|
||||
}
|
||||
|
||||
public void messageAdminChatChannel(String message)
|
||||
{
|
||||
String chat_channel_id = ConfigEntry.DISCORD_ADMINCHAT_CHANNEL_ID.getString();
|
||||
|
||||
String sanitizedMessage = sanitizeChatMessage(message);
|
||||
|
||||
if (sanitizedMessage.isBlank()) return;
|
||||
|
||||
if (!chat_channel_id.isEmpty())
|
||||
{
|
||||
MessageCreateSpec spec = MessageCreateSpec.builder()
|
||||
.content(sanitizedMessage)
|
||||
.build();
|
||||
|
||||
Mono<Message> sentMessage = tfd4J
|
||||
.getBot()
|
||||
.getClient()
|
||||
.getChannelById(SnowflakeEntry.adminChatChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.flatMap(c -> c.createMessage(spec));
|
||||
|
||||
insert(sentMessage);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean sendReportOffline(Player reporter, OfflinePlayer reported, String reason)
|
||||
{
|
||||
if (!tfd4J.getBot().shouldISendReport())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final Guild server = tfd4J.getBot().getGuildById().block();
|
||||
|
||||
if (server == null) return false;
|
||||
|
||||
final TextChannel channel = server.getChannelById(SnowflakeEntry.reportChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
final EmbedCreateSpec.Builder builder = EmbedCreateSpec.builder()
|
||||
.title("Report for " + reported.getName() + " (offline)")
|
||||
.description(reason)
|
||||
.footer("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png")
|
||||
.timestamp(Instant.from(ZonedDateTime.now()));
|
||||
if (tfd4J.getBot().getTFM().getCommons().esb.isEnabled())
|
||||
{
|
||||
com.earth2me.essentials.User user = tfd4J.getBot().getTFM().getCommons().esb.getEssentialsUser(reported.getName());
|
||||
String location = "World: " + Objects.requireNonNull(user.getLastLocation().getWorld()).getName() + ", X: " + user.getLastLocation().getBlockX() + ", Y: " + user.getLastLocation().getBlockY() + ", Z: " + user.getLastLocation().getBlockZ();
|
||||
builder.addField("Location", location, true);
|
||||
builder.addField("God Mode", WordUtils.capitalizeFully(String.valueOf(user.isGodModeEnabled())), true);
|
||||
if (user.getNickname() != null)
|
||||
{
|
||||
builder.addField("Nickname", user.getNickname(), true);
|
||||
}
|
||||
}
|
||||
EmbedCreateSpec embed = builder.build();
|
||||
Message message = channel.createMessage(embed).block();
|
||||
|
||||
if (message != null && !ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString().isEmpty())
|
||||
{
|
||||
message.addReaction(ReactionEmoji.unicode("\uD83D\uDCCB")).subscribe();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean sendReport(Player reporter, Player reported, String reason)
|
||||
{
|
||||
if (!tfd4J.getBot().shouldISendReport())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final Guild server = tfd4J.getBot()
|
||||
.getClient()
|
||||
.getGuildById(SnowflakeEntry.serverID)
|
||||
.block();
|
||||
|
||||
if (server == null)
|
||||
{
|
||||
FLog.severe("The guild ID specified in the config is invalid.");
|
||||
return false;
|
||||
}
|
||||
|
||||
final TextChannel channel = server.getChannelById(SnowflakeEntry.reportChannelID)
|
||||
.ofType(TextChannel.class)
|
||||
.blockOptional()
|
||||
.orElseThrow();
|
||||
|
||||
String location = "World: " + Objects.requireNonNull(reported.getLocation().getWorld()).getName() + ", X: " + reported.getLocation().getBlockX() + ", Y: " + reported.getLocation().getBlockY() + ", Z: " + reported.getLocation().getBlockZ();
|
||||
|
||||
final EmbedCreateSpec spec = EmbedCreateSpec.builder()
|
||||
.title("Report for " + reported.getName())
|
||||
.description(reason)
|
||||
.footer("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png")
|
||||
.timestamp(Instant.from(ZonedDateTime.now()))
|
||||
.addField("Location", location, true)
|
||||
.addField("Game Mode", WordUtils.capitalizeFully(reported.getGameMode().name()), true)
|
||||
.build();
|
||||
|
||||
Message message = channel.createMessage(spec).block();
|
||||
|
||||
if (!ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString().isEmpty() && message != null)
|
||||
{
|
||||
ReactionEmoji emoji = ReactionEmoji.unicode("\uD83D\uDCCB");
|
||||
message.addReaction(emoji);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public String deformat(String input)
|
||||
// Leaving this here so I don't need to do more work than necessary.
|
||||
public static String deformat(String input)
|
||||
{
|
||||
return input.replaceAll("([_\\\\`*>|])", "\\\\$1");
|
||||
}
|
||||
|
||||
public Flux<Message> getMessagesSent()
|
||||
{
|
||||
return sentMessages;
|
||||
}
|
||||
|
||||
public void insert(Mono<Message> messageMono)
|
||||
{
|
||||
sentMessages.concatWith(messageMono);
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,9 @@
|
||||
package me.totalfreedom.shop;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||
import me.totalfreedom.totalfreedommod.api.ShoppeCommons;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
@ -21,7 +18,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
@ -29,10 +25,12 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class Shop extends FreedomService
|
||||
import java.util.*;
|
||||
|
||||
public class Shop extends FreedomService implements ShoppeCommons
|
||||
{
|
||||
public final int coinsPerReactionWin = ConfigEntry.SHOP_REACTIONS_COINS_PER_WIN.getInteger();
|
||||
public final String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] ";
|
||||
private final int coinsPerReactionWin = ConfigEntry.SHOP_REACTIONS_COINS_PER_WIN.getInteger();
|
||||
private final String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] ";
|
||||
private final String LOGIN_MESSAGE_GUI_TITLE = ChatColor.DARK_GREEN + ChatColor.BOLD.toString() + "Login Messages";
|
||||
public String reactionString = "";
|
||||
public Date reactionStartTime;
|
||||
@ -49,6 +47,13 @@ public class Shop extends FreedomService
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCoinsPerReactionWin()
|
||||
{
|
||||
return coinsPerReactionWin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startReactionTimer()
|
||||
{
|
||||
long interval = ConfigEntry.SHOP_REACTIONS_INTERVAL.getInteger() * 20L;
|
||||
@ -64,12 +69,14 @@ public class Shop extends FreedomService
|
||||
}.runTaskLater(plugin, interval);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceStartReaction()
|
||||
{
|
||||
reactions.cancel();
|
||||
startReaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startReaction()
|
||||
{
|
||||
if (!ConfigEntry.SHOP_ENABLED.getBoolean())
|
||||
@ -101,8 +108,7 @@ public class Shop extends FreedomService
|
||||
if ((seconds -= 1) == 0)
|
||||
{
|
||||
endReaction(null);
|
||||
}
|
||||
else
|
||||
} else
|
||||
{
|
||||
countdownBar.setProgress(seconds / max);
|
||||
if (!countdownBar.getColor().equals(BarColor.YELLOW) && seconds / max <= 0.25)
|
||||
@ -114,6 +120,7 @@ public class Shop extends FreedomService
|
||||
}.runTaskTimer(plugin, 0, 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endReaction(String winner)
|
||||
{
|
||||
countdownTask.cancel();
|
||||
@ -143,16 +150,19 @@ public class Shop extends FreedomService
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getShopPrefix()
|
||||
{
|
||||
return FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getShopTitle()
|
||||
{
|
||||
return FUtil.colorize(ConfigEntry.SHOP_TITLE.getString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory generateShopGUI(PlayerData playerData)
|
||||
{
|
||||
Inventory gui = server.createInventory(null, 36, getShopTitle());
|
||||
@ -180,6 +190,7 @@ public class Shop extends FreedomService
|
||||
return gui;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory generateLoginMessageGUI(Player player)
|
||||
{
|
||||
Inventory gui = server.createInventory(null, 36, LOGIN_MESSAGE_GUI_TITLE);
|
||||
@ -203,11 +214,13 @@ public class Shop extends FreedomService
|
||||
return gui;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRealItem(PlayerData data, ShopItem shopItem, PlayerInventory inventory, ItemStack realItem)
|
||||
{
|
||||
return isRealItem(data, shopItem, inventory.getItemInMainHand(), realItem) || isRealItem(data, shopItem, inventory.getItemInOffHand(), realItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRealItem(PlayerData data, ShopItem shopItem, ItemStack givenItem, ItemStack realItem)
|
||||
{
|
||||
if (!data.hasItem(shopItem) || !givenItem.getType().equals(realItem.getType()))
|
||||
@ -223,6 +236,7 @@ public class Shop extends FreedomService
|
||||
return givenMeta.getDisplayName().equals(realMeta.getDisplayName()) && Objects.equals(givenMeta.getLore(), realMeta.getLore());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getLightningRod()
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(Material.BLAZE_ROD);
|
||||
@ -235,6 +249,7 @@ public class Shop extends FreedomService
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getGrapplingHook()
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(Material.FISHING_ROD);
|
||||
@ -246,6 +261,7 @@ public class Shop extends FreedomService
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getFireBall()
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(Material.FIRE_CHARGE);
|
||||
@ -257,6 +273,7 @@ public class Shop extends FreedomService
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getRideablePearl()
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL);
|
||||
@ -269,6 +286,7 @@ public class Shop extends FreedomService
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackingPotato()
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(Material.POTATO);
|
||||
@ -280,6 +298,7 @@ public class Shop extends FreedomService
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getClownFish()
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(Material.TROPICAL_FISH);
|
||||
@ -291,16 +310,19 @@ public class Shop extends FreedomService
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAfford(int price, int coins)
|
||||
{
|
||||
return coins >= price;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int amountNeeded(int price, int coins)
|
||||
{
|
||||
return price - coins;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack shopGUIItem(ShopItem item, PlayerData data)
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(item.getIcon());
|
||||
@ -319,8 +341,7 @@ public class Shop extends FreedomService
|
||||
lore.add(ChatColor.RED + "You can not afford this item!");
|
||||
lore.add(ChatColor.RED + "You need " + amountNeeded(price, coins) + " more coins to buy this item.");
|
||||
}
|
||||
}
|
||||
else
|
||||
} else
|
||||
{
|
||||
lore.add(ChatColor.RED + "You already purchased this item.");
|
||||
}
|
||||
@ -332,7 +353,7 @@ public class Shop extends FreedomService
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onShopGUIClick(InventoryClickEvent event)
|
||||
{
|
||||
if (!(event.getWhoClicked() instanceof Player))
|
||||
if (!(event.getWhoClicked() instanceof Player player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -350,7 +371,6 @@ public class Shop extends FreedomService
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player)event.getWhoClicked();
|
||||
PlayerData playerData = plugin.pl.getData(player);
|
||||
int price = shopItem.getCost();
|
||||
int coins = playerData.getCoins();
|
||||
@ -377,7 +397,7 @@ public class Shop extends FreedomService
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onLoginMessageGUIClick(InventoryClickEvent event)
|
||||
{
|
||||
if (!(event.getWhoClicked() instanceof Player))
|
||||
if (!(event.getWhoClicked() instanceof Player player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -391,7 +411,6 @@ public class Shop extends FreedomService
|
||||
|
||||
int slot = event.getSlot();
|
||||
|
||||
Player player = (Player)event.getWhoClicked();
|
||||
PlayerData data = plugin.pl.getData(player);
|
||||
|
||||
if (slot == 35)
|
||||
@ -399,8 +418,7 @@ public class Shop extends FreedomService
|
||||
data.setLoginMessage(null);
|
||||
plugin.pl.save(data);
|
||||
player.sendMessage(ChatColor.GREEN + "Removed your login message");
|
||||
}
|
||||
else
|
||||
} else
|
||||
{
|
||||
String message = ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList().get(slot);
|
||||
data.setLoginMessage(message);
|
||||
@ -413,24 +431,25 @@ public class Shop extends FreedomService
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerChat(AsyncPlayerChatEvent event)
|
||||
public void onPlayerChat(AsyncChatEvent event)
|
||||
{
|
||||
String message = event.getMessage();
|
||||
String message = event.message().toString();
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (ConfigEntry.SHOP_ENABLED.getBoolean() && ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()
|
||||
&& !plugin.sh.reactionString.isEmpty() && message.equals(plugin.sh.reactionString))
|
||||
&& !plugin.sh.getReactionString().isEmpty() && message.equals(plugin.sh.getReactionString()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
PlayerData data = plugin.pl.getData(player);
|
||||
data.setCoins(data.getCoins() + plugin.sh.coinsPerReactionWin);
|
||||
data.setCoins(data.getCoins() + plugin.sh.getCoinsPerReactionWin());
|
||||
plugin.pl.save(data);
|
||||
plugin.sh.endReaction(player.getName());
|
||||
player.sendMessage(ChatColor.GREEN + "You have been given " + ChatColor.GOLD
|
||||
+ plugin.sh.coinsPerReactionWin + ChatColor.GREEN + " coins!");
|
||||
+ plugin.sh.getCoinsPerReactionWin() + ChatColor.GREEN + " coins!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShopItem getShopItem(int slot)
|
||||
{
|
||||
for (ShopItem shopItem : ShopItem.values())
|
||||
@ -442,4 +461,10 @@ public class Shop extends FreedomService
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getReactionString()
|
||||
{
|
||||
return reactionString;
|
||||
}
|
||||
}
|
53
shop/src/main/java/me/totalfreedom/shop/TFShoppe.java
Normal file
53
shop/src/main/java/me/totalfreedom/shop/TFShoppe.java
Normal file
@ -0,0 +1,53 @@
|
||||
package me.totalfreedom.shop;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||
import me.totalfreedom.totalfreedommod.api.Context;
|
||||
import me.totalfreedom.totalfreedommod.api.ShoppeCommons;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TFShoppe extends JavaPlugin
|
||||
{
|
||||
private final Logger slf4j = LoggerFactory.getLogger("TF-Shoppe");
|
||||
private Shop shop;
|
||||
private Votifier votifier;
|
||||
|
||||
public Logger slf4j()
|
||||
{
|
||||
return slf4j;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
slf4j().info("Hello from the TF-Shoppe! Attempting to resolve TotalFreedomMod...");
|
||||
|
||||
TotalFreedomMod plugin = (TotalFreedomMod) getServer().getPluginManager().getPlugin("TotalFreedomMod");
|
||||
if (plugin == null)
|
||||
{
|
||||
slf4j().error("TotalFreedomMod not found! Disabling...");
|
||||
onDisable();
|
||||
return;
|
||||
}
|
||||
|
||||
slf4j().info("TotalFreedomMod found! Registering the shop...");
|
||||
shop = new Shop();
|
||||
|
||||
slf4j().info("Shop registered! Registering the Votifier listener...");
|
||||
votifier = new Votifier();
|
||||
|
||||
slf4j().info("Votifier listener registered! Providing context to TFM...");
|
||||
Context<ShoppeCommons> context = new Context<>(shop);
|
||||
plugin.ag.setShoppeContext(context);
|
||||
plugin.registerShoppe();
|
||||
|
||||
slf4j().info("Context provided! TF-Shoppe is now ready to go!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable()
|
||||
{
|
||||
slf4j().info("Goodbye from the TF-Shoppe!");
|
||||
}
|
||||
}
|
@ -16,11 +16,13 @@ public class Votifier extends FreedomService
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
// This is here to please SonarLint.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
// This is here to please SonarLint.
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
|
Loading…
Reference in New Issue
Block a user