My top secret project.

This commit is contained in:
nossr50 2011-02-04 13:57:42 -08:00
parent 4ea776da45
commit 980d8fb374
7 changed files with 752 additions and 0 deletions

View File

@ -0,0 +1,48 @@
package com.bukkit.nossr50.mcMMO;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockListener;
public class mcBlockListener extends BlockListener {
private final mcMMO plugin;
public mcBlockListener(final mcMMO plugin) {
this.plugin = plugin;
}
//put all Block related code here
public void onBlockDamage(BlockDamageEvent event) {
//STARTED(0), DIGGING(1), BROKEN(3), STOPPED(2);
Player player = event.getPlayer();
Block block = event.getBlock();
int dmg = event.getDamageLevel().getLevel();
if(dmg == 3){
mcUsers.getProfile(player).addgather(1);
//GOLD ORE = 14
//DIAMOND ORE = 56
//REDSTONE = 73 && 74
if(block.getTypeId() == 1){
int t = player.getItemInHand().getTypeId();
int q;
//If stone tools
if(t == 272 || t == 273 || t == 274 || t == 275){
q = 3;
//If iron tools
} else if (t == 256 || t == 257 || t == 258 || t == 267){
q = 2;
//If wooden tools
} else if (t == 268 || t == 269 || t == 270 || t == 271){
q = 4;
//If Diamond tools
} else if (t == 276 || t == 277 || t == 278 || t == 279){
q = 1;
} else {
q = 5;
}
}
}
}
}

View File

@ -0,0 +1,35 @@
package com.bukkit.nossr50.mcMMO;
import java.util.ArrayList;
public class mcConfig {
private static volatile mcConfig instance;
static ArrayList<String> adminChatList = new ArrayList<String>();
static ArrayList<String> partyChatList = new ArrayList<String>();
public boolean isAdminToggled(String playerName) {return adminChatList.contains(playerName);}
public boolean isPartyToggled(String playerName) {return partyChatList.contains(playerName);}
public void removePartyToggled(String playerName) {partyChatList.remove(partyChatList.indexOf(playerName));}
public void removeAdminToggled(String playerName) {adminChatList.remove(adminChatList.indexOf(playerName));}
public void addPartyToggled(String playerName) {partyChatList.add(playerName);}
public void addAdminToggled(String playerName) {adminChatList.add(playerName);}
public static mcConfig getInstance() {
if (instance == null) {
instance = new mcConfig();
}
return instance;
}
public void toggleAdminChat(String playerName){
if(isAdminToggled(playerName)){
removeAdminToggled(playerName);
} else {
addAdminToggled(playerName);
}
}
public void togglePartyChat(String playerName){
if(isPartyToggled(playerName)){
removePartyToggled(playerName);
} else {
addPartyToggled(playerName);
}
}
}

View File

@ -0,0 +1,65 @@
package com.bukkit.nossr50.mcMMO;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityListener;
import org.bukkit.inventory.ItemStack;
public class mcEntityListener extends EntityListener {
private final mcMMO plugin;
public mcEntityListener(final mcMMO plugin) {
this.plugin = plugin;
}
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
Entity x = event.getEntity(); //Defender
Entity y = event.getDamager(); //Attacker
//If attacker is player...
if(y instanceof Player){
Player attacker = (Player)y;
//If defender is player
if(x instanceof Player){
Player defender = (Player)x;
if(mcUsers.getProfile(defender).getParty().equals(mcUsers.getProfile(attacker).getParty())){
event.setCancelled(true);
}
}
}
}
public void onEntityDamage(EntityDamageEvent event) {
//Thanks to TimberJaw for sharing his source code!
Entity x = event.getEntity();
if(x instanceof Player){
Player player = (Player)x;
if((player.getHealth() - event.getDamage()) <= 0){
Location deathLoc = player.getLocation();
ItemStack[] items = player.getInventory().getContents();
for(int i = 0; i < items.length; i++)
{
ItemStack is = items[i];
if(is != null && is.getAmount() > 0)
{
player.getWorld().dropItemNaturally(deathLoc, is);
}
}
player.setHealth(20);
player.teleportTo(mcUsers.getProfile(player).getMySpawn(player));
for(Player derp : plugin.getServer().getOnlinePlayers()){
derp.sendMessage(ChatColor.GRAY+player.getName() + " has died.");
}
}
}
}
public boolean isPlayer(Entity entity){
if (entity instanceof Player) {
return true;
} else{
return false;
}
}
}

