From 2f6dbfccfc0a430608d37e2021684aff6ae7ab6a Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 9 Mar 2011 16:08:58 -0800 Subject: [PATCH] All changes up to 0.8.16 --- mcMMO/Changelog.txt | 5 ++ mcMMO/com/gmail/nossr50/mcBlockListener.java | 26 ++++++++ mcMMO/com/gmail/nossr50/mcCombat.java | 15 ++++- mcMMO/com/gmail/nossr50/mcConfig.java | 1 + mcMMO/com/gmail/nossr50/mcEntityListener.java | 1 + mcMMO/com/gmail/nossr50/mcMMO.java | 7 ++- mcMMO/com/gmail/nossr50/mcWoodCutting.java | 63 +++++++++++++++++-- mcMMO/com/gmail/nossr50/mcm.java | 4 +- mcMMO/plugin.yml | 2 +- 9 files changed, 114 insertions(+), 10 deletions(-) diff --git a/mcMMO/Changelog.txt b/mcMMO/Changelog.txt index 0a6b42b7e..faff92463 100644 --- a/mcMMO/Changelog.txt +++ b/mcMMO/Changelog.txt @@ -1,5 +1,10 @@ Changelog: #Versions without changelogs probably had very small misc fixes, like tweaks to the source code# +Version 0.8.16 + Moved configuration file to /plugins/mcMMO + Arrows now have a chance to Ignite enemiesw + Fixed arrows not being retrievable from corpses + Added info about ignition to /archery Version 0.8.14 Mining, Woodcutting, Herbalism, and Acrobatics proc rates now are based on your skill level directly rather than tiers you unlock via skill levels Archery's ability to retrieve arrows from corpses now is based on your skill level directly rather than tiers you unlock via skill levels diff --git a/mcMMO/com/gmail/nossr50/mcBlockListener.java b/mcMMO/com/gmail/nossr50/mcBlockListener.java index 483ddeadd..7bd92bb7a 100644 --- a/mcMMO/com/gmail/nossr50/mcBlockListener.java +++ b/mcMMO/com/gmail/nossr50/mcBlockListener.java @@ -2,6 +2,7 @@ package com.gmail.nossr50; 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; @@ -9,6 +10,7 @@ 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; @@ -64,8 +66,32 @@ public class mcBlockListener extends BlockListener { if(player != null && block.getTypeId() == 17 && mcPermissions.getInstance().woodcutting(player)){ mcWoodCutting.getInstance().woodCuttingProcCheck(player, block, loc); mcUsers.getProfile(player).addWoodcuttingGather(7); + /* + * IF PLAYER IS USING TREEFELLER + */ + /* if(mcPermissions.getInstance().woodcuttingability(player)){ + player.sendMessage(ChatColor.RED+"TIIIIIIIIIIIMBER"); + mcWoodCutting.getInstance().treeFeller(block); + for(Block blockx : mcConfig.getInstance().getTreeFeller()){ + if(blockx != null){ + Material mat = Material.getMaterial(blockx.getTypeId()); + byte damage = 0; + ItemStack item = new ItemStack(mat, 1, (byte)0, damage); + blockx.setTypeId(0); + if(item.getTypeId() == 17) + blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item); + if(item.getTypeId() == 18){ + mat = Material.getMaterial(6); + item = new ItemStack(mat, 1, (byte)0, damage); + if(Math.random() * 10 > 6) + blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item); + } + } + //mcConfig.getInstance().removeTreeFeller(blockx); + } } + */ } /* * EXCAVATION diff --git a/mcMMO/com/gmail/nossr50/mcCombat.java b/mcMMO/com/gmail/nossr50/mcCombat.java index 82a71ac02..762127021 100644 --- a/mcMMO/com/gmail/nossr50/mcCombat.java +++ b/mcMMO/com/gmail/nossr50/mcCombat.java @@ -332,6 +332,19 @@ public class mcCombat { */ if(y instanceof Player){ Player attacker = (Player)y; + if(Math.random() * 1500 <= mcUsers.getProfile(attacker).getArcheryInt()){ + if(x instanceof Player){ + Player Defender = (Player)x; + if(!mcParty.getInstance().inSameParty(attacker, Defender)){ + event.getEntity().setFireTicks(120); + attacker.sendMessage(ChatColor.RED+"**IGNITION**"); + Defender.sendMessage(ChatColor.DARK_RED+"You were struck by a burning arrow!"); + } + } else { + event.getEntity().setFireTicks(160); + attacker.sendMessage(ChatColor.RED+"**IGNITION**"); + } + } if(event.getProjectile().toString().equals("CraftArrow") && mcPermissions.getInstance().archery(attacker)){ if(!mcConfig.getInstance().isTracked(x) && event.getDamage() > 0){ mcConfig.getInstance().addArrowTrack(x, 0); @@ -357,7 +370,6 @@ public class mcCombat { /* * TRACK ARROWS USED AGAINST THE ENTITY */ - int healthbefore = defender.getHealth(); if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250) event.setDamage(calculateDamage(event, 1)); if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575) @@ -466,7 +478,6 @@ public class mcCombat { attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed"); } } - int healthbefore = defender.getHealth(); if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250) event.setDamage(calculateDamage(event, 1)); if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575) diff --git a/mcMMO/com/gmail/nossr50/mcConfig.java b/mcMMO/com/gmail/nossr50/mcConfig.java index 88a58c7f9..9b385cb18 100644 --- a/mcMMO/com/gmail/nossr50/mcConfig.java +++ b/mcMMO/com/gmail/nossr50/mcConfig.java @@ -18,6 +18,7 @@ public class mcConfig { static ArrayList bleedTracker = new ArrayList(); static ArrayList mobSpawnTracker = new ArrayList(); public boolean isBlockWatched(Block block) {return blockWatchList.contains(block);} + public boolean isTreeFellerWatched(Block block) {return treeFeller.contains(block);} public ArrayList getTreeFeller() {return treeFeller;} public void removeBlockWatch(Block block) {blockWatchList.remove(blockWatchList.indexOf(block));} public void addBlockWatch(Block block) {blockWatchList.add(block);} diff --git a/mcMMO/com/gmail/nossr50/mcEntityListener.java b/mcMMO/com/gmail/nossr50/mcEntityListener.java index 5892b06f5..5bded139a 100644 --- a/mcMMO/com/gmail/nossr50/mcEntityListener.java +++ b/mcMMO/com/gmail/nossr50/mcEntityListener.java @@ -124,6 +124,7 @@ public class mcEntityListener extends EntityListener { } public void onEntityDeath(EntityDeathEvent event) { Entity x = event.getEntity(); + mcSkills.getInstance().arrowRetrievalCheck(x); if(x instanceof Player){ Player player = (Player)x; if(mcUsers.getProfile(player).isDead()){ diff --git a/mcMMO/com/gmail/nossr50/mcMMO.java b/mcMMO/com/gmail/nossr50/mcMMO.java index 9e6178dfd..1a06455f5 100644 --- a/mcMMO/com/gmail/nossr50/mcMMO.java +++ b/mcMMO/com/gmail/nossr50/mcMMO.java @@ -18,7 +18,7 @@ import org.bukkit.entity.Player; public class mcMMO extends JavaPlugin { - static String maindirectory = "mcMMO/"; + static String maindirectory = "plugins/mcMMO/"; static File Properties = new File(maindirectory + "mcmmo.properties"); public static final Logger log = Logger.getLogger("Minecraft"); private final mcPlayerListener playerListener = new mcPlayerListener(this); @@ -32,7 +32,7 @@ public class mcMMO extends JavaPlugin { //herp public void onEnable() { - //mcMMO_Timer.schedule(new mcTimer(this), 0, (long)(2000)); + mcMMO_Timer.schedule(new mcTimer(this), 0, (long)(2000)); //Make the directory if it does not exist new File(maindirectory).mkdir(); //Make the file if it does not exist @@ -61,6 +61,9 @@ public class mcMMO extends JavaPlugin { //Load the file mcLoadProperties.loadMain(); mcUsers.getInstance().loadUsers(); + for(Player player : getServer().getOnlinePlayers()){ + mcUsers.addUser(player); + } PluginManager pm = getServer().getPluginManager(); pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Normal, this); diff --git a/mcMMO/com/gmail/nossr50/mcWoodCutting.java b/mcMMO/com/gmail/nossr50/mcWoodCutting.java index 4cfd165c4..e8223f50c 100644 --- a/mcMMO/com/gmail/nossr50/mcWoodCutting.java +++ b/mcMMO/com/gmail/nossr50/mcWoodCutting.java @@ -1,5 +1,7 @@ package com.gmail.nossr50; +import java.util.ArrayList; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -7,6 +9,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; public class mcWoodCutting { + int w = 0; + private boolean isdone = false; private static mcMMO plugin; public mcWoodCutting(mcMMO instance) { plugin = instance; @@ -31,11 +35,62 @@ public class mcWoodCutting { } } public void treeFeller(Block block){ - Location loc = block.getLocation(); int radius = 1; - int typeid = 17; - if(mcm.getInstance().isBlockAround(loc, radius, typeid)){ - + ArrayList blocklist = new ArrayList(); + ArrayList toAdd = new ArrayList(); + if(block != null) + blocklist.add(block); + while(isdone == false){ + addBlocksToTreeFelling(blocklist, toAdd, radius); + } + //This needs to be a hashmap too! + isdone = false; + /* + * Add blocks from the temporary 'toAdd' array list into the 'treeFeller' array list + * We use this temporary list to prevent concurrent modification exceptions + */ + for(Block x : toAdd){ + if(!mcConfig.getInstance().isTreeFellerWatched(x)) + mcConfig.getInstance().addTreeFeller(x); + } + } + public void addBlocksToTreeFelling(ArrayList blocklist, ArrayList toAdd, Integer radius){ + int u = 0; + for (Block x : blocklist){ + u++; + if(toAdd.contains(x)) + continue; + w = 0; + Location loc = x.getLocation(); + int vx = x.getX(); + int vy = x.getY(); + int vz = x.getZ(); + /* + * Run through the blocks around the broken block to see if they qualify to be 'felled' + */ + for (int cx = -radius; cx <= radius; cx++) { + for (int cy = -radius; cy <= radius; cy++) { + for (int cz = -radius; cz <= radius; cz++) { + Block blocktarget = loc.getWorld().getBlockAt(vx + cx, vy + cy, vz + cz); + if (!blocklist.contains(blocktarget) && !toAdd.contains(blocktarget) && (blocktarget.getTypeId() == 17 || blocktarget.getTypeId() == 18)) { + toAdd.add(blocktarget); + w++; + } + } + } + } + } + /* + * Add more blocks to blocklist so they can be 'felled' + */ + for(Block xx : toAdd){ + if(!blocklist.contains(xx)) + blocklist.add(xx); + } + if(u >= blocklist.size()){ + isdone = true; + } else { + isdone = false; } } } diff --git a/mcMMO/com/gmail/nossr50/mcm.java b/mcMMO/com/gmail/nossr50/mcm.java index cdb137a79..dc1816b41 100644 --- a/mcMMO/com/gmail/nossr50/mcm.java +++ b/mcMMO/com/gmail/nossr50/mcm.java @@ -233,15 +233,17 @@ public class mcm { event.setCancelled(true); float skillvalue = (float)mcUsers.getProfile(player).getArcheryInt(); String percentage = String.valueOf((skillvalue / 1000) * 100); + String percentagefire = String.valueOf((skillvalue / 1500) * 100); player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"ARCHERY"+ChatColor.RED+"[]-----"); player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Attacking Monsters"); player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---"); - //player.sendMessage(ChatColor.DARK_AQUA+"Daze (Monsters): "+ChatColor.GREEN+"Enemies lose interest for 1 second"); + player.sendMessage(ChatColor.DARK_AQUA+"Ignition: "+ChatColor.GREEN+"Enemies will catch on fire"); player.sendMessage(ChatColor.DARK_AQUA+"Daze (Players): "+ChatColor.GREEN+"Disorients foes"); player.sendMessage(ChatColor.DARK_AQUA+"Damage+: "+ChatColor.GREEN+"Modifies Damage"); player.sendMessage(ChatColor.DARK_AQUA+"Arrow Retrieval: "+ChatColor.GREEN+"Chance to retrieve arrows from corpses"); player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"YOUR STATS"+ChatColor.RED+"[]---"); player.sendMessage(ChatColor.RED+"Chance to Retrieve Arrows: "+ChatColor.YELLOW+percentage+"%"); + player.sendMessage(ChatColor.RED+"Chance for Ignition: "+ChatColor.YELLOW+percentagefire+"%"); } if(split[0].equalsIgnoreCase("/axes")){ event.setCancelled(true); diff --git a/mcMMO/plugin.yml b/mcMMO/plugin.yml index cf176af35..a241e7687 100644 --- a/mcMMO/plugin.yml +++ b/mcMMO/plugin.yml @@ -1,3 +1,3 @@ name: mcMMO main: com.gmail.nossr50.mcMMO -version: 0.8.15 \ No newline at end of file +version: 0.8.16 \ No newline at end of file