so://phie

poppy

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

blob: d144b7c5ba8f9fc975a0e1c53f562ee86149c09b (15704 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.World.Environment;

13import org.bukkit.block.Block;

14import org.bukkit.block.BlockFace;

15import org.bukkit.command.Command;

16import org.bukkit.command.CommandSender;

17import org.bukkit.entity.Player;

18import org.bukkit.event.EventHandler;

19import org.bukkit.event.Listener;

20import org.bukkit.event.player.PlayerPortalEvent;

21import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;

22import org.bukkit.inventory.FurnaceRecipe;

23import org.bukkit.inventory.ItemStack;

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

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

26import org.bukkit.plugin.Plugin;

27import org.bukkit.plugin.PluginManager;

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

29

30import poppy.modules.AutoBreakerModule;

31import poppy.modules.AutoPlacerModule;

32import poppy.modules.AutoWorkbenchModule;

33import poppy.modules.BlockDetectorModule;

34import poppy.modules.CauldronModule;

35import poppy.modules.ChairModule;

36import poppy.modules.DoubleDoorModule;

37import poppy.modules.HopperSorterModule;

38import poppy.modules.CommonModule;

39import poppy.modules.LeavesDecayModule;

40import poppy.modules.SpawnerModule;

41import poppy.modules.PlayerMountModule;

42

43

44public class Main extends JavaPlugin implements Listener

45{

46 private Plugin plugin;

47 private Config config;

48 private PluginManager pluginManager;

49

50 private CommonModule commonModule;

51 private DoubleDoorModule doubleDoorModule;

52 private ChairModule chairModule;

53 private AutoWorkbenchModule autoWorkbenchModule;

54 private LeavesDecayModule leavesDecayModule;

55 private CauldronModule cauldronModule;

56 private SpawnerModule spawnerModule;

57 private HopperSorterModule hopperSorterModule;

58 private AutoPlacerModule autoPlacerModule;

59 private AutoBreakerModule autoBreakerModule;

60 private PlayerMountModule playerMountModule;

61 private BlockDetectorModule blockDetectorModule;

62

63 @Override

64 public void onEnable()

65 {

66 plugin = this;

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

68

69 pluginManager = Bukkit.getPluginManager();

70

71 pluginManager.registerEvents(this, this);

72

73 commonModule = new CommonModule();

74 pluginManager.registerEvents(commonModule, this);

75

76 doubleDoorModule = new DoubleDoorModule();

77 pluginManager.registerEvents(doubleDoorModule, this);

78

79 chairModule = new ChairModule();

80 pluginManager.registerEvents(chairModule, this);

81

82 autoWorkbenchModule = new AutoWorkbenchModule();

83 pluginManager.registerEvents(autoWorkbenchModule, this);

84

85 leavesDecayModule = new LeavesDecayModule(this);

86 pluginManager.registerEvents(leavesDecayModule, this);

87

88 cauldronModule = new CauldronModule(this);

89 pluginManager.registerEvents(cauldronModule, this);

90

91 spawnerModule = new SpawnerModule();

92 pluginManager.registerEvents(spawnerModule, this);

93

94 hopperSorterModule = new HopperSorterModule();

95 pluginManager.registerEvents(hopperSorterModule, this);

96

97 autoPlacerModule = new AutoPlacerModule(this);

98 pluginManager.registerEvents(autoPlacerModule, this);

99

100 autoBreakerModule = new AutoBreakerModule(this);

101 pluginManager.registerEvents(autoBreakerModule, this);

102

103 playerMountModule = new PlayerMountModule();

104 pluginManager.registerEvents(playerMountModule, this);

105

106 blockDetectorModule = new BlockDetectorModule();

107 pluginManager.registerEvents(blockDetectorModule, this);

108

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

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

111 Bukkit.addRecipe(recipe);

112

113 new WorldCreator(Constants.Worlds.BACKROOMS)

114 .type(WorldType.FLAT)

115 .generateStructures(false)

116 .createWorld();

117

118 new WorldCreator(Constants.Worlds.SURVIVAL)

119 .type(WorldType.NORMAL)

120 .generateStructures(true)

121 .createWorld();

122

123 new WorldCreator(Constants.Worlds.SURVIVAL_NETHER)

124 .environment(Environment.NETHER)

125 .generateStructures(true)

126 .createWorld();

127

128 new WorldCreator(Constants.Worlds.SURVIVAL_THE_END)

129 .environment(Environment.THE_END)

130 .generateStructures(true)

131 .createWorld();

132 }

133

134 @Override

135 public void onDisable()

136 {

137 chairModule.onDisable();

138 }

139

140 @Override

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

142 {

143 if(sender instanceof Player)

144 {

145 Player player = (Player) sender;

146

147 switch(label)

148 {

149 case "head":

150 return setItemAsHead(player, args);

151 case "skull":

152 return getSkullForName(player, args);

153 case "invsee":

154 return openInventoryForPlayer(player, args);

155 case "info":

156 return openInfoBook(player, args);

157 case "spawn":

158 return teleportToSpawn(player, args);

159 case "home":

160 return teleportToHome(player, args);

161 case "warp":

162 return teleportToWarppoint(player, args);

163 case "sethome":

164 return setHome(player, args);

165 case "setwarp":

166 return setWarppoint(player, args);

167 case "slime":

168 return isSlimeChunk(player, args);

169 case "r":

170 return doReload(player, args);

171 case "up":

172 return placeBlockBelow(player, args);

173 case "e":

174 return openEnderChest(player, args);

175 case "enderchest":

176 return openEnderChest(player, args);

177 case "world":

178 return teleportToWorld(player, args);

179 case "gm":

180 return changeGameMode(player);

181 case "heal":

182 return heal(player, args);

183 default:

184 return false;

185 }

186 }

187

188 return true;

189 }

190

191 @EventHandler

192 public void onPlayerPortal(final PlayerPortalEvent event)

193 {

194 final Player player = event.getPlayer();

195 final String worldName = player.getWorld().getName();

196

197 if (event.getCause() == TeleportCause.NETHER_PORTAL)

198 {

199 if (worldName.equals(Constants.Worlds.SURVIVAL))

200 {

201 final Location location = new Location(

202 Bukkit.getWorld(Constants.Worlds.SURVIVAL_NETHER),

203 event.getFrom().getBlockX() / 8,

204 event.getFrom().getBlockY(),

205 event.getFrom().getBlockZ() / 8

206 );

207 event.setTo(location);

208 }

209 else if (worldName.equals(Constants.Worlds.SURVIVAL_NETHER))

210 {

211 final Location location = new Location(

212 Bukkit.getWorld(Constants.Worlds.SURVIVAL),

213 event.getFrom().getBlockX() * 8,

214 event.getFrom().getBlockY(),

215 event.getFrom().getBlockZ() * 8

216 );

217 event.setTo(location);

218 }

219 }

220

221 if (event.getCause() == TeleportCause.END_PORTAL)

222 {

223 if (worldName.equals(Constants.Worlds.SURVIVAL))

224 {

225 final Location location = new Location(

226 Bukkit.getWorld(Constants.Worlds.SURVIVAL_THE_END),

227 100,

228 50,

229 0

230 );

231 event.setTo(location);

232

233 final Block block = location.getBlock();

234

235 for (int x = block.getX() - 2; x <= block.getX() + 2; x++)

236 {

237 for (int z = block.getZ() - 2; z <= block.getZ() + 2; z++)

238 {

239 final Block platformBlock = location.getWorld().getBlockAt(x, block.getY() - 1, z);

240

241 if (platformBlock.getType() != Material.OBSIDIAN)

242 {

243 platformBlock.setType(Material.OBSIDIAN);

244 }

245

246 for (int yMod = 1; yMod <= 3; yMod++)

247 {

248 final Block b = platformBlock.getRelative(BlockFace.UP, yMod);

249

250 if (b.getType() != Material.AIR)

251 {

252 b.setType(Material.AIR);

253 }

254 }

255 }

256 }

257 }

258 else if (worldName.equals(Constants.Worlds.SURVIVAL_THE_END))

259 {

260 event.setTo(Bukkit.getWorld(Constants.Worlds.SURVIVAL).getSpawnLocation());

261 }

262 }

263 }

264

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

266 {

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

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

269

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

271 {

272 player.eject();

273 }

274

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

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

277

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

279 {

280 if(head != null)

281 {

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

283 }

284 }

285

286 return true;

287 }

288

289 @SuppressWarnings("deprecation")

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

291 {

292 if(!player.isOp())

293 {

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

295 return true;

296 }

297

298 if(args.length != 1)

299 {

300 return false;

301 }

302

303 final String name = args[0];

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

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

306 meta.setOwner(name);

307 skull.setItemMeta(meta);

308

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

310

311 return true;

312 }

313

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

315 {

316 if(args.length == 0)

317 {

318 return false;

319 }

320

321 if(!player.isOp())

322 {

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

324 return true;

325 }

326

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

328

329 if(target == null)

330 {

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

332 return true;

333 }

334

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

336

337 return true;

338 }

339

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

341 {

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

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

344 meta.setTitle("Info");

345 meta.setAuthor("Server");

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

347 book.setItemMeta(meta);

348

349 player.openBook(book);

350

351 return true;

352 }

353

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

355 {

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

357

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

359 {

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

361 }

362

363 return true;

364 }

365

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

367 {

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

369

370 if(location == null)

371 {

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

373 return true;

374 }

375

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

377 {

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

379 }

380

381 return true;

382 }

383

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

385 {

386 if(args.length != 1)

387 {

388 return false;

389 }

390

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

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

393

394 if(location == null)

395 {

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

397 return true;

398 }

399

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

401 {

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

403 }

404

405 return true;

406 }

407

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

409 {

410 try

411 {

412 config.setHome(player);

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

414 }

415 catch(Exception ex)

416 {

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

418 }

419

420 return true;

421 }

422

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

424 {

425 if(args.length != 1)

426 {

427 return false;

428 }

429

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

431

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

433 {

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

435 return true;

436 }

437

438 try

439 {

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

441 {

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

443 return true;

444 }

445

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

447 }

448 catch(Exception ex)

449 {

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

451 }

452

453 return true;

454 }

455

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

457 {

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

459

460 if(isSlimeChunk)

461 {

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

463 return true;

464 }

465 else

466 {

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

468 return true;

469 }

470 }

471

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

473 {

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

475 return true;

476 }

477

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

479 {

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

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

482

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

484 {

485 return false;

486 }

487

488 if(!player.isOp())

489 {

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

491 return true;

492 }

493

494 blockBelow.setType(Material.GLASS);

495

496 return true;

497 }

498

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

500 {

501 if(args.length != 0)

502 {

503 if(!player.isOp())

504 {

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

506 return true;

507 }

508

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

510

511 if(target == null)

512 {

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

514 return true;

515 }

516

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

518

519 }

520 else

521 {

522 player.openInventory(player.getEnderChest());

523 }

524

525 return true;

526 }

527

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

529 {

530 if (args.length != 1)

531 {

532 return false;

533 }

534

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

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

537

538 if (world == null)

539 {

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

541 return true;

542 }

543

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

545

546 if (world.getName().equals(Constants.Worlds.BACKROOMS))

547 {

548 player.setGameMode(GameMode.ADVENTURE);

549 }

550 else

551 {

552 player.setGameMode(GameMode.SURVIVAL);

553 }

554

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

556

557 return true;

558 }

559

560 private boolean changeGameMode(final Player player)

561 {

562 if (!Constants.Worlds.DEFAULT.equals(player.getWorld().getName())) {

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

564 return true;

565 }

566

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

568 {

569 player.setGameMode(GameMode.CREATIVE);

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

571 }

572 else

573 {

574 player.setGameMode(GameMode.SURVIVAL);

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

576 }

577

578 return true;

579 }

580

581 private boolean heal(final Player player, final String[] args)

582 {

583 if(args.length != 0)

584 {

585 Player argPlayer = Bukkit.getPlayer(args[0]);

586

587 if(argPlayer == null)

588 {

589 player.sendMessage("Player" + args[0] + " not found");

590 return false;

591

592 }

593

594 argPlayer.setHealth(20);

595 argPlayer.setFoodLevel(20);

596

597 player.sendMessage("You have healed " + argPlayer.getName());

598 argPlayer.sendMessage("You have been healed");

599 }

600 else

601 {

602 player.setHealth(20);

603 player.setFoodLevel(20);

604

605 player.sendMessage("You have been healed");

606 }

607

608 return true;

609 }

610}