so://phie

poppy

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

blob: ba9d66b202df5b6ffafc317f941d3abaeb10441d (15047 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 default:

182 return false;

183 }

184 }

185

186 return true;

187 }

188

189 @EventHandler

190 public void onPlayerPortal(final PlayerPortalEvent event)

191 {

192 final Player player = event.getPlayer();

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

194

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

196 {

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

198 {

199 final Location location = new Location(

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

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

202 event.getFrom().getBlockY(),

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

204 );

205 event.setTo(location);

206 }

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

208 {

209 final Location location = new Location(

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

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

212 event.getFrom().getBlockY(),

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

214 );

215 event.setTo(location);

216 }

217 }

218

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

220 {

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

222 {

223 final Location location = new Location(

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

225 100,

226 50,

227 0

228 );

229 event.setTo(location);

230

231 final Block block = location.getBlock();

232

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

234 {

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

236 {

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

238

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

240 {

241 platformBlock.setType(Material.OBSIDIAN);

242 }

243

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

245 {

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

247

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

249 {

250 b.setType(Material.AIR);

251 }

252 }

253 }

254 }

255 }

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

257 {

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

259 }

260 }

261 }

262

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

264 {

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

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

267

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

269 {

270 player.eject();

271 }

272

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

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

275

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

277 {

278 if(head != null)

279 {

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

281 }

282 }

283

284 return true;

285 }

286

287 @SuppressWarnings("deprecation")

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

289 {

290 if(!player.isOp())

291 {

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

293 return true;

294 }

295

296 if(args.length != 1)

297 {

298 return false;

299 }

300

301 final String name = args[0];

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

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

304 meta.setOwner(name);

305 skull.setItemMeta(meta);

306

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

308

309 return true;

310 }

311

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

313 {

314 if(args.length == 0)

315 {

316 return false;

317 }

318

319 if(!player.isOp())

320 {

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

322 return true;

323 }

324

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

326

327 if(target == null)

328 {

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

330 return true;

331 }

332

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

334

335 return true;

336 }

337

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

339 {

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

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

342 meta.setTitle("Info");

343 meta.setAuthor("Server");

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

345 book.setItemMeta(meta);

346

347 player.openBook(book);

348

349 return true;

350 }

351

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

353 {

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

355

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

357 {

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

359 }

360

361 return true;

362 }

363

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

365 {

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

367

368 if(location == null)

369 {

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

371 return true;

372 }

373

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

375 {

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

377 }

378

379 return true;

380 }

381

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

383 {

384 if(args.length != 1)

385 {

386 return false;

387 }

388

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

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

391

392 if(location == null)

393 {

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

395 return true;

396 }

397

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

399 {

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

401 }

402

403 return true;

404 }

405

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

407 {

408 try

409 {

410 config.setHome(player);

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

412 }

413 catch(Exception ex)

414 {

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

416 }

417

418 return true;

419 }

420

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

422 {

423 if(args.length != 1)

424 {

425 return false;

426 }

427

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

429

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

431 {

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

433 return true;

434 }

435

436 try

437 {

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

439 {

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

441 return true;

442 }

443

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

445 }

446 catch(Exception ex)

447 {

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

449 }

450

451 return true;

452 }

453

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

455 {

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

457

458 if(isSlimeChunk)

459 {

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

461 return true;

462 }

463 else

464 {

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

466 return true;

467 }

468 }

469

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

471 {

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

473 return true;

474 }

475

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

477 {

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

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

480

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

482 {

483 return false;

484 }

485

486 if(!player.isOp())

487 {

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

489 return true;

490 }

491

492 blockBelow.setType(Material.GLASS);

493

494 return true;

495 }

496

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

498 {

499 if(args.length != 0)

500 {

501 if(!player.isOp())

502 {

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

504 return true;

505 }

506

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

508

509 if(target == null)

510 {

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

512 return true;

513 }

514

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

516

517 }

518 else

519 {

520 player.openInventory(player.getEnderChest());

521 }

522

523 return true;

524 }

525

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

527 {

528 if (args.length != 1)

529 {

530 return false;

531 }

532

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

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

535

536 if (world == null)

537 {

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

539 return true;

540 }

541

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

543

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

545 {

546 player.setGameMode(GameMode.ADVENTURE);

547 }

548 else

549 {

550 player.setGameMode(GameMode.SURVIVAL);

551 }

552

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

554

555 return true;

556 }

557

558 private boolean changeGameMode(final Player player)

559 {

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

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

562 return true;

563 }

564

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

566 {

567 player.setGameMode(GameMode.CREATIVE);

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

569 }

570 else

571 {

572 player.setGameMode(GameMode.SURVIVAL);

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

574 }

575

576 return true;

577 }

578}