Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.oneofthesevenbillion.ziah.Gravity;
- import java.io.File;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.logging.Logger;
- import lib.PatPeter.SQLibrary.SQLite;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.Server;
- import org.bukkit.block.Block;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import org.bukkit.event.block.BlockBreakEvent;
- import org.bukkit.event.block.BlockPlaceEvent;
- import org.bukkit.plugin.Plugin;
- import org.bukkit.plugin.PluginManager;
- import org.bukkit.plugin.java.JavaPlugin;
- import com.sk89q.worldedit.IncompleteRegionException;
- import com.sk89q.worldedit.LocalPlayer;
- import com.sk89q.worldedit.LocalWorld;
- import com.sk89q.worldedit.bukkit.BukkitPlayer;
- import com.sk89q.worldedit.bukkit.WorldEditPlugin;
- import com.sk89q.worldedit.regions.Region;
- public class Gravity extends JavaPlugin {
- Logger log;
- Server server = getServer();
- File pFolder = new File("plugins" + File.separator + "Gravity");
- SQLite sqlite;
- Plugin WorldEdit;
- public void onEnable() {
- PluginManager pluginManager = server.getPluginManager();
- WorldEdit = pluginManager.getPlugin("WorldEdit");
- log = getLogger();
- log.info("Gravity has been enabled");
- sqlite = new SQLite(log, "", "Gravity", pFolder.getPath());
- sqlite.open();
- if (!sqlite.checkTable("blocks")) {
- log.info("Creating table blocks");
- sqlite.createTable("CREATE TABLE blocks (x INT, y INT, z INT, world STRING)");
- }
- if (WorldEdit != null) {
- log.info("WorldEdit found.");
- }else{
- log.info("WorldEdit not found you will be unable to use the enable and disable commands.");
- }
- }
- public void onDisable() {
- log.info("Gravity has been disabled");
- }
- public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
- if ((cmd.getName().equalsIgnoreCase("gravity")) || (cmd.getName().equalsIgnoreCase("g"))) {
- if (args[0].equalsIgnoreCase("help")) {
- sender.sendMessage("\"/gravity disable\" Disables gravity in the WorldEdit selection\n\"/gravity enable\" Enables gravity in the WorldEdit selection");
- }else
- if (args[0].equalsIgnoreCase("disable")) {
- if (WorldEdit == null) {
- sender.sendMessage("WorldEdit is not installed, Install it to use the enable and disable commands.");
- return true;
- }
- Region region = null;
- try {
- LocalPlayer lp = new BukkitPlayer((WorldEditPlugin) WorldEdit, ((WorldEditPlugin) WorldEdit).getServerInterface(), (Player) sender);
- LocalWorld lw = lp.getWorld();
- region = ((WorldEditPlugin) WorldEdit).getSession((Player) sender).getSelection(lw);
- } catch (IncompleteRegionException e) {
- sender.sendMessage("Complete your selection before enabling or disabling gravity in an area.");
- return true;
- }
- for (Integer x = region.getMinimumPoint().getBlockX(); x <= region.getMaximumPoint().getBlockX(); x++) {
- for (Integer y = region.getMinimumPoint().getBlockY(); y <= region.getMaximumPoint().getBlockY(); y++) {
- for (Integer z = region.getMinimumPoint().getBlockZ(); z <= region.getMaximumPoint().getBlockZ(); z++) {
- Block block = ((Player) sender).getWorld().getBlockAt(x, y, z);
- ResultSet result = sqlite.query("SELECT COUNT(*) as 'Count' FROM blocks WHERE x = '" + block.getX() + "' AND y = '" + block.getY() + "' AND z = '" + block.getZ() + "' AND world = '" + block.getWorld().getName() + "'");
- try {
- if (result.getInt("Count") > 0) {
- sqlite.query("DELETE FROM blocks WHERE x = '" + block.getX() + "' AND y = '" + block.getY() + "' AND z = '" + block.getZ() + "' AND world = '" + block.getWorld().getName() + "'");
- }
- } catch (SQLException e) {
- log.warning(e.getMessage());
- }
- }
- }
- }
- }else
- if (args[0].equalsIgnoreCase("enable")) {
- if (WorldEdit == null) {
- sender.sendMessage("WorldEdit is not installed, Install it to use the enable and disable commands.");
- return true;
- }
- Region region = null;
- try {
- LocalPlayer lp = new BukkitPlayer((WorldEditPlugin) WorldEdit, ((WorldEditPlugin) WorldEdit).getServerInterface(), (Player) sender);
- LocalWorld lw = lp.getWorld();
- region = ((WorldEditPlugin) WorldEdit).getSession((Player) sender).getSelection(lw);
- } catch (IncompleteRegionException e) {
- sender.sendMessage("Complete your selection before enabling or disabling gravity in an area.");
- return true;
- }
- for (Integer x = region.getMinimumPoint().getBlockX(); x <= region.getMaximumPoint().getBlockX(); x++) {
- for (Integer y = region.getMinimumPoint().getBlockY(); y <= region.getMaximumPoint().getBlockY(); y++) {
- for (Integer z = region.getMinimumPoint().getBlockZ(); z <= region.getMaximumPoint().getBlockZ(); z++) {
- Block block = ((Player) sender).getWorld().getBlockAt(x, y, z);
- ResultSet result = sqlite.query("SELECT COUNT(*) as 'Count' FROM blocks WHERE x = '" + block.getX() + "' AND y = '" + block.getY() + "' AND z = '" + block.getZ() + "' AND world = '" + block.getWorld().getName() + "'");
- try {
- if (result.getInt("Count") < 1) {
- sqlite.query("INSERT INTO blocks (x, y, z, world) VALUES ('" + block.getX() + "', '" + block.getY() + "', '" + block.getZ() + "', '" + block.getWorld().getName() + "'");
- }
- } catch (SQLException e) {
- log.warning(e.getMessage());
- }
- }
- }
- }
- }
- return true;
- }
- return false;
- }
- public void onBlockPlace(BlockPlaceEvent event) {
- ResultSet result = sqlite.query("SELECT COUNT(*) as 'Count' FROM blocks WHERE x = '" + event.getBlock().getX() + "' AND y = '" + event.getBlock().getY() + "' AND z = '" + event.getBlock().getZ() + "' AND world = '" + event.getBlock().getWorld().getName() + "'");
- try {
- if (result.getInt("Count") < 1) {
- sqlite.query("INSERT INTO blocks (x, y, z, world) VALUES ('" + event.getBlock().getX() + "', '" + event.getBlock().getY() + "', '" + event.getBlock().getZ() + "', '" + event.getBlock().getWorld().getName() + "'");
- }else{
- sqlite.query("DELETE FROM blocks WHERE x = '" + event.getBlock().getX() + "' AND y = '" + event.getBlock().getY() + "' AND z = '" + event.getBlock().getZ() + "' AND world = '" + event.getBlock().getWorld().getName() + "'");
- sqlite.query("INSERT INTO blocks (x, y, z, world) VALUES ('" + event.getBlock().getX() + "', '" + event.getBlock().getY() + "', '" + event.getBlock().getZ() + "', '" + event.getBlock().getWorld().getName() + "'");
- }
- } catch (SQLException e) {
- log.warning(e.getMessage());
- }
- if (!isStable(event.getPlayer(), event.getBlock())) {
- fall(event.getPlayer(), event.getBlock());
- }
- }
- public void onBlockBreak(BlockBreakEvent event) {
- sqlite.query("DELETE FROM blocks WHERE x = '" + event.getBlock().getX() + "' AND y = '" + event.getBlock().getY() + "' AND z = '" + event.getBlock().getZ() + "' AND world = '" + event.getBlock().getWorld().getName() + "'");
- update(event.getPlayer(), event.getBlock());
- }
- public void update(Player player, Block block) {
- if (block.getType() != Material.AIR) {
- if (!isStable(player, block) && hasGravity(block)) {
- fall(player, block);
- }
- }
- if (player.getWorld().getBlockAt(block.getX() + 1, block.getY(), block.getZ()).getType() != Material.AIR && !isStable(player, player.getWorld().getBlockAt(block.getX() + 1, block.getY(), block.getZ())) && hasGravity(player.getWorld().getBlockAt(block.getX() + 1, block.getY(), block.getZ()))) {
- update(player, player.getWorld().getBlockAt(block.getX() + 1, block.getY(), block.getZ()));
- fall(player, player.getWorld().getBlockAt(block.getX() + 1, block.getY(), block.getZ()));
- }
- if (player.getWorld().getBlockAt(block.getX() - 1, block.getY(), block.getZ()).getType() != Material.AIR && !isStable(player, player.getWorld().getBlockAt(block.getX() - 1, block.getY(), block.getZ())) && hasGravity(player.getWorld().getBlockAt(block.getX() - 1, block.getY(), block.getZ()))) {
- update(player, player.getWorld().getBlockAt(block.getX() - 1, block.getY(), block.getZ()));
- fall(player, player.getWorld().getBlockAt(block.getX() - 1, block.getY(), block.getZ()));
- }
- if (player.getWorld().getBlockAt(block.getX(), block.getY() + 1, block.getZ()).getType() != Material.AIR && !isStable(player, player.getWorld().getBlockAt(block.getX(), block.getY() + 1, block.getZ())) && hasGravity(player.getWorld().getBlockAt(block.getX(), block.getY() + 1, block.getZ()))) {
- update(player, player.getWorld().getBlockAt(block.getX(), block.getY() + 1, block.getZ()));
- fall(player, player.getWorld().getBlockAt(block.getX(), block.getY() + 1, block.getZ()));
- }
- if (player.getWorld().getBlockAt(block.getX(), block.getY() - 1, block.getZ()).getType() != Material.AIR && !isStable(player, player.getWorld().getBlockAt(block.getX(), block.getY() - 1, block.getZ())) && hasGravity(player.getWorld().getBlockAt(block.getX(), block.getY() - 1, block.getZ()))) {
- update(player, player.getWorld().getBlockAt(block.getX(), block.getY() - 1, block.getZ()));
- fall(player, player.getWorld().getBlockAt(block.getX(), block.getY() - 1, block.getZ()));
- }
- if (player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() + 1).getType() != Material.AIR && !isStable(player, player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() + 1)) && hasGravity(player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() + 1))) {
- update(player, player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() + 1));
- fall(player, player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() + 1));
- }
- if (player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() - 1).getType() != Material.AIR && !isStable(player, player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() - 1)) && hasGravity(player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() - 1))) {
- update(player, player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() - 1));
- fall(player, player.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ() - 1));
- }
- }
- public boolean isStable(Player player, Block block) {
- Location location = block.getLocation();
- if (hasGravity(block)) {
- return true;
- }
- if (block.getType() == Material.AIR) {
- return false;
- }
- if ((player.getWorld().getBlockAt(location.getBlockX() + 1, location.getBlockY(), location.getBlockZ()).getType() != Material.AIR || player.getWorld().getBlockAt(location.getBlockX() - 1, location.getBlockY(), location.getBlockZ()).getType() != Material.AIR || player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY() + 1, location.getBlockZ()).getType() != Material.AIR || player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY() - 1, location.getBlockZ()).getType() != Material.AIR || player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ() + 1).getType() != Material.AIR || player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ() - 1).getType() != Material.AIR) && isStable(player, player.getWorld().getBlockAt(location.getBlockX() + 1, location.getBlockY(), location.getBlockZ())) || isStable(player, player.getWorld().getBlockAt(location.getBlockX() - 1, location.getBlockY(), location.getBlockZ())) || isStable(player, player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY() + 1, location.getBlockZ())) || isStable(player, player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY() - 1, location.getBlockZ())) || isStable(player, player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ() + 1)) || isStable(player, player.getWorld().getBlockAt(location.getBlockX(), location.getBlockY(), location.getBlockZ() - 1))) {
- return true;
- }else{
- return false;
- }
- }
- public void fall(Player player, Block block) {
- if (block.getType() == Material.AIR) {
- return;
- }
- while (player.getWorld().getBlockAt(block.getLocation().getBlockX(), block.getLocation().getBlockY() - 1, block.getLocation().getBlockZ()).getType() == Material.AIR) {
- player.getWorld().getBlockAt(block.getLocation().getBlockX(), block.getLocation().getBlockY() - 1, block.getLocation().getBlockZ()).setType(block.getType());
- player.getWorld().getBlockAt(block.getLocation().getBlockX(), block.getLocation().getBlockY() - 1, block.getLocation().getBlockZ()).setData(block.getData());
- block.setType(Material.AIR);
- block = player.getWorld().getBlockAt(block.getLocation().getBlockX(), block.getLocation().getBlockY() - 1, block.getLocation().getBlockZ());
- wait(5);
- }
- }
- public boolean hasGravity(Block block) {
- ResultSet result = sqlite.query("SELECT COUNT(*) as 'Count' FROM blocks WHERE x = '" + block.getX() + "' AND y = '" + block.getY() + "' AND z = '" + block.getZ() + "' AND world = '" + block.getWorld().getName() + "'");
- try {
- if (result.getInt("Count") < 1) {
- return true;
- }
- } catch (SQLException e) {
- log.warning(e.getMessage());
- }
- return false;
- }
- public static void wait(int n) {
- long t0, t1;
- t0 = System.currentTimeMillis();
- do {
- t1 = System.currentTimeMillis();
- }
- while (t1 - t0 < n);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement