Merge pull request #5 from NLthijs48/AreaShop_V1.4

Adds the code from version 2.0.1
This commit is contained in:
Thijs Wiefferink 2014-09-06 22:50:51 +02:00
commit d8fbeaf53a
9 changed files with 167 additions and 89 deletions

View File

@ -20,6 +20,8 @@ language: EN
enableSchematics: true
## Maximum number of blocks to save to or restore from a .schemetic
maximumBlocks: 1000000
## Maximum number of locations the teleport function should check to find a safe spot
maximumTries: 50000
## Enable sending stats to http://mcstats.org/ (Metrics plugin)
sendStats: true
## Use colors when sending messages to console and log files
@ -28,9 +30,6 @@ useColorsInConsole: false
postCommandErrors: true
## Version of the config, do not change!
version: 2.0.0
## The y location within the region to start searching for safe teleport spots (x and z will be in the middle of the region)
## Possible values: bottom, middle, top
teleportLocationY: bottom
## The different tags you can write on the sign to trigger the plugin
signTags:
## Tag for adding a rent region

View File

@ -13,29 +13,13 @@ general:
signProfile: 'default'
## The profile for the WorldGuard flags as specified in the config
flagProfile: 'default'
runCommands:
created:
before:
after:
- "say An AreaShop region has been created: %region%"
deleted:
before:
after:
rented:
before:
after:
extended:
before:
after:
unrented:
before:
after:
bought:
before:
after:
sold:
before:
after:
## The y location within the region to start searching for safe teleport spots (x and z will be in the middle of the region)
## Possible values: bottom, middle, top
teleportLocationY: bottom
## If true the teleportation algorithm only allows telportation to inside the region, otherwise it will expand algorithm
## a cube from the starting point to check for safe spots (then it could end outside the region)
## If you set a teleport location outside of the region with /as settp then setting this to true breaks that teleport (players cannot use it)
teleportIntoRegion: true
########## RENTING ##########
rent:

View File

@ -153,7 +153,7 @@ setprice-successRent: "Price of region %0% changed to %1% per %2%"
setprice-successBuy: "Price of region %0% changed to %1%"
rentduration-noPermission: "You don't have permission to change the duration of a rent"
rentduration-help: "/as rentduration <region> <amount> <identifier>"
rentduration-help: "/as rentduration <amount> <identifier> [region], the region you stand in will be used if not specified"
rentduration-notRegistered: "%0% is not registered as a rent"
rentduration-wrongAmount: "'%0%' is not a valid amount, use a whole number"
rentduration-wrongFormat: "'%0%' is not a proper timeformat, check the documentation on Bukkit"
@ -183,7 +183,7 @@ teleport-noRentOrBuy: "Region '%0%' is not registered as rent or buy"
teleport-noPermission: "You don't have permission to teleport to a region"
teleport-noPermissionOther: "You don't have permission to teleport to region you do not own"
teleport-success: "You teleported to %0%"
teleport-noSafe: "No safe position found in region %0%, change the region or set position yourself"
teleport-noSafe: "No safe position found in region %0%, no spots in region left or maximum tries exceeded (%1%/%2%)"
setteleport-help: "/as settp [region] [reset], the region you stand in will be used if not specified"
setteleport-noPermission: "You don't have permission to set the teleport location"
@ -231,6 +231,7 @@ schemevent-help: "/as schemevent <region> <created|deleted|rented|unrented|bough
schemevent-noRegion: "The specified region is not registered: %0%"
schemevent-wrongEvent: "The specified event '%0%' does not exist, use one of the following: &7%1%"
schemevent-success: "Event '%0%' has succesfully been triggered for region %1%"
schemevent-noPermission: "You don't have permission to trigger schematic events"
add-help: "/as add <rent|buy> [region] [world]"
add-noPermission: "You don't have permission to add a region to AreaShop"

View File

@ -1,6 +1,6 @@
name: AreaShop
main: nl.evolutioncoding.AreaShop.AreaShop
version: 2.0.0
version: 2.0.1
depend: [Vault, WorldGuard, WorldEdit]
softdepend: [Multiverse-Core]
commands:

View File

