so://phie

poppy

A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy

blob: b85cd4b8da44232db42f8e41ec2de4c4b687ed2e (9545 bytes)[doc][blame][raw]

1package poppy;

2

3import org.bukkit.Bukkit;

4import org.bukkit.ChatColor;

5import org.bukkit.GameMode;

6import org.bukkit.Location;

7import org.bukkit.Material;

8import org.bukkit.block.Block;

9import org.bukkit.command.Command;

10import org.bukkit.command.CommandSender;

11import org.bukkit.entity.Player;

12import org.bukkit.inventory.ItemStack;

13import org.bukkit.inventory.meta.SkullMeta;

14import org.bukkit.inventory.meta.BookMeta;

15import org.bukkit.plugin.Plugin;

16import org.bukkit.plugin.PluginManager;

17import org.bukkit.plugin.java.JavaPlugin;

18

19import poppy.modules.AutoBreakerModule;

20import poppy.modules.AutoPlacerModule;

21import poppy.modules.AutoWorkbenchModule;

22import poppy.modules.BlockDetectorModule;

23import poppy.modules.CauldronModule;

24import poppy.modules.ChairModule;

25import poppy.modules.DoubleDoorModule;

26import poppy.modules.HopperSorterModule;

27import poppy.modules.CommonModule;

28import poppy.modules.LeavesDecayModule;

29import poppy.modules.SpawnerModule;

30import poppy.modules.PlayerMountModule;

31

32

33public class Main extends JavaPlugin

34{

35 private Plugin plugin;

36 private Config config;

37 private PluginManager pluginManager;

38

39 private CommonModule commonModule;

40 private DoubleDoorModule doubleDoorModule;

41 private ChairModule chairModule;

42 private AutoWorkbenchModule autoWorkbenchModule;

43 private LeavesDecayModule leavesDecayModule;

44 private CauldronModule cauldronModule;

45 private SpawnerModule spawnerModule;

46 private HopperSorterModule hopperSorterModule;

47 private AutoPlacerModule autoPlacerModule;

48 private AutoBreakerModule autoBreakerModule;

49 private PlayerMountModule playerMountModule;

50 private BlockDetectorModule blockDetectorModule;

51

52 @Override

53 public void onEnable()

54 {

55 plugin = this;

56 config = new Config("config/poppy.yml");

57

58 pluginManager = Bukkit.getPluginManager();

59

60 commonModule = new CommonModule();

61 pluginManager.registerEvents(commonModule, this);

62

63 doubleDoorModule = new DoubleDoorModule();

64 pluginManager.registerEvents(doubleDoorModule, this);

65

66 chairModule = new ChairModule();

67 pluginManager.registerEvents(chairModule, this);

68

69 autoWorkbenchModule = new AutoWorkbenchModule();

70 pluginManager.registerEvents(autoWorkbenchModule, this);

71

72 leavesDecayModule = new LeavesDecayModule(this);

73 pluginManager.registerEvents(leavesDecayModule, this);

74

75 cauldronModule = new CauldronModule(this);

76 pluginManager.registerEvents(cauldronModule, this);

77

78 spawnerModule = new SpawnerModule();

79 pluginManager.registerEvents(spawnerModule, this);

80

81 hopperSorterModule = new HopperSorterModule();

82 pluginManager.registerEvents(hopperSorterModule, this);

83

84 autoPlacerModule = new AutoPlacerModule(this);

85 pluginManager.registerEvents(autoPlacerModule, this);

86

87 autoBreakerModule = new AutoBreakerModule(this);

88 pluginManager.registerEvents(autoBreakerModule, this);

89

90 playerMountModule = new PlayerMountModule();

91 pluginManager.registerEvents(playerMountModule, this);

92

93 blockDetectorModule = new BlockDetectorModule();

94 pluginManager.registerEvents(blockDetectorModule, this);

95 }

96

97 @Override

98 public void onDisable()

99 {

100 chairModule.onDisable();

101 }

102

103 @Override

104 public boolean onCommand(CommandSender sender, Command command, String label, String[] args)

105 {

106 if(sender instanceof Player)

107 {

108 Player player = (Player) sender;

109

110 switch(label)

111 {

112 case "head":

113 return setItemAsHead(player, args);

114 case "skull":

115 return getSkullForName(player, args);

116 case "invsee":

117 return openInventoryForPlayer(player, args);

118 case "info":

119 return openInfoBook(player, args);

120 case "spawn":

121 return teleportToSpawn(player, args);

122 case "home":

123 return teleportToHome(player, args);

124 case "warp":

125 return teleportToWarppoint(player, args);

126 case "sethome":

127 return setHome(player, args);

128 case "setwarp":

129 return setWarppoint(player, args);

130 case "slime":

131 return isSlimeChunk(player, args);

132 case "r":

133 return doReload(player, args);

134 case "up":

135 return placeBlockBelow(player, args);

136 default:

137 return false;

138 }

139 }

140

141 return true;

142 }

143

144 private boolean setItemAsHead(final Player player, final String[] args)

145 {

146 final ItemStack item = player.getInventory().getItemInMainHand();

147 final ItemStack head = player.getInventory().getHelmet();

148

149 if(head != null && head.getType().equals(Material.SADDLE))

150 {

151 player.eject();

152 }

153

154 player.getInventory().setHelmet(item);

155 player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));

156

157 if(player.getGameMode() == GameMode.SURVIVAL)

158 {

159 if(head != null)

160 {

161 player.getInventory().addItem(head);

162 }

163 }

164

165 return true;

166 }

167

168 @SuppressWarnings("deprecation")

169 private boolean getSkullForName(final Player player, final String[] args)

170 {

171 if(!player.isOp())

172 {

173 player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);

174 return true;

175 }

176

177 if(args.length != 1)

178 {

179 return false;

180 }

181

182 final String name = args[0];

183 final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);

184 final SkullMeta meta = (SkullMeta) skull.getItemMeta();

185 meta.setOwner(name);

186 skull.setItemMeta(meta);

187

188 player.getInventory().addItem(skull);

189

190 return true;

191 }

192

193 private boolean openInventoryForPlayer(final Player player, final String[] args)

194 {

195 if(args.length == 0)

196 {

197 return false;

198 }

199

200 if(!player.isOp())

201 {

202 player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);

203 return true;

204 }

205

206 final Player target = Bukkit.getPlayer(args[0]);

207

208 if(target == null)

209 {

210 player.sendMessage(ChatColor.RED + "Player not found!");

211 return true;

212 }

213

214 player.openInventory(target.getInventory());

215

216 return true;

217 }

218

219 private boolean openInfoBook(final Player player, final String[] args)

220 {

221 final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);

222 final BookMeta meta = (BookMeta) book.getItemMeta();

223 meta.setTitle("Info");

224 meta.setAuthor("Server");

225 meta.setPages(config.getInfoPages());

226 book.setItemMeta(meta);

227

228 player.openBook(book);

229

230 return true;

231 }

232

233 private boolean teleportToSpawn(final Player player, final String[] args)

234 {

235 final Location location = Bukkit.getWorld("world").getSpawnLocation();

236

237 if(Utils.travelTo(plugin, player, location))

238 {

239 player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");

240 }

241

242 return true;

243 }

244

245 private boolean teleportToHome(final Player player, final String[] args)

246 {

247 final Location location = config.getHome(player);

248

249 if(location == null)

250 {

251 player.sendMessage(ChatColor.RED + "You've don't have a home point.");

252 return true;

253 }

254

255 if(Utils.travelTo(plugin, player, location))

256 {

257 player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");

258 }

259

260 return true;

261 }

262

263 private boolean teleportToWarppoint(final Player player, final String[] args)

264 {

265 if(args.length != 1)

266 {

267 return false;

268 }

269

270 final String name = args[0].toLowerCase();

271 final Location location = config.getWarp(name);

272

273 if(location == null)

274 {

275 player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");

276 return true;

277 }

278

279 if(Utils.travelTo(plugin, player, location))

280 {

281 player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");

282 }

283

284 return true;

285 }

286

287 private boolean setHome(final Player player, final String[] args)

288 {

289 try

290 {

291 config.setHome(player);

292 player.sendMessage(ChatColor.YELLOW + "Home point set.");

293 }

294 catch(Exception ex)

295 {

296 player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);

297 }

298

299 return true;

300 }

301

302 private boolean setWarppoint(final Player player, final String[] args)

303 {

304 if(args.length != 1)

305 {

306 return false;

307 }

308

309 final String name = args[0].toLowerCase();

310

311 if(!Utils.payFee(player, Material.COMPASS, 1))

312 {

313 player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");

314 return true;

315 }

316

317 try

318 {

319 if(!config.setWarp(name, player.getLocation()))

320 {

321 player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");

322 return true;

323 }

324

325 player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");

326 }

327 catch(Exception ex)

328 {

329 player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);

330 }

331

332 return true;

333 }

334

335 private boolean isSlimeChunk(final Player player, final String[] args)

336 {

337 boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();

338

339 if(isSlimeChunk)

340 {

341 player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");

342 return true;

343 }

344 else

345 {

346 player.sendMessage(ChatColor.RED + "This is not a slime chunk!");

347 return true;

348 }

349 }

350

351 private boolean doReload(final Player player, final String[] args)

352 {

353 player.chat("/reload confirm");

354 return true;

355 }

356

357 private boolean placeBlockBelow(final Player player, final String[] args)

358 {

359 Location playerLocation = player.getLocation().clone();

360 Block blockBelow = playerLocation.add(0, -1, 0).getBlock();

361

362 if(!Utils.isAir(blockBelow.getType()))

363 {

364 return false;

365 }

366

367 if(!player.isOp())

368 {

369 player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);

370 return true;

371 }

372

373 blockBelow.setType(Material.GLASS);

374

375 return true;

376 }

377}