View File

@ -0,0 +1,46 @@
package com.bukkit.nossr50.mcMMO;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import org.bukkit.event.player.*;
import org.bukkit.Server;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.entity.Player;
public class mcMMO extends JavaPlugin {
private final mcPlayerListener playerListener = new mcPlayerListener(this);
private final mcBlockListener blockListener = new mcBlockListener(this);
private final mcEntityListener entityListener = new mcEntityListener(this);
private final HashMap<Player, Boolean> debugees = new HashMap<Player, Boolean>();
private final String name = "mcMMO";
public mcMMO(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) {
super(pluginLoader, instance, desc, folder, plugin, cLoader);
}
public void onEnable() {
mcUsers.getInstance().loadUsers();
PluginManager pm = getServer().getPluginManager();
pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_COMMAND, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_ENTITY, entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
//Displays a message when plugin is loaded
PluginDescriptionFile pdfFile = this.getDescription();
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
}
public void onDisable() {
System.out.println("mcMMO disabled.");
}
}

View File

@ -0,0 +1,181 @@
package com.bukkit.nossr50.mcMMO;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerListener;
public class mcPlayerListener extends PlayerListener {
public Location spawn = null;
private static mcMMO plugin;
public mcPlayerListener(mcMMO instance) {
plugin = instance;
}
public void onPlayerJoin(PlayerEvent event) {
Player player = event.getPlayer();
mcUsers.addUser(player);
player.sendMessage(ChatColor.GREEN+"Welcome to /v/ - Minecraft");
player.sendMessage(ChatColor.GREEN+"Steam Group: vminecraft");
player.sendMessage(ChatColor.AQUA + "This server is running mcMMO type /stats for your information");
player.sendMessage(ChatColor.GREEN + "Use "+ChatColor.YELLOW+"/party "+ChatColor.WHITE+"to create/join parties.");
player.sendMessage(ChatColor.GREEN + "Use "+ChatColor.YELLOW+"/p"+ChatColor.WHITE+" to toggle party chat");
player.sendMessage("Set your spawn with "+ChatColor.YELLOW+"/setmyspawn"+ChatColor.WHITE+", Travel to it with /myspawn");
player.sendMessage(ChatColor.RED+"WARNING: "+ChatColor.DARK_GRAY+ "Using /myspawn will clear your inventory!");
}
public void onPlayerCommand(PlayerChatEvent event) {
Player player = event.getPlayer();
String[] split = event.getMessage().split(" ");
String playerName = player.getName();
//mcMMO command
if(split[0].equalsIgnoreCase("/whereis")){
if(!player.isOp())
return;
if(split.length == 1){
player.sendMessage("Usage is /whereis [player]");
return;
}
for(Player derp : plugin.getServer().getOnlinePlayers()){
if(derp.getName().toLowerCase().equals(split[2].toLowerCase())){
Location loc = derp.getLocation();
player.sendMessage("Player " + derp.getName() + " Coordinates");
player.sendMessage("X: " + String(loc.getX()));
player.sendMessage("Y: " + String(loc.getY()));
player.sendMessage("Z: " + String(loc.getZ()));
}
}
}
if(split[0].equalsIgnoreCase("/setmyspawn")){
double x = player.getLocation().getX();
double y = player.getLocation().getY();
double z = player.getLocation().getZ();
mcUsers.getProfile(player).setMySpawn(x, y, z);
player.sendMessage(ChatColor.DARK_AQUA + "Myspawn has been set to your current location.");
}
if(player.isOp() && split[0].equalsIgnoreCase("/setspawn")){
spawn = event.getPlayer().getLocation();
player.sendMessage("Spawn set to current location");
}
if(split[0].equalsIgnoreCase("/stats")){
event.setCancelled(true);
player.sendMessage(ChatColor.DARK_GREEN + "mcMMO stats");
player.sendMessage(ChatColor.DARK_GREEN + "Gathering Skill: " + mcUsers.getProfile(player).getgather());
player.sendMessage(ChatColor.GRAY + "Increases as you gather materials from the world");
player.sendMessage(ChatColor.GRAY + "Effect: Increases chance to gather more than one of a rare material");
}
//Party command
if(split[0].equalsIgnoreCase("/party")){
event.setCancelled(true);
if(split.length == 1){
player.sendMessage("Proper usage is /party <name> or 'q' to quit");
return;
}
if(split[1].equals("q") && mcUsers.getProfile(player).inParty()){
mcUsers.getProfile(player).removeParty();
informPartyMembersQuit(player);
return;
}
mcUsers.getProfile(player).setParty(split[1]);
player.sendMessage("Joined Party: " + split[1]);
informPartyMembers(player);
}
if(split[0].equalsIgnoreCase("/p")){
if(mcConfig.getInstance().isAdminToggled(player.getName()))
mcConfig.getInstance().toggleAdminChat(playerName);
mcConfig.getInstance().togglePartyChat(playerName);
if(mcConfig.getInstance().isPartyToggled(playerName)){
player.sendMessage(ChatColor.GREEN + "Party Chat Toggled On");
} else {
player.sendMessage(ChatColor.GREEN + "Party Chat Toggled " + ChatColor.RED + "Off");
}
}
if(split[0].equalsIgnoreCase("/a") && player.isOp()){
if(mcConfig.getInstance().isPartyToggled(player.getName()))
mcConfig.getInstance().togglePartyChat(playerName);
mcConfig.getInstance().toggleAdminChat(playerName);
if(mcConfig.getInstance().isAdminToggled(playerName)){
player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.GREEN + "On");
} else {
player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.RED + "Off");
}
}
if(split[0].equalsIgnoreCase("/myspawn")){
player.getInventory().clear();
player.setHealth(20);
player.teleportTo(mcUsers.getProfile(player).getMySpawn(player));
player.sendMessage("Inventory cleared & health restored");
}
if(split[0].equalsIgnoreCase("/spawn")){
if(spawn != null){
player.teleportTo(spawn);
player.sendMessage("Welcome to spawn, home of the dumbfucks");
return;
}
player.sendMessage("Spawn isn't configured. Have an OP set it with /setspawn");
}
}
private String String(double x) {
// TODO Auto-generated method stub
return null;
}
public void onPlayerChat(PlayerChatEvent event) {
Player player = event.getPlayer();
String[] split = event.getMessage().split(" ");
String x = ChatColor.GREEN + "(" + ChatColor.WHITE + player.getName() + ChatColor.GREEN + ") ";
String y = ChatColor.AQUA + "{" + ChatColor.WHITE + player.getName() + ChatColor.AQUA + "} ";
if(mcConfig.getInstance().isPartyToggled(player.getName())){
event.setCancelled(true);
for(Player herp : plugin.getServer().getOnlinePlayers()){
if(mcUsers.getProfile(herp).inParty()){
if(inSameParty(herp, player)){
herp.sendMessage(x+event.getMessage());
}
}
}
return;
}
if(player.isOp() && mcConfig.getInstance().isAdminToggled(player.getName())){
event.setCancelled(true);
for(Player herp : plugin.getServer().getOnlinePlayers()){
if(herp.isOp()){
herp.sendMessage(y+event.getMessage());
}
}
return;
}
if(player.isOp()){
event.setCancelled(true);
for(Player derp : plugin.getServer().getOnlinePlayers()){
String z = ChatColor.RED + "<" + ChatColor.WHITE + player.getName() + ChatColor.RED + "> "+ChatColor.WHITE;
derp.sendMessage(z+event.getMessage());
}
}
}
public static void informPartyMembers(Player player){
int x = 0;
for(Player p : plugin.getServer().getOnlinePlayers()){
if(inSameParty(player, p) && !p.getName().equals(player.getName())){
p.sendMessage(player.getName() + ChatColor.GREEN + " has joined your party");
x++;
}
}
}
public static void informPartyMembersQuit(Player player){
int x = 0;
for(Player p : plugin.getServer().getOnlinePlayers()){
if(inSameParty(player, p) && !p.getName().equals(player.getName())){
p.sendMessage(player.getName() + ChatColor.GREEN + " has left your party");
x++;
}
}
}
public static boolean inSameParty(Player playera, Player playerb){
if(mcUsers.getProfile(playera).getParty().equals(mcUsers.getProfile(playerb).getParty())){
return true;
} else {
return false;
}
}
}

