A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: e35b4459219a5412795dca0904763aa76dc261d7 (10739 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.WorldCreator;10
import org.bukkit.WorldType;11
import org.bukkit.block.Block;12
import org.bukkit.command.Command;13
import org.bukkit.command.CommandSender;14
import org.bukkit.entity.Player;15
import org.bukkit.inventory.FurnaceRecipe;16
import org.bukkit.inventory.ItemStack;17
import org.bukkit.inventory.RecipeChoice;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();109
}111
@Override112
public void onDisable()113
{114
chairModule.onDisable();115
}117
@Override118
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)119
{120
if(sender instanceof Player)121
{122
Player player = (Player) sender;124
switch(label)125
{126
case "head":127
return setItemAsHead(player, args);128
case "skull":129
return getSkullForName(player, args);130
case "invsee":131
return openInventoryForPlayer(player, args);132
case "info":133
return openInfoBook(player, args);134
case "spawn":135
return teleportToSpawn(player, args);136
case "home":137
return teleportToHome(player, args);138
case "warp":139
return teleportToWarppoint(player, args);140
case "sethome":141
return setHome(player, args);142
case "setwarp":143
return setWarppoint(player, args);144
case "slime":145
return isSlimeChunk(player, args);146
case "r":147
return doReload(player, args);148
case "up":149
return placeBlockBelow(player, args);150
case "e":151
return openEnderChest(player, args);152
case "enderchest":153
return openEnderChest(player, args);154
default:155
return false;156
}157
}159
return true;160
}162
private boolean setItemAsHead(final Player player, final String[] args)163
{164
final ItemStack item = player.getInventory().getItemInMainHand();165
final ItemStack head = player.getInventory().getHelmet();167
if(head != null && head.getType().equals(Material.SADDLE))168
{169
player.eject();170
}172
player.getInventory().setHelmet(item);173
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));175
if(player.getGameMode() == GameMode.SURVIVAL)176
{177
if(head != null)178
{179
player.getInventory().addItem(head);180
}181
}183
return true;184
}186
@SuppressWarnings("deprecation")187
private boolean getSkullForName(final Player player, final String[] args)188
{189
if(!player.isOp())190
{191
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);192
return true;193
}195
if(args.length != 1)196
{197
return false;198
}200
final String name = args[0];201
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);202
final SkullMeta meta = (SkullMeta) skull.getItemMeta();203
meta.setOwner(name);204
skull.setItemMeta(meta);206
player.getInventory().addItem(skull);208
return true;209
}211
private boolean openInventoryForPlayer(final Player player, final String[] args)212
{213
if(args.length == 0)214
{215
return false;216
}218
if(!player.isOp())219
{220
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);221
return true;222
}224
final Player target = Bukkit.getPlayer(args[0]);226
if(target == null)227
{228
player.sendMessage(ChatColor.RED + "Player not found!");229
return true;230
}232
player.openInventory(target.getInventory());234
return true;235
}237
private boolean openInfoBook(final Player player, final String[] args)238
{239
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);240
final BookMeta meta = (BookMeta) book.getItemMeta();241
meta.setTitle("Info");242
meta.setAuthor("Server");243
meta.setPages(config.getInfoPages());244
book.setItemMeta(meta);246
player.openBook(book);248
return true;249
}251
private boolean teleportToSpawn(final Player player, final String[] args)252
{253
final Location location = Bukkit.getWorld("world").getSpawnLocation();255
if(Utils.travelTo(plugin, player, location))256
{257
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");258
}260
return true;261
}263
private boolean teleportToHome(final Player player, final String[] args)264
{265
final Location location = config.getHome(player);267
if(location == null)268
{269
player.sendMessage(ChatColor.RED + "You've don't have a home point.");270
return true;271
}273
if(Utils.travelTo(plugin, player, location))274
{275
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");276
}278
return true;279
}281
private boolean teleportToWarppoint(final Player player, final String[] args)282
{283
if(args.length != 1)284
{285
return false;286
}288
final String name = args[0].toLowerCase();289
final Location location = config.getWarp(name);291
if(location == null)292
{293
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");294
return true;295
}297
if(Utils.travelTo(plugin, player, location))298
{299
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");300
}302
return true;303
}305
private boolean setHome(final Player player, final String[] args)306
{307
try308
{309
config.setHome(player);310
player.sendMessage(ChatColor.YELLOW + "Home point set.");311
}312
catch(Exception ex)313
{314
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);315
}317
return true;318
}320
private boolean setWarppoint(final Player player, final String[] args)321
{322
if(args.length != 1)323
{324
return false;325
}327
final String name = args[0].toLowerCase();329
if(!Utils.payFee(player, Material.COMPASS, 1))330
{331
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");332
return true;333
}335
try336
{337
if(!config.setWarp(name, player.getLocation()))338
{339
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");340
return true;341
}343
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");344
}345
catch(Exception ex)346
{347
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);348
}350
return true;351
}353
private boolean isSlimeChunk(final Player player, final String[] args)354
{355
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();357
if(isSlimeChunk)358
{359
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");360
return true;361
}362
else363
{364
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");365
return true;366
}367
}369
private boolean doReload(final Player player, final String[] args)370
{371
player.chat("/reload confirm");372
return true;373
}375
private boolean placeBlockBelow(final Player player, final String[] args)376
{377
Location playerLocation = player.getLocation().clone();378
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();380
if(!Utils.isAir(blockBelow.getType()))381
{382
return false;383
}385
if(!player.isOp())386
{387
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);388
return true;389
}391
blockBelow.setType(Material.GLASS);393
return true;394
}396
private boolean openEnderChest(final Player player, final String[] args)397
{398
if(args.length != 0)399
{400
if(!player.isOp())401
{402
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);403
return true;404
}406
final Player target = Bukkit.getPlayer(args[0]);408
if(target == null)409
{410
player.sendMessage(ChatColor.RED + "Player not found!");411
return true;412
}414
player.openInventory(target.getEnderChest());416
}417
else418
{419
player.openInventory(player.getEnderChest());420
}422
return true;423
}424
}