Fleshed out Mining/Woodcutting skills. Fixed several bugs with the FFS. Secret update #2.

This commit is contained in:
nossr50 2011-02-05 11:29:23 -08:00
parent 7f8b3632e4
commit 4fe7f4f26e
5 changed files with 379 additions and 39 deletions

View File

@ -1,9 +1,16 @@
package com.bukkit.nossr50.mcMMO;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
public class mcBlockListener extends BlockListener {
private final mcMMO plugin;
@ -11,37 +18,234 @@ public class mcBlockListener extends BlockListener {
public mcBlockListener(final mcMMO plugin) {
this.plugin = plugin;
}
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
mcConfig.getInstance().addBlockWatch(block);
}
public void blockProcSimulate(Block block){
Location loc = block.getLocation();
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
if(block.getTypeId() != 73 && block.getTypeId() != 74 && block.getTypeId() != 56 && block.getTypeId() != 21 && block.getTypeId() != 1 && block.getTypeId() != 16)
block.getWorld().dropItemNaturally(loc, item);
if(block.getTypeId() == 73 || block.getTypeId() == 74){
mat = Material.getMaterial(331);
item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
block.getWorld().dropItemNaturally(loc, item);
block.getWorld().dropItemNaturally(loc, item);
block.getWorld().dropItemNaturally(loc, item);
//Since redstone gives 4-5, lets simulate that
if(Math.random() * 10 > 5){
block.getWorld().dropItemNaturally(loc, item);
}
}
if(block.getTypeId() == 21){
mat = Material.getMaterial(331);
item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
block.getWorld().dropItemNaturally(loc, item);
block.getWorld().dropItemNaturally(loc, item);
block.getWorld().dropItemNaturally(loc, item);
block.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 56){
mat = Material.getMaterial(264);
item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 1){
mat = Material.getMaterial(4);
item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
}
if(block.getTypeId() == 16){
mat = Material.getMaterial(263);
item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
}
}
public void blockProcCheck(Block block, Player player){
Location loc = block.getLocation();
if(mcUsers.getProfile(player).getMiningInt() > 3000){
blockProcSimulate(block);
return;
}
if(mcUsers.getProfile(player).getMiningInt() > 2000){
if((Math.random() * 10) > 2){
blockProcSimulate(block);
return;
}
}
if(mcUsers.getProfile(player).getMiningInt() > 750){
if((Math.random() * 10) > 4){
blockProcSimulate(block);
return;
}
}
if(mcUsers.getProfile(player).getMiningInt() > 150){
if((Math.random() * 10) > 6){
blockProcSimulate(block);
return;
}
}
if(mcUsers.getProfile(player).getMiningInt() > 25){
if((Math.random() * 10) > 8){
blockProcSimulate(block);
return;
}
}
}
//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();
Location loc = block.getLocation();
int dmg = event.getDamageLevel().getLevel();
if(dmg == 3){
//Smooth Stone
if(dmg == 3 && !mcConfig.getInstance().isBlockWatched(block)){
if(block.getTypeId() == 1){
mcUsers.getProfile(player).addgather(1);
blockProcCheck(block, player);
}
//COAL
if(block.getTypeId() == 16){
mcUsers.getProfile(player).addgather(3);
blockProcCheck(block, player);
}
//GOLD
if(block.getTypeId() == 14){
mcUsers.getProfile(player).addgather(20);
blockProcCheck(block, player);
}
//DIAMOND
if(block.getTypeId() == 56){
mcUsers.getProfile(player).addgather(50);
blockProcCheck(block, player);
}
//IRON
if(block.getTypeId() == 15){
mcUsers.getProfile(player).addgather(10);
blockProcCheck(block, player);
}
//REDSTONE
if(block.getTypeId() == 73 || block.getTypeId() == 74){
mcUsers.getProfile(player).addgather(15);
blockProcCheck(block, player);
}
//LAPUS
if(block.getTypeId() == 21){
mcUsers.getProfile(player).addgather(50);
blockProcCheck(block, player);
}
//Give skill for woodcutting
if(block.getTypeId() == 17)
mcUsers.getProfile(player).addwgather(1);
if(mcUsers.getProfile(player).getwgatheramt() > 10){
while(mcUsers.getProfile(player).getwgatheramt() > 10){
mcUsers.getProfile(player).removewgather(10);
mcUsers.getProfile(player).skillUpWoodcutting(1);
player.sendMessage(ChatColor.YELLOW+"Wood Cutting skill increased by 1. Total ("+mcUsers.getProfile(player).getWoodCutting()+")");
}
}
if(mcUsers.getProfile(player).getgatheramt() > 50){
while(mcUsers.getProfile(player).getgatheramt() > 50){
mcUsers.getProfile(player).removegather(50);
mcUsers.getProfile(player).skillUpMining(1);
player.sendMessage(ChatColor.YELLOW+"Mining skill increased by 1. Total ("+mcUsers.getProfile(player).getMining()+")");
}
}
/*
* WOODCUTTING
*/
if(block.getTypeId() == 17){
if(mcUsers.getProfile(player).getWoodCuttingint() > 1000){
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
return;
}
if(mcUsers.getProfile(player).getWoodCuttingint() > 750){
if((Math.random() * 10) > 2){
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
return;
}
}
if(mcUsers.getProfile(player).getWoodCuttingint() > 300){
if((Math.random() * 10) > 4){
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
return;
}
}
if(mcUsers.getProfile(player).getWoodCuttingint() > 100){
if((Math.random() * 10) > 6){
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
return;
}
}
if(mcUsers.getProfile(player).getWoodCuttingint() > 10){
if((Math.random() * 10) > 8){
Material mat = Material.getMaterial(block.getTypeId());
byte damage = 0;
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
block.getWorld().dropItemNaturally(loc, item);
return;
}
}
}
}
//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;
}
public void onBlockFlow(BlockFromToEvent event) {
//Code borrowed from WorldGuard by sk89q
World world = event.getBlock().getWorld();
int radius = 1;
Block blockFrom = event.getBlock();
Block blockTo = event.getToBlock();
boolean isWater = blockFrom.getTypeId() == 8 || blockFrom.getTypeId() == 9;
boolean isLava = blockFrom.getTypeId() == 10 || blockFrom.getTypeId() == 11;
int ox = blockTo.getX();
int oy = blockTo.getY();
int oz = blockTo.getZ();
if(blockTo.getTypeId() == 9 || blockTo.getTypeId() == 8){
return;
}
for (int cx = -radius; cx <= radius; cx++) {
for (int cy = -radius; cy <= radius; cy++) {
for (int cz = -radius; cz <= radius; cz++) {
Block dirt = world.getBlockAt(ox + cx, oy + cy, oz + cz);
//If block is dirt
if (isWater == true &&
dirt.getTypeId() == 13) {
//Change
dirt.setTypeId(82);
return;
}
}
}
}
}

View File

@ -2,10 +2,16 @@ package com.bukkit.nossr50.mcMMO;
import java.util.ArrayList;
import org.bukkit.block.Block;
public class mcConfig {
private static volatile mcConfig instance;
static ArrayList<String> adminChatList = new ArrayList<String>();
static ArrayList<Block> blockWatchList = new ArrayList<Block>();
static ArrayList<String> partyChatList = new ArrayList<String>();
public boolean isBlockWatched(Block block) {return blockWatchList.contains(block);}
public void removeBlockWatch(Block block) {blockWatchList.remove(blockWatchList.indexOf(block));}
public void addBlockWatch(Block block) {blockWatchList.add(block);}
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));}

