A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: fc2dae22f99d6912aa6f9ace75570814b50f606b (12922 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.command.Command;15
import org.bukkit.command.CommandSender;16
import org.bukkit.entity.Player;17
import org.bukkit.event.EventHandler;18
import org.bukkit.event.Listener;19
import org.bukkit.event.player.PlayerPortalEvent;20
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;21
import org.bukkit.inventory.FurnaceRecipe;22
import org.bukkit.inventory.ItemStack;23
import org.bukkit.inventory.meta.SkullMeta;24
import org.bukkit.inventory.meta.BookMeta;25
import org.bukkit.plugin.Plugin;26
import org.bukkit.plugin.PluginManager;27
import org.bukkit.plugin.java.JavaPlugin;29
import poppy.modules.AutoBreakerModule;30
import poppy.modules.AutoPlacerModule;31
import poppy.modules.AutoWorkbenchModule;32
import poppy.modules.BlockDetectorModule;33
import poppy.modules.CauldronModule;34
import poppy.modules.ChairModule;35
import poppy.modules.DoubleDoorModule;36
import poppy.modules.HopperSorterModule;37
import poppy.modules.CommonModule;38
import poppy.modules.LeavesDecayModule;39
import poppy.modules.SpawnerModule;40
import poppy.modules.PlayerMountModule;43
public class Main extends JavaPlugin implements Listener44
{45
private Plugin plugin;46
private Config config;47
private PluginManager pluginManager;49
private CommonModule commonModule;50
private DoubleDoorModule doubleDoorModule;51
private ChairModule chairModule;52
private AutoWorkbenchModule autoWorkbenchModule;53
private LeavesDecayModule leavesDecayModule;54
private CauldronModule cauldronModule;55
private SpawnerModule spawnerModule;56
private HopperSorterModule hopperSorterModule;57
private AutoPlacerModule autoPlacerModule;58
private AutoBreakerModule autoBreakerModule;59
private PlayerMountModule playerMountModule;60
private BlockDetectorModule blockDetectorModule;62
@Override63
public void onEnable()64
{65
plugin = this;66
config = new Config("config/poppy.yml");68
pluginManager = Bukkit.getPluginManager();70
commonModule = new CommonModule();71
pluginManager.registerEvents(commonModule, this);73
doubleDoorModule = new DoubleDoorModule();74
pluginManager.registerEvents(doubleDoorModule, this);76
chairModule = new ChairModule();77
pluginManager.registerEvents(chairModule, this);79
autoWorkbenchModule = new AutoWorkbenchModule();80
pluginManager.registerEvents(autoWorkbenchModule, this);82
leavesDecayModule = new LeavesDecayModule(this);83
pluginManager.registerEvents(leavesDecayModule, this);85
cauldronModule = new CauldronModule(this);86
pluginManager.registerEvents(cauldronModule, this);88
spawnerModule = new SpawnerModule();89
pluginManager.registerEvents(spawnerModule, this);91
hopperSorterModule = new HopperSorterModule();92
pluginManager.registerEvents(hopperSorterModule, this);94
autoPlacerModule = new AutoPlacerModule(this);95
pluginManager.registerEvents(autoPlacerModule, this);97
autoBreakerModule = new AutoBreakerModule(this);98
pluginManager.registerEvents(autoBreakerModule, this);100
playerMountModule = new PlayerMountModule();101
pluginManager.registerEvents(playerMountModule, this);103
blockDetectorModule = new BlockDetectorModule();104
pluginManager.registerEvents(blockDetectorModule, this);106
NamespacedKey key = new NamespacedKey(this, "leather");107
FurnaceRecipe recipe = new FurnaceRecipe(key, new ItemStack(Material.LEATHER), Material.ROTTEN_FLESH, 1, 200);108
Bukkit.addRecipe(recipe);110
new WorldCreator("creative")111
.type(WorldType.FLAT)112
.generateStructures(false)113
.createWorld();115
new WorldCreator("survival")116
.type(WorldType.NORMAL)117
.generateStructures(true)118
.createWorld();120
new WorldCreator("survival_nether")121
.environment(Environment.NETHER)122
.generateStructures(true)123
.createWorld();125
new WorldCreator("survival_the_end")126
.environment(Environment.THE_END)127
.generateStructures(true)128
.createWorld();129
}131
@Override132
public void onDisable()133
{134
chairModule.onDisable();135
}137
@Override138
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)139
{140
if(sender instanceof Player)141
{142
Player player = (Player) sender;144
switch(label)145
{146
case "head":147
return setItemAsHead(player, args);148
case "skull":149
return getSkullForName(player, args);150
case "invsee":151
return openInventoryForPlayer(player, args);152
case "info":153
return openInfoBook(player, args);154
case "spawn":155
return teleportToSpawn(player, args);156
case "home":157
return teleportToHome(player, args);158
case "warp":159
return teleportToWarppoint(player, args);160
case "sethome":161
return setHome(player, args);162
case "setwarp":163
return setWarppoint(player, args);164
case "slime":165
return isSlimeChunk(player, args);166
case "r":167
return doReload(player, args);168
case "up":169
return placeBlockBelow(player, args);170
case "e":171
return openEnderChest(player, args);172
case "enderchest":173
return openEnderChest(player, args);174
case "world":175
return teleportToWorld(player, args);176
case "gm":177
return changeGameMode(player);178
default:179
return false;180
}181
}183
return true;184
}186
@EventHandler187
public void onPlayerPortal(final PlayerPortalEvent event)188
{189
final Player player = event.getPlayer();191
if (event.getCause() == TeleportCause.NETHER_PORTAL)192
{193
return;194
}196
if (event.getCause() == TeleportCause.END_PORTAL)197
{198
return;199
}200
}202
private boolean setItemAsHead(final Player player, final String[] args)203
{204
final ItemStack item = player.getInventory().getItemInMainHand();205
final ItemStack head = player.getInventory().getHelmet();207
if(head != null && head.getType().equals(Material.SADDLE))208
{209
player.eject();210
}212
player.getInventory().setHelmet(item);213
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));215
if(player.getGameMode() == GameMode.SURVIVAL)216
{217
if(head != null)218
{219
player.getInventory().addItem(head);220
}221
}223
return true;224
}226
@SuppressWarnings("deprecation")227
private boolean getSkullForName(final Player player, final String[] args)228
{229
if(!player.isOp())230
{231
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);232
return true;233
}235
if(args.length != 1)236
{237
return false;238
}240
final String name = args[0];241
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);242
final SkullMeta meta = (SkullMeta) skull.getItemMeta();243
meta.setOwner(name);244
skull.setItemMeta(meta);246
player.getInventory().addItem(skull);248
return true;249
}251
private boolean openInventoryForPlayer(final Player player, final String[] args)252
{253
if(args.length == 0)254
{255
return false;256
}258
if(!player.isOp())259
{260
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);261
return true;262
}264
final Player target = Bukkit.getPlayer(args[0]);266
if(target == null)267
{268
player.sendMessage(ChatColor.RED + "Player not found!");269
return true;270
}272
player.openInventory(target.getInventory());274
return true;275
}277
private boolean openInfoBook(final Player player, final String[] args)278
{279
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);280
final BookMeta meta = (BookMeta) book.getItemMeta();281
meta.setTitle("Info");282
meta.setAuthor("Server");283
meta.setPages(config.getInfoPages());284
book.setItemMeta(meta);286
player.openBook(book);288
return true;289
}291
private boolean teleportToSpawn(final Player player, final String[] args)292
{293
final Location location = Bukkit.getWorld("world").getSpawnLocation();295
if(Utils.travelTo(plugin, player, location))296
{297
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");298
}300
return true;301
}303
private boolean teleportToHome(final Player player, final String[] args)304
{305
final Location location = config.getHome(player);307
if(location == null)308
{309
player.sendMessage(ChatColor.RED + "You've don't have a home point.");310
return true;311
}313
if(Utils.travelTo(plugin, player, location))314
{315
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");316
}318
return true;319
}321
private boolean teleportToWarppoint(final Player player, final String[] args)322
{323
if(args.length != 1)324
{325
return false;326
}328
final String name = args[0].toLowerCase();329
final Location location = config.getWarp(name);331
if(location == null)332
{333
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");334
return true;335
}337
if(Utils.travelTo(plugin, player, location))338
{339
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");340
}342
return true;343
}345
private boolean setHome(final Player player, final String[] args)346
{347
try348
{349
config.setHome(player);350
player.sendMessage(ChatColor.YELLOW + "Home point set.");351
}352
catch(Exception ex)353
{354
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);355
}357
return true;358
}360
private boolean setWarppoint(final Player player, final String[] args)361
{362
if(args.length != 1)363
{364
return false;365
}367
final String name = args[0].toLowerCase();369
if(!Utils.payFee(player, Material.COMPASS, 1))370
{371
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");372
return true;373
}375
try376
{377
if(!config.setWarp(name, player.getLocation()))378
{379
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");380
return true;381
}383
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");384
}385
catch(Exception ex)386
{387
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);388
}390
return true;391
}393
private boolean isSlimeChunk(final Player player, final String[] args)394
{395
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();397
if(isSlimeChunk)398
{399
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");400
return true;401
}402
else403
{404
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");405
return true;406
}407
}409
private boolean doReload(final Player player, final String[] args)410
{411
player.chat("/reload confirm");412
return true;413
}415
private boolean placeBlockBelow(final Player player, final String[] args)416
{417
Location playerLocation = player.getLocation().clone();418
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();420
if(!Utils.isAir(blockBelow.getType()))421
{422
return false;423
}425
if(!player.isOp())426
{427
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);428
return true;429
}431
blockBelow.setType(Material.GLASS);433
return true;434
}436
private boolean openEnderChest(final Player player, final String[] args)437
{438
if(args.length != 0)439
{440
if(!player.isOp())441
{442
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);443
return true;444
}446
final Player target = Bukkit.getPlayer(args[0]);448
if(target == null)449
{450
player.sendMessage(ChatColor.RED + "Player not found!");451
return true;452
}454
player.openInventory(target.getEnderChest());456
}457
else458
{459
player.openInventory(player.getEnderChest());460
}462
return true;463
}465
private boolean teleportToWorld(final Player player, final String[] args)466
{467
if (args.length != 1)468
{469
return false;470
}472
final String name = args[0].toLowerCase();473
final World world = Bukkit.getServer().getWorld(name);475
if (world == null)476
{477
player.sendMessage(ChatColor.RED + "World " + name + " doesn't exist!");478
return true;479
}481
player.teleport(world.getSpawnLocation());482
player.setGameMode(GameMode.SURVIVAL);483
player.sendMessage(ChatColor.GRAY + "You've been teleported to world " + name + ".");485
return true;486
}488
private boolean changeGameMode(final Player player)489
{490
if (!"world".equals(player.getWorld().getName())) {491
player.sendMessage(ChatColor.RED + "This is not a creative world!");492
return true;493
}495
if (GameMode.SURVIVAL.equals(player.getGameMode()))496
{497
player.setGameMode(GameMode.CREATIVE);498
player.sendMessage(ChatColor.GRAY + "Changed gamemode to creative.");499
}500
else501
{502
player.setGameMode(GameMode.SURVIVAL);503
player.sendMessage(ChatColor.GRAY + "Changed gamemode to survival.");504
}506
return true;507
}508
}