*/
// But also need this along with stuff in PrefixListener
if(typeWallSign){
Sign sign = (Sign) block.getState();
String text = sign.getLine(0).replaceAll("(?i)\u00A7[0-F]", "");
if(text.equalsIgnoreCase("[Private]") || text.equalsIgnoreCase(Lockette.altPrivate) ||
text.equalsIgnoreCase("[More Users]") || text.equalsIgnoreCase(Lockette.altMoreUsers)){
if(event.isCancelled()) return;
//event.setCancelled(true);
//return;
}
}
else if(typeSignPost){
}
else{
// Not a sign, wtf!
event.setCancelled(true);
return;
}
/*
// Alternative: Enforce a blank sign, as bukkit catches spoofed packets now.
// No longer needed, as the findOwner now has an ignore block.
if(typeWallSign || (block.getTypeId() == Material.SIGN_POST.getId())){
Sign sign = (Sign) block.getState();
String text = sign.getLine(0).replaceAll("(?i)\u00A7[0-F]", "").toLowerCase();
if(text.equals("[private]") || text.equals(Lockette.altPrivate) || text.equals("[more users]") || text.equals(Lockette.altMoreUsers)){
sign.setLine(0, "");
sign.setLine(1, "");
sign.setLine(2, "");
sign.setLine(3, "");
sign.update(true);
}
}
*/
/*
// Colorizer code.
// Moved to PrefixListener
if(Lockette.colorTags){
event.setLine(0, event.getLine(0).replaceAll("&([0-9A-Fa-f])", "\u00A7$1"));
event.setLine(1, event.getLine(1).replaceAll("&([0-9A-Fa-f])", "\u00A7$1"));
event.setLine(2, event.getLine(2).replaceAll("&([0-9A-Fa-f])", "\u00A7$1"));
event.setLine(3, event.getLine(3).replaceAll("&([0-9A-Fa-f])", "\u00A7$1"));
}
*/
// Check for a new [Private] or [More Users] sign.
String text = event.getLine(0).replaceAll("(?i)\u00A7[0-F]", "");
if(text.equalsIgnoreCase("[Private]") || text.equalsIgnoreCase(Lockette.altPrivate)){
//Player player = event.getPlayer();
//Block block = event.getBlock();
//boolean typeWallSign = (block.getTypeId() == Material.WALL_SIGN.getId());
boolean doChests = true, doFurnaces = true, doDispensers = true;
boolean doBrewingStands = true, doCustoms = true;
boolean doTrapDoors = true, doDoors = true;
// Check for permission first.
if(plugin.usingExternalZones()){
if(!plugin.canBuild(player, block)){
event.setLine(0, "[?]");
plugin.localizedMessage(player, null, "msg-error-zone", PluginCore.lastZoneDeny());
return;
}
}
if(plugin.usingExternalPermissions()){
boolean create = false;
doChests = false;
doFurnaces = false;
doDispensers = false;
doBrewingStands = false;
doCustoms = false;
doTrapDoors = false;
doDoors = false;
if(plugin.hasPermission(block.getWorld(), player, "lockette.create.all")){
create = true;
doChests = true;
doFurnaces = true;
doDispensers = true;
doBrewingStands = true;
doCustoms = true;
doTrapDoors = true;
doDoors = true;
}
else{
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.chest")){
create = true;
doChests = true;
}
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.furnace")){
create = true;
doFurnaces = true;
}
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.dispenser")){
create = true;
doDispensers = true;
}
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.brewingstand")){
create = true;
doBrewingStands = true;
}
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.custom")){
create = true;
doCustoms = true;
}
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.trapdoor")){
create = true;
doTrapDoors = true;
}
if(plugin.hasPermission(block.getWorld(), player, "lockette.user.create.door")){
create = true;
doDoors = true;
}
}
if(!create){
event.setLine(0, "[?]");
plugin.localizedMessage(player, null, "msg-error-permission");
return;
}
}
int x;
Block checkBlock[] = new Block[4];
byte face = 0;
int type = 0;
boolean conflict = false;
boolean deny = false;
boolean zonedeny = false;
// Check wall sign attached block for trap doors.
if(Lockette.protectTrapDoors) if(typeWallSign){
checkBlock[3] = Lockette.getSignAttachedBlock(block);
if(checkBlock[3] != null) if(!isInList(checkBlock[3].getTypeId(), materialListBad)){
checkBlock[0] = checkBlock[3].getRelative(BlockFace.NORTH);
checkBlock[1] = checkBlock[3].getRelative(BlockFace.EAST);
checkBlock[2] = checkBlock[3].getRelative(BlockFace.SOUTH);
checkBlock[3] = checkBlock[3].getRelative(BlockFace.WEST);
for(x = 0; x < 4; ++x){
if(checkBlock[x].getTypeId() == Material.TRAP_DOOR.getId()){
if(Lockette.findBlockOwner(checkBlock[x], block, true) == null){
if(!doTrapDoors) deny = true;
else{
face = block.getData();
type = 4;
break;
}
}
}
}
/*
if(Lockette.findBlockOwner(checkBlock[3], block, true) == null){
if(!doTrapDoors) deny = true;
else{
face = block.getData();
type = 4;
}
}*/
}
}
// Check wall sign attached block for doors, above and below.
if(Lockette.protectDoors) if(typeWallSign){
checkBlock[0] = Lockette.getSignAttachedBlock(block);
if(checkBlock[0] != null) if(!isInList(checkBlock[0].getTypeId(), materialListBad)){
checkBlock[1] = checkBlock[0].getRelative(BlockFace.UP);
checkBlock[2] = checkBlock[0].getRelative(BlockFace.DOWN);
if(isInList(checkBlock[1].getTypeId(), materialListDoors)){
if(Lockette.findBlockOwner(checkBlock[1], block, true) == null){
if(isInList(checkBlock[2].getTypeId(), materialListDoors)){
if(Lockette.findBlockOwner(checkBlock[2], block, true) == null){
// unclaimed (unowned above, unowned below)
if(!doDoors) deny = true;
else{
face = block.getData();
type = 5;
}
}
// else conflict (unowned above, but already owned below)
else conflict = true;
}
else{
// unclaimed (unowned above, empty below)
if(!doDoors) deny = true;
else{
face = block.getData();
type = 5;
}
}
}
// else unknown (already owned above, unknown below)
//else if(isInList(checkBlock[2].getTypeId(), materialListDoors)){
//if(Lockette.findBlockOwner(checkBlock[2]) == null){
// conflict (already owned above, but unowned below)
//conflict = true;
//}
//else claimed (+ conflict) (already owned above, already owned below)
//else
//conflict = true;
//}
// else claimed (+ conflict obscure) (already owned above, empty below)
else conflict = true;
}
else if(isInList(checkBlock[2].getTypeId(), materialListDoors)){
if(Lockette.findBlockOwner(checkBlock[2], block, true) == null){
// unclaimed (empty above, unowned below)
if(!doDoors) deny = true;
else{
face = block.getData();
type = 5;
}
}
// else claimed (+ conflict) (empty above, already owned below)
else conflict = true;
}
// else none (empty above, empty below)
}
}
// Reset trapdoor face if there is a conflict with a door.
if(conflict == true){
face = 0;
type = 0;
}
if(face == 0){
int lastType;
// Check for chests first, dispensers second, furnaces third.
checkBlock[0] = block.getRelative(BlockFace.NORTH);
checkBlock[1] = block.getRelative(BlockFace.EAST);
checkBlock[2] = block.getRelative(BlockFace.SOUTH);
checkBlock[3] = block.getRelative(BlockFace.WEST);
for(x = 0; x < 4; ++x){
if(plugin.usingExternalZones()){
if(!plugin.canBuild(player, checkBlock[x])){
zonedeny = true;
continue;
}
}
// Check if allowed by type.
if(checkBlock[x].getTypeId() == Material.CHEST.getId()){
if(!doChests){
deny = true;
continue;
}
lastType = 1;
}
else if(isInList(checkBlock[x].getTypeId(), materialListFurnaces)){
if(!doFurnaces){
deny = true;
continue;
}
lastType = 2;
}
else if(checkBlock[x].getTypeId() == Material.DISPENSER.getId()){
if(!doDispensers){
deny = true;
continue;
}
lastType = 3;
}
else if(checkBlock[x].getTypeId() == Material.BREWING_STAND.getId()){
if(!doBrewingStands){
deny = true;
continue;
}
lastType = 6;
}
else if(Lockette.isInList(checkBlock[x].getTypeId(), Lockette.customBlockList)){
if(!doCustoms){
deny = true;
continue;
}
lastType = 7;
}
else if(checkBlock[x].getTypeId() == Material.TRAP_DOOR.getId()){
if(!Lockette.protectTrapDoors) continue;
if(!doTrapDoors){
deny = true;
continue;
}
lastType = 4;
}
else if(isInList(checkBlock[x].getTypeId(), materialListDoors)){
if(!Lockette.protectDoors) continue;
if(!doDoors){
deny = true;
continue;
}
lastType = 5;
}
else continue;
// Allowed, lets see if it is claimed.
if(Lockette.findBlockOwner(checkBlock[x], block, true) == null){
face = faceList[x];
type = lastType;
break;
}
// For when the last type is a door, and it is conflicting.
else{
if(Lockette.protectTrapDoors) if(doTrapDoors){
if(checkBlock[x].getTypeId() == Material.TRAP_DOOR.getId()){
conflict = true;
}
}
if(Lockette.protectDoors) if(doDoors){
if(isInList(checkBlock[x].getTypeId(), materialListDoors)){
conflict = true;
}
}
}
}
}
// None found, send a message.
if(face == 0){
event.setLine(0, "[?]");
if(conflict) plugin.localizedMessage(player, null, "msg-error-claim-conflict");
else if(zonedeny) plugin.localizedMessage(player, null, "msg-error-zone", PluginCore.lastZoneDeny());
else if(deny) plugin.localizedMessage(player, null, "msg-error-permission");
else plugin.localizedMessage(player, null, "msg-error-claim");
return;
}
// Claim it...
boolean anyone = true;
int length = player.getName().length();
if(event.getLine(1).isEmpty()) anyone = false;
if(length > 15) length = 15;
// In case some other plugin messed with the cancel state.
event.setCancelled(false);
if(anyone){
// Check if allowed by type.
if(type == 1){ // Chest
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.chest")) anyone = false;
}
else if(type == 2){ // Furnace
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.furnace")) anyone = false;
}
else if(type == 3){ // Dispenser
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.dispenser")) anyone = false;
}
else if(type == 6){ // Brewing Stand
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.brewingstand")) anyone = false;
}
else if(type == 7){ // Custom
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.custom")) anyone = false;
}
else if(type == 4){ // Trap Door
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.trapdoor")) anyone = false;
}
else if(type == 5){ // Door
if(!plugin.hasPermission(block.getWorld(), player, "lockette.admin.create.door")) anyone = false;
}
else anyone = false;
}
if(!anyone) event.setLine(1, player.getName().substring(0, length));
if(!typeWallSign){
// Set to wall type.
block.setType(Material.WALL_SIGN);
block.setData(face);
// Re-set the text.
Sign sign = (Sign) block.getState();
sign.setLine(0, event.getLine(0));
sign.setLine(1, event.getLine(1));
sign.setLine(2, event.getLine(2));
sign.setLine(3, event.getLine(3));
sign.update(true);
}
else block.setData(face);
// All done!
if(anyone){
Lockette.log.info("[" + plugin.getDescription().getName() + "] (Admin) " + player.getName() + " has claimed a container for " + event.getLine(1) + ".");
if(!plugin.playerOnline(event.getLine(1))) plugin.localizedMessage(player, null, "msg-admin-claim-error", event.getLine(1));
else plugin.localizedMessage(player, null, "msg-admin-claim", event.getLine(1));
}
else{
Lockette.log.info("[" + plugin.getDescription().getName() + "] " + player.getName() + " has claimed a container.");
plugin.localizedMessage(player, null, "msg-owner-claim");
}
}
else if(text.equalsIgnoreCase("[More Users]") || text.equalsIgnoreCase(Lockette.altMoreUsers)){
//Player player = event.getPlayer();
//Block block = event.getBlock();
//boolean typeWallSign = (block.getTypeId() == Material.WALL_SIGN.getId());
int x;
Block checkBlock[] = new Block[4];
Block signBlock = null;
Sign sign = null;
byte face = 0;
//int type = 0;
int length = player.getName().length();
if(length > 15) length = 15;
// Check wall sign attached block for owner.
if(Lockette.protectDoors || Lockette.protectTrapDoors) if(typeWallSign){
checkBlock[0] = Lockette.getSignAttachedBlock(block);
if(checkBlock[0] != null) if(!isInList(checkBlock[0].getTypeId(), materialListBad)){
signBlock = Lockette.findBlockOwner(checkBlock[0]);
if(signBlock != null){
sign = (Sign) signBlock.getState();
// Check owner.
if(sign.getLine(1).replaceAll("(?i)\u00A7[0-F]", "").equals(player.getName().substring(0, length))){
face = block.getData();
}
}
}
}
if(face == 0){
// Check for chests first, dispensers second, furnaces third.
checkBlock[0] = block.getRelative(BlockFace.NORTH);
checkBlock[1] = block.getRelative(BlockFace.EAST);
checkBlock[2] = block.getRelative(BlockFace.SOUTH);
checkBlock[3] = block.getRelative(BlockFace.WEST);
for(x = 0; x < 4; ++x){
if(!isInList(checkBlock[x].getTypeId(), materialList)) continue;
if(!Lockette.protectTrapDoors){
if(checkBlock[x].getTypeId() == Material.TRAP_DOOR.getId()) continue;
}
if(!Lockette.protectDoors){
if(isInList(checkBlock[x].getTypeId(), materialListDoors)) continue;
}
signBlock = Lockette.findBlockOwner(checkBlock[x]);
if(signBlock != null){
sign = (Sign) signBlock.getState();
// Check owner.
if(sign.getLine(1).replaceAll("(?i)\u00A7[0-F]", "").equals(player.getName().substring(0, length))){
face = faceList[x];
//type = y;
break;
}
}
}
}
// None found, send a message.
if(face == 0){
event.setLine(0, "[?]");
if(sign != null){
plugin.localizedMessage(player, null, "msg-error-adduser-owned", sign.getLine(1));
}
else{
plugin.localizedMessage(player, null, "msg-error-adduser");
}
return;
}
// Add the users sign.
// In case some other plugin messed with the cancel state.
event.setCancelled(false);
if(!typeWallSign){
// Set to wall type.
block.setType(Material.WALL_SIGN);
block.setData(face);
// Re-set the text.
//Sign
sign = (Sign) block.getState();
sign.setLine(0, event.getLine(0));
sign.setLine(1, event.getLine(1));
sign.setLine(2, event.getLine(2));
sign.setLine(3, event.getLine(3));
sign.update(true);
}
else block.setData(face);