View File

@ -36,6 +36,8 @@ public class mcMMO extends JavaPlugin {
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);
pm.registerEvent(Event.Type.BLOCK_FLOW, blockListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Normal, this);
//Displays a message when plugin is loaded
PluginDescriptionFile pdfFile = this.getDescription();
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );

View File

@ -20,8 +20,7 @@ public class mcPlayerListener extends PlayerListener {
player.sendMessage(ChatColor.DARK_RED+"Welcome to /v/ - Minecraft");
player.sendMessage(ChatColor.DARK_RED+"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.GREEN+"to create/join parties and");
player.sendMessage(ChatColor.GREEN+"to check who is in your current party.");
player.sendMessage(ChatColor.GREEN + "Use "+ChatColor.YELLOW+"/party "+ChatColor.GREEN+"to create/join parties");
player.sendMessage(ChatColor.GREEN + "Use "+ChatColor.YELLOW+"/p"+ChatColor.GREEN+" to toggle party chat");
player.sendMessage(ChatColor.GREEN + "Use "+ChatColor.YELLOW+"/ptp "+ChatColor.GREEN+"to teleport to party members");
player.sendMessage("Set your spawn with "+ChatColor.YELLOW+"/setmyspawn"+ChatColor.WHITE+", Travel to it with /myspawn");
@ -65,11 +64,13 @@ public class mcPlayerListener extends PlayerListener {
}
if(isPlayer(split[1])){
Player target = getPlayer(split[1]);
if(mcUsers.getProfile(player).getParty().equals(mcUsers.getProfile(target).getParty())){
player.teleportTo(target);
player.sendMessage(ChatColor.GREEN+"You have teleport to "+target.getName());
player.sendMessage(ChatColor.GREEN+"You have teleported to "+target.getName());
target.sendMessage(ChatColor.GREEN+player.getName() + " has teleported to you.");
}
}
}
if(player.isOp() && split[0].equalsIgnoreCase("/whois")){
if(split.length < 2){
player.sendMessage(ChatColor.RED + "Proper usage is /whois <playername>");
@ -87,7 +88,8 @@ public class mcPlayerListener extends PlayerListener {
player.sendMessage("Health: "+target.getHealth()+ChatColor.GRAY+" (20 is full health)");
player.sendMessage("OP: " + target.isOp());
player.sendMessage(ChatColor.GREEN+"~~mcMMO stats~~");
player.sendMessage("Gathering Skill: "+mcUsers.getProfile(target).getgather());
player.sendMessage("Mining Skill: "+mcUsers.getProfile(target).getMining());
player.sendMessage("Woodcutting Skill: "+mcUsers.getProfile(target).getWoodCutting());
player.sendMessage(ChatColor.GREEN+"~~COORDINATES~~");
player.sendMessage("X: "+x);
player.sendMessage("Y: "+y);
@ -108,9 +110,9 @@ public class mcPlayerListener extends PlayerListener {
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");
player.sendMessage(ChatColor.DARK_GREEN + "Mining Skill: " + mcUsers.getProfile(player).getMining());
player.sendMessage(ChatColor.DARK_GREEN+"Woodcutting Skill: "+mcUsers.getProfile(player).getWoodCutting());
player.sendMessage(ChatColor.GRAY + "Increases depending on the material you mine");
}
//Party command
if(split[0].equalsIgnoreCase("/party")){
@ -168,10 +170,14 @@ public class mcPlayerListener extends PlayerListener {
}
}
if(split[0].equalsIgnoreCase("/myspawn")){
if(mcUsers.getProfile(player).getMySpawn(player) != null){
player.getInventory().clear();
player.setHealth(20);
player.teleportTo(mcUsers.getProfile(player).getMySpawn(player));
player.sendMessage("Inventory cleared & health restored");
}else{
player.sendMessage(ChatColor.RED+"Configure your myspawn first with /setmyspawn");
}
}
if(split[0].equalsIgnoreCase("/spawn")){
if(spawn != null){

View File

@ -154,7 +154,7 @@ class PlayerList
class PlayerProfile
{
protected final Logger log = Logger.getLogger("Minecraft");
private String playerName, gather, party, myspawn;
private String playerName, gather, wgather, woodcutting, mining, party, myspawn;
private boolean dead;
char defaultColor;
@ -174,7 +174,14 @@ class PlayerList
playerName = player.getName();
party = new String();
myspawn = new String();
mining = new String();
//mining = "0";
wgather = new String();
//wgather = "0";
woodcutting = new String();
//woodcutting = "0";
gather = new String();
//gather = "0";
party = null;
dead = false;
@ -196,13 +203,22 @@ class PlayerList
String[] character = line.split(":");
if(!character[0].equals(playerName)){continue;}
//Get gather
//Get Mining
if(character.length > 1)
gather = character[1];
mining = character[1];
//Myspawn
if(character.length > 2)
myspawn = character[2];
//Party
if(character.length > 3)
party = character[3];
//Mining Gather
if(character.length > 4)
gather = character[4];
if(character.length > 5)
woodcutting = character[5];
if(character.length > 6)
wgather = character[6];
in.close();
return true;
}
@ -242,9 +258,12 @@ class PlayerList
//Otherwise write the new player information
} else {
writer.append(playerName + ":");
writer.append(gather + ":");
writer.append(mining + ":");
writer.append(myspawn + ":");
writer.append(party+":");
writer.append(gather+":");
writer.append(woodcutting+":");
writer.append(wgather+":");
writer.append("\r\n");
}
}
@ -266,9 +285,12 @@ class PlayerList
//Add the player to the end
out.append(playerName + ":");
out.append(gather + ":");
out.append(0 + ":");
out.append(myspawn+":");
out.append(party+":");
out.append(0+":");
out.append(0+":");
out.append(0+":");
//Add more in the same format as the line above
out.newLine();
@ -288,29 +310,129 @@ class PlayerList
{
return player.getName().equals(playerName);
}
public void skillUpMining(int newmining){
int x = 0;
if(mining != null){
if(isInt(mining)){
x = Integer.parseInt(mining);
}else {
mining = "0";
x = Integer.parseInt(mining);
}
}
x += newmining;
mining = Integer.toString(x);
save();
}
public void skillUpWoodcutting(int newskill){
int x = 0;
if(woodcutting != null){
if(isInt(woodcutting)){
x = Integer.parseInt(woodcutting);
}else {
woodcutting = "0";
x = Integer.parseInt(woodcutting);
}
}
x += newskill;
woodcutting = Integer.toString(x);
save();
}
public String getMining(){
return mining;
}
public int getMiningInt(){
if(isInt(mining)){
int x = Integer.parseInt(mining);
return x;
} else{
return 0;
}
}
public int getWoodCuttingint(){
if(isInt(woodcutting)){
int x = Integer.parseInt(woodcutting);
return x;
} else{
return 0;
}
}
public String getWoodCutting(){
return woodcutting;
}
public void addwgather(int newgather)
{
int x = 0;
if(isInt(wgather)){
x = Integer.parseInt(wgather);
}
x += newgather;
wgather = String.valueOf(x);
save();
}
public void removewgather(int newgather){
int x = 0;
if(isInt(wgather)){
x = Integer.parseInt(wgather);
}
x -= newgather;
wgather = String.valueOf(x);
save();
}
public void addgather(int newgather)
{
int x = 0;
if(isInt(gather)){
x = Integer.parseInt(gather);
} else {
x = 0;
}
x += newgather;
gather = String.valueOf(x);
save();
}
public void removegather(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;
int x = Integer.parseInt(string);
}
catch(NumberFormatException nFE) {
return false;
}
return true;
}
//Returns player gather
public String getgather() { return gather; }
public String getwgather() { return wgather; }
public int getwgatheramt() {
if(isInt(wgather)){
return Integer.parseInt(getwgather());
} else {
wgather = "0";
save();
return 0;
}
}
public int getgatheramt() {
if(isInt(gather)){
return Integer.parseInt(getgather());
} else {
gather = "0";
save();
return 0;
}
}
//Store the player's party
public void setParty(String newParty)