A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: b85cd4b8da44232db42f8e41ec2de4c4b687ed2e (9545 bytes)[doc][blame][raw]
1
package poppy;3
import org.bukkit.Bukkit;4
import org.bukkit.ChatColor;5
import org.bukkit.GameMode;6
import org.bukkit.Location;7
import org.bukkit.Material;8
import org.bukkit.block.Block;9
import org.bukkit.command.Command;10
import org.bukkit.command.CommandSender;11
import org.bukkit.entity.Player;12
import org.bukkit.inventory.ItemStack;13
import org.bukkit.inventory.meta.SkullMeta;14
import org.bukkit.inventory.meta.BookMeta;15
import org.bukkit.plugin.Plugin;16
import org.bukkit.plugin.PluginManager;17
import org.bukkit.plugin.java.JavaPlugin;19
import poppy.modules.AutoBreakerModule;20
import poppy.modules.AutoPlacerModule;21
import poppy.modules.AutoWorkbenchModule;22
import poppy.modules.BlockDetectorModule;23
import poppy.modules.CauldronModule;24
import poppy.modules.ChairModule;25
import poppy.modules.DoubleDoorModule;26
import poppy.modules.HopperSorterModule;27
import poppy.modules.CommonModule;28
import poppy.modules.LeavesDecayModule;29
import poppy.modules.SpawnerModule;30
import poppy.modules.PlayerMountModule;33
public class Main extends JavaPlugin34
{35
private Plugin plugin;36
private Config config;37
private PluginManager pluginManager;39
private CommonModule commonModule;40
private DoubleDoorModule doubleDoorModule;41
private ChairModule chairModule;42
private AutoWorkbenchModule autoWorkbenchModule;43
private LeavesDecayModule leavesDecayModule;44
private CauldronModule cauldronModule;45
private SpawnerModule spawnerModule;46
private HopperSorterModule hopperSorterModule;47
private AutoPlacerModule autoPlacerModule;48
private AutoBreakerModule autoBreakerModule;49
private PlayerMountModule playerMountModule;50
private BlockDetectorModule blockDetectorModule;52
@Override53
public void onEnable()54
{55
plugin = this;56
config = new Config("config/poppy.yml");58
pluginManager = Bukkit.getPluginManager();60
commonModule = new CommonModule();61
pluginManager.registerEvents(commonModule, this);63
doubleDoorModule = new DoubleDoorModule();64
pluginManager.registerEvents(doubleDoorModule, this);66
chairModule = new ChairModule();67
pluginManager.registerEvents(chairModule, this);69
autoWorkbenchModule = new AutoWorkbenchModule();70
pluginManager.registerEvents(autoWorkbenchModule, this);72
leavesDecayModule = new LeavesDecayModule(this);73
pluginManager.registerEvents(leavesDecayModule, this);75
cauldronModule = new CauldronModule(this);76
pluginManager.registerEvents(cauldronModule, this);78
spawnerModule = new SpawnerModule();79
pluginManager.registerEvents(spawnerModule, this);81
hopperSorterModule = new HopperSorterModule();82
pluginManager.registerEvents(hopperSorterModule, this);84
autoPlacerModule = new AutoPlacerModule(this);85
pluginManager.registerEvents(autoPlacerModule, this);87
autoBreakerModule = new AutoBreakerModule(this);88
pluginManager.registerEvents(autoBreakerModule, this);90
playerMountModule = new PlayerMountModule();91
pluginManager.registerEvents(playerMountModule, this);93
blockDetectorModule = new BlockDetectorModule();94
pluginManager.registerEvents(blockDetectorModule, this);95
}97
@Override98
public void onDisable()99
{100
chairModule.onDisable();101
}103
@Override104
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)105
{106
if(sender instanceof Player)107
{108
Player player = (Player) sender;110
switch(label)111
{112
case "head":113
return setItemAsHead(player, args);114
case "skull":115
return getSkullForName(player, args);116
case "invsee":117
return openInventoryForPlayer(player, args);118
case "info":119
return openInfoBook(player, args);120
case "spawn":121
return teleportToSpawn(player, args);122
case "home":123
return teleportToHome(player, args);124
case "warp":125
return teleportToWarppoint(player, args);126
case "sethome":127
return setHome(player, args);128
case "setwarp":129
return setWarppoint(player, args);130
case "slime":131
return isSlimeChunk(player, args);132
case "r":133
return doReload(player, args);134
case "up":135
return placeBlockBelow(player, args);136
default:137
return false;138
}139
}141
return true;142
}144
private boolean setItemAsHead(final Player player, final String[] args)145
{146
final ItemStack item = player.getInventory().getItemInMainHand();147
final ItemStack head = player.getInventory().getHelmet();149
if(head != null && head.getType().equals(Material.SADDLE))150
{151
player.eject();152
}154
player.getInventory().setHelmet(item);155
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));157
if(player.getGameMode() == GameMode.SURVIVAL)158
{159
if(head != null)160
{161
player.getInventory().addItem(head);162
}163
}165
return true;166
}168
@SuppressWarnings("deprecation")169
private boolean getSkullForName(final Player player, final String[] args)170
{171
if(!player.isOp())172
{173
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);174
return true;175
}177
if(args.length != 1)178
{179
return false;180
}182
final String name = args[0];183
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);184
final SkullMeta meta = (SkullMeta) skull.getItemMeta();185
meta.setOwner(name);186
skull.setItemMeta(meta);188
player.getInventory().addItem(skull);190
return true;191
}193
private boolean openInventoryForPlayer(final Player player, final String[] args)194
{195
if(args.length == 0)196
{197
return false;198
}200
if(!player.isOp())201
{202
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);203
return true;204
}206
final Player target = Bukkit.getPlayer(args[0]);208
if(target == null)209
{210
player.sendMessage(ChatColor.RED + "Player not found!");211
return true;212
}214
player.openInventory(target.getInventory());216
return true;217
}219
private boolean openInfoBook(final Player player, final String[] args)220
{221
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);222
final BookMeta meta = (BookMeta) book.getItemMeta();223
meta.setTitle("Info");224
meta.setAuthor("Server");225
meta.setPages(config.getInfoPages());226
book.setItemMeta(meta);228
player.openBook(book);230
return true;231
}233
private boolean teleportToSpawn(final Player player, final String[] args)234
{235
final Location location = Bukkit.getWorld("world").getSpawnLocation();237
if(Utils.travelTo(plugin, player, location))238
{239
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");240
}242
return true;243
}245
private boolean teleportToHome(final Player player, final String[] args)246
{247
final Location location = config.getHome(player);249
if(location == null)250
{251
player.sendMessage(ChatColor.RED + "You've don't have a home point.");252
return true;253
}255
if(Utils.travelTo(plugin, player, location))256
{257
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");258
}260
return true;261
}263
private boolean teleportToWarppoint(final Player player, final String[] args)264
{265
if(args.length != 1)266
{267
return false;268
}270
final String name = args[0].toLowerCase();271
final Location location = config.getWarp(name);273
if(location == null)274
{275
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");276
return true;277
}279
if(Utils.travelTo(plugin, player, location))280
{281
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");282
}284
return true;285
}287
private boolean setHome(final Player player, final String[] args)288
{289
try290
{291
config.setHome(player);292
player.sendMessage(ChatColor.YELLOW + "Home point set.");293
}294
catch(Exception ex)295
{296
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);297
}299
return true;300
}302
private boolean setWarppoint(final Player player, final String[] args)303
{304
if(args.length != 1)305
{306
return false;307
}309
final String name = args[0].toLowerCase();311
if(!Utils.payFee(player, Material.COMPASS, 1))312
{313
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");314
return true;315
}317
try318
{319
if(!config.setWarp(name, player.getLocation()))320
{321
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");322
return true;323
}325
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");326
}327
catch(Exception ex)328
{329
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);330
}332
return true;333
}335
private boolean isSlimeChunk(final Player player, final String[] args)336
{337
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();339
if(isSlimeChunk)340
{341
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");342
return true;343
}344
else345
{346
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");347
return true;348
}349
}351
private boolean doReload(final Player player, final String[] args)352
{353
player.chat("/reload confirm");354
return true;355
}357
private boolean placeBlockBelow(final Player player, final String[] args)358
{359
Location playerLocation = player.getLocation().clone();360
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();362
if(!Utils.isAir(blockBelow.getType()))363
{364
return false;365
}367
if(!player.isOp())368
{369
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);370
return true;371
}373
blockBelow.setType(Material.GLASS);375
return true;376
}377
}