/[projects]/miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/SecretDoor.java
ViewVC logotype

Contents of /miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/SecretDoor.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1525 - (show annotations) (download)
Sun Jun 26 13:29:58 2011 UTC (12 years, 10 months ago) by torben
File size: 4381 byte(s)
Added basic version of secretdoor
1 package dk.thoerup.bukkit.hoeruputils;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.bukkit.Effect;
7 import org.bukkit.Location;
8 import org.bukkit.Material;
9 import org.bukkit.World;
10 import org.bukkit.block.Block;
11 import org.bukkit.entity.Player;
12 import org.bukkit.event.block.BlockBreakEvent;
13 import org.bukkit.event.block.BlockListener;
14 import org.bukkit.event.block.SignChangeEvent;
15 import org.bukkit.event.player.PlayerListener;
16 import org.bukkit.event.player.PlayerInteractEvent;
17
18 import org.bukkit.plugin.Plugin;
19
20 public class SecretDoor extends BlockListener {
21
22 HashMap<Location,Door> doormap = new HashMap<Location,Door>();
23
24 private PlayerHandler handler = new PlayerHandler();
25
26 Plugin plugin;
27
28 public SecretDoor(Plugin plugin) {
29 this.plugin = plugin;
30 }
31
32 public PlayerListener getPlayerListener() {
33 return handler;
34 }
35
36 @Override
37 public void onBlockBreak(BlockBreakEvent event) {
38 Door door = doormap.get( event.getBlock().getLocation() );
39 if (door != null) {
40 event.getPlayer().sendMessage("Secret door broken");
41 door.unregisterMap(doormap);
42 }
43 }
44
45 @Override
46 public void onSignChange(SignChangeEvent event) {
47
48 Block sign = event.getBlock();
49 World world = sign.getWorld();
50
51 if (sign.getTypeId() == 63) {
52 // don't react on floor signs
53 return;
54 }
55
56 if (event.getLine(0).toLowerCase().equals("secretdoor") ) {
57 Door door = new Door(sign);
58 door.registerMap(doormap);
59
60 event.getPlayer().sendMessage("Secret door created");
61
62 sign.setTypeId(0);
63 }
64 }
65
66
67 class PlayerHandler extends PlayerListener {
68 @Override
69 public void onPlayerInteract(PlayerInteractEvent event) {
70
71 final Player player = event.getPlayer();
72
73 if ( player.getItemInHand().getType() != Material.AIR ) {
74 return;
75 }
76
77 if ( event.hasBlock() == false ) {
78 return;
79 }
80
81 final Door door = doormap.get( event.getClickedBlock().getLocation() );
82
83 if (door == null) {
84 return;
85 }
86
87 door.open( player.getWorld() );
88
89 player.playEffect( player.getLocation(), Effect.DOOR_TOGGLE, 0);
90
91 Runnable doorCloser = new Runnable() {
92 public void run() {
93 door.close( player.getWorld() );
94 player.playEffect( player.getLocation(), Effect.DOOR_TOGGLE, 0);
95 }
96 };
97
98 player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, 4*20);
99
100
101 }
102 }
103
104 class Door {
105 Location leftUpper;
106 Location rightUpper;
107 Location leftLower;
108 Location rightLower;
109
110 int material;
111
112 public Door(Block sign) {
113 leftUpper = sign.getLocation().clone();
114 rightUpper = sign.getLocation().clone();
115
116 switch ( sign.getData() ) {
117 case 2: //facing east
118 leftUpper.setZ( leftUpper.getZ() + 1 );
119 rightUpper.setZ( rightUpper.getZ() + 1 );
120 rightUpper.setX( rightUpper.getX() - 1 );
121 break;
122 case 3: //facing west
123 leftUpper.setZ( leftUpper.getZ() - 1 );
124 rightUpper.setZ( rightUpper.getZ() - 1 );
125 rightUpper.setX( rightUpper.getX() + 1 );
126 break;
127 case 4: //facing north
128 leftUpper.setX( leftUpper.getX() + 1);
129 rightUpper.setX( rightUpper.getX() + 1);
130 rightUpper.setZ( rightUpper.getZ() + 1);
131 break;
132 case 5: //facing south
133 leftUpper.setX( leftUpper.getX() - 1);
134 rightUpper.setX( rightUpper.getX() - 1);
135 rightUpper.setZ( rightUpper.getZ() - 1);
136 break;
137 }
138
139 material = sign.getWorld().getBlockAt( leftUpper ).getTypeId();
140
141 leftLower = leftUpper.clone();
142 rightLower = rightUpper.clone();
143
144 leftLower.setY( leftLower.getY() - 1);
145 rightLower.setY( rightLower.getY() - 1);
146 }
147
148 public void registerMap(Map<Location,Door> map) {
149 map.put(leftUpper, this );
150 map.put(rightUpper, this );
151 map.put(leftLower, this );
152 map.put(rightLower, this );
153 }
154
155 public void unregisterMap(Map<Location,Door> map) {
156 map.remove(leftUpper);
157 map.remove(rightUpper);
158 map.remove(leftLower);
159 map.remove(rightLower);
160 }
161
162 public void open(World world) {
163 world.getBlockAt( leftUpper ).setTypeId( 0 );
164 world.getBlockAt( rightUpper ).setTypeId( 0 );
165 world.getBlockAt( leftLower ).setTypeId( 0 );
166 world.getBlockAt( rightLower ).setTypeId( 0 );
167 }
168
169 public void close(World world) {
170 world.getBlockAt( leftUpper ).setTypeId( material );
171 world.getBlockAt( rightUpper ).setTypeId( material );
172 world.getBlockAt( leftLower ).setTypeId( material );
173 world.getBlockAt( rightLower ).setTypeId( material );
174 }
175
176 }
177
178 }

  ViewVC Help
Powered by ViewVC 1.1.20