A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 9d36fe5dc06ad0ecfa663ae7138cc92182121017 (10547 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.block.Block;10
import org.bukkit.command.Command;11
import org.bukkit.command.CommandSender;12
import org.bukkit.entity.Player;13
import org.bukkit.inventory.FurnaceRecipe;14
import org.bukkit.inventory.ItemStack;15
import org.bukkit.inventory.RecipeChoice;16
import org.bukkit.inventory.meta.SkullMeta;17
import org.bukkit.inventory.meta.BookMeta;18
import org.bukkit.plugin.Plugin;19
import org.bukkit.plugin.PluginManager;20
import org.bukkit.plugin.java.JavaPlugin;22
import poppy.modules.AutoBreakerModule;23
import poppy.modules.AutoPlacerModule;24
import poppy.modules.AutoWorkbenchModule;25
import poppy.modules.BlockDetectorModule;26
import poppy.modules.CauldronModule;27
import poppy.modules.ChairModule;28
import poppy.modules.DoubleDoorModule;29
import poppy.modules.HopperSorterModule;30
import poppy.modules.CommonModule;31
import poppy.modules.LeavesDecayModule;32
import poppy.modules.SpawnerModule;33
import poppy.modules.PlayerMountModule;36
public class Main extends JavaPlugin37
{38
private Plugin plugin;39
private Config config;40
private PluginManager pluginManager;42
private CommonModule commonModule;43
private DoubleDoorModule doubleDoorModule;44
private ChairModule chairModule;45
private AutoWorkbenchModule autoWorkbenchModule;46
private LeavesDecayModule leavesDecayModule;47
private CauldronModule cauldronModule;48
private SpawnerModule spawnerModule;49
private HopperSorterModule hopperSorterModule;50
private AutoPlacerModule autoPlacerModule;51
private AutoBreakerModule autoBreakerModule;52
private PlayerMountModule playerMountModule;53
private BlockDetectorModule blockDetectorModule;55
@Override56
public void onEnable()57
{58
plugin = this;59
config = new Config("config/poppy.yml");61
pluginManager = Bukkit.getPluginManager();63
commonModule = new CommonModule();64
pluginManager.registerEvents(commonModule, this);66
doubleDoorModule = new DoubleDoorModule();67
pluginManager.registerEvents(doubleDoorModule, this);69
chairModule = new ChairModule();70
pluginManager.registerEvents(chairModule, this);72
autoWorkbenchModule = new AutoWorkbenchModule();73
pluginManager.registerEvents(autoWorkbenchModule, this);75
leavesDecayModule = new LeavesDecayModule(this);76
pluginManager.registerEvents(leavesDecayModule, this);78
cauldronModule = new CauldronModule(this);79
pluginManager.registerEvents(cauldronModule, this);81
spawnerModule = new SpawnerModule();82
pluginManager.registerEvents(spawnerModule, this);84
hopperSorterModule = new HopperSorterModule();85
pluginManager.registerEvents(hopperSorterModule, this);87
autoPlacerModule = new AutoPlacerModule(this);88
pluginManager.registerEvents(autoPlacerModule, this);90
autoBreakerModule = new AutoBreakerModule(this);91
pluginManager.registerEvents(autoBreakerModule, this);93
playerMountModule = new PlayerMountModule();94
pluginManager.registerEvents(playerMountModule, this);96
blockDetectorModule = new BlockDetectorModule();97
pluginManager.registerEvents(blockDetectorModule, this);99
NamespacedKey key = new NamespacedKey(this, "leather");100
FurnaceRecipe recipe = new FurnaceRecipe(key, new ItemStack(Material.LEATHER), Material.ROTTEN_FLESH, 1, 200);101
Bukkit.addRecipe(recipe);102
}104
@Override105
public void onDisable()106
{107
chairModule.onDisable();108
}110
@Override111
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)112
{113
if(sender instanceof Player)114
{115
Player player = (Player) sender;117
switch(label)118
{119
case "head":120
return setItemAsHead(player, args);121
case "skull":122
return getSkullForName(player, args);123
case "invsee":124
return openInventoryForPlayer(player, args);125
case "info":126
return openInfoBook(player, args);127
case "spawn":128
return teleportToSpawn(player, args);129
case "home":130
return teleportToHome(player, args);131
case "warp":132
return teleportToWarppoint(player, args);133
case "sethome":134
return setHome(player, args);135
case "setwarp":136
return setWarppoint(player, args);137
case "slime":138
return isSlimeChunk(player, args);139
case "r":140
return doReload(player, args);141
case "up":142
return placeBlockBelow(player, args);143
case "e":144
return openEnderChest(player, args);145
case "enderchest":146
return openEnderChest(player, args);147
default:148
return false;149
}150
}152
return true;153
}155
private boolean setItemAsHead(final Player player, final String[] args)156
{157
final ItemStack item = player.getInventory().getItemInMainHand();158
final ItemStack head = player.getInventory().getHelmet();160
if(head != null && head.getType().equals(Material.SADDLE))161
{162
player.eject();163
}165
player.getInventory().setHelmet(item);166
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));168
if(player.getGameMode() == GameMode.SURVIVAL)169
{170
if(head != null)171
{172
player.getInventory().addItem(head);173
}174
}176
return true;177
}179
@SuppressWarnings("deprecation")180
private boolean getSkullForName(final Player player, final String[] args)181
{182
if(!player.isOp())183
{184
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);185
return true;186
}188
if(args.length != 1)189
{190
return false;191
}193
final String name = args[0];194
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);195
final SkullMeta meta = (SkullMeta) skull.getItemMeta();196
meta.setOwner(name);197
skull.setItemMeta(meta);199
player.getInventory().addItem(skull);201
return true;202
}204
private boolean openInventoryForPlayer(final Player player, final String[] args)205
{206
if(args.length == 0)207
{208
return false;209
}211
if(!player.isOp())212
{213
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);214
return true;215
}217
final Player target = Bukkit.getPlayer(args[0]);219
if(target == null)220
{221
player.sendMessage(ChatColor.RED + "Player not found!");222
return true;223
}225
player.openInventory(target.getInventory());227
return true;228
}230
private boolean openInfoBook(final Player player, final String[] args)231
{232
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);233
final BookMeta meta = (BookMeta) book.getItemMeta();234
meta.setTitle("Info");235
meta.setAuthor("Server");236
meta.setPages(config.getInfoPages());237
book.setItemMeta(meta);239
player.openBook(book);241
return true;242
}244
private boolean teleportToSpawn(final Player player, final String[] args)245
{246
final Location location = Bukkit.getWorld("world").getSpawnLocation();248
if(Utils.travelTo(plugin, player, location))249
{250
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");251
}253
return true;254
}256
private boolean teleportToHome(final Player player, final String[] args)257
{258
final Location location = config.getHome(player);260
if(location == null)261
{262
player.sendMessage(ChatColor.RED + "You've don't have a home point.");263
return true;264
}266
if(Utils.travelTo(plugin, player, location))267
{268
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");269
}271
return true;272
}274
private boolean teleportToWarppoint(final Player player, final String[] args)275
{276
if(args.length != 1)277
{278
return false;279
}281
final String name = args[0].toLowerCase();282
final Location location = config.getWarp(name);284
if(location == null)285
{286
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");287
return true;288
}290
if(Utils.travelTo(plugin, player, location))291
{292
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");293
}295
return true;296
}298
private boolean setHome(final Player player, final String[] args)299
{300
try301
{302
config.setHome(player);303
player.sendMessage(ChatColor.YELLOW + "Home point set.");304
}305
catch(Exception ex)306
{307
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);308
}310
return true;311
}313
private boolean setWarppoint(final Player player, final String[] args)314
{315
if(args.length != 1)316
{317
return false;318
}320
final String name = args[0].toLowerCase();322
if(!Utils.payFee(player, Material.COMPASS, 1))323
{324
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");325
return true;326
}328
try329
{330
if(!config.setWarp(name, player.getLocation()))331
{332
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");333
return true;334
}336
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");337
}338
catch(Exception ex)339
{340
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);341
}343
return true;344
}346
private boolean isSlimeChunk(final Player player, final String[] args)347
{348
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();350
if(isSlimeChunk)351
{352
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");353
return true;354
}355
else356
{357
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");358
return true;359
}360
}362
private boolean doReload(final Player player, final String[] args)363
{364
player.chat("/reload confirm");365
return true;366
}368
private boolean placeBlockBelow(final Player player, final String[] args)369
{370
Location playerLocation = player.getLocation().clone();371
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();373
if(!Utils.isAir(blockBelow.getType()))374
{375
return false;376
}378
if(!player.isOp())379
{380
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);381
return true;382
}384
blockBelow.setType(Material.GLASS);386
return true;387
}389
private boolean openEnderChest(final Player player, final String[] args)390
{391
if(args.length != 0)392
{393
if(!player.isOp())394
{395
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);396
return true;397
}399
final Player target = Bukkit.getPlayer(args[0]);401
if(target == null)402
{403
player.sendMessage(ChatColor.RED + "Player not found!");404
return true;405
}407
player.openInventory(target.getEnderChest());409
}410
else411
{412
player.openInventory(player.getEnderChest());413
}415
return true;416
}417
}