so://phie

poppy

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

blob: 30f79e26c5f3b48ce768a0fcbaffd5e8dee07f95 (8125 bytes)[doc][blame][raw]

1package de.typable.minecrafthub;

2

3import java.io.File;

4import java.io.IOException;

5import java.net.BindException;

6import java.net.ServerSocket;

7import java.net.Socket;

8

9import org.bukkit.Bukkit;

10import org.bukkit.ChatColor;

11import org.bukkit.GameMode;

12import org.bukkit.Location;

13import org.bukkit.Material;

14import org.bukkit.World;

15import org.bukkit.WorldCreator;

16import org.bukkit.WorldType;

17import org.bukkit.command.Command;

18import org.bukkit.command.CommandSender;

19import org.bukkit.entity.Player;

20import org.bukkit.inventory.ItemStack;

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

22import org.bukkit.material.Tree;

23import org.bukkit.plugin.Plugin;

24import org.bukkit.plugin.PluginManager;

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

26import org.bukkit.scheduler.BukkitTask;

27

28import de.typable.minecrafthub.constant.DefaultConstants;

29import de.typable.minecrafthub.event.AutoWorkbenchListener;

30import de.typable.minecrafthub.event.ChairListener;

31import de.typable.minecrafthub.event.DoubleDoorListener;

32import de.typable.minecrafthub.event.EventListener;

33import de.typable.minecrafthub.event.LeavesDecayListener;

34import de.typable.minecrafthub.event.StandbyListener;

35import de.typable.minecrafthub.util.Util;

36

37

38public class Main extends JavaPlugin

39{

40 private PluginManager pluginManager;

41 private StandbyListener standbyListener;

42 private DoubleDoorListener doubleDoorListener;

43 private ChairListener chairListener;

44 private AutoWorkbenchListener autoWorkbenchListener;

45 private LeavesDecayListener leavesDecayListener;

46 private EventListener eventListener;

47

48 private Plugin plugin;

49 private BukkitTask task;

50

51 private static final int BLOCKS_PER_CHUNK = 16;

52 private static final int CHUNKS_PER_EMERALD = 25;

53 private static final int MIN_FEE = 1;

54 private static final int MAX_FEE = 64;

55

56 @Override

57 public void onEnable()

58 {

59 plugin = this;

60

61 pluginManager = Bukkit.getPluginManager();

62

63 standbyListener = new StandbyListener(this);

64 pluginManager.registerEvents(standbyListener, this);

65

66 doubleDoorListener = new DoubleDoorListener();

67 pluginManager.registerEvents(doubleDoorListener, this);

68

69 chairListener = new ChairListener();

70 pluginManager.registerEvents(chairListener, this);

71

72 autoWorkbenchListener = new AutoWorkbenchListener();

73 pluginManager.registerEvents(autoWorkbenchListener, this);

74

75 leavesDecayListener = new LeavesDecayListener(this);

76 pluginManager.registerEvents(leavesDecayListener, this);

77

78 eventListener = new EventListener();

79 pluginManager.registerEvents(eventListener, this);

80

81 task = Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable()

82 {

83 @Override

84 public void run()

85 {

86 try(ServerSocket serverSocket = new ServerSocket(25560))

87 {

88 while(!serverSocket.isClosed())

89 {

90 Socket socket = serverSocket.accept();

91

92 Util.sendCountdown(plugin, "Server restarts in", 5, new Runnable()

93 {

94 @Override

95 public void run()

96 {

97 for(Player target : Bukkit.getOnlinePlayers())

98 {

99 target.kickPlayer("Server restarting...");

100 }

101

102 Bukkit.getServer().shutdown();

103 }

104 });

105

106 socket.close();

107 }

108 }

109 catch(BindException ex)

110 {

111 // ignore

112 }

113 catch(IOException ex)

114 {

115 ex.printStackTrace();

116 }

117 }

118 });

119

120 new WorldCreator("creative")

121 .type(WorldType.FLAT)

122 .generateStructures(false)

123 .createWorld();

124 }

125

126 @Override

127 public void onDisable()

128 {

129 if(task != null && task.isCancelled())

130 {

131 task.cancel();

132 }

133

134 chairListener.onDisable();

135 }

