A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: d144b7c5ba8f9fc975a0e1c53f562ee86149c09b (15704 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.World.Environment;13
import org.bukkit.block.Block;14
import org.bukkit.block.BlockFace;15
import org.bukkit.command.Command;16
import org.bukkit.command.CommandSender;17
import org.bukkit.entity.Player;18
import org.bukkit.event.EventHandler;19
import org.bukkit.event.Listener;20
import org.bukkit.event.player.PlayerPortalEvent;21
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;22
import org.bukkit.inventory.FurnaceRecipe;23
import org.bukkit.inventory.ItemStack;24
import org.bukkit.inventory.meta.SkullMeta;25
import org.bukkit.inventory.meta.BookMeta;26
import org.bukkit.plugin.Plugin;27
import org.bukkit.plugin.PluginManager;28
import org.bukkit.plugin.java.JavaPlugin;30
import poppy.modules.AutoBreakerModule;31
import poppy.modules.AutoPlacerModule;32
import poppy.modules.AutoWorkbenchModule;33
import poppy.modules.BlockDetectorModule;34
import poppy.modules.CauldronModule;35
import poppy.modules.ChairModule;36
import poppy.modules.DoubleDoorModule;37
import poppy.modules.HopperSorterModule;38
import poppy.modules.CommonModule;39
import poppy.modules.LeavesDecayModule;40
import poppy.modules.SpawnerModule;41
import poppy.modules.PlayerMountModule;44
public class Main extends JavaPlugin implements Listener45
{46
private Plugin plugin;47
private Config config;48
private PluginManager pluginManager;50
private CommonModule commonModule;51
private DoubleDoorModule doubleDoorModule;52
private ChairModule chairModule;53
private AutoWorkbenchModule autoWorkbenchModule;54
private LeavesDecayModule leavesDecayModule;55
private CauldronModule cauldronModule;56
private SpawnerModule spawnerModule;57
private HopperSorterModule hopperSorterModule;58
private AutoPlacerModule autoPlacerModule;59
private AutoBreakerModule autoBreakerModule;60
private PlayerMountModule playerMountModule;61
private BlockDetectorModule blockDetectorModule;63
@Override64
public void onEnable()65
{66
plugin = this;67
config = new Config("config/poppy.yml");69
pluginManager = Bukkit.getPluginManager();71
pluginManager.registerEvents(this, this);73
commonModule = new CommonModule();74
pluginManager.registerEvents(commonModule, this);76
doubleDoorModule = new DoubleDoorModule();77
pluginManager.registerEvents(doubleDoorModule, this);79
chairModule = new ChairModule();80
pluginManager.registerEvents(chairModule, this);82
autoWorkbenchModule = new AutoWorkbenchModule();83
pluginManager.registerEvents(autoWorkbenchModule, this);85
leavesDecayModule = new LeavesDecayModule(this);86
pluginManager.registerEvents(leavesDecayModule, this);88
cauldronModule = new CauldronModule(this);89
pluginManager.registerEvents(cauldronModule, this);91
spawnerModule = new SpawnerModule();92
pluginManager.registerEvents(spawnerModule, this);94
hopperSorterModule = new HopperSorterModule();95
pluginManager.registerEvents(hopperSorterModule, this);97
autoPlacerModule = new AutoPlacerModule(this);98
pluginManager.registerEvents(autoPlacerModule, this);100
autoBreakerModule = new AutoBreakerModule(this);101
pluginManager.registerEvents(autoBreakerModule, this);103
playerMountModule = new PlayerMountModule();104
pluginManager.registerEvents(playerMountModule, this);106
blockDetectorModule = new BlockDetectorModule();107
pluginManager.registerEvents(blockDetectorModule, this);109
NamespacedKey key = new NamespacedKey(this, "leather");110
FurnaceRecipe recipe = new FurnaceRecipe(key, new ItemStack(Material.LEATHER), Material.ROTTEN_FLESH, 1, 200);111
Bukkit.addRecipe(recipe);113
new WorldCreator(Constants.Worlds.BACKROOMS)114
.type(WorldType.FLAT)115
.generateStructures(false)116
.createWorld();118
new WorldCreator(Constants.Worlds.SURVIVAL)119
.type(WorldType.NORMAL)120
.generateStructures(true)121
.createWorld();123
new WorldCreator(Constants.Worlds.SURVIVAL_NETHER)124
.environment(Environment.NETHER)125
.generateStructures(true)126
.createWorld();128
new WorldCreator(Constants.Worlds.SURVIVAL_THE_END)129
.environment(Environment.THE_END)130
.generateStructures(true)131
.createWorld();132
}134
@Override135
public void onDisable()136
{137
chairModule.onDisable();138
}140
@Override141
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)142
{143
if(sender instanceof Player)144
{145
Player player = (Player) sender;147
switch(label)148
{149
case "head":150
return setItemAsHead(player, args);151
case "skull":152
return getSkullForName(player, args);153
case "invsee":154
return openInventoryForPlayer(player, args);155
case "info":156
return openInfoBook(player, args);157
case "spawn":158
return teleportToSpawn(player, args);159
case "home":160
return teleportToHome(player, args);161
case "warp":162
return teleportToWarppoint(player, args);163
case "sethome":164
return setHome(player, args);165
case "setwarp":166
return setWarppoint(player, args);167
case "slime":168
return isSlimeChunk(player, args);169
case "r":170
return doReload(player, args);171
case "up":172
return placeBlockBelow(player, args);173
case "e":174
return openEnderChest(player, args);175
case "enderchest":176
return openEnderChest(player, args);177
case "world":178
return teleportToWorld(player, args);179
case "gm":180
return changeGameMode(player);181
case "heal":182
return heal(player, args);183
default:184
return false;185
}186
}188
return true;189
}191
@EventHandler192
public void onPlayerPortal(final PlayerPortalEvent event)193
{194
final Player player = event.getPlayer();195
final String worldName = player.getWorld().getName();197
if (event.getCause() == TeleportCause.NETHER_PORTAL)198
{199
if (worldName.equals(Constants.Worlds.SURVIVAL))200
{201
final Location location = new Location(202
Bukkit.getWorld(Constants.Worlds.SURVIVAL_NETHER),203
event.getFrom().getBlockX() / 8,204
event.getFrom().getBlockY(),205
event.getFrom().getBlockZ() / 8206
);207
event.setTo(location);208
}209
else if (worldName.equals(Constants.Worlds.SURVIVAL_NETHER))210
{211
final Location location = new Location(212
Bukkit.getWorld(Constants.Worlds.SURVIVAL),213
event.getFrom().getBlockX() * 8,214
event.getFrom().getBlockY(),215
event.getFrom().getBlockZ() * 8216
);217
event.setTo(location);218
}219
}221
if (event.getCause() == TeleportCause.END_PORTAL)222
{223
if (worldName.equals(Constants.Worlds.SURVIVAL))224
{225
final Location location = new Location(226
Bukkit.getWorld(Constants.Worlds.SURVIVAL_THE_END),227
100,228
50,229
0230
);231
event.setTo(location);233
final Block block = location.getBlock();235
for (int x = block.getX() - 2; x <= block.getX() + 2; x++)236
{237
for (int z = block.getZ() - 2; z <= block.getZ() + 2; z++)238
{239
final Block platformBlock = location.getWorld().getBlockAt(x, block.getY() - 1, z);241
if (platformBlock.getType() != Material.OBSIDIAN)242
{243
platformBlock.setType(Material.OBSIDIAN);244
}246
for (int yMod = 1; yMod <= 3; yMod++)247
{248
final Block b = platformBlock.getRelative(BlockFace.UP, yMod);250
if (b.getType() != Material.AIR)251
{252
b.setType(Material.AIR);253
}254
}255
}256
}257
}258
else if (worldName.equals(Constants.Worlds.SURVIVAL_THE_END))259
{260
event.setTo(Bukkit.getWorld(Constants.Worlds.SURVIVAL).getSpawnLocation());261
}262
}263
}265
private boolean setItemAsHead(final Player player, final String[] args)266
{267
final ItemStack item = player.getInventory().getItemInMainHand();268
final ItemStack head = player.getInventory().getHelmet();270
if(head != null && head.getType().equals(Material.SADDLE))271
{272
player.eject();273
}275
player.getInventory().setHelmet(item);276
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));278
if(player.getGameMode() == GameMode.SURVIVAL)279
{280
if(head != null)281
{282
player.getInventory().addItem(head);283
}284
}286
return true;287
}289
@SuppressWarnings("deprecation")290
private boolean getSkullForName(final Player player, final String[] args)291
{292
if(!player.isOp())293
{294
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);295
return true;296
}298
if(args.length != 1)299
{300
return false;301
}303
final String name = args[0];304
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);305
final SkullMeta meta = (SkullMeta) skull.getItemMeta();306
meta.setOwner(name);307
skull.setItemMeta(meta);309
player.getInventory().addItem(skull);311
return true;312
}314
private boolean openInventoryForPlayer(final Player player, final String[] args)315
{316
if(args.length == 0)317
{318
return false;319
}321
if(!player.isOp())322
{323
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);324
return true;325
}327
final Player target = Bukkit.getPlayer(args[0]);329
if(target == null)330
{331
player.sendMessage(ChatColor.RED + "Player not found!");332
return true;333
}335
player.openInventory(target.getInventory());337
return true;338
}340
private boolean openInfoBook(final Player player, final String[] args)341
{342
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);343
final BookMeta meta = (BookMeta) book.getItemMeta();344
meta.setTitle("Info");345
meta.setAuthor("Server");346
meta.setPages(config.getInfoPages());347
book.setItemMeta(meta);349
player.openBook(book);351
return true;352
}354
private boolean teleportToSpawn(final Player player, final String[] args)355
{356
final Location location = Bukkit.getWorld("world").getSpawnLocation();358
if(Utils.travelTo(plugin, player, location))359
{360
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");361
}363
return true;364
}366
private boolean teleportToHome(final Player player, final String[] args)367
{368
final Location location = config.getHome(player);370
if(location == null)371
{372
player.sendMessage(ChatColor.RED + "You've don't have a home point.");373
return true;374
}376
if(Utils.travelTo(plugin, player, location))377
{378
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");379
}381
return true;382
}384
private boolean teleportToWarppoint(final Player player, final String[] args)385
{386
if(args.length != 1)387
{388
return false;389
}391
final String name = args[0].toLowerCase();392
final Location location = config.getWarp(name);394
if(location == null)395
{396
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");397
return true;398
}400
if(Utils.travelTo(plugin, player, location))401
{402
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");403
}405
return true;406
}408
private boolean setHome(final Player player, final String[] args)409
{410
try411
{412
config.setHome(player);413
player.sendMessage(ChatColor.YELLOW + "Home point set.");414
}415
catch(Exception ex)416
{417
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);418
}420
return true;421
}423
private boolean setWarppoint(final Player player, final String[] args)424
{425
if(args.length != 1)426
{427
return false;428
}430
final String name = args[0].toLowerCase();432
if(!Utils.payFee(player, Material.COMPASS, 1))433
{434
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");435
return true;436
}438
try439
{440
if(!config.setWarp(name, player.getLocation()))441
{442
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");443
return true;444
}446
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");447
}448
catch(Exception ex)449
{450
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);451
}453
return true;454
}456
private boolean isSlimeChunk(final Player player, final String[] args)457
{458
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();460
if(isSlimeChunk)461
{462
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");463
return true;464
}465
else466
{467
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");468
return true;469
}470
}472
private boolean doReload(final Player player, final String[] args)473
{474
player.chat("/reload confirm");475
return true;476
}478
private boolean placeBlockBelow(final Player player, final String[] args)479
{480
Location playerLocation = player.getLocation().clone();481
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();483
if(!Utils.isAir(blockBelow.getType()))484
{485
return false;486
}488
if(!player.isOp())489
{490
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);491
return true;492
}494
blockBelow.setType(Material.GLASS);496
return true;497
}499
private boolean openEnderChest(final Player player, final String[] args)500
{501
if(args.length != 0)502
{503
if(!player.isOp())504
{505
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);506
return true;507
}509
final Player target = Bukkit.getPlayer(args[0]);511
if(target == null)512
{513
player.sendMessage(ChatColor.RED + "Player not found!");514
return true;515
}517
player.openInventory(target.getEnderChest());519
}520
else521
{522
player.openInventory(player.getEnderChest());523
}525
return true;526
}528
private boolean teleportToWorld(final Player player, final String[] args)529
{530
if (args.length != 1)531
{532
return false;533
}535
final String name = args[0].toLowerCase();536
final World world = Bukkit.getServer().getWorld(name);538
if (world == null)539
{540
player.sendMessage(ChatColor.RED + "World " + name + " doesn't exist!");541
return true;542
}544
player.teleport(world.getSpawnLocation());546
if (world.getName().equals(Constants.Worlds.BACKROOMS))547
{548
player.setGameMode(GameMode.ADVENTURE);549
}550
else551
{552
player.setGameMode(GameMode.SURVIVAL);553
}555
player.sendMessage(ChatColor.GRAY + "You've been teleported to world " + name + ".");557
return true;558
}560
private boolean changeGameMode(final Player player)561
{562
if (!Constants.Worlds.DEFAULT.equals(player.getWorld().getName())) {563
player.sendMessage(ChatColor.RED + "This is not a creative world!");564
return true;565
}567
if (GameMode.SURVIVAL.equals(player.getGameMode()))568
{569
player.setGameMode(GameMode.CREATIVE);570
player.sendMessage(ChatColor.GRAY + "Changed gamemode to creative.");571
}572
else573
{574
player.setGameMode(GameMode.SURVIVAL);575
player.sendMessage(ChatColor.GRAY + "Changed gamemode to survival.");576
}578
return true;579
}581
private boolean heal(final Player player, final String[] args)582
{583
if(args.length != 0)584
{585
Player argPlayer = Bukkit.getPlayer(args[0]);587
if(argPlayer == null)588
{589
player.sendMessage("Player" + args[0] + " not found");590
return false;592
}594
argPlayer.setHealth(20);595
argPlayer.setFoodLevel(20);597
player.sendMessage("You have healed " + argPlayer.getName());598
argPlayer.sendMessage("You have been healed");599
}600
else601
{602
player.setHealth(20);603
player.setFoodLevel(20);605
player.sendMessage("You have been healed");606
}608
return true;609
}610
}