A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: a2bd6dc6cc43fcb544dea85bd82062795532f9df (12091 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.NamespacedKey;9
import org.bukkit.World;10
import org.bukkit.WorldCreator;11
import org.bukkit.WorldType;12
import org.bukkit.block.Block;13
import org.bukkit.command.Command;14
import org.bukkit.command.CommandSender;15
import org.bukkit.entity.Player;16
import org.bukkit.inventory.FurnaceRecipe;17
import org.bukkit.inventory.ItemStack;18
import org.bukkit.inventory.meta.SkullMeta;19
import org.bukkit.inventory.meta.BookMeta;20
import org.bukkit.plugin.Plugin;21
import org.bukkit.plugin.PluginManager;22
import org.bukkit.plugin.java.JavaPlugin;24
import poppy.modules.AutoBreakerModule;25
import poppy.modules.AutoPlacerModule;26
import poppy.modules.AutoWorkbenchModule;27
import poppy.modules.BlockDetectorModule;28
import poppy.modules.CauldronModule;29
import poppy.modules.ChairModule;30
import poppy.modules.DoubleDoorModule;31
import poppy.modules.HopperSorterModule;32
import poppy.modules.CommonModule;33
import poppy.modules.LeavesDecayModule;34
import poppy.modules.SpawnerModule;35
import poppy.modules.PlayerMountModule;38
public class Main extends JavaPlugin39
{40
private Plugin plugin;41
private Config config;42
private PluginManager pluginManager;44
private CommonModule commonModule;45
private DoubleDoorModule doubleDoorModule;46
private ChairModule chairModule;47
private AutoWorkbenchModule autoWorkbenchModule;48
private LeavesDecayModule leavesDecayModule;49
private CauldronModule cauldronModule;50
private SpawnerModule spawnerModule;51
private HopperSorterModule hopperSorterModule;52
private AutoPlacerModule autoPlacerModule;53
private AutoBreakerModule autoBreakerModule;54
private PlayerMountModule playerMountModule;55
private BlockDetectorModule blockDetectorModule;57
@Override58
public void onEnable()59
{60
plugin = this;61
config = new Config("config/poppy.yml");63
pluginManager = Bukkit.getPluginManager();65
commonModule = new CommonModule();66
pluginManager.registerEvents(commonModule, this);68
doubleDoorModule = new DoubleDoorModule();69
pluginManager.registerEvents(doubleDoorModule, this);71
chairModule = new ChairModule();72
pluginManager.registerEvents(chairModule, this);74
autoWorkbenchModule = new AutoWorkbenchModule();75
pluginManager.registerEvents(autoWorkbenchModule, this);77
leavesDecayModule = new LeavesDecayModule(this);78
pluginManager.registerEvents(leavesDecayModule, this);80
cauldronModule = new CauldronModule(this);81
pluginManager.registerEvents(cauldronModule, this);83
spawnerModule = new SpawnerModule();84
pluginManager.registerEvents(spawnerModule, this);86
hopperSorterModule = new HopperSorterModule();87
pluginManager.registerEvents(hopperSorterModule, this);89
autoPlacerModule = new AutoPlacerModule(this);90
pluginManager.registerEvents(autoPlacerModule, this);92
autoBreakerModule = new AutoBreakerModule(this);93
pluginManager.registerEvents(autoBreakerModule, this);95
playerMountModule = new PlayerMountModule();96
pluginManager.registerEvents(playerMountModule, this);98
blockDetectorModule = new BlockDetectorModule();99
pluginManager.registerEvents(blockDetectorModule, this);101
NamespacedKey key = new NamespacedKey(this, "leather");102
FurnaceRecipe recipe = new FurnaceRecipe(key, new ItemStack(Material.LEATHER), Material.ROTTEN_FLESH, 1, 200);103
Bukkit.addRecipe(recipe);105
new WorldCreator("creative")106
.type(WorldType.FLAT)107
.generateStructures(false)108
.createWorld();110
new WorldCreator("survival")111
.type(WorldType.NORMAL)112
.generateStructures(true)113
.createWorld();114
}116
@Override117
public void onDisable()118
{119
chairModule.onDisable();120
}122
@Override123
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)124
{125
if(sender instanceof Player)126
{127
Player player = (Player) sender;129
switch(label)130
{131
case "head":132
return setItemAsHead(player, args);133
case "skull":134
return getSkullForName(player, args);135
case "invsee":136
return openInventoryForPlayer(player, args);137
case "info":138
return openInfoBook(player, args);139
case "spawn":140
return teleportToSpawn(player, args);141
case "home":142
return teleportToHome(player, args);143
case "warp":144
return teleportToWarppoint(player, args);145
case "sethome":146
return setHome(player, args);147
case "setwarp":148
return setWarppoint(player, args);149
case "slime":150
return isSlimeChunk(player, args);151
case "r":152
return doReload(player, args);153
case "up":154
return placeBlockBelow(player, args);155
case "e":156
return openEnderChest(player, args);157
case "enderchest":158
return openEnderChest(player, args);159
case "world":160
return teleportToWorld(player, args);161
case "gm":162
return changeGameMode(player);163
default:164
return false;165
}166
}168
return true;169
}171
private boolean setItemAsHead(final Player player, final String[] args)172
{173
final ItemStack item = player.getInventory().getItemInMainHand();174
final ItemStack head = player.getInventory().getHelmet();176
if(head != null && head.getType().equals(Material.SADDLE))177
{178
player.eject();179
}181
player.getInventory().setHelmet(item);182
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));184
if(player.getGameMode() == GameMode.SURVIVAL)185
{186
if(head != null)187
{188
player.getInventory().addItem(head);189
}190
}192
return true;193
}195
@SuppressWarnings("deprecation")196
private boolean getSkullForName(final Player player, final String[] args)197
{198
if(!player.isOp())199
{200
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);201
return true;202
}204
if(args.length != 1)205
{206
return false;207
}209
final String name = args[0];210
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);211
final SkullMeta meta = (SkullMeta) skull.getItemMeta();212
meta.setOwner(name);213
skull.setItemMeta(meta);215
player.getInventory().addItem(skull);217
return true;218
}220
private boolean openInventoryForPlayer(final Player player, final String[] args)221
{222
if(args.length == 0)223
{224
return false;225
}227
if(!player.isOp())228
{229
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);230
return true;231
}233
final Player target = Bukkit.getPlayer(args[0]);235
if(target == null)236
{237
player.sendMessage(ChatColor.RED + "Player not found!");238
return true;239
}241
player.openInventory(target.getInventory());243
return true;244
}246
private boolean openInfoBook(final Player player, final String[] args)247
{248
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);249
final BookMeta meta = (BookMeta) book.getItemMeta();250
meta.setTitle("Info");251
meta.setAuthor("Server");252
meta.setPages(config.getInfoPages());253
book.setItemMeta(meta);255
player.openBook(book);257
return true;258
}260
private boolean teleportToSpawn(final Player player, final String[] args)261
{262
final Location location = Bukkit.getWorld("world").getSpawnLocation();264
if(Utils.travelTo(plugin, player, location))265
{266
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");267
}269
return true;270
}272
private boolean teleportToHome(final Player player, final String[] args)273
{274
final Location location = config.getHome(player);276
if(location == null)277
{278
player.sendMessage(ChatColor.RED + "You've don't have a home point.");279
return true;280
}282
if(Utils.travelTo(plugin, player, location))283
{284
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");285
}287
return true;288
}290
private boolean teleportToWarppoint(final Player player, final String[] args)291
{292
if(args.length != 1)293
{294
return false;295
}297
final String name = args[0].toLowerCase();298
final Location location = config.getWarp(name);300
if(location == null)301
{302
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");303
return true;304
}306
if(Utils.travelTo(plugin, player, location))307
{308
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");309
}311
return true;312
}314
private boolean setHome(final Player player, final String[] args)315
{316
try317
{318
config.setHome(player);319
player.sendMessage(ChatColor.YELLOW + "Home point set.");320
}321
catch(Exception ex)322
{323
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);324
}326
return true;327
}329
private boolean setWarppoint(final Player player, final String[] args)330
{331
if(args.length != 1)332
{333
return false;334
}336
final String name = args[0].toLowerCase();338
if(!Utils.payFee(player, Material.COMPASS, 1))339
{340
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");341
return true;342
}344
try345
{346
if(!config.setWarp(name, player.getLocation()))347
{348
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");349
return true;350
}352
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");353
}354
catch(Exception ex)355
{356
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);357
}359
return true;360
}362
private boolean isSlimeChunk(final Player player, final String[] args)363
{364
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();366
if(isSlimeChunk)367
{368
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");369
return true;370
}371
else372
{373
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");374
return true;375
}376
}378
private boolean doReload(final Player player, final String[] args)379
{380
player.chat("/reload confirm");381
return true;382
}384
private boolean placeBlockBelow(final Player player, final String[] args)385
{386
Location playerLocation = player.getLocation().clone();387
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();389
if(!Utils.isAir(blockBelow.getType()))390
{391
return false;392
}394
if(!player.isOp())395
{396
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);397
return true;398
}400
blockBelow.setType(Material.GLASS);402
return true;403
}405
private boolean openEnderChest(final Player player, final String[] args)406
{407
if(args.length != 0)408
{409
if(!player.isOp())410
{411
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);412
return true;413
}415
final Player target = Bukkit.getPlayer(args[0]);417
if(target == null)418
{419
player.sendMessage(ChatColor.RED + "Player not found!");420
return true;421
}423
player.openInventory(target.getEnderChest());425
}426
else427
{428
player.openInventory(player.getEnderChest());429
}431
return true;432
}434
private boolean teleportToWorld(final Player player, final String[] args)435
{436
if (args.length != 1)437
{438
return false;439
}441
final String name = args[0].toLowerCase();442
final World world = Bukkit.getServer().getWorld(name);444
if (world == null)445
{446
player.sendMessage(ChatColor.RED + "World " + name + " doesn't exist!");447
return true;448
}450
player.teleport(world.getSpawnLocation());451
player.setGameMode(GameMode.SURVIVAL);452
player.sendMessage(ChatColor.GRAY + "You've been teleported to world " + name + ".");454
return true;455
}457
private boolean changeGameMode(final Player player)458
{459
if (!"world".equals(player.getWorld().getName())) {460
player.sendMessage(ChatColor.RED + "This is not a creative world!");461
return true;462
}464
if (GameMode.SURVIVAL.equals(player.getGameMode()))465
{466
player.setGameMode(GameMode.CREATIVE);467
player.sendMessage(ChatColor.GRAY + "Changed gamemode to creative.");468
}469
else470
{471
player.setGameMode(GameMode.SURVIVAL);472
player.sendMessage(ChatColor.GRAY + "Changed gamemode to survival.");473
}475
return true;476
}477
}