A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 1f6de71453d12006f9e216fd2657235dbdf8a390 (7436 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.material.Tree;24
import org.bukkit.plugin.Plugin;25
import org.bukkit.plugin.PluginManager;26
import org.bukkit.plugin.java.JavaPlugin;28
import de.typable.minecrafthub.constant.Constants;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.util.Util;35
import de.typable.minecrafthub.config.Config;38
public class Main extends JavaPlugin39
{40
private PluginManager pluginManager;41
private DoubleDoorListener doubleDoorListener;42
private ChairListener chairListener;43
private AutoWorkbenchListener autoWorkbenchListener;44
private LeavesDecayListener leavesDecayListener;45
private EventListener eventListener;47
private Plugin plugin;48
private Config config;50
@Override51
public void onEnable()52
{53
plugin = this;54
config = new Config("config/minecraft-hub.yml");56
pluginManager = Bukkit.getPluginManager();58
doubleDoorListener = new DoubleDoorListener();59
pluginManager.registerEvents(doubleDoorListener, this);61
chairListener = new ChairListener();62
pluginManager.registerEvents(chairListener, this);64
autoWorkbenchListener = new AutoWorkbenchListener();65
pluginManager.registerEvents(autoWorkbenchListener, this);67
leavesDecayListener = new LeavesDecayListener(this);68
pluginManager.registerEvents(leavesDecayListener, this);70
eventListener = new EventListener();71
pluginManager.registerEvents(eventListener, this);72
}74
@Override75
public void onDisable()76
{77
chairListener.onDisable();78
}80
@SuppressWarnings("deprecation")81
@Override82
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)83
{84
if(sender instanceof Player)85
{86
Player player = (Player) sender;88
if(label.equals("head"))89
{90
ItemStack handitem = player.getInventory().getItemInMainHand();91
ItemStack headitem = player.getInventory().getHelmet();93
player.getInventory().setHelmet(handitem);94
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));96
if(player.getGameMode() == GameMode.SURVIVAL)97
{98
if(headitem != null)99
{100
player.getInventory().addItem(headitem);101
}102
}103
}105
if(label.equals("skull"))106
{107
if(!player.isOp())108
{109
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);110
return true;111
}113
if(args.length != 1)114
{115
return false;116
}118
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);119
SkullMeta meta = (SkullMeta) skull.getItemMeta();120
meta.setOwner(args[0]);121
skull.setItemMeta(meta);123
player.getInventory().addItem(skull);124
}126
if(label.equals("spawn"))127
{128
final Location location = Bukkit.getWorld("world").getSpawnLocation();130
if(travelTo(player, location))131
{132
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");133
}134
}136
if(label.equals("invsee"))137
{138
if(args.length == 0) {139
return false;140
}142
if(Bukkit.getPlayer(args[0]) == null)143
{144
player.sendMessage(ChatColor.RED + "Player not found!");145
return true;146
}148
if(!player.isOp())149
{150
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);151
return true;152
}154
Player target = Bukkit.getPlayer(args[0]);156
player.openInventory(target.getInventory());158
if(args.length == 1 && args[1].toLowerCase() == "enderchest")159
{160
player.openInventory(target.getEnderChest());161
}162
}164
if(label.equals("sethome"))165
{166
try167
{168
config.setHome(player);169
player.sendMessage(ChatColor.YELLOW + "Home point set.");170
}171
catch(Exception ex)172
{173
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);174
}175
}177
if(label.equals("home"))178
{179
final Location location = config.getHome(player);181
if(location == null)182
{183
player.sendMessage(ChatColor.RED + "You've don't have a home point.");184
return true;185
}187
if(travelTo(player, location))188
{189
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");190
}191
}193
if(label.equals("setwarp"))194
{195
if(args.length != 1)196
{197
return false;198
}200
final String name = args[0];202
if(!payFee(player, Material.COMPASS, 1))203
{204
player.sendMessage(ChatColor.RED + "The fee for creating a warp point is 1 compass!");205
return true;206
}208
try209
{210
if(!config.setWarp(name, player.getLocation()))211
{212
player.sendMessage(ChatColor.RED + "Warp point " + name + " already exists!");213
return true;214
}216
player.sendMessage(ChatColor.YELLOW + "Warp point " + name + " set.");217
}218
catch(Exception ex)219
{220
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);221
}222
}224
if(label.equals("warp"))225
{226
if(args.length != 1)227
{228
return false;229
}231
final String name = args[0];232
final Location location = config.getWarp(name);234
if(location == null)235
{236
player.sendMessage(ChatColor.RED + "Warp point " + name + " doesn't exist!");237
return true;238
}240
if(travelTo(player, location))241
{242
player.sendMessage(ChatColor.GRAY + "You've been teleported to warp point " + name + ".");243
}244
}245
}247
return true;248
}250
private boolean travelTo(final Player player, final Location location)251
{252
final int fee = Util.calcTravelFee(player.getLocation(), location);253
final String unit = fee == 1 ? "emerald" : "emeralds";255
if(!payFee(player, Material.EMERALD, fee) && player.getGameMode() == GameMode.SURVIVAL)256
{257
player.sendMessage(ChatColor.RED + "Not enough emeralds to teleport! Travel fee: " + fee + " " + unit);258
return false;259
}261
if(player.getVehicle() != null)262
{263
Entity vehicle = player.getVehicle();264
vehicle.eject();265
player.teleport(location);267
Bukkit.getScheduler().runTaskLater(plugin, () -> {268
vehicle.teleport(location);269
}, 3);271
Bukkit.getScheduler().runTaskLater(plugin, () -> {272
vehicle.addPassenger(player);273
}, 6);274
}275
else276
{277
player.teleport(location);278
}280
return true;281
}283
private boolean payFee(final Player player, final Material unit, final int amount)284
{285
final ItemStack item = player.getInventory().getItemInMainHand();287
if(item.getType() != unit || item.getAmount() < amount)288
{289
return false;290
}292
item.setAmount(item.getAmount() - amount);294
return true;295
}296
}