@@ -18,28 +18,14 @@

package com.sk89q.craftbook.gates.world;

import com.sk89q.craftbook.ic.*;
import com.sk89q.worldedit.blocks.BlockType;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.block.Sign;
import org.bukkit.entity.Animals;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.MagmaCube;
import org.bukkit.entity.PigZombie;
import org.bukkit.entity.Sheep;
import org.bukkit.entity.Slime;
import org.bukkit.entity.Villager;
import org.bukkit.entity.*;
import org.bukkit.entity.Villager.Profession;
import org.bukkit.entity.Wolf;

import com.sk89q.craftbook.ic.AbstractIC;
import com.sk89q.craftbook.ic.AbstractICFactory;
import com.sk89q.craftbook.ic.ChipState;
import com.sk89q.craftbook.ic.IC;
import com.sk89q.craftbook.ic.RestrictedIC;
import com.sk89q.worldedit.blocks.BlockType;

public class EntitySpawner extends AbstractIC {

@@ -68,9 +54,9 @@ public void trigger(ChipState chip) {
String rider = getSign().getLine(3).trim().split(":")[0];
String typeEffect = "", riderEffect = "";

if(getSign().getLine(2).trim().split(":").length > 1)
if (getSign().getLine(2).trim().split(":").length > 1)
typeEffect = getSign().getLine(2).trim().split(":")[1];
if(getSign().getLine(3).trim().split(":").length > 1)
if (getSign().getLine(3).trim().split(":").length > 1)
riderEffect = getSign().getLine(3).trim().split(":")[1];

if (EntityType.fromName(type) != null) {
@@ -82,14 +68,17 @@ public void trigger(ChipState chip) {
for (int y = loc.getBlockY() + 1; y <= maxY; y++) {
if (BlockType.canPassThrough(getSign().getWorld().getBlockTypeIdAt(x, y, z))) {
if (rider.length() != 0 && EntityType.fromName(rider) != null) {
Entity ent = getSign().getWorld().spawn(new Location(getSign().getWorld(), x, y, z), EntityType.fromName(type).getEntityClass());
Entity ent2 = getSign().getWorld().spawn(new Location(getSign().getWorld(), x, y, z), EntityType.fromName(rider).getEntityClass());
setEntityData(ent,typeEffect);
setEntityData(ent2,riderEffect);
Entity ent = getSign().getWorld().spawn(new Location(getSign().getWorld(), x, y, z),
EntityType.fromName(type).getEntityClass());
Entity ent2 = getSign().getWorld().spawn(new Location(getSign().getWorld(), x, y, z),
EntityType.fromName(rider).getEntityClass());
setEntityData(ent, typeEffect);
setEntityData(ent2, riderEffect);
ent.setPassenger(ent2);
} else {
Entity ent = getSign().getWorld().spawn(new Location(getSign().getWorld(), x, y, z), EntityType.fromName(type).getEntityClass());
setEntityData(ent,typeEffect);
Entity ent = getSign().getWorld().spawn(new Location(getSign().getWorld(), x, y, z),
EntityType.fromName(type).getEntityClass());
setEntityData(ent, typeEffect);
}
return;
}
@@ -99,90 +88,91 @@ public void trigger(ChipState chip) {
}

public void setEntityData(Entity ent, String data) {
if(data.equalsIgnoreCase("")) return;
if(ent instanceof Animals) {
if(data.equalsIgnoreCase("baby"))
((Animals)ent).setBaby();

if (data.equalsIgnoreCase("")) return;
if (ent instanceof Animals) {
if (data.equalsIgnoreCase("baby"))
((Animals) ent).setBaby();
}
if(ent instanceof Creeper) {
if(data.equalsIgnoreCase("charged"))
((Creeper)ent).setPowered(true);
if (ent instanceof Creeper) {
if (data.equalsIgnoreCase("charged"))
((Creeper) ent).setPowered(true);
}
if(ent instanceof Slime) {
if(data.equalsIgnoreCase("huge"))
((Slime)ent).setSize(16);
if(data.equalsIgnoreCase("large"))
((Slime)ent).setSize(11);
if(data.equalsIgnoreCase("normal"))
((Slime)ent).setSize(6);
if(data.equalsIgnoreCase("small"))
((Slime)ent).setSize(3);
if (ent instanceof Slime) {
if (data.equalsIgnoreCase("huge"))
((Slime) ent).setSize(16);
if (data.equalsIgnoreCase("large"))
((Slime) ent).setSize(11);
if (data.equalsIgnoreCase("normal"))
((Slime) ent).setSize(6);
if (data.equalsIgnoreCase("small"))
((Slime) ent).setSize(3);
}
if(ent instanceof MagmaCube) {
if(data.equalsIgnoreCase("huge"))
((MagmaCube)ent).setSize(16);
if(data.equalsIgnoreCase("large"))
((MagmaCube)ent).setSize(11);
if(data.equalsIgnoreCase("normal"))
((MagmaCube)ent).setSize(6);
if(data.equalsIgnoreCase("small"))
((MagmaCube)ent).setSize(3);
if (ent instanceof MagmaCube) {
if (data.equalsIgnoreCase("huge"))
((MagmaCube) ent).setSize(16);
if (data.equalsIgnoreCase("large"))
((MagmaCube) ent).setSize(11);
if (data.equalsIgnoreCase("normal"))
((MagmaCube) ent).setSize(6);
if (data.equalsIgnoreCase("small"))
((MagmaCube) ent).setSize(3);
}
if(ent instanceof Wolf) {
if(data.equalsIgnoreCase("tame"))
((Wolf)ent).setTamed(true);
if(data.equalsIgnoreCase("angry"))
((Wolf)ent).setAngry(true);
if (ent instanceof Wolf) {
if (data.equalsIgnoreCase("tame"))
((Wolf) ent).setTamed(true);
if (data.equalsIgnoreCase("angry"))
((Wolf) ent).setAngry(true);
}
if(ent instanceof PigZombie) {
if(data.equalsIgnoreCase("angry"))
((PigZombie)ent).setAngry(true);
if (ent instanceof PigZombie) {
if (data.equalsIgnoreCase("angry"))
((PigZombie) ent).setAngry(true);
}
if(ent instanceof Villager) {
if(data.equalsIgnoreCase("butcher"))
((Villager)ent).setProfession(Profession.BUTCHER);
if(data.equalsIgnoreCase("smith"))
((Villager)ent).setProfession(Profession.BLACKSMITH);
if(data.equalsIgnoreCase("priest"))
((Villager)ent).setProfession(Profession.PRIEST);
if(data.equalsIgnoreCase("library"))
((Villager)ent).setProfession(Profession.LIBRARIAN);
if(data.equalsIgnoreCase("farmer"))
((Villager)ent).setProfession(Profession.FARMER);
if (ent instanceof Villager) {
if (data.equalsIgnoreCase("butcher"))
((Villager) ent).setProfession(Profession.BUTCHER);
if (data.equalsIgnoreCase("smith"))
((Villager) ent).setProfession(Profession.BLACKSMITH);
if (data.equalsIgnoreCase("priest"))
((Villager) ent).setProfession(Profession.PRIEST);
if (data.equalsIgnoreCase("library"))
((Villager) ent).setProfession(Profession.LIBRARIAN);
if (data.equalsIgnoreCase("farmer"))
((Villager) ent).setProfession(Profession.FARMER);
}
if(ent instanceof Sheep) {
if(data.equalsIgnoreCase("black"))
((Sheep)ent).setColor(DyeColor.BLACK);
if(data.equalsIgnoreCase("red"))
((Sheep)ent).setColor(DyeColor.RED);
if(data.equalsIgnoreCase("green"))
((Sheep)ent).setColor(DyeColor.GREEN);
if(data.equalsIgnoreCase("brown"))
((Sheep)ent).setColor(DyeColor.BROWN);
if(data.equalsIgnoreCase("blue"))
((Sheep)ent).setColor(DyeColor.BLUE);
if(data.equalsIgnoreCase("purple"))
((Sheep)ent).setColor(DyeColor.PURPLE);
if(data.equalsIgnoreCase("cyan"))
((Sheep)ent).setColor(DyeColor.CYAN);
if(data.equalsIgnoreCase("silver"))
((Sheep)ent).setColor(DyeColor.SILVER);
if(data.equalsIgnoreCase("gray"))
((Sheep)ent).setColor(DyeColor.GRAY);
if(data.equalsIgnoreCase("pink"))
((Sheep)ent).setColor(DyeColor.PINK);
if(data.equalsIgnoreCase("lime"))
((Sheep)ent).setColor(DyeColor.LIME);
if(data.equalsIgnoreCase("yellow"))
((Sheep)ent).setColor(DyeColor.YELLOW);
if(data.equalsIgnoreCase("lblue"))
((Sheep)ent).setColor(DyeColor.LIGHT_BLUE);
if(data.equalsIgnoreCase("magenta"))
((Sheep)ent).setColor(DyeColor.MAGENTA);
if(data.equalsIgnoreCase("orange"))
((Sheep)ent).setColor(DyeColor.ORANGE);
if(data.equalsIgnoreCase("white"))
((Sheep)ent).setColor(DyeColor.WHITE);
if (ent instanceof Sheep) {
if (data.equalsIgnoreCase("black"))
((Sheep) ent).setColor(DyeColor.BLACK);
if (data.equalsIgnoreCase("red"))
((Sheep) ent).setColor(DyeColor.RED);
if (data.equalsIgnoreCase("green"))
((Sheep) ent).setColor(DyeColor.GREEN);
if (data.equalsIgnoreCase("brown"))
((Sheep) ent).setColor(DyeColor.BROWN);
if (data.equalsIgnoreCase("blue"))
((Sheep) ent).setColor(DyeColor.BLUE);
if (data.equalsIgnoreCase("purple"))
((Sheep) ent).setColor(DyeColor.PURPLE);
if (data.equalsIgnoreCase("cyan"))
((Sheep) ent).setColor(DyeColor.CYAN);
if (data.equalsIgnoreCase("silver"))
((Sheep) ent).setColor(DyeColor.SILVER);
if (data.equalsIgnoreCase("gray"))
((Sheep) ent).setColor(DyeColor.GRAY);
if (data.equalsIgnoreCase("pink"))
((Sheep) ent).setColor(DyeColor.PINK);
if (data.equalsIgnoreCase("lime"))
((Sheep) ent).setColor(DyeColor.LIME);
if (data.equalsIgnoreCase("yellow"))
((Sheep) ent).setColor(DyeColor.YELLOW);
if (data.equalsIgnoreCase("lblue"))
((Sheep) ent).setColor(DyeColor.LIGHT_BLUE);
if (data.equalsIgnoreCase("magenta"))
((Sheep) ent).setColor(DyeColor.MAGENTA);
if (data.equalsIgnoreCase("orange"))
((Sheep) ent).setColor(DyeColor.ORANGE);
if (data.equalsIgnoreCase("white"))
((Sheep) ent).setColor(DyeColor.WHITE);
}
}

@@ -1,77 +1,61 @@
package com.sk89q.craftbook.gates.world;

import java.util.LinkedHashSet;
import java.util.Set;

import com.sk89q.craftbook.ic.*;
import com.sk89q.craftbook.util.EnumUtil;
import com.sk89q.craftbook.util.LocationUtil;
import com.sk89q.craftbook.util.SignUtil;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.block.Sign;
import org.bukkit.entity.Animals;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.entity.PoweredMinecart;
import org.bukkit.entity.StorageMinecart;

import com.sk89q.craftbook.ic.AbstractIC;
import com.sk89q.craftbook.ic.AbstractICFactory;
import com.sk89q.craftbook.ic.ChipState;
import com.sk89q.craftbook.ic.IC;
import com.sk89q.craftbook.ic.RestrictedIC;
import com.sk89q.craftbook.util.EnumUtil;
import com.sk89q.craftbook.util.SignUtil;
import org.bukkit.entity.*;

/**
*
* @author Me4502
*
*/
public class EntityTrap extends AbstractIC {

private enum Type {
PLAYER,
MOBHOSTILE,
MOBPEACEFUL,
ANYMOB,
MOB_HOSTILE,
MOB_PEACEFUL,
MOB_ANY,
ANY,
CART,
STORAGECART,
POWEREDCART;
CART_STORAGE,
CART_POWERED;

public boolean is(Entity entity) {

switch (this) {
case PLAYER:
return entity instanceof Player;
case MOBHOSTILE:
return entity instanceof Monster;
case MOBPEACEFUL:
return entity instanceof Animals;
case ANYMOB:
return entity instanceof Creature;
case CART:
return entity instanceof Minecart;
case STORAGECART:
return entity instanceof StorageMinecart;
case POWEREDCART:
return entity instanceof PoweredMinecart;
case ANY:
return true;
case PLAYER:
return entity instanceof Player;
case MOB_HOSTILE:
return entity instanceof Monster;
case MOB_PEACEFUL:
return entity instanceof Animals;
case MOB_ANY:
return entity instanceof Creature;
case CART:
return entity instanceof Minecart;
case CART_STORAGE:
return entity instanceof StorageMinecart;
case CART_POWERED:
return entity instanceof PoweredMinecart;
case ANY:
return true;
}
return false;
}

public static Type fromString(String name) {

return EnumUtil.getEnumFromString(EntityTrap.Type.class, name);
}
}

public EntityTrap(Server server, Sign sign) {

super(server, sign);
}

@@ -165,7 +149,7 @@ else if (entity instanceof Minecart)
}

public static class Factory extends AbstractICFactory implements
RestrictedIC {
RestrictedIC {

public Factory(Server server) {

@@ -18,17 +18,12 @@

package com.sk89q.craftbook.gates.world;

import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.ic.*;
import org.bukkit.Server;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;

import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.ic.AbstractIC;
import com.sk89q.craftbook.ic.AbstractICFactory;
import com.sk89q.craftbook.ic.ChipState;
import com.sk89q.craftbook.ic.IC;
import com.sk89q.craftbook.ic.ICVerificationException;

public class MessageSender extends AbstractIC {

public MessageSender(Server server, Sign sign) {
@@ -72,8 +67,9 @@ private boolean sendMessage() {
if (player != null) {
player.sendMessage(message.replace("&", "\u00A7"));
sent = true;
} else if (name.equalsIgnoreCase("BROADCAST"))
} else if (name.equalsIgnoreCase("BROADCAST")) {
getServer().broadcastMessage(message);
}
return sent;
}

@@ -92,8 +88,9 @@ public IC create(Sign sign) {

@Override
public void checkPlayer(Sign sign, LocalPlayer player) throws ICVerificationException {
if(!sign.getLine(2).equalsIgnoreCase(player.getName()))
if(!player.hasPermission("craftbook.ic.restricted.mc1510"))

if (!sign.getLine(2).equalsIgnoreCase(player.getName()))
if (!player.hasPermission("craftbook.ic.restricted.mc1510"))
throw new ICVerificationException("You don't have permission to use other players!");
}
}
@@ -70,12 +70,13 @@ public Factory(Server server) {

@Override
public IC create(Sign sign) {
if (sign.getLine(0).equalsIgnoreCase("SET P-DOOR")) {
sign.setLine(1, "[MC1212]");
sign.update();
return new SetDoor(getServer(), sign);
}
return new ParticleEffect(getServer(), sign);

if (sign.getLine(0).equalsIgnoreCase("SET P-DOOR")) {
sign.setLine(1, "[MC1212]");
sign.update();
return new SetDoor(getServer(), sign);
}
return new ParticleEffect(getServer(), sign);
}
}
}
@@ -52,7 +52,8 @@ public Factory(Server server) {

@Override
public IC create(Sign sign) {
return new ParticleEffectST(getServer(), sign);

return new ParticleEffectST(getServer(), sign);
}
}
}
@@ -2,15 +2,15 @@

import com.sk89q.craftbook.bukkit.CircuitsPlugin;
import com.sk89q.craftbook.ic.*;
import com.sk89q.craftbook.util.EnumUtil;
import com.sk89q.craftbook.util.LocationUtil;
import com.sk89q.craftbook.util.SignUtil;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.*;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

import java.util.Set;

@@ -19,12 +19,12 @@
*/
public class PlayerDetection extends AbstractIC {

private Location center;
private Set<Chunk> chunks;
private Location center;
private Set<Chunk> chunks;
private int radius;
private String player = "";
private String group = "";
private boolean detectPlayer;
private String player = "";
private String group = "";
private boolean detectPlayer;

public PlayerDetection(Server server, Sign block) {
super(server, block);
@@ -35,28 +35,28 @@ public PlayerDetection(Server server, Sign block) {

private void load() {
Sign sign = getSign();
Block block = SignUtil.getBackBlock(sign.getBlock());
// now check the third line for the radius and offset
String line = sign.getLine(2).trim();
boolean relativeOffset = line.contains("!") ? false : true;
if (!relativeOffset) line.replace("!", "");
// if the line contains a = the offset is given
// the given string should look something like that:
// radius=x:y:z or radius, e.g. 1=-2:5:11
if (line.contains("=")) {
try {
String[] split = line.split("=");
this.radius = Integer.parseInt(split[0]);
// parse the offset
String[] offsetSplit = split[1].split(":");
Block block = SignUtil.getBackBlock(sign.getBlock());
// now check the third line for the radius and offset
String line = sign.getLine(2).trim();
boolean relativeOffset = !line.contains("!");
if (!relativeOffset) line.replace("!", "");
// if the line contains a = the offset is given
// the given string should look something like that:
// radius=x:y:z or radius, e.g. 1=-2:5:11
if (line.contains("=")) {
try {
String[] split = line.split("=");
this.radius = Integer.parseInt(split[0]);
// parse the offset
String[] offsetSplit = split[1].split(":");
int offsetX = Integer.parseInt(offsetSplit[0]);
int offsetY = Integer.parseInt(offsetSplit[1]);
int offsetZ = Integer.parseInt(offsetSplit[2]);
if (relativeOffset) {
block = LocationUtil.getRelativeOffset(sign, offsetX, offsetY, offsetZ);
} else {
block = LocationUtil.getOffset(block, offsetX, offsetY, offsetZ);
}
if (relativeOffset) {
block = LocationUtil.getRelativeOffset(sign, offsetX, offsetY, offsetZ);
} else {
block = LocationUtil.getOffset(block, offsetX, offsetY, offsetZ);
}
} catch (NumberFormatException e) {
// do nothing and use the defaults
} catch (IndexOutOfBoundsException e) {
@@ -65,20 +65,20 @@ private void load() {
} else {
this.radius = Integer.parseInt(line);
}
// parse the group or player name
line = sign.getLine(3).trim();
detectPlayer = line.contains("p:");
try {
if (detectPlayer) {
player = line.split(":")[1];
} else {
group = line.split(":")[1];
}
} catch (Exception e) {
// do nothing and use the defaults
}
this.center = block.getLocation();
this.chunks = LocationUtil.getSurroundingChunks(block, radius);
// parse the group or player name
line = sign.getLine(3).trim();
detectPlayer = line.contains("p:");
try {
if (detectPlayer) {
player = line.split(":")[1];
} else {
group = line.split(":")[1];
}
} catch (Exception e) {
// do nothing and use the defaults
}
this.center = block.getLocation();
this.chunks = LocationUtil.getSurroundingChunks(block, radius);
}

@Override
@@ -103,17 +103,10 @@ protected boolean isDetected() {
if (chunk.isLoaded()) {
// get all entites from the chunks in the defined radius
for (Entity entity : chunk.getEntities()) {
if (!entity.isDead()) {
if (entity instanceof Player) {
// at last check if the entity is within the radius
if (LocationUtil.getGreatestDistance(entity.getLocation(), center) <= radius) {
if (detectPlayer) {
return ((Player) entity).getName().equals(player);
} else {
return CircuitsPlugin.getInst().isInGroup(((Player) entity).getName(), group);
}
}
}
if (!entity.isDead() && entity instanceof Player
&& LocationUtil.getGreatestDistance(entity.getLocation(), center) <= radius) {
if (detectPlayer) return ((Player) entity).getName().equals(player);
else return CircuitsPlugin.getInst().isInGroup(((Player) entity).getName(), group);
}
}
}
@@ -129,7 +122,7 @@ public Factory(Server server) {

@Override
public IC create(Sign sign) {
return new PlayerDetection(getServer(), sign);
return new PlayerDetection(getServer(), sign);
}
}
}
@@ -18,11 +18,10 @@

package com.sk89q.craftbook.ic;

import com.sk89q.craftbook.LocalPlayer;
import org.bukkit.Server;
import org.bukkit.block.Sign;

import com.sk89q.craftbook.LocalPlayer;

/**
* Abstract IC factory.
*
@@ -18,9 +18,8 @@

package com.sk89q.craftbook.ic;

import org.bukkit.block.Sign;

import com.sk89q.craftbook.LocalPlayer;
import org.bukkit.block.Sign;

/**
* Factories are used to generate instances of ICs.
@@ -18,19 +18,18 @@

package com.sk89q.craftbook.ic;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.bukkit.block.Block;
import org.bukkit.block.Sign;

import com.sk89q.craftbook.AbstractMechanicFactory;
import com.sk89q.craftbook.InvalidMechanismException;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.bukkit.CircuitsPlugin;
import com.sk89q.worldedit.BlockWorldVector;
import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ICMechanicFactory extends AbstractMechanicFactory<ICMechanic> {

@@ -101,15 +100,15 @@ public ICMechanic detect(BlockWorldVector pt) throws InvalidMechanismException {
(SelfTriggeredIC) ic,
registration.getFamily(),
pt
);
);
} else {
return new ICMechanic(
plugin,
id,
ic,
registration.getFamily(),
pt
);
);
}
}

@@ -169,15 +168,15 @@ public ICMechanic detect(BlockWorldVector pt, LocalPlayer player, Sign sign)
(SelfTriggeredIC) ic,
registration.getFamily(),
pt
);
);
} else {
mechanic = new ICMechanic(
plugin,
id,
ic,
registration.getFamily(),
pt
);
);
}

sign.setLine(0, ic.getSignTitle());
@@ -21,11 +21,13 @@ public class CommonSettings {

public final String language;
public final boolean obeyCancelled;
public final boolean opPerms;

private CommonSettings(FileConfiguration cfg) {

language = getString(cfg, "language", "en_US");
obeyCancelled = getBoolean(cfg, "obey-cancelled", true);
opPerms = getBoolean(cfg, "op-perms", true);
}
}

Large diffs are not rendered by default.

@@ -55,7 +55,7 @@ public static Power isPowered(Block mech, BlockFace face) {
* @param pow
*
* @return true if the pow block is a power conductor (in CraftBook, at this time we only consider this to be
* wires).
* wires).
*/
public static boolean isPotentialPowerSource(Block pow) {

@@ -68,7 +68,7 @@ public static boolean isPotentialPowerSource(Block pow) {
* @param pow
*
* @return true if a mechanism in the mech block is able to receive power from the pow block (i.e. if it's a
* power conductor and if it has a sense of directionality it is also pointing at mech).
* power conductor and if it has a sense of directionality it is also pointing at mech).
*/
public static boolean isPotentialPowerSource(Block mech, Block pow) {

@@ -18,21 +18,22 @@

package com.sk89q.craftbook.bukkit;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Logger;

import com.sk89q.craftbook.BaseConfiguration;
import com.sk89q.craftbook.LanguageManager;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.wepif.PermissionsResolverManager;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import com.sk89q.craftbook.BaseConfiguration;
import com.sk89q.craftbook.LanguageManager;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.wepif.PermissionsResolverManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Logger;

/**
* Base plugin class for CraftBook for child CraftBook plugins.
@@ -181,16 +182,30 @@ public LocalPlayer wrap(Player player) {
*/
public boolean hasPermission(CommandSender sender, String perm) {

if (sender.isOp()) {
if (!(sender instanceof Player)) {
return ((sender.isOp() && (config.commonSettings.opPerms || sender instanceof ConsoleCommandSender))
|| perms.hasPermission(sender.getName(), perm));
}
return hasPermission(sender, ((Player) sender).getWorld(), perm);
}

public boolean hasPermission(CommandSender sender, World world, String perm) {

if ((sender.isOp() && config.commonSettings.opPerms) || sender instanceof ConsoleCommandSender) {
return true;
}

// Invoke the permissions resolver
return sender instanceof Player && perms.hasPermission(sender.getName(), perm);
if (sender instanceof Player) {
Player player = (Player) sender;
return perms.hasPermission(world.getName(), player.getName(), perm);
}

return false;
}

public boolean isInGroup(String player, String group) {

return perms.inGroup(player, group);
}

@@ -2,7 +2,6 @@

import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldedit.blocks.ItemID;
import org.bukkit.Material;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
@@ -50,71 +49,64 @@ public static boolean isStackValid(ItemStack item) {
return item != null && item.getAmount() > 0 && item.getTypeId() > 0;
}

public static boolean isItemSmeltable(ItemStack item, Boolean foodOnly) {
public static boolean isCookable(ItemStack item) {

if (foodOnly == null || foodOnly) {
if (item.getType() == Material.RAW_BEEF) return true;
if (item.getType() == Material.RAW_CHICKEN) return true;
if (item.getType() == Material.RAW_FISH) return true;
if (item.getType() == Material.PORK) return true;
return getCookedResult(item) != null;
}

public static ItemStack getCookedResult(ItemStack item) {

switch (item.getTypeId()) {
case ItemID.RAW_BEEF:
return new ItemStack(ItemID.COOKED_BEEF);
case ItemID.RAW_CHICKEN:
return new ItemStack(ItemID.COOKED_CHICKEN);
case ItemID.RAW_FISH:
return new ItemStack(ItemID.COOKED_FISH);
case ItemID.RAW_PORKCHOP:
return new ItemStack(ItemID.COOKED_PORKCHOP);
default:
return null;
}
if (foodOnly == null || !foodOnly) {
if (item.getType() == Material.IRON_ORE) return true;
if (item.getType() == Material.GOLD_ORE) return true;
if (item.getType() == Material.DIAMOND_ORE) return true;
if (item.getType() == Material.SAND) return true;
if (item.getType() == Material.CLAY_BALL) return true;
}

public static boolean isSmeltable(ItemStack item) {

return getSmeletedResult(item) != null;
}

public static ItemStack getSmeletedResult(ItemStack item) {

switch (item.getTypeId()) {
case BlockID.IRON_ORE:
return new ItemStack(ItemID.IRON_BAR);
case BlockID.GOLD_ORE:
return new ItemStack(ItemID.GOLD_BAR);
case BlockID.DIAMOND_ORE:
return new ItemStack(ItemID.DIAMOND);
case BlockID.SAND:
return new ItemStack(BlockID.GLASS);
case ItemID.CLAY_BALL:
return new ItemStack(ItemID.BRICK_BAR);
default:
return null;
}
return false;
}

public static boolean containsRawFood(Inventory inv) {

for (ItemStack it : inv.getContents())
if (it != null && isItemSmeltable(it, true)) return true;
if (it != null && isCookable(it)) return true;
return false;
}

public static boolean containsRawMinerals(Inventory inv) {

for (ItemStack it : inv.getContents())
if (it != null && isItemSmeltable(it, false)) return true;
if (it != null && isSmeltable(it)) return true;
return false;
}

public static ItemStack getSmeltedState(ItemStack item, Boolean foodOnly) { //foodOnly, null = anything,
// false = mineral, true = food
if (isItemSmeltable(item, null)) {
if (foodOnly == null || foodOnly) {
switch (item.getTypeId()) {
case ItemID.RAW_BEEF:
return new ItemStack(ItemID.COOKED_BEEF);
case ItemID.RAW_CHICKEN:
return new ItemStack(ItemID.COOKED_CHICKEN);
case ItemID.RAW_FISH:
return new ItemStack(ItemID.COOKED_FISH);
case ItemID.RAW_PORKCHOP:
return new ItemStack(ItemID.COOKED_PORKCHOP);
}
}
if (foodOnly == null || !foodOnly) {
switch (item.getTypeId()) {
case BlockID.IRON_ORE:
return new ItemStack(ItemID.IRON_BAR);
case BlockID.GOLD_ORE:
return new ItemStack(ItemID.GOLD_BAR);
case BlockID.DIAMOND_ORE:
return new ItemStack(ItemID.DIAMOND);
case BlockID.SAND:
return new ItemStack(BlockID.GLASS);
case ItemID.CLAY_BALL:
return new ItemStack(ItemID.BRICK_BAR);
}
}
}
return null;
}

public static boolean isItemEdible(ItemStack item) {

return item.getType().isEdible();
@@ -1,20 +1,19 @@
package com.sk89q.craftbook.bukkit;

import java.io.IOException;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.mech.area.CopyManager;
import com.sk89q.craftbook.mech.area.CuboidCopy;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import java.io.IOException;

/**
* @author Me4502
@@ -28,6 +27,7 @@ public CommandParser(MechanismsPlugin plugin) {
this.plugin = plugin;
}

//TODO Change to fancier command system
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

@@ -40,7 +40,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
if (!(sender instanceof Player)) return false;
LocalPlayer player = plugin.wrap((Player) sender);

if(!player.hasPermission("craftbook.mech.savearea")) {
if (!player.hasPermission("craftbook.mech.savearea")) {
player.printError("You don't have permissions to use this command!");
return true;
}
@@ -58,7 +58,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
WorldEditPlugin worldEdit = (WorldEditPlugin) plugin.getServer().getPluginManager().getPlugin
("WorldEdit");

Selection sel = worldEdit.getSelection(((Player)sender));
Selection sel = worldEdit.getSelection(((Player) sender));
Vector min = BukkitUtil.toVector(sel.getMinimumPoint());
Vector max = BukkitUtil.toVector(sel.getMaximumPoint());
Vector size = max.subtract(min).add(1, 1, 1);
@@ -74,7 +74,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
// Check to make sure that a user doesn't have too many toggle
// areas (to prevent flooding the server with files)
if (plugin.getLocalConfiguration().areaSettings.maxAreasPerUser >= 0 && !namespace.equals("global")) {
int count = plugin.copyManager.meetsQuota(((Player)sender).getWorld(),
int count = plugin.copyManager.meetsQuota(((Player) sender).getWorld(),
namespace, id, plugin.getLocalConfiguration().areaSettings.maxAreasPerUser, plugin);

if (count > -1) {
@@ -88,14 +88,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St

// Copy
CuboidCopy copy = new CuboidCopy(min, size);
copy.copy(((Player)sender).getWorld());
copy.copy(((Player) sender).getWorld());

plugin.getServer().getLogger().info(player.getName() + " saving toggle area with folder '"
+ namespace + "' and ID '" + id + "'.");

// Save
try {
plugin.copyManager.save(((Player)sender).getWorld(), namespace, id, copy, plugin);
plugin.copyManager.save(((Player) sender).getWorld(), namespace, id, copy, plugin);
player.print("Area saved as '" + id + "' under the specified namespace.");
} catch (IOException e) {
player.printError("Could not save area: " + e.getMessage());
@@ -109,7 +109,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
if (!(sender instanceof Player)) return false;
LocalPlayer player = plugin.wrap((Player) sender);

if(!player.hasPermission("craftbook.mech.savensarea")) {
if (!player.hasPermission("craftbook.mech.savensarea")) {
player.printError("You don't have permissions to use this command!");
return true;
}
@@ -139,7 +139,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
WorldEditPlugin worldEdit = (WorldEditPlugin) plugin.getServer().getPluginManager().getPlugin
("WorldEdit");

Selection sel = worldEdit.getSelection((Player)sender);
Selection sel = worldEdit.getSelection((Player) sender);
Vector min = BukkitUtil.toVector(sel.getMinimumPoint());
Vector max = BukkitUtil.toVector(sel.getMaximumPoint());
Vector size = max.subtract(min).add(1, 1, 1);
@@ -155,7 +155,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
// Check to make sure that a user doesn't have too many toggle
// areas (to prevent flooding the server with files)
if (plugin.getLocalConfiguration().areaSettings.maxAreasPerUser >= 0 && !namespace.equals("global")) {
int count = plugin.copyManager.meetsQuota(((Player)sender).getWorld(),
int count = plugin.copyManager.meetsQuota(((Player) sender).getWorld(),
namespace, id, plugin.getLocalConfiguration().areaSettings.maxAreasPerUser, plugin);

if (count > -1) {
@@ -169,14 +169,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St

// Copy
CuboidCopy copy = new CuboidCopy(min, size);
copy.copy(((Player)sender).getWorld());
copy.copy(((Player) sender).getWorld());

plugin.getServer().getLogger().info(player.getName() + " saving toggle area with folder '"
+ namespace + "' and ID '" + id + "'.");

// Save
try {
plugin.copyManager.save(((Player)sender).getWorld(), namespace, id, copy, plugin);
plugin.copyManager.save(((Player) sender).getWorld(), namespace, id, copy, plugin);
player.print(ChatColor.GOLD + "Area saved as '" + id + "' under the specified namespace.");
} catch (IOException e) {
player.printError("Could not save area: " + e.getMessage());
@@ -18,37 +18,19 @@

package com.sk89q.craftbook.bukkit;

import net.milkbowl.vault.economy.Economy;

import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.RegisteredServiceProvider;

import com.sk89q.craftbook.LanguageManager;
import com.sk89q.craftbook.MechanicManager;
import com.sk89q.craftbook.MechanismsConfiguration;
import com.sk89q.craftbook.mech.Ammeter;
import com.sk89q.craftbook.mech.Bookcase;
import com.sk89q.craftbook.mech.Bridge;
import com.sk89q.craftbook.mech.Cauldron;
import com.sk89q.craftbook.mech.ChunkAnchor;
import com.sk89q.craftbook.mech.Command;
import com.sk89q.craftbook.mech.CookingPot;
import com.sk89q.craftbook.mech.CustomCrafting;
import com.sk89q.craftbook.mech.CustomDrops;
import com.sk89q.craftbook.mech.Door;
import com.sk89q.craftbook.mech.Elevator;
import com.sk89q.craftbook.mech.Gate;
import com.sk89q.craftbook.mech.HiddenSwitch;
import com.sk89q.craftbook.mech.LightSwitch;
import com.sk89q.craftbook.mech.Payment;
import com.sk89q.craftbook.mech.Snow;
import com.sk89q.craftbook.mech.Teleporter;
import com.sk89q.craftbook.mech.*;
import com.sk89q.craftbook.mech.area.Area;
import com.sk89q.craftbook.mech.area.CopyManager;
import com.sk89q.craftbook.mech.dispenser.DispenserRecipes;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.RegisteredServiceProvider;


/**
@@ -101,7 +83,7 @@ public void onEnable() {
manager.register(new Area.Factory(this));
manager.register(new Command.Factory(this));
manager.register(new ChunkAnchor.Factory(this));
//manager.register(new LightStone.Factory(this));
manager.register(new LightStone.Factory(this));
manager.register(new LightSwitch.Factory(this));
manager.register(new HiddenSwitch.Factory(this));
manager.register(new CookingPot.Factory(this));
@@ -21,6 +21,7 @@

import com.sk89q.craftbook.AbstractMechanic;
import com.sk89q.craftbook.AbstractMechanicFactory;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.bukkit.MechanismsPlugin;
import com.sk89q.worldedit.BlockWorldVector;
import com.sk89q.worldedit.blocks.BlockID;
@@ -49,7 +50,9 @@ public Ammeter(MechanismsPlugin plugin) {
@Override
public void onRightClick(PlayerInteractEvent event) {

if (!plugin.wrap(event.getPlayer()).hasPermission("craftbook.mech.ammeter.use")) {
LocalPlayer player = plugin.wrap(event.getPlayer());

if (!player.hasPermission("craftbook.mech.ammeter.use")) {
return;
}

@@ -59,7 +62,7 @@ public void onRightClick(PlayerInteractEvent event) {
BlockType.isRedstoneSource(block.getTypeId()))) {
int data = getSpecialData(block);
String line = getCurrentLine(data);
event.getPlayer().sendMessage(
player.print(
ChatColor.YELLOW + "Ammeter: " + line + ChatColor.WHITE +
" " + data + " A");
}
@@ -19,24 +19,19 @@

package com.sk89q.craftbook.mech;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Random;

import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.world.ChunkUnloadEvent;

import com.sk89q.craftbook.AbstractMechanic;
import com.sk89q.craftbook.AbstractMechanicFactory;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.bukkit.MechanismsPlugin;
import com.sk89q.worldedit.BlockWorldVector;
import com.sk89q.worldedit.blocks.BlockID;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.world.ChunkUnloadEvent;

import java.io.*;
import java.util.Random;

/**
* This mechanism allow players to read bookshelves and get a random line
@@ -132,7 +127,8 @@ public void onRightClick(PlayerInteractEvent event) {
if (!plugin.getLocalConfiguration().bookcaseSettings.enable) return;

Player player = event.getPlayer();
if (player.getItemInHand() == null || player.getItemInHand().getTypeId() == 0 || !player.getItemInHand().getType().isBlock())
if (player.getItemInHand() == null || player.getItemInHand().getTypeId() == 0 || !player.getItemInHand()
.getType().isBlock())
read(plugin.wrap(player), plugin.getLocalConfiguration().bookcaseSettings.readLine);
}

@@ -139,8 +139,8 @@ public void think() {
if (cb.getState() instanceof Chest) {
Chest chest = (Chest) cb.getState();
for (ItemStack i : chest.getInventory().getContents()) {
if (i == null || !ItemUtil.isItemSmeltable(i, true)) continue;
ItemStack cooked = ItemUtil.getSmeltedState(i, true);
if (i == null) continue;
ItemStack cooked = ItemUtil.getCookedResult(i);
if (cooked == null) continue;
chest.getInventory().addItem(new ItemStack(cooked.getType(), 1));
chest.getInventory().removeItem(new ItemStack(i.getType(), 1));
@@ -1,26 +1,17 @@
package com.sk89q.craftbook.mech;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.regex.Pattern;

import com.sk89q.craftbook.bukkit.MechanismsPlugin;
import org.bukkit.Material;
import org.bukkit.block.Furnace;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.FurnaceBurnEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.FurnaceInventory;
import org.bukkit.inventory.FurnaceRecipe;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.ShapelessRecipe;
import org.bukkit.inventory.*;

import com.sk89q.craftbook.bukkit.MechanismsPlugin;
import java.io.*;
import java.util.HashMap;
import java.util.regex.Pattern;

public class CustomCrafting implements Listener {

@@ -35,22 +26,23 @@ public CustomCrafting(MechanismsPlugin plugin) {

@EventHandler
public void onClick(InventoryClickEvent event) {
if(event.getInventory() instanceof FurnaceInventory) {
if(fuels == null || fuels.size() <= 0) return;
FurnaceInventory inv = (FurnaceInventory)event.getInventory();
if(event.getSlot() == 1 && inv.getHolder().getBurnTime() < 1 && inv.getItem(1) != null) {
if(fuels.get(inv.getItem(1).getTypeId()) > 0) {

if (event.getInventory() instanceof FurnaceInventory) {
if (fuels == null || fuels.size() <= 0) return;
FurnaceInventory inv = (FurnaceInventory) event.getInventory();
if (event.getSlot() == 1 && inv.getHolder().getBurnTime() < 1 && inv.getItem(1) != null) {
if (fuels.get(inv.getItem(1).getTypeId()) > 0) {
inv.getHolder().setBurnTime(fuels.get(inv.getItem(1).getTypeId()).shortValue());
inv.getItem(1).setAmount(inv.getItem(1).getAmount() - 1);
}
}
}
else
} else
return;
}

@EventHandler
public void onFurnaceBurn(FurnaceBurnEvent event) {

if (event.getFuel() == null) return;
if (event.getBurnTime() > 0) return;
Furnace f = (Furnace) event.getBlock().getState();
@@ -211,9 +203,9 @@ else if (lastLine.startsWith("$[")) { //Furnace Recipe
r.shape(getShapeData(items[0].split(":")[0]) + getShapeData(items[1].split(":")[0]) +
getShapeData(items[2].split(":")[0]),
getShapeData(items[3].split(":")[0]) + getShapeData(items[4].split(":")[0]) +
getShapeData(items[5].split(":")[0]),
getShapeData(items[5].split(":")[0]),
getShapeData(items[6].split(":")[0]) + getShapeData(items[7].split(":")[0]) +
getShapeData(items[8].split(":")[0]));
getShapeData(items[8].split(":")[0]));
for (String item : items) {
int iid = Integer.parseInt(item.split(":")[0]);
String idata = item.split(":")[1];
@@ -26,7 +26,7 @@ public void handleCustomBlockDrops(BlockBreakEvent event) {
if (plugin.getLocalConfiguration().commonSettings.obeyCancelled && event.isCancelled())
return;
if (plugin.getLocalConfiguration().customDropSettings.requirePermissions &&
!event.getPlayer().hasPermission("craftbook.mech.drops")) return;
!plugin.wrap(event.getPlayer()).hasPermission("craftbook.mech.drops")) return;
if (event.isCancelled()) return;
int id = event.getBlock().getTypeId();
byte data = event.getBlock().getData();
@@ -360,7 +360,7 @@ private class ToggleRegionOpen implements Runnable {
public void run() {

for (com.sk89q.worldedit.BlockVector bv : toggle) { // this package specification is something that
// needs to be fixed in the overall scheme
// needs to be fixed in the overall scheme
Block b = trigger.getWorld().getBlockAt(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ());
int oldType = 0;
if (b != null) oldType = b.getTypeId();
@@ -396,7 +396,7 @@ public ToggleRegionClosed(LocalPlayer player) {
public void run() {

for (com.sk89q.worldedit.BlockVector bv : toggle) { // this package specification is something that
// needs to be fixed in the overall scheme
// needs to be fixed in the overall scheme
Block b = trigger.getWorld().getBlockAt(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ());
if (canPassThrough(b.getTypeId())) {
if (plugin.getLocalConfiguration().mechSettings.stopDestruction) {
@@ -21,6 +21,7 @@

import com.sk89q.craftbook.AbstractMechanic;
import com.sk89q.craftbook.AbstractMechanicFactory;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.bukkit.MechanismsPlugin;
import com.sk89q.worldedit.BlockWorldVector;
import com.sk89q.worldedit.blocks.ItemID;
@@ -48,13 +49,15 @@ public LightStone(MechanismsPlugin plugin) {
@Override
public void onRightClick(PlayerInteractEvent event) {

LocalPlayer player = plugin.wrap(event.getPlayer());

if (!event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) return;
if (!event.getPlayer().hasPermission("craftbook.mech.lightstone.use")) return;
if (!player.hasPermission("craftbook.mech.lightstone.use")) return;

Block block = event.getClickedBlock().getRelative(event.getBlockFace());
if (event.getPlayer().getItemInHand().getTypeId() == ItemID.LIGHTSTONE_DUST) {
String lightLevelLine = getLightLine(block.getLightLevel());
event.getPlayer().sendMessage(
player.print(
ChatColor.YELLOW + "LightStone: [" + lightLevelLine
+ ChatColor.YELLOW + "] " + block.getLightLevel() + " L");
}
@@ -39,9 +39,11 @@ public void onPlayerInteract(PlayerInteractEvent event) {
if (plugin.getLocalConfiguration().commonSettings.obeyCancelled && event.isCancelled())
return;
LocalPlayer player = plugin.wrap(event.getPlayer());

if (!player.hasPermission("craftbook.mech.snow.place")) {
return;
}

if (!(event.getAction() == Action.RIGHT_CLICK_BLOCK)) return;
try {
if (event.getPlayer().getItemInHand().getType() == Material.SNOW_BALL
@@ -21,11 +21,9 @@
package com.sk89q.craftbook;

import com.sk89q.craftbook.access.*;
import com.sk89q.craftbook.blockbag.*;
import com.sk89q.craftbook.mech.area.CopyManager;
import com.sk89q.craftbook.util.HistoryHashMap;
import com.sk89q.craftbook.util.MinecraftUtil;
import com.sk89q.craftbook.util.Vector;

import java.util.*;
import java.util.logging.Level;
@@ -23,7 +23,6 @@
import com.sk89q.craftbook.blockbag.BlockBagException;
import com.sk89q.craftbook.blockbag.NearbyChestBlockBag;
import com.sk89q.craftbook.mech.MinecartDecayWatcher;
import com.sk89q.craftbook.util.*;

import java.util.HashMap;
import java.util.Map;
@@ -22,7 +22,6 @@
import com.sk89q.craftbook.mech.ic.plc.LogicPlcLang;
import com.sk89q.craftbook.util.BlockVector;
import com.sk89q.craftbook.util.SignText;
import com.sk89q.craftbook.util.Vector;

import java.io.DataInput;
import java.io.DataOutput;
@@ -19,11 +19,11 @@
package com.sk89q.craftbook;


import java.io.File;

import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;

import java.io.File;

/**
* FileConfiguration handler for CraftBook.
* All fields are final because it is never appropriate to modify them during
@@ -18,36 +18,25 @@

package com.sk89q.craftbook.bukkit;

import com.sk89q.craftbook.LanguageManager;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.SourcedBlockRedstoneEvent;
import com.sk89q.craftbook.VehiclesConfiguration;
import com.sk89q.craftbook.cart.CartMechanism;
import com.sk89q.craftbook.cart.MinecartManager;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
import org.bukkit.entity.Boat;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player;
import org.bukkit.entity.Vehicle;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.vehicle.VehicleCreateEvent;
import org.bukkit.event.vehicle.VehicleDestroyEvent;
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleEntityCollisionEvent;
import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.event.vehicle.*;
import org.bukkit.inventory.ItemStack;

import com.sk89q.craftbook.LanguageManager;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.SourcedBlockRedstoneEvent;
import com.sk89q.craftbook.VehiclesConfiguration;
import com.sk89q.craftbook.cart.CartMechanism;
import com.sk89q.craftbook.cart.MinecartManager;

/**
* Plugin for CraftBook's redstone additions.
*
@@ -97,6 +86,7 @@ class CraftBookVehicleListener implements Listener {
VehiclesPlugin plugin;

public CraftBookVehicleListener(VehiclesPlugin plugin) {

this.plugin = plugin;
}

@@ -115,7 +105,7 @@ public void onVehicleEntityCollision(VehicleEntityCollisionEvent event) {

if (config.minecartEnterOnImpact && (vehicle instanceof Minecart)) {
if (!vehicle.isEmpty()) return;
if(!(event.getEntity() instanceof LivingEntity)) return;
if (!(event.getEntity() instanceof LivingEntity)) return;
vehicle.setPassenger(event.getEntity());

return;
@@ -184,9 +174,9 @@ public void onVehicleExit(VehicleExitEvent event) {
VehiclesConfiguration config = getLocalConfiguration();
if (config.minecartRemoveOnExit) {
vehicle.remove();
}
else if(config.minecartDecayWhenEmpty) {
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Decay((Minecart)vehicle), config.minecartDecayTime);
} else if (config.minecartDecayWhenEmpty) {
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Decay((Minecart) vehicle),
config.minecartDecayTime);
}
}

@@ -245,6 +235,7 @@ public void onSignChange(SignChangeEvent event) {
//TODO make this method simpler :|
Sign s = (Sign) event.getBlock().getState();
LocalPlayer player = wrap(event.getPlayer());

if (s.getLine(1).equalsIgnoreCase("[deposit]") || s.getLine(1).equalsIgnoreCase("[collect]")) {
if (!player.hasPermission("craftbook.vehicles.deposit")) {
player.printError("vehicles.create-permission");
@@ -316,12 +307,14 @@ class Decay implements Runnable {
Minecart cart;

public Decay(Minecart cart) {

this.cart = cart;
}

@Override
public void run() {
if(cart.isEmpty())

if (cart.isEmpty())
cart.setDamage(41);
}

@@ -1,18 +1,18 @@
package com.sk89q.craftbook.cart;

import com.sk89q.craftbook.RedstoneUtil.Power;
import com.sk89q.craftbook.bukkit.VehiclesPlugin;
import org.bukkit.block.Sign;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player;

import com.sk89q.craftbook.RedstoneUtil.Power;
import com.sk89q.craftbook.bukkit.VehiclesPlugin;

public class CartMessager extends CartMechanism {

VehiclesPlugin plugin;

public CartMessager(VehiclesPlugin plugin) {

this.plugin = plugin;
}

@@ -23,9 +23,9 @@ public void impact(Minecart cart, CartMechanismBlocks blocks, boolean minor) {

// care?
if (cart.getPassenger() == null) return;
if(!(blocks.sign != null) && !(blocks.sign.getState() instanceof Sign)) return;
if (!(blocks.sign != null) && !(blocks.sign.getState() instanceof Sign)) return;

if(plugin.getLocalConfiguration().minecartTrackMessages == false) return;
if (plugin.getLocalConfiguration().minecartTrackMessages == false) return;

// enabled?
if (Power.OFF == isActive(blocks.rail, blocks.base, blocks.sign)) return;
@@ -35,7 +35,8 @@ public void impact(Minecart cart, CartMechanismBlocks blocks, boolean minor) {
Player p = (Player) cart.getPassenger();
Sign s = (Sign) blocks.sign.getState();
if (!s.getLine(0).equalsIgnoreCase("[print]") && !s.getLine(1).equalsIgnoreCase("[print]")) return;
if (s.getLine(1) != null && !s.getLine(1).trim().equalsIgnoreCase("") && !s.getLine(1).equalsIgnoreCase("[print]"))
if (s.getLine(1) != null && !s.getLine(1).trim().equalsIgnoreCase("") && !s.getLine(1).equalsIgnoreCase
("[print]"))
p.sendMessage(s.getLine(1).trim());
if (s.getLine(2) != null && !s.getLine(2).trim().equalsIgnoreCase(""))
p.sendMessage(s.getLine(2).trim());
@@ -46,7 +47,7 @@ public void impact(Minecart cart, CartMechanismBlocks blocks, boolean minor) {

@Override
public void enter(Minecart cart, Entity entity, CartMechanismBlocks blocks,
boolean minor) {
boolean minor) {

}
}
@@ -82,7 +82,8 @@ public void enter(Minecart cart, Entity entity, CartMechanismBlocks blocks,
l.setZ(l.getZ() + 0.5);
if (!cart.getLocation().equals(l))
cart.teleport(l);
// recentering and parking almost completely prevents more than one cart from getting onto the same station.
// recentering and parking almost completely prevents more than one cart from getting onto the same
// station.
break;
}
}
@@ -1,8 +1,8 @@
package com.sk89q.craftbook.cart;

import java.util.EnumMap;
import java.util.Map;

import com.sk89q.craftbook.InvalidMechanismException;
import com.sk89q.craftbook.VehiclesConfiguration;
import com.sk89q.craftbook.bukkit.VehiclesPlugin;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -11,9 +11,8 @@
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleMoveEvent;

import com.sk89q.craftbook.InvalidMechanismException;
import com.sk89q.craftbook.VehiclesConfiguration;
import com.sk89q.craftbook.bukkit.VehiclesPlugin;
import java.util.EnumMap;
import java.util.Map;

public class MinecartManager {

@@ -56,8 +55,8 @@ public void impact(VehicleMoveEvent event) {
Location to = event.getTo();
boolean crossesBlockBoundary =
from.getBlockX() == to.getBlockX()
&& from.getBlockY() == to.getBlockY()
&& from.getBlockZ() == to.getBlockZ();
&& from.getBlockY() == to.getBlockY()
&& from.getBlockZ() == to.getBlockZ();
thingy.impact((Minecart) event.getVehicle(), cmb, crossesBlockBoundary);
}
} catch (InvalidMechanismException ignored) {
@@ -76,8 +75,8 @@ public void enter(VehicleEnterEvent event) {
Location from = event.getEntered().getLocation();
boolean crossesBlockBoundary =
from.getBlockX() == to.getBlockX()
&& from.getBlockY() == to.getBlockY()
&& from.getBlockZ() == to.getBlockZ();
&& from.getBlockY() == to.getBlockY()
&& from.getBlockZ() == to.getBlockZ();
thingy.enter((Minecart) event.getVehicle(), event.getEntered(), cmb, crossesBlockBoundary);
}
} catch (InvalidMechanismException ignored) {