A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 8c4c7430e7873281d2f409d0147b08cc64837fb6 (14661 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
commonModule = new CommonModule();72
pluginManager.registerEvents(commonModule, this);74
doubleDoorModule = new DoubleDoorModule();75
pluginManager.registerEvents(doubleDoorModule, this);77
chairModule = new ChairModule();78
pluginManager.registerEvents(chairModule, this);80
autoWorkbenchModule = new AutoWorkbenchModule();81
pluginManager.registerEvents(autoWorkbenchModule, this);83
leavesDecayModule = new LeavesDecayModule(this);84
pluginManager.registerEvents(leavesDecayModule, this);86
cauldronModule = new CauldronModule(this);87
pluginManager.registerEvents(cauldronModule, this);89
spawnerModule = new SpawnerModule();90
pluginManager.registerEvents(spawnerModule, this);92
hopperSorterModule = new HopperSorterModule();93
pluginManager.registerEvents(hopperSorterModule, this);95
autoPlacerModule = new AutoPlacerModule(this);96
pluginManager.registerEvents(autoPlacerModule, this);98
autoBreakerModule = new AutoBreakerModule(this);99
pluginManager.registerEvents(autoBreakerModule, this);101
playerMountModule = new PlayerMountModule();102
pluginManager.registerEvents(playerMountModule, this);104
blockDetectorModule = new BlockDetectorModule();105
pluginManager.registerEvents(blockDetectorModule, this);107
NamespacedKey key = new NamespacedKey(this, "leather");108
FurnaceRecipe recipe = new FurnaceRecipe(key, new ItemStack(Material.LEATHER), Material.ROTTEN_FLESH, 1, 200);109
Bukkit.addRecipe(recipe);111
new WorldCreator("creative")112
.type(WorldType.FLAT)113
.generateStructures(false)114
.createWorld();116
new WorldCreator("survival")117
.type(WorldType.NORMAL)118
.generateStructures(true)119
.createWorld();121
new WorldCreator("survival_nether")122
.environment(Environment.NETHER)123
.generateStructures(true)124
.createWorld();126
new WorldCreator("survival_the_end")127
.environment(Environment.THE_END)128
.generateStructures(true)129
.createWorld();130
}132
@Override133
public void onDisable()134
{135
chairModule.onDisable();136
}138
@Override139
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)140
{141
if(sender instanceof Player)142
{143
Player player = (Player) sender;145
switch(label)146
{147
case "head":148
return setItemAsHead(player, args);149
case "skull":150
return getSkullForName(player, args);151
case "invsee":152
return openInventoryForPlayer(player, args);153
case "info":154
return openInfoBook(player, args);155
case "spawn":156
return teleportToSpawn(player, args);157
case "home":158
return teleportToHome(player, args);159
case "warp":160
return teleportToWarppoint(player, args);161
case "sethome":162
return setHome(player, args);163
case "setwarp":164
return setWarppoint(player, args);165
case "slime":166
return isSlimeChunk(player, args);167
case "r":168
return doReload(player, args);169
case "up":170
return placeBlockBelow(player, args);171
case "e":172
return openEnderChest(player, args);173
case "enderchest":174
return openEnderChest(player, args);175
case "world":176
return teleportToWorld(player, args);177
case "gm":178
return changeGameMode(player);179
default:180
return false;181
}182
}184
return true;185
}187
@EventHandler188
public void onPlayerPortal(final PlayerPortalEvent event)189
{190
final Player player = event.getPlayer();192
if (event.getCause() == TeleportCause.NETHER_PORTAL);193
{194
if (player.getWorld().getName().equals("survival"))195
{196
event.setTo(new Location(Bukkit.getWorld("survival_nether"), event.getFrom().getBlockX() / 8, event.getFrom().getBlockY(), event.getFrom().getBlockZ() / 8));197
}199
else if (player.getWorld().getName().equals("survival_nether"))200
{201
event.setTo(new Location(Bukkit.getWorld("survival"), event.getFrom().getBlockX() * 8, event.getFrom().getBlockY(), event.getFrom().getBlockZ() * 8));202
}203
}205
// TODO ugly code quick fix only!!!207
if (event.getCause() == TeleportCause.END_PORTAL)208
{209
if (player.getWorld().getName().equals("survival")) {210
Location loc = new Location(Bukkit.getWorld("survival_the_end"), 100, 50, 0);211
event.setTo(loc);212
Block block = loc.getBlock();213
for (int x = block.getX() - 2; x <= block.getX() + 2; x++) {214
for (int z = block.getZ() - 2; z <= block.getZ() + 2; z++) {215
Block platformBlock = loc.getWorld().getBlockAt(x, block.getY() - 1, z);216
if (platformBlock.getType() != Material.OBSIDIAN) {217
platformBlock.setType(Material.OBSIDIAN);218
}219
for (int yMod = 1; yMod <= 3; yMod++) {220
Block b = platformBlock.getRelative(BlockFace.UP, yMod);221
if (b.getType() != Material.AIR) {222
b.setType(Material.AIR);223
}224
}225
}226
}227
} else if (player.getWorld().getName().equals("survival_the_end")) {228
event.setTo(Bukkit.getWorld("survival").getSpawnLocation());229
}230
}231
}233
private boolean setItemAsHead(final Player player, final String[] args)234
{235
final ItemStack item = player.getInventory().getItemInMainHand();236
final ItemStack head = player.getInventory().getHelmet();238
if(head != null && head.getType().equals(Material.SADDLE))239
{240
player.eject();241
}243
player.getInventory().setHelmet(item);244
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));246
if(player.getGameMode() == GameMode.SURVIVAL)247
{248
if(head != null)249
{250
player.getInventory().addItem(head);251
}252
}254
return true;255
}257
@SuppressWarnings("deprecation")258
private boolean getSkullForName(final Player player, final String[] args)259
{260
if(!player.isOp())261
{262
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);263
return true;264
}266
if(args.length != 1)267
{268
return false;269
}271
final String name = args[0];272
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);273
final SkullMeta meta = (SkullMeta) skull.getItemMeta();274
meta.setOwner(name);275
skull.setItemMeta(meta);277
player.getInventory().addItem(skull);279
return true;280
}282
private boolean openInventoryForPlayer(final Player player, final String[] args)283
{284
if(args.length == 0)285
{286
return false;287
}289
if(!player.isOp())290
{291
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);292
return true;293
}295
final Player target = Bukkit.getPlayer(args[0]);297
if(target == null)298
{299
player.sendMessage(ChatColor.RED + "Player not found!");300
return true;301
}303
player.openInventory(target.getInventory());305
return true;306
}308
private boolean openInfoBook(final Player player, final String[] args)309
{310
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);311
final BookMeta meta = (BookMeta) book.getItemMeta();312
meta.setTitle("Info");313
meta.setAuthor("Server");314
meta.setPages(config.getInfoPages());315
book.setItemMeta(meta);317
player.openBook(book);319
return true;320
}322
private boolean teleportToSpawn(final Player player, final String[] args)323
{324
final Location location = Bukkit.getWorld("world").getSpawnLocation();326
if(Utils.travelTo(plugin, player, location))327
{328
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");329
}331
return true;332
}334
private boolean teleportToHome(final Player player, final String[] args)335
{336
final Location location = config.getHome(player);338
if(location == null)339
{340
player.sendMessage(ChatColor.RED + "You've don't have a home point.");341
return true;342
}344
if(Utils.travelTo(plugin, player, location))345
{346
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");347
}349
return true;350
}352
private boolean teleportToWarppoint(final Player player, final String[] args)353
{354
if(args.length != 1)355
{356
return false;357
}359
final String name = args[0].toLowerCase();360
final Location location = config.getWarp(name);362
if(location == null)363
{364
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");365
return true;366
}368
if(Utils.travelTo(plugin, player, location))369
{370
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");371
}373
return true;374
}376
private boolean setHome(final Player player, final String[] args)377
{378
try379
{380
config.setHome(player);381
player.sendMessage(ChatColor.YELLOW + "Home point set.");382
}383
catch(Exception ex)384
{385
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);386
}388
return true;389
}391
private boolean setWarppoint(final Player player, final String[] args)392
{393
if(args.length != 1)394
{395
return false;396
}398
final String name = args[0].toLowerCase();400
if(!Utils.payFee(player, Material.COMPASS, 1))401
{402
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");403
return true;404
}406
try407
{408
if(!config.setWarp(name, player.getLocation()))409
{410
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");411
return true;412
}414
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");415
}416
catch(Exception ex)417
{418
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);419
}421
return true;422
}424
private boolean isSlimeChunk(final Player player, final String[] args)425
{426
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();428
if(isSlimeChunk)429
{430
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");431
return true;432
}433
else434
{435
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");436
return true;437
}438
}440
private boolean doReload(final Player player, final String[] args)441
{442
player.chat("/reload confirm");443
return true;444
}446
private boolean placeBlockBelow(final Player player, final String[] args)447
{448
Location playerLocation = player.getLocation().clone();449
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();451
if(!Utils.isAir(blockBelow.getType()))452
{453
return false;454
}456
if(!player.isOp())457
{458
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);459
return true;460
}462
blockBelow.setType(Material.GLASS);464
return true;465
}467
private boolean openEnderChest(final Player player, final String[] args)468
{469
if(args.length != 0)470
{471
if(!player.isOp())472
{473
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);474
return true;475
}477
final Player target = Bukkit.getPlayer(args[0]);479
if(target == null)480
{481
player.sendMessage(ChatColor.RED + "Player not found!");482
return true;483
}485
player.openInventory(target.getEnderChest());487
}488
else489
{490
player.openInventory(player.getEnderChest());491
}493
return true;494
}496
private boolean teleportToWorld(final Player player, final String[] args)497
{498
if (args.length != 1)499
{500
return false;501
}503
final String name = args[0].toLowerCase();504
final World world = Bukkit.getServer().getWorld(name);506
if (world == null)507
{508
player.sendMessage(ChatColor.RED + "World " + name + " doesn't exist!");509
return true;510
}512
player.teleport(world.getSpawnLocation());513
player.setGameMode(GameMode.SURVIVAL);514
player.sendMessage(ChatColor.GRAY + "You've been teleported to world " + name + ".");516
return true;517
}519
private boolean changeGameMode(final Player player)520
{521
if (!"world".equals(player.getWorld().getName())) {522
player.sendMessage(ChatColor.RED + "This is not a creative world!");523
return true;524
}526
if (GameMode.SURVIVAL.equals(player.getGameMode()))527
{528
player.setGameMode(GameMode.CREATIVE);529
player.sendMessage(ChatColor.GRAY + "Changed gamemode to creative.");530
}531
else532
{533
player.setGameMode(GameMode.SURVIVAL);534
player.sendMessage(ChatColor.GRAY + "Changed gamemode to survival.");535
}537
return true;538
}539
}