Added rotating rails
This commit is contained in:
parent
06f04d6fb2
commit
74eab9512e
|
|
@ -6,10 +6,7 @@ import org.bukkit.Material;
|
||||||
import org.bukkit.Tag;
|
import org.bukkit.Tag;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.data.Bisected;
|
import org.bukkit.block.data.*;
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.block.data.Directional;
|
|
||||||
import org.bukkit.block.data.Orientable;
|
|
||||||
import org.bukkit.block.data.type.Fence;
|
import org.bukkit.block.data.type.Fence;
|
||||||
import org.bukkit.block.data.type.Stairs;
|
import org.bukkit.block.data.type.Stairs;
|
||||||
import org.bukkit.block.data.type.Wall;
|
import org.bukkit.block.data.type.Wall;
|
||||||
|
|
@ -24,6 +21,7 @@ import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class RotateBlockEvent implements Listener {
|
public class RotateBlockEvent implements Listener {
|
||||||
|
|
||||||
|
|
@ -69,6 +67,8 @@ public class RotateBlockEvent implements Listener {
|
||||||
} else if (Tag.FENCES.isTagged(type)) {
|
} else if (Tag.FENCES.isTagged(type)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
toggleFence(block, event.getBlockFace(), player);
|
toggleFence(block, event.getBlockFace(), player);
|
||||||
|
} else if(Tag.RAILS.isTagged(type)) {
|
||||||
|
toggleRails(block, player);
|
||||||
} else if (block.getBlockData() instanceof Directional directional) {
|
} else if (block.getBlockData() instanceof Directional directional) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
rotateDirectionalBlock(block, directional, player);
|
rotateDirectionalBlock(block, directional, player);
|
||||||
|
|
@ -78,6 +78,42 @@ public class RotateBlockEvent implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void toggleRails(Block block, Player player) {
|
||||||
|
if (!(block instanceof Rail rail)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cannotBuild(block, player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rail.setShape(getNextRailShape(rail, player.isSneaking()));
|
||||||
|
block.setBlockData(rail);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Rail.Shape getNextRailShape(Rail rail, boolean reverse) {
|
||||||
|
Rail.Shape shape = rail.getShape();
|
||||||
|
List<Rail.Shape> collect = rail.getShapes().stream().sorted().toList();
|
||||||
|
Iterator<Rail.Shape> iterator = collect.iterator();
|
||||||
|
|
||||||
|
if (reverse) {
|
||||||
|
Rail.Shape last = iterator.next();
|
||||||
|
if (last.equals(shape))
|
||||||
|
return collect.get(collect.size() - 1);
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Rail.Shape next = iterator.next();
|
||||||
|
if (next.equals(shape))
|
||||||
|
return last;
|
||||||
|
last = next;
|
||||||
|
}
|
||||||
|
return collect.get(0);
|
||||||
|
} else {
|
||||||
|
while (iterator.hasNext() && !iterator.next().equals(shape))
|
||||||
|
;
|
||||||
|
return iterator.hasNext() ? iterator.next() : collect.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void rotateOrientableBlock(Block block, Orientable orientable, Player player) {
|
private void rotateOrientableBlock(Block block, Orientable orientable, Player player) {
|
||||||
if (cannotBuild(block, player)) {
|
if (cannotBuild(block, player)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user