so://phie

poppy

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

blob: fc2dae22f99d6912aa6f9ace75570814b50f606b (12922 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.command.Command;

15import org.bukkit.command.CommandSender;

16import org.bukkit.entity.Player;

17import org.bukkit.event.EventHandler;

18import org.bukkit.event.Listener;

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

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

21import org.bukkit.inventory.FurnaceRecipe;

22import org.bukkit.inventory.ItemStack;

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

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

25import org.bukkit.plugin.Plugin;

26import org.bukkit.plugin.PluginManager;

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

28

29import poppy.modules.AutoBreakerModule;

30import poppy.modules.AutoPlacerModule;

31import poppy.modules.AutoWorkbenchModule;

32import poppy.modules.BlockDetectorModule;

33import poppy.modules.CauldronModule;

34import poppy.modules.ChairModule;

35import poppy.modules.DoubleDoorModule;

36import poppy.modules.HopperSorterModule;

37import poppy.modules.CommonModule;

38import poppy.modules.LeavesDecayModule;

39import poppy.modules.SpawnerModule;

40import poppy.modules.PlayerMountModule;

41

42

43public class Main extends JavaPlugin implements Listener

44{

45 private Plugin plugin;

46 private Config config;

47 private PluginManager pluginManager;

48

49 private CommonModule commonModule;

50 private DoubleDoorModule doubleDoorModule;

51 private ChairModule chairModule;

52 private AutoWorkbenchModule autoWorkbenchModule;

53 private LeavesDecayModule leavesDecayModule;

54 private CauldronModule cauldronModule;

55 private SpawnerModule spawnerModule;

56 private HopperSorterModule hopperSorterModule;

57 private AutoPlacerModule autoPlacerModule;

58 private AutoBreakerModule autoBreakerModule;

59 private PlayerMountModule playerMountModule;

60 private BlockDetectorModule blockDetectorModule;

61

62 @Override

63 public void onEnable()

64 {

65 plugin = this;

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

67

68 pluginManager = Bukkit.getPluginManager();

69

70 commonModule = new CommonModule();

71 pluginManager.registerEvents(commonModule, this);

72

73 doubleDoorModule = new DoubleDoorModule();

74 pluginManager.registerEvents(doubleDoorModule, this);

75

76 chairModule = new ChairModule();

77 pluginManager.registerEvents(chairModule, this);

78

79 autoWorkbenchModule = new AutoWorkbenchModule();

80 pluginManager.registerEvents(autoWorkbenchModule, this);

81

82 leavesDecayModule = new LeavesDecayModule(this);

83 pluginManager.registerEvents(leavesDecayModule, this);

84

85 cauldronModule = new CauldronModule(this);

86 pluginManager.registerEvents(cauldronModule, this);

87

88 spawnerModule = new SpawnerModule();

89 pluginManager.registerEvents(spawnerModule, this);

90

91 hopperSorterModule = new HopperSorterModule();

92 pluginManager.registerEvents(hopperSorterModule, this);

93

94 autoPlacerModule = new AutoPlacerModule(this);

95 pluginManager.registerEvents(autoPlacerModule, this);

96

97 autoBreakerModule = new AutoBreakerModule(this);

98 pluginManager.registerEvents(autoBreakerModule, this);

99

100 playerMountModule = new PlayerMountModule();

101 pluginManager.registerEvents(playerMountModule, this);

102

103 blockDetectorModule = new BlockDetectorModule();

104 pluginManager.registerEvents(blockDetectorModule, this);

105

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

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

108 Bukkit.addRecipe(recipe);

109

110 new WorldCreator("creative")

111 .type(WorldType.FLAT)

112 .generateStructures(false)

113 .createWorld();

114

115 new WorldCreator("survival")

116 .type(WorldType.NORMAL)

117 .generateStructures(true)

118 .createWorld();

119

120 new WorldCreator("survival_nether")

121 .environment(Environment.NETHER)

122 .generateStructures(true)

123 .createWorld();

124

125 new WorldCreator("survival_the_end")

126 .environment(Environment.THE_END)

127 .generateStructures(true)

128 .createWorld();

129 }

130

131 @Override

132 public void onDisable()

133 {

134 chairModule.onDisable();

135 }

136

137 @Override

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

139 {

140 if(sender instanceof Player)

141 {

142 Player player = (Player) sender;

143

144 switch(label)

145 {

146 case "head":

147 return setItemAsHead(player, args);

148 case "skull":

149 return getSkullForName(player, args);

150 case "invsee":

151 return openInventoryForPlayer(player, args);

152 case "info":

153 return openInfoBook(player, args);

154 case "spawn":

155 return teleportToSpawn(player, args);

156 case "home":

157 return teleportToHome(player, args);

158 case "warp":

159 return teleportToWarppoint(player, args);

160 case "sethome":

161 return setHome(player, args);

162 case "setwarp":

163 return setWarppoint(player, args);

164 case "slime":

165 return isSlimeChunk(player, args);

166 case "r":

167 return doReload(player, args);

168 case "up":

169 return placeBlockBelow(player, args);

170 case "e":

171 return openEnderChest(player, args);

172 case "enderchest":

173 return openEnderChest(player, args);

174 case "world":

175 return teleportToWorld(player, args);

176 case "gm":

177 return changeGameMode(player);

178 default:

179 return false;

180 }

181 }

182

183 return true;

184 }

185

186 @EventHandler

187 public void onPlayerPortal(final PlayerPortalEvent event)

188 {

189 final Player player = event.getPlayer();

190

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

192 {

193 return;

194 }

195

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

197 {

198 return;

199 }

200 }

201

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

203 {

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

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

206

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

208 {

209 player.eject();

210 }

211

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

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

214

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

216 {

217 if(head != null)

218 {

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

220 }

221 }

222

223 return true;

224 }

225

226 @SuppressWarnings("deprecation")

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

228 {

229 if(!player.isOp())

230 {

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

232 return true;

233 }

234

235 if(args.length != 1)

236 {

237 return false;

238 }

239

240 final String name = args[0];

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

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

243 meta.setOwner(name);

244 skull.setItemMeta(meta);

245

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

247

248 return true;

249 }

250

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

252 {

253 if(args.length == 0)

254 {

255 return false;

256 }

257

258 if(!player.isOp())

259 {

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

261 return true;

262 }

263

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

265

266 if(target == null)

267 {

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

269 return true;

270 }

271

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

273

274 return true;

275 }

276

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

278 {

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

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

281 meta.setTitle("Info");

282 meta.setAuthor("Server");

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

284 book.setItemMeta(meta);

285

286 player.openBook(book);

287

288 return true;

289 }

290

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

292 {

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

294

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

296 {

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

298 }

299

300 return true;

301 }

302

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

304 {

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

306

307 if(location == null)

308 {

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

310 return true;

311 }

312

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

314 {

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

316 }

317

318 return true;

319 }

320

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

322 {

323 if(args.length != 1)

324 {

325 return false;

326 }

327

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

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

330

331 if(location == null)

332 {

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

334 return true;

335 }

336

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

338 {

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

340 }

341

342 return true;

343 }

344

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

346 {

347 try

348 {

349 config.setHome(player);

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

351 }

352 catch(Exception ex)

353 {

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

355 }

356

357 return true;

358 }

359

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

361 {

362 if(args.length != 1)

363 {

364 return false;

365 }

366

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

368

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

370 {

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

372 return true;

373 }

374

375 try

376 {

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

378 {

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

380 return true;

381 }

382

383 player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " 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 isSlimeChunk(final Player player, final String[] args)

394 {

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

396

397 if(isSlimeChunk)

398 {

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

400 return true;

401 }

402 else

403 {

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

405 return true;

406 }

407 }

408

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

410 {

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

412 return true;

413 }

414

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

416 {

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

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

419

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

421 {

422 return false;

423 }

424

425 if(!player.isOp())

426 {

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

428 return true;

429 }

430

431 blockBelow.setType(Material.GLASS);

432

433 return true;

434 }

435

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

437 {

438 if(args.length != 0)

439 {

440 if(!player.isOp())

441 {

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

443 return true;

444 }

445

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

447

448 if(target == null)

449 {

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

451 return true;

452 }

453

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

455

456 }

457 else

458 {

459 player.openInventory(player.getEnderChest());

460 }

461

462 return true;

463 }

464

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

466 {

467 if (args.length != 1)

468 {

469 return false;

470 }

471

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

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

474

475 if (world == null)

476 {

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

478 return true;

479 }

480

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

482 player.setGameMode(GameMode.SURVIVAL);

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

484

485 return true;

486 }

487

488 private boolean changeGameMode(final Player player)

489 {

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

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

492 return true;

493 }

494

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

496 {

497 player.setGameMode(GameMode.CREATIVE);

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

499 }

500 else

501 {

502 player.setGameMode(GameMode.SURVIVAL);

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

504 }

505

506 return true;

507 }

508}