so://phie

poppy

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

blob: 9d36fe5dc06ad0ecfa663ae7138cc92182121017 (10547 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.block.Block;

10import org.bukkit.command.Command;

11import org.bukkit.command.CommandSender;

12import org.bukkit.entity.Player;

13import org.bukkit.inventory.FurnaceRecipe;

14import org.bukkit.inventory.ItemStack;

15import org.bukkit.inventory.RecipeChoice;

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

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

18import org.bukkit.plugin.Plugin;

19import org.bukkit.plugin.PluginManager;

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

21

22import poppy.modules.AutoBreakerModule;

23import poppy.modules.AutoPlacerModule;

24import poppy.modules.AutoWorkbenchModule;

25import poppy.modules.BlockDetectorModule;

26import poppy.modules.CauldronModule;

27import poppy.modules.ChairModule;

28import poppy.modules.DoubleDoorModule;

29import poppy.modules.HopperSorterModule;

30import poppy.modules.CommonModule;

31import poppy.modules.LeavesDecayModule;

32import poppy.modules.SpawnerModule;

33import poppy.modules.PlayerMountModule;

34

35

36public class Main extends JavaPlugin

37{

38 private Plugin plugin;

39 private Config config;

40 private PluginManager pluginManager;

41

42 private CommonModule commonModule;

43 private DoubleDoorModule doubleDoorModule;

44 private ChairModule chairModule;

45 private AutoWorkbenchModule autoWorkbenchModule;

46 private LeavesDecayModule leavesDecayModule;

47 private CauldronModule cauldronModule;

48 private SpawnerModule spawnerModule;

49 private HopperSorterModule hopperSorterModule;

50 private AutoPlacerModule autoPlacerModule;

51 private AutoBreakerModule autoBreakerModule;

52 private PlayerMountModule playerMountModule;

53 private BlockDetectorModule blockDetectorModule;

54

55 @Override

56 public void onEnable()

57 {

58 plugin = this;

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

60

61 pluginManager = Bukkit.getPluginManager();

62

63 commonModule = new CommonModule();

64 pluginManager.registerEvents(commonModule, this);

65

66 doubleDoorModule = new DoubleDoorModule();

67 pluginManager.registerEvents(doubleDoorModule, this);

68

69 chairModule = new ChairModule();

70 pluginManager.registerEvents(chairModule, this);

71

72 autoWorkbenchModule = new AutoWorkbenchModule();

73 pluginManager.registerEvents(autoWorkbenchModule, this);

74

75 leavesDecayModule = new LeavesDecayModule(this);

76 pluginManager.registerEvents(leavesDecayModule, this);

77

78 cauldronModule = new CauldronModule(this);

79 pluginManager.registerEvents(cauldronModule, this);

80

81 spawnerModule = new SpawnerModule();

82 pluginManager.registerEvents(spawnerModule, this);

83

84 hopperSorterModule = new HopperSorterModule();

85 pluginManager.registerEvents(hopperSorterModule, this);

86

87 autoPlacerModule = new AutoPlacerModule(this);

88 pluginManager.registerEvents(autoPlacerModule, this);

89

90 autoBreakerModule = new AutoBreakerModule(this);

91 pluginManager.registerEvents(autoBreakerModule, this);

92

93 playerMountModule = new PlayerMountModule();

94 pluginManager.registerEvents(playerMountModule, this);

95

96 blockDetectorModule = new BlockDetectorModule();

97 pluginManager.registerEvents(blockDetectorModule, this);

98

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

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

101 Bukkit.addRecipe(recipe);

102 }

103

104 @Override

105 public void onDisable()

106 {

107 chairModule.onDisable();

108 }

109

110 @Override

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

112 {

113 if(sender instanceof Player)

114 {

115 Player player = (Player) sender;

116

117 switch(label)

118 {

119 case "head":

120 return setItemAsHead(player, args);

121 case "skull":

122 return getSkullForName(player, args);

123 case "invsee":

124 return openInventoryForPlayer(player, args);

125 case "info":

126 return openInfoBook(player, args);

127 case "spawn":

128 return teleportToSpawn(player, args);

129 case "home":

130 return teleportToHome(player, args);

131 case "warp":

132 return teleportToWarppoint(player, args);

133 case "sethome":

134 return setHome(player, args);

135 case "setwarp":

136 return setWarppoint(player, args);

137 case "slime":

138 return isSlimeChunk(player, args);

139 case "r":

140 return doReload(player, args);

141 case "up":

142 return placeBlockBelow(player, args);

143 case "e":

144 return openEnderChest(player, args);

145 case "enderchest":

146 return openEnderChest(player, args);

147 default:

148 return false;

149 }

150 }

151

152 return true;

153 }

154

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

156 {

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

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

159

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

161 {

162 player.eject();

163 }

164

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

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

167

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

169 {

170 if(head != null)

171 {

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

173 }

174 }

175

176 return true;

177 }

178

179 @SuppressWarnings("deprecation")

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

181 {

182 if(!player.isOp())

183 {

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

185 return true;

186 }

187

188 if(args.length != 1)

189 {

190 return false;

191 }

192

193 final String name = args[0];

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

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

196 meta.setOwner(name);

197 skull.setItemMeta(meta);

198

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

200

201 return true;

202 }

203

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

205 {

206 if(args.length == 0)

207 {

208 return false;

209 }

210

211 if(!player.isOp())

212 {

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

214 return true;

215 }

216

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

218

219 if(target == null)

220 {

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

222 return true;

223 }

224

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

226

227 return true;

228 }

229

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

231 {

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

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

234 meta.setTitle("Info");

235 meta.setAuthor("Server");

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

237 book.setItemMeta(meta);

238

239 player.openBook(book);

240

241 return true;

242 }

243

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

245 {

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

247

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

249 {

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

251 }

252

253 return true;

254 }

255

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

257 {

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

259

260 if(location == null)

261 {

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

263 return true;

264 }

265

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

267 {

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

269 }

270

271 return true;

272 }

273

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

275 {

276 if(args.length != 1)

277 {

278 return false;

279 }

280

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

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

283

284 if(location == null)

285 {

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

287 return true;

288 }

289

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

291 {

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

293 }

294

295 return true;

296 }

297

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

299 {

300 try

301 {

302 config.setHome(player);

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

304 }

305 catch(Exception ex)

306 {

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

308 }

309

310 return true;

311 }

312

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

314 {

315 if(args.length != 1)

316 {

317 return false;

318 }

319

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

321

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

323 {

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

325 return true;

326 }

327

328 try

329 {

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

331 {

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

333 return true;

334 }

335

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

337 }

338 catch(Exception ex)

339 {

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

341 }

342

343 return true;

344 }

345

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

347 {

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

349

350 if(isSlimeChunk)

351 {

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

353 return true;

354 }

355 else

356 {

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

358 return true;

359 }

360 }

361

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

363 {

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

365 return true;

366 }

367

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

369 {

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

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

372

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

374 {

375 return false;

376 }

377

378 if(!player.isOp())

379 {

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

381 return true;

382 }

383

384 blockBelow.setType(Material.GLASS);

385

386 return true;

387 }

388

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

390 {

391 if(args.length != 0)

392 {

393 if(!player.isOp())

394 {

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

396 return true;

397 }

398

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

400

401 if(target == null)

402 {

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

404 return true;

405 }

406

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

408

409 }

410 else

411 {

412 player.openInventory(player.getEnderChest());

413 }

414

415 return true;

416 }

417}