A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 0b728245fa29115aaad2333ad833f7688e74cef6 (9033 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.block.Block;9
import org.bukkit.command.Command;10
import org.bukkit.command.CommandSender;11
import org.bukkit.entity.Player;12
import org.bukkit.inventory.ItemStack;13
import org.bukkit.inventory.meta.SkullMeta;14
import org.bukkit.inventory.meta.BookMeta;15
import org.bukkit.plugin.Plugin;16
import org.bukkit.plugin.PluginManager;17
import org.bukkit.plugin.java.JavaPlugin;19
import poppy.modules.AutoBreakerModule;20
import poppy.modules.AutoPlacerModule;21
import poppy.modules.AutoWorkbenchModule;22
import poppy.modules.CauldronModule;23
import poppy.modules.ChairModule;24
import poppy.modules.DoubleDoorModule;25
import poppy.modules.HopperSorterModule;26
import poppy.modules.CommonModule;27
import poppy.modules.LeavesDecayModule;28
import poppy.modules.SpawnerModule;31
public class Main extends JavaPlugin32
{33
private Plugin plugin;34
private Config config;35
private PluginManager pluginManager;37
private CommonModule commonModule;38
private DoubleDoorModule doubleDoorModule;39
private ChairModule chairModule;40
private AutoWorkbenchModule autoWorkbenchModule;41
private LeavesDecayModule leavesDecayModule;42
private CauldronModule cauldronModule;43
private SpawnerModule spawnerModule;44
private HopperSorterModule hopperSorterModule;45
private AutoPlacerModule autoPlacerModule;46
private AutoBreakerModule autoBreakerModule;48
@Override49
public void onEnable()50
{51
plugin = this;52
config = new Config("config/poppy.yml");54
pluginManager = Bukkit.getPluginManager();56
commonModule = new CommonModule();57
pluginManager.registerEvents(commonModule, this);59
doubleDoorModule = new DoubleDoorModule();60
pluginManager.registerEvents(doubleDoorModule, this);62
chairModule = new ChairModule();63
pluginManager.registerEvents(chairModule, this);65
autoWorkbenchModule = new AutoWorkbenchModule();66
pluginManager.registerEvents(autoWorkbenchModule, this);68
leavesDecayModule = new LeavesDecayModule(this);69
pluginManager.registerEvents(leavesDecayModule, this);71
cauldronModule = new CauldronModule(this);72
pluginManager.registerEvents(cauldronModule, this);74
spawnerModule = new SpawnerModule();75
pluginManager.registerEvents(spawnerModule, this);77
hopperSorterModule = new HopperSorterModule();78
pluginManager.registerEvents(hopperSorterModule, this);80
autoPlacerModule = new AutoPlacerModule(this);81
pluginManager.registerEvents(autoPlacerModule, this);83
autoBreakerModule = new AutoBreakerModule(this);84
pluginManager.registerEvents(autoBreakerModule, this);85
}87
@Override88
public void onDisable()89
{90
chairModule.onDisable();91
}93
@Override94
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)95
{96
if(sender instanceof Player)97
{98
Player player = (Player) sender;100
switch(label)101
{102
case "head":103
return setItemAsHead(player, args);104
case "skull":105
return getSkullForName(player, args);106
case "invsee":107
return openInventoryForPlayer(player, args);108
case "info":109
return openInfoBook(player, args);110
case "spawn":111
return teleportToSpawn(player, args);112
case "home":113
return teleportToHome(player, args);114
case "warp":115
return teleportToWarppoint(player, args);116
case "sethome":117
return setHome(player, args);118
case "setwarp":119
return setWarppoint(player, args);120
case "slime":121
return ifSlimeChunk(player, args);122
case "r":123
return reload(player, args);124
case "up":125
return blockBelow(player, args);126
default:127
return false;128
}129
}131
return true;132
}134
private boolean setItemAsHead(final Player player, final String[] args)135
{136
final ItemStack item = player.getInventory().getItemInMainHand();137
final ItemStack head = player.getInventory().getHelmet();139
player.getInventory().setHelmet(item);140
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));142
if(player.getGameMode() == GameMode.SURVIVAL)143
{144
if(head != null)145
{146
player.getInventory().addItem(head);147
}148
}150
return true;151
}153
@SuppressWarnings("deprecation")154
private boolean getSkullForName(final Player player, final String[] args)155
{156
if(!player.isOp())157
{158
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);159
return true;160
}162
if(args.length != 1)163
{164
return false;165
}167
final String name = args[0];168
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);169
final SkullMeta meta = (SkullMeta) skull.getItemMeta();170
meta.setOwner(name);171
skull.setItemMeta(meta);173
player.getInventory().addItem(skull);175
return true;176
}178
private boolean openInventoryForPlayer(final Player player, final String[] args)179
{180
if(args.length == 0)181
{182
return false;183
}185
if(!player.isOp())186
{187
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);188
return true;189
}191
final Player target = Bukkit.getPlayer(args[0]);193
if(target == null)194
{195
player.sendMessage(ChatColor.RED + "Player not found!");196
return true;197
}199
player.openInventory(target.getInventory());201
return true;202
}204
private boolean openInfoBook(final Player player, final String[] args)205
{206
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);207
final BookMeta meta = (BookMeta) book.getItemMeta();208
meta.setTitle("Info");209
meta.setAuthor("Server");210
meta.setPages(config.getInfoPages());211
book.setItemMeta(meta);213
player.openBook(book);215
return true;216
}218
private boolean teleportToSpawn(final Player player, final String[] args)219
{220
final Location location = Bukkit.getWorld("world").getSpawnLocation();222
if(Utils.travelTo(plugin, player, location))223
{224
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");225
}227
return true;228
}230
private boolean teleportToHome(final Player player, final String[] args)231
{232
final Location location = config.getHome(player);234
if(location == null)235
{236
player.sendMessage(ChatColor.RED + "You've don't have a home point.");237
return true;238
}240
if(Utils.travelTo(plugin, player, location))241
{242
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");243
}245
return true;246
}248
private boolean teleportToWarppoint(final Player player, final String[] args)249
{250
if(args.length != 1)251
{252
return false;253
}255
final String name = args[0].toLowerCase();256
final Location location = config.getWarp(name);258
if(location == null)259
{260
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");261
return true;262
}264
if(Utils.travelTo(plugin, player, location))265
{266
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");267
}269
return true;270
}272
private boolean setHome(final Player player, final String[] args)273
{274
try275
{276
config.setHome(player);277
player.sendMessage(ChatColor.YELLOW + "Home point set.");278
}279
catch(Exception ex)280
{281
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);282
}284
return true;285
}287
private boolean setWarppoint(final Player player, final String[] args)288
{289
if(args.length != 1)290
{291
return false;292
}294
final String name = args[0].toLowerCase();296
if(!Utils.payFee(player, Material.COMPASS, 1))297
{298
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");299
return true;300
}302
try303
{304
if(!config.setWarp(name, player.getLocation()))305
{306
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");307
return true;308
}310
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " 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 ifSlimeChunk(final Player player, final String[] args)321
{322
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();324
if(isSlimeChunk)325
{326
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");327
return true;328
}329
else330
{331
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");332
return true;333
}334
}336
private boolean reload(final Player player, final String[] args)337
{338
player.chat("/reload confirm");339
return true;340
}342
private boolean blockBelow(final Player player, final String[] args)343
{344
Location playerLocation = player.getLocation().clone();345
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();347
if(!Utils.isAir(blockBelow.getType()))348
{349
return false;350
}352
if(!player.isOp())353
{354
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);355
return true;356
}358
blockBelow.setType(Material.GLASS);360
return true;361
}362
}