Hello everyone, I would like some help adapting this file for a custom community board l2jFrozen:
package com.l2jfrozen.gameserver.communitybbs;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.StringTokenizer;
import javolution.util.FastMap;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.cache.HtmCache;
import com.l2jfrozen.gameserver.communitybbs.Manager.BaseBBSManager;
import com.l2jfrozen.gameserver.communitybbs.Manager.ClanBBSManager;
import com.l2jfrozen.gameserver.communitybbs.Manager.PostBBSManager;
import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
import com.l2jfrozen.gameserver.communitybbs.Manager.TeleBBSManager;
import com.l2jfrozen.gameserver.communitybbs.Manager.TopicBBSManager;
import com.l2jfrozen.gameserver.communitybbs.Manager.shopBBSManager;
import com.l2jfrozen.gameserver.handler.IBBSHandler;
import com.l2jfrozen.gameserver.model.L2Clan;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.multisell.L2Multisell;
import com.l2jfrozen.gameserver.network.L2GameClient;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ShowBoard;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
public class CommunityBoard
{
private static CommunityBoard _instance;
private final Map<String, IBBSHandler> _handlers;
protected final SimpleDateFormat fmt = new SimpleDateFormat("H:mm.");
public CommunityBoard()
{
_handlers = new FastMap<>();
// null;
}
public boolean checkPlayerConditions(L2PcInstance activeChar, String command)
{
if (activeChar.isInOlympiadMode())
{
activeChar.sendMessage("CommunityBoard use is prohibited at the Olympiad");
return false;
}
if (activeChar.isFlying() || activeChar.isMounted())
{
activeChar.sendMessage("CommunityBoard use is prohibited at while flying or mounted!");
return false;
}
if (activeChar.inObserverMode())
{
activeChar.sendMessage("CommunityBoard use is prohibited in ObserveMode!");
return false;
}
if (activeChar.isAlikeDead() || activeChar.isDead())
{
activeChar.sendMessage("CommunityBoard use is prohibited While Dead");
return false;
}
if (activeChar.isInCombat())
{
activeChar.sendMessage("CommunityBoard use is prohibited in Combat!");
return false;
}
if (activeChar.isCastingNow())
{
activeChar.sendMessage("CommunityBoard use is prohibited while Casting!");
return false;
}
if (activeChar.isAttackingNow())
{
activeChar.sendMessage("CommunityBoard use is prohibited while Attacking!");
return false;
}
if (activeChar.isInDuel())
{
activeChar.sendMessage("CommunityBoard use is prohibited while Playing Duel!");
return false;
}
if (activeChar.isFishing())
{
activeChar.sendMessage("CommunityBoard use is prohibited while Fishing!");
return false;
}
if (activeChar.isInStoreMode())
{
activeChar.sendMessage("CommunityBoard use is prohibited in StoreMode!");
return false;
}
if (activeChar.isInJail() || activeChar.isCursedWeaponEquipped() || activeChar.isFlying() || activeChar.isInBoat() || activeChar.isProcessingTransaction() || activeChar.isStunned())
{
activeChar.sendMessage("CommunityBoard use is prohibited right now!");
return false;
}
return true;
}
public static CommunityBoard getInstance()
{
if (_instance == null)
{
_instance = new CommunityBoard();
}
return _instance;
}
/**
* by Azagthtot
* @param handler as IBBSHandler
*/
public void registerBBSHandler(final IBBSHandler handler)
{
for (final String s : handler.getBBSCommands())
{
_handlers.put(s, handler);
}
}
/**
* by Azagthtot
* @param client
* @param command
*/
public void handleCommands(final L2GameClient client, final String command)
{
L2PcInstance activeChar = client.getActiveChar();
if (activeChar == null)
return;
if(!checkPlayerConditions(activeChar, command))
return;
if (Config.COMMUNITY_TYPE.equals("full"))
{
String cmd = command.substring(4);
String params = "";
final int iPos = cmd.indexOf(" ");
if (iPos != -1)
{
params = cmd.substring(iPos + 1);
cmd = cmd.substring(0, iPos);
}
final IBBSHandler bbsh = _handlers.get(cmd);
if (bbsh != null)
{
bbsh.handleCommand(cmd, activeChar, params);
}
else
{
if (command.startsWith("_bbsclan"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbsmemo"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbsgetfav"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbstopics"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbsposts"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbstop"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbshome"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbsloc"))
{
String text = HtmCache.getInstance().getHtm("data/html/CommunityBoard/index.htm");
//Custom Community Board
text = text.replace("%CharName%", String.valueOf(activeChar.getName()));
text = text.replace("%CharClass%", String.valueOf(activeChar.getClassId().name()));
text = text.replace("%CharLevel%", String.valueOf(activeChar.getLevel()));
if (activeChar.isNoble())
{
text = text.replace("%nobless%", "Yes");
}
else
{
text = text.replace("%nobless%", "No");
}
L2Clan clan = activeChar.getClan();
if (clan != null)
{
text = text.replace("%CharClan%", String.valueOf(activeChar.getClan().getName()));
}
else
{
text = text.replace("%CharClan%", "No Clan");
}
text = text.replace("%CharIP%", String.valueOf(activeChar.getClient().getConnection().getInetAddress().getHostAddress()));
text = text.replace("%PlayerOnline%", String.valueOf(L2World.getInstance().getAllPlayers().size()* 1));
text = text.replace("%ServerTime%", fmt.format(new Date(System.currentTimeMillis())));
//Custom Community Board
BaseBBSManager.separateAndSend(text, activeChar);
}
else if (command.startsWith("_bbstele"))
{
TeleBBSManager.getInstance().parsecmd(command, activeChar);
}
else if (command.startsWith("_bbsShop"))
{
shopBBSManager.getInstance().parsecmd(command, activeChar);
}
else if(command.startsWith("_bbsmultisell;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
shopBBSManager.getInstance().parsecmd("_bbsShop;" + st.nextToken(), activeChar);
L2Multisell.getInstance().SeparateAndSend(Integer.parseInt(st.nextToken()), activeChar, false, 0);
}
else
{
ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + command + " is not implemented yet</center><br><br></body></html>", "101");
activeChar.sendPacket(sb);
sb = null;
activeChar.sendPacket(new ShowBoard(null, "102"));
activeChar.sendPacket(new ShowBoard(null, "103"));
}
}
}
else if (Config.COMMUNITY_TYPE.equals("old"))
{
RegionBBSManager.getInstance().parsecmd(command, activeChar);
}
else
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.CB_OFFLINE));
}
activeChar = null;
}
/**
* @param client
* @param url
* @param arg1
* @param arg2
* @param arg3
* @param arg4
* @param arg5
*/
public void handleWriteCommands(final L2GameClient client, final String url, final String arg1, final String arg2, final String arg3, final String arg4, final String arg5)
{
L2PcInstance activeChar = client.getActiveChar();
if (activeChar == null)
return;
if (Config.COMMUNITY_TYPE.equals("full"))
{
if (url.equals("Topic"))
{
TopicBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
}
else if (url.equals("Post"))
{
PostBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
}
else if (url.equals("Region"))
{
RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
}
else if (url.equals("Notice"))
{
ClanBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
}
else
{
ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + url + " is not implemented yet</center><br><br></body></html>", "101");
activeChar.sendPacket(sb);
sb = null;
activeChar.sendPacket(new ShowBoard(null, "102"));
activeChar.sendPacket(new ShowBoard(null, "103"));
}
}
else if (Config.COMMUNITY_TYPE.equals("old"))
{
RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
}
else
{
ShowBoard sb = new ShowBoard("<html><body><br><br><center>The Community board is currently disable</center><br><br></body></html>", "101");
activeChar.sendPacket(sb);
sb = null;
activeChar.sendPacket(new ShowBoard(null, "102"));
activeChar.sendPacket(new ShowBoard(null, "103"));
}
activeChar = null;
}
}
And making it work in another l2jOrion project:
package l2jorion.game.community;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import l2jorion.Config;
import l2jorion.game.community.manager.BaseBBSManager;
import l2jorion.game.community.manager.ClanBBSManager;
import l2jorion.game.community.manager.FavoriteBBSManager;
import l2jorion.game.community.manager.FriendsBBSManager;
import l2jorion.game.community.manager.MailBBSManager;
import l2jorion.game.community.manager.PostBBSManager;
import l2jorion.game.community.manager.RankBBSManager;
import l2jorion.game.community.manager.RegionBBSManager;
import l2jorion.game.community.manager.TopBBSManager;
import l2jorion.game.community.manager.TopicBBSManager;
import l2jorion.game.handler.ICommunityBoardHandler;
import l2jorion.game.model.actor.instance.L2PcInstance;
import l2jorion.game.network.L2GameClient;
import l2jorion.game.network.SystemMessageId;
import l2jorion.logger.Logger;
import l2jorion.logger.LoggerFactory;
public class CommunityBoardManager
{
protected static Logger LOG = LoggerFactory.getLogger(CommunityBoardManager.class);
private Map<String, ICommunityBoardHandler> _handlers = new HashMap<>();
private final Map<Integer, String> _bypasses = new ConcurrentHashMap<>();
private static CommunityBoardManager _instance;
public static CommunityBoardManager getInstance()
{
if (_instance == null)
{
_instance = new CommunityBoardManager();
}
return _instance;
}
private CommunityBoardManager()
{
registerBBSHandler(new TopBBSManager());
registerBBSHandler(new FavoriteBBSManager());
registerBBSHandler(new RegionBBSManager());
registerBBSHandler(new ClanBBSManager());
registerBBSHandler(new TopicBBSManager());
registerBBSHandler(new MailBBSManager());
registerBBSHandler(new FriendsBBSManager());
registerBBSHandler(new TopicBBSManager());
registerBBSHandler(new PostBBSManager());
registerBBSHandler(new RankBBSManager());
LOG.info("CommunityBoardHandlers: Loaded " + _handlers.size() + " handlers");
}
public void registerBBSHandler(ICommunityBoardHandler handler)
{
for (String bypass : handler.getBypassBbsCommands())
{
if (_handlers.containsKey(bypass))
{
continue;
}
_handlers.put(bypass, handler);
}
}
public void onBypassCommand(L2GameClient client, String command)
{
final L2PcInstance player = client.getActiveChar();
if (player == null)
{
return;
}
if (Config.COMMUNITY_TYPE.equals("off"))
{
player.sendPacket(SystemMessageId.CB_OFFLINE);
return;
}
/*
* if (!AutoImageSenderManager.wereAllImagesSent(player)) { player.sendMessage("Community wasn't loaded yet, try again in few seconds."); player.sendPacket(new ExShowScreenMessage("Community wasn't loaded yet, try again in few seconds.", 2000, 2, false)); return; }
*/
String cmd = command.substring(4);
String params = "";
final int iPos = cmd.indexOf(" ");
if (iPos != -1)
{
params = cmd.substring(iPos + 1);
cmd = cmd.substring(0, iPos);
}
ICommunityBoardHandler bypass = _handlers.get(cmd);
if (bypass != null)
{
bypass.handleCommand(cmd, player, params);
}
else
{
if (command.startsWith("_bbshome"))
{
TopBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsgetfav") || command.startsWith("bbs_add_fav") || command.startsWith("_bbsdelfav_"))
{
FavoriteBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsloc"))
{
RegionBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsclan"))
{
ClanBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsmemo"))
{
TopicBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsmail") || command.equals("_maillist_0_1_0_"))
{
MailBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_friend") || command.startsWith("_block"))
{
FriendsBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbstopics"))
{
TopicBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsposts"))
{
PostBBSManager.getInstance().parseCmd(command, player);
}
else if (command.startsWith("_bbsshowrank"))
{
RankBBSManager.getInstance().parseCmd(command, player);
}
else
{
BaseBBSManager.separateAndSend("<html><body><br><br><center>The command: " + command + " isn't implemented.</center></body></html>", player);
}
}
}
public void handleWriteCommands(L2GameClient client, String url, String arg1, String arg2, String arg3, String arg4, String arg5)
{
final L2PcInstance player = client.getActiveChar();
if (player == null)
{
return;
}
if (Config.COMMUNITY_TYPE.equals("off"))
{
player.sendPacket(SystemMessageId.CB_OFFLINE);
return;
}
if (url.equals("Topic"))
{
TopicBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else if (url.equals("Post"))
{
PostBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else if (url.equals("_bbsloc"))
{
RegionBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else if (url.equals("_bbsclan"))
{
ClanBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else if (url.equals("Mail"))
{
MailBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else if (url.equals("Clan"))
{
ClanBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else if (url.equals("_friend"))
{
FriendsBBSManager.getInstance().parseWrite(arg1, arg2, arg3, arg4, arg5, player);
}
else
{
BaseBBSManager.separateAndSend("<html><body><br><br><center>The command: " + url + " isn't implemented.</center></body></html>", player);
}
}
public ICommunityBoardHandler getCommunityHandler(String bypass)
{
if (_handlers.isEmpty())
{
return null;
}
for (Map.Entry<String, ICommunityBoardHandler> entry : _handlers.entrySet())
{
if (bypass.contains(entry.getKey()))
{
return entry.getValue();
}
}
return null;
}
public void addBypass(L2PcInstance player, String title, String bypass)
{
_bypasses.put(player.getObjectId(), title + "&" + bypass);
}
public String removeBypass(L2PcInstance player)
{
return _bypasses.remove(player.getObjectId());
}
public Map<Integer, String> getAllBypass()
{
return _bypasses;
}
}