mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 01:42:32 +01:00
Compare commits
284 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16451550b5 | ||
|
|
c2dc28c2bd | ||
|
|
c48ac9f596 | ||
|
|
dfba78a4cb | ||
|
|
a9eed7c31c | ||
|
|
a9a7719096 | ||
|
|
5038fbadb0 | ||
|
|
a85ca2c984 | ||
|
|
e6e7f10a05 | ||
|
|
212f6ee773 | ||
|
|
53d38cc54c | ||
|
|
a53c8d5c64 | ||
|
|
94a02c9a2e | ||
|
|
07699fa651 | ||
|
|
0aaf02f208 | ||
|
|
0dd9bc1cda | ||
|
|
ccfce843be | ||
|
|
cb3bc755a6 | ||
|
|
719081a77e | ||
|
|
d1c4efa30d | ||
|
|
12fbaa4361 | ||
|
|
abcd586daa | ||
|
|
2f0a3eaadd | ||
|
|
1814d52680 | ||
|
|
d3ed6bb139 | ||
|
|
8eaa58040e | ||
|
|
04e2a212d1 | ||
|
|
fe7ca65f22 | ||
|
|
89ab87b6dd | ||
|
|
e933fbe1bd | ||
|
|
cb9a9282dd | ||
|
|
14f1a91eeb | ||
|
|
1756031eda | ||
|
|
bccb321ce1 | ||
|
|
920f091a85 | ||
|
|
c1103a52f0 | ||
|
|
4f128ebbef | ||
|
|
3f5b2bdcee | ||
|
|
288e82fbc3 | ||
|
|
feb073d159 | ||
|
|
505df87014 | ||
|
|
f6221c1c34 | ||
|
|
0a97c1dc62 | ||
|
|
05cea84dcc | ||
|
|
1ac544511c | ||
|
|
292f14bf87 | ||
|
|
ef17ea6231 | ||
|
|
75c49497ac | ||
|
|
f9b9dddbc8 | ||
|
|
5a8b9fc344 | ||
|
|
e9dae0d633 | ||
|
|
1c866a52e5 | ||
|
|
2f5edb6329 | ||
|
|
30e5410906 | ||
|
|
4f2a0b8260 | ||
|
|
882a457484 | ||
|
|
ed5531d44b | ||
|
|
b2989a8bab | ||
|
|
c032a27d63 | ||
|
|
353ceefd4e | ||
|
|
9a7ea3b6d0 | ||
|
|
6a79d9f244 | ||
|
|
2151fbb6c0 | ||
|
|
3945a681a3 | ||
|
|
592382a5d3 | ||
|
|
72bfe63ebf | ||
|
|
6d883821a8 | ||
|
|
415786d67e | ||
|
|
d8aa3a5f14 | ||
|
|
f5fc941916 | ||
|
|
8254a8ab0f | ||
|
|
fadbaf429d | ||
|
|
a80507078d | ||
|
|
d13549ff6a | ||
|
|
0f89a9e1e8 | ||
|
|
c8f2521670 | ||
|
|
32135d5647 | ||
|
|
dc5b37d560 | ||
|
|
e873902e1b | ||
|
|
fe21aa0aa9 | ||
|
|
19842ebc35 | ||
|
|
ee1e128c5a | ||
|
|
d099bc562b | ||
|
|
69dfd5645a | ||
|
|
5db7225bc4 | ||
|
|
80374333b6 | ||
|
|
885ec70d28 | ||
|
|
8d00468412 | ||
|
|
5d9ac614c2 | ||
|
|
0f8a418efd | ||
|
|
ed2e9a993d | ||
|
|
f689f048b2 | ||
|
|
906bc01b91 | ||
|
|
4641e4701c | ||
|
|
88e40080fb | ||
|
|
e0fa23359f | ||
|
|
4ab71bcf36 | ||
|
|
652a27eb38 | ||
|
|
d56fe82bfd | ||
|
|
6c20df7839 | ||
|
|
423eb97e0f | ||
|
|
0b43dd2747 | ||
|
|
f2fccd4a64 | ||
|
|
a7292c3a2c | ||
|
|
0c1072f7cf | ||
|
|
cea80f98e8 | ||
|
|
985e69c529 | ||
|
|
a2b3e6fa83 | ||
|
|
ee986970fe | ||
|
|
345fa122c5 | ||
|
|
fae5693db8 | ||
|
|
093f368545 | ||
|
|
a41fc22899 | ||
|
|
5f51f7f9b0 | ||
|
|
de2a0403d2 | ||
|
|
e2d13034a8 | ||
|
|
e55006f662 | ||
|
|
64b46a88c9 | ||
|
|
69b7c3077f | ||
|
|
f158858262 | ||
|
|
7aa7de75a2 | ||
|
|
6cc22a3b63 | ||
|
|
649ce1c147 | ||
|
|
1281843d45 | ||
|
|
e31aea3492 | ||
|
|
26e3403ff4 | ||
|
|
e5922bf3e7 | ||
|
|
2b9baaf0ea | ||
|
|
8ad4e20cab | ||
|
|
1511c5737b | ||
|
|
57bf414d59 | ||
|
|
16a0a3364a | ||
|
|
d09512373b | ||
|
|
dfd1e311d1 | ||
|
|
26c9ba0c3b | ||
|
|
d7d1d0b58d | ||
|
|
a0ab16eaa7 | ||
|
|
cae4b47538 | ||
|
|
dd445dbac5 | ||
|
|
4b26732f51 | ||
|
|
bf38fc9819 | ||
|
|
aff6b0925f | ||
|
|
a7f259ea3c | ||
|
|
3a1ee58339 | ||
|
|
6b0c46b634 | ||
|
|
6b36a030f6 | ||
|
|
df92c43578 | ||
|
|
f481741bb5 | ||
|
|
77b0dd725c | ||
|
|
f850c0ead6 | ||
|
|
7ad9b2ed58 | ||
|
|
695d76dcf4 | ||
|
|
19ea6707fe | ||
|
|
649bccb0d0 | ||
|
|
73f1c08366 | ||
|
|
b98120192a | ||
|
|
1cd7181d26 | ||
|
|
fb35e7dd5d | ||
|
|
1c4275ce37 | ||
|
|
3ff9a28fa7 | ||
|
|
04f13ab090 | ||
|
|
e42b9db159 | ||
|
|
deb3a3bd48 | ||
|
|
6708947332 | ||
|
|
1f0fcb119d | ||
|
|
bdb74d4719 | ||
|
|
19ab8b89f5 | ||
|
|
10fa9e5465 | ||
|
|
1fe259eb7a | ||
|
|
cd56dc7f98 | ||
|
|
8cf9601af4 | ||
|
|
b39c02154a | ||
|
|
a2e41f31ed | ||
|
|
5d8b049a45 | ||
|
|
336adf9530 | ||
|
|
708cfc23b6 | ||
|
|
06b2a89646 | ||
|
|
b782225dde | ||
|
|
85640f88b2 | ||
|
|
a372ca34e6 | ||
|
|
4acc0b63fd | ||
|
|
edf6f7560b | ||
|
|
66e0cc33bf | ||
|
|
498e3eb35c | ||
|
|
2aa7e37e13 | ||
|
|
09c5b8727a | ||
|
|
02a67e330a | ||
|
|
37364d6c86 | ||
|
|
86166a58e1 | ||
|
|
935e494705 | ||
|
|
94387045e4 | ||
|
|
20ae2dbeea | ||
|
|
d1b522b534 | ||
|
|
89802e23e2 | ||
|
|
cb4b5d1c71 | ||
|
|
472bfa51da | ||
|
|
162dbaed0f | ||
|
|
6f9fc26ab5 | ||
|
|
b199568ec3 | ||
|
|
ff258e0cbf | ||
|
|
68dd18067e | ||
|
|
799e11c36c | ||
|
|
f274d47c81 | ||
|
|
ca3b7f2172 | ||
|
|
22c9fca915 | ||
|
|
e4d312a11f | ||
|
|
a3f0de1c84 | ||
|
|
4826056bbe | ||
|
|
6f2f99dda0 | ||
|
|
d06ec5e452 | ||
|
|
94cb118a7e | ||
|
|
bebc70634b | ||
|
|
186c9189ca | ||
|
|
324b69cba1 | ||
|
|
802af464cd | ||
|
|
0c8b46acee | ||
|
|
182219f00d | ||
|
|
828f5ad173 | ||
|
|
95da5a4535 | ||
|
|
324bcd9b91 | ||
|
|
98ed75e4e0 | ||
|
|
3d5bb334f6 | ||
|
|
c74f43a1ad | ||
|
|
f5451b7d59 | ||
|
|
3dbaf061ed | ||
|
|
19ac0e6ba6 | ||
|
|
a509b0e9d3 | ||
|
|
5c63e9779e | ||
|
|
9ef9ffd16f | ||
|
|
93e223b2cc | ||
|
|
c4a0ae64aa | ||
|
|
933a7ffc69 | ||
|
|
b0253f9913 | ||
|
|
7eb1d43201 | ||
|
|
1f843bc3a2 | ||
|
|
c17bc7d332 | ||
|
|
c308121c47 | ||
|
|
d0d9868b5f | ||
|
|
8f3dce4ee9 | ||
|
|
de0a6dd3ee | ||
|
|
5d06341612 | ||
|
|
470b29c229 | ||
|
|
c915bb8312 | ||
|
|
f8869c177f | ||
|
|
c0a7b276b4 | ||
|
|
fa35fd9e45 | ||
|
|
3f8077d615 | ||
|
|
3b9e85e976 | ||
|
|
b024b45e02 | ||
|
|
a3cf3401bb | ||
|
|
bc12e0d100 | ||
|
|
96be29ef63 | ||
|
|
0f2029a32d | ||
|
|
aa14c1bc1f | ||
|
|
d052af9207 | ||
|
|
ad2ed37d0a | ||
|
|
1943ce884a | ||
|
|
b23fa36543 | ||
|
|
887f8f3e0c | ||
|
|
227b554488 | ||
|
|
20064f36ef | ||
|
|
decdddb9ec | ||
|
|
1b0fac78ae | ||
|
|
d864a2391e | ||
|
|
b08aead536 | ||
|
|
cca04468de | ||
|
|
e997c32c6c | ||
|
|
a1d5eaa846 | ||
|
|
4e9333e823 | ||
|
|
b75e7470ae | ||
|
|
484cbccc1b | ||
|
|
5d4d4d3498 | ||
|
|
82e34a5b02 | ||
|
|
a9b1ebb063 | ||
|
|
c942feb868 | ||
|
|
7003311b7e | ||
|
|
2549e23fd2 | ||
|
|
40af51fc05 | ||
|
|
06d3d8a18f | ||
|
|
992e6bce86 | ||
|
|
6e59087f6d | ||
|
|
e94473b21b | ||
|
|
8da49ba796 | ||
|
|
bc8f073f3f |
@@ -1,6 +1,95 @@
|
||||
Changelog:
|
||||
#Versions without changelogs probably had very small misc fixes, like tweaks to the source code
|
||||
Versions without changelogs probably had very small misc fixes, like tweaks to the source code
|
||||
|
||||
Key:
|
||||
+ Addition
|
||||
= Fix
|
||||
! Change
|
||||
- Removal
|
||||
|
||||
Version 1.3.02
|
||||
+ Added in game guides for Mining, Excavation, and Acrobatics. Simply type /skillname ? to access them
|
||||
! Changed Tree Feller to hand out 1/4 of normal XP for each JUNGLE LOG block it fells
|
||||
! Changed Tree Feller to only fell trees if you have enough durability
|
||||
! Changed Tree Feller to cause injury if your axe splinters from a failed Tree Feller attempt
|
||||
! Changed invincibility checks in EntityDamage listeners to accommodate for vanilla MC behaviour
|
||||
! Changed Ignition to add fire ticks rather than replacing them.
|
||||
! Changed Axes critical to have a max critical rate of 37.5% down from 75%
|
||||
= Fixed bug where Taming defensive checks got called twice
|
||||
= Fixed Shake not working correctly
|
||||
= Fixed bug with Axes command displaying wrong Greater Impact bonus damage
|
||||
= Fixed bug where Impact didn't apply bonus damage
|
||||
= Fixed Impact proccing multiple times in a row
|
||||
= Fixed bug where PVE skills didn't level
|
||||
|
||||
Version 1.3.01
|
||||
= Fixed bug where Tree Feller had no cooldown
|
||||
= Fixed bug with activating Skull Splitter after using Tree Feller
|
||||
|
||||
Version 1.3.00
|
||||
+ Added ability to customize drops for Excavation skill (treasures.yml)
|
||||
+ Added ability to customize drops for Fishing skill (treasures.yml)
|
||||
+ Added messages to nearby players when your abilities wear off
|
||||
+ Added jungle trees to Woodcutting XP tables
|
||||
+ Added player notification for when they stop Bleeding
|
||||
+ Added configuration option to control mcMMO reporting damage events
|
||||
+ Added hunger regain bonuses to Herbalism skill
|
||||
+ Added Blast Mining subskills to Mining
|
||||
+ Added Fast Food Service subskill to Taming
|
||||
+ Added size limit to Tree Feller in config as Tree Feller Threshold
|
||||
+ Added /inspect (works on offline players)
|
||||
+ Added /addlevels commands
|
||||
+ Added /mcremove command which lets you remove users from MySQL or FlatFile
|
||||
+ Added config values for XP multipliers for different hostile mobs
|
||||
+ Added 'mcmmo.commands.inspect' permission node for the new /inspect command
|
||||
+ Added Impact & Greater Impact subskills to Axes
|
||||
+ Re-added mcMMO reporting damage events
|
||||
= Fixed bug with updating MySQL tables to include fishing on servers using custom table prefixes
|
||||
= Fixed bug where Disarm didn't work at all ever
|
||||
= Fixed bug where Swords command showed Bleed Length twice instead of Bleed Chance
|
||||
= Fixed bug where Tree Feller wasn't checking for Tree Feller permission
|
||||
= Fixed bug where Leaf Blower required Tree Feller permissions rather than Woodcutting permissions
|
||||
= Fixed Leaf Blower preventing the use of shears to collect leaves
|
||||
= Fixed Green Thumb & Green Terra not consuming or requiring seeds to replant Wheat
|
||||
= Fixed Super Breaker & Giga Drill Breaker failing to damage tools
|
||||
= Fixed Tree Feller not giving proper XP for different kinds of trees
|
||||
= Fixed Skill Abilities conflicting with NoCheat
|
||||
= Fixed memory leak with mob spawner tracking
|
||||
= Fixed /mcability not respecting permissions
|
||||
= Prettied up new config files
|
||||
= Various skill function optimizations
|
||||
! Changed how mcMMO calculates distance between two points (optimizations)
|
||||
! Changed how mcMMO handles MySQL connections (optimizations)
|
||||
! Changed the description /mcmmo provides to be more up to date and relevant
|
||||
! Changed mcMMO user information to be stored for 2 minutes after log out to reduce lag on rejoins
|
||||
! Changed Food+ to be named Farmer's Diet in Herbalism
|
||||
! Changed default values of Woodcutting XP tables
|
||||
! Changed 'Pine' to be renamed 'Oak' in Woodcutting XP tables
|
||||
! Changed the name of Unarmed Apprentice/Mastery to Iron Arm Style
|
||||
! Changed Axes to gain bonus damage every 50 skill levels
|
||||
! Changed Unarmed to start with a +3 DMG (1 Heart = 2 DMG) bonus from Iron Arm Style to make leveling it more viable
|
||||
! Changed Unarmed to gain bonus damage every 50 skill levels
|
||||
! Changed Unarmed to gain more bonus damage total than before
|
||||
! Changed Unarmed to have a max disarm chance of 33.3% rather than 25%
|
||||
! Changed Tree Feller to take down entire trees
|
||||
! Changed mob spawn tracking to use Unique Entity ID instead of Entity Object
|
||||
! Changed stats command name to mcstats for better plugin compatibility
|
||||
! Changed god mode to turn off if player enters world where he does not have mcgod permission
|
||||
! Changed Taming to also gain XP from animal taming
|
||||
! Changed Swords Bleeding effect to never kill
|
||||
! Changed Bleeding to never go beyond 10 ticks
|
||||
! Changed to use Bukkit's built-in ignoreCancelledEvents system
|
||||
! Changed chat logging for /p & /a
|
||||
! Changed Tree Feller to use per-use ArrayList
|
||||
- Removed /mcstats console functionality
|
||||
- Removed /whois command (replaced with /inspect which has similar functionality)
|
||||
- Removed Master/Apprentice chat notifications to reduce spam
|
||||
- Removed MySpawn system (You can still use Chimaera Wings) due to being outdated and unwanted
|
||||
- Removed duplicate settings in config.yml
|
||||
- Removed unused settings from config.yml (HP Regen)
|
||||
- Removed Nether Brick from Mining XP Tables
|
||||
- Removed Stone Brick from Mining XP Tables
|
||||
|
||||
Version 1.2.12
|
||||
- Fixed issue that caused terrible MySQL performance and negative XP on levelup (Issue #134)
|
||||
- Fixed addxp command taking xprate and skill modifiers into account
|
||||
@@ -11,7 +100,7 @@ Version 1.2.12
|
||||
- Fixed error with Skull Splitter / Serrated Strikes that caused server instability and log spam
|
||||
- Fixed config.yml not having values for End Stone & other new mining blocks
|
||||
- Fixed Green Thumb/Green Terra not correctly planting wheat (Issue #133)
|
||||
|
||||
|
||||
Version 1.2.11
|
||||
- Removed legacy Permission & PEX dependency. (PEX still works fine with mcMMO)
|
||||
- Made Smooth Brick to Mossy Brick and Dirt to Grass for green thumb configurable (Issue #120)
|
||||
|
||||
20
pom.xml
20
pom.xml
@@ -2,11 +2,12 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||
<artifactId>mcMMO</artifactId>
|
||||
<version>1.3.02</version>
|
||||
<name>mcMMO</name>
|
||||
<url>https://github.com/TheYeti/mcMMO</url>
|
||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||
<issueManagement>
|
||||
<system>GitHub</system>
|
||||
<url>https://github.com/TheYeti/mcMMO/issues</url>
|
||||
<url>http://issues.mcmmo.org</url>
|
||||
<system>JIRA</system>
|
||||
</issueManagement>
|
||||
<build>
|
||||
<finalName>mcMMO</finalName>
|
||||
@@ -94,10 +95,20 @@
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</snapshots>
|
||||
<id>bukkit-repo</id>
|
||||
<url>http://repo.bukkit.org/content/groups/public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</snapshots>
|
||||
<id>spout-repo</id>
|
||||
<url>http://nexus.getspout.org/content/groups/public/</url>
|
||||
</repository>
|
||||
@@ -106,7 +117,7 @@
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<version>1.1-R5-SNAPSHOT</version>
|
||||
<version>LATEST</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
@@ -121,5 +132,4 @@
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<version>1.2.12</version>
|
||||
</project>
|
||||
|
||||
@@ -1,31 +1,33 @@
|
||||
/*
|
||||
This file is part of mcMMO.
|
||||
|
||||
mcMMO 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
mcMMO 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
mcMMO 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.
|
||||
mcMMO 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 mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.gmail.nossr50;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.events.FakeEntityDamageByEntityEvent;
|
||||
import com.gmail.nossr50.events.FakeEntityDamageEvent;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
import com.gmail.nossr50.skills.Acrobatics;
|
||||
@@ -38,389 +40,396 @@ import com.gmail.nossr50.skills.Unarmed;
|
||||
|
||||
public class Combat
|
||||
{
|
||||
public static void combatChecks(EntityDamageEvent event, mcMMO pluginx)
|
||||
public static void combatChecks(EntityDamageByEntityEvent event, mcMMO pluginx)
|
||||
{
|
||||
if(event.isCancelled() || event.getDamage() == 0)
|
||||
if(event.getDamage() == 0 || event.getEntity().isDead())
|
||||
return;
|
||||
|
||||
if(event instanceof EntityDamageByEntityEvent)
|
||||
{
|
||||
/*
|
||||
* OFFENSIVE CHECKS FOR PLAYERS VERSUS ENTITIES
|
||||
*/
|
||||
if(((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
|
||||
{
|
||||
//Declare Things
|
||||
EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
|
||||
Player attacker = (Player)((EntityDamageByEntityEvent) event).getDamager();
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
|
||||
//Damage modifiers
|
||||
if(mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0) //Unarmed
|
||||
Unarmed.unarmedBonus(attacker, eventb);
|
||||
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker) && Users.getProfile(attacker).getSkillLevel(SkillType.AXES) >= 500)
|
||||
{
|
||||
int damage = event.getDamage()+4;
|
||||
event.setDamage(damage);
|
||||
}
|
||||
|
||||
//If there are any abilities to activate
|
||||
combatAbilityChecks(attacker, PPa, pluginx);
|
||||
|
||||
//Check for offensive procs
|
||||
if(!(((EntityDamageByEntityEvent) event).getDamager() instanceof Arrow))
|
||||
{
|
||||
if(mcPermissions.getInstance().axes(attacker))
|
||||
Axes.axeCriticalCheck(attacker, eventb, pluginx); //Axe Critical Checks
|
||||
|
||||
if(!pluginx.misc.bleedTracker.contains((LivingEntity) event.getEntity())) //Swords Bleed
|
||||
Swords.bleedCheck(attacker, (LivingEntity)event.getEntity(), pluginx);
|
||||
|
||||
if(event.getEntity() instanceof Player && mcPermissions.getInstance().unarmed(attacker))
|
||||
{
|
||||
Player defender = (Player)event.getEntity();
|
||||
Unarmed.disarmProcCheck(attacker, defender);
|
||||
}
|
||||
|
||||
//Modify the event damage if Attacker is Berserk
|
||||
if(PPa.getBerserkMode())
|
||||
event.setDamage(event.getDamage() + (event.getDamage() / 2));
|
||||
|
||||
//Handle Ability Interactions
|
||||
if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand()))
|
||||
Axes.applyAoeDamage(attacker, eventb, pluginx);
|
||||
if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand()))
|
||||
Swords.applySerratedStrikes(attacker, eventb, pluginx);
|
||||
|
||||
//Experience
|
||||
if(event.getEntity() instanceof Player)
|
||||
{
|
||||
Player defender = (Player)event.getEntity();
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
if(attacker != null && defender != null && LoadProperties.pvpxp)
|
||||
{
|
||||
if(System.currentTimeMillis() >= (PPd.getRespawnATS()*1000) + 5000
|
||||
&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis()
|
||||
&& defender.getHealth() >= 1)
|
||||
{
|
||||
//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the mob
|
||||
int hpLeft = defender.getHealth(), xpinc = 0;
|
||||
|
||||
if(hpLeft < event.getDamage())
|
||||
{
|
||||
if(hpLeft > 0)
|
||||
xpinc = hpLeft;
|
||||
else
|
||||
xpinc = 0;
|
||||
} else
|
||||
xpinc = event.getDamage();
|
||||
|
||||
int xp = (int) (xpinc * 2 * LoadProperties.pvpxprewardmodifier);
|
||||
|
||||
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
|
||||
PPa.addXP(SkillType.AXES, xp*10, attacker);
|
||||
if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
|
||||
PPa.addXP(SkillType.SWORDS, xp*10, attacker);
|
||||
if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
|
||||
PPa.addXP(SkillType.UNARMED, xp*10, attacker);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!pluginx.misc.mobSpawnerList.contains(event.getEntity()))
|
||||
{
|
||||
int xp = getXp(event.getEntity(), event);
|
||||
//Declare Things
|
||||
Entity damager = event.getDamager();
|
||||
LivingEntity target = (LivingEntity) event.getEntity();
|
||||
int damage = event.getDamage();
|
||||
|
||||
if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
|
||||
PPa.addXP(SkillType.SWORDS, xp*10, attacker);
|
||||
else if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
|
||||
PPa.addXP(SkillType.AXES, xp*10, attacker);
|
||||
else if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
|
||||
PPa.addXP(SkillType.UNARMED, xp*10, attacker);
|
||||
}
|
||||
Skills.XpCheckAll(attacker);
|
||||
|
||||
if(event.getEntity() instanceof Wolf)
|
||||
{
|
||||
Wolf theWolf = (Wolf)event.getEntity();
|
||||
|
||||
if(attacker.getItemInHand().getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
if(theWolf.isTamed())
|
||||
{
|
||||
attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
|
||||
mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(theWolf)})+" "+
|
||||
mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {theWolf.getHealth()}));
|
||||
}
|
||||
else
|
||||
{
|
||||
attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
|
||||
mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {theWolf.getHealth()}));
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* PLAYER VERSUS ENTITIES
|
||||
*/
|
||||
if(damager instanceof Player)
|
||||
{
|
||||
Player attacker = (Player) event.getDamager();
|
||||
ItemStack itemInHand = attacker.getItemInHand();
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
|
||||
//If there are any abilities to activate
|
||||
combatAbilityChecks(attacker, PPa);
|
||||
|
||||
//Damage modifiers and proc checks
|
||||
if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker))
|
||||
{
|
||||
if(!pluginx.misc.bleedTracker.contains(target)) //Bleed
|
||||
Swords.bleedCheck(attacker, target, pluginx);
|
||||
|
||||
if (PPa.getSerratedStrikesMode())
|
||||
Swords.applySerratedStrikes(attacker, event, pluginx);
|
||||
|
||||
if(target instanceof Player)
|
||||
PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.SWORDS);
|
||||
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
|
||||
PvEExperienceGain(attacker, PPa, target, damage, SkillType.SWORDS);
|
||||
}
|
||||
else if(m.isAxes(itemInHand) && mcPermissions.getInstance().axes(attacker))
|
||||
{
|
||||
Axes.axesBonus(attacker, event);
|
||||
|
||||
Axes.axeCriticalCheck(attacker, event, pluginx); //Critical hit
|
||||
|
||||
//Impact
|
||||
Axes.impact(attacker, target, event);
|
||||
|
||||
if (PPa.getSkullSplitterMode())
|
||||
Axes.applyAoeDamage(attacker, event, pluginx);
|
||||
|
||||
if(target instanceof Player)
|
||||
PvPExperienceGain(attacker, PPa, (Player) target, event.getDamage(), SkillType.AXES);
|
||||
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
|
||||
PvEExperienceGain(attacker, PPa, target, event.getDamage(), SkillType.AXES);
|
||||
}
|
||||
else if(itemInHand.getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker)) //Unarmed
|
||||
{
|
||||
Unarmed.unarmedBonus(attacker, event);
|
||||
if(PPa.getBerserkMode())
|
||||
event.setDamage(event.getDamage() + (event.getDamage() / 2));
|
||||
|
||||
if(target instanceof Player)
|
||||
Unarmed.disarmProcCheck(attacker, (Player) target); //Disarm
|
||||
|
||||
if(target instanceof Player)
|
||||
PvPExperienceGain(attacker, PPa, (Player) target, event.getDamage(), SkillType.UNARMED);
|
||||
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
|
||||
PvEExperienceGain(attacker, PPa, target, event.getDamage(), SkillType.UNARMED);
|
||||
}
|
||||
|
||||
//Player use bone on wolf.
|
||||
else if(target instanceof Wolf)
|
||||
{
|
||||
Wolf wolf = (Wolf) target;
|
||||
|
||||
if(itemInHand.getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
if(wolf.isTamed())
|
||||
attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
|
||||
mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)})+" "+
|
||||
mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {wolf.getHealth()}));
|
||||
else
|
||||
attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
|
||||
mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {wolf.getHealth()}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TAMING (WOLVES VERSUS ENTITIES)
|
||||
*/
|
||||
else if(damager instanceof Wolf)
|
||||
{
|
||||
Wolf wolf = (Wolf) damager;
|
||||
|
||||
if (wolf.isTamed() && (wolf.getOwner() instanceof Player))
|
||||
{
|
||||
Player master = (Player) wolf.getOwner();
|
||||
PlayerProfile PPo = Users.getProfile(master);
|
||||
if(mcPermissions.getInstance().taming(master))
|
||||
{
|
||||
//Fast Food Service
|
||||
Taming.fastFoodService(PPo, wolf, event);
|
||||
|
||||
//Sharpened Claws
|
||||
Taming.sharpenedClaws(PPo, event);
|
||||
|
||||
//Gore
|
||||
Taming.gore(PPo, event, master, pluginx);
|
||||
|
||||
//Reward XP
|
||||
Taming.rewardXp(event, pluginx, master);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
|
||||
*/
|
||||
if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf)
|
||||
{
|
||||
EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
|
||||
Wolf theWolf = (Wolf) eventb.getDamager();
|
||||
if(theWolf.isTamed() && Taming.ownerOnline(theWolf, pluginx))
|
||||
{
|
||||
if(Taming.getOwner(theWolf, pluginx) == null)
|
||||
return;
|
||||
Player master = Taming.getOwner(theWolf, pluginx);
|
||||
PlayerProfile PPo = Users.getProfile(master);
|
||||
|
||||
if(mcPermissions.getInstance().taming(master))
|
||||
{
|
||||
//Sharpened Claws
|
||||
if(PPo.getSkillLevel(SkillType.TAMING) >= 750)
|
||||
{
|
||||
event.setDamage(event.getDamage() + 2);
|
||||
}
|
||||
|
||||
//Gore
|
||||
if(Math.random() * 1000 <= PPo.getSkillLevel(SkillType.TAMING))
|
||||
{
|
||||
event.setDamage(event.getDamage() * 2);
|
||||
|
||||
if(event.getEntity() instanceof Player)
|
||||
{
|
||||
Player target = (Player)event.getEntity();
|
||||
target.sendMessage(mcLocale.getString("Combat.StruckByGore")); //$NON-NLS-1$
|
||||
Users.getProfile(target).setBleedTicks(2);
|
||||
}
|
||||
else
|
||||
pluginx.misc.addToBleedQue((LivingEntity) event.getEntity());
|
||||
|
||||
master.sendMessage(mcLocale.getString("Combat.Gore")); //$NON-NLS-1$
|
||||
}
|
||||
if(!event.getEntity().isDead() && !pluginx.misc.mobSpawnerList.contains(event.getEntity()))
|
||||
{
|
||||
int xp = getXp(event.getEntity(), event);
|
||||
Users.getProfile(master).addXP(SkillType.TAMING, xp*10, master);
|
||||
|
||||
if(event.getEntity() instanceof Player)
|
||||
{
|
||||
xp = (event.getDamage() * 2);
|
||||
Users.getProfile(master).addXP(SkillType.TAMING, (int)((xp*10)*1.5), master);
|
||||
}
|
||||
Skills.XpCheckSkill(SkillType.TAMING, master);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Another offensive check for Archery
|
||||
if(event instanceof EntityDamageByEntityEvent && event.getCause() == DamageCause.PROJECTILE && ((EntityDamageByEntityEvent) event).getDamager() instanceof Arrow)
|
||||
else if(damager instanceof Arrow)
|
||||
archeryCheck((EntityDamageByEntityEvent)event, pluginx);
|
||||
|
||||
|
||||
/*
|
||||
* DEFENSIVE CHECKS
|
||||
*/
|
||||
if(event instanceof EntityDamageByEntityEvent && event.getEntity() instanceof Player)
|
||||
if(target instanceof Player)
|
||||
{
|
||||
Swords.counterAttackChecks((EntityDamageByEntityEvent)event);
|
||||
Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event);
|
||||
Swords.counterAttackChecks(event);
|
||||
Acrobatics.dodgeChecks(event);
|
||||
}
|
||||
/*
|
||||
|
||||
/*
|
||||
* DEFENSIVE CHECKS FOR WOLVES
|
||||
*/
|
||||
|
||||
if(event.getEntity() instanceof Wolf)
|
||||
{
|
||||
Wolf theWolf = (Wolf) event.getEntity();
|
||||
|
||||
if(theWolf.isTamed() && Taming.ownerOnline(theWolf, pluginx))
|
||||
{
|
||||
if(Taming.getOwner(theWolf, pluginx) == null)
|
||||
return;
|
||||
|
||||
Player master = Taming.getOwner(theWolf, pluginx);
|
||||
PlayerProfile PPo = Users.getProfile(master);
|
||||
if(mcPermissions.getInstance().taming(master))
|
||||
{
|
||||
//Shock-Proof
|
||||
if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getSkillLevel(SkillType.TAMING) >= 500)
|
||||
{
|
||||
event.setDamage(2);
|
||||
}
|
||||
|
||||
//Thick Fur
|
||||
if(PPo.getSkillLevel(SkillType.TAMING) >= 250)
|
||||
event.setDamage(event.getDamage() / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
//else if(target instanceof Wolf)
|
||||
//{
|
||||
// Wolf wolf = (Wolf) target;
|
||||
// if(wolf.isTamed() && (wolf.getOwner() instanceof Player))
|
||||
// Taming.preventDamage(event, pluginx);
|
||||
//}
|
||||
}
|
||||
|
||||
public static void combatAbilityChecks(Player attacker, PlayerProfile PPa, Plugin pluginx)
|
||||
public static void combatAbilityChecks(Player attacker, PlayerProfile PPa)
|
||||
{
|
||||
//Check to see if any abilities need to be activated
|
||||
if(PPa.getAxePreparationMode())
|
||||
Axes.skullSplitterCheck(attacker);
|
||||
Skills.abilityCheck(attacker, SkillType.AXES);
|
||||
if(PPa.getSwordsPreparationMode())
|
||||
Swords.serratedStrikesActivationCheck(attacker);
|
||||
Skills.abilityCheck(attacker, SkillType.SWORDS);
|
||||
if(PPa.getFistsPreparationMode())
|
||||
Unarmed.berserkActivationCheck(attacker);
|
||||
Skills.abilityCheck(attacker, SkillType.UNARMED);
|
||||
}
|
||||
|
||||
public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx)
|
||||
{
|
||||
Arrow arrow = (Arrow)event.getDamager();
|
||||
Entity y = arrow.getShooter();
|
||||
Entity x = event.getEntity();
|
||||
if(x instanceof Player)
|
||||
{
|
||||
Player defender = (Player)x;
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
if(PPd == null)
|
||||
Users.addUser(defender);
|
||||
if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0)
|
||||
{
|
||||
if(defender != null && PPd.getSkillLevel(SkillType.UNARMED) >= 1000)
|
||||
{
|
||||
if(Math.random() * 1000 <= 500)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
} else if(defender != null && Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* If attacker is player
|
||||
*/
|
||||
if(y instanceof Player)
|
||||
{
|
||||
Player attacker = (Player)y;
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
if(mcPermissions.getInstance().archery(attacker))
|
||||
{
|
||||
Archery.trackArrows(pluginx, x, event, attacker);
|
||||
|
||||
/*
|
||||
* IGNITION
|
||||
*/
|
||||
Archery.ignitionCheck(x, event, attacker);
|
||||
/*
|
||||
* Defender is Monster
|
||||
*/
|
||||
if(!pluginx.misc.mobSpawnerList.contains(x))
|
||||
{
|
||||
int xp = getXp(event.getEntity(), event);
|
||||
PPa.addXP(SkillType.ARCHERY, xp*10, attacker);
|
||||
}
|
||||
/*
|
||||
* Attacker is Player
|
||||
*/
|
||||
if(x instanceof Player){
|
||||
Player defender = (Player)x;
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
/*
|
||||
* Stuff for the daze proc
|
||||
*/
|
||||
if(PPa.inParty() && PPd.inParty())
|
||||
{
|
||||
if(Party.getInstance().inSameParty(defender, attacker))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* PVP XP
|
||||
*/
|
||||
if(LoadProperties.pvpxp && !Party.getInstance().inSameParty(attacker, defender)
|
||||
&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis() && !attacker.getName().equals(defender.getName()))
|
||||
{
|
||||
int xp = (int) ((event.getDamage() * 2) * 10);
|
||||
PPa.addXP(SkillType.ARCHERY, xp, attacker);
|
||||
}
|
||||
/*
|
||||
* DAZE PROC
|
||||
*/
|
||||
Archery.dazeCheck(defender, attacker);
|
||||
}
|
||||
}
|
||||
Skills.XpCheckSkill(SkillType.ARCHERY, attacker);
|
||||
}
|
||||
}
|
||||
|
||||
public static void dealDamage(LivingEntity target, int dmg) {
|
||||
target.damage(dmg);
|
||||
}
|
||||
|
||||
public static boolean pvpAllowed(EntityDamageByEntityEvent event, World world)
|
||||
{
|
||||
if(!event.getEntity().getWorld().getPVP())
|
||||
return false;
|
||||
//If it made it this far, pvp is enabled
|
||||
return true;
|
||||
}
|
||||
public static int getXp(Entity entity, EntityDamageEvent event)
|
||||
{
|
||||
int xp = 0;
|
||||
if(entity instanceof LivingEntity)
|
||||
{
|
||||
LivingEntity le = (LivingEntity)entity;
|
||||
//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the entity
|
||||
int hpLeft = le.getHealth(), xpinc = 0;
|
||||
Entity y = arrow.getShooter();
|
||||
Entity x = event.getEntity();
|
||||
if(x instanceof Player)
|
||||
{
|
||||
Player defender = (Player)x;
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
if(PPd == null)
|
||||
Users.addUser(defender);
|
||||
if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0)
|
||||
{
|
||||
if(defender != null && PPd.getSkillLevel(SkillType.UNARMED) >= 1000)
|
||||
{
|
||||
if(Math.random() * 1000 <= 500)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
} else if(defender != null && Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* If attacker is player
|
||||
*/
|
||||
if(y instanceof Player)
|
||||
{
|
||||
Player attacker = (Player)y;
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
int damage = event.getDamage();
|
||||
if(mcPermissions.getInstance().archery(attacker) && damage > 0)
|
||||
{
|
||||
Archery.trackArrows(pluginx, x, PPa);
|
||||
|
||||
if(hpLeft < event.getDamage())
|
||||
{
|
||||
if(hpLeft > 0)
|
||||
xpinc = hpLeft;
|
||||
else
|
||||
xpinc = 0;
|
||||
}
|
||||
/*
|
||||
* IGNITION
|
||||
*/
|
||||
Archery.ignitionCheck(x, attacker);
|
||||
/*
|
||||
* Defender is Monster
|
||||
*/
|
||||
if(!pluginx.misc.mobSpawnerList.contains(x.getEntityId()))
|
||||
{
|
||||
int xp = getXp(x, damage);
|
||||
PPa.addXP(SkillType.ARCHERY, xp*10, attacker);
|
||||
}
|
||||
/*
|
||||
* Attacker is Player
|
||||
*/
|
||||
if(x instanceof Player){
|
||||
Player defender = (Player)x;
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
/*
|
||||
* Stuff for the daze proc
|
||||
*/
|
||||
if(PPa.inParty() && PPd.inParty())
|
||||
{
|
||||
if(Party.getInstance().inSameParty(defender, attacker))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* PVP XP
|
||||
*/
|
||||
if(LoadProperties.pvpxp && ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis() && !attacker.getName().equals(defender.getName()))
|
||||
{
|
||||
int xp = (int) ((damage * 2) * 10);
|
||||
PPa.addXP(SkillType.ARCHERY, xp, attacker);
|
||||
}
|
||||
/*
|
||||
* DAZE PROC
|
||||
*/
|
||||
Archery.dazeCheck(defender, attacker);
|
||||
}
|
||||
}
|
||||
Skills.XpCheckSkill(SkillType.ARCHERY, attacker);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to damage target for value dmg with reason CUSTOM
|
||||
*
|
||||
* @param target LivingEntity which to attempt to damage
|
||||
* @param dmg Amount of damage to attempt to do
|
||||
*/
|
||||
public static void dealDamage(LivingEntity target, int dmg){
|
||||
dealDamage(target, dmg, EntityDamageEvent.DamageCause.CUSTOM);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to damage target for value dmg with reason cause
|
||||
*
|
||||
* @param target LivingEntity which to attempt to damage
|
||||
* @param dmg Amount of damage to attempt to do
|
||||
* @param cause DamageCause to pass to damage event
|
||||
*/
|
||||
public static void dealDamage(LivingEntity target, int dmg, DamageCause cause) {
|
||||
if(LoadProperties.eventCallback) {
|
||||
EntityDamageEvent ede = (EntityDamageEvent) new FakeEntityDamageEvent(target, cause, dmg);
|
||||
Bukkit.getPluginManager().callEvent(ede);
|
||||
if(ede.isCancelled()) return;
|
||||
|
||||
target.damage(ede.getDamage());
|
||||
} else {
|
||||
target.damage(dmg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to damage target for value dmg with reason ENTITY_ATTACK with damager attacker
|
||||
*
|
||||
* @param target LivingEntity which to attempt to damage
|
||||
* @param dmg Amount of damage to attempt to do
|
||||
* @param attacker Player to pass to event as damager
|
||||
*/
|
||||
public static void dealDamage(LivingEntity target, int dmg, Player attacker) {
|
||||
if(LoadProperties.eventCallback) {
|
||||
EntityDamageEvent ede = (EntityDamageByEntityEvent) new FakeEntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg);
|
||||
Bukkit.getPluginManager().callEvent(ede);
|
||||
if(ede.isCancelled()) return;
|
||||
|
||||
target.damage(ede.getDamage());
|
||||
} else {
|
||||
target.damage(dmg);
|
||||
}
|
||||
}
|
||||
|
||||
private static void PvPExperienceGain(Player attacker, PlayerProfile PPa, Player defender, int damage, SkillType skillType)
|
||||
{
|
||||
if (!LoadProperties.pvpxp)
|
||||
return;
|
||||
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
|
||||
if(System.currentTimeMillis() >= (PPd.getRespawnATS()*1000) + 5000
|
||||
&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis()
|
||||
&& defender.getHealth() >= 1)
|
||||
{
|
||||
//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the mob
|
||||
int hpLeft = defender.getHealth(), xpinc = 0;
|
||||
|
||||
if(hpLeft < damage)
|
||||
{
|
||||
if(hpLeft > 0)
|
||||
xpinc = hpLeft;
|
||||
else
|
||||
xpinc = 0;
|
||||
} else
|
||||
xpinc = damage;
|
||||
|
||||
int xp = (int) (xpinc * 2 * LoadProperties.pvpxprewardmodifier);
|
||||
PPa.addXP(skillType, xp*10, attacker);
|
||||
Skills.XpCheckSkill(skillType, attacker);
|
||||
}
|
||||
}
|
||||
|
||||
private static void PvEExperienceGain(Player attacker, PlayerProfile PPa, LivingEntity target, int damage, SkillType skillType)
|
||||
{
|
||||
int xp = getXp(target, damage);
|
||||
PPa.addXP(skillType, xp*10, attacker);
|
||||
Skills.XpCheckSkill(skillType, attacker);
|
||||
}
|
||||
|
||||
public static int getXp(Entity entity, int damage)
|
||||
{
|
||||
int xp = 0;
|
||||
if(entity instanceof LivingEntity)
|
||||
{
|
||||
LivingEntity le = (LivingEntity) entity;
|
||||
//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the entity
|
||||
int hpLeft = le.getHealth();
|
||||
int xpinc = 0;
|
||||
|
||||
if(hpLeft < damage)
|
||||
{
|
||||
if(hpLeft > 0)
|
||||
xpinc = hpLeft;
|
||||
else
|
||||
xpinc = 0;
|
||||
}
|
||||
else
|
||||
xpinc = event.getDamage();
|
||||
xpinc = damage;
|
||||
|
||||
if(entity instanceof Animals)
|
||||
xp = (int) (xpinc * LoadProperties.animalXP);
|
||||
else
|
||||
{
|
||||
xp = (int) (xpinc * 1);
|
||||
} else
|
||||
{
|
||||
if(entity instanceof Enderman)
|
||||
xp = (xpinc * 2);
|
||||
else if(entity instanceof Creeper)
|
||||
xp = (xpinc * 4);
|
||||
else if(entity instanceof Silverfish)
|
||||
xp = (xpinc * 3);
|
||||
else if(entity instanceof CaveSpider)
|
||||
xp = (xpinc * 3);
|
||||
else if(entity instanceof Spider)
|
||||
xp = (xpinc * 3);
|
||||
else if(entity instanceof Skeleton)
|
||||
xp = (xpinc * 2);
|
||||
else if(entity instanceof Zombie)
|
||||
xp = (xpinc * 2);
|
||||
else if(entity instanceof PigZombie)
|
||||
xp = (xpinc * 3);
|
||||
else if(entity instanceof Slime)
|
||||
xp = (xpinc * 2);
|
||||
else if(entity instanceof Ghast)
|
||||
xp = (xpinc * 3);
|
||||
else if(entity instanceof Blaze)
|
||||
xp = (xpinc * 3);
|
||||
else if(entity instanceof EnderDragon)
|
||||
xp = (xpinc * 8);
|
||||
else if(entity instanceof MagmaCube)
|
||||
xp = (xpinc * 2);
|
||||
EntityType type = entity.getType();
|
||||
switch(type){
|
||||
case BLAZE:
|
||||
xp = (int) (xpinc * LoadProperties.blazeXP);
|
||||
break;
|
||||
case CAVE_SPIDER:
|
||||
xp = (int) (xpinc * LoadProperties.cavespiderXP);
|
||||
break;
|
||||
case CREEPER:
|
||||
xp = (int) (xpinc * LoadProperties.creeperXP);
|
||||
break;
|
||||
case ENDER_DRAGON:
|
||||
xp = (int) (xpinc * LoadProperties.enderdragonXP);
|
||||
break;
|
||||
case ENDERMAN:
|
||||
xp = (int) (xpinc * LoadProperties.endermanXP);
|
||||
break;
|
||||
case GHAST:
|
||||
xp = (int) (xpinc * LoadProperties.ghastXP);
|
||||
break;
|
||||
case MAGMA_CUBE:
|
||||
xp = (int) (xpinc * LoadProperties.magmacubeXP);
|
||||
break;
|
||||
case PIG_ZOMBIE:
|
||||
xp = (int) (xpinc * LoadProperties.pigzombieXP);
|
||||
break;
|
||||
case SILVERFISH:
|
||||
xp = (int) (xpinc * LoadProperties.silverfishXP);
|
||||
break;
|
||||
case SKELETON:
|
||||
xp = (int) (xpinc * LoadProperties.skeletonXP);
|
||||
break;
|
||||
case SLIME:
|
||||
xp = (int) (xpinc * LoadProperties.slimeXP);
|
||||
break;
|
||||
case SPIDER:
|
||||
xp = (int) (xpinc * LoadProperties.spiderXP);
|
||||
break;
|
||||
case ZOMBIE:
|
||||
xp = (int) (xpinc * LoadProperties.zombieXP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return xp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,36 @@ import com.gmail.nossr50.config.LoadProperties;
|
||||
public class Database {
|
||||
|
||||
private mcMMO plugin;
|
||||
private String connectionString;
|
||||
private String connectionString = "jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass;
|
||||
private boolean isConnected = false;
|
||||
private Connection conn = null;
|
||||
|
||||
public void connect()
|
||||
{
|
||||
try
|
||||
{
|
||||
System.out.println("[mcMMO] Attempting connection to MySQL...");
|
||||
conn = DriverManager.getConnection(connectionString);
|
||||
isConnected = true;
|
||||
System.out.println("[mcMMO] Connection to MySQL established!");
|
||||
} catch (SQLException ex)
|
||||
{
|
||||
isConnected = false;
|
||||
ex.printStackTrace();
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isConnected()
|
||||
{
|
||||
return isConnected;
|
||||
}
|
||||
|
||||
public Database(mcMMO instance) {
|
||||
connect(); //Connect to MySQL
|
||||
this.plugin = instance;
|
||||
this.connectionString = "jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass;
|
||||
// Load the driver instance
|
||||
try {
|
||||
Class.forName("com.mysql.jdbc.Driver");
|
||||
@@ -71,6 +96,7 @@ public class Database {
|
||||
+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||
+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||
+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||
+ "`blast_mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
||||
Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "skills` (`user_id` int(10) unsigned NOT NULL,"
|
||||
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||
@@ -98,27 +124,22 @@ public class Database {
|
||||
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
||||
Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "spawn` (`user_id` int(10) NOT NULL,"
|
||||
+ "`x` int(64) NOT NULL DEFAULT '0',"
|
||||
+ "`y` int(64) NOT NULL DEFAULT '0',"
|
||||
+ "`z` int(64) NOT NULL DEFAULT '0',"
|
||||
+ "`world` varchar(50) NOT NULL DEFAULT '',"
|
||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
||||
|
||||
Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"skills2`");
|
||||
Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"experience2`");
|
||||
Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"spawn`");
|
||||
|
||||
checkDatabaseStructure();
|
||||
checkDatabaseStructureForBlastMining();
|
||||
}
|
||||
|
||||
public void checkDatabaseStructure()
|
||||
{
|
||||
String sql = "SELECT * FROM `mcmmo_experience` ORDER BY `"+LoadProperties.MySQLtablePrefix+"experience`.`fishing` ASC LIMIT 0 , 30";
|
||||
String sql = "SELECT * FROM `"+LoadProperties.MySQLtablePrefix+"experience` ORDER BY `"+LoadProperties.MySQLtablePrefix+"experience`.`fishing` ASC LIMIT 0 , 30";
|
||||
|
||||
ResultSet rs = null;
|
||||
HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
|
||||
try {
|
||||
Connection conn = DriverManager.getConnection(connectionString);
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
if (stmt.executeQuery() != null) {
|
||||
stmt.executeQuery();
|
||||
@@ -131,28 +152,64 @@ public class Database {
|
||||
Rows.put(rs.getRow(), Col);
|
||||
}
|
||||
}
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("Updating mcMMO MySQL tables...");
|
||||
System.out.println("Updating mcMMO MySQL tables for Fishing...");
|
||||
Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "skills` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
||||
Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
||||
}
|
||||
}
|
||||
|
||||
public void checkDatabaseStructureForBlastMining()
|
||||
{
|
||||
String sql = "SELECT * FROM `"+LoadProperties.MySQLtablePrefix+"cooldowns` ORDER BY `"+LoadProperties.MySQLtablePrefix+"cooldowns`.`blast_mining` ASC LIMIT 0 , 30";
|
||||
|
||||
ResultSet rs = null;
|
||||
HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
|
||||
try {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
if (stmt.executeQuery() != null) {
|
||||
stmt.executeQuery();
|
||||
rs = stmt.getResultSet();
|
||||
while (rs.next()) {
|
||||
ArrayList<String> Col = new ArrayList<String>();
|
||||
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
|
||||
Col.add(rs.getString(i));
|
||||
}
|
||||
Rows.put(rs.getRow(), Col);
|
||||
}
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("Updating mcMMO MySQL tables for Blast Mining...");
|
||||
Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "cooldowns` ADD `blast_mining` int(32) NOT NULL DEFAULT '0' ;");
|
||||
}
|
||||
}
|
||||
|
||||
// write query
|
||||
public boolean Write(String sql) {
|
||||
try {
|
||||
Connection conn = DriverManager.getConnection(connectionString);
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt.executeUpdate();
|
||||
conn.close();
|
||||
return true;
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
return false;
|
||||
}
|
||||
if(conn != null)
|
||||
{
|
||||
try {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt.executeUpdate();
|
||||
return true;
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
{
|
||||
isConnected = false;
|
||||
connect(); //Attempt to reconnect
|
||||
if(isConnected = true)
|
||||
{
|
||||
Write(sql); //Try the same operation again now that we are connected
|
||||
} else {
|
||||
System.out.println("[mcMMO] Unable to connect to MySQL! Make sure the SQL server is online!");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get Int
|
||||
@@ -160,26 +217,35 @@ public class Database {
|
||||
public Integer GetInt(String sql) {
|
||||
ResultSet rs = null;
|
||||
Integer result = 0;
|
||||
try {
|
||||
Connection conn = DriverManager.getConnection(connectionString);
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
if (stmt.executeQuery() != null) {
|
||||
stmt.executeQuery();
|
||||
rs = stmt.getResultSet();
|
||||
if (rs.next()) {
|
||||
result = rs.getInt(1);
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
if(conn != null)
|
||||
{
|
||||
try {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt = conn.prepareStatement(sql);
|
||||
if (stmt.executeQuery() != null) {
|
||||
stmt.executeQuery();
|
||||
rs = stmt.getResultSet();
|
||||
if (rs.next()) {
|
||||
result = rs.getInt(1);
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
}
|
||||
} else {
|
||||
isConnected = false;
|
||||
connect(); //Attempt to reconnect
|
||||
if(isConnected = true)
|
||||
{
|
||||
GetInt(sql); //Try the same operation again now that we are connected
|
||||
} else {
|
||||
System.out.println("[mcMMO] Unable to connect to MySQL! Make sure the SQL server is online!");
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -187,25 +253,35 @@ public class Database {
|
||||
public HashMap<Integer, ArrayList<String>> Read(String sql) {
|
||||
ResultSet rs = null;
|
||||
HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
|
||||
try {
|
||||
Connection conn = DriverManager.getConnection(connectionString);
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
if (stmt.executeQuery() != null) {
|
||||
stmt.executeQuery();
|
||||
rs = stmt.getResultSet();
|
||||
while (rs.next()) {
|
||||
ArrayList<String> Col = new ArrayList<String>();
|
||||
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
|
||||
Col.add(rs.getString(i));
|
||||
}
|
||||
Rows.put(rs.getRow(), Col);
|
||||
}
|
||||
}
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
if(conn != null)
|
||||
{
|
||||
try {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
if (stmt.executeQuery() != null) {
|
||||
stmt.executeQuery();
|
||||
rs = stmt.getResultSet();
|
||||
while (rs.next()) {
|
||||
ArrayList<String> Col = new ArrayList<String>();
|
||||
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
|
||||
Col.add(rs.getString(i));
|
||||
}
|
||||
Rows.put(rs.getRow(), Col);
|
||||
}
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
}
|
||||
} else {
|
||||
isConnected = false;
|
||||
connect(); //Attempt to reconnect
|
||||
if(isConnected = true)
|
||||
{
|
||||
Read(sql); //Attempt the same operation again now that we are connected
|
||||
} else {
|
||||
System.out.println("[mcMMO] Unable to connect to MySQL! Make sure the SQL server is online!");
|
||||
}
|
||||
}
|
||||
return Rows;
|
||||
}
|
||||
|
||||
@@ -16,16 +16,15 @@
|
||||
*/
|
||||
package com.gmail.nossr50;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import com.gmail.nossr50.config.*;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.*;
|
||||
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
|
||||
public class Item {
|
||||
@@ -34,41 +33,24 @@ public class Item {
|
||||
{
|
||||
ItemStack inhand = player.getItemInHand();
|
||||
if(LoadProperties.chimaeraWingEnable && inhand.getTypeId() == LoadProperties.chimaeraId)
|
||||
{
|
||||
chimaerawing(player, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void chimaerawing(Player player, Plugin plugin)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
ItemStack is = player.getItemInHand();
|
||||
Block block = player.getLocation().getBlock();
|
||||
if(mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == LoadProperties.chimaeraId)
|
||||
int chimaeraID = LoadProperties.chimaeraId;
|
||||
int itemsUsed = LoadProperties.feathersConsumedByChimaeraWing;
|
||||
if(mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == chimaeraID)
|
||||
{
|
||||
if(Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing)
|
||||
if(Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= itemsUsed)
|
||||
{
|
||||
Block derp = player.getLocation().getBlock();
|
||||
int y = derp.getY();
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory){
|
||||
if(x != null && x.getTypeId() == LoadProperties.chimaeraId){
|
||||
if(x.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing + 1)
|
||||
{
|
||||
x.setAmount(x.getAmount() - LoadProperties.feathersConsumedByChimaeraWing);
|
||||
player.getInventory().setContents(inventory);
|
||||
player.updateInventory();
|
||||
break;
|
||||
} else {
|
||||
x.setAmount(0);
|
||||
x.setTypeId(0);
|
||||
player.getInventory().setContents(inventory);
|
||||
player.updateInventory();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
player.setItemInHand(new ItemStack(chimaeraID, is.getAmount() - itemsUsed));
|
||||
|
||||
while(y < 127)
|
||||
{
|
||||
y++;
|
||||
@@ -82,23 +64,18 @@ public class Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
if(PP.getMySpawn(player) != null)
|
||||
{
|
||||
Location mySpawn = PP.getMySpawn(player);
|
||||
if(mySpawn != null){
|
||||
player.teleport(mySpawn); //Do it twice to prevent weird stuff
|
||||
player.teleport(mySpawn);
|
||||
}
|
||||
} else {
|
||||
|
||||
if(player.getBedSpawnLocation() != null && player.getBedSpawnLocation().getBlock().getType().equals(Material.BED_BLOCK))
|
||||
player.teleport(player.getBedSpawnLocation());
|
||||
else
|
||||
player.teleport(player.getWorld().getSpawnLocation());
|
||||
}
|
||||
|
||||
player.sendMessage(mcLocale.getString("Item.ChimaeraWingPass")); //$NON-NLS-1$
|
||||
} else if (!Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= 10)
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(player, PP.getRecentlyHurt(), 60)})); //$NON-NLS-1$
|
||||
} else if (is.getTypeId() == LoadProperties.chimaeraId && is.getAmount() <= 9){
|
||||
player.sendMessage(mcLocale.getString("Item.NeedFeathers")); //$NON-NLS-1$
|
||||
}
|
||||
else if (!Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= itemsUsed)
|
||||
player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(player, PP.getRecentlyHurt(), 60)})); //$NON-NLS-1$
|
||||
else if (is.getTypeId() == LoadProperties.chimaeraId && is.getAmount() <= itemsUsed)
|
||||
player.sendMessage(mcLocale.getString("Item.NeedFeathers")); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,8 +53,6 @@ public class Leaderboard
|
||||
Tree Unarmed = new Tree();
|
||||
Tree Taming = new Tree();
|
||||
Tree Fishing = new Tree();
|
||||
Tree Enchanting = new Tree();
|
||||
Tree Alchemy = new Tree();
|
||||
Tree PowerLevel = new Tree();
|
||||
|
||||
//Add Data To Trees
|
||||
@@ -148,8 +146,6 @@ public class Leaderboard
|
||||
leaderWrite(Acrobatics.inOrder(), SkillType.ACROBATICS); //$NON-NLS-1$
|
||||
leaderWrite(Taming.inOrder(), SkillType.TAMING); //$NON-NLS-1$
|
||||
leaderWrite(Fishing.inOrder(), SkillType.FISHING); //$NON-NLS-1$
|
||||
leaderWrite(Alchemy.inOrder(), SkillType.ALCHEMY); //$NON-NLS-1$
|
||||
leaderWrite(Enchanting.inOrder(), SkillType.ENCHANTING); //$NON-NLS-1$
|
||||
leaderWrite(PowerLevel.inOrder(), SkillType.ALL); //$NON-NLS-1$
|
||||
}
|
||||
public static void leaderWrite(PlayerStat[] ps, SkillType skillType)
|
||||
|
||||
@@ -25,11 +25,13 @@
|
||||
* authors and contributors and should not be interpreted as representing official policies,
|
||||
* either expressed or implied, of anybody else.
|
||||
*/
|
||||
|
||||
package com.gmail.nossr50;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
@@ -43,62 +45,19 @@ import java.net.URLConnection;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Tooling to post to metrics.griefcraft.com
|
||||
*/
|
||||
public class Metrics {
|
||||
|
||||
/**
|
||||
* Interface used to collect custom data for a plugin
|
||||
* The current revision number
|
||||
*/
|
||||
public static abstract class Plotter {
|
||||
|
||||
/**
|
||||
* Get the column name for the plotted point
|
||||
*
|
||||
* @return the plotted point's column name
|
||||
*/
|
||||
public abstract String getColumnName();
|
||||
|
||||
/**
|
||||
* Get the current value for the plotted point
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public abstract int getValue();
|
||||
|
||||
/**
|
||||
* Called after the website graphs have been updated
|
||||
*/
|
||||
public void reset() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getColumnName().hashCode() + getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (!(object instanceof Plotter)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Plotter plotter = (Plotter) object;
|
||||
return plotter.getColumnName().equals(getColumnName()) && plotter.getValue() == getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The metrics revision number
|
||||
*/
|
||||
private final static int REVISION = 4;
|
||||
private final static int REVISION = 5;
|
||||
|
||||
/**
|
||||
* The base url of the metrics domain
|
||||
@@ -116,14 +75,25 @@ public class Metrics {
|
||||
private static final String CONFIG_FILE = "plugins/PluginMetrics/config.yml";
|
||||
|
||||
/**
|
||||
* Interval of time to ping in minutes
|
||||
* The separator to use for custom data. This MUST NOT change unless you are hosting your own
|
||||
* version of metrics and want to change it.
|
||||
*/
|
||||
private static final String CUSTOM_DATA_SEPARATOR = "~~";
|
||||
|
||||
/**
|
||||
* Interval of time to ping (in minutes)
|
||||
*/
|
||||
private final static int PING_INTERVAL = 10;
|
||||
|
||||
/**
|
||||
* A map of the custom data plotters for plugins
|
||||
* A map of all of the graphs for each plugin
|
||||
*/
|
||||
private Map<Plugin, Set<Plotter>> customData = Collections.synchronizedMap(new HashMap<Plugin, Set<Plotter>>());
|
||||
private Map<Plugin, Set<Graph>> graphs = Collections.synchronizedMap(new HashMap<Plugin, Set<Graph>>());
|
||||
|
||||
/**
|
||||
* A convenient map of the default Graph objects (used by addCustomData mainly)
|
||||
*/
|
||||
private Map<Plugin, Graph> defaultGraphs = Collections.synchronizedMap(new HashMap<Plugin, Graph>());
|
||||
|
||||
/**
|
||||
* The plugin configuration file
|
||||
@@ -154,6 +124,33 @@ public class Metrics {
|
||||
guid = configuration.getString("guid");
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct and create a Graph that can be used to separate specific plotters to their own graphs
|
||||
* on the metrics website. Plotters can be added to the graph object returned.
|
||||
*
|
||||
* @param plugin
|
||||
* @param type
|
||||
* @param name
|
||||
* @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given
|
||||
*/
|
||||
public Graph createGraph(Plugin plugin, Graph.Type type, String name) {
|
||||
if (plugin == null || type == null || name == null) {
|
||||
throw new IllegalArgumentException("All arguments must not be null");
|
||||
}
|
||||
|
||||
// Construct the graph object
|
||||
Graph graph = new Graph(type, name);
|
||||
|
||||
// Get the graphs for the plugin
|
||||
Set<Graph> graphs = getOrCreateGraphs(plugin);
|
||||
|
||||
// Now we can add our graph
|
||||
graphs.add(graph);
|
||||
|
||||
// and return back
|
||||
return graph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom data plotter for a given plugin
|
||||
*
|
||||
@@ -161,14 +158,14 @@ public class Metrics {
|
||||
* @param plotter
|
||||
*/
|
||||
public void addCustomData(Plugin plugin, Plotter plotter) {
|
||||
Set<Plotter> plotters = customData.get(plugin);
|
||||
// The default graph for the plugin
|
||||
Graph graph = getOrCreateDefaultGraph(plugin);
|
||||
|
||||
if (plotters == null) {
|
||||
plotters = Collections.synchronizedSet(new LinkedHashSet<Plotter>());
|
||||
customData.put(plugin, plotters);
|
||||
}
|
||||
// Add the plotter to the graph o/
|
||||
graph.addPlotter(plotter);
|
||||
|
||||
plotters.add(plotter);
|
||||
// Ensure the default graph is included in the submitted graphs
|
||||
getOrCreateGraphs(plugin).add(graph);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,25 +173,31 @@ public class Metrics {
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public void beginMeasuringPlugin(final Plugin plugin) throws IOException {
|
||||
public void beginMeasuringPlugin(final Plugin plugin) {
|
||||
// Did we opt out?
|
||||
if (configuration.getBoolean("opt-out", false)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// First tell the server about us
|
||||
postPlugin(plugin, false);
|
||||
|
||||
// Ping the server in intervals
|
||||
// Begin hitting the server with glorious data
|
||||
plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() {
|
||||
private boolean firstPost = true;
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
postPlugin(plugin, true);
|
||||
// We use the inverse of firstPost because if it is the first time we are posting,
|
||||
// it is not a interval ping, so it evaluates to FALSE
|
||||
// Each time thereafter it will evaluate to TRUE, i.e PING!
|
||||
postPlugin(plugin, !firstPost);
|
||||
|
||||
// After the first post we set firstPost to false
|
||||
// Each post thereafter will be a ping
|
||||
firstPost = false;
|
||||
} catch (IOException e) {
|
||||
System.out.println("[Metrics] " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}, PING_INTERVAL * 1200, PING_INTERVAL * 1200);
|
||||
}, 0, PING_INTERVAL * 1200);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -203,26 +206,65 @@ public class Metrics {
|
||||
* @param plugin
|
||||
*/
|
||||
private void postPlugin(Plugin plugin, boolean isPing) throws IOException {
|
||||
// The plugin's description file containg all of the plugin data such as name, version, author, etc
|
||||
PluginDescriptionFile description = plugin.getDescription();
|
||||
|
||||
// The author string, created with description.getAuthors()
|
||||
// Authors are separated by a comma
|
||||
String authors = "";
|
||||
|
||||
// Add each author to the string
|
||||
for (String author : description.getAuthors()) {
|
||||
authors += author + ", ";
|
||||
}
|
||||
|
||||
// If there were any authors at all, we need to remove the last 2 characters
|
||||
// the last 2 characters are the last comma and space
|
||||
if (!authors.isEmpty()) {
|
||||
authors = authors.substring(0, authors.length() - 2);
|
||||
}
|
||||
|
||||
// Construct the post data
|
||||
String response = "ERR No response";
|
||||
String data = encode("guid") + '=' + encode(guid)
|
||||
+ '&' + encode("version") + '=' + encode(plugin.getDescription().getVersion())
|
||||
+ '&' + encode("server") + '=' + encode(Bukkit.getVersion())
|
||||
+ '&' + encode("players") + '=' + encode(String.valueOf(Bukkit.getServer().getOnlinePlayers().length))
|
||||
+ '&' + encode("revision") + '=' + encode(REVISION + "");
|
||||
+ encodeDataPair("authors", authors)
|
||||
+ encodeDataPair("version", description.getVersion())
|
||||
+ encodeDataPair("server", Bukkit.getVersion())
|
||||
+ encodeDataPair("players", Integer.toString(Bukkit.getServer().getOnlinePlayers().length))
|
||||
+ encodeDataPair("revision", String.valueOf(REVISION));
|
||||
|
||||
// If we're pinging, append it
|
||||
if (isPing) {
|
||||
data += '&' + encode("ping") + '=' + encode("true");
|
||||
data += encodeDataPair("ping", "true");
|
||||
}
|
||||
|
||||
// Add any custom data (if applicable)
|
||||
Set<Plotter> plotters = customData.get(plugin);
|
||||
// Add any custom data available for the plugin
|
||||
Set<Graph> graphs = getOrCreateGraphs(plugin);
|
||||
|
||||
if (plotters != null) {
|
||||
for (Plotter plotter : plotters) {
|
||||
data += "&" + encode("Custom" + plotter.getColumnName())
|
||||
+ "=" + encode(Integer.toString(plotter.getValue()));
|
||||
// Acquire a lock on the graphs, which lets us make the assumption we also lock everything
|
||||
// inside of the graph (e.g plotters)
|
||||
synchronized(graphs) {
|
||||
Iterator<Graph> iter = graphs.iterator();
|
||||
|
||||
while (iter.hasNext()) {
|
||||
Graph graph = iter.next();
|
||||
|
||||
// Because we have a lock on the graphs set already, it is reasonable to assume
|
||||
// that our lock transcends down to the individual plotters in the graphs also.
|
||||
// Because our methods are private, no one but us can reasonably access this list
|
||||
// without reflection so this is a safe assumption without adding more code.
|
||||
for (Plotter plotter : graph.getPlotters()) {
|
||||
// The key name to send to the metrics server
|
||||
// The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top
|
||||
// Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME
|
||||
String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName());
|
||||
|
||||
// The value to send, which for the foreseeable future is just the string
|
||||
// value of plotter.getValue()
|
||||
String value = Integer.toString(plotter.getValue());
|
||||
|
||||
// Add it to the http post data :)
|
||||
data += encodeDataPair(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +275,7 @@ public class Metrics {
|
||||
URLConnection connection;
|
||||
|
||||
// Mineshafter creates a socks proxy, so we can safely bypass it
|
||||
// It does not reroute POST requests so we need to go around it
|
||||
if (isMineshafterPresent()) {
|
||||
connection = url.openConnection(Proxy.NO_PROXY);
|
||||
} else {
|
||||
@@ -248,7 +291,7 @@ public class Metrics {
|
||||
|
||||
// Now read the response
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
response = reader.readLine();
|
||||
String response = reader.readLine();
|
||||
|
||||
// close resources
|
||||
writer.close();
|
||||
@@ -259,9 +302,15 @@ public class Metrics {
|
||||
} else {
|
||||
// Is this the first update this hour?
|
||||
if (response.contains("OK This is your first update this hour")) {
|
||||
if (plotters != null) {
|
||||
for (Plotter plotter : plotters) {
|
||||
plotter.reset();
|
||||
synchronized (graphs) {
|
||||
Iterator<Graph> iter = graphs.iterator();
|
||||
|
||||
while (iter.hasNext()) {
|
||||
Graph graph = iter.next();
|
||||
|
||||
for (Plotter plotter : graph.getPlotters()) {
|
||||
plotter.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -269,6 +318,42 @@ public class Metrics {
|
||||
//if (response.startsWith("OK")) - We should get "OK" followed by an optional description if everything goes right
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or create the Set of graphs for a specific plugin
|
||||
*
|
||||
* @param plugin
|
||||
* @return
|
||||
*/
|
||||
private Set<Graph> getOrCreateGraphs(Plugin plugin) {
|
||||
Set<Graph> theGraphs = graphs.get(plugin);
|
||||
|
||||
// Create the Set if it does not already exist
|
||||
if (theGraphs == null) {
|
||||
theGraphs = Collections.synchronizedSet(new HashSet<Graph>());
|
||||
graphs.put(plugin, theGraphs);
|
||||
}
|
||||
|
||||
return theGraphs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default graph for a plugin and if it does not exist, create one
|
||||
*
|
||||
* @param plugin
|
||||
* @return
|
||||
*/
|
||||
private Graph getOrCreateDefaultGraph(Plugin plugin) {
|
||||
Graph graph = defaultGraphs.get(plugin);
|
||||
|
||||
// Not yet created :(
|
||||
if (graph == null) {
|
||||
graph = new Graph(Graph.Type.Line, "Default");
|
||||
defaultGraphs.put(plugin, graph);
|
||||
}
|
||||
|
||||
return graph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if mineshafter is present. If it is, we need to bypass it to send POST requests
|
||||
*
|
||||
@@ -283,6 +368,21 @@ public class Metrics {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode a key/value data pair to be used in a HTTP post request. This INCLUDES a & so the first
|
||||
* key/value pair MUST be included manually, e.g:
|
||||
* <p>
|
||||
* String httpData = encode("guid") + "=" + encode("1234") + encodeDataPair("authors") + "..";
|
||||
* </p>
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
private static String encodeDataPair(String key, String value) throws UnsupportedEncodingException {
|
||||
return "&" + encode(key) + "=" + encode(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode text as UTF-8
|
||||
*
|
||||
@@ -293,4 +393,177 @@ public class Metrics {
|
||||
return URLEncoder.encode(text, "UTF-8");
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents a custom graph on the website
|
||||
*/
|
||||
public static class Graph {
|
||||
|
||||
/**
|
||||
* The graph's type that will be visible on the website
|
||||
*/
|
||||
public static enum Type {
|
||||
|
||||
/**
|
||||
* A simple line graph which also includes a scrollable timeline viewer to view
|
||||
* as little or as much of the data as possible.
|
||||
*/
|
||||
Line,
|
||||
|
||||
/**
|
||||
* An area graph. This is the same as a line graph except the area under the curve is shaded
|
||||
*/
|
||||
Area,
|
||||
|
||||
/**
|
||||
* A column graph, which is a graph where the data is represented by columns on the vertical axis,
|
||||
* i.e they go up and down.
|
||||
*/
|
||||
Column,
|
||||
|
||||
/**
|
||||
* A pie graph. The graph is generated by taking the data for the last hour and summing it
|
||||
* together. Then the percentage for each plotter is calculated via round( (plot / total) * 100, 2 )
|
||||
*/
|
||||
Pie
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* What the graph should be plotted as
|
||||
*/
|
||||
private final Type type;
|
||||
|
||||
/**
|
||||
* The graph's name, alphanumeric and spaces only :)
|
||||
* If it does not comply to the above when submitted, it is rejected
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* The set of plotters that are contained within this graph
|
||||
*/
|
||||
private final Set<Plotter> plotters = new LinkedHashSet<Plotter>();
|
||||
|
||||
private Graph(Type type, String name) {
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the graph's name
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a plotter to the graph, which will be used to plot entries
|
||||
*
|
||||
* @param plotter
|
||||
*/
|
||||
public void addPlotter(Plotter plotter) {
|
||||
plotters.add(plotter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a plotter from the graph
|
||||
*
|
||||
* @param plotter
|
||||
*/
|
||||
public void removePlotter(Plotter plotter) {
|
||||
plotters.remove(plotter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an <b>unmodifiable</b> set of the plotter objects in the graph
|
||||
* @return
|
||||
*/
|
||||
public Set<Plotter> getPlotters() {
|
||||
return Collections.unmodifiableSet(plotters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (type.hashCode() * 17) ^ name.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (!(object instanceof Graph)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Graph graph = (Graph) object;
|
||||
return graph.type == type && graph.name.equals(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface used to collect custom data for a plugin
|
||||
*/
|
||||
public static abstract class Plotter {
|
||||
|
||||
/**
|
||||
* The plot's name
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* Construct a plotter with the default plot name
|
||||
*/
|
||||
public Plotter() {
|
||||
this("Default");
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a plotter with a specific plot name
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public Plotter(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current value for the plotted point
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public abstract int getValue();
|
||||
|
||||
/**
|
||||
* Get the column name for the plotted point
|
||||
*
|
||||
* @return the plotted point's column name
|
||||
*/
|
||||
public String getColumnName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called after the website graphs have been updated
|
||||
*/
|
||||
public void reset() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getColumnName().hashCode() + getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (!(object instanceof Plotter)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Plotter plotter = (Plotter) object;
|
||||
return plotter.name.equals(name) && plotter.getValue() == getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -70,7 +70,8 @@ public class Users {
|
||||
|
||||
public static void addUser(Player player)
|
||||
{
|
||||
players.put(player, new PlayerProfile(player));
|
||||
if(!players.containsKey(player))
|
||||
players.put(player, new PlayerProfile(player.getName()));
|
||||
}
|
||||
public static void clearUsers()
|
||||
{
|
||||
@@ -82,26 +83,43 @@ public class Users {
|
||||
|
||||
public static void removeUser(Player player)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
if(PP != null)
|
||||
//Only remove PlayerProfile if user is offline and we have it in memory
|
||||
if(!player.isOnline() && players.containsKey(player))
|
||||
{
|
||||
PP.save();
|
||||
if(players.containsKey(player))
|
||||
players.remove(player);
|
||||
players.get(player).save();
|
||||
players.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeUserByName(String playerName)
|
||||
{
|
||||
Player target = null;
|
||||
for(Player player : players.keySet())
|
||||
{
|
||||
PlayerProfile PP = players.get(player);
|
||||
if(PP.getPlayerName().equals(playerName))
|
||||
{
|
||||
target = player;
|
||||
}
|
||||
}
|
||||
|
||||
players.remove(target);
|
||||
}
|
||||
|
||||
public static PlayerProfile getProfile(Player player){
|
||||
if(players.get(player) != null)
|
||||
return players.get(player);
|
||||
else
|
||||
{
|
||||
players.put(player, new PlayerProfile(player));
|
||||
players.put(player, new PlayerProfile(player.getName()));
|
||||
return players.get(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static PlayerProfile getOfflineProfile(String playerName){
|
||||
return new PlayerProfile(playerName, false);
|
||||
}
|
||||
|
||||
public static Users getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new Users();
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.gmail.nossr50.commands.general;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
|
||||
public class AddlevelsCommand implements CommandExecutor{
|
||||
private final mcMMO plugin;
|
||||
|
||||
public AddlevelsCommand(mcMMO instance) {
|
||||
this.plugin = instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
Player player = null;
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
if (player != null && !mcPermissions.getInstance().mmoedit(player)) {
|
||||
sender.sendMessage("This command requires permissions.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
if (args.length < 2) {
|
||||
System.out.println("Usage is /addlevels playername skillname levels");
|
||||
return true;
|
||||
} else if (args.length == 3) {
|
||||
if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
|
||||
int levels = Integer.valueOf(args[2]);
|
||||
Users.getProfile(plugin.getServer().getPlayer(args[0])).addLevels(Skills.getSkillType(args[1]), levels);
|
||||
System.out.println(args[1] + " has been modified for " + plugin.getServer().getPlayer(args[0]).getName() + ".");
|
||||
}
|
||||
} else {
|
||||
System.out.println("Usage is /addlevels playername skillname levels");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
if (!mcPermissions.getInstance().mmoedit(player)) {
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "Usage is /addlevels playername skillname levels");
|
||||
return true;
|
||||
}
|
||||
if (args.length == 3) {
|
||||
if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
|
||||
int levels = Integer.valueOf(args[2]);
|
||||
Users.getProfile(plugin.getServer().getPlayer(args[0])).addLevels(Skills.getSkillType(args[1]), levels);
|
||||
player.sendMessage(ChatColor.RED + args[1] + " has been modified.");
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
if (m.isInt(args[1]) && Skills.isSkill(args[0])) {
|
||||
int levels = Integer.valueOf(args[1]);
|
||||
PP.addLevels(Skills.getSkillType(args[0]), levels);
|
||||
player.sendMessage(ChatColor.RED + args[0] + " has been modified.");
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + "Usage is /addlevels playername skillname newvalue");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
|
||||
@@ -33,11 +32,6 @@ public class AddxpCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!LoadProperties.addxpEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
if (args.length < 2) {
|
||||
// No console aliasing yet
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.gmail.nossr50.commands.general;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class ClearmyspawnCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.clearmyspawnEnable || !LoadProperties.enableMySpawn) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
if (!mcPermissions.getInstance().mySpawn(player)) {
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
double x = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getX();
|
||||
double y = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getY();
|
||||
double z = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getZ();
|
||||
String worldname = Bukkit.getServer().getWorlds().get(0).getName();
|
||||
PP.setMySpawn(x, y, z, worldname);
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnCleared"));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package com.gmail.nossr50.commands.general;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
|
||||
public class InspectCommand implements CommandExecutor {
|
||||
private final mcMMO plugin;
|
||||
|
||||
public InspectCommand(mcMMO instance) {
|
||||
this.plugin = instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
|
||||
Player player = null;
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
if (sender instanceof Player && !mcPermissions.getInstance().inspect(player)) {
|
||||
sender.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage(ChatColor.RED + "Proper usage is /whois <playername>");
|
||||
return true;
|
||||
}
|
||||
|
||||
// if split[1] is an online player
|
||||
if (plugin.getServer().getPlayer(args[0]) != null)
|
||||
{
|
||||
Player target = plugin.getServer().getPlayer(args[0]);
|
||||
PlayerProfile PPt = Users.getProfile(target);
|
||||
|
||||
//If they are not an Op they have to be close
|
||||
if(sender instanceof Player && !player.isOp() && !m.isNear(player.getLocation(), target.getLocation(), 5))
|
||||
{
|
||||
sender.sendMessage("You are too far away to inspect that player!");
|
||||
}
|
||||
|
||||
sender.sendMessage(ChatColor.GREEN + "mcMMO Stats for " + ChatColor.YELLOW + target.getName());
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "-=GATHERING SKILLS=-");
|
||||
if (mcPermissions.getInstance().excavation(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PPt.getSkillLevel(SkillType.EXCAVATION), PPt.getSkillXpLevel(SkillType.EXCAVATION), PPt.getXpToLevel(SkillType.EXCAVATION)));
|
||||
if (mcPermissions.getInstance().fishing(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PPt.getSkillLevel(SkillType.FISHING), PPt.getSkillXpLevel(SkillType.FISHING), PPt.getXpToLevel(SkillType.FISHING)));
|
||||
if (mcPermissions.getInstance().herbalism(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PPt.getSkillLevel(SkillType.HERBALISM), PPt.getSkillXpLevel(SkillType.HERBALISM), PPt.getXpToLevel(SkillType.HERBALISM)));
|
||||
if (mcPermissions.getInstance().mining(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PPt.getSkillLevel(SkillType.MINING), PPt.getSkillXpLevel(SkillType.MINING), PPt.getXpToLevel(SkillType.MINING)));
|
||||
if (mcPermissions.getInstance().woodcutting(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PPt.getSkillLevel(SkillType.WOODCUTTING), PPt.getSkillXpLevel(SkillType.WOODCUTTING), PPt.getXpToLevel(SkillType.WOODCUTTING)));
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "-=COMBAT SKILLS=-");
|
||||
if (mcPermissions.getInstance().axes(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PPt.getSkillLevel(SkillType.AXES), PPt.getSkillXpLevel(SkillType.AXES), PPt.getXpToLevel(SkillType.AXES)));
|
||||
if (mcPermissions.getInstance().archery(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PPt.getSkillLevel(SkillType.ARCHERY), PPt.getSkillXpLevel(SkillType.ARCHERY), PPt.getXpToLevel(SkillType.ARCHERY)));
|
||||
if (mcPermissions.getInstance().swords(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PPt.getSkillLevel(SkillType.SWORDS), PPt.getSkillXpLevel(SkillType.SWORDS), PPt.getXpToLevel(SkillType.SWORDS)));
|
||||
if (mcPermissions.getInstance().taming(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PPt.getSkillLevel(SkillType.TAMING), PPt.getSkillXpLevel(SkillType.TAMING), PPt.getXpToLevel(SkillType.TAMING)));
|
||||
if (mcPermissions.getInstance().unarmed(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PPt.getSkillLevel(SkillType.UNARMED), PPt.getSkillXpLevel(SkillType.UNARMED), PPt.getXpToLevel(SkillType.UNARMED)));
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "-=MISC SKILLS=-");
|
||||
if (mcPermissions.getInstance().acrobatics(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PPt.getSkillLevel(SkillType.ACROBATICS), PPt.getSkillXpLevel(SkillType.ACROBATICS), PPt.getXpToLevel(SkillType.ACROBATICS)));
|
||||
if (mcPermissions.getInstance().repair(target))
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PPt.getSkillLevel(SkillType.REPAIR), PPt.getSkillXpLevel(SkillType.REPAIR), PPt.getXpToLevel(SkillType.REPAIR)));
|
||||
|
||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (m.getPowerLevel(target)));
|
||||
} else {
|
||||
if(sender instanceof Player && !player.isOp())
|
||||
{
|
||||
sender.sendMessage("That player is offline, inspecting offline players is limited to Ops!");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerProfile PPt = Users.getOfflineProfile(args[0]);
|
||||
|
||||
if(!PPt.isLoaded())
|
||||
{
|
||||
sender.sendMessage("Player does not exist in the database!");
|
||||
return true;
|
||||
}
|
||||
|
||||
System.out.println(PPt.isLoaded());
|
||||
|
||||
sender.sendMessage(ChatColor.GREEN + "mcMMO Stats for Offline Player " + ChatColor.YELLOW + args[0]);
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "-=GATHERING SKILLS=-");
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PPt.getSkillLevel(SkillType.EXCAVATION), PPt.getSkillXpLevel(SkillType.EXCAVATION), PPt.getXpToLevel(SkillType.EXCAVATION)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PPt.getSkillLevel(SkillType.FISHING), PPt.getSkillXpLevel(SkillType.FISHING), PPt.getXpToLevel(SkillType.FISHING)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PPt.getSkillLevel(SkillType.HERBALISM), PPt.getSkillXpLevel(SkillType.HERBALISM), PPt.getXpToLevel(SkillType.HERBALISM)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PPt.getSkillLevel(SkillType.MINING), PPt.getSkillXpLevel(SkillType.MINING), PPt.getXpToLevel(SkillType.MINING)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PPt.getSkillLevel(SkillType.WOODCUTTING), PPt.getSkillXpLevel(SkillType.WOODCUTTING), PPt.getXpToLevel(SkillType.WOODCUTTING)));
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "-=COMBAT SKILLS=-");
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PPt.getSkillLevel(SkillType.AXES), PPt.getSkillXpLevel(SkillType.AXES), PPt.getXpToLevel(SkillType.AXES)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PPt.getSkillLevel(SkillType.ARCHERY), PPt.getSkillXpLevel(SkillType.ARCHERY), PPt.getXpToLevel(SkillType.ARCHERY)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PPt.getSkillLevel(SkillType.SWORDS), PPt.getSkillXpLevel(SkillType.SWORDS), PPt.getXpToLevel(SkillType.SWORDS)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PPt.getSkillLevel(SkillType.TAMING), PPt.getSkillXpLevel(SkillType.TAMING), PPt.getXpToLevel(SkillType.TAMING)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PPt.getSkillLevel(SkillType.UNARMED), PPt.getSkillXpLevel(SkillType.UNARMED), PPt.getXpToLevel(SkillType.UNARMED)));
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "-=MISC SKILLS=-");
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PPt.getSkillLevel(SkillType.ACROBATICS), PPt.getSkillXpLevel(SkillType.ACROBATICS), PPt.getXpToLevel(SkillType.ACROBATICS)));
|
||||
sender.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PPt.getSkillLevel(SkillType.REPAIR), PPt.getSkillXpLevel(SkillType.REPAIR), PPt.getXpToLevel(SkillType.REPAIR)));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -8,47 +8,26 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
|
||||
public class StatsCommand implements CommandExecutor {
|
||||
private final mcMMO plugin;
|
||||
|
||||
public StatsCommand(mcMMO instance) {
|
||||
this.plugin = instance;
|
||||
}
|
||||
public class McstatsCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.statsEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = null;
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
if(args.length != 1) {
|
||||
sender.sendMessage("Usage: stats <username>");
|
||||
return true;
|
||||
} else {
|
||||
Player temp = plugin.getServer().getPlayer(args[0]);
|
||||
if(temp == null) {
|
||||
sender.sendMessage("Could not find player: " + args[0]);
|
||||
return true;
|
||||
} else {
|
||||
player = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
@@ -77,8 +56,6 @@ public class StatsCommand implements CommandExecutor {
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES)));
|
||||
if (mcPermissions.getInstance().archery(player))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY)));
|
||||
// if(mcPermissions.getInstance().sorcery(player))
|
||||
// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PP.getSkill("sorcery"), PP.getSkill("sorceryXP"), PP.getXpToLevel("excavation")));
|
||||
if (mcPermissions.getInstance().swords(player))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS)));
|
||||
if (mcPermissions.getInstance().taming(player))
|
||||
@@ -91,10 +68,6 @@ public class StatsCommand implements CommandExecutor {
|
||||
player.sendMessage(header + "-=MISC SKILLS=-");
|
||||
if (mcPermissions.getInstance().acrobatics(player))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS)));
|
||||
// if(mcPermissions.getInstance().alchemy(player))
|
||||
// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AlchemySkill"), PP.getSkillLevel(SkillType.ALCHEMY), PP.getSkillXpLevel(SkillType.ALCHEMY), PP.getXpToLevel(SkillType.ALCHEMY)));
|
||||
// if(mcPermissions.getInstance().enchanting(player))
|
||||
// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.EnchantingSkill"), PP.getSkillLevel(SkillType.ENCHANTING), PP.getSkillXpLevel(SkillType.ENCHANTING), PP.getXpToLevel(SkillType.ENCHANTING)));
|
||||
if (mcPermissions.getInstance().repair(player))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR)));
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
@@ -34,11 +33,6 @@ public class MmoeditCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!LoadProperties.mmoeditEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
if (args.length < 2) {
|
||||
System.out.println("Usage is /mmoedit playername skillname newvalue");
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
package com.gmail.nossr50.commands.general;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class MyspawnCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.myspawnEnable || !LoadProperties.enableMySpawn) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
if (!mcPermissions.getInstance().mySpawn(player)) {
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
if (System.currentTimeMillis() < (PP.getMySpawnATS() * 1000) + 3600000) {
|
||||
long x = (((PP.getMySpawnATS() * 1000) + 3600000) - System.currentTimeMillis());
|
||||
int y = (int) (x / 60000);
|
||||
int z = (int) ((x / 1000) - (y * 60));
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnTimeNotice", new Object[] { y, z }));
|
||||
return true;
|
||||
}
|
||||
PP.setMySpawnATS(System.currentTimeMillis());
|
||||
if (PP.getMySpawn(player) != null) {
|
||||
Location mySpawn = PP.getMySpawn(player);
|
||||
|
||||
if (mySpawn != null) {
|
||||
// It's done twice because it acts oddly when you are in another world
|
||||
player.teleport(mySpawn);
|
||||
player.teleport(mySpawn);
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnNotExist"));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
package com.gmail.nossr50.commands.general;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
|
||||
public class WhoisCommand implements CommandExecutor {
|
||||
private final mcMMO plugin;
|
||||
|
||||
public WhoisCommand(mcMMO instance) {
|
||||
this.plugin = instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.whoisEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = null;
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
if (player != null && !mcPermissions.getInstance().whois(player)) {
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length < 1) {
|
||||
player.sendMessage(ChatColor.RED + "Proper usage is /whois <playername>");
|
||||
return true;
|
||||
}
|
||||
// if split[1] is a player
|
||||
if (plugin.getServer().getPlayer(args[0]) != null) {
|
||||
Player target = plugin.getServer().getPlayer(args[0]);
|
||||
PlayerProfile PPt = Users.getProfile(target);
|
||||
|
||||
player.sendMessage(ChatColor.GREEN + "~~WHOIS RESULTS~~");
|
||||
player.sendMessage(target.getName());
|
||||
if (PPt.inParty())
|
||||
player.sendMessage("Party: " + PPt.getParty());
|
||||
player.sendMessage("Health: " + target.getHealth() + ChatColor.GRAY + " (20 is full health)");
|
||||
player.sendMessage("OP: " + target.isOp());
|
||||
player.sendMessage(ChatColor.GREEN + "mcMMO Stats for " + ChatColor.YELLOW + target.getName());
|
||||
|
||||
player.sendMessage(ChatColor.GOLD + "-=GATHERING SKILLS=-");
|
||||
if (mcPermissions.getInstance().excavation(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PPt.getSkillLevel(SkillType.EXCAVATION), PPt.getSkillXpLevel(SkillType.EXCAVATION), PPt.getXpToLevel(SkillType.EXCAVATION)));
|
||||
if (mcPermissions.getInstance().fishing(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PPt.getSkillLevel(SkillType.FISHING), PPt.getSkillXpLevel(SkillType.FISHING), PPt.getXpToLevel(SkillType.FISHING)));
|
||||
if (mcPermissions.getInstance().herbalism(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PPt.getSkillLevel(SkillType.HERBALISM), PPt.getSkillXpLevel(SkillType.HERBALISM), PPt.getXpToLevel(SkillType.HERBALISM)));
|
||||
if (mcPermissions.getInstance().mining(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PPt.getSkillLevel(SkillType.MINING), PPt.getSkillXpLevel(SkillType.MINING), PPt.getXpToLevel(SkillType.MINING)));
|
||||
if (mcPermissions.getInstance().woodcutting(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PPt.getSkillLevel(SkillType.WOODCUTTING), PPt.getSkillXpLevel(SkillType.WOODCUTTING), PPt.getXpToLevel(SkillType.WOODCUTTING)));
|
||||
|
||||
player.sendMessage(ChatColor.GOLD + "-=COMBAT SKILLS=-");
|
||||
if (mcPermissions.getInstance().axes(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PPt.getSkillLevel(SkillType.AXES), PPt.getSkillXpLevel(SkillType.AXES), PPt.getXpToLevel(SkillType.AXES)));
|
||||
if (mcPermissions.getInstance().archery(player))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PPt.getSkillLevel(SkillType.ARCHERY), PPt.getSkillXpLevel(SkillType.ARCHERY), PPt.getXpToLevel(SkillType.ARCHERY)));
|
||||
// if(mcPermissions.getInstance().sorcery(target))
|
||||
// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PPt.getSkill("sorcery"), PPt.getSkill("sorceryXP"), PPt.getXpToLevel("excavation")));
|
||||
if (mcPermissions.getInstance().swords(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PPt.getSkillLevel(SkillType.SWORDS), PPt.getSkillXpLevel(SkillType.SWORDS), PPt.getXpToLevel(SkillType.SWORDS)));
|
||||
if (mcPermissions.getInstance().taming(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PPt.getSkillLevel(SkillType.TAMING), PPt.getSkillXpLevel(SkillType.TAMING), PPt.getXpToLevel(SkillType.TAMING)));
|
||||
if (mcPermissions.getInstance().unarmed(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PPt.getSkillLevel(SkillType.UNARMED), PPt.getSkillXpLevel(SkillType.UNARMED), PPt.getXpToLevel(SkillType.UNARMED)));
|
||||
|
||||
player.sendMessage(ChatColor.GOLD + "-=MISC SKILLS=-");
|
||||
if (mcPermissions.getInstance().acrobatics(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PPt.getSkillLevel(SkillType.ACROBATICS), PPt.getSkillXpLevel(SkillType.ACROBATICS), PPt.getXpToLevel(SkillType.ACROBATICS)));
|
||||
// if(mcPermissions.getInstance().alchemy(target))
|
||||
// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AlchemySkill"), PPt.getSkillLevel(SkillType.ALCHEMY), PPt.getSkillXpLevel(SkillType.ALCHEMY), PPt.getXpToLevel(SkillType.ALCHEMY)));
|
||||
// if(mcPermissions.getInstance().enchanting(target))
|
||||
// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.EnchantingSkill"), PPt.getSkillLevel(SkillType.ENCHANTING), PPt.getSkillXpLevel(SkillType.ENCHANTING), PPt.getXpToLevel(SkillType.ENCHANTING)));
|
||||
if (mcPermissions.getInstance().repair(target))
|
||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PPt.getSkillLevel(SkillType.REPAIR), PPt.getSkillXpLevel(SkillType.REPAIR), PPt.getXpToLevel(SkillType.REPAIR)));
|
||||
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (m.getPowerLevel(target)));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -19,10 +19,6 @@ public class XprateCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.xprateEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
if(args.length <= 0)
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.gmail.nossr50.commands.mc;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
@@ -18,13 +19,8 @@ public class McabilityCommand implements CommandExecutor {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
if (player != null && player.hasPermission("mcmmo.commands.ability")) {
|
||||
sender.sendMessage("This command requires permissions.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!LoadProperties.mcabilityEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
if (player != null && !mcPermissions.getInstance().mcAbility(player)) {
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,16 +7,11 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class MccCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.mccEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
@@ -42,22 +37,17 @@ public class MccCommand implements CommandExecutor {
|
||||
player.sendMessage("/ptp " + mcLocale.getString("m.mccPartyTeleport"));
|
||||
}
|
||||
player.sendMessage(mcLocale.getString("m.mccOtherCommands"));
|
||||
player.sendMessage("/stats " + ChatColor.RED + " " + mcLocale.getString("m.mccStats"));
|
||||
player.sendMessage("/mcstats " + ChatColor.RED + " " + mcLocale.getString("m.mccStats"));
|
||||
player.sendMessage("/mctop <skillname> <page> " + ChatColor.RED + mcLocale.getString("m.mccLeaderboards"));
|
||||
|
||||
if (mcPermissions.getInstance().mySpawn(player)) {
|
||||
player.sendMessage("/myspawn " + ChatColor.RED + mcLocale.getString("m.mccMySpawn"));
|
||||
player.sendMessage("/clearmyspawn " + ChatColor.RED + mcLocale.getString("m.mccClearMySpawn"));
|
||||
}
|
||||
|
||||
if (mcPermissions.getInstance().mcAbility(player))
|
||||
player.sendMessage("/mcability" + ChatColor.RED + " " + mcLocale.getString("m.mccToggleAbility"));
|
||||
|
||||
if (mcPermissions.getInstance().adminChat(player))
|
||||
player.sendMessage("/a " + ChatColor.RED + mcLocale.getString("m.mccAdminToggle"));
|
||||
|
||||
if (mcPermissions.getInstance().whois(player))
|
||||
player.sendMessage("/whois " + mcLocale.getString("m.mccWhois"));
|
||||
if (mcPermissions.getInstance().inspect(player))
|
||||
player.sendMessage("/inspect " + mcLocale.getString("m.mccInspect"));
|
||||
|
||||
if (mcPermissions.getInstance().mmoedit(player))
|
||||
player.sendMessage("/mmoedit" + mcLocale.getString("m.mccMmoedit"));
|
||||
|
||||
@@ -8,17 +8,12 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class McgodCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.mcgodEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
|
||||
@@ -14,10 +14,6 @@ public class McmmoCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.mcmmoEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
@@ -26,7 +22,6 @@ public class McmmoCommand implements CommandExecutor {
|
||||
|
||||
Player player = (Player) sender;
|
||||
|
||||
player.sendMessage(ChatColor.RED + "-----[]" + ChatColor.GREEN + "mcMMO" + ChatColor.RED + "[]-----");
|
||||
String description = mcLocale.getString("mcMMO.Description", new Object[] { "mcc" });
|
||||
String[] mcSplit = description.split(",");
|
||||
|
||||
@@ -37,10 +32,10 @@ public class McmmoCommand implements CommandExecutor {
|
||||
if (LoadProperties.spoutEnabled && player instanceof SpoutPlayer) {
|
||||
SpoutPlayer sPlayer = (SpoutPlayer) player;
|
||||
if (LoadProperties.donateMessage)
|
||||
sPlayer.sendMessage(ChatColor.GREEN + "[mcMMO] Donate! Paypal theno1yeti@gmail.com");
|
||||
sPlayer.sendMessage(ChatColor.YELLOW + "[mcMMO]"+ChatColor.GOLD+" Donate! Paypal "+ChatColor.GREEN+"theno1yeti@gmail.com");
|
||||
} else {
|
||||
if (LoadProperties.donateMessage)
|
||||
player.sendMessage(ChatColor.GREEN + "If you like my work you can donate via Paypal: theno1yeti@gmail.com");
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO]"+ChatColor.GOLD+" Donate! Paypal "+ChatColor.GREEN+"theno1yeti@gmail.com");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.bukkit.entity.Player;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
@@ -22,10 +21,6 @@ public class McrefreshCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.mcrefreshEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
|
||||
109
src/main/java/com/gmail/nossr50/commands/mc/McremoveCommand.java
Normal file
109
src/main/java/com/gmail/nossr50/commands/mc/McremoveCommand.java
Normal file
@@ -0,0 +1,109 @@
|
||||
package com.gmail.nossr50.commands.mc;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class McremoveCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
Player player = null;
|
||||
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
if (player != null && !mcPermissions.getInstance().mcremove(player)) {
|
||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if(args.length == 0)
|
||||
{
|
||||
sender.sendMessage("Correct usage is /mcremove [Player Name]");
|
||||
return true;
|
||||
}
|
||||
|
||||
String playerName = args[0]; //Player that we are going to remove
|
||||
|
||||
//If the server is using MySQL
|
||||
if(LoadProperties.useMySQL)
|
||||
{
|
||||
int userId = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'");
|
||||
|
||||
//Remove user from tables
|
||||
mcMMO.database.Write("DELETE FROM "
|
||||
+LoadProperties.MySQLdbName+"."
|
||||
+LoadProperties.MySQLtablePrefix+"users WHERE "
|
||||
+LoadProperties.MySQLtablePrefix+"users.id="+userId);
|
||||
|
||||
mcMMO.database.Write("DELETE FROM "
|
||||
+LoadProperties.MySQLdbName+"."
|
||||
+LoadProperties.MySQLtablePrefix+"cooldowns WHERE "
|
||||
+LoadProperties.MySQLtablePrefix+"cooldowns.user_id="+userId);
|
||||
|
||||
mcMMO.database.Write("DELETE FROM "
|
||||
+LoadProperties.MySQLdbName+"."
|
||||
+LoadProperties.MySQLtablePrefix+"huds WHERE "
|
||||
+LoadProperties.MySQLtablePrefix+"huds.user_id="+userId);
|
||||
|
||||
mcMMO.database.Write("DELETE FROM "
|
||||
+LoadProperties.MySQLdbName+"."
|
||||
+LoadProperties.MySQLtablePrefix+"skills WHERE "
|
||||
+LoadProperties.MySQLtablePrefix+"skills.user_id="+userId);
|
||||
|
||||
mcMMO.database.Write("DELETE FROM "
|
||||
+LoadProperties.MySQLdbName+"."
|
||||
+LoadProperties.MySQLtablePrefix+"experience WHERE "
|
||||
+LoadProperties.MySQLtablePrefix+"experience.user_id="+userId);
|
||||
|
||||
sender.sendMessage("User "+playerName+" removed from MySQL DB!");
|
||||
} else {
|
||||
//FlatFile removal
|
||||
//TODO: Properly remove users from FlatFile, it's going to be a huge bitch with how our FlatFile system works. Let's adopt SQLite support.
|
||||
if(Bukkit.getServer().getPlayer(playerName) != null)
|
||||
{
|
||||
Player targetPlayer = Bukkit.getServer().getPlayer(playerName);
|
||||
if(targetPlayer.isOnline())
|
||||
{
|
||||
Users.getProfile(targetPlayer).resetAllData();
|
||||
sender.sendMessage("User "+playerName+" removed from FlatFile DB!");
|
||||
} else {
|
||||
sender.sendMessage("[mcMMO] This command is not fully functional for FlatFile yet, the player needs to be online.");
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage("[mcMMO] This command is not fully functional for FlatFile yet, the player needs to be online.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
//Force PlayerProfile stuff to update
|
||||
if(Bukkit.getServer().getPlayer(playerName) != null)
|
||||
{
|
||||
Player targetPlayer = Bukkit.getServer().getPlayer(playerName);
|
||||
if(targetPlayer.isOnline())
|
||||
{
|
||||
targetPlayer.kickPlayer("[mcMMO] Stats have been reset! Rejoin!");
|
||||
Users.removeUserByName(playerName);
|
||||
} else {
|
||||
Users.removeUser(targetPlayer);
|
||||
}
|
||||
} else {
|
||||
Users.removeUserByName(playerName);
|
||||
}
|
||||
|
||||
sender.sendMessage("[mcMMO] mcremove operation completed.");
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -20,10 +20,6 @@ import com.gmail.nossr50.skills.Skills;
|
||||
public class MctopCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.mctopEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
|
||||
@@ -8,7 +8,6 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
@@ -16,10 +15,6 @@ import com.gmail.nossr50.party.Party;
|
||||
public class AcceptCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.acceptEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.bukkit.entity.Player;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
@@ -23,10 +22,6 @@ public class InviteCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.inviteEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
|
||||
@@ -26,10 +26,6 @@ public class PCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.partyEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Console message?
|
||||
if (!(sender instanceof Player)) {
|
||||
@@ -72,7 +68,7 @@ public class PCommand implements CommandExecutor {
|
||||
|
||||
String name = (LoadProperties.pDisplayNames) ? player.getDisplayName() : player.getName();
|
||||
String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + name + ChatColor.GREEN + ") ";
|
||||
log.log(Level.INFO, "[P](" + PP.getParty() + ")" + "<" + name + "> " + pMessage);
|
||||
log.log(Level.INFO, "[P](" + PP.getParty() + ")<" + name + "> " + pMessage);
|
||||
|
||||
for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
|
||||
if (Users.getProfile(herp).inParty()) {
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
@@ -17,10 +16,6 @@ import com.gmail.nossr50.party.Party;
|
||||
public class PartyCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.partyEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
@@ -73,6 +68,44 @@ public class PartyCommand implements CommandExecutor {
|
||||
}
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.YouAreInParty", new Object[] { PP.getParty() }));
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.PartyMembers") + " (" + tempList + ChatColor.GREEN + ")");
|
||||
|
||||
//Master Apprentice Stuff
|
||||
//Show the player all their bonuses when they type /party
|
||||
|
||||
/*
|
||||
for(Player a : Party.getInstance().getPartyMembers(player))
|
||||
{
|
||||
if(Party.getInstance().isPartyLeader(a.getName(), PP.getParty()) && !a.getName().equals(player.getName()))
|
||||
{
|
||||
PlayerProfile LP = Users.getProfile(a);
|
||||
for(SkillType type : SkillType.values())
|
||||
{
|
||||
//Skip this one
|
||||
if(type == SkillType.ALL)
|
||||
continue;
|
||||
|
||||
if(LP.getSkillLevel(type) > PP.getSkillLevel(type))
|
||||
{
|
||||
//Tell them what their skill bonus is for this skill
|
||||
int leaderLevel = LP.getSkillLevel(type);
|
||||
int difference = leaderLevel - PP.getSkillLevel(type);
|
||||
|
||||
double bonusModifier = (difference*0.75D)/100D;
|
||||
double trueBonus = bonusModifier * 100;
|
||||
player.sendMessage("You get "+trueBonus+"% more XP from "+type.toString());
|
||||
//double percent = (trueBonus/100)*100;
|
||||
} else
|
||||
{
|
||||
//Tell them they have no bonus.. or not
|
||||
}
|
||||
}
|
||||
} else if(Party.getInstance().isPartyLeader(a.getName(), PP.getParty()) && a.getName().equals(player.getName()))
|
||||
{
|
||||
//Tell them they are providing bonuses
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
return true;
|
||||
} else if (args.length == 1) {
|
||||
if (args[0].equals("q") && PP.inParty()) {
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.bukkit.entity.Player;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
@@ -22,10 +21,6 @@ public class PtpCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!LoadProperties.ptpEnable) {
|
||||
sender.sendMessage("This command is not enabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
@@ -59,4 +54,4 @@ public class PtpCommand implements CommandExecutor {
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,11 +10,13 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class AcrobaticsCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
if (!(sender instanceof Player))
|
||||
{
|
||||
sender.sendMessage("This command does not support console useage.");
|
||||
return true;
|
||||
}
|
||||
@@ -46,7 +48,9 @@ public class AcrobaticsCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.AcrobaticsRollChance", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.AcrobaticsGracefulRollChance", new Object[] { gracepercentage }));
|
||||
player.sendMessage(mcLocale.getString("m.AcrobaticsDodgeChance", new Object[] { dodgepercentage }));
|
||||
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.ACROBATICS, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class ArcheryCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -57,6 +58,8 @@ public class ArcheryCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.ArcheryDazeChance", new Object[] { percentagedaze }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcheryRetrieveChance", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcheryIgnitionLength", new Object[] { (ignition / 20) }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.AXES, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -26,11 +26,17 @@ public class AxesCommand implements CommandExecutor {
|
||||
|
||||
float skillvalue = (float) PP.getSkillLevel(SkillType.AXES);
|
||||
if (PP.getSkillLevel(SkillType.AXES) < 750)
|
||||
percentage = String.valueOf((skillvalue / 1000) * 100);
|
||||
percentage = String.valueOf((skillvalue / 2000) * 100);
|
||||
else
|
||||
percentage = "75";
|
||||
percentage = "37.5";
|
||||
|
||||
int bonusDmg = Users.getProfile(player).getSkillLevel(SkillType.AXES)/50;
|
||||
if(bonusDmg > 4)
|
||||
bonusDmg = 4;
|
||||
|
||||
int ticks = 2;
|
||||
short durDmg = 5;
|
||||
durDmg+=Users.getProfile(player).getSkillLevel(SkillType.AXES)/30;
|
||||
int x = PP.getSkillLevel(SkillType.AXES);
|
||||
while (x >= 50) {
|
||||
x -= 50;
|
||||
@@ -47,15 +53,15 @@ public class AxesCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes1_0"), mcLocale.getString("m.EffectsAxes1_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes2_0"), mcLocale.getString("m.EffectsAxes2_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes3_0"), mcLocale.getString("m.EffectsAxes3_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes4_0"), mcLocale.getString("m.EffectsAxes4_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes5_0"), mcLocale.getString("m.EffectsAxes5_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
player.sendMessage(mcLocale.getString("m.AxesCritChance", new Object[] { percentage }));
|
||||
|
||||
if (PP.getSkillLevel(SkillType.AXES) < 500)
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockAxes1") }));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes1_0"), mcLocale.getString("m.AbilBonusAxes1_1") }));
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.AxesSkullLength", new Object[] { ticks }));
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes1_0"), mcLocale.getString("m.AbilBonusAxes1_1", new Object[] {bonusDmg}) }));
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes2_0"), mcLocale.getString("m.AbilBonusAxes2_1", new Object[] {durDmg}) }));
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes3_0"), mcLocale.getString("m.AbilBonusAxes3_1", new Object[] {2}) }));
|
||||
player.sendMessage(mcLocale.getString("m.AxesSkullLength", new Object[] { ticks }));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class ExcavationCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -29,6 +30,7 @@ public class ExcavationCommand implements CommandExecutor {
|
||||
ticks++;
|
||||
}
|
||||
|
||||
player.sendMessage("");
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillExcavation") }));
|
||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainExcavation") }));
|
||||
|
||||
@@ -39,8 +41,10 @@ public class ExcavationCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation1_0"), mcLocale.getString("m.EffectsExcavation1_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation2_0"), mcLocale.getString("m.EffectsExcavation2_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
player.sendMessage(mcLocale.getString("m.ExcavationGreenTerraLength", new Object[] { ticks }));
|
||||
player.sendMessage(mcLocale.getString("m.ExcavationGigaDrillBreakerLength", new Object[] { ticks }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.EXCAVATION, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Fishing;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class FishingCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -41,6 +42,8 @@ public class FishingCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockFishing1") }));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("m.ShakeInfo", new Object[] { Fishing.getFishingLootTier(PP) }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.FISHING, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class HerbalismCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -29,6 +30,10 @@ public class HerbalismCommand implements CommandExecutor {
|
||||
bonus++;
|
||||
if (PP.getSkillLevel(SkillType.HERBALISM) >= 600)
|
||||
bonus++;
|
||||
if (PP.getSkillLevel(SkillType.HERBALISM) >= 800)
|
||||
bonus++;
|
||||
if (PP.getSkillLevel(SkillType.HERBALISM) >= 1000)
|
||||
bonus++;
|
||||
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.HERBALISM);
|
||||
@@ -51,12 +56,16 @@ public class HerbalismCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism1_0"), mcLocale.getString("m.EffectsHerbalism1_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism2_0"), mcLocale.getString("m.EffectsHerbalism2_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism3_0"), mcLocale.getString("m.EffectsHerbalism3_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism4_0"), mcLocale.getString("m.EffectsHerbalism4_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism5_0"), mcLocale.getString("m.EffectsHerbalism5_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
player.sendMessage(mcLocale.getString("m.HerbalismGreenTerraLength", new Object[] { ticks }));
|
||||
player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbChance", new Object[] { gpercentage }));
|
||||
player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbStage", new Object[] { bonus }));
|
||||
player.sendMessage(mcLocale.getString("m.HerbalismFoodPlus", new Object[] { bonus } ));
|
||||
player.sendMessage(mcLocale.getString("m.HerbalismDoubleDropChance", new Object[] { percentage }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.HERBALISM, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class MiningCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -30,6 +31,46 @@ public class MiningCommand implements CommandExecutor {
|
||||
x -= 50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
int rank = 0;
|
||||
int damage = 0;
|
||||
int radius = 0;
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 125 && PP.getSkillLevel(SkillType.MINING) < 250)
|
||||
rank = 1;
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 250 && PP.getSkillLevel(SkillType.MINING) < 375){
|
||||
rank = 2;
|
||||
radius = 1;
|
||||
}
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 375 && PP.getSkillLevel(SkillType.MINING) < 500){
|
||||
rank = 3;
|
||||
radius = 1;
|
||||
}
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 500 && PP.getSkillLevel(SkillType.MINING) < 625){
|
||||
rank = 4;
|
||||
damage = 25;
|
||||
radius = 2;
|
||||
}
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 625 && PP.getSkillLevel(SkillType.MINING) < 750){
|
||||
rank = 5;
|
||||
damage = 25;
|
||||
radius = 2;
|
||||
}
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 750 && PP.getSkillLevel(SkillType.MINING) < 875){
|
||||
rank = 6;
|
||||
damage = 50;
|
||||
radius = 3;
|
||||
}
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 875 && PP.getSkillLevel(SkillType.MINING) < 1000){
|
||||
rank = 7;
|
||||
damage = 50;
|
||||
radius = 3;
|
||||
}
|
||||
if(PP.getSkillLevel(SkillType.MINING) >= 1000){
|
||||
rank = 8;
|
||||
damage = 100;
|
||||
radius = 4;
|
||||
}
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillMining") }));
|
||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainMining") }));
|
||||
|
||||
@@ -39,10 +80,53 @@ public class MiningCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining1_0"), mcLocale.getString("m.EffectsMining1_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining2_0"), mcLocale.getString("m.EffectsMining2_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining3_0"), mcLocale.getString("m.EffectsMining3_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining4_0"), mcLocale.getString("m.EffectsMining4_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining5_0"), mcLocale.getString("m.EffectsMining5_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
player.sendMessage(mcLocale.getString("m.MiningDoubleDropChance", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.MiningSuperBreakerLength", new Object[] { ticks }));
|
||||
|
||||
if (PP.getSkillLevel(SkillType.MINING) < 125)
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockMining1") }));
|
||||
else{
|
||||
switch (rank){
|
||||
case 1:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining1") }));
|
||||
break;
|
||||
case 2:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining2") }));
|
||||
break;
|
||||
case 3:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining3") }));
|
||||
break;
|
||||
case 4:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining4") }));
|
||||
break;
|
||||
case 5:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining5") }));
|
||||
break;
|
||||
case 6:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining6") }));
|
||||
break;
|
||||
case 7:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining7") }));
|
||||
break;
|
||||
case 8:
|
||||
player.sendMessage(mcLocale.getString("m.MiningBlastMining", new Object[] { rank, mcLocale.getString("m.BlastMining8") }));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (PP.getSkillLevel(SkillType.MINING) < 250)
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockMining2") }));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("m.MiningBiggerBombs", new Object[] { radius }));
|
||||
if (PP.getSkillLevel(SkillType.MINING) < 500)
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockMining3") }));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("m.MiningDemolitionsExpertDamageDecrease", new Object[] { damage }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.MINING, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Repair;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class RepairCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -42,12 +43,12 @@ public class RepairCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
player.sendMessage(mcLocale.getString("m.RepairRepairMastery", new Object[] { repairmastery }));
|
||||
player.sendMessage(mcLocale.getString("m.RepairSuperRepairChance", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneForgingRank", new Object[] { Repair.getArcaneForgingRank(PP) }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneEnchantKeepChance", new Object[] { Repair.getEnchantChance(Repair.getArcaneForgingRank(PP)) }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneEnchantDowngradeChance", new Object[] { Repair.getDowngradeChance(Repair.getArcaneForgingRank(PP)) }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneForgingMilestones"));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneForgingMilestones2"));
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneForgingRank", new Object[] { Repair.getArcaneForgingRank(PP.getSkillLevel(SkillType.REPAIR)) }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneEnchantKeepChance", new Object[] { Repair.getEnchantChance(Repair.getArcaneForgingRank(PP.getSkillLevel(SkillType.REPAIR))) }));
|
||||
player.sendMessage(mcLocale.getString("m.ArcaneEnchantDowngradeChance", new Object[] { Repair.getDowngradeChance(Repair.getArcaneForgingRank(PP.getSkillLevel(SkillType.REPAIR))) }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.REPAIR, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class SwordsCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -61,8 +62,10 @@ public class SwordsCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.SwordsCounterAttChance", new Object[] { counterattackpercentage }));
|
||||
player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] { bleedrank }));
|
||||
player.sendMessage(mcLocale.getString("m.SwordsTickNote"));
|
||||
player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.SwordsBleedChance", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.SwordsSSLength", new Object[] { ticks }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.SWORDS, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class TamingCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -40,6 +41,7 @@ public class TamingCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming5_0"), mcLocale.getString("m.EffectsTaming5_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming6_0"), mcLocale.getString("m.EffectsTaming6_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming7_0"), mcLocale.getString("m.EffectsTaming7_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming8_0"), mcLocale.getString("m.EffectsTaming8_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTaming7_2", new Object[] { LoadProperties.bonesConsumedByCOTW }));
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
|
||||
@@ -62,8 +64,14 @@ public class TamingCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming4") }));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming4_0"), mcLocale.getString("m.AbilBonusTaming4_1") }));
|
||||
|
||||
if (PP.getSkillLevel(SkillType.TAMING) < 50)
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming5") }));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming5_0"), mcLocale.getString("m.AbilBonusTaming5_1") }));
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.TamingGoreChance", new Object[] { percentage }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.TAMING, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class UnarmedCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -26,9 +27,9 @@ public class UnarmedCommand implements CommandExecutor {
|
||||
float skillvalue = (float) PP.getSkillLevel(SkillType.UNARMED);
|
||||
|
||||
if (PP.getSkillLevel(SkillType.UNARMED) < 1000)
|
||||
percentage = String.valueOf((skillvalue / 4000) * 100);
|
||||
percentage = String.valueOf((skillvalue / 3000) * 100);
|
||||
else
|
||||
percentage = "25";
|
||||
percentage = "33.3";
|
||||
|
||||
if (PP.getSkillLevel(SkillType.UNARMED) < 1000)
|
||||
arrowpercentage = String.valueOf(((skillvalue / 1000) * 100) / 2);
|
||||
@@ -41,6 +42,11 @@ public class UnarmedCommand implements CommandExecutor {
|
||||
x -= 50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
int bonus = 3 + (PP.getSkillLevel(SkillType.UNARMED)/50);
|
||||
|
||||
if(bonus > 8)
|
||||
bonus = 8;
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillUnarmed") }));
|
||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainUnarmed") }));
|
||||
@@ -52,22 +58,17 @@ public class UnarmedCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed1_0"), mcLocale.getString("m.EffectsUnarmed1_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed2_0"), mcLocale.getString("m.EffectsUnarmed2_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed3_0"), mcLocale.getString("m.EffectsUnarmed3_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed4_0"), mcLocale.getString("m.EffectsUnarmed4_1") }));
|
||||
//player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed4_0"), mcLocale.getString("m.EffectsUnarmed4_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed5_0"), mcLocale.getString("m.EffectsUnarmed5_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
||||
player.sendMessage(mcLocale.getString("m.UnarmedArrowDeflectChance", new Object[] { arrowpercentage }));
|
||||
player.sendMessage(mcLocale.getString("m.UnarmedDisarmChance", new Object[] { percentage }));
|
||||
|
||||
if (PP.getSkillLevel(SkillType.UNARMED) < 250) {
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockUnarmed1") }));
|
||||
} else if (PP.getSkillLevel(SkillType.UNARMED) >= 250 && PP.getSkillLevel(SkillType.UNARMED) < 500) {
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed1_0"), mcLocale.getString("m.AbilBonusUnarmed1_1") }));
|
||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockUnarmed2") }));
|
||||
} else {
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed2_0"), mcLocale.getString("m.AbilBonusUnarmed2_1") }));
|
||||
}
|
||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed2_0"), mcLocale.getString("m.AbilBonusUnarmed2_1", new Object[] {bonus}) }));
|
||||
|
||||
player.sendMessage(mcLocale.getString("m.UnarmedBerserkLength", new Object[] { ticks }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.UNARMED, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.util.Page;
|
||||
|
||||
public class WoodcuttingCommand implements CommandExecutor {
|
||||
@Override
|
||||
@@ -51,6 +52,8 @@ public class WoodcuttingCommand implements CommandExecutor {
|
||||
player.sendMessage(mcLocale.getString("m.WoodCuttingDoubleDropChance", new Object[] { percentage }));
|
||||
player.sendMessage(mcLocale.getString("m.WoodCuttingTreeFellerLength", new Object[] { ticks }));
|
||||
|
||||
Page.grabGuidePageForSkill(SkillType.WOODCUTTING, player, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,59 +19,50 @@ package com.gmail.nossr50.config;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import com.gmail.nossr50.datatypes.HUDType;
|
||||
|
||||
public class LoadProperties {
|
||||
public static Boolean enableOnlyActivateWhenSneaking,
|
||||
enableAbilityMessages, enableAbilities, showDisplayName, showFaces,
|
||||
watch, xplockEnable, xpbar, xpicon, partybar, string, bucket, web,
|
||||
xprateEnable, slimeballs, spoutEnabled, donateMessage,
|
||||
chimaeraWingEnable, xpGainsMobSpawners, myspawnEnable, mccEnable,
|
||||
mcmmoEnable, partyEnable, inviteEnable, acceptEnable, whoisEnable,
|
||||
statsEnable, addxpEnable, ptpEnable, mmoeditEnable,
|
||||
clearmyspawnEnable, mcgodEnable, mcabilityEnable, mctopEnable,
|
||||
mcrefreshEnable, aEnable, pEnable, enableMotd, enableMySpawn,
|
||||
enableRegen, enableCobbleToMossy, useMySQL, cocoabeans, mushrooms,
|
||||
toolsLoseDurabilityFromAbilities, pvpxp, miningrequirespickaxe,
|
||||
excavationRequiresShovel, woodcuttingrequiresaxe, eggs, apples,
|
||||
cake, music, diamond, glowstone, slowsand, sulphur, netherrack,
|
||||
bones, coal, clay, anvilmessages, mayDowngradeEnchants,
|
||||
mayLoseEnchants, fishingDrops, leatherArmor, ironArmor, goldArmor,
|
||||
diamondArmor, woodenTools, stoneTools, ironTools, goldTools,
|
||||
diamondTools, enderPearl, blazeRod, records, glowstoneDust,
|
||||
fishingDiamonds, aDisplayNames, pDisplayNames, enableSmoothToMossy,
|
||||
enableDirtToGrass, statsTracking;
|
||||
xplockEnable, xpbar, xpicon, partybar, xprateEnable, spoutEnabled,
|
||||
donateMessage, chimaeraWingEnable, xpGainsMobSpawners,
|
||||
mccEnable, mcmmoEnable, partyEnable, inviteEnable, acceptEnable,
|
||||
inspectEnable, mcstatsEnable, addxpEnable, ptpEnable, mmoeditEnable, mcremoveEnable,
|
||||
mcgodEnable, mcabilityEnable, mctopEnable,
|
||||
addlevelsEnable, mcrefreshEnable, aEnable, pEnable, enableMotd,
|
||||
enableCobbleToMossy, useMySQL, toolsLoseDurabilityFromAbilities,
|
||||
pvpxp, miningrequirespickaxe, excavationRequiresShovel,
|
||||
woodcuttingrequiresaxe, anvilmessages, mayDowngradeEnchants,
|
||||
mayLoseEnchants, fishingDrops, aDisplayNames, pDisplayNames, enableSmoothToMossy,
|
||||
enableDirtToGrass, statsTracking, eventCallback, herbalismHungerBonus,
|
||||
repairArmor, repairTools;
|
||||
|
||||
public static String MySQLtablePrefix, MySQLuserName,
|
||||
MySQLserverName, MySQLdbName, MySQLdbPass, nWood, nStone,
|
||||
nIron, nGold, nDiamond, locale, nString, nLeather;
|
||||
|
||||
public static int mfishing, mwatch, xpbar_x, xpbar_y, xpicon_x, xpicon_y,
|
||||
mstring, mbucket, mweb, chimaeraId, msandstone, mcocoa,
|
||||
water_thunder, cure_self, cure_other, mslimeballs, mbones,
|
||||
msulphur, mslowsand, mmushroom2, mglowstone2, mmelon, mmusic,
|
||||
mdiamond2, mbase, mapple, meggs, mcake, mpine, mbirch, mspruce,
|
||||
public static int treeFellerThreshold, mjungle, mtameWolf, mtameOcelot,
|
||||
mfishing, xpbar_x, xpbar_y, xpicon_x, xpicon_y,
|
||||
chimaeraId, msandstone, mbase, moak, mbirch, mspruce, mmelon,
|
||||
mcactus, mmushroom, mflower, msugar, mpumpkin, mwheat, mgold,
|
||||
mdiamond, miron, mredstone, mlapis, mobsidian, mnetherrack,
|
||||
mglowstone, mcoal, mstone, MySQLport, xpGainMultiplier,
|
||||
superBreakerCooldown, greenTerraCooldown, gigaDrillBreakerCooldown,
|
||||
superBreakerCooldown, blastMiningCooldown, greenTerraCooldown, gigaDrillBreakerCooldown,
|
||||
treeFellerCooldown, berserkCooldown, serratedStrikeCooldown,
|
||||
skullSplitterCooldown, abilityDurabilityLoss,
|
||||
feathersConsumedByChimaeraWing, bonesConsumedByCOTW,
|
||||
repairdiamondlevel, rWood, rStone, rIron, rGold, rDiamond, rString,
|
||||
rLeather, downgradeRank1, downgradeRank2, downgradeRank3,
|
||||
downgradeRank4, keepEnchantsRank1, keepEnchantsRank2,
|
||||
keepEnchantsRank3, keepEnchantsRank4, fishingDropChanceTier1,
|
||||
fishingDropChanceTier2, fishingDropChanceTier3,
|
||||
fishingDropChanceTier4, fishingDropChanceTier5, mnetherwart,
|
||||
mvines, mlilypad, mnetherbrick, mendstone, mmossstone, mstonebrick,
|
||||
keepEnchantsRank3, keepEnchantsRank4, mnetherwart,
|
||||
mvines, mlilypad, mendstone, mmossstone,
|
||||
levelCapAcrobatics, levelCapArchery, levelCapAxes, levelCapExcavation,
|
||||
levelCapFishing, levelCapHerbalism, levelCapMining, levelCapRepair,
|
||||
levelCapSwords, levelCapTaming, levelCapUnarmed, levelCapWoodcutting,
|
||||
anvilID, saveInterval;
|
||||
anvilID, saveInterval, fishingTier1, fishingTier2, fishingTier3, fishingTier4, fishingTier5,
|
||||
repairStoneLevel, repairIronLevel, repairGoldLevel, arcaneRank1, arcaneRank2, arcaneRank3, arcaneRank4,
|
||||
detonatorID;
|
||||
|
||||
public static double xpbackground_r, xpbackground_g, xpbackground_b,
|
||||
xpborder_r, xpborder_g, xpborder_b, fishing_r, fishing_g,
|
||||
@@ -83,9 +74,10 @@ public class LoadProperties {
|
||||
unarmed_r, unarmed_g, unarmed_b, woodcutting_r, woodcutting_g,
|
||||
woodcutting_b, pvpxprewardmodifier, tamingxpmodifier,
|
||||
miningxpmodifier, repairxpmodifier, woodcuttingxpmodifier,
|
||||
sorceryxpmodifier, unarmedxpmodifier, herbalismxpmodifier,
|
||||
fishingxpmodifier, unarmedxpmodifier, herbalismxpmodifier,
|
||||
excavationxpmodifier, archeryxpmodifier, swordsxpmodifier,
|
||||
axesxpmodifier, acrobaticsxpmodifier;
|
||||
axesxpmodifier, acrobaticsxpmodifier, animalXP, creeperXP, skeletonXP, spiderXP, ghastXP, slimeXP,
|
||||
zombieXP, pigzombieXP, endermanXP, cavespiderXP, silverfishXP, blazeXP, magmacubeXP, enderdragonXP;
|
||||
|
||||
public static HUDType defaulthud;
|
||||
protected static File configFile;
|
||||
@@ -145,27 +137,24 @@ public class LoadProperties {
|
||||
}
|
||||
|
||||
private void loadKeys() {
|
||||
plugin.getLogger().info("Loading Config File...");
|
||||
plugin.getLogger().info("Loading mcMMO config.yml File...");
|
||||
|
||||
// Setup default HUD
|
||||
String temp = readString("Spout.HUD.Default", "STANDARD");
|
||||
for (HUDType x : HUDType.values()) {
|
||||
if (x.toString().equalsIgnoreCase(temp)) {
|
||||
if (x.toString().equalsIgnoreCase(temp))
|
||||
defaulthud = x;
|
||||
}
|
||||
}
|
||||
|
||||
enableAbilityMessages = readBoolean("Abilities.Messages", true);
|
||||
enableAbilities = readBoolean("Abilities.Enabled", true);
|
||||
|
||||
donateMessage = readBoolean("Commands.mcmmo.Donate_Message", true);
|
||||
xpGainsMobSpawners = readBoolean("XP.Gains.Mobspawners.Enabled", false);
|
||||
xpGainsMobSpawners = readBoolean("Experience.Gains.Mobspawners.Enabled", false);
|
||||
|
||||
bonesConsumedByCOTW = readInteger("Skills.Taming.Call_Of_The_Wild.Bones_Required", 10);
|
||||
|
||||
xpbar = readBoolean("Spout.XP.Bar.Enabled", true);
|
||||
// web_url = readString("Spout.Images.URL_DIR",
|
||||
// "http://mcmmo.rycochet.net/mcmmo/");
|
||||
xpicon = readBoolean("Spout.XP.Icon.Enabled", true);
|
||||
xpbar_x = readInteger("Spout.XP.Bar.X_POS", 95);
|
||||
xpbar_y = readInteger("Spout.XP.Bar.Y_POS", 6);
|
||||
@@ -220,23 +209,7 @@ public class LoadProperties {
|
||||
xpbackground_g = readDouble("Spout.HUD.Retro.Colors.Background.GREEN", 0.75);
|
||||
xpbackground_b = readDouble("Spout.HUD.Retro.Colors.Background.BLUE", 0.75);
|
||||
|
||||
msulphur = readInteger("Experience.Excavation.Sulphur", 30);
|
||||
mbones = readInteger("Experience.Excavation.Bones", 30);
|
||||
mbase = readInteger("Experience.Excavation.Base", 40);
|
||||
mmushroom2 = readInteger("Experience.Excavation.Mushroom", 80);
|
||||
mslowsand = readInteger("Experience.Excavation.Slowsand", 80);
|
||||
mglowstone2 = readInteger("Experience.Excavation.Glowstone", 80);
|
||||
mmusic = readInteger("Experience.Excavation.Music", 3000);
|
||||
mdiamond2 = readInteger("Experience.Excavation.Diamond", 1000);
|
||||
mapple = readInteger("Experience.Excavation.Apple", 100);
|
||||
meggs = readInteger("Experience.Excavation.Eggs", 100);
|
||||
mcake = readInteger("Experience.Excavation.Cake", 3000);
|
||||
mcocoa = readInteger("Experience.Excavation.Cocoa_Beans", 100);
|
||||
mslimeballs = readInteger("Experience.Excavation.Slimeballs", 100);
|
||||
mstring = readInteger("Experience.Excavation.String", 200);
|
||||
mbucket = readInteger("Experience.Excavation.Bucket", 100);
|
||||
mweb = readInteger("Experience.Excavation.Web", 150);
|
||||
mwatch = readInteger("Experience.Excavation.Watch", 200);
|
||||
|
||||
msugar = readInteger("Experience.Herbalism.Sugar_Cane", 30);
|
||||
mwheat = readInteger("Experience.Herbalism.Wheat", 50);
|
||||
@@ -248,10 +221,12 @@ public class LoadProperties {
|
||||
mnetherwart = readInteger("Experience.Herbalism.Nether_Wart", 50);
|
||||
mlilypad = readInteger("Experience.Herbalism.Lily_Pads", 100);
|
||||
mvines = readInteger("Experience.Herbalism.Vines", 10);
|
||||
herbalismHungerBonus = readBoolean("Skills.Herbalism.Hunger_Bonus", true);
|
||||
|
||||
mpine = readInteger("Experience.Woodcutting.Pine", 70);
|
||||
mbirch = readInteger("Experience.Woodcutting.Birch", 80);
|
||||
mspruce = readInteger("Experience.Woodcutting.Spruce", 90);
|
||||
moak = readInteger("Experience.Woodcutting.Oak", 70);
|
||||
mbirch = readInteger("Experience.Woodcutting.Birch", 90);
|
||||
mspruce = readInteger("Experience.Woodcutting.Spruce", 80);
|
||||
mjungle = readInteger("Experience.Woodcutting.Jungle", 100);
|
||||
|
||||
mgold = readInteger("Experience.Mining.Gold", 250);
|
||||
mdiamond = readInteger("Experience.Mining.Diamond", 750);
|
||||
@@ -264,10 +239,11 @@ public class LoadProperties {
|
||||
mcoal = readInteger("Experience.Mining.Coal", 100);
|
||||
mstone = readInteger("Experience.Mining.Stone", 30);
|
||||
msandstone = readInteger("Experience.Mining.Sandstone", 30);
|
||||
mnetherbrick = readInteger("Experience.Mining.Nether_Brick", 30);
|
||||
mendstone = readInteger("Experience.Mining.End_Stone", 150);
|
||||
mmossstone = readInteger("Experience.Mining.Moss_Stone", 30);
|
||||
mstonebrick = readInteger("Experience.Mining.Stone_Brick", 30);
|
||||
|
||||
mtameWolf = readInteger("Experience.Taming.Animal_Taming.Wolf", 250);
|
||||
mtameOcelot = readInteger("Experience.Taming.Animal_Taming.Wolf", 500);
|
||||
|
||||
mfishing = readInteger("Experience.Fishing.Base", 800);
|
||||
|
||||
@@ -276,10 +252,12 @@ public class LoadProperties {
|
||||
greenTerraCooldown = readInteger("Abilities.Cooldowns.Green_Terra", 240);
|
||||
superBreakerCooldown = readInteger("Abilities.Cooldowns.Super_Breaker", 240);
|
||||
gigaDrillBreakerCooldown = readInteger("Abilities.Cooldowns.Giga_Drill_Breaker", 240);
|
||||
treeFellerThreshold = readInteger("Abilities.Limits.Tree_Feller_Threshold", 500);
|
||||
treeFellerCooldown = readInteger("Abilities.Cooldowns.Tree_Feller", 240);
|
||||
berserkCooldown = readInteger("Abilities.Cooldowns.Berserk", 240);
|
||||
serratedStrikeCooldown = readInteger("Abilities.Cooldowns.Serrated_Strikes", 240);
|
||||
skullSplitterCooldown = readInteger("Abilities.Cooldowns.Skull_Splitter", 240);
|
||||
blastMiningCooldown = readInteger("Abilities.Cooldowns.Blast_Mining", 60);
|
||||
|
||||
MySQLserverName = readString("MySQL.Server.Address", "localhost");
|
||||
if (readString("MySQL.Database.User.Password", null) != null)
|
||||
@@ -295,10 +273,9 @@ public class LoadProperties {
|
||||
|
||||
locale = readString("General.Locale", "en_us");
|
||||
enableMotd = readBoolean("General.MOTD.Enabled", true);
|
||||
enableMySpawn = readBoolean("General.MySpawn.Enabled", true);
|
||||
enableRegen = readBoolean("General.HP_Regeneration.Enabled", true);
|
||||
saveInterval = readInteger("General.Save_Interval", 10);
|
||||
statsTracking = readBoolean("General.Stats_Tracking", true);
|
||||
eventCallback = readBoolean("General.Event_Callback", true);
|
||||
|
||||
enableCobbleToMossy = readBoolean("Skills.Herbalism.Green_Thumb.Cobble_To_Mossy", true);
|
||||
enableSmoothToMossy = readBoolean("Skills.Herbalism.Green_Thumb.SmoothBrick_To_MossyBrick", true);
|
||||
@@ -312,14 +289,19 @@ public class LoadProperties {
|
||||
chimaeraId = readInteger("Items.Chimaera_Wing.Item_ID", 288);
|
||||
chimaeraWingEnable = readBoolean("Items.Chimaera_Wing.Enabled", true);
|
||||
|
||||
pvpxp = readBoolean("XP.PVP.Rewards", true);
|
||||
pvpxp = readBoolean("Experience.PVP.Rewards", true);
|
||||
pvpxprewardmodifier = readDouble("Experience.Gains.Multiplier.PVP", 1.0);
|
||||
|
||||
miningrequirespickaxe = readBoolean("Skills.Mining.Requires_Pickaxe", true);
|
||||
excavationRequiresShovel = readBoolean("Skills.Excavation.Requires_Shovel", true);
|
||||
woodcuttingrequiresaxe = readBoolean("Skills.Woodcutting.Requires_Axe", true);
|
||||
repairArmor = readBoolean("Skills.Repair.Can_Repair_Armor", true);
|
||||
repairTools = readBoolean("Skills.Repair.Can_Repair_Tools", true);
|
||||
repairdiamondlevel = readInteger("Skills.Repair.Diamond.Level_Required", 50);
|
||||
repairIronLevel = readInteger("Skills.Repair.Iron.Level_Required", 0);
|
||||
repairGoldLevel = readInteger("Skills.Repair.Gold.Level_Required", 0);
|
||||
repairStoneLevel = readInteger("Skills.Repair.Stone.Level_Required", 0);
|
||||
|
||||
sorceryxpmodifier = readDouble("Experience.Formula.Multiplier.Sorcery", 1.0);
|
||||
tamingxpmodifier = readDouble("Experience.Formula.Multiplier.Taming", 1.0);
|
||||
miningxpmodifier = readDouble("Experience.Formula.Multiplier.Mining", 1.0);
|
||||
repairxpmodifier = readDouble("Experience.Formula.Multiplier.Repair", 1.0);
|
||||
@@ -331,6 +313,7 @@ public class LoadProperties {
|
||||
swordsxpmodifier = readDouble("Experience.Formula.Multiplier.Swords", 1.0);
|
||||
axesxpmodifier = readDouble("Experience.Formula.Multiplier.Axes", 1.0);
|
||||
acrobaticsxpmodifier = readDouble("Experience.Formula.Multiplier.Acrobatics", 1.0);
|
||||
fishingxpmodifier = readDouble("Experience.Forumla.Multiplier.Fishing", 1.0);
|
||||
|
||||
anvilmessages = readBoolean("Skills.Repair.Anvil_Messages", true);
|
||||
anvilID = readInteger("Skills.Repair.Anvil_ID", 42);
|
||||
@@ -368,73 +351,62 @@ public class LoadProperties {
|
||||
downgradeRank2 = readInteger("Arcane_Forging.Downgrades.Chance.Rank_2", 50);
|
||||
downgradeRank3 = readInteger("Arcane_Forging.Downgrades.Chance.Rank_3", 25);
|
||||
downgradeRank4 = readInteger("Arcane_Forging.Downgrades.Chance.Rank_4", 15);
|
||||
mayLoseEnchants = readBoolean("Arcane_Forging.May_Lose_Enchants.Enabled", true);
|
||||
mayLoseEnchants = readBoolean("Arcane_Forging.May_Lose_Enchants", true);
|
||||
keepEnchantsRank1 = readInteger("Arcane_Forging.Keep_Enchants.Chance.Rank_1", 10);
|
||||
keepEnchantsRank2 = readInteger("Arcane_Forging.Keep_Enchants.Chance.Rank_2", 20);
|
||||
keepEnchantsRank3 = readInteger("Arcane_Forging.Keep_Enchants.Chance.Rank_3", 30);
|
||||
keepEnchantsRank4 = readInteger("Arcane_Forging.Keep_Enchants.Chance.Rank_4", 40);
|
||||
arcaneRank1 = readInteger("Arcane_Forging.Rank_Levels.Rank_1", 100);
|
||||
arcaneRank2 = readInteger("Arcane_Forging.Rank_Levels.Rank_2", 250);
|
||||
arcaneRank3 = readInteger("Arcane_Forging.Rank_Levels.Rank_3", 500);
|
||||
arcaneRank4 = readInteger("Arcane_Forging.Rank_Levels.Rank_4", 750);
|
||||
|
||||
cocoabeans = readBoolean("Excavation.Drops.Cocoa_Beans", true);
|
||||
mushrooms = readBoolean("Excavation.Drops.Mushrooms", true);
|
||||
glowstone = readBoolean("Excavation.Drops.Glowstone", true);
|
||||
eggs = readBoolean("Excavation.Drops.Eggs", true);
|
||||
apples = readBoolean("Excavation.Drops.Apples", true);
|
||||
cake = readBoolean("Excavation.Drops.Cake", true);
|
||||
music = readBoolean("Excavation.Drops.Music", true);
|
||||
diamond = readBoolean("Excavation.Drops.Diamond", true);
|
||||
slowsand = readBoolean("Excavation.Drops.Slowsand", true);
|
||||
sulphur = readBoolean("Excavation.Drops.Sulphur", true);
|
||||
netherrack = readBoolean("Excavation.Drops.Netherrack", true);
|
||||
bones = readBoolean("Excavation.Drops.Bones", true);
|
||||
slimeballs = readBoolean("Excavation.Drops.Slimeballs", true);
|
||||
watch = readBoolean("Excavation.Drops.Watch", true);
|
||||
string = readBoolean("Excavation.Drops.String", true);
|
||||
bucket = readBoolean("Excavation.Drops.Bucket", true);
|
||||
web = readBoolean("Excavation.Drops.Web", true);
|
||||
|
||||
fishingDrops = readBoolean("Fishing.Drops.Item_Drops_Enabled", true);
|
||||
fishingDropChanceTier1 = readInteger("Fishing.Drops.Drop_Chance.Tier_1", 20);
|
||||
fishingDropChanceTier2 = readInteger("Fishing.Drops.Drop_Chance.Tier_2", 25);
|
||||
fishingDropChanceTier3 = readInteger("Fishing.Drops.Drop_Chance.Tier_3", 30);
|
||||
fishingDropChanceTier4 = readInteger("Fishing.Drops.Drop_Chance.Tier_4", 35);
|
||||
fishingDropChanceTier5 = readInteger("Fishing.Drops.Drop_Chance.Tier_5", 40);
|
||||
leatherArmor = readBoolean("Fishing.Drops.Leather_Armor", true);
|
||||
ironArmor = readBoolean("Fishing.Drops.Iron_Armor", true);
|
||||
goldArmor = readBoolean("Fishing.Drops.Gold_Armor", true);
|
||||
diamondArmor = readBoolean("Fishing.Drops.Diamond_Armor", true);
|
||||
woodenTools = readBoolean("Fishing.Drops.Wooden_Tools", true);
|
||||
stoneTools = readBoolean("Fishing.Drops.Stone_Tools", true);
|
||||
ironTools = readBoolean("Fishing.Drops.Iron_Tools", true);
|
||||
goldTools = readBoolean("Fishing.Drops.Gold_Tools", true);
|
||||
diamondTools = readBoolean("Fishing.Drops.Diamond_Tools", true);
|
||||
enderPearl = readBoolean("Fishing.Drops.Ender_Pearl", true);
|
||||
blazeRod = readBoolean("Fishing.Drops.Blaze_Rod", true);
|
||||
records = readBoolean("Fishing.Drops.Records", true);
|
||||
glowstoneDust = readBoolean("Fishing.Drops.Glowstone_Dust", true);
|
||||
fishingDiamonds = readBoolean("Fishing.Drops.Diamonds", true);
|
||||
fishingDrops = readBoolean("Fishing.Drops_Enabled", true);
|
||||
fishingTier1 = readInteger("Fishing.Tier_Levels.Tier1", 0);
|
||||
fishingTier2 = readInteger("Fishing.Tier_Levels.Tier2", 200);
|
||||
fishingTier3 = readInteger("Fishing.Tier_Levels.Tier3", 400);
|
||||
fishingTier4 = readInteger("Fishing.Tier_Levels.Tier4", 600);
|
||||
fishingTier5 = readInteger("Fishing.Tier_Levels.Tier5", 800);
|
||||
|
||||
xplockEnable = readBoolean("Commands.xplock.Enabled", true);
|
||||
xprateEnable = readBoolean("Commands.xprate.Enabled", true);
|
||||
mctopEnable = readBoolean("Commands.mctop.Enabled", true);
|
||||
addxpEnable = readBoolean("Commands.addxp.Enabled", true);
|
||||
addlevelsEnable = readBoolean("Commands.addlevels.Enabled", true);
|
||||
mcabilityEnable = readBoolean("Commands.mcability.Enabled", true);
|
||||
mcrefreshEnable = readBoolean("Commands.mcrefresh.Enabled", true);
|
||||
mcmmoEnable = readBoolean("Commands.mcmmo.Enabled", true);
|
||||
mccEnable = readBoolean("Commands.mcc.Enabled", true);
|
||||
mcgodEnable = readBoolean("Commands.mcgod.Enabled", true);
|
||||
statsEnable = readBoolean("Commands.stats.Enabled", true);
|
||||
mcstatsEnable = readBoolean("Commands.mcstats.Enabled", true);
|
||||
mmoeditEnable = readBoolean("Commands.mmoedit.Enabled", true);
|
||||
mcremoveEnable = readBoolean("Commands.mcremove.Enable", true);
|
||||
ptpEnable = readBoolean("Commands.ptp.Enabled", true);
|
||||
partyEnable = readBoolean("Commands.party.Enabled", true);
|
||||
myspawnEnable = readBoolean("Commands.myspawn.Enabled", true);
|
||||
whoisEnable = readBoolean("Commands.whois.Enabled", true);
|
||||
inspectEnable = readBoolean("Commands.inspect.Enabled", true);
|
||||
inviteEnable = readBoolean("Commands.invite.Enabled", true);
|
||||
acceptEnable = readBoolean("Commands.accept.Enabled", true);
|
||||
clearmyspawnEnable = readBoolean("Commands.clearmyspawn.Enabled", true);
|
||||
aEnable = readBoolean("Commands.a.Enabled", true);
|
||||
pEnable = readBoolean("Commands.p.Enabled", true);
|
||||
|
||||
aDisplayNames = readBoolean("Commands.a.Display_Names", true);
|
||||
pDisplayNames = readBoolean("Commands.p.Display_Names", true);
|
||||
|
||||
animalXP = readDouble("Experience.Combat.Multiplier.Animals", 1.0);
|
||||
creeperXP = readDouble("Experience.Combat.Multiplier.Creeper", 4.0);
|
||||
skeletonXP = readDouble("Experience.Combat.Multiplier.Skeleton", 2.0);
|
||||
spiderXP = readDouble("Experience.Combat.Multiplier.Spider", 3.0);
|
||||
ghastXP = readDouble("Experience.Combat.Multiplier.Ghast", 3.0);
|
||||
slimeXP = readDouble("Experience.Combat.Multiplier.Slime", 2.0);
|
||||
zombieXP = readDouble("Experience.Combat.Multiplier.Zombie", 2.0);
|
||||
pigzombieXP = readDouble("Experience.Combat.Multiplier.Pig_Zombie", 3.0);
|
||||
endermanXP = readDouble("Experience.Combat.Multiplier.Enderman", 2.0);
|
||||
cavespiderXP = readDouble("Experience.Combat.Multiplier.Cave_Spider", 3.0);
|
||||
silverfishXP = readDouble("Experience.Combat.Multiplier.Silverfish", 3.0);
|
||||
blazeXP = readDouble("Experience.Combat.Multiplier.Blaze", 3.0);
|
||||
magmacubeXP = readDouble("Experience.Combat.Multiplier.Magma_Cube", 2.0);
|
||||
enderdragonXP = readDouble("Experience.Combat.Multiplier.Ender_Dragon", 8.0);
|
||||
|
||||
detonatorID = readInteger("Skills.Mining.Detonator_ID", 259);
|
||||
}
|
||||
}
|
||||
219
src/main/java/com/gmail/nossr50/config/LoadTreasures.java
Normal file
219
src/main/java/com/gmail/nossr50/config/LoadTreasures.java
Normal file
@@ -0,0 +1,219 @@
|
||||
package com.gmail.nossr50.config;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.Treasure;
|
||||
|
||||
public class LoadTreasures {
|
||||
|
||||
public static List<ExcavationTreasure> excavationFromDirt = new ArrayList<ExcavationTreasure>();
|
||||
public static List<ExcavationTreasure> excavationFromGrass = new ArrayList<ExcavationTreasure>();
|
||||
public static List<ExcavationTreasure> excavationFromSand = new ArrayList<ExcavationTreasure>();
|
||||
public static List<ExcavationTreasure> excavationFromGravel = new ArrayList<ExcavationTreasure>();
|
||||
public static List<ExcavationTreasure> excavationFromClay = new ArrayList<ExcavationTreasure>();
|
||||
public static List<ExcavationTreasure> excavationFromMycel = new ArrayList<ExcavationTreasure>();
|
||||
public static List<ExcavationTreasure> excavationFromSoulSand = new ArrayList<ExcavationTreasure>();
|
||||
public static List<FishingTreasure> fishingRewardsTier1 = new ArrayList<FishingTreasure>();
|
||||
public static List<FishingTreasure> fishingRewardsTier2 = new ArrayList<FishingTreasure>();
|
||||
public static List<FishingTreasure> fishingRewardsTier3 = new ArrayList<FishingTreasure>();
|
||||
public static List<FishingTreasure> fishingRewardsTier4 = new ArrayList<FishingTreasure>();
|
||||
public static List<FishingTreasure> fishingRewardsTier5 = new ArrayList<FishingTreasure>();
|
||||
|
||||
protected static File configFile;
|
||||
protected static File dataFolder;
|
||||
protected final mcMMO plugin;
|
||||
protected static FileConfiguration config;
|
||||
|
||||
public LoadTreasures(mcMMO plugin) {
|
||||
this.plugin = plugin;
|
||||
dataFolder = plugin.getDataFolder();
|
||||
configFile = new File(dataFolder, File.separator + "treasures.yml");
|
||||
config = plugin.getTreasuresConfig();
|
||||
}
|
||||
|
||||
public void load() {
|
||||
// If not exist, copy from the jar
|
||||
if (!configFile.exists()) {
|
||||
dataFolder.mkdir();
|
||||
plugin.saveTreasuresConfig();
|
||||
}
|
||||
addDefaults();
|
||||
loadKeys();
|
||||
}
|
||||
|
||||
private static void saveConfig() {
|
||||
try {
|
||||
config.save(configFile);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void addDefaults() {
|
||||
// Load from included config.yml
|
||||
config.options().copyDefaults(true);
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
private Boolean readBoolean(String root, Boolean def) {
|
||||
Boolean result = config.getBoolean(root, def);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void loadKeys()
|
||||
{
|
||||
plugin.getLogger().info("Loading mcMMO treasures.yml File...");
|
||||
|
||||
// Load treasures
|
||||
Map<String, Treasure> treasures = new HashMap<String, Treasure>();
|
||||
|
||||
ConfigurationSection treasureSection = config.getConfigurationSection("Treasures");
|
||||
Set<String> treasureConfigSet = treasureSection.getKeys(false);
|
||||
Iterator<String> iterator = treasureConfigSet.iterator();
|
||||
while(iterator.hasNext())
|
||||
{
|
||||
String treasureName = iterator.next();
|
||||
|
||||
// Validate all the things!
|
||||
List<String> reason = new ArrayList<String>();
|
||||
|
||||
if(!config.contains("Treasures." + treasureName + ".ID")) reason.add("Missing ID");
|
||||
if(!config.contains("Treasures." + treasureName + ".Amount")) reason.add("Missing Amount");
|
||||
if(!config.contains("Treasures." + treasureName + ".Data")) reason.add("Missing Data");
|
||||
|
||||
int id = config.getInt("Treasures." + treasureName + ".ID");
|
||||
int amount = config.getInt("Treasures." + treasureName + ".Amount");
|
||||
int data = config.getInt("Treasures." + treasureName + ".Data");
|
||||
|
||||
if(Material.getMaterial(id) == null) reason.add("Invlid id: " + id);
|
||||
if(amount < 1) reason.add("Invalid amount: " + amount);
|
||||
if(data > 127 || data < -128) reason.add("Invalid data: " + data);
|
||||
|
||||
if(!config.contains("Treasures." + treasureName + ".XP")) reason.add("Missing XP");
|
||||
if(!config.contains("Treasures." + treasureName + ".Drop_Chance")) reason.add("Missing Drop_Chance");
|
||||
if(!config.contains("Treasures." + treasureName + ".Drop_Level")) reason.add("Missing Drop_Level");
|
||||
|
||||
int xp = config.getInt("Treasures." + treasureName + ".XP");
|
||||
Double dropChance = config.getDouble("Treasures." + treasureName + ".Drop_Chance");
|
||||
int dropLevel = config.getInt("Treasures." + treasureName + ".Drop_Level");
|
||||
|
||||
if(xp < 0) reason.add("Invalid xp: " + xp);
|
||||
if(dropChance < 0) reason.add("Invalid Drop_Chance: " + dropChance);
|
||||
if(dropLevel < 0) reason.add("Invalid Drop_Level: " + dropLevel);
|
||||
|
||||
ItemStack item = new ItemStack(id, amount, (byte) 0, (byte) data);
|
||||
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
||||
if(config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1)
|
||||
reason.add("Fishing drops cannot also be excavation drops");
|
||||
|
||||
if(!config.contains("Treasures." + treasureName + ".Max_Level")) reason.add("Missing Max_Level");
|
||||
int maxLevel = config.getInt("Treasures." + treasureName + ".Max_Level");
|
||||
|
||||
if(maxLevel < 0) reason.add("Invalid Max_Level: " + maxLevel);
|
||||
|
||||
if(noErrorsInTreasure(reason)) {
|
||||
FishingTreasure fTreasure = new FishingTreasure(item, xp, dropChance, dropLevel, maxLevel);
|
||||
treasures.put(treasureName, fTreasure);
|
||||
}
|
||||
} else {
|
||||
ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Dirt", false))
|
||||
eTreasure.setDropsFromDirt();
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Grass", false))
|
||||
eTreasure.setDropsFromGrass();
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Sand", false))
|
||||
eTreasure.setDropsFromSand();
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Gravel", false))
|
||||
eTreasure.setDropsFromGravel();
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Clay", false))
|
||||
eTreasure.setDropsFromClay();
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Mycelium", false))
|
||||
eTreasure.setDropsFromMycel();
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Soul_Sand", false))
|
||||
eTreasure.setDropsFromSoulSand();
|
||||
|
||||
if(readBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
|
||||
reason.add("Excavation drops cannot also be fishing drops");
|
||||
}
|
||||
|
||||
if(noErrorsInTreasure(reason)) {
|
||||
treasures.put(treasureName, eTreasure);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<String> excavationTreasures = config.getStringList("Excavation.Treasure");
|
||||
List<String> fishingTreasures = config.getStringList("Fishing.Treasure");
|
||||
|
||||
Iterator<String> treasureIterator = treasures.keySet().iterator();
|
||||
while(treasureIterator.hasNext()) {
|
||||
String treasureKey = treasureIterator.next();
|
||||
Treasure treasure = treasures.get(treasureKey);
|
||||
|
||||
if(treasure instanceof FishingTreasure) {
|
||||
if(!fishingTreasures.contains(treasureKey)) continue;
|
||||
|
||||
FishingTreasure fTreasure = (FishingTreasure) treasure;
|
||||
int dropLevel = fTreasure.getDropLevel();
|
||||
int maxLevel = fTreasure.getMaxLevel();
|
||||
|
||||
if(dropLevel <= LoadProperties.fishingTier1 && maxLevel >= LoadProperties.fishingTier1)
|
||||
fishingRewardsTier1.add(fTreasure);
|
||||
if(dropLevel <= LoadProperties.fishingTier2 && maxLevel >= LoadProperties.fishingTier2)
|
||||
fishingRewardsTier2.add(fTreasure);
|
||||
if(dropLevel <= LoadProperties.fishingTier3 && maxLevel >= LoadProperties.fishingTier3)
|
||||
fishingRewardsTier3.add(fTreasure);
|
||||
if(dropLevel <= LoadProperties.fishingTier4 && maxLevel >= LoadProperties.fishingTier4)
|
||||
fishingRewardsTier4.add(fTreasure);
|
||||
if(dropLevel <= LoadProperties.fishingTier5 && maxLevel >= LoadProperties.fishingTier5)
|
||||
fishingRewardsTier5.add(fTreasure);
|
||||
|
||||
} else if(treasure instanceof ExcavationTreasure) {
|
||||
if(!excavationTreasures.contains(treasureKey)) continue;
|
||||
|
||||
ExcavationTreasure eTreasure = (ExcavationTreasure) treasure;
|
||||
if(eTreasure.getDropsFromDirt())
|
||||
excavationFromDirt.add(eTreasure);
|
||||
if(eTreasure.getDropsFromGrass())
|
||||
excavationFromGrass.add(eTreasure);
|
||||
if(eTreasure.getDropsFromSand())
|
||||
excavationFromSand.add(eTreasure);
|
||||
if(eTreasure.getDropsFromGravel())
|
||||
excavationFromGravel.add(eTreasure);
|
||||
if(eTreasure.getDropsFromClay())
|
||||
excavationFromClay.add(eTreasure);
|
||||
if(eTreasure.getDropsFromMycel())
|
||||
excavationFromMycel.add(eTreasure);
|
||||
if(eTreasure.getDropsFromSoulSand())
|
||||
excavationFromSoulSand.add(eTreasure);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean noErrorsInTreasure(List<String> issues) {
|
||||
if(issues.isEmpty()) return true;
|
||||
|
||||
for(String issue : issues) {
|
||||
plugin.getLogger().warning(issue);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,9 +19,11 @@ package com.gmail.nossr50.config;
|
||||
import java.util.*;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
|
||||
@@ -31,12 +33,11 @@ public class Misc
|
||||
|
||||
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||
|
||||
public ArrayList<Entity> mobSpawnerList = new ArrayList<Entity>();
|
||||
public ArrayList<Integer> mobSpawnerList = new ArrayList<Integer>();
|
||||
public HashSet<Block> blockWatchList = new HashSet<Block>();
|
||||
public ArrayList<Block> treeFeller = new ArrayList<Block>();
|
||||
public HashMap<Entity, Integer> arrowTracker = new HashMap<Entity, Integer>();
|
||||
public ArrayList<LivingEntity> bleedTracker = new ArrayList<LivingEntity>();
|
||||
public HashMap<Block, Integer> tntTracker = new HashMap<Block, Integer>();
|
||||
public HashMap<Location, Player> tntTracker = new HashMap<Location, Player>();
|
||||
mcMMO plugin = null;
|
||||
|
||||
//BLEED QUE STUFF
|
||||
|
||||
@@ -1,11 +1,195 @@
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
public enum AbilityType {
|
||||
BERSERK,
|
||||
SUPER_BREAKER,
|
||||
GIGA_DRILL_BREAKER,
|
||||
GREEN_TERRA,
|
||||
SKULL_SPLIITER,
|
||||
TREE_FELLER,
|
||||
SERRATED_STRIKES;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public enum AbilityType
|
||||
{
|
||||
BERSERK(LoadProperties.berserkCooldown, mcLocale.getString("Skills.BerserkOn"), mcLocale.getString("Skills.BerserkOff"), "Skills.BerserkPlayer", mcLocale.getString("Skills.YourBerserk"), "Skills.BerserkPlayerOff"),
|
||||
SUPER_BREAKER(LoadProperties.superBreakerCooldown, mcLocale.getString("Skills.SuperBreakerOn"), mcLocale.getString("Skills.SuperBreakerOff"), "Skills.SuperBreakerPlayer", mcLocale.getString("Skills.YourSuperBreaker"), "Skills.SuperBreakerPlayerOff"),
|
||||
GIGA_DRILL_BREAKER(LoadProperties.gigaDrillBreakerCooldown, mcLocale.getString("Skills.GigaDrillBreakerOn"), mcLocale.getString("Skills.GigaDrillBreakerOff"), "Skills.GigaDrillBreakerPlayer", mcLocale.getString("Skills.YourGigaDrillBreaker"), "Skills.GigaDrillBreakerPlayerOff"),
|
||||
GREEN_TERRA(LoadProperties.greenTerraCooldown, mcLocale.getString("Skills.GreenTerraOn"), mcLocale.getString("Skills.GreenTerraOff"), "Skills.GreenTerraPlayer", mcLocale.getString("Skills.YourGreenTerra"), mcLocale.getString("Skills.GreenTerraPlayerOff")),
|
||||
SKULL_SPLIITER(LoadProperties.skullSplitterCooldown, mcLocale.getString("Skills.SkullSplitterOn"), mcLocale.getString("Skills.SkullSplitterOff"), "Skills.SkullSplitterPlayer", mcLocale.getString("Skills.YourSkullSplitter"), "Skills.SkullSplitterPlayerOff"),
|
||||
TREE_FELLER(LoadProperties.treeFellerCooldown, mcLocale.getString("Skills.TreeFellerOn"), mcLocale.getString("Skills.TreeFellerOff"), "Skills.TreeFellerPlayer", mcLocale.getString("Skills.YourTreeFeller"), "Skills.TreeFellerPlayerOff"),
|
||||
SERRATED_STRIKES(LoadProperties.skullSplitterCooldown, mcLocale.getString("Skills.SerratedStrikesOn"), mcLocale.getString("Skills.SerratedStrikesOff"), "Skills.SerratedStrikesPlayer", mcLocale.getString("Skills.YourSerratedStrikes"), "Skills.SerratedStrikesPlayerOff"),
|
||||
BLAST_MINING(LoadProperties.blastMiningCooldown, "NOT NEEDED FOR BLAST MINING", "NOT NEEDED FOR BLAST MINING", "Skills.BlastMiningPlayer", mcLocale.getString("Skills.YourBlastMining"), "NOT NEEDED FOR BLAST MINING");
|
||||
|
||||
private int cooldown;
|
||||
private String abilityOn;
|
||||
private String abilityOff;
|
||||
private String abilityPlayer;
|
||||
private String abilityRefresh;
|
||||
private String abilityPlayerOff;
|
||||
|
||||
private AbilityType(int cooldown, String abilityOn, String abilityOff, String abilityPlayer, String abilityRefresh, String abilityPlayerOff)
|
||||
{
|
||||
this.cooldown = cooldown;
|
||||
this.abilityOn = abilityOn;
|
||||
this.abilityOff = abilityOff;
|
||||
this.abilityPlayer = abilityPlayer;
|
||||
this.abilityRefresh = abilityRefresh;
|
||||
this.abilityPlayerOff = abilityPlayerOff;
|
||||
}
|
||||
|
||||
public int getCooldown()
|
||||
{
|
||||
return this.cooldown;
|
||||
}
|
||||
|
||||
public String getAbilityOn()
|
||||
{
|
||||
return this.abilityOn;
|
||||
}
|
||||
|
||||
public String getAbilityOff()
|
||||
{
|
||||
return this.abilityOff;
|
||||
}
|
||||
|
||||
public String getAbilityPlayer(Player player)
|
||||
{
|
||||
return mcLocale.getString(this.abilityPlayer, new Object[] {player.getName()});
|
||||
}
|
||||
|
||||
public String getAbilityPlayerOff(Player player)
|
||||
{
|
||||
return mcLocale.getString(this.abilityPlayerOff, new Object[] {player.getName()});
|
||||
}
|
||||
|
||||
public String getAbilityRefresh()
|
||||
{
|
||||
return this.abilityRefresh;
|
||||
}
|
||||
|
||||
public boolean getMode(PlayerProfile PP)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case BERSERK:
|
||||
return PP.getBerserkMode();
|
||||
case SUPER_BREAKER:
|
||||
return PP.getSuperBreakerMode();
|
||||
case GIGA_DRILL_BREAKER:
|
||||
return PP.getGigaDrillBreakerMode();
|
||||
case GREEN_TERRA:
|
||||
return PP.getGreenTerraMode();
|
||||
case SKULL_SPLIITER:
|
||||
return PP.getSkullSplitterMode();
|
||||
case TREE_FELLER:
|
||||
return PP.getTreeFellerMode();
|
||||
case SERRATED_STRIKES:
|
||||
return PP.getSerratedStrikesMode();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setMode(PlayerProfile PP, boolean bool)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case BERSERK:
|
||||
PP.setBerserkMode(bool);
|
||||
break;
|
||||
case SUPER_BREAKER:
|
||||
PP.setSuperBreakerMode(bool);
|
||||
break;
|
||||
case GIGA_DRILL_BREAKER:
|
||||
PP.setGigaDrillBreakerMode(bool);
|
||||
break;
|
||||
case GREEN_TERRA:
|
||||
PP.setGreenTerraMode(bool);
|
||||
break;
|
||||
case SKULL_SPLIITER:
|
||||
PP.setSkullSplitterMode(bool);
|
||||
break;
|
||||
case TREE_FELLER:
|
||||
PP.setTreeFellerMode(bool);
|
||||
break;
|
||||
case SERRATED_STRIKES:
|
||||
PP.setSerratedStrikesMode(bool);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getInformed(PlayerProfile PP)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case BLAST_MINING:
|
||||
return PP.getBlastMiningInformed();
|
||||
case BERSERK:
|
||||
return PP.getBerserkInformed();
|
||||
case SUPER_BREAKER:
|
||||
return PP.getSuperBreakerInformed();
|
||||
case GIGA_DRILL_BREAKER:
|
||||
return PP.getGigaDrillBreakerInformed();
|
||||
case GREEN_TERRA:
|
||||
return PP.getGreenTerraInformed();
|
||||
case SKULL_SPLIITER:
|
||||
return PP.getSkullSplitterInformed();
|
||||
case TREE_FELLER:
|
||||
return PP.getTreeFellerInformed();
|
||||
case SERRATED_STRIKES:
|
||||
return PP.getSerratedStrikesInformed();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setInformed(PlayerProfile PP, boolean bool)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case BLAST_MINING:
|
||||
PP.setBlastMiningInformed(bool);
|
||||
break;
|
||||
case BERSERK:
|
||||
PP.setBerserkInformed(bool);
|
||||
break;
|
||||
case SUPER_BREAKER:
|
||||
PP.setSuperBreakerInformed(bool);
|
||||
break;
|
||||
case GIGA_DRILL_BREAKER:
|
||||
PP.setGigaDrillBreakerInformed(bool);
|
||||
break;
|
||||
case GREEN_TERRA:
|
||||
PP.setGreenTerraInformed(bool);
|
||||
break;
|
||||
case SKULL_SPLIITER:
|
||||
PP.setSkullSplitterInformed(bool);
|
||||
break;
|
||||
case TREE_FELLER:
|
||||
PP.setTreeFellerInformed(bool);
|
||||
break;
|
||||
case SERRATED_STRIKES:
|
||||
PP.setSerratedStrikesInformed(bool);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getPermissions(Player player)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case BERSERK:
|
||||
return mcPermissions.getInstance().unarmedAbility(player);
|
||||
case GIGA_DRILL_BREAKER:
|
||||
return mcPermissions.getInstance().excavationAbility(player);
|
||||
case GREEN_TERRA:
|
||||
return mcPermissions.getInstance().herbalismAbility(player);
|
||||
case SERRATED_STRIKES:
|
||||
return mcPermissions.getInstance().swordsAbility(player);
|
||||
case SKULL_SPLIITER:
|
||||
return mcPermissions.getInstance().axesAbility(player);
|
||||
case SUPER_BREAKER:
|
||||
return mcPermissions.getInstance().miningAbility(player);
|
||||
case TREE_FELLER:
|
||||
return mcPermissions.getInstance().woodCuttingAbility(player);
|
||||
case BLAST_MINING:
|
||||
return mcPermissions.getInstance().blastMining(player);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -25,11 +25,8 @@ import java.util.ArrayList;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.events.McMMOPlayerXpGainEvent;
|
||||
@@ -38,8 +35,6 @@ import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
|
||||
|
||||
|
||||
public class PlayerProfile
|
||||
{
|
||||
protected final Logger log = Logger.getLogger("Minecraft");
|
||||
@@ -48,17 +43,17 @@ public class PlayerProfile
|
||||
private HUDType hud;
|
||||
|
||||
//MISC
|
||||
private String party, myspawn, myspawnworld, invite;
|
||||
private String party, invite;
|
||||
|
||||
//TOGGLES
|
||||
private boolean partyhud = true, spoutcraft = false, filling = false, xpbarlocked = false, placedAnvil = false, partyChatMode = false, adminChatMode = false, godMode = false, greenTerraMode, partyChatOnly = false, greenTerraInformed = true, berserkInformed = true, skullSplitterInformed = true, gigaDrillBreakerInformed = true,
|
||||
superBreakerInformed = true, serratedStrikesInformed = true, treeFellerInformed = true, dead, abilityuse = true, treeFellerMode, superBreakerMode, gigaDrillBreakerMode,
|
||||
private boolean loaded = false, partyhud = true, spoutcraft = false, filling = false, xpbarlocked = false, placedAnvil = false, partyChatMode = false, adminChatMode = false, godMode = false, greenTerraMode, partyChatOnly = false, greenTerraInformed = true, berserkInformed = true, skullSplitterInformed = true, gigaDrillBreakerInformed = true,
|
||||
superBreakerInformed = true, blastMiningInformed = true, serratedStrikesInformed = true, treeFellerInformed = true, dead, abilityuse = true, treeFellerMode, superBreakerMode, gigaDrillBreakerMode,
|
||||
serratedStrikesMode, hoePreparationMode = false, shovelPreparationMode = false, swordsPreparationMode = false, fistsPreparationMode = false, pickaxePreparationMode = false, axePreparationMode = false, skullSplitterMode, berserkMode;
|
||||
|
||||
//TIMESTAMPS
|
||||
//ATS = (Time of) Activation Time Stamp
|
||||
//DATS = (Time of) Deactivation Time Stamp
|
||||
private int xpGainATS = 0, recentlyHurt = 0, mySpawnATS, respawnATS, hoePreparationATS, shovelPreparationATS, swordsPreparationATS, fistsPreparationATS, axePreparationATS, pickaxePreparationATS;
|
||||
private int xpGainATS = 0, recentlyHurt = 0, respawnATS, hoePreparationATS, shovelPreparationATS, swordsPreparationATS, fistsPreparationATS, axePreparationATS, pickaxePreparationATS;
|
||||
|
||||
private SkillType lastgained = null, skillLock = null;
|
||||
|
||||
@@ -74,7 +69,7 @@ public class PlayerProfile
|
||||
|
||||
String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
|
||||
|
||||
public PlayerProfile(Player player)
|
||||
public PlayerProfile(String name)
|
||||
{
|
||||
hud = LoadProperties.defaulthud;
|
||||
//Setup the HashMap for ability DATS
|
||||
@@ -93,18 +88,51 @@ public class PlayerProfile
|
||||
}
|
||||
}
|
||||
|
||||
playerName = player.getName();
|
||||
playerName = name;
|
||||
if (LoadProperties.useMySQL)
|
||||
{
|
||||
if(!loadMySQL(player)) {
|
||||
addMySQLPlayer(player);
|
||||
loadMySQL(player);//This is probably not needed anymore, could just delete
|
||||
if(!loadMySQL()) {
|
||||
addMySQLPlayer();
|
||||
loadMySQL();//This is probably not needed anymore, could just delete
|
||||
}
|
||||
} else {
|
||||
if(!load()) { addPlayer(); }
|
||||
if(!load()) { addPlayer();}
|
||||
}
|
||||
lastlogin = ((Long) (System.currentTimeMillis()/1000)).intValue();
|
||||
}
|
||||
|
||||
public PlayerProfile(String name, boolean addNew)
|
||||
{
|
||||
hud = LoadProperties.defaulthud;
|
||||
//Setup the HashMap for ability DATS
|
||||
for(AbilityType abilityType : AbilityType.values())
|
||||
{
|
||||
skillsDATS.put(abilityType, 0);
|
||||
}
|
||||
|
||||
//Setup the HashMap for the skills
|
||||
for(SkillType skillType : SkillType.values())
|
||||
{
|
||||
if(skillType != SkillType.ALL)
|
||||
{
|
||||
skills.put(skillType, 0);
|
||||
skillsXp.put(skillType, 0);
|
||||
}
|
||||
}
|
||||
|
||||
playerName = name;
|
||||
if (LoadProperties.useMySQL)
|
||||
{
|
||||
if(!loadMySQL() && addNew) {
|
||||
addMySQLPlayer();
|
||||
loadMySQL();//This is probably not needed anymore, could just delete
|
||||
}
|
||||
} else {
|
||||
if(!load() && addNew) { addPlayer(); loaded = true; }
|
||||
}
|
||||
lastlogin = ((Long) (System.currentTimeMillis()/1000)).intValue();
|
||||
}
|
||||
|
||||
public int getLastLogin()
|
||||
{
|
||||
return lastlogin;
|
||||
@@ -114,10 +142,10 @@ public class PlayerProfile
|
||||
return userid;
|
||||
}
|
||||
|
||||
public boolean loadMySQL(Player p)
|
||||
public boolean loadMySQL()
|
||||
{
|
||||
Integer id = 0;
|
||||
id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + p.getName() + "'");
|
||||
id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'");
|
||||
if(id == 0)
|
||||
return false;
|
||||
this.userid = id;
|
||||
@@ -142,11 +170,8 @@ public class PlayerProfile
|
||||
}
|
||||
HashMap<Integer, ArrayList<String>> users = mcMMO.database.Read("SELECT lastlogin, party FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = " + id);
|
||||
//lastlogin = Integer.parseInt(users.get(1).get(0));
|
||||
party = users.get(1).get(1);
|
||||
HashMap<Integer, ArrayList<String>> spawn = mcMMO.database.Read("SELECT world, x, y, z FROM "+LoadProperties.MySQLtablePrefix+"spawn WHERE user_id = " + id);
|
||||
myspawnworld = spawn.get(1).get(0);
|
||||
myspawn = spawn.get(1).get(1) + "," + spawn.get(1).get(2) + "," + spawn.get(1).get(3);
|
||||
HashMap<Integer, ArrayList<String>> cooldowns = mcMMO.database.Read("SELECT mining, woodcutting, unarmed, herbalism, excavation, swords, axes FROM "+LoadProperties.MySQLtablePrefix+"cooldowns WHERE user_id = " + id);
|
||||
party = users.get(1).get(1);
|
||||
HashMap<Integer, ArrayList<String>> cooldowns = mcMMO.database.Read("SELECT mining, woodcutting, unarmed, herbalism, excavation, swords, axes, blast_mining FROM "+LoadProperties.MySQLtablePrefix+"cooldowns WHERE user_id = " + id);
|
||||
/*
|
||||
* I'm still learning MySQL, this is a fix for adding a new table
|
||||
* its not pretty but it works
|
||||
@@ -164,6 +189,7 @@ public class PlayerProfile
|
||||
skillsDATS.put(AbilityType.GIGA_DRILL_BREAKER, Integer.valueOf(cooldowns.get(1).get(4)));
|
||||
skillsDATS.put(AbilityType.SERRATED_STRIKES, Integer.valueOf(cooldowns.get(1).get(5)));
|
||||
skillsDATS.put(AbilityType.SKULL_SPLIITER, Integer.valueOf(cooldowns.get(1).get(6)));
|
||||
skillsDATS.put(AbilityType.BLAST_MINING, Integer.valueOf(cooldowns.get(1).get(7)));
|
||||
}
|
||||
HashMap<Integer, ArrayList<String>> stats = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics, fishing FROM "+LoadProperties.MySQLtablePrefix+"skills WHERE user_id = " + id);
|
||||
skills.put(SkillType.TAMING, Integer.valueOf(stats.get(1).get(0)));
|
||||
@@ -191,18 +217,18 @@ public class PlayerProfile
|
||||
skillsXp.put(SkillType.AXES, Integer.valueOf(experience.get(1).get(9)));
|
||||
skillsXp.put(SkillType.ACROBATICS, Integer.valueOf(experience.get(1).get(10)));
|
||||
skillsXp.put(SkillType.FISHING, Integer.valueOf(experience.get(1).get(11)));
|
||||
loaded = true;
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public void addMySQLPlayer(Player p) {
|
||||
public void addMySQLPlayer() {
|
||||
Integer id = 0;
|
||||
mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"users (user, lastlogin) VALUES ('" + p.getName() + "'," + System.currentTimeMillis() / 1000 +")");
|
||||
id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + p.getName() + "'");
|
||||
mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"users (user, lastlogin) VALUES ('" + playerName + "'," + System.currentTimeMillis() / 1000 +")");
|
||||
id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'");
|
||||
mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"cooldowns (user_id) VALUES ("+id+")");
|
||||
mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"spawn (user_id) VALUES ("+id+")");
|
||||
mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"skills (user_id) VALUES ("+id+")");
|
||||
mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"experience (user_id) VALUES ("+id+")");
|
||||
this.userid = id;
|
||||
@@ -225,9 +251,6 @@ public class PlayerProfile
|
||||
//Get Mining
|
||||
if(character.length > 1 && m.isInt(character[1]))
|
||||
skills.put(SkillType.MINING, Integer.valueOf(character[1]));
|
||||
//Myspawn
|
||||
if(character.length > 2)
|
||||
myspawn = character[2];
|
||||
//Party
|
||||
if(character.length > 3)
|
||||
party = character[3];
|
||||
@@ -270,8 +293,6 @@ public class PlayerProfile
|
||||
skillsXp.put(SkillType.AXES, Integer.valueOf(character[21]));
|
||||
if(character.length > 22 && m.isInt(character[22]))
|
||||
skillsXp.put(SkillType.ACROBATICS, Integer.valueOf(character[22]));
|
||||
if(character.length > 23 && m.isInt(character[23]))
|
||||
myspawnworld = character[23];
|
||||
if(character.length > 24 && m.isInt(character[24]))
|
||||
skills.put(SkillType.TAMING, Integer.valueOf(character[24]));
|
||||
if(character.length > 25 && m.isInt(character[25]))
|
||||
@@ -304,7 +325,10 @@ public class PlayerProfile
|
||||
skills.put(SkillType.FISHING, Integer.valueOf(character[34]));
|
||||
if(character.length > 35)
|
||||
skillsXp.put(SkillType.FISHING, Integer.valueOf(character[35]));
|
||||
if(character.length > 36)
|
||||
skillsDATS.put(AbilityType.BLAST_MINING, Integer.valueOf(character[36]));
|
||||
in.close();
|
||||
loaded = true;
|
||||
return true;
|
||||
}
|
||||
in.close();
|
||||
@@ -325,7 +349,6 @@ public class PlayerProfile
|
||||
+" hudtype = '"+hud.toString()+"' WHERE user_id = "+this.userid);
|
||||
mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET lastlogin = " + timestamp.intValue() + " WHERE id = " + this.userid);
|
||||
mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET party = '"+this.party+"' WHERE id = " +this.userid);
|
||||
mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + this.myspawnworld + "', x = " +getX()+", y = "+getY()+", z = "+getZ()+" WHERE user_id = "+this.userid);
|
||||
mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"cooldowns SET "
|
||||
+" mining = " + skillsDATS.get(AbilityType.SUPER_BREAKER)
|
||||
+", woodcutting = " + skillsDATS.get(AbilityType.TREE_FELLER)
|
||||
@@ -334,6 +357,7 @@ public class PlayerProfile
|
||||
+", excavation = " + skillsDATS.get(AbilityType.GIGA_DRILL_BREAKER)
|
||||
+", swords = " + skillsDATS.get(AbilityType.SERRATED_STRIKES)
|
||||
+", axes = " + skillsDATS.get(AbilityType.SKULL_SPLIITER)
|
||||
+", blast_mining = " + skillsDATS.get(AbilityType.BLAST_MINING)
|
||||
+" WHERE user_id = "+this.userid);
|
||||
mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"skills SET "
|
||||
+" taming = "+skills.get(SkillType.TAMING)
|
||||
@@ -386,7 +410,7 @@ public class PlayerProfile
|
||||
} else {
|
||||
writer.append(playerName + ":");
|
||||
writer.append(skills.get(SkillType.MINING) + ":");
|
||||
writer.append(myspawn + ":");
|
||||
writer.append("" + ":");
|
||||
writer.append(party+":");
|
||||
writer.append(skillsXp.get(SkillType.MINING) + ":");
|
||||
writer.append(skills.get(SkillType.WOODCUTTING) + ":");
|
||||
@@ -407,7 +431,7 @@ public class PlayerProfile
|
||||
writer.append(skillsXp.get(SkillType.SWORDS) + ":");
|
||||
writer.append(skillsXp.get(SkillType.AXES) + ":");
|
||||
writer.append(skillsXp.get(SkillType.ACROBATICS) + ":");
|
||||
writer.append(myspawnworld+":");
|
||||
writer.append(""+":");
|
||||
writer.append(skills.get(SkillType.TAMING) + ":");
|
||||
writer.append(skillsXp.get(SkillType.TAMING) + ":");
|
||||
//Need to store the DATS of abilities nao
|
||||
@@ -422,6 +446,7 @@ public class PlayerProfile
|
||||
writer.append(hud.toString()+":");
|
||||
writer.append(skills.get(SkillType.FISHING) + ":");
|
||||
writer.append(skillsXp.get(SkillType.FISHING) + ":");
|
||||
writer.append(String.valueOf(skillsDATS.get(AbilityType.BLAST_MINING)) + ":");
|
||||
writer.append("\r\n");
|
||||
}
|
||||
}
|
||||
@@ -435,6 +460,29 @@ public class PlayerProfile
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void resetAllData()
|
||||
{
|
||||
//This will reset everything to default values and then save the information to FlatFile/MySQL
|
||||
for(SkillType skillType : SkillType.values())
|
||||
{
|
||||
if(skillType == SkillType.ALL)
|
||||
continue;
|
||||
skills.put(skillType, 0);
|
||||
skillsXp.put(skillType, 0);
|
||||
}
|
||||
|
||||
for(AbilityType abilityType : AbilityType.values())
|
||||
{
|
||||
skillsDATS.put(abilityType, 0);
|
||||
}
|
||||
|
||||
//Misc stuff
|
||||
party = "";
|
||||
|
||||
save();
|
||||
}
|
||||
|
||||
public void addPlayer()
|
||||
{
|
||||
try {
|
||||
@@ -445,7 +493,7 @@ public class PlayerProfile
|
||||
//Add the player to the end
|
||||
out.append(playerName + ":");
|
||||
out.append(0 + ":"); //mining
|
||||
out.append(myspawn+":");
|
||||
out.append(""+":");
|
||||
out.append(party+":");
|
||||
out.append(0+":"); //XP
|
||||
out.append(0+":"); //woodcutting
|
||||
@@ -466,7 +514,7 @@ public class PlayerProfile
|
||||
out.append(0+":"); //swordsXP
|
||||
out.append(0+":"); //axesXP
|
||||
out.append(0+":"); //acrobaticsXP
|
||||
out.append(myspawnworld+":");
|
||||
out.append(""+":");
|
||||
out.append(0+":"); //taming
|
||||
out.append(0+":"); //tamingXP
|
||||
out.append(0+":"); //DATS
|
||||
@@ -479,6 +527,7 @@ public class PlayerProfile
|
||||
out.append(LoadProperties.defaulthud.toString()+":");//HUD
|
||||
out.append(0+":"); //Fishing
|
||||
out.append(0+":"); //FishingXP
|
||||
out.append(0+":"); //Blast Mining
|
||||
|
||||
//Add more in the same format as the line above
|
||||
|
||||
@@ -492,6 +541,10 @@ public class PlayerProfile
|
||||
{
|
||||
partyhud = !partyhud;
|
||||
}
|
||||
public boolean isLoaded()
|
||||
{
|
||||
return loaded;
|
||||
}
|
||||
public boolean getPartyHUD()
|
||||
{
|
||||
return partyhud;
|
||||
@@ -592,13 +645,6 @@ public class PlayerProfile
|
||||
{
|
||||
abilityuse = !abilityuse;
|
||||
}
|
||||
public long getMySpawnATS(){
|
||||
return mySpawnATS;
|
||||
}
|
||||
public void setMySpawnATS(long newvalue)
|
||||
{
|
||||
mySpawnATS = (int) (newvalue/1000);
|
||||
}
|
||||
public void decreaseBleedTicks()
|
||||
{
|
||||
bleedticks--;
|
||||
@@ -608,9 +654,17 @@ public class PlayerProfile
|
||||
}
|
||||
public void setBleedTicks(Integer newvalue){
|
||||
bleedticks = newvalue;
|
||||
|
||||
//Cap maximum ticks at 10
|
||||
if(bleedticks > 10)
|
||||
bleedticks = 10;
|
||||
}
|
||||
public void addBleedTicks(Integer newvalue){
|
||||
bleedticks+=newvalue;
|
||||
|
||||
//Cap maximum ticks at 10
|
||||
if(bleedticks > 10)
|
||||
bleedticks = 10;
|
||||
}
|
||||
/*
|
||||
* EXPLOIT PREVENTION
|
||||
@@ -624,7 +678,7 @@ public class PlayerProfile
|
||||
public boolean getHoePreparationMode(){
|
||||
return hoePreparationMode;
|
||||
}
|
||||
public void setHoePreparationMode(Boolean bool){
|
||||
public void setHoePreparationMode(boolean bool){
|
||||
hoePreparationMode = bool;
|
||||
}
|
||||
public long getHoePreparationATS(){
|
||||
@@ -640,7 +694,7 @@ public class PlayerProfile
|
||||
public boolean getSwordsPreparationMode(){
|
||||
return swordsPreparationMode;
|
||||
}
|
||||
public void setSwordsPreparationMode(Boolean bool){
|
||||
public void setSwordsPreparationMode(boolean bool){
|
||||
swordsPreparationMode = bool;
|
||||
}
|
||||
public long getSwordsPreparationATS(){
|
||||
@@ -655,7 +709,7 @@ public class PlayerProfile
|
||||
public boolean getShovelPreparationMode(){
|
||||
return shovelPreparationMode;
|
||||
}
|
||||
public void setShovelPreparationMode(Boolean bool){
|
||||
public void setShovelPreparationMode(boolean bool){
|
||||
shovelPreparationMode = bool;
|
||||
}
|
||||
public long getShovelPreparationATS(){
|
||||
@@ -670,7 +724,7 @@ public class PlayerProfile
|
||||
public boolean getFistsPreparationMode(){
|
||||
return fistsPreparationMode;
|
||||
}
|
||||
public void setFistsPreparationMode(Boolean bool){
|
||||
public void setFistsPreparationMode(boolean bool){
|
||||
fistsPreparationMode = bool;
|
||||
}
|
||||
public long getFistsPreparationATS(){
|
||||
@@ -685,7 +739,7 @@ public class PlayerProfile
|
||||
public boolean getAxePreparationMode(){
|
||||
return axePreparationMode;
|
||||
}
|
||||
public void setAxePreparationMode(Boolean bool){
|
||||
public void setAxePreparationMode(boolean bool){
|
||||
axePreparationMode = bool;
|
||||
}
|
||||
public long getAxePreparationATS(){
|
||||
@@ -700,7 +754,7 @@ public class PlayerProfile
|
||||
public boolean getPickaxePreparationMode(){
|
||||
return pickaxePreparationMode;
|
||||
}
|
||||
public void setPickaxePreparationMode(Boolean bool){
|
||||
public void setPickaxePreparationMode(boolean bool){
|
||||
pickaxePreparationMode = bool;
|
||||
}
|
||||
public long getPickaxePreparationATS(){
|
||||
@@ -713,13 +767,13 @@ public class PlayerProfile
|
||||
* GREEN TERRA MODE
|
||||
*/
|
||||
public boolean getGreenTerraInformed() {return greenTerraInformed;}
|
||||
public void setGreenTerraInformed(Boolean bool){
|
||||
public void setGreenTerraInformed(boolean bool){
|
||||
greenTerraInformed = bool;
|
||||
}
|
||||
public boolean getGreenTerraMode(){
|
||||
return greenTerraMode;
|
||||
}
|
||||
public void setGreenTerraMode(Boolean bool){
|
||||
public void setGreenTerraMode(boolean bool){
|
||||
greenTerraMode = bool;
|
||||
}
|
||||
|
||||
@@ -727,78 +781,82 @@ public class PlayerProfile
|
||||
* BERSERK MODE
|
||||
*/
|
||||
public boolean getBerserkInformed() {return berserkInformed;}
|
||||
public void setBerserkInformed(Boolean bool){
|
||||
public void setBerserkInformed(boolean bool){
|
||||
berserkInformed = bool;
|
||||
}
|
||||
public boolean getBerserkMode(){
|
||||
return berserkMode;
|
||||
}
|
||||
public void setBerserkMode(Boolean bool){
|
||||
public void setBerserkMode(boolean bool){
|
||||
berserkMode = bool;
|
||||
}
|
||||
/*
|
||||
* SKULL SPLITTER
|
||||
*/
|
||||
public boolean getSkullSplitterInformed() {return skullSplitterInformed;}
|
||||
public void setSkullSplitterInformed(Boolean bool){
|
||||
public void setSkullSplitterInformed(boolean bool){
|
||||
skullSplitterInformed = bool;
|
||||
}
|
||||
public boolean getSkullSplitterMode(){
|
||||
return skullSplitterMode;
|
||||
}
|
||||
public void setSkullSplitterMode(Boolean bool){
|
||||
public void setSkullSplitterMode(boolean bool){
|
||||
skullSplitterMode = bool;
|
||||
}
|
||||
/*
|
||||
* SERRATED STRIKES
|
||||
*/
|
||||
public boolean getSerratedStrikesInformed() {return serratedStrikesInformed;}
|
||||
public void setSerratedStrikesInformed(Boolean bool){
|
||||
public void setSerratedStrikesInformed(boolean bool){
|
||||
serratedStrikesInformed = bool;
|
||||
}
|
||||
public boolean getSerratedStrikesMode(){
|
||||
return serratedStrikesMode;
|
||||
}
|
||||
public void setSerratedStrikesMode(Boolean bool){
|
||||
public void setSerratedStrikesMode(boolean bool){
|
||||
serratedStrikesMode = bool;
|
||||
}
|
||||
/*
|
||||
* GIGA DRILL BREAKER
|
||||
*/
|
||||
public boolean getGigaDrillBreakerInformed() {return gigaDrillBreakerInformed;}
|
||||
public void setGigaDrillBreakerInformed(Boolean bool){
|
||||
public void setGigaDrillBreakerInformed(boolean bool){
|
||||
gigaDrillBreakerInformed = bool;
|
||||
}
|
||||
public boolean getGigaDrillBreakerMode(){
|
||||
return gigaDrillBreakerMode;
|
||||
}
|
||||
public void setGigaDrillBreakerMode(Boolean bool){
|
||||
public void setGigaDrillBreakerMode(boolean bool){
|
||||
gigaDrillBreakerMode = bool;
|
||||
}
|
||||
/*
|
||||
* TREE FELLER STUFF
|
||||
*/
|
||||
public boolean getTreeFellerInformed() {return treeFellerInformed;}
|
||||
public void setTreeFellerInformed(Boolean bool){
|
||||
public void setTreeFellerInformed(boolean bool){
|
||||
treeFellerInformed = bool;
|
||||
}
|
||||
public boolean getTreeFellerMode(){
|
||||
return treeFellerMode;
|
||||
}
|
||||
public void setTreeFellerMode(Boolean bool){
|
||||
public void setTreeFellerMode(boolean bool){
|
||||
treeFellerMode = bool;
|
||||
}
|
||||
/*
|
||||
* MINING
|
||||
*/
|
||||
public boolean getSuperBreakerInformed() {return superBreakerInformed;}
|
||||
public void setSuperBreakerInformed(Boolean bool){
|
||||
public void setSuperBreakerInformed(boolean bool){
|
||||
superBreakerInformed = bool;
|
||||
}
|
||||
public boolean getBlastMiningInformed() {return blastMiningInformed;}
|
||||
public void setBlastMiningInformed(boolean bool){
|
||||
blastMiningInformed = bool;
|
||||
}
|
||||
public boolean getSuperBreakerMode(){
|
||||
return superBreakerMode;
|
||||
}
|
||||
public void setSuperBreakerMode(Boolean bool){
|
||||
public void setSuperBreakerMode(boolean bool){
|
||||
superBreakerMode = bool;
|
||||
}
|
||||
public long getRecentlyHurt(){
|
||||
@@ -825,7 +883,9 @@ public class PlayerProfile
|
||||
}
|
||||
public long getSkillDATS(AbilityType abilityType)
|
||||
{
|
||||
long convertedBack = skillsDATS.get(abilityType) * 1000;
|
||||
//Is this actually unused, or should it actually be returning the convertedBack variable?
|
||||
//It *is* unused, I don't think I put this here so I'm going to comment it out - nossr50
|
||||
//long convertedBack = skillsDATS.get(abilityType) * 1000;
|
||||
return skillsDATS.get(abilityType);
|
||||
}
|
||||
public void setSkillDATS(AbilityType abilityType, long value)
|
||||
@@ -893,7 +953,7 @@ public class PlayerProfile
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds XP to the player, this is affected by skill modifiers
|
||||
* Adds XP to the player, this is affected by skill modifiers and xp rate
|
||||
* @param skillType The skill to add XP to
|
||||
* @param newvalue The amount of XP to add
|
||||
*/
|
||||
@@ -906,7 +966,7 @@ public class PlayerProfile
|
||||
xpGainATS = (int) (System.currentTimeMillis()/1000);
|
||||
|
||||
double bonusModifier = 0;
|
||||
String leaderName = "";
|
||||
//String leaderName = "";
|
||||
|
||||
if(inParty())
|
||||
{
|
||||
@@ -914,8 +974,8 @@ public class PlayerProfile
|
||||
{
|
||||
if(x.isOnline() && !x.getName().equals(thisplayer.getName()) && Party.getInstance().isPartyLeader(x.getName(), this.getParty()))
|
||||
{
|
||||
leaderName = x.getName();
|
||||
if(m.getDistance(thisplayer.getLocation(), x.getLocation()) < 25)
|
||||
//leaderName = x.getName();
|
||||
if(m.isNear(thisplayer.getLocation(), x.getLocation(), 25))
|
||||
{
|
||||
PlayerProfile PartyLeader = Users.getProfile(x);
|
||||
if(PartyLeader.getSkillLevel(skillType) >= this.getSkillLevel(skillType))
|
||||
@@ -975,6 +1035,9 @@ public class PlayerProfile
|
||||
case AXES:
|
||||
xp=(int) (xp/LoadProperties.axesxpmodifier);
|
||||
break;
|
||||
case FISHING:
|
||||
xp=(int) (xp/LoadProperties.fishingxpmodifier);
|
||||
break;
|
||||
}
|
||||
xp=xp*LoadProperties.xpGainMultiplier;
|
||||
|
||||
@@ -984,10 +1047,7 @@ public class PlayerProfile
|
||||
bonusModifier = 2;
|
||||
|
||||
double trueBonus = bonusModifier * xp;
|
||||
double oldxp = xp;
|
||||
xp+=trueBonus;
|
||||
double percent = (trueBonus/oldxp)*100;
|
||||
thisplayer.sendMessage(ChatColor.GREEN+"XP: "+oldxp+" Bonus XP: "+trueBonus+" Total: "+xp+ChatColor.GOLD+" [Master: "+leaderName+" " +" +"+(int)percent+"%]");
|
||||
}
|
||||
Bukkit.getPluginManager().callEvent(new McMMOPlayerXpGainEvent(Bukkit.getPlayer(playerName), skillType, xp));
|
||||
skillsXp.put(skillType, skillsXp.get(skillType)+xp);
|
||||
@@ -1057,9 +1117,45 @@ public class PlayerProfile
|
||||
skillsXp.put(SkillType.FISHING, 0);
|
||||
} else {
|
||||
skills.put(skillType, newvalue);
|
||||
skillsXp.put(skillType, newvalue);
|
||||
skillsXp.put(skillType, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void addLevels(SkillType skillType, int levels)
|
||||
{
|
||||
if(skillType == SkillType.ALL)
|
||||
{
|
||||
skills.put(SkillType.TAMING, skills.get(SkillType.TAMING)+levels);
|
||||
skills.put(SkillType.MINING, skills.get(SkillType.MINING)+levels);
|
||||
skills.put(SkillType.WOODCUTTING, skills.get(SkillType.WOODCUTTING)+levels);
|
||||
skills.put(SkillType.REPAIR, skills.get(SkillType.REPAIR)+levels);
|
||||
skills.put(SkillType.HERBALISM, skills.get(SkillType.HERBALISM)+levels);
|
||||
skills.put(SkillType.ACROBATICS, skills.get(SkillType.ACROBATICS)+levels);
|
||||
skills.put(SkillType.SWORDS, skills.get(SkillType.SWORDS)+levels);
|
||||
skills.put(SkillType.ARCHERY, skills.get(SkillType.ARCHERY)+levels);
|
||||
skills.put(SkillType.UNARMED, skills.get(SkillType.UNARMED)+levels);
|
||||
skills.put(SkillType.EXCAVATION, skills.get(SkillType.EXCAVATION)+levels);
|
||||
skills.put(SkillType.AXES, skills.get(SkillType.AXES)+levels);
|
||||
skills.put(SkillType.FISHING, skills.get(SkillType.FISHING)+levels);
|
||||
|
||||
skillsXp.put(SkillType.TAMING, 0);
|
||||
skillsXp.put(SkillType.MINING, 0);
|
||||
skillsXp.put(SkillType.WOODCUTTING, 0);
|
||||
skillsXp.put(SkillType.REPAIR, 0);
|
||||
skillsXp.put(SkillType.HERBALISM, 0);
|
||||
skillsXp.put(SkillType.ACROBATICS, 0);
|
||||
skillsXp.put(SkillType.SWORDS, 0);
|
||||
skillsXp.put(SkillType.ARCHERY, 0);
|
||||
skillsXp.put(SkillType.UNARMED, 0);
|
||||
skillsXp.put(SkillType.EXCAVATION, 0);
|
||||
skillsXp.put(SkillType.AXES, 0);
|
||||
skillsXp.put(SkillType.FISHING, 0);
|
||||
} else {
|
||||
skills.put(skillType, skills.get(skillType)+levels);
|
||||
skillsXp.put(skillType, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public Integer getXpToLevel(SkillType skillType)
|
||||
{
|
||||
return (int) ((1020+(skills.get(skillType) * 20)));
|
||||
@@ -1094,72 +1190,13 @@ public class PlayerProfile
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public String getMySpawnWorld()
|
||||
{
|
||||
if(myspawnworld != null && !myspawnworld.equals("") && !myspawnworld.equals("null")){
|
||||
return myspawnworld;
|
||||
} else {
|
||||
return Bukkit.getServer().getWorlds().get(0).toString();
|
||||
}
|
||||
}
|
||||
//Save a users spawn location
|
||||
public void setMySpawn(double x, double y, double z, String myspawnworldlocation){
|
||||
myspawn = x+","+y+","+z;
|
||||
myspawnworld = myspawnworldlocation;
|
||||
}
|
||||
public String getX(){
|
||||
if(myspawn != null)
|
||||
{
|
||||
String[] split = myspawn.split(",");
|
||||
return split[0];
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
public String getY(){
|
||||
if(myspawn != null)
|
||||
{
|
||||
String[] split = myspawn.split(",");
|
||||
return split[1];
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
public String getZ(){
|
||||
if(myspawn != null)
|
||||
{
|
||||
String[] split = myspawn.split(",");
|
||||
return split[2];
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isDead(){
|
||||
return dead;
|
||||
}
|
||||
public Location getMySpawn(Player player)
|
||||
|
||||
public String getPlayerName()
|
||||
{
|
||||
Location loc = null;
|
||||
if(myspawn != null)
|
||||
{
|
||||
if(m.isDouble(getX()) && m.isDouble(getY()) && m.isDouble(getZ()))
|
||||
loc = new Location(player.getWorld(),(Double.parseDouble(getX())), Double.parseDouble(getY()), Double.parseDouble(getZ()));
|
||||
else
|
||||
return null;
|
||||
} else
|
||||
return null;
|
||||
|
||||
loc.setYaw(0);
|
||||
loc.setPitch(0);
|
||||
if(loc.getX() != 0 && loc.getY() != 0 && loc.getZ() != 0 && loc.getWorld() != null)
|
||||
{
|
||||
if(Bukkit.getServer().getWorld(this.getMySpawnWorld()) != null)
|
||||
loc.setWorld(Bukkit.getServer().getWorld(this.getMySpawnWorld()));
|
||||
else
|
||||
loc.setWorld(Bukkit.getServer().getWorlds().get(0));
|
||||
return loc;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return playerName;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,21 +16,97 @@
|
||||
*/
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
|
||||
public enum SkillType
|
||||
{
|
||||
ACROBATICS,
|
||||
ALCHEMY,
|
||||
ACROBATICS(LoadProperties.levelCapAcrobatics),
|
||||
ALL, //This one is just for convenience
|
||||
ARCHERY,
|
||||
AXES,
|
||||
EXCAVATION,
|
||||
ENCHANTING,
|
||||
FISHING,
|
||||
HERBALISM,
|
||||
MINING,
|
||||
REPAIR,
|
||||
SWORDS,
|
||||
TAMING,
|
||||
UNARMED,
|
||||
WOODCUTTING;
|
||||
ARCHERY(LoadProperties.levelCapArchery),
|
||||
AXES(AbilityType.SKULL_SPLIITER, LoadProperties.levelCapAxes, ToolType.AXE),
|
||||
EXCAVATION(AbilityType.GIGA_DRILL_BREAKER, LoadProperties.levelCapExcavation, ToolType.SHOVEL),
|
||||
FISHING(LoadProperties.levelCapFishing),
|
||||
HERBALISM(AbilityType.GREEN_TERRA, LoadProperties.levelCapHerbalism, ToolType.HOE),
|
||||
MINING(AbilityType.SUPER_BREAKER, LoadProperties.levelCapMining, ToolType.PICKAXE),
|
||||
REPAIR(LoadProperties.levelCapRepair),
|
||||
SWORDS(AbilityType.SERRATED_STRIKES, LoadProperties.levelCapSwords, ToolType.SWORD),
|
||||
TAMING(LoadProperties.levelCapTaming),
|
||||
UNARMED(AbilityType.BERSERK, LoadProperties.levelCapUnarmed, ToolType.FISTS),
|
||||
WOODCUTTING(AbilityType.TREE_FELLER, LoadProperties.levelCapWoodcutting, ToolType.AXE);
|
||||
|
||||
private AbilityType ability;
|
||||
private int maxLevel;
|
||||
private ToolType tool;
|
||||
|
||||
private SkillType()
|
||||
{
|
||||
this.ability = null;
|
||||
this.maxLevel = 0;
|
||||
this.tool = null;
|
||||
}
|
||||
|
||||
private SkillType(AbilityType ability, int maxLevel, ToolType tool)
|
||||
{
|
||||
this.ability = ability;
|
||||
this.maxLevel = maxLevel;
|
||||
this.tool = tool;
|
||||
}
|
||||
|
||||
private SkillType(int maxLevel)
|
||||
{
|
||||
this(null, maxLevel, null);
|
||||
}
|
||||
|
||||
public AbilityType getAbility()
|
||||
{
|
||||
return this.ability;
|
||||
}
|
||||
|
||||
public int getMaxLevel()
|
||||
{
|
||||
if(maxLevel > 0)
|
||||
return maxLevel;
|
||||
else
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
public ToolType getTool()
|
||||
{
|
||||
return this.tool;
|
||||
}
|
||||
|
||||
public boolean getPermissions(Player player)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case ACROBATICS:
|
||||
return mcPermissions.getInstance().acrobatics(player);
|
||||
case ARCHERY:
|
||||
return mcPermissions.getInstance().archery(player);
|
||||
case AXES:
|
||||
return mcPermissions.getInstance().axes(player);
|
||||
case EXCAVATION:
|
||||
return mcPermissions.getInstance().excavation(player);
|
||||
case FISHING:
|
||||
return mcPermissions.getInstance().fishing(player);
|
||||
case HERBALISM:
|
||||
return mcPermissions.getInstance().herbalism(player);
|
||||
case MINING:
|
||||
return mcPermissions.getInstance().mining(player);
|
||||
case REPAIR:
|
||||
return mcPermissions.getInstance().repair(player);
|
||||
case SWORDS:
|
||||
return mcPermissions.getInstance().swords(player);
|
||||
case TAMING:
|
||||
return mcPermissions.getInstance().taming(player);
|
||||
case UNARMED:
|
||||
return mcPermissions.getInstance().unarmed(player);
|
||||
case WOODCUTTING:
|
||||
return mcPermissions.getInstance().woodcutting(player);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
147
src/main/java/com/gmail/nossr50/datatypes/ToolType.java
Normal file
147
src/main/java/com/gmail/nossr50/datatypes/ToolType.java
Normal file
@@ -0,0 +1,147 @@
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public enum ToolType
|
||||
{
|
||||
AXE(mcLocale.getString("Skills.LowerAxe"), mcLocale.getString("Skills.ReadyAxe")),
|
||||
FISTS(mcLocale.getString("Skills.LowerFists"), mcLocale.getString("Skills.ReadyFists")),
|
||||
HOE(mcLocale.getString("Skills.LowerHoe"), mcLocale.getString("Skills.ReadyHoe")),
|
||||
PICKAXE(mcLocale.getString("Skills.LowerPickAxe"), mcLocale.getString("Skills.ReadyPickAxe")),
|
||||
SHOVEL(mcLocale.getString("Skills.LowerShovel"), mcLocale.getString("Skills.ReadyShovel")),
|
||||
SWORD(mcLocale.getString("Skills.LowerSword"), mcLocale.getString("Skills.ReadySword"));
|
||||
|
||||
private String lowerTool;
|
||||
private String raiseTool;
|
||||
|
||||
private ToolType(String lowerTool, String raiseTool)
|
||||
{
|
||||
this.lowerTool = lowerTool;
|
||||
this.raiseTool = raiseTool;
|
||||
}
|
||||
|
||||
public String getLowerTool()
|
||||
{
|
||||
return this.lowerTool;
|
||||
}
|
||||
|
||||
public String getRaiseTool()
|
||||
{
|
||||
return this.raiseTool;
|
||||
}
|
||||
|
||||
public boolean getToolMode(PlayerProfile PP)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case AXE:
|
||||
return PP.getAxePreparationMode();
|
||||
case FISTS:
|
||||
return PP.getFistsPreparationMode();
|
||||
case HOE:
|
||||
return PP.getHoePreparationMode();
|
||||
case PICKAXE:
|
||||
return PP.getPickaxePreparationMode();
|
||||
case SHOVEL:
|
||||
return PP.getShovelPreparationMode();
|
||||
case SWORD:
|
||||
return PP.getSwordsPreparationMode();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setToolMode(PlayerProfile PP, boolean bool)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case AXE:
|
||||
PP.setAxePreparationMode(bool);
|
||||
break;
|
||||
case FISTS:
|
||||
PP.setFistsPreparationMode(bool);
|
||||
break;
|
||||
case HOE:
|
||||
PP.setHoePreparationMode(bool);
|
||||
break;
|
||||
case PICKAXE:
|
||||
PP.setPickaxePreparationMode(bool);
|
||||
break;
|
||||
case SHOVEL:
|
||||
PP.setShovelPreparationMode(bool);
|
||||
break;
|
||||
case SWORD:
|
||||
PP.setSwordsPreparationMode(bool);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public long getToolATS(PlayerProfile PP)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case AXE:
|
||||
return PP.getAxePreparationATS();
|
||||
case FISTS:
|
||||
return PP.getFistsPreparationATS();
|
||||
case HOE:
|
||||
return PP.getHoePreparationATS();
|
||||
case PICKAXE:
|
||||
return PP.getPickaxePreparationATS();
|
||||
case SHOVEL:
|
||||
return PP.getShovelPreparationATS();
|
||||
case SWORD:
|
||||
return PP.getSwordsPreparationATS();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void setToolATS(PlayerProfile PP, long ats)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case AXE:
|
||||
PP.setAxePreparationATS(ats);
|
||||
break;
|
||||
case FISTS:
|
||||
PP.setFistsPreparationATS(ats);
|
||||
break;
|
||||
case HOE:
|
||||
PP.setHoePreparationATS(ats);
|
||||
break;
|
||||
case PICKAXE:
|
||||
PP.setPickaxePreparationATS(ats);
|
||||
break;
|
||||
case SHOVEL:
|
||||
PP.setShovelPreparationATS(ats);
|
||||
break;
|
||||
case SWORD:
|
||||
PP.setSwordsPreparationATS(ats);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean inHand(ItemStack is)
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case AXE:
|
||||
return m.isAxes(is);
|
||||
case FISTS:
|
||||
return is.getType().equals(Material.AIR);
|
||||
case HOE:
|
||||
return m.isHoe(is);
|
||||
case PICKAXE:
|
||||
return m.isMiningPick(is);
|
||||
case SHOVEL:
|
||||
return m.isShovel(is);
|
||||
case SWORD:
|
||||
return m.isSwords(is);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ExcavationTreasure extends Treasure {
|
||||
// dirt grass sand gravel clay mycel soulsand
|
||||
// 00000001 - dirt 1
|
||||
// 00000010 - grass 2
|
||||
// 00000100 - sand 4
|
||||
// 00001000 - gravel 8
|
||||
// 00010000 - clay 16
|
||||
// 00100000 - mycel 32
|
||||
// 01000000 - soulsand 64
|
||||
private byte dropsFrom = 0x0;
|
||||
|
||||
public ExcavationTreasure(ItemStack drop, int xp, Double dropChance, int dropLevel) {
|
||||
super(drop, xp, dropChance, dropLevel);
|
||||
}
|
||||
|
||||
// Raw getters and setters
|
||||
public byte getDropsFrom() {
|
||||
return dropsFrom;
|
||||
}
|
||||
|
||||
public void setDropsFrom(byte dropsFrom) {
|
||||
this.dropsFrom = dropsFrom;
|
||||
}
|
||||
|
||||
// Getters
|
||||
public boolean getDropsFromDirt() {
|
||||
return getDropFromMask(1);
|
||||
}
|
||||
|
||||
public boolean getDropsFromGrass() {
|
||||
return getDropFromMask(2);
|
||||
}
|
||||
|
||||
public boolean getDropsFromSand() {
|
||||
return getDropFromMask(4);
|
||||
}
|
||||
|
||||
public boolean getDropsFromGravel() {
|
||||
return getDropFromMask(8);
|
||||
}
|
||||
|
||||
public boolean getDropsFromClay() {
|
||||
return getDropFromMask(16);
|
||||
}
|
||||
|
||||
public boolean getDropsFromMycel() {
|
||||
return getDropFromMask(32);
|
||||
}
|
||||
|
||||
public boolean getDropsFromSoulSand() {
|
||||
return getDropFromMask(64);
|
||||
}
|
||||
|
||||
private boolean getDropFromMask(int mask) {
|
||||
return ((dropsFrom & mask) > 0) ? true : false;
|
||||
}
|
||||
|
||||
// Setters
|
||||
public void setDropsFromDirt() {
|
||||
setDropFromMask(1);
|
||||
}
|
||||
|
||||
public void setDropsFromGrass() {
|
||||
setDropFromMask(2);
|
||||
}
|
||||
|
||||
public void setDropsFromSand() {
|
||||
setDropFromMask(4);
|
||||
}
|
||||
|
||||
public void setDropsFromGravel() {
|
||||
setDropFromMask(8);
|
||||
}
|
||||
|
||||
public void setDropsFromClay() {
|
||||
setDropFromMask(16);
|
||||
}
|
||||
|
||||
public void setDropsFromMycel() {
|
||||
setDropFromMask(32);
|
||||
}
|
||||
|
||||
public void setDropsFromSoulSand() {
|
||||
setDropFromMask(64);
|
||||
}
|
||||
|
||||
private void setDropFromMask(int mask) {
|
||||
dropsFrom |= mask;
|
||||
}
|
||||
|
||||
// Un-setters
|
||||
public void unsetDropsFromDirt() {
|
||||
unsetDropFromMask(1);
|
||||
}
|
||||
|
||||
public void unsetDropsFromGrass() {
|
||||
unsetDropFromMask(2);
|
||||
}
|
||||
|
||||
public void unsetDropsFromSand() {
|
||||
unsetDropFromMask(4);
|
||||
}
|
||||
|
||||
public void unsetDropsFromGravel() {
|
||||
unsetDropFromMask(8);
|
||||
}
|
||||
|
||||
public void unsetDropsFromClay() {
|
||||
unsetDropFromMask(16);
|
||||
}
|
||||
|
||||
public void unsetDropsFromMycel() {
|
||||
unsetDropFromMask(32);
|
||||
}
|
||||
|
||||
public void unsetDropsFromSoulSand() {
|
||||
unsetDropFromMask(64);
|
||||
}
|
||||
|
||||
private void unsetDropFromMask(int mask) {
|
||||
dropsFrom &= ~mask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class FishingTreasure extends Treasure {
|
||||
private int maxLevel;
|
||||
|
||||
public FishingTreasure(ItemStack drop, int xp, Double dropChance, int dropLevel, int maxLevel) {
|
||||
super(drop, xp, dropChance, dropLevel);
|
||||
this.setMaxLevel(maxLevel);
|
||||
}
|
||||
|
||||
public int getMaxLevel() {
|
||||
return maxLevel;
|
||||
}
|
||||
|
||||
public void setMaxLevel(int maxLevel) {
|
||||
this.maxLevel = maxLevel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public abstract class Treasure {
|
||||
private int xp;
|
||||
private Double dropChance;
|
||||
private int dropLevel;
|
||||
|
||||
private ItemStack drop;
|
||||
|
||||
public Treasure(ItemStack drop, int xp, Double dropChance, int dropLevel) {
|
||||
this.drop = drop;
|
||||
this.xp = xp;
|
||||
this.dropChance = dropChance;
|
||||
this.dropLevel = dropLevel;
|
||||
}
|
||||
|
||||
public ItemStack getDrop() {
|
||||
return drop;
|
||||
}
|
||||
|
||||
public void setDrop(ItemStack drop) {
|
||||
this.drop = drop;
|
||||
}
|
||||
|
||||
public int getXp() {
|
||||
return xp;
|
||||
}
|
||||
|
||||
public void setXp(int xp) {
|
||||
this.xp = xp;
|
||||
}
|
||||
|
||||
public Double getDropChance() {
|
||||
return dropChance;
|
||||
}
|
||||
|
||||
public void setDropChance(Double dropChance) {
|
||||
this.dropChance = dropChance;
|
||||
}
|
||||
|
||||
public int getDropLevel() {
|
||||
return dropLevel;
|
||||
}
|
||||
|
||||
public void setDropLevel(int dropLevel) {
|
||||
this.dropLevel = dropLevel;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +1,28 @@
|
||||
/*
|
||||
This file is part of mcMMO.
|
||||
|
||||
mcMMO 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
mcMMO 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 mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
|
||||
public class FakeBlockBreakEvent extends BlockBreakEvent {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public FakeBlockBreakEvent(Block theBlock, Player player) {
|
||||
super(theBlock, player);
|
||||
}
|
||||
/*
|
||||
This file is part of mcMMO.
|
||||
|
||||
mcMMO 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
mcMMO 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 mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.gmail.nossr50.events;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
|
||||
public class FakeBlockBreakEvent extends BlockBreakEvent {
|
||||
|
||||
public FakeBlockBreakEvent(Block theBlock, Player player) {
|
||||
super(theBlock, player);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.gmail.nossr50.events;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
|
||||
public class FakeEntityDamageByEntityEvent extends EntityDamageByEntityEvent {
|
||||
public FakeEntityDamageByEntityEvent(Entity damager, Entity damagee, DamageCause cause, int damage) {
|
||||
super(damager, damagee, cause, damage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.gmail.nossr50.events;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
|
||||
public class FakeEntityDamageEvent extends EntityDamageEvent{
|
||||
public FakeEntityDamageEvent(Entity damagee, DamageCause cause, int damage) {
|
||||
super(damagee, cause, damage);
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,6 @@ import org.bukkit.inventory.ItemStack;
|
||||
/**
|
||||
* Called when mcMMO is preparing to drop an item
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class McMMOItemSpawnEvent extends Event implements Cancellable {
|
||||
private Location location;
|
||||
private ItemStack itemStack;
|
||||
|
||||
@@ -25,7 +25,6 @@ import com.gmail.nossr50.datatypes.SkillType;
|
||||
/**
|
||||
* Called when a user levels up in a skill
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class McMMOPlayerLevelUpEvent extends Event {
|
||||
private Player player;
|
||||
private SkillType skill;
|
||||
|
||||
@@ -22,7 +22,6 @@ import org.bukkit.event.HandlerList;
|
||||
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class McMMOPlayerXpGainEvent extends Event {
|
||||
private Player player;
|
||||
private SkillType skill;
|
||||
|
||||
@@ -25,9 +25,7 @@ import com.gmail.nossr50.spout.SpoutStuff;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -38,7 +36,6 @@ import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockDamageEvent;
|
||||
import org.bukkit.event.block.BlockFromToEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import org.getspout.spoutapi.SpoutManager;
|
||||
@@ -47,7 +44,7 @@ import org.getspout.spoutapi.sound.SoundEffect;
|
||||
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.*;
|
||||
import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
|
||||
import com.gmail.nossr50.events.FakeBlockBreakEvent;
|
||||
|
||||
public class mcBlockListener implements Listener
|
||||
{
|
||||
@@ -58,228 +55,147 @@ public class mcBlockListener implements Listener
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockPlace(BlockPlaceEvent event)
|
||||
{
|
||||
if(event.isCancelled()) return;
|
||||
|
||||
//Setup some basic vars
|
||||
{
|
||||
//Setup some basic variables
|
||||
Block block;
|
||||
Player player = event.getPlayer();
|
||||
|
||||
|
||||
//When blocks are placed on snow this event reports the wrong block.
|
||||
if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getTypeId() == 78)
|
||||
{
|
||||
block = event.getBlockAgainst();
|
||||
}
|
||||
else
|
||||
{
|
||||
block = event.getBlock();
|
||||
}
|
||||
|
||||
int id = block.getTypeId();
|
||||
Material mat = block.getType();
|
||||
|
||||
//TNT placement checks - needed for Blast Mining
|
||||
if(block.getTypeId() == 46)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int skill = PP.getSkillLevel(SkillType.MINING);
|
||||
plugin.misc.tntTracker.put(block, skill);
|
||||
}
|
||||
if(id == 46 && mcPermissions.getInstance().blastMining(player))
|
||||
plugin.misc.tntTracker.put(block.getLocation(), player);
|
||||
|
||||
//Check if the blocks placed should be monitored so they do not give out XP in the future
|
||||
if(m.shouldBeWatched(block))
|
||||
{
|
||||
int id = block.getTypeId();
|
||||
|
||||
if(m.shouldBeWatched(mat))
|
||||
{
|
||||
//Only needed for blocks that use their block data (wood, pumpkins, etc.)
|
||||
if (id == 17 || id == 73 || id == 74 || id == 81 || id == 83 || id == 86 || id == 91 || id == 106 || id == 98)
|
||||
boolean shouldBeChanged = true;
|
||||
|
||||
switch(mat)
|
||||
{
|
||||
case CACTUS:
|
||||
case GLOWING_REDSTONE_ORE:
|
||||
case JACK_O_LANTERN:
|
||||
case LOG:
|
||||
case PUMPKIN:
|
||||
case REDSTONE_ORE:
|
||||
case SUGAR_CANE_BLOCK:
|
||||
case VINE:
|
||||
shouldBeChanged = false; //We don't want these added to changeQueue
|
||||
plugin.misc.blockWatchList.add(block);
|
||||
else {
|
||||
//block.setData((byte) 5); //Change the byte
|
||||
//The following is a method to get around a breakage in 1.1-R2 and onward
|
||||
//it should be removed as soon as functionality to change a block
|
||||
//in this event returns.
|
||||
plugin.changeQueue.push(block);
|
||||
break;
|
||||
case BROWN_MUSHROOM:
|
||||
case RED_MUSHROOM:
|
||||
case RED_ROSE:
|
||||
case YELLOW_FLOWER:
|
||||
case WATER_LILY:
|
||||
plugin.fastChangeQueue.push(block);
|
||||
break;
|
||||
}
|
||||
|
||||
if(shouldBeChanged)
|
||||
plugin.changeQueue.push(block);
|
||||
}
|
||||
|
||||
if(block.getTypeId() == LoadProperties.anvilID && LoadProperties.anvilmessages)
|
||||
if(id == LoadProperties.anvilID && LoadProperties.anvilmessages)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(LoadProperties.spoutEnabled)
|
||||
if(!PP.getPlacedAnvil())
|
||||
{
|
||||
SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
|
||||
if(sPlayer.isSpoutCraftEnabled())
|
||||
{
|
||||
if(!PP.getPlacedAnvil())
|
||||
{
|
||||
sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.IRON_BLOCK);
|
||||
PP.togglePlacedAnvil();
|
||||
}
|
||||
if(LoadProperties.spoutEnabled)
|
||||
{
|
||||
SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
|
||||
if(sPlayer.isSpoutCraftEnabled())
|
||||
sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.IRON_BLOCK);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!PP.getPlacedAnvil())
|
||||
{
|
||||
event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
|
||||
PP.togglePlacedAnvil();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!PP.getPlacedAnvil())
|
||||
{
|
||||
event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
|
||||
PP.togglePlacedAnvil();
|
||||
}
|
||||
event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
|
||||
|
||||
PP.togglePlacedAnvil();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockBreak(BlockBreakEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
Block block = event.getBlock();
|
||||
int id = block.getTypeId();
|
||||
ItemStack inhand = player.getItemInHand();
|
||||
if(event.isCancelled())
|
||||
|
||||
if(event instanceof FakeBlockBreakEvent)
|
||||
return;
|
||||
|
||||
if (event instanceof FakeBlockBreakEvent)
|
||||
return;
|
||||
|
||||
/*
|
||||
* HERBALISM
|
||||
*/
|
||||
|
||||
//TNT removal checks - needed for Blast Mining
|
||||
if(block.getTypeId() == 46)
|
||||
{
|
||||
plugin.misc.tntTracker.remove(block);
|
||||
}
|
||||
/*
|
||||
* HERBALISM
|
||||
*/
|
||||
|
||||
//Green Terra
|
||||
if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && block.getTypeId() == 59 && block.getData() == (byte) 0x07)
|
||||
{
|
||||
Herbalism.greenTerraCheck(player, block);
|
||||
}
|
||||
if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block)))
|
||||
Skills.abilityCheck(player, SkillType.HERBALISM);
|
||||
|
||||
//Wheat && Triple drops
|
||||
if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
|
||||
{
|
||||
Herbalism.herbalismProcCheck(block, player, event, plugin);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5)
|
||||
Herbalism.herbalismProcCheck(block, player, event, plugin);
|
||||
|
||||
/*
|
||||
* MINING
|
||||
*/
|
||||
|
||||
//TNT removal checks - needed for Blast Mining
|
||||
if(id == 46 && plugin.misc.tntTracker.containsKey(block.getLocation()))
|
||||
plugin.misc.tntTracker.remove(block.getLocation());
|
||||
|
||||
if(mcPermissions.getInstance().mining(player))
|
||||
{
|
||||
if(LoadProperties.miningrequirespickaxe)
|
||||
{
|
||||
if(m.isMiningPick(inhand))
|
||||
{
|
||||
Mining.miningBlockCheck(player, block, plugin);
|
||||
}
|
||||
} else
|
||||
{
|
||||
if(LoadProperties.miningrequirespickaxe && m.isMiningPick(inhand))
|
||||
Mining.miningBlockCheck(player, block, plugin);
|
||||
else if(!LoadProperties.miningrequirespickaxe)
|
||||
Mining.miningBlockCheck(player, block, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* WOOD CUTTING
|
||||
*/
|
||||
|
||||
if(mcPermissions.getInstance().woodcutting(player))
|
||||
if(mcPermissions.getInstance().woodcutting(player) && id == 17)
|
||||
{
|
||||
if(LoadProperties.woodcuttingrequiresaxe)
|
||||
{
|
||||
if(m.isAxes(inhand))
|
||||
{
|
||||
WoodCutting.woodcuttingBlockCheck(player, block, plugin);
|
||||
}
|
||||
} else
|
||||
{
|
||||
if(LoadProperties.woodcuttingrequiresaxe && m.isAxes(inhand))
|
||||
WoodCutting.woodcuttingBlockCheck(player, block, plugin);
|
||||
else if(!LoadProperties.woodcuttingrequiresaxe)
|
||||
WoodCutting.woodcuttingBlockCheck(player, block, plugin);
|
||||
}
|
||||
|
||||
/*
|
||||
* IF PLAYER IS USING TREEFELLER
|
||||
*/
|
||||
if(mcPermissions.getInstance().woodCuttingAbility(player)
|
||||
&& PP.getTreeFellerMode()
|
||||
&& block.getTypeId() == 17
|
||||
&& m.blockBreakSimulate(block, player))
|
||||
{
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playSoundForPlayer(SoundEffect.EXPLODE, player, block.getLocation());
|
||||
|
||||
WoodCutting.treeFeller(block, player, plugin);
|
||||
for(Block blockx : plugin.misc.treeFeller)
|
||||
{
|
||||
if(blockx != null)
|
||||
{
|
||||
Material mat = Material.getMaterial(block.getTypeId());
|
||||
byte type = 0;
|
||||
if(block.getTypeId() == 17)
|
||||
type = block.getData();
|
||||
ItemStack item = new ItemStack(mat, 1, (byte)0, type);
|
||||
if(blockx.getTypeId() == 17)
|
||||
{
|
||||
m.mcDropItem(blockx.getLocation(), item);
|
||||
//XP WOODCUTTING
|
||||
if(!plugin.misc.blockWatchList.contains(block))
|
||||
{
|
||||
WoodCutting.woodCuttingProcCheck(player, blockx);
|
||||
PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
|
||||
}
|
||||
}
|
||||
if(blockx.getTypeId() == 18)
|
||||
{
|
||||
mat = Material.SAPLING;
|
||||
|
||||
item = new ItemStack(mat, 1, (short)0, (byte)(blockx.getData()-8));
|
||||
|
||||
if(Math.random() * 10 > 9)
|
||||
m.mcDropItem(blockx.getLocation(), item);
|
||||
}
|
||||
if(blockx.getType() != Material.AIR)
|
||||
player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
|
||||
blockx.setType(Material.AIR);
|
||||
}
|
||||
}
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!player.getItemInHand().containsEnchantment(Enchantment.DURABILITY))
|
||||
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
|
||||
}
|
||||
plugin.misc.treeFeller.clear();
|
||||
}
|
||||
|
||||
if(PP.getTreeFellerMode())
|
||||
WoodCutting.treeFeller(event, plugin);
|
||||
}
|
||||
|
||||
/*
|
||||
* EXCAVATION
|
||||
*/
|
||||
if(Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 5)
|
||||
Excavation.excavationProcCheck(block.getType(), block.getLocation(), player);
|
||||
/*
|
||||
* HERBALISM
|
||||
*/
|
||||
if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalism(player) && Herbalism.canBeGreenTerra(block))
|
||||
{
|
||||
Herbalism.greenTerraCheck(player, block);
|
||||
if(LoadProperties.excavationRequiresShovel && m.isShovel(inhand))
|
||||
Excavation.excavationProcCheck(block, player);
|
||||
else if(!LoadProperties.excavationRequiresShovel)
|
||||
Excavation.excavationProcCheck(block, player);
|
||||
}
|
||||
|
||||
if(mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5)
|
||||
Herbalism.herbalismProcCheck(block, player, event, plugin);
|
||||
|
||||
//Change the byte back when broken
|
||||
if(block.getData() == 5 && m.shouldBeWatched(block))
|
||||
if(block.getData() == 5 && m.shouldBeWatched(block.getType()))
|
||||
{
|
||||
block.setData((byte) 0);
|
||||
if(plugin.misc.blockWatchList.contains(block))
|
||||
@@ -287,63 +203,69 @@ public class mcBlockListener implements Listener
|
||||
plugin.misc.blockWatchList.remove(block);
|
||||
}
|
||||
}
|
||||
|
||||
//System.out.println("DEBUG: "+event.isCancelled()+", BLOCK_TYPE: "+event.getBlock().getType().toString()+", BLOCK_DATA: "+event.getBlock().getData());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockDamage(BlockDamageEvent event)
|
||||
{
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
Player player = event.getPlayer();
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
ItemStack inhand = player.getItemInHand();
|
||||
Block block = event.getBlock();
|
||||
int id = block.getTypeId();
|
||||
|
||||
/*
|
||||
* ABILITY PREPARATION CHECKS
|
||||
*/
|
||||
if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
|
||||
Herbalism.greenTerraCheck(player, block);
|
||||
if(PP.getAxePreparationMode() && block.getTypeId() == 17)
|
||||
WoodCutting.treeFellerCheck(player, block);
|
||||
if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
|
||||
Mining.superBreakerCheck(player, block);
|
||||
if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
|
||||
Excavation.gigaDrillBreakerActivationCheck(player, block);
|
||||
if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || block.getTypeId() == 78))
|
||||
Unarmed.berserkActivationCheck(player);
|
||||
if(m.abilityBlockCheck(block))
|
||||
{
|
||||
if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
|
||||
Skills.abilityCheck(player, SkillType.HERBALISM);
|
||||
if(PP.getAxePreparationMode() && id == 17 && mcPermissions.getInstance().woodCuttingAbility(player))
|
||||
Skills.abilityCheck(player, SkillType.WOODCUTTING);
|
||||
if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
|
||||
Skills.abilityCheck(player, SkillType.MINING);
|
||||
if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
|
||||
Skills.abilityCheck(player, SkillType.EXCAVATION);
|
||||
}
|
||||
|
||||
if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || id == 78))
|
||||
Skills.abilityCheck(player, SkillType.UNARMED);
|
||||
|
||||
/*
|
||||
* TREE FELLAN STUFF
|
||||
* TREE FELLER STUFF
|
||||
*/
|
||||
if(LoadProperties.spoutEnabled && block.getTypeId() == 17 && Users.getProfile(player).getTreeFellerMode())
|
||||
if(LoadProperties.spoutEnabled && id == 17 && PP.getTreeFellerMode())
|
||||
SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
|
||||
|
||||
/*
|
||||
* GREEN TERRA STUFF
|
||||
*/
|
||||
if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player) && PP.getGreenTerraMode())
|
||||
{
|
||||
if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player))
|
||||
Herbalism.greenTerra(player, block);
|
||||
}
|
||||
|
||||
/*
|
||||
* GIGA DRILL BREAKER CHECKS
|
||||
*/
|
||||
if(PP.getGigaDrillBreakerMode()
|
||||
&& Excavation.canBeGigaDrillBroken(block)
|
||||
&& m.blockBreakSimulate(block, player)
|
||||
&& mcPermissions.getInstance().excavationAbility(player))
|
||||
if(PP.getGigaDrillBreakerMode() && Excavation.canBeGigaDrillBroken(block) && m.blockBreakSimulate(block, player, true) && mcPermissions.getInstance().excavationAbility(player))
|
||||
{
|
||||
if(LoadProperties.excavationRequiresShovel)
|
||||
if(LoadProperties.excavationRequiresShovel && m.isShovel(inhand))
|
||||
{
|
||||
if(m.isShovel(inhand)){
|
||||
event.setInstaBreak(true);
|
||||
Excavation.gigaDrillBreaker(player, block);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else if(!LoadProperties.excavationRequiresShovel){
|
||||
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!inhand.containsEnchantment(Enchantment.DURABILITY))
|
||||
{
|
||||
short durability = inhand.getDurability();
|
||||
durability += (LoadProperties.abilityDurabilityLoss);
|
||||
inhand.setDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
event.setInstaBreak(true);
|
||||
Excavation.gigaDrillBreaker(player, block);
|
||||
}
|
||||
@@ -352,14 +274,12 @@ public class mcBlockListener implements Listener
|
||||
* BERSERK MODE CHECKS
|
||||
*/
|
||||
if(PP.getBerserkMode()
|
||||
&& m.blockBreakSimulate(block, player)
|
||||
&& m.blockBreakSimulate(block, player, true)
|
||||
&& player.getItemInHand().getTypeId() == 0
|
||||
&& (Excavation.canBeGigaDrillBroken(block) || block.getTypeId() == 78)
|
||||
&& (Excavation.canBeGigaDrillBroken(block) || id == 78)
|
||||
&& mcPermissions.getInstance().unarmedAbility(player))
|
||||
{
|
||||
event.setInstaBreak(true);
|
||||
PlayerAnimationEvent armswing = new PlayerAnimationEvent(player);
|
||||
Bukkit.getPluginManager().callEvent(armswing);
|
||||
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
|
||||
@@ -370,12 +290,23 @@ public class mcBlockListener implements Listener
|
||||
*/
|
||||
if(PP.getSuperBreakerMode()
|
||||
&& Mining.canBeSuperBroken(block)
|
||||
&& m.blockBreakSimulate(block, player)
|
||||
&& m.blockBreakSimulate(block, player, true)
|
||||
&& mcPermissions.getInstance().miningAbility(player))
|
||||
{
|
||||
if(LoadProperties.miningrequirespickaxe)
|
||||
{
|
||||
if(m.isMiningPick(inhand)){
|
||||
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!inhand.containsEnchantment(Enchantment.DURABILITY))
|
||||
{
|
||||
short durability = inhand.getDurability();
|
||||
durability += (LoadProperties.abilityDurabilityLoss);
|
||||
inhand.setDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
event.setInstaBreak(true);
|
||||
Mining.SuperBreakerBlockCheck(player, block, plugin);
|
||||
}
|
||||
@@ -388,10 +319,10 @@ public class mcBlockListener implements Listener
|
||||
/*
|
||||
* LEAF BLOWER CHECKS
|
||||
*/
|
||||
if(block.getTypeId() == 18
|
||||
if(id == 18
|
||||
&& mcPermissions.getInstance().woodCuttingAbility(player)
|
||||
&& PP.getSkillLevel(SkillType.WOODCUTTING) >= 100
|
||||
&& m.blockBreakSimulate(block, player))
|
||||
&& m.blockBreakSimulate(block, player, true))
|
||||
{
|
||||
if(LoadProperties.woodcuttingrequiresaxe)
|
||||
{
|
||||
@@ -401,16 +332,13 @@ public class mcBlockListener implements Listener
|
||||
}
|
||||
}
|
||||
else{
|
||||
event.setInstaBreak(true);
|
||||
WoodCutting.leafBlower(player, block);
|
||||
if(inhand.getTypeId() != 359){
|
||||
event.setInstaBreak(true);
|
||||
WoodCutting.leafBlower(player, block);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(block.getType() == Material.AIR && plugin.misc.blockWatchList.contains(block))
|
||||
{
|
||||
plugin.misc.blockWatchList.remove(block);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@@ -418,9 +346,9 @@ public class mcBlockListener implements Listener
|
||||
{
|
||||
Block blockFrom = event.getBlock();
|
||||
Block blockTo = event.getToBlock();
|
||||
if(m.shouldBeWatched(blockFrom) && blockFrom.getData() == (byte)5)
|
||||
if(m.shouldBeWatched(blockFrom.getType()) && blockFrom.getData() == (byte)5)
|
||||
{
|
||||
blockTo.setData((byte)5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,13 @@
|
||||
*/
|
||||
package com.gmail.nossr50.listeners;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@@ -29,17 +33,25 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityTameEvent;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
|
||||
import com.gmail.nossr50.Combat;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.events.FakeEntityDamageByEntityEvent;
|
||||
import com.gmail.nossr50.events.FakeEntityDamageEvent;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
import com.gmail.nossr50.skills.Acrobatics;
|
||||
import com.gmail.nossr50.skills.Archery;
|
||||
import com.gmail.nossr50.skills.BlastMining;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
import com.gmail.nossr50.skills.Taming;
|
||||
|
||||
@@ -51,153 +63,93 @@ public class mcEntityListener implements Listener
|
||||
public mcEntityListener(final mcMMO plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
|
||||
{
|
||||
//Lets just put this here...
|
||||
if(event instanceof FakeEntityDamageByEntityEvent)
|
||||
return;
|
||||
|
||||
Entity defender = event.getEntity();
|
||||
Entity attacker = event.getDamager();
|
||||
|
||||
if(attacker instanceof Player && defender instanceof Player)
|
||||
{
|
||||
if(!defender.getWorld().getPVP())
|
||||
return;
|
||||
if(Party.getInstance().inSameParty((Player)defender, (Player)attacker))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
//Make sure defender is not invincible
|
||||
if(defender instanceof LivingEntity)
|
||||
{
|
||||
LivingEntity livingDefender = (LivingEntity)defender;
|
||||
if(!m.isInvincible(livingDefender, event))
|
||||
Combat.combatChecks(event, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onEntityDamage(EntityDamageEvent event)
|
||||
{
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
if(event instanceof FakeEntityDamageEvent)
|
||||
return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
EntityType type = entity.getType();
|
||||
DamageCause cause = event.getCause();
|
||||
|
||||
//Check for world pvp flag
|
||||
if(event instanceof EntityDamageByEntityEvent)
|
||||
switch(type)
|
||||
{
|
||||
EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent)event;
|
||||
if(eventb.getEntity() instanceof Player && eventb.getDamager() instanceof Player && !event.getEntity().getWorld().getPVP())
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* CHECK FOR INVULNERABILITY
|
||||
*/
|
||||
if(event.getEntity() instanceof Player)
|
||||
{
|
||||
Player defender = (Player)event.getEntity();
|
||||
PlayerProfile PPd = Users.getProfile(defender);
|
||||
if(defender != null && PPd.getGodMode())
|
||||
case PLAYER:
|
||||
/*
|
||||
* CHECK FOR INVULNERABILITY
|
||||
*/
|
||||
Player player = (Player) entity;
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(PP.getGodMode())
|
||||
event.setCancelled(true);
|
||||
if(PPd == null)
|
||||
Users.addUser(defender);
|
||||
}
|
||||
|
||||
/*
|
||||
* Demolitions Expert
|
||||
|
||||
if(event.getCause() == DamageCause.BLOCK_EXPLOSION)
|
||||
{
|
||||
if(event.getEntity() instanceof Player)
|
||||
|
||||
if(!m.isInvincible(player, event))
|
||||
{
|
||||
Player player = (Player)event.getEntity();
|
||||
BlastMining.demolitionsExpertise(player, event);
|
||||
if(cause == DamageCause.FALL && mcPermissions.getInstance().acrobatics(player))
|
||||
Acrobatics.acrobaticsCheck(player, event);
|
||||
if(cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().blastMining(player))
|
||||
BlastMining.demolitionsExpertise(player, event);
|
||||
if(event.getDamage() >= 1)
|
||||
PP.setRecentlyHurt(System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if(event.getEntity() instanceof LivingEntity)
|
||||
{
|
||||
//CraftEntity cEntity = (CraftEntity)event.getEntity();
|
||||
//if(cEntity.getHandle() instanceof EntityLiving)
|
||||
{
|
||||
LivingEntity entityliving = (LivingEntity)event.getEntity();
|
||||
if(entityliving.getNoDamageTicks() < entityliving.getMaximumNoDamageTicks()/2.0F)
|
||||
{
|
||||
Entity x = event.getEntity();
|
||||
DamageCause type = event.getCause();
|
||||
if(event.getEntity() instanceof Wolf && ((Wolf)event.getEntity()).isTamed() && Taming.getOwner(((Wolf)event.getEntity()), plugin) != null)
|
||||
{
|
||||
Wolf theWolf = (Wolf) event.getEntity();
|
||||
Player master = Taming.getOwner(theWolf, plugin);
|
||||
PlayerProfile PPo = Users.getProfile(master);
|
||||
if(master == null || PPo == null)
|
||||
return;
|
||||
//Environmentally Aware
|
||||
if((event.getCause() == DamageCause.CONTACT || event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.FIRE) && PPo.getSkillLevel(SkillType.TAMING) >= 100)
|
||||
{
|
||||
if(event.getDamage() < ((Wolf) event.getEntity()).getHealth())
|
||||
{
|
||||
event.getEntity().teleport(Taming.getOwner(theWolf, plugin).getLocation());
|
||||
master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); //$NON-NLS-1$
|
||||
event.getEntity().setFireTicks(0);
|
||||
}
|
||||
}
|
||||
if(event.getCause() == DamageCause.FALL && PPo.getSkillLevel(SkillType.TAMING) >= 100)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
//Thick Fur
|
||||
if(event.getCause() == DamageCause.FIRE_TICK)
|
||||
{
|
||||
event.getEntity().setFireTicks(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ACROBATICS
|
||||
*/
|
||||
if(x instanceof Player){
|
||||
Player player = (Player)x;
|
||||
if(type == DamageCause.FALL){
|
||||
Acrobatics.acrobaticsCheck(player, event);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Entity Damage by Entity checks
|
||||
*/
|
||||
if(event instanceof EntityDamageByEntityEvent && !event.isCancelled())
|
||||
{
|
||||
EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
|
||||
Entity f = eventb.getDamager();
|
||||
Entity e = event.getEntity();
|
||||
/*
|
||||
* PARTY CHECKS
|
||||
*/
|
||||
if(e instanceof Player && f instanceof Player)
|
||||
{
|
||||
Player defender = (Player)e;
|
||||
Player attacker = (Player)f;
|
||||
if(Party.getInstance().inSameParty(defender, attacker))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
Combat.combatChecks(event, plugin);
|
||||
}
|
||||
/*
|
||||
* Check to see if the defender took damage so we can apply recently hurt
|
||||
*/
|
||||
if(event.getEntity() instanceof Player)
|
||||
{
|
||||
Player herpderp = (Player)event.getEntity();
|
||||
if(!event.isCancelled() && event.getDamage() >= 1)
|
||||
{
|
||||
Users.getProfile(herpderp).setRecentlyHurt(System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WOLF:
|
||||
Wolf wolf = (Wolf) entity;
|
||||
if((!m.isInvincible(wolf, event)) && wolf.isTamed() && wolf.getOwner() != null)
|
||||
Taming.preventDamage(event, plugin);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDeath(EntityDeathEvent event)
|
||||
{
|
||||
Entity x = event.getEntity();
|
||||
LivingEntity x = event.getEntity();
|
||||
x.setFireTicks(0);
|
||||
|
||||
//Remove bleed track
|
||||
if(plugin.misc.bleedTracker.contains((LivingEntity)x))
|
||||
plugin.misc.addToBleedRemovalQue((LivingEntity)x);
|
||||
|
||||
Skills.arrowRetrievalCheck(x, plugin);
|
||||
/*
|
||||
if(Config.getInstance().isMobSpawnTracked(x)){
|
||||
Config.getInstance().removeMobSpawnTrack(x);
|
||||
}
|
||||
*/
|
||||
if(x instanceof Player){
|
||||
Player player = (Player)x;
|
||||
Users.getProfile(player).setBleedTicks(0);
|
||||
//Remove mob from mob spawner list
|
||||
if(plugin.misc.mobSpawnerList.contains(x.getEntityId()))
|
||||
{
|
||||
plugin.misc.mobSpawnerList.remove((Object)x.getEntityId());
|
||||
}
|
||||
|
||||
//Remove bleed track
|
||||
if(plugin.misc.bleedTracker.contains(x))
|
||||
plugin.misc.addToBleedRemovalQue(x);
|
||||
|
||||
Archery.arrowRetrievalCheck(x, plugin);
|
||||
|
||||
if(x instanceof Player)
|
||||
Users.getProfile((Player)x).setBleedTicks(0);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@@ -206,56 +158,168 @@ public class mcEntityListener implements Listener
|
||||
SpawnReason reason = event.getSpawnReason();
|
||||
|
||||
if(reason == SpawnReason.SPAWNER && !LoadProperties.xpGainsMobSpawners)
|
||||
{
|
||||
plugin.misc.mobSpawnerList.add(event.getEntity());
|
||||
}
|
||||
plugin.misc.mobSpawnerList.add(event.getEntity().getEntityId());
|
||||
}
|
||||
|
||||
/*
|
||||
@EventHandler (priority = EventPriority.LOW)
|
||||
public void onExplosionPrime(ExplosionPrimeEvent event)
|
||||
{
|
||||
if(event.getEntity() instanceof TNTPrimed)
|
||||
{
|
||||
Block block = event.getEntity().getLocation().getBlock();
|
||||
Location location = event.getEntity().getLocation();
|
||||
|
||||
if(plugin.misc.tntTracker.get(block) != null)
|
||||
//Ugly code to make it recognize the location
|
||||
location.setX(location.getBlockX()+1);
|
||||
location.setY(location.getBlockY());
|
||||
location.setZ(location.getBlockZ()+1);
|
||||
|
||||
if(plugin.misc.tntTracker.containsKey(location))
|
||||
{
|
||||
int skillLevel = plugin.misc.tntTracker.get(block);
|
||||
BlastMining.biggerBombs(skillLevel, event);
|
||||
Player player = plugin.misc.tntTracker.get(location);
|
||||
BlastMining.biggerBombs(player, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@EventHandler (priority = EventPriority.LOW)
|
||||
public void onEnitityExplode(EntityExplodeEvent event)
|
||||
{
|
||||
if(event.getEntity() instanceof TNTPrimed)
|
||||
{
|
||||
Block block = event.getLocation().getBlock();
|
||||
Location location = event.getEntity().getLocation();
|
||||
|
||||
//Ugly code to make it recognize the location
|
||||
location.setX(location.getBlockX()+1);
|
||||
location.setY(location.getBlockY());
|
||||
location.setZ(location.getBlockZ()+1);
|
||||
|
||||
if(plugin.misc.tntTracker.get(block) != null)
|
||||
if(plugin.misc.tntTracker.containsKey(location))
|
||||
{
|
||||
int skillLevel = plugin.misc.tntTracker.get(block);
|
||||
BlastMining.dropProcessing(skillLevel, event, plugin);
|
||||
Player player = plugin.misc.tntTracker.get(location);
|
||||
BlastMining.dropProcessing(player, event, plugin);
|
||||
plugin.misc.tntTracker.remove(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
public boolean isBow(ItemStack is){
|
||||
if (is.getTypeId() == 261){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@EventHandler (priority = EventPriority.LOW)
|
||||
public void onFoodLevelChange(FoodLevelChangeEvent event)
|
||||
{
|
||||
if(LoadProperties.herbalismHungerBonus)
|
||||
{
|
||||
if(event.getEntity() instanceof Player)
|
||||
{
|
||||
Player player = (Player) event.getEntity();
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int currentFoodLevel = player.getFoodLevel();
|
||||
int newFoodLevel = event.getFoodLevel();
|
||||
|
||||
//Some foods have 3 ranks
|
||||
//Some foods have 5 ranks
|
||||
//The number of ranks is based on how 'common' the item is
|
||||
//We can adjust this quite easily if we find something is giving too much of a bonus
|
||||
|
||||
if(newFoodLevel > currentFoodLevel)
|
||||
{
|
||||
Material food = player.getItemInHand().getType();
|
||||
int herbLevel = PP.getSkillLevel(SkillType.HERBALISM);
|
||||
int foodChange = newFoodLevel - currentFoodLevel;
|
||||
|
||||
switch(food)
|
||||
{
|
||||
case BREAD:
|
||||
{
|
||||
//BREAD RESTORES 2 1/2 HUNGER
|
||||
//Restores 5 HUNGER @ 1000
|
||||
if(herbLevel >= 200 && herbLevel < 400)
|
||||
foodChange = foodChange + 1;
|
||||
else if(herbLevel >= 400 && herbLevel < 600)
|
||||
foodChange = foodChange + 2;
|
||||
else if(herbLevel >= 600 && herbLevel < 800)
|
||||
foodChange = foodChange + 3;
|
||||
else if(herbLevel >= 800 && herbLevel < 1000)
|
||||
foodChange = foodChange + 4;
|
||||
else if(herbLevel >= 1000)
|
||||
foodChange = foodChange + 5;
|
||||
break;
|
||||
}
|
||||
case COOKIE:
|
||||
{
|
||||
//COOKIE RESTORES 1/2 HUNGER
|
||||
//RESTORES 2 HUNGER @ 1000
|
||||
if(herbLevel >= 200 && herbLevel < 600)
|
||||
foodChange = foodChange + 1;
|
||||
else if(herbLevel >= 600 && herbLevel < 1000)
|
||||
foodChange = foodChange + 2;
|
||||
else if(herbLevel >= 1000)
|
||||
foodChange = foodChange + 3;
|
||||
break;
|
||||
}
|
||||
case MELON:
|
||||
{
|
||||
//MELON RESTORES 1 HUNGER
|
||||
//RESTORES 2 1/2 HUNGER @ 1000
|
||||
if(herbLevel >= 200 && herbLevel < 600)
|
||||
foodChange = foodChange + 1;
|
||||
else if(herbLevel >= 600 && herbLevel < 1000)
|
||||
foodChange = foodChange + 2;
|
||||
else if(herbLevel >= 1000)
|
||||
foodChange = foodChange + 3;
|
||||
break;
|
||||
}
|
||||
case MUSHROOM_SOUP:
|
||||
{
|
||||
//MUSHROOM SOUP RESTORES 4 HUNGER
|
||||
//RESTORES 6 1/2 HUNGER @ 1000
|
||||
if(herbLevel >= 200 && herbLevel < 400)
|
||||
foodChange = foodChange + 1;
|
||||
else if(herbLevel >= 400 && herbLevel < 600)
|
||||
foodChange = foodChange + 2;
|
||||
else if(herbLevel >= 600 && herbLevel < 800)
|
||||
foodChange = foodChange + 3;
|
||||
else if(herbLevel >= 800 && herbLevel < 1000)
|
||||
foodChange = foodChange + 4;
|
||||
else if(herbLevel >= 1000)
|
||||
foodChange = foodChange + 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Make sure we don't go over the max value
|
||||
newFoodLevel = currentFoodLevel + foodChange;
|
||||
if(newFoodLevel > 20)
|
||||
event.setFoodLevel(20);
|
||||
if(newFoodLevel <= 20)
|
||||
event.setFoodLevel(newFoodLevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public boolean isPlayer(Entity entity){
|
||||
if (entity instanceof Player) {
|
||||
return true;
|
||||
} else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler (priority = EventPriority.MONITOR)
|
||||
public void onEntityTame(EntityTameEvent event)
|
||||
{
|
||||
Player player = (Player) event.getOwner();
|
||||
if(mcPermissions.getInstance().taming(player))
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
EntityType type = event.getEntityType();
|
||||
int xp = 0;
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case WOLF:
|
||||
xp = LoadProperties.mtameWolf;
|
||||
break;
|
||||
/*
|
||||
case OCELOT:
|
||||
xp = LoadProperties.mtameOcelot;
|
||||
break;
|
||||
*/
|
||||
}
|
||||
|
||||
PP.addXP(SkillType.TAMING, xp, player);
|
||||
Skills.XpCheckSkill(SkillType.TAMING, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,19 +21,19 @@ import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
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.CreatureType;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
import org.bukkit.event.player.PlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerFishEvent;
|
||||
@@ -43,7 +43,6 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.Combat;
|
||||
@@ -54,14 +53,14 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.commands.general.XprateCommand;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.runnables.RemoveProfileFromMemoryTask;
|
||||
import com.gmail.nossr50.spout.SpoutStuff;
|
||||
import com.gmail.nossr50.spout.mmoHelper;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
import com.gmail.nossr50.skills.Fishing;
|
||||
import com.gmail.nossr50.skills.Herbalism;
|
||||
import com.gmail.nossr50.skills.Repair;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
|
||||
@@ -69,103 +68,88 @@ import com.gmail.nossr50.skills.Skills;
|
||||
public class mcPlayerListener implements Listener
|
||||
{
|
||||
protected static final Logger log = Logger.getLogger("Minecraft"); //$NON-NLS-1$
|
||||
public Location spawn = null;
|
||||
private mcMMO plugin;
|
||||
|
||||
public mcPlayerListener(mcMMO instance)
|
||||
{
|
||||
plugin = instance;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerWorldChangeEvent(PlayerChangedWorldEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
if(PP.getGodMode())
|
||||
{
|
||||
if(!mcPermissions.getInstance().mcgod(player))
|
||||
{
|
||||
PP.toggleGodMode();
|
||||
player.sendMessage("[mcMMO] God Mode not permitted on this world (See Permissions)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerFish(PlayerFishEvent event)
|
||||
{
|
||||
if(mcPermissions.getInstance().fishing(event.getPlayer()))
|
||||
Player player = event.getPlayer();
|
||||
if(mcPermissions.getInstance().fishing(player))
|
||||
{
|
||||
if(event.getState() == State.CAUGHT_FISH)
|
||||
State state = event.getState();
|
||||
Entity caught = event.getCaught();
|
||||
if(state== State.CAUGHT_FISH)
|
||||
{
|
||||
if(event.getCaught() instanceof org.bukkit.entity.Item)
|
||||
{
|
||||
if(caught instanceof org.bukkit.entity.Item)
|
||||
Fishing.processResults(event);
|
||||
}
|
||||
} else if (event.getState() == State.CAUGHT_ENTITY)
|
||||
}
|
||||
else if (state == State.CAUGHT_ENTITY)
|
||||
{
|
||||
if(Users.getProfile(event.getPlayer()).getSkillLevel(SkillType.FISHING) >= 150 && event.getCaught() instanceof LivingEntity)
|
||||
{
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.FISHING);
|
||||
if(skillLevel >= 150)
|
||||
Fishing.shakeMob(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent event)
|
||||
{
|
||||
if(Users.getProfile(event.getPlayer()).getBerserkMode())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerRespawn(PlayerRespawnEvent event)
|
||||
{
|
||||
|
||||
Player player = event.getPlayer();
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(LoadProperties.enableMySpawn && mcPermissions.getInstance().mySpawn(player))
|
||||
{
|
||||
if(player != null && PP != null)
|
||||
{
|
||||
PP.setRespawnATS(System.currentTimeMillis());
|
||||
|
||||
Location mySpawn = PP.getMySpawn(player);
|
||||
|
||||
if(mySpawn != null)
|
||||
{
|
||||
{
|
||||
event.setRespawnLocation(mySpawn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerLogin(PlayerLoginEvent event)
|
||||
{
|
||||
Users.addUser(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
|
||||
/*
|
||||
* GARBAGE COLLECTION
|
||||
*/
|
||||
//Discard the PlayerProfile object
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(LoadProperties.spoutEnabled)
|
||||
{
|
||||
if(SpoutStuff.playerHUDs.containsKey(player))
|
||||
SpoutStuff.playerHUDs.remove(player);
|
||||
if(mmoHelper.containers.containsKey(player))
|
||||
mmoHelper.containers.remove(player);
|
||||
}
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(LoadProperties.spoutEnabled && SpoutStuff.playerHUDs.containsKey(player))
|
||||
SpoutStuff.playerHUDs.remove(player);
|
||||
|
||||
//Bleed it out
|
||||
if(Users.getProfile(player).getBleedTicks() > 0) Combat.dealDamage(player, Users.getProfile(player).getBleedTicks()*2);
|
||||
if(PP.getBleedTicks() > 0)
|
||||
Combat.dealDamage(player, PP.getBleedTicks()*2);
|
||||
|
||||
//Save PlayerData to MySQL/FlatFile on player quit
|
||||
Users.getProfile(player).save();
|
||||
PP.save();
|
||||
|
||||
//Remove PlayerProfile
|
||||
Users.removeUser(event.getPlayer());
|
||||
//Schedule PlayerProfile removal 2 minutes after quitting
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new RemoveProfileFromMemoryTask(player), 2400);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerJoin(PlayerJoinEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
@@ -186,27 +170,16 @@ public class mcPlayerListener implements Listener
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
Action action = event.getAction();
|
||||
Block block = event.getClickedBlock();
|
||||
|
||||
ItemStack is = player.getItemInHand();
|
||||
|
||||
/*
|
||||
* Ability checks
|
||||
*/
|
||||
if(action == Action.RIGHT_CLICK_BLOCK)
|
||||
{
|
||||
ItemStack is = player.getItemInHand();
|
||||
if(LoadProperties.enableMySpawn && block != null && player != null)
|
||||
{
|
||||
if(block.getTypeId() == 26 && mcPermissions.getInstance().setMySpawn(player))
|
||||
{
|
||||
Location loc = player.getLocation();
|
||||
if(mcPermissions.getInstance().setMySpawn(player)){
|
||||
PP.setMySpawn(loc.getX(), loc.getY(), loc.getZ(), loc.getWorld().getName());
|
||||
}
|
||||
//player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnSet"));
|
||||
}
|
||||
}
|
||||
Material mat = block.getType();
|
||||
|
||||
if(block != null && player != null && mcPermissions.getInstance().repair(player)
|
||||
&& event.getClickedBlock().getTypeId() == LoadProperties.anvilID && (Repair.isTools(player.getItemInHand()) || Repair.isArmor(player.getItemInHand())))
|
||||
if(block != null && mcPermissions.getInstance().repair(player) && block.getTypeId() == LoadProperties.anvilID && (Repair.isTools(is) || Repair.isArmor(is)))
|
||||
{
|
||||
Repair.repairCheck(player, is, event.getClickedBlock());
|
||||
event.setCancelled(true);
|
||||
@@ -215,57 +188,67 @@ public class mcPlayerListener implements Listener
|
||||
|
||||
if(LoadProperties.enableAbilities && m.abilityBlockCheck(block))
|
||||
{
|
||||
if(block != null && m.isHoe(player.getItemInHand()) && block.getTypeId() != 3 && block.getTypeId() != 2 && block.getTypeId() != 60){
|
||||
Skills.hoeReadinessCheck(player);
|
||||
}
|
||||
Skills.abilityActivationCheck(player);
|
||||
if(block != null && m.isHoe(is) && !mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL))
|
||||
Skills.activationCheck(player, SkillType.HERBALISM);
|
||||
|
||||
Skills.activationCheck(player, SkillType.AXES);
|
||||
Skills.activationCheck(player, SkillType.EXCAVATION);
|
||||
Skills.activationCheck(player, SkillType.MINING);
|
||||
Skills.activationCheck(player, SkillType.SWORDS);
|
||||
Skills.activationCheck(player, SkillType.UNARMED);
|
||||
Skills.activationCheck(player, SkillType.WOODCUTTING);
|
||||
}
|
||||
|
||||
//GREEN THUMB
|
||||
if(block != null && mcPermissions.getInstance().herbalism(player) && (block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT || block.getType() == Material.SMOOTH_BRICK) && player.getItemInHand().getType() == Material.SEEDS)
|
||||
if(block != null && mcPermissions.getInstance().herbalism(player) && (mat.equals(Material.COBBLESTONE) || mat.equals(Material.DIRT) || mat.equals(Material.SMOOTH_BRICK)) && is.getType().equals(Material.SEEDS))
|
||||
{
|
||||
boolean pass = false;
|
||||
if(Herbalism.hasSeeds(player))
|
||||
{
|
||||
Herbalism.removeSeeds(player);
|
||||
int seeds = is.getAmount();
|
||||
player.setItemInHand(new ItemStack(Material.SEEDS, seeds - 1));
|
||||
|
||||
if(block.getType() == Material.DIRT || block.getType() == Material.COBBLESTONE || block.getType() == Material.SMOOTH_BRICK)
|
||||
if(Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM) && m.blockBreakSimulate(block, player, false))
|
||||
{
|
||||
switch(mat)
|
||||
{
|
||||
if(Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM) && m.blockBreakSimulate(block, player))
|
||||
case COBBLESTONE:
|
||||
if(LoadProperties.enableCobbleToMossy)
|
||||
{
|
||||
switch(block.getType())
|
||||
{
|
||||
case COBBLESTONE:
|
||||
if(LoadProperties.enableCobbleToMossy) {
|
||||
block.setType(Material.MOSSY_COBBLESTONE);
|
||||
pass = true;
|
||||
}
|
||||
break;
|
||||
case DIRT:
|
||||
if(LoadProperties.enableDirtToGrass) {
|
||||
pass = true;
|
||||
block.setType(Material.GRASS);
|
||||
}
|
||||
break;
|
||||
case SMOOTH_BRICK:
|
||||
if(LoadProperties.enableSmoothToMossy) {
|
||||
pass = true;
|
||||
block.setData((byte)1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if(pass == false)
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumbFail"));
|
||||
block.setType(Material.MOSSY_COBBLESTONE);
|
||||
pass = true;
|
||||
}
|
||||
break;
|
||||
case DIRT:
|
||||
if(LoadProperties.enableDirtToGrass)
|
||||
{
|
||||
block.setType(Material.GRASS);
|
||||
pass = true;
|
||||
}
|
||||
break;
|
||||
case SMOOTH_BRICK:
|
||||
if(LoadProperties.enableSmoothToMossy)
|
||||
{
|
||||
pass = true;
|
||||
block.setData((byte)1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(pass == false)
|
||||
player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumbFail"));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(LoadProperties.enableAbilities && action == Action.RIGHT_CLICK_AIR)
|
||||
{
|
||||
Skills.hoeReadinessCheck(player);
|
||||
Skills.abilityActivationCheck(player);
|
||||
Skills.activationCheck(player, SkillType.AXES);
|
||||
Skills.activationCheck(player, SkillType.EXCAVATION);
|
||||
Skills.activationCheck(player, SkillType.HERBALISM);
|
||||
Skills.activationCheck(player, SkillType.MINING);
|
||||
Skills.activationCheck(player, SkillType.SWORDS);
|
||||
Skills.activationCheck(player, SkillType.UNARMED);
|
||||
Skills.activationCheck(player, SkillType.WOODCUTTING);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -273,15 +256,12 @@ public class mcPlayerListener implements Listener
|
||||
*/
|
||||
if(action == Action.RIGHT_CLICK_AIR)
|
||||
Item.itemchecks(player, plugin);
|
||||
if(action == Action.RIGHT_CLICK_BLOCK)
|
||||
{
|
||||
if(m.abilityBlockCheck(event.getClickedBlock()))
|
||||
Item.itemchecks(player, plugin);
|
||||
}
|
||||
if(action == Action.RIGHT_CLICK_BLOCK && m.abilityBlockCheck(block))
|
||||
Item.itemchecks(player, plugin);
|
||||
|
||||
if(player.isSneaking() && mcPermissions.getInstance().taming(player) && (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK))
|
||||
{
|
||||
if(player.getItemInHand().getType() == Material.BONE && player.getItemInHand().getAmount() > 9)
|
||||
if(is.getType().equals(Material.BONE) && is.getAmount() >= LoadProperties.bonesConsumedByCOTW)
|
||||
{
|
||||
for(Entity x : player.getNearbyEntities(40, 40, 40))
|
||||
{
|
||||
@@ -291,33 +271,49 @@ public class mcPlayerListener implements Listener
|
||||
return;
|
||||
}
|
||||
}
|
||||
World world = player.getWorld();
|
||||
world.spawnCreature(player.getLocation(), CreatureType.WOLF);
|
||||
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory){
|
||||
if(x != null && x.getAmount() > LoadProperties.bonesConsumedByCOTW-1 && x.getType() == Material.BONE){
|
||||
if(x.getAmount() >= LoadProperties.bonesConsumedByCOTW)
|
||||
{
|
||||
x.setAmount(x.getAmount() - LoadProperties.bonesConsumedByCOTW);
|
||||
player.getInventory().setContents(inventory);
|
||||
player.updateInventory();
|
||||
break;
|
||||
} else {
|
||||
x.setAmount(0);
|
||||
x.setTypeId(0);
|
||||
player.getInventory().setContents(inventory);
|
||||
player.updateInventory();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
World world = player.getWorld();
|
||||
world.spawnCreature(player.getLocation(), EntityType.WOLF);
|
||||
|
||||
int bones = is.getAmount();
|
||||
bones = bones - LoadProperties.bonesConsumedByCOTW;
|
||||
player.setItemInHand(new ItemStack(Material.BONE, bones));
|
||||
player.sendMessage(mcLocale.getString("m.TamingSummon"));
|
||||
}
|
||||
}
|
||||
|
||||
//BLAST MINING
|
||||
if((action == Action.RIGHT_CLICK_BLOCK || action == Action.RIGHT_CLICK_AIR) && is.getTypeId() == LoadProperties.detonatorID)
|
||||
{
|
||||
Block b = player.getTargetBlock(null, 100);
|
||||
if(b.getType().equals(Material.TNT) && mcPermissions.getInstance().blastMining(player) && m.blockBreakSimulate(b, player, true) && Users.getProfile(player).getSkillLevel(SkillType.MINING) >= 125)
|
||||
{
|
||||
AbilityType ability = AbilityType.BLAST_MINING;
|
||||
//Check cooldown
|
||||
if(!Skills.cooldownOver(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + Skills.calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)");
|
||||
return;
|
||||
}
|
||||
//Send message to nearby players
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
|
||||
y.sendMessage(ability.getAbilityPlayer(player));
|
||||
}
|
||||
|
||||
player.sendMessage(ChatColor.GRAY+"**BOOM**");
|
||||
|
||||
TNTPrimed tnt = player.getWorld().spawn(b.getLocation(), TNTPrimed.class);
|
||||
b.setType(Material.AIR);
|
||||
tnt.setFuseTicks(0);
|
||||
PP.setSkillDATS(ability, System.currentTimeMillis()); //Save DATS for Blast Mining
|
||||
PP.setBlastMiningInformed(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onPlayerChat(PlayerChatEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
@@ -332,7 +328,7 @@ public class mcPlayerListener implements Listener
|
||||
if(Party.getInstance().inSameParty(player, x))
|
||||
x.sendMessage(format);
|
||||
}
|
||||
log.log(Level.INFO, "[P]"+format);
|
||||
log.log(Level.INFO, "[P](" + PP.getParty() + ")<" + name + ">" + event.getMessage());
|
||||
} else if (PP.getAdminChatMode()) {
|
||||
event.setCancelled(true);
|
||||
String name = (LoadProperties.aDisplayNames) ? player.getDisplayName() : player.getName();
|
||||
@@ -342,10 +338,10 @@ public class mcPlayerListener implements Listener
|
||||
if(x.isOp() || mcPermissions.getInstance().adminChat(x))
|
||||
x.sendMessage(format);
|
||||
}
|
||||
log.log(Level.INFO, "[A]"+format);
|
||||
log.log(Level.INFO, "[A]<" + name + ">" + event.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Dynamically aliasing commands need to be re-done.
|
||||
// For now, using a command with an alias will send both the original command, and the mcMMO command
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
|
||||
@@ -26,12 +26,15 @@ import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import com.gmail.nossr50.config.*;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.events.FakeBlockBreakEvent;
|
||||
import com.gmail.nossr50.events.McMMOItemSpawnEvent;
|
||||
import com.gmail.nossr50.skills.Repair;
|
||||
|
||||
public class m
|
||||
{
|
||||
@@ -53,25 +56,19 @@ public class m
|
||||
public static int getInt(String string)
|
||||
{
|
||||
if(isInt(string))
|
||||
{
|
||||
return Integer.parseInt(string);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static Double getDouble(String string)
|
||||
public static boolean isInvincible(LivingEntity le, EntityDamageEvent event)
|
||||
{
|
||||
if(isDouble(string))
|
||||
{
|
||||
return Double.parseDouble(string);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (double) 0;
|
||||
}
|
||||
//So apparently if you do more damage to a LivingEntity than its last damage int you bypass the invincibility
|
||||
//So yeah, this is for that
|
||||
if(le.getNoDamageTicks() > le.getMaximumNoDamageTicks() / 2.0F && event.getDamage() <= le.getLastDamage())
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isDouble(String string)
|
||||
@@ -86,16 +83,51 @@ public class m
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean shouldBeWatched(Block block)
|
||||
/**
|
||||
* Checks to see if a block type awards XP.
|
||||
*
|
||||
* @param material Block type to check
|
||||
* @return true if the block type awards XP, false otherwise
|
||||
*/
|
||||
public static boolean shouldBeWatched(Material material)
|
||||
{
|
||||
int id = block.getTypeId();
|
||||
return shouldBeWatched(id);
|
||||
}
|
||||
public static boolean shouldBeWatched(int id) {
|
||||
return id == 2 || id == 3 || id == 12 || id == 13 || id == 82 || //Excavation
|
||||
id == 1 || id == 14 || id == 15 || id == 16 || id == 21 || id == 24 || id == 49 || id == 56 || id == 73 || id == 74 || id == 87 || id == 89 || id == 112 || id == 121 || id == 48 || id == 98 || //Mining
|
||||
id == 17 || id == 37 || id == 38 || id == 39 || id == 40 || id == 81 || id == 83 || id == 86 || id == 91 || id == 103 || id == 106 || id == 111 || //Woodcutting & Herbalism
|
||||
id == LoadProperties.anvilID; //Anvil
|
||||
switch(material){
|
||||
case BROWN_MUSHROOM:
|
||||
case CACTUS:
|
||||
case CLAY:
|
||||
case COAL_ORE:
|
||||
case DIAMOND_ORE:
|
||||
case DIRT:
|
||||
case ENDER_STONE:
|
||||
case GLOWING_REDSTONE_ORE:
|
||||
case GLOWSTONE:
|
||||
case GOLD_ORE:
|
||||
case GRASS:
|
||||
case GRAVEL:
|
||||
case IRON_ORE:
|
||||
case JACK_O_LANTERN:
|
||||
case LAPIS_ORE:
|
||||
case LOG:
|
||||
case MELON_BLOCK:
|
||||
case MOSSY_COBBLESTONE:
|
||||
case MYCEL:
|
||||
case NETHERRACK:
|
||||
case OBSIDIAN:
|
||||
case PUMPKIN:
|
||||
case RED_MUSHROOM:
|
||||
case RED_ROSE:
|
||||
case REDSTONE_ORE:
|
||||
case SAND:
|
||||
case SANDSTONE:
|
||||
case SOUL_SAND:
|
||||
case STONE:
|
||||
case SUGAR_CANE_BLOCK:
|
||||
case VINE:
|
||||
case WATER_LILY:
|
||||
case YELLOW_FLOWER:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int getPowerLevel(Player player)
|
||||
@@ -129,8 +161,15 @@ public class m
|
||||
return x;
|
||||
}
|
||||
|
||||
public static boolean blockBreakSimulate(Block block, Player player)
|
||||
public static boolean blockBreakSimulate(Block block, Player player, Boolean shouldArmSwing)
|
||||
{
|
||||
//Support for NoCheat
|
||||
if(shouldArmSwing)
|
||||
{
|
||||
PlayerAnimationEvent armswing = new PlayerAnimationEvent(player);
|
||||
Bukkit.getPluginManager().callEvent(armswing);
|
||||
}
|
||||
|
||||
FakeBlockBreakEvent event = new FakeBlockBreakEvent(block, player);
|
||||
if(block != null && player != null){
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
@@ -144,113 +183,64 @@ public class m
|
||||
return false; //Return false if something went wrong
|
||||
}
|
||||
}
|
||||
|
||||
public static void damageTool(Player player, short damage)
|
||||
{
|
||||
if(player.getItemInHand().getTypeId() == 0)
|
||||
return;
|
||||
player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability() + damage));
|
||||
if(player.getItemInHand().getDurability() >= getMaxDurability(getTier(player), player.getItemInHand()))
|
||||
{
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory)
|
||||
{
|
||||
if(x != null && x.getTypeId() == player.getItemInHand().getTypeId() && x.getDurability() == player.getItemInHand().getDurability()){
|
||||
x.setTypeId(0);
|
||||
x.setAmount(0);
|
||||
player.getInventory().setContents(inventory);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Integer getTier(Player player)
|
||||
{
|
||||
int i = player.getItemInHand().getTypeId();
|
||||
if(i == 268 || i == 269 || i == 270 || i == 271 || i == 290){
|
||||
return 1; //WOOD
|
||||
} else if (i == 272 || i == 273 || i == 274 || i == 275 || i == 291){
|
||||
return 2; //STONE
|
||||
} else if (i == 256 || i == 257 || i == 258 || i == 267 || i == 292){
|
||||
return 3; //IRON
|
||||
} else if (i == 283 || i == 284 || i == 285 || i == 286 || i == 294){
|
||||
return 1; //GOLD
|
||||
} else if (i == 276 || i == 277 || i == 278 || i == 279 || i == 293){
|
||||
return 4; //DIAMOND
|
||||
} else {
|
||||
return 1; //UNRECOGNIZED
|
||||
}
|
||||
ItemStack is = player.getItemInHand();
|
||||
if(Repair.isWoodTools(is))
|
||||
return 1;
|
||||
if(Repair.isStoneTools(is))
|
||||
return 2;
|
||||
if(Repair.isIronTools(is))
|
||||
return 3;
|
||||
if(Repair.isGoldTools(is))
|
||||
return 1;
|
||||
if(Repair.isDiamondTools(is))
|
||||
return 4;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
public static Integer getMaxDurability(Integer tier, ItemStack item)
|
||||
{
|
||||
int id = item.getTypeId();
|
||||
if(tier == 1){
|
||||
if((id == 283 || id == 284 || id == 285 || id == 286 || id == 294)){
|
||||
return 33; //GOLD
|
||||
} else {
|
||||
return 60; //WOOD
|
||||
}
|
||||
} else if (tier == 2){
|
||||
return 132;
|
||||
} else if (tier == 3){
|
||||
return 251;
|
||||
} else if (tier == 4){
|
||||
return 1562;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static double getDistance(Location loca, Location locb)
|
||||
{
|
||||
return Math.sqrt(Math.pow(loca.getX() - locb.getX(), 2) + Math.pow(loca.getY() - locb.getY(), 2)
|
||||
+ Math.pow(loca.getZ() - locb.getZ(), 2));
|
||||
}
|
||||
|
||||
public static boolean abilityBlockCheck(Block block)
|
||||
{
|
||||
int i = block.getTypeId();
|
||||
if(i == 107 ||i == 117 || i == 116 || i == 96 || i == 68 || i == 355 || i == 26 || i == 323 || i == 25 || i == 54 || i == 69 || i == 92 || i == 77 || i == 58 || i == 61 || i == 62 || i == LoadProperties.anvilID || i == 71 || i == 64 || i == 84 || i == 324 || i == 330){
|
||||
return false;
|
||||
} else {
|
||||
public static boolean isNear(Location first, Location second, int maxDistance) {
|
||||
double relX = first.getX() - second.getX();
|
||||
double relY = first.getY() - second.getY();
|
||||
double relZ = first.getZ() - second.getZ();
|
||||
double dist = relX * relX + relY * relY + relZ * relZ;
|
||||
|
||||
if (dist < maxDistance * maxDistance)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isBlockAround(Location loc, Integer radius, Integer typeid)
|
||||
{
|
||||
Block blockx = loc.getBlock();
|
||||
int ox = blockx.getX();
|
||||
int oy = blockx.getY();
|
||||
int oz = blockx.getZ();
|
||||
for (int cx = -radius; cx <= radius; cx++) {
|
||||
for (int cy = -radius; cy <= radius; cy++) {
|
||||
for (int cz = -radius; cz <= radius; cz++) {
|
||||
Block block = loc.getWorld().getBlockAt(ox + cx, oy + cy, oz + cz);
|
||||
if (block.getTypeId() == typeid) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Integer calculateHealth(Integer health, Integer newvalue){
|
||||
if((health + newvalue) > 20){
|
||||
return 20;
|
||||
} else {
|
||||
return health+newvalue;
|
||||
}
|
||||
}
|
||||
public Integer calculateMinusHealth(Integer health, Integer newvalue){
|
||||
if((health - newvalue) < 1){
|
||||
return 0;
|
||||
} else {
|
||||
return health-newvalue;
|
||||
|
||||
public static boolean abilityBlockCheck(Block block)
|
||||
{
|
||||
switch(block.getType()){
|
||||
case BED_BLOCK:
|
||||
case BREWING_STAND:
|
||||
case BURNING_FURNACE:
|
||||
case CAKE_BLOCK:
|
||||
case CHEST:
|
||||
case DISPENSER:
|
||||
case ENCHANTMENT_TABLE:
|
||||
case FENCE_GATE:
|
||||
case FURNACE:
|
||||
case IRON_DOOR_BLOCK:
|
||||
case JUKEBOX:
|
||||
case LEVER:
|
||||
case NOTE_BLOCK:
|
||||
case STONE_BUTTON:
|
||||
case TRAP_DOOR:
|
||||
case WALL_SIGN:
|
||||
case WOODEN_DOOR:
|
||||
case WORKBENCH:
|
||||
return false;
|
||||
}
|
||||
|
||||
if(block.getTypeId() == LoadProperties.anvilID)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isInt(String string)
|
||||
@@ -266,13 +256,22 @@ public class m
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void mcDropItem(Location location, int id)
|
||||
public static void mcDropItems(Location location, ItemStack is, int quantity)
|
||||
{
|
||||
if(location == null) return;
|
||||
|
||||
Material mat = Material.getMaterial(id);
|
||||
ItemStack item = new ItemStack(mat, 1, (byte) 0, (byte) 0);
|
||||
mcDropItem(location, item);
|
||||
for(int i = 0; i < quantity; i++)
|
||||
mcDropItem(location, is);
|
||||
}
|
||||
|
||||
public static void mcRandomDropItem(Location location, ItemStack is, int chance)
|
||||
{
|
||||
if(Math.random() * 100 < chance)
|
||||
mcDropItem(location, is);
|
||||
}
|
||||
|
||||
public static void mcRandomDropItems(Location location, ItemStack is, int chance, int quantity)
|
||||
{
|
||||
for(int i = 0; i < quantity; i++)
|
||||
mcRandomDropItem(location, is, chance);
|
||||
}
|
||||
|
||||
public static void mcDropItem(Location location, ItemStack itemStack) {
|
||||
@@ -286,32 +285,130 @@ public class m
|
||||
|
||||
public static boolean isSwords(ItemStack is)
|
||||
{
|
||||
int id = is.getTypeId();
|
||||
return id == 268 || id == 267 || id == 272 || id == 283 || id == 276;
|
||||
switch(is.getType()){
|
||||
case DIAMOND_SWORD:
|
||||
case GOLD_SWORD:
|
||||
case IRON_SWORD:
|
||||
case STONE_SWORD:
|
||||
case WOOD_SWORD:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isHoe(ItemStack is)
|
||||
{
|
||||
int id = is.getTypeId();
|
||||
return id == 290 || id == 291 || id == 292 || id == 293 || id == 294;
|
||||
switch(is.getType()){
|
||||
case DIAMOND_HOE:
|
||||
case GOLD_HOE:
|
||||
case IRON_HOE:
|
||||
case STONE_HOE:
|
||||
case WOOD_HOE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isShovel(ItemStack is)
|
||||
{
|
||||
int id = is.getTypeId();
|
||||
return id == 269 || id == 273 || id == 277 || id == 284 || id == 256;
|
||||
switch(is.getType()){
|
||||
case DIAMOND_SPADE:
|
||||
case GOLD_SPADE:
|
||||
case IRON_SPADE:
|
||||
case STONE_SPADE:
|
||||
case WOOD_SPADE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isAxes(ItemStack is)
|
||||
{
|
||||
int id = is.getTypeId();
|
||||
return id == 271 || id == 258 || id == 286 || id == 279 || id == 275;
|
||||
switch(is.getType()){
|
||||
case DIAMOND_AXE:
|
||||
case GOLD_AXE:
|
||||
case IRON_AXE:
|
||||
case STONE_AXE:
|
||||
case WOOD_AXE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isMiningPick(ItemStack is)
|
||||
{
|
||||
int id = is.getTypeId();
|
||||
return id == 270 || id == 274 || id == 285 || id == 257 || id == 278;
|
||||
switch(is.getType()){
|
||||
case DIAMOND_PICKAXE:
|
||||
case GOLD_PICKAXE:
|
||||
case IRON_PICKAXE:
|
||||
case STONE_PICKAXE:
|
||||
case WOOD_PICKAXE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isHelmet(ItemStack is)
|
||||
{
|
||||
switch(is.getType()){
|
||||
case DIAMOND_HELMET:
|
||||
case GOLD_HELMET:
|
||||
case IRON_HELMET:
|
||||
case LEATHER_HELMET:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isChestplate(ItemStack is)
|
||||
{
|
||||
switch(is.getType()){
|
||||
case DIAMOND_CHESTPLATE:
|
||||
case GOLD_CHESTPLATE:
|
||||
case IRON_CHESTPLATE:
|
||||
case LEATHER_CHESTPLATE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isPants(ItemStack is)
|
||||
{
|
||||
switch(is.getType()){
|
||||
case DIAMOND_LEGGINGS:
|
||||
case GOLD_LEGGINGS:
|
||||
case IRON_LEGGINGS:
|
||||
case LEATHER_LEGGINGS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isBoots(ItemStack is)
|
||||
{
|
||||
switch(is.getType()){
|
||||
case DIAMOND_BOOTS:
|
||||
case GOLD_BOOTS:
|
||||
case IRON_BOOTS:
|
||||
case LEATHER_BOOTS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isOre(Block block)
|
||||
{
|
||||
switch (block.getType()) {
|
||||
case COAL_ORE:
|
||||
case DIAMOND_ORE:
|
||||
case GLOWING_REDSTONE_ORE:
|
||||
case GOLD_ORE:
|
||||
case IRON_ORE:
|
||||
case LAPIS_ORE:
|
||||
case REDSTONE_ORE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void convertToMySQL()
|
||||
@@ -406,8 +503,6 @@ public class m
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "users SET lastlogin = " + 0
|
||||
+ " WHERE id = " + id);
|
||||
//if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
|
||||
//mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
|
||||
mcMMO.database.Write("UPDATE "
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "skills SET " + " taming = taming+"
|
||||
@@ -457,9 +552,6 @@ public class m
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "users WHERE user = '"
|
||||
+ playerName + "'");
|
||||
mcMMO.database.Write("INSERT INTO "
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "spawn (user_id) VALUES (" + id + ")");
|
||||
mcMMO.database.Write("INSERT INTO "
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "skills (user_id) VALUES (" + id + ")");
|
||||
@@ -476,10 +568,6 @@ public class m
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "users SET party = '" + party
|
||||
+ "' WHERE id = " + id);
|
||||
/*
|
||||
if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
|
||||
mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
|
||||
*/
|
||||
mcMMO.database.Write("UPDATE "
|
||||
+ LoadProperties.MySQLtablePrefix
|
||||
+ "skills SET " + " taming = "
|
||||
|
||||
@@ -45,6 +45,7 @@ import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -56,6 +57,8 @@ import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.getspout.spoutapi.SpoutManager;
|
||||
import org.getspout.spoutapi.player.FileManager;
|
||||
@@ -72,11 +75,15 @@ 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);
|
||||
|
||||
//Queue for block data change for R2+ fix
|
||||
public ArrayDeque<Block> changeQueue = new ArrayDeque<Block>();
|
||||
public ArrayDeque<Block> fastChangeQueue = new ArrayDeque<Block>();
|
||||
|
||||
private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION
|
||||
private Runnable mcMMO_SaveTimer = new mcSaveTimer(this); //Periodic saving of Player Data
|
||||
private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(this); //R2 block place workaround
|
||||
//private Timer mcMMO_SpellTimer = new Timer(true);
|
||||
private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(changeQueue); //R2 block place workaround
|
||||
private Runnable FastChangeDataValueTimer = new ChangeDataValueTimer(fastChangeQueue);
|
||||
|
||||
//Alias - Command
|
||||
public HashMap<String, String> aliasMap = new HashMap<String, String>();
|
||||
@@ -86,11 +93,10 @@ public class mcMMO extends JavaPlugin
|
||||
|
||||
//Config file stuff
|
||||
LoadProperties config;
|
||||
LoadTreasures config2;
|
||||
|
||||
//Jar stuff
|
||||
public static File mcmmo;
|
||||
|
||||
//Queue for block data change for R2+ fix
|
||||
public ArrayDeque<Block> changeQueue = new ArrayDeque<Block>();
|
||||
|
||||
public void onEnable()
|
||||
{
|
||||
@@ -117,6 +123,9 @@ public class mcMMO extends JavaPlugin
|
||||
this.config = new LoadProperties(this);
|
||||
this.config.load();
|
||||
|
||||
this.config2 = new LoadTreasures(this);
|
||||
this.config2.load();
|
||||
|
||||
Party.getInstance().loadParties();
|
||||
new Party(this);
|
||||
|
||||
@@ -156,6 +165,7 @@ public class mcMMO extends JavaPlugin
|
||||
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20);
|
||||
//R2+ block place fix
|
||||
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, ChangeDataValueTimer, 0, 10);
|
||||
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, FastChangeDataValueTimer, 0, 1);
|
||||
|
||||
registerCommands();
|
||||
|
||||
@@ -293,6 +303,7 @@ public class mcMMO extends JavaPlugin
|
||||
getCommand("woodcutting").setExecutor(new WoodcuttingCommand());
|
||||
|
||||
//Mc* commands
|
||||
if(LoadProperties.mcremoveEnable) getCommand("mcremove").setExecutor(new McremoveCommand());
|
||||
if(LoadProperties.mcabilityEnable) getCommand("mcability").setExecutor(new McabilityCommand());
|
||||
if(LoadProperties.mccEnable) getCommand("mcc").setExecutor(new MccCommand());
|
||||
if(LoadProperties.mcgodEnable) getCommand("mcgod").setExecutor(new McgodCommand());
|
||||
@@ -310,12 +321,11 @@ public class mcMMO extends JavaPlugin
|
||||
|
||||
//Other commands
|
||||
if(LoadProperties.addxpEnable) getCommand("addxp").setExecutor(new AddxpCommand(this));
|
||||
if(LoadProperties.clearmyspawnEnable) getCommand("clearmyspawn").setExecutor(new ClearmyspawnCommand());
|
||||
if(LoadProperties.addlevelsEnable) getCommand("addlevels").setExecutor(new AddlevelsCommand(this));
|
||||
if(LoadProperties.mmoeditEnable) getCommand("mmoedit").setExecutor(new MmoeditCommand(this));
|
||||
getCommand("mmoupdate").setExecutor(new MmoupdateCommand());
|
||||
if(LoadProperties.myspawnEnable) getCommand("myspawn").setExecutor(new MyspawnCommand());
|
||||
if(LoadProperties.statsEnable) getCommand("stats").setExecutor(new StatsCommand(this));
|
||||
if(LoadProperties.whoisEnable) getCommand("whois").setExecutor(new WhoisCommand(this));
|
||||
if(LoadProperties.mcstatsEnable) getCommand("mcstats").setExecutor(new McstatsCommand());
|
||||
if(LoadProperties.inspectEnable) getCommand("inspect").setExecutor(new InspectCommand(this));
|
||||
if(LoadProperties.xprateEnable) getCommand("xprate").setExecutor(new XprateCommand());
|
||||
|
||||
//Spout commands
|
||||
@@ -377,4 +387,43 @@ public class mcMMO extends JavaPlugin
|
||||
|
||||
return new String(buffer);
|
||||
}
|
||||
|
||||
/*
|
||||
* Boilerplate Custom Config Stuff
|
||||
*/
|
||||
|
||||
private FileConfiguration treasuresConfig = null;
|
||||
private File treasuresConfigFile = null;
|
||||
|
||||
public void reloadTreasuresConfig() {
|
||||
if (treasuresConfigFile == null) {
|
||||
treasuresConfigFile = new File(getDataFolder(), "treasures.yml");
|
||||
}
|
||||
treasuresConfig = YamlConfiguration.loadConfiguration(treasuresConfigFile);
|
||||
|
||||
// Look for defaults in the jar
|
||||
InputStream defConfigStream = getResource("treasures.yml");
|
||||
if (defConfigStream != null) {
|
||||
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
|
||||
treasuresConfig.setDefaults(defConfig);
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getTreasuresConfig() {
|
||||
if (treasuresConfig == null) {
|
||||
reloadTreasuresConfig();
|
||||
}
|
||||
return treasuresConfig;
|
||||
}
|
||||
|
||||
public void saveTreasuresConfig() {
|
||||
if (treasuresConfig == null || treasuresConfigFile == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
treasuresConfig.save(treasuresConfigFile);
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + treasuresConfigFile, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,13 +25,15 @@ public class mcPermissions
|
||||
public boolean permission(Player player, String perm) {
|
||||
return player.hasPermission(perm);
|
||||
}
|
||||
|
||||
public boolean admin(Player player){
|
||||
return player.hasPermission("mcmmo.admin");
|
||||
}
|
||||
public boolean mcrefresh(Player player) {
|
||||
return player.hasPermission("mcmmo.tools.mcrefresh");
|
||||
}
|
||||
public boolean mcremove(Player player) {
|
||||
return player.hasPermission("mcmmo.tools.mcremove");
|
||||
}
|
||||
public boolean mmoedit(Player player) {
|
||||
return player.hasPermission("mcmmo.tools.mmoedit");
|
||||
}
|
||||
@@ -48,12 +50,11 @@ public class mcPermissions
|
||||
return player.hasPermission("mcmmo.item.chimaerawing");
|
||||
}
|
||||
public boolean miningAbility(Player player){
|
||||
return player.hasPermission("mcmmo.ability.mining");
|
||||
return player.hasPermission("mcmmo.ability.mining");
|
||||
}
|
||||
public boolean axesAbility(Player player){
|
||||
return player.hasPermission("mcmmo.ability.axes");
|
||||
}
|
||||
|
||||
public boolean swordsAbility(Player player){
|
||||
return player.hasPermission("mcmmo.ability.swords");
|
||||
}
|
||||
@@ -63,21 +64,12 @@ public class mcPermissions
|
||||
public boolean mcgod(Player player) {
|
||||
return player.hasPermission("mcmmo.tools.mcgod");
|
||||
}
|
||||
public boolean regeneration(Player player){
|
||||
return player.hasPermission("mcmmo.regeneration");
|
||||
}
|
||||
public boolean motd(Player player) {
|
||||
return player.hasPermission("mcmmo.motd");
|
||||
}
|
||||
public boolean mcAbility(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.ability");
|
||||
}
|
||||
public boolean mySpawn(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.myspawn");
|
||||
}
|
||||
public boolean setMySpawn(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.setmyspawn");
|
||||
}
|
||||
public boolean partyChat(Player player) {
|
||||
return player.hasPermission("mcmmo.chat.partychat");
|
||||
}
|
||||
@@ -87,8 +79,8 @@ public class mcPermissions
|
||||
public boolean partyTeleport(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.ptp");
|
||||
}
|
||||
public boolean whois(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.whois");
|
||||
public boolean inspect(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.inspect");
|
||||
}
|
||||
public boolean party(Player player) {
|
||||
return player.hasPermission("mcmmo.commands.party");
|
||||
@@ -102,22 +94,18 @@ public class mcPermissions
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
public boolean taming(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.taming");
|
||||
}
|
||||
public boolean mining(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.mining");
|
||||
}
|
||||
public boolean blastMining(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.blastmining");
|
||||
}
|
||||
public boolean fishing(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.fishing");
|
||||
}
|
||||
public boolean alchemy(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.alchemy");
|
||||
}
|
||||
public boolean enchanting(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.enchanting");
|
||||
}
|
||||
public boolean woodcutting(Player player) {
|
||||
return player.hasPermission("mcmmo.skills.woodcutting");
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.spout.util.ArrayListString;
|
||||
|
||||
|
||||
public class Party
|
||||
@@ -145,22 +144,6 @@ public class Party
|
||||
}
|
||||
return players;
|
||||
}
|
||||
public ArrayListString getPartyMembersByName(Player player)
|
||||
{
|
||||
ArrayListString players = new ArrayListString();
|
||||
|
||||
for(Player p : Bukkit.getServer().getOnlinePlayers())
|
||||
{
|
||||
if(p.isOnline())
|
||||
{
|
||||
if(inSameParty(player, p))
|
||||
{
|
||||
players.add(p.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
public void informPartyMembersOwnerChange(String newOwner) {
|
||||
Player newOwnerPlayer = plugin.getServer().getPlayer(newOwner);
|
||||
|
||||
@@ -16,30 +16,30 @@
|
||||
*/
|
||||
package com.gmail.nossr50.runnables;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import java.util.ArrayDeque;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
/*
|
||||
* This file was created for a breakage introduced in 1.1-R2
|
||||
* It should be removed afterwards if the breakage is removed.
|
||||
*/
|
||||
public class ChangeDataValueTimer implements Runnable {
|
||||
private mcMMO plugin;
|
||||
private ArrayDeque<Block> queue;
|
||||
|
||||
public ChangeDataValueTimer(mcMMO instance) {
|
||||
this.plugin = instance;
|
||||
public ChangeDataValueTimer(ArrayDeque<Block> queue) {
|
||||
this.queue = queue;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
int size = plugin.changeQueue.size();
|
||||
int size = queue.size();
|
||||
if(size == 0) return;
|
||||
if(size > 25) {
|
||||
size = (int) Math.floor(size / 10);
|
||||
}
|
||||
|
||||
for(int i = 0; i < size; i++) {
|
||||
Block change = plugin.changeQueue.poll();
|
||||
Block change = queue.poll();
|
||||
if(change == null) continue;
|
||||
change.setData((byte) 5);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.gmail.nossr50.runnables;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
|
||||
public class RemoveProfileFromMemoryTask implements Runnable {
|
||||
private Player player;
|
||||
|
||||
public RemoveProfileFromMemoryTask(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Users.removeUser(player);
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,10 @@ import org.bukkit.entity.*;
|
||||
import com.gmail.nossr50.Combat;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.skills.Skills;
|
||||
import com.gmail.nossr50.skills.Swords;
|
||||
|
||||
@@ -50,20 +53,43 @@ public class mcTimer implements Runnable
|
||||
/*
|
||||
* MONITOR SKILLS
|
||||
*/
|
||||
Skills.monitorSkills(player, PP, curTime);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.AXES);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.EXCAVATION);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.HERBALISM);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.MINING);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.SWORDS);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.UNARMED);
|
||||
Skills.monitorSkill(player, PP, curTime, SkillType.WOODCUTTING);
|
||||
|
||||
/*
|
||||
* COOLDOWN MONITORING
|
||||
*/
|
||||
Skills.watchCooldowns(player, PP, curTime);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.SKULL_SPLIITER);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.GIGA_DRILL_BREAKER);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.GREEN_TERRA);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.SUPER_BREAKER);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.SERRATED_STRIKES);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.BERSERK);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.TREE_FELLER);
|
||||
Skills.watchCooldown(player, PP, curTime, AbilityType.BLAST_MINING);
|
||||
|
||||
/*
|
||||
* PLAYER BLEED MONITORING
|
||||
*/
|
||||
if(thecount % 2 == 0 && PP.getBleedTicks() >= 1)
|
||||
{
|
||||
Combat.dealDamage(player, 2);
|
||||
//Never kill with Bleeding
|
||||
if(player.getHealth() - 2 < 0)
|
||||
{
|
||||
if(player.getHealth() - 1 > 0)
|
||||
Combat.dealDamage(player, 1);
|
||||
} else
|
||||
Combat.dealDamage(player, 2);
|
||||
|
||||
PP.decreaseBleedTicks();
|
||||
|
||||
if(PP.getBleedTicks() == 0)
|
||||
player.sendMessage(mcLocale.getString("Swords.StoppedBleeding"));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
@@ -25,51 +24,52 @@ import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
|
||||
public class Acrobatics {
|
||||
public static void acrobaticsCheck(Player player, EntityDamageEvent event)
|
||||
{
|
||||
if(player != null && mcPermissions.getInstance().acrobatics(player))
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int acrovar = PP.getSkillLevel(SkillType.ACROBATICS);
|
||||
|
||||
if(player.isSneaking())
|
||||
acrovar = acrovar * 2;
|
||||
|
||||
if(Math.random() * 1000 <= acrovar && !event.isCancelled())
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int acrovar = PP.getSkillLevel(SkillType.ACROBATICS);
|
||||
|
||||
if(player.isSneaking())
|
||||
acrovar = acrovar * 2;
|
||||
|
||||
if(Math.random() * 1000 <= acrovar)
|
||||
{
|
||||
int threshold = 7;
|
||||
|
||||
if(player.isSneaking())
|
||||
threshold = 14;
|
||||
|
||||
int newDamage = event.getDamage() - threshold;
|
||||
|
||||
if(newDamage < 0)
|
||||
newDamage = 0;
|
||||
|
||||
/*
|
||||
* Check for death
|
||||
*/
|
||||
if(player.getHealth() - newDamage >= 1)
|
||||
{
|
||||
int threshold = 7;
|
||||
if(player.isSneaking())
|
||||
threshold = 14;
|
||||
|
||||
int newDamage = event.getDamage() - threshold;
|
||||
if(newDamage < 0)
|
||||
newDamage = 0;
|
||||
/*
|
||||
* Check for death
|
||||
*/
|
||||
if(player.getHealth() - newDamage >= 1){
|
||||
if(!event.isCancelled())
|
||||
PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 8)*10, player);
|
||||
Skills.XpCheckSkill(SkillType.ACROBATICS, player);
|
||||
event.setDamage(newDamage);
|
||||
if(event.getDamage() <= 0)
|
||||
event.setCancelled(true);
|
||||
if(player.isSneaking()){
|
||||
player.sendMessage(ChatColor.GREEN+"**GRACEFUL ROLL**");
|
||||
} else {
|
||||
player.sendMessage("**ROLL**");
|
||||
}
|
||||
}
|
||||
} else if (!event.isCancelled()){
|
||||
if(player.getHealth() - event.getDamage() >= 1){
|
||||
PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, player);
|
||||
Skills.XpCheckSkill(SkillType.ACROBATICS, player);
|
||||
PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 8)*10, player);
|
||||
Skills.XpCheckSkill(SkillType.ACROBATICS, player);
|
||||
event.setDamage(newDamage);
|
||||
if(event.getDamage() <= 0)
|
||||
event.setCancelled(true);
|
||||
if(player.isSneaking()){
|
||||
player.sendMessage(mcLocale.getString("Acrobatics.GracefulRoll"));
|
||||
} else {
|
||||
player.sendMessage(mcLocale.getString("Acrobatics.Roll"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(player.getHealth() - event.getDamage() >= 1)
|
||||
{
|
||||
PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, player);
|
||||
Skills.XpCheckSkill(SkillType.ACROBATICS, player);
|
||||
}
|
||||
}
|
||||
public static void dodgeChecks(EntityDamageByEntityEvent event){
|
||||
Player defender = (Player) event.getEntity();
|
||||
@@ -78,7 +78,7 @@ public class Acrobatics {
|
||||
if(mcPermissions.getInstance().acrobatics(defender)){
|
||||
if(PPd.getSkillLevel(SkillType.ACROBATICS) <= 800){
|
||||
if(Math.random() * 4000 <= PPd.getSkillLevel(SkillType.ACROBATICS)){
|
||||
defender.sendMessage(ChatColor.GREEN+"**DODGE**");
|
||||
defender.sendMessage(mcLocale.getString("Acrobatics.Dodge"));
|
||||
if(System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1){
|
||||
PPd.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*1, defender);
|
||||
Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
|
||||
@@ -89,7 +89,7 @@ public class Acrobatics {
|
||||
event.setDamage(1);
|
||||
}
|
||||
} else if(Math.random() * 4000 <= 800) {
|
||||
defender.sendMessage(ChatColor.GREEN+"**DODGE**");
|
||||
defender.sendMessage(mcLocale.getString("Acrobatics.Dodge"));
|
||||
if(System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1){
|
||||
PPd.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, defender);
|
||||
Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
public class Alchemy {
|
||||
|
||||
}
|
||||
@@ -19,8 +19,10 @@ package com.gmail.nossr50.skills;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
@@ -29,34 +31,16 @@ import com.gmail.nossr50.party.Party;
|
||||
|
||||
public class Archery
|
||||
{
|
||||
public static void trackArrows(mcMMO pluginx, Entity x, EntityDamageByEntityEvent event, Player attacker)
|
||||
public static void trackArrows(mcMMO pluginx, Entity x, PlayerProfile PPa)
|
||||
{
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
if(!pluginx.misc.arrowTracker.containsKey(x) && event.getDamage() > 0)
|
||||
{
|
||||
int skillLevel = PPa.getSkillLevel(SkillType.ARCHERY);
|
||||
if(!pluginx.misc.arrowTracker.containsKey(x))
|
||||
pluginx.misc.arrowTracker.put(x, 0);
|
||||
if(attacker != null)
|
||||
{
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) > 1000 || (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.ARCHERY)))
|
||||
{
|
||||
pluginx.misc.arrowTracker.put(x, 1);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
if(event.getDamage() > 0)
|
||||
{
|
||||
if(attacker != null)
|
||||
{
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) > 1000 || (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.ARCHERY)))
|
||||
{
|
||||
pluginx.misc.arrowTracker.put(x, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel))
|
||||
pluginx.misc.arrowTracker.put(x, 1);
|
||||
}
|
||||
public static void ignitionCheck(Entity x, EntityDamageByEntityEvent event, Player attacker)
|
||||
|
||||
public static void ignitionCheck(Entity x, Player attacker)
|
||||
{
|
||||
//Check to see if PVP for this world is disabled before executing
|
||||
if(!x.getWorld().getPVP())
|
||||
@@ -65,55 +49,68 @@ public class Archery
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
if(Math.random() * 100 >= 75)
|
||||
{
|
||||
int ignition = 20;
|
||||
ignition += (PPa.getSkillLevel(SkillType.ARCHERY)/200)*20;
|
||||
|
||||
int ignition = 20;
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) >= 200)
|
||||
ignition+=20;
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) >= 400)
|
||||
ignition+=20;
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) >= 600)
|
||||
ignition+=20;
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) >= 800)
|
||||
ignition+=20;
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000)
|
||||
ignition+=20;
|
||||
if(ignition > 120)
|
||||
ignition = 120;
|
||||
|
||||
if(x instanceof Player)
|
||||
{
|
||||
Player Defender = (Player)x;
|
||||
if(!Party.getInstance().inSameParty(attacker, Defender))
|
||||
Player defender = (Player)x;
|
||||
if(!Party.getInstance().inSameParty(attacker, defender))
|
||||
{
|
||||
event.getEntity().setFireTicks(ignition);
|
||||
defender.setFireTicks(defender.getFireTicks() + ignition);
|
||||
attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
|
||||
Defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); //$NON-NLS-1$
|
||||
defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); //$NON-NLS-1$
|
||||
}
|
||||
} else {
|
||||
event.getEntity().setFireTicks(ignition);
|
||||
attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
|
||||
}
|
||||
else
|
||||
{
|
||||
x.setFireTicks(x.getFireTicks() + ignition);
|
||||
attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void dazeCheck(Player defender, Player attacker)
|
||||
{
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY);
|
||||
|
||||
Location loc = defender.getLocation();
|
||||
if(Math.random() * 10 > 5)
|
||||
{
|
||||
loc.setPitch(90);
|
||||
} else {
|
||||
loc.setPitch(90);
|
||||
else
|
||||
loc.setPitch(-90);
|
||||
}
|
||||
if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000){
|
||||
if(Math.random() * 1000 <= 500){
|
||||
|
||||
if(skillLevel >= 1000)
|
||||
{
|
||||
if(Math.random() * 1000 <= 500)
|
||||
{
|
||||
defender.teleport(loc);
|
||||
defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
|
||||
attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
} else if(Math.random() * 2000 <= PPa.getSkillLevel(SkillType.ARCHERY)){
|
||||
}
|
||||
else if(Math.random() * 2000 <= skillLevel)
|
||||
{
|
||||
defender.teleport(loc);
|
||||
defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
|
||||
attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
}
|
||||
|
||||
public static void arrowRetrievalCheck(Entity entity, mcMMO plugin)
|
||||
{
|
||||
if(plugin.misc.arrowTracker.containsKey(entity))
|
||||
{
|
||||
Integer x = 0;
|
||||
while(x < plugin.misc.arrowTracker.get(entity))
|
||||
{
|
||||
m.mcDropItem(entity.getLocation(), new ItemStack(262, 1));
|
||||
x++;
|
||||
}
|
||||
}
|
||||
plugin.misc.arrowTracker.remove(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,106 +16,122 @@
|
||||
*/
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.Combat;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
|
||||
public class Axes {
|
||||
public static void skullSplitterCheck(Player player){
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(m.isAxes(player.getItemInHand()) && mcPermissions.getInstance().axesAbility(player)){
|
||||
/*
|
||||
* CHECK FOR AXE PREP MODE
|
||||
*/
|
||||
if(PP.getAxePreparationMode())
|
||||
{
|
||||
PP.setAxePreparationMode(false);
|
||||
}
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.AXES);
|
||||
while(x >= 50){
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getSkullSplitterMode() && Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.SkullSplitterOn"));
|
||||
for(Player y : player.getWorld().getPlayers()){
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.SkullSplitterPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.SKULL_SPLIITER, System.currentTimeMillis()+(ticks*1000));
|
||||
PP.setSkullSplitterMode(true);
|
||||
}
|
||||
if(!PP.getSkullSplitterMode() && !Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)){
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired")
|
||||
+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)+"s)");
|
||||
}
|
||||
}
|
||||
public static void axesBonus(Player attacker, EntityDamageByEntityEvent event)
|
||||
{
|
||||
int bonus = 0;
|
||||
|
||||
//Add 1 DMG for every 50 skill levels
|
||||
bonus += Users.getProfile(attacker).getSkillLevel(SkillType.AXES)/50;
|
||||
|
||||
if(bonus > 4)
|
||||
bonus = 4;
|
||||
|
||||
event.setDamage(event.getDamage() + bonus);
|
||||
}
|
||||
|
||||
public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
|
||||
{
|
||||
Entity x = event.getEntity();
|
||||
|
||||
if(x instanceof Wolf){
|
||||
Wolf wolf = (Wolf)x;
|
||||
if(Taming.getOwner(wolf, pluginx) != null)
|
||||
if(wolf.getOwner() instanceof Player)
|
||||
{
|
||||
if(Taming.getOwner(wolf, pluginx) == attacker)
|
||||
Player owner = (Player) wolf.getOwner();
|
||||
if(owner == attacker)
|
||||
return;
|
||||
if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
|
||||
if(Party.getInstance().inSameParty(attacker, owner))
|
||||
return;
|
||||
}
|
||||
}
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
|
||||
if(PPa.getSkillLevel(SkillType.AXES) >= 750){
|
||||
if(Math.random() * 1000 <= 750 && !x.isDead()){
|
||||
if(Math.random() * 2000 <= 750 && !x.isDead()){
|
||||
if(x instanceof Player){
|
||||
int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
|
||||
event.setDamage(damage);
|
||||
Player player = (Player)x;
|
||||
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
|
||||
player.sendMessage(mcLocale.getString("Axes.HitCritically"));
|
||||
}
|
||||
else {
|
||||
int damage = event.getDamage() * 2;
|
||||
event.setDamage(damage);
|
||||
}
|
||||
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
|
||||
attacker.sendMessage(mcLocale.getString("Axes.CriticalHit"));
|
||||
}
|
||||
} else if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.AXES) && !x.isDead()){
|
||||
} else if(Math.random() * 2000 <= PPa.getSkillLevel(SkillType.AXES) && !x.isDead()){
|
||||
if(x instanceof Player){
|
||||
int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
|
||||
event.setDamage(damage);
|
||||
Player player = (Player)x;
|
||||
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
|
||||
player.sendMessage(mcLocale.getString("Axes.HitCritically"));
|
||||
}
|
||||
else {
|
||||
int damage = event.getDamage() * 2;
|
||||
event.setDamage(damage);
|
||||
}
|
||||
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
|
||||
attacker.sendMessage(mcLocale.getString("Axes.CriticalHit"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void impact(Player attacker, LivingEntity target, EntityDamageByEntityEvent event)
|
||||
{
|
||||
//TODO: Finish this skill, the idea is you will greatly damage an opponents armor and when they are armor less you have a proc that will stun them and deal additional damage.
|
||||
if(target instanceof Player)
|
||||
{
|
||||
Player targetPlayer = (Player) target;
|
||||
int emptySlots = 0;
|
||||
short durDmg = 5; //Start with 5 durability dmg
|
||||
|
||||
durDmg+=Users.getProfile(attacker).getSkillLevel(SkillType.AXES)/30; //Every 30 Skill Levels you gain 1 durability dmg
|
||||
|
||||
for(ItemStack x : targetPlayer.getInventory().getArmorContents())
|
||||
{
|
||||
if(x.getType() == Material.AIR)
|
||||
{
|
||||
emptySlots++;
|
||||
} else {
|
||||
x.setDurability((short) (x.getDurability()+durDmg)); //Damage armor piece
|
||||
}
|
||||
}
|
||||
|
||||
if(emptySlots == 4)
|
||||
applyImpact(attacker, target, event);
|
||||
}
|
||||
else
|
||||
//Since mobs are technically unarmored this will always trigger
|
||||
applyImpact(attacker, target, event);
|
||||
}
|
||||
|
||||
public static void applyImpact(Player attacker, LivingEntity target, EntityDamageByEntityEvent event)
|
||||
{
|
||||
if(Math.random() * 100 > 75)
|
||||
{
|
||||
event.setDamage(event.getDamage()+2);
|
||||
target.setVelocity(attacker.getLocation().getDirection().normalize().multiply(1.5D));
|
||||
attacker.sendMessage(mcLocale.getString("Axes.GreaterImpactOnEnemy"));
|
||||
}
|
||||
}
|
||||
|
||||
public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
|
||||
{
|
||||
int targets = 0;
|
||||
@@ -137,10 +153,14 @@ public class Axes {
|
||||
if(derp instanceof Wolf)
|
||||
{
|
||||
Wolf hurrDurr = (Wolf)derp;
|
||||
if(Taming.getOwner(hurrDurr, pluginx) == attacker)
|
||||
continue;
|
||||
if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
|
||||
continue;
|
||||
if(hurrDurr.getOwner() instanceof Player)
|
||||
{
|
||||
Player owner = (Player) hurrDurr.getOwner();
|
||||
if(owner == attacker)
|
||||
return;
|
||||
if(Party.getInstance().inSameParty(attacker, owner))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//Damage nearby LivingEntities
|
||||
@@ -164,17 +184,16 @@ public class Axes {
|
||||
|
||||
if(targets >= 1 && derp.getWorld().getPVP())
|
||||
{
|
||||
Combat.dealDamage(target, dmgAmount);
|
||||
target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
|
||||
Combat.dealDamage(target, dmgAmount, attacker);
|
||||
target.sendMessage(mcLocale.getString("Axes.HitByCleave"));
|
||||
targets--;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
LivingEntity target = (LivingEntity)derp;
|
||||
Combat.dealDamage(target, dmgAmount);
|
||||
Combat.dealDamage(target, dmgAmount, attacker);
|
||||
targets--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,16 +21,17 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
|
||||
@@ -39,111 +40,111 @@ public class BlastMining{
|
||||
public static void explosionBlockDrops(Block block, Location loc)
|
||||
{
|
||||
int id = block.getTypeId();
|
||||
Material mat = Material.getMaterial(id);
|
||||
byte damage = 0;
|
||||
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
|
||||
if(id != 89 && id != 73 && id != 74 && id != 56 && id != 21 && id != 1 && id != 16 && id != 112 && id != 121 && id != 48)
|
||||
{
|
||||
m.mcDropItem(loc, item);
|
||||
return;
|
||||
}
|
||||
ItemStack item = new ItemStack(id, 1);
|
||||
|
||||
switch (id)
|
||||
{
|
||||
switch (id){
|
||||
//GLOWSTONE
|
||||
case 89:
|
||||
mat = Material.getMaterial(348);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(348, 1);
|
||||
m.mcDropItems(loc, item, 2);
|
||||
m.mcRandomDropItems(loc, item, 50, 2);
|
||||
break;
|
||||
//REDSTONE
|
||||
case 73:
|
||||
mat = Material.getMaterial(331);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(331, 1);
|
||||
m.mcDropItems(loc, item, 4);
|
||||
m.mcRandomDropItem(loc, item, 50);
|
||||
break;
|
||||
case 74:
|
||||
mat = Material.getMaterial(331);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(331, 1);
|
||||
m.mcDropItems(loc, item, 4);
|
||||
m.mcRandomDropItem(loc, item, 50);
|
||||
break;
|
||||
//LAPIS
|
||||
case 21:
|
||||
mat = Material.getMaterial(351);
|
||||
item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(351, 1, (byte)0,(byte)0x4);
|
||||
m.mcDropItems(loc, item, 4);
|
||||
m.mcRandomDropItems(loc, item, 50, 4);
|
||||
break;
|
||||
//DIAMOND
|
||||
case 56:
|
||||
mat = Material.getMaterial(264);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
item = new ItemStack(264, 1);
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
//STONE
|
||||
case 1:
|
||||
mat = Material.getMaterial(4);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
item = new ItemStack(4, 1);
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
//COAL
|
||||
case 16:
|
||||
mat = Material.getMaterial(263);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
item = new ItemStack(263, 1);
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
default:
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<Block> explosionYields(List<Block> ores, List<Block> debris, float yield, float oreBonus, float debrisReduction, Location location, int extraDrops)
|
||||
{
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
List<Block> blocksDropped = new ArrayList<Block>();
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if((float)Math.random() < (yield + oreBonus))
|
||||
{
|
||||
blocksDropped.add(temp);
|
||||
explosionBlockDrops(temp, location);
|
||||
if(extraDrops == 2)
|
||||
blocksDropped.add(temp);
|
||||
explosionBlockDrops(temp, location);
|
||||
if(extraDrops == 3)
|
||||
blocksDropped.add(temp);
|
||||
explosionBlockDrops(temp, location);
|
||||
}
|
||||
}
|
||||
|
||||
if(yield - debrisReduction != 0)
|
||||
{
|
||||
Iterator<Block> iterator3 = debris.iterator();
|
||||
while(iterator3.hasNext())
|
||||
{
|
||||
Block temp = iterator3.next();
|
||||
if((float)Math.random() < (yield - debrisReduction))
|
||||
explosionBlockDrops(temp, location);
|
||||
}
|
||||
}
|
||||
return blocksDropped;
|
||||
}
|
||||
|
||||
/*
|
||||
* Process the drops from the explosion
|
||||
*/
|
||||
public static void dropProcessing(int skillLevel, EntityExplodeEvent event, mcMMO plugin)
|
||||
public static void dropProcessing(Player player, EntityExplodeEvent event, mcMMO plugin)
|
||||
{
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.MINING);
|
||||
float yield = event.getYield();
|
||||
Location location = event.getLocation();
|
||||
List<Block> blocks = event.blockList();
|
||||
Iterator<Block> iterator = blocks.iterator();
|
||||
|
||||
List<Block> ores = new ArrayList<Block>();
|
||||
List<Block> debris = new ArrayList<Block>();
|
||||
|
||||
List<Block> xp = new ArrayList<Block>();
|
||||
|
||||
while(iterator.hasNext())
|
||||
{
|
||||
Block temp = iterator.next();
|
||||
int id = temp.getTypeId();
|
||||
if(id == 14 || id == 15 || id == 16 || id == 21 || id == 56 || id == 73 || id == 74)
|
||||
if(temp.getData() != 5 && !plugin.misc.blockWatchList.contains(temp))
|
||||
{
|
||||
ores.add(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
debris.add(temp);
|
||||
if(m.isOre(temp))
|
||||
ores.add(temp);
|
||||
else
|
||||
debris.add(temp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,188 +152,42 @@ public class BlastMining{
|
||||
if(skillLevel < 125)
|
||||
return;
|
||||
|
||||
//+5% ores
|
||||
event.setYield(0);
|
||||
//+35% ores, -10% debris
|
||||
if(skillLevel >= 125 && skillLevel < 250)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
Iterator<Block> iterator3 = debris.iterator();
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() < (yield + .05))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
while(iterator3.hasNext())
|
||||
{
|
||||
Block temp = iterator3.next();
|
||||
if(Math.random() < yield)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
xp = explosionYields(ores, debris, yield, .35f, .10f, location, 1);
|
||||
|
||||
//+10% ores
|
||||
//+40% ores, -20% debris
|
||||
if(skillLevel >= 250 && skillLevel < 375)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
Iterator<Block> iterator3 = debris.iterator();
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() < (yield + .10))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
while(iterator3.hasNext())
|
||||
{
|
||||
Block temp = iterator3.next();
|
||||
if(Math.random() < yield)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
xp = explosionYields(ores, debris, yield, .40f, .20f, location, 1);
|
||||
|
||||
//No debris, +15% ores
|
||||
//No debris, +45% ores
|
||||
if(skillLevel >= 375 && skillLevel < 500)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() < (yield + .15))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
xp = explosionYields(ores, debris, yield, .45f, .30f, location, 1);
|
||||
|
||||
//No debris, +20% ores
|
||||
//No debris, +50% ores
|
||||
if(skillLevel >= 500 && skillLevel < 625)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() < (yield + .20))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
xp = explosionYields(ores, debris, yield, .50f, .30f, location, 1);
|
||||
|
||||
//Double Drops, No Debris, +25% ores
|
||||
//Double Drops, No Debris, +55% ores
|
||||
if(skillLevel >= 625 && skillLevel < 750)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() < (yield + .25))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
if(Math.random() * 1000 <= skillLevel)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
xp = explosionYields(ores, debris, yield, .55f, .30f, location, 2);
|
||||
|
||||
//Double Drops, No Debris, +30% ores
|
||||
//Double Drops, No Debris, +60% ores
|
||||
if(skillLevel >= 750 && skillLevel < 875)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() < (yield + .30))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
if(Math.random() * 1000 <= skillLevel)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
xp = explosionYields(ores, debris, yield, .60f, .30f, location, 2);
|
||||
|
||||
//Triple Drops, No debris, +35% ores
|
||||
if(skillLevel >= 875 && skillLevel < 1000)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
//Triple Drops, No debris, +65% ores
|
||||
if(skillLevel >= 875 && skillLevel < 1000)
|
||||
xp = explosionYields(ores, debris, yield, .65f, .30f, location, 3);
|
||||
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() * 100 < (yield + .35))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
if(Math.random() * 1000 <= skillLevel || skillLevel > 1000)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
if(Math.random() * 1000 <= skillLevel || skillLevel > 1000)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Triple Drops, No debris, +40% ores
|
||||
//Triple Drops, No debris, +70% ores
|
||||
if(skillLevel >= 1000)
|
||||
xp = explosionYields(ores, debris, yield, .70f, .30f, location, 3);
|
||||
|
||||
for(Block block : xp)
|
||||
{
|
||||
event.setYield(0);
|
||||
Iterator<Block> iterator2 = ores.iterator();
|
||||
|
||||
while(iterator2.hasNext())
|
||||
{
|
||||
Block temp = iterator2.next();
|
||||
if(Math.random() * 100 < (yield + .40))
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
if(Math.random() * 1000 <= skillLevel || skillLevel > 1000)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
if(Math.random() * 1000 <= skillLevel || skillLevel > 1000)
|
||||
{
|
||||
if(temp.getData() != 5 && plugin.misc.blockWatchList.contains(temp));
|
||||
explosionBlockDrops(temp, event.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
blastMiningXP(player, block, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,8 +199,9 @@ public class BlastMining{
|
||||
* Increases radius of explosion by 3 at 750.
|
||||
* Increases radius of explosion by 4 at 1000.
|
||||
*/
|
||||
public static void biggerBombs(int skillLevel, ExplosionPrimeEvent event)
|
||||
public static void biggerBombs(Player player, ExplosionPrimeEvent event)
|
||||
{
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.MINING);
|
||||
float radius = event.getRadius();
|
||||
if(skillLevel < 250)
|
||||
return;
|
||||
@@ -365,21 +221,61 @@ public class BlastMining{
|
||||
* Demolitions Expertise (Unlocked at Mining 500)
|
||||
*
|
||||
* Reduces explosion damage to 1/4 of normal at 500.
|
||||
* Reduces explosion damage to 1/2 of normal at 1000.
|
||||
* Reduces explosion damage to 1/2 of normal at 750.
|
||||
* Reduces explosion damage to 0 at 1000.
|
||||
*/
|
||||
public static void demolitionsExpertise(Player player, EntityDamageEvent event)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int skill = PP.getSkillLevel(SkillType.MINING);
|
||||
int skill = Users.getProfile(player).getSkillLevel(SkillType.MINING);
|
||||
int damage = event.getDamage();
|
||||
if(skill < 500)
|
||||
return;
|
||||
if(skill >= 500 && skill < 1000)
|
||||
if(skill >= 500 && skill < 750)
|
||||
damage = damage/4;
|
||||
if(skill >= 1000)
|
||||
if(skill >= 750 && skill < 1000)
|
||||
damage = damage/2;
|
||||
if(skill >= 1000)
|
||||
damage = 0;
|
||||
|
||||
event.setDamage(damage);
|
||||
}
|
||||
|
||||
}
|
||||
public static void blastMiningXP(Player player, Block block, mcMMO plugin)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(plugin.misc.blockWatchList.contains(block) || block.getData() == (byte) 5)
|
||||
return;
|
||||
int xp = 0;
|
||||
|
||||
switch (block.getType()) {
|
||||
//COAL
|
||||
case COAL_ORE:
|
||||
xp += LoadProperties.mcoal;
|
||||
break;
|
||||
//GOLD
|
||||
case GOLD_ORE:
|
||||
xp += LoadProperties.mgold;
|
||||
break;
|
||||
//DIAMOND
|
||||
case DIAMOND_ORE:
|
||||
xp += LoadProperties.mdiamond;
|
||||
break;
|
||||
//IRON
|
||||
case IRON_ORE:
|
||||
xp += LoadProperties.miron;
|
||||
break;
|
||||
//REDSTONE
|
||||
case REDSTONE_ORE:
|
||||
xp += LoadProperties.mredstone;
|
||||
break;
|
||||
//LAPIS
|
||||
case LAPIS_ORE:
|
||||
xp += LoadProperties.mlapis;
|
||||
break;
|
||||
}
|
||||
|
||||
PP.addXP(SkillType.MINING, xp, player);
|
||||
Skills.XpCheckSkill(SkillType.MINING, player);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
public class Enchanting {
|
||||
|
||||
}
|
||||
@@ -27,225 +27,137 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.spout.SpoutStuff;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.config.LoadTreasures;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||
|
||||
import org.getspout.spoutapi.sound.SoundEffect;
|
||||
|
||||
public class Excavation
|
||||
{
|
||||
public static void gigaDrillBreakerActivationCheck(Player player, Block block)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(m.isShovel(player.getItemInHand()))
|
||||
{
|
||||
if(block != null)
|
||||
{
|
||||
if(!m.abilityBlockCheck(block))
|
||||
return;
|
||||
}
|
||||
if(PP.getShovelPreparationMode())
|
||||
{
|
||||
PP.setShovelPreparationMode(false);
|
||||
}
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.EXCAVATION);
|
||||
while(x >= 50)
|
||||
{
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getGigaDrillBreakerMode() && PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER) < System.currentTimeMillis())
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOn"));
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.GIGA_DRILL_BREAKER, System.currentTimeMillis()+(ticks*1000));
|
||||
PP.setGigaDrillBreakerMode(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
public static boolean canBeGigaDrillBroken(Block block)
|
||||
{
|
||||
Material t = block.getType();
|
||||
return t == Material.DIRT || t == Material.GRASS || t == Material.SAND || t == Material.GRAVEL || t == Material.CLAY || t == Material.MYCEL || t == Material.SOUL_SAND;
|
||||
switch(block.getType()){
|
||||
case CLAY:
|
||||
case DIRT:
|
||||
case GRASS:
|
||||
case GRAVEL:
|
||||
case MYCEL:
|
||||
case SAND:
|
||||
case SOUL_SAND:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static void excavationProcCheck(Material type, Location loc, Player player)
|
||||
|
||||
public static void excavationProcCheck(Block block, Player player)
|
||||
{
|
||||
if(LoadProperties.excavationRequiresShovel && !m.isShovel(player.getItemInHand()))
|
||||
return;
|
||||
Material type = block.getType();
|
||||
Location loc = block.getLocation();
|
||||
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int skillLevel = PP.getSkillLevel(SkillType.EXCAVATION);
|
||||
ArrayList<ItemStack> is = new ArrayList<ItemStack>();
|
||||
int xp = 0;
|
||||
int xp = LoadProperties.mbase;
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case GRASS:
|
||||
if(skillLevel >= 250)
|
||||
case DIRT:
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromDirt)
|
||||
{
|
||||
//CHANCE TO GET EGGS
|
||||
if(LoadProperties.eggs && Math.random() * 100 > 99)
|
||||
{
|
||||
xp+= LoadProperties.meggs;
|
||||
is.add(new ItemStack(Material.EGG, 1, (byte)0, (byte)0));
|
||||
}
|
||||
//CHANCE TO GET APPLES
|
||||
if(LoadProperties.apples && Math.random() * 100 > 99)
|
||||
{
|
||||
xp+= LoadProperties.mapple;
|
||||
is.add(new ItemStack(Material.APPLE, 1, (byte)0, (byte)0));
|
||||
}
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GRASS:
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromGrass)
|
||||
{
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SAND:
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromSand)
|
||||
{
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GRAVEL:
|
||||
//CHANCE TO GET NETHERRACK
|
||||
if(LoadProperties.netherrack && skillLevel >= 850 && Math.random() * 200 > 199)
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromGravel)
|
||||
{
|
||||
xp+= LoadProperties.mnetherrack;
|
||||
is.add(new ItemStack(Material.NETHERRACK, 1, (byte)0, (byte)0));
|
||||
|
||||
}
|
||||
//CHANCE TO GET SULPHUR
|
||||
if(LoadProperties.sulphur && skillLevel >= 75 && Math.random() * 10 > 9)
|
||||
{
|
||||
xp+= LoadProperties.msulphur;
|
||||
is.add(new ItemStack(Material.SULPHUR, 1, (byte)0, (byte)0));
|
||||
}
|
||||
//CHANCE TO GET BONES
|
||||
if(LoadProperties.bones && skillLevel >= 175 && Math.random() * 10 > 9)
|
||||
{
|
||||
xp+= LoadProperties.mbones;
|
||||
is.add(new ItemStack(Material.BONE, 1, (byte)0, (byte)0));
|
||||
}
|
||||
break;
|
||||
case SAND:
|
||||
//CHANCE TO GET GLOWSTONE
|
||||
if(LoadProperties.glowstone && skillLevel >= 50 && Math.random() * 100 > 95)
|
||||
{
|
||||
xp+= LoadProperties.mglowstone2;
|
||||
is.add(new ItemStack(Material.GLOWSTONE_DUST, 1, (byte)0, (byte)0));
|
||||
|
||||
}
|
||||
//CHANCE TO GET SOUL SAND
|
||||
if(LoadProperties.slowsand && skillLevel >= 650 && Math.random() * 200 > 199)
|
||||
{
|
||||
xp+= LoadProperties.mslowsand;
|
||||
is.add(new ItemStack(Material.SOUL_SAND, 1, (byte)0, (byte)0));
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CLAY:
|
||||
//CHANCE TO GET SLIMEBALLS
|
||||
if(LoadProperties.slimeballs && skillLevel >= 50 && Math.random() * 20 > 19)
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromClay)
|
||||
{
|
||||
xp+= LoadProperties.mslimeballs;
|
||||
is.add(new ItemStack(Material.SLIME_BALL, 1, (byte)0, (byte)0));
|
||||
}
|
||||
//CHANCE TO GET STRING
|
||||
if(LoadProperties.string && skillLevel >= 250 && Math.random() * 20 > 19)
|
||||
{
|
||||
xp+= LoadProperties.mstring;
|
||||
is.add(new ItemStack(Material.STRING, 1, (byte)0, (byte)0));
|
||||
}
|
||||
if(skillLevel >= 500)
|
||||
{
|
||||
//CHANCE TO GET CLOCK
|
||||
if(LoadProperties.watch && Math.random() * 100 > 99)
|
||||
{
|
||||
xp+= LoadProperties.mwatch;
|
||||
is.add(new ItemStack(Material.WATCH, 1, (byte)0));
|
||||
|
||||
}
|
||||
//CHANCE TO GET BUCKET
|
||||
if(LoadProperties.bucket && Math.random() * 100 > 99)
|
||||
{
|
||||
xp+= LoadProperties.mbucket;
|
||||
is.add(new ItemStack(Material.BUCKET, 1, (byte)0, (byte)0));
|
||||
}
|
||||
}
|
||||
//CHANCE TO GET COBWEB
|
||||
if(LoadProperties.web && skillLevel >= 750 && Math.random() * 20 > 19)
|
||||
{
|
||||
xp+= LoadProperties.mweb;
|
||||
is.add(new ItemStack(Material.WEB, 1, (byte)0, (byte)0));
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//ALL MATERIALS
|
||||
if(type == Material.GRASS || type == Material.DIRT || type == Material.GRAVEL || type == Material.SAND || type == Material.CLAY || type == Material.MYCEL || type == Material.SOUL_SAND)
|
||||
{
|
||||
xp+= LoadProperties.mbase;
|
||||
//CHANCE TO GET CAKE
|
||||
if(LoadProperties.cake && skillLevel >= 750 && Math.random() * 2000 > 1999)
|
||||
{
|
||||
xp+= LoadProperties.mcake;
|
||||
is.add(new ItemStack(Material.CAKE, 1, (byte)0, (byte)0));
|
||||
}
|
||||
if(skillLevel >= 350)
|
||||
case MYCEL:
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromMycel)
|
||||
{
|
||||
//CHANCE TO GET DIAMOND
|
||||
if(LoadProperties.diamond && Math.random() * 750 > 749)
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
xp+= LoadProperties.mdiamond2;
|
||||
is.add(new ItemStack(Material.DIAMOND, 1, (byte)0, (byte)0));
|
||||
}
|
||||
//CHANCE TO GET GREEN MUSIC
|
||||
if(LoadProperties.music && Math.random() * 2000 > 1999)
|
||||
{
|
||||
xp+= LoadProperties.mmusic;
|
||||
is.add(new ItemStack(Material.GREEN_RECORD, 1, (byte)0, (byte)0));
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
}
|
||||
//CHANCE TO GET YELLOW MUSIC
|
||||
if(LoadProperties.music && skillLevel >= 250 && Math.random() * 2000 > 1999)
|
||||
{
|
||||
xp+= LoadProperties.mmusic;
|
||||
is.add(new ItemStack(Material.GOLD_RECORD, 1, (byte)0, (byte)0));
|
||||
}
|
||||
}
|
||||
|
||||
//GRASS OR DIRT OR MYCEL
|
||||
if(type == Material.DIRT || type == Material.GRASS || type == Material.MYCEL)
|
||||
{
|
||||
//CHANCE FOR COCOA BEANS
|
||||
if(LoadProperties.cocoabeans && skillLevel >= 50 && Math.random() * 75 > 74)
|
||||
break;
|
||||
case SOUL_SAND:
|
||||
for(ExcavationTreasure treasure : LoadTreasures.excavationFromSoulSand)
|
||||
{
|
||||
xp+= LoadProperties.mcocoa;
|
||||
is.add(new ItemStack(Material.getMaterial(351), 1, (byte)0, (byte)3));
|
||||
}
|
||||
//CHANCE FOR SHROOMS
|
||||
if(LoadProperties.mushrooms && skillLevel >= 500 && Math.random() * 200 > 199)
|
||||
{
|
||||
xp+= LoadProperties.mmushroom2;
|
||||
switch((int)(Math.random() * 2))
|
||||
if(skillLevel >= treasure.getDropLevel())
|
||||
{
|
||||
case 0:
|
||||
is.add(new ItemStack(Material.BROWN_MUSHROOM, 1, (byte)0, (byte)0));
|
||||
break;
|
||||
case 1:
|
||||
is.add(new ItemStack(Material.RED_MUSHROOM, 1, (byte)0, (byte)0));
|
||||
break;
|
||||
if(Math.random() * 100 > (100.00 - treasure.getDropChance()))
|
||||
{
|
||||
xp += treasure.getXp();
|
||||
is.add(treasure.getDrop());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//CHANCE TO GET GLOWSTONE
|
||||
if(LoadProperties.glowstone && skillLevel >= 25 && Math.random() * 100 > 95)
|
||||
{
|
||||
xp+= LoadProperties.mglowstone2;
|
||||
is.add(new ItemStack(Material.GLOWSTONE_DUST, 1, (byte)0, (byte)0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//Drop items
|
||||
@@ -265,16 +177,20 @@ public class Excavation
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!player.getItemInHand().containsEnchantment(Enchantment.DURABILITY))
|
||||
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
|
||||
{
|
||||
short durability = player.getItemInHand().getDurability();
|
||||
durability += LoadProperties.abilityDurabilityLoss;
|
||||
player.getItemInHand().setDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
if(block.getData() != (byte)5)
|
||||
{
|
||||
PlayerAnimationEvent armswing = new PlayerAnimationEvent(player);
|
||||
Bukkit.getPluginManager().callEvent(armswing);
|
||||
Excavation.excavationProcCheck(block.getType(), block.getLocation(), player);
|
||||
Excavation.excavationProcCheck(block.getType(), block.getLocation(), player);
|
||||
Excavation.excavationProcCheck(block.getType(), block.getLocation(), player);
|
||||
Excavation.excavationProcCheck(block, player);
|
||||
Excavation.excavationProcCheck(block, player);
|
||||
Excavation.excavationProcCheck(block, player);
|
||||
}
|
||||
|
||||
if(LoadProperties.spoutEnabled)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,63 +24,28 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
|
||||
public class Herbalism
|
||||
{
|
||||
|
||||
public static void greenTerraCheck(Player player, Block block)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(m.isHoe(player.getItemInHand()))
|
||||
{
|
||||
if(block != null)
|
||||
{
|
||||
if(!m.abilityBlockCheck(block))
|
||||
return;
|
||||
}
|
||||
if(PP.getHoePreparationMode())
|
||||
{
|
||||
PP.setHoePreparationMode(false);
|
||||
}
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.HERBALISM);
|
||||
while(x >= 50)
|
||||
{
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getGreenTerraMode() && Skills.cooldownOver(player, PP.getSkillDATS(AbilityType.GREEN_TERRA), LoadProperties.greenTerraCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.GreenTerraOn"));
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.GreenTerraPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.GREEN_TERRA, System.currentTimeMillis()+(ticks*1000));
|
||||
PP.setGreenTerraMode(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
public static void greenTerra(Player player, Block block){
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
boolean hasSeeds = inventory.contains(Material.SEEDS);
|
||||
if(block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT){
|
||||
if(!hasSeeds(player))
|
||||
if(!hasSeeds)
|
||||
player.sendMessage("You need more seeds to spread Green Terra");
|
||||
if(hasSeeds(player) && block.getType() != Material.WHEAT)
|
||||
if(hasSeeds && block.getType() != Material.WHEAT)
|
||||
{
|
||||
removeSeeds(player);
|
||||
inventory.removeItem(new ItemStack(Material.SEEDS, 1));
|
||||
player.updateInventory();
|
||||
if(LoadProperties.enableSmoothToMossy && block.getType() == Material.SMOOTH_BRICK)
|
||||
block.setData((byte)1);
|
||||
if(LoadProperties.enableDirtToGrass && block.getType() == Material.DIRT)
|
||||
@@ -92,37 +57,27 @@ public class Herbalism
|
||||
}
|
||||
|
||||
public static Boolean canBeGreenTerra(Block block){
|
||||
int t = block.getTypeId();
|
||||
return t == 103 || t == 4 || t == 3 || t == 59 || t == 81 || t == 83 || t == 91 || t == 86 || t == 39 || t == 46 || t == 37 || t == 38;
|
||||
}
|
||||
|
||||
public static boolean hasSeeds(Player player){
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory){
|
||||
if(x != null && x.getTypeId() == 295){
|
||||
return true;
|
||||
}
|
||||
switch(block.getType()){
|
||||
case BROWN_MUSHROOM:
|
||||
case CACTUS:
|
||||
case COBBLESTONE:
|
||||
case CROPS:
|
||||
case DIRT:
|
||||
case JACK_O_LANTERN:
|
||||
case MELON_BLOCK:
|
||||
case PUMPKIN:
|
||||
case RED_MUSHROOM:
|
||||
case RED_ROSE:
|
||||
case SMOOTH_BRICK:
|
||||
case SUGAR_CANE_BLOCK:
|
||||
case VINE:
|
||||
case WATER_LILY:
|
||||
case YELLOW_FLOWER:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void removeSeeds(Player player){
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory){
|
||||
if(x != null && x.getTypeId() == 295){
|
||||
if(x.getAmount() == 1){
|
||||
x.setTypeId(0);
|
||||
x.setAmount(0);
|
||||
player.getInventory().setContents(inventory);
|
||||
} else{
|
||||
x.setAmount(x.getAmount() - 1);
|
||||
player.getInventory().setContents(inventory);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void herbalismProcCheck(final Block block, Player player, BlockBreakEvent event, mcMMO plugin)
|
||||
{
|
||||
final PlayerProfile PP = Users.getProfile(player);
|
||||
@@ -131,6 +86,8 @@ public class Herbalism
|
||||
Location loc = block.getLocation();
|
||||
ItemStack is = null;
|
||||
Material mat = null;
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
boolean hasSeeds = inventory.contains(Material.SEEDS);
|
||||
|
||||
if(plugin.misc.blockWatchList.contains(block))
|
||||
{
|
||||
@@ -140,9 +97,9 @@ public class Herbalism
|
||||
//Wheat
|
||||
if(type == 59 && block.getData() == (byte) 0x7)
|
||||
{
|
||||
mat = Material.getMaterial(296);
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.WHEAT, 1);
|
||||
PP.addXP(SkillType.HERBALISM, LoadProperties.mwheat, player);
|
||||
|
||||
if(player != null)
|
||||
{
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
@@ -150,13 +107,12 @@ public class Herbalism
|
||||
}
|
||||
|
||||
//GREEN THUMB
|
||||
if(PP.getGreenTerraMode() || (herbLevel >= 1500 || (Math.random() * 1500 <= herbLevel)))
|
||||
if(hasSeeds && PP.getGreenTerraMode() || hasSeeds && (herbLevel >= 1500 || (Math.random() * 1500 <= herbLevel)))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
m.mcDropItem(loc, is);
|
||||
//DROP SOME SEEDS
|
||||
mat = Material.SEEDS;
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.SEEDS, 1);
|
||||
m.mcDropItem(loc, is);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
||||
@@ -178,27 +134,22 @@ public class Herbalism
|
||||
}
|
||||
}, 1);
|
||||
|
||||
inventory.removeItem(new ItemStack(Material.SEEDS, 1));
|
||||
player.updateInventory();
|
||||
}
|
||||
}
|
||||
|
||||
//Nether Wart
|
||||
if(type == 115 && block.getData() == (byte) 0x3)
|
||||
{
|
||||
mat = Material.getMaterial(372);
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.NETHER_STALK, 1);
|
||||
PP.addXP(SkillType.HERBALISM, LoadProperties.mnetherwart, player);
|
||||
if(player != null)
|
||||
{
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
{
|
||||
m.mcDropItem(loc, is);
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
m.mcDropItems(loc, is, 2);
|
||||
m.mcRandomDropItems(loc, is, 50, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -232,7 +183,7 @@ public class Herbalism
|
||||
{
|
||||
if(materialArray[x] == Material.CACTUS)
|
||||
{
|
||||
is = new ItemStack(Material.CACTUS, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.CACTUS, 1);
|
||||
if(byteArray[x] != (byte) 5)
|
||||
{
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
@@ -270,7 +221,7 @@ public class Herbalism
|
||||
{
|
||||
if(materialArray[x] == Material.SUGAR_CANE_BLOCK)
|
||||
{
|
||||
is = new ItemStack(Material.SUGAR_CANE, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.SUGAR_CANE, 1);
|
||||
//Check for being placed by the player
|
||||
if(byteArray[x] != (byte) 5)
|
||||
{
|
||||
@@ -289,7 +240,7 @@ public class Herbalism
|
||||
if((type == 91 || type == 86))
|
||||
{
|
||||
mat = Material.getMaterial(block.getTypeId());
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(mat, 1);
|
||||
if(player != null)
|
||||
{
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
@@ -302,23 +253,13 @@ public class Herbalism
|
||||
//Melon
|
||||
if(type == 103)
|
||||
{
|
||||
mat = Material.getMaterial(360);
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.MELON, 1);
|
||||
if(player != null)
|
||||
{
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
{
|
||||
m.mcDropItem(loc, is);
|
||||
m.mcDropItem(loc, is);
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, is);
|
||||
m.mcDropItems(loc, is, 3);
|
||||
m.mcRandomDropItems(loc, is, 50, 4);
|
||||
}
|
||||
}
|
||||
PP.addXP(SkillType.HERBALISM, LoadProperties.mmelon, player);
|
||||
@@ -327,7 +268,7 @@ public class Herbalism
|
||||
if(type == 39 || type == 40)
|
||||
{
|
||||
mat = Material.getMaterial(block.getTypeId());
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(mat, 1);
|
||||
if(player != null)
|
||||
{
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
@@ -340,7 +281,7 @@ public class Herbalism
|
||||
//Flower
|
||||
if(type == 37 || type == 38){
|
||||
mat = Material.getMaterial(block.getTypeId());
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(mat, 1);
|
||||
if(player != null){
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
m.mcDropItem(loc, is);
|
||||
@@ -350,8 +291,7 @@ public class Herbalism
|
||||
//Lily Pads
|
||||
if(type == 111)
|
||||
{
|
||||
mat = Material.getMaterial(block.getTypeId());
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.WATER_LILY, 1);
|
||||
if(player != null){
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
m.mcDropItem(loc, is);
|
||||
@@ -360,8 +300,7 @@ public class Herbalism
|
||||
}
|
||||
//Vines
|
||||
if(type == 106){
|
||||
mat = Material.getMaterial(block.getTypeId());
|
||||
is = new ItemStack(mat, 1, (byte)0, (byte)0);
|
||||
is = new ItemStack(Material.VINE, 1, (byte)0, (byte)0);
|
||||
if(player != null){
|
||||
if(herbLevel > 1000 || (Math.random() * 1000 <= herbLevel))
|
||||
m.mcDropItem(loc, is);
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -31,63 +30,18 @@ import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.spout.SpoutStuff;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
|
||||
public class Mining
|
||||
{
|
||||
public static void superBreakerCheck(Player player, Block block)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(m.isMiningPick(player.getItemInHand()))
|
||||
{
|
||||
if(block != null)
|
||||
{
|
||||
if(!m.abilityBlockCheck(block))
|
||||
return;
|
||||
}
|
||||
if(PP.getPickaxePreparationMode())
|
||||
{
|
||||
PP.setPickaxePreparationMode(false);
|
||||
}
|
||||
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.MINING);
|
||||
|
||||
while(x >= 50)
|
||||
{
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getSuperBreakerMode() && Skills.cooldownOver(player, PP.getSkillDATS(AbilityType.SUPER_BREAKER), LoadProperties.superBreakerCooldown)){
|
||||
player.sendMessage(mcLocale.getString("Skills.SuperBreakerOn"));
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.SuperBreakerPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.SUPER_BREAKER, System.currentTimeMillis()+(ticks*1000));
|
||||
PP.setSuperBreakerMode(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static void blockProcSimulate(Block block, Player player)
|
||||
{
|
||||
Location loc = block.getLocation();
|
||||
int id = block.getTypeId();
|
||||
Material mat = Material.getMaterial(id);
|
||||
byte damage = 0;
|
||||
ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
|
||||
if(id != 89 && id != 73 && id != 74 && id != 56 && id != 21 && id != 1 && id != 16 && id != 112 && id != 121 && id != 48) {
|
||||
m.mcDropItem(loc, item);
|
||||
return;
|
||||
}
|
||||
ItemStack item = new ItemStack(id, 1);
|
||||
|
||||
//Drop natural block with Silk Touch
|
||||
if(player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)){
|
||||
@@ -98,69 +52,43 @@ public class Mining
|
||||
switch (id){
|
||||
//GLOWSTONE
|
||||
case 89:
|
||||
mat = Material.getMaterial(348);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(348, 1);
|
||||
m.mcDropItems(loc, item, 2);
|
||||
m.mcRandomDropItems(loc, item, 50, 2);
|
||||
break;
|
||||
//REDSTONE
|
||||
case 73:
|
||||
mat = Material.getMaterial(331);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(331, 1);
|
||||
m.mcDropItems(loc, item, 4);
|
||||
m.mcRandomDropItem(loc, item, 50);
|
||||
break;
|
||||
case 74:
|
||||
mat = Material.getMaterial(331);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(331, 1);
|
||||
m.mcDropItems(loc, item, 4);
|
||||
m.mcRandomDropItem(loc, item, 50);
|
||||
break;
|
||||
//LAPIS
|
||||
case 21:
|
||||
mat = Material.getMaterial(351);
|
||||
item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
if(Math.random() * 10 > 5)
|
||||
m.mcDropItem(loc, item);
|
||||
item = new ItemStack(351, 1, (byte)0,(byte)0x4);
|
||||
m.mcDropItems(loc, item, 4);
|
||||
m.mcRandomDropItems(loc, item, 50, 4);
|
||||
break;
|
||||
//DIAMOND
|
||||
case 56:
|
||||
mat = Material.getMaterial(264);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
item = new ItemStack(264, 1);
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
//STONE
|
||||
case 1:
|
||||
mat = Material.getMaterial(4);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
item = new ItemStack(4, 1);
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
//COAL
|
||||
case 16:
|
||||
mat = Material.getMaterial(263);
|
||||
item = new ItemStack(mat, 1, (byte)0, damage);
|
||||
item = new ItemStack(263, 1);
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
default:
|
||||
m.mcDropItem(loc, item);
|
||||
break;
|
||||
}
|
||||
@@ -168,13 +96,10 @@ public class Mining
|
||||
|
||||
public static void blockProcCheck(Block block, Player player)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.MINING);
|
||||
|
||||
if(PP.getSkillLevel(SkillType.MINING) > 1000 || (Math.random() * 1000 <= PP.getSkillLevel(SkillType.MINING)))
|
||||
{
|
||||
if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel))
|
||||
blockProcSimulate(block, player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static void miningBlockCheck(Player player, Block block, mcMMO plugin)
|
||||
@@ -233,10 +158,6 @@ public class Mining
|
||||
case 21:
|
||||
xp += LoadProperties.mlapis;
|
||||
break;
|
||||
//NETHER BRICK
|
||||
case 112:
|
||||
xp += LoadProperties.mnetherbrick;
|
||||
break;
|
||||
//END STONE
|
||||
case 121:
|
||||
xp += LoadProperties.mendstone;
|
||||
@@ -245,10 +166,6 @@ public class Mining
|
||||
case 48:
|
||||
xp += LoadProperties.mmossstone;
|
||||
break;
|
||||
//STONE BRICK
|
||||
case 98:
|
||||
xp += LoadProperties.mstonebrick;
|
||||
break;
|
||||
}
|
||||
|
||||
if(canBeSuperBroken(block))
|
||||
@@ -262,8 +179,24 @@ public class Mining
|
||||
*/
|
||||
public static Boolean canBeSuperBroken(Block block)
|
||||
{
|
||||
int id = block.getTypeId();
|
||||
return id == 1 || id == 14 || id == 15 || id == 16 || id == 21 || id == 24 || id == 49 || id == 56 || id == 73 || id == 74 || id == 87 || id == 89 || id == 112 || id == 121 || id == 48 || id == 98;
|
||||
switch(block.getType()){
|
||||
case COAL_ORE:
|
||||
case DIAMOND_ORE:
|
||||
case ENDER_STONE:
|
||||
case GLOWING_REDSTONE_ORE:
|
||||
case GLOWSTONE:
|
||||
case GOLD_ORE:
|
||||
case IRON_ORE:
|
||||
case LAPIS_ORE:
|
||||
case MOSSY_COBBLESTONE:
|
||||
case NETHERRACK:
|
||||
case OBSIDIAN:
|
||||
case REDSTONE_ORE:
|
||||
case SANDSTONE:
|
||||
case STONE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void SuperBreakerBlockCheck(Player player, Block block, mcMMO plugin)
|
||||
@@ -272,7 +205,11 @@ public class Mining
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!player.getItemInHand().containsEnchantment(Enchantment.DURABILITY))
|
||||
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
|
||||
{
|
||||
short durability = player.getItemInHand().getDurability();
|
||||
durability += LoadProperties.abilityDurabilityLoss;
|
||||
player.getItemInHand().setDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
//Pre-processing
|
||||
@@ -368,14 +305,6 @@ public class Mining
|
||||
blockProcCheck(block, player);
|
||||
blockProcCheck(block, player);
|
||||
}
|
||||
//NETHER BRICK
|
||||
else if(id == 112 && block.getData() != (byte) 5)
|
||||
{
|
||||
Bukkit.getPluginManager().callEvent(armswing);
|
||||
xp += LoadProperties.mnetherbrick;
|
||||
blockProcCheck(block, player);
|
||||
blockProcCheck(block, player);
|
||||
}
|
||||
//END STONE
|
||||
else if(id == 121 && block.getData() != (byte) 5)
|
||||
{
|
||||
@@ -392,15 +321,6 @@ public class Mining
|
||||
blockProcCheck(block, player);
|
||||
blockProcCheck(block, player);
|
||||
}
|
||||
//STONE BRICK
|
||||
else if(id == 98 && !plugin.misc.blockWatchList.contains(block))
|
||||
{
|
||||
Bukkit.getPluginManager().callEvent(armswing);
|
||||
xp += LoadProperties.mstonebrick;
|
||||
blockProcCheck(block, player);
|
||||
blockProcCheck(block, player);
|
||||
}
|
||||
|
||||
if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
|
||||
PP.addXP(SkillType.MINING, xp, player);
|
||||
if(LoadProperties.spoutEnabled)
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
*/
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
@@ -34,9 +36,6 @@ import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class Repair {
|
||||
|
||||
/*
|
||||
* Repair requirements for each material
|
||||
*/
|
||||
private static int rGold = LoadProperties.rGold;
|
||||
private static String nGold = LoadProperties.nGold;
|
||||
private static int rStone = LoadProperties.rStone;
|
||||
@@ -51,13 +50,19 @@ public class Repair {
|
||||
private static String nString = LoadProperties.nString;
|
||||
private static int rLeather = LoadProperties.rLeather;
|
||||
private static String nLeather = LoadProperties.nLeather;
|
||||
|
||||
|
||||
private static int dLevel = LoadProperties.repairdiamondlevel;
|
||||
private static int iLevel = LoadProperties.repairIronLevel;
|
||||
private static int gLevel = LoadProperties.repairGoldLevel;
|
||||
private static int sLevel = LoadProperties.repairStoneLevel;
|
||||
private static boolean spout = LoadProperties.spoutEnabled;
|
||||
|
||||
public static void repairCheck(Player player, ItemStack is, Block block){
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
short durabilityBefore = player.getItemInHand().getDurability();
|
||||
short durabilityAfter = 0;
|
||||
short dif = 0;
|
||||
|
||||
short durabilityBefore = is.getDurability();
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
int skillLevel = PP.getSkillLevel(SkillType.REPAIR);
|
||||
|
||||
//Stuff for keeping enchants
|
||||
Enchantment[] enchants = new Enchantment[is.getEnchantments().size()];
|
||||
int[] enchantsLevel = new int[is.getEnchantments().size()];
|
||||
@@ -71,71 +76,39 @@ public class Repair {
|
||||
}
|
||||
|
||||
if(block != null && mcPermissions.getInstance().repair(player)){
|
||||
if(player.getItemInHand().getDurability() > 0 && player.getItemInHand().getAmount() < 2){
|
||||
if(durabilityBefore > 0 && is.getAmount() < 2){
|
||||
|
||||
/*
|
||||
* REPAIR ARMOR
|
||||
*/
|
||||
if(isArmor(is)){
|
||||
if(isArmor(is) && LoadProperties.repairArmor){
|
||||
|
||||
//DIAMOND ARMOR
|
||||
if(isDiamondArmor(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){
|
||||
removeItem(player, rDiamond);
|
||||
if(isDiamondArmor(is) && inventory.contains(rDiamond) && skillLevel >= dLevel){
|
||||
inventory.removeItem(new ItemStack(rDiamond, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
dif = (short) (dif * 6); //Boost XP
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 6, true);
|
||||
}
|
||||
|
||||
//IRON ARMOR
|
||||
else if (isIronArmor(is) && hasItem(player, rIron)){
|
||||
removeItem(player, rIron);
|
||||
else if (isIronArmor(is) && inventory.contains(rIron) && skillLevel >= iLevel){
|
||||
inventory.removeItem(new ItemStack(rIron, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
dif = (short) (dif * 2); //Boost XP
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 2, true);
|
||||
}
|
||||
|
||||
//GOLD ARMOR
|
||||
else if (isGoldArmor(is) && hasItem(player, rGold)){
|
||||
removeItem(player, rGold);
|
||||
else if (isGoldArmor(is) && inventory.contains(rGold) && skillLevel >= gLevel){
|
||||
inventory.removeItem(new ItemStack(rGold, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
dif = (short) (dif * 4); //Boost XP
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 4, true);
|
||||
}
|
||||
|
||||
//LEATHER ARMOR
|
||||
else if (isLeatherArmor(is) && hasItem(player, rLeather)){
|
||||
removeItem(player, rLeather);
|
||||
else if (isLeatherArmor(is) && inventory.contains(rLeather)){
|
||||
inventory.removeItem(new ItemStack(rLeather, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
dif = (short) (dif * 1); //Boost XP
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 1, true);
|
||||
}
|
||||
|
||||
//UNABLE TO REPAIR
|
||||
@@ -147,127 +120,48 @@ public class Repair {
|
||||
/*
|
||||
* REPAIR TOOLS
|
||||
*/
|
||||
if(isTools(is)){
|
||||
if(isTools(is) && LoadProperties.repairTools){
|
||||
|
||||
//STONE TOOLS
|
||||
if(isStoneTools(is) && hasItem(player, rStone)){
|
||||
removeItem(player, rStone);
|
||||
if(isStoneTools(is) && inventory.contains(rStone) && skillLevel >= sLevel){
|
||||
inventory.removeItem(new ItemStack(rStone, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
if(m.isShovel(is))
|
||||
dif = (short) (dif / 3);
|
||||
if(m.isSwords(is))
|
||||
dif = (short) (dif / 2);
|
||||
if(m.isHoe(is))
|
||||
dif = (short) (dif / 2);
|
||||
//STONE NERF
|
||||
dif = (short) (dif / 2);
|
||||
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 2, false);
|
||||
}
|
||||
|
||||
//WOOD TOOLS
|
||||
else if(isWoodTools(is) && hasItem(player,rWood)){
|
||||
removeItem(player,rWood);
|
||||
else if(isWoodTools(is) && inventory.contains(rWood)){
|
||||
inventory.removeItem(new ItemStack(rWood, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
if(m.isShovel(is))
|
||||
dif = (short) (dif / 3);
|
||||
if(m.isSwords(is))
|
||||
dif = (short) (dif / 2);
|
||||
if(m.isHoe(is))
|
||||
dif = (short) (dif / 2);
|
||||
//WOOD NERF
|
||||
dif = (short) (dif / 2);
|
||||
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 2, false);
|
||||
}
|
||||
|
||||
//IRON TOOLS
|
||||
else if(isIronTools(is) && hasItem(player, rIron)){
|
||||
removeItem(player, rIron);
|
||||
else if(isIronTools(is) && inventory.contains(rIron) && skillLevel >= iLevel){
|
||||
inventory.removeItem(new ItemStack(rIron, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
if(m.isShovel(is))
|
||||
dif = (short) (dif / 3);
|
||||
if(m.isSwords(is))
|
||||
dif = (short) (dif / 2);
|
||||
if(m.isHoe(is))
|
||||
dif = (short) (dif / 2);
|
||||
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
|
||||
xpHandler(player, PP, is, durabilityBefore, 1, true);
|
||||
}
|
||||
|
||||
//DIAMOND TOOLS
|
||||
else if (isDiamondTools(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){
|
||||
removeItem(player, rDiamond);
|
||||
else if (isDiamondTools(is) && inventory.contains(rDiamond) && skillLevel >= dLevel){
|
||||
inventory.removeItem(new ItemStack(rDiamond, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
if(m.isShovel(is))
|
||||
dif = (short) (dif / 3);
|
||||
if(m.isSwords(is))
|
||||
dif = (short) (dif / 2);
|
||||
if(m.isHoe(is))
|
||||
dif = (short) (dif / 2);
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
|
||||
xpHandler(player, PP, is, durabilityBefore, 1, true);
|
||||
}
|
||||
|
||||
//GOLD TOOLS
|
||||
else if(isGoldTools(is) && hasItem(player, rGold)){
|
||||
removeItem(player, rGold);
|
||||
else if(isGoldTools(is) && inventory.contains(rGold) && skillLevel >= gLevel){
|
||||
inventory.removeItem(new ItemStack(rGold, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
dif = (short) (dif * 7.6); //Boost XP for Gold to that of around Iron
|
||||
if(m.isShovel(is))
|
||||
dif = (short) (dif / 3);
|
||||
if(m.isSwords(is))
|
||||
dif = (short) (dif / 2);
|
||||
if(m.isHoe(is))
|
||||
dif = (short) (dif / 2);
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 8, true);
|
||||
}
|
||||
|
||||
//BOW
|
||||
else if(isBow(is) && hasItem(player, rString)){
|
||||
removeItem(player, rString);
|
||||
else if(isBow(is) && inventory.contains(rString)){
|
||||
inventory.removeItem(new ItemStack(rString, 1));
|
||||
repairItem(player, enchants, enchantsLevel);
|
||||
|
||||
durabilityAfter = player.getItemInHand().getDurability();
|
||||
dif = (short) (durabilityBefore - durabilityAfter);
|
||||
|
||||
//STRING NERF
|
||||
dif = (short) (dif / 2);
|
||||
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
|
||||
//CLANG CLANG
|
||||
if(LoadProperties.spoutEnabled)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
xpHandler(player, PP, is, durabilityBefore, 2, false);
|
||||
}
|
||||
|
||||
//UNABLE TO REPAIR
|
||||
@@ -288,22 +182,46 @@ public class Repair {
|
||||
}
|
||||
}
|
||||
|
||||
public static int getArcaneForgingRank(PlayerProfile PP){
|
||||
int rank = 0;
|
||||
|
||||
if(PP.getSkillLevel(SkillType.REPAIR) >= 750)
|
||||
rank = 4;
|
||||
public static void xpHandler(Player player, PlayerProfile PP, ItemStack is, short durabilityBefore, int modify, boolean boost)
|
||||
{
|
||||
short durabilityAfter = is.getDurability();
|
||||
short dif = (short) (durabilityBefore - durabilityAfter);
|
||||
if(boost)
|
||||
dif = (short) (dif * modify);
|
||||
if(!boost)
|
||||
dif = (short) (dif / modify);
|
||||
if(m.isShovel(is))
|
||||
dif = (short) (dif / 3);
|
||||
if(m.isSwords(is))
|
||||
dif = (short) (dif / 2);
|
||||
if(m.isHoe(is))
|
||||
dif = (short) (dif / 2);
|
||||
|
||||
else if (PP.getSkillLevel(SkillType.REPAIR) >= 500)
|
||||
rank = 3;
|
||||
PP.addXP(SkillType.REPAIR, dif*10, player);
|
||||
|
||||
else if(PP.getSkillLevel(SkillType.REPAIR) >= 250)
|
||||
rank = 2;
|
||||
//CLANG CLANG
|
||||
if(spout)
|
||||
SpoutStuff.playRepairNoise(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current Arcane Forging rank.
|
||||
*
|
||||
* @param skillLevel The skill level of the player whose rank is being checked
|
||||
* @return The player's current Arcane Forging rank
|
||||
*/
|
||||
public static int getArcaneForgingRank(int skillLevel)
|
||||
{
|
||||
if(skillLevel >= LoadProperties.arcaneRank4)
|
||||
return 4;
|
||||
if (skillLevel >= LoadProperties.arcaneRank3)
|
||||
return 3;
|
||||
if(skillLevel >= LoadProperties.arcaneRank2)
|
||||
return 2;
|
||||
if (skillLevel >= LoadProperties.arcaneRank1)
|
||||
return 1;
|
||||
|
||||
else if (PP.getSkillLevel(SkillType.REPAIR) >= 100)
|
||||
rank = 1;
|
||||
|
||||
return rank;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void addEnchants(ItemStack is, Enchantment[] enchants, int[] enchantsLvl, PlayerProfile PP, Player player){
|
||||
@@ -311,7 +229,7 @@ public class Repair {
|
||||
return;
|
||||
|
||||
int pos = 0;
|
||||
int rank = getArcaneForgingRank(PP);
|
||||
int rank = getArcaneForgingRank(PP.getSkillLevel(SkillType.REPAIR));
|
||||
|
||||
if(rank == 0)
|
||||
{
|
||||
@@ -374,7 +292,15 @@ public class Repair {
|
||||
player.sendMessage(mcLocale.getString("Repair.Downgraded"));
|
||||
}
|
||||
}
|
||||
public static int getEnchantChance(int rank){
|
||||
|
||||
/**
|
||||
* Gets chance of keeping enchantment during repair.
|
||||
*
|
||||
* @param rank Arcane Forging rank
|
||||
* @return The chance of keeping the enchantment
|
||||
*/
|
||||
public static int getEnchantChance(int rank)
|
||||
{
|
||||
switch(rank)
|
||||
{
|
||||
case 4:
|
||||
@@ -389,6 +315,13 @@ public class Repair {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets chance of enchantment being downgraded during repair.
|
||||
*
|
||||
* @param rank Arcane Forging rank
|
||||
* @return The chance of the enchantment being downgraded
|
||||
*/
|
||||
public static int getDowngradeChance(int rank)
|
||||
{
|
||||
switch(rank)
|
||||
@@ -405,357 +338,253 @@ public class Repair {
|
||||
return 100;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isArmor(ItemStack is){
|
||||
return is.getTypeId() == 306 || is.getTypeId() == 307 ||is.getTypeId() == 308 ||is.getTypeId() == 309 || //IRON
|
||||
is.getTypeId() == 310 ||is.getTypeId() == 311 ||is.getTypeId() == 312 ||is.getTypeId() == 313 || //DIAMOND
|
||||
is.getTypeId() == 314 || is.getTypeId() == 315 || is.getTypeId() == 316 || is.getTypeId() == 317 || //GOLD
|
||||
is.getTypeId() == 298 || is.getTypeId() == 299 || is.getTypeId() == 300 || is.getTypeId() == 301; //LEATHER
|
||||
return isLeatherArmor(is) || isGoldArmor(is) || isIronArmor(is) || isDiamondArmor(is);
|
||||
}
|
||||
|
||||
public static boolean isLeatherArmor(ItemStack is){
|
||||
return is.getTypeId() == 298 || is.getTypeId() == 299 || is.getTypeId() == 300 || is.getTypeId() == 301;
|
||||
}
|
||||
public static boolean isGoldArmor(ItemStack is){
|
||||
return is.getTypeId() == 314 || is.getTypeId() == 315 || is.getTypeId() == 316 || is.getTypeId() == 317;
|
||||
}
|
||||
public static boolean isIronArmor(ItemStack is){
|
||||
return is.getTypeId() == 306 || is.getTypeId() == 307 || is.getTypeId() == 308 || is.getTypeId() == 309;
|
||||
}
|
||||
public static boolean isDiamondArmor(ItemStack is){
|
||||
return is.getTypeId() == 310 || is.getTypeId() == 311 || is.getTypeId() == 312 || is.getTypeId() == 313;
|
||||
}
|
||||
public static boolean isTools(ItemStack is)
|
||||
{
|
||||
return is.getTypeId() == 359 || is.getTypeId() == 256 || is.getTypeId() == 257 || is.getTypeId() == 258 || is.getTypeId() == 267 || is.getTypeId() == 292 || //IRON
|
||||
is.getTypeId() == 276 || is.getTypeId() == 277 || is.getTypeId() == 278 || is.getTypeId() == 279 || is.getTypeId() == 293 || //DIAMOND
|
||||
is.getTypeId() == 283 || is.getTypeId() == 285 || is.getTypeId() == 286 || is.getTypeId() == 284 || is.getTypeId() == 294 || //GOLD
|
||||
is.getTypeId() == 268 || is.getTypeId() == 269 || is.getTypeId() == 270 || is.getTypeId() == 271 || is.getTypeId() == 290 ||//WOOD
|
||||
is.getTypeId() == 272 || is.getTypeId() == 273 || is.getTypeId() == 274 || is.getTypeId() == 275|| is.getTypeId() == 291 || //STONE
|
||||
is.getTypeId() == 261; //BOW
|
||||
}
|
||||
public static boolean isStoneTools(ItemStack is){
|
||||
return is.getTypeId() == 272 || is.getTypeId() == 273 || is.getTypeId() == 274 || is.getTypeId() == 275 || is.getTypeId() == 291;
|
||||
}
|
||||
public static boolean isWoodTools(ItemStack is){
|
||||
return is.getTypeId() == 268 || is.getTypeId() == 269 || is.getTypeId() == 270 || is.getTypeId() == 271 || is.getTypeId() == 290;
|
||||
}
|
||||
public static boolean isGoldTools(ItemStack is){
|
||||
return is.getTypeId() == 283 || is.getTypeId() == 285 || is.getTypeId() == 286 || is.getTypeId() == 284 || is.getTypeId() == 294;
|
||||
}
|
||||
public static boolean isIronTools(ItemStack is){
|
||||
return is.getTypeId() == 359 || is.getTypeId() == 256 || is.getTypeId() == 257 || is.getTypeId() == 258 || is.getTypeId() == 267 || is.getTypeId() == 292;
|
||||
}
|
||||
public static boolean isDiamondTools(ItemStack is){
|
||||
return is.getTypeId() == 276 || is.getTypeId() == 277 || is.getTypeId() == 278 || is.getTypeId() == 279 || is.getTypeId() == 293;
|
||||
}
|
||||
public static boolean isBow(ItemStack is){
|
||||
return is.getTypeId() == 261;
|
||||
}
|
||||
public static void removeItem(Player player, int typeid)
|
||||
{
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory){
|
||||
if(x != null && x.getTypeId() == typeid){
|
||||
if(x.getAmount() == 1){
|
||||
x.setTypeId(0);
|
||||
x.setAmount(0);
|
||||
player.getInventory().setContents(inventory);
|
||||
} else{
|
||||
x.setAmount(x.getAmount() - 1);
|
||||
player.getInventory().setContents(inventory);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static boolean hasItem(Player player, int typeid){
|
||||
ItemStack[] inventory = player.getInventory().getContents();
|
||||
for(ItemStack x : inventory){
|
||||
if(x != null && x.getTypeId() == typeid){
|
||||
return true;
|
||||
}
|
||||
switch(is.getType()){
|
||||
case LEATHER_BOOTS:
|
||||
case LEATHER_CHESTPLATE:
|
||||
case LEATHER_HELMET:
|
||||
case LEATHER_LEGGINGS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isGoldArmor(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case GOLD_BOOTS:
|
||||
case GOLD_CHESTPLATE:
|
||||
case GOLD_HELMET:
|
||||
case GOLD_LEGGINGS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isIronArmor(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case IRON_BOOTS:
|
||||
case IRON_CHESTPLATE:
|
||||
case IRON_HELMET:
|
||||
case IRON_LEGGINGS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isDiamondArmor(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case DIAMOND_BOOTS:
|
||||
case DIAMOND_CHESTPLATE:
|
||||
case DIAMOND_HELMET:
|
||||
case DIAMOND_LEGGINGS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isTools(ItemStack is)
|
||||
{
|
||||
return isStoneTools(is) || isWoodTools(is) || isGoldTools(is) || isIronTools(is) || isDiamondTools(is) || isBow(is);
|
||||
}
|
||||
|
||||
public static boolean isStoneTools(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case STONE_AXE:
|
||||
case STONE_HOE:
|
||||
case STONE_PICKAXE:
|
||||
case STONE_SPADE:
|
||||
case STONE_SWORD:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean isWoodTools(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case WOOD_AXE:
|
||||
case WOOD_HOE:
|
||||
case WOOD_PICKAXE:
|
||||
case WOOD_SPADE:
|
||||
case WOOD_SWORD:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean isGoldTools(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case GOLD_AXE:
|
||||
case GOLD_HOE:
|
||||
case GOLD_PICKAXE:
|
||||
case GOLD_SPADE:
|
||||
case GOLD_SWORD:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean isIronTools(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case IRON_AXE:
|
||||
case IRON_HOE:
|
||||
case IRON_PICKAXE:
|
||||
case IRON_SPADE:
|
||||
case IRON_SWORD:
|
||||
case SHEARS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean isDiamondTools(ItemStack is){
|
||||
switch(is.getType()){
|
||||
case DIAMOND_AXE:
|
||||
case DIAMOND_HOE:
|
||||
case DIAMOND_PICKAXE:
|
||||
case DIAMOND_SPADE:
|
||||
case DIAMOND_SWORD:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isBow(ItemStack is){
|
||||
return is.getType() == Material.BOW;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes repair bonuses.
|
||||
*
|
||||
* @param player The player repairing an item
|
||||
* @param durability The durability of the item being repaired
|
||||
* @param ramt The base amount of durability repaired to the item
|
||||
* @return The final amount of durability repaired to the item
|
||||
*/
|
||||
public static short repairCalculate(Player player, short durability, int ramt){
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
float bonus = (float)(PP.getSkillLevel(SkillType.REPAIR)) / 500;
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR);
|
||||
float bonus = (float)(skillLevel/500);
|
||||
bonus = (ramt * bonus);
|
||||
ramt+=bonus;
|
||||
if(checkPlayerProcRepair(player)){
|
||||
if(checkPlayerProcRepair(player))
|
||||
ramt = (short) (ramt * 2);
|
||||
}
|
||||
durability-=ramt;
|
||||
if(durability < 0){
|
||||
if(durability < 0)
|
||||
durability = 0;
|
||||
}
|
||||
return durability;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the base durability amount to repair an item.
|
||||
*
|
||||
* @param is The item being repaired
|
||||
* @param player The player repairing the item
|
||||
* @return The final amount of durability repaired to the item
|
||||
*/
|
||||
public static short getRepairAmount(ItemStack is, Player player){
|
||||
short durability = is.getDurability();
|
||||
short maxDurability = is.getType().getMaxDurability();
|
||||
int ramt = 0;
|
||||
switch(is.getTypeId())
|
||||
{
|
||||
/*
|
||||
* TOOLS
|
||||
*/
|
||||
|
||||
//SHEARS
|
||||
case 359:
|
||||
ramt = Material.SHEARS.getMaxDurability() / 2;
|
||||
break;
|
||||
|
||||
//BOW
|
||||
case 261:
|
||||
ramt = Material.BOW.getMaxDurability() / 3;
|
||||
break;
|
||||
|
||||
/* WOOD TOOLS */
|
||||
|
||||
//WOOD SWORD
|
||||
case 268:
|
||||
ramt = Material.WOOD_SWORD.getMaxDurability() / 2;
|
||||
break;
|
||||
//WOOD SHOVEL
|
||||
case 269:
|
||||
ramt = Material.WOOD_SPADE.getMaxDurability();
|
||||
break;
|
||||
//WOOD PICKAXE
|
||||
case 270:
|
||||
ramt = Material.WOOD_PICKAXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//WOOD AXE
|
||||
case 271:
|
||||
ramt = Material.WOOD_AXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//WOOD HOE
|
||||
case 290:
|
||||
ramt = Material.WOOD_HOE.getMaxDurability() / 2;
|
||||
break;
|
||||
|
||||
/* STONE TOOLS */
|
||||
|
||||
//STONE SWORD
|
||||
case 272:
|
||||
ramt = Material.STONE_SWORD.getMaxDurability() / 2;
|
||||
break;
|
||||
//STONE SHOVEL
|
||||
case 273:
|
||||
ramt = Material.STONE_SPADE.getMaxDurability();
|
||||
break;
|
||||
//STONE PICKAXE
|
||||
case 274:
|
||||
ramt = Material.STONE_PICKAXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//STONE AXE
|
||||
case 275:
|
||||
ramt = Material.STONE_AXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//STONE HOE
|
||||
case 291:
|
||||
ramt = Material.STONE_HOE.getMaxDurability() / 2;
|
||||
break;
|
||||
|
||||
/* IRON TOOLS */
|
||||
|
||||
//IRON SWORD
|
||||
case 267:
|
||||
ramt = Material.IRON_SWORD.getMaxDurability() / 2;
|
||||
break;
|
||||
//IRON SHOVEL
|
||||
case 256:
|
||||
ramt = Material.IRON_SPADE.getMaxDurability();
|
||||
break;
|
||||
//IRON PICK
|
||||
case 257:
|
||||
ramt = Material.IRON_PICKAXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//IRON AXE
|
||||
case 258:
|
||||
ramt = Material.IRON_AXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//IRON HOE
|
||||
case 292:
|
||||
ramt = Material.IRON_HOE.getMaxDurability() / 2;
|
||||
break;
|
||||
|
||||
/* DIAMOND TOOLS */
|
||||
|
||||
//DIAMOND SWORD
|
||||
case 276:
|
||||
ramt = Material.DIAMOND_SWORD.getMaxDurability() / 2;
|
||||
break;
|
||||
//DIAMOND SHOVEL
|
||||
case 277:
|
||||
ramt = Material.DIAMOND_SPADE.getMaxDurability();
|
||||
break;
|
||||
//DIAMOND PICK
|
||||
case 278:
|
||||
ramt = Material.DIAMOND_PICKAXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//DIAMOND AXE
|
||||
case 279:
|
||||
ramt = Material.DIAMOND_AXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//DIAMOND HOE
|
||||
case 293:
|
||||
ramt = Material.DIAMOND_HOE.getMaxDurability() / 2;
|
||||
break;
|
||||
|
||||
/* GOLD TOOLS */
|
||||
|
||||
//GOLD SWORD
|
||||
case 283:
|
||||
ramt = Material.GOLD_SWORD.getMaxDurability() / 2;
|
||||
break;
|
||||
//GOLD SHOVEL
|
||||
case 284:
|
||||
ramt = Material.GOLD_SPADE.getMaxDurability();
|
||||
break;
|
||||
//GOLD PICK
|
||||
case 285:
|
||||
ramt = Material.GOLD_PICKAXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//GOLD AXE
|
||||
case 286:
|
||||
ramt = Material.GOLD_AXE.getMaxDurability() / 3;
|
||||
break;
|
||||
//GOLD HOE
|
||||
case 294:
|
||||
ramt = Material.GOLD_HOE.getMaxDurability() / 2;
|
||||
break;
|
||||
/*
|
||||
* ARMOR
|
||||
*/
|
||||
|
||||
/* IRON ARMOR */
|
||||
|
||||
//IRON HELMET
|
||||
case 306:
|
||||
ramt = Material.IRON_HELMET.getMaxDurability() / 5;
|
||||
break;
|
||||
//IRON CHESTPLATE
|
||||
case 307:
|
||||
ramt = Material.IRON_CHESTPLATE.getMaxDurability() / 8;
|
||||
break;
|
||||
//IRON LEGGINGS
|
||||
case 308:
|
||||
ramt = Material.IRON_LEGGINGS.getMaxDurability() / 7;
|
||||
break;
|
||||
//IRON BOOTS
|
||||
case 309:
|
||||
ramt = Material.IRON_BOOTS.getMaxDurability() / 4;
|
||||
break;
|
||||
|
||||
/* DIAMOND ARMOR */
|
||||
|
||||
//DIAMOND HELMET
|
||||
case 310:
|
||||
ramt = Material.DIAMOND_HELMET.getMaxDurability() / 5;
|
||||
break;
|
||||
//DIAMOND CHESTPLATE
|
||||
case 311:
|
||||
ramt = Material.DIAMOND_CHESTPLATE.getMaxDurability() / 8;
|
||||
break;
|
||||
//DIAMOND LEGGINGS
|
||||
case 312:
|
||||
ramt = Material.DIAMOND_LEGGINGS.getMaxDurability() / 7;
|
||||
break;
|
||||
//DIAMOND BOOTS
|
||||
case 313:
|
||||
ramt = Material.DIAMOND_BOOTS.getMaxDurability() / 4;
|
||||
break;
|
||||
|
||||
/* GOLD ARMOR */
|
||||
|
||||
//GOLD HELMET
|
||||
case 314:
|
||||
ramt = Material.GOLD_HELMET.getMaxDurability() / 5;
|
||||
break;
|
||||
//GOLD CHESTPLATE
|
||||
case 315:
|
||||
ramt = Material.GOLD_CHESTPLATE.getMaxDurability() / 8;
|
||||
break;
|
||||
//GOLD LEGGINGS
|
||||
case 316:
|
||||
ramt = Material.GOLD_LEGGINGS.getMaxDurability() / 7;
|
||||
break;
|
||||
//GOLD BOOTS
|
||||
case 317:
|
||||
ramt = Material.GOLD_BOOTS.getMaxDurability() / 4;
|
||||
break;
|
||||
|
||||
/* LEATHER ARMOR */
|
||||
|
||||
//LEATHER HELMET
|
||||
case 298:
|
||||
ramt = Material.LEATHER_HELMET.getMaxDurability() / 5;
|
||||
break;
|
||||
//LEATHER CHESTPLATE
|
||||
case 299:
|
||||
ramt = Material.LEATHER_CHESTPLATE.getMaxDurability() / 8;
|
||||
break;
|
||||
//LEATHER LEGGINGS
|
||||
case 300:
|
||||
ramt = Material.LEATHER_LEGGINGS.getMaxDurability() / 7;
|
||||
break;
|
||||
//LEATHER BOOTS
|
||||
case 301:
|
||||
ramt = Material.LEATHER_BOOTS.getMaxDurability() / 4;
|
||||
break;
|
||||
}
|
||||
|
||||
if(m.isShovel(is))
|
||||
ramt = maxDurability;
|
||||
else if(m.isHoe(is) || m.isSwords(is) || is.getTypeId() == 359)
|
||||
ramt = maxDurability / 2;
|
||||
else if(m.isAxes(is) || m.isMiningPick(is) || isBow(is))
|
||||
ramt = maxDurability / 3;
|
||||
else if(m.isBoots(is))
|
||||
ramt = maxDurability / 4;
|
||||
else if(m.isHelmet(is))
|
||||
ramt = maxDurability / 5;
|
||||
else if(m.isPants(is))
|
||||
ramt = maxDurability / 7;
|
||||
else if(m.isChestplate(is))
|
||||
ramt = maxDurability / 8;
|
||||
|
||||
return repairCalculate(player, durability, ramt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Informs a player that the repair has failed.
|
||||
*
|
||||
* @param is The item being repaired
|
||||
* @param player The player repairing the item
|
||||
*/
|
||||
public static void needMoreVespeneGas(ItemStack is, Player player)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if ((isDiamondTools(is) || isDiamondArmor(is)) && PP.getSkillLevel(SkillType.REPAIR) < LoadProperties.repairdiamondlevel)
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.AdeptDiamond"));
|
||||
} else if (isDiamondTools(is) && !hasItem(player, rDiamond) || isIronTools(is) && !hasItem(player, rIron) || isGoldTools(is) && !hasItem(player, rGold)){
|
||||
if(isDiamondTools(is) && !hasItem(player, rDiamond))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
|
||||
if(isIronTools(is) && !hasItem(player, rIron))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
|
||||
if(isGoldTools(is) && !hasItem(player, rGold))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+nGold);
|
||||
if(isWoodTools(is) && !hasItem(player,rWood))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.DARK_GREEN+ nWood);
|
||||
if(isStoneTools(is) && !hasItem(player, rStone))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+nStone);
|
||||
} else if (isDiamondArmor(is) && !hasItem(player, rDiamond)){
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
|
||||
} else if (isIronArmor(is) && !hasItem(player, rIron)){
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
|
||||
} else if (isGoldArmor(is) && !hasItem(player, rGold)){
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+ nGold);
|
||||
} else if (isLeatherArmor(is) && !hasItem(player, rLeather)){
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nLeather);
|
||||
} else if (isBow(is) && !hasItem(player, rString)){
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nString);
|
||||
} else if (is.getAmount() > 1)
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR);
|
||||
|
||||
if(is.getAmount() > 1)
|
||||
player.sendMessage(mcLocale.getString("Skills.StackedItems"));
|
||||
else
|
||||
{
|
||||
if(isDiamondTools(is) || isDiamondArmor(is))
|
||||
{
|
||||
if(skillLevel < LoadProperties.repairdiamondlevel)
|
||||
player.sendMessage(mcLocale.getString("Skills.AdeptDiamond"));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
|
||||
}
|
||||
else if(isIronTools(is) || isIronArmor(is))
|
||||
{
|
||||
if(skillLevel < LoadProperties.repairIronLevel)
|
||||
player.sendMessage(mcLocale.getString("Skills.AdeptIron"));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
|
||||
}
|
||||
else if(isGoldTools(is) || isGoldArmor(is))
|
||||
{
|
||||
if(skillLevel < LoadProperties.repairGoldLevel)
|
||||
player.sendMessage(mcLocale.getString("Skills.AdeptGold"));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+nGold);
|
||||
}
|
||||
else if(isStoneTools(is))
|
||||
{
|
||||
if(skillLevel < LoadProperties.repairStoneLevel)
|
||||
player.sendMessage(mcLocale.getString("Skills.AdeptStone"));
|
||||
else
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+nStone);
|
||||
}
|
||||
else if(isWoodTools(is))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.DARK_GREEN+ nWood);
|
||||
else if (isLeatherArmor(is))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nLeather);
|
||||
else if (isBow(is))
|
||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.YELLOW+ nString);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for Super Repair bonus.
|
||||
*
|
||||
* @param player The player repairing an item.
|
||||
* @return true if bonus granted, false otherwise
|
||||
*/
|
||||
public static boolean checkPlayerProcRepair(Player player)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(player != null)
|
||||
int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR);
|
||||
if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel))
|
||||
{
|
||||
if(PP.getSkillLevel(SkillType.REPAIR) > 1000 || (Math.random() * 1000 <= PP.getSkillLevel(SkillType.REPAIR)))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.FeltEasy"));
|
||||
return true;
|
||||
}
|
||||
player.sendMessage(mcLocale.getString("Skills.FeltEasy"));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Repairs an item.
|
||||
*
|
||||
* @param player The player repairing an item
|
||||
* @param enchants The enchantments on the item
|
||||
* @param enchantsLevel The level of the enchantments on the item
|
||||
*/
|
||||
public static void repairItem(Player player, Enchantment[] enchants, int[] enchantsLevel)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
ItemStack is = player.getItemInHand();
|
||||
//Handle the enchantments
|
||||
addEnchants(player.getItemInHand(), enchants, enchantsLevel, PP, player);
|
||||
player.getItemInHand().setDurability(getRepairAmount(is, player));
|
||||
addEnchants(is, enchants, enchantsLevel, PP, player);
|
||||
is.setDurability(getRepairAmount(is, player));
|
||||
}
|
||||
}
|
||||
@@ -20,16 +20,13 @@ import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.getspout.spoutapi.SpoutManager;
|
||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
||||
|
||||
import com.gmail.nossr50.Leaderboard;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.spout.SpoutStuff;
|
||||
@@ -37,267 +34,102 @@ import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.PlayerStat;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.datatypes.ToolType;
|
||||
import com.gmail.nossr50.events.McMMOPlayerLevelUpEvent;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
|
||||
public class Skills
|
||||
{
|
||||
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||
|
||||
public void updateSQLfromFile(Player player){
|
||||
|
||||
}
|
||||
public static boolean cooldownOver(Player player, long oldTime, int cooldown){
|
||||
long currentTime = System.currentTimeMillis();
|
||||
if(currentTime - oldTime >= (cooldown * 1000)){
|
||||
if(currentTime - oldTime >= (cooldown * 1000))
|
||||
return true;
|
||||
} else {
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public boolean hasArrows(Player player){
|
||||
for(ItemStack x : player.getInventory().getContents()){
|
||||
if (x.getTypeId() == 262){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public void addArrows(Player player){
|
||||
for(ItemStack x : player.getInventory().getContents()){
|
||||
if (x.getTypeId() == 262){
|
||||
x.setAmount(x.getAmount() + 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static int calculateTimeLeft(Player player, long deactivatedTimeStamp, int cooldown)
|
||||
{
|
||||
return (int) (((deactivatedTimeStamp + (cooldown * 1000)) - System.currentTimeMillis())/1000);
|
||||
}
|
||||
|
||||
public static void watchCooldowns(Player player, PlayerProfile PP, long curTime){
|
||||
if(!PP.getGreenTerraInformed() && curTime - (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000) >= (LoadProperties.greenTerraCooldown * 1000)){
|
||||
PP.setGreenTerraInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourGreenTerra"));
|
||||
}
|
||||
if(!PP.getTreeFellerInformed() && curTime - (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000) >= (LoadProperties.treeFellerCooldown * 1000)){
|
||||
PP.setTreeFellerInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourTreeFeller"));
|
||||
}
|
||||
if(!PP.getSuperBreakerInformed() && curTime - (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000) >= (LoadProperties.superBreakerCooldown * 1000)){
|
||||
PP.setSuperBreakerInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourSuperBreaker"));
|
||||
}
|
||||
if(!PP.getSerratedStrikesInformed() && curTime - (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000) >= (LoadProperties.serratedStrikeCooldown * 1000)){
|
||||
PP.setSerratedStrikesInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourSerratedStrikes"));
|
||||
}
|
||||
if(!PP.getBerserkInformed() && (curTime - (PP.getSkillDATS(AbilityType.BERSERK)*1000)) >= (LoadProperties.berserkCooldown * 1000)){
|
||||
PP.setBerserkInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourBerserk"));
|
||||
}
|
||||
if(!PP.getSkullSplitterInformed() && curTime - (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000) >= (LoadProperties.skullSplitterCooldown * 1000)){
|
||||
PP.setSkullSplitterInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourSkullSplitter"));
|
||||
}
|
||||
if(!PP.getGigaDrillBreakerInformed() && curTime - (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000) >= (LoadProperties.gigaDrillBreakerCooldown * 1000)){
|
||||
PP.setGigaDrillBreakerInformed(true);
|
||||
player.sendMessage(mcLocale.getString("Skills.YourGigaDrillBreaker"));
|
||||
public static void watchCooldown(Player player, PlayerProfile PP, long curTime, AbilityType ability)
|
||||
{
|
||||
if(!ability.getInformed(PP) && curTime - (PP.getSkillDATS(ability) * 1000) >= (ability.getCooldown() * 1000))
|
||||
{
|
||||
ability.setInformed(PP, true);
|
||||
player.sendMessage(ability.getAbilityRefresh());
|
||||
}
|
||||
}
|
||||
public static void hoeReadinessCheck(Player player)
|
||||
|
||||
public static void activationCheck(Player player, SkillType skill)
|
||||
{
|
||||
if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking())
|
||||
return;
|
||||
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(mcPermissions.getInstance().herbalismAbility(player) && m.isHoe(player.getItemInHand()) && !PP.getHoePreparationMode()){
|
||||
if(!PP.getGreenTerraMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000), LoadProperties.greenTerraCooldown)){
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired")
|
||||
+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000), LoadProperties.greenTerraCooldown)+"s)");
|
||||
return;
|
||||
}
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(mcLocale.getString("Skills.ReadyHoe"));
|
||||
PP.setHoePreparationATS(System.currentTimeMillis());
|
||||
PP.setHoePreparationMode(true);
|
||||
AbilityType ability = skill.getAbility();
|
||||
ToolType tool = skill.getTool();
|
||||
|
||||
if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode())
|
||||
return;
|
||||
|
||||
//Woodcutting & Axes need to be treated differently
|
||||
//Basically the tool always needs to ready and we check to see if the cooldown is over when the user takes action
|
||||
if(skill == SkillType.WOODCUTTING || skill == SkillType.AXES)
|
||||
{
|
||||
if(tool.inHand(player.getItemInHand()) && !tool.getToolMode(PP))
|
||||
{
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(tool.getRaiseTool());
|
||||
|
||||
tool.setToolATS(PP, System.currentTimeMillis());
|
||||
tool.setToolMode(PP, true);
|
||||
}
|
||||
} else if(ability.getPermissions(player) && tool.inHand(player.getItemInHand()) && !tool.getToolMode(PP))
|
||||
{
|
||||
if(!ability.getMode(PP) && !cooldownOver(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)");
|
||||
return;
|
||||
}
|
||||
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(tool.getRaiseTool());
|
||||
|
||||
tool.setToolATS(PP, System.currentTimeMillis());
|
||||
tool.setToolMode(PP, true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void monitorSkills(Player player, PlayerProfile PP, long curTime){
|
||||
if(PP.getHoePreparationMode() && curTime - (PP.getHoePreparationATS()*1000) >= 4000){
|
||||
PP.setHoePreparationMode(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.LowerHoe"));
|
||||
}
|
||||
if(PP.getAxePreparationMode() && curTime - (PP.getAxePreparationATS()*1000) >= 4000){
|
||||
PP.setAxePreparationMode(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.LowerAxe"));
|
||||
}
|
||||
if(PP.getPickaxePreparationMode() && curTime - (PP.getPickaxePreparationATS()*1000) >= 4000){
|
||||
PP.setPickaxePreparationMode(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.LowerPickAxe"));
|
||||
}
|
||||
if(PP.getSwordsPreparationMode() && curTime - (PP.getSwordsPreparationATS()*1000) >= 4000){
|
||||
PP.setSwordsPreparationMode(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.LowerSword"));
|
||||
}
|
||||
if(PP.getFistsPreparationMode() && curTime - (PP.getFistsPreparationATS()*1000) >= 4000){
|
||||
PP.setFistsPreparationMode(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.LowerFists"));
|
||||
}
|
||||
if(PP.getShovelPreparationMode() && curTime - (PP.getShovelPreparationATS()*1000) >= 4000){
|
||||
PP.setShovelPreparationMode(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.LowerShovel"));
|
||||
}
|
||||
|
||||
/*
|
||||
* HERBALISM ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().herbalismAbility(player)){
|
||||
if(PP.getGreenTerraMode() && (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000) <= curTime){
|
||||
PP.setGreenTerraMode(false);
|
||||
PP.setGreenTerraInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.GreenTerraOff"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* AXES ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().axesAbility(player)){
|
||||
if(PP.getSkullSplitterMode() && (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000) <= curTime){
|
||||
PP.setSkullSplitterMode(false);
|
||||
PP.setSkullSplitterInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.SkullSplitterOff"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* WOODCUTTING ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().woodCuttingAbility(player)){
|
||||
if(PP.getTreeFellerMode() && (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000) <= curTime){
|
||||
PP.setTreeFellerMode(false);
|
||||
PP.setTreeFellerInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.TreeFellerOff"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* MINING ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().miningAbility(player)){
|
||||
if(PP.getSuperBreakerMode() && (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000) <= curTime){
|
||||
PP.setSuperBreakerMode(false);
|
||||
PP.setSuperBreakerInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.SuperBreakerOff"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* EXCAVATION ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().excavationAbility(player)){
|
||||
if(PP.getGigaDrillBreakerMode() && (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000) <= curTime){
|
||||
PP.setGigaDrillBreakerMode(false);
|
||||
PP.setGigaDrillBreakerInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOff"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* SWORDS ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().swordsAbility(player)){
|
||||
if(PP.getSerratedStrikesMode() && (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000) <= curTime){
|
||||
PP.setSerratedStrikesMode(false);
|
||||
PP.setSerratedStrikesInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOff"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* UNARMED ABILITY
|
||||
*/
|
||||
if(mcPermissions.getInstance().unarmedAbility(player)){
|
||||
if(PP.getBerserkMode() && (PP.getSkillDATS(AbilityType.BERSERK)*1000) <= curTime){
|
||||
PP.setBerserkMode(false);
|
||||
PP.setBerserkInformed(false);
|
||||
player.sendMessage(mcLocale.getString("Skills.BerserkOff"));
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void abilityActivationCheck(Player player)
|
||||
{
|
||||
if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking())
|
||||
return;
|
||||
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(PP != null)
|
||||
public static void monitorSkill(Player player, PlayerProfile PP, long curTime, SkillType skill)
|
||||
{
|
||||
ToolType tool = skill.getTool();
|
||||
AbilityType ability = skill.getAbility();
|
||||
if(tool.getToolMode(PP) && curTime - (tool.getToolATS(PP) * 1000) >= 4000)
|
||||
{
|
||||
if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode())
|
||||
return;
|
||||
if(mcPermissions.getInstance().miningAbility(player) && m.isMiningPick(player.getItemInHand()) && !PP.getPickaxePreparationMode())
|
||||
{
|
||||
if(!PP.getSuperBreakerMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000), LoadProperties.superBreakerCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired")
|
||||
+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000), LoadProperties.superBreakerCooldown)+"s)");
|
||||
return;
|
||||
}
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(mcLocale.getString("Skills.ReadyPickAxe"));
|
||||
PP.setPickaxePreparationATS(System.currentTimeMillis());
|
||||
PP.setPickaxePreparationMode(true);
|
||||
}
|
||||
if(mcPermissions.getInstance().excavationAbility(player) && m.isShovel(player.getItemInHand()) && !PP.getShovelPreparationMode())
|
||||
{
|
||||
if(!PP.getGigaDrillBreakerMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000), LoadProperties.gigaDrillBreakerCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired")
|
||||
+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000), LoadProperties.gigaDrillBreakerCooldown)+"s)");
|
||||
return;
|
||||
}
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(mcLocale.getString("Skills.ReadyShovel"));
|
||||
PP.setShovelPreparationATS(System.currentTimeMillis());
|
||||
PP.setShovelPreparationMode(true);
|
||||
}
|
||||
if(mcPermissions.getInstance().swordsAbility(player) && m.isSwords(player.getItemInHand()) && !PP.getSwordsPreparationMode())
|
||||
{
|
||||
if(!PP.getSerratedStrikesMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000), LoadProperties.serratedStrikeCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired")
|
||||
+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000), LoadProperties.serratedStrikeCooldown)+"s)");
|
||||
return;
|
||||
}
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(mcLocale.getString("Skills.ReadySword"));
|
||||
PP.setSwordsPreparationATS(System.currentTimeMillis());
|
||||
PP.setSwordsPreparationMode(true);
|
||||
}
|
||||
if(mcPermissions.getInstance().unarmedAbility(player) && player.getItemInHand().getTypeId() == 0 && !PP.getFistsPreparationMode())
|
||||
{
|
||||
if(!PP.getBerserkMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.BERSERK)*1000), LoadProperties.berserkCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired")
|
||||
+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.BERSERK)*1000), LoadProperties.berserkCooldown)+"s)");
|
||||
return;
|
||||
}
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(mcLocale.getString("Skills.ReadyFists"));
|
||||
PP.setFistsPreparationATS(System.currentTimeMillis());
|
||||
PP.setFistsPreparationMode(true);
|
||||
}
|
||||
if((mcPermissions.getInstance().axesAbility(player) || mcPermissions.getInstance().woodCuttingAbility(player)) && !PP.getAxePreparationMode())
|
||||
{
|
||||
if(m.isAxes(player.getItemInHand()))
|
||||
{
|
||||
if(LoadProperties.enableAbilityMessages)
|
||||
player.sendMessage(mcLocale.getString("Skills.ReadyAxe"));
|
||||
PP.setAxePreparationATS(System.currentTimeMillis());
|
||||
PP.setAxePreparationMode(true);
|
||||
}
|
||||
}
|
||||
tool.setToolMode(PP, false);
|
||||
player.sendMessage(tool.getLowerTool());
|
||||
}
|
||||
}
|
||||
|
||||
if(ability.getPermissions(player))
|
||||
{
|
||||
if(ability.getMode(PP) && (PP.getSkillDATS(ability) * 1000) <= curTime)
|
||||
{
|
||||
ability.setMode(PP, false);
|
||||
ability.setInformed(PP, false);
|
||||
player.sendMessage(ability.getAbilityOff());
|
||||
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
|
||||
y.sendMessage(ability.getAbilityPlayerOff(player));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ProcessLeaderboardUpdate(SkillType skillType, Player player)
|
||||
{
|
||||
@@ -314,11 +146,6 @@ public class Skills
|
||||
|
||||
public static void XpCheckSkill(SkillType skillType, Player player)
|
||||
{
|
||||
if(skillType == SkillType.ALL) {
|
||||
XpCheckAll(player);
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
|
||||
if(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
|
||||
@@ -327,7 +154,7 @@ public class Skills
|
||||
|
||||
while(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
|
||||
{
|
||||
if(getSkillMaxLevel(skillType) >= PP.getSkillLevel(skillType) + 1)
|
||||
if(skillType.getMaxLevel() >= PP.getSkillLevel(skillType) + 1)
|
||||
{
|
||||
skillups++;
|
||||
PP.removeXP(skillType, PP.getXpToLevel(skillType));
|
||||
@@ -335,6 +162,9 @@ public class Skills
|
||||
|
||||
McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType);
|
||||
Bukkit.getPluginManager().callEvent(eventToFire);
|
||||
} else
|
||||
{
|
||||
PP.removeXP(skillType, PP.getXpToLevel(skillType));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -383,36 +213,7 @@ public class Skills
|
||||
XpCheckSkill(x, player);
|
||||
}
|
||||
}
|
||||
public static int getSkillMaxLevel(SkillType skillType) {
|
||||
switch(skillType) {
|
||||
case ACROBATICS:
|
||||
return (LoadProperties.levelCapAcrobatics > 0) ? LoadProperties.levelCapAcrobatics : Integer.MAX_VALUE;
|
||||
case ARCHERY:
|
||||
return (LoadProperties.levelCapArchery > 0) ? LoadProperties.levelCapArchery : Integer.MAX_VALUE;
|
||||
case AXES:
|
||||
return (LoadProperties.levelCapAxes > 0) ? LoadProperties.levelCapAxes : Integer.MAX_VALUE;
|
||||
case EXCAVATION:
|
||||
return (LoadProperties.levelCapExcavation > 0) ? LoadProperties.levelCapExcavation : Integer.MAX_VALUE;
|
||||
case FISHING:
|
||||
return (LoadProperties.levelCapFishing > 0) ? LoadProperties.levelCapFishing : Integer.MAX_VALUE;
|
||||
case HERBALISM:
|
||||
return (LoadProperties.levelCapHerbalism > 0) ? LoadProperties.levelCapHerbalism : Integer.MAX_VALUE;
|
||||
case MINING:
|
||||
return (LoadProperties.levelCapMining > 0) ? LoadProperties.levelCapMining : Integer.MAX_VALUE;
|
||||
case REPAIR:
|
||||
return (LoadProperties.levelCapRepair > 0) ? LoadProperties.levelCapRepair : Integer.MAX_VALUE;
|
||||
case SWORDS:
|
||||
return (LoadProperties.levelCapSwords > 0) ? LoadProperties.levelCapSwords : Integer.MAX_VALUE;
|
||||
case TAMING:
|
||||
return (LoadProperties.levelCapTaming > 0) ? LoadProperties.levelCapTaming : Integer.MAX_VALUE;
|
||||
case UNARMED:
|
||||
return (LoadProperties.levelCapUnarmed > 0) ? LoadProperties.levelCapUnarmed : Integer.MAX_VALUE;
|
||||
case WOODCUTTING:
|
||||
return (LoadProperties.levelCapWoodcutting > 0) ? LoadProperties.levelCapWoodcutting : Integer.MAX_VALUE;
|
||||
default:
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
public static SkillType getSkillType(String skillName)
|
||||
{
|
||||
for(SkillType x : SkillType.values())
|
||||
@@ -422,6 +223,7 @@ public class Skills
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isSkill(String skillname){
|
||||
skillname = skillname.toUpperCase();
|
||||
for(SkillType x : SkillType.values())
|
||||
@@ -431,19 +233,8 @@ public class Skills
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static void arrowRetrievalCheck(Entity entity, mcMMO plugin)
|
||||
{
|
||||
if(plugin.misc.arrowTracker.containsKey(entity))
|
||||
{
|
||||
Integer x = 0;
|
||||
while(x < plugin.misc.arrowTracker.get(entity))
|
||||
{
|
||||
m.mcDropItem(entity.getLocation(), 262);
|
||||
x++;
|
||||
}
|
||||
}
|
||||
plugin.misc.arrowTracker.remove(entity);
|
||||
}
|
||||
|
||||
//We should probably rework this - it's a fairly ugly way to do this, compared to our other command formatting.
|
||||
public static String getSkillStats(String skillname, Integer level, Integer XP, Integer XPToLevel)
|
||||
{
|
||||
ChatColor parColor = ChatColor.DARK_AQUA;
|
||||
@@ -453,6 +244,7 @@ public class Skills
|
||||
|
||||
return skillColor+skillname+LvlColor+level+parColor+" XP"+"("+xpColor+XP+parColor+"/"+xpColor+XPToLevel+parColor+")";
|
||||
}
|
||||
|
||||
public static boolean hasCombatSkills(Player player)
|
||||
{
|
||||
if(mcPermissions.getInstance().axes(player) || mcPermissions.getInstance().archery(player) || mcPermissions.getInstance().swords(player) || mcPermissions.getInstance().taming(player) || mcPermissions.getInstance().unarmed(player))
|
||||
@@ -460,13 +252,15 @@ public class Skills
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean hasGatheringSkills(Player player)
|
||||
{
|
||||
if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player))
|
||||
if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().fishing(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean hasMiscSkills(Player player)
|
||||
{
|
||||
if(mcPermissions.getInstance().acrobatics(player) || mcPermissions.getInstance().repair(player))
|
||||
@@ -474,4 +268,44 @@ public class Skills
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if an ability can be activated.
|
||||
*
|
||||
* @param player The player activating the ability
|
||||
* @param type The skill the ability is based on
|
||||
*/
|
||||
public static void abilityCheck(Player player, SkillType type)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
AbilityType ability = type.getAbility();
|
||||
if(type.getTool().inHand(player.getItemInHand()))
|
||||
{
|
||||
if(type.getTool().getToolMode(PP))
|
||||
type.getTool().setToolMode(PP, false);
|
||||
|
||||
//Axes and Woodcutting are odd because they share the same tool so we show them the too tired message when they take action
|
||||
if(type == SkillType.WOODCUTTING || type == SkillType.AXES)
|
||||
{
|
||||
if(!ability.getMode(PP) && !cooldownOver(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int ticks = 2 + (PP.getSkillLevel(type) / 50);
|
||||
if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
|
||||
{
|
||||
player.sendMessage(ability.getAbilityOn());
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
|
||||
y.sendMessage(ability.getAbilityPlayer(player));
|
||||
}
|
||||
PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000));
|
||||
ability.setMode(PP, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -27,7 +26,6 @@ import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.mcPermissions;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
@@ -35,37 +33,6 @@ import com.gmail.nossr50.party.Party;
|
||||
|
||||
public class Swords
|
||||
{
|
||||
public static void serratedStrikesActivationCheck(Player player){
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(m.isSwords(player.getItemInHand()))
|
||||
{
|
||||
if(PP.getSwordsPreparationMode())
|
||||
{
|
||||
PP.setSwordsPreparationMode(false);
|
||||
}
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.SWORDS);
|
||||
while(x >= 50)
|
||||
{
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getSerratedStrikesMode() && PP.getSkillDATS(AbilityType.SERRATED_STRIKES) < System.currentTimeMillis())
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn"));
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.SERRATED_STRIKES, System.currentTimeMillis()+(ticks*1000));
|
||||
PP.setSerratedStrikesMode(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
|
||||
{
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
@@ -73,11 +40,12 @@ public class Swords
|
||||
if(x instanceof Wolf)
|
||||
{
|
||||
Wolf wolf = (Wolf)x;
|
||||
if(Taming.getOwner(wolf, pluginx) != null)
|
||||
if(wolf.getOwner() instanceof Player)
|
||||
{
|
||||
if(Taming.getOwner(wolf, pluginx) == attacker)
|
||||
Player owner = (Player) wolf.getOwner();
|
||||
if(owner == attacker)
|
||||
return;
|
||||
if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
|
||||
if(Party.getInstance().inSameParty(attacker, owner))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -93,7 +61,7 @@ public class Swords
|
||||
Player target = (Player)x;
|
||||
Users.getProfile(target).addBleedTicks(3);
|
||||
}
|
||||
attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
|
||||
attacker.sendMessage(mcLocale.getString("Swords.EnemyBleeding"));
|
||||
}
|
||||
}
|
||||
else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
|
||||
@@ -105,7 +73,7 @@ public class Swords
|
||||
Player target = (Player)x;
|
||||
Users.getProfile(target).addBleedTicks(2);
|
||||
}
|
||||
attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
|
||||
attacker.sendMessage(mcLocale.getString("Swords.EnemyBleeding"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -130,10 +98,14 @@ public class Swords
|
||||
if(derp instanceof Wolf)
|
||||
{
|
||||
Wolf hurrDurr = (Wolf)derp;
|
||||
if(Taming.getOwner(hurrDurr, pluginx) == attacker)
|
||||
continue;
|
||||
if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
|
||||
continue;
|
||||
if(hurrDurr.getOwner() instanceof Player)
|
||||
{
|
||||
Player owner = (Player) hurrDurr.getOwner();
|
||||
if(owner == attacker)
|
||||
return;
|
||||
if(Party.getInstance().inSameParty(attacker, owner))
|
||||
return;
|
||||
}
|
||||
}
|
||||
//Damage nearby LivingEntities
|
||||
if(derp instanceof LivingEntity && targets >= 1)
|
||||
@@ -152,8 +124,8 @@ public class Swords
|
||||
continue;
|
||||
if(targets >= 1 && derp.getWorld().getPVP())
|
||||
{
|
||||
Combat.dealDamage(target, dmgAmount);
|
||||
target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
|
||||
Combat.dealDamage(target, dmgAmount, attacker);
|
||||
target.sendMessage(mcLocale.getString("Swords.HitBySerratedStrikes"));
|
||||
Users.getProfile(target).addBleedTicks(5);
|
||||
targets--;
|
||||
continue;
|
||||
@@ -165,7 +137,7 @@ public class Swords
|
||||
pluginx.misc.addToBleedQue((LivingEntity)derp);
|
||||
|
||||
LivingEntity target = (LivingEntity)derp;
|
||||
Combat.dealDamage(target, dmgAmount);
|
||||
Combat.dealDamage(target, dmgAmount, attacker);
|
||||
targets--;
|
||||
}
|
||||
}
|
||||
@@ -194,17 +166,17 @@ public class Swords
|
||||
if(Math.random() * 2000 <= 600)
|
||||
{
|
||||
Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
|
||||
defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
|
||||
defender.sendMessage(mcLocale.getString("Swords.CounterAttacked"));
|
||||
if(f instanceof Player)
|
||||
((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
|
||||
((Player) f).sendMessage(mcLocale.getString("Swords.HitByCounterAttack"));
|
||||
}
|
||||
}
|
||||
else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
|
||||
{
|
||||
Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
|
||||
defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
|
||||
defender.sendMessage(mcLocale.getString("Swords.CounterAttacked"));
|
||||
if(f instanceof Player)
|
||||
((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
|
||||
((Player) f).sendMessage(mcLocale.getString("Swords.HitByCounterAttack"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -237,9 +209,7 @@ public class Swords
|
||||
//Bleed monsters/animals
|
||||
for(LivingEntity x : plugin.misc.bleedTracker)
|
||||
{
|
||||
if(x == null){continue;}
|
||||
|
||||
if(x.getHealth() <= 0)
|
||||
if(x == null || x.isDead())
|
||||
{
|
||||
plugin.misc.addToBleedRemovalQue(x);
|
||||
continue;
|
||||
|
||||
@@ -1,60 +1,100 @@
|
||||
/*
|
||||
This file is part of mcMMO.
|
||||
|
||||
mcMMO 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
mcMMO 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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
mcMMO 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.
|
||||
mcMMO 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 mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.entity.AnimalTamer;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
|
||||
import com.gmail.nossr50.Combat;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class Taming
|
||||
{
|
||||
public static boolean ownerOnline(Wolf theWolf, Plugin pluginx)
|
||||
public static void rewardXp(EntityDamageEvent event, mcMMO pluginx, Player master)
|
||||
{
|
||||
for(Player x : pluginx.getServer().getOnlinePlayers())
|
||||
Entity entity = event.getEntity();
|
||||
if(!pluginx.misc.mobSpawnerList.contains(entity.getEntityId()))
|
||||
{
|
||||
if(x instanceof AnimalTamer)
|
||||
int xp = Combat.getXp(entity, event.getDamage());
|
||||
Users.getProfile(master).addXP(SkillType.TAMING, xp*10, master);
|
||||
|
||||
if(entity instanceof Player)
|
||||
{
|
||||
AnimalTamer tamer = (AnimalTamer)x;
|
||||
if(theWolf.getOwner() == tamer)
|
||||
return true;
|
||||
xp = (event.getDamage() * 2);
|
||||
Users.getProfile(master).addXP(SkillType.TAMING, (int)((xp*10)*1.5), master);
|
||||
}
|
||||
Skills.XpCheckSkill(SkillType.TAMING, master);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Player getOwner(Entity wolf, Plugin pluginx)
|
||||
public static void fastFoodService(PlayerProfile PPo, Wolf theWolf, EntityDamageEvent event)
|
||||
{
|
||||
if(wolf instanceof Wolf)
|
||||
int health = theWolf.getHealth();
|
||||
int maxHealth = theWolf.getMaxHealth();
|
||||
int damage = event.getDamage();
|
||||
if(PPo.getSkillLevel(SkillType.TAMING) >= 50)
|
||||
{
|
||||
Wolf theWolf = (Wolf)wolf;
|
||||
for(Player x : pluginx.getServer().getOnlinePlayers())
|
||||
if(health < maxHealth)
|
||||
{
|
||||
if(x instanceof AnimalTamer && x.isOnline())
|
||||
if(Math.random() * 10 > 5)
|
||||
{
|
||||
AnimalTamer tamer = (AnimalTamer)x;
|
||||
if(theWolf.getOwner() == tamer)
|
||||
return x;
|
||||
if(health + damage <= maxHealth)
|
||||
theWolf.setHealth(health + damage);
|
||||
else
|
||||
theWolf.setHealth(maxHealth);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void sharpenedClaws(PlayerProfile PPo, EntityDamageEvent event)
|
||||
{
|
||||
if(PPo.getSkillLevel(SkillType.TAMING) >= 750)
|
||||
{
|
||||
event.setDamage(event.getDamage() + 2);
|
||||
}
|
||||
}
|
||||
|
||||
public static void gore(PlayerProfile PPo, EntityDamageEvent event, Player master, mcMMO pluginx)
|
||||
{
|
||||
if(Math.random() * 1000 <= PPo.getSkillLevel(SkillType.TAMING))
|
||||
{
|
||||
Entity entity = event.getEntity();
|
||||
event.setDamage(event.getDamage() * 2);
|
||||
|
||||
if(entity instanceof Player)
|
||||
{
|
||||
Player target = (Player)entity;
|
||||
target.sendMessage(mcLocale.getString("Combat.StruckByGore")); //$NON-NLS-1$
|
||||
Users.getProfile(target).setBleedTicks(2);
|
||||
}
|
||||
else
|
||||
pluginx.misc.addToBleedQue((LivingEntity)entity);
|
||||
|
||||
master.sendMessage(mcLocale.getString("Combat.Gore")); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
public static String getOwnerName(Wolf theWolf)
|
||||
@@ -64,13 +104,56 @@ public class Taming
|
||||
if (theWolf.getOwner() instanceof Player)
|
||||
{
|
||||
owner = (Player)theWolf.getOwner();
|
||||
}
|
||||
|
||||
if(owner != null)
|
||||
{
|
||||
return owner.getName();
|
||||
}
|
||||
else
|
||||
return "Offline Master";
|
||||
}
|
||||
|
||||
public static void preventDamage(EntityDamageEvent event, mcMMO plugin)
|
||||
{
|
||||
DamageCause cause = event.getCause();
|
||||
Wolf wolf = (Wolf) event.getEntity();
|
||||
Player master = (Player) wolf.getOwner();
|
||||
int skillLevel = Users.getProfile(master).getSkillLevel(SkillType.TAMING);
|
||||
|
||||
switch(cause)
|
||||
{
|
||||
//Environmentally Aware
|
||||
case CONTACT:
|
||||
case LAVA:
|
||||
case FIRE:
|
||||
if(skillLevel >= 100)
|
||||
{
|
||||
if(event.getDamage() >= wolf.getHealth())
|
||||
return;
|
||||
|
||||
wolf.teleport(master.getLocation());
|
||||
master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); //$NON-NLS-1$
|
||||
}
|
||||
break;
|
||||
case FALL:
|
||||
if(skillLevel >= 100)
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
|
||||
//Thick Fur
|
||||
case FIRE_TICK:
|
||||
if(skillLevel >= 250)
|
||||
wolf.setFireTicks(0);
|
||||
break;
|
||||
case ENTITY_ATTACK:
|
||||
case PROJECTILE:
|
||||
if(skillLevel >= 250)
|
||||
event.setDamage(event.getDamage() / 2);
|
||||
break;
|
||||
|
||||
//Shock Proof
|
||||
case ENTITY_EXPLOSION:
|
||||
case BLOCK_EXPLOSION:
|
||||
if(skillLevel >= 500)
|
||||
event.setDamage(event.getDamage() / 6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,100 +16,55 @@
|
||||
*/
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class Unarmed {
|
||||
public static void berserkActivationCheck(Player player)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(player.getItemInHand().getTypeId() == 0)
|
||||
{
|
||||
if(PP.getFistsPreparationMode())
|
||||
{
|
||||
PP.setFistsPreparationMode(false);
|
||||
}
|
||||
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.UNARMED);
|
||||
|
||||
while(x >= 50)
|
||||
{
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getBerserkMode() && Skills.cooldownOver(player, PP.getSkillDATS(AbilityType.BERSERK), LoadProperties.berserkCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.BerserkOn"));
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.BerserkPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.BERSERK, System.currentTimeMillis()+(ticks*1000));
|
||||
System.out.println("getSkillDATS(): "+PP.getSkillDATS(AbilityType.BERSERK));
|
||||
PP.setBerserkMode(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
|
||||
{
|
||||
PlayerProfile PPa = Users.getProfile(attacker);
|
||||
int bonus = 0;
|
||||
if (PPa.getSkillLevel(SkillType.UNARMED) >= 250)
|
||||
bonus+=2;
|
||||
if (PPa.getSkillLevel(SkillType.UNARMED) >= 500)
|
||||
bonus+=4;
|
||||
event.setDamage(event.getDamage()+bonus);
|
||||
int bonus = 3;
|
||||
|
||||
//Add 1 DMG for every 50 skill levels
|
||||
bonus += Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED)/50;
|
||||
|
||||
if(bonus > 8)
|
||||
bonus = 8;
|
||||
|
||||
event.setDamage(event.getDamage() + bonus);
|
||||
}
|
||||
|
||||
public static void disarmProcCheck(Player attacker, Player defender)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(attacker);
|
||||
if(attacker.getItemInHand().getTypeId() == 0)
|
||||
int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED);
|
||||
if(defender.getItemInHand() != null && defender.getItemInHand().getType() != Material.AIR)
|
||||
{
|
||||
if(PP.getSkillLevel(SkillType.UNARMED) >= 1000)
|
||||
if(skillLevel >= 1000)
|
||||
{
|
||||
if(Math.random() * 4000 <= 1000)
|
||||
{
|
||||
Location loc = defender.getLocation();
|
||||
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
|
||||
{
|
||||
defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
|
||||
ItemStack item = defender.getItemInHand();
|
||||
if(item != null)
|
||||
{
|
||||
m.mcDropItem(loc, item);
|
||||
ItemStack itemx = null;
|
||||
defender.setItemInHand(itemx);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(Math.random() * 4000 <= PP.getSkillLevel(SkillType.UNARMED)){
|
||||
Location loc = defender.getLocation();
|
||||
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
|
||||
{
|
||||
defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
|
||||
ItemStack item = defender.getItemInHand();
|
||||
if(item != null)
|
||||
{
|
||||
m.mcDropItem(loc, item);
|
||||
ItemStack itemx = null;
|
||||
defender.setItemInHand(itemx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Math.random() * 3000 <= 1000)
|
||||
{
|
||||
ItemStack item = defender.getItemInHand();
|
||||
defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
|
||||
m.mcDropItem(defender.getLocation(), item);
|
||||
defender.setItemInHand(null);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Math.random() * 3000 <= skillLevel)
|
||||
{
|
||||
ItemStack item = defender.getItemInHand();
|
||||
defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
|
||||
m.mcDropItem(defender.getLocation(), item);
|
||||
defender.setItemInHand(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,32 +17,212 @@
|
||||
package com.gmail.nossr50.skills;
|
||||
|
||||
import java.util.ArrayList;
|
||||
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.inventory.ItemStack;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import com.gmail.nossr50.Combat;
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
import com.gmail.nossr50.spout.SpoutStuff;
|
||||
import com.gmail.nossr50.config.*;
|
||||
|
||||
import org.getspout.spoutapi.sound.SoundEffect;
|
||||
|
||||
|
||||
public class WoodCutting
|
||||
{
|
||||
static int w = 0;
|
||||
private static boolean isdone = false;
|
||||
|
||||
public static void treeFeller(BlockBreakEvent event, mcMMO plugin)
|
||||
{
|
||||
//Setup vars
|
||||
Player player = event.getPlayer();
|
||||
Block firstBlock = event.getBlock();
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
World world = firstBlock.getWorld();
|
||||
|
||||
//Prepare array
|
||||
ArrayList<Block> toBeFelled = new ArrayList<Block>();
|
||||
|
||||
//NOTE: Tree Feller will cut upwards like how you actually fell trees
|
||||
processTreeFelling(firstBlock, world, toBeFelled, plugin);
|
||||
removeBlocks(toBeFelled, player, PP, plugin);
|
||||
}
|
||||
|
||||
private static void removeBlocks(ArrayList<Block> toBeFelled, Player player, PlayerProfile PP, mcMMO plugin)
|
||||
{
|
||||
if(toBeFelled.size() > LoadProperties.treeFellerThreshold)
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.Woodcutting.TreeFellerThreshold"));
|
||||
return;
|
||||
}
|
||||
int durabilityLoss = toBeFelled.size(), xp = 0;
|
||||
|
||||
//Damage the tool
|
||||
player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability()+durabilityLoss));
|
||||
|
||||
//This is to prevent using wood axes everytime you tree fell
|
||||
if((player.getItemInHand().getDurability() + durabilityLoss >= player.getItemInHand().getType().getMaxDurability())
|
||||
|| player.getItemInHand().getType() == Material.AIR || player.getItemInHand() == null)
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("TreeFeller.AxeSplinters"));
|
||||
|
||||
if(player.getHealth() >= 2)
|
||||
Combat.dealDamage(player, (int)(Math.random() * (player.getHealth()-1)));
|
||||
return;
|
||||
}
|
||||
|
||||
//Prepare ItemStacks
|
||||
ItemStack item;
|
||||
ItemStack oak = new ItemStack(Material.LOG, 1, (byte)0, (byte)0);
|
||||
ItemStack spruce = new ItemStack(Material.LOG, 1, (byte)0, (byte)1);
|
||||
ItemStack birch = new ItemStack(Material.LOG, 1, (byte)0, (byte)2);
|
||||
ItemStack jungle = new ItemStack(Material.LOG, 1, (byte)0, (byte)3);
|
||||
|
||||
for(Block x : toBeFelled)
|
||||
{
|
||||
if(m.blockBreakSimulate(x, player, true))
|
||||
{
|
||||
if(x.getType() == Material.LOG)
|
||||
{
|
||||
switch(x.getData())
|
||||
{
|
||||
case 0:
|
||||
item = oak;
|
||||
break;
|
||||
case 1:
|
||||
item = spruce;
|
||||
break;
|
||||
case 2:
|
||||
item = birch;
|
||||
break;
|
||||
case 3:
|
||||
item = jungle;
|
||||
break;
|
||||
default:
|
||||
item = oak;
|
||||
break;
|
||||
}
|
||||
|
||||
//ItemStack item = new ItemStack(x.getType(), 1, (byte)0, type);
|
||||
|
||||
if(!plugin.misc.blockWatchList.contains(x))
|
||||
{
|
||||
WoodCutting.woodCuttingProcCheck(player, x);
|
||||
|
||||
switch(x.getData())
|
||||
{
|
||||
case 0:
|
||||
xp += LoadProperties.moak;
|
||||
break;
|
||||
case 1:
|
||||
xp += LoadProperties.mspruce;
|
||||
break;
|
||||
case 2:
|
||||
xp += LoadProperties.mbirch;
|
||||
break;
|
||||
case 3:
|
||||
xp += LoadProperties.mjungle/4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Remove the block
|
||||
x.setData((byte) 0);
|
||||
x.setType(Material.AIR);
|
||||
|
||||
//Drop the block
|
||||
m.mcDropItem(x.getLocation(), item);
|
||||
} else if(x.getType() == Material.LEAVES)
|
||||
{
|
||||
Material mat = Material.SAPLING;
|
||||
item = new ItemStack(mat, 1, (short)0, (byte)(x.getData()-8));
|
||||
|
||||
//90% chance to drop sapling
|
||||
if(Math.random() * 10 > 9)
|
||||
m.mcRandomDropItem(x.getLocation(), item, 90);
|
||||
|
||||
//Remove the block
|
||||
x.setData((byte) 0);
|
||||
x.setType(Material.AIR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PP.addXP(SkillType.WOODCUTTING, xp, player); //Tree Feller gives nerf'd XP
|
||||
Skills.XpCheckSkill(SkillType.WOODCUTTING, player);
|
||||
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!player.getItemInHand().containsEnchantment(Enchantment.DURABILITY))
|
||||
{
|
||||
short durability = player.getItemInHand().getDurability();
|
||||
durability += (LoadProperties.abilityDurabilityLoss * durabilityLoss);
|
||||
player.getItemInHand().setDurability(durability);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean treeFellerCompatible(Block block)
|
||||
{
|
||||
return block.getType() == Material.LOG || block.getType() == Material.LEAVES || block.getType() == Material.AIR;
|
||||
}
|
||||
|
||||
private static void processTreeFelling(Block currentBlock, World world, ArrayList<Block> toBeFelled, mcMMO plugin)
|
||||
{
|
||||
int x = currentBlock.getX(), y = currentBlock.getY(), z = currentBlock.getZ();
|
||||
|
||||
if(currentBlock.getType() == Material.LOG || currentBlock.getType() == Material.LEAVES)
|
||||
toBeFelled.add(currentBlock);
|
||||
|
||||
//These 2 are to make sure that Tree Feller isn't so aggressive
|
||||
boolean isAirOrLeaves = currentBlock.getType() == Material.LEAVES || currentBlock.getType() == Material.AIR;
|
||||
|
||||
Block xPositive = world.getBlockAt(x+1, y, z);
|
||||
Block xNegative = world.getBlockAt(x-1, y, z);
|
||||
Block zPositive = world.getBlockAt(x, y, z+1);
|
||||
Block zNegative = world.getBlockAt(x, y, z-1);
|
||||
|
||||
if(!plugin.misc.blockWatchList.contains(currentBlock) &&
|
||||
!isTooAgressive(isAirOrLeaves, xPositive) && treeFellerCompatible(xPositive) && !toBeFelled.contains(xPositive))
|
||||
processTreeFelling(xPositive, world, toBeFelled, plugin);
|
||||
if(!plugin.misc.blockWatchList.contains(currentBlock) &&
|
||||
!isTooAgressive(isAirOrLeaves, xNegative) && treeFellerCompatible(xNegative) && !toBeFelled.contains(xNegative))
|
||||
processTreeFelling(xNegative, world, toBeFelled, plugin);
|
||||
if(!plugin.misc.blockWatchList.contains(currentBlock) &&
|
||||
!isTooAgressive(isAirOrLeaves, zPositive) && treeFellerCompatible(zPositive) && !toBeFelled.contains(zPositive))
|
||||
processTreeFelling(zPositive, world, toBeFelled, plugin);
|
||||
if(!plugin.misc.blockWatchList.contains(currentBlock) &&
|
||||
!isTooAgressive(isAirOrLeaves, zNegative) && treeFellerCompatible(zNegative) && !toBeFelled.contains(zNegative))
|
||||
processTreeFelling(zNegative, world, toBeFelled, plugin);
|
||||
|
||||
//Finally go Y+
|
||||
Block yPositive = world.getBlockAt(x, y+1, z);
|
||||
|
||||
if(treeFellerCompatible(yPositive))
|
||||
{
|
||||
if(!plugin.misc.blockWatchList.contains(currentBlock) && !toBeFelled.contains(yPositive))
|
||||
{
|
||||
processTreeFelling(yPositive, world, toBeFelled, plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isTooAgressive(boolean bool, Block block)
|
||||
{
|
||||
return bool && (block.getType() == Material.AIR || block.getType() == Material.LEAVES);
|
||||
}
|
||||
|
||||
public static void woodCuttingProcCheck(Player player, Block block)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
@@ -57,119 +237,6 @@ public class WoodCutting
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void treeFellerCheck(Player player, Block block)
|
||||
{
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
if(m.isAxes(player.getItemInHand()))
|
||||
{
|
||||
if(block != null)
|
||||
{
|
||||
if(!m.abilityBlockCheck(block))
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* CHECK FOR AXE PREP MODE
|
||||
*/
|
||||
if(PP.getAxePreparationMode())
|
||||
{
|
||||
PP.setAxePreparationMode(false);
|
||||
}
|
||||
int ticks = 2;
|
||||
int x = PP.getSkillLevel(SkillType.WOODCUTTING);
|
||||
while(x >= 50)
|
||||
{
|
||||
x-=50;
|
||||
ticks++;
|
||||
}
|
||||
|
||||
if(!PP.getTreeFellerMode() && Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000), LoadProperties.treeFellerCooldown))
|
||||
{
|
||||
player.sendMessage(mcLocale.getString("Skills.TreeFellerOn"));
|
||||
for(Player y : player.getWorld().getPlayers())
|
||||
{
|
||||
if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
|
||||
y.sendMessage(mcLocale.getString("Skills.TreeFellerPlayer", new Object[] {player.getName()}));
|
||||
}
|
||||
PP.setSkillDATS(AbilityType.TREE_FELLER, System.currentTimeMillis()+(ticks*1000));
|
||||
PP.setTreeFellerMode(true);
|
||||
}
|
||||
if(!PP.getTreeFellerMode() && !Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000), LoadProperties.treeFellerCooldown)){
|
||||
player.sendMessage(ChatColor.RED+"You are too tired to use that ability again."
|
||||
+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000), LoadProperties.treeFellerCooldown)+"s)");
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void treeFeller(Block block, Player player, mcMMO plugin){
|
||||
PlayerProfile PP = Users.getProfile(player);
|
||||
int radius = 1;
|
||||
if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 500)
|
||||
radius++;
|
||||
if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 950)
|
||||
radius++;
|
||||
ArrayList<Block> blocklist = new ArrayList<Block>();
|
||||
ArrayList<Block> toAdd = new ArrayList<Block>();
|
||||
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(!plugin.misc.treeFeller.contains(x))
|
||||
plugin.misc.treeFeller.add(x);
|
||||
}
|
||||
toAdd.clear();
|
||||
}
|
||||
public static void addBlocksToTreeFelling(ArrayList<Block> blocklist, ArrayList<Block> 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;
|
||||
}
|
||||
}
|
||||
|
||||
public static void woodcuttingBlockCheck(Player player, Block block, mcMMO plugin)
|
||||
{
|
||||
@@ -183,7 +250,7 @@ public class WoodCutting
|
||||
switch(data)
|
||||
{
|
||||
case 0:
|
||||
xp += LoadProperties.mpine;
|
||||
xp += LoadProperties.moak;
|
||||
break;
|
||||
case 1:
|
||||
xp += LoadProperties.mspruce;
|
||||
@@ -191,6 +258,9 @@ public class WoodCutting
|
||||
case 2:
|
||||
xp += LoadProperties.mbirch;
|
||||
break;
|
||||
case 3:
|
||||
xp += LoadProperties.mjungle;
|
||||
break;
|
||||
}
|
||||
|
||||
if(block.getTypeId() == 17)
|
||||
@@ -209,7 +279,11 @@ public class WoodCutting
|
||||
if(LoadProperties.toolsLoseDurabilityFromAbilities)
|
||||
{
|
||||
if(!player.getItemInHand().containsEnchantment(Enchantment.DURABILITY))
|
||||
m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
|
||||
{
|
||||
short durability = player.getItemInHand().getDurability();
|
||||
durability += LoadProperties.abilityDurabilityLoss;
|
||||
player.getItemInHand().setDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
if(LoadProperties.spoutEnabled)
|
||||
|
||||
@@ -125,7 +125,7 @@ public class SpoutStuff
|
||||
|
||||
for(SkillType y : SkillType.values())
|
||||
{
|
||||
if(y == SkillType.ALL || y == SkillType.ENCHANTING || y == SkillType.ALCHEMY)
|
||||
if(y == SkillType.ALL)
|
||||
continue;
|
||||
|
||||
String theFileNameA = m.getCapitalized(y.toString())+".png";
|
||||
@@ -189,7 +189,7 @@ public class SpoutStuff
|
||||
//Standard XP Icons
|
||||
for(SkillType y : SkillType.values())
|
||||
{
|
||||
if(y == SkillType.ALL || y == SkillType.ENCHANTING || y == SkillType.ALCHEMY)
|
||||
if(y == SkillType.ALL)
|
||||
continue;
|
||||
files.add(new File(dir+"HUD/Standard/"+m.getCapitalized(y.toString())+".png"));
|
||||
files.add(new File(dir+"HUD/Retro/"+m.getCapitalized(y.toString())+"_r.png"));
|
||||
|
||||
@@ -1,269 +0,0 @@
|
||||
/*
|
||||
* This file is from mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
|
||||
*
|
||||
* mmoMinecraft 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 3 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/>.
|
||||
*/
|
||||
|
||||
package com.gmail.nossr50.spout;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.entity.*;
|
||||
import org.getspout.spoutapi.gui.Container;
|
||||
import org.getspout.spoutapi.gui.GenericContainer;
|
||||
import org.getspout.spoutapi.gui.Widget;
|
||||
import org.getspout.spoutapi.gui.WidgetAnchor;
|
||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
||||
|
||||
import com.gmail.nossr50.Users;
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
import com.gmail.nossr50.party.Party;
|
||||
import com.gmail.nossr50.spout.util.GenericLivingEntity;
|
||||
|
||||
public class mmoHelper
|
||||
{
|
||||
|
||||
/**
|
||||
* A map of player containers, each container is their party bar
|
||||
*/
|
||||
public static HashMap<Player, GenericContainer> containers = new HashMap<Player, GenericContainer>();
|
||||
|
||||
/**
|
||||
* Get the percentage health of a Player.
|
||||
* @param player The Player we're interested in
|
||||
* @return The percentage of max health
|
||||
*/
|
||||
public static int getHealth(Entity player) {
|
||||
if (player != null && player instanceof LivingEntity) {
|
||||
try {
|
||||
return Math.min(((LivingEntity) player).getHealth() * 5, 100);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the colour of a LivingEntity target from a player's point of view.
|
||||
* @param player The player viewing the target
|
||||
* @param target The target to name
|
||||
* @return The name to use
|
||||
*/
|
||||
public static String getColor(Player player, LivingEntity target) {
|
||||
if (target instanceof Player) {
|
||||
if (((Player) target).isOp()) {
|
||||
return ChatColor.GOLD.toString();
|
||||
}
|
||||
return ChatColor.YELLOW.toString();
|
||||
} else {
|
||||
if (target instanceof Monster) {
|
||||
if (player != null && player.equals(((Monster) target).getTarget())) {
|
||||
return ChatColor.RED.toString();
|
||||
} else {
|
||||
return ChatColor.YELLOW.toString();
|
||||
}
|
||||
} else if (target instanceof WaterMob) {
|
||||
return ChatColor.GREEN.toString();
|
||||
} else if (target instanceof Flying) {
|
||||
return ChatColor.YELLOW.toString();
|
||||
} else if (target instanceof Animals) {
|
||||
if (player != null && player.equals(((Animals) target).getTarget())) {
|
||||
return ChatColor.RED.toString();
|
||||
} else if (target instanceof Tameable) {
|
||||
Tameable pet = (Tameable) target;
|
||||
if (pet.isTamed()) {
|
||||
return ChatColor.GREEN.toString();
|
||||
} else {
|
||||
return ChatColor.YELLOW.toString();
|
||||
}
|
||||
} else {
|
||||
return ChatColor.GRAY.toString();
|
||||
}
|
||||
} else {
|
||||
return ChatColor.GRAY.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the percentage armour of a Player.
|
||||
* @param player The Player we're interested in
|
||||
* @return The percentage of max armour
|
||||
*/
|
||||
public static int getArmor(Entity player) {
|
||||
if (player != null && player instanceof Player) {
|
||||
int armor = 0, max, multi[] = {15, 30, 40, 15};
|
||||
ItemStack inv[] = ((Player) player).getInventory().getArmorContents();
|
||||
for (int i = 0; i < inv.length; i++) {
|
||||
max = inv[i].getType().getMaxDurability();
|
||||
if (max >= 0) {
|
||||
armor += multi[i] * (max - inv[i].getDurability()) / max;
|
||||
}
|
||||
}
|
||||
return armor;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static String getSimpleName(LivingEntity target, boolean showOwner) {
|
||||
String name = "";
|
||||
if (target instanceof Player) {
|
||||
if (LoadProperties.showDisplayName) {
|
||||
name += ((Player) target).getName();
|
||||
} else {
|
||||
name += ((Player) target).getDisplayName();
|
||||
}
|
||||
} else if (target instanceof HumanEntity) {
|
||||
name += ((HumanEntity) target).getName();
|
||||
} else {
|
||||
if (target instanceof Tameable) {
|
||||
if (((Tameable) target).isTamed()) {
|
||||
if (showOwner && ((Tameable) target).getOwner() instanceof Player) {
|
||||
if (LoadProperties.showDisplayName) {
|
||||
name += ((Player) ((Tameable) target).getOwner()).getName() + "'s ";
|
||||
} else {
|
||||
name += ((Player) ((Tameable) target).getOwner()).getDisplayName() + "'s ";
|
||||
}
|
||||
} else {
|
||||
name += "Pet ";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (target instanceof Chicken) {
|
||||
name += "Chicken";
|
||||
} else if (target instanceof Cow) {
|
||||
name += "Cow";
|
||||
} else if (target instanceof Creeper) {
|
||||
name += "Creeper";
|
||||
} else if (target instanceof Ghast) {
|
||||
name += "Ghast";
|
||||
} else if (target instanceof Giant) {
|
||||
name += "Giant";
|
||||
} else if (target instanceof Pig) {
|
||||
name += "Pig";
|
||||
} else if (target instanceof PigZombie) {
|
||||
name += "PigZombie";
|
||||
} else if (target instanceof Sheep) {
|
||||
name += "Sheep";
|
||||
} else if (target instanceof Slime) {
|
||||
name += "Slime";
|
||||
} else if (target instanceof Skeleton) {
|
||||
name += "Skeleton";
|
||||
} else if (target instanceof Spider) {
|
||||
name += "Spider";
|
||||
} else if (target instanceof Squid) {
|
||||
name += "Squid";
|
||||
} else if (target instanceof Wolf) {
|
||||
name += "Wolf";
|
||||
} else if (target instanceof Zombie) {
|
||||
name += "Zombie";
|
||||
} else if (target instanceof Monster) {
|
||||
name += "Monster";
|
||||
} else if (target instanceof Creature) {
|
||||
name += "Creature";
|
||||
} else {
|
||||
name += "Unknown";
|
||||
}
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
public static LivingEntity[] getPets(HumanEntity player) {
|
||||
ArrayList<LivingEntity> pets = new ArrayList<LivingEntity>();
|
||||
if (player != null && (!(player instanceof Player) || ((Player) player).isOnline())) {
|
||||
String name = player.getName();
|
||||
for (World world : Bukkit.getServer().getWorlds()) {
|
||||
for (LivingEntity entity : world.getLivingEntities()) {
|
||||
if (entity instanceof Tameable && ((Tameable) entity).isTamed() && ((Tameable) entity).getOwner() instanceof Player) {
|
||||
if (name.equals(((Player) ((Tameable) entity).getOwner()).getName())) {
|
||||
pets.add(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LivingEntity[] list = new LivingEntity[pets.size()];
|
||||
pets.toArray(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
public static void update(Player player)
|
||||
{
|
||||
//boolean show_pets = true;
|
||||
Container container = containers.get(player);
|
||||
|
||||
if (container != null)
|
||||
{
|
||||
int index = 0;
|
||||
Widget[] bars = container.getChildren();
|
||||
for (String name : Party.getInstance().getPartyMembersByName(player).meFirst(player.getName()))
|
||||
{
|
||||
GenericLivingEntity bar;
|
||||
if (index >= bars.length)
|
||||
{
|
||||
container.addChild(bar = new GenericLivingEntity());
|
||||
} else {
|
||||
bar = (GenericLivingEntity)bars[index];
|
||||
}
|
||||
bar.setEntity(name, Party.getInstance().isPartyLeader(name, Users.getProfile(Bukkit.getServer().getPlayer(name)).getParty()) ? ChatColor.GREEN + "@" : "");
|
||||
//bar.setTargets(show_pets ? getPets(Bukkit.getServer().getPlayer(name)) : null);
|
||||
index++;
|
||||
}
|
||||
while (index < bars.length) {
|
||||
container.removeChild(bars[index++]);
|
||||
}
|
||||
container.updateLayout();
|
||||
}
|
||||
}
|
||||
|
||||
public static void initialize(SpoutPlayer sPlayer, Plugin plugin)
|
||||
{
|
||||
GenericContainer container = new GenericContainer();
|
||||
|
||||
container.setAlign(WidgetAnchor.TOP_LEFT)
|
||||
.setAnchor(WidgetAnchor.TOP_LEFT)
|
||||
.setX(3)
|
||||
.setY(3)
|
||||
.setWidth(427)
|
||||
.setHeight(240)
|
||||
.setFixed(true);
|
||||
|
||||
mmoHelper.containers.put(sPlayer, container);
|
||||
|
||||
sPlayer.getMainScreen().attachWidget(plugin, container);
|
||||
}
|
||||
/**
|
||||
* Update all parties.
|
||||
*/
|
||||
public static void updateAll() {
|
||||
for(Player x : Bukkit.getServer().getOnlinePlayers())
|
||||
{
|
||||
if(Users.getProfile(x).inParty())
|
||||
{
|
||||
update(x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,112 +0,0 @@
|
||||
/*
|
||||
* This file is part of mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
|
||||
*
|
||||
* mmoMinecraft 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 3 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/>.
|
||||
*/
|
||||
|
||||
package com.gmail.nossr50.spout.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Case insensitive ArrayList<String>.
|
||||
* Overrides the .contains(), .indexOf(), .lastIndexOf() and .remove() methods.
|
||||
*/
|
||||
public class ArrayListString extends ArrayList<String> {
|
||||
|
||||
private static final long serialVersionUID = -8111006526598412404L;
|
||||
|
||||
/**
|
||||
* Returns true if this list contains the specified string.
|
||||
* @param o String whose presence in this list is to be tested
|
||||
* @return true if this list contains the specified string
|
||||
*/
|
||||
public boolean contains(String o) {
|
||||
for (String e : this) {
|
||||
if (o == null ? e == null : o.equalsIgnoreCase(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string.
|
||||
* @param o String to search for
|
||||
* @return The index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string
|
||||
*/
|
||||
public int indexOf(String o) {
|
||||
for (int i = 0; i < this.size(); i++) {
|
||||
if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string.
|
||||
* @param o String to search for
|
||||
* @return The index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string
|
||||
*/
|
||||
public int lastIndexOf(String o) {
|
||||
for (int i = size() - 1; i >= 0; i--) {
|
||||
if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the first occurrence of the specified string from this list, if it is present. If the list does not contain the string, it is unchanged.
|
||||
* @param o String to be removed from this list, if present
|
||||
* @return true if this list contained the specified string
|
||||
*/
|
||||
public boolean remove(String o) {
|
||||
int i = indexOf(o);
|
||||
if (i != -1) {
|
||||
remove(i);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the element at the specified position in this list.
|
||||
* This is for finding the correct capitalisation of an element.
|
||||
* @param index String to search for
|
||||
* @return the correctly capitalised element
|
||||
*/
|
||||
public String get(String index) {
|
||||
int i = this.indexOf(index);
|
||||
if (i != -1) {
|
||||
return this.get(i);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ArrayListString meFirst(String name) {
|
||||
ArrayListString copy = new ArrayListString();
|
||||
if (this.contains(name)) {
|
||||
copy.add(name);
|
||||
}
|
||||
for (String next : this) {
|
||||
if (!next.equalsIgnoreCase(name)) {
|
||||
copy.add(next);
|
||||
}
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
* This file is part of mmoMinecraft (https://github.com/mmoMinecraftDev).
|
||||
*
|
||||
* mmoMinecraft 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 3 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/>.
|
||||
*/
|
||||
package com.gmail.nossr50.spout.util;
|
||||
|
||||
import org.getspout.spoutapi.gui.GenericTexture;
|
||||
|
||||
import com.gmail.nossr50.config.LoadProperties;
|
||||
|
||||
public final class GenericFace extends GenericTexture {
|
||||
|
||||
private static String facePath = "http://face.rycochet.net/";
|
||||
private static int defaultSize = 8;
|
||||
private String name;
|
||||
|
||||
public GenericFace() {
|
||||
this("", defaultSize);
|
||||
}
|
||||
|
||||
public GenericFace(String name) {
|
||||
this(name, defaultSize);
|
||||
}
|
||||
|
||||
public GenericFace(String name, int size) {
|
||||
if (LoadProperties.showFaces) {
|
||||
this.setWidth(size).setHeight(size).setFixed(true);
|
||||
setName(name);
|
||||
} else {
|
||||
this.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public GenericFace setName(String name) {
|
||||
if (LoadProperties.showFaces) {
|
||||
this.name = name == null ? "" : name;
|
||||
super.setUrl(facePath + this.name + ".png");
|
||||
super.setDirty(true);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericFace setSize(int size) {
|
||||
if (LoadProperties.showFaces) {
|
||||
super.setWidth(size).setHeight(size);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,227 +0,0 @@
|
||||
/*
|
||||
* This file is part of mmoHelperMinecraft (https://github.com/mmoHelperMinecraftDev).
|
||||
*
|
||||
* mmoHelperMinecraft 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 3 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/>.
|
||||
*/
|
||||
package com.gmail.nossr50.spout.util;
|
||||
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.getspout.spoutapi.gui.*;
|
||||
|
||||
import com.gmail.nossr50.spout.mmoHelper;
|
||||
|
||||
public class GenericLivingEntity extends GenericContainer {
|
||||
|
||||
private Container _space;
|
||||
private Label _label;
|
||||
private Gradient _health;
|
||||
private Gradient _armor;
|
||||
private GenericFace _face;
|
||||
private int health = 100;
|
||||
private int armor = 100;
|
||||
private int def_width = 80;
|
||||
private int def_height = 14;
|
||||
private boolean target = false;
|
||||
String face = "~";
|
||||
String label = "";
|
||||
|
||||
public GenericLivingEntity() {
|
||||
super();
|
||||
Color black = new Color(0, 0, 0, 0.75f);
|
||||
|
||||
this.addChildren(
|
||||
new GenericContainer( // Used for the bar, this.children with an index 1+ are targets
|
||||
_space = (Container) new GenericContainer()
|
||||
.setMinWidth(def_width / 4)
|
||||
.setMaxWidth(def_width / 4)
|
||||
.setVisible(target),
|
||||
new GenericContainer(
|
||||
new GenericGradient()
|
||||
.setTopColor(black)
|
||||
.setBottomColor(black)
|
||||
.setPriority(RenderPriority.Highest),
|
||||
new GenericContainer(
|
||||
_health = (Gradient) new GenericGradient(),
|
||||
_armor = (Gradient) new GenericGradient()
|
||||
) .setMargin(1)
|
||||
.setPriority(RenderPriority.High),
|
||||
new GenericContainer(
|
||||
_face = (GenericFace) new GenericFace()
|
||||
.setMargin(3, 0, 3, 3),
|
||||
_label = (Label) new GenericLabel()
|
||||
.setMargin(3)
|
||||
) .setLayout(ContainerType.HORIZONTAL)
|
||||
) .setLayout(ContainerType.OVERLAY)
|
||||
) .setLayout(ContainerType.HORIZONTAL)
|
||||
.setMargin(0, 0, 1, 0)
|
||||
.setFixed(true)
|
||||
.setWidth(def_width)
|
||||
.setHeight(def_height)
|
||||
) .setAlign(WidgetAnchor.TOP_LEFT)
|
||||
.setFixed(true)
|
||||
.setWidth(def_width)
|
||||
.setHeight(def_height + 1);
|
||||
|
||||
this.setHealthColor(new Color(1f, 0, 0, 0.75f));
|
||||
this.setArmorColor(new Color(0.75f, 0.75f, 0.75f, 0.75f));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the display from a possibly offline player
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public GenericLivingEntity setEntity(String name) {
|
||||
return setEntity(name, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the display from a possibly offline player
|
||||
* @param name
|
||||
* @param prefix Place before the name
|
||||
* @return
|
||||
*/
|
||||
public GenericLivingEntity setEntity(String name, String prefix) {
|
||||
Player player = this.getPlugin().getServer().getPlayer(name);
|
||||
if (player != null && player.isOnline()) {
|
||||
return setEntity(player, prefix);
|
||||
}
|
||||
setHealth(0);
|
||||
setArmor(0);
|
||||
setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, null) + name);
|
||||
setFace("~" + name);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the display from a player or living entity
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
public GenericLivingEntity setEntity(LivingEntity entity) {
|
||||
return setEntity(entity, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the display from a player or living entity
|
||||
* @param entity
|
||||
* @param prefix Place before the name
|
||||
* @return
|
||||
*/
|
||||
public GenericLivingEntity setEntity(LivingEntity entity, String prefix) {
|
||||
if (entity != null && entity instanceof LivingEntity) {
|
||||
setHealth(mmoHelper.getHealth(entity)); // Needs a maxHealth() check
|
||||
setArmor(mmoHelper.getArmor(entity));
|
||||
setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, entity) + mmoHelper.getSimpleName(entity, !target));
|
||||
setFace(entity instanceof Player ? ((Player)entity).getName() : "+" + mmoHelper.getSimpleName(entity,false).replaceAll(" ", ""));
|
||||
} else {
|
||||
setHealth(0);
|
||||
setArmor(0);
|
||||
setLabel("");
|
||||
setFace("");
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the targets of this entity - either actual targets, or pets etc
|
||||
* @param targets
|
||||
* @return
|
||||
*/
|
||||
public GenericLivingEntity setTargets(LivingEntity... targets) {
|
||||
Widget[] widgets = this.getChildren();
|
||||
if (targets == null) {
|
||||
targets = new LivingEntity[0]; // zero-length array is easier to handle
|
||||
}
|
||||
for (int i=targets.length + 1; i<widgets.length; i++) {
|
||||
this.removeChild(widgets[i]);
|
||||
}
|
||||
for (int i=0; i<targets.length; i++) {
|
||||
GenericLivingEntity child;
|
||||
if (widgets.length > i + 1) {
|
||||
child = (GenericLivingEntity) widgets[i+1];
|
||||
} else {
|
||||
this.addChild(child = new GenericLivingEntity());
|
||||
}
|
||||
child.setTarget(true);
|
||||
child.setEntity(targets[i]);
|
||||
}
|
||||
setHeight((targets.length + 1) * (def_height + 1));
|
||||
updateLayout();
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setTarget(boolean target) {
|
||||
if (this.target != target) {
|
||||
this.target = target;
|
||||
_space.setVisible(target);
|
||||
updateLayout();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setHealth(int health) {
|
||||
if (this.health != health) {
|
||||
this.health = health;
|
||||
updateLayout();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setHealthColor(Color color) {
|
||||
_health.setTopColor(color).setBottomColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setArmor(int armor) {
|
||||
if (this.armor != armor) {
|
||||
this.armor = armor;
|
||||
updateLayout();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setArmorColor(Color color) {
|
||||
_armor.setTopColor(color).setBottomColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setLabel(String label) {
|
||||
if (!this.label.equals(label)) {
|
||||
this.label = label;
|
||||
_label.setText(label).setDirty(true);
|
||||
updateLayout();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public GenericLivingEntity setFace(String name) {
|
||||
if (!this.face.equals(name)) {
|
||||
this.face = name;
|
||||
_face.setVisible(!name.isEmpty());
|
||||
_face.setName(name);
|
||||
updateLayout();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Container updateLayout() {
|
||||
super.updateLayout();
|
||||
_armor.setWidth((_armor.getContainer().getWidth() * armor) / 100).setDirty(true);
|
||||
_health.setWidth((_health.getContainer().getWidth() * health) / 100).setDirty(true);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
101
src/main/java/com/gmail/nossr50/util/Page.java
Normal file
101
src/main/java/com/gmail/nossr50/util/Page.java
Normal file
@@ -0,0 +1,101 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.m;
|
||||
import com.gmail.nossr50.datatypes.SkillType;
|
||||
import com.gmail.nossr50.locale.mcLocale;
|
||||
|
||||
public class Page {
|
||||
|
||||
public static int getTotalPageNumber(String address)
|
||||
{
|
||||
String[] addressSplit = mcLocale.getString(address).split("\n");
|
||||
if(addressSplit.length <= 8)
|
||||
return 1;
|
||||
else
|
||||
return (addressSplit.length/8)+1;
|
||||
}
|
||||
|
||||
public static ArrayList<String> grabPageContents(String header, String address, int pagenum)
|
||||
{
|
||||
int pageIndexStart = 0;
|
||||
|
||||
//Determine what string to start at
|
||||
if(pagenum > 1)
|
||||
{
|
||||
pageIndexStart = 8*(pagenum-1);
|
||||
}
|
||||
|
||||
ArrayList<String> allStrings = new ArrayList<String>();
|
||||
String split[] = mcLocale.getString(address).split("\n");
|
||||
|
||||
allStrings.add(ChatColor.GOLD+"-="+ChatColor.GREEN+header+ChatColor.GOLD+"=-"); //So stylish
|
||||
|
||||
//Add targeted strings
|
||||
|
||||
while(allStrings.size() < 9)
|
||||
{
|
||||
if(pageIndexStart+allStrings.size() > split.length)
|
||||
allStrings.add("");
|
||||
else
|
||||
allStrings.add(split[pageIndexStart+allStrings.size()-1]);
|
||||
}
|
||||
|
||||
allStrings.add("Page "+pagenum+" of "+getTotalPageNumber(address));
|
||||
return allStrings;
|
||||
}
|
||||
|
||||
public static void clearChat(Player player)
|
||||
{
|
||||
for(int x = 0; x < 20; x++)
|
||||
{
|
||||
player.sendMessage("");
|
||||
}
|
||||
}
|
||||
|
||||
public static void grabGuidePageForSkill(SkillType skilltype, Player player, String[] args)
|
||||
{
|
||||
String capitalized = m.getCapitalized(skilltype.toString());
|
||||
player.sendMessage(ChatColor.DARK_AQUA+"Guide for "+capitalized+" available type /"+skilltype.toString().toLowerCase()+" ? [Page#]");
|
||||
if (args.length >= 1)
|
||||
{
|
||||
if(args[0].equals("?"))
|
||||
{
|
||||
|
||||
String address = "Guides."+capitalized;
|
||||
|
||||
if(args.length > 1 && m.isInt(args[1]) && m.getInt(args[1]) <= Page.getTotalPageNumber(address))
|
||||
{
|
||||
Page.clearChat(player);
|
||||
for(String target : Page.grabPageContents(capitalized+" Guide", address, m.getInt(args[1])))
|
||||
{
|
||||
player.sendMessage(target);
|
||||
}
|
||||
} else if(args.length == 1)
|
||||
{
|
||||
Page.clearChat(player);
|
||||
for(String target : Page.grabPageContents(capitalized+" Guide", address, 1))
|
||||
{
|
||||
player.sendMessage(target);
|
||||
}
|
||||
}
|
||||
else if(args.length > 1 && m.getInt(args[1]) > Page.getTotalPageNumber(address))
|
||||
{
|
||||
player.sendMessage("That page doesn't exist, there are only "+Page.getTotalPageNumber(address)+" total pages");
|
||||
}
|
||||
else if(args.length > 1 && !m.isInt(args[1]))
|
||||
{
|
||||
player.sendMessage("Not a valid page number!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendMessage(ChatColor.RED + "Usage is /"+skilltype.toString().toLowerCase()+" ? [page]");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,306 @@
|
||||
#
|
||||
# mcMMO configuration
|
||||
# First generated on ${project.version}-b${BUILD_NUMBER}
|
||||
#
|
||||
#####
|
||||
|
||||
#
|
||||
# Settings for mcMMO in general
|
||||
###
|
||||
General:
|
||||
Locale: en_us
|
||||
MOTD:
|
||||
Enabled: true
|
||||
#Amount of time (in minutes) to wait between saves of player information
|
||||
Save_Interval: 10
|
||||
#Allow mcMMO to report on basic anonymous usage
|
||||
Stats_Tracking: true
|
||||
#Allow mcMMO to inform other plugins of damage being dealt
|
||||
Event_Callback: true
|
||||
|
||||
#
|
||||
# Settings for using a mySQL database
|
||||
###
|
||||
MySQL:
|
||||
Enabled: false
|
||||
Database:
|
||||
User:
|
||||
Name: UserName
|
||||
Password: UserPassword
|
||||
Name: DataBaseName
|
||||
TablePrefix: mcmmo_
|
||||
Server:
|
||||
Port: 3306
|
||||
Address: localhost
|
||||
|
||||
#
|
||||
# Settings for mcMMO items
|
||||
###
|
||||
Items:
|
||||
Chimaera_Wing:
|
||||
Enabled: true
|
||||
Feather_Cost: 10
|
||||
Item_ID: 288
|
||||
|
||||
#
|
||||
# Settings for Arcane Forging
|
||||
###
|
||||
Arcane_Forging:
|
||||
May_Lose_Enchants: true
|
||||
Rank_Levels:
|
||||
Rank_1: 100
|
||||
Rank_2: 250
|
||||
Rank_3: 500
|
||||
Rank_4: 750
|
||||
Keep_Enchants:
|
||||
Chance:
|
||||
Rank_4: 40
|
||||
Rank_3: 30
|
||||
Rank_2: 20
|
||||
Rank_1: 10
|
||||
Downgrades:
|
||||
Enabled: true
|
||||
Chance:
|
||||
Rank_4: 15
|
||||
Rank_3: 25
|
||||
Rank_2: 50
|
||||
Rank_1: 75
|
||||
|
||||
#
|
||||
# Settings for Fishing
|
||||
###
|
||||
Fishing:
|
||||
Drops_Enabled: true
|
||||
Tier_Levels:
|
||||
Tier1: 0
|
||||
Tier2: 200
|
||||
Tier3: 400
|
||||
Tier4: 600
|
||||
Tier5: 800
|
||||
|
||||
#
|
||||
# Settings for Abilities
|
||||
###
|
||||
Abilities:
|
||||
Enabled: true
|
||||
Messages: true
|
||||
Activation:
|
||||
Only_Activate_When_Sneaking: false
|
||||
Cooldowns:
|
||||
Blast_Mining: 60
|
||||
Giga_Drill_Breaker: 240
|
||||
Berserk: 240
|
||||
Green_Terra: 240
|
||||
Skull_Splitter: 240
|
||||
Serrated_Strikes: 240
|
||||
Tree_Feller: 240
|
||||
Super_Breaker: 240
|
||||
Limits:
|
||||
Tree_Feller_Threshold: 500
|
||||
Tools:
|
||||
Durability_Loss_Enabled: true
|
||||
Durability_Loss: 2
|
||||
|
||||
#
|
||||
# Settings for Skills
|
||||
###
|
||||
Skills:
|
||||
Acrobatics:
|
||||
Level_Cap: 0 #Level cap of 0 for no limit
|
||||
Archery:
|
||||
Level_Cap: 0
|
||||
Axes:
|
||||
Level_Cap: 0
|
||||
Excavation:
|
||||
Level_Cap: 0
|
||||
Requires_Shovel: true
|
||||
Fishing:
|
||||
Level_Cap: 0
|
||||
Herbalism:
|
||||
Level_Cap: 0
|
||||
Green_Thumb:
|
||||
Cobble_To_Mossy: true
|
||||
SmoothBrick_To_MossyBrick: true
|
||||
Dirt_To_Grass: true
|
||||
Hunger_Bonus: true
|
||||
Mining:
|
||||
Level_Cap: 0
|
||||
Requires_Pickaxe: true
|
||||
Detonator_ID: 259
|
||||
Repair:
|
||||
Level_Cap: 0
|
||||
Anvil_Messages: true
|
||||
Anvil_ID: 42
|
||||
Can_Repair_Armor: true
|
||||
Can_Repair_Tools: true
|
||||
Leather:
|
||||
Name: Leather
|
||||
ID: 334
|
||||
String:
|
||||
Name: String
|
||||
ID: 287
|
||||
Stone:
|
||||
Name: Cobblestone
|
||||
Level_Required: 0
|
||||
ID: 4
|
||||
Wood:
|
||||
Name: Wood Planks
|
||||
ID: 5
|
||||
Gold:
|
||||
Name: Gold Bars
|
||||
Level_Required: 0
|
||||
ID: 266
|
||||
Iron:
|
||||
Name: Iron Bars
|
||||
Level_Required: 0
|
||||
ID: 265
|
||||
Diamond:
|
||||
Name: Diamond
|
||||
Level_Required: 50
|
||||
ID: 264
|
||||
Swords:
|
||||
Level_Cap: 0
|
||||
Taming:
|
||||
Level_Cap: 0
|
||||
Call_Of_The_Wild:
|
||||
Bones_Required: 10
|
||||
Unarmed:
|
||||
Level_Cap: 0
|
||||
Woodcutting:
|
||||
Level_Cap: 0
|
||||
Requires_Axe: true
|
||||
|
||||
#
|
||||
# Settings for XP distribution
|
||||
###
|
||||
Experience:
|
||||
Gains:
|
||||
Mobspawners:
|
||||
Enabled: false
|
||||
Multiplier:
|
||||
PVP: 1
|
||||
Global: 1.0
|
||||
PVP:
|
||||
Rewards: true
|
||||
Formula:
|
||||
Multiplier:
|
||||
Swords: 1.0
|
||||
Taming: 1.0
|
||||
Acrobatics: 1.0
|
||||
Excavation: 1.0
|
||||
Herbalism: 1.0
|
||||
Unarmed: 1.0
|
||||
Woodcutting: 1.0
|
||||
Mining: 1.0
|
||||
Archery: 1.0
|
||||
Axes: 1.0
|
||||
Repair: 1.0
|
||||
Fishing: 1.0
|
||||
Fishing:
|
||||
Base: 800
|
||||
Excavation:
|
||||
Base: 40
|
||||
Woodcutting:
|
||||
Oak: 70
|
||||
Spruce: 80
|
||||
Birch: 90
|
||||
Jungle: 100
|
||||
Herbalism:
|
||||
Sugar_Cane: 30
|
||||
Cactus: 30
|
||||
Flowers: 100
|
||||
Pumpkin: 20
|
||||
Mushrooms: 150
|
||||
Wheat: 50
|
||||
Melon: 20
|
||||
Nether_Wart: 50
|
||||
Lily_Pads: 100
|
||||
Vines: 10
|
||||
Mining:
|
||||
Sandstone: 30
|
||||
Glowstone: 30
|
||||
Lapis: 400
|
||||
Obsidian: 150
|
||||
Stone: 30
|
||||
Netherrack: 30
|
||||
Gold: 350
|
||||
Redstone: 150
|
||||
Coal: 100
|
||||
Diamond: 750
|
||||
Iron: 250
|
||||
End_Stone: 150
|
||||
Moss_Stone: 30
|
||||
Taming:
|
||||
Animal_Taming:
|
||||
Wolf: 250
|
||||
Ocelot: 500
|
||||
Combat:
|
||||
Multiplier:
|
||||
Animals: 1.0
|
||||
Creeper: 4.0
|
||||
Skeleton: 2.0
|
||||
Spider: 3.0
|
||||
Zombie: 2.0
|
||||
Pig_Zombie: 3.0
|
||||
Enderman: 2.0
|
||||
Cave_Spider: 3.0
|
||||
Silverfish: 3.0
|
||||
Blaze: 3.0
|
||||
Magma_Cube: 2.0
|
||||
Ender_Dragon: 8.0
|
||||
Slime: 2.0
|
||||
Ghast: 3.0
|
||||
#
|
||||
# Settings for commands
|
||||
###
|
||||
Commands:
|
||||
invite:
|
||||
Enabled: true
|
||||
mctop:
|
||||
Enabled: true
|
||||
xplock:
|
||||
Enabled: true
|
||||
inspect:
|
||||
Enabled: true
|
||||
mcc:
|
||||
Enabled: true
|
||||
mcremove:
|
||||
Enabled: true
|
||||
mmoedit:
|
||||
Enabled: true
|
||||
accept:
|
||||
Enabled: true
|
||||
mcstats:
|
||||
Enabled: true
|
||||
mcability:
|
||||
Enabled: true
|
||||
party:
|
||||
Enabled: true
|
||||
xprate:
|
||||
Enabled: true
|
||||
mcgod:
|
||||
Enabled: true
|
||||
mcmmo:
|
||||
Enabled: true
|
||||
Donate_Message: true
|
||||
mcrefresh:
|
||||
Enabled: true
|
||||
addxp:
|
||||
Enabled: true
|
||||
addlevels:
|
||||
Enabled: true
|
||||
ptp:
|
||||
Enabled: true
|
||||
p:
|
||||
Enabled: true
|
||||
Display_Names: true
|
||||
a:
|
||||
Enabled: true
|
||||
Display_Names: true
|
||||
|
||||
#
|
||||
# Settings for Spout features
|
||||
###
|
||||
Spout:
|
||||
Menu:
|
||||
Key: KEY_M
|
||||
@@ -79,285 +377,4 @@ Spout:
|
||||
Mining:
|
||||
BLUE: 0.75
|
||||
GREEN: 0.3
|
||||
RED: 0.3
|
||||
Fishing:
|
||||
Drops:
|
||||
Gold_Tools: true
|
||||
Diamond_Armor: true
|
||||
Stone_Tools: true
|
||||
Diamonds: true
|
||||
Iron_Armor: true
|
||||
Iron_Tools: true
|
||||
Diamond_Tools: true
|
||||
Item_Drops_Enabled: true
|
||||
Records: true
|
||||
Blaze_Rod: true
|
||||
Leather_Armor: true
|
||||
Drop_Chance:
|
||||
Tier_1: 20
|
||||
Tier_2: 25
|
||||
Tier_3: 30
|
||||
Tier_4: 35
|
||||
Tier_5: 40
|
||||
Gold_Armor: true
|
||||
Glowstone_Dust: true
|
||||
Ender_Pearl: true
|
||||
Wooden_Tools: true
|
||||
Skills:
|
||||
Acrobatics:
|
||||
Level_Cap: 0 #Level cap of 0 for no limit
|
||||
Archery:
|
||||
Level_Cap: 0
|
||||
Axes:
|
||||
Level_Cap: 0
|
||||
Excavation:
|
||||
Level_Cap: 0
|
||||
Requires_Shovel: true
|
||||
Fishing:
|
||||
Level_Cap: 0
|
||||
Herbalism:
|
||||
Level_Cap: 0
|
||||
Green_Thumb:
|
||||
Cobble_To_Mossy: true
|
||||
SmoothBrick_To_MossyBrick: true
|
||||
Dirt_To_Grass: true
|
||||
Mining:
|
||||
Level_Cap: 0
|
||||
Requires_Pickaxe: true
|
||||
Repair:
|
||||
Level_Cap: 0
|
||||
Leather:
|
||||
Name: Leather
|
||||
ID: 334
|
||||
String:
|
||||
Name: String
|
||||
ID: 287
|
||||
Stone:
|
||||
Name: Cobblestone
|
||||
ID: 4
|
||||
Wood:
|
||||
Name: Wood Planks
|
||||
ID: 5
|
||||
Gold:
|
||||
Name: Gold Bars
|
||||
ID: 266
|
||||
Anvil_Messages: true
|
||||
Anvil_ID: 42
|
||||
Diamond:
|
||||
Name: Diamond
|
||||
Level_Required: 50
|
||||
ID: 264
|
||||
Iron:
|
||||
Name: Iron Bars
|
||||
ID: 265
|
||||
Swords:
|
||||
Level_Cap: 0
|
||||
Taming:
|
||||
Level_Cap: 0
|
||||
Call_Of_The_Wild:
|
||||
Bones_Required: 10
|
||||
Unarmed:
|
||||
Level_Cap: 0
|
||||
Woodcutting:
|
||||
Level_Cap: 0
|
||||
Requires_Axe: true
|
||||
Experience:
|
||||
Fishing:
|
||||
Base: 800
|
||||
Formula:
|
||||
Multiplier:
|
||||
Swords: 1.0
|
||||
Taming: 1.0
|
||||
Acrobatics: 1.0
|
||||
Sorcery: 1.0
|
||||
Excavation: 1.0
|
||||
Herbalism: 1.0
|
||||
Unarmed: 1.0
|
||||
Woodcutting: 1.0
|
||||
Mining: 1.0
|
||||
Archery: 1.0
|
||||
Axes: 1.0
|
||||
Repair: 1.0
|
||||
Gains:
|
||||
Mobspawners:
|
||||
Enabled: false
|
||||
Multiplier:
|
||||
PVP: 1
|
||||
Global: 1.0
|
||||
PVP:
|
||||
Rewards: true
|
||||
Excavation:
|
||||
Base: 40
|
||||
Cake: 3000
|
||||
Sulphur: 30
|
||||
Bones: 30
|
||||
Map: 200
|
||||
Slimeballs: 100
|
||||
Bucket: 100
|
||||
Apple: 100
|
||||
Mushroom: 80
|
||||
Eggs: 100
|
||||
Slowsand: 80
|
||||
Watch: 200
|
||||
Web: 150
|
||||
String: 200
|
||||
Glowstone: 80
|
||||
Music: 3000
|
||||
Diamond: 1000
|
||||
Cocoa_Beans: 100
|
||||
Woodcutting:
|
||||
Birch: 70
|
||||
Spruce: 80
|
||||
Pine: 90
|
||||
Herbalism:
|
||||
Sugar_Cane: 30
|
||||
Cactus: 30
|
||||
Flowers: 100
|
||||
Pumpkin: 20
|
||||
Mushrooms: 150
|
||||
Wheat: 50
|
||||
Melon: 20
|
||||
Nether_Wart: 50
|
||||
Lily_Pads: 100
|
||||
Vines: 10
|
||||
Mining:
|
||||
Sandstone: 30
|
||||
Glowstone: 30
|
||||
Lapis: 400
|
||||
Obsidian: 150
|
||||
Stone: 30
|
||||
Netherrack: 30
|
||||
Gold: 350
|
||||
Redstone: 150
|
||||
Coal: 100
|
||||
Diamond: 750
|
||||
Iron: 250
|
||||
Nether_Brick: 30
|
||||
End_Stone: 150
|
||||
Moss_Stone: 30
|
||||
Stone_Brick: 30
|
||||
MySQL:
|
||||
Enabled: false
|
||||
Database:
|
||||
User:
|
||||
Name: UserName
|
||||
Password: UserPassword
|
||||
Name: DataBaseName
|
||||
TablePrefix: mcmmo_
|
||||
Server:
|
||||
Port: 3306
|
||||
Address: localhost
|
||||
XP:
|
||||
Gains:
|
||||
Mobspawners:
|
||||
Enabled: false
|
||||
PVP:
|
||||
Rewards: true
|
||||
General:
|
||||
HP_Regeneration:
|
||||
Enabled: true
|
||||
Locale: en_us
|
||||
MySpawn:
|
||||
Enabled: true
|
||||
MOTD:
|
||||
Enabled: true
|
||||
#Amount of time (in minutes) to wait between saves of player information
|
||||
Save_Interval: 10
|
||||
#Allow mcMMO to report on basic anonymous usage
|
||||
Stats_Tracking: true
|
||||
Excavation:
|
||||
Drops:
|
||||
Cake: true
|
||||
Sulphur: true
|
||||
Bones: true
|
||||
Apples: true
|
||||
Map: true
|
||||
Slimeballs: true
|
||||
Bucket: true
|
||||
Netherrack: true
|
||||
Mushrooms: true
|
||||
Eggs: true
|
||||
Slowsand: true
|
||||
Watch: true
|
||||
Web: true
|
||||
String: true
|
||||
Glowstone: true
|
||||
Music: true
|
||||
Diamond: true
|
||||
Cocoa_Beans: true
|
||||
Arcane_Forging:
|
||||
Keep_Enchants:
|
||||
Chance:
|
||||
Rank_4: 40
|
||||
Rank_3: 30
|
||||
Rank_2: 20
|
||||
Rank_1: 10
|
||||
May_Lose_Enchants:
|
||||
Enabled: true
|
||||
Downgrades:
|
||||
Enabled: true
|
||||
Chance:
|
||||
Rank_4: 15
|
||||
Rank_3: 25
|
||||
Rank_2: 50
|
||||
Rank_1: 75
|
||||
Abilities:
|
||||
Activation:
|
||||
Only_Activate_When_Sneaking: false
|
||||
Enabled: true
|
||||
Messages: true
|
||||
Cooldowns:
|
||||
Giga_Drill_Breaker: 240
|
||||
Berserk: 240
|
||||
Green_Terra: 240
|
||||
Skull_Splitter: 240
|
||||
Serrated_Strikes: 240
|
||||
Tree_Feller: 240
|
||||
Super_Breaker: 240
|
||||
Tools:
|
||||
Durability_Loss: 2
|
||||
Durability_Loss_Enabled: true
|
||||
Commands:
|
||||
invite:
|
||||
Enabled: true
|
||||
mctop:
|
||||
Enabled: true
|
||||
xplock:
|
||||
Enabled: true
|
||||
whois:
|
||||
Enabled: true
|
||||
mcc:
|
||||
Enabled: true
|
||||
mmoedit:
|
||||
Enabled: true
|
||||
accept:
|
||||
Enabled: true
|
||||
stats:
|
||||
Enabled: true
|
||||
mcability:
|
||||
Enabled: true
|
||||
party:
|
||||
Enabled: true
|
||||
xprate:
|
||||
Enabled: true
|
||||
mcgod:
|
||||
Enabled: true
|
||||
mcmmo:
|
||||
Enabled: true
|
||||
Donate_Message: true
|
||||
mcrefresh:
|
||||
Enabled: true
|
||||
myspawn:
|
||||
Enabled: true
|
||||
addxp:
|
||||
Enabled: true
|
||||
clearmyspawn:
|
||||
Enabled: true
|
||||
ptp:
|
||||
Enabled: true
|
||||
p:
|
||||
Enabled: true
|
||||
Display_Names: true
|
||||
a:
|
||||
Enabled: true
|
||||
Display_Names: true
|
||||
RED: 0.3
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[party member name] [[YELLOW]]- Teleport zu Gruppenmitglied
|
||||
m.mccOtherCommands=[[DARK_AQUA]]_______[[YELLOW]] ANDERE BEFEHLE [[DARK_AQUA]]_______
|
||||
m.mccStats=[[YELLOW]]- zeigt deinen Status
|
||||
m.mccLeaderboards=[[YELLOW]]- Ranglisten
|
||||
m.mccMySpawn=[[YELLOW]]- Teleport zum Spawnpunkt
|
||||
m.mccClearMySpawn=[[YELLOW]]- Spawnpunkt loeschen
|
||||
m.mccToggleAbility=[[YELLOW]]- Faehigkeitsaktivierung mit rechtsklick an/aus schalten
|
||||
m.mccAdminToggle=[[YELLOW]]- Adminchat aktivieren
|
||||
m.mccWhois=[[WHITE]][playername] [[YELLOW]]- Detailierte Spielerinfos zeigen
|
||||
m.mccInspect=[[WHITE]][playername] [[YELLOW]]- Detailierte Spielerinfos zeigen
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[YELLOW]]- Ziel modifizieren
|
||||
m.mccMcGod=[[YELLOW]]- God Mode
|
||||
m.mccSkillInfo=[[WHITE]][skillname] [[YELLOW]]- Detailierte Skillinfos zeigen
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[YELLOW]]{0}: [[GREEN]]{1}
|
||||
m.Effects=EFFEKTE
|
||||
m.YourStats=[[DARK_AQUA]]_______ [[YELLOW]]DEINE WERTE [[DARK_AQUA]]_______
|
||||
m.SkillTaming=Bestienkunde (Taming)
|
||||
m.XPGainTaming=[[YELLOW]]wenn deine Woelfe angreifen
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=[[YELLOW]]Bestienkunde
|
||||
m.EffectsTaming1_1=[[AQUA]]mit Knochen schlagen inspiziert Woelfe
|
||||
m.EffectsTaming2_0=[[YELLOW]]Biss
|
||||
@@ -99,11 +97,19 @@ m.EffectsAxes1_0=[[YELLOW]]Schaedelspalter (Faehigkeit)
|
||||
m.EffectsAxes1_1=[[AQUA]]Verursacht Flaechenschaden
|
||||
m.EffectsAxes2_0=[[YELLOW]]Kritischer Schlag
|
||||
m.EffectsAxes2_1=[[AQUA]]doppelter Schaden
|
||||
m.EffectsAxes3_0=[[YELLOW]]Axtmeister (500 Skilllevel)
|
||||
m.EffectsAxes3_1=[[AQUA]]Modifiziert Schaden
|
||||
m.AbilLockAxes1=[[DARK_AQUA]]gesperrt bis 500+ Skilllevel(Axtmeister)
|
||||
m.AbilBonusAxes1_0=[[YELLOW]]Axtmeister
|
||||
m.AbilBonusAxes1_1=[[AQUA]]4 Bonus-Schaden
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[YELLOW]]Chance fuer kritische Treffer: [[GREEN]]{0}%
|
||||
m.AxesSkullLength=[[YELLOW]]Schaedelspalter Dauer: [[GREEN]]{0}s
|
||||
m.SkillSwords=Schwert (Swords)
|
||||
@@ -161,18 +167,12 @@ m.EffectsUnarmed1_0=[[YELLOW]]Berserker (Faehigkeit)
|
||||
m.EffectsUnarmed1_1=[[AQUA]]+50% Schaden, bricht weiches Material (Bsp. Erde)
|
||||
m.EffectsUnarmed2_0=[[YELLOW]]Entwaffnen (Spieler)
|
||||
m.EffectsUnarmed2_1=[[AQUA]]Droppt Item welches Feind in Hand haelt
|
||||
m.EffectsUnarmed3_0=[[YELLOW]]Faustkampfmeister
|
||||
m.EffectsUnarmed3_1=[[AQUA]]grosse Schadenssteigerung
|
||||
m.EffectsUnarmed4_0=[[YELLOW]]Faustkampflehrling
|
||||
m.EffectsUnarmed4_1=[[AQUA]]Schadens-Bonus
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=[[YELLOW]]Pfeil ablenken
|
||||
m.EffectsUnarmed5_1=[[AQUA]]wehrt Pfeile ab
|
||||
m.AbilLockUnarmed1=[[DARK_AQUA]]gesperrt bis 250+ Skilllevel (Faustkampflehrling)
|
||||
m.AbilLockUnarmed2=[[DARK_AQUA]]gesperrt bis 500+ Skilllevel (Faustkampfmeister)
|
||||
m.AbilBonusUnarmed1_0=[[YELLOW]]Faustkampflehrling
|
||||
m.AbilBonusUnarmed1_1=[[AQUA]]+2 Schadens-Bonus
|
||||
m.AbilBonusUnarmed2_0=[[YELLOW]]Faustkampfmeister
|
||||
m.AbilBonusUnarmed2_1=[[AQUA]]+4 Schadens-Bonus
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[YELLOW]]Pfeil ablenken Chance: [[GREEN]]{0}%
|
||||
m.UnarmedDisarmChance=[[YELLOW]]Entwaffnen Chance: [[GREEN]]{0}%
|
||||
m.UnarmedBerserkLength=[[YELLOW]]Berserker Dauer: [[GREEN]]{0}s
|
||||
@@ -184,22 +184,22 @@ m.EffectsHerbalism2_0=[[YELLOW]]Gruener Daumen (Weizen)
|
||||
m.EffectsHerbalism2_1=[[AQUA]]automatisches neupflanzen nach ernten
|
||||
m.EffectsHerbalism3_0=[[YELLOW]]Gruener Daumen (Cobble)
|
||||
m.EffectsHerbalism3_1=[[AQUA]]verwandelt Cobblestone zu Mossy Cobblestone mithilfe von Samen
|
||||
m.EffectsHerbalism4_0=[[YELLOW]]Nahrung+
|
||||
m.EffectsHerbalism4_1=[[AQUA]]Modifiziert Heilung von Brot/Suppe
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=[[YELLOW]]Doppelte Drops (Alle Kraeuter)
|
||||
m.EffectsHerbalism5_1=[[AQUA]]doppelte Anzahl Items
|
||||
m.HerbalismGreenTerraLength=[[YELLOW]]Gruene Welt Dauer: [[GREEN]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[YELLOW]]Gruener Daumen Chance: [[GREEN]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[YELLOW]]Gruener Daumen Stufe: [[GREEN]] Getreide waechst auf Stufe {0}
|
||||
m.HerbalismDoubleDropChance=[[YELLOW]]Doppelte Drop Chance: [[GREEN]]{0}%
|
||||
m.HerbalismFoodPlus=[[YELLOW]]Nahrung+ (Rang{0}): [[GREEN]]Bonus-Heilung {0}
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=Graben (Excavation)
|
||||
m.XPGainExcavation=[[YELLOW]]Graben und Finden von Schaetzen
|
||||
m.EffectsExcavation1_0=[[YELLOW]]Giga Bohrer (Faehigkeit)
|
||||
m.EffectsExcavation1_1=[[AQUA]]3x Drop Rate, 3x EXP, +Tempo
|
||||
m.EffectsExcavation2_0=[[YELLOW]]Schatzjaeger
|
||||
m.EffectsExcavation2_1=[[AQUA]]Faehigkeit nach Schaetzen zu graben
|
||||
m.ExcavationGreenTerraLength=[[YELLOW]]Giga Bohrer Dauer: [[GREEN]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[YELLOW]]Giga Bohrer Dauer: [[GREEN]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_AQUA]]Du hast einen Ambos platziert, du kannst hier Werkzeuge und Ruestungen reparieren.
|
||||
mcEntityListener.WolfComesBack=[[DARK_AQUA]]Dein Wolf hastet zurueck zu dir...
|
||||
mcPlayerListener.AbilitiesOff=Faehigkeiten nutzen (rechtsklick) aus
|
||||
@@ -306,22 +306,12 @@ Skills.NeedMore=[[DARK_AQUA]]Hierfuer brauchst du mehr [[YELLOW]]
|
||||
Skills.AdeptDiamond=[[DARK_RED]]Du bist nicht talentiert genug um Diamantwerkzeuge zu reparieren
|
||||
Skills.FullDurability=[[AQUA]]Dieses Item hat volle Haltbarkeit
|
||||
Skills.Disarmed=[[DARK_RED]]Du wurdest entwaffnet!
|
||||
mcPlayerListener.SorcerySkill=Zauberkunst Skill (Sorcery):
|
||||
m.SkillSorcery=Zauberkunst (Sorcery)
|
||||
Sorcery.HasCast=[[YELLOW]]**ZAUBERN**[[YELLOW]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]MP
|
||||
Sorcery.SpellSelected=[[YELLOW]]-=([[YELLOW]]{0}[[YELLOW]])=- [[RED]]([[AQUA]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} MP
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[YELLOW]]{2}[[DARK_AQUA]]][[DARK_AQUA]] Kein Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[AQUA]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=GEWITTER
|
||||
Sorcery.Curative.Self=HEILEN (SELBST)
|
||||
Sorcery.Curative.Other=HEILEN (ANDERE)
|
||||
m.LVL=[[AQUA]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]] ([[AQUA]]{1}[[YELLOW]]/[[AQUA]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[YELLOW]]**BESTIENKUNDE**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Besitzer ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Gesundheit ([[YELLOW]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Gesundheit ([[YELLOW]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: Was ist mcMMO? [[GRAY]]mcMMO is ein Open Source [[GOLD]]RPG Plugin[[GRAY]] fuer,[[GRAY]]Bukkit von [[RED]]nossr50 [[GRAY]]welches Minecraft viele Skills hinzufuegt.,[[GRAY]]Man kann auf vielen Wegen Erfahrung sammeln.,[[GRAY]]Um mehr ueber einen Skill zu erfahren gebe [[GREEN]]/SKILLNAME[[GRAY]] ein.,[[DARK_AQUA]]Q: Was macht es genau? [[GRAY]]Beispiel: Mit [[DARK_AQUA]]Mining[[GRAY]] bekommst du passive,[[GRAY]]Fertigkeiten wie [[RED]]Doppelte Drops[[GRAY]] oder Aktive wie den,[[RED]]Super-Brecher[[GRAY]] welcher dir per Rechtsklick aktiviert erlaubt,[[GRAY]]fuer einige Zeit (basierend auf deinem Lvl) schneller zu Minen[[GRAY]],[[BLUE]]Mining [[GRAY]]zu leveln ist so einfach wie seltene Materialien zu,[[GRAY]]bekommen! [[DARK_AQUA]]Q: Was heisst das? [[GRAY]]Alle Skills von [[GOLD]]mcMMO[[GRAY]] fuegen,[[GRAY]]coole neue Sachen hinzu! [[GRAY]]Du kannst [[GREEN]]/{0}[[GRAY]] eingeben [[GRAY]]um dir die,[[GRAY]]Commands anzeigen zu lassen. [[GRAY]]Das Ziel,[[GRAY]]von [[GOLD]]mcMMO[[GRAY]] ist es dir ein hochwertiges [[GOLD]]RPG-System[[GRAY]] zu bieten.,[[DARK_AQUA]]Q: Wo kann ich neue Ideen vorschlagen?,[[GRAY]]Im mcMMO Thema auf [[AQUA]]dev.bukkit.org[[GRAY]],[[DARK_AQUA]]Q: Wie mache ich dies und das?,[[RED]]Bitte [[GRAY]]schau in das mcMMO WIKI! [[AQUA]]mcmmo.wikia.com,[[DARK_GRAY]]Uebersetzung: Jobsti
|
||||
mcMMO.Description=mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.IsLocked=[[RED]]Gruppe ist gesperrt.
|
||||
Party.Locked=[[RED]]Gruppe ist gesperrt, nur der Besitzer kann neue User einladen.
|
||||
Party.IsntLocked=[[AQUA]]Gruppe ist nicht gesperrt
|
||||
@@ -356,14 +346,8 @@ Commands.xprate.started2=[[YELLOW]]Die mcMMO XP RATE betraegt nun {0}x!!
|
||||
Commands.xplock.locked=[[YELLOW]]Deine XP BAR ist nun auf {0} gesperrt!
|
||||
Commands.xplock.unlocked=[[YELLOW]]Deine XP BAR ist nun wieder [[GREEN]]FREIGEGEBEN[[YELLOW]]!
|
||||
Commands.xplock.invalid=[[RED]]Dies ist kein gueltiger Skillname! Versuche /xplock mining
|
||||
m.SkillAlchemy=Alchemie(Alchemy)
|
||||
m.SkillEnchanting=Verzaubern (Enchanting)
|
||||
m.SkillFishing=Angeln (Fishing)
|
||||
mcPlayerListener.AlchemySkill=[[AQUA]]Alchemie Skill [[DARK_AQUA]](Alchemy):
|
||||
mcPlayerListener.EnchantingSkill=[[AQUA]]Verzauberungs Skill [[DARK_AQUA]](Enchanting):
|
||||
mcPlayerListener.FishingSkill=[[YELLOW]]Angeln Skill [[DARK_AQUA]](Fishing):
|
||||
Skills.AlchemyUp=[[AQUA]]Alchemie um [[YELLOW]]{0} erhoeht. Gesamt [[YELLOW]]({1})
|
||||
Skills.EnchantingUp=[[AQUA]]Verzaubern um [[YELLOW]]{0} erhoeht. Gesamt [[YELLOW]]({1})
|
||||
Skills.FishingUp=[[AQUA]]Angeln um [[YELLOW]]{0} erhoeht. Gesamt [[YELLOW]]({1})
|
||||
Repair.LostEnchants=[[YELLOW]]Du hast nicht genug Skill, Verzauberung verloren.
|
||||
Repair.ArcanePerfect=[[YELLOW]]Du hast die Arkanen Zauber in diesem Gegenstand erhalten.
|
||||
@@ -374,8 +358,6 @@ m.EffectsRepair5_1=[[AQUA]]Verzauberte Gegenstaende reparieren
|
||||
m.ArcaneForgingRank=[[YELLOW]]Arkanes Schmieden: [[GREEN]]Rang {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[AQUA]]AS Erfolgs-Chance: [[GREEN]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[AQUA]]AS Downgrade-Chance: [[GREEN]]{0}%
|
||||
m.ArcaneForgingMilestones=[[YELLOW]][TIP]Arkanes Schmieden: [[AQUA]]Rang 1 = 100+, Rang 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[AQUA]] Rang 3 = 500+, Rang 4 = 750+
|
||||
Fishing.MagicFound=[[AQUA]]Du hast etwas magisches gefunden...
|
||||
Fishing.ItemFound=[[AQUA]]Du hast einen Schatz gefunden!
|
||||
m.SkillFishing=Angeln (Fishing)
|
||||
@@ -394,4 +376,68 @@ m.TamingSummon=[[YELLOW]]Beschwoerung abgeschlossen
|
||||
m.TamingSummonFailed=[[YELLOW]]Du hast zu viele Woelfe um dich um weitere zu beschwoeren.
|
||||
m.EffectsTaming7_0=[[YELLOW]]Ruf der Wildniss
|
||||
m.EffectsTaming7_1=[[AQUA]]Beschwoere einen Wolf auf deine Seite
|
||||
m.EffectsTaming7_2=[[YELLOW]]Info: [[AQUA]]Ducken und Rechtsklick mit {0} Knochen in der Hand
|
||||
m.EffectsTaming7_2=[[YELLOW]]Info: [[AQUA]]Ducken und Rechtsklick mit {0} Knochen in der Hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[party member name] [[RED]]- Teleport to party member
|
||||
m.mccOtherCommands=[[GREEN]]--OTHER COMMANDS--
|
||||
m.mccStats=- View your mcMMO stats
|
||||
m.mccLeaderboards=- Leaderboards
|
||||
m.mccMySpawn=- Teleports to myspawn
|
||||
m.mccClearMySpawn=- Clears your MySpawn
|
||||
m.mccToggleAbility=- Toggle ability activation with right click
|
||||
m.mccAdminToggle=- Toggle admin chat
|
||||
m.mccWhois=[playername] [[RED]]- View detailed player info
|
||||
m.mccInspect=[playername] [[RED]]- View detailed player info
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modify target
|
||||
m.mccMcGod=- God Mode
|
||||
m.mccSkillInfo=[skillname] [[RED]]- View detailed information about a skill
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFFECTS
|
||||
m.YourStats=YOUR STATS
|
||||
m.SkillTaming=TAMING
|
||||
m.XPGainTaming=Wolves getting harmed
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Beast Lore
|
||||
m.EffectsTaming1_1=Bone-whacking inspects wolves
|
||||
m.EffectsTaming2_0=Gore
|
||||
@@ -100,10 +98,18 @@ m.EffectsAxes1_1=Deal AoE Damage
|
||||
m.EffectsAxes2_0=Critical Strikes
|
||||
m.EffectsAxes2_1=Double Damage
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Modifies Damage
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXEMASTERY)
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus 4 damage
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Chance to critically strike: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Skull Splitter Length: [[YELLOW]]{0}s
|
||||
m.SkillSwords=SWORDS
|
||||
@@ -141,6 +147,8 @@ m.EffectsMining1_0=Super Breaker (ABILITY)
|
||||
m.EffectsMining1_1=Speed+, Triple Drop Chance
|
||||
m.EffectsMining2_0=Double Drops
|
||||
m.EffectsMining2_1=Double the normal loot
|
||||
m.EffectsMining2_0=Double Drops
|
||||
m.EffectsMining2_1=Double the normal loot
|
||||
m.MiningDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
|
||||
m.MiningSuperBreakerLength=[[RED]]Super Breaker Length: [[YELLOW]]{0}s
|
||||
m.SkillRepair=REPAIR
|
||||
@@ -161,18 +169,12 @@ m.EffectsUnarmed1_0=Berserk (ABILITY)
|
||||
m.EffectsUnarmed1_1=+50% DMG, Breaks weak materials
|
||||
m.EffectsUnarmed2_0=Disarm (Players)
|
||||
m.EffectsUnarmed2_1=Drops the foes item held in hand
|
||||
m.EffectsUnarmed3_0=Unarmed Mastery
|
||||
m.EffectsUnarmed3_1=Large Damage Upgrade
|
||||
m.EffectsUnarmed4_0=Unarmed Apprentice
|
||||
m.EffectsUnarmed4_1=Damage Upgrade
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Arrow Deflect
|
||||
m.EffectsUnarmed5_1=Deflect arrows
|
||||
m.AbilLockUnarmed1=LOCKED UNTIL 250+ SKILL (UNARMED APPRENTICE)
|
||||
m.AbilLockUnarmed2=LOCKED UNTIL 500+ SKILL (UNARMED MASTERY)
|
||||
m.AbilBonusUnarmed1_0=Unarmed Apprentice
|
||||
m.AbilBonusUnarmed1_1=+2 DMG Upgrade
|
||||
m.AbilBonusUnarmed2_0=Unarmed Mastery
|
||||
m.AbilBonusUnarmed2_1=+4 DMG Upgrade
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Arrow Deflect Chance: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Disarm Chance: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Berserk Length: [[YELLOW]]{0}s
|
||||
@@ -182,24 +184,24 @@ m.EffectsHerbalism1_0=Green Terra (ABILITY)
|
||||
m.EffectsHerbalism1_1=Spread the Terra, 3x Drops
|
||||
m.EffectsHerbalism2_0=Green Thumb (Wheat)
|
||||
m.EffectsHerbalism2_1=Auto-Plants wheat when harvesting
|
||||
m.EffectsHerbalism3_0=Green Thumb (Cobble)
|
||||
m.EffectsHerbalism3_1=Cobblestone -> Mossy w/ Seeds
|
||||
m.EffectsHerbalism4_0=Food+
|
||||
m.EffectsHerbalism4_1=Modifies health received from bread/stew
|
||||
m.EffectsHerbalism3_0=Green Thumb (Cobble/Stone Brick)
|
||||
m.EffectsHerbalism3_1=Cobblestone/Stone Brick -> Mossy w/ Seeds
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Double Drops (All Herbs)
|
||||
m.EffectsHerbalism5_1=Double the normal loot
|
||||
m.HerbalismGreenTerraLength=[[RED]]Green Terra Length: [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Green Thumb Chance: [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Green Thumb Stage: [[YELLOW]] Wheat grows in stage {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Food+ (Rank{0}): [[YELLOW]]Bonus {0} healing
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=EXCAVATION
|
||||
m.XPGainExcavation=Digging and finding treasures
|
||||
m.EffectsExcavation1_0=Giga Drill Breaker (ABILITY)
|
||||
m.EffectsExcavation1_1=3x Drop Rate, 3x EXP, +Speed
|
||||
m.EffectsExcavation2_0=Treasure Hunter
|
||||
m.EffectsExcavation2_1=Ability to dig for treasure
|
||||
m.ExcavationGreenTerraLength=[[RED]]Giga Drill Breaker Length: [[YELLOW]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Giga Drill Breaker Length: [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]You have placed an anvil, anvils can repair tools and armor.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Your wolf scurries back to you...
|
||||
mcPlayerListener.AbilitiesOff=Ability use toggled off
|
||||
@@ -303,25 +305,15 @@ Skills.ExcavationUp=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
|
||||
Skills.FeltEasy=[[GRAY]]That felt easy.
|
||||
Skills.StackedItems=[[DARK_RED]]You can't repair stacked items
|
||||
Skills.NeedMore=[[DARK_RED]]You need more
|
||||
Skills.AdeptDiamond=[[DARK_RED]]You're not skilled enough to repair Diamond
|
||||
Skills.AdeptDiamond=[[DARK_RED]]You're not skilled enough to repair Diamond.
|
||||
Skills.FullDurability=[[GRAY]]That is at full durability.
|
||||
Skills.Disarmed=[[DARK_RED]]You have been disarmed!
|
||||
mcPlayerListener.SorcerySkill=Sorcery:
|
||||
m.SkillSorcery=SORCERY
|
||||
Sorcery.HasCast=[[GREEN]]**CASTING**[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]MP
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} MP
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Out Of Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=THUNDER
|
||||
Sorcery.Curative.Self=CURE SELF
|
||||
Sorcery.Curative.Other=CURE OTHER
|
||||
m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[GREEN]]**BEAST LORE**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Owner ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]Party is locked, only party leader may invite.
|
||||
Party.IsntLocked=[[GRAY]]Party is not locked
|
||||
Party.Unlocked=[[GRAY]]Party is unlocked
|
||||
@@ -349,14 +341,8 @@ Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
|
||||
Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -367,8 +353,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -387,4 +371,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[party member name] [[RED]]- Teletransportate a un miembro de
|
||||
m.mccOtherCommands=[[GREEN]]--OTROS COMANDOS--
|
||||
m.mccStats=- Mira tus estadisticas de McMMO
|
||||
m.mccLeaderboards=- Ranking de lideres
|
||||
m.mccMySpawn=- Teletransportate a tu lugar de nacimiento
|
||||
m.mccClearMySpawn=- Limpia tu lugar de nacimiento
|
||||
m.mccToggleAbility=- Activa/Desactiva la activacion de la habilidad con el click derecho
|
||||
m.mccAdminToggle=- Activa/Desactiva el chat de admins
|
||||
m.mccWhois=[playername] [[RED]]- Mira informacion detallada del jugador
|
||||
m.mccInspect=[playername] [[RED]]- Mira informacion detallada del jugador
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifica el objetivo
|
||||
m.mccMcGod=- Modo dios
|
||||
m.mccSkillInfo=[skillname] [[RED]]- Mira informacion detallada sobre una habilidad
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFECTOS
|
||||
m.YourStats=TUS ESTADISTICAS
|
||||
m.SkillTaming=DOMADURA
|
||||
m.XPGainTaming=Lobos siendo lastimados
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Leyenda de bestias
|
||||
m.EffectsTaming1_1=Golpear con huesos examina a los lobos
|
||||
m.EffectsTaming2_0=Sangre
|
||||
@@ -99,11 +97,19 @@ m.EffectsAxes1_0=Cortador de cabecas (HABILIDAD)
|
||||
m.EffectsAxes1_1=Causa daños en arena
|
||||
m.EffectsAxes2_0=Golpes criticos
|
||||
m.EffectsAxes2_1=Doble de daño
|
||||
m.EffectsAxes3_0=Maestria de hacha
|
||||
m.EffectsAxes3_1=Modifica el daño
|
||||
m.AbilLockAxes1=BLOQUEADO HASTA TENER HABILIDAD +500 (MAESTRIA DE HACHA)
|
||||
m.AbilBonusAxes1_0=Maestria de hacha
|
||||
m.AbilBonusAxes1_1=4 de daño de bonus
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Posibilad de golpe critico: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Longitud de Cortador de cabezas: [[YELLOW]]{0}s
|
||||
m.SkillSwords=ESPADAS
|
||||
@@ -161,18 +167,12 @@ m.EffectsUnarmed1_0=Enloquecer (HABILIDAD)
|
||||
m.EffectsUnarmed1_1=+50% daño, Romper materiales fragiles
|
||||
m.EffectsUnarmed2_0=Desarmar (Jugadores)
|
||||
m.EffectsUnarmed2_1=Caida del objeto de mano del enemigo
|
||||
m.EffectsUnarmed3_0=Maestro desarmado
|
||||
m.EffectsUnarmed3_1=Mejora de grandes daños
|
||||
m.EffectsUnarmed4_0=Aprendiz desarmado
|
||||
m.EffectsUnarmed4_1=Mejora de daños
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Desviar flechas
|
||||
m.EffectsUnarmed5_1=Desviar flechas
|
||||
m.AbilLockUnarmed1=BLOQUEADO HASTA TENER HABILIDAD +250 (APRENDIZ DESARMADO)
|
||||
m.AbilLockUnarmed2=BLOQUEADO HASTA TENER HABILIDAD +500 (MAESTRO DESARMADO)
|
||||
m.AbilBonusUnarmed1_0=Aprendiz desarmado
|
||||
m.AbilBonusUnarmed1_1=Mejora de +2 de daño
|
||||
m.AbilBonusUnarmed2_0=Maestro desarmado
|
||||
m.AbilBonusUnarmed2_1=Mejora de +4 de daño
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Posibilidad de Desviar flechas: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Posibilidad de Desarmar: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Posibilidad de Enloquecer: [[YELLOW]]{0}s
|
||||
@@ -184,22 +184,22 @@ m.EffectsHerbalism2_0=Dedos verdes (Trigo)
|
||||
m.EffectsHerbalism2_1=Autoplanta el trigo al recolectarlo
|
||||
m.EffectsHerbalism3_0=Dedos verdes (Piedras)
|
||||
m.EffectsHerbalism3_1=Transorma Cobblestone en Moss Stone (usa semillas)
|
||||
m.EffectsHerbalism4_0=+ Comida
|
||||
m.EffectsHerbalism4_1=Modifica la vida recivida por el pan/guiso
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Doble beneficio (Todas las hierbas)
|
||||
m.EffectsHerbalism5_1=Dobla el botin normal
|
||||
m.HerbalismGreenTerraLength=[[RED]]Duracion de Tierra verde: [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Posibilidad de Dedos verdes: [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Etapa de Dedos verdes: [[YELLOW]] El Trigo crece en la etapa {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Posibilidad de Doble beneficio: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]+ Comida (Rank{0}): [[YELLOW]]{0} de Bonus de Curacion
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=EXCAVACION
|
||||
m.XPGainExcavation=Excavar y encontrar tesoros
|
||||
m.EffectsExcavation1_0=Ultra perforador (HABILIDAD)
|
||||
m.EffectsExcavation1_1=Triple beneficio, Triple EXP, + Velocidad
|
||||
m.EffectsExcavation2_0=Cazatesoros
|
||||
m.EffectsExcavation2_1=Habilidad para excavar y obtener tesoros
|
||||
m.ExcavationGreenTerraLength=[[RED]]Duracion de Ultra perforador: [[YELLOW]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Duracion de Ultra perforador: [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Has establecido un yunque, Los yunques pueden reparar herramientas y armadura.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]El lobo se escabuye hacia ti...
|
||||
mcPlayerListener.AbilitiesOff=Uso de habilidad desactivada
|
||||
@@ -306,22 +306,12 @@ Skills.NeedMore=[[DARK_RED]]Necesitas mas
|
||||
Skills.AdeptDiamond=[[DARK_RED]]No tienes habilidades suficientes para reparar Diamante
|
||||
Skills.FullDurability=[[GRAY]]Esto esta a su maxima duracion
|
||||
Skills.Disarmed=[[DARK_RED]]Has sido desarmado!
|
||||
mcPlayerListener.SorcerySkill=Hechiceria:
|
||||
m.SkillSorcery=HECHICERIA
|
||||
Sorcery.HasCast=[[GREEN]]**FUNDICION**[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]MP
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} MP
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Sin Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=TRUENO
|
||||
Sorcery.Curative.Self=CURARSE A SI MISMO
|
||||
Sorcery.Curative.Other=CURAR A OTRO
|
||||
m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]EXP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[GREEN]]**LEYENDA DE BESTIAS**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Dueño ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Salud ([[GREEN]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Salud ([[GREEN]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: QUE ES ESTO?,[[GOLD]]mcMMO es un MOD de [[RED]]CODIGO LIBRE[[GOLD]] para Bukkit por [[BLUE]]nossr50,[[GOLD]]Hay muchas habilidades añadidas por mcMMO para Minecraft.,[[GOLD]]Puedes ganar experiencia de muchas formas diferentes,[[GOLD]]Tu querras escribir [[GREEN]]/SKILLNAME[[GOLD]] para saber mas sobre una habilidad.,[[DARK_AQUA]]Q: QUE HACE?,[[GOLD]]Por ejemplo... en [[DARK_AQUA]]Mineria[[GOLD]] recibiras recompensas como,[[RED]]Doble beneficio[[GOLD]] o la habilidad [[RED]]Super Rompedor[[GOLD]] que cuando[[GOLD]] se activa con el click derecho permite la Mineria durante su duracion,[[GOLD]]que esta relacionado con tu nivel de habilidad. Subiendo de nivel en [[BLUE]]Mineria,[[GOLD]]es tan sencillo como minar simples materiales!
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]La fiesta esta bloqueda, solo el lider puede invitarte
|
||||
Party.IsntLocked=[[GRAY]]La fiesta no esta bloqueada
|
||||
Party.Unlocked=[[GRAY]]La fiesta esta desbloqueada
|
||||
@@ -349,14 +339,8 @@ Commands.xprate.started2=[[GOLD]]mcMMO XP RATE ES AHORA {0}x!!
|
||||
Commands.xplock.locked=[[GOLD]]Tu BARRA DE EXP esta bloqueada a {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Tu BARRA DE EXP esta ahora [[GREEN]]DESBLOQUEADA[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]Ese no es un nombre de habilidad valido! Try /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -367,8 +351,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -387,4 +369,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[party member name] [[RED]]- Siirry ryhm
|
||||
m.mccOtherCommands=[[GREEN]]--MUUT KOMENNOT--
|
||||
m.mccStats=- Näytä mcMMO tilastosi
|
||||
m.mccLeaderboards=- Tulostaulukko
|
||||
m.mccMySpawn=- Siirtää sinut myspawniin
|
||||
m.mccClearMySpawn=- Tyhjää myspawnisi
|
||||
m.mccToggleAbility=- Laita taitojen aktivointi oikealla näppäimellä päälle/pois
|
||||
m.mccAdminToggle=- Laita admin juttelu päälle/pois
|
||||
m.mccWhois=[playername] [[RED]]- Näytä yksityiskohtaiset tiedot pelaajasta
|
||||
m.mccInspect=[playername] [[RED]]- Näytä yksityiskohtaiset tiedot pelaajasta
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Muokkaa kohdetta
|
||||
m.mccMcGod=- "God Mode"
|
||||
m.mccSkillInfo=[skillname] [[RED]]- Näytä ykistyiskohtaiset tiedot taidosta
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFEKTIT
|
||||
m.YourStats=TILASTOSI
|
||||
m.SkillTaming=KESYTTÄMINEN
|
||||
m.XPGainTaming=Susien satuttaminen
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Pedon Tarina
|
||||
m.EffectsTaming1_1=Luulla lyöminen tutkii susia
|
||||
m.EffectsTaming2_0=Pisto
|
||||
@@ -99,11 +97,19 @@ m.EffectsAxes1_0=Kallonhalkoja (TAITO)
|
||||
m.EffectsAxes1_1=Tee aluevahinkoa
|
||||
m.EffectsAxes2_0=Kriittiset Iskut
|
||||
m.EffectsAxes2_1=Tuplavahinko
|
||||
m.EffectsAxes3_0=Kirveiden Herra (500 TAITO)
|
||||
m.EffectsAxes3_1=Muokkaa vahinkoa
|
||||
m.AbilLockAxes1=LUKITTU KUNNES 500+ TAITO (KIRVEIDEN HERRA)
|
||||
m.AbilBonusAxes1_0=Kirveiden Herra
|
||||
m.AbilBonusAxes1_1=+4 Vahinko
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Todennäköisyys iskeä kriittisesti: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Kallonhalkojan kesto: [[YELLOW]]{0}s
|
||||
m.SkillSwords=MIEKAT
|
||||
@@ -161,18 +167,12 @@ m.EffectsUnarmed1_0=Raivop
|
||||
m.EffectsUnarmed1_1=+50% vahinko, rikkoo heikkoja materiaaleja
|
||||
m.EffectsUnarmed2_0=Aseista riisuminen (Pelaajat)
|
||||
m.EffectsUnarmed2_1=Pudottaa vihollisen esineen kädestä
|
||||
m.EffectsUnarmed3_0=Aseistamattomuuden Herra
|
||||
m.EffectsUnarmed3_1=Suuri vahingonlisäys
|
||||
m.EffectsUnarmed4_0=Aseistamattomuuden Aloittelija
|
||||
m.EffectsUnarmed4_1=Vahingonlisäys
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Nuolentorjunta
|
||||
m.EffectsUnarmed5_1=Torjuu nuolia
|
||||
m.AbilLockUnarmed1=LUKITTU KUNNES 250+ TAITO (ASEISTAMATTOMUUDEN ALOITTELIJA)
|
||||
m.AbilLockUnarmed2=LUKITTU KUNNES 500+ TAITO (ASEISTAMATTOMUUDEN HERRA)
|
||||
m.AbilBonusUnarmed1_0=Aseistamattomuuden Aloittelija
|
||||
m.AbilBonusUnarmed1_1=+2 Vahinko
|
||||
m.AbilBonusUnarmed2_0=Aseistamattomuuden Herra
|
||||
m.AbilBonusUnarmed2_1=+4 Vahinko
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Nuolentorjunnan todennäköisyys: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Aseista riisumisen todennäköisyys: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Raivopään kesto: [[YELLOW]]{0}s
|
||||
@@ -184,22 +184,22 @@ m.EffectsHerbalism2_0=Viherpeukalo (Vehn
|
||||
m.EffectsHerbalism2_1=Istuttaa vehnää automaattisesti kun keräät vehnää
|
||||
m.EffectsHerbalism3_0=Viherpeukalo (Mukulakivi)
|
||||
m.EffectsHerbalism3_1=Mukulakivi -> Sammaleinen mukulakivi ja siemeniä
|
||||
m.EffectsHerbalism4_0=Ruoka+
|
||||
m.EffectsHerbalism4_1=Muokkaa terveyttä jota saat leivästä/muhennoksesta
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Tuplasaalis (Kaikki yrtit)
|
||||
m.EffectsHerbalism5_1=Tuplaa normaali saaliin määrä
|
||||
m.HerbalismGreenTerraLength=[[RED]]Vihermaan kesto: [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Viherpeukalon todennäköisyys: [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Viherpeukalon vaihe: [[YELLOW]] Vehnä kasvaa {0}:ssa vaiheessa
|
||||
m.HerbalismDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Ruoka+ (Rank{0}): [[YELLOW]]Bonus {0} terveyden määrä
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=KAIVANTO
|
||||
m.XPGainExcavation=Kaivamalla ja löytämällä aarteita
|
||||
m.EffectsExcavation1_0=Giga Drill Breaker (TAITO)
|
||||
m.EffectsExcavation1_1=3x saaliin määrä, 3x kokemuspisteiden määrä, +Nopeus
|
||||
m.EffectsExcavation2_0=Aarteenmetsästäjä
|
||||
m.EffectsExcavation2_1=Taito jonka avulla voit kaivaa aarteita
|
||||
m.ExcavationGreenTerraLength=[[RED]]Giga Drill Breaker kesto: [[YELLOW]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Giga Drill Breaker kesto: [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Olet asettanut alasimen maahan, sillä voit korjata työkaluja ja haarniskoja.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Sutesi kipittää takaisin luoksesi...
|
||||
mcPlayerListener.AbilitiesOff=Taitojen käyttö pois päältä
|
||||
@@ -300,7 +300,7 @@ Skills.MiningUp=[[YELLOW]]Mining skill increased by {0}. Total ({1})
|
||||
Skills.WoodcuttingUp=[[YELLOW]]Woodcutting skill increased by {0}. Total ({1})
|
||||
Skills.RepairUp=[[YELLOW]]Repair skill increased by {0}. Total ({1})
|
||||
Skills.ExcavationUp=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]Party is locked, only party leader may invite.
|
||||
Party.IsntLocked=[[GRAY]]Party is not locked
|
||||
Party.Unlocked=[[GRAY]]Party is unlocked
|
||||
@@ -328,14 +328,8 @@ Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
|
||||
Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -346,8 +340,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -366,4 +358,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[party member name] [[RED]]- Vous t
|
||||
m.mccOtherCommands=[[GREEN]]--AUTRES COMMANDES--
|
||||
m.mccStats=- Voir vos statistiques
|
||||
m.mccLeaderboards=- Classements
|
||||
m.mccMySpawn=- Vous téléporte à votre spawn
|
||||
m.mccClearMySpawn=- Éfface votre point de spawn
|
||||
m.mccToggleAbility=- Active les capacités spéciales avec clic droit
|
||||
m.mccAdminToggle=- Active le chat admin
|
||||
m.mccWhois=[playername] [[RED]]- Voir les infos détaillées du joueur
|
||||
m.mccInspect=[playername] [[RED]]- Voir les infos détaillées du joueur
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifier
|
||||
m.mccMcGod=- Mode dieu
|
||||
m.mccSkillInfo=[skillname] [[RED]]- Afficher des informations détaillées d'une compétence
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFFETS
|
||||
m.YourStats=VOS STATS
|
||||
m.SkillTaming=DRESSAGE
|
||||
m.XPGainTaming=Attaquer avec un loup
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Connaissance des bêtes
|
||||
m.EffectsTaming1_1=Inspecte un loup avec un os
|
||||
m.EffectsTaming2_0=Morsures
|
||||
@@ -99,11 +97,19 @@ m.EffectsAxes1_0=Fendeur de cr
|
||||
m.EffectsAxes1_1=provoque des dégâts de zone
|
||||
m.EffectsAxes2_0=Coup critiques
|
||||
m.EffectsAxes2_1=double les dégâts
|
||||
m.EffectsAxes3_0=Maîtrise de la hache (niveau 500)
|
||||
m.EffectsAxes3_1=Augmente les dégâts
|
||||
m.AbilLockAxes1=Débloqué au niveau 500 (Maîtrise de la hache)
|
||||
m.AbilBonusAxes1_0=Maîtrise de la hache
|
||||
m.AbilBonusAxes1_1=4 Blessures en bonus
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Chances de coup critique : [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
|
||||
m.SkillSwords=ÉPÉE
|
||||
@@ -161,18 +167,12 @@ m.EffectsUnarmed1_0=Berserk (capacit
|
||||
m.EffectsUnarmed1_1=+50% de dégâts, brise les matériaux faibles
|
||||
m.EffectsUnarmed2_0=Désarmer (les joueurs)
|
||||
m.EffectsUnarmed2_1=Vole l'objet que l'ennemi a dans la main
|
||||
m.EffectsUnarmed3_0=Apprenti du désarmement
|
||||
m.EffectsUnarmed3_1=Plus de dégâts
|
||||
m.EffectsUnarmed4_0=Maîtrise du désarmement
|
||||
m.EffectsUnarmed4_1=Beaucoup plus de dégâts
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Déviation des flèches
|
||||
m.EffectsUnarmed5_1=Dévie les flèches qui vous foncent dessus
|
||||
m.AbilLockUnarmed1=Débloqué au niveau 250 (Apprenti du désarmement)
|
||||
m.AbilLockUnarmed2=Débloqué au niveau 500 (Maîtrise du désarmement)
|
||||
m.AbilBonusUnarmed1_0=Apprenti du désarmement
|
||||
m.AbilBonusUnarmed1_1=+2 dégâts
|
||||
m.AbilBonusUnarmed2_0=Maîtrise du désarmement
|
||||
m.AbilBonusUnarmed2_1=+4 dégâts
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Chances dévier les flèches : [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Chances de Désarmer : [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
|
||||
@@ -184,22 +184,22 @@ m.EffectsHerbalism2_0=Main verte (Bl
|
||||
m.EffectsHerbalism2_1=Auto-plantes du blé lors de la récolte
|
||||
m.EffectsHerbalism3_0=Main verte (Cobblestone)
|
||||
m.EffectsHerbalism3_1=Transforme la Cobble en Mossy avec des graines
|
||||
m.EffectsHerbalism4_0=Nouriture+
|
||||
m.EffectsHerbalism4_1=Modifie la santé reçue via le pain / ragoût
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Double butin (Toutes cultures)
|
||||
m.EffectsHerbalism5_1=Double les récoltes
|
||||
m.HerbalismGreenTerraLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Cances d'obtenir la main verte : [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Main verte par niveaux : [[YELLOW]] Wheat grows in stage {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Chances du Double Butin : [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Nourriture+ (Rang {0}): [[YELLOW]]{0} plus nourissant
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=EXCAVATION
|
||||
m.XPGainExcavation=Creuser et trouver des trésors
|
||||
m.EffectsExcavation1_0=Super broyeur (capacité spéciale)
|
||||
m.EffectsExcavation1_1=3x Butin, 3x XP, +Vitesse
|
||||
m.EffectsExcavation2_0=Chercheur de trésors
|
||||
m.EffectsExcavation2_1=Capacité de trouver un trésor
|
||||
m.ExcavationGreenTerraLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Vous avez placé une enclume, Les enclumes peuvent réparer les outils et l'armure.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Votre loup revient vers vous...
|
||||
mcPlayerListener.AbilitiesOff=Capacité spéciale désactivée
|
||||
@@ -306,22 +306,12 @@ Skills.NeedMore=[[DARK_RED]]Vous devez en avoir plus
|
||||
Skills.AdeptDiamond=[[DARK_RED]]Vous n'avez pas encore le niveau nécessaire pour réparer du diamant
|
||||
Skills.FullDurability=[[GRAY]]Cet objet est déjà en bonne état.
|
||||
Skills.Disarmed=[[DARK_RED]]Vous avez été désarmé !
|
||||
mcPlayerListener.SorcerySkill=Sorcery:
|
||||
m.SkillSorcery=SORCERY
|
||||
Sorcery.HasCast=[[GREEN]]**CASTING**[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]MP
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} MP
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Out Of Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=THUNDER
|
||||
Sorcery.Curative.Self=CURE SELF
|
||||
Sorcery.Curative.Other=CURE OTHER
|
||||
m.LVL=NIVEAU [[GREEN]]{0} - [[DARK_AQUA]]XP : [[YELLOW]][[[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]]]
|
||||
Combat.BeastLore=[[GREEN]]**Connaissances des bêtes**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Propriétaire ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Vie ([[GREEN]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Vie ([[GREEN]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: QU'EST-CE QUE C'EST ?,[[GOLD]]mcMMO est un plugin RPG [[RED]]OPEN SOURCE[[GOLD]] pour Bukkit créé par [[BLUE]]nossr50,[[GOLD]]mcMMO ajoute beaucoup de compétences dans Minecraft,[[GOLD]]Vous pouvez gagner de l'expérience de différentes façons,[[GOLD]]Vous devriez taper [[GREEN]]/NOM_COMPETENCE[[GOLD]] pour en savoir plus.,[[DARK_AQUA]]Q: QU'EST-CE QUE ÇA FAIT?,[[GOLD]]Par exemple... en [[DARK_AQUA]]Minant[[GOLD]] Vous allez recevoir des bénéfices comme,[[RED]]le Double Butin[[GOLD]] ou la compétence [[RED]]Super Breaker[[GOLD]] qui lorsqu'elle est,[[GOLD]]activée avec clique droit permet de miner vite, sa durée,[[GOLD]]dépend du niveau de votre compétence. Améliorer [[BLUE]]Le Minage,[[GOLD]]Est aussi simple que de mine des ressources précieuses !,[[DARK_AQUA]]Q: QU'EST-CE QUE ÇA VEUT DIRE ?,[[GOLD]]Presque toutes les compétences dans [[GREEN]]mcMMO[[GOLD]] Sont des nouveaux trucs cools!.,[[GOLD]]Tapez [[GREEN]]/{0}[[GOLD]] pour trouver les commandes,[[GOLD]]Le but de mcMMO est de créer une expérience RPG de qualité.,[[DARK_AQUA]]Q: OÙ JE PEUX SUGGÉRER DES IDÉES !?,[[DARK_AQUA]]bit.ly/MCmmoIDEA,[[DARK_AQUA]]Q: COMMENT JE FAIS CI ET ÇA?,[[RED]]MERCI [[GOLD]]d'aller voir le wiki ! [[DARK_AQUA]]mcmmo.wikia.com
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]Party is locked, only party leader may invite.
|
||||
Party.IsntLocked=[[GRAY]]Party is not locked
|
||||
Party.Unlocked=[[GRAY]]Party is unlocked
|
||||
@@ -349,14 +339,8 @@ Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
|
||||
Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -367,8 +351,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -387,4 +369,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -29,11 +29,9 @@ m.mccPartyTeleport=[party member name] [[RED]]- Teleporteer naar je party medeli
|
||||
m.mccOtherCommands=[[GREEN]]--ANDERE COMMANDOS--
|
||||
m.mccStats=- Laat je levels zien
|
||||
m.mccLeaderboards=- Topscores
|
||||
m.mccMySpawn=- Teleporteer naar MySpawn
|
||||
m.mccClearMySpawn=- Verwijder je MySpawn
|
||||
m.mccToggleAbility=- Doe ability activatie aan/uit
|
||||
m.mccAdminToggle=- Doe admin chat aan/uit
|
||||
m.mccWhois=[playername] [[RED]]- Laat informatie zien over speler
|
||||
m.mccInspect=[playername] [[RED]]- Laat informatie zien over speler
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Verander levels
|
||||
m.mccMcGod=- God Modus
|
||||
m.mccSkillInfo=[skillname] [[RED]]- Laat informatie zien over een skill
|
||||
@@ -46,7 +44,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFFECTEN
|
||||
m.YourStats=JOUW STATUS
|
||||
m.SkillTaming=TEMMEN
|
||||
m.XPGainTaming=Wolven krijgen schade
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Wolfinspectie
|
||||
m.EffectsTaming1_1=Bone-meal inspecteert wolven
|
||||
m.EffectsTaming2_0=Gestold bloed
|
||||
@@ -105,11 +103,19 @@ m.EffectsAxes1_0=Schedelsplijter (ABILITY)
|
||||
m.EffectsAxes1_1=Geef schade rond om je heen
|
||||
m.EffectsAxes2_0=Critical Strikes
|
||||
m.EffectsAxes2_1=Dubbele schade
|
||||
m.EffectsAxes3_0=Bijl Master (500 SKILL)
|
||||
m.EffectsAxes3_1=Verhoogt schade
|
||||
m.AbilLockAxes1=GEBLOKEERD TOT 500+ SKILL (BIJL MASTER)
|
||||
m.AbilBonusAxes1_0=Bijl Master
|
||||
m.AbilBonusAxes1_1=4 schade extra
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Kans op Critical Strikes: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Schedelsplijter lengte: [[YELLOW]]{0}s
|
||||
m.SkillSwords=ZWAARDEN
|
||||
@@ -167,18 +173,12 @@ m.EffectsUnarmed1_0=Onbewapende gek (ABILITY)
|
||||
m.EffectsUnarmed1_1=+50% schade, hak zachte materialen weg
|
||||
m.EffectsUnarmed2_0=Ontwapen (Players)
|
||||
m.EffectsUnarmed2_1=Dropt het wapen van de vijand
|
||||
m.EffectsUnarmed3_0=Onbewapende held
|
||||
m.EffectsUnarmed3_1=Nog meer schade
|
||||
m.EffectsUnarmed4_0=Onbewapende leerling
|
||||
m.EffectsUnarmed4_1=Meer schade
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Pijlafwijking
|
||||
m.EffectsUnarmed5_1=Laat pijlen afwijken
|
||||
m.AbilLockUnarmed1=GEBLOKEERD TOT 250+ SKILL (Onbewapende leerling)
|
||||
m.AbilLockUnarmed2=GEBLOKEERD TOT 500+ SKILL (Onbewapende held)
|
||||
m.AbilBonusUnarmed1_0=Onbewapende leerling
|
||||
m.AbilBonusUnarmed1_1=+2 meer schade
|
||||
m.AbilBonusUnarmed2_0=Onbewapende held
|
||||
m.AbilBonusUnarmed2_1=+4 meer schade
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Kans op Pijlafwijking: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Kans op Ontwapening: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Lengte van Onbewapende gek: [[YELLOW]]{0}s
|
||||
@@ -190,22 +190,22 @@ m.EffectsHerbalism2_0=Groene vingers (Wheat)
|
||||
m.EffectsHerbalism2_1=Plant wheat bij het oogsten
|
||||
m.EffectsHerbalism3_0=Groene vingers (Cobble)
|
||||
m.EffectsHerbalism3_1=Maakt van cobblestone moss-stone met seeds
|
||||
m.EffectsHerbalism4_0=Voedsel+
|
||||
m.EffectsHerbalism4_1=Verhoogt de heling van brood en stews
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Dubbele Drop (Alle planten)
|
||||
m.EffectsHerbalism5_1=Dubbele drop van planten
|
||||
m.HerbalismGreenTerraLength=[[RED]]Groene Aarde lengte: [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Kans op Groene vingers: [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Groene vingers periode: [[YELLOW]] Wheat groeit in periode {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Kans op Dubbele Drop: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Voedsel+ (Rank{0}): [[YELLOW]]Bonus {0} heling
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=UITGRAVING
|
||||
m.XPGainExcavation=Graven
|
||||
m.EffectsExcavation1_0=Giga Drilboor (ABILITY)
|
||||
m.EffectsExcavation1_1=3x drop, 3x XP, hogere snelheid
|
||||
m.EffectsExcavation2_0=Schatzoeker
|
||||
m.EffectsExcavation2_1=Mogelijkheid om schatten te zoeken
|
||||
m.ExcavationGreenTerraLength=[[RED]]Giga Drilboor lengte: [[YELLOW]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Giga Drilboor lengte: [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Je hebt een aambeeld geplaatst. Hierop kun je tools en armor repareren.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Je wolf dribbelt terug naar je...
|
||||
mcPlayerListener.AbilitiesOff=Ability activatie is uit
|
||||
@@ -312,22 +312,12 @@ Skills.NeedMore=[[DARK_RED]]Je hebt te weinig
|
||||
Skills.AdeptDiamond=[[DARK_RED]]Je bent niet goed genoeg om diamond te repareren.
|
||||
Skills.FullDurability=[[GRAY]]Dat is nog helemaal heel.
|
||||
Skills.Disarmed=[[DARK_RED]]Je bent ontwapend!
|
||||
mcPlayerListener.SorcerySkill=Tovenarij:
|
||||
m.SkillSorcery=TOVERNARIJ
|
||||
Sorcery.HasCast=[[GREEN]]**UITROEPEN VAN**[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]MP
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} MP
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Geen Mana meer [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=DONDER
|
||||
Sorcery.Curative.Self=HEEL JEZELF
|
||||
Sorcery.Curative.Other=HEEL EEN ANDER
|
||||
m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[GREEN]]**WOLFINSPECTIE**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Eigenaar ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Levens ([[GREEN]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Levens ([[GREEN]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]Party is locked, only party leader may invite.
|
||||
Party.IsntLocked=[[GRAY]]Party is not locked
|
||||
Party.Unlocked=[[GRAY]]Party is unlocked
|
||||
@@ -355,14 +345,8 @@ Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
|
||||
Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -373,8 +357,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -393,4 +375,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[imie czlonka druzyny] [[RED]]- Teleportuje cie do czlonka dr
|
||||
m.mccOtherCommands=[[GREEN]]--INNE KOMENDY--
|
||||
m.mccStats=- Pokazuje twoje statystyki.
|
||||
m.mccLeaderboards=- Pokazuje najlepszych graczy.
|
||||
m.mccMySpawn=- Teleportuje do twojego spawna.
|
||||
m.mccClearMySpawn=- Kasuje twoj spawn i zmienia na domyslny.
|
||||
m.mccToggleAbility=- Wlacza specjalna umiejetnosc prawym przyciskiem myszy.
|
||||
m.mccAdminToggle=- Wlacza chat adminow.
|
||||
m.mccWhois=[nazwa gracza] [[RED]]- Zobacz szczegolowe informacje o graczu.
|
||||
m.mccInspect=[nazwa gracza] [[RED]]- Zobacz szczegolowe informacje o graczu.
|
||||
m.mccMmoedit=[nazwa gracza] [umiejetnosc] [nowa wartosc] [[RED]]- Modyfikuje cel.
|
||||
m.mccMcGod=- Niesmiertelnosc.
|
||||
m.mccSkillInfo=/[nazwa umiejetnosci (np. Mining)] [[RED]]- Wyswietla informacje na temat umiejetnosci.
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFEKTY
|
||||
m.YourStats=TWOJE STATYSTYKI
|
||||
m.SkillTaming=OSWAJANIE
|
||||
m.XPGainTaming=Utrate zdrowia wilkow.
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Wiedza o zwierzetach
|
||||
m.EffectsTaming1_1=Uderz koscia aby sprawdzic wilka.
|
||||
m.EffectsTaming2_0=Krwotok
|
||||
@@ -99,11 +97,19 @@ m.EffectsAxes1_0=Berserk (UMIEJETNOSC)
|
||||
m.EffectsAxes1_1=Zadaje obrazenia wszystkiemu dookola.
|
||||
m.EffectsAxes2_0=Krytyczne uderzenie
|
||||
m.EffectsAxes2_1=Potrafisz trafic wroga tam gdzie boli, zadajac podwojne obrazenia.
|
||||
m.EffectsAxes3_0=Doswiadczony wojownik
|
||||
m.EffectsAxes3_1=Mordowanie setek potworow zwiekszylo twoja sile i celnosc. Zadajesz wiecej obrazen.
|
||||
m.AbilLockAxes1=Aby odblokowac doswiadczonego wojownika, zdobadz 500 poziom.
|
||||
m.AbilBonusAxes1_0=Doswiadczony wojownik
|
||||
m.AbilBonusAxes1_1=Zadajesz dodatkowe 4 punkty obrazen.
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Szansa na krytyczne uderzenie: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Dlugosc berserku: [[YELLOW]]{0} sekund
|
||||
m.SkillSwords=MIECZE
|
||||
@@ -161,18 +167,12 @@ m.EffectsUnarmed1_0=Wejscie Smoka (UMIEJETNOSC)
|
||||
m.EffectsUnarmed1_1=Polowe wieksze obrazenia, niszczy slabe przedmioty.
|
||||
m.EffectsUnarmed2_0=Rozbrojenie (Tylko graczy)
|
||||
m.EffectsUnarmed2_1=Przeciwnik upuszcza trzymany w reku przedmiot.
|
||||
m.EffectsUnarmed3_0=Wsciekle Piesci
|
||||
m.EffectsUnarmed3_1=Znaczne zwiekszenie zadawanych obrazen.
|
||||
m.EffectsUnarmed4_0=Droga Smoka
|
||||
m.EffectsUnarmed4_1=Zwiekszenie zadawanych obrazen.
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Odbicie strzaly
|
||||
m.EffectsUnarmed5_1=Golymi rekoma potrafisz odbic nadlatujaca strzale.
|
||||
m.AbilLockUnarmed1=Aby odblokowac Droge Smoka, zdobadz 250 poziom.
|
||||
m.AbilLockUnarmed2=Aby odblokowac Wsciekle Piesci, zdobadz 500 poziom.
|
||||
m.AbilBonusUnarmed1_0=Droga Smoka
|
||||
m.AbilBonusUnarmed1_1=Zadawane obrazenia zwiekszone o 2.
|
||||
m.AbilBonusUnarmed2_0=Wsciekle Piesci
|
||||
m.AbilBonusUnarmed2_1=Zadawane obrazenia zwiekszone o 4.
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Szansa na odbicie strzaly: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Szansa na rozbrojenie: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Dlugosc Wejscia Smoka: [[YELLOW]]{0} sekund.
|
||||
@@ -184,22 +184,22 @@ m.EffectsHerbalism2_0=Wprawne rece (zboze)
|
||||
m.EffectsHerbalism2_1=Zbierajac zboze, od razu sadzisz nasiona.
|
||||
m.EffectsHerbalism3_0=Wprawne rece (bruk)
|
||||
m.EffectsHerbalism3_1=Zamienia bruk w porosniety mchem kamien z nasionami.
|
||||
m.EffectsHerbalism4_0=Lepsze jedzenie
|
||||
m.EffectsHerbalism4_1=Modyfikowana genetycznie zywnosc jest zdrowsza. Chleb i zupa chlebowa regeneruja wiecej zdrowia.
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Udane zbiory
|
||||
m.EffectsHerbalism5_1=Dwa razy wieksze plony wszystkich roslin.
|
||||
m.HerbalismGreenTerraLength=[[RED]]Czas trwania zielonej ziemi: [[YELLOW]]{0} sekund
|
||||
m.HerbalismGreenThumbChance=[[RED]]Szansa na wprawne rece: [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Poziom wprawnych rak: [[YELLOW]] Zboze rosnie na poziomie {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Szansa na udane zbiory: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Lepsze jedzenie (Ranga{0}): [[YELLOW]]Dodatkowe {0} zdrowia
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=WYKOPALISKA
|
||||
m.XPGainExcavation=Kopanie i odnajdywanie skarbow.
|
||||
m.EffectsExcavation1_0=Super Szybka Saperka (UMIEJETNOSC)
|
||||
m.EffectsExcavation1_1=Zwiekszona szybkosc kopania i trzykrotnie wiekszy urobek i zdobyte doswiadczenie.
|
||||
m.EffectsExcavation2_0=Lowca Skarbow
|
||||
m.EffectsExcavation2_1=Umiejetnosc znajdywania skarbow
|
||||
m.ExcavationGreenTerraLength=[[RED]]Czas trwania Super Szybkiej Saperki: [[YELLOW]]{0} sekund.
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Czas trwania Super Szybkiej Saperki: [[YELLOW]]{0} sekund.
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Polozyles kowadlo, ktore pozwala na naprawe przedmiotow.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Twoj wilk przybiega z powrotem.
|
||||
mcPlayerListener.AbilitiesOff=Uzywanie umiejetnosci wylaczone
|
||||
@@ -306,22 +306,12 @@ Skills.NeedMore=[[DARK_RED]]Potrzebujesz wiecej
|
||||
Skills.AdeptDiamond=[[DARK_RED]]Nie potrafisz jeszcze naprawiac diamentow
|
||||
Skills.FullDurability=[[GRAY]]Ten przedmiot nie wymaga naprawy.
|
||||
Skills.Disarmed=[[DARK_RED]]Zostales rozbrojony!
|
||||
mcPlayerListener.SorcerySkill=Magia:
|
||||
m.SkillSorcery=MAGIA
|
||||
Sorcery.HasCast=[[GREEN]]**RZUCANIE ZAKLECIA**[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]Mana
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} Many
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Brak Many [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=PIORUN
|
||||
Sorcery.Curative.Self=ULECZ SIEBIE
|
||||
Sorcery.Curative.Other=ULECZ INNYCH
|
||||
m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]Doswiadczenia[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[GREEN]]**WIEDZA O ZWIERZETACH**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Wlasciciel ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Zycie ([[GREEN]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Zycie ([[GREEN]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]P: Czym jest mcMMO?,[[GOLD]]mcMMO jest [[RED]]open source'owym[[GOLD]] RPG modem korzystajacym z Bukkita, autorstwa [[BLUE]]nossr50,[[GOLD]]mcMMO dodaje wiele umiejetnosci do Minecrafta.,[[GOLD]]Mozna rowniez zbierac doswiadczenie na rozne sposoby,[[GOLD]]Najlepiej wpisac [[GREEN]]/nazwaumiejetnosci[[GOLD]] aby dowiedziec sie wiecej o niej.,[[DARK_AQUA]]P: A co robi mcMMO?,[[GOLD]]Dla przykladu, [[DARK_AQUA]]gornictwo[[GOLD]] pozwala na [[RED]]zwiekszone zyski[[GOLD]] oraz daje mozliwosc [[RED]]szybszego kopania[[GOLD]], ktore mozna [[GOLD]]aktywowac prawym przyciskiem myszy i trwa dluzej [[GOLD]]im wyzszy masz poziom. Zdobywanie poziomow w [[BLUE]]gornictwie[[GOLD]] odbywa sie przez zwyczajne wykopywanie roznych mineralow.,[[DARK_AQUA]]P: Co to wszystko daje?,[[GOLD]]Prawie wszystkie umiejetnosci w [[GREEN]]mcMMO[[GOLD]] dodaja nowe fajne rzeczy!.,[[GOLD]]Wpisujac [[GREEN]]/{0}[[GOLD]] poznasz wszystkie dostepne polecenia,[[GOLD]]Celem mcMMO jest sprawienie aby Minecraft stal sie prawie eRPeGiem.,[[DARK_AQUA]]P: Mam genialny pomysl, dodasz to!?,[[GOLD]]Napisz w temacie mcMMO na forum bukkit i zobaczymy!,[[DARK_AQUA]]Q: A jak zrobic to albo tamto?,[[RED]]CZYTAJ [[GOLD]]strone wiki moda! [[DARK_AQUA]]mcmmo.wikia.com
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]Grupa jest zamknieta, tylko wlasciciel moze dodac graczy.
|
||||
Party.IsntLocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
|
||||
Party.Unlocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
|
||||
@@ -349,14 +339,8 @@ Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
|
||||
Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -367,8 +351,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -387,4 +369,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -23,11 +23,9 @@ m.mccPartyTeleport=[party member name] [[RED]]- Teleportar para um membro de equ
|
||||
m.mccOtherCommands=[[GREEN]]--OUTROS COMANDOS--
|
||||
m.mccStats=- Ver seus status
|
||||
m.mccLeaderboards=- Classificaçao
|
||||
m.mccMySpawn=- Teleportar para o spawn
|
||||
m.mccClearMySpawn=- Remove o Ponto de Spawn
|
||||
m.mccToggleAbility=- Ativa habilidades especiais com botao direito
|
||||
m.mccAdminToggle=- Ativa o chat dos admin
|
||||
m.mccWhois=[playername] [[RED]]- Ver informaçoes do jogador
|
||||
m.mccInspect=[playername] [[RED]]- Ver informaçoes do jogador
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modificar atributos do jogador
|
||||
m.mccMcGod=- Modo Deus
|
||||
m.mccSkillInfo=[skillname] [[RED]]- Ver informaçoes sobre a habilidade
|
||||
@@ -40,7 +38,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=EFEITOS
|
||||
m.YourStats=SUAS ESTATISTICAS
|
||||
m.SkillTaming=DOMESTICAR
|
||||
m.XPGainTaming=Ataque com um lobo
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Conhecimento de Feras
|
||||
m.EffectsTaming1_1=Inspeciona um lobo com um osso
|
||||
m.EffectsTaming2_0=Mordida
|
||||
@@ -101,12 +99,19 @@ m.XPGainAxes=Atacando monstros
|
||||
m.EffectsAxes1_0=Rachador de Crânios (HABILIDADE ESPECIAL)
|
||||
m.EffectsAxes1_1=Causa Danos em Area
|
||||
m.EffectsAxes2_0=Ataques Críticos
|
||||
m.EffectsAxes2_1=Dobra o Dano
|
||||
m.EffectsAxes3_0=Mestre com Machados (NIVEL 500)
|
||||
m.EffectsAxes3_1=Aumenta o Dano
|
||||
m.AbilLockAxes1=DESBLOQUEIE NO NIVEL 500 (Mestre com Machados)
|
||||
m.AbilBonusAxes1_0=Mestre com Machados/
|
||||
m.AbilBonusAxes1_1=Bônus de 4 de dano
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Chance ataque crítico: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Duraçao do Rachador de Crânios: [[YELLOW]]{0}s
|
||||
|
||||
@@ -162,29 +167,21 @@ m.EffectsRepair4_0=Repara
|
||||
m.EffectsRepair4_1=Rapara Ferramentas e Armaduras de Diamante
|
||||
m.RepairRepairMastery=[[RED]]Mestre em Raparaçao: [[YELLOW]]{0}% extra restaurado
|
||||
m.RepairSuperRepairChance=[[RED]]Chance de Super Reparaçao: [[YELLOW]]{0}%
|
||||
|
||||
m.SkillUnarmed=DESARMADO
|
||||
m.XPGainUnarmed=Atacando monstros
|
||||
m.EffectsUnarmed1_0=Fúria (HABILIDADE ESPECIAL)
|
||||
m.EffectsUnarmed1_1=+50% de Dano, Quebra materiais frágeis
|
||||
m.EffectsUnarmed2_0=Desarmar (Jogadores)
|
||||
m.EffectsUnarmed2_1=Derruba a arma que o adversário está segurando
|
||||
m.EffectsUnarmed3_0=Mestre do Desarmamento
|
||||
m.EffectsUnarmed3_1=Aumenta muito o Dano
|
||||
m.EffectsUnarmed4_0=Aprendiz do Desarmamento
|
||||
m.EffectsUnarmed4_1=Aumenta o Dano
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Desviar Flechas
|
||||
m.EffectsUnarmed5_1=Desvia Flechas jogadas em você
|
||||
m.AbilLockUnarmed1=DESBLOQUEIE NO NIVEL 250 (APRENDIZ DE DESARMAMENTO)
|
||||
m.AbilLockUnarmed2=DESBLOQUEIE NO NIVEL 500 (MESTRE DE DESARMAMENTO)
|
||||
m.AbilBonusUnarmed1_0=Aprendiz do Desarmamento
|
||||
m.AbilBonusUnarmed1_1=+2 de Danos
|
||||
m.AbilBonusUnarmed2_0=Mestre do Desarmamento
|
||||
m.AbilBonusUnarmed2_1=+4 de Danos
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Chance de Desviar Flechas: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Chance de Desarmar: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Duraçao da Fúria: [[YELLOW]]{0}s
|
||||
|
||||
m.SkillHerbalism=HERBALISMO
|
||||
m.XPGainHerbalism=Colhendo Ervas
|
||||
m.EffectsHerbalism1_0=Green Terra (HABILIDADE ESPECIAL)
|
||||
@@ -193,24 +190,22 @@ m.EffectsHerbalism2_0=Dedos Verdes (Trigo)
|
||||
m.EffectsHerbalism2_1=Planta automaticamente, ao colher trigo
|
||||
m.EffectsHerbalism3_0=Dedos Verdes (Pedras)
|
||||
m.EffectsHerbalism3_1=Transforma Cobblestone em Moss Stone (usa sementes)
|
||||
m.EffectsHerbalism4_0=Comida+
|
||||
m.EffectsHerbalism4_1=Aumenta a vida recebida comendo pao ou sopa
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Drop x2 (Todas Ervas)
|
||||
m.EffectsHerbalism5_1=Dobra a quantia de itens obtidos colhendo
|
||||
m.HerbalismGreenTerraLength=[[RED]]Duraçao do Green Terra: [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Chance do Dedos Verdes: [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Nível do Dedos Verdes: [[YELLOW]] Trigo Cresce no Nível {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Chance de Drop x2: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Comida+ (Rank{0}): [[YELLOW]]Bônus de {0} de vida
|
||||
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=ESCAVAÇAO
|
||||
m.XPGainExcavation=Cavando e encontrando tesouros
|
||||
m.EffectsExcavation1_0=Super Broca (HABILIDADE ESPECIAL)
|
||||
m.EffectsExcavation1_1=Drop x3, EXP x3, mais velocidade
|
||||
m.EffectsExcavation2_0=Caçad/or de Tesouros
|
||||
m.EffectsExcavation2_1=Encontra itens raros enquanto cava
|
||||
m.ExcavationGreenTerraLength=[[RED]]Duraçao da Super Broca: [[YELLOW]]{0}s
|
||||
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Duraçao da Super Broca: [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]] Você colocou uma bigorna, a bigorna pode reparar ferramentas e armaduras.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Seu lobo voltou para você...
|
||||
mcPlayerListener.AbilitiesOff=Habilidade especial desabilitada
|
||||
@@ -318,24 +313,12 @@ Skills.NeedMore=[[DARK_RED]]Voc
|
||||
Skills.AdeptDiamond=[[DARK_RED]]Você nao tem o nível necessário para reparar Diamante
|
||||
Skills.FullDurability=[[GRAY]]Já está com Durabilidade cheia.
|
||||
Skills.Disarmed=[[DARK_RED]]Você foi Desarmado!
|
||||
mcPlayerListener.SorcerySkill=Feitiçaria (Sorcery):
|
||||
|
||||
m.SkillSorcery=FEITIÇARIA
|
||||
Sorcery.HasCast=[[GREEN]]*CASTING*[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]]MP
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} MP
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Sem Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=TROVAO
|
||||
Sorcery.Curative.Self=CURAR-SE
|
||||
Sorcery.Curative.Other=CURAR AMIGOS
|
||||
|
||||
m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[GREEN]]*CONHECIMENTO DE FERAS*
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Dono ([[RED]]{0}[[DARK_AQUA]])
|
||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/20)
|
||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Vida ([[GREEN]]{0}[[DARK_AQUA]]/8)
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: O QUE E? [[GOLD]]mcMMO é um mod [[RED]]OPEN SOURCE[[GOLD]] de RPG para a plataforma "Bukkit" feito por [[BLUE]]nossr50.[[GOLD]] Ele acresenta uma série de habilidades ao Minecraft. [[GOLD]]Você pode ganhar experiência de muitas maneiras.,[[GOLD]]Digite [[GREEN]]/NOME_DA_HABILIDADE[[GOLD]] para obter informaçoes sobre a habilidade.,[[DARK_AQUA]]Q: O QUE ELE FAZ? [[GOLD]]Por exemplo... em [[DARK_AQUA]]Mineraçao[[GOLD]] você receberá benefícios tais como [[RED]]Drop x2[[GOLD]] ou a habilidade [[RED]]Super Esmagador.[[GOLD]] que quando ativada com o clique direito permite minerar rapidamente durante sua duraçao. [[GOLD]]que depende do nível da sua habilidade. Aumentar o nível de [[BLUE]]Mineraçao[[GOLD]] é simples. basta minerar pedras ou minérios!,[[GOLD]]O objetivo do mcMMO é criar uma experiência de RPG de qualidade.,[[GOLD]]Digite [[GREEN]]/{0}[[GOLD]] para uma lista de comandos possíveis.,[[DARK_AQUA]]Q: ONDE POSSO SUGERIR IDEIAS!?,[[GOLD]]No tópico do mcMMO no fórum bukkit! (www.bit.ly/MCmmoIDEA),[[DARK_AQUA]]Q: Para mais informaçoes. leia a wiki do McMMO: [[RED]]mcmmo.wikia.com
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
Party.Locked=[[RED]]Equipe está trancada, só o líder pode convidar.
|
||||
Party.IsntLocked=[[GRAY]]Equipe nao está trancada
|
||||
Party.Unlocked=[[GRAY]]Equipe foi Destrancada
|
||||
@@ -363,14 +346,8 @@ Commands.xprate.started2=[[GOLD]]XP RATE AGORA
|
||||
Commands.xplock.locked=[[GOLD]]Sua barra de XP BAR está travada em {0}!
|
||||
Commands.xplock.unlocked=[[GOLD]]Sua barra de XP foi [[GREEN]]DESTRAVADA[[GOLD]]!
|
||||
Commands.xplock.invalid=[[RED]]Nao existe habilidade com esse nome! Tente /xplock mining
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -381,8 +358,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -401,4 +376,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -24,11 +24,9 @@ m.mccPartyTeleport=[party member name] [[RED]]-
|
||||
m.mccOtherCommands=[[GREEN]]--Другие команды--
|
||||
m.mccStats=- Посмотреть ваши McMMo характеристики
|
||||
m.mccLeaderboards=- Доска Лидеров
|
||||
m.mccMySpawn=- Телепортирует к вашей кровати
|
||||
m.mccClearMySpawn=- Убирает вашу кровать
|
||||
m.mccToggleAbility=- Активировать возможность правым кликом мыши
|
||||
m.mccAdminToggle=- Включить админский чат
|
||||
m.mccWhois=[playername] [[RED]]- Посмотреть детальную информацию
|
||||
m.mccInspect=[playername] [[RED]]- Посмотреть детальную информацию
|
||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Изменить цель
|
||||
m.mccMcGod=- Режим Бога
|
||||
m.mccSkillInfo=[skillname] [[RED]]- Посмотреть детальную информацию о умении
|
||||
@@ -41,7 +39,7 @@ m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
|
||||
m.Effects=ЭФФЕКТЫ
|
||||
m.YourStats=ВАШИ ХАРАКТЕРИСТИКИ
|
||||
m.SkillTaming=Приручение
|
||||
m.XPGainTaming=Волки причиняют ущерб
|
||||
m.XPGainTaming=Animal Taming, or combat w/ your wolves
|
||||
m.EffectsTaming1_0=Удар Волка
|
||||
m.EffectsTaming1_1=Уменьшение количества костей
|
||||
m.EffectsTaming2_0=Окравление
|
||||
@@ -100,11 +98,19 @@ m.EffectsAxes1_0=
|
||||
m.EffectsAxes1_1=Увеличение урона от топора
|
||||
m.EffectsAxes2_0=Критические удары
|
||||
m.EffectsAxes2_1=Двойной урон
|
||||
m.EffectsAxes3_0=Мастерство топора(500 уровень)
|
||||
m.EffectsAxes3_1=Улучшение урона
|
||||
m.AbilLockAxes1=Блокируется до 500+ уровня(Мастерство топора)
|
||||
m.AbilBonusAxes1_0=Мастерство топора
|
||||
m.AbilBonusAxes1_1=Дает бонус в 4 урона
|
||||
m.EffectsAxes3_0=Axe Mastery
|
||||
m.EffectsAxes3_1=Adds bonus DMG
|
||||
m.EffectsAxes4_0=Impact
|
||||
m.EffectsAxes4_1=Strike with enough force to shatter armor
|
||||
m.EffectsAxes5_0=Greater Impact
|
||||
m.EffectsAxes5_1=Deal bonus damage to unarmored foes
|
||||
m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXE MASTERY)
|
||||
m.AbilBonusAxes1_0=Axe Mastery
|
||||
m.AbilBonusAxes1_1=Bonus {0} damage
|
||||
m.AbilBonusAxes2_0=Impact
|
||||
m.AbilBonusAxes2_1=Deal {0} DMG to armor
|
||||
m.AbilBonusAxes3_0=Greater Impact
|
||||
m.AbilBonusAxes3_1=Deal {0} Bonus DMG to the unarmored
|
||||
m.AxesCritChance=[[RED]]Шанс критического удара: [[YELLOW]]{0}%
|
||||
m.AxesSkullLength=[[RED]]Продолжительность Разрушителя Черепов: [[YELLOW]]{0}s
|
||||
m.SkillSwords=Мечи
|
||||
@@ -162,18 +168,12 @@ m.EffectsUnarmed1_0=
|
||||
m.EffectsUnarmed1_1=+50% Урона, Ломать слабые материалы
|
||||
m.EffectsUnarmed2_0=Обезоружение(Игроки)
|
||||
m.EffectsUnarmed2_1=Падает оружие противника на землю, которое находится в руках у него.
|
||||
m.EffectsUnarmed3_0=Мастер Рукопашного боя
|
||||
m.EffectsUnarmed3_1=Улучшение урона от кулаков
|
||||
m.EffectsUnarmed4_0=Ученик рукопашного боя
|
||||
m.EffectsUnarmed4_1=Увеличение урона от кулаков
|
||||
m.EffectsUnarmed3_0=Iron Arm Style
|
||||
m.EffectsUnarmed3_1=Hardens your arm over time
|
||||
m.EffectsUnarmed5_0=Отражение стрел
|
||||
m.EffectsUnarmed5_1=Стрелы отражаются
|
||||
m.AbilLockUnarmed1=Блокируется до 250+ уровня(Ученик рукопашного боя)
|
||||
m.AbilLockUnarmed2=Блокируется до 500+ уровня(Мастер Рукопашного боя)
|
||||
m.AbilBonusUnarmed1_0=Ученик рукопашного боя
|
||||
m.AbilBonusUnarmed1_1=+2 бонус к урону
|
||||
m.AbilBonusUnarmed2_0=Мастер Рукопашного боя
|
||||
m.AbilBonusUnarmed2_1=+4 бонус к урону
|
||||
m.AbilBonusUnarmed2_0=Iron Arm Style
|
||||
m.AbilBonusUnarmed2_1=+{0} DMG Upgrade
|
||||
m.UnarmedArrowDeflectChance=[[RED]]Шанс отразить стрелы: [[YELLOW]]{0}%
|
||||
m.UnarmedDisarmChance=[[RED]]Шанс обезоружить: [[YELLOW]]{0}%
|
||||
m.UnarmedBerserkLength=[[RED]]Длительность "Берсерка": [[YELLOW]]{0}s
|
||||
@@ -185,22 +185,22 @@ m.EffectsHerbalism2_0="
|
||||
m.EffectsHerbalism2_1=Авто выращивание пщеницы после посадки
|
||||
m.EffectsHerbalism3_0="Зеленый фермер"(Мох)
|
||||
m.EffectsHerbalism3_1=Камень -> Замшелый камень + семена
|
||||
m.EffectsHerbalism4_0=Улучшение еды
|
||||
m.EffectsHerbalism4_1=Улучшает количество здоровья от хлеба и грибного супа
|
||||
m.EffectsHerbalism4_0=Farmer's Diet
|
||||
m.EffectsHerbalism4_1=Improves hunger restored from herbalist foods
|
||||
m.EffectsHerbalism5_0=Дройной дроп(Все растения)
|
||||
m.EffectsHerbalism5_1=Двойной дроп становится нормальным
|
||||
m.HerbalismGreenTerraLength=[[RED]]Продолжительность "Озеленителя": [[YELLOW]]{0}s
|
||||
m.HerbalismGreenThumbChance=[[RED]]Шанс "Зеленого фермера": [[YELLOW]]{0}%
|
||||
m.HerbalismGreenThumbStage=[[RED]]Уровень "Зеленого фермера": [[YELLOW]] Пщеница растет по-уровнево {0}
|
||||
m.HerbalismDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
|
||||
m.HerbalismFoodPlus=[[RED]]Еда+ (Rank{0}): [[YELLOW]]Бонус {0} лечения
|
||||
m.HerbalismFoodPlus=[[RED]]Farmers Diet: [[YELLOW]]Rank {0}
|
||||
m.SkillExcavation=Раскопка
|
||||
m.XPGainExcavation=Раскапывать и искать сокровища
|
||||
m.EffectsExcavation1_0=Мега дрель(способность)
|
||||
m.EffectsExcavation1_1=3-ой дроп, 3-ой опыт, Увеличение скорости
|
||||
m.EffectsExcavation2_0=Охотник за сокровищами
|
||||
m.EffectsExcavation2_1=Способность копать сокровища
|
||||
m.ExcavationGreenTerraLength=[[RED]]Продолжительность "Мега дрели": [[YELLOW]]{0}s
|
||||
m.ExcavationGigaDrillBreakerLength=[[RED]]Продолжительность "Мега дрели": [[YELLOW]]{0}s
|
||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Вы разместили наковальни и теперь можете чинить вещи.
|
||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Ваш волк хочет вернуться к вам
|
||||
mcPlayerListener.AbilitiesOff=Использование способностей выключено
|
||||
@@ -307,16 +307,6 @@ Skills.NeedMore=[[DARK_RED]]
|
||||
Skills.AdeptDiamond=[[DARK_RED]]Вы не обучены чинить алмазные инструменты и броню
|
||||
Skills.FullDurability=[[GRAY]]Вещь не нуждается в починке.
|
||||
Skills.Disarmed=[[DARK_RED]]Вы обезоружены!
|
||||
mcPlayerListener.SorcerySkill=Колдовство:
|
||||
m.SkillSorcery=Колдовство
|
||||
Sorcery.HasCast=[[GREEN]]**Использую "Колдовство"**[[GOLD]]
|
||||
Sorcery.Current_Mana=[[DARK_AQUA]] Маны
|
||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
|
||||
Sorcery.Cost=[[RED]][COST] {0} Маны
|
||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Не хватает маны [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
|
||||
Sorcery.Water.Thunder=Гром
|
||||
Sorcery.Curative.Self=Вылечить себя
|
||||
Sorcery.Curative.Other=Вылечить других
|
||||
m.LVL=[[DARK_GRAY]]Уровень: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
|
||||
Combat.BeastLore=[[GREEN]]**Умение "Удар волка" активировано**
|
||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Владелец ([[RED]]{0}[[DARK_AQUA]])
|
||||
@@ -340,15 +330,9 @@ Party.PasswordSet=[[GREEN]]
|
||||
Party.CouldNotKick=[[DARK_RED]]Вы не можете убрать игрока из группы {0}
|
||||
Party.NotInYourParty=[[DARK_RED]]{0} не в группе
|
||||
Party.CouldNotSetOwner=[[DARK_RED]]Вы не можете отдать лидерство игроку {0}
|
||||
mcMMO.Description=[[DARK_AQUA]]Q: Что это?,[[GOLD]]mcMMO это [[RED]]ОПЕН СУРС[[GOLD]] RPG мод для сервера Bukkit от пользователя [[BLUE]]nossr50,[[GOLD]]Здесь было добавлено много умений для Minecraft сервера.,[[GOLD]]Вы можете прокачать их разными способами,[[GOLD]]Вы хотите найти больше информации о умении [[GREEN]]/SKILLNAME[[GOLD]] ?,[[DARK_AQUA]]Q: Что я должен сделать?,[[GOLD]]Для примера... in [[DARK_AQUA]]Шахтёрство[[GOLD]] вы получите [[RED]]2-ой дроп[[GOLD]] или способность [[RED]]"Супер разрушитель"[[GOLD]] ,которая активируется [[GOLD]]нажатием правой кнопки мыши на некоторое время,[[GOLD]]связанное с вашим уровнем умения. Поднять уровень [[BLUE]]Шахтёрства,[[GOLD]]легко просто копайте руды и камни!
|
||||
m.SkillAlchemy=ALCHEMY
|
||||
m.SkillEnchanting=ENCHANTING
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.AlchemySkill=Alchemy:
|
||||
mcPlayerListener.EnchantingSkill=Enchanting:
|
||||
mcMMO.Description=[[DARK_AQUA]]About the [[YELLOW]]mcMMO[[DARK_AQUA]] Project:,[[GOLD]]mcMMO is an [[RED]]open source[[GOLD]] RPG mod created in February 2011,[[GOLD]]by [[BLUE]]nossr50[[GOLD]]. The goal is to provide a quality RPG experience.,[[DARK_AQUA]]Tips:,[[GOLD]] - [[GREEN]]Use [[RED]]/mcc[[GREEN]] to see commands,[[GOLD]] - [[GREEN]]Type [[RED]]/SKILLNAME[[GREEN]] to see detailed skill info,[[DARK_AQUA]]Developers:,[[GOLD]] - [[GREEN]]TheYeti [[BLUE]](Project Lead & Developer),[[GOLD]] - [[GREEN]]NuclearW [[BLUE]](Developer),[[GOLD]] - [[GREEN]]GJ [[BLUE]](Developer),[[GOLD]] - [[GREEN]]nossr50 [[BLUE]](Developer & Creator),[[DARK_AQUA]]Useful Links:,[[GOLD]] - [[GREEN]]issues.mcmmo.org[[GOLD]] Bug Reporting,[[GOLD]] - [[GREEN]]#mcmmo @ irc.esper.net[[GOLD]] IRC Chat,[[GOLD]] - [[GREEN]]www.mcmmo.org[[GOLD]] Official Website,[[GOLD]] - [[GREEN]]http://bit.ly/x3Yvry[[GOLD]] Bukkit Forum Thread,[[GOLD]] - [[GREEN]]https://twitter.com/#!/mcmmo_dev[[GOLD]] mcMMO Twitter,[[DARK_AQUA]]Donation Info:
|
||||
m.SkillFishing=FISHING
|
||||
mcPlayerListener.FishingSkill=Fishing:
|
||||
Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
|
||||
Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
|
||||
Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
|
||||
Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
|
||||
Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
|
||||
@@ -359,8 +343,6 @@ m.EffectsRepair5_1=Repair magic items
|
||||
m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
|
||||
m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
|
||||
m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
|
||||
m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
|
||||
m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
|
||||
Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
|
||||
Fishing.ItemFound=[[GRAY]]Treasure found!
|
||||
m.SkillFishing=FISHING
|
||||
@@ -379,4 +361,68 @@ m.TamingSummon=[[GREEN]]Summoning complete
|
||||
m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
|
||||
m.EffectsTaming7_0=Call of the Wild
|
||||
m.EffectsTaming7_1=Summon a wolf to your side
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand
|
||||
m.EffectsTaming8_0=Fast Food Service
|
||||
m.EffectsTaming8_1=Chance for wolves to heal on attack
|
||||
m.AbilLockTaming5=LOCKED UNTIL 50+ SKILL (FAST FOOD SERVICE)
|
||||
m.AbilBonusTaming5_0=Fast Food Service
|
||||
m.AbilBonusTaming5_1=50% Chance for heal on attack
|
||||
Swords.StoppedBleeding=[[GRAY]]The bleeding has [[GREEN]]stopped[[GRAY]]!
|
||||
m.EffectsMining3_0=Blast Mining
|
||||
m.EffectsMining3_1=Bonuses to mining with TNT
|
||||
m.EffectsMining4_0=Bigger Bombs
|
||||
m.EffectsMining4_1=Increases TNT explosion radius
|
||||
m.EffectsMining5_0=Demolitions Expertise
|
||||
m.EffectsMining5_1=Decreases damage from TNT explosions
|
||||
m.AbilLockMining1=LOCKED UNTIL 125+ SKILL (BLAST MINING)
|
||||
m.AbilLockMining2=LOCKED UNTIL 250+ SKILL (BIGGER BOMBS)
|
||||
m.AbilLockMining3=LOCKED UNTIL 500+ SKILL (DEMOLITIONS EXPERTISE)
|
||||
m.MiningBiggerBombs=[[RED]]Blast Radius Increase: [[YELLOW]]+{0}
|
||||
m.MiningDemolitionsExpertDamageDecrease=[[RED]]Demolitions Expert Damage Decrease: [[YELLOW]]{0}%
|
||||
m.MiningBlastMining=[[RED]]Blast Mining: [[YELLOW]] Rank {0} [[GRAY]]({1})
|
||||
m.BlastMining1 = +35% ore yield
|
||||
m.BlastMining2 = +40% ore yield
|
||||
m.BlastMining3 = +45% ore yield, no debris
|
||||
m.BlastMining4 = +50% ore yield, no debris
|
||||
m.BlastMining5 = +55% ore yield, no debris, double drops
|
||||
m.BlastMining6 = +60% ore yield, no debris, double drops
|
||||
m.BlastMining7 = +65% ore yield, no debris, triple drops
|
||||
m.BlastMining8 = +70% ore yield, no debris, triple drops
|
||||
Skills.AdeptStone=[[DARK_RED]]You're not skilled enough to repair Stone.
|
||||
Skills.AdeptIron=[[DARK_RED]]You're not skilled enough to repair Iron.
|
||||
Skills.AdeptGold=[[DARK_RED]]You're not skilled enough to repair Gold.
|
||||
Skills.Woodcutting.TreeFellerThreshold=[[RED]]That tree is too large!
|
||||
Axes.GreaterImpactOnSelf=[[RED]]**HIT BY GREATER IMPACT**
|
||||
Axes.GreaterImpactOnEnemy=[[GREEN]]**STRUCK WITH GREAT FORCE**
|
||||
Skills.BerserkPlayerOff=[[RED]]Berserk[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GreenTerraPlayerOff=[[RED]]Green Terra[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.TreeFellerPlayerOff=[[RED]]Tree Feller[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SuperBreakerPlayerOff=[[RED]]Super Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SkullSplitterPlayerOff=[[RED]]Skull Splitter[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.GigaDrillBreakerPlayerOff=[[RED]]Giga Drill Breaker[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.SerratedStrikesPlayerOff=[[RED]]Serrated Strikes[[GREEN]] has worn off for [[YELLOW]]{0}
|
||||
Skills.BlastMiningPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
|
||||
Skills.YourBlastMining=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
|
||||
TreeFeller.AxeSplinters=[[RED]]YOUR AXE SPLINTERS INTO DOZENS OF PIECES
|
||||
Acrobatics.GracefulRoll=[[GREEN]]**GRACEFUL ROLL**
|
||||
Acrobatics.Dodge=[[GREEN]]**DODGE**
|
||||
Acrobatics.Roll=**ROLL**
|
||||
Axes.HitCritically=[[DARK_RED]]You were CRITICALLY hit!
|
||||
Axes.CriticalHit=[[RED]]CRITIAL HIT!
|
||||
Axes.HitByCleave=[[DARK_RED]]Struck by CLEAVE!
|
||||
Swords.EnemyBleeding=[[GREEN]]**ENEMY BLEEDING**
|
||||
Swords.HitBySerratedStrikes=[[DARK_RED]]Struck by SERRATED STRIKES!
|
||||
Swords.CounterAttacked=[[GREEN]]**COUNTER-ATTACKED**
|
||||
Swords.HitByCounterAttack=[[DARK_RED]]Hit with a counter-attack!
|
||||
Guides.Acrobatics=[[DARK_AQUA]]About Acrobatics:\n[[YELLOW]]Acrobatics is the art of moving gracefully in mcMMO.\n[[YELLOW]]It provides combat bonuses and environment damage bonuses.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you need to perform a dodge\n[[YELLOW]]in combat or survive falls from heights that damage you.\n\n[[DARK_AQUA]]How does Rolling work?\n[[YELLOW]]You have a passive chance when you take fall damage\n[[YELLOW]]to negate the damage done. You can hold the sneak button to\n[[YELLOW]]double your chances during the fall.\n[[YELLOW]]This triggers a Graceful Roll instead of a standard one.\n[[YELLOW]]Graceful Rolls are like regular rolls but are twice as likely to\n[[YELLOW]]occur and provide more damage safety than regular rolls.\n[[YELLOW]]Rolling chance is tied to your skill level\n[[DARK_AQUA]]How does Dodge work?\n[[YELLOW]]Dodge is a passive chance when you are\n[YELLOW]]injured in combat to halve the damage taken.\n[[YELLOW]]It is tied to your skill level.
|
||||
Guides.Archery=Guide coming soon...
|
||||
Guides.Axes=Guide coming soon...
|
||||
Guides.Excavation=[[DARK_AQUA]]About Excavation:\n[[YELLOW]]Excavation is the act of digging up dirt to find treasures.\n[[YELLOW]]By excavating the land you will find treasures.\n[[YELLOW]]The more you do this the more treasures you can find.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill you must dig with a shovel in hand.\n[[YELLOW]]Only certain materials can be dug up for treasures and XP.\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Grass, Dirt, Sand, Clay, Gravel, Mycelium, Soul Sand\n\n[[DARK_AQUA]]How to use Giga Drill Breaker:\n[[YELLOW]]With a shovel in hand right click to ready your tool.\n[[YELLOW]]Once in this state you have about 4 seconds to make\n[[YELLOW]]contact with Excavation compatible materials this will\n[[YELLOW]]activate Giga Drill Breaker.\n[[DARK_AQUA]]What is Giga Drill Breaker?\n[[YELLOW]]Giga Drill Breaker is an ability with a cooldown\n[[YELLOW]]tied to Excavation skill. It triples your chance\n[[YELLOW]]of finding treasures and enables instant break\n[[YELLOW]]on Excavation materials.\n\n[[DARK_AQUA]]How does Treasure Hunter work?\n[[YELLOW]]Every possible treasure for Excavation has its own\n[[YELLOW]]skill level requirement for it to drop, as a result it's\n[[YELLOW]]difficult to say how much it is helping you.\n[[YELLOW]]Just keep in mind that the higher your Excavation skill\n[[YELLOW]]is, the more treasures that can be found.\n[[YELLOW]]And also keep in mind that each type of Excavation\n[[YELLOW]]compatible material has its own unique list of treasures.\n[[YELLOW]]In other words you will find different treasures in Dirt\n[[YELLOW]]than you would in Gravel.\n[[DARK_AQUA]]Notes about Excavation:\n[[YELLOW]]Excavation drops are completely customizeable\n[[YELLOW]]So results vary server to server.
|
||||
Guides.Fishing=Guide coming soon...
|
||||
Guides.Herbalism=Guide coming soon...
|
||||
Guides.Mining=[[DARK_AQUA]]About Mining:\n[[YELLOW]]Mining consists of mining stone and ores. It provides bonuses\n[[YELLOW]]to the amount of materials dropped while mining.\n\n[[DARK_AQUA]]XP GAIN:\n[[YELLOW]]To gain XP in this skill, you must mine with a pickaxe in hand.\n[[YELLOW]]Only certain blocks award XP.\n\n[[DARK_AQUA]]Compatible Materials:\n[[YELLOW]]Stone, Coal Ore, Iron Ore, Gold Ore, Diamond Ore, Redstone Ore,\n[[YELLOW]]Lapis Ore, Obsidian, Mossy Cobblestone, Ender Stone,\n[[YELLOW]]Glowstone, and Netherrack.\n\n[[DARK_AQUA]]How to use Super Breaker:\n[[YELLOW]]With a pickaxe in your hand, right click to ready your tool.\n[[YELLOW]]Once in this state, you have about 4 seconds to make contact\n[[YELLOW]]with Mining compatible materials, which will activate Super\n[[YELLOW]]Breaker.\n\n[[DARK_AQUA]]What is Super Breaker?\n[[YELLOW]]Super Breaker is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It triples your chance of extra items dropping and\n[[YELLOW]]enables instant break on Mining materials.\n\n[[DARK_AQUA]]How to use Blast Mining:\n[[YELLOW]]With a detonator in hand, which is a flint & steel by default,\n[[YELLOW]]right-click on TNT from a distance. This will cause the TNT\n[[YELLOW]]to instantly explode.\n\n[[DARK_AQUA]]How does Blast Mining work?\n[[YELLOW]]Blast Mining is an ability with a cooldown tied to the Mining\n[[YELLOW]]skill. It gives bonuses when mining with TNT and allows you\n[[YELLOW]]to remote detonate TNT. There are three parts to Blast Mining.\n[[YELLOW]]The first part is Bigger Bombs, which increases blast radius.\n[[YELLOW]]The second is Demolitions Expert, which decreases damage\n[[YELLOW]]from TNT explosions. The third part simply increases the\n[[YELLOW]]amount of ores dropped from TNT and decreases the\n[[YELLOW]]debris dropped.
|
||||
Guides.Repair=Guide coming soon...
|
||||
Guides.Swords=Guide coming soon...
|
||||
Guides.Taming=Guide coming soon...
|
||||
Guides.Unarmed=Guide coming soon...
|
||||
Guides.Woodcutting=Guide coming soon...
|
||||
@@ -24,6 +24,9 @@ commands:
|
||||
addxp:
|
||||
description: Add XP to a user
|
||||
permission: mcmmo.tools.mmoedit
|
||||
addlevels:
|
||||
description: Add levels to a user
|
||||
permission: mcmmo.tools.mmoedit
|
||||
mcability:
|
||||
description: Toggle whether or not abilities get readied on right click
|
||||
permission: mcmmo.commands.ability
|
||||
@@ -33,8 +36,10 @@ commands:
|
||||
mcgod:
|
||||
description: Make yourself invulnerable
|
||||
permission: mcmmo.tools.mcgod
|
||||
stats:
|
||||
mcstats:
|
||||
description: Shows your mcMMO stats and xp
|
||||
mcremove:
|
||||
description: Remove a user from the database
|
||||
mmoedit:
|
||||
description: Edit the skill values for a user
|
||||
permission: mcmmo.tools.mmoedit
|
||||
@@ -44,10 +49,7 @@ commands:
|
||||
party:
|
||||
description: Create/join a party
|
||||
permission: mcmmo.commands.party
|
||||
myspawn:
|
||||
description: Teleport to your MySpawn
|
||||
permission: mcmmo.commands.myspawn
|
||||
whois:
|
||||
inspect:
|
||||
description: View mcMMO stats of another player
|
||||
invite:
|
||||
description: Invite a player into your party
|
||||
@@ -55,9 +57,6 @@ commands:
|
||||
accept:
|
||||
description: Accept a party invite
|
||||
permission: mcmmo.chat.partychat
|
||||
clearmyspawn:
|
||||
description: Clear your MySpawn location
|
||||
permission: mcmmo.commands.myspawn
|
||||
mmoupdate:
|
||||
description: Convert from Flat File to MySQL
|
||||
permission: mcmmo.admin
|
||||
@@ -100,7 +99,6 @@ permissions:
|
||||
mcmmo.admin: true
|
||||
mcmmo.tools.*: true
|
||||
mcmmo.chat.adminchat: true
|
||||
|
||||
mcmmo.defaults:
|
||||
default: true
|
||||
description: mcmmo permisions that default to true
|
||||
@@ -111,7 +109,6 @@ permissions:
|
||||
mcmmo.commands.*: true
|
||||
mcmmo.chat.partychat: true
|
||||
mcmmo.skills.*: true
|
||||
|
||||
mcmmo.defaultsop:
|
||||
default: op
|
||||
description: mcmmo permissions that default to op
|
||||
@@ -119,9 +116,8 @@ permissions:
|
||||
mcmmo.chat.adminchat: true
|
||||
mcmmo.admin: true
|
||||
mcmmo.tools.*: true
|
||||
|
||||
mcmmo.admin:
|
||||
description:
|
||||
description: Allows access to mmoupdate and other sensitive commands
|
||||
mcmmo.tools.*:
|
||||
description: Implies all mcmmo.tools permissions.
|
||||
children:
|
||||
@@ -129,11 +125,11 @@ permissions:
|
||||
mcmmo.tools.mmoedit: true
|
||||
mcmmo.tools.mcgod: true
|
||||
mcmmo.tools.mcrefresh:
|
||||
description:
|
||||
description: Allows access to mcrefresh command
|
||||
mcmmo.tools.mmoedit:
|
||||
description:
|
||||
description: Allows access to mmoedit command
|
||||
mcmmo.tools.mcgod:
|
||||
description:
|
||||
description: Allows access to mcgod command
|
||||
mcmmo.ability.*:
|
||||
description: Implies all mcmmo.ability permissions.
|
||||
children:
|
||||
@@ -145,50 +141,42 @@ permissions:
|
||||
mcmmo.ability.swords: true
|
||||
mcmmo.ability.woodcutting: true
|
||||
mcmmo.ability.herbalism:
|
||||
description:
|
||||
description: Allows access to Green Terra ability
|
||||
mcmmo.ability.excavation:
|
||||
description:
|
||||
description: Allows access to Giga Drill Breaker ability
|
||||
mcmmo.ability.unarmed:
|
||||
description:
|
||||
description: Allows access to Berserker ability
|
||||
mcmmo.ability.mining:
|
||||
description:
|
||||
description: Allows access to Super Breaker ability
|
||||
mcmmo.ability.axes:
|
||||
description:
|
||||
description: Allows access to Skull Splitter ability
|
||||
mcmmo.ability.swords:
|
||||
description:
|
||||
description: Allows access to Serrated Strikes ability
|
||||
mcmmo.ability.woodcutting:
|
||||
description:
|
||||
description: Allows access to Tree Feller ability
|
||||
mcmmo.item.*:
|
||||
description: Implies all mcmmo.item permissions.
|
||||
children:
|
||||
mcmmo.item.chimaerawing: true
|
||||
mcmmo.item.chimaerawing:
|
||||
description:
|
||||
mcmmo.regeneration:
|
||||
description:
|
||||
description: Allows use of Chimaera Wing item
|
||||
mcmmo.motd:
|
||||
description:
|
||||
description: Allows access to the motd
|
||||
mcmmo.commands.*:
|
||||
description: Implies all mcmmo.commands permissions.
|
||||
children:
|
||||
mcmmo.commands.ability: true
|
||||
mcmmo.commands.myspawn: true
|
||||
mcmmo.commands.setmyspawn: true
|
||||
mcmmo.commands.ability: true
|
||||
mcmmo.commands.ptp: true
|
||||
mcmmo.commands.whois: true
|
||||
mcmmo.commands.inspect: true
|
||||
mcmmo.commands.party: true
|
||||
mcmmo.commands.ability:
|
||||
description:
|
||||
mcmmo.commands.myspawn:
|
||||
description:
|
||||
mcmmo.commands.setmyspawn:
|
||||
description:
|
||||
description: Allows access to the mcability command
|
||||
mcmmo.commands.ptp:
|
||||
description:
|
||||
mcmmo.commands.whois:
|
||||
description:
|
||||
description: Allows access to the ptp command
|
||||
mcmmo.commands.inspect:
|
||||
description: Allows access to the inspect command
|
||||
mcmmo.commands.party:
|
||||
description:
|
||||
description: Allows acces to the party command
|
||||
mcmmo.chat.*:
|
||||
description: Implies all mcmmo.chat permissions. (Warning, contains adminchat)
|
||||
children:
|
||||
@@ -201,8 +189,6 @@ permissions:
|
||||
mcmmo.skills.*:
|
||||
description: Implies all mcmmo.skills permissions.
|
||||
children:
|
||||
mcmmo.skills.alchemy: true
|
||||
mcmmo.skills.enchanting: true
|
||||
mcmmo.skills.fishing: true
|
||||
mcmmo.skills.taming: true
|
||||
mcmmo.skills.mining: true
|
||||
@@ -215,25 +201,28 @@ permissions:
|
||||
mcmmo.skills.swords: true
|
||||
mcmmo.skills.axes: true
|
||||
mcmmo.skills.acrobatics: true
|
||||
mcmmo.skills.blastmining: true
|
||||
mcmmo.skills.taming:
|
||||
description:
|
||||
description: Allows access to the Taming skill
|
||||
mcmmo.skills.mining:
|
||||
description:
|
||||
description: Allows access to the Mining skill
|
||||
mcmmo.skills.woodcutting:
|
||||
description:
|
||||
description: Allows access to the Woodcutting skill
|
||||
mcmmo.skills.repair:
|
||||
description:
|
||||
description: Allows access to the Repair skill
|
||||
mcmmo.skills.unarmed:
|
||||
description:
|
||||
description: Allows access to the Unarmed skill
|
||||
mcmmo.skills.archery:
|
||||
description:
|
||||
description: Allows access to the Archery skill
|
||||
mcmmo.skills.herbalism:
|
||||
description:
|
||||
description: Allows access to the Herbalism skill
|
||||
mcmmo.skills.excavation:
|
||||
description:
|
||||
description: Allows access to the Excavation skill
|
||||
mcmmo.skills.swords:
|
||||
description:
|
||||
description: Allows access to the Swords skill
|
||||
mcmmo.skills.axes:
|
||||
description:
|
||||
description: Allows access to the Axes skill
|
||||
mcmmo.skills.acrobatics:
|
||||
description:
|
||||
description: Allows access to the Acrobatics skill
|
||||
mcmmo.skills.blastmining:
|
||||
description: Allows access to the Blast Mining subskill for Mining
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user