A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 3b6e776287bb7f47848c852d4799d2837e0a0281 (7810 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.entity.Entity;21
import org.bukkit.inventory.ItemStack;22
import org.bukkit.inventory.meta.SkullMeta;23
import org.bukkit.inventory.meta.BookMeta;24
import org.bukkit.material.Tree;25
import org.bukkit.plugin.Plugin;26
import org.bukkit.plugin.PluginManager;27
import org.bukkit.plugin.java.JavaPlugin;29
import de.typable.minecrafthub.constant.Constants;30
import de.typable.minecrafthub.event.AutoWorkbenchListener;31
import de.typable.minecrafthub.event.ChairListener;32
import de.typable.minecrafthub.event.DoubleDoorListener;33
import de.typable.minecrafthub.event.EventListener;34
import de.typable.minecrafthub.event.LeavesDecayListener;35
import de.typable.minecrafthub.util.Util;36
import de.typable.minecrafthub.config.Config;39
public class Main extends JavaPlugin40
{41
private PluginManager pluginManager;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 Config config;51
@Override52
public void onEnable()53
{54
plugin = this;55
config = new Config("config/minecraft-hub.yml");57
pluginManager = Bukkit.getPluginManager();59
doubleDoorListener = new DoubleDoorListener();60
pluginManager.registerEvents(doubleDoorListener, this);62
chairListener = new ChairListener();63
pluginManager.registerEvents(chairListener, this);65
autoWorkbenchListener = new AutoWorkbenchListener();66
pluginManager.registerEvents(autoWorkbenchListener, this);68
leavesDecayListener = new LeavesDecayListener(this);69
pluginManager.registerEvents(leavesDecayListener, this);71
eventListener = new EventListener();72
pluginManager.registerEvents(eventListener, this);73
}75
@Override76
public void onDisable()77
{78
chairListener.onDisable();79
}81
@SuppressWarnings("deprecation")82
@Override83
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)84
{85
if(sender instanceof Player)86
{87
Player player = (Player) sender;89
if(label.equals("head"))90
{91
ItemStack handitem = player.getInventory().getItemInMainHand();92
ItemStack headitem = player.getInventory().getHelmet();94
player.getInventory().setHelmet(handitem);95
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));97
if(player.getGameMode() == GameMode.SURVIVAL)98
{99
if(headitem != null)100
{101
player.getInventory().addItem(headitem);102
}103
}104
}106
if(label.equals("skull"))107
{108
if(!player.isOp())109
{110
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);111
return true;112
}114
if(args.length != 1)115
{116
return false;117
}119
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);120
SkullMeta meta = (SkullMeta) skull.getItemMeta();121
meta.setOwner(args[0]);122
skull.setItemMeta(meta);124
player.getInventory().addItem(skull);125
}127
if(label.equals("spawn"))128
{129
final Location location = Bukkit.getWorld("world").getSpawnLocation();131
if(travelTo(player, location))132
{133
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");134
}135
}137
if(label.equals("invsee"))138
{139
if(args.length == 0) {140
return false;141
}143
if(Bukkit.getPlayer(args[0]) == null)144
{145
player.sendMessage(ChatColor.RED + "Player not found!");146
return true;147
}149
if(!player.isOp())150
{151
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);152
return true;153
}155
Player target = Bukkit.getPlayer(args[0]);157
player.openInventory(target.getInventory());159
if(args.length == 1 && args[1].toLowerCase() == "enderchest")160
{161
player.openInventory(target.getEnderChest());162
}163
}165
if(label.equals("sethome"))166
{167
try168
{169
config.setHome(player);170
player.sendMessage(ChatColor.YELLOW + "Home point set.");171
}172
catch(Exception ex)173
{174
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);175
}176
}178
if(label.equals("home"))179
{180
final Location location = config.getHome(player);182
if(location == null)183
{184
player.sendMessage(ChatColor.RED + "You've don't have a home point.");185
return true;186
}188
if(travelTo(player, location))189
{190
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");191
}192
}194
if(label.equals("setwarp"))195
{196
if(args.length != 1)197
{198
return false;199
}201
final String name = args[0];203
if(!payFee(player, Material.COMPASS, 1))204
{205
player.sendMessage(ChatColor.RED + "The fee for creating a warp point is 1 compass!");206
return true;207
}209
try210
{211
if(!config.setWarp(name, player.getLocation()))212
{213
player.sendMessage(ChatColor.RED + "Warp point " + name + " already exists!");214
return true;215
}217
player.sendMessage(ChatColor.YELLOW + "Warp point " + name + " set.");218
}219
catch(Exception ex)220
{221
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);222
}223
}225
if(label.equals("warp"))226
{227
if(args.length != 1)228
{229
return false;230
}232
final String name = args[0];233
final Location location = config.getWarp(name);235
if(location == null)236
{237
player.sendMessage(ChatColor.RED + "Warp point " + name + " doesn't exist!");238
return true;239
}241
if(travelTo(player, location))242
{243
player.sendMessage(ChatColor.GRAY + "You've been teleported to warp point " + name + ".");244
}245
}247
if(label.equals("info"))248
{249
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);250
final BookMeta meta = (BookMeta) book.getItemMeta();251
meta.setTitle("Info");252
meta.setAuthor("Server");253
meta.setPages(config.getInfoPages());254
book.setItemMeta(meta);256
player.openBook(book);257
}258
}260
return true;261
}263
private boolean travelTo(final Player player, final Location location)264
{265
final int fee = Util.calcTravelFee(player.getLocation(), location);266
final String unit = fee == 1 ? "emerald" : "emeralds";268
if(!payFee(player, Material.EMERALD, fee) && player.getGameMode() == GameMode.SURVIVAL)269
{270
player.sendMessage(ChatColor.RED + "Not enough emeralds to teleport! Travel fee: " + fee + " " + unit);271
return false;272
}274
if(player.getVehicle() != null)275
{276
Entity vehicle = player.getVehicle();277
vehicle.eject();278
player.teleport(location);280
Bukkit.getScheduler().runTaskLater(plugin, () -> {281
vehicle.teleport(location);282
}, 3);284
Bukkit.getScheduler().runTaskLater(plugin, () -> {285
vehicle.addPassenger(player);286
}, 6);287
}288
else289
{290
player.teleport(location);291
}293
return true;294
}296
private boolean payFee(final Player player, final Material unit, final int amount)297
{298
final ItemStack item = player.getInventory().getItemInMainHand();300
if(item.getType() != unit || item.getAmount() < amount)301
{302
return false;303
}305
item.setAmount(item.getAmount() - amount);307
return true;308
}309
}