A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 30f79e26c5f3b48ce768a0fcbaffd5e8dee07f95 (8125 bytes)[doc][blame][raw]
1
package de.typable.minecrafthub;3
import java.io.File;4
import java.io.IOException;5
import java.net.BindException;6
import java.net.ServerSocket;7
import java.net.Socket;9
import org.bukkit.Bukkit;10
import org.bukkit.ChatColor;11
import org.bukkit.GameMode;12
import org.bukkit.Location;13
import org.bukkit.Material;14
import org.bukkit.World;15
import org.bukkit.WorldCreator;16
import org.bukkit.WorldType;17
import org.bukkit.command.Command;18
import org.bukkit.command.CommandSender;19
import org.bukkit.entity.Player;20
import org.bukkit.inventory.ItemStack;21
import org.bukkit.inventory.meta.SkullMeta;22
import org.bukkit.material.Tree;23
import org.bukkit.plugin.Plugin;24
import org.bukkit.plugin.PluginManager;25
import org.bukkit.plugin.java.JavaPlugin;26
import org.bukkit.scheduler.BukkitTask;28
import de.typable.minecrafthub.constant.DefaultConstants;29
import de.typable.minecrafthub.event.AutoWorkbenchListener;30
import de.typable.minecrafthub.event.ChairListener;31
import de.typable.minecrafthub.event.DoubleDoorListener;32
import de.typable.minecrafthub.event.EventListener;33
import de.typable.minecrafthub.event.LeavesDecayListener;34
import de.typable.minecrafthub.event.StandbyListener;35
import de.typable.minecrafthub.util.Util;38
public class Main extends JavaPlugin39
{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;48
private Plugin plugin;49
private BukkitTask task;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;56
@Override57
public void onEnable()58
{59
plugin = this;61
pluginManager = Bukkit.getPluginManager();63
standbyListener = new StandbyListener(this);64
pluginManager.registerEvents(standbyListener, this);66
doubleDoorListener = new DoubleDoorListener();67
pluginManager.registerEvents(doubleDoorListener, this);69
chairListener = new ChairListener();70
pluginManager.registerEvents(chairListener, this);72
autoWorkbenchListener = new AutoWorkbenchListener();73
pluginManager.registerEvents(autoWorkbenchListener, this);75
leavesDecayListener = new LeavesDecayListener(this);76
pluginManager.registerEvents(leavesDecayListener, this);78
eventListener = new EventListener();79
pluginManager.registerEvents(eventListener, this);81
task = Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable()82
{83
@Override84
public void run()85
{86
try(ServerSocket serverSocket = new ServerSocket(25560))87
{88
while(!serverSocket.isClosed())89
{90
Socket socket = serverSocket.accept();92
Util.sendCountdown(plugin, "Server restarts in", 5, new Runnable()93
{94
@Override95
public void run()96
{97
for(Player target : Bukkit.getOnlinePlayers())98
{99
target.kickPlayer("Server restarting...");100
}102
Bukkit.getServer().shutdown();103
}104
});106
socket.close();107
}108
}109
catch(BindException ex)110
{111
// ignore112
}113
catch(IOException ex)114
{115
ex.printStackTrace();116
}117
}118
});120
new WorldCreator("creative")121
.type(WorldType.FLAT)122
.generateStructures(false)123
.createWorld();124
}126
@Override127
public void onDisable()128
{129
if(task != null && task.isCancelled())130
{131
task.cancel();132
}134
chairListener.onDisable();135
}137
@SuppressWarnings("deprecation")138
@Override139
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)140
{141
if(sender instanceof Player)142
{143
Player player = (Player) sender;145
if(label.equals("shutdown"))146
{147
if(!player.isOp())148
{149
player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);150
return true;151
}153
String path = new File(".").getAbsolutePath();155
File file = new File(path + "/.shutdown");157
try158
{159
file.createNewFile();161
Util.sendCountdown(this, "Server shuts down in", 5, new Runnable()162
{163
@Override164
public void run()165
{166
for(Player target : Bukkit.getOnlinePlayers())167
{168
target.kickPlayer("Server stopped");169
}171
Bukkit.getServer().shutdown();172
}173
});174
}175
catch(IOException ex)176
{177
ex.printStackTrace();178
}179
}181
if(label.equals("head"))182
{183
ItemStack handitem = player.getInventory().getItemInMainHand();184
ItemStack headitem = player.getInventory().getHelmet();186
player.getInventory().setHelmet(handitem);187
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));189
if(player.getGameMode() == GameMode.SURVIVAL)190
{191
if(headitem != null)192
{193
player.getInventory().addItem(headitem);194
}195
}196
}198
if(label.equals("skull"))199
{200
if(!player.isOp())201
{202
player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);203
return true;204
}206
if(args.length != 1)207
{208
return false;209
}211
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);212
SkullMeta meta = (SkullMeta) skull.getItemMeta();213
meta.setOwner(args[0]);214
skull.setItemMeta(meta);216
player.getInventory().addItem(skull);217
}219
if(label.equals("standby"))220
{221
if(!player.isOp())222
{223
player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);224
return true;225
}227
if(args.length != 1)228
{229
return false;230
}232
String argument = args[0];234
if(!argument.equals("true") && !argument.equals("false"))235
{236
return false;237
}239
boolean enabled = argument.equals("true");240
standbyListener.setEnabled(enabled);242
player.sendMessage(ChatColor.GRAY + "Standby mode is now " + (enabled ? "enabled" : "disabled"));243
}245
if(label.equals("world"))246
{247
if(!player.isOp())248
{249
player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);250
return true;251
}253
if(args.length != 1)254
{255
return false;256
}258
World world = Bukkit.getWorld(args[0]);260
if(world == null)261
{262
player.sendMessage(DefaultConstants.Messages.WORLD_NOT_EXIST);263
return true;264
}266
player.teleport(world.getSpawnLocation());267
}269
if(label.equals("spawn"))270
{271
ItemStack item = player.getInventory().getItemInMainHand();273
Location locationSpawn = Bukkit.getWorld("world").getSpawnLocation();274
Location locationPlayer = player.getLocation();276
Double distance = locationPlayer.distance(locationSpawn);278
int fee = (int) Math.floor(distance / (BLOCKS_PER_CHUNK * CHUNKS_PER_EMERALD));280
if(fee < MIN_FEE)281
{282
fee = MIN_FEE;283
}285
if(fee > MAX_FEE)286
{287
fee = MAX_FEE;288
}290
if(item.getType() == Material.EMERALD && item.getAmount() >= fee)291
{293
item.setAmount(item.getAmount() - fee);294
player.teleport(locationSpawn);295
}296
else297
{298
player.sendMessage(ChatColor.RED + "Not enough emeralds to teleport! You need " + fee + " emerald(s) in your main hand.");299
}300
}302
if(label.equals("invsee"))303
{304
if(args.length == 0) {305
return false;306
}308
if(Bukkit.getPlayer(args[0]) == null)309
{310
player.sendMessage(ChatColor.RED + "Player not found!");311
return true;312
}314
if(!player.isOp())315
{316
player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);317
return true;318
}320
Player target = Bukkit.getPlayer(args[0]);322
player.openInventory(target.getInventory());324
if(args.length == 1 && args[1].toLowerCase() == "enderchest")325
{326
player.openInventory(target.getEnderChest());327
}328
}329
}331
return true;332
}333
}