so://phie

poppy

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

blob: e35b4459219a5412795dca0904763aa76dc261d7 (10739 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.WorldCreator;

10import org.bukkit.WorldType;

11import org.bukkit.block.Block;

12import org.bukkit.command.Command;

13import org.bukkit.command.CommandSender;

14import org.bukkit.entity.Player;

15import org.bukkit.inventory.FurnaceRecipe;

16import org.bukkit.inventory.ItemStack;

17import org.bukkit.inventory.RecipeChoice;

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

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

20import org.bukkit.plugin.Plugin;

21import org.bukkit.plugin.PluginManager;

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

23

24import poppy.modules.AutoBreakerModule;

25import poppy.modules.AutoPlacerModule;

26import poppy.modules.AutoWorkbenchModule;

27import poppy.modules.BlockDetectorModule;

28import poppy.modules.CauldronModule;

29import poppy.modules.ChairModule;

30import poppy.modules.DoubleDoorModule;

31import poppy.modules.HopperSorterModule;

32import poppy.modules.CommonModule;

33import poppy.modules.LeavesDecayModule;

34import poppy.modules.SpawnerModule;

35import poppy.modules.PlayerMountModule;

36

37

38public class Main extends JavaPlugin

39{

40 private Plugin plugin;

41 private Config config;

42 private PluginManager pluginManager;

43

44 private CommonModule commonModule;

45 private DoubleDoorModule doubleDoorModule;

46 private ChairModule chairModule;

47 private AutoWorkbenchModule autoWorkbenchModule;

48 private LeavesDecayModule leavesDecayModule;

49 private CauldronModule cauldronModule;

50 private SpawnerModule spawnerModule;

51 private HopperSorterModule hopperSorterModule;

52 private AutoPlacerModule autoPlacerModule;

53 private AutoBreakerModule autoBreakerModule;

54 private PlayerMountModule playerMountModule;

55 private BlockDetectorModule blockDetectorModule;

56

57 @Override

58 public void onEnable()

59 {

60 plugin = this;

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

62

63 pluginManager = Bukkit.getPluginManager();

64

65 commonModule = new CommonModule();

66 pluginManager.registerEvents(commonModule, this);

67

68 doubleDoorModule = new DoubleDoorModule();

69 pluginManager.registerEvents(doubleDoorModule, this);

70

71 chairModule = new ChairModule();

72 pluginManager.registerEvents(chairModule, this);

73

74 autoWorkbenchModule = new AutoWorkbenchModule();

75 pluginManager.registerEvents(autoWorkbenchModule, this);

76

77 leavesDecayModule = new LeavesDecayModule(this);

78 pluginManager.registerEvents(leavesDecayModule, this);

79

80 cauldronModule = new CauldronModule(this);

81 pluginManager.registerEvents(cauldronModule, this);

82

83 spawnerModule = new SpawnerModule();

84 pluginManager.registerEvents(spawnerModule, this);

85

86 hopperSorterModule = new HopperSorterModule();

87 pluginManager.registerEvents(hopperSorterModule, this);

88

89 autoPlacerModule = new AutoPlacerModule(this);

90 pluginManager.registerEvents(autoPlacerModule, this);

91

92 autoBreakerModule = new AutoBreakerModule(this);

93 pluginManager.registerEvents(autoBreakerModule, this);

94

95 playerMountModule = new PlayerMountModule();

96 pluginManager.registerEvents(playerMountModule, this);

97

98 blockDetectorModule = new BlockDetectorModule();

99 pluginManager.registerEvents(blockDetectorModule, this);

100

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

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

103 Bukkit.addRecipe(recipe);

104

105 new WorldCreator("creative")

106 .type(WorldType.FLAT)

107 .generateStructures(false)

108 .createWorld();

109 }

110

111 @Override

112 public void onDisable()

113 {

114 chairModule.onDisable();

115 }

116

117 @Override

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

119 {

120 if(sender instanceof Player)

121 {

122 Player player = (Player) sender;

123

124 switch(label)

125 {

126 case "head":

127 return setItemAsHead(player, args);

128 case "skull":

129 return getSkullForName(player, args);

130 case "invsee":

131 return openInventoryForPlayer(player, args);

132 case "info":

133 return openInfoBook(player, args);

134 case "spawn":

135 return teleportToSpawn(player, args);

136 case "home":

137 return teleportToHome(player, args);

138 case "warp":

139 return teleportToWarppoint(player, args);

140 case "sethome":

141 return setHome(player, args);

142 case "setwarp":

143 return setWarppoint(player, args);

144 case "slime":

145 return isSlimeChunk(player, args);

146 case "r":

147 return doReload(player, args);

148 case "up":

149 return placeBlockBelow(player, args);

150 case "e":

151 return openEnderChest(player, args);

152 case "enderchest":

153 return openEnderChest(player, args);

154 default:

155 return false;

156 }

157 }

158

159 return true;

160 }

161

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

163 {

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

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

166

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

168 {

169 player.eject();

170 }

171

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

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

174

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

176 {

177 if(head != null)

178 {

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

180 }

181 }

182

183 return true;

184 }

185

186 @SuppressWarnings("deprecation")

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

188 {

189 if(!player.isOp())

190 {

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

192 return true;

193 }

194

195 if(args.length != 1)

196 {

197 return false;

198 }

199

200 final String name = args[0];

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

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

203 meta.setOwner(name);

204 skull.setItemMeta(meta);

205

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

207

208 return true;

209 }

210

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

212 {

213 if(args.length == 0)

214 {

215 return false;

216 }

217

218 if(!player.isOp())

219 {

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

221 return true;

222 }

223

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

225

226 if(target == null)

227 {

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

229 return true;

230 }

231

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

233

234 return true;

235 }

236

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

238 {

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

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

241 meta.setTitle("Info");

242 meta.setAuthor("Server");

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

244 book.setItemMeta(meta);

245

246 player.openBook(book);

247

248 return true;

249 }

250

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

252 {

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

254

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

256 {

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

258 }

259

260 return true;

261 }

262

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

264 {

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

266

267 if(location == null)

268 {

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

270 return true;

271 }

272

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

274 {

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

276 }

277

278 return true;

279 }

280

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

282 {

283 if(args.length != 1)

284 {

285 return false;

286 }

287

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

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

290

291 if(location == null)

292 {

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

294 return true;

295 }

296

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

298 {

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

300 }

301

302 return true;

303 }

304

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

306 {

307 try

308 {

309 config.setHome(player);

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

311 }

312 catch(Exception ex)

313 {

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

315 }

316

317 return true;

318 }

319

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

321 {

322 if(args.length != 1)

323 {

324 return false;

325 }

326

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

328

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

330 {

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

332 return true;

333 }

334

335 try

336 {

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

338 {

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

340 return true;

341 }

342

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

344 }

345 catch(Exception ex)

346 {

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

348 }

349

350 return true;

351 }

352

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

354 {

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

356

357 if(isSlimeChunk)

358 {

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

360 return true;

361 }

362 else

363 {

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

365 return true;

366 }

367 }

368

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

370 {

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

372 return true;

373 }

374

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

376 {

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

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

379

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

381 {

382 return false;

383 }

384

385 if(!player.isOp())

386 {

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

388 return true;

389 }

390

391 blockBelow.setType(Material.GLASS);

392

393 return true;

394 }

395

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

397 {

398 if(args.length != 0)

399 {

400 if(!player.isOp())

401 {

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

403 return true;

404 }

405

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

407

408 if(target == null)

409 {

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

411 return true;

412 }

413

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

415

416 }

417 else

418 {

419 player.openInventory(player.getEnderChest());

420 }

421

422 return true;

423 }

424}