Package com.Android.magiccarpet

Source Code of com.Android.magiccarpet.MagicCarpet

package com.Android.magiccarpet;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.logging.Logger;
import java.util.Properties;

import org.bukkit.command.*;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.config.Configuration;

import com.nijikokun.bukkit.Permissions.Permissions;
import com.nijiko.permissions.PermissionHandler;


/**
* Magic Carpet 1.5
* Copyright (C) 2011 Android <spparr@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

public class MagicCarpet extends JavaPlugin {
  private final MagicPlayerListener playerListener = new MagicPlayerListener(this);
  private final MagicBlockListener blockListener = new MagicBlockListener(playerListener);
  public PermissionHandler permissions = null;
    private Configuration config;
    private String fileName = "";
  private static Logger log = Logger.getLogger("Minecraft");
  private ArrayList<String> owners = new ArrayList<String>();
  private ArrayList<String> bums = new ArrayList<String>();
  private ArrayList<String> lights = new ArrayList<String>();
  private boolean ignore = false;
  private boolean all_can_fly = true;
  private boolean crouchDef = true;
  private boolean glowCenter = true;
  private int carpSize = 5;

    public void onEnable() {
        PluginDescriptionFile pdfFile = this.getDescription();
        String name = pdfFile.getName();
        config = getConfiguration();
       
        loadConfig();
        if (!getDataFolder().exists()) getDataFolder().mkdirs();
        fileName = getDataFolder().getPath() + File.separator + "magiccarpet.properties";
       
        setupPermissions();
       
        log.info( "[" + name + "] " + name + " version " + pdfFile.getVersion() + " is enabled!" );
        log.info( "[" + name + "] Take yourself wonder by wonder, using /magiccarpet or /mc. " );
        if(permissions != null) log.info("[" + name + "] Using Permissions.");
        else if(!all_can_fly) log.info("[" + name + "] Anyone can use the Magic Carpet.");
        else if(ignore) log.info("[" + name + "] Ignore: " + bums.toString());
        else log.info("[" + name + "] Restricted to: " + owners.toString());
        registerEvents();
    }
   
    public void loadConfig() {
        config.load();
        all_can_fly = config.getBoolean("Use Properties Permissions", false);
        crouchDef = config.getBoolean("Crouch Default", true);
        glowCenter = config.getBoolean("Put glowstone for light in center", false);
        carpSize = config.getInt("Default size for carpet", 5);
        saveConfig();
    }
   
    public void saveConfig() {
        config.setProperty("Use Properties Permissions", all_can_fly);
        config.setProperty("Crouch Default", crouchDef);
        config.setProperty("Put glowstone for light in center", glowCenter);
        config.setProperty("Default size for carpet", carpSize);
        playerListener.crouchDef = crouchDef;
        config.save();
    }
   
    public void onDisable() {
      Hashtable<String, Carpet> carpets = playerListener.getCarpets();
      Enumeration<String> e = carpets.keys();
    //iterate through Hashtable keys Enumeration
    while(e.hasMoreElements()) {
      String name = e.nextElement();
      Carpet c = carpets.get(name);
      c.removeCarpet();
    }
    carpets.clear();
        System.out.println("Magic Carpet disabled. Thanks for trying the plugin!");
    }
   
    private void registerEvents(){
      getServer().getPluginManager().registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
        getServer().getPluginManager().registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
        getServer().getPluginManager().registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Normal, this);
        getServer().getPluginManager().registerEvent(Event.Type.PLAYER_TELEPORT, playerListener, Priority.Normal, this);
        getServer().getPluginManager().registerEvent(Event.Type.PLAYER_TOGGLE_SNEAK, playerListener, Priority.Normal, this);
        getServer().getPluginManager().registerEvent(Event.Type.BLOCK_BREAK,blockListener, Priority.Normal, this);
    }
   
  public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
        String[] split = args;
        String commandName = command.getName().toLowerCase();
        int c = 5;
        Hashtable<String, Carpet> carpets = playerListener.getCarpets();
        Player player;
        if (sender instanceof Player){
          player = (Player)sender;
        }else{
          return true;
        }
        Carpet carpet = (Carpet)carpets.get(player.getName());

        if (commandName.equals("mc") || commandName.equals("magiccarpet")) {
          if (canFly(player)){
            if (carpet == null)
            {
              if (split.length < 1){
                player.sendMessage("A glass carpet appears below your feet.");
                Carpet newCarpet = new Carpet(glowCenter);
                newCarpet.currentBlock = player.getLocation().getBlock();
                if (carpSize == 3 || carpSize == 5 || carpSize == 7)
                  newCarpet.setSize(carpSize);
                else
                  newCarpet.setSize(5);
                newCarpet.setLights(lights.contains(player.getName()));
                carpets.put(player.getName(), newCarpet);
                playerListener.setCarpets(carpets);
              }else{
                try {
                  c = Integer.valueOf(split[0]);
                } catch(NumberFormatException e) {
                  player.sendMessage("Correct usage is: /magiccarpet (size) or /mc (size). The size is optional, and can only be 3, 5, or 7!");
                  return false;
                }
             
                if (c != 3 && c != 5 && c != 7){
                  player.sendMessage("The size can only be 3, 5, or 7. Please enter a proper number");
                  return false;
                }
                player.sendMessage("A glass carpet appears below your feet.");
                Carpet newCarpet = new Carpet(glowCenter);
                newCarpet.currentBlock = player.getLocation().getBlock();
                newCarpet.setSize(c);
                newCarpet.setLights(lights.contains(player.getName()));
                carpets.put(player.getName(), newCarpet);
                playerListener.setCarpets(carpets);
              }
           
            }
            if (carpet != null)
            {
              if(split.length == 1){
                try {
                  c = Integer.valueOf(split[0]);
                } catch(NumberFormatException e) {
                  player.sendMessage("Correct usage is: /magiccarpet (size) or /mc (size). The size is optional, and can only be 3, 5, or 7!");
                  return false;
                }
             
                if (c != 3 && c != 5 && c != 7){
                  player.sendMessage("The size can only be 3, 5, or 7. Please enter a proper number");
                  return false;
                }
                if(c != carpet.size){
                  player.sendMessage("The carpet seems to react to your words, and suddenly changes shape!");
                  carpet.changeCarpet(c);
                }else{
                  player.sendMessage("Poof! The magic carpet disappears.");
                      carpets.remove(player.getName());
                      carpet.removeCarpet();
                      playerListener.setCarpets(carpets);
                }
              }else{
                player.sendMessage("Poof! The magic carpet disappears.");
                  carpets.remove(player.getName());
                  carpet.removeCarpet();
                  playerListener.setCarpets(carpets);
              }
           
            }
            return true;
          }else{
            player.sendMessage("You shout your command, but it falls on deaf ears. Nothing happens.");
            return true;
          }
        }else{
          if (commandName.equals("ml")) {
            if(canLight(player)){
              if(lights.contains(player.getName())){
                lights.remove(player.getName());
                player.sendMessage("The luminous stones in the carpet slowly fade away.");
                if(carpet != null)
                  carpet.setLights(false);;
              }else{
                lights.add(player.getName());
                player.sendMessage("A bright flash shines as glowing stones appear in the carpet.");
                if(carpet != null)
                  carpet.setLights(true);
              }
            }else{
              player.sendMessage("You do not have permission to use Magic Light!");
            }
            return true;
          }
          else
          {
            if (commandName.equals("carpetswitch") || commandName.equals("mcs")) {
              if(canFly(player)){
                boolean crouch = playerListener.CarpetSwitch(player.getName());
                if(!crouchDef){
                  if(crouch){
                    player.sendMessage("You now crouch to descend");
                  }else{
                    player.sendMessage("You now look down to descend");
                  }
                }else{
                  if(!crouch){
                    player.sendMessage("You now crouch to descend");
                  }else{
                    player.sendMessage("You now look down to descend");
                  }
                }
              }
                return true;
              }else{
                return false;
              }
          }
        }
    }
public boolean canFly(Player player) {
    if(!all_can_fly) return true;
    if(permissions != null)
        return permissions.has(player, "magiccarpet.mc");
    else if(ignore)
        return !bums.contains( player.getName().toLowerCase());
    else
        return owners.contains( player.getName().toLowerCase());
    }

private boolean canLight(Player player) {
    if(permissions != null)
        return permissions.has(player, "magiccarpet.ml");
    else
        return true;
    }

private static String config_comment = "Magic Carpet permissions file";
   
    public void saveDefaultSettings(boolean trust){
      Properties props = new Properties();
      if(trust)
        props.setProperty("can-fly","trusted_users_here,maybe_here_too");
      else
        props.setProperty("cannot-fly","untrusted_users_here,maybe_here_too");
      try{
        OutputStream propOut = new FileOutputStream(new File(fileName));
        props.store(propOut, config_comment);
       
      } catch (IOException ioe) {
        System.out.print(ioe.getMessage());
      }
    }
   
    public void loadSettings(){
      Properties props = new Properties();
      try {
        props.load(new FileInputStream(fileName));
        if(all_can_fly){
          if (props.containsKey("can-fly")){
            String dreamers = props.getProperty("can-fly","");
            ignore = false;
            if(dreamers.length() > 0){
              String[] fliers = dreamers.toLowerCase().split(",");
              if (fliers.length > 0)
              {
                owners = new ArrayList<String>(Arrays.asList(fliers));
              }else{
                this.saveDefaultSettings(true);
              }
            }else{
              this.saveDefaultSettings(true);
            }
          }else{
            if(props.containsKey("cannot-fly")){
              String paupers = props.getProperty("cannot-fly","");
              ignore = true;
              if(paupers.length() > 0){
                String[] penniless = paupers.toLowerCase().split(",");
                if (penniless.length > 0)
                {
                  bums = new ArrayList<String>(Arrays.asList(penniless));
                }else{
                  this.saveDefaultSettings(false);
                }
              }else{
                this.saveDefaultSettings(false);
              }
            }else{
                this.saveDefaultSettings(true);
              }
          }
        }else{
          this.saveDefaultSettings(true);
        }
      } catch (IOException ioe) {
        this.saveDefaultSettings(true);
      }
    }
   
   
    public void setupPermissions() {
      Plugin test = this.getServer().getPluginManager().getPlugin("Permissions");


      if(this.permissions == null) {
           if(test != null) {
             this.permissions = ((Permissions)test).getHandler();
             all_can_fly = true;
           } else {
             loadSettings();
           }
      }
    }


}
TOP

Related Classes of com.Android.magiccarpet.MagicCarpet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.