-
-
Notifications
You must be signed in to change notification settings - Fork 165
Expand file tree
/
Copy pathBetterPhysics.java
More file actions
90 lines (66 loc) · 2.58 KB
/
BetterPhysics.java
File metadata and controls
90 lines (66 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.sk89q.craftbook.mechanics;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import com.sk89q.craftbook.AbstractCraftBookMechanic;
import com.sk89q.craftbook.bukkit.CraftBookPlugin;
import com.sk89q.craftbook.util.EventUtil;
import com.sk89q.util.yaml.YAMLProcessor;
public class BetterPhysics extends AbstractCraftBookMechanic {
protected static BetterPhysics instance;
@Override
public boolean enable() {
instance = this;
return true;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onBlockBreak(BlockBreakEvent event) {
if (!EventUtil.passesFilter(event))
return;
checkForPhysics(event.getBlock());
}
@EventHandler(priority = EventPriority.MONITOR)
public void onBlockPlace(BlockPlaceEvent event) {
if (!EventUtil.passesFilter(event)) return;
checkForPhysics(event.getBlock());
}
@EventHandler(priority = EventPriority.MONITOR)
public void onBlockUpdate(BlockPhysicsEvent event) {
if (!EventUtil.passesFilter(event))
return;
checkForPhysics(event.getBlock());
}
private static void checkForPhysics(Block block) {
if(FallingLadders.isValid(block)) {
CraftBookPlugin.getScheduler().runTask(CraftBookPlugin.inst(), new FallingLadders(block));
}
}
private static class FallingLadders implements Runnable {
private Block ladder;
FallingLadders(Block ladder) {
this.ladder = ladder;
}
public static boolean isValid(Block block) {
return block.getType() == Material.LADDER && instance.ladders && block.getRelative(0, -1, 0).getType().isAir();
}
@Override
public void run () {
if(!isValid(ladder)) return;
ladder.getWorld().spawnFallingBlock(ladder.getLocation().add(0.5, 0, 0.5), ladder.getBlockData());
ladder.setType(Material.AIR, false);
checkForPhysics(ladder.getRelative(BlockFace.UP));
}
}
private boolean ladders;
@Override
public void loadConfiguration (YAMLProcessor config, String path) {
config.setComment(path + "falling-ladders", "Enables BetterPhysics Falling Ladders.");
ladders = config.getBoolean(path + "falling-ladders", true);
}
}