so://phie

poppy

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

blob: ed052148acabdf2beefb45fadea31c279099f424 (14708 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("creative")

114 .type(WorldType.FLAT)

115 .generateStructures(false)

116 .createWorld();

117

118 new WorldCreator("survival")

119 .type(WorldType.NORMAL)

120 .generateStructures(true)

121 .createWorld();

122

123 new WorldCreator("survival_nether")

124 .environment(Environment.NETHER)

125 .generateStructures(true)

126 .createWorld();

127

128 new WorldCreator("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

194 if (event.getCause() == TeleportCause.NETHER_PORTAL);

195 {

196 if (player.getWorld().getName().equals("survival"))

197 {

198 event.setTo(new Location(Bukkit.getWorld("survival_nether"), event.getFrom().getBlockX() / 8, event.getFrom().getBlockY(), event.getFrom().getBlockZ() / 8));

199 }

200

201 else if (player.getWorld().getName().equals("survival_nether"))

202 {

203 event.setTo(new Location(Bukkit.getWorld("survival"), event.getFrom().getBlockX() * 8, event.getFrom().getBlockY(), event.getFrom().getBlockZ() * 8));

204 }

205 }

206

207 // TODO ugly code quick fix only!!!

208

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

210 {

211 if (player.getWorld().getName().equals("survival")) {

212 Location loc = new Location(Bukkit.getWorld("survival_the_end"), 100, 50, 0);

213 event.setTo(loc);

214 Block block = loc.getBlock();

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

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

217 Block platformBlock = loc.getWorld().getBlockAt(x, block.getY() - 1, z);

218 if (platformBlock.getType() != Material.OBSIDIAN) {

219 platformBlock.setType(Material.OBSIDIAN);

220 }

221 for (int yMod = 1; yMod <= 3; yMod++) {

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

223 if (b.getType() != Material.AIR) {

224 b.setType(Material.AIR);

225 }

226 }

227 }

228 }

229 } else if (player.getWorld().getName().equals("survival_the_end")) {

230 event.setTo(Bukkit.getWorld("survival").getSpawnLocation());

231 }

232 }

233 }

234

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

236 {

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

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

239

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

241 {

242 player.eject();

243 }

244

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

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

247

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

249 {

250 if(head != null)

251 {

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

253 }

254 }

255

256 return true;

257 }

258

259 @SuppressWarnings("deprecation")

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

261 {

262 if(!player.isOp())

263 {

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

265 return true;

266 }

267

268 if(args.length != 1)

269 {

270 return false;

271 }

272

273 final String name = args[0];

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

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

276 meta.setOwner(name);

277 skull.setItemMeta(meta);

278

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

280

281 return true;

282 }

283

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

285 {

286 if(args.length == 0)

287 {

288 return false;

289 }

290

291 if(!player.isOp())

292 {

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

294 return true;

295 }

296

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

298

299 if(target == null)

300 {

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

302 return true;

303 }

304

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

306

307 return true;

308 }

309

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

311 {

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

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

314 meta.setTitle("Info");

315 meta.setAuthor("Server");

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

317 book.setItemMeta(meta);

318

319 player.openBook(book);

320

321 return true;

322 }

323

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

325 {

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

327

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

329 {

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

331 }

332

333 return true;

334 }

335

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

337 {

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

339

340 if(location == null)

341 {

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

343 return true;

344 }

345

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

347 {

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

349 }

350

351 return true;

352 }

353

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

355 {

356 if(args.length != 1)

357 {

358 return false;

359 }

360

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

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

363

364 if(location == null)

365 {

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

367 return true;

368 }

369

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

371 {

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

373 }

374

375 return true;

376 }

377

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

379 {

380 try

381 {

382 config.setHome(player);

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

384 }

385 catch(Exception ex)

386 {

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

388 }

389

390 return true;

391 }

392

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

394 {

395 if(args.length != 1)

396 {

397 return false;

398 }

399

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

401

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

403 {

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

405 return true;

406 }

407

408 try

409 {

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

411 {

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

413 return true;

414 }

415

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

417 }

418 catch(Exception ex)

419 {

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

421 }

422

423 return true;

424 }

425

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

427 {

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

429

430 if(isSlimeChunk)

431 {

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

433 return true;

434 }

435 else

436 {

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

438 return true;

439 }

440 }

441

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

443 {

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

445 return true;

446 }

447

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

449 {

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

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

452

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

454 {

455 return false;

456 }

457

458 if(!player.isOp())

459 {

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

461 return true;

462 }

463

464 blockBelow.setType(Material.GLASS);

465

466 return true;

467 }

468

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

470 {

471 if(args.length != 0)

472 {

473 if(!player.isOp())

474 {

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

476 return true;

477 }

478

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

480

481 if(target == null)

482 {

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

484 return true;

485 }

486

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

488

489 }

490 else

491 {

492 player.openInventory(player.getEnderChest());

493 }

494

495 return true;

496 }

497

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

499 {

500 if (args.length != 1)

501 {

502 return false;

503 }

504

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

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

507

508 if (world == null)

509 {

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

511 return true;

512 }

513

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

515 player.setGameMode(GameMode.SURVIVAL);

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

517

518 return true;

519 }

520

521 private boolean changeGameMode(final Player player)

522 {

523 if (!"world".equals(player.getWorld().getName())) {

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

525 return true;

526 }

527

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

529 {

530 player.setGameMode(GameMode.CREATIVE);

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

532 }

533 else

534 {

535 player.setGameMode(GameMode.SURVIVAL);

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

537 }

538

539 return true;

540 }

541}