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
|
package com.redstoner.modules.blockplacemods.mods;
import com.redstoner.misc.Main;
import com.redstoner.modules.blockplacemods.BlockPlaceMod;
import com.redstoner.modules.blockplacemods.ModType;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.material.RedstoneTorch;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ModTorch extends BlockPlaceMod {
private static final Map<Block, Block> monitorBlocks = new HashMap<>();
private int monitorId = -1;
public ModTorch() {
super(
"Torch",
"With this mod enabled redstone torches placed on redstone blocks get auto removed after they turn off.",
ModType.STATELESS,
null,
true,
"AutoTorch", "TorchRemoval", "RedstoneTorch"
);
}
@Override
public boolean onEnable() {
monitorId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, () -> {
for (Block block : monitorBlocks.keySet()) {
Block against = monitorBlocks.get(block);
if (block.getType() != Material.REDSTONE_TORCH || against.getType() != Material.REDSTONE_BLOCK) {
monitorBlocks.remove(block);
return;
}
RedstoneTorch data = (RedstoneTorch) block.getBlockData();
if (!data.isPowered()) {
block.setType(Material.AIR);
}
}
}, 2, 2);
return monitorId != -1;
}
@Override
public void onDisable() {
Bukkit.getScheduler().cancelTask(monitorId);
monitorId = -1;
}
@EventHandler (priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
if (
event.getBlock().getType() == Material.REDSTONE_TORCH
&& !event.getPlayer().isSneaking()
&& hasEnabled(event.getPlayer())
&& event.getPlayer().getGameMode() == GameMode.CREATIVE
) {
Block block = event.getBlock();
Block against = event.getBlockAgainst();
if (against.getType() == Material.REDSTONE_BLOCK) {
monitorBlocks.put(block, against);
}
}
}
}
|