so://phie

poppy

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

blob: defb173d952736d3eaad87412c2b8e69b90e5995 (12095 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.NamespacedKey;

9import org.bukkit.World;

10import org.bukkit.WorldCreator;

11import org.bukkit.WorldType;

12import org.bukkit.block.Block;

13import org.bukkit.command.Command;

14import org.bukkit.command.CommandSender;

15import org.bukkit.entity.Player;

16import org.bukkit.inventory.FurnaceRecipe;

17import org.bukkit.inventory.ItemStack;

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

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

20import org.bukkit.plugin.Plugin;

21import org.bukkit.plugin.PluginManager;

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

23

24import poppy.modules.AutoBreakerModule;

25import poppy.modules.AutoPlacerModule;

26import poppy.modules.AutoWorkbenchModule;

27import poppy.modules.BlockDetectorModule;

28import poppy.modules.CauldronModule;

29import poppy.modules.ChairModule;

30import poppy.modules.DoubleDoorModule;

31import poppy.modules.HopperSorterModule;

32import poppy.modules.CommonModule;

33import poppy.modules.LeavesDecayModule;

34import poppy.modules.SpawnerModule;

35import poppy.modules.PlayerMountModule;

36

37

38public class Main extends JavaPlugin

39{

40 private Plugin plugin;

41 private Config config;

42 private PluginManager pluginManager;

43

44 private CommonModule commonModule;

45 private DoubleDoorModule doubleDoorModule;

46 private ChairModule chairModule;

47 private AutoWorkbenchModule autoWorkbenchModule;

48 private LeavesDecayModule leavesDecayModule;

49 private CauldronModule cauldronModule;

50 private SpawnerModule spawnerModule;

51 private HopperSorterModule hopperSorterModule;

52 private AutoPlacerModule autoPlacerModule;

53 private AutoBreakerModule autoBreakerModule;

54 private PlayerMountModule playerMountModule;

55 private BlockDetectorModule blockDetectorModule;

56

57 @Override

58 public void onEnable()

59 {

60 plugin = this;

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

62

63 pluginManager = Bukkit.getPluginManager();

64

65 commonModule = new CommonModule();

66 pluginManager.registerEvents(commonModule, this);

67

68 doubleDoorModule = new DoubleDoorModule();

69 pluginManager.registerEvents(doubleDoorModule, this);

70

71 chairModule = new ChairModule();

72 pluginManager.registerEvents(chairModule, this);

73

74 autoWorkbenchModule = new AutoWorkbenchModule();

75 pluginManager.registerEvents(autoWorkbenchModule, this);

76

77 leavesDecayModule = new LeavesDecayModule(this);

78 pluginManager.registerEvents(leavesDecayModule, this);

79

80 cauldronModule = new CauldronModule(this);

81 pluginManager.registerEvents(cauldronModule, this);

82

83 spawnerModule = new SpawnerModule();

84 pluginManager.registerEvents(spawnerModule, this);

85

86 hopperSorterModule = new HopperSorterModule();

87 pluginManager.registerEvents(hopperSorterModule, this);

88

89 autoPlacerModule = new AutoPlacerModule(this);

90 pluginManager.registerEvents(autoPlacerModule, this);

91

92 autoBreakerModule = new AutoBreakerModule(this);

93 pluginManager.registerEvents(autoBreakerModule, this);

94

95 playerMountModule = new PlayerMountModule();

96 pluginManager.registerEvents(playerMountModule, this);

97

98 blockDetectorModule = new BlockDetectorModule();

99 pluginManager.registerEvents(blockDetectorModule, this);

100

101 NamespacedKey key = new NamespacedKey(this, "leather");

102 FurnaceRecipe recipe = new FurnaceRecipe(key, new ItemStack(Material.LEATHER), Material.ROTTEN_FLESH, 1, 200);

103 Bukkit.addRecipe(recipe);

104

105 new WorldCreator("creative")

106 .type(WorldType.FLAT)

107 .generateStructures(false)

108 .createWorld();

109

110 new WorldCreator("survival")

111 .type(WorldType.NORMAL)

112 .generateStructures(true)

113 .createWorld();

114 }

115

116 @Override

117 public void onDisable()

118 {

119 chairModule.onDisable();

120 }

121

122 @Override

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

124 {

125 if(sender instanceof Player)

126 {

127 Player player = (Player) sender;

128

129 switch(label)

130 {

131 case "head":

132 return setItemAsHead(player, args);

133 case "skull":

134 return getSkullForName(player, args);

135 case "invsee":

136 return openInventoryForPlayer(player, args);

137 case "info":

138 return openInfoBook(player, args);

139 case "spawn":

140 return teleportToSpawn(player, args);

141 case "home":

142 return teleportToHome(player, args);

143 case "warp":

144 return teleportToWarppoint(player, args);

145 case "sethome":

146 return setHome(player, args);

147 case "setwarp":

148 return setWarppoint(player, args);

149 case "slime":

150 return isSlimeChunk(player, args);

151 case "r":

152 return doReload(player, args);

153 case "up":

154 return placeBlockBelow(player, args);

155 case "e":

156 return openEnderChest(player, args);

157 case "enderchest":

158 return openEnderChest(player, args);

159 case "world":

160 return teleportToWorld(player, args);

161 case "gm":

162 return changeGameMode(player);

163 default:

164 return false;

165 }

166 }

167

168 return true;

169 }

170

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

172 {

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

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

175

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

177 {

178 player.eject();

179 }

180

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

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

183

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

185 {

186 if(head != null)

187 {

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

189 }

190 }

191

192 return true;

193 }

194

195 @SuppressWarnings("deprecation")

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

197 {

198 if(!player.isOp())

199 {

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

201 return true;

202 }

203

204 if(args.length != 1)

205 {

206 return false;

207 }

208

209 final String name = args[0];

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

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

212 meta.setOwner(name);

213 skull.setItemMeta(meta);

214

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

216

217 return true;

218 }

219

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

221 {

222 if(args.length == 0)

223 {

224 return false;

225 }

226

227 if(!player.isOp())

228 {

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

230 return true;

231 }

232

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

234

235 if(target == null)

236 {

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

238 return true;

239 }

240

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

242

243 return true;

244 }

245

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

247 {

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

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

250 meta.setTitle("Info");

251 meta.setAuthor("Server");

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

253 book.setItemMeta(meta);

254

255 player.openBook(book);

256

257 return true;

258 }

259

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

261 {

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

263

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

265 {

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

267 }

268

269 return true;

270 }

271

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

273 {

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

275

276 if(location == null)

277 {

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

279 return true;

280 }

281

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

283 {

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

285 }

286

287 return true;

288 }

289

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

291 {

292 if(args.length != 1)

293 {

294 return false;

295 }

296

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

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

299

300 if(location == null)

301 {

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

303 return true;

304 }

305

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

307 {

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

309 }

310

311 return true;

312 }

313

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

315 {

316 try

317 {

318 config.setHome(player);

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

320 }

321 catch(Exception ex)

322 {

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

324 }

325

326 return true;

327 }

328

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

330 {

331 if(args.length != 1)

332 {

333 return false;

334 }

335

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

337

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

339 {

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

341 return true;

342 }

343

344 try

345 {

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

347 {

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

349 return true;

350 }

351

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

353 }

354 catch(Exception ex)

355 {

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

357 }

358

359 return true;

360 }

361

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

363 {

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

365

366 if(isSlimeChunk)

367 {

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

369 return true;

370 }

371 else

372 {

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

374 return true;

375 }

376 }

377

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

379 {

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

381 return true;

382 }

383

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

385 {

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

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

388

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

390 {

391 return false;

392 }

393

394 if(!player.isOp())

395 {

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

397 return true;

398 }

399

400 blockBelow.setType(Material.GLASS);

401

402 return true;

403 }

404

405 private boolean openEnderChest(final Player player, final String[] args)

406 {

407 if(args.length != 0)

408 {

409 if(!player.isOp())

410 {

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

412 return true;

413 }

414

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

416

417 if(target == null)

418 {

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

420 return true;

421 }

422

423 player.openInventory(target.getEnderChest());

424

425 }

426 else

427 {

428 player.openInventory(player.getEnderChest());

429 }

430

431 return true;

432 }

433

434 private boolean teleportToWorld(final Player player, final String[] args)

435 {

436 if (args.length != 1)

437 {

438 return false;

439 }

440

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

442 final World world = Bukkit.getServer().getWorld(name);

443

444 if (world == null)

445 {

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

447 return true;

448 }

449

450 player.teleport(world.getSpawnLocation());

451 player.setGameMode(GameMode.SURVIVAL);

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

453

454 return true;

455 }

456

457 private boolean changeGameMode(final Player player)

458 {

459 if (!"overworld".equals(player.getWorld().getName())) {

460 player.sendMessage(ChatColor.RED + "This is not a creative world!");

461 return true;

462 }

463

464 if (GameMode.SURVIVAL.equals(player.getGameMode()))

465 {

466 player.setGameMode(GameMode.CREATIVE);

467 player.sendMessage(ChatColor.GRAY + "Changed gamemode to creative.");

468 }

469 else

470 {

471 player.setGameMode(GameMode.SURVIVAL);

472 player.sendMessage(ChatColor.GRAY + "Changed gamemode to survival.");

473 }

474

475 return true;

476 }

477}