View File

@ -0,0 +1,374 @@
package com.bukkit.nossr50.mcMMO;
import java.io.*;
import java.util.ArrayList;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.entity.*;
public class mcUsers {
private static volatile mcUsers instance;
protected static final Logger log = Logger.getLogger("Minecraft");
String location = "mcMMO.users";
public static PlayerList players = new PlayerList();
private Properties properties = new Properties();
//To load
public void load() throws IOException {
properties.load(new FileInputStream(location));
}
//To save
public void save() {
try {
properties.store(new FileOutputStream(location), null);
}catch(IOException ex) {
}
}
public void loadUsers(){
File theDir = new File(location);
if(!theDir.exists()){
//properties = new PropertiesFile(location);
FileWriter writer = null;
try {
writer = new FileWriter(location);
writer.write("#Storage place for user information\r\n");
writer.write("#username:nickname:suffix:tag:ignore,list,names:alias,commands,here\r\n");
} catch (Exception e) {
log.log(Level.SEVERE, "Exception while creating " + location, e);
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
log.log(Level.SEVERE, "Exception while closing writer for " + location, e);
}
}
} else {
//properties = new PropertiesFile(location);
try {
load();
} catch (IOException e) {
log.log(Level.SEVERE, "Exception while loading " + location, e);
}
}
}
//=====================================================================
//Function: addUser
//Input: Player player: The player to create a profile for
//Output: none
//Use: Loads the profile for the specified player
//=====================================================================
public static void addUser(Player player){
players.addPlayer(player);
}
//=====================================================================
//Function: removeUser
//Input: Player player: The player to stop following
//Output: none
//Use: Creates the player profile
//=====================================================================
public static void removeUser(Player player){
players.removePlayer(player);
}
//=====================================================================
//Function: getProfile
//Input: Player player: The player to find the profile for
//Output: PlayerList.PlayerProfile: The profile
//Use: Gets the player profile
//=====================================================================
public static PlayerList.PlayerProfile getProfile(Player player){
return players.findProfile(player);
}
public static mcUsers getInstance() {
if (instance == null) {
instance = new mcUsers();
}
return instance;
}
public static void getRow(){
}
}
class PlayerList
{
protected static final Logger log = Logger.getLogger("Minecraft");
ArrayList<PlayerProfile> players;
//=====================================================================
//Function: PlayerList
//Input: Player player: The player to create a profile object for
//Output: none
//Use: Initializes the ArrayList
//=====================================================================
public PlayerList() { players = new ArrayList<PlayerProfile>(); }
//=====================================================================
//Function: addPlayer
//Input: Player player: The player to add
//Output: None
//Use: Add a profile of the specified player
//=====================================================================
public void addPlayer(Player player)
{
players.add(new PlayerProfile(player));
}
//=====================================================================
//Function: removePlayer
//Input: Player player: The player to remove
//Output: None
//Use: Remove the profile of the specified player
//=====================================================================
public void removePlayer(Player player)
{
players.remove(findProfile(player));
}
//=====================================================================
//Function: findProfile
//Input: Player player: The player to find's profile
//Output: PlayerProfile: The profile of the specified player
//Use: Get the profile for the specified player
//=====================================================================
public PlayerProfile findProfile(Player player)
{
for(PlayerProfile ply : players)
{
if(ply.isPlayer(player))
return ply;
}
return null;
}
class PlayerProfile
{
protected final Logger log = Logger.getLogger("Minecraft");
private String playerName, gather, party, myspawn;
private boolean dead;
char defaultColor;
String location = "mcMMO.users";
//=====================================================================
//Function: PlayerProfile
//Input: Player player: The player to create a profile object for
//Output: none
//Use: Loads settings for the player or creates them if they don't
// exist.
//=====================================================================
public PlayerProfile(Player player)
{
//Declare things
playerName = player.getName();
party = new String();
myspawn = new String();
gather = new String();
party = null;
dead = false;
//Try to load the player and if they aren't found, append them
if(!load())
addPlayer();
}
public boolean load()
{
try {
//Open the user file
FileReader file = new FileReader(location);
BufferedReader in = new BufferedReader(file);
String line = "";
while((line = in.readLine()) != null)
{
//Find if the line contains the player we want.
String[] character = line.split(":");
if(!character[0].equals(playerName)){continue;}
//Get gather
if(character.length > 1)
gather = character[1];
if(character.length > 2){
myspawn = character[2];
}
in.close();
return true;
}
in.close();
} catch (Exception e) {
log.log(Level.SEVERE, "Exception while reading "
+ location + " (Are you sure you formatted it correctly?)", e);
}
return false;
}
//=====================================================================
// Function: save
// Input: none
// Output: None
// Use: Writes current values of PlayerProfile to disk
// Call this function to save current values
//=====================================================================
public void save()
{
try {
//Open the file
FileReader file = new FileReader(location);
BufferedReader in = new BufferedReader(file);
StringBuilder writer = new StringBuilder();
String line = "";
//While not at the end of the file
while((line = in.readLine()) != null)
{
//Read the line in and copy it to the output it's not the player
//we want to edit
if(!line.split(":")[0].equalsIgnoreCase(playerName))
{
writer.append(line).append("\r\n");
//Otherwise write the new player information
} else {
writer.append(playerName + ":");
writer.append(gather + ":");
writer.append(myspawn + ":");
writer.append("\r\n");
}
}
in.close();
//Write the new file
FileWriter out = new FileWriter(location);
out.write(writer.toString());
out.close();
} catch (Exception e) {
log.log(Level.SEVERE, "Exception while writing to " + location + " (Are you sure you formatted it correctly?)", e);
}
}
public void addPlayer()
{
try {
//Open the file to write the player
FileWriter file = new FileWriter(location, true);
BufferedWriter out = new BufferedWriter(file);
//Add the player to the end
out.append(playerName + ":");
out.append(gather + ":");
out.append(myspawn+":");
//Add more in the same format as the line above
out.newLine();
out.close();
} catch (Exception e) {
log.log(Level.SEVERE, "Exception while writing to " + location + " (Are you sure you formatted it correctly?)", e);
}
}
//=====================================================================
//Function: isPlayer
//Input: None
//Output: Player: The player this profile belongs to
//Use: Finds if this profile belongs to a specified player
//=====================================================================
public boolean isPlayer(Player player)
{
return player.getName().equals(playerName);
}
public void addgather(int newgather)
{
int x = 0;
if(isInt(gather)){
x = Integer.parseInt(gather);
}
x += newgather;
gather = String.valueOf(x);
save();
}
public boolean isInt(String string){
try {
int x = Integer.parseInt(gather);
return true;
}
catch(NumberFormatException nFE) {
return false;
}
}
//Returns player gather
public String getgather() { return gather; }
//Store the player's party
public void setParty(String newParty)
{
party = newParty;
save();
}
//Retrieve the player's party
public String getParty() {return party;}
//Remove party
public void removeParty() {
party = null;
save();
}
//Retrieve whether or not the player is in a party
public boolean inParty() {
if(party != null){
return true;
} else {
return false;
}
}
//Save a users spawn location
public void setMySpawn(double x, double y, double z){
myspawn = x+","+y+","+z;
save();
}
public String getX(){
String[] split = myspawn.split(",");
String x = split[0];
return x;
}
public String getY(){
String[] split = myspawn.split(",");
String y = split[1];
return y;
}
public String getZ(){
String[] split = myspawn.split(",");
String z = split[2];
return z;
}
public void setDead(boolean x){
dead = x;
save();
}
public boolean isDead(){
return dead;
}
public Location getMySpawn(Player player){
Location loc = player.getLocation();
loc.setX(Double.parseDouble(mcUsers.getProfile(player).getX()));
loc.setY(Double.parseDouble(mcUsers.getProfile(player).getY()));
loc.setZ(Double.parseDouble(mcUsers.getProfile(player).getZ()));
loc.setYaw(0);
loc.setPitch(0);
return loc;
}
}
}

3
mcMMO/plugin.yml Normal file
View File

@ -0,0 +1,3 @@
name: mcMMO
main: com.bukkit.nossr50.mcMMO.mcMMO
version: alpha