@ -50,7 +50,7 @@ public class BuyCommand extends CommandAreaShop {
if(regions.size() != 1) {
plugin.message(sender, "buy-help");
} else {
if(!regions.get(0).isRentRegion()) {
if(!regions.get(0).isBuyRegion()) {
plugin.message(sender, "buy-notBuyable");
} else {
((BuyRegion)regions.get(0)).buy(player);

View File

@ -55,6 +55,7 @@ public class RentCommand extends CommandAreaShop {
} else {
((RentRegion)regions.get(0)).rent(player);
}
plugin.saveConfig();
}
}
}

View File

@ -4,10 +4,12 @@ import java.util.ArrayList;
import java.util.List;
import nl.evolutioncoding.AreaShop.AreaShop;
import nl.evolutioncoding.AreaShop.regions.GeneralRegion;
import nl.evolutioncoding.AreaShop.regions.RentRegion;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class RentdurationCommand extends CommandAreaShop {
@ -34,26 +36,45 @@ public class RentdurationCommand extends CommandAreaShop {
plugin.message(sender, "rentduration-noPermission");
return;
}
if(args.length < 4 || args[1] == null || args[2] == null || args[3] == null) {
if(args.length < 3 || args[1] == null || args[2] == null) {
plugin.message(sender, "rentduration-help");
return;
}
RentRegion rent = plugin.getFileManager().getRent(args[1]);
RentRegion rent = null;
if(args.length <= 3) {
if(sender instanceof Player) {
// get the region by location
List<GeneralRegion> regions = plugin.getFileManager().getApplicalbeASRegions(((Player)sender).getLocation());
if(regions.size() != 1) {
plugin.message(sender, "rentduration-help");
return;
} else {
if(regions.get(0).isRentRegion()) {
rent = (RentRegion)regions.get(0);
}
}
} else {
plugin.message(sender, "rentduration-help");
return;
}
} else {
rent = plugin.getFileManager().getRent(args[3]);
}
if(rent == null) {
plugin.message(sender, "rentduration-notRegistered", args[1]);
plugin.message(sender, "rentduration-notRegistered", args[3]);
return;
}
try {
Integer.parseInt(args[2]);
Integer.parseInt(args[1]);
} catch(NumberFormatException e) {
plugin.message(sender, "rentduration-wrongAmount", args[2]);
plugin.message(sender, "rentduration-wrongAmount", args[1]);
return;
}
if(!plugin.checkTimeFormat(args[2] + " " + args[3])) {
plugin.message(sender, "rentduration-wrongFormat", args[2]+" "+args[3]);
if(!plugin.checkTimeFormat(args[1] + " " + args[2])) {
plugin.message(sender, "rentduration-wrongFormat", args[1]+" "+args[2]);
return;
}
rent.setDuration(args[2]+" "+args[3]);
rent.setDuration(args[1]+" "+args[2]);
rent.updateRegionFlags();
rent.updateSigns();
rent.save();

View File

@ -33,6 +33,11 @@ public class SchematiceventCommand extends CommandAreaShop {
@Override
public void execute(CommandSender sender, Command command, String[] args) {
if(!sender.hasPermission("areashop.schematicevents")) {
plugin.message(sender, "schemevent-noPermission");
return;
}
if(args.length < 3 || args[1] == null || args[2] == null) {
plugin.message(sender, "schemevent-help");
return;

View File

@ -856,7 +856,8 @@ public abstract class GeneralRegion {
if(region != null) {
// Set to block in the middle, y configured in the config
Vector middle = Vector.getMidpoint(region.getMaximumPoint(), region.getMinimumPoint());
String configSetting = plugin.config().getString("teleportLocationY");
String configSetting = getStringSetting("general.teleportLocationY");
AreaShop.debug("teleportLocationY = " + configSetting);
if("bottom".equalsIgnoreCase(configSetting)) {
middle = middle.setY(region.getMinimumPoint().getBlockY());
} else if("top".equalsIgnoreCase(configSetting)) {
@ -869,6 +870,10 @@ public abstract class GeneralRegion {
return false;
}
}
boolean insideRegion = getBooleanSetting("general.teleportIntoRegion");
AreaShop.debug("insideRegion = " + insideRegion);
int maxTries = plugin.config().getInt("maximumTries");
AreaShop.debug("maxTries = " + maxTries);
// set location in the center of the block
startLocation.setX(startLocation.getBlockX() + 0.5);
@ -878,18 +883,26 @@ public abstract class GeneralRegion {
// radius around that (until no block in the region is found at all cube sides)
Location saveLocation = startLocation;
int radius = 1;
boolean done = isSave(saveLocation);
boolean blocksInRegion = region.contains(startLocation.getBlockX(), startLocation.getBlockY(), startLocation.getBlockZ());
boolean done = isSave(saveLocation) && ((blocksInRegion && insideRegion) || (!insideRegion));
boolean north=false, east=false, south=false, west=false, top=false, bottom=false;
boolean track;
while(!done) {
while(((blocksInRegion && insideRegion) || (!insideRegion)) && !done) {
blocksInRegion = false;
// North side
track = false;
for(int x=-radius+1; x<=radius && !done && !north; x++) {
for(int y=-radius+1; y<radius && !done; y++) {
saveLocation = startLocation.clone().add(x, y, -radius);
done = isSave(saveLocation);
track = true;
if(saveLocation.getBlockY()>256 || saveLocation.getBlockY()<0) {
continue;
}
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
}
north = north || !track;
@ -899,9 +912,15 @@ public abstract class GeneralRegion {
for(int z=-radius+1; z<=radius && !done && !east; z++) {
for(int y=-radius+1; y<radius && !done; y++) {
saveLocation = startLocation.clone().add(radius, y, z);
done = isSave(saveLocation);
track = true;
if(saveLocation.getBlockY()>256 || saveLocation.getBlockY()<0) {
continue;
}
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
}
east = east || !track;
@ -911,9 +930,15 @@ public abstract class GeneralRegion {
for(int x=radius-1; x>=-radius && !done && !south; x--) {
for(int y=-radius+1; y<radius && !done; y++) {
saveLocation = startLocation.clone().add(x, y, radius);
done = isSave(saveLocation);
track = true;
if(saveLocation.getBlockY()>256 || saveLocation.getBlockY()<0) {
continue;
}
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
}
south = south || !track;
@ -923,50 +948,74 @@ public abstract class GeneralRegion {
for(int z=radius-1; z>=-radius && !done && !west; z--) {
for(int y=-radius+1; y<radius && !done; y++) {
saveLocation = startLocation.clone().add(-radius, y, z);
done = isSave(saveLocation);
track = true;
if(saveLocation.getBlockY()>256 || saveLocation.getBlockY()<0) {
continue;
}
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
west = west || !track;
}
west = west || !west;
// Top side
track = false;
// Middle block of the top
if((startLocation.getBlockY() + radius) > 256) {
top = true;
}
if(!done && !top) {
saveLocation = startLocation.clone().add(0, radius, 0);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
for(int r=1; r<=radius && !done && !top; r++) {
// North
for(int x=-r+1; x<=r && !done; x++) {
saveLocation = startLocation.clone().add(x, radius, -r);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
// East
for(int z=-r+1; z<=r && !done; z++) {
saveLocation = startLocation.clone().add(r, radius, z);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
// South side
for(int x=r-1; x>=-r && !done; x--) {
saveLocation = startLocation.clone().add(x, radius, r);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
// West side
for(int z=r-1; z>=-r && !done; z--) {
saveLocation = startLocation.clone().add(-r, radius, z);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
}
top = top || !track;
@ -974,40 +1023,58 @@ public abstract class GeneralRegion {
// Bottom side
track = false;
// Middle block of the bottom
if(startLocation.getBlockY() - radius < 0) {
bottom = true;
}
if(!done && !bottom) {
saveLocation = startLocation.clone().add(0, -radius, 0);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
for(int r=1; r<=radius && !done && !bottom; r++) {
// North
for(int x=-r+1; x<=r && !done; x++) {
saveLocation = startLocation.clone().add(x, -radius, -r);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
// East
for(int z=-r+1; z<=r && !done; z++) {
saveLocation = startLocation.clone().add(r, -radius, z);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
// South side
for(int x=r-1; x>=-r && !done; x--) {
saveLocation = startLocation.clone().add(x, -radius, r);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
// West side
for(int z=r-1; z>=-r && !done; z--) {
saveLocation = startLocation.clone().add(-r, -radius, z);
done = isSave(saveLocation);
track = true;
if((insideRegion && region.contains(saveLocation.getBlockX(), saveLocation.getBlockY(), saveLocation.getBlockZ())) || !insideRegion) {
checked++;
done = isSave(saveLocation) || checked > maxTries;
blocksInRegion = true;
track = true;
}
}
}
bottom = bottom || !track;
@ -1015,14 +1082,14 @@ public abstract class GeneralRegion {
// Increase cube radius
radius++;
}
if(done) {
if(done && isSave(saveLocation)) {
plugin.message(player, "teleport-success", getName());
player.teleport(saveLocation);
AreaShop.debug("Found location: " + saveLocation.toString() + " Tries: " + checked);
AreaShop.debug("Found location: " + saveLocation.toString() + " Tries: " + (checked-1));
return true;
} else {
plugin.message(player, "teleport-noSafe", getName());
AreaShop.debug("No location found, checked " + checked + " spots");
plugin.message(player, "teleport-noSafe", getName(), checked-1, maxTries);
AreaShop.debug("No location found, checked " + (checked-1) + " spots of max " + maxTries);
return false;
}
}