This commit is contained in:
Shevchik 2014-03-06 21:35:14 +04:00
parent 28e483267d
commit e838c79941
13 changed files with 751 additions and 750 deletions

View File

@ -17,69 +17,69 @@ import com.cnaude.chairs.core.Chairs;
*/ */
public class ChairsCommand implements CommandExecutor { public class ChairsCommand implements CommandExecutor {
private final Chairs plugin; private final Chairs plugin;
public ChairsIgnoreList ignoreList; public ChairsIgnoreList ignoreList;
public ChairsCommand(Chairs instance, ChairsIgnoreList ignoreList) { public ChairsCommand(Chairs instance, ChairsIgnoreList ignoreList) {
this.plugin = instance; this.plugin = instance;
this.ignoreList = ignoreList; this.ignoreList = ignoreList;
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length == 0) { if (args.length == 0) {
return false; return false;
} }
if (args[0].equalsIgnoreCase("reload")) { if (args[0].equalsIgnoreCase("reload")) {
if (sender.hasPermission("chairs.reload") || !(sender instanceof Player)) { if (sender.hasPermission("chairs.reload") || !(sender instanceof Player)) {
plugin.loadConfig(); plugin.loadConfig();
if (plugin.sitHealEnabled) { if (plugin.sitHealEnabled) {
plugin.chairEffects.restartHealing(); plugin.chairEffects.restartHealing();
} else { } else {
plugin.chairEffects.cancelHealing(); plugin.chairEffects.cancelHealing();
} }
if (plugin.sitPickupEnabled) { if (plugin.sitPickupEnabled) {
plugin.chairEffects.restartPickup(); plugin.chairEffects.restartPickup();
} else { } else {
plugin.chairEffects.cancelPickup(); plugin.chairEffects.cancelPickup();
} }
if (!plugin.msgReloaded.isEmpty()) { if (!plugin.msgReloaded.isEmpty()) {
sender.sendMessage(plugin.msgReloaded); sender.sendMessage(plugin.msgReloaded);
} }
} else { } else {
if (!plugin.msgNoPerm.isEmpty()) { if (!plugin.msgNoPerm.isEmpty()) {
sender.sendMessage(plugin.msgNoPerm); sender.sendMessage(plugin.msgNoPerm);
} }
} }
} }
if (sender instanceof Player) { if (sender instanceof Player) {
Player p = (Player) sender; Player p = (Player) sender;
if (args[0].equalsIgnoreCase("on")) { if (args[0].equalsIgnoreCase("on")) {
if (p.hasPermission("chairs.self")) { if (p.hasPermission("chairs.self")) {
ignoreList.removePlayer(p.getName()); ignoreList.removePlayer(p.getName());
if (!plugin.msgEnabled.isEmpty()) { if (!plugin.msgEnabled.isEmpty()) {
p.sendMessage(plugin.msgEnabled); p.sendMessage(plugin.msgEnabled);
} }
} else { } else {
if (!plugin.msgNoPerm.isEmpty()) { if (!plugin.msgNoPerm.isEmpty()) {
p.sendMessage(plugin.msgNoPerm); p.sendMessage(plugin.msgNoPerm);
} }
} }
} }
if (args[0].equalsIgnoreCase("off")) { if (args[0].equalsIgnoreCase("off")) {
if (p.hasPermission("chairs.self")) { if (p.hasPermission("chairs.self")) {
ignoreList.addPlayer(p.getName()); ignoreList.addPlayer(p.getName());
if (!plugin.msgDisabled.isEmpty()) { if (!plugin.msgDisabled.isEmpty()) {
p.sendMessage(plugin.msgDisabled); p.sendMessage(plugin.msgDisabled);
} }
} else { } else {
if (!plugin.msgNoPerm.isEmpty()) { if (!plugin.msgNoPerm.isEmpty()) {
p.sendMessage(plugin.msgNoPerm); p.sendMessage(plugin.msgNoPerm);
} }
} }
} }
} }
return true; return true;
} }
} }

View File

@ -20,67 +20,67 @@ import com.cnaude.chairs.core.Chairs;
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class ChairsIgnoreList implements Serializable{ public class ChairsIgnoreList implements Serializable{
private static ArrayList<String> ignoreList = new ArrayList<String>(); private static ArrayList<String> ignoreList = new ArrayList<String>();
private static final String IGNORE_FILE = "plugins/Chairs/ignores.ser"; private static final String IGNORE_FILE = "plugins/Chairs/ignores.ser";
private Chairs plugin; private Chairs plugin;
public ChairsIgnoreList(Chairs plugin) public ChairsIgnoreList(Chairs plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void load() { public void load() {
File file = new File(IGNORE_FILE); File file = new File(IGNORE_FILE);
if (!file.exists()) { if (!file.exists()) {
plugin.logInfo("Ignore file '"+file.getAbsolutePath()+"' does not exist."); plugin.logInfo("Ignore file '"+file.getAbsolutePath()+"' does not exist.");
return; return;
} }
try { try {
FileInputStream f_in = new FileInputStream(file); FileInputStream f_in = new FileInputStream(file);
ObjectInputStream obj_in = new ObjectInputStream (f_in); ObjectInputStream obj_in = new ObjectInputStream (f_in);
ignoreList = (ArrayList<String>) obj_in.readObject(); ignoreList = (ArrayList<String>) obj_in.readObject();
obj_in.close(); obj_in.close();
plugin.logInfo("Loaded ignore list. (Count = "+ignoreList.size()+")"); plugin.logInfo("Loaded ignore list. (Count = "+ignoreList.size()+")");
} }
catch(Exception e) { catch(Exception e) {
plugin.logError(e.getMessage()); plugin.logError(e.getMessage());
} }
} }
public void save() { public void save() {
try { try {
File file = new File(IGNORE_FILE); File file = new File(IGNORE_FILE);
FileOutputStream f_out = new FileOutputStream (file); FileOutputStream f_out = new FileOutputStream (file);
ObjectOutputStream obj_out = new ObjectOutputStream (f_out); ObjectOutputStream obj_out = new ObjectOutputStream (f_out);
obj_out.writeObject (ignoreList); obj_out.writeObject (ignoreList);
obj_out.close(); obj_out.close();
plugin.logInfo("Saved ignore list. (Count = "+ignoreList.size()+")"); plugin.logInfo("Saved ignore list. (Count = "+ignoreList.size()+")");
} }
catch(Exception e) { catch(Exception e) {
plugin.logError(e.getMessage()); plugin.logError(e.getMessage());
} }
} }
public void addPlayer(String s) { public void addPlayer(String s) {
if (ignoreList.contains(s)) { if (ignoreList.contains(s)) {
return; return;
} }
//Chairs.get().logInfo("Adding " + s + " to ignore list."); //Chairs.get().logInfo("Adding " + s + " to ignore list.");
ignoreList.add(s); ignoreList.add(s);
} }
public void removePlayer(String s) { public void removePlayer(String s) {
//Chairs.get().logInfo("Removing " + s + " from ignore list."); //Chairs.get().logInfo("Removing " + s + " from ignore list.");
ignoreList.remove(s); ignoreList.remove(s);
} }
public boolean isIgnored(String s) { public boolean isIgnored(String s) {
if (ignoreList.contains(s)) { if (ignoreList.contains(s)) {
return true; return true;
} }
else { else {
return false; return false;
} }
} }
} }

View File

@ -11,20 +11,20 @@ import org.bukkit.Material;
* @author cnaude * @author cnaude
*/ */
public class ChairBlock { public class ChairBlock {
private Material mat; private Material mat;
private double sitHeight; private double sitHeight;
public ChairBlock(Material m, double s) { public ChairBlock(Material m, double s) {
mat = m; mat = m;
sitHeight = s; sitHeight = s;
} }
public Material getMat() { public Material getMat() {
return mat; return mat;
} }
public double getSitHeight() { public double getSitHeight() {
return sitHeight; return sitHeight;
} }
} }

View File

@ -25,153 +25,153 @@ import com.cnaude.chairs.sitaddons.CommandRestrict;
import com.cnaude.chairs.vehiclearrow.NMSAccess; import com.cnaude.chairs.vehiclearrow.NMSAccess;
public class Chairs extends JavaPlugin { public class Chairs extends JavaPlugin {
public ChairEffects chairEffects; public ChairEffects chairEffects;
public List<ChairBlock> allowedBlocks; public List<ChairBlock> allowedBlocks;
public List<Material> validSigns; public List<Material> validSigns;
public boolean autoRotate, signCheck, notifyplayer; public boolean autoRotate, signCheck, notifyplayer;
public boolean ignoreIfBlockInHand; public boolean ignoreIfBlockInHand;
public double distance; public double distance;
public HashSet<String> disabledRegions = new HashSet<String>(); public HashSet<String> disabledRegions = new HashSet<String>();
public int maxChairWidth; public int maxChairWidth;
public boolean sitHealEnabled; public boolean sitHealEnabled;
public int sitMaxHealth; public int sitMaxHealth;
public int sitHealthPerInterval; public int sitHealthPerInterval;
public int sitHealInterval; public int sitHealInterval;
public boolean sitPickupEnabled; public boolean sitPickupEnabled;
public boolean sitDisableAllCommands = false; public boolean sitDisableAllCommands = false;
public HashSet<String> sitDisabledCommands = new HashSet<String>(); public HashSet<String> sitDisabledCommands = new HashSet<String>();
private Logger log; private Logger log;
public ChairsIgnoreList ignoreList; public ChairsIgnoreList ignoreList;
public String msgSitting, msgStanding, msgOccupied, msgNoPerm, msgReloaded, msgDisabled, msgEnabled, msgCommandRestricted; public String msgSitting, msgStanding, msgOccupied, msgNoPerm, msgReloaded, msgDisabled, msgEnabled, msgCommandRestricted;
private PlayerSitData psitdata; private PlayerSitData psitdata;
public PlayerSitData getPlayerSitData() { public PlayerSitData getPlayerSitData() {
return psitdata; return psitdata;
} }
private NMSAccess nmsaccess = new NMSAccess(); private NMSAccess nmsaccess = new NMSAccess();
protected NMSAccess getNMSAccess() { protected NMSAccess getNMSAccess() {
return nmsaccess; return nmsaccess;
} }
@Override @Override
public void onEnable() { public void onEnable() {
log = this.getLogger(); log = this.getLogger();
try { try {
nmsaccess.setupVehicleArrow(); nmsaccess.setupVehicleArrow();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.severe("Failed to generate VehicleArrow class, exiting"); log.severe("Failed to generate VehicleArrow class, exiting");
getServer().getPluginManager().disablePlugin(this); getServer().getPluginManager().disablePlugin(this);
return; return;
} }
chairEffects = new ChairEffects(this); chairEffects = new ChairEffects(this);
ignoreList = new ChairsIgnoreList(this); ignoreList = new ChairsIgnoreList(this);
ignoreList.load(); ignoreList.load();
psitdata = new PlayerSitData(this); psitdata = new PlayerSitData(this);
getConfig().options().copyDefaults(true); getConfig().options().copyDefaults(true);
saveConfig(); saveConfig();
loadConfig(); loadConfig();
if (sitHealEnabled) { if (sitHealEnabled) {
chairEffects.startHealing(); chairEffects.startHealing();
} }
if (sitPickupEnabled) { if (sitPickupEnabled) {
chairEffects.startPickup(); chairEffects.startPickup();
} }
getServer().getPluginManager().registerEvents(new NANLoginListener(), this); getServer().getPluginManager().registerEvents(new NANLoginListener(), this);
getServer().getPluginManager().registerEvents(new TrySitEventListener(this, ignoreList), this); getServer().getPluginManager().registerEvents(new TrySitEventListener(this, ignoreList), this);
getServer().getPluginManager().registerEvents(new TryUnsitEventListener(this), this); getServer().getPluginManager().registerEvents(new TryUnsitEventListener(this), this);
getServer().getPluginManager().registerEvents(new CommandRestrict(this), this); getServer().getPluginManager().registerEvents(new CommandRestrict(this), this);
getCommand("chairs").setExecutor(new ChairsCommand(this, ignoreList)); getCommand("chairs").setExecutor(new ChairsCommand(this, ignoreList));
new ChairsAPI(getPlayerSitData()); new ChairsAPI(getPlayerSitData());
} }
@Override @Override
public void onDisable() { public void onDisable() {
for (Player player : getServer().getOnlinePlayers()) { for (Player player : getServer().getOnlinePlayers()) {
if (psitdata.isSitting(player)) { if (psitdata.isSitting(player)) {
psitdata.unsitPlayerNow(player); psitdata.unsitPlayerNow(player);
} }
} }
if (ignoreList != null) { if (ignoreList != null) {
ignoreList.save(); ignoreList.save();
} }
if (chairEffects != null) { if (chairEffects != null) {
chairEffects.cancelHealing(); chairEffects.cancelHealing();
chairEffects.cancelPickup(); chairEffects.cancelPickup();
chairEffects = null; chairEffects = null;
} }
log = null; log = null;
nmsaccess = null; nmsaccess = null;
psitdata = null; psitdata = null;
} }
public void loadConfig() { public void loadConfig() {
FileConfiguration config = YamlConfiguration.loadConfiguration(new File(this.getDataFolder(),"config.yml")); FileConfiguration config = YamlConfiguration.loadConfiguration(new File(this.getDataFolder(),"config.yml"));
autoRotate = config.getBoolean("auto-rotate"); autoRotate = config.getBoolean("auto-rotate");
signCheck = config.getBoolean("sign-check"); signCheck = config.getBoolean("sign-check");
distance = config.getDouble("distance"); distance = config.getDouble("distance");
maxChairWidth = config.getInt("max-chair-width"); maxChairWidth = config.getInt("max-chair-width");
notifyplayer = config.getBoolean("notify-player"); notifyplayer = config.getBoolean("notify-player");
ignoreIfBlockInHand = config.getBoolean("ignore-if-item-in-hand"); ignoreIfBlockInHand = config.getBoolean("ignore-if-item-in-hand");
disabledRegions = new HashSet<String>(config.getStringList("disabledWGRegions")); disabledRegions = new HashSet<String>(config.getStringList("disabledWGRegions"));
sitHealEnabled = config.getBoolean("sit-effects.healing.enabled", false); sitHealEnabled = config.getBoolean("sit-effects.healing.enabled", false);
sitHealInterval = config.getInt("sit-effects.healing.interval",20); sitHealInterval = config.getInt("sit-effects.healing.interval",20);
sitMaxHealth = config.getInt("sit-effects.healing.max-percent",100); sitMaxHealth = config.getInt("sit-effects.healing.max-percent",100);
sitHealthPerInterval = config.getInt("sit-effects.healing.amount",1); sitHealthPerInterval = config.getInt("sit-effects.healing.amount",1);
sitPickupEnabled = config.getBoolean("sit-effects.itempickup.enabled", false); sitPickupEnabled = config.getBoolean("sit-effects.itempickup.enabled", false);
sitDisableAllCommands = config.getBoolean("sit-restrictions.commands.all"); sitDisableAllCommands = config.getBoolean("sit-restrictions.commands.all");
sitDisabledCommands = new HashSet<String>(config.getStringList("sit-restrictions.commands.list")); sitDisabledCommands = new HashSet<String>(config.getStringList("sit-restrictions.commands.list"));
msgSitting = ChatColor.translateAlternateColorCodes('&',config.getString("messages.sitting")); msgSitting = ChatColor.translateAlternateColorCodes('&',config.getString("messages.sitting"));
msgStanding = ChatColor.translateAlternateColorCodes('&',config.getString("messages.standing")); msgStanding = ChatColor.translateAlternateColorCodes('&',config.getString("messages.standing"));
msgOccupied = ChatColor.translateAlternateColorCodes('&',config.getString("messages.occupied")); msgOccupied = ChatColor.translateAlternateColorCodes('&',config.getString("messages.occupied"));
msgNoPerm = ChatColor.translateAlternateColorCodes('&',config.getString("messages.no-permission")); msgNoPerm = ChatColor.translateAlternateColorCodes('&',config.getString("messages.no-permission"));
msgEnabled = ChatColor.translateAlternateColorCodes('&',config.getString("messages.enabled")); msgEnabled = ChatColor.translateAlternateColorCodes('&',config.getString("messages.enabled"));
msgDisabled = ChatColor.translateAlternateColorCodes('&',config.getString("messages.disabled")); msgDisabled = ChatColor.translateAlternateColorCodes('&',config.getString("messages.disabled"));
msgReloaded = ChatColor.translateAlternateColorCodes('&',config.getString("messages.reloaded")); msgReloaded = ChatColor.translateAlternateColorCodes('&',config.getString("messages.reloaded"));
msgCommandRestricted = ChatColor.translateAlternateColorCodes('&',config.getString("messages.command-restricted")); msgCommandRestricted = ChatColor.translateAlternateColorCodes('&',config.getString("messages.command-restricted"));
allowedBlocks = new ArrayList<ChairBlock>(); allowedBlocks = new ArrayList<ChairBlock>();
for (String s : config.getStringList("sit-blocks")) { for (String s : config.getStringList("sit-blocks")) {
String type; String type;
double sh = 0.7; double sh = 0.7;
String tmp[] = s.split("[:]"); String tmp[] = s.split("[:]");
type = tmp[0]; type = tmp[0];
if (tmp.length == 2) { if (tmp.length == 2) {
sh = Double.parseDouble(tmp[1]); sh = Double.parseDouble(tmp[1]);
} }
Material mat = Material.matchMaterial(type); Material mat = Material.matchMaterial(type);
if (mat != null) { if (mat != null) {
logInfo("Allowed block: " + mat.toString() + " => " + sh); logInfo("Allowed block: " + mat.toString() + " => " + sh);
allowedBlocks.add(new ChairBlock(mat,sh)); allowedBlocks.add(new ChairBlock(mat,sh));
} else { } else {
logError("Invalid block: " + type); logError("Invalid block: " + type);
} }
} }
validSigns = new ArrayList<Material>(); validSigns = new ArrayList<Material>();
for (String type : config.getStringList("valid-signs")) { for (String type : config.getStringList("valid-signs")) {
try { try {
validSigns.add(Material.matchMaterial(type)); validSigns.add(Material.matchMaterial(type));
} }
catch (Exception e) { catch (Exception e) {
logError(e.getMessage()); logError(e.getMessage());
} }
} }
} }
public void logInfo(String _message) { public void logInfo(String _message) {
log.log(Level.INFO, _message); log.log(Level.INFO, _message);
} }
public void logError(String _message) { public void logError(String _message) {
log.log(Level.SEVERE, _message); log.log(Level.SEVERE, _message);
} }
} }

View File

@ -30,39 +30,39 @@ public class PlayerSitData {
public Player getPlayerOnChair(Block chair) { public Player getPlayerOnChair(Block chair) {
return Bukkit.getPlayerExact(sitblock.get(chair)); return Bukkit.getPlayerExact(sitblock.get(chair));
} }
public void sitPlayer(Player player, Location sitlocation) { public void sitPlayer(Player player, Location sitlocation) {
try { try {
if (plugin.notifyplayer) { if (plugin.notifyplayer) {
player.sendMessage(plugin.msgSitting); player.sendMessage(plugin.msgSitting);
} }
Block block = sitlocation.getBlock(); Block block = sitlocation.getBlock();
sitstopteleportloc.put(player.getName(), player.getLocation()); sitstopteleportloc.put(player.getName(), player.getLocation());
player.teleport(sitlocation); player.teleport(sitlocation);
Location arrowloc = block.getLocation().add(0.5, 0 , 0.5); Location arrowloc = block.getLocation().add(0.5, 0 , 0.5);
Entity arrow = sitPlayerOnArrow(player, arrowloc); Entity arrow = sitPlayerOnArrow(player, arrowloc);
sit.put(player.getName(), arrow); sit.put(player.getName(), arrow);
sitblock.put(block, player.getName()); sitblock.put(block, player.getName());
sitblockbr.put(player.getName(), block); sitblockbr.put(player.getName(), block);
startReSitTask(player); startReSitTask(player);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
public void startReSitTask(final Player player) { public void startReSitTask(final Player player) {
int task = int task =
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
reSitPlayer(player); reSitPlayer(player);
} }
},1000,1000); },1000,1000);
sittask.put(player.getName(), task); sittask.put(player.getName(), task);
} }
public void reSitPlayer(final Player player) { public void reSitPlayer(final Player player) {
try { try {
final Entity prevarrow = sit.get(player.getName()); final Entity prevarrow = sit.get(player.getName());
sit.remove(player.getName()); sit.remove(player.getName());
player.eject(); player.eject();
Block block = sitblockbr.get(player.getName()); Block block = sitblockbr.get(player.getName());
Location arrowloc = block.getLocation().add(0.5, 0 , 0.5); Location arrowloc = block.getLocation().add(0.5, 0 , 0.5);
Entity arrow = sitPlayerOnArrow(player, arrowloc); Entity arrow = sitPlayerOnArrow(player, arrowloc);
@ -73,51 +73,51 @@ public class PlayerSitData {
prevarrow.remove(); prevarrow.remove();
} }
},100); },100);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private Entity sitPlayerOnArrow(Player player, Location arrowloc) throws NoSuchMethodException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException { private Entity sitPlayerOnArrow(Player player, Location arrowloc) throws NoSuchMethodException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException {
Entity arrow = plugin.getNMSAccess().spawnArrow(arrowloc); Entity arrow = plugin.getNMSAccess().spawnArrow(arrowloc);
arrow.setPassenger(player); arrow.setPassenger(player);
return arrow; return arrow;
} }
public void unsitPlayerNormal(Player player) { public void unsitPlayerNormal(Player player) {
unsitPlayer(player, false, true, false); unsitPlayer(player, false, true, false);
} }
public void unsitPlayerForce(Player player) { public void unsitPlayerForce(Player player) {
unsitPlayer(player, true, true, false); unsitPlayer(player, true, true, false);
} }
public void unsitPlayerNow(Player player) { public void unsitPlayerNow(Player player) {
unsitPlayer(player, true, false, true); unsitPlayer(player, true, false, true);
} }
private void unsitPlayer(final Player player, boolean eject, boolean restoreposition, boolean correctleaveposition) { private void unsitPlayer(final Player player, boolean eject, boolean restoreposition, boolean correctleaveposition) {
final Entity arrow = sit.get(player.getName()); final Entity arrow = sit.get(player.getName());
sit.remove(player.getName()); sit.remove(player.getName());
if (eject) { if (eject) {
player.eject(); player.eject();
} }
arrow.remove(); arrow.remove();
final Location tploc = sitstopteleportloc.get(player.getName()); final Location tploc = sitstopteleportloc.get(player.getName());
if (restoreposition) { if (restoreposition) {
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
player.teleport(tploc); player.teleport(tploc);
player.setSneaking(false); player.setSneaking(false);
} }
},1); },1);
} else if (correctleaveposition) { } else if (correctleaveposition) {
player.teleport(tploc); player.teleport(tploc);
} }
sitblock.remove(sitblockbr.get(player.getName())); sitblock.remove(sitblockbr.get(player.getName()));
sitblockbr.remove(player.getName()); sitblockbr.remove(player.getName());
sitstopteleportloc.remove(player.getName()); sitstopteleportloc.remove(player.getName());
Bukkit.getScheduler().cancelTask(sittask.get(player.getName())); Bukkit.getScheduler().cancelTask(sittask.get(player.getName()));
sittask.remove(player.getName()); sittask.remove(player.getName());
if (plugin.notifyplayer) { if (plugin.notifyplayer) {
player.sendMessage(plugin.msgStanding); player.sendMessage(plugin.msgStanding);
} }
} }
} }

View File

@ -14,5 +14,5 @@ public class ChairsAPI {
public static boolean isSitting(Player player) { public static boolean isSitting(Player player) {
return pdata.isSitting(player); return pdata.isSitting(player);
} }
} }

View File

@ -23,282 +23,282 @@ import com.cnaude.chairs.pluginhooks.WGHook;
public class TrySitEventListener implements Listener { public class TrySitEventListener implements Listener {
public Chairs plugin; public Chairs plugin;
public ChairsIgnoreList ignoreList; public ChairsIgnoreList ignoreList;
public TrySitEventListener(Chairs plugin, ChairsIgnoreList ignoreList) { public TrySitEventListener(Chairs plugin, ChairsIgnoreList ignoreList) {
this.plugin = plugin; this.plugin = plugin;
this.ignoreList = ignoreList; this.ignoreList = ignoreList;
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Block block = event.getClickedBlock(); Block block = event.getClickedBlock();
if (sitAllowed(player, block)) { if (sitAllowed(player, block)) {
event.setCancelled(true); event.setCancelled(true);
Location sitLocation = getSitLocation(block, player.getLocation().getYaw()); Location sitLocation = getSitLocation(block, player.getLocation().getYaw());
plugin.getPlayerSitData().sitPlayer(player, sitLocation); plugin.getPlayerSitData().sitPlayer(player, sitLocation);
} }
} }
} }
private boolean sitAllowed(Player player, Block block) { private boolean sitAllowed(Player player, Block block) {
// Check for permissions // Check for permissions
if (!player.hasPermission("chairs.sit")) { if (!player.hasPermission("chairs.sit")) {
return false; return false;
} }
// Check for already sitting // Check for already sitting
if (isSitting(player)) { if (isSitting(player)) {
return false; return false;
} }
// Check for item in hand // Check for item in hand
if (plugin.ignoreIfBlockInHand && player.getItemInHand().getType() != Material.AIR) { if (plugin.ignoreIfBlockInHand && player.getItemInHand().getType() != Material.AIR) {
return false; return false;
} }
// Check for sneaking // Check for sneaking
if (player.isSneaking()) { if (player.isSneaking()) {
return false; return false;
} }
// Check for /chairs off // Check for /chairs off
if (ignoreList.isIgnored(player.getName())) { if (ignoreList.isIgnored(player.getName())) {
return false; return false;
} }
// Sit occupied check // Sit occupied check
if (plugin.getPlayerSitData().isBlockOccupied(block)) { if (plugin.getPlayerSitData().isBlockOccupied(block)) {
player.sendMessage(plugin.msgOccupied.replace("%PLAYER%", plugin.getPlayerSitData().getPlayerOnChair(block).getName())); player.sendMessage(plugin.msgOccupied.replace("%PLAYER%", plugin.getPlayerSitData().getPlayerOnChair(block).getName()));
return false; return false;
} }
// Region allowance check // Region allowance check
if (!WGHook.isAllowedInRegion(plugin.disabledRegions, block.getLocation())) { if (!WGHook.isAllowedInRegion(plugin.disabledRegions, block.getLocation())) {
return false; return false;
} }
Stairs stairs = null; Stairs stairs = null;
Step step = null; Step step = null;
WoodenStep wStep = null; WoodenStep wStep = null;
// Check for block is chair // Check for block is chair
if ( if (
isValidChair(block) || isValidChair(block) ||
( (
!player.hasPermission("chairs.sit.antiopcheck") && !player.hasPermission("chairs.sit.antiopcheck") &&
player.hasPermission("chairs.sit." + block.getType().toString()) player.hasPermission("chairs.sit." + block.getType().toString())
) )
) )
{ {
if (block.getState().getData() instanceof Stairs) { if (block.getState().getData() instanceof Stairs) {
stairs = (Stairs) block.getState().getData(); stairs = (Stairs) block.getState().getData();
} else if (block.getState().getData() instanceof Step) { } else if (block.getState().getData() instanceof Step) {
step = (Step) block.getState().getData(); step = (Step) block.getState().getData();
} else if (block.getState().getData() instanceof WoodenStep) { } else if (block.getState().getData() instanceof WoodenStep) {
wStep = (WoodenStep) block.getState().getData(); wStep = (WoodenStep) block.getState().getData();
} }
int chairwidth = 1; int chairwidth = 1;
// Check if block beneath chair is solid. // Check if block beneath chair is solid.
if (block.getRelative(BlockFace.DOWN).isLiquid()) { if (block.getRelative(BlockFace.DOWN).isLiquid()) {
return false; return false;
} }
if (block.getRelative(BlockFace.DOWN).isEmpty()) { if (block.getRelative(BlockFace.DOWN).isEmpty()) {
return false; return false;
} }
if (!block.getRelative(BlockFace.DOWN).getType().isSolid()) { if (!block.getRelative(BlockFace.DOWN).getType().isSolid()) {
return false; return false;
} }
// Check for distance distance between player and chair. // Check for distance distance between player and chair.
if (plugin.distance > 0 && player.getLocation().distance(block.getLocation().add(0.5, 0, 0.5)) > plugin.distance) { if (plugin.distance > 0 && player.getLocation().distance(block.getLocation().add(0.5, 0, 0.5)) > plugin.distance) {
return false; return false;
} }
// Check if block is inverted // Check if block is inverted
if (stairs != null && stairs.isInverted()) { if (stairs != null && stairs.isInverted()) {
return false; return false;
} }
if (step != null && step.isInverted()) { if (step != null && step.isInverted()) {
return false; return false;
} }
if (wStep != null && wStep.isInverted()) { if (wStep != null && wStep.isInverted()) {
return false; return false;
} }
// Check for signs (only for stairs) // Check for signs (only for stairs)
if (plugin.signCheck && stairs != null) { if (plugin.signCheck && stairs != null) {
boolean sign1 = false; boolean sign1 = false;
boolean sign2 = false; boolean sign2 = false;
if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) { if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) {
sign1 = checkSign(block, BlockFace.EAST) || checkFrame(block, BlockFace.EAST, player); sign1 = checkSign(block, BlockFace.EAST) || checkFrame(block, BlockFace.EAST, player);
sign2 = checkSign(block, BlockFace.WEST) || checkFrame(block, BlockFace.WEST, player); sign2 = checkSign(block, BlockFace.WEST) || checkFrame(block, BlockFace.WEST, player);
} else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) { } else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) {
sign1 = checkSign(block, BlockFace.NORTH) || checkFrame(block, BlockFace.NORTH, player); sign1 = checkSign(block, BlockFace.NORTH) || checkFrame(block, BlockFace.NORTH, player);
sign2 = checkSign(block, BlockFace.SOUTH) || checkFrame(block, BlockFace.SOUTH, player); sign2 = checkSign(block, BlockFace.SOUTH) || checkFrame(block, BlockFace.SOUTH, player);
} }
if (!(sign1 && sign2)) { if (!(sign1 && sign2)) {
return false; return false;
} }
} }
// Check for maximal chair width (only for stairs) // Check for maximal chair width (only for stairs)
if (plugin.maxChairWidth > 0 && stairs != null) { if (plugin.maxChairWidth > 0 && stairs != null) {
if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) { if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) {
chairwidth += getChairWidth(block, BlockFace.EAST); chairwidth += getChairWidth(block, BlockFace.EAST);
chairwidth += getChairWidth(block, BlockFace.WEST); chairwidth += getChairWidth(block, BlockFace.WEST);
} else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) { } else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) {
chairwidth += getChairWidth(block, BlockFace.NORTH); chairwidth += getChairWidth(block, BlockFace.NORTH);
chairwidth += getChairWidth(block, BlockFace.SOUTH); chairwidth += getChairWidth(block, BlockFace.SOUTH);
} }
if (chairwidth > plugin.maxChairWidth) { if (chairwidth > plugin.maxChairWidth) {
return false; return false;
} }
} }
return true; return true;
} }
return false; return false;
} }
private Location getSitLocation(Block block, Float playerYaw) private Location getSitLocation(Block block, Float playerYaw)
{ {
double sh = 0.7; double sh = 0.7;
for (ChairBlock cb : plugin.allowedBlocks) { for (ChairBlock cb : plugin.allowedBlocks) {
if (cb.getMat().equals(block.getType())) { if (cb.getMat().equals(block.getType())) {
sh = cb.getSitHeight(); sh = cb.getSitHeight();
break; break;
} }
} }
Stairs stairs = null; Stairs stairs = null;
if (block.getState().getData() instanceof Stairs) { if (block.getState().getData() instanceof Stairs) {
stairs = (Stairs) block.getState().getData(); stairs = (Stairs) block.getState().getData();
} }
Location plocation = block.getLocation().clone(); Location plocation = block.getLocation().clone();
plocation.add(0.5D, (sh - 0.5D), 0.5D); plocation.add(0.5D, (sh - 0.5D), 0.5D);
// Rotate the player's view to the descending side of the block. // Rotate the player's view to the descending side of the block.
if (plugin.autoRotate && stairs != null) { if (plugin.autoRotate && stairs != null) {
switch (stairs.getDescendingDirection()) { switch (stairs.getDescendingDirection()) {
case NORTH: case NORTH:
plocation.setYaw(180); plocation.setYaw(180);
break; break;
case EAST: case EAST:
plocation.setYaw(-90); plocation.setYaw(-90);
break; break;
case SOUTH: case SOUTH:
plocation.setYaw(0); plocation.setYaw(0);
break; break;
case WEST: case WEST:
plocation.setYaw(90); plocation.setYaw(90);
default: default:
; ;
} }
} else { } else {
plocation.setYaw(playerYaw); plocation.setYaw(playerYaw);
} }
return plocation; return plocation;
} }
private boolean isValidChair(Block block) { private boolean isValidChair(Block block) {
for (ChairBlock cb : plugin.allowedBlocks) { for (ChairBlock cb : plugin.allowedBlocks) {
if (cb.getMat().equals(block.getType())) { if (cb.getMat().equals(block.getType())) {
return true; return true;
} }
} }
return false; return false;
} }
private boolean isSitting(Player player) { private boolean isSitting(Player player) {
return plugin.getPlayerSitData().isSitting(player); return plugin.getPlayerSitData().isSitting(player);
} }
private int getChairWidth(Block block, BlockFace face) { private int getChairWidth(Block block, BlockFace face) {
int width = 0; int width = 0;
// Go through the blocks next to the clicked block and check if there are any further stairs. // Go through the blocks next to the clicked block and check if there are any further stairs.
for (int i = 1; i <= plugin.maxChairWidth; i++) { for (int i = 1; i <= plugin.maxChairWidth; i++) {
Block relative = block.getRelative(face, i); Block relative = block.getRelative(face, i);
if (relative.getState().getData() instanceof Stairs) { if (relative.getState().getData() instanceof Stairs) {
if (isValidChair(relative) && ((Stairs) relative.getState().getData()).getDescendingDirection() == ((Stairs) block.getState().getData()).getDescendingDirection()) { if (isValidChair(relative) && ((Stairs) relative.getState().getData()).getDescendingDirection() == ((Stairs) block.getState().getData()).getDescendingDirection()) {
width++; width++;
} else { } else {
break; break;
} }
} }
} }
return width; return width;
} }
private boolean checkSign(Block block, BlockFace face) { private boolean checkSign(Block block, BlockFace face) {
// Go through the blocks next to the clicked block and check if are signs on the end. // Go through the blocks next to the clicked block and check if are signs on the end.
for (int i = 1; i <= 100; i++) { for (int i = 1; i <= 100; i++) {
Block relative = block.getRelative(face, i); Block relative = block.getRelative(face, i);
if (checkDirection(block, relative)) { if (checkDirection(block, relative)) {
continue; continue;
} }
if (plugin.validSigns.contains(relative.getType())) { if (plugin.validSigns.contains(relative.getType())) {
return true; return true;
} else { } else {
return false; return false;
} }
} }
return false; return false;
} }
private boolean checkDirection(Block block1, Block block2) { private boolean checkDirection(Block block1, Block block2) {
if (block1.getState().getData() instanceof Stairs if (block1.getState().getData() instanceof Stairs
&& block2.getState().getData() instanceof Stairs) { && block2.getState().getData() instanceof Stairs) {
if (((Stairs) block1.getState().getData()).getDescendingDirection() if (((Stairs) block1.getState().getData()).getDescendingDirection()
.equals(((Stairs) block2.getState().getData()).getDescendingDirection())) { .equals(((Stairs) block2.getState().getData()).getDescendingDirection())) {
return true; return true;
} }
} }
return false; return false;
} }
private boolean checkFrame(Block block, BlockFace face, Player player) { private boolean checkFrame(Block block, BlockFace face, Player player) {
// Go through the blocks next to the clicked block and check if are signs on the end. // Go through the blocks next to the clicked block and check if are signs on the end.
for (int i = 1; i <= 100; i++) { for (int i = 1; i <= 100; i++) {
Block relative = block.getRelative(face, i); Block relative = block.getRelative(face, i);
if (checkDirection(block, relative)) { if (checkDirection(block, relative)) {
continue; continue;
} }
if (relative.getType().equals(Material.AIR)) { if (relative.getType().equals(Material.AIR)) {
int x = relative.getLocation().getBlockX(); int x = relative.getLocation().getBlockX();
int y = relative.getLocation().getBlockY(); int y = relative.getLocation().getBlockY();
int z = relative.getLocation().getBlockZ(); int z = relative.getLocation().getBlockZ();
for (Entity e : player.getNearbyEntities(plugin.distance, plugin.distance, plugin.distance)) { for (Entity e : player.getNearbyEntities(plugin.distance, plugin.distance, plugin.distance)) {
if (e instanceof ItemFrame && plugin.validSigns.contains(Material.ITEM_FRAME)) { if (e instanceof ItemFrame && plugin.validSigns.contains(Material.ITEM_FRAME)) {
int x2 = e.getLocation().getBlockX(); int x2 = e.getLocation().getBlockX();
int y2 = e.getLocation().getBlockY(); int y2 = e.getLocation().getBlockY();
int z2 = e.getLocation().getBlockZ(); int z2 = e.getLocation().getBlockZ();
if (x == x2 && y == y2 && z == z2) { if (x == x2 && y == y2 && z == z2) {
return true; return true;
} }
} }
} }
return false; return false;
} else { } else {
return false; return false;
} }
} }
return false; return false;
} }
} }

View File

@ -15,53 +15,53 @@ import com.cnaude.chairs.core.Chairs;
public class TryUnsitEventListener implements Listener { public class TryUnsitEventListener implements Listener {
public Chairs plugin; public Chairs plugin;
public TryUnsitEventListener(Chairs plugin) { public TryUnsitEventListener(Chairs plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
@EventHandler(priority=EventPriority.LOWEST) @EventHandler(priority=EventPriority.LOWEST)
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
if (plugin.getPlayerSitData().isSitting(player)) { if (plugin.getPlayerSitData().isSitting(player)) {
plugin.getPlayerSitData().unsitPlayerNow(player); plugin.getPlayerSitData().unsitPlayerNow(player);
} }
} }
@EventHandler(priority=EventPriority.LOWEST) @EventHandler(priority=EventPriority.LOWEST)
public void onPlayerTeleport(PlayerTeleportEvent event) { public void onPlayerTeleport(PlayerTeleportEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
if (plugin.getPlayerSitData().isSitting(player)) { if (plugin.getPlayerSitData().isSitting(player)) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@EventHandler(priority=EventPriority.LOWEST) @EventHandler(priority=EventPriority.LOWEST)
public void onPlayerDeath(PlayerDeathEvent event) { public void onPlayerDeath(PlayerDeathEvent event) {
Player player = event.getEntity(); Player player = event.getEntity();
if (plugin.getPlayerSitData().isSitting(player)) { if (plugin.getPlayerSitData().isSitting(player)) {
plugin.getPlayerSitData().unsitPlayerNow(player); plugin.getPlayerSitData().unsitPlayerNow(player);
} }
} }
@EventHandler(priority=EventPriority.LOWEST) @EventHandler(priority=EventPriority.LOWEST)
public void onExitVehicle(VehicleExitEvent e) { public void onExitVehicle(VehicleExitEvent e) {
if (e.getVehicle().getPassenger() instanceof Player) { if (e.getVehicle().getPassenger() instanceof Player) {
final Player player = (Player) e.getVehicle().getPassenger(); final Player player = (Player) e.getVehicle().getPassenger();
if (plugin.getPlayerSitData().isSitting(player)) { if (plugin.getPlayerSitData().isSitting(player)) {
plugin.getPlayerSitData().unsitPlayerNormal(player); plugin.getPlayerSitData().unsitPlayerNormal(player);
} }
} }
} }
@EventHandler(priority=EventPriority.HIGHEST,ignoreCancelled=true) @EventHandler(priority=EventPriority.HIGHEST,ignoreCancelled=true)
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
Block b = event.getBlock(); Block b = event.getBlock();
if (plugin.getPlayerSitData().isBlockOccupied(b)) { if (plugin.getPlayerSitData().isBlockOccupied(b)) {
Player player = plugin.getPlayerSitData().getPlayerOnChair(b); Player player = plugin.getPlayerSitData().getPlayerOnChair(b);
plugin.getPlayerSitData().unsitPlayerForce(player); plugin.getPlayerSitData().unsitPlayerForce(player);
} }
} }
} }

View File

@ -21,119 +21,119 @@ import com.cnaude.chairs.core.Chairs;
*/ */
public class ChairEffects { public class ChairEffects {
private Chairs plugin; private Chairs plugin;
private int healTaskID = -1; private int healTaskID = -1;
private int pickupTaskID = -1; private int pickupTaskID = -1;
public ChairEffects(Chairs plugin) { public ChairEffects(Chairs plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
public void startHealing() { public void startHealing() {
healEffectsTask(); healEffectsTask();
} }
public void cancelHealing() { public void cancelHealing() {
if (healTaskID != -1) { if (healTaskID != -1) {
plugin.getServer().getScheduler().cancelTask(healTaskID); plugin.getServer().getScheduler().cancelTask(healTaskID);
healTaskID = -1; healTaskID = -1;
} }
} }
public void restartHealing() { public void restartHealing() {
cancelHealing(); cancelHealing();
startHealing(); startHealing();
} }
private void healEffectsTask() { private void healEffectsTask() {
healTaskID = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { healTaskID = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
for (Player p : Bukkit.getOnlinePlayers()) { for (Player p : Bukkit.getOnlinePlayers()) {
if (plugin.getPlayerSitData().isSitting(p)) { if (plugin.getPlayerSitData().isSitting(p)) {
if (p.hasPermission("chairs.sit.health")) { if (p.hasPermission("chairs.sit.health")) {
double pHealthPcnt = (p.getHealth()) / p.getMaxHealth() * 100d; double pHealthPcnt = (p.getHealth()) / p.getMaxHealth() * 100d;
if ((pHealthPcnt < plugin.sitMaxHealth) && (p.getHealth() < p.getMaxHealth())) { if ((pHealthPcnt < plugin.sitMaxHealth) && (p.getHealth() < p.getMaxHealth())) {
double newHealth = plugin.sitHealthPerInterval + p.getHealth(); double newHealth = plugin.sitHealthPerInterval + p.getHealth();
if (newHealth > p.getMaxHealth()) { if (newHealth > p.getMaxHealth()) {
newHealth = p.getMaxHealth(); newHealth = p.getMaxHealth();
} }
p.setHealth(newHealth); p.setHealth(newHealth);
} }
} }
} }
} }
} }
}, plugin.sitHealInterval, plugin.sitHealInterval); }, plugin.sitHealInterval, plugin.sitHealInterval);
} }
public void startPickup() { public void startPickup() {
pickupEffectsTask(); pickupEffectsTask();
} }
public void cancelPickup() { public void cancelPickup() {
if (pickupTaskID != -1) { if (pickupTaskID != -1) {
plugin.getServer().getScheduler().cancelTask(pickupTaskID); plugin.getServer().getScheduler().cancelTask(pickupTaskID);
} }
pickupTaskID = -1; pickupTaskID = -1;
} }
public void restartPickup() { public void restartPickup() {
cancelPickup(); cancelPickup();
startPickup(); startPickup();
} }
private void pickupEffectsTask() { private void pickupEffectsTask() {
pickupTaskID = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { pickupTaskID = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
for (Player p : Bukkit.getOnlinePlayers()) { for (Player p : Bukkit.getOnlinePlayers()) {
if (plugin.getPlayerSitData().isSitting(p)) { if (plugin.getPlayerSitData().isSitting(p)) {
for (Entity entity : p.getNearbyEntities(1, 2, 1)) { for (Entity entity : p.getNearbyEntities(1, 2, 1)) {
if (entity instanceof Item) { if (entity instanceof Item) {
Item item = (Item) entity; Item item = (Item) entity;
if (item.getPickupDelay() == 0) { if (item.getPickupDelay() == 0) {
if (p.getInventory().firstEmpty() != -1) { if (p.getInventory().firstEmpty() != -1) {
PlayerPickupItemEvent pickupevent = new PlayerPickupItemEvent(p, item, 0); PlayerPickupItemEvent pickupevent = new PlayerPickupItemEvent(p, item, 0);
Bukkit.getPluginManager().callEvent(pickupevent); Bukkit.getPluginManager().callEvent(pickupevent);
if (!pickupevent.isCancelled()) { if (!pickupevent.isCancelled()) {
p.getInventory().addItem(item.getItemStack()); p.getInventory().addItem(item.getItemStack());
entity.remove(); entity.remove();
} }
} }
} }
} else if (entity instanceof ExperienceOrb) { } else if (entity instanceof ExperienceOrb) {
ExperienceOrb eorb = (ExperienceOrb) entity; ExperienceOrb eorb = (ExperienceOrb) entity;
int exptoadd = eorb.getExperience(); int exptoadd = eorb.getExperience();
while (exptoadd > 0) { while (exptoadd > 0) {
int localexptoadd = 0; int localexptoadd = 0;
if (p.getExpToLevel() < exptoadd) { if (p.getExpToLevel() < exptoadd) {
localexptoadd = p.getExpToLevel(); localexptoadd = p.getExpToLevel();
PlayerExpChangeEvent expchangeevent = new PlayerExpChangeEvent(p, localexptoadd); PlayerExpChangeEvent expchangeevent = new PlayerExpChangeEvent(p, localexptoadd);
Bukkit.getPluginManager().callEvent(expchangeevent); Bukkit.getPluginManager().callEvent(expchangeevent);
p.giveExp(expchangeevent.getAmount()); p.giveExp(expchangeevent.getAmount());
if (p.getExpToLevel() <= 0) { if (p.getExpToLevel() <= 0) {
PlayerLevelChangeEvent levelchangeevent = new PlayerLevelChangeEvent(p, p.getLevel(), p.getLevel()+1); PlayerLevelChangeEvent levelchangeevent = new PlayerLevelChangeEvent(p, p.getLevel(), p.getLevel()+1);
Bukkit.getPluginManager().callEvent(levelchangeevent); Bukkit.getPluginManager().callEvent(levelchangeevent);
p.setExp(0); p.setExp(0);
p.giveExpLevels(1); p.giveExpLevels(1);
} }
} else { } else {
localexptoadd = exptoadd; localexptoadd = exptoadd;
PlayerExpChangeEvent expchangeevent = new PlayerExpChangeEvent(p, localexptoadd); PlayerExpChangeEvent expchangeevent = new PlayerExpChangeEvent(p, localexptoadd);
Bukkit.getPluginManager().callEvent(expchangeevent); Bukkit.getPluginManager().callEvent(expchangeevent);
p.giveExp(expchangeevent.getAmount()); p.giveExp(expchangeevent.getAmount());
} }
exptoadd -= localexptoadd; exptoadd -= localexptoadd;
} }
entity.remove(); entity.remove();
} }
} }
} }
} }
} }
},0,1); },0,1);
} }
} }

View File

@ -15,33 +15,33 @@ public class CommandRestrict implements Listener {
this.plugin = plugin; this.plugin = plugin;
} }
@EventHandler(priority=EventPriority.LOWEST) @EventHandler(priority=EventPriority.LOWEST)
public void onPlayerCommand(PlayerCommandPreprocessEvent event) public void onPlayerCommand(PlayerCommandPreprocessEvent event)
{ {
Player player = event.getPlayer(); Player player = event.getPlayer();
String playercommand = event.getMessage().toLowerCase(); String playercommand = event.getMessage().toLowerCase();
if (plugin.getPlayerSitData().isSitting(player)) if (plugin.getPlayerSitData().isSitting(player))
{ {
if (plugin.sitDisableAllCommands) if (plugin.sitDisableAllCommands)
{ {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(plugin.msgCommandRestricted); player.sendMessage(plugin.msgCommandRestricted);
return; return;
} }
for (String disabledCommand : plugin.sitDisabledCommands) for (String disabledCommand : plugin.sitDisabledCommands)
{ {
if (disabledCommand.startsWith(playercommand)) if (disabledCommand.startsWith(playercommand))
{ {
String therest = playercommand.replace(disabledCommand, ""); String therest = playercommand.replace(disabledCommand, "");
if (therest.isEmpty() || therest.startsWith(" ")) if (therest.isEmpty() || therest.startsWith(" "))
{ {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(plugin.msgCommandRestricted); player.sendMessage(plugin.msgCommandRestricted);
return; return;
} }
} }
} }
} }
} }
} }

View File

@ -12,24 +12,24 @@ import org.bukkit.entity.Arrow;
public class NMSAccess { public class NMSAccess {
private Class<?> nmsArrowClass; private Class<?> nmsArrowClass;
public void setupVehicleArrow() throws Exception { public void setupVehicleArrow() throws Exception {
String pkgname = getClass().getPackage().getName(); String pkgname = getClass().getPackage().getName();
String packageName = Bukkit.getServer().getClass().getPackage().getName(); String packageName = Bukkit.getServer().getClass().getPackage().getName();
String nmspackageversion = packageName.substring(packageName.lastIndexOf('.') + 1); String nmspackageversion = packageName.substring(packageName.lastIndexOf('.') + 1);
switch (nmspackageversion) { switch (nmspackageversion) {
case "v1_7_R1": { case "v1_7_R1": {
nmsArrowClass = Class.forName(pkgname+"."+"nms172"+".NMSChairsArrow"); nmsArrowClass = Class.forName(pkgname+"."+"nms172"+".NMSChairsArrow");
return; return;
} }
case "v1_6_R3": { case "v1_6_R3": {
nmsArrowClass = Class.forName(pkgname+"."+"nms164"+".NMSChairsArrow"); nmsArrowClass = Class.forName(pkgname+"."+"nms164"+".NMSChairsArrow");
return; return;
} }
} }
throw new Exception("ChairsReloaded is not compatible with your server version"); throw new Exception("ChairsReloaded is not compatible with your server version");
} }
public Arrow spawnArrow(Location location) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { public Arrow spawnArrow(Location location) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
World world = location.getWorld(); World world = location.getWorld();
Method getHandle = world.getClass().getDeclaredMethod("getHandle"); Method getHandle = world.getClass().getDeclaredMethod("getHandle");

View File

@ -7,11 +7,11 @@ import org.bukkit.entity.Arrow;
public interface NMSChairsArrowInterface { public interface NMSChairsArrowInterface {
public void setBukkitEntity(Server server); public void setBukkitEntity(Server server);
public Arrow getBukkitArrow(); public Arrow getBukkitArrow();
public void setArrowLocation(Location location); public void setArrowLocation(Location location);
public void addToWorld(); public void addToWorld();
} }

View File

@ -1,5 +1,8 @@
package com.cnaude.chairs.vehiclearrow.nms172; package com.cnaude.chairs.vehiclearrow.nms172;
import net.minecraft.server.v1_7_R1.EntityArrow;
import net.minecraft.server.v1_7_R1.World;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.craftbukkit.v1_7_R1.CraftServer; import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
@ -7,19 +10,17 @@ import org.bukkit.entity.Arrow;
import com.cnaude.chairs.vehiclearrow.NMSChairsArrowInterface; import com.cnaude.chairs.vehiclearrow.NMSChairsArrowInterface;
import net.minecraft.server.v1_7_R1.EntityArrow;
import net.minecraft.server.v1_7_R1.World;
public class NMSChairsArrow extends EntityArrow implements NMSChairsArrowInterface { public class NMSChairsArrow extends EntityArrow implements NMSChairsArrowInterface {
public NMSChairsArrow(World world) { public NMSChairsArrow(World world) {
super(world); super(world);
} }
@Override @Override
public void h() { public void h() {
} }
@Override
public void setBukkitEntity(Server server) { public void setBukkitEntity(Server server) {
bukkitEntity = new CraftChairsArrow((CraftServer) server, this); bukkitEntity = new CraftChairsArrow((CraftServer) server, this);
} }