Code:
package server.innovation.plugins.castle;
import server.Config;
import server.model.players.*;
import server.util.Misc;
public class CastleHandler {
/**
* Maximum amount of players that can be banned from the castle
* this prevents possible abuse of castle file size
*/
private static final int MAX_BAN = 20;
/**
* Returns true if the given player is
* within castle coordinates
*/
public static boolean inCastle(Client client) {
return (client.absX >= 2743 && client.absX <= 2785 && client.absY >= 3481 && client.absY <= 3519);
}
/**
* Opens the castle settings
*/
public static void openSettings(Client client) {
if(client.hasCastle)
client.getDH().sendOption4("Enter your castle", "Enter a friends castle", "What is a Castle?", "Never mind");
else
client.getDH().sendOption4("Buy a Castle", "Enter a friends castle", "What is a Castle?", "Never mind");
client.dialogueAction = 9985;
}
/**
* Loads the castle for given player
* If it is the owner, it will load castle configs
*/
public static void loadCastle(Client client) {
if(client.castleMember.getCastle().isRanked(client.playerName.toLowerCase()) || client.castleMember.isFounder()){
CastleInterface.drawInterface(client,0);
client.setSidebarInterface(15, 49500);
client.interfaceOpen = true;
}
CastleObjects.refreshObjects(client.castleMember);
}
/**
* Sets up the owner's castle
*/
public static void setupCastle(Client founder) {
if(founder.castleMember == null)
CastleSaving.loadCastle(founder);
CastleNpcs.loadNpcSpots(founder.castleMember);
}
/**
* Destructs the castle and all of its variables
* All guests are removed upon destructing
*/
public static void destructCastle(final CastleMember member) {
final Castle c = member.getCastle();
CastleNpcs.removeNpcs(member);
c.setOpen(false);
c.getObjects().clear();
c.getNpcs().clear();
member.getClient().getPA().movePlayer(Config.HOME_X, Config.HOME_Y, 0);
for(int i = 0;i < c.getGuests().size();i++) {
CastleMember guest = c.getGuests().get(i);
if(guest.getCastle() != null) {
exitCastle(guest.getClient());
guest.getClient().getPA().movePlayer(Config.HOME_X, Config.HOME_Y, 0);
}
}
c.getGuests().clear();
c.setFounder(null);
CastleObjects.resetObjects(member);
}
/**
* Castle entering for the owner
*/
public static void enterCastle(final Client owner) {
if(!owner.isMark()) {
owner.sendMessage("Castles are currently disabled.");
return;
}
owner.refreshObjects = true;
setupCastle(owner);
owner.getPA().startTeleport(2758, 3516, (owner.playerId * 4), "modern");
owner.sendMessage("You are teleported to your Castle. You can find the settings in the notes tab.");
}
/**
* Castle entering for the guests
* Only allows the player in if castle is not set to private
*/
public static void enterCastle(Client client,String ownerName) {
try{
Client owner = getOwner(ownerName);
Castle castle = owner.castleMember.getCastle();
if(!CastleSaving.fileExists(client.playerName)) {
if(owner != client){
if(castle.isOpen()){
if(!castle.guestBanned(client.playerName.toLowerCase())) {
client.refreshObjects = true;
client.castleMember = new CastleMember(client,owner,castle,false);
castle.addGuest(client.castleMember);
client.castleMember.loadRights();
client.getPA().startTeleport(2758, 3516, owner.playerId * 4, "modern");
owner.sendMessage(Misc.optimizeText(client.playerName)+" has entered your castle.");
client.sendMessage("You enter "+Misc.optimizeText(ownerName)+"'s castle.");
} else {
client.sendMessage("You have been banned from visiting "+Misc.optimizeText(ownerName)+"'s castle.");
}
} else {
client.sendMessage("This castle is not currently open to the public.");
}
} else {
client.sendMessage("Please use Enter Castle and not join a friends castle.");
}
} else {
client.getDH().sendStatement("You own a castle and cannot enter any other castle");
client.nextChat = 0;
}
} catch (Exception e) {
client.getDH().sendStatement("This player is not online or has not entered his castle");
client.nextChat = 0;
}
}
/**
* Castle exiting for the guests
*/
public static void exitCastle(Client client) {
Client owner = client.castleMember.getCastle().getFounder();
Castle castle = client.castleMember.getCastle();
CastleObjects.resetObjects(client.castleMember);
castle.removeGuest(client);
client.castleMember = null;
client.getPA().movePlayer(Config.HOME_X, Config.HOME_Y, 0);
client.sendMessage("You are no longer in "+Misc.optimizeText(owner.playerName)+"'s castle.");
}
/**
* Handles banning a guest from the castle
*/
public static void banGuest(Client owner,String guestName) {
Castle c = owner.castleMember.getCastle();
boolean guestFound = false;
if(guestName.equalsIgnoreCase(owner.playerName.toLowerCase())) {
owner.sendMessage("You do not advise you banning yourself from your own castle.");
return;
} else if(c.getBannedGuests().size() >= MAX_BAN){
owner.sendMessage("Your ban list is full, please unban some others before banning another.");
return;
}
for(int i = 0;i < c.getGuests().size();i++) {
CastleMember member = c.getGuests().get(i);
Client client = member.getClient();
if(client != null){
if(client.playerName.equalsIgnoreCase(guestName)) {
client.getPA().movePlayer(Config.HOME_X, Config.HOME_Y, 0);
client.sendMessage("You have been banned from visting "+Misc.optimizeText(owner.playerName)+"'s castle.");
owner.sendMessage("You have just banned "+Misc.optimizeText(guestName)+" from visting your castle.");
guestFound = true;
}
}
}
if(!guestFound)
owner.sendMessage("This player is not currently in your Castle, but is now banned.");
c.banGuest(guestName);
if(c.getObjects() != null)
CastleSaving.saveCastle(c);
}
/**
* Handles unbanning a guest from the castle
*/
public static void unbanGuest(Client owner,String guestName) {
Castle castle = owner.castleMember.getCastle();
if(castle.guestBanned(guestName.toLowerCase())) {
castle.unbanGuest(guestName.toLowerCase());
owner.sendMessage("You have un-banned "+Misc.optimizeText(guestName)+" from your castle.");
if(castle.getObjects() != null)
CastleSaving.saveCastle(castle);
} else {
owner.sendMessage(Misc.optimizeText(guestName)+" is not on your ban list.");
}
}
/**
* Lists the players banned
*/
public static void drawBanList(Client client) {
Castle c = client.castleMember.getCastle();
client.refreshList();
client.flushOutStream();
client.getPA().showInterface(8134);
client.getPA().sendFrame126("Players banned from the castle", 8144);
int line = 8145;
if(c.getBannedGuests().size() <= 0) {
client.getPA().sendFrame126("No One", line);
return;
}
for(int i = 0;i < c.getBannedGuests().size();i++){
String name = c.getBannedGuests().get(i);
if(name != null) {
if(line == 8146)
line = 8147;
client.getPA().sendFrame126(Misc.optimizeText(name), line);
line++;
}
}
}
/**
* Lists the players ranked
*/
public static void drawRankList(Client client) {
Castle c = client.castleMember.getCastle();
client.refreshList();
client.flushOutStream();
client.getPA().showInterface(8134);
client.getPA().sendFrame126("Players ranked in the castle", 8144);
int line = 8145;
if(c.getRankedGuests().size() <= 0) {
client.getPA().sendFrame126("No One", line);
return;
}
for(String key : c.getRankedGuests().keySet()) {
if(key != null) {
if(line == 8146)
line = 8147;
client.getPA().sendFrame126(Misc.optimizeText(key), line);
line++;
}
}
}
/**
* Handles castle dialogue
*/
public static void handleDialogue(Client client,int button,int dialogue) {
switch(dialogue) {
case 148:
if(button == 9178) {
if(client.castleMember.canBan()) {
client.inputStringType = "castle_ban";
client.getOutStream().createFrame(187);
} else {
client.getDH().sendStatement("You are not allowed to ban guests");
client.nextChat = 0;
}
} else if (button == 9179) {
if(client.castleMember.canBan()) {
client.inputStringType = "castle_unban";
client.getOutStream().createFrame(187);
} else {
client.getDH().sendStatement("You are not allowed to un-ban guests");
client.nextChat = 0;
}
} else if (button == 9180)
CastleHandler.drawBanList(client);
else if (button == 9181)
client.getPA().removeAllWindows();
break;
case 95:
boolean close = true;
if(button == 9178){
CastleObjects.rotateObject(client.castleMember, client.objectId, client.objectX, client.objectY);
} else if(button == 9179){
client.sendMessage("This feature is currently disabled.");
//client.getDH().sendDialogues(1012, -1);
//close = false;
} else if(button == 9180){
CastleObjects.resetObject(client.castleMember, client.objectX, client.objectY);
}
if(close)
client.getPA().removeAllWindows();
break;
case 9985:
if(button == 9178) {
if(client.hasCastle)
CastleHandler.enterCastle(client);
else
client.sendMessage("Coming soon...");
client.getPA().removeAllWindows();
} else if (button == 9179) {
if (client.getOutStream() != null) {
client.inputStringType = "castle_enter";
client.getOutStream().createFrame(187);
client.flushOutStream();
}
} else if (button == 9180) {
client.sendMessage("Coming soon....");
client.getPA().removeAllWindows();
} else if (button == 9181) {
client.getPA().removeAllWindows();
}
break;
case 97:
if(button == 9178)
client.getDH().sendDialogues(96, 659);
else if (button == 9179)
CastleSupplies.drawList(client.castleMember);
else if (button == 9180)
client.getDH().sendDialogues(101, 1);
else if (button == 9181)
client.getPA().removeAllWindows();
break;
}
}
/**
* Promotes a guest
*/
public static void promoteGuest(Client owner, String guestName) {
Castle c = owner.castleMember.getCastle();
c.setRankedGuest(guestName, new boolean[5]);
}
/**
* Demote a guest
*/
public static void demoteGuest(Client owner, String guestName) {
Castle c = owner.castleMember.getCastle();
c.removeRankedGuest(guestName);
}
/**
* Getters and Setters
*/
private static Client getOwner(String ownerName) {
for(int i = 0;i < PlayerHandler.players.length;i++){
Client owner = (Client)PlayerHandler.players[i];
if(owner != null)
if(owner.playerName.toLowerCase().equals(ownerName.toLowerCase())) {
Castle castle = owner.castleMember.getCastle();
if(castle != null)
return owner;
}
}
return null;
}
public static Client getMember(String memberName) {
for(int i = 0;i < PlayerHandler.players.length;i++){
Client member = (Client)PlayerHandler.players[i];
if(member != null)
if(member.playerName.toLowerCase().equals(memberName.toLowerCase()))
return member;
}
return null;
}
}