/[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 1526 - (show annotations) (download)
Sun Jun 26 14:26:58 2011 UTC (12 years, 10 months ago) by torben
File size: 4432 byte(s)
let world play the door closed effect instead of player
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 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 final World world = player.getWorld();
88 final Location loc = event.getClickedBlock().getLocation();
89
90 door.open( player.getWorld() );
91
92 world.playEffect( loc, Effect.DOOR_TOGGLE, 0);
93
94 Runnable doorCloser = new Runnable() {
95 public void run() {
96 door.close( world );
97 world.playEffect( loc, Effect.DOOR_TOGGLE, 0);
98 }
99 };
100
101 player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, 4*20);
102
103 }
104 }
105
106 class Door {
107 Location leftUpper;
108 Location rightUpper;
109 Location leftLower;
110 Location rightLower;
111
112 int material;
113
114 public Door(Block sign) {
115 leftUpper = sign.getLocation().clone();
116 rightUpper = sign.getLocation().clone();
117
118 switch ( sign.getData() ) {
119 case 2: //facing east
120 leftUpper.setZ( leftUpper.getZ() + 1 );
121 rightUpper.setZ( rightUpper.getZ() + 1 );
122 rightUpper.setX( rightUpper.getX() - 1 );
123 break;
124 case 3: //facing west
125 leftUpper.setZ( leftUpper.getZ() - 1 );
126 rightUpper.setZ( rightUpper.getZ() - 1 );
127 rightUpper.setX( rightUpper.getX() + 1 );
128 break;
129 case 4: //facing north
130 leftUpper.setX( leftUpper.getX() + 1);
131 rightUpper.setX( rightUpper.getX() + 1);
132 rightUpper.setZ( rightUpper.getZ() + 1);
133 break;
134 case 5: //facing south
135 leftUpper.setX( leftUpper.getX() - 1);
136 rightUpper.setX( rightUpper.getX() - 1);
137 rightUpper.setZ( rightUpper.getZ() - 1);
138 break;
139 }
140
141 material = sign.getWorld().getBlockAt( leftUpper ).getTypeId();
142
143 leftLower = leftUpper.clone();
144 rightLower = rightUpper.clone();
145
146 leftLower.setY( leftLower.getY() - 1);
147 rightLower.setY( rightLower.getY() - 1);
148 }
149
150 public void registerMap(Map<Location,Door> map) {
151 map.put(leftUpper, this );
152 map.put(rightUpper, this );
153 map.put(leftLower, this );
154 map.put(rightLower, this );
155 }
156
157 public void unregisterMap(Map<Location,Door> map) {
158 map.remove(leftUpper);
159 map.remove(rightUpper);
160 map.remove(leftLower);
161 map.remove(rightLower);
162 }
163
164 public void open(World world) {
165 world.getBlockAt( leftUpper ).setTypeId( 0 );
166 world.getBlockAt( rightUpper ).setTypeId( 0 );
167 world.getBlockAt( leftLower ).setTypeId( 0 );
168 world.getBlockAt( rightLower ).setTypeId( 0 );
169 }
170
171 public void close(World world) {
172 world.getBlockAt( leftUpper ).setTypeId( material );
173 world.getBlockAt( rightUpper ).setTypeId( material );
174 world.getBlockAt( leftLower ).setTypeId( material );
175 world.getBlockAt( rightLower ).setTypeId( material );
176 }
177
178 }
179
180 }

  ViewVC Help
Powered by ViewVC 1.1.20