so://phie

poppy

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

blob: 8c4c7430e7873281d2f409d0147b08cc64837fb6 (14661 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 commonModule = new CommonModule();

72 pluginManager.registerEvents(commonModule, this);

73

74 doubleDoorModule = new DoubleDoorModule();

75 pluginManager.registerEvents(doubleDoorModule, this);

76

77 chairModule = new ChairModule();

78 pluginManager.registerEvents(chairModule, this);

79

80 autoWorkbenchModule = new AutoWorkbenchModule();

81 pluginManager.registerEvents(autoWorkbenchModule, this);

82

83 leavesDecayModule = new LeavesDecayModule(this);

84 pluginManager.registerEvents(leavesDecayModule, this);

85

86 cauldronModule = new CauldronModule(this);

87 pluginManager.registerEvents(cauldronModule, this);

88

89 spawnerModule = new SpawnerModule();

90 pluginManager.registerEvents(spawnerModule, this);

91

92 hopperSorterModule = new HopperSorterModule();

93 pluginManager.registerEvents(hopperSorterModule, this);

94

95 autoPlacerModule = new AutoPlacerModule(this);

96 pluginManager.registerEvents(autoPlacerModule, this);

97

98 autoBreakerModule = new AutoBreakerModule(this);

99 pluginManager.registerEvents(autoBreakerModule, this);

100

101 playerMountModule = new PlayerMountModule();

102 pluginManager.registerEvents(playerMountModule, this);

103

104 blockDetectorModule = new BlockDetectorModule();

105 pluginManager.registerEvents(blockDetectorModule, this);

106

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

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

109 Bukkit.addRecipe(recipe);

110

111 new WorldCreator("creative")

112 .type(WorldType.FLAT)

113 .generateStructures(false)

114 .createWorld();

115

116 new WorldCreator("survival")

117 .type(WorldType.NORMAL)

118 .generateStructures(true)

119 .createWorld();

120

121 new WorldCreator("survival_nether")

122 .environment(Environment.NETHER)

123 .generateStructures(true)

124 .createWorld();

125

126 new WorldCreator("survival_the_end")

127 .environment(Environment.THE_END)

128 .generateStructures(true)

129 .createWorld();

130 }

131

132 @Override

133 public void onDisable()

134 {

135 chairModule.onDisable();

136 }

137

138 @Override

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

140 {

141 if(sender instanceof Player)

142 {

143 Player player = (Player) sender;

144

145 switch(label)

146 {

147 case "head":

148 return setItemAsHead(player, args);

149 case "skull":

150 return getSkullForName(player, args);

151 case "invsee":

152 return openInventoryForPlayer(player, args);

153 case "info":

154 return openInfoBook(player, args);

155 case "spawn":

156 return teleportToSpawn(player, args);

157 case "home":

158 return teleportToHome(player, args);

159 case "warp":

160 return teleportToWarppoint(player, args);

161 case "sethome":

162 return setHome(player, args);

163 case "setwarp":

164 return setWarppoint(player, args);

165 case "slime":

166 return isSlimeChunk(player, args);

167 case "r":

168 return doReload(player, args);

169 case "up":

170 return placeBlockBelow(player, args);

171 case "e":

172 return openEnderChest(player, args);

173 case "enderchest":

174 return openEnderChest(player, args);

175 case "world":

176 return teleportToWorld(player, args);

177 case "gm":

178 return changeGameMode(player);

179 default:

180 return false;

181 }

182 }

183

184 return true;

185 }

186

187 @EventHandler

188 public void onPlayerPortal(final PlayerPortalEvent event)

189 {

190 final Player player = event.getPlayer();

191

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

193 {

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

195 {

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

197 }

198

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

200 {

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

202 }

203 }

204

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

206

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

208 {

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

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

211 event.setTo(loc);

212 Block block = loc.getBlock();

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

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

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

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

217 platformBlock.setType(Material.OBSIDIAN);

218 }

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

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

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

222 b.setType(Material.AIR);

223 }

224 }

225 }

226 }

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

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

229 }

230 }

231 }

232

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

234 {

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

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

237

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

239 {

240 player.eject();

241 }

242

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

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

245

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

247 {

248 if(head != null)

249 {

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

251 }

252 }

253

254 return true;

255 }

256

257 @SuppressWarnings("deprecation")

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

259 {

260 if(!player.isOp())

261 {

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

263 return true;

264 }

265

266 if(args.length != 1)

267 {

268 return false;

269 }

270

271 final String name = args[0];

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

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

274 meta.setOwner(name);

275 skull.setItemMeta(meta);

276

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

278

279 return true;

280 }

281

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

283 {

284 if(args.length == 0)

285 {

286 return false;

287 }

288

289 if(!player.isOp())

290 {

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

292 return true;

293 }

294

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

296

297 if(target == null)

298 {

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

300 return true;

301 }

302

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

304

305 return true;

306 }

307

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

309 {

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

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

312 meta.setTitle("Info");

313 meta.setAuthor("Server");

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

315 book.setItemMeta(meta);

316

317 player.openBook(book);

318

319 return true;

320 }

321

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

323 {

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

325

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

327 {

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

329 }

330

331 return true;

332 }

333

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

335 {

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

337

338 if(location == null)

339 {

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

341 return true;

342 }

343

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

345 {

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

347 }

348

349 return true;

350 }

351

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

353 {

354 if(args.length != 1)

355 {

356 return false;

357 }

358

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

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

361

362 if(location == null)

363 {

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

365 return true;

366 }

367

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

369 {

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

371 }

372

373 return true;

374 }

375

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

377 {

378 try

379 {

380 config.setHome(player);

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

382 }

383 catch(Exception ex)

384 {

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

386 }

387

388 return true;

389 }

390

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

392 {

393 if(args.length != 1)

394 {

395 return false;

396 }

397

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

399

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

401 {

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

403 return true;

404 }

405

406 try

407 {

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

409 {

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

411 return true;

412 }

413

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

415 }

416 catch(Exception ex)

417 {

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

419 }

420

421 return true;

422 }

423

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

425 {

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

427

428 if(isSlimeChunk)

429 {

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

431 return true;

432 }

433 else

434 {

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

436 return true;

437 }

438 }

439

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

441 {

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

443 return true;

444 }

445

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

447 {

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

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

450

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

452 {

453 return false;

454 }

455

456 if(!player.isOp())

457 {

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

459 return true;

460 }

461

462 blockBelow.setType(Material.GLASS);

463

464 return true;

465 }

466

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

468 {

469 if(args.length != 0)

470 {

471 if(!player.isOp())

472 {

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

474 return true;

475 }

476

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

478

479 if(target == null)

480 {

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

482 return true;

483 }

484

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

486

487 }

488 else

489 {

490 player.openInventory(player.getEnderChest());

491 }

492

493 return true;

494 }

495

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

497 {

498 if (args.length != 1)

499 {

500 return false;

501 }

502

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

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

505

506 if (world == null)

507 {

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

509 return true;

510 }

511

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

513 player.setGameMode(GameMode.SURVIVAL);

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

515

516 return true;

517 }

518

519 private boolean changeGameMode(final Player player)

520 {

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

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

523 return true;

524 }

525

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

527 {

528 player.setGameMode(GameMode.CREATIVE);

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

530 }

531 else

532 {

533 player.setGameMode(GameMode.SURVIVAL);

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

535 }

536

537 return true;

538 }

539}