A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: d49aff4023ec6b836214a05cd1bca25e5e63be6c (9337 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;29
import poppy.modules.PlayerMountModule;32
public class Main extends JavaPlugin33
{34
private Plugin plugin;35
private Config config;36
private PluginManager pluginManager;38
private CommonModule commonModule;39
private DoubleDoorModule doubleDoorModule;40
private ChairModule chairModule;41
private AutoWorkbenchModule autoWorkbenchModule;42
private LeavesDecayModule leavesDecayModule;43
private CauldronModule cauldronModule;44
private SpawnerModule spawnerModule;45
private HopperSorterModule hopperSorterModule;46
private AutoPlacerModule autoPlacerModule;47
private AutoBreakerModule autoBreakerModule;48
private PlayerMountModule playerMountModule;50
@Override51
public void onEnable()52
{53
plugin = this;54
config = new Config("config/poppy.yml");56
pluginManager = Bukkit.getPluginManager();58
commonModule = new CommonModule();59
pluginManager.registerEvents(commonModule, this);61
doubleDoorModule = new DoubleDoorModule();62
pluginManager.registerEvents(doubleDoorModule, this);64
chairModule = new ChairModule();65
pluginManager.registerEvents(chairModule, this);67
autoWorkbenchModule = new AutoWorkbenchModule();68
pluginManager.registerEvents(autoWorkbenchModule, this);70
leavesDecayModule = new LeavesDecayModule(this);71
pluginManager.registerEvents(leavesDecayModule, this);73
cauldronModule = new CauldronModule(this);74
pluginManager.registerEvents(cauldronModule, this);76
spawnerModule = new SpawnerModule();77
pluginManager.registerEvents(spawnerModule, this);79
hopperSorterModule = new HopperSorterModule();80
pluginManager.registerEvents(hopperSorterModule, this);82
autoPlacerModule = new AutoPlacerModule(this);83
pluginManager.registerEvents(autoPlacerModule, this);85
autoBreakerModule = new AutoBreakerModule(this);86
pluginManager.registerEvents(autoBreakerModule, this);88
playerMountModule = new PlayerMountModule();89
pluginManager.registerEvents(playerMountModule, this);90
}92
@Override93
public void onDisable()94
{95
chairModule.onDisable();96
}98
@Override99
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)100
{101
if(sender instanceof Player)102
{103
Player player = (Player) sender;105
switch(label)106
{107
case "head":108
return setItemAsHead(player, args);109
case "skull":110
return getSkullForName(player, args);111
case "invsee":112
return openInventoryForPlayer(player, args);113
case "info":114
return openInfoBook(player, args);115
case "spawn":116
return teleportToSpawn(player, args);117
case "home":118
return teleportToHome(player, args);119
case "warp":120
return teleportToWarppoint(player, args);121
case "sethome":122
return setHome(player, args);123
case "setwarp":124
return setWarppoint(player, args);125
case "slime":126
return isSlimeChunk(player, args);127
case "r":128
return doReload(player, args);129
case "up":130
return placeBlockBelow(player, args);131
default:132
return false;133
}134
}136
return true;137
}139
private boolean setItemAsHead(final Player player, final String[] args)140
{141
final ItemStack item = player.getInventory().getItemInMainHand();142
final ItemStack head = player.getInventory().getHelmet();144
if(head != null && head.getType().equals(Material.SADDLE))145
{146
player.eject();147
}149
player.getInventory().setHelmet(item);150
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));152
if(player.getGameMode() == GameMode.SURVIVAL)153
{154
if(head != null)155
{156
player.getInventory().addItem(head);157
}158
}160
return true;161
}163
@SuppressWarnings("deprecation")164
private boolean getSkullForName(final Player player, final String[] args)165
{166
if(!player.isOp())167
{168
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);169
return true;170
}172
if(args.length != 1)173
{174
return false;175
}177
final String name = args[0];178
final ItemStack skull = new ItemStack(Material.PLAYER_HEAD);179
final SkullMeta meta = (SkullMeta) skull.getItemMeta();180
meta.setOwner(name);181
skull.setItemMeta(meta);183
player.getInventory().addItem(skull);185
return true;186
}188
private boolean openInventoryForPlayer(final Player player, final String[] args)189
{190
if(args.length == 0)191
{192
return false;193
}195
if(!player.isOp())196
{197
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);198
return true;199
}201
final Player target = Bukkit.getPlayer(args[0]);203
if(target == null)204
{205
player.sendMessage(ChatColor.RED + "Player not found!");206
return true;207
}209
player.openInventory(target.getInventory());211
return true;212
}214
private boolean openInfoBook(final Player player, final String[] args)215
{216
final ItemStack book = new ItemStack(Material.WRITTEN_BOOK);217
final BookMeta meta = (BookMeta) book.getItemMeta();218
meta.setTitle("Info");219
meta.setAuthor("Server");220
meta.setPages(config.getInfoPages());221
book.setItemMeta(meta);223
player.openBook(book);225
return true;226
}228
private boolean teleportToSpawn(final Player player, final String[] args)229
{230
final Location location = Bukkit.getWorld("world").getSpawnLocation();232
if(Utils.travelTo(plugin, player, location))233
{234
player.sendMessage(ChatColor.GRAY + "You've been teleported to spawn.");235
}237
return true;238
}240
private boolean teleportToHome(final Player player, final String[] args)241
{242
final Location location = config.getHome(player);244
if(location == null)245
{246
player.sendMessage(ChatColor.RED + "You've don't have a home point.");247
return true;248
}250
if(Utils.travelTo(plugin, player, location))251
{252
player.sendMessage(ChatColor.GRAY + "You've been teleported to your home.");253
}255
return true;256
}258
private boolean teleportToWarppoint(final Player player, final String[] args)259
{260
if(args.length != 1)261
{262
return false;263
}265
final String name = args[0].toLowerCase();266
final Location location = config.getWarp(name);268
if(location == null)269
{270
player.sendMessage(ChatColor.RED + "Warppoint " + name + " doesn't exist!");271
return true;272
}274
if(Utils.travelTo(plugin, player, location))275
{276
player.sendMessage(ChatColor.GRAY + "You've been teleported to warppoint " + name + ".");277
}279
return true;280
}282
private boolean setHome(final Player player, final String[] args)283
{284
try285
{286
config.setHome(player);287
player.sendMessage(ChatColor.YELLOW + "Home point set.");288
}289
catch(Exception ex)290
{291
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);292
}294
return true;295
}297
private boolean setWarppoint(final Player player, final String[] args)298
{299
if(args.length != 1)300
{301
return false;302
}304
final String name = args[0].toLowerCase();306
if(!Utils.payFee(player, Material.COMPASS, 1))307
{308
player.sendMessage(ChatColor.RED + "The fee for creating a warppoint is 1 compass!");309
return true;310
}312
try313
{314
if(!config.setWarp(name, player.getLocation()))315
{316
player.sendMessage(ChatColor.RED + "Warppoint " + name + " already exists!");317
return true;318
}320
player.sendMessage(ChatColor.YELLOW + "Warppoint " + name + " set.");321
}322
catch(Exception ex)323
{324
player.sendMessage(Constants.Messages.FAILED_TO_SAVE_CONFIG_FILE);325
}327
return true;328
}330
private boolean isSlimeChunk(final Player player, final String[] args)331
{332
boolean isSlimeChunk = player.getLocation().getChunk().isSlimeChunk();334
if(isSlimeChunk)335
{336
player.sendMessage(ChatColor.YELLOW + "This is a slime chunk!");337
return true;338
}339
else340
{341
player.sendMessage(ChatColor.RED + "This is not a slime chunk!");342
return true;343
}344
}346
private boolean doReload(final Player player, final String[] args)347
{348
player.chat("/reload confirm");349
return true;350
}352
private boolean placeBlockBelow(final Player player, final String[] args)353
{354
Location playerLocation = player.getLocation().clone();355
Block blockBelow = playerLocation.add(0, -1, 0).getBlock();357
if(!Utils.isAir(blockBelow.getType()))358
{359
return false;360
}362
if(!player.isOp())363
{364
player.sendMessage(Constants.Messages.NOT_ENOUGH_PERMISSION);365
return true;366
}368
blockBelow.setType(Material.GLASS);370
return true;371
}372
}