136

137 @SuppressWarnings("deprecation")

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 if(label.equals("shutdown"))

146 {

147 if(!player.isOp())

148 {

149 player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);

150 return true;

151 }

152

153 String path = new File(".").getAbsolutePath();

154

155 File file = new File(path + "/.shutdown");

156

157 try

158 {

159 file.createNewFile();

160

161 Util.sendCountdown(this, "Server shuts down in", 5, new Runnable()

162 {

163 @Override

164 public void run()

165 {

166 for(Player target : Bukkit.getOnlinePlayers())

167 {

168 target.kickPlayer("Server stopped");

169 }

170

171 Bukkit.getServer().shutdown();

172 }

173 });

174 }

175 catch(IOException ex)

176 {

177 ex.printStackTrace();

178 }

179 }

180

181 if(label.equals("head"))

182 {

183 ItemStack handitem = player.getInventory().getItemInMainHand();

184 ItemStack headitem = player.getInventory().getHelmet();

185

186 player.getInventory().setHelmet(handitem);

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

188

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

190 {

191 if(headitem != null)

192 {

193 player.getInventory().addItem(headitem);

194 }

195 }

196 }

197

198 if(label.equals("skull"))

199 {

200 if(!player.isOp())

201 {

202 player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);

203 return true;

204 }

205

206 if(args.length != 1)

207 {

208 return false;

209 }

210

211 ItemStack skull = new ItemStack(Material.PLAYER_HEAD);

212 SkullMeta meta = (SkullMeta) skull.getItemMeta();

213 meta.setOwner(args[0]);

214 skull.setItemMeta(meta);

215

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

217 }

218

219 if(label.equals("standby"))

220 {

221 if(!player.isOp())

222 {

223 player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);

224 return true;

225 }

226

227 if(args.length != 1)

228 {

229 return false;

230 }

231

232 String argument = args[0];

233

234 if(!argument.equals("true") && !argument.equals("false"))

235 {

236 return false;

237 }

238

239 boolean enabled = argument.equals("true");

240 standbyListener.setEnabled(enabled);

241

242 player.sendMessage(ChatColor.GRAY + "Standby mode is now " + (enabled ? "enabled" : "disabled"));

243 }

244

245 if(label.equals("world"))

246 {

247 if(!player.isOp())

248 {

249 player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);

250 return true;

251 }

252

253 if(args.length != 1)

254 {

255 return false;

256 }

257

258 World world = Bukkit.getWorld(args[0]);

259

260 if(world == null)

261 {

262 player.sendMessage(DefaultConstants.Messages.WORLD_NOT_EXIST);

263 return true;

264 }

265

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

267 }

268

269 if(label.equals("spawn"))

270 {

271 ItemStack item = player.getInventory().getItemInMainHand();

272

273 Location locationSpawn = Bukkit.getWorld("world").getSpawnLocation();

274 Location locationPlayer = player.getLocation();

275

276 Double distance = locationPlayer.distance(locationSpawn);

277

278 int fee = (int) Math.floor(distance / (BLOCKS_PER_CHUNK * CHUNKS_PER_EMERALD));

279

280 if(fee < MIN_FEE)

281 {

282 fee = MIN_FEE;

283 }

284

285 if(fee > MAX_FEE)

286 {

287 fee = MAX_FEE;

288 }

289

290 if(item.getType() == Material.EMERALD && item.getAmount() >= fee)

291 {

292

293 item.setAmount(item.getAmount() - fee);

294 player.teleport(locationSpawn);

295 }

296 else

297 {

298 player.sendMessage(ChatColor.RED + "Not enough emeralds to teleport! You need " + fee + " emerald(s) in your main hand.");

299 }

300 }

301

302 if(label.equals("invsee"))

303 {

304 if(args.length == 0) {

305 return false;

306 }

307

308 if(Bukkit.getPlayer(args[0]) == null)

309 {

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

311 return true;

312 }

313

314 if(!player.isOp())

315 {

316 player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);

317 return true;

318 }

319

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

321

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

323

324 if(args.length == 1 && args[1].toLowerCase() == "enderchest")

325 {

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

327 }

328 }

329 }

330

331 return true;

332 }

333}