Fix issues with wooden steps.

Add option to select blocks by data value.
This commit is contained in:
cnaude 2013-06-27 21:24:28 -07:00
parent 0c36d138b9
commit 2566addf8d
4 changed files with 43 additions and 12 deletions

View File

@ -13,10 +13,12 @@ import org.bukkit.Material;
public class ChairBlock { public class ChairBlock {
private Material mat; private Material mat;
private double sitHeight; private double sitHeight;
private byte data;
public ChairBlock(Material m, double d) { public ChairBlock(Material m, double s, String d) {
mat = m; mat = m;
sitHeight = d; sitHeight = s;
data = Byte.parseByte(d);
} }
public Material getMat() { public Material getMat() {
@ -26,4 +28,8 @@ public class ChairBlock {
public double getSitHeight() { public double getSitHeight() {
return sitHeight; return sitHeight;
} }
public byte getDamage() {
return data;
}
} }

View File

@ -26,7 +26,7 @@ import org.bukkit.plugin.java.JavaPlugin;
public class Chairs extends JavaPlugin { public class Chairs extends JavaPlugin {
private static Chairs instance = null; private static Chairs instance = null;
public static ChairEffects chairEffects; public static ChairEffects chairEffects;
public List<ChairBlock> allowedBlocks = new ArrayList<ChairBlock>(); public List<ChairBlock> allowedBlocks = new ArrayList<ChairBlock>();
public List<Material> validSigns = new ArrayList<Material>(); public List<Material> validSigns = new ArrayList<Material>();
public boolean sneaking, autoRotate, signCheck, permissions, notifyplayer, opsOverridePerms; public boolean sneaking, autoRotate, signCheck, permissions, notifyplayer, opsOverridePerms;
public boolean invertedStairCheck, seatOccupiedCheck, invertedStepCheck, perItemPerms, ignoreIfBlockInHand; public boolean invertedStairCheck, seatOccupiedCheck, invertedStepCheck, perItemPerms, ignoreIfBlockInHand;
@ -152,10 +152,16 @@ public class Chairs extends JavaPlugin {
for (String s : getConfig().getStringList("allowed-blocks")) { for (String s : getConfig().getStringList("allowed-blocks")) {
String type; String type;
double sh = sittingHeight; double sh = sittingHeight;
String d = "0";
if (s.contains(":")) { if (s.contains(":")) {
String tmp[] = s.split(":",2); String tmp[] = s.split(":",3);
type = tmp[0]; type = tmp[0];
sh = Double.parseDouble(tmp[1]); if (!tmp[1].isEmpty()) {
sh = Double.parseDouble(tmp[1]);
}
if (tmp.length == 3) {
d = tmp[2];
}
} else { } else {
type = s; type = s;
} }
@ -167,8 +173,8 @@ public class Chairs extends JavaPlugin {
mat = Material.matchMaterial(type); mat = Material.matchMaterial(type);
} }
if (mat != null) { if (mat != null) {
logInfo("Allowed block: " + mat.toString() + " => " + sh); logInfo("Allowed block: " + mat.toString() + " => " + sh + " => " + d);
allowedBlocks.add(new ChairBlock(mat,sh)); allowedBlocks.add(new ChairBlock(mat,sh,d));
} else { } else {
logError("Invalid block: " + type); logError("Invalid block: " + type);
} }

View File

@ -21,6 +21,7 @@ import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.material.Stairs; import org.bukkit.material.Stairs;
import org.bukkit.material.Step; import org.bukkit.material.Step;
import org.bukkit.material.WoodenStep;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
@ -122,8 +123,9 @@ public class EventListener implements Listener {
Block block = event.getClickedBlock(); Block block = event.getClickedBlock();
Stairs stairs = null; Stairs stairs = null;
Step step = null; Step step = null;
WoodenStep wStep = null;
double sh = plugin.sittingHeight; double sh = plugin.sittingHeight;
boolean blockOkay = false; boolean blockOkay = false;
Player player = event.getPlayer(); Player player = event.getPlayer();
if (ignoreList.isIgnored(player.getName())) { if (ignoreList.isIgnored(player.getName())) {
@ -149,21 +151,33 @@ public class EventListener implements Listener {
} }
for (ChairBlock cb : plugin.allowedBlocks) { for (ChairBlock cb : plugin.allowedBlocks) {
if (cb.getMat().equals(block.getType())) { //plugin.logInfo("Comparing: (" + cb.getMat().name() + " ? " + block.getType().name() + ") ("
// + cb.getDamage() + " ? " + block.getData() + ")");
if (cb.getMat().equals(block.getType())
&& cb.getDamage() == block.getData()) {
blockOkay = true; blockOkay = true;
sh = cb.getSitHeight(); sh = cb.getSitHeight();
continue;
} }
} }
if (blockOkay if (blockOkay
|| (player.hasPermission("chairs.sit." + block.getTypeId() + ":" + block.getData()) && plugin.perItemPerms)
|| (player.hasPermission("chairs.sit." + block.getType().toString() + ":" + block.getData()) && plugin.perItemPerms)
|| (player.hasPermission("chairs.sit." + block.getTypeId()) && plugin.perItemPerms) || (player.hasPermission("chairs.sit." + block.getTypeId()) && plugin.perItemPerms)
|| (player.hasPermission("chairs.sit." + block.getType().toString()) && plugin.perItemPerms)) { || (player.hasPermission("chairs.sit." + block.getType().toString()) && plugin.perItemPerms)) {
if (block.getState().getData() instanceof Stairs) { if (block.getState().getData() instanceof Stairs) {
stairs = (Stairs) block.getState().getData(); stairs = (Stairs) block.getState().getData();
//plugin.logInfo("STAIR");
} else if (block.getState().getData() instanceof Step) { } else if (block.getState().getData() instanceof Step) {
step = (Step) block.getState().getData(); step = (Step) block.getState().getData();
//plugin.logInfo("STEP");
} else if (block.getState().getData() instanceof WoodenStep) {
wStep = (WoodenStep) block.getState().getData();
//plugin.logInfo("WOODEN_STEP");
} else { } else {
sh += plugin.sittingHeightAdj; sh += plugin.sittingHeightAdj;
//plugin.logInfo("OTHER");
} }
int chairwidth = 1; int chairwidth = 1;
@ -205,6 +219,11 @@ public class EventListener implements Listener {
return; return;
} }
} }
if (wStep != null) {
if (wStep.isInverted() && plugin.invertedStepCheck) {
return;
}
}
// Check for signs. // Check for signs.
if (plugin.signCheck == true && stairs != null) { if (plugin.signCheck == true && stairs != null) {

View File

@ -1,5 +1,5 @@
name: Chairs name: Chairs
version: 2.1.2 version: 2.1.3
description: Let players sit on blocks. description: Let players sit on blocks.
website: http://dev.bukkit.org/bukkit-plugins/chairsreloaded/ website: http://dev.bukkit.org/bukkit-plugins/chairsreloaded/
authors: authors: