From 7a2e0f9f7488f5896a8473445933485576b8e8bf Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Fri, 1 Nov 2013 23:28:39 -0700 Subject: [PATCH] First Commit --- BankEconomyMod/.classpath | 9 + BankEconomyMod/.project | 23 + .../org.eclipse.core.resources.prefs | 4 + .../.settings/org.eclipse.jdt.core.prefs | 11 + ....eclipse.wst.common.project.facet.core.xml | 4 + BankEconomyMod/accounts.yml | 0 .../bin/me/kaZep/Base/ArrowShooter.class | Bin 0 -> 726 bytes .../bin/me/kaZep/Base/BrewingStandData.class | Bin 0 -> 3313 bytes .../bin/me/kaZep/Base/DamageAPI.class | Bin 0 -> 6543 bytes .../me/kaZep/Base/EnchantLevelDatabase.class | Bin 0 -> 14089 bytes .../bin/me/kaZep/Base/EntityHitData.class | Bin 0 -> 1007 bytes .../me/kaZep/Base/EntityInteractData.class | Bin 0 -> 1106 bytes .../bin/me/kaZep/Base/ExplorerData.class | Bin 0 -> 1384 bytes .../bin/me/kaZep/Base/FurnaceData.class | Bin 0 -> 1455 bytes .../bin/me/kaZep/Base/InvisibilityData.class | Bin 0 -> 466 bytes .../bin/me/kaZep/Base/JukeboxData.class | Bin 0 -> 2717 bytes BankEconomyMod/bin/me/kaZep/Base/Main$1.class | Bin 0 -> 30264 bytes BankEconomyMod/bin/me/kaZep/Base/Main$2.class | Bin 0 -> 26549 bytes BankEconomyMod/bin/me/kaZep/Base/Main$3.class | Bin 0 -> 2567 bytes BankEconomyMod/bin/me/kaZep/Base/Main$4.class | Bin 0 -> 4721 bytes BankEconomyMod/bin/me/kaZep/Base/Main.class | Bin 0 -> 63310 bytes .../bin/me/kaZep/Base/Metrics$1.class | Bin 0 -> 1957 bytes .../bin/me/kaZep/Base/Metrics$Graph.class | Bin 0 -> 1784 bytes .../bin/me/kaZep/Base/Metrics$Plotter.class | Bin 0 -> 1108 bytes .../bin/me/kaZep/Base/Metrics.class | Bin 0 -> 9493 bytes .../kaZep/Base/PersistentExplorerList.class | Bin 0 -> 681 bytes .../bin/me/kaZep/Base/PlayerBuffData.class | Bin 0 -> 8439 bytes .../bin/me/kaZep/Base/PlayerData.class | Bin 0 -> 1566 bytes .../bin/me/kaZep/Base/PlayerListener$1.class | Bin 0 -> 1231 bytes .../bin/me/kaZep/Base/PlayerListener$2.class | Bin 0 -> 1225 bytes .../bin/me/kaZep/Base/PlayerListener$3.class | Bin 0 -> 1225 bytes .../bin/me/kaZep/Base/PlayerListener$4.class | Bin 0 -> 1217 bytes .../bin/me/kaZep/Base/PlayerListener$5.class | Bin 0 -> 3364 bytes .../bin/me/kaZep/Base/PlayerListener$6.class | Bin 0 -> 1227 bytes .../bin/me/kaZep/Base/PlayerListener.class | Bin 0 -> 204087 bytes .../bin/me/kaZep/Base/ReviveInventory.class | Bin 0 -> 1231 bytes .../bin/me/kaZep/Base/StoreValues.class | Bin 0 -> 576 bytes .../bin/me/kaZep/Base/SupportEntity.class | Bin 0 -> 1007 bytes .../bin/me/kaZep/Base/SupportPlayer.class | Bin 0 -> 520 bytes .../bin/me/kaZep/Base/TempWeb.class | Bin 0 -> 422 bytes .../bin/me/kaZep/Commands/JobsDataInfo.class | Bin 0 -> 7272 bytes .../kaZep/Commands/commandBankEconomy.class | Bin 0 -> 52713 bytes BankEconomyMod/config.yml | 0 BankEconomyMod/plugin.yml | 25 + .../src/me/kaZep/Base/ArrowShooter.java | 20 + .../src/me/kaZep/Base/BrewingStandData.java | 104 + .../src/me/kaZep/Base/DamageAPI.java | 145 + .../me/kaZep/Base/EnchantLevelDatabase.java | 385 + .../src/me/kaZep/Base/EntityHitData.java | 26 + .../src/me/kaZep/Base/EntityInteractData.java | 29 + .../src/me/kaZep/Base/ExplorerData.java | 36 + .../src/me/kaZep/Base/FurnaceData.java | 42 + .../src/me/kaZep/Base/InvisibilityData.java | 12 + .../src/me/kaZep/Base/JukeboxData.java | 75 + BankEconomyMod/src/me/kaZep/Base/Main.java | 3984 ++++++ BankEconomyMod/src/me/kaZep/Base/Metrics.java | 359 + .../me/kaZep/Base/PersistentExplorerList.java | 18 + .../src/me/kaZep/Base/PlayerBuffData.java | 237 + .../src/me/kaZep/Base/PlayerData.java | 69 + .../src/me/kaZep/Base/PlayerListener.java | 10131 ++++++++++++++++ .../src/me/kaZep/Base/ReviveInventory.java | 24 + .../src/me/kaZep/Base/StoreValues.java | 16 + .../src/me/kaZep/Base/SupportEntity.java | 26 + .../src/me/kaZep/Base/SupportPlayer.java | 13 + BankEconomyMod/src/me/kaZep/Base/TempWeb.java | 12 + .../src/me/kaZep/Commands/JobsDataInfo.java | 252 + .../me/kaZep/Commands/commandBankEconomy.java | 913 ++ 67 files changed, 17004 insertions(+) create mode 100644 BankEconomyMod/.classpath create mode 100644 BankEconomyMod/.project create mode 100644 BankEconomyMod/.settings/org.eclipse.core.resources.prefs create mode 100644 BankEconomyMod/.settings/org.eclipse.jdt.core.prefs create mode 100644 BankEconomyMod/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 BankEconomyMod/accounts.yml create mode 100644 BankEconomyMod/bin/me/kaZep/Base/ArrowShooter.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/BrewingStandData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/DamageAPI.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/EnchantLevelDatabase.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/EntityHitData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/EntityInteractData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/ExplorerData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/FurnaceData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/InvisibilityData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/JukeboxData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Main$1.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Main$2.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Main$3.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Main$4.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Main.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Metrics$1.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Metrics$Graph.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Metrics$Plotter.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/Metrics.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PersistentExplorerList.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerBuffData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerData.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener$1.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener$2.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener$3.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener$4.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener$5.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener$6.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/PlayerListener.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/ReviveInventory.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/StoreValues.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/SupportEntity.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/SupportPlayer.class create mode 100644 BankEconomyMod/bin/me/kaZep/Base/TempWeb.class create mode 100644 BankEconomyMod/bin/me/kaZep/Commands/JobsDataInfo.class create mode 100644 BankEconomyMod/bin/me/kaZep/Commands/commandBankEconomy.class create mode 100644 BankEconomyMod/config.yml create mode 100644 BankEconomyMod/plugin.yml create mode 100644 BankEconomyMod/src/me/kaZep/Base/ArrowShooter.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/BrewingStandData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/DamageAPI.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/EnchantLevelDatabase.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/EntityHitData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/EntityInteractData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/ExplorerData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/FurnaceData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/InvisibilityData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/JukeboxData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/Main.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/Metrics.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/PersistentExplorerList.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/PlayerBuffData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/PlayerData.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/PlayerListener.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/ReviveInventory.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/StoreValues.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/SupportEntity.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/SupportPlayer.java create mode 100644 BankEconomyMod/src/me/kaZep/Base/TempWeb.java create mode 100644 BankEconomyMod/src/me/kaZep/Commands/JobsDataInfo.java create mode 100644 BankEconomyMod/src/me/kaZep/Commands/commandBankEconomy.java diff --git a/BankEconomyMod/.classpath b/BankEconomyMod/.classpath new file mode 100644 index 0000000..1b6ee66 --- /dev/null +++ b/BankEconomyMod/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/BankEconomyMod/.project b/BankEconomyMod/.project new file mode 100644 index 0000000..9dbae4b --- /dev/null +++ b/BankEconomyMod/.project @@ -0,0 +1,23 @@ + + + BankEconomyMod + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/BankEconomyMod/.settings/org.eclipse.core.resources.prefs b/BankEconomyMod/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..cfed1fd --- /dev/null +++ b/BankEconomyMod/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/me/kaZep/Base/Main.java=UTF-8 +encoding//src/me/kaZep/Base/PlayerBuffData.java=UTF-8 +encoding//src/me/kaZep/Base/PlayerListener.java=UTF-8 diff --git a/BankEconomyMod/.settings/org.eclipse.jdt.core.prefs b/BankEconomyMod/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..54e493c --- /dev/null +++ b/BankEconomyMod/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/BankEconomyMod/.settings/org.eclipse.wst.common.project.facet.core.xml b/BankEconomyMod/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..4b45bbe --- /dev/null +++ b/BankEconomyMod/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,4 @@ + + + + diff --git a/BankEconomyMod/accounts.yml b/BankEconomyMod/accounts.yml new file mode 100644 index 0000000..e69de29 diff --git a/BankEconomyMod/bin/me/kaZep/Base/ArrowShooter.class b/BankEconomyMod/bin/me/kaZep/Base/ArrowShooter.class new file mode 100644 index 0000000000000000000000000000000000000000..4311ff396b2b9aed4568a68397e34bc762a4d43f GIT binary patch literal 726 zcmZ`$O>fgc5Pjn~O%vRYq%EYSErkMV3}Pj&ph|#1ie!OAQ4ZW3XGynlyzORP)IZca zhX{!SKY$;FnB7#!2e74`H?wbN-pu^^{o^Nq=XlgWK-if|F-bqmbMZQzN%6`U{q^Kj zYb#9yAz}S2y-Y=(7Gv>YcqTJTs9QCahCqEn^NW!er7W^5LTz?FB6JgN#$s4bCd!J^ zs$2~Cl{PP!kn4=FRV5@kORdrc-!^88vV?;wLl#!qE0L&6RgB+yhsjGXRiW%L;p0)2 zT&-7)|1Hz+SHu6x-5U_XH+m#nsG$>K6&tMls5fYWwMVF9$)P(D8Vj@?VHr&qyBnc} zTMq3-h_FIfOH?7>m(!s%pVDD22^}XTAEZV(|0WpPQ#B*(CjVas_q;qRjUN`Fb)rj? z$#=@7Y*&}|%yWjX#fPFq6`}`{i-B|cvbtB}=UCz9ZHV)B2k0bY( md%UQE16J(5*uNodPC6w5zvItB!FUTdICp`goK6wTHD&HZEdyp zTBncgOzexDX=`o82gfHKI@3SUr@nQj&z(+ZoT>fx&f##t*fIm>>~;OtTHjuWpZ~f4 z0Kg91bfHAxnGwS`toIwEz7~DV@U>)($z*ycn$y#RZF)|3!6~r#tUjUpQhIvG7fzft z266(9(ae}YO)!%k@+HQHhm$#9Ff*X%l9_aqKxt+&ZDa+ig0r5{T$X{Ubmo#HhJZLK z;2tw_X=Bn9^b3?7NT!pyW&y9KXy_;7)%P-DYi7`J!+|9lDp5srp8DPe5Ll|A6lL6dz@^4IeQ*1jHjkpRqW?NnwUf=;Bw9H! zyEHt9-5eatXh~%ThW+G%ulTI$?fpqeW1n(im-b@63;Q?~TbFDW8k%sR(0>v!$C}rA zo)%3RG`T>|ta&n;jm;G}h{GD5#SYSpq?^!FBw?q3mMB<_NzOA>5!kjc>|iBx4h)C% zQM308WitvU)>u1bx=sy8&`yTU8gysm6&aJ-poS2-n4j9t^n{VlWwPfBa(mAFhUp9E^PulC9_3q3WBdX3OH+pg0g+A_z zqIoP!4JW`m>|#B!^P`;Fvbm*%I7*T>)wBRF;FJq53RK%7&ZsrS@e;3Tw5Q!4nYUwR zY*dJZh5>2mj&^sp1tRgliGYl3XgDp!<&i*JG#2hs!ZR9@Qn;`^817Tjcw0|2Chdnc zq@>Cf?Fn{w^hBgAtsx_2OOFI1p+HwG&=#MYW@Ui3c@QIE-06lpuay5?+*8|9_jL$hS#N{ zBIIum`QxpTfIlSVZ)kW^%H8c9{%9;73&>81guuH09Vdg0DiRK4#?!pLBI&|q?ioF6 znB?r$Q%PO~E~kFUvG+7w!*#+|JRQm!gGrJ{VEx?b7NZVt8lAYWp5TJqVdlr8GC3CK zeUw)xYA|jEx6h1#yWP_-SG zdXu8Oyb2#=1ruSXrm#ogAr4MsU2#RIVbv54l|W{9s2ZzOH`ihXt7&A1_wW-pTiad>#a{T)!t9Mi z(~36c52zSo4~1NiCa_CX$RhU@&;L|l!L3v15V-BQJrCJtBHO~O9wPJF`m@hOHiJjl z@f@AOBc_Q)ew_b)8lK;ZDaTvdo41dt~PkR5w=}W@wD)iYJ%e112p!a=T!e!2(8TW97 zBy!OE4&LIMQw?oBoR1l()CJ+fK^NW@yh4wVFL}&6M3KBu0`K6e$+4Rz$2y9SZW@in z71m7O6;Sh=xP?;3ZRafIYE=zE_9(<2brDpU)kSQy>#*vpHS3etpcLW}4F%rE2PQ}# zpAvYfyqw?irLa=Ul(1Jt)CvY>M1c>j3hmDI5}w_;zo_#^_?Y43wwv8EtLAL8!k#%r zuyI>KWoCNrC49o&DN%oljbL(ZN{OxDZ>9j3e MwbhgxD(UC{0^TCJF8}}l literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/DamageAPI.class b/BankEconomyMod/bin/me/kaZep/Base/DamageAPI.class new file mode 100644 index 0000000000000000000000000000000000000000..d7a7951bbbbfab75753b08d7342b70b0f39d3fcb GIT binary patch literal 6543 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 literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/EnchantLevelDatabase.class b/BankEconomyMod/bin/me/kaZep/Base/EnchantLevelDatabase.class new file mode 100644 index 0000000000000000000000000000000000000000..892245333dbc314a0a9c0b1600a17e5bb0281724 GIT binary patch literal 14089 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 Us&6j9P9-Wp3L|HEs)l&>2l=+o@Bjb+ literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/ExplorerData.class b/BankEconomyMod/bin/me/kaZep/Base/ExplorerData.class new file mode 100644 index 0000000000000000000000000000000000000000..585840cdc63d6694aa13a63a831e2bd0aeb426cc GIT binary patch literal 1384 zcmZ`&Yf}?R6g>^mKx`ffDy&a@E)2@}T6Yzn7@}wt7Fc#=AKD~cabz+x4wD%8S6Y?Q z-4FW%{85&tds3BH;)l8C+&kU3Z{K_R)93&G2XF-{i#~xPb?t7c4IR1jYFoPtt;i2! z9T!!?{~3YN*Q%*pUj;RHY4f$NBm(;*U+w5vpiu7qTuovxsLcrswxU=!y|A$@Ad2*N zyZ%ti55uh~Y5$K~=}KI3#v=4hK4UrQ>cOYtF8#NFd)~ zOq=XfxXrXhw<1+15ha0rbo?fRZ*|qvRR%Zc-0}i1xg#(>^=;>h#p!i{%!9D1bLht@ ziQ_me&_6Z3J_v!c68o^Y>gF_C~+A>Jgd04 zvS#vJm5>-R>?eugl>IC*lCm2TqsW`Ta}tG=-If?j*BcyU?B?*KHqcl zyq%*&2@k1=nogEG5}Mtk6Vtt;*FoYXJ8rsu?f@3?B#Xxa6Fu3#S|d@$Q}&vNP|UW0 zB~$#8!~}jY34WDW!K%Ojmy~r=`*zWyS@fI4k@PmdOB}^9fswKo=x2@krjFOtrcY%S z%3($M>xzP;-w9@tR~`j_to;4wMDga*mlLQu^JH34$Ss*&3%S*>5m$7{Ge_impW&=| zWH`m@`uT1P{3rxk7#Uck2rNj+;VOr!UEpm_+IYx_zJ2>7! z_Rq%IB8zMgk=mwIPtcyE_nB3i>SE^uCY_l!&Nx$ToO32JZTx8Hw52o7dt7YeN($Ff zxbBQr+xW%Wo7Ud4_KvmpoSBc9{}+!0+IZG+mW{LK^tZA8j;HqF58B7JO9f;o(m~2| zn8G}W!>oRsHBR6>*+mZe8b^GSceuy;OT0mue^)Sx7woo=(|Ch3c+PwdGx0{)z@J3J Y{^A{lWq-5ReU|-0mSOY-y*|AB0vYWc%m4rY literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/FurnaceData.class b/BankEconomyMod/bin/me/kaZep/Base/FurnaceData.class new file mode 100644 index 0000000000000000000000000000000000000000..4a2fc65f6a4e42c73a15bfde8e418be08eb7ca53 GIT binary patch literal 1455 zcmaJ>+fvg|6kVq+O=-ieg>qB53G{+Q0k0s+#Xc}q9?Ia1Z)u4&v@}de<;g$78J&?) zd~kg7!H;rW=OjWIitRKxIcM*+*IsL&RO-8{04Lep)S z6>HP~@$3UjKx_#_SL}xEtqSBaZIP~~XLkv(;p|y)gwdlTfnJiyWOqBk zaymK?m8*Uo8e%b|$>rE_>w9qwVMN2QKwk^xb;VrAC~gSEs+RX!#tO`2+Ei|3sN$9r zxP@^IV^pXGRGsOVz@$Ken1yD&zN1zds@(;9Yg91uc>-6}XRY`VoSI0dp2*l-S z-Ko^p=(Ew@m~5*UWf^R!lw}P|0z)lo_=mwnCGY@`G&~eYUkOq9Iv(SRZ$-&7Jqj_F zxvrK9pa+Xs(Qya!0@_=Da0N!L@(U9zcEE~V{qD%G8~^B!eH0y?iK!6AVI?>H<5601p40p$UFl3SA z6JZqzp;nSch-LGb3yQDuImEN5ES$Qi5Lde?=JqSpv>$bj8dWXvb(R(cSRVqcCB;1V z1$}2QLimZrUzoVOcZT~y9u)IupfxAq6LJWv-jeJJ7-Zcc@*L)$)o2TYrGP=6^`Byu zm7l3hvB2eXtOZmI-et=jlEo)3eBGq*ph8k7DZezx*GXUxdxJpGXyt;x6B fCT~!DKY5LiGWoy$`RdLhNw5npsdFxys_2WqZc-dv literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/InvisibilityData.class b/BankEconomyMod/bin/me/kaZep/Base/InvisibilityData.class new file mode 100644 index 0000000000000000000000000000000000000000..0dfac3ce634fc393cda3355fa52da4b95d106eab GIT binary patch literal 466 zcmaJ-O;5r=5PefBrC34vP~c$j1~svXSB(cHCXhxC3I}gn*yutjrYt1>EDyxQgFnC@ zWt?q1aqu$p-p=IBd;9(K`32w{Ee96icrJsPc#^NdwOGoapRCnVMJiVMttYf_U=#MI zVl9GLB+tQpG?imb$gM@pgD{({w2Fh_u;05NxT#!9t<_u-Xh6tcszm84LanpCJm`)H z_RV462mw<@Z7Mlb$)>~_Xs1Q+Tvbb+z_8X9k=geaM`B&e?mPZ}0u>oxlG5{SN^9a92Y> zVB?&bDjL&fB{gi+%+z?jXy)vz8N)F&gaq1VjVnf~WRz!8@8xFAyd$8^x;g?qS-U!u z%GHZS%Sq)*cD|Szmfy5Ms9@EK0$qNM(}rVKEu+Nirm9&n4LTEJ0(#9Z&lKua!?EnL zK#SZuR=!wsjH*-_=UKjF*UXwzDH#i9m1i0H7_`ckGbFG-?tjIP!+*Z=`qO&?OLzC#Kdxpj$^P)=O!ljxd^}v`L4CW+`pfu?`U_ZPgKVrR_R&v|DvoEVX=~S)qOgiCDq0&o7aS(55I7D*zoT@t=Z{x5)ls-r6rP6tYj+n-yNaKix zL4lah##bsGLpbW9nRLh#rZ?X3wog|nq%|BT17Gpx5jcut7}1fz2_~^-I%i27#zTt+ zvaFCoGNOf!^TpFf#j8_Cy;2~Q5tn+>gIR4l{``62#dWas2l1|sEKc(Q#_L|QtnI|D z(pYz_QYvfJ9A+$y_jH`aIns{07ZusYqL{?{8qN!}HX7)d!UgJ3l`Rw>^BnrRkkMai zjGkn$oQ0GNBZ`aoK*xvp$SsCsq1#;Djagm3NJsDq*zunVbof%bd@Zr(6zEI@1$?G~ z1#&?vP)y@x9W%I09V5pigyNY*Mut7BqqrRQCHcslJjlr_TSsO2YFb`ZanDvIbA?PqNSy}WaLVy$l9P=jlT&TIx6Q1~y$+sCsIgd^Fy{;o zH_2DYEsxUzy^YoL^#rj-ChdAPZ;o1W@U-~``5wtGZ0E=da_~3t$En6Ir+<=na zASfA3KjM@^N=guPn3_opcu? z2k;Qh$)F74(i8NB3R0r*0O8=H&?CAEs$h091fZ8eY+?v~d~!2(GmL%MhCya}gjy#U zf(%G^A$S3e@+6Gl?od0APtsT=RcvL9VP4%!cH$IM>fz--Up9E;A?97IX9VsH^etf` zK+G4HFfH&aKAw4synAo0bzhSAo&x_}Uv==gQW#IrN9>3Dj6XpDw*sPXUn-Huzhf_cW;i5s}eiUnxZiUrau zNXbo-tMvu7WRhAC{0H3{CdJ>V1bFx*GwL$%6wM_KbVp<9SV~J*&e!^ggD0m$xqW4*5zM_S^_uM{dPfLUfH|Kd&-A zyr%ID9A3kC+fS>E2iG+I7Ux!sWf<pMu#c{3d~;3XzSYLVYZ~9eZSUnVuJYwp pNxo;~4VTA4X3lLAw-6`Dl~FdqDWA7iFN3nq>`>Vu-znsG{sUvZC#wJe literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Main$1.class b/BankEconomyMod/bin/me/kaZep/Base/Main$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ed9bde9bc4888473a993e03c64ebcc355f210eb6 GIT binary patch literal 30264 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�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 literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Main$3.class b/BankEconomyMod/bin/me/kaZep/Base/Main$3.class new file mode 100644 index 0000000000000000000000000000000000000000..b1db1f1d04040a0c6e058b80eb3b37e16bef37db GIT binary patch literal 2567 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 YTP%H##2D|&E>tm*x#@}bYg+{TAFPKLQvd(} literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Main.class b/BankEconomyMod/bin/me/kaZep/Base/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..0ed10b9128b3764359750fd34071c00f197ce611 GIT binary patch literal 63310 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 rItaRB17F0bhN7>CSYe`wIE}zL literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Metrics$1.class b/BankEconomyMod/bin/me/kaZep/Base/Metrics$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6b23cdbfc1f2a895340474dbe982ebf574bc4fc1 GIT binary patch literal 1957 zcmaJ>ZBrXn7(F*hxe#tCh0-@rQDe=EWefP8S}hbLZ6F93CAHPf<`Nc`-LNmzany0f z{)v9^E1&CF3Ob`R_M1P+an$GT1_MK4GP`^CKF>YRbI#s-{`mXnUja!}CsSrfOglB%1BNpKJxC@I$60}13^2sg znX-zU6X58kjG}4FgIJsMZ)RwJ(|)r`FbnAv8y^w0IBadQBvPj6hLVr=@!rdMkCrGTU(N);7)Mc@ivZK03< zpGpO_A|sGRuC-!b?nG)9oqAoVFhVMX8z%5gOS5R!q!SoL^F5eHiDQ9IR+}8T zBQ1eNd_?>T3$rD)%{!!#e9MO*;Spb^qi@%z0@JEVw;LamUU!>*aBnn;C48dJ-KXkn zAKA~*s=Oju!Dk$I83x0OrlS=~GhZ6A;hT;va1Zwhk-qml9T&Y$o^kGw=aKSsFqZIz zfQ~9Tgx+XKyT)*}UBwekG+PfLY64Of?Dn0g!zAi3Io4@ow-F>%USI>XG2)~+!&tNA z@o%8?&7UYt?8)_r(NGjRPM!SZ^s=uToAY`jv>=Ygp-3U~m37y75E)i-*$G@j&YH?o zMN|DT)iBxHjBQwsN8gC%*BxRQDEBz!`MOKiAquuF-DykrJn3PSd@)YfDa7bc_6YR% zD+49(kI~f&LDADRx*28wXR^5`=*vDue>U+1gO9_+A-eYw5JIR80k9Z^nC6Jz;&A>%Y=L9=ADU;J5@PhiZgW&dsPZ<=#^6#-AVCh~ NV~0jbN>i%R?_VQI=l1{r literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Metrics$Graph.class b/BankEconomyMod/bin/me/kaZep/Base/Metrics$Graph.class new file mode 100644 index 0000000000000000000000000000000000000000..a4091064429161789715e58056a3b3127bf5a8a1 GIT binary patch literal 1784 zcmah}+j0{}6zq{@ttBtMD87J+gJTTn;vi5GZgQLib2Hc`RZ2v`+gh5)i&wkO?uw7e zH}H^D1)PK`DtXOErRbR*Bw^(8i+1MBoIc&>^yt6;|9%UgiX96nfwLW1*>|4FgUW3u zl9g>4hi)@kxgRgq(!SG?0{N}}QJraiyCyJp;019k z!$@EXV*35*nq4GVdJc}-PQ*>e4T*?QnadnA>^G$ykkqzwyWYBg_T6d6U|_2o{t zvn#_Non2204w{bFa6(t@O)wqrxfHv241e87a<|$t-qCHFDHK0uFOYLuEhAQ7xo`~J z`*su?T9DS8!Na#<%B!ZsAPP#;xn=_QxZ6LLLtJ3vJjQviLW@OuHOk-?$3HA z)Gx4P+|es<`rX^prF$H|GK;pzW)3%S%fihM+@4t4#@Dz;sq&Yu<3;M?H#TZoePEu$ z;5#rq78q@-7sT$>W2d>l?Hm}pREJpim=Pq_DK>I6!9T^KDN*59@NBg72j+g`A_WDRQ9-e&VH6u)Ffan2;T$81-yPmo z{A?!Al>fp~3Qzj9a_UShV_cjcpkw#w*tm#GL=q?*i&z|jc!`LG6A)MN1*<1ry{x%b zbtPa-as3mOqgq!7w2t+((zr(JVE)`|Tz^U3gT1;sG@mXv`5oR?vtKCx3-K#PM_!iy zf!JPU+g0mdV@)BB=DSWRnM0N_a u(QQ-uqA8szl@GDeA5b#nc@3?`n8IECdk^>d&2umC01w&5NBnN5v+n??`(tDP literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Metrics$Plotter.class b/BankEconomyMod/bin/me/kaZep/Base/Metrics$Plotter.class new file mode 100644 index 0000000000000000000000000000000000000000..ef8a900e0e93d260b998adb9dffe01f01ae42320 GIT binary patch literal 1108 zcmaJ=O;giQ6g{s^NgKn52#6mDC~DgvQ5?qwjtfynw4e@77i{EFo)Ab=Oj3V=e?nLO z02VrU?WM6>&Or-zGSvE>aX9=39Qd87wF54V5b= z)d>_r6)Bof+>+6j?oKy!$;LUHw=jXrCMJ)VmO5kOB1U!Ql#R0(rBCWjTl!Rg#Dmn~ zxyq`BD%-eVM8r=+CV#-?TnrouZuyT z!g*gtk%~;*qKNc?OWj7h4`b9Xp+?I0tQFR@81c0_XdS@*%rJ+3el4C5 zk7)V=26(sAG@K@ohT|$^5DUy?F0ASS&QzVR7(PVl)8yhYSMmu;;%S03l4fT}nn?>2 z+**2^U~?)Nw#!q?D^$N=_!EOv9McK=qDxqzBkV$_HzxsO;-Q|ju-;WDI)$8d#(I}D znzgsOkFkA>^SH9McZ_|t3#7LL!r5ma?+BuucbuOPA5h5eIX@tlrrC&YW*^tzV_=%d z8vP>*#$H}iM? TIowEe&%ouWcUj;jW{uKc0h_xT literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/Metrics.class b/BankEconomyMod/bin/me/kaZep/Base/Metrics.class new file mode 100644 index 0000000000000000000000000000000000000000..32dc8609252235789b8411d17dad8649af367a65 GIT binary patch literal 9493 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 literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PersistentExplorerList.class b/BankEconomyMod/bin/me/kaZep/Base/PersistentExplorerList.class new file mode 100644 index 0000000000000000000000000000000000000000..5e55297c976cb37b4f0c7ec93d0d0ebdfb87a137 GIT binary patch literal 681 zcma)4+fEZv6kWR)rk9b@il7!RD8aTUlkkf10b>)%L`@(yF}|F(C-u6BkkU%y@JiF-WUEcnDy;eaS!Vr z?sE};*L*y{LqV0C-FXxpW}i%T`$aCA&!^9+%tt;vlmxZV#QN2I(%1G-^`mTm$v{Ot zWlb7iCJXL^nNeN%KL<+peUQxUKzB{b*u46V+v%OKPBD4PDiXOkdXg&3u#8HERrncR zyF}s2YwTNM_C2R^#I?>>)H_?JSnf1d&T#V_cLmGXP^Z}Z!g>xZ+6D@=i?lVAIp0Jb YZDv+}aiD`OMr6yh@SnhAMmaqB33DNpC;$Ke literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PlayerBuffData.class b/BankEconomyMod/bin/me/kaZep/Base/PlayerBuffData.class new file mode 100644 index 0000000000000000000000000000000000000000..bf01e8b9250168490474374e270fdf1e6ca24582 GIT binary patch literal 8439 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 literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PlayerData.class b/BankEconomyMod/bin/me/kaZep/Base/PlayerData.class new file mode 100644 index 0000000000000000000000000000000000000000..0d5d70b0333dcda34cc8da012c5e7a3ff597e5c4 GIT binary patch literal 1566 zcmZ`(TTdHT7@ULG_`*^Xz`-~HLc_&glWcl#>LhJ}P?18L28$?p>ao2d8?S9-){Xcd zeQlpwwo|I`yT-BVk?Cag+kkNTl%qg z=&tJ{&%Gb$W3RWVL!E-9F!5A>r`=joP$ z)g%pt;xMAu3H|Umrb*b*TYkq6?0N3I<~QlG;iJ9eo#weRU!GT z+Y6dmlu=2+QMfSl(z;R0#u~0s-vcjvC}$N`N;_xz?}a_Tb5Jc0w`tB*$Kc|f6mC%D zAyD(orqAywj1hCI9|Sd{J3FWHxgARVRli;LdNo}S=*Q$vx1oc5O~<&8i&pr=KN1t( zloOhu4hgsM#A~#6iAkcyK3?-U$)w5OO9o{x)I6XMV_^G>ZnwD|2Z9vW_0X|VFuYj|6}becPh`E^kki?ljHo}>I{8icZB!OTp8 znVADKGX-X51~@1AW)2e^FK{;?$_VFgoIfz>Ok@YhJ8FO#Co{mT440h50CQ4Xa4ItV zjzxJsx$-AUf8n|!#O%3U^u})l9l`q?KV(+ue><2lb~S6L~MkV`_h zF^MlRh5J150pGe9kt4=O+>s_eCK3(AO?(o!@C(~he71i^$$5cG)2Qn2e|#;s=cqW3 zUSQ7pR$4oIO}b@yBKs4vrfusaaYE#T>BBK{7Rl){mN3T;W1b(t0=ZqmCJou;_w|6? z)UaZ>+Yzgn`)%S_7+G6o_0B2xKCy*+S@`6wrpV9557GU3>qK_KClh%yL}#9U1461o z;nqm&8VVF~5jU{PuSn#JD3s4rD2RZc;xmqtfM;<6mMgq#=4TQxR47ee44-+9aZ^c3 zMO=;4D4I~+q^DJSb_+A~u1MG=d_Lsd@~LyntfzTptV2XbwQ4EIf(R<*p|luD3KAiF@Y}Q<+J)^b*$082Wg;5< z;1BRe8SiYXR4v_Pb{_Z6nR8~&{qghLcL2{&G!S8!Xh`!|e3U2VhVZ1hYm0N~mMqVg zO1hbO12KlwkvJ8mEmX~XUp|r*-$0xpeYN@_P)d|-$q@JJmY10$+)_8-JVVc^urntN zV+ z5XB%z5TOIq!g6FW)dbv^qQNki{U7f-c6vw1Yno#QPZ@fN*E=a}zaHLn zQFAsq=5&lxY+IZ)!wItHa{~(u01C@|657NKUki_INMrf`# zQaWy7lzN8S7-~UP5f5Waxz9*lVvM0Vm}Iy_CZcEk&6V8m&@96j%wOU~1pl0vT*YE? ft?k66)`?M~tVOJ0o%$F#<24F2O3>Mw8GXM1&r&ku literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$2.class b/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$2.class new file mode 100644 index 0000000000000000000000000000000000000000..ce28251fac2850b3e8f89227272ad2bf877b5ed5 GIT binary patch literal 1225 zcmaJ=ZBr6a7(Ew|4Y(@dOJ-(NR12DGmiB^aDK<5O=7i&izFpu7tIJ*6T^#*c&18*z z=m+$pnw|@!R0uQ6eR-be+;g6L?$2M}e*joO!9a*%x*@Ft@lhUHYr>b-wj)lYSG4^= zD(Phw3`7```{GDgj!-r0eR*G20s~Qo)WzN2wa7E9qa>Nji zBa9J_1V$OcrcNC$+DdLU8)fP3v?ZmAZbdk|!n5_dvl-Dk8Pa`OWfn+6*lVf;Zs4YY zDTay5#BxmI7QsrsDURFWI9c|=(pUUJDH@siv0D)No3{XX*dgPGF}ClhU`isSm!@J$)i-73dxtT7C^ zYTFHLSCtMO;Zq~#%36@873LplQhE_G9kShYVYL!gytB&;?WtNhVajciBDKecwHwhbxsTu XWi4U_t29Q)6R)sNvpAitnbGez1iLXR literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$3.class b/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$3.class new file mode 100644 index 0000000000000000000000000000000000000000..82ebacb3ab28cceceda436493a733a31f49cdc21 GIT binary patch literal 1225 zcmaJ=ZBtS~7(ENfO<0u>&CHC7>VoFAOnbqs6q}ksbHedM-xgTm>SeEU@5Rxd)lAmd zhkii6si~d?QYwU*%f39%bM~BP&wl^;^&5bPC>RJaOgE&pFFwcvYgPEt+H%CP^oq70 zNF}|@f`JG_Vow|j%Mq$(y({m@N?;($kUZag-&9JJ9mx<4>b9SmC){E`;5@^?p>Q$> z43kCIt6Amd{=OYpQU!K!++jgU(PdlN!3sm(?2mUbNOp%IvgTIhAQ(nC3|!K)%N&D< z#Sq3QM;s}Ju&Gl=infxQ%|=;z+igk7qFWKpj__=~?rcW1PKI<}R+$Bo5cZlXj%&DX zV2WYlBC#CPxWO<~lR>HCda~>augZ`yv)$7CvygS3mDlh$Id0)LgFyhBqCr=YqSEs# zDg~acYLt2h_YB-6>Rn8F!g83%wgI=LXfVv1|KnZ6PFJ*e&2Y@(KEojKdLxAs)LWe{ zXwDYLypC~-ZHS|GI7ZfdWMF||s-J^67O_OI^%iDXcnsraq0m$E6Ff8Ul&scUvgXQ> z$1=hB)c)q~u6@KX)=MrqBvx{pUPZpPwckhoelT;o;bfw9RdHOO8onWex?AOVg;j=O zS8ch0?W)p&BYbMaoY{T3@{sI*_5`{T*L5JT-O1l7dX{Tc?MokN@^P5H0fZ6>ZEPTs z)V8Mg9ilG|PSGKnJ*Rb;#*y6235IjCCrISJAo;PCI7a`mRso5N|G+q{bs?qW3MOb| zxQbKg&Mni>6m19Iju*8l(j literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$4.class b/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$4.class new file mode 100644 index 0000000000000000000000000000000000000000..73c834eb105a1d4c82c026954b003b525097398e GIT binary patch literal 1217 zcmaJ=YflqF6g|_Hu9N|4DTs)OT6HPNq5?jOpwJpj3K~oJ;J0Zzv(Q#`=IXE~leM8#5>7TS&P*Qxwv`v4NA*c7oyBK6+;b7D+{9T)MP;ga>|wbwN2%?VF}NZ9;V5^QEGjNB$LX} zKr*H5Om!WhHULi1K^i@$d6fF$?CdFqvU8_MX1^izIZPa-eV zvA$JXt9?;hYnw!^saDgfRU5;mG3Vrq=k$aA1Ag_pU;L=&82#ND7G~28(LFme_vLwi ze$R97pKtu}I)J@c(a<2UqaZVj<|$dsjF}~wIc}TF(#u&TUpmt3+ovHe(00aLGBdX6 z%x8|xoRN87Lz6&ief4D7am*Q83N-l(R;lmfl$+Z~@UTE)$+Y{5fjWWSoa@bJX3C3; zmYwI$DrWqdRr9 zLRX_M9h-1R0x@jYkwmvZEUnm+Im?kp%Y_-~O@+xx<=nh!Pn({l=BtZwl`$2Zjq=sE zj}eV|Wv3N8@lg$Z0zDgMOvf&KOhBKPJ~I}kM=Th?@04 z-9)eBZVU>vQro!e5V}4++L`XZZ5k5DV2=ic*SdPv0Hw2F?h$CAhN`$uwPwBWH44<-2$(xYADX{BSp(t=W0J5SRR%sp4u^*pi zZOJFfrcKYbq;u=F7gpqO|0$(wRL2;`nS1Iwec084WD7L ztcPpT_bg|AtZdn{(o<-DRL3biCZJK_QM14v)=>>r(D6bB+WdJuuHg$c-7wtKaT?61 z#)eat$L3US>*Oc0v?g*Ic~!CmQ%y=&_xq=tL22znCF%P#x-{gtzBRYJH-Tv^=&*2x zkv5A(=}^L8RB2Vhhm@{5PIsnZ>nJGCn|(K=Pr$_!8j1p$NHzQ~VbZ;llN#8>+ao&0g3hnwi(uiXA`1&#V5qKF5zf`-8`1}EZEwMs@l_39VJ0Jl z;|nI6gY9}czJ{+;%fZo;4?jM7;*n8-&S+O!BMhW{L&f=3>qoShnULVnUMdwHoE52GEzuzGzOQf-ILn4Q>mORQkF^aXcT$0huM^-;<%$l0GNL2J|-}hzK!A0?Rt(Y$Mmej``fr}mP)b&gV%%@pGL&n+SFYFXiKS^MDXQ3 zBKYza!HZ!7pCsBy-OkYw&KvpNHn4jIse!v!&@nK$g3f`i_zJcTT*0>Y0-hee69F$B zGc@erT&E0jqL=!?@m=T+r8Yc;IGVWh&cJ1KT*XHOt|Bdvi;cwgU&Md7+S#-B{`hXb z8oS~j;9OVZ2Y9tBUcpdTBVQNrS2ej;P42ybzo^N5YI0u%51hj_H9w%{2d?5^1JSJ% zZC&R+A5N?MFND*GgynFhMuzNG5)Uichi6ZZT*Q>J>R7Gh1GSR(d`NO{9m%bsHXuvmd}4ksd;z9PPY zFI~b@6+C?j&+wgkj>O#+d?)oH2TCpAcOSaG8f literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$6.class b/BankEconomyMod/bin/me/kaZep/Base/PlayerListener$6.class new file mode 100644 index 0000000000000000000000000000000000000000..7752dbb9f6331877716da4285923d2349e58f6d1 GIT binary patch literal 1227 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

Y;%3d@Dd~4$1+BjGo2Oo`tkH^9Fad1Nv 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 literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/ReviveInventory.class b/BankEconomyMod/bin/me/kaZep/Base/ReviveInventory.class new file mode 100644 index 0000000000000000000000000000000000000000..f633f6b0339f5ace2006333e2a27e42be8f37f46 GIT binary patch literal 1231 zcmah}>r&G|6#ljp0_}3YiXsAvX+h#0wRi!vT8x0SgERVT+wPRmTsk4G@B%)GFW?VG z@rMuKQ}`r~XHyHQGiqj%vuF1^-??tS|NQz5z)ci1#2BU=X;j5qSu@tefi!kx!)nN! z+mLSH`9~V!3QLI<1R$y2yb0Zf>Cm)DX zHN(&+e8=-6MqTo-CLCg8S%ywh>;^-3+4pJ%%aOFbL2r#=GRjSHS;3L9ZHpu66Kii- zieS(5N+Pg4mtiytZfz5;YsGS{;1MOPM-lCGsa=Nnx>uG7bYPTY5MvA-dTKX`2~27@ z$1oAev(1>}JT5TsiVPw->Ut{b?yNG+1Wu8eBrf8ThG~Y&5f6XGbIf3tAxYlWJvX38 z4jAV2)PMWX1M%L&{^M#BS!!AP!a;qY**;9-;I zjlwd_>*m=2<^$hyE19;UhBzwVW2|a;Ldir(!!wRGtT&65t=o2Ux+sN>PPz#6Ed5Yn zKIce+t6Xv%8+h3?XpIoVczY{b2N`AiilZL`4E?6%%FVh{lzu@JZ5rYsg|l~sZz=uv zW<1!ls9)3OKQA9mZ6fd0{gTXDifZJK%ekb=LUTZsrX)0y)KywB)wWPlZ$e4s4<+Rn z%3kz^l41@eH3CCqH%!_`Vu_I~q(5UMy>NnYh7(LN9AoZOy`ofIscE%ZQmg9>AC7T5 zJ#_aA?wx?H+6bPCV`SCg3k5Sj5pN8e^qr--0eO#;=V9_aOW#E@SjH%F7(*W8*doMO WGZt*)HE9$TRP6L$zz%6K_CKl`@T1nUc!*~1|sw%18XzrGE^y*51c6O+r8;% z>h3V`1#VHwU-+S)TrwOr+y9!@>9kx1?K*mr2C^t~aI7+9n=Q8hhBb~H@+zuv=vY$G z21fygis~Fi7z`!H59Qr-+>`Nx=mm6G#fdx-xFYsdz9?$Rz@IRf&YyzOaYi?q#-6=y5EQU!mxQx)j>9-cYg*=cri6b5yOG zHpjYE%gwR*O5YhY$Tm`_K}(8sDyIR&6JEHXeyCX Pnx+zo5DYt1&tUf(u!V5; literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/SupportEntity.class b/BankEconomyMod/bin/me/kaZep/Base/SupportEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..27b5206723074f289acb58851f11f2bbd09f63af GIT binary patch literal 1007 zcmaJd@`Bna*nZuQ0K} zN8%6gM;Y%+oO|Znd+v{)U%vy`#iIlw49i_%clcY;w-5M0*fqc3?gbF86vVpdB!y;wXX!j`qcGaC_XuP z{l2>H{O*!gZ`MB-=v24zLWHrE$|{cr~r0*RGbsk`1n!!42F@V1s5F zA~kmwHnGK!AYwVtn< z;!qm(e{ADU;1t%V-zaq+r7w9yXM&;#l5~=%bdqvd6T~d$D4wUNL+A*7w<_nzR<=hd zRK8*1%{eZQP^{#aK4awz)@e0R;v-Z(5;THabS_dMh$4n8J&+?no=hp=wz)Hu*nv$E zksArLrMQE;R6mxsYXsPoWrT@WKB0I-_`3IgWKG3>{BcOa3eZ>zc2HHH?G652HtyCnD6LG1M0P zgZ%UM^*1iB%+{#L917FqFN7hn^og@pMYR-!T-uWFF+S zKt+ z3nyeprI0mxX+9xRmsur`StW;5DIMC!B-|#(q0j@g25+bg)D3o0sHd<$INjjjl@1lO m2-}&gK_m2ZZBz*BB-JFbHk~(eA#`v^j3hH7>9{U21xMe=2xvC| literal 0 HcmV?d00001 diff --git a/BankEconomyMod/bin/me/kaZep/Base/TempWeb.class b/BankEconomyMod/bin/me/kaZep/Base/TempWeb.class new file mode 100644 index 0000000000000000000000000000000000000000..f4388b92d0f40505db40a00d22fb0d8321be6c95 GIT binary patch literal 422 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 literal 0 HcmV?d00001 diff --git a/BankEconomyMod/config.yml b/BankEconomyMod/config.yml new file mode 100644 index 0000000..e69de29 diff --git a/BankEconomyMod/plugin.yml b/BankEconomyMod/plugin.yml new file mode 100644 index 0000000..cd9c66a --- /dev/null +++ b/BankEconomyMod/plugin.yml @@ -0,0 +1,25 @@ +name: BankEconomy +main: me.kaZep.Base.Main +version: 1.3.0 +description: Bank plugin which stores money. +commands: + bankeconomy: + description: Bank. + revive: + description: Revive. + tele: + description: Teleport. + transfer: + description: Transfer money to another player. + jobs: + description: Jobs. + sp: + description: Modify your allocated stat points. + maintenance: + description: Toggles Server maintenance status. + settings: + description: Modify notification settings. + unenchant: + description: Unenchant your currently held item. + event: + description: Toggles or untoggles events. \ No newline at end of file diff --git a/BankEconomyMod/src/me/kaZep/Base/ArrowShooter.java b/BankEconomyMod/src/me/kaZep/Base/ArrowShooter.java new file mode 100644 index 0000000..8531e12 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/ArrowShooter.java @@ -0,0 +1,20 @@ +package me.kaZep.Base; + +import org.bukkit.Location; +import org.bukkit.entity.LivingEntity; +import org.bukkit.util.Vector; + +public class ArrowShooter { + public int timer=0; + public int frequency=0; + public Vector spd; + public Location loc; + public LivingEntity shooter; + public ArrowShooter(Vector spd, Location loc, int duration, int frequency, LivingEntity shooter) { + this.spd=spd; + this.loc=loc; + this.frequency=frequency; + this.timer=duration; + this.shooter=shooter; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/BrewingStandData.java b/BankEconomyMod/src/me/kaZep/Base/BrewingStandData.java new file mode 100644 index 0000000..c60adaa --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/BrewingStandData.java @@ -0,0 +1,104 @@ +package me.kaZep.Base; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BrewingStand; +import org.bukkit.block.Furnace; +import org.bukkit.inventory.BrewerInventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.Potion; +import org.bukkit.potion.PotionType; + +public class BrewingStandData { + + Location pos; + String owner; + long time; + boolean setnewtime; + public BrewingStandData(Location pos, String owner) { + this.pos=pos; + this.owner=owner; + this.time=Bukkit.getWorld("world").getFullTime()+9000; + this.setnewtime=false; + } + + public void setOwner(String owner) { + this.owner=owner; + } + + public void setBrewingTime(int newval) { + if ((BrewingStand)Bukkit.getWorld("world").getBlockAt(pos).getState()!=null) { + BrewingStand brewingstand = (BrewingStand)Bukkit.getWorld("world").getBlockAt(pos).getState(); + brewingstand.setBrewingTime(newval); + } + } + + public int getBrewingTime() { + if ((BrewingStand)Bukkit.getWorld("world").getBlockAt(pos).getState()!=null) { + BrewingStand brewingstand = (BrewingStand)Bukkit.getWorld("world").getBlockAt(pos).getState(); + return brewingstand.getBrewingTime(); + } else { + return 0; + } + } + + public int getBrewingPotions() { + if ((BrewingStand)Bukkit.getWorld("world").getBlockAt(pos).getState()!=null) { + BrewingStand brewingstand = (BrewingStand)Bukkit.getWorld("world").getBlockAt(pos).getState(); + ItemStack[] b = brewingstand.getInventory().getContents(); + int potioncount=0; + for (int i=0;i aEnd) { + aEnd = aStart; + } + long range = (long) aEnd - (long) aStart + 1; + long fraction = (long) (range * random.nextDouble()); + int randomNumber = (int) (fraction + aStart); + return randomNumber; + } + + public void toggleRandom(boolean toggle) { + randomness = toggle; + } + + public double getDamage(ItemStack helmet, ItemStack chestplate, + ItemStack leggings, ItemStack boots, Double dmg, DamageCause cause, boolean blocking) { + ItemStack[] items = { helmet, chestplate, leggings, boots }; + int[] armReduce = getArmorReduce(items, cause); + int[] encReduce = getEnchantmentsReducement(items, cause); + double armour = 0; + double damage = dmg; + double enc = 0; + for (int in : armReduce) + armour = armour + in; + for (int in : encReduce) + enc = enc + in; + if (enc > 25) + enc = 25; + damage = damage - (damage * armour / 25); + if (randomness == true) + enc = Math.ceil(returnChance((int) ((enc) / 2) * 10, (int) (enc) * 10)); + if (enc > 20) + enc = 20; + enc = enc * 4; + damage = damage - (damage * enc / 100); + if (blocking == true) + damage = damage/2; + return damage; + } + + public double getDamage(Player player, Double damage, DamageCause cause) { + return getDamage(player.getInventory().getHelmet(), player.getInventory() + .getChestplate(), player.getInventory().getLeggings(), player + .getInventory().getBoots(), damage, cause, player.isBlocking()); + } + + private int[] getArmorReduce(ItemStack[] item, DamageCause dmg) { + int[] damage = { 0, 0, 0, 0 }; + if (dmg.equals(DamageCause.ENTITY_ATTACK) || dmg.equals(DamageCause.FIRE) + || dmg.equals(DamageCause.ENTITY_EXPLOSION) + || dmg.equals(DamageCause.BLOCK_EXPLOSION) + || dmg.equals(DamageCause.CONTACT) || dmg.equals(DamageCause.LAVA) + || dmg.equals(DamageCause.PROJECTILE)) { + int cur = 0; + for (ItemStack stack : item) { + if (stack != null) + damage[cur] = getArmorValue(stack); + cur = cur + 1; + } + } + return damage; + } + + private static int[] getEnchantmentsReducement(ItemStack[] item, + DamageCause dmg) { + int[] damage = { 0, 0, 0, 0 }; + int cur = 0; + for (ItemStack stack : item) { + if (stack != null) { + Map enchants = new HashMap( + stack.getEnchantments()); + for (Enchantment enchant : enchants.keySet()) { + if ((dmg.equals(DamageCause.BLOCK_EXPLOSION) || dmg + .equals(DamageCause.ENTITY_EXPLOSION) + && enchant.equals(Enchantment.PROTECTION_EXPLOSIONS))) + damage[cur] = damage[cur] + + (int) Math.floor((6 + enchants.get(enchant) + * enchants.get(enchant)) / 2); + if (dmg.equals(DamageCause.FALL) + && enchant.equals(Enchantment.PROTECTION_FALL)) + damage[cur] = damage[cur] + enchants.get(enchant) * 2; + if (dmg.equals(DamageCause.PROJECTILE) + && enchant.equals(Enchantment.PROTECTION_PROJECTILE)) + damage[cur] = damage[cur] + + (int) Math.floor((6 + enchants.get(enchant) + * enchants.get(enchant)) / 2); + if ((dmg.equals(DamageCause.LAVA) + || dmg.equals(DamageCause.LIGHTNING) + || dmg.equals(DamageCause.FIRE) || dmg.equals(DamageCause.LAVA)) + && enchant.equals(Enchantment.PROTECTION_FIRE)) + damage[cur] = damage[cur] + + (int) Math.floor((6 + enchants.get(enchant) + * enchants.get(enchant)) / 2); + if (enchant.equals(Enchantment.PROTECTION_ENVIRONMENTAL)) + damage[cur] = damage[cur] + + (int) Math.floor((6 + enchants.get(enchant) + * enchants.get(enchant)) / 2); + } + } + } + return damage; + } + + private int getArmorValue(ItemStack armor) { + Material mat = armor.getType(); + if (mat == Material.LEATHER_HELMET || mat == Material.LEATHER_BOOTS + || mat == Material.GOLD_BOOTS || mat == Material.CHAINMAIL_BOOTS) + return 1; + if (mat == Material.LEATHER_LEGGINGS || mat == Material.GOLD_HELMET + || mat == Material.CHAINMAIL_HELMET || mat == Material.IRON_HELMET + || mat == Material.IRON_BOOTS) + return 2; + if (mat == Material.LEATHER_CHESTPLATE || mat == Material.GOLD_LEGGINGS + || mat == Material.DIAMOND_BOOTS || mat == Material.DIAMOND_HELMET) + return 3; + if (mat == Material.CHAINMAIL_LEGGINGS) + return 4; + if (mat == Material.GOLD_CHESTPLATE || mat == Material.CHAINMAIL_CHESTPLATE + || mat == Material.IRON_LEGGINGS) + return 5; + if (mat == Material.IRON_LEGGINGS || mat == Material.DIAMOND_LEGGINGS) + return 6; + if (mat == Material.DIAMOND_CHESTPLATE) + return 8; + return 0; + } + +} \ No newline at end of file diff --git a/BankEconomyMod/src/me/kaZep/Base/EnchantLevelDatabase.java b/BankEconomyMod/src/me/kaZep/Base/EnchantLevelDatabase.java new file mode 100644 index 0000000..b441a8b --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/EnchantLevelDatabase.java @@ -0,0 +1,385 @@ +package me.kaZep.Base; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.enchantments.Enchantment; + + +public class EnchantLevelDatabase { + public List stone_hoe = new ArrayList(); + public List stone_shovel = new ArrayList(); + public List stone_pickaxe = new ArrayList(); + public List leather_boots = new ArrayList(); + public List leather_cap = new ArrayList(); + public List leather_pants = new ArrayList(); + public List leather_tunic = new ArrayList(); + public List iron_shovel = new ArrayList(); + public List iron_boots = new ArrayList(); + public List iron_pickaxe = new ArrayList(); + public List iron_helmet = new ArrayList(); + public List golden_shovel = new ArrayList(); + public List iron_leggings = new ArrayList(); + public List diamond_shovel = new ArrayList(); + public List diamond_hoe = new ArrayList(); + public List golden_boots = new ArrayList(); + public List iron_chestplate = new ArrayList(); + public List golden_helmet = new ArrayList(); + public List diamond_pickaxe = new ArrayList(); + public List diamond_boots = new ArrayList(); + public List golden_leggings = new ArrayList(); + public List golden_chestplate = new ArrayList(); + public List diamond_helmet = new ArrayList(); + public List diamond_leggings = new ArrayList(); + public List diamond_chestplate = new ArrayList(); + public List wood_sword = new ArrayList(); + public List bow = new ArrayList(); + public List iron_sword = new ArrayList(); + public List gold_sword = new ArrayList(); + public List diamond_sword = new ArrayList(); + public EnchantLevelDatabase() { + stone_hoe.add(new StoreValues(0.359,Enchantment.DURABILITY,1,5)); + stone_shovel.add(new StoreValues(0.636,Enchantment.DIG_SPEED,1,5)); + stone_shovel.add(new StoreValues(0.359,Enchantment.DURABILITY,1,5)); + stone_pickaxe.add(new StoreValues(0.636,Enchantment.DIG_SPEED,1,5)); + stone_pickaxe.add(new StoreValues(0.359,Enchantment.DURABILITY,1,5)); // OOPS ^.^ + leather_boots.add(new StoreValues(0.359,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + leather_boots.add(new StoreValues(0.212,Enchantment.PROTECTION_FALL,1,5)); + leather_boots.add(new StoreValues(0.113,Enchantment.PROTECTION_PROJECTILE,2,5)); + leather_boots.add(new StoreValues(0.084,Enchantment.PROTECTION_PROJECTILE,1,5)); + leather_boots.add(new StoreValues(0.081,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + leather_boots.add(new StoreValues(0.065,Enchantment.PROTECTION_FIRE,1,5)); + leather_boots.add(new StoreValues(0.052,Enchantment.PROTECTION_FALL,2,5)); + leather_boots.add(new StoreValues(0.025,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + leather_boots.add(new StoreValues(0.001,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + leather_cap.add(new StoreValues(0.405,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + leather_cap.add(new StoreValues(0.146,Enchantment.WATER_WORKER,1,5)); + leather_cap.add(new StoreValues(0.119,Enchantment.PROTECTION_PROJECTILE,2,5)); + leather_cap.add(new StoreValues(0.094,Enchantment.PROTECTION_PROJECTILE,1,5)); + leather_cap.add(new StoreValues(0.082,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + leather_cap.add(new StoreValues(0.069,Enchantment.PROTECTION_FIRE,1,5)); + leather_cap.add(new StoreValues(0.048,Enchantment.OXYGEN,1,5)); + leather_cap.add(new StoreValues(0.029,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + leather_cap.add(new StoreValues(0.0001,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + leather_pants.add(new StoreValues(0.451,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + leather_pants.add(new StoreValues(0.135,Enchantment.PROTECTION_PROJECTILE,2,5)); + leather_pants.add(new StoreValues(0.104,Enchantment.PROTECTION_PROJECTILE,1,5)); + leather_pants.add(new StoreValues(0.100,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + leather_pants.add(new StoreValues(0.079,Enchantment.PROTECTION_FIRE,1,5)); + leather_pants.add(new StoreValues(0.032,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + leather_pants.add(new StoreValues(0.0001,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + leather_tunic.add(new StoreValues(0.442,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + leather_tunic.add(new StoreValues(0.140,Enchantment.PROTECTION_PROJECTILE,2,5)); + leather_tunic.add(new StoreValues(0.102,Enchantment.PROTECTION_PROJECTILE,1,5)); + leather_tunic.add(new StoreValues(0.094,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + leather_tunic.add(new StoreValues(0.079,Enchantment.PROTECTION_FIRE,1,5)); + leather_tunic.add(new StoreValues(0.053,Enchantment.THORNS,1,5)); + leather_tunic.add(new StoreValues(0.028,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + leather_tunic.add(new StoreValues(0.001,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + iron_shovel.add(new StoreValues(0.506,Enchantment.DIG_SPEED,1,5)); + iron_shovel.add(new StoreValues(0.355,Enchantment.DURABILITY,1,5)); + iron_shovel.add(new StoreValues(0.126,Enchantment.DIG_SPEED,2,5)); + iron_shovel.add(new StoreValues(0.06,Enchantment.DURABILITY,2,5)); + iron_boots.add(new StoreValues(0.41,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + iron_boots.add(new StoreValues(0.265,Enchantment.PROTECTION_FALL,1,5)); + iron_boots.add(new StoreValues(0.143,Enchantment.PROTECTION_PROJECTILE,1,5)); + iron_boots.add(new StoreValues(0.082,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + iron_boots.add(new StoreValues(0.065,Enchantment.PROTECTION_PROJECTILE,2,5)); + iron_boots.add(new StoreValues(0.022,Enchantment.PROTECTION_FIRE,1,5)); + iron_boots.add(new StoreValues(0.006,Enchantment.PROTECTION_FALL,2,5)); + iron_pickaxe.add(new StoreValues(0.504,Enchantment.DIG_SPEED,1,5)); + iron_pickaxe.add(new StoreValues(0.354,Enchantment.DURABILITY,1,5)); + iron_pickaxe.add(new StoreValues(0.129,Enchantment.DIG_SPEED,2,5)); + iron_pickaxe.add(new StoreValues(0.06,Enchantment.DURABILITY,2,5)); + iron_helmet.add(new StoreValues(0.471,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + iron_helmet.add(new StoreValues(0.161,Enchantment.WATER_WORKER,1,5)); + iron_helmet.add(new StoreValues(0.16,Enchantment.PROTECTION_PROJECTILE,1,5)); + iron_helmet.add(new StoreValues(0.092,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + iron_helmet.add(new StoreValues(0.072,Enchantment.PROTECTION_PROJECTILE,2,5)); + iron_helmet.add(new StoreValues(0.022,Enchantment.PROTECTION_FIRE,1,5)); + iron_helmet.add(new StoreValues(0.015,Enchantment.OXYGEN,1,5)); + golden_shovel.add(new StoreValues(0.364,Enchantment.DIG_SPEED,2,5)); + golden_shovel.add(new StoreValues(0.256,Enchantment.DIG_SPEED,1,5)); + golden_shovel.add(new StoreValues(0.253,Enchantment.DURABILITY,1,5)); + golden_shovel.add(new StoreValues(0.101,Enchantment.DURABILITY,2,5)); + golden_shovel.add(new StoreValues(0.01,Enchantment.LOOT_BONUS_BLOCKS,1,5)); + golden_shovel.add(new StoreValues(0.006,Enchantment.SILK_TOUCH,1,5)); + iron_leggings.add(new StoreValues(0.523,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + iron_leggings.add(new StoreValues(0.178,Enchantment.PROTECTION_PROJECTILE,1,5)); + iron_leggings.add(new StoreValues(0.101,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + iron_leggings.add(new StoreValues(0.083,Enchantment.PROTECTION_PROJECTILE,2,5)); + iron_leggings.add(new StoreValues(0.025,Enchantment.PROTECTION_FIRE,1,5)); + diamond_shovel.add(new StoreValues(0.623,Enchantment.DIG_SPEED,1,5)); + diamond_shovel.add(new StoreValues(0.356,Enchantment.DURABILITY,1,5)); + diamond_shovel.add(new StoreValues(0.014,Enchantment.DIG_SPEED,2,5)); + golden_boots.add(new StoreValues(0.187,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + golden_boots.add(new StoreValues(0.158,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + golden_boots.add(new StoreValues(0.155,Enchantment.PROTECTION_FALL,2,5)); + golden_boots.add(new StoreValues(0.131,Enchantment.PROTECTION_FIRE,1,5)); + golden_boots.add(new StoreValues(0.112,Enchantment.PROTECTION_PROJECTILE,2,5)); + golden_boots.add(new StoreValues(0.082,Enchantment.PROTECTION_FALL,1,5)); + golden_boots.add(new StoreValues(0.042,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + golden_boots.add(new StoreValues(0.033,Enchantment.PROTECTION_PROJECTILE,3,5)); + golden_boots.add(new StoreValues(0.030,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + golden_boots.add(new StoreValues(0.026,Enchantment.PROTECTION_PROJECTILE,1,5)); + golden_boots.add(new StoreValues(0.023,Enchantment.PROTECTION_FALL,3,5)); + golden_boots.add(new StoreValues(0.005,Enchantment.PROTECTION_FIRE,2,5)); + iron_chestplate.add(new StoreValues(0.525,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + iron_chestplate.add(new StoreValues(0.172,Enchantment.PROTECTION_PROJECTILE,1,5)); + iron_chestplate.add(new StoreValues(0.10,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + iron_chestplate.add(new StoreValues(0.083,Enchantment.PROTECTION_PROJECTILE,2,5)); + iron_chestplate.add(new StoreValues(0.025,Enchantment.PROTECTION_FIRE,1,5)); + iron_chestplate.add(new StoreValues(0.019,Enchantment.THORNS,1,5)); + golden_helmet.add(new StoreValues(0.189,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + golden_helmet.add(new StoreValues(0.175,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + golden_helmet.add(new StoreValues(0.134,Enchantment.WATER_WORKER,1,5)); + golden_helmet.add(new StoreValues(0.132,Enchantment.PROTECTION_FIRE,1,5)); + golden_helmet.add(new StoreValues(0.118,Enchantment.PROTECTION_PROJECTILE,2,5)); + golden_helmet.add(new StoreValues(0.101,Enchantment.OXYGEN,1,5)); + golden_helmet.add(new StoreValues(0.042,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + golden_helmet.add(new StoreValues(0.038,Enchantment.PROTECTION_PROJECTILE,3,5)); + golden_helmet.add(new StoreValues(0.03,Enchantment.PROTECTION_PROJECTILE,2,5)); + golden_helmet.add(new StoreValues(0.028,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + golden_helmet.add(new StoreValues(0.004,Enchantment.PROTECTION_FIRE,2,5)); + golden_helmet.add(new StoreValues(0.001,Enchantment.OXYGEN,2,5)); + diamond_pickaxe.add(new StoreValues(0.618,Enchantment.DIG_SPEED,1,5)); + diamond_pickaxe.add(new StoreValues(0.361,Enchantment.DURABILITY,1,5)); + diamond_pickaxe.add(new StoreValues(0.16,Enchantment.DIG_SPEED,2,5)); + diamond_boots.add(new StoreValues(0.413,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + diamond_boots.add(new StoreValues(0.264,Enchantment.PROTECTION_FALL,1,5)); + diamond_boots.add(new StoreValues(0.137,Enchantment.PROTECTION_PROJECTILE,1,5)); + diamond_boots.add(new StoreValues(0.081,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + diamond_boots.add(new StoreValues(0.069,Enchantment.PROTECTION_PROJECTILE,2,5)); + diamond_boots.add(new StoreValues(0.021,Enchantment.PROTECTION_FIRE,1,5)); + diamond_boots.add(new StoreValues(0.007,Enchantment.PROTECTION_FALL,2,5)); + golden_leggings.add(new StoreValues(0.231,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + golden_leggings.add(new StoreValues(0.199,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + golden_leggings.add(new StoreValues(0.151,Enchantment.PROTECTION_FIRE,1,5)); + golden_leggings.add(new StoreValues(0.138,Enchantment.PROTECTION_PROJECTILE,2,5)); + golden_leggings.add(new StoreValues(0.05,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + golden_leggings.add(new StoreValues(0.042,Enchantment.PROTECTION_PROJECTILE,3,5)); + golden_leggings.add(new StoreValues(0.041,Enchantment.PROTECTION_PROJECTILE,1,5)); + golden_leggings.add(new StoreValues(0.029,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + golden_leggings.add(new StoreValues(0.006,Enchantment.PROTECTION_FIRE,2,5)); + golden_chestplate.add(new StoreValues(0.211,Enchantment.PROTECTION_ENVIRONMENTAL,2,5)); + golden_chestplate.add(new StoreValues(0.192,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + golden_chestplate.add(new StoreValues(0.147,Enchantment.PROTECTION_FIRE,1,5)); + golden_chestplate.add(new StoreValues(0.129,Enchantment.PROTECTION_PROJECTILE,2,5)); + golden_chestplate.add(new StoreValues(0.129,Enchantment.THORNS,1,5)); + golden_chestplate.add(new StoreValues(0.049,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + golden_chestplate.add(new StoreValues(0.042,Enchantment.PROTECTION_PROJECTILE,3,5)); + golden_chestplate.add(new StoreValues(0.034,Enchantment.PROTECTION_EXPLOSIONS,2,5)); + golden_chestplate.add(new StoreValues(0.032,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + golden_chestplate.add(new StoreValues(0.005,Enchantment.PROTECTION_FIRE,2,5)); + diamond_helmet.add(new StoreValues(0.471,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + diamond_helmet.add(new StoreValues(0.158,Enchantment.WATER_WORKER,1,5)); + diamond_helmet.add(new StoreValues(0.153,Enchantment.PROTECTION_PROJECTILE,1,5)); + diamond_helmet.add(new StoreValues(0.096,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + diamond_helmet.add(new StoreValues(0.076,Enchantment.PROTECTION_PROJECTILE,2,5)); + diamond_helmet.add(new StoreValues(0.023,Enchantment.PROTECTION_FIRE,1,5)); + diamond_helmet.add(new StoreValues(0.015,Enchantment.OXYGEN,1,5)); + diamond_leggings.add(new StoreValues(0.519,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + diamond_leggings.add(new StoreValues(0.178,Enchantment.PROTECTION_PROJECTILE,1,5)); + diamond_leggings.add(new StoreValues(0.102,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + diamond_leggings.add(new StoreValues(0.087,Enchantment.PROTECTION_PROJECTILE,2,5)); + diamond_leggings.add(new StoreValues(0.024,Enchantment.PROTECTION_FIRE,1,5)); + diamond_chestplate.add(new StoreValues(0.512,Enchantment.PROTECTION_ENVIRONMENTAL,1,5)); + diamond_chestplate.add(new StoreValues(0.176,Enchantment.PROTECTION_PROJECTILE,1,5)); + diamond_chestplate.add(new StoreValues(0.104,Enchantment.PROTECTION_EXPLOSIONS,1,5)); + diamond_chestplate.add(new StoreValues(0.081,Enchantment.PROTECTION_PROJECTILE,2,5)); + diamond_chestplate.add(new StoreValues(0.026,Enchantment.PROTECTION_FIRE,1,5)); + diamond_chestplate.add(new StoreValues(0.021,Enchantment.THORNS,1,5)); + wood_sword.add(new StoreValues(0.333,Enchantment.DAMAGE_ALL,1,5)); + wood_sword.add(new StoreValues(0.241,Enchantment.KNOCKBACK,1,5)); + wood_sword.add(new StoreValues(0.180,Enchantment.DAMAGE_ARTHROPODS,1,5)); + wood_sword.add(new StoreValues(0.173,Enchantment.DAMAGE_UNDEAD,1,5)); + wood_sword.add(new StoreValues(0.035,Enchantment.FIRE_ASPECT,1,5)); + wood_sword.add(new StoreValues(0.026,Enchantment.DAMAGE_ALL,2,5)); + wood_sword.add(new StoreValues(0.003,Enchantment.DAMAGE_ARTHROPODS,2,5)); + wood_sword.add(new StoreValues(0.002,Enchantment.DAMAGE_UNDEAD,2,5)); + bow.add(new StoreValues(0.926,Enchantment.ARROW_DAMAGE,1,5)); + iron_sword.add(new StoreValues(0.333,Enchantment.DAMAGE_ALL,1,5)); + iron_sword.add(new StoreValues(0.241,Enchantment.KNOCKBACK,1,5)); + iron_sword.add(new StoreValues(0.180,Enchantment.DAMAGE_ARTHROPODS,1,5)); + iron_sword.add(new StoreValues(0.173,Enchantment.DAMAGE_UNDEAD,1,5)); + iron_sword.add(new StoreValues(0.035,Enchantment.FIRE_ASPECT,1,5)); + iron_sword.add(new StoreValues(0.026,Enchantment.DAMAGE_ALL,2,5)); + iron_sword.add(new StoreValues(0.003,Enchantment.DAMAGE_ARTHROPODS,2,5)); + iron_sword.add(new StoreValues(0.002,Enchantment.DAMAGE_UNDEAD,2,5)); + gold_sword.add(new StoreValues(0.333,Enchantment.KNOCKBACK,1,5)); + gold_sword.add(new StoreValues(0.241,Enchantment.DAMAGE_ALL,1,5)); + gold_sword.add(new StoreValues(0.180,Enchantment.DAMAGE_ALL,2,5)); + gold_sword.add(new StoreValues(0.173,Enchantment.DAMAGE_ARTHROPODS,1,5)); + gold_sword.add(new StoreValues(0.035,Enchantment.DAMAGE_UNDEAD,1,5)); + gold_sword.add(new StoreValues(0.026,Enchantment.FIRE_ASPECT,1,5)); + gold_sword.add(new StoreValues(0.003,Enchantment.DAMAGE_UNDEAD,2,5)); + gold_sword.add(new StoreValues(0.002,Enchantment.DAMAGE_ARTHROPODS,2,5)); + gold_sword.add(new StoreValues(0.002,Enchantment.LOOT_BONUS_MOBS,1,5)); + diamond_sword.add(new StoreValues(0.365,Enchantment.DAMAGE_ALL,1,5)); + diamond_sword.add(new StoreValues(0.247,Enchantment.KNOCKBACK,1,5)); + diamond_sword.add(new StoreValues(0.187,Enchantment.DAMAGE_ARTHROPODS,1,5)); + diamond_sword.add(new StoreValues(0.185,Enchantment.DAMAGE_UNDEAD,1,5)); + diamond_sword.add(new StoreValues(0.01,Enchantment.FIRE_ASPECT,1,5)); + stone_hoe.add(new StoreValues(0.359,Enchantment.DURABILITY,2,10)); + stone_shovel.add(new StoreValues(0.575,Enchantment.DIG_SPEED,2,10)); + stone_shovel.add(new StoreValues(0.255,Enchantment.DURABILITY,1,10)); + stone_shovel.add(new StoreValues(0.118,Enchantment.DURABILITY,2,10)); + stone_shovel.add(new StoreValues(0.04,Enchantment.DIG_SPEED,1,10)); + stone_shovel.add(new StoreValues(0.01,Enchantment.LOOT_BONUS_BLOCKS,1,10)); + stone_shovel.add(new StoreValues(0.01,Enchantment.SILK_TOUCH,1,10)); + stone_pickaxe.add(new StoreValues(0.575,Enchantment.DIG_SPEED,2,10)); + stone_pickaxe.add(new StoreValues(0.255,Enchantment.DURABILITY,1,10)); + stone_pickaxe.add(new StoreValues(0.118,Enchantment.DURABILITY,2,10)); + stone_pickaxe.add(new StoreValues(0.04,Enchantment.DIG_SPEED,1,10)); + stone_pickaxe.add(new StoreValues(0.01,Enchantment.LOOT_BONUS_BLOCKS,1,10)); + stone_pickaxe.add(new StoreValues(0.01,Enchantment.SILK_TOUCH,1,10)); + leather_boots.add(new StoreValues(0.305,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + leather_boots.add(new StoreValues(0.237,Enchantment.PROTECTION_FALL,2,10)); + leather_boots.add(new StoreValues(0.152,Enchantment.PROTECTION_FIRE,1,10)); + leather_boots.add(new StoreValues(0.104,Enchantment.PROTECTION_PROJECTILE,2,10)); + leather_boots.add(new StoreValues(0.062,Enchantment.PROTECTION_PROJECTILE,3,10)); + leather_boots.add(new StoreValues(0.05,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + leather_boots.add(new StoreValues(0.027,Enchantment.PROTECTION_FALL,3,10)); + leather_boots.add(new StoreValues(0.025,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + leather_boots.add(new StoreValues(0.013,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + leather_boots.add(new StoreValues(0.004,Enchantment.PROTECTION_FIRE,2,10)); + leather_boots.add(new StoreValues(0.003,Enchantment.PROTECTION_FALL,1,10)); + leather_cap.add(new StoreValues(0.405,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + leather_cap.add(new StoreValues(0.146,Enchantment.WATER_WORKER,1,10)); + leather_cap.add(new StoreValues(0.119,Enchantment.PROTECTION_PROJECTILE,2,10)); + leather_cap.add(new StoreValues(0.094,Enchantment.PROTECTION_PROJECTILE,1,10)); + leather_cap.add(new StoreValues(0.082,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + leather_cap.add(new StoreValues(0.069,Enchantment.PROTECTION_FIRE,1,10)); + leather_cap.add(new StoreValues(0.048,Enchantment.OXYGEN,1,10)); + leather_cap.add(new StoreValues(0.029,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + leather_cap.add(new StoreValues(0.0001,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + leather_pants.add(new StoreValues(0.451,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + leather_pants.add(new StoreValues(0.135,Enchantment.PROTECTION_PROJECTILE,2,10)); + leather_pants.add(new StoreValues(0.104,Enchantment.PROTECTION_PROJECTILE,1,10)); + leather_pants.add(new StoreValues(0.100,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + leather_pants.add(new StoreValues(0.079,Enchantment.PROTECTION_FIRE,1,10)); + leather_pants.add(new StoreValues(0.032,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + leather_pants.add(new StoreValues(0.0001,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + leather_tunic.add(new StoreValues(0.442,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + leather_tunic.add(new StoreValues(0.140,Enchantment.PROTECTION_PROJECTILE,2,10)); + leather_tunic.add(new StoreValues(0.102,Enchantment.PROTECTION_PROJECTILE,1,10)); + leather_tunic.add(new StoreValues(0.094,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + leather_tunic.add(new StoreValues(0.079,Enchantment.PROTECTION_FIRE,1,10)); + leather_tunic.add(new StoreValues(0.053,Enchantment.THORNS,1,10)); + leather_tunic.add(new StoreValues(0.028,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + leather_tunic.add(new StoreValues(0.001,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + iron_shovel.add(new StoreValues(0.506,Enchantment.DIG_SPEED,1,10)); + iron_shovel.add(new StoreValues(0.355,Enchantment.DURABILITY,1,10)); + iron_shovel.add(new StoreValues(0.126,Enchantment.DIG_SPEED,2,10)); + iron_shovel.add(new StoreValues(0.06,Enchantment.DURABILITY,2,10)); + iron_boots.add(new StoreValues(0.41,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + iron_boots.add(new StoreValues(0.265,Enchantment.PROTECTION_FALL,1,10)); + iron_boots.add(new StoreValues(0.143,Enchantment.PROTECTION_PROJECTILE,1,10)); + iron_boots.add(new StoreValues(0.082,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + iron_boots.add(new StoreValues(0.065,Enchantment.PROTECTION_PROJECTILE,2,10)); + iron_boots.add(new StoreValues(0.022,Enchantment.PROTECTION_FIRE,1,10)); + iron_boots.add(new StoreValues(0.006,Enchantment.PROTECTION_FALL,2,10)); + iron_pickaxe.add(new StoreValues(0.504,Enchantment.DIG_SPEED,1,10)); + iron_pickaxe.add(new StoreValues(0.354,Enchantment.DURABILITY,1,10)); + iron_pickaxe.add(new StoreValues(0.129,Enchantment.DIG_SPEED,2,10)); + iron_pickaxe.add(new StoreValues(0.06,Enchantment.DURABILITY,2,10)); + iron_helmet.add(new StoreValues(0.471,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + iron_helmet.add(new StoreValues(0.161,Enchantment.WATER_WORKER,1,10)); + iron_helmet.add(new StoreValues(0.16,Enchantment.PROTECTION_PROJECTILE,1,10)); + iron_helmet.add(new StoreValues(0.092,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + iron_helmet.add(new StoreValues(0.072,Enchantment.PROTECTION_PROJECTILE,2,10)); + iron_helmet.add(new StoreValues(0.022,Enchantment.PROTECTION_FIRE,1,10)); + iron_helmet.add(new StoreValues(0.015,Enchantment.OXYGEN,1,10)); + golden_shovel.add(new StoreValues(0.364,Enchantment.DIG_SPEED,2,10)); + golden_shovel.add(new StoreValues(0.256,Enchantment.DIG_SPEED,1,10)); + golden_shovel.add(new StoreValues(0.253,Enchantment.DURABILITY,1,10)); + golden_shovel.add(new StoreValues(0.101,Enchantment.DURABILITY,2,10)); + golden_shovel.add(new StoreValues(0.01,Enchantment.LOOT_BONUS_BLOCKS,1,10)); + golden_shovel.add(new StoreValues(0.006,Enchantment.SILK_TOUCH,1,10)); + iron_leggings.add(new StoreValues(0.523,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + iron_leggings.add(new StoreValues(0.178,Enchantment.PROTECTION_PROJECTILE,1,10)); + iron_leggings.add(new StoreValues(0.101,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + iron_leggings.add(new StoreValues(0.083,Enchantment.PROTECTION_PROJECTILE,2,10)); + iron_leggings.add(new StoreValues(0.025,Enchantment.PROTECTION_FIRE,1,10)); + diamond_shovel.add(new StoreValues(0.623,Enchantment.DIG_SPEED,1,10)); + diamond_shovel.add(new StoreValues(0.356,Enchantment.DURABILITY,1,10)); + diamond_shovel.add(new StoreValues(0.014,Enchantment.DIG_SPEED,2,10)); + golden_boots.add(new StoreValues(0.187,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + golden_boots.add(new StoreValues(0.158,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + golden_boots.add(new StoreValues(0.155,Enchantment.PROTECTION_FALL,2,10)); + golden_boots.add(new StoreValues(0.131,Enchantment.PROTECTION_FIRE,1,10)); + golden_boots.add(new StoreValues(0.112,Enchantment.PROTECTION_PROJECTILE,2,10)); + golden_boots.add(new StoreValues(0.082,Enchantment.PROTECTION_FALL,1,10)); + golden_boots.add(new StoreValues(0.042,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + golden_boots.add(new StoreValues(0.033,Enchantment.PROTECTION_PROJECTILE,3,10)); + golden_boots.add(new StoreValues(0.030,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + golden_boots.add(new StoreValues(0.026,Enchantment.PROTECTION_PROJECTILE,1,10)); + golden_boots.add(new StoreValues(0.023,Enchantment.PROTECTION_FALL,3,10)); + golden_boots.add(new StoreValues(0.005,Enchantment.PROTECTION_FIRE,2,10)); + iron_chestplate.add(new StoreValues(0.525,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + iron_chestplate.add(new StoreValues(0.172,Enchantment.PROTECTION_PROJECTILE,1,10)); + iron_chestplate.add(new StoreValues(0.10,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + iron_chestplate.add(new StoreValues(0.083,Enchantment.PROTECTION_PROJECTILE,2,10)); + iron_chestplate.add(new StoreValues(0.025,Enchantment.PROTECTION_FIRE,1,10)); + iron_chestplate.add(new StoreValues(0.019,Enchantment.THORNS,1,10)); + golden_helmet.add(new StoreValues(0.189,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + golden_helmet.add(new StoreValues(0.175,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + golden_helmet.add(new StoreValues(0.134,Enchantment.WATER_WORKER,1,10)); + golden_helmet.add(new StoreValues(0.132,Enchantment.PROTECTION_FIRE,1,10)); + golden_helmet.add(new StoreValues(0.118,Enchantment.PROTECTION_PROJECTILE,2,10)); + golden_helmet.add(new StoreValues(0.101,Enchantment.OXYGEN,1,10)); + golden_helmet.add(new StoreValues(0.042,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + golden_helmet.add(new StoreValues(0.038,Enchantment.PROTECTION_PROJECTILE,3,10)); + golden_helmet.add(new StoreValues(0.03,Enchantment.PROTECTION_PROJECTILE,2,10)); + golden_helmet.add(new StoreValues(0.028,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + golden_helmet.add(new StoreValues(0.004,Enchantment.PROTECTION_FIRE,2,10)); + golden_helmet.add(new StoreValues(0.001,Enchantment.OXYGEN,2,10)); + diamond_pickaxe.add(new StoreValues(0.618,Enchantment.DIG_SPEED,1,10)); + diamond_pickaxe.add(new StoreValues(0.361,Enchantment.DURABILITY,1,10)); + diamond_pickaxe.add(new StoreValues(0.16,Enchantment.DIG_SPEED,2,10)); + diamond_boots.add(new StoreValues(0.413,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + diamond_boots.add(new StoreValues(0.264,Enchantment.PROTECTION_FALL,1,10)); + diamond_boots.add(new StoreValues(0.137,Enchantment.PROTECTION_PROJECTILE,1,10)); + diamond_boots.add(new StoreValues(0.081,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + diamond_boots.add(new StoreValues(0.069,Enchantment.PROTECTION_PROJECTILE,2,10)); + diamond_boots.add(new StoreValues(0.021,Enchantment.PROTECTION_FIRE,1,10)); + diamond_boots.add(new StoreValues(0.007,Enchantment.PROTECTION_FALL,2,10)); + golden_leggings.add(new StoreValues(0.231,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + golden_leggings.add(new StoreValues(0.199,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + golden_leggings.add(new StoreValues(0.151,Enchantment.PROTECTION_FIRE,1,10)); + golden_leggings.add(new StoreValues(0.138,Enchantment.PROTECTION_PROJECTILE,2,10)); + golden_leggings.add(new StoreValues(0.05,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + golden_leggings.add(new StoreValues(0.042,Enchantment.PROTECTION_PROJECTILE,3,10)); + golden_leggings.add(new StoreValues(0.041,Enchantment.PROTECTION_PROJECTILE,1,10)); + golden_leggings.add(new StoreValues(0.029,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + golden_leggings.add(new StoreValues(0.006,Enchantment.PROTECTION_FIRE,2,10)); + golden_chestplate.add(new StoreValues(0.211,Enchantment.PROTECTION_ENVIRONMENTAL,2,10)); + golden_chestplate.add(new StoreValues(0.192,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + golden_chestplate.add(new StoreValues(0.147,Enchantment.PROTECTION_FIRE,1,10)); + golden_chestplate.add(new StoreValues(0.129,Enchantment.PROTECTION_PROJECTILE,2,10)); + golden_chestplate.add(new StoreValues(0.129,Enchantment.THORNS,1,10)); + golden_chestplate.add(new StoreValues(0.049,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + golden_chestplate.add(new StoreValues(0.042,Enchantment.PROTECTION_PROJECTILE,3,10)); + golden_chestplate.add(new StoreValues(0.034,Enchantment.PROTECTION_EXPLOSIONS,2,10)); + golden_chestplate.add(new StoreValues(0.032,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + golden_chestplate.add(new StoreValues(0.005,Enchantment.PROTECTION_FIRE,2,10)); + diamond_helmet.add(new StoreValues(0.471,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + diamond_helmet.add(new StoreValues(0.158,Enchantment.WATER_WORKER,1,10)); + diamond_helmet.add(new StoreValues(0.153,Enchantment.PROTECTION_PROJECTILE,1,10)); + diamond_helmet.add(new StoreValues(0.096,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + diamond_helmet.add(new StoreValues(0.076,Enchantment.PROTECTION_PROJECTILE,2,10)); + diamond_helmet.add(new StoreValues(0.023,Enchantment.PROTECTION_FIRE,1,10)); + diamond_helmet.add(new StoreValues(0.015,Enchantment.OXYGEN,1,10)); + diamond_leggings.add(new StoreValues(0.519,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + diamond_leggings.add(new StoreValues(0.178,Enchantment.PROTECTION_PROJECTILE,1,10)); + diamond_leggings.add(new StoreValues(0.102,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + diamond_leggings.add(new StoreValues(0.087,Enchantment.PROTECTION_PROJECTILE,2,10)); + diamond_leggings.add(new StoreValues(0.024,Enchantment.PROTECTION_FIRE,1,10)); + diamond_chestplate.add(new StoreValues(0.512,Enchantment.PROTECTION_ENVIRONMENTAL,1,10)); + diamond_chestplate.add(new StoreValues(0.176,Enchantment.PROTECTION_PROJECTILE,1,10)); + diamond_chestplate.add(new StoreValues(0.104,Enchantment.PROTECTION_EXPLOSIONS,1,10)); + diamond_chestplate.add(new StoreValues(0.081,Enchantment.PROTECTION_PROJECTILE,2,10)); + diamond_chestplate.add(new StoreValues(0.026,Enchantment.PROTECTION_FIRE,1,10)); + diamond_chestplate.add(new StoreValues(0.021,Enchantment.THORNS,1,10)); + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/EntityHitData.java b/BankEconomyMod/src/me/kaZep/Base/EntityHitData.java new file mode 100644 index 0000000..d8d54de --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/EntityHitData.java @@ -0,0 +1,26 @@ +package me.kaZep.Base; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public class EntityHitData { + public List id; + Player p; + public long registeredtime; + public EntityHitData(Player p) { + this.p=p; + id = new ArrayList(); + registeredtime = Bukkit.getWorld("world").getFullTime()+1200; + } + public List getEntities() { + return id; + } + public Player getPlayer() { + return p; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/EntityInteractData.java b/BankEconomyMod/src/me/kaZep/Base/EntityInteractData.java new file mode 100644 index 0000000..7d2f47c --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/EntityInteractData.java @@ -0,0 +1,29 @@ +package me.kaZep.Base; + +import java.util.UUID; + +import org.bukkit.Bukkit; + +public class EntityInteractData { + UUID entityid; + String entityowner; + long removetime; + public EntityInteractData(UUID id, String owner) { + this.entityid=id; + this.entityowner=owner; + removetime=Bukkit.getWorld("world").getFullTime()+3000; + } + public long getTime() { + return removetime; + } + public String getOwner() { + return entityowner; + } + public UUID getID() { + return entityid; + } + public void setOwner(String owner) { + this.entityowner=owner; + removetime=Bukkit.getWorld("world").getFullTime()+3000; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/ExplorerData.java b/BankEconomyMod/src/me/kaZep/Base/ExplorerData.java new file mode 100644 index 0000000..7626625 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/ExplorerData.java @@ -0,0 +1,36 @@ +package me.kaZep.Base; + +import org.bukkit.Bukkit; +import org.bukkit.Material; + +public class ExplorerData { + String player; + double xprevious,zprevious; + double xlookprevious,zlookprevious; + Material lasttype; + Material lastinteract, awardinteract; + int villagecriteria,templecriteria,cavecriteria,undergroundcriteria,nethercriteria; + int lastmap; + int lastmapemptycount; + float expamt; + int explv; + boolean wedied; + public ExplorerData(String playername, double xpos, double zpos) { + this.player=playername; + this.xprevious=xpos; + this.zprevious=zpos; + this.xlookprevious=xpos; + this.zlookprevious=zpos; + lasttype=Material.DIRT; + lastinteract=Material.DIRT; + awardinteract=Material.DIRT; + villagecriteria=100; + templecriteria=100; + cavecriteria=100; + undergroundcriteria=100; + nethercriteria=100; + this.expamt=Bukkit.getPlayer(playername).getExp(); + this.explv=Bukkit.getPlayer(playername).getLevel(); + this.wedied=false; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/FurnaceData.java b/BankEconomyMod/src/me/kaZep/Base/FurnaceData.java new file mode 100644 index 0000000..20e0ac7 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/FurnaceData.java @@ -0,0 +1,42 @@ +package me.kaZep.Base; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.Furnace; + +public class FurnaceData { + + Location pos; + String owner; + long time; + public FurnaceData(Location pos, String owner) { + this.pos=pos; + this.owner=owner; + this.time=Bukkit.getWorld("world").getFullTime()+9000; + } + + public void setOwner(String owner) { + this.owner=owner; + } + + public short getBurnTime() { + if ((Furnace)Bukkit.getWorld("world").getBlockAt(pos)!=null) { + Furnace furnace = (Furnace)Bukkit.getWorld("world").getBlockAt(pos).getState(); + return furnace.getBurnTime(); + } else { + return 0; + } + } + + public Location getLoc() { + return pos; + } + + public long getTime() { + return time; + } + public void resetTime() { + this.time=Bukkit.getWorld("world").getFullTime()+9000; + } + +} diff --git a/BankEconomyMod/src/me/kaZep/Base/InvisibilityData.java b/BankEconomyMod/src/me/kaZep/Base/InvisibilityData.java new file mode 100644 index 0000000..0896d03 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/InvisibilityData.java @@ -0,0 +1,12 @@ +package me.kaZep.Base; + +import java.util.UUID; + +public class InvisibilityData { + public UUID val = null; + public long resettime = 0; + public InvisibilityData(UUID id, long resettime) { + this.val=id; + this.resettime=resettime; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/JukeboxData.java b/BankEconomyMod/src/me/kaZep/Base/JukeboxData.java new file mode 100644 index 0000000..cc2c2f2 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/JukeboxData.java @@ -0,0 +1,75 @@ +package me.kaZep.Base; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Jukebox; +import org.bukkit.entity.Player; + +public class JukeboxData { + Block jukebox; + Material disk; + int repeat; + int songduration; + long songtickstart; + double closestplayer=0; + public JukeboxData(Block box, Material disk, int loopamount, int duration, long currenttime) { + this.jukebox=box; + this.disk=disk; + this.repeat=loopamount; + this.songduration=duration; + this.songtickstart=currenttime; + } + public boolean Restart() { + this.songtickstart=Bukkit.getWorld("world").getFullTime(); + if (jukebox!=null) { + ((Jukebox)jukebox.getState()).setPlaying(disk); + } else { + this.repeat=0; + } + this.repeat--; + if (this.repeat<=0) { + return false; + } else { + return true; + } + } + public void updateClosestPlayer() { + closestplayer=999999999; + List onlineplayers = Bukkit.getWorld("world").getPlayers(); + for (int k=0;k LOGGING_LOGS; + + public boolean cleaned=false; + + public JobsDataInfo Woodcutter_job = new JobsDataInfo(); + public JobsDataInfo Builder_job = new JobsDataInfo(); + public JobsDataInfo Miner_job = new JobsDataInfo(); + public JobsDataInfo Digger_job = new JobsDataInfo(); + public JobsDataInfo Farmer_job = new JobsDataInfo(); + public JobsDataInfo Hunter_job = new JobsDataInfo(); + public JobsDataInfo Fisherman_job = new JobsDataInfo(); + public JobsDataInfo Weaponsmith_job = new JobsDataInfo(); + public JobsDataInfo Blacksmith_job = new JobsDataInfo(); + public JobsDataInfo Cook_job = new JobsDataInfo(); + public JobsDataInfo Brewer_job = new JobsDataInfo(); + public JobsDataInfo Enchanter_job = new JobsDataInfo(); + public JobsDataInfo Breeder_job = new JobsDataInfo(); + public JobsDataInfo Explorer_job = new JobsDataInfo(); + public JobsDataInfo Support_job = new JobsDataInfo(); + public List jukeboxlist = null; + public List furnacelist = null; + public List brewingstandlist = null; + public List animallist = null; + public List explorerlist = null; + public List supportstackslist = null; + public List supportmoblist = null; + public List hitmoblist = null; + public List SPEED_CONTROL = null; + public List supportplayers = null; + public List hunterplayers = null; + public List explorers = null; + public List ARROW_SHOOTERS = null; + public List TEMP_WEBS = null; + public List playerdata_list = null; + public List ninjavisible_list = null; + public List revive_inventory_list = null; + public DamageAPI DMGCALC = null; + + + public FileWriter outputStream = null; + + public EnchantLevelDatabase ENCHANTMENT_DATA; + File f; + + public Material[] RARE_BLOCKS = {Material.BEACON,Material.ANVIL,Material.ACTIVATOR_RAIL,Material.BEDROCK,Material.BOOKSHELF,Material.DAYLIGHT_DETECTOR,Material.COAL_ORE,Material.CLAY,Material.DIAMOND_ORE,Material.IRON_ORE,Material.REDSTONE_ORE,Material.EMERALD_ORE,Material.GOLD_ORE,Material.LAPIS_ORE,Material.OBSIDIAN,Material.MOSSY_COBBLESTONE,Material.MOB_SPAWNER,Material.NETHER_BRICK,Material.NETHER_FENCE,Material.JUKEBOX,Material.QUARTZ_ORE,Material.PORTAL,Material.PISTON_BASE,Material.REDSTONE_WIRE,Material.DISPENSER,Material.LOG,Material.MYCEL,Material.HUGE_MUSHROOM_1,Material.HUGE_MUSHROOM_2}; + long GLOBAL_villagetimer=0,GLOBAL_templetimer=0,GLOBAL_cavetimer=0,GLOBAL_undergroundtimer=0,GLOBAL_nethertimer=0; + + + public String[] ValidJobs = {"Woodcutter","Miner","Builder","Digger","Farmer","Hunter","Fisherman","Weaponsmith","Blacksmith","Cook","Brewer","Enchanter","Breeder","Explorer","Support"}; + public ChatColor[] JobColors = {ChatColor.GREEN,ChatColor.GRAY,ChatColor.WHITE,ChatColor.GOLD,ChatColor.BLUE,ChatColor.RED,ChatColor.AQUA,ChatColor.DARK_PURPLE,ChatColor.GOLD, + ChatColor.YELLOW,ChatColor.LIGHT_PURPLE,ChatColor.DARK_BLUE,ChatColor.DARK_GREEN,ChatColor.WHITE,ChatColor.DARK_RED}; + + private FileConfiguration accountsConfig = null; + private File accountsConfigFile = null; + + public final PlayerListener pl = new PlayerListener(this); + + String pluginPrefix = "§2[BankEconomy]"; + + public void onEnable() + { + getServer().getPluginManager().registerEvents(this.pl, this); + + cleaned=false; + + PluginDescriptionFile pdf = getDescription(); + System.out.println("[" + getDescription().getName() + "] Status: Activated (mb: kaZep)"); + System.out.println("[" + getDescription().getName() + "] PayDay: " + getConfig().getBoolean("payday.enabled")); + System.out.println("[" + getDescription().getName() + "] Version: " + pdf.getVersion()); + + getCommand("bankeconomy").setExecutor(new commandBankEconomy(this)); + getCommand("revive").setExecutor(new commandBankEconomy(this)); + getCommand("tele").setExecutor(new commandBankEconomy(this)); + getCommand("jobs").setExecutor(new commandBankEconomy(this)); + getCommand("unenchant").setExecutor(new commandBankEconomy(this)); + getCommand("sp").setExecutor(new commandBankEconomy(this)); + getCommand("transfer").setExecutor(new commandBankEconomy(this)); + getCommand("settings").setExecutor(new commandBankEconomy(this)); + getCommand("maintenance").setExecutor(new commandBankEconomy(this)); + getCommand("event").setExecutor(new commandBankEconomy(this)); + + setupEconomy(); + + getConfig().options().copyDefaults(true); + getConfig().addDefault("start-balance", Integer.valueOf(0)); + getConfig().addDefault("payday.enabled", Boolean.valueOf(false)); + getConfig().addDefault("payday.time", Integer.valueOf(60)); + getConfig().addDefault("payday.amount", Integer.valueOf(0)); + getConfig().addDefault("fed.mobs", String.valueOf("")); + getConfig().addDefault("maintenance-mode", Boolean.valueOf(false)); + getConfig().addDefault("halloween-enabled", Boolean.valueOf(true)); + getConfig().addDefault("item-cube-numb", Integer.valueOf(0)); + saveConfig(); + + getAccountsConfig().options().copyDefaults(true); + saveAccountsConfig(); + + getConfig().set("spleefrequestatime", Integer.valueOf(0)); + getConfig().set("spleefrequestbtime", Integer.valueOf(0)); + getConfig().set("spleeflastrequesttime", Integer.valueOf(0)); + getConfig().set("spleef4insession", Boolean.valueOf(false)); + getConfig().set("spleefinsession", Boolean.valueOf(false)); + + jukeboxlist = new ArrayList(); + furnacelist = new ArrayList(); + brewingstandlist = new ArrayList(); + animallist = new ArrayList(); + explorerlist = new ArrayList(); + supportstackslist = new ArrayList(); + supportmoblist = new ArrayList(); + hitmoblist = new ArrayList(); + ENCHANTMENT_DATA = new EnchantLevelDatabase(); + SPEED_CONTROL = new ArrayList(); + supportplayers = new ArrayList(); + hunterplayers = new ArrayList(); + explorers = new ArrayList(); + LOGGING_LOGS = new ArrayList(); + ARROW_SHOOTERS = new ArrayList(); + TEMP_WEBS = new ArrayList(); + playerdata_list = new ArrayList(); + ninjavisible_list = new ArrayList(); + revive_inventory_list = new ArrayList(); + + //Add Recipes for new Block armor crafting. + ShapedRecipe iron_helmet = new ShapedRecipe(new ItemStack(Material.IRON_HELMET)); + iron_helmet.shape("aaa","a a"); + iron_helmet.setIngredient('a', Material.IRON_BLOCK); + Bukkit.addRecipe(iron_helmet); + ShapedRecipe iron_chestplate = new ShapedRecipe(new ItemStack(Material.IRON_CHESTPLATE)); + iron_chestplate.shape("a a","aaa","aaa"); + iron_chestplate.setIngredient('a', Material.IRON_BLOCK); + Bukkit.addRecipe(iron_chestplate); + ShapedRecipe iron_leggings = new ShapedRecipe(new ItemStack(Material.IRON_LEGGINGS)); + iron_leggings.shape("aaa","a a","a a"); + iron_leggings.setIngredient('a', Material.IRON_BLOCK); + Bukkit.addRecipe(iron_leggings); + ShapedRecipe iron_boots = new ShapedRecipe(new ItemStack(Material.IRON_BOOTS)); + iron_boots.shape("a a","a a"); + iron_boots.setIngredient('a', Material.IRON_BLOCK); + Bukkit.addRecipe(iron_boots); + ShapedRecipe gold_helmet = new ShapedRecipe(new ItemStack(Material.GOLD_HELMET)); + gold_helmet.shape("aaa","a a"); + gold_helmet.setIngredient('a', Material.GOLD_BLOCK); + Bukkit.addRecipe(gold_helmet); + ShapedRecipe gold_chestplate = new ShapedRecipe(new ItemStack(Material.GOLD_CHESTPLATE)); + gold_chestplate.shape("a a","aaa","aaa"); + gold_chestplate.setIngredient('a', Material.GOLD_BLOCK); + Bukkit.addRecipe(gold_chestplate); + ShapedRecipe gold_leggings = new ShapedRecipe(new ItemStack(Material.GOLD_LEGGINGS)); + gold_leggings.shape("aaa","a a","a a"); + gold_leggings.setIngredient('a', Material.GOLD_BLOCK); + Bukkit.addRecipe(gold_leggings); + ShapedRecipe gold_boots = new ShapedRecipe(new ItemStack(Material.GOLD_BOOTS)); + gold_boots.shape("a a","a a"); + gold_boots.setIngredient('a', Material.GOLD_BLOCK); + Bukkit.addRecipe(gold_boots); + ShapedRecipe diamond_helmet = new ShapedRecipe(new ItemStack(Material.DIAMOND_HELMET)); + diamond_helmet.shape("aaa","a a"); + diamond_helmet.setIngredient('a', Material.DIAMOND_BLOCK); + Bukkit.addRecipe(diamond_helmet); + ShapedRecipe diamond_chestplate = new ShapedRecipe(new ItemStack(Material.DIAMOND_CHESTPLATE)); + diamond_chestplate.shape("a a","aaa","aaa"); + diamond_chestplate.setIngredient('a', Material.DIAMOND_BLOCK); + Bukkit.addRecipe(diamond_chestplate); + ShapedRecipe diamond_leggings = new ShapedRecipe(new ItemStack(Material.DIAMOND_LEGGINGS)); + diamond_leggings.shape("aaa","a a","a a"); + diamond_leggings.setIngredient('a', Material.DIAMOND_BLOCK); + Bukkit.addRecipe(diamond_leggings); + ShapedRecipe diamond_boots = new ShapedRecipe(new ItemStack(Material.DIAMOND_BOOTS)); + diamond_boots.shape("a a","a a"); + diamond_boots.setIngredient('a', Material.DIAMOND_BLOCK); + Bukkit.addRecipe(diamond_boots); + ItemStack temp = new ItemStack(Material.CHEST); + ItemMeta tempmeta = temp.getItemMeta(); + tempmeta.setDisplayName(ChatColor.YELLOW+"Item Cube"); + List templore = new ArrayList(); + templore.add(ChatColor.AQUA+"Contains 9 item slots."); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"Click on an item and then"); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"click the Item Cube to store"); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"it inside. Right-Click the"); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"Item Cube to view its contents."); + tempmeta.setLore(templore); + temp.setItemMeta(tempmeta); + ShapedRecipe item_cube = new ShapedRecipe(temp); + item_cube.shape("aaa","aba","aaa"); + item_cube.setIngredient('a', Material.CHEST); + item_cube.setIngredient('b', Material.HOPPER); + Bukkit.addRecipe(item_cube); + temp = new ItemStack(Material.TRAPPED_CHEST); + tempmeta = temp.getItemMeta(); + tempmeta.setDisplayName(ChatColor.LIGHT_PURPLE+"Large Item Cube"); + templore = new ArrayList(); + templore.add(ChatColor.AQUA+"Contains 54 item slots."); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"Click on an item and then"); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"click the Item Cube to store"); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"it inside. Right-Click the"); + templore.add(ChatColor.GRAY+""+ChatColor.ITALIC+"Item Cube to view its contents."); + tempmeta.setLore(templore); + temp.setItemMeta(tempmeta); + item_cube = new ShapedRecipe(temp); + item_cube.shape("cac","aba","cac"); + item_cube.setIngredient('a', Material.ENDER_CHEST); + item_cube.setIngredient('b', Material.HOPPER); + item_cube.setIngredient('c', Material.DIAMOND_BLOCK); + Bukkit.addRecipe(item_cube); + + DMGCALC = new DamageAPI(); + //System.out.println("Running BankEconomy in "+this.getDataFolder().getAbsolutePath()); + //System.out.println("File size: "+f.length()); + checkJukeboxes(); + updateTime(); + runTick(); + + if (!getConfig().getBoolean("payday.enabled")) + return; + if (getConfig().getBoolean("payday.enabled")) { + payDay(getConfig().getInt("payday.time")); + } else { + System.out.println("[BANKECONOMY ALERT] Error caused at 'payday.enabled'. Changed boolean to false."); + getConfig().set("payday.enabled", Boolean.valueOf(false)); + saveConfig(); + } + try + { + Metrics metrics = new Metrics(this); + metrics.start(); + } catch (IOException e) { + System.out.println("[WARNING] " + getDescription().getName() + " didn't connect to McStats.org ! Please check your metrics settings."); + } + + Woodcutter_job.setJobName("Woodcutter"); + Woodcutter_job.setJobDescription("A woodcutter's job is to cut down and replenish the supplies of trees constantly in order to keep getting income."); + Woodcutter_job.setAction(0, "BREAK"); + Woodcutter_job.setExp(40, 10, 20, 1.03); + Woodcutter_job.addData("WOOD", 0.01, 1, 0); + Woodcutter_job.addData("WOOD W/ AXE", 0.025, 2, 0); + Woodcutter_job.setAction(1, "PLACE"); + Woodcutter_job.addData("SAPLINGS", 0.015, 1, 1); + Woodcutter_job.addData("WOOD", 0.01, 0.25, 1); + Woodcutter_job.addData("WOODEN PLANK", 0.00, 0.10, 1); + Woodcutter_job.setBuffData("Saplings have a higher chance of dropping from tree leaves. (+40%)", + "Axes used gain Efficiency +1 (Speed+30%)", + "Saplings have a higher chance of dropping from tree leaves. (+60%), Axes used gain Efficiency +2 (Speed+60%).", + "Axes that you use never break. Axes used gain Efficiency +3 (Speed+90%) 2-5 wood is dropped from each log. Saplings around you have a higher chance of growing quickly."); + + Miner_job.setJobName("Miner"); + Miner_job.setJobDescription("A miner's job is to venture into caves and collect precious minerals from within, eventually coming out with such treasures for use in other production."); + Miner_job.setAction(0, "BREAK"); + Miner_job.setExp(60, 100, 65, 1.02); + Miner_job.addData("STONE", 0.0025, 1, 0); + Miner_job.addData("NETHERRACK", 0.005, 1, 0); + Miner_job.addData("COAL", 0.0125, 3, 0); + Miner_job.addData("GLOWSTONE", 0.015, 3, 0); + Miner_job.addData("SANDSTONE", 0.015, 4, 0); + Miner_job.addData("NETHER BRICK", 0.02, 3, 0); + Miner_job.addData("QUARTZ ORE", 0.025, 4, 0); + Miner_job.addData("LAPIS LAZULI ORE", 0.03, 5, 0); + Miner_job.addData("MOSSY COBBLESTONE", 0.0375, 8, 0); + Miner_job.addData("IRON ORE", 0.0375, 6, 0); + Miner_job.addData("REDSTONE ORE", 0.05, 9, 0); + Miner_job.addData("OBSIDIAN", 0.0625, 10, 0); + Miner_job.addData("GOLD ORE", 0.0975, 12, 0); + Miner_job.addData("DIAMOND ORE", 0.3125, 60, 0); + Miner_job.addData("EMERALD ORE", 0.7625, 160, 0); + Miner_job.setBuffData("Pickaxes used gain Efficiency +1 (Speed+30%)", + "Pickaxes have double the durability.", + "Pickaxes used gain Efficiency +2 (Speed+60%)", + "Pickaxes used give 240% more items from ore, have quadruple the durability, Efficiency +3 (Speed+90%). Minecart riding speed increased by 40%."); + + Builder_job.setJobName("Builder"); + Builder_job.setJobDescription("A builder's job is to use blocks in order to create and invent new buildings using materials that look nice."); + Builder_job.setAction(0, "PLACE"); + Builder_job.setExp(80, 150, 50, 1.02); + Builder_job.addData("COBBLESTONE", 0.005, 1, 0); + Builder_job.addData("WOODEN PLANK", 0.005, 2, 0); + Builder_job.addData("WOOD", 0.01, 3, 0); + Builder_job.addData("COBBLESTONE SLAB", 0.015, 3, 0); + Builder_job.addData("COBBLESTONE STAIRS", 0.015, 3, 0); + Builder_job.addData("STONE", 0.015, 4, 0); + Builder_job.addData("WOODEN FENCE", 0.015, 3, 0); + Builder_job.addData("WOODEN SLAB", 0.015, 3, 0); + Builder_job.addData("STONE SLAB", 0.02, 4, 0); + Builder_job.addData("WOODEN STAIRS", 0.02, 4, 0); + Builder_job.addData("LAPIS BLOCK", 0.02, 3, 0); + Builder_job.addData("SANDSTONE SLAB", 0.025, 4, 0); + Builder_job.addData("NETHER BRICK STAIRS", 0.025, 5, 0); + Builder_job.addData("NETHER BRICK", 0.03, 5, 0); + Builder_job.addData("NETHER BRICK SLAB", 0.03, 5, 0); + Builder_job.addData("NETHER BRICK FENCE", 0.03, 6, 0); + Builder_job.addData("STONE BRICK SLAB", 0.03, 5, 0); + Builder_job.addData("WOOL", 0.035, 7, 0); + Builder_job.addData("STONE BRICK STAIRS", 0.04, 8, 0); + Builder_job.addData("STONE BRICK", 0.04, 8, 0); + Builder_job.addData("GLASS", 0.04, 8, 0); + Builder_job.addData("QUARTZ SLAB", 0.05, 9, 0); + Builder_job.addData("BRICKS SLAB", 0.05, 9, 0); + Builder_job.addData("GLOWSTONE", 0.05, 10, 0); + Builder_job.addData("HARDENED CLAY", 0.05, 10, 0); + Builder_job.addData("STAINED CLAY", 0.05, 10, 0); + Builder_job.addData("SANDSTONE STAIRS", 0.06, 10, 0); + Builder_job.addData("SANDSTONE", 0.06, 10, 0); + Builder_job.addData("QUARTZ STAIRS", 0.06, 12, 0); + Builder_job.addData("BRICK STAIRS", 0.065, 9, 0); + Builder_job.addData("QUARTZ BLOCK", 0.07, 14, 0); + Builder_job.addData("BRICK", 0.075, 11, 0); + Builder_job.setBuffData("Every 5XP gives you one torch.", + "1% of blocks placed will be replenished to your inventory.", + "5% of blocks placed will be replenished to your inventory.", + "Placing blocks gives you experience orbs. 50% of blocks placed will be replenished to your inventory."); + + Digger_job.setJobName("Digger"); + Digger_job.setJobDescription("A digger's job is to collect blocks from the ground that are collectible with a shovel. The digger may also convert some blocks to other types for more XP and money."); + Digger_job.setAction(0, "BREAK"); + Digger_job.setAction(1, "CRAFT"); + Digger_job.setAction(2, "SMELT"); + Digger_job.setExp(150, 100, 30, 1.02); + Digger_job.addData("DIRT", 0.005, 1, 0); + Digger_job.addData("GRASS", 0.005, 2, 0); + Digger_job.addData("SAND", 0.01, 2, 0); + Digger_job.addData("GRAVEL", 0.02, 5, 0); + Digger_job.addData("SOUL SAND", 0.04, 8, 0); + Digger_job.addData("CLAY", 0.05, 10, 0); + Digger_job.addData("SANDSTONE", 0.02, 6, 1); + Digger_job.addData("SMOOTH SANDSTONE", 0.02, 6, 1); + Digger_job.addData("CHISELED SANDSTONE", 0.025, 7, 1); + Digger_job.addData("BRICKS", 0.04, 8, 1); + Digger_job.addData("GLASS", 0.015, 3, 2); + Digger_job.addData("BRICK", 0.04, 8, 2); + Digger_job.setBuffData("Shovels used gain Efficiency +1 (Speed+30%)", + "Shovels have double the durability.", + "Shovels used gain Efficiency +2 (Speed+60%), Shovels have triple the durability.", + "Shovels have quadruple the durability. Blocks dug up are doubled in quantity. Shovels have Efficiency +4 (Speed+120%)."); + + Farmer_job.setJobName("Farmer"); + Farmer_job.setJobDescription("A farmer's job is to sustain and continue to replenish what nature provides to turn them into sustainable food items and other useful things."); + Farmer_job.setAction(0, "BREAK"); + Farmer_job.setAction(1, "PLACE"); + Farmer_job.setExp(150, 100, 20, 1.02); + Farmer_job.addData("SUGAR CANE", 0.00, 1, 0); + Farmer_job.addData("CACTUS", 0.00, 3, 0); + Farmer_job.addData("BROWN MUSHROOM", 0.00, 3, 0); + Farmer_job.addData("RED MUSHROOM", 0.00, 3, 0); + Farmer_job.addData("WHEAT", 0.01, 2, 0); + Farmer_job.addData("CARROT", 0.01, 2, 0); + Farmer_job.addData("POTATO", 0.03, 3, 0); + Farmer_job.addData("NETHER WART", 0.03, 3, 0); + //Farmer_job.addData("PUMPKIN SEEDS", 0.02, 4, 0); + //Farmer_job.addData("PUMPKIN", 0.04, 8, 0); + Farmer_job.addData("MELON", 0.10, 10, 0); + Farmer_job.addData("SEEDS", 0.005, 1, 1); + Farmer_job.addData("PUMPKIN SEEDS", 0.01, 2, 1); + Farmer_job.addData("MELON SEEDS", 0.01, 2, 1); + //Farmer_job.addData("PUMPKIN", 0.00, -16, 1); + Farmer_job.setBuffData("Hoes do not lose durability when used.", + "Killing skeletons yields triple the amount of bones.", + "Nearby crops grow 30% faster.", + "Nearby crops grow 200% faster. Bonemeal grows things instantly. (Just like before the bonemeal nerf) in one use."); + + Hunter_job.setJobName("Hunter"); + Hunter_job.setJobDescription("A hunter's job is to take care of the threats at night and protect others who may be in danger. Hunters that kill innocent creatures will be punished, thus they must resort to other methods for food."); + Hunter_job.setAction(0, "HURT"); + Hunter_job.setAction(1, "KILL"); + Hunter_job.setExp(300, 250, 35, 1.01); + Hunter_job.addData("SQUID", 0.00, 1, 0); + Hunter_job.addData("SLIME", 0.005, 1, 0); + Hunter_job.addData("ZOMBIE", 0.01, 2, 0); + Hunter_job.addData("SPIDER", 0.01, 2, 0); + Hunter_job.addData("SKELETON", 0.015, 3, 0); + Hunter_job.addData("CREEPER", 0.025, 5, 0); + Hunter_job.addData("PIG ZOMBIE", 0.03, 6, 0); + Hunter_job.addData("GHAST", 0.04, 8, 0); + Hunter_job.addData("ENDERMAN", 0.04, 8, 0); + Hunter_job.addData("BLAZE", 0.05, 10, 0); + Hunter_job.addData("ENDER DRAGON", 12.50, 250, 0); + Hunter_job.addData("WITHER", 22.50, 450, 0); + Hunter_job.addData("CHICKEN", 0.00, -2, 0); + Hunter_job.addData("SHEEP", 0.00, -3, 0); + Hunter_job.addData("PIG", 0.00, -4, 0); + Hunter_job.addData("COW", 0.00, -6, 0); + Hunter_job.addData("OCELOT", 0.00, -9, 0); + Hunter_job.addData("WOLF", 0.00, -12, 0); + Hunter_job.addData("MUSHROOM COW", 0.00, -20, 0); + Hunter_job.addData("SQUID", 0.00, 0, 1); + Hunter_job.addData("SLIME", 0.00, 0, 1); + Hunter_job.addData("SPIDER", 0.02, 4, 1); + Hunter_job.addData("ZOMBIE", 0.025, 5, 1); + Hunter_job.addData("SKELETON", 0.035, 7, 1); + Hunter_job.addData("CREEPER", 0.05, 10, 1); + Hunter_job.addData("PIG ZOMBIE", 0.08, 16, 1); + Hunter_job.addData("GHAST", 0.10, 12, 1); + Hunter_job.addData("ENDERMAN", 0.125, 16, 1); + Hunter_job.addData("BLAZE", 0.15, 20, 1); + Hunter_job.addData("ENDER DRAGON", 100.00, 3000, 1); + Hunter_job.addData("WITHER", 550.00, 7800, 1); + Hunter_job.setBuffData("Damage dealt increased by 2.", + "Sneaking gives you invisibility.", + "Swords gain Fire Aspect II. Movement speed increased by 20%.", + "Damage dealt increased by 4, damage taken decreased by 30%, at night you are invisible. Health increased by 20."); + + Fisherman_job.setJobName("Fisherman"); + Fisherman_job.setJobDescription("A fisherman's job is to catch fish. And more fish. And cook them."); + Fisherman_job.setAction(0, "CATCH"); + Fisherman_job.setAction(1, "SMELT"); + Fisherman_job.setExp(30, 40, 6, 1.04); + Fisherman_job.addData("RAW FISH", 0.175, 3, 0); + Fisherman_job.addData("COOKED FISH", 0.125, 2, 1); + Fisherman_job.setBuffData("Fishing rods have double the durability.", + "Fish give double the exp orbs, two fish can be caught at the same time (25% chance)", + "Up to four fish can be caught at one time. Sometimes fish will be automatically cooked. (Will gain exp and money for the cooked ones as well)", + "Fishing rods do 10 damage when hooking an enemy mob. Fishing rods do not run out of durability. Chance of catching fish increased by 50%. Holding a fishing rod gives the ability to fly for 5 seconds at a time."); + + Weaponsmith_job.setJobName("Weaponsmith"); + Weaponsmith_job.setJobDescription("A weaponsmith's job is to craft weapons for others and themselves."); + Weaponsmith_job.setAction(0, "CRAFT"); + Weaponsmith_job.setExp(100, 100, 30, 1.05); + Weaponsmith_job.addData("ARROW", 0.025, 4, 0); + Weaponsmith_job.addData("WOODEN SWORD", 0.05, 10, 0); + Weaponsmith_job.addData("FLINT AND STEEL", 0.06, 12, 0); + Weaponsmith_job.addData("BOW", 0.075, 12, 0); + Weaponsmith_job.addData("IRON SWORD", 0.375, 75, 0); + Weaponsmith_job.addData("GOLD SWORD", 0.50, 100, 0); + Weaponsmith_job.addData("DIAMOND SWORD", 0.975, 175, 0); + Weaponsmith_job.setBuffData("Materials used in crafting have a 10% chance of being preserved.", + "Weapons crafted gain a free level 5 enchantment.", + "Materials used in crafting have a 25% chance of being preserved.", + "Weapons crafted gain free level 25 enchantments. Materials used in crafting have a 50% chance of being preserved. Weapons crafted have a 30% chance of stacking (duplicated), and 30% chance for every extra addition to the weapon stack."); + + Blacksmith_job.setJobName("Blacksmith"); + Blacksmith_job.setJobDescription("A blacksmith's job is to provide tools, armor, and other crafted materials to others and themselves to protect them."); + Blacksmith_job.setAction(0, "CRAFT"); + Blacksmith_job.setExp(250, 150, 37, 1.03); + Blacksmith_job.addData("STONE HOE", 0.04, 7, 0); + Blacksmith_job.addData("STONE SHOVEL", 0.05, 8, 0); + Blacksmith_job.addData("STONE PICKAXE", 0.075, 15, 0); + Blacksmith_job.addData("LEATHER BOOTS", 0.125, 8, 0); + Blacksmith_job.addData("LEATHER CAP", 0.15, 14, 0); + Blacksmith_job.addData("LEATHER PANTS", 0.175, 15, 0); + Blacksmith_job.addData("LEATHER TUNIC", 0.20, 18, 0); + Blacksmith_job.addData("IRON SHOVEL", 0.25, 18, 0); + Blacksmith_job.addData("IRON HOE", 0.325, 24, 0); + Blacksmith_job.addData("WEAK IRON BOOTS", 0.375, 27, 0); + Blacksmith_job.addData("IRON PICKAXE", 0.40, 30, 0); + Blacksmith_job.addData("WEAK IRON HELMET", 0.50, 45, 0); + Blacksmith_job.addData("GOLDEN SHOVEL", 0.625, 55, 0); + Blacksmith_job.addData("GOLDEN HOE", 0.65, 60, 0); + Blacksmith_job.addData("WEAK IRON LEGGINGS", 0.725, 60, 0); + Blacksmith_job.addData("DIAMOND SHOVEL", 0.75, 65, 0); + Blacksmith_job.addData("DIAMOND HOE", 0.8, 70, 0); + Blacksmith_job.addData("WEAK GOLDEN BOOTS", 0.825, 50, 0); + Blacksmith_job.addData("WEAK IRON CHESTPLATE", 0.875, 70, 0); + Blacksmith_job.addData("WEAK GOLDEN HELMET", 0.925, 80, 0); + Blacksmith_job.addData("DIAMOND PICKAXE", 0.925, 80, 0); + Blacksmith_job.addData("WEAK DIAMOND BOOTS", 1.0, 85, 0); + Blacksmith_job.addData("WEAK GOLDEN LEGGINGS", 1.025, 100, 0); + Blacksmith_job.addData("WEAK GOLDEN CHESTPLATE", 1.15, 130, 0); + Blacksmith_job.addData("WEAK DIAMOND HELMET", 1.15, 125, 0); + Blacksmith_job.addData("WEAK DIAMOND LEGGINGS", 1.325, 145, 0); + Blacksmith_job.addData("WEAK DIAMOND CHESTPLATE", 1.50, 175, 0); + Blacksmith_job.addData("IRON BOOTS", 0.375*8, 27*8, 0); + Blacksmith_job.addData("IRON HELMET", 0.50*8, 45*8, 0); + Blacksmith_job.addData("IRON LEGGINGS", 0.725*8, 60*8, 0); + Blacksmith_job.addData("GOLDEN BOOTS", 0.825*8, 50*8, 0); + Blacksmith_job.addData("IRON CHESTPLATE", 0.875*8, 70*8, 0); + Blacksmith_job.addData("GOLDEN HELMET", 0.925*8, 80*8, 0); + Blacksmith_job.addData("DIAMOND BOOTS", 1.0*8, 85*8, 0); + Blacksmith_job.addData("GOLDEN LEGGINGS", 1.025*8, 100*8, 0); + Blacksmith_job.addData("GOLDEN CHESTPLATE", 1.15*8, 130*8, 0); + Blacksmith_job.addData("DIAMOND HELMET", 1.15*8, 125*8, 0); + Blacksmith_job.addData("DIAMOND LEGGINGS", 1.325*8, 145*8, 0); + Blacksmith_job.addData("DIAMOND CHESTPLATE", 1.50*8, 175*8, 0); + Blacksmith_job.setBuffData("All crafted items are buffed with a Lv5 enchantment.", + "All crafted items are buffed with a Lv10 enchantment.", + "Crafting materials have a 30% chance of being preserved.", + "All crafted Blacksmith items stack between 2 and 5 of the same item, effectively multiplying the amount you craft. Items are buffed with a Lv20 enchantment and have a 50% chance to be enchanted with a level 30 enchantment."); + + Cook_job.setJobName("Cook"); + Cook_job.setJobDescription("A cook's job is to provide food for others and themselves through cooking and crafting together ingredients."); + Cook_job.setAction(0, "CRAFT"); + Cook_job.setAction(1, "SMELT"); + Cook_job.setExp(250, 200, 40, 1.04); + Cook_job.addData("BREAD", 0.0125, 5, 0); + Cook_job.addData("MUSHROOM SOUP", 0.0375, 15, 0); + Cook_job.addData("COOKIE", 0.0675, 25, 0); + Cook_job.addData("GOLDEN CARROT", 0.0875, 35, 0); + Cook_job.addData("GOLDEN APPLE", 0.1125, 45, 0); + Cook_job.addData("PUMPKIN PIE", 0.15, 60, 0); + Cook_job.addData("CAKE", 0.2125, 85, 0); + Cook_job.addData("COOKED FISH", 0.03, 12, 1); + Cook_job.addData("BAKED POTATO", 0.04, 16, 1); + Cook_job.addData("COOKED CHICKEN", 0.045, 18, 1); + Cook_job.addData("GRILLED PORK", 0.06, 24, 1); + Cook_job.addData("COOKED BEEF", 0.10, 40, 1); + Cook_job.setBuffData("Double the amount of cooking time with one fuel item in the furnace.", + "Results of crafting food is double the normal amount.", + "Results of cooking food is double the normal amount.", + "Cooking and crafting food gives 4x the normal amount. Cooking and crafting food gives exp orbs and has a chance of giving Golden Apples and Golden Carrots sometimes. (15% per crafted/cooked item.)"); + + Brewer_job.setJobName("Brewer"); + Brewer_job.setJobDescription("A brewer's job is to create potions for others and themselves in order to change the outcome of situations."); + Brewer_job.setAction(0, "BREW"); + Brewer_job.setExp(100, 55, 3, 1.05); + Brewer_job.addData("SUGAR", 0.01, 2, 0); + Brewer_job.addData("SPIDER EYE", 0.015, 2, 0); + Brewer_job.addData("REDSTONE", 0.025, 2, 0); + Brewer_job.addData("GLOWSTONE DUST", 0.025, 2, 0); + Brewer_job.addData("GUNPOWDER", 0.03, 2, 0); + Brewer_job.addData("FERMENTED SPIDER EYE", 0.035, 4, 0); + Brewer_job.addData("GLISTERING MELON", 0.035, 4, 0); + Brewer_job.addData("NETHER WART", 0.04, 4, 0); + Brewer_job.addData("GOLDEN CARROT", 0.05, 5, 0); + Brewer_job.addData("BLAZE POWDER", 0.05, 6, 0); + Brewer_job.addData("MAGMA CREAM", 0.075, 8, 0); + Brewer_job.addData("GHAST TEAR", 0.30, 20, 0); + Brewer_job.setBuffData("Decrease brewing wait time by half.", + "Potions obtained are doubled. (Stacks of two)", + "Potions created by you have double the duration.", + "Potions created by you last for 30 minutes. Potions automatically stack up together in your inventory when grabbed. Splash potions provide full power regardless of how far from the splash the affected entities are. Potions obtained are quadrupled. Brewing wait time decreased by 4x the normal time."); + + Enchanter_job.setJobName("Enchanter"); + Enchanter_job.setJobDescription("An enchanter's job is to enchant items in order to make them more powerful and useful for everyday tasks."); + Enchanter_job.setAction(0, "ENCHANT"); + Enchanter_job.setExp(30, 30, 3, 1.04); + Enchanter_job.addExtraData("Each level of enchantment multiplies your income and exp gain."); + Enchanter_job.addExtraData("Ex. If PROTECTION gives $0.04 and 2XP, PROTECTION III would give you $0.12 and 6XP."); + Enchanter_job.addData("PROTECTION", 0.04, 2, 0); + Enchanter_job.addData("SMITE", 0.05, 4, 0); + Enchanter_job.addData("FIRE PROTECTION", 0.05, 3, 0); + Enchanter_job.addData("BANE OF ARTHROPODS", 0.06, 4, 0); + Enchanter_job.addData("FEATHER FALLING", 0.07, 5, 0); + Enchanter_job.addData("SHARPNESS", 0.075, 7, 0); + Enchanter_job.addData("POWER", 0.075, 7, 0); + Enchanter_job.addData("EFFICIENCY", 0.075, 7, 0); + Enchanter_job.addData("BLAST PROTECTION", 0.10, 8, 0); + Enchanter_job.addData("THORNS", 0.10, 8, 0); + Enchanter_job.addData("KNOCKBACK", 0.10, 9, 0); + Enchanter_job.addData("PUNCH", 0.10, 9, 0); + Enchanter_job.addData("FIRE ASPECT", 0.11, 10, 0); + Enchanter_job.addData("FLAME", 0.11, 10, 0); + Enchanter_job.addData("AQUA AFFINITY", 0.125, 8, 0); + Enchanter_job.addData("RESPIRATION", 0.15, 10, 0); + Enchanter_job.addData("UNBREAKING", 0.175, 12, 0); + Enchanter_job.addData("INFINITY", 0.20, 20, 0); + Enchanter_job.addData("LOOTING", 0.20, 15, 0); + Enchanter_job.addData("FORTUNE", 0.225, 20, 0); + Enchanter_job.addData("SILK TOUCH", 0.25, 20, 0); + Enchanter_job.setBuffData("Whenever you gain experience, the amount you gain is doubled.", + "Enchantments consume 25% less of your exp. (Lv20 enchantment costs 15 levels) Enchantments gain an extra stat enchantment bonus.", + "Enchantments are more potent. (Gain extra enchantments, bonus enchantments, and higher levels than normal.)", + "Enchanters receive quadruple the amount of experience from orbs. Enchanting consumes 75% less of your exp. (Lv20 enchantment costs 5 levels) Enchantments are at least level 5 or higher. Extra bonus enchantments are very likely, and super enchantments are added as well."); + + Breeder_job.setJobName("Breeder"); + Breeder_job.setJobDescription("A breeder's job is to populate and continue to grow animals and make sure there's plenty of animals in the area."); + Breeder_job.setAction(0, "BREED"); + Breeder_job.setAction(1, "DYE"); + Breeder_job.setAction(2, "SHEAR"); + Breeder_job.setExp(70, 50, 5, 1.02); + Breeder_job.addExtraData("In areas where there are little to no animals, breeders get 10x the amount of money and xp."); + Breeder_job.addData("CHICKEN", 0.005, 1, 0); + Breeder_job.addData("PIG", 0.01, 2, 0); + Breeder_job.addData("SHEEP", 0.01, 2, 0); + Breeder_job.addData("COW", 0.015, 2, 0); + Breeder_job.addData("OCELOT", 0.02, 4, 0); + Breeder_job.addData("WOLF", 0.03, 5, 0); + Breeder_job.addData("MUSHROOM COW", 0.15, 20, 0); + Breeder_job.addData("HORSE", 1.20, 50, 0); + Breeder_job.addData("SHEEP", 0.01, 1, 1); + Breeder_job.addData("SHEEP", 0.001, 0.1, 2); + Breeder_job.addData("MUSHROOM COW", 0.005, 0.5, 2); + Breeder_job.setBuffData("Nearby Sheep and Chickens reproduce wool and eggs at double the rate.", + "Breeding animals may yield twins and triplets half the time.", + "Feeding animals will give you the item back half the time.", + "Breeding animals will give between 2-5 of that animal, all of them will be grown up. Sheep will always regrow their wool instantly after shearing them, shears do not break. Chickens will give 64 eggs if you kill one. Cows and Pigs drop a stack of meat when killing them. Feeding pigs will give them a saddle."); + + Explorer_job.setJobName("Explorer"); + Explorer_job.setJobDescription("An explorer's job is to explore the whole world looking for new things and checking out places that are unusual."); + Explorer_job.setAction(0, "TASKS"); + Explorer_job.setExp(400, 80, 20, 1.01); + Explorer_job.addExtraData("You gain variable amounts of EXP and money for doing various tasks:"); + Explorer_job.addData("Walking Around: ", 0.005, 1, 0); + Explorer_job.addData("Looking around and being aware of your surroundings: ", 0.01, 2, 0); + Explorer_job.addData("Interacting with unusual blocks: ", 0.05, 25, 0); + Explorer_job.addData("Checking out villages, temples, caves, underground areas, the nether: ", 0.50, 50, 0); + Explorer_job.addData("Load a new region:", 0.00, 6, 0); + Explorer_job.addData("Creating maps and uncovering new areas on them (Underground rewards more!): ", 0.01, 8, 0); + Explorer_job.setBuffData("Movement speed increased by 20%.", + "Players lose no exp on death. When taking fatal damage, you will regain all health. This effect can be used once every hour.", + "Don't lose any money on death. Reviving costs 75% less.", + "When dying, you only lose 25% of your items. The rest stay in your inventory. Reviving costs 90% less. Teleporting to players costs 75% less. Movement speed increased by 40%. When dying, you will be placed back where you just died. This effect can be used once every hour."); + + Support_job.setJobName("Support"); + Support_job.setJobDescription("A support's job is to provide assistance and keep others alive by providing potions to heal, materials to allow others to craft things, and being useful overall."); + Support_job.setAction(0, "GIVE"); + Support_job.setAction(1, "CRAFT"); + Support_job.setAction(2, "SPLASH"); + Support_job.setAction(3, "Supporting Situations"); + Support_job.setExp(100, 100, 5, 1.03); + Support_job.addExtraData("Simply give players items to earn some money. Note that if they give it back you lose the xp you gained from it."); + Support_job.addData("TORCH", 0.005, 1, 0); + Support_job.addData("WOOD", 0.005, 1, 0); + Support_job.addData("COAL", 0.005, 1, 0); + Support_job.addData("IRON", 0.005, 1, 0); + Support_job.addData("POTIONS", 0.005, 1, 0); + Support_job.addData("FOOD", 0.005, 1, 0); + Support_job.addData("ARMOR", 0.005, 1, 0); + Support_job.addData("WEAPONS", 0.005, 1, 0); + Support_job.addData("FOOD", 0.015, 2, 1); + Support_job.addData("IRON SWORD", 0.015, 3, 1); + Support_job.addData("IRON ARMOR", 0.025, 5, 1); + Support_job.addData("DIAMOND SWORD", 0.075, 8, 1); + Support_job.addData("POTIONS, SPLASH POTIONS", 0.10, 5, 1); + Support_job.addData("DIAMOND ARMOR", 0.20, 20, 1); + Support_job.addData("NIGHT VISION", 0.10, 5, 2); + Support_job.addData("SPEED", 0.15, 6, 2); + Support_job.addData("STRENGTH", 0.40, 9, 2); + Support_job.addData("FIRE RESISTANCE", 0.50, 12, 2); + Support_job.addData("HEALING", 0.30, 14, 2); + Support_job.addData("-Light up dark areas.", 0.00, 1, 3); + Support_job.addData("-Help kill things with others.", 0.025, 3, 3); + Support_job.addData("-Clear out lava areas to allow for safe passage.", 0.05, 10, 3); + Support_job.addData("-Providing materials that someone ran out of.", 0.35, 30, 3); + Support_job.addData("-Healing someone when they are low in health.", 0.80, 40, 3); + Support_job.addData("-Dousing or using a fire resistance potion on someone burning.", 1.20, 60, 3); + Support_job.addData("-Teleport to others who need help.", 0.00, 100, 3); + Support_job.setBuffData("Everyone around you gains +2 Armor.", + "Everyone around you gains +10 more Maximum Health.", + "Everyone around you gains +4 Armor. Everyone's hunger degrades at half the speed. Players with 8 HP or less take half the damage from hits.", + "Everyone around you gains Regeneration. You gain +10 Armor. Everyone around you gains +20 more Maximum Health. You gain +50 more maximum health. Everyone around you including yourself moves 20% faster."); + } + + public void onDisable() + { + PluginDescriptionFile pdf = getDescription(); + System.out.println("[" + pdf.getName() + "] The plugin has been disabled succesfully."); + } + + + public void updateTopSPLEEFSigns() { + String name[] = {"","",""}; + int rating[] = {-9999,-9999,-9999}, wins[] = {0,0,0}, losses[] = {0,0,0}; + //Get list of all players on the server. + OfflinePlayer playerlist[] = Bukkit.getOfflinePlayers(); + for (int i=0;i=20) { + if (getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating")>rating[0]) { + //This beats the top record, move everything down. + name[2]=name[1];rating[2]=rating[1];wins[2]=wins[1];losses[2]=losses[1]; + name[1]=name[0];rating[1]=rating[0];wins[1]=wins[0];losses[1]=losses[0]; + name[0]=playerlist[i].getName(); + rating[0]=(int)getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating"); + wins[0]=getAccountsConfig().getInt(playerlist[i].getName()+".spleefwins"); + losses[0]=getAccountsConfig().getInt(playerlist[i].getName()+".spleeflosses"); + } else + if (getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating")>rating[1]) { + //This beats the 2nd record, move everything down. + name[2]=name[1];rating[2]=rating[1];wins[2]=wins[1];losses[2]=losses[1]; + name[1]=playerlist[i].getName(); + rating[1]=(int)getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating"); + wins[1]=getAccountsConfig().getInt(playerlist[i].getName()+".spleefwins"); + losses[1]=getAccountsConfig().getInt(playerlist[i].getName()+".spleeflosses"); + } else + if (getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating")>rating[2]) { + //This beats the 3rd record, move everything down. + name[2]=playerlist[i].getName(); + rating[2]=(int)getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating"); + wins[2]=getAccountsConfig().getInt(playerlist[i].getName()+".spleefwins"); + losses[2]=getAccountsConfig().getInt(playerlist[i].getName()+".spleeflosses"); + } + } + } + } + Sign sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,85,42).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+name[0]); + sign.update(); + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,84,43).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+"Wins: "+ChatColor.DARK_GREEN+wins[0]); + sign.update(); + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,84,41).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+"Losses: "+ChatColor.DARK_GREEN+losses[0]); + sign.update(); + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1612,84,42).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+"RATING: "+ChatColor.DARK_GREEN+rating[0]/10); + sign.update(); + + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,85,39).getState(); + sign.setLine(0, ChatColor.BOLD+name[1]); + sign.setLine(1, "Rating: "+rating[1]/10); + sign.setLine(2, ChatColor.ITALIC+"Wins: "+wins[1]); + sign.setLine(3, ChatColor.ITALIC+"Losses: "+losses[1]); + sign.update(); + + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,84,37).getState(); + sign.setLine(0, ChatColor.BOLD+name[2]); + sign.setLine(1, "Rating: "+rating[2]/10); + sign.setLine(2, ChatColor.ITALIC+"Wins: "+wins[2]); + sign.setLine(3, ChatColor.ITALIC+"Losses: "+losses[2]); + sign.update(); + } + +public void runTick() { + this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){ + public void run(){ + for (int i=0;i arrows = Bukkit.getWorld("world").getEntities(); + for (int j=0;j60) { + //Remove old arrows that have existed long enough. (2 seconds) + arrows.get(j).remove(); + } + } + } + if (shooter.timer<=0) { + ARROW_SHOOTERS.remove(i); + i--; + } + } + for (int i=0;ininjavisible_list.get(i).resettime) { + //Recloak this ninja if it's still alive. + List entities = Bukkit.getWorld("world").getEntities(); + for (int j=0;j0) { + if (BOSS_DEFEAT%4==0) { + Bukkit.getWorld("world").playEffect(BOSS_DEFEAT_LOC.add(Math.random()*5-Math.random()*5, BOSS_DEFEAT/20, Math.random()*5-Math.random()*5), Effect.SMOKE, 0); + } + if (BOSS_DEFEAT==1) { + Bukkit.getWorld("world").playEffect(BOSS_DEFEAT_LOC, Effect.ZOMBIE_DESTROY_DOOR, 0); + } + BOSS_DEFEAT--; + } + if (REVIVE_EFFECT>0) { + switch (REVIVE_EFFECT) { //starts at 90. + case 90: + case 88: + case 86: + case 84: + case 82: + case 80: { + Bukkit.getWorld("world").playEffect(new Location(REVIVE_EFFECT_LOC.getWorld(),REVIVE_EFFECT_LOC.getX(),REVIVE_EFFECT_LOC.getY()+(90-REVIVE_EFFECT)/2,REVIVE_EFFECT_LOC.getZ()), Effect.MOBSPAWNER_FLAMES, 0); + }break; + case 89: + case 85: + case 79: + case 75: + case 70: + case 65: + case 60: + case 55: + case 50: + case 45: + case 40: + case 35: + case 30: + case 25: + case 20: + case 15: + case 10: + case 5:{ + Bukkit.getWorld("world").playEffect(new Location(REVIVE_EFFECT_LOC.getWorld(),REVIVE_EFFECT_LOC.getX()+(Math.random()-Math.random())*2,REVIVE_EFFECT_LOC.getY(),REVIVE_EFFECT_LOC.getZ()+(Math.random()-Math.random())*2), Effect.EXTINGUISH, 0); + }break; + case 87: + case 83: + case 77: + case 72: + case 67: + case 62: + case 57: + case 52: + case 47: + case 42: + case 37: + case 32: + case 27: + case 22: + case 17: + case 12: + case 7: { + Bukkit.getWorld("world").playEffect(new Location(REVIVE_EFFECT_LOC.getWorld(),REVIVE_EFFECT_LOC.getX()+(Math.random()-Math.random())*2,REVIVE_EFFECT_LOC.getY()+(Math.random())*2,REVIVE_EFFECT_LOC.getZ()+(Math.random()-Math.random())*2), Effect.SMOKE, (int)(Math.random()*9)); + }break; + } + Bukkit.getWorld("world").playEffect(new Location(REVIVE_EFFECT_LOC.getWorld(),REVIVE_EFFECT_LOC.getX()+(Math.random()-Math.random())*2,REVIVE_EFFECT_LOC.getY()+(Math.random())*2,REVIVE_EFFECT_LOC.getZ()+(Math.random()-Math.random())*2), Effect.STEP_SOUND, Material.BEACON); + REVIVE_EFFECT--; + //Bukkit.getPlayer("sigonasr2").sendMessage(REVIVE_EFFECT+""); + } + for (int zx=0;zx2) { + Bukkit.getPlayer("sigonasr2").sendMessage("Previous Time: "+Bukkit.getWorld("world").getTime()); + Bukkit.getWorld("world").setTime((long) (Bukkit.getWorld("world").getTime()-((Bukkit.getWorld("world").getTime()-last_world_time)/2.0d))); + last_world_time = Bukkit.getWorld("world").getTime(); + Bukkit.getPlayer("sigonasr2").sendMessage("New Time: "+Bukkit.getWorld("world").getTime()); + } + }*/ + //last_world_time = Bukkit.getWorld("world").getFullTime(); + if (p.getWorld().getName().compareTo("world")==0) { + //Bukkit.getWorld("world").spawnEntity(p.getLocation(), EntityType.EXPERIENCE_ORB); + //Bukkit.getWorld("world").dropItemNaturally(p.getLocation(), new ItemStack(Material.DIRT)); + if (getConfig().getBoolean("halloween-enabled") && Bukkit.getWorld("world").getFullTime()%10==0) { + //1551,69,275 + Location testloc = new Location(p.getWorld(),1551,69,-275); + if (p.getLocation().distanceSquared(testloc)<900) { + //p.sendMessage("In range."); + //We are close enough to the sheep pen. Check out the sheep. + List ents = p.getNearbyEntities(15, 15, 15); + for (int i=0;i nearbylist = p.getNearbyEntities(15, 15, 5); + List nearbylist2 = p.getNearbyEntities(3, 3, 5); + for (int l=0;l10) { + for (int l=0;l nearby = p.getNearbyEntities(30, 30, 30); + boolean exists=false; + for (int m=0;m e_list = Bukkit.getWorld("world").getEntitiesByClass(EnderDragon.class).iterator(); + boolean first=false; + while (e_list.hasNext()) { + //p.sendMessage("Moving Enderdragon to "+new Location(p.getWorld(),p.getLocation().getBlockX()+i,-50,p.getLocation().getBlockZ()+j)); + EnderDragon next = e_list.next(); + if (!first) { + first=true; + } else { + next.remove(); + } + } + } + } + } + } + } + } + if (Bukkit.getWorld("world").getFullTime()%20==0) { + List nearby = p.getNearbyEntities(20, 12, 20); + //List nearby2 = p.getNearbyEntities(10, 6, 10); + for (int i=0;i=96) { + heightmodifier=126; + } else { + heightmodifier=63; + } + if (nearby.get(i).getType()==EntityType.CREEPER) { + LivingEntity l = (LivingEntity)nearby.get(i); + if (l.getCustomName()==null && l.getTicksLived()<6400 && !l.hasPotionEffect(PotionEffectType.INVISIBILITY)) { + if (l.getLocation().getY()<=40 && Math.random()<=0.08+((heightmodifier-l.getLocation().getY())*0.01d)) { + if (Math.random()<=0.35) { + l.setCustomName(ChatColor.YELLOW+"Explosive Creeper"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*1.25d); + } else + if (Math.random()<=0.15) { + l.setCustomName(ChatColor.GOLD+"Explosive Creeper II"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*1.75d); + } else + if (Math.random()<=0.35) { + l.setCustomName(ChatColor.YELLOW+"Destructive Creeper"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*1.25d); + } else { + l.setCustomName(ChatColor.GOLD+"Destructive Creeper II"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*1.75d); + } + l.setHealth(l.getMaxHealth()); + } + l.setTicksLived(6400); + } + } else + if (nearby.get(i).getType()==EntityType.SPIDER) { + LivingEntity l = (LivingEntity)nearby.get(i); + if (l.getCustomName()==null && l.getTicksLived()<6400 && !l.hasPotionEffect(PotionEffectType.INVISIBILITY)) { + if (Math.random()<=0.08+((heightmodifier-l.getLocation().getY())*0.01d)) { + if (Math.random()<=0.35) { + l.setCustomName(ChatColor.YELLOW+"Venomous Spider"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()); + } else + if (Math.random()<=0.15) { + l.setCustomName(ChatColor.GOLD+"Venomous Spider II"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*2); + } else + if (Math.random()<=0.35) { + l.setCustomName(ChatColor.YELLOW+"Snaring Spider"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*2); + } else { + l.setCustomName(ChatColor.GOLD+"Snaring Spider II"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()*4); + } + l.setHealth(l.getMaxHealth()); + } + l.setTicksLived(6400); + } + } else + if (nearby.get(i).getType()==EntityType.SKELETON) { + LivingEntity l = (LivingEntity)nearby.get(i); + if (l.getCustomName()==null && l.getTicksLived()<6400 && !l.hasPotionEffect(PotionEffectType.INVISIBILITY)) { + if (Math.random()<=0.10+((heightmodifier-l.getLocation().getY())*0.01d)) { + if (Math.random()<=0.85) { + l.setCustomName(ChatColor.YELLOW+"Sniper"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()/2); + } else { + l.setCustomName(ChatColor.GOLD+"Sniper II"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()/4); + } + l.setHealth(l.getMaxHealth()); + } + l.setTicksLived(6400); + } + } else + if (nearby.get(i).getType()==EntityType.ZOMBIE) { + LivingEntity l = (LivingEntity)nearby.get(i); + if (l.getCustomName()==null && l.getTicksLived()<6400 && !l.hasPotionEffect(PotionEffectType.INVISIBILITY)) { + if (l.getLocation().getY()<=35 && Math.random()<=0.15) { + if (Math.random()<=0.85) { + l.setCustomName(ChatColor.YELLOW+"Charge Zombie"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()+20); + } else { + l.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + l.setCustomNameVisible(false); + //l.setCustomNameVisible(true); + l.setMaxHealth(l.getMaxHealth()+60); + } + l.setHealth(l.getMaxHealth()); + } else { + if (Math.random()<=0.10+((heightmodifier-l.getLocation().getY())*0.01d)) { + if (Math.random()<=0.25) { + l.setCustomName(ChatColor.GRAY+"Zombie Ninja"); + l.setCustomNameVisible(false); + l.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 999999, 0, true)); + l.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 999999, 2, true)); + //l.setCustomNameVisible(true); + //A Zombie Ninja will not wear armor to stay hidden. But may carry a sword. + l.getEquipment().setChestplate(new ItemStack(Material.AIR)); + l.getEquipment().setBoots(new ItemStack(Material.AIR)); + l.getEquipment().setLeggings(new ItemStack(Material.AIR)); + l.getEquipment().setHelmet(new ItemStack(Material.AIR)); + Zombie g = (Zombie)l; + g.setBaby(true); + l.setMaxHealth(l.getMaxHealth()+20); + } + } + } + l.setTicksLived(6400); + } else { + if (l.getCustomName()!=null && (l.getCustomName().compareTo(ChatColor.YELLOW+"Charge Zombie")==0 || l.getCustomName().compareTo(ChatColor.GOLD+"Charge Zombie II")==0 || l.getCustomName().compareTo(ChatColor.DARK_PURPLE+"Charge Zombie III")==0)) { + //Destroy blocks around it. + + boolean doit=true; + if (l.getKiller()!=null && l.getKiller().getLocation().getY()>l.getLocation().getY()) { + doit=false; + } + if (l.hasPotionEffect(PotionEffectType.INVISIBILITY)) { + l.removePotionEffect(PotionEffectType.INVISIBILITY); + } + if (doit) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Charge Zombie!"); + if (l.getCustomName().compareTo(ChatColor.DARK_PURPLE+"Charge Zombie III")==0) { + /*//OLD CHARGE ZOMBIE BEHAVIOR. Charge Zombie II now does this weak block destruction. + for (int k=-1;k<2;k++) { + for (int j=-1;j<2;j++) { + Location checkloc = l.getLocation().add(k,1,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,2,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,0,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + } + }*/ + for (int k=-1;k<2;k++) { + for (int j=-1;j<2;j++) { + Location checkloc = l.getLocation().add(k,1,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,2,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,0,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,-1,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + } + } + } else { + /* + for (int k=-1;k<2;k++) { + for (int j=-1;j<2;j++) { + Location checkloc = l.getLocation().add(k,1,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,2,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,0,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + } + }*/ //Charge Zombie II's now only break blocks when YOU get hit by them. + /*//OLD CHARGE ZOMBIE II BEHAVIOR. + for (int k=-2;k<3;k++) { + for (int j=-2;j<3;j++) { + Location checkloc = l.getLocation().add(k,1,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,2,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = l.getLocation().add(k,0,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL) { + bl.breakNaturally(); + } + } + }*/ + } + } + } + } + } + } + } + } + if (p.getWorld().getName().compareTo("world_nether")==0) { + if (Bukkit.getWorld("world").getFullTime()%60==0) { + for (int i=-15;i<=15;i++) { + for (int j=-15;j<=15;j++) { + for (int k=-5;k<=5;k++) { + if (Bukkit.getWorld("world_nether").getBlockAt(p.getLocation().getBlockX()+i,p.getLocation().getBlockY()+k,p.getLocation().getBlockZ()+j).getType()==Material.MOB_SPAWNER) { + if (Math.random()<=0.5) { + CreatureSpawner spawner = (CreatureSpawner)Bukkit.getWorld("world_nether").getBlockAt(p.getLocation().getBlockX()+i,p.getLocation().getBlockY()+k,p.getLocation().getBlockZ()+j).getState(); + Location testloc = new Location(Bukkit.getWorld("world_nether"),spawner.getLocation().getX()+Math.random()*5,spawner.getLocation().getY()+Math.random()*3,spawner.getLocation().getZ()+Math.random()*5); + if (Bukkit.getWorld("world_nether").getBlockAt(testloc).getType()==Material.AIR && Bukkit.getWorld("world_nether").getBlockAt(testloc.add(0,1,0)).getType()==Material.AIR) { + Bukkit.getWorld("world_nether").spawnCreature(testloc,spawner.getCreatureType()); + } + Bukkit.getWorld("world_nether").spawnCreature(spawner.getLocation(),spawner.getCreatureType()); + } + + } + } + } + } + List nearby = p.getNearbyEntities(30, 30, 30); + try { + for (int i=0;i13000) { + //Bukkit.getPlayer("sigonasr2").sendMessage("It's night now..."); + turnedon=true; + for (int x=1562;x<1645;x++) { + for (int y=64;y<80;y++) { + for (int z=-357;z<-211;z++) { + Block theblock=Bukkit.getWorld("world").getBlockAt(x,y,z); + if (theblock.getType()==Material.REDSTONE_LAMP_OFF) { + theblock.setType(Material.REDSTONE_LAMP_ON); + } + } + } + } + } + if (turnedon==true && Bukkit.getWorld("world").getTime()<13000) { + turnedon=false; + //Bukkit.getPlayer("sigonasr2").sendMessage("It's day now..."); + for (int x=1562;x<1645;x++) { + for (int y=64;y<80;y++) { + for (int z=-357;z<-211;z++) { + Block theblock=Bukkit.getWorld("world").getBlockAt(x,y,z); + if (theblock.getType()==Material.REDSTONE_LAMP_ON) { + theblock.setType(Material.REDSTONE_LAMP_OFF); + } + } + } + } + } + } + if (Bukkit.getWorld("world").getFullTime()%10==0) { + if (getConfig().getBoolean("spleef4insession")) { + //Check to see if we fall off. + if ((p.getLocation().getX()<1585 || p.getLocation().getX()>1600 || p.getLocation().getZ()<24 || p.getLocation().getZ()>39 || p.getLocation().getY()<86.5d) && ( + (p.getName().compareTo(getConfig().getString("spleefrequesta4player"))==0 || p.getName().compareTo(getConfig().getString("spleefrequestb4player"))==0 + || p.getName().compareTo(getConfig().getString("spleefrequestc4player"))==0 || p.getName().compareTo(getConfig().getString("spleefrequestd4player"))==0))) { + //You lose. + //See if we're the winner. + int countdead=0; //We're looking for 3. + + + Player winningplayer = p,losingplayer = p; + if (getConfig().getString("spleefrequesta4player").compareTo("none")==0) { + countdead++; + } else { + if (getConfig().getString("spleefrequesta4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(getConfig().getString("spleefrequesta4player")); + } else { + winningplayer=Bukkit.getPlayer(getConfig().getString("spleefrequesta4player")); + } + } + if (getConfig().getString("spleefrequestb4player").compareTo("none")==0) { + countdead++; + } else { + if (getConfig().getString("spleefrequestb4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestb4player")); + } else { + winningplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestb4player")); + } + } + if (getConfig().getString("spleefrequestc4player").compareTo("none")==0) { + countdead++; + } else { + if (getConfig().getString("spleefrequestc4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestc4player")); + } else { + winningplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestc4player")); + } + } + if (getConfig().getString("spleefrequestd4player").compareTo("none")==0) { + countdead++; + } else { + if (getConfig().getString("spleefrequestd4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestd4player")); + } else { + winningplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestd4player")); + } + } + if (countdead==2) { + getConfig().set("spleef4insession", Boolean.valueOf(false)); + + + + + + //Stand someplace else when you win. + + + //Losing player has losing player stuff happen. + //This was a player that lost. + //Move them out, give them back their stuff. + Location newloc = p.getLocation(); + //Look for the special shovel for the sake of storing it. + /* + ItemStack[] shovelstack = p.getInventory().getContents(); + boolean shovelfound=false; + ItemStack shovel = shovelstack[0]; + for (int i=0;i=400) { + //WE have come to a standstill. Pick winner based on who has more blocks. + int player_a_blocks=0,player_b_blocks=0; + for (int i=Bukkit.getPlayer(getConfig().getString("spleefrequestaplayer")).getLocation().getBlockX()-4;iplayer_b_blocks) { + blockwinner=1; + } else { + blockwinner=2; + } + } else + if ((p.getLocation().getY()<86.5d || p.getLocation().getZ()<52.0d || p.getLocation().getZ()>65.0d || p.getLocation().getX()>1628.0d || p.getLocation().getX()<1615.0d) || blockwinner!=0) { + //We lose. Other player wins. + getConfig().set("spleefinsession", Boolean.valueOf(false)); + //Find out if we're player A, or player B. + Player winningplayer,losingplayer; + if (p.getName().compareTo(getConfig().getString("spleefrequestaplayer"))==0 || blockwinner==2) { + //We're player A. + //Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+getConfig().getString("spleefrequestbplayer")+" is the winner of this spleef game! "+getConfig().getString("spleefrequestaplayer")+" loses."); + losingplayer=p; + winningplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestbplayer")); + + double val1,val2,value,newval1,newval2; + if (getAccountsConfig().contains(winningplayer.getName()+".spleefrating")) { + val1 = getAccountsConfig().getDouble(winningplayer.getName()+".spleefrating"); + } else { + val1 = 1000.0d; + } + if (getAccountsConfig().contains(losingplayer.getName()+".spleefrating")) { + val2 = getAccountsConfig().getDouble(losingplayer.getName()+".spleefrating"); + } else { + val2 = 1000.0d; + } + value = 1.0d/(1.0d+Math.pow(10.0d, ((val2-val1)/400.0d))); + if (getAccountsConfig().contains(winningplayer.getName()+".spleefwins")) { + getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(getAccountsConfig().getInt(winningplayer.getName()+".spleefwins")+1)); + } else { + getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(1)); + } + if (getAccountsConfig().contains(winningplayer.getName()+".spleeflosses")) { + getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(getAccountsConfig().getInt(winningplayer.getName()+".spleeflosses"))); + } else { + getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(0)); + } + if (getAccountsConfig().contains(losingplayer.getName()+".spleefwins")) { + getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(getAccountsConfig().getInt(losingplayer.getName()+".spleefwins"))); + } else { + getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(0)); + } + if (getAccountsConfig().contains(losingplayer.getName()+".spleeflosses")) { + getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(getAccountsConfig().getInt(losingplayer.getName()+".spleeflosses")+1)); + } else { + getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(1)); + } + newval1 = (val1+Math.round(((50.0d/((getAccountsConfig().getDouble(winningplayer.getName()+".spleefwins")+getAccountsConfig().getDouble(winningplayer.getName()+".spleeflosses"))/20.0d))*(1.0d-value)))); + newval2 = (val2+Math.round(((50.0d/((getAccountsConfig().getDouble(losingplayer.getName()+".spleefwins")+getAccountsConfig().getDouble(losingplayer.getName()+".spleeflosses"))/20.0d))*(0.0d-value)))); + getAccountsConfig().set(winningplayer.getName()+".spleefrating",Double.valueOf(newval1)); + getAccountsConfig().set(losingplayer.getName()+".spleefrating",Double.valueOf(newval2)); + Location newloc = winningplayer.getLocation(); + + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+getConfig().getString("spleefrequestbplayer")+"["+(int)newval1/10+"] is the winner of this spleef game! "+getConfig().getString("spleefrequestaplayer")+"["+(int)newval2/10+"] loses."); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + winningplayer.teleport(newloc); + updateTopSPLEEFSigns(); + saveAccountsConfig(); + } else { + //We're player B. + //Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+getConfig().getString("spleefrequestaplayer")+" is the winner of this spleef game! "+getConfig().getString("spleefrequestbplayer")+" loses."); + losingplayer=p; + winningplayer=Bukkit.getPlayer(getConfig().getString("spleefrequestaplayer")); + double val1,val2,value,newval1,newval2; + if (getAccountsConfig().contains(winningplayer.getName()+".spleefrating")) { + val1 = getAccountsConfig().getDouble(winningplayer.getName()+".spleefrating"); + } else { + val1 = 1000.0d; + } + if (getAccountsConfig().contains(losingplayer.getName()+".spleefrating")) { + val2 = getAccountsConfig().getDouble(losingplayer.getName()+".spleefrating"); + } else { + val2 = 1000.0d; + } + value = 1.0d/(1.0d+Math.pow(10.0d, ((val2-val1)/400.0d))); + if (getAccountsConfig().contains(winningplayer.getName()+".spleefwins")) { + getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(getAccountsConfig().getInt(winningplayer.getName()+".spleefwins")+1)); + } else { + getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(1)); + } + if (getAccountsConfig().contains(winningplayer.getName()+".spleeflosses")) { + getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(getAccountsConfig().getInt(winningplayer.getName()+".spleeflosses"))); + } else { + getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(0)); + } + if (getAccountsConfig().contains(losingplayer.getName()+".spleefwins")) { + getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(getAccountsConfig().getInt(losingplayer.getName()+".spleefwins"))); + } else { + getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(0)); + } + if (getAccountsConfig().contains(losingplayer.getName()+".spleeflosses")) { + getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(getAccountsConfig().getInt(losingplayer.getName()+".spleeflosses")+1)); + } else { + getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(1)); + } + newval1 = ((val1+Math.round((50.0d/((getAccountsConfig().getDouble(winningplayer.getName()+".spleefwins")+getAccountsConfig().getDouble(winningplayer.getName()+".spleeflosses"))/20.0d))*(1.0d-value)))); + newval2 = ((val2+Math.round((50.0d/((getAccountsConfig().getDouble(losingplayer.getName()+".spleefwins")+getAccountsConfig().getDouble(losingplayer.getName()+".spleeflosses"))/20.0d))*(0.0d-value)))); + getAccountsConfig().set(winningplayer.getName()+".spleefrating",Double.valueOf(newval1)); + getAccountsConfig().set(losingplayer.getName()+".spleefrating",Double.valueOf(newval2)); + Location newloc = winningplayer.getLocation(); + + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+getConfig().getString("spleefrequestaplayer")+"["+(int)newval1/10+"] is the winner of this spleef game! "+getConfig().getString("spleefrequestbplayer")+"["+(int)newval2/10+"] loses."); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + winningplayer.teleport(newloc); + updateTopSPLEEFSigns(); + saveAccountsConfig(); + } + //Look for the special shovel. + /* + ItemStack[] shovelstack = Bukkit.getPlayer(getConfig().getString("spleefrequestaplayer")).getInventory().getContents(); + boolean shovelfound=false; + ItemStack shovel = shovelstack[0]; + Bukkit.getPlayer("sigonasr2").sendMessage("Starting shovel check."); + for (int i=0;i78.0d && p.getLocation().getZ()>53.0d && p.getLocation().getZ()<64.0d && p.getLocation().getX()<1627.0d && p.getLocation().getX()>1616.0d) { + Location newloc = p.getLocation(); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + p.teleport(newloc); + p.sendMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+"You are a spectator! What are you thinking?!"); + } + } + } + } + } + } + }, 1l, 1l); +} + +public String healthbar(double curHP,double maxHP) { + //█ ▌ + int bits=(int)(Math.ceil(curHP/maxHP*10)); + String bar=" "; + if (bits>6) { + bar+=ChatColor.GREEN+""; + } else + if (bits>3) { + bar+=ChatColor.YELLOW+""; + } else + { + bar+=ChatColor.RED+""; + } + for (int i=0;i=10) { + PersistentExplorerList eve = new PersistentExplorerList(p.getName()); + eve.event=1; + eve.data=p.getExp(); + eve.data2=p.getLevel(); + eve.expiretime=Bukkit.getWorld("world").getFullTime()+1200; + explorers.add(eve); + } + } + if (explorers.get(i).event==1 && explorers.get(i).name.compareTo(p.getName())==0) { + exppoint=i; + //p.setTotalExperience(p.getTotalExperience()+explorers.get(j).data); + //p.sendMessage("Your experience: "+explorers.get(i).data+"/"+p.getTotalExperience()); + } else + if (explorers.get(i).event==2 && explorers.get(i).name.compareTo(p.getName())==0) { + deadpoint=i; + } + if (exppoint!=-1 && deadpoint!=-1) { + p.setExp(explorers.get(exppoint).data); + p.setLevel((int)explorers.get(exppoint).data2); + explorers.get(exppoint).event=-1; + explorers.get(deadpoint).event=-1; + exppoint=-1; + deadpoint=-1; + } + */ + if (explorers.get(i).event==-1 || explorers.get(i).expiretime=5) { + List entities = list[i].getNearbyEntities(10, 10, 10); + for (int j=0;j7 && (unmatched/9610.0d*100)<8.35 && (last_boss_dungeon_time==0 || last_boss_dungeon_time nearby = list[i].getNearbyEntities(20, 5, 20); + for (int j=0;j-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(20+j,k,spread+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch1=true; + } + } + } + } + if (!torch1) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(20+j,k,spread+l)); + if (Math.random()<=0.75 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e1 = Bukkit.getWorld("world").spawnEntity(list[i].getLocation().add(20,0,spread), EntityType.ZOMBIE); + } + torch2=false; + spread = (int)(Math.random()*10)+10; + for (int j=5;j>-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(-20+j,k,spread+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch2=true; + } + } + } + } + if (!torch2) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(-20+j,k,spread+l)); + if (Math.random()<=0.75 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e2 = Bukkit.getWorld("world").spawnEntity(list[i].getLocation().add(-20,0,spread), EntityType.ZOMBIE); + } + spread = (int)(Math.random()*10)+10; + for (int j=5;j>-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(spread+j,k,20+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch3=true; + } + } + } + } + if (!torch3) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(spread+j,k,20+l)); + if (Math.random()<=0.75 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e3 = Bukkit.getWorld("world").spawnEntity(list[i].getLocation().add(spread,0,20), EntityType.ZOMBIE); + } + spread = (int)(Math.random()*10)+10; + for (int j=5;j>-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(spread+j,k,-20+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch4=true; + } + } + } + } + if (!torch4) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(spread+j,k,-20+l)); + if (Math.random()<=0.75 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e4 = Bukkit.getWorld("world").spawnEntity(list[i].getLocation().add(spread,0,-20), EntityType.ZOMBIE); + } + } + /* + torch1=false; + torch2=false; + torch3=false; + torch4=false; + spread = (int)(Math.random()*20)+20; + int randomheight=(int)(Math.random()*5)-(int)(Math.random()*5); + for (int j=10;j>-11;j--) { + for (int k=4;k>-2;k--) { + for (int l=10;l>-11;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(30+j,k+randomheight,spread+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE) { + torch1=true; + } + } + } + } + if (!torch1) { + int lb1=(int)(Math.random()*5)+10,lb2=(int)(Math.random()*5)+10,ub1=-(int)(Math.random()*6)+10,ub2=-(int)(Math.random()*6)+10; + for (int j=lb1;j>ub1;j--) { + for (int k=(int)(Math.random()*4)+1;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(20+j,k+randomheight,spread+l)); + if (Math.random()<=0.75-k*0.10 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + } + torch2=false; + spread = (int)(Math.random()*20)+20; + randomheight=(int)(Math.random()*5)-(int)(Math.random()*5); + for (int j=10;j>-11;j--) { + for (int k=4;k>-2;k--) { + for (int l=10;l>-11;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(-20+j,k+randomheight,spread+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE) { + torch2=true; + } + } + } + } + if (!torch2) { + int lb1=(int)(Math.random()*5)+10,lb2=(int)(Math.random()*5)+10,ub1=-(int)(Math.random()*6)+10,ub2=-(int)(Math.random()*6)+10; + for (int j=lb1;j>ub1;j--) { + for (int k=(int)(Math.random()*4)+1;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(20+j,k+randomheight,spread+l)); + if (Math.random()<=0.75-k*0.10 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + } + spread = (int)(Math.random()*20)+20; + for (int j=10;j>-11;j--) { + for (int k=4;k>-2;k--) { + for (int l=10;l>-11;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(spread+j,k+randomheight,20+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE) { + torch3=true; + } + } + } + } + if (!torch3) { + int lb1=(int)(Math.random()*5)+10,lb2=(int)(Math.random()*5)+10,ub1=-(int)(Math.random()*6)+10,ub2=-(int)(Math.random()*6)+10; + for (int j=lb1;j>ub1;j--) { + for (int k=(int)(Math.random()*4)+1;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(20+j,k+randomheight,spread+l)); + if (Math.random()<=0.75-k*0.10 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + } + spread = (int)(Math.random()*20)+20; + for (int j=10;j>-11;j--) { + for (int k=4;k>-2;k--) { + for (int l=10;l>-11;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(spread+j,k+randomheight,-20+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE) { + torch4=true; + } + } + } + } + if (!torch4) { + int lb1=(int)(Math.random()*5)+10,lb2=(int)(Math.random()*5)+10,ub1=-(int)(Math.random()*6)+10,ub2=-(int)(Math.random()*6)+10; + for (int j=lb1;j>ub1;j--) { + for (int k=(int)(Math.random()*4)+1;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(list[i].getLocation().add(20+j,k+randomheight,spread+l)); + if (Math.random()<=0.75-k*0.10 && b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + } + if (!torch1) { + Zombie z1 = (Zombie)e1; + z1.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z1.setCustomNameVisible(false); + z1.setTarget(list[i]); + } + if (!torch2) { + Zombie z2 = (Zombie)e2; + z2.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z2.setCustomNameVisible(false); + z2.setTarget(list[i]); + } + if (!torch3) { + Zombie z3 = (Zombie)e3; + z3.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z3.setCustomNameVisible(false); + z3.setTarget(list[i]); + } + if (!torch4) { + Zombie z4 = (Zombie)e4; + z4.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z4.setCustomNameVisible(false); + z4.setTarget(list[i]); + }*/ + } + if (list[i].getWorld().getName().compareTo("world_the_end")==0) { + List ents = Bukkit.getWorld("world_the_end").getEntities(); + int enderdragoncount=0; + for (int j=0;j ents = Bukkit.getWorld("world").getEntities(); + int enderdragoncount=0; + for (int j=0;j loredata = items[j].getItemMeta().getLore(); + for (int m=0;m loredata = items[j].getItemMeta().getLore(); + for (int m=0;m=10) { + if (p.isSneaking()) { + p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 12, 0, false)); + } + } + } + } + } + LOGGING_UPDATE_COUNTS++; //6 + for (int i=0;i nearbyplayers = p.getNearbyEntities(20, 20, 20); + //Bukkit.getPlayer("sigonasr2").sendMessage("Entered 1."); + for (int j=0;j=20) { + if (!p2.hasPotionEffect(PotionEffectType.DAMAGE_RESISTANCE)) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Entered 4."); + p2.sendMessage(ChatColor.YELLOW+"[Aura]"+ChatColor.ITALIC+"Damage reduction buff (40%) from Support "+ChatColor.DARK_RED+p.getName()); + p2.sendMessage(ChatColor.YELLOW+"[Aura]"+ChatColor.ITALIC+"Food Exhaustion buff (50% less food consumption) from Support "+ChatColor.DARK_RED+p.getName()); + p2.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 601, 1, false)); + } else { + p2.removePotionEffect(PotionEffectType.DAMAGE_RESISTANCE); + p2.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 601, 1, false)); + } + } else + if (supportlv>=5) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Entered 3."); + //Give them a resistance buff. + if (!p2.hasPotionEffect(PotionEffectType.DAMAGE_RESISTANCE)) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Entered 4."); + p2.sendMessage(ChatColor.YELLOW+"[Aura]"+ChatColor.ITALIC+"Damage reduction buff (20%) from Support "+ChatColor.DARK_RED+p.getName()); + p2.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 601, 0, false)); + } else { + p2.removePotionEffect(PotionEffectType.DAMAGE_RESISTANCE); + p2.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 601, 0, false)); + } + } + if (supportlv>=10) { + //Set that they have a lv10 hp buff. + for (int k=0;k=10) { + //We store the exp and level too. + if (explorerlist.get(i).wedied) { + p.setExp(explorerlist.get(i).expamt); + p.setLevel(explorerlist.get(i).explv); + explorerlist.get(i).wedied=false; + } else { + explorerlist.get(i).expamt=p.getExp(); + explorerlist.get(i).explv=p.getLevel(); + } + } + //Give money for moving around. + double distance = Math.abs(explorerlist.get(i).xprevious-p.getLocation().getX())+Math.abs(explorerlist.get(i).zprevious-p.getLocation().getZ()); + gainMoneyExp(p,"Explorer",0.005*distance/500.0d,distance/500.0d); + //Bukkit.getPlayer("sigonasr2").sendMessage("+"+distance/500.0d+"xp"); + Block lookat = p.getTargetBlock(null, 50); + + if (distance>2) { + //VILLAGE CRITERIA. + if (lookat.getType()==Material.SAND) { + explorerlist.get(i).villagecriteria--; + } + if (lookat.getType()==Material.SANDSTONE) { + explorerlist.get(i).villagecriteria-=2; + } + if (lookat.getType()==Material.WOOL && lookat.getData()==15) { + explorerlist.get(i).villagecriteria-=3; + } + if (lookat.getType()==Material.DIRT) { + explorerlist.get(i).villagecriteria=100; + } + if (lookat.getType()==Material.LOG || lookat.getType()==Material.WOOD) { + explorerlist.get(i).villagecriteria=100; + } + if (explorerlist.get(i).villagecriteria<40 && GLOBAL_villagetimer lister = p.getNearbyEntities(10, 10, 10); + for (int j=0;j50) { + explorerlist.get(i).cavecriteria=100; + } + if (lookat.getType()==Material.LOG || lookat.getType()==Material.SAND) { + explorerlist.get(i).cavecriteria=100; + } + if (explorerlist.get(i).cavecriteria<=0 && GLOBAL_cavetimer10 && lookat.getLightLevel()<6) { + explorerlist.get(i).undergroundcriteria-=20; + } + if (explorerlist.get(i).undergroundcriteria<=0 && GLOBAL_undergroundtimer50) { + explorerlist.get(i).undergroundcriteria=100; + } + if (lookat.getType()==Material.LOG || lookat.getType()==Material.SAND) { + explorerlist.get(i).undergroundcriteria=100; + } + + //NETHER CRITERIA + if (lookat.getType()==Material.NETHERRACK) { + explorerlist.get(i).nethercriteria-=1; + } + if (lookat.getType()==Material.LAVA) { + explorerlist.get(i).nethercriteria-=5; + } + if (explorerlist.get(i).nethercriteria<=0 && GLOBAL_nethertimercurrentsize) { + //Award this explorer experience for growing the map. + if (p.getLocation().getY()<=60) { + gainMoneyExp(p,"Explorer",0.01,8); + } else { + gainMoneyExp(p,"Explorer",0.001,2); + } + } + } + } + + if (lookat.getType()!=Material.AIR && lookat.getType()!=explorerlist.get(i).lasttype) { + distance = Math.abs(explorerlist.get(i).xlookprevious-lookat.getLocation().getX())+Math.abs(explorerlist.get(i).zlookprevious-lookat.getLocation().getZ()); + int mult=1; + for (int j=0;jjukeboxlist.get(i).getSongDuration()*20+60) { + //Check to see if players are closer to one or the other. + boolean closest=true; + for (int j=0;jjukeboxlist.get(j).getClosestPlayer()) { + closest=false; + } + } + } + if (closest) { + //We have to loop it. + if (!jukeboxlist.get(i).Restart()) { + jukeboxlist.remove(i); + i--; + } else { + //Bukkit.getPlayer("sigonasr2").sendMessage("Restarted Jukebox "+i+" Properties: "+((Jukebox)(jukeboxlist.get(i).getJukebox().getState())).getPlaying()+","+((Jukebox)(jukeboxlist.get(i).getJukebox().getState())).isPlaying()); + } + } + } + } + } else { + jukeboxlist.remove(i); + i--; + } + //Bukkit.getPlayer("sigonasr2").sendMessage("Jukebox "+i+" Properties: "+((Jukebox)(jukeboxlist.get(i).getJukebox().getState())).getPlaying()+","+((Jukebox)(jukeboxlist.get(i).getJukebox().getState())).isPlaying()); + } + LOGGING_UPDATE_COUNTS++; //11 + + LOGGING_UPDATE_COUNTS++; //12 + } + } + , 200, 200); +} + +@SuppressWarnings("deprecation") +public void updateTime() { + getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() + { + public void run() { + for (int i=0;i0 && !brewingstandlist.get(i).is_newTimeSet()) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Brewing, time is not set: "+brewingstandlist.get(i).getBrewingTime()); + if (PlayerinJob(brewingstandlist.get(i).owner, "Brewer") && getJobLv("Brewer", brewingstandlist.get(i).owner)>=5) { + brewingstandlist.get(i).set_newTime(true); + //Bukkit.getPlayer("sigonasr2").sendMessage("Old Brewing time: "+brewingstandlist.get(i).getBrewingTime()); + brewingstandlist.get(i).setBrewingTime(brewingstandlist.get(i).getBrewingTime()/2); + //Bukkit.getPlayer("sigonasr2").sendMessage("New Brewing time: "+brewingstandlist.get(i).getBrewingTime()); + } + } + if (brewingstandlist.get(i).getTime()=2) { + last_world_time+=2; + raisecount++; + } + Bukkit.getWorld("world").setFullTime(Bukkit.getWorld("world").getFullTime()-raisecount); + /* + if (Bukkit.getWorld("world").getFullTime()-last_world_time+hold_diff>=2) { + last_world_time = Bukkit.getWorld("world").getFullTime()+((Bukkit.getWorld("world").getFullTime()-last_world_time+(hold_diff/2))/2); + accumulator -= (Bukkit.getWorld("world").getFullTime()-last_world_time+(hold_diff/2))/2; + Bukkit.getWorld("world").setFullTime(last_world_time); + hold_diff=0; + } else { + hold_diff += Bukkit.getWorld("world").getFullTime() - last_world_time; + accumulator += Bukkit.getWorld("world").getFullTime() - last_world_time; + Bukkit.getWorld("world").setFullTime(last_world_time); + } + */ + } + } + } + , 10, 10); +} + + @SuppressWarnings("deprecation") +public void payDay(int time) + { + getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() + { + public void run() + { + for (Player allOnlineP : Bukkit.getOnlinePlayers()) { + allOnlineP.sendMessage("§2<=========[§dInterest§2]=========>"); + DecimalFormat df = new DecimalFormat("#0.00"); + allOnlineP.sendMessage("§6The money interest has been delivered to all players. ("+df.format((double)(Main.this.getConfig().getDouble("payday.amount")*100))+"% interest rate)"); + allOnlineP.sendMessage("§6Your Balance: $"+df.format((getAccountsConfig().getDouble(allOnlineP.getName() + ".money")))+" -> $"+df.format(((Main.this.getConfig().getDouble("payday.amount")*(getAccountsConfig().getDouble(allOnlineP.getName() + ".money"))+getAccountsConfig().getDouble(allOnlineP.getName() + ".money"))))); + allOnlineP.sendMessage("§2<==========================>"); + getAccountsConfig().set(allOnlineP.getName() + ".money", ((Main.this.getConfig().getDouble("payday.amount")*(getAccountsConfig().getDouble(allOnlineP.getName() + ".money"))+getAccountsConfig().getDouble(allOnlineP.getName() + ".money")))); + //Main.economy.depositPlayer(allOnlineP.getName(), (Main.this.getConfig().getDouble("payday.amount")*Main.economy.bankBalance(allOnlineP.getName()).balance)); + } + for (OfflinePlayer allOnlineP : Bukkit.getOfflinePlayers()) { + if (!allOnlineP.isOnline()) { + getAccountsConfig().set(allOnlineP.getName() + ".money", ((Main.this.getConfig().getDouble("payday.amount")*(getAccountsConfig().getDouble(allOnlineP.getName() + ".money"))+getAccountsConfig().getDouble(allOnlineP.getName() + ".money")))); + } + //Main.economy.depositPlayer(allOnlineP.getName(), (Main.this.getConfig().getDouble("payday.amount")*Main.economy.bankBalance(allOnlineP.getName()).balance)); + } + saveAccountsConfig(); + List expired_uuids = new ArrayList(); + String moblist = getConfig().getString("fed.mobs"); + String finalstring = ""; + int removed_count=0; + if (getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = moblist.split(","); + for (int i=0;iLong.valueOf(mobslist[i+1])) { + expired_uuids.add(UUID.fromString(mobslist[i])); + } else { + //Send this back for holding on until next time. + //Reconstruct the data + if (finalstring.equalsIgnoreCase("")) { + finalstring+=mobslist[i]+","+mobslist[i+1]; + } else { + finalstring+=","+mobslist[i]+","+mobslist[i+1]; + } + } + } + //Check all spawned entities in the world. + List world_entities = Bukkit.getWorld("world").getEntities(); + for (int i=0;i=3) { + p.sendMessage(ChatColor.GOLD+"Sorry, you are already in 3 jobs!"); + return false; + } + Bukkit.getLogger().info("Max Job count checked."); + if (PlayerinJob(p,job)) { + p.sendMessage(ChatColor.GOLD+"Sorry, you are already in this job!"); + return false; + } + Bukkit.getLogger().info("Player's not in job checked."); + if (getConfig().getInt("jobs."+ValidJobs[matchedjob])>=getConfig().getInt("jobs.MAX_JOBS")) { + p.sendMessage(ChatColor.GOLD+"Sorry, there are already "+getConfig().getInt("jobs.MAX_JOBS")+" people in this job!"); + return false; + } + Bukkit.getLogger().info("Well, they are allowed to join this job."); + //Add 1 to main config. + getConfig().set("jobs."+ValidJobs[matchedjob], Integer.valueOf(getConfig().getInt("jobs."+ValidJobs[matchedjob])+1)); + saveConfig(); + Bukkit.getLogger().info("Saved the config."); + //We can add them into this new job. + //Check for the slot we have "None" job in first. + int openslot=0; + for (int i=0;i<3;i++) { + if (getAccountsConfig().getString(p.getName()+".jobs.job"+(i+1)).equalsIgnoreCase("None")) { + openslot=i; + Bukkit.getLogger().info("Found a None job slot."); + break; + } + } + if (ValidJobs[matchedjob].compareTo("Explorer")==0) { + explorerlist.add(new ExplorerData(p.getName(), p.getLocation().getX(), p.getLocation().getZ())); + } + if (ValidJobs[matchedjob].compareTo("Support")==0) { + supportplayers.add(new SupportPlayer(p)); + } + if (ValidJobs[matchedjob].compareTo("Hunter")==0) { + hunterplayers.add(p); + } + Bukkit.getLogger().info("Added extra job pieces when joining."); + getAccountsConfig().set(p.getName()+".jobs.job"+(openslot+1), String.valueOf(ValidJobs[matchedjob])); + getAccountsConfig().set(p.getName()+".jobs.job"+(openslot+1)+"lv", Integer.valueOf(1)); + getAccountsConfig().set(p.getName()+".jobs.job"+(openslot+1)+"exp", Double.valueOf(0)); + saveAccountsConfig(); + Bukkit.getLogger().info("Set job data."); + Bukkit.broadcastMessage(p.getName()+" has joined the "+JobColors[matchedjob]+ValidJobs[matchedjob]+ChatColor.WHITE+" job!"); + p.sendMessage("You can check out your job progress anytime with "+ChatColor.GOLD+"/jobs stats"+ChatColor.WHITE+"."); + return true; + } + + public String[] getJobs(Player p) { + String[] string= {getAccountsConfig().getString(p.getName()+".jobs.job1"),getAccountsConfig().getString(p.getName()+".jobs.job2"),getAccountsConfig().getString(p.getName()+".jobs.job3")}; + return string; + } + + public String[] getJobs(String p) { + String[] string= {getAccountsConfig().getString(p+".jobs.job1"),getAccountsConfig().getString(p+".jobs.job2"),getAccountsConfig().getString(p+".jobs.job3")}; + return string; + } + + public boolean PlayerinJob(String p,String job) { + String[] jobs = getJobs(p); + for (int i=0;i=0) {getAccountsConfig().set(p+".jobs.job"+(slot+1)+"exp", Double.valueOf(getAccountsConfig().getDouble(p+".jobs.job"+(slot+1)+"exp")+exp));} else { + getAccountsConfig().set(p+".jobs.job"+(slot+1)+"exp", Double.valueOf(0)); + } + //Check for lv up. + if (getJobExp(job,getAccountsConfig().getInt(p+".jobs.job"+(slot+1)+"lv"))<=getAccountsConfig().getDouble(p+".jobs.job"+(slot+1)+"exp")) { + //Level up! Level up! YEAH! + getAccountsConfig().set(p+".jobs.job"+(slot+1)+"exp", Double.valueOf(getAccountsConfig().getDouble(p+".jobs.job"+(slot+1)+"exp")-getJobExp(job,getAccountsConfig().getInt(p+".jobs.job"+(slot+1)+"lv")))); + getAccountsConfig().set(p+".jobs.job"+(slot+1)+"lv", Integer.valueOf(getAccountsConfig().getInt(p+".jobs.job"+(slot+1)+"lv")+1)); + Bukkit.broadcastMessage(p+" is now a Level "+getAccountsConfig().getInt(p+".jobs.job"+(slot+1)+"lv")+" "+getJobColor(job)+job+ChatColor.WHITE+"."); + if (getJobTotalLvs(Bukkit.getPlayer(p))%5==0) { + Bukkit.broadcastMessage(ChatColor.GREEN+p+" has reached Level "+getJobTotalLvs(Bukkit.getPlayer(p))+"!"); + if ((((getJobTotalLvs(Bukkit.getPlayer(p))/5+1)-getStatPointTotal(Bukkit.getPlayer(p))))>0) { + Bukkit.getPlayer(p).sendMessage(ChatColor.GOLD+"You have earned 1 stat point! You now have "+(((getJobTotalLvs(Bukkit.getPlayer(p))/5+1)-getStatPointTotal(Bukkit.getPlayer(p))))+" stat point"+((((getJobTotalLvs(Bukkit.getPlayer(p))/5+1)-getStatPointTotal(Bukkit.getPlayer(p))))==1?"":"s")+" to spend. "+ChatColor.ITALIC+ChatColor.BLUE+" Type /sp to spend them!"); + } + } + } + saveAccountsConfig(); + } + + public void gainMoneyExp(Player p,String job,double amount,double exp) { + String[] jobs = getJobs(p); + int slot=-1; + //Add to how much we've earned so far. + for (int i=0;i enchant_data = new ArrayList(); //OMGGGG. forgot to initialize the dang list! + if (item.getType()==Material.STONE_HOE || item.getType()==Material.IRON_HOE || item.getType()==Material.WOOD_HOE || item.getType()==Material.GOLD_HOE || item.getType()==Material.DIAMOND_HOE) { + enchant_data=ENCHANTMENT_DATA.stone_hoe; + } else + //DERP + if (item.getType()==Material.STONE_SPADE) {enchant_data=ENCHANTMENT_DATA.stone_shovel;} else + if (item.getType()==Material.STONE_PICKAXE) {enchant_data=ENCHANTMENT_DATA.stone_pickaxe;} else + if (item.getType()==Material.LEATHER_BOOTS) {enchant_data=ENCHANTMENT_DATA.leather_boots;} else + if (item.getType()==Material.LEATHER_LEGGINGS) {enchant_data=ENCHANTMENT_DATA.leather_pants;} else + if (item.getType()==Material.LEATHER_CHESTPLATE) {enchant_data=ENCHANTMENT_DATA.leather_tunic;} else + if (item.getType()==Material.LEATHER_HELMET) {enchant_data=ENCHANTMENT_DATA.leather_cap;} else + if (item.getType()==Material.IRON_SPADE) {enchant_data=ENCHANTMENT_DATA.iron_shovel;} else + if (item.getType()==Material.IRON_BOOTS) {enchant_data=ENCHANTMENT_DATA.iron_boots;} else + if (item.getType()==Material.IRON_PICKAXE) {enchant_data=ENCHANTMENT_DATA.iron_pickaxe;} else + if (item.getType()==Material.IRON_HELMET) {enchant_data=ENCHANTMENT_DATA.iron_helmet;} else + if (item.getType()==Material.GOLD_SPADE) {enchant_data=ENCHANTMENT_DATA.golden_shovel;} else + if (item.getType()==Material.IRON_LEGGINGS) {enchant_data=ENCHANTMENT_DATA.iron_leggings;} else + if (item.getType()==Material.DIAMOND_SPADE) {enchant_data=ENCHANTMENT_DATA.diamond_shovel;} else + if (item.getType()==Material.GOLD_BOOTS) {enchant_data=ENCHANTMENT_DATA.golden_boots;} else + if (item.getType()==Material.IRON_CHESTPLATE) {enchant_data=ENCHANTMENT_DATA.iron_chestplate;} else + if (item.getType()==Material.GOLD_HELMET) {enchant_data=ENCHANTMENT_DATA.golden_helmet;} else + if (item.getType()==Material.IRON_CHESTPLATE) {enchant_data=ENCHANTMENT_DATA.iron_chestplate;} else + if (item.getType()==Material.DIAMOND_PICKAXE) {enchant_data=ENCHANTMENT_DATA.diamond_pickaxe;} else + if (item.getType()==Material.DIAMOND_BOOTS) {enchant_data=ENCHANTMENT_DATA.diamond_boots;} else + if (item.getType()==Material.GOLD_LEGGINGS) {enchant_data=ENCHANTMENT_DATA.golden_leggings;} else + if (item.getType()==Material.GOLD_CHESTPLATE) {enchant_data=ENCHANTMENT_DATA.golden_chestplate;} else + if (item.getType()==Material.DIAMOND_HELMET) {enchant_data=ENCHANTMENT_DATA.diamond_helmet;} else + if (item.getType()==Material.DIAMOND_LEGGINGS) {enchant_data=ENCHANTMENT_DATA.diamond_leggings;} else + if (item.getType()==Material.DIAMOND_CHESTPLATE) {enchant_data=ENCHANTMENT_DATA.diamond_chestplate;} + int enchantments=0; + int iterations=0; + while (enchantments==0 && iterations<100) { //Attempt to enchant it, up to 100 tries. + iterations++; + //Bukkit.getPlayer("sigonasr2").sendMessage("Enchant data size is "+enchant_data.size()); + for (int i=0;i graphs = Collections.synchronizedSet(new HashSet()); + + private final Graph defaultGraph = new Graph("Default"); + private final YamlConfiguration configuration; + private final File configurationFile; + private final String guid; + private final Object optOutLock = new Object(); + + private volatile int taskId = -1; + + public Metrics(Plugin plugin) throws IOException { + if (plugin == null) { + throw new IllegalArgumentException("Plugin cannot be null"); + } + + this.plugin = plugin; + + this.configurationFile = new File("plugins/PluginMetrics/config.yml"); + this.configuration = YamlConfiguration.loadConfiguration(this.configurationFile); + + this.configuration.addDefault("opt-out", Boolean.valueOf(false)); + this.configuration.addDefault("guid", UUID.randomUUID().toString()); + + if (this.configuration.get("guid", null) == null) { + this.configuration.options().header("http://mcstats.org").copyDefaults(true); + this.configuration.save(this.configurationFile); + } + + this.guid = this.configuration.getString("guid"); + } + + public Graph createGraph(String name) + { + if (name == null) { + throw new IllegalArgumentException("Graph name cannot be null"); + } + + Graph graph = new Graph(name); + + this.graphs.add(graph); + + return graph; + } + + public void addCustomData(Plotter plotter) + { + if (plotter == null) { + throw new IllegalArgumentException("Plotter cannot be null"); + } + + this.defaultGraph.addPlotter(plotter); + + this.graphs.add(this.defaultGraph); + } + + public boolean start() + { + synchronized (this.optOutLock) + { + if (isOptOut()) { + return false; + } + + if (this.taskId >= 0) { + return true; + } + + this.taskId = this.plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(this.plugin, new Runnable() + { + private boolean firstPost = true; + + public void run() + { + try { + synchronized (Metrics.this.optOutLock) + { + if ((Metrics.this.isOptOut()) && (Metrics.this.taskId > 0)) { + Metrics.this.plugin.getServer().getScheduler().cancelTask(Metrics.this.taskId); + Metrics.this.taskId = -1; + } + + } + + Metrics.this.postPlugin(!this.firstPost); + + this.firstPost = false; + } catch (IOException e) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); + } + } + } + , 0L, 12000L); + + return true; + } + } + + public boolean isOptOut() + { + synchronized (this.optOutLock) + { + try { + this.configuration.load("plugins/PluginMetrics/config.yml"); + } catch (IOException ex) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + return true; + } catch (InvalidConfigurationException ex) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + return true; + } + return this.configuration.getBoolean("opt-out", false); + } + } + + public void enable() + throws IOException + { + synchronized (this.optOutLock) + { + if (isOptOut()) { + this.configuration.set("opt-out", Boolean.valueOf(false)); + this.configuration.save(this.configurationFile); + } + + if (this.taskId < 0) + start(); + } + } + + public void disable() + throws IOException + { + synchronized (this.optOutLock) + { + if (!isOptOut()) { + this.configuration.set("opt-out", Boolean.valueOf(true)); + this.configuration.save(this.configurationFile); + } + + if (this.taskId > 0) { + this.plugin.getServer().getScheduler().cancelTask(this.taskId); + this.taskId = -1; + } + } + } + + private void postPlugin(boolean isPing) + throws IOException + { + PluginDescriptionFile description = this.plugin.getDescription(); + + StringBuilder data = new StringBuilder(); + data.append(encode("guid")).append('=').append(encode(this.guid)); + encodeDataPair(data, "version", description.getVersion()); + encodeDataPair(data, "server", Bukkit.getVersion()); + encodeDataPair(data, "players", Integer.toString(Bukkit.getServer().getOnlinePlayers().length)); + encodeDataPair(data, "revision", String.valueOf(5)); + + if (isPing) { + encodeDataPair(data, "ping", "true"); + } + + synchronized (this.graphs) { + Iterator iter = this.graphs.iterator(); + Iterator localIterator1; + for (; iter.hasNext(); + localIterator1.hasNext()) + { + Graph graph = (Graph)iter.next(); + + localIterator1 = graph.getPlotters().iterator(); continue; + } + + } + + URL url = new URL("http://mcstats.org" + String.format("/report/%s", new Object[] { encode(this.plugin.getDescription().getName()) })); + URLConnection connection; + if (isMineshafterPresent()) + connection = url.openConnection(Proxy.NO_PROXY); + else { + connection = url.openConnection(); + } + + connection.setDoOutput(true); + + OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); + writer.write(data.toString()); + writer.flush(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String response = reader.readLine(); + + writer.close(); + reader.close(); + + if ((response == null) || (response.startsWith("ERR"))) { + throw new IOException(response); + } + + if (response.contains("OK This is your first update this hour")) + synchronized (this.graphs) { + Iterator iter = this.graphs.iterator(); + Iterator localIterator2; + for (; iter.hasNext(); + localIterator2.hasNext()) + { + Graph graph = (Graph)iter.next(); + + localIterator2 = graph.getPlotters().iterator(); continue; + } + } + } + + private boolean isMineshafterPresent() + { + try + { + Class.forName("mineshafter.MineServer"); + return true; } catch (Exception e) { + } + return false; + } + + private static void encodeDataPair(StringBuilder buffer, String key, String value) + throws UnsupportedEncodingException + { + buffer.append('&').append(encode(key)).append('=').append(encode(value)); + } + + private static String encode(String text) + throws UnsupportedEncodingException + { + return URLEncoder.encode(text, "UTF-8"); + } + + public static class Graph + { + private final String name; + private final Set plotters = new LinkedHashSet(); + + private Graph(String name) { + this.name = name; + } + + public String getName() + { + return this.name; + } + + public void addPlotter(Metrics.Plotter plotter) + { + this.plotters.add(plotter); + } + + public void removePlotter(Metrics.Plotter plotter) + { + this.plotters.remove(plotter); + } + + public Set getPlotters() + { + return Collections.unmodifiableSet(this.plotters); + } + + public int hashCode() + { + return this.name.hashCode(); + } + + public boolean equals(Object object) + { + if (!(object instanceof Graph)) { + return false; + } + + Graph graph = (Graph)object; + return graph.name.equals(this.name); + } + } + + public static abstract class Plotter + { + private final String name; + + public Plotter() + { + this("Default"); + } + + public Plotter(String name) + { + this.name = name; + } + + public abstract int getValue(); + + public String getColumnName() + { + return this.name; + } + + public void reset() + { + } + + public int hashCode() + { + return getColumnName().hashCode() + getValue(); + } + + public boolean equals(Object object) + { + if (!(object instanceof Plotter)) { + return false; + } + + Plotter plotter = (Plotter)object; + return (plotter.name.equals(this.name)) && (plotter.getValue() == getValue()); + } + } +} \ No newline at end of file diff --git a/BankEconomyMod/src/me/kaZep/Base/PersistentExplorerList.java b/BankEconomyMod/src/me/kaZep/Base/PersistentExplorerList.java new file mode 100644 index 0000000..52cb5a6 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/PersistentExplorerList.java @@ -0,0 +1,18 @@ +package me.kaZep.Base; + +import org.bukkit.Bukkit; + +public class PersistentExplorerList { + public String name; + public long expiretime; + public int event; + public float data; + public float data2; + //Event 0: Player used up their "second chance" life. 1 hour wait time. + //Event 1: Stores the EXP value of a player who died. + //Event 2: Simply says if this player has died recently or not. + public PersistentExplorerList(String name) { + this.name=name; + this.expiretime=Bukkit.getWorld("world").getFullTime()+36000; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/PlayerBuffData.java b/BankEconomyMod/src/me/kaZep/Base/PlayerBuffData.java new file mode 100644 index 0000000..837fd5c --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/PlayerBuffData.java @@ -0,0 +1,237 @@ +package me.kaZep.Base; + +import java.text.DecimalFormat; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class PlayerBuffData { + Player p; + int base_spdlv; + int base_armorlv; + List armorbufflist; + double base_hplv; + List hpbufflist; + short helmet_durability,chestplate_durability,leggings_durability,boots_durability; + int potion_spdlv; + long potion_time; + long hpbuff_time; + double extra_hp=0; + double money_gained=0; + long last_money_report_time=0; + public Main plugin; + + public String healthbar(double curHP,double maxHP) { + //█ ▌ + int bits=(int)(Math.ceil(curHP/maxHP*10)); + String bar=" "; + if (bits>6) { + bar+=ChatColor.GREEN+""; + } else + if (bits>3) { + bar+=ChatColor.YELLOW+""; + } else + { + bar+=ChatColor.RED+""; + } + for (int i=0;i(); + this.hpbufflist=new ArrayList(); + this.last_money_report_time=Bukkit.getWorld("world").getFullTime(); + this.money_gained=0; + if (p.getInventory().getHelmet()!=null) { + this.helmet_durability=p.getInventory().getHelmet().getDurability(); + } else { + this.helmet_durability=-1; + } + if (p.getInventory().getChestplate()!=null) { + this.chestplate_durability=p.getInventory().getChestplate().getDurability(); + } else { + this.chestplate_durability=-1; + } + if (p.getInventory().getLeggings()!=null) { + this.leggings_durability=p.getInventory().getLeggings().getDurability(); + } else { + this.leggings_durability=-1; + } + if (p.getInventory().getBoots()!=null) { + this.boots_durability=p.getInventory().getBoots().getDurability(); + } else { + this.boots_durability=-1; + } + this.plugin=thisplugin; + try { + Iterator effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.SPEED.getName())==0) { + potion_spdlv = nexteffect.getAmplifier(); + //Bukkit.getLogger().info("Speed level is "+nexteffect.getAmplifier()+" and lasts for "+nexteffect.getDuration()+" ticks."); + potion_time = Bukkit.getWorld("world").getFullTime()+nexteffect.getDuration(); + } + effects.remove(); + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while initializing player speed."); + } + p.removePotionEffect(PotionEffectType.SPEED); + } + public void setBaseSpd(int spd) { + this.base_spdlv=spd; + } + public void updateBaseArmor() { + + + } + public void updatePlayerSpd() { + if (!p.isDead()) { //Don't even try to set things if we're dead. + base_hplv=20; + base_hplv+=hpbufflist.size()*10; + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")>0) { + base_hplv+=this.plugin.getStatBonus(7, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2); + } + //Check player equipment to see if an item could possibly have a health buff. + for (int i=0;i effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.HEALTH_BOOST.getName())==0) { + base_hplv+=(nexteffect.getAmplifier()+1)*4; + extra_hp=(nexteffect.getAmplifier()+1)*4; + } + if (nexteffect.getType().getName().compareTo(PotionEffectType.ABSORPTION.getName())==0) { + hasabsorption=true; + } + effects.remove(); + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while finalizing player speed."); + } + if (/*!hasabsorption && */this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")>0) { + p.removePotionEffect(PotionEffectType.ABSORPTION); + p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION,3610,this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/3)/4-1)); + //p.sendMessage("Absorption level is "+(this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/4)/4-1)); + } + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")>0) { + p.removePotionEffect(PotionEffectType.FAST_DIGGING); + p.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING,399,this.plugin.getStatBonus(1, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/4)/20-1)); + } + //p.sendMessage("Health: "+p.getHealth()+"/"+p.getMaxHealth()+" Base HP Level: "+base_hplv); + if (p.getHealth()>p.getMaxHealth()) { + p.setHealth(p.getMaxHealth()); + //p.sendMessage("Health: "+p.getHealth()+"/"+p.getMaxHealth()+" Set new health: "+p.getMaxHealth()+"+"+extra_hp); + } + if (base_hplv!=p.getMaxHealth()) { + double temphp=0; + if (base_hplvbase_hplv) { + p.setHealth(base_hplv); + //p.sendMessage("Health too high. Lowering to "+p.getMaxHealth()); + }*/ + //Send new speed totals so the player's speed can be manually adjusted. + if (potion_spdlv>0 && potion_time effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.INCREASE_DAMAGE.getName())==0) { + if (nexteffect.getAmplifier()>0) { + p.removePotionEffect(PotionEffectType.INCREASE_DAMAGE); + p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE,nexteffect.getDuration()*4,0)); + } + } + if (nexteffect.getType().getName().compareTo(PotionEffectType.SPEED.getName())==0) { + if (nexteffect.getDuration()<47479999) { + //This is not a buff we applied via our plugin. + potion_spdlv+=nexteffect.getAmplifier()+1; + //p.sendMessage("Store speed "+nexteffect.getAmplifier()+" for "+nexteffect.getDuration()+" ticks."); + potion_time = Bukkit.getWorld("world").getFullTime()+nexteffect.getDuration(); + } + } + effects.remove(); + } + if (hpbuff_time0) { + hpbufflist.remove(0); + } + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while finalizing player speed."); + } + + p.removePotionEffect(PotionEffectType.SPEED); + if ((base_spdlv+potion_spdlv)>0) { + //Bukkit.getPlayer("AaMay").sendMessage("Explorer giving speed buff: "+(base_spdlv-1+potion_spdlv)); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 2147479999, base_spdlv-1+potion_spdlv, true)); + } + if (last_money_report_time+72000lastminetime+200) { + //Reset. Too much time has passed. + lastminetime=Bukkit.getWorld("world").getFullTime(); + minestreak=0; + } else { + minestreak++; + lastminetime=Bukkit.getWorld("world").getFullTime(); + if (minestreak>10) { + minestreak=0; + return true; + } + } + return false; + } + public boolean GoodInteract() { + //A good interact is doing their part of the job. + buildamt--; + if (buildamt<=0) { + buildamt=0; + return true; + } else { + if (buildamt>10) { + buildamt=10; //This is the upper bound of this value. + } + return false; + } + //Use this whenever you do a good interaction. Check the return value to see if we are allowed to gain exp from it. + } + public void BadInteract(Material blockType) { + //This method will add to the list of blocks created/destroyed, in an attempt to detect any further attempts to not be allowed to destroy things. + //This event should be called whenever a bad interaction happens. + if (blockType!=this.lastblocktype) { + //We are interacting with a different type of block. Give more lee-way for this block. + buildamt+=1; + this.lastblocktype=blockType; + } else { + //This is a block type we are dealing with from beforehand. We will need to add more to buildamt to make sure we are not cheating the system. + buildamt+=2; + } + } + public Player getPlayer() { + return data; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java new file mode 100644 index 0000000..36d4189 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java @@ -0,0 +1,10131 @@ +package me.kaZep.Base; + +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.UUID; + +import net.milkbowl.vault.economy.Economy; +import net.milkbowl.vault.economy.EconomyResponse; +//import net.minecraft.server.v1_4_R1.EntityWolf; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Chunk; +import org.bukkit.Difficulty; +import org.bukkit.DyeColor; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BrewingStand; +import org.bukkit.block.Chest; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.DoubleChest; +import org.bukkit.block.Furnace; +import org.bukkit.block.Jukebox; +import org.bukkit.block.Sign; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.AnimalTamer; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Creature; +import org.bukkit.entity.CreatureType; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Item; +import org.bukkit.entity.LightningStrike; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Minecart; +import org.bukkit.entity.MushroomCow; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.PigZombie; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Wolf; +import org.bukkit.entity.Zombie; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockGrowEvent; +import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.block.BlockRedstoneEvent; +import org.bukkit.event.block.LeavesDecayEvent; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.enchantment.EnchantItemEvent; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.bukkit.event.entity.EntityCombustEvent; +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.event.entity.EntityEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.entity.ItemDespawnEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.SheepDyeWoolEvent; +import org.bukkit.event.inventory.BrewEvent; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.FurnaceBurnEvent; +import org.bukkit.event.inventory.FurnaceExtractEvent; +import org.bukkit.event.inventory.FurnaceSmeltEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.event.inventory.InventoryType.SlotType; +import org.bukkit.event.player.PlayerBedLeaveEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerChatEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerExpChangeEvent; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.event.player.PlayerFishEvent.State; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemBreakEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerShearEntityEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.event.server.ServerListPingEvent; +import org.bukkit.event.vehicle.VehicleEnterEvent; +import org.bukkit.event.vehicle.VehicleExitEvent; +import org.bukkit.event.weather.LightningStrikeEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkPopulateEvent; +import org.bukkit.event.world.WorldEvent; +import org.bukkit.event.world.WorldInitEvent; +import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.BookMeta; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.material.MaterialData; +import org.bukkit.material.Pumpkin; +import org.bukkit.material.Wool; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.plugin.Plugin; +import org.bukkit.potion.Potion; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.potion.PotionType; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; +import org.bukkit.util.Vector; +import org.bukkit.potion.Potion; + +import com.google.common.base.Objects; +import com.sk89q.worldedit.CuboidClipboard; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.data.DataException; +import com.sk89q.worldedit.schematic.SchematicFormat; + +import me.kaZep.Base.BrewingStandData; +import me.kaZep.Base.FurnaceData; +import me.kaZep.Base.PlayerBuffData; +import me.kaZep.Base.JukeboxData; +import me.kaZep.Base.ArrowShooter; +import me.kaZep.Base.EntityHitData; +import me.kaZep.Base.EntityInteractData; +import me.kaZep.Base.ExplorerData; +import me.kaZep.Base.InvisibilityData; +import me.kaZep.Base.PersistentExplorerList; +import me.kaZep.Base.PlayerData; +import me.kaZep.Base.SupportEntity; +import me.kaZep.Base.SupportPlayer; + +public class PlayerListener + implements Listener +{ + public Main plugin; + + public PlayerListener(Main plugin) + { + this.plugin = plugin; + } + + public void updateTopSPLEEFSigns() { + String name[] = {"","",""}; + int rating[] = {-9999,-9999,-9999}, wins[] = {0,0,0}, losses[] = {0,0,0}; + //Get list of all players on the server. + OfflinePlayer playerlist[] = Bukkit.getOfflinePlayers(); + for (int i=0;i=20) { + if (this.plugin.getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating")>rating[0]) { + //This beats the top record, move everything down. + name[2]=name[1];rating[2]=rating[1];wins[2]=wins[1];losses[2]=losses[1]; + name[1]=name[0];rating[1]=rating[0];wins[1]=wins[0];losses[1]=losses[0]; + name[0]=playerlist[i].getName(); + rating[0]=(int)this.plugin.getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating"); + wins[0]=this.plugin.getAccountsConfig().getInt(playerlist[i].getName()+".spleefwins"); + losses[0]=this.plugin.getAccountsConfig().getInt(playerlist[i].getName()+".spleeflosses"); + } else + if (this.plugin.getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating")>rating[1]) { + //This beats the 2nd record, move everything down. + name[2]=name[1];rating[2]=rating[1];wins[2]=wins[1];losses[2]=losses[1]; + name[1]=playerlist[i].getName(); + rating[1]=(int)this.plugin.getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating"); + wins[1]=this.plugin.getAccountsConfig().getInt(playerlist[i].getName()+".spleefwins"); + losses[1]=this.plugin.getAccountsConfig().getInt(playerlist[i].getName()+".spleeflosses"); + } else + if (this.plugin.getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating")>rating[2]) { + //This beats the 3rd record, move everything down. + name[2]=playerlist[i].getName(); + rating[2]=(int)this.plugin.getAccountsConfig().getDouble(playerlist[i].getName()+".spleefrating"); + wins[2]=this.plugin.getAccountsConfig().getInt(playerlist[i].getName()+".spleefwins"); + losses[2]=this.plugin.getAccountsConfig().getInt(playerlist[i].getName()+".spleeflosses"); + } + } + } + } + Sign sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,85,42).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+name[0]); + sign.update(); + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,84,43).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+"Wins: "+ChatColor.DARK_GREEN+wins[0]); + sign.update(); + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,84,41).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+"Losses: "+ChatColor.DARK_GREEN+losses[0]); + sign.update(); + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1612,84,42).getState(); + sign.setLine(0, "");sign.setLine(2, "");sign.setLine(3, ""); + sign.setLine(1, ChatColor.BOLD+"RATING: "+ChatColor.DARK_GREEN+rating[0]/10); + sign.update(); + + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,85,39).getState(); + sign.setLine(0, ChatColor.BOLD+name[1]); + sign.setLine(1, "Rating: "+rating[1]/10); + sign.setLine(2, ChatColor.ITALIC+"Wins: "+wins[1]); + sign.setLine(3, ChatColor.ITALIC+"Losses: "+losses[1]); + sign.update(); + + sign = (Sign)Bukkit.getWorld("world").getBlockAt(1611,84,37).getState(); + sign.setLine(0, ChatColor.BOLD+name[2]); + sign.setLine(1, "Rating: "+rating[2]/10); + sign.setLine(2, ChatColor.ITALIC+"Wins: "+wins[2]); + sign.setLine(3, ChatColor.ITALIC+"Losses: "+losses[2]); + sign.update(); + } + + @EventHandler + public void onServerListPing(ServerListPingEvent e) { + e.setMaxPlayers(15); + if (this.plugin.getConfig().getBoolean("maintenance-mode")) { + e.setMotd(ChatColor.RED+"Currently in Maintenance Mode."); + } else { + e.setMotd("Sig's Minecraft - "+ChatColor.BLUE+"Currently Online."); + } + return; + } + + @EventHandler + public void onPlayerGainEXP(PlayerExpChangeEvent e) { + Player p = e.getPlayer(); + if (this.plugin.PlayerinJob(p, "Enchanter") && this.plugin.getJobLv("Enchanter", p)>=5) { + e.setAmount(e.getAmount()*2); + } + if (this.plugin.getAccountsConfig().getBoolean("halloween-enabled")) { + e.setAmount(e.getAmount()*2); + } + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify3")) { + p.sendMessage(ChatColor.DARK_GREEN+""+ChatColor.ITALIC+"Gained "+e.getAmount()+" exp."); + } + } + + @EventHandler + public void onBrewingStandBrew(BrewEvent e) { + //Look for an owner to this brewingstand. + String owner=""; + int mult=0; + boolean allowed=true; + for (int i=0;i=10) { + ItemStack[] items = e.getContents().getContents(); + for (int i=0;i map = e.getEnchantsToAdd(); + Player p = e.getEnchanter(); + /*e.getEnchanter().sendMessage("Enchantments are:"); + for (Map.Entry entry : map.entrySet()) { + e.getEnchanter().sendMessage(entry.getKey().getName()+" "+entry.getValue()); + }*/ + /* + if (Math.random()<=0.05) { + //5% chance of getting a book when enchanting. + ItemStack book = new ItemStack(Material.WRITTEN_BOOK); + BookMeta bookdata = (BookMeta)book.getItemMeta(); + int choosebook = (int)(Math.random()*9.0d); + switch (choosebook) { + case 0:{ + bookdata.setAuthor("Steve"); + bookdata.setTitle("Dangers of the Nether"); + bookdata.addPage("Dangers of the Nether\n"+ChatColor.ITALIC+" by Steve\n======\n"+ChatColor.RESET+"It didn't take me long to realize where we were. It was dangerous, very hot, and lots of torturous screams could be heard everywhere. I barely had time","to take it all in before a huge fireball was shot in my direction. I quickly looked to my side to find a convenient safe passage and hid there for a few minutes. I guess I was in there longer than I thought, I ended","up falling asleep and waking up to notice there was something scary on the wall.\n\n"+ChatColor.ITALIC+"\"TURN AND LEAVE NOW. DANGEROUS TO STAY. REAL WORLD HAS WHAT YOU ARE LOOKING FOR. I ONLY REMEMBER THE 1ST X POSITION...",ChatColor.ITALIC+"...IT WAS 7! I AM *POSITIVE*\""+ChatColor.RESET+"\n\nI did not know what to think. The 1st X position? I quickly remembered the 7 and sprinted out of the nether portal. And to think that was *THE END* of my adventures..."); + }break; + case 1:{ + bookdata.setAuthor("Lacey"); + bookdata.setTitle("A Hole in the Flower Garden"); + bookdata.addPage("A Hole in the Flower Garden\n"+ChatColor.ITALIC+" by Lacey\n======\n"+ChatColor.RESET+"It was a lovely day to pick flowers in the garden, they just finished blooming fully. I was so excited to pick them, but I didn't do so until","after I've taken in all the wonderful scents! Smelling all the flowers and wonderful smells of plants and trees and nature and grass. It was perfect. I was mindlessly walking along this prairie when I stumbled.","I fell, and fell, and fell. I hit the bottom of a ravine. It didn't even occur to me I would just walk into one. I took some minor damage, but when I got up, I noticed something strange.","There were two or three zombies gathered around a wall, etching something into it. I went over to read it once the zombies walked away. I saw on the wall:\n\n"+ChatColor.ITALIC+"X-2:6 <--END","It looked cryptic to me, but why would they write that on the wall? I quickly scribbled it down on a notepad I had in my pocket and started climbing out of the ravine to tend to my lovely flowers. What a day!"); + }break; + case 2:{ + bookdata.setAuthor("Jimmy"); + bookdata.setTitle("Messages in Music"); + bookdata.addPage("Messages in Music\n"+ChatColor.ITALIC+" by Jim"+"\n======"+ChatColor.RESET+"\nI popped out the disk from my Jukebox to put in another, I could jam to these all day! As I was looking through my collection for something to listen to","I found a really bent up disk. 'No way this could still play', I thought to myself. I put it in, and it crackled and snarled, but it was indeed playing! At first I heard some faint resemblence of music, but then suddenly,","a hiss, an explosion, and then 'CREEEEEEEEE----- 7X XSSSSSSSSSS 3RD EEEEEEE' mental images appeared in my head, but the 7X and 3RD stood out the most. It's like I was seeing them in my head while hearing something else!","I couldn't stand up anymore, or think. I forcibly reached up with my weak hand to find the eject button on the player and when I found the familiar nub in the button, pressed down on it and out popped the disk, hitting my face,","but putting me back into reality. Something was telling me that the 3RD and 7X was important. But I couldn't quite put my tongue on it."); + }break; + case 3:{ + bookdata.setAuthor("Creeper"); + bookdata.setTitle("HISS"); + bookdata.addPage("Y do i exisssst. nobody knowssss. i just want a hugssssss, HUGSSSSSSS. but i don't know Y i exist. there's no Y in the first position. it'sssss jusssst two digitssssss.... SSSSSSSSS. *THE END*"); + }break; + case 4:{ + bookdata.setAuthor("Marco"); + bookdata.setTitle("The Hunt for a Dragon"); + bookdata.addPage("The Hunt for a Dragon\n"+ChatColor.ITALIC+" by Marco"+"\n======"+ChatColor.RESET+"\nThere exists a rumor that a mythical dragon could be found in the depths of our world. It is even said he doesn't exist in OUR world, but ANOTHER world altogether!","That my friends already boggles me, but where the heck would I go to find it then? I have been told he exists, and I know he is. I believe deep in my heart. I searched day and night under and over ground.","One day I found something strange in the ground. It was pink wool, in the middle of a cave on the ground. It even said something, but I couldn't tell from so close up. So I literally dug all the way to the surface, keeping the boundaries","of that word uncovered the whole way up. When I got to the top and looked down, I was relieved to find it was made out of markings I could discern. It said: 'Y: X3?' It was definitely a weird group of symbols, but I have a strong feeling"," that it is directly linked with that dragon I am trying to hunt down. Maybe I can gather more clues and try to decipher the location of this thing."); + }break; + case 5:{ + bookdata.setAuthor("Steve"); + bookdata.setTitle("Cooking Food"); + bookdata.addPage("Cooking Food\n"+ChatColor.ITALIC+" by Steve"+"\n======"+ChatColor.RESET+"\nIt was a bright and rather typical sunny day in the Minecraft world. I don't actually think it was very hot either. I just managed to catch a few fish and was cooking them up.","It wasn't long before I got distracted and heard a funny noise. It was an ocelote. Lucky me, an ocelote has smelled the scent of my fish! I grab a few and hold it out for the ocelote. It slowly creeps over, and then takes it and runs from me.","I thought it was full and finished cooking the rest of the fish. However, the ocelote returned a few minutes later with a neatly-folded piece of paper in its mouth. It came up to me and set it down, like it was some message just for me.","I opened it up and it read:\n\n"+ChatColor.ITALIC+"Don't let the fish get to your tongue! If you know what's wise, you will investigate further. The 3rd position of Y being the number 5."+ChatColor.RESET+"\n\n","I didn't notice the ocelote run away, but I knew something FISHY was going on. That message seemed important for some reason, I've seen similar cryptic messages before... Perhaps I'll hold onto this in case I need it in the future."); + }break; + case 6:{ + bookdata.setAuthor("Fredric"); + bookdata.setTitle("Math Behind the Void"); + bookdata.addPage("Math Behind the Void\n"+ChatColor.ITALIC+" by Fredric"+"\n======"+ChatColor.RESET+"\nThis book describes a few principles that the void in this world follows. While no one has actually seen the void, we have found a few theories and rules regarding them.","1. The Void has a Light Level of -14. The Void actually absorbs light coming from light sources and thus, if The Void is ever opened to the real world, would suck up the light from it.","2. The Void always has a volume of 50,000m, being 50m x 20m x 50m. This means that The Void, regardless of location is always the same exact size. This would conclude to us that The Void is co-existing and multiple instaces of it may exist in the same realm.","3. Any Entity entering The Void will not be able to escape The Void as time passes much more quickly inside The Void. This means Entities that enter The Void feel accelerated processes and cannot combat it, since the time outside is behind them.","4. A point of connection between The Void and other dimensions has to exist, for The Void to exist. Speculation has it that one of these points has been leaked into the world, and is accessible by us directly. After further research,","we have learned that one of these points is located on the 1st respective numeral along our Z axis with the number 4. It has also been proven that this number has to be negative as the other two sources interacting with The Void are positive."); + }break; + case 7:{ + bookdata.setAuthor("Robert"); + bookdata.setTitle("TNT"); + bookdata.addPage("TNT\n"+ChatColor.ITALIC+" by Robert"+"\n======"+ChatColor.RESET+"\nYou know, the easiest way to clear a tunnel is using an item called TNT. It is a rather small block, but it is loaded with gunpowder. When lit by an external force, it ignites","with the force of 5 Creeper explosions to clear whole caves out. Well lo and behold one day I discovered a rather strange abandoned mineshaft. It wasn't normal for sure, because there were green vines everywhere and lots of strange doors.","It was like somebody lived here ages ago, and I am discovering the ruins of such a place. Inoperable levers, a few mobs I have to kill here and there that have made this area their designated home. It was a mess. But I did discover that","someone was trying to find what we would call 'The End'. It's a magical place, and I believe with the right amount of effort, we can find it someday too. He had scribbled the coordinates of the location he was trying to reach.","However, most of it is faded out and I can only tell faintly the remains of it: \n\n"+ChatColor.ITALIC+"X:---\nY:---\nZ:--7-"+ChatColor.RESET+"\n\nYep, that's about it.","Hopefully by me recording this data, someone else can fill in the remaining numbers and we can all find The End together. Someday..."); + }break; + case 8:{ + bookdata.setAuthor("Joshua"); + bookdata.setTitle("Fourside"); + bookdata.addPage("Fourside\n"+ChatColor.ITALIC+" by Joshua"+"\n======"+ChatColor.RESET+"\n"+ChatColor.DARK_BLUE+"ABANDONED PROJECT"+ChatColor.RESET+". A city that would be developed with the best technology and the highest standards. It would","succeed every single Minecraft city that has ever been built. Casinos, diamond-lined walkways, towering skyscrapers as far as the eye can see. Museums, Libraries, Educational Institutions. This mega-city would be able to hold","and sustain every single Minecrafter in existence. But no, something went terribly wrong. Our engineering team finally developed the perfect transportation system and we were wiring it up to our fusion power plant.","Something went horribly wrong. The Fusion power plant started self-combusting itself, leaving behind hyper-cold atoms. This caused nucleic waste to interact with the environment around itself and freezing the whole world as we knew it.","The city idea as we knew it was scrapped, and we would wait 2000 years before we could attempt this again. We wrote plans for a much more portable solution and have named it 'Twoside' and archived it appropriately.","Maybe someone will pick up that book and be able to make the future bright with a mini version of Fourside. That being said, we left the 3rd slot of the Z position of our city at 7. This should give you enough clue as to where NOT to build."); + }break; + } + book.setItemMeta(bookdata); + //p.setItemInHand(book); + p.getInventory().addItem(book); + p.updateInventory(); + p.sendMessage(ChatColor.LIGHT_PURPLE+"You feel a magical presence get inserted into your inventory."); + }*/ + if (this.plugin.PlayerinJob(p, "Enchanter")) { + if (this.plugin.getJobLv("Enchanter", p)>=10) { + e.setExpLevelCost((int)(e.getExpLevelCost()*0.75)); + } + for (Map.Entry entry : map.entrySet()) { + if (this.plugin.getJobLv("Enchanter", p)>=20) { + if (entry.getKey().getMaxLevel()=5) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Old time: "+e.getBurnTime()); + e.setBurnTime(e.getBurnTime()*2); + //Bukkit.getPlayer("sigonasr2").sendMessage("Doubled the furnace's burn time. New time: "+e.getBurnTime()); + } + } + + @EventHandler + public void onFurnaceSmelt(FurnaceSmeltEvent e) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Current time: "+((Furnace)e.getBlock().getState()).getBurnTime()); + //Look for an owner to this furnace. + String owner=""; + for (int i=0;i=20 && crafteditem) { + ItemStack result = e.getResult(); + result.setAmount(result.getAmount()+1); + e.setResult(result); + } + } + } + + @EventHandler + public void onCreatureInteract(PlayerInteractEntityEvent e) { + Player p = e.getPlayer(); + //When right-clicked on, check if it already exists in the entity list. + boolean contains=false; + int slot=0; + for (int i=0;i=20) { + Cow a = (Cow)e.getRightClicked(); + if (a.canBreed()) { + if (Math.random()<=0.50) { + p.getItemInHand().setAmount(p.getItemInHand().getAmount()+1); + } + } + } + //See if it exists already. + boolean contains_uuid=false; + String finalstring = ""; + if (this.plugin.getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = this.plugin.getConfig().getString("fed.mobs").split(","); + //p.sendMessage("Mobs list length: "+mobslist.length); + for (int i=0;i=20) { + Sheep a = (Sheep)e.getRightClicked(); + if (a.canBreed()) { + if (Math.random()<=0.50) { + p.getItemInHand().setAmount(p.getItemInHand().getAmount()+1); + } + } + } + //See if it exists already. + boolean contains_uuid=false; + String finalstring = ""; + if (this.plugin.getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = this.plugin.getConfig().getString("fed.mobs").split(","); + //p.sendMessage("Mobs list length: "+mobslist.length); + for (int i=0;i=20) { + Pig a = (Pig)e.getRightClicked(); + if (a.canBreed()) { + if (Math.random()<=0.50) { + p.getItemInHand().setAmount(p.getItemInHand().getAmount()+1); + } + } + } + //See if it exists already. + boolean contains_uuid=false; + String finalstring = ""; + if (this.plugin.getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = this.plugin.getConfig().getString("fed.mobs").split(","); + //p.sendMessage("Mobs list length: "+mobslist.length); + for (int i=0;i=20) { + Chicken a = (Chicken)e.getRightClicked(); + if (a.canBreed()) { + if (Math.random()<=0.50) { + p.getItemInHand().setAmount(p.getItemInHand().getAmount()+1); + } + } + } + //See if it exists already. + boolean contains_uuid=false; + String finalstring = ""; + if (this.plugin.getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = this.plugin.getConfig().getString("fed.mobs").split(","); + //p.sendMessage("Mobs list length: "+mobslist.length); + for (int i=0;i=20) { + Wolf a = (Wolf)e.getRightClicked(); + if (a.canBreed()) { + if (Math.random()<=0.50) { + p.getItemInHand().setAmount(p.getItemInHand().getAmount()+1); + } + } + } + //See if it exists already. + boolean contains_uuid=false; + String finalstring = ""; + if (this.plugin.getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = this.plugin.getConfig().getString("fed.mobs").split(","); + //p.sendMessage("Mobs list length: "+mobslist.length); + for (int i=0;i=20) { + Ocelot a = (Ocelot)e.getRightClicked(); + if (a.canBreed()) { + if (Math.random()<=0.50) { + p.getItemInHand().setAmount(p.getItemInHand().getAmount()+1); + } + } + } + //See if it exists already. + boolean contains_uuid=false; + String finalstring = ""; + if (this.plugin.getConfig().getString("fed.mobs").length()>4) { + String[] mobslist = this.plugin.getConfig().getString("fed.mobs").split(","); + ////p.sendMessage("Mobs list length: "+mobslist.length); + for (int i=0;i=10) { + e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 9999999, 0, true)); + } + } else { + if (this.plugin.PlayerinJob(e.getPlayer(),"Hunter") && this.plugin.getJobLv("Hunter", e.getPlayer())>=10) { + if (e.getPlayer().hasPotionEffect(PotionEffectType.INVISIBILITY)) { + try { + Collection effects = e.getPlayer().getActivePotionEffects(); + for (PotionEffect nextpotioneffect : effects) { + if (nextpotioneffect.getType().getName().compareTo("INVISIBILITY")==0 && nextpotioneffect.getDuration()>24000) { + //This is definitely not a potion given to you. + e.getPlayer().removePotionEffect(PotionEffectType.INVISIBILITY); + break; + } + } + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible for a hunter while toggling sneak mode."); + } + } + } + } + } + + public String healthbar(double curHP,double maxHP) { + //█ ▌ + int bits=(int)(Math.ceil(curHP/maxHP*10)); + String bar=" "; + if (bits>6) { + bar+=ChatColor.GREEN+""; + } else + if (bits>3) { + bar+=ChatColor.YELLOW+""; + } else + { + bar+=ChatColor.RED+""; + } + for (int i=0;i6) { + bar+=ChatColor.GREEN+""; + } else + if (bits>3) { + bar+=ChatColor.YELLOW+""; + } else + { + bar+=ChatColor.RED+""; + } + } else { + if (bits>6) { + bar+=ChatColor.DARK_GREEN+""; + } else + if (bits>3) { + bar+=ChatColor.GOLD+""; + } else + { + bar+=ChatColor.DARK_RED+""; + } + } + for (int i=0;i newlore = p.getInventory().getArmorContents()[i].getItemMeta().getLore(); + for (int j=0;j=5) { + //p.sendMessage("Explorer speed buff set."); + newplayer.setBaseSpd(1); + } + if (this.plugin.PlayerinJob(p, "Hunter") && this.plugin.getJobLv("Hunter", p)>=20) { + //p.sendMessage("Explorer speed buff set."); + newplayer.setBaseSpd(newplayer.base_spdlv+1); + } + //Bukkit.getPlayer("sigonasr2").sendMessage("Got to here."); + newplayer.updatePlayerSpd(); + this.plugin.SPEED_CONTROL.add(newplayer); + //Bukkit.getPlayer("sigonasr2").sendMessage("Got to here."); + Iterator players = Bukkit.getWhitelistedPlayers().iterator(); + boolean playerwhitelisted=false; + String playerslist = ""; + while (players.hasNext()) { + if (playerslist!="") { + playerslist += ","; + } + String name = players.next().getName(); + playerslist += name; + if (name.compareToIgnoreCase(p.getName())==0) { + playerwhitelisted=true; + } + } + /* + //Boss platform is created +,+ coordinates from the location specified. + File file = new File("plugins/WorldEdit/schematics/boss.schematic"); + if (file.exists()) { + try { + com.sk89q.worldedit.Vector v = new com.sk89q.worldedit.Vector(p.getLocation().getX()-8, p.getLocation().getY(), p.getLocation().getZ()-8); + World worldf = Bukkit.getWorld("world"); + BukkitWorld BWf = new BukkitWorld(worldf); + EditSession es = new EditSession(BWf, 2000000); + CuboidClipboard c1 = SchematicFormat.MCEDIT.load(file); + c1.place(es, v, true); + } catch (DataException ex) { + Bukkit.getLogger().warning("DataException while trying to create structure."); + } catch (IOException ex) { + Bukkit.getLogger().warning("IOException while trying to create structure."); + } catch (MaxChangedBlocksException ex) { + Bukkit.getLogger().warning("MaxChangedBlocksException while trying to create structure."); + } + } else { + Bukkit.getLogger().warning(("File does not exist.")); + } + */ + //System.out.println("Whitelisted Players: "+playerslist); + //System.out.println("Maximum Air: "+p.getMaximumAir()); + if (!this.plugin.getAccountsConfig().contains(p.getName())) { + //This is a brand new player. + Main.economy.withdrawPlayer(p.getName(), Main.economy.getBalance(p.getName())); + Main.economy.depositPlayer(p.getName(), 70); + this.plugin.getAccountsConfig().set(p.getName() + ".status", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".money", Double.valueOf(this.plugin.getConfig().getDouble("start-balance"))); + this.plugin.getAccountsConfig().set(p.getName() + ".revived", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".spleefrating", Double.valueOf(1000.0d)); + this.plugin.getAccountsConfig().set(p.getName() + ".spleefwins", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".spleeflosses", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job1", String.valueOf("None")); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job1lv", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job1exp", Double.valueOf(0.0d)); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job2", String.valueOf("None")); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job2lv", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job2exp", Double.valueOf(0.0d)); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job3", String.valueOf("None")); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job3lv", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".jobs.job3exp", Double.valueOf(0.0d)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat1", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat2", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat3", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat4", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat5", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat6", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat7", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat8", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat9", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat10", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify1", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify2", Boolean.valueOf(false)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify3", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify4", Boolean.valueOf(false)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify5", Boolean.valueOf(false)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify6", Boolean.valueOf(false)); + this.plugin.saveAccountsConfig(); + System.out.println("[BankEconomy] Bank account created for " + p.getName() + "."); + if (playerwhitelisted) { + Bukkit.broadcastMessage(ChatColor.LIGHT_PURPLE+"New player "+ChatColor.ITALIC+ChatColor.GOLD+p.getName()+ChatColor.RESET+ChatColor.LIGHT_PURPLE+" has joined the game."); + //Give a tutorial book and starting items to this user. + p.getInventory().addItem(new ItemStack(Material.STONE_SWORD)); + p.getInventory().addItem(new ItemStack(Material.STONE_PICKAXE)); + p.getInventory().addItem(new ItemStack(Material.COOKED_CHICKEN,16)); + p.getInventory().addItem(new ItemStack(Material.TORCH,32)); + p.getInventory().addItem(new ItemStack(Material.LEATHER_HELMET)); + p.getInventory().addItem(new ItemStack(Material.LEATHER_CHESTPLATE)); + p.getInventory().addItem(new ItemStack(Material.LEATHER_LEGGINGS)); + p.getInventory().addItem(new ItemStack(Material.LEATHER_BOOTS)); + p.getInventory().addItem(new ItemStack(Material.MINECART)); + } + } else { + DecimalFormat df = new DecimalFormat("#0.00"); + p.sendMessage(ChatColor.DARK_AQUA+"For a list of all changes made to this server, visit: http://z-gamers.net/changelog.html"); + p.sendMessage("----------------------------"); + p.sendMessage(ChatColor.YELLOW+"Current Money Balance: $ "+df.format(Main.economy.bankBalance(p.getName()).balance)+", Bank Balance: $"+df.format(this.plugin.getAccountsConfig().getDouble(p.getName()+".money"))); + //Update account information for the stat point update. + if (!this.plugin.getAccountsConfig().contains(p.getName() + ".stats.stat1")) { + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat1", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat2", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat3", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat4", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat5", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat6", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat7", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat8", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat9", Integer.valueOf(0)); + this.plugin.getAccountsConfig().set(p.getName() + ".stats.stat10", Integer.valueOf(0)); + this.plugin.saveAccountsConfig(); + System.out.println("Updated " + p.getName() + "'s data with stat point update."); + } + //Update account information for notification settings. + if (!this.plugin.getAccountsConfig().contains(p.getName() + ".settings.notify1")) { + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify1", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify2", Boolean.valueOf(false)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify3", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify4", Boolean.valueOf(false)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify5", Boolean.valueOf(false)); + this.plugin.getAccountsConfig().set(p.getName() + ".settings.notify6", Boolean.valueOf(false)); + this.plugin.saveAccountsConfig(); + System.out.println("Updated " + p.getName() + "'s data with nofitications update."); + } + if (this.plugin.getConfig().getBoolean("halloween-enabled")) { + //Update account information for Halloween book update. + PlayerInventory pi = p.getInventory(); + boolean full=true; + for (int i=0;i0) { + p.setMaximumAir(300+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName() + ".stats.stat10"))*20); + } + if (p.getLocation().getY()>78.0d && p.getLocation().getZ()>53.0d && p.getLocation().getZ()<64.0d && p.getLocation().getX()<1627.0d && p.getLocation().getX()>1616.0d) { + //In a spleef zone. Kick this player out. + Location newloc = p.getLocation(); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + p.teleport(newloc); + this.plugin.getConfig().set("spleefinsession", Boolean.valueOf(false)); + } + } + boolean found=false; + for (int i=0;i effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + //Bukkit.getLogger().info(p.getName()+" w/buff "+nexteffect.getType().getName()+" for "+nexteffect.getDuration()/20+" sec."); + /*if (nexteffect.getType().getName().compareTo(PotionEffectType.JUMP.getName())==0) { + p.removePotionEffect(PotionEffectType.JUMP); + p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 360000, nexteffect.getAmplifier()+2, true)); + }*/ + effects.remove(); + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while trying to slow down player."); + } + updateTopSPLEEFSigns(); + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEntityEvent ev) { + Entity theAnimal = ev.getRightClicked(); + if (theAnimal.getType() == EntityType.WOLF) { + Wolf dog = (Wolf)theAnimal; + DyeColor dogcolor = dog.getCollarColor(); + Player p = ev.getPlayer(); + if (dog.getOwner() == null) { + return; + } + if (p != dog.getOwner()) { + return; + } + if (!dog.isAngry()) { + //Switch state of wolf. + //dog.setSitting(!dog.isSitting()); + return; + } + ev.setCancelled(true); + double oldhealth = dog.getHealth(); + dog.setSitting(true); + dog.remove(); + Location wolfloc = dog.getLocation(); + World world = Bukkit.getWorld("world"); + Entity newAnimal = world.spawnEntity(wolfloc, EntityType.WOLF); + Wolf newdog = (Wolf)newAnimal; + newdog.setOwner(p); + newdog.setHealth(oldhealth); + newdog.setSitting(true); + newdog.setCollarColor(dogcolor); + p.sendMessage(ChatColor.GREEN + "This dog is now happy!"); + } + } + + @EventHandler + public void onBlockGrow(BlockGrowEvent e) { + int x1,y1,z1,x2=0,y2=0,z2=0; + x1=e.getBlock().getX(); + y1=e.getBlock().getY(); + z1=e.getBlock().getZ(); + Player[] plist= Bukkit.getOnlinePlayers(); + for (int i=0;i=20) { + if (Math.random()<=0.30) { + if (e.getBlock().getType()==Material.POTATO || e.getBlock().getType()==Material.CARROT || e.getBlock().getType()==Material.CROPS || e.getBlock().getType()==Material.MELON_STEM || e.getBlock().getType()==Material.PUMPKIN_STEM) { + if (e.getBlock().getData()<7) { + e.getBlock().setData((byte) (e.getBlock().getData()+1)); + } + } + if (e.getBlock().getType()==Material.COCOA) { + if (e.getBlock().getData()<8) { + e.getBlock().setData((byte) (e.getBlock().getData()+4)); + } + } + if (e.getBlock().getType()==Material.NETHER_WARTS) { + if (e.getBlock().getData()<3) { + e.getBlock().setData((byte) (e.getBlock().getData()+1)); + } + } + } + } + } + } + } + } + + + @EventHandler + public void onCreatureSpawn(CreatureSpawnEvent e) { + Entity entity = e.getEntity(); + if (entity.getWorld().getName().compareTo("world")==0) { + boolean despawn=true; + if (entity instanceof LivingEntity) { + LivingEntity test = (LivingEntity)entity; + boolean block=false; + for (int i=-2;i<3;i++) { + for (int j=-2;j<3;j++) { + for (int k=-2;k<3;k++) { + if (Bukkit.getWorld("world").getBlockAt(test.getLocation().add(i,j,k)).getType()==Material.COMMAND) { + block=true; + Bukkit.getWorld("world").getBlockAt(test.getLocation().add(i,j,k)).setType(Material.COBBLESTONE); + despawn=false; + } + } + } + } + List entities = Bukkit.getWorld("world").getEntities(); + for (int i=0;i50000) { + maxgroup=(int)(20*groupmult); //Groups of up to 20 mobs. + chancer=0.25d; + despawnchancer=0.0625d; + LivingEntity l = (LivingEntity)entity; + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*1.0d)); + if (Math.random()<=0.25) { + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.5d)); + } + l.setHealth(l.getMaxHealth()); + } else + if (distancefromcity>20000) { + maxgroup=(int)(15*groupmult); //Groups of up to 15 mobs. + chancer=0.175d; + despawnchancer=0.1250d; + LivingEntity l = (LivingEntity)entity; + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.75d)); + if (Math.random()<=0.25) { + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.5d)); + } + l.setHealth(l.getMaxHealth()); + } else + if (distancefromcity>10000) { + maxgroup=(int)(12*groupmult); //Groups of up to 12 mobs. + chancer=0.125d; + despawnchancer=0.15d; + LivingEntity l = (LivingEntity)entity; + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.5d)); + if (Math.random()<=0.25) { + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.25d)); + } + l.setHealth(l.getMaxHealth()); + } else*/ + maxgroup=(int)(10*groupmult); + chancer=0.10d; + despawnchancer=0.25d; + if (this.plugin.getConfig().getBoolean("halloween-enabled")) { + groupmult=0.0625f; + chancer=0.025f; + despawnchancer=0.4375d; + } + /* + if (distancefromcity>4000) { + maxgroup=(int)(10*groupmult); //Groups of up to 10 mobs. + chancer=0.10d; + despawnchancer=0.25d; + LivingEntity l = (LivingEntity)entity; + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.5d)); + if (Math.random()<=0.25) { + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.25d)); + } + l.setHealth(l.getMaxHealth()); + } else + if (distancefromcity>2000) { + maxgroup=(int)(7*groupmult); //Groups of up to 7 mobs. + chancer=0.075d; + despawnchancer=0.35d; + LivingEntity l = (LivingEntity)entity; + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.25d)); + if (Math.random()<=0.25) { + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.25d)); + } + l.setHealth(l.getMaxHealth()); + } else + if (distancefromcity>1000) { + maxgroup=(int)(5*groupmult); //Groups of up to 5 mobs. + chancer=0.05d; + despawnchancer=0.50d; + LivingEntity l = (LivingEntity)entity; + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.25d)); + if (Math.random()<=0.25) { + //l.setMaxHealth(l.getMaxHealth()+(l.getMaxHealth()*0.25d)); + } + l.setHealth(l.getMaxHealth()); + } else + if (distancefromcity>400) { + maxgroup=(int)(3*groupmult); //Groups of up to 3 mobs. + chancer=0.025d; + despawnchancer=0.75d; + } else { + maxgroup=(int)(3*groupmult); //Groups of up to 3 mobs. + chancer=0.005d; + despawnchancer=0.95d; + }*/ + if (entity.getType()==EntityType.ZOMBIE || entity.getType()==EntityType.PIG_ZOMBIE || entity.getType()==EntityType.SKELETON) { + LivingEntity l = (LivingEntity)entity; + EntityEquipment inven = l.getEquipment(); + if (l.getCustomName()!=null && l.getCustomName().equals(ChatColor.GOLD+"Charge Zombie II")) { + despawnchancer/=4; + //Destroy a huge amount around it when it spawns. + for (int k=-4;k<5;k++) { + for (int j=-4;j<5;j++) { + for (int m=-1;m<5;m++) { + Location checkloc = l.getLocation().add(k,m,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER || bl.getType()!=Material.COMMAND || bl.getType()!=Material.MOSSY_COBBLESTONE) { + bl.breakNaturally(); + } + } + } + } + } + if (inven!=null) { + inven.setBootsDropChance(0.02f); + inven.setChestplateDropChance(0.02f); + inven.setLeggingsDropChance(0.02f); + inven.setHelmetDropChance(0.02f); + inven.setItemInHandDropChance(0.02f); + if (entity.getType()==EntityType.SKELETON) { + inven.setItemInHand(new ItemStack(Material.BOW)); + } + if (distancefromcity<2000) { + if (entity.getType()==EntityType.ZOMBIE) { + Zombie zomb = (Zombie)l; + if (zomb.isBaby()) { + zomb.setBaby(false); + } + } + if (inven.getItemInHand()!=null && inven.getItemInHand().getType()==Material.DIAMOND_SWORD || + inven.getItemInHand().getType()==Material.GOLD_SWORD || + inven.getItemInHand().getType()==Material.IRON_SWORD) { + inven.setItemInHand(new ItemStack(Material.WOOD_SWORD)); + } + if (inven.getChestplate()!=null && inven.getChestplate().getType()==Material.DIAMOND_CHESTPLATE || + inven.getChestplate().getType()==Material.GOLD_CHESTPLATE || + inven.getChestplate().getType()==Material.IRON_CHESTPLATE || + inven.getChestplate().getType()==Material.CHAINMAIL_CHESTPLATE) { + inven.setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE)); + } + if (inven.getLeggings()!=null && inven.getLeggings().getType()==Material.DIAMOND_LEGGINGS || + inven.getLeggings().getType()==Material.GOLD_LEGGINGS || + inven.getLeggings().getType()==Material.IRON_LEGGINGS || + inven.getLeggings().getType()==Material.CHAINMAIL_LEGGINGS) { + inven.setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); + } + if (inven.getBoots()!=null && inven.getBoots().getType()==Material.DIAMOND_BOOTS || + inven.getBoots().getType()==Material.GOLD_BOOTS || + inven.getBoots().getType()==Material.IRON_BOOTS || + inven.getBoots().getType()==Material.CHAINMAIL_BOOTS) { + inven.setBoots(new ItemStack(Material.LEATHER_BOOTS)); + } + if (inven.getHelmet()!=null && inven.getHelmet().getType()==Material.DIAMOND_HELMET || + inven.getHelmet().getType()==Material.GOLD_HELMET || + inven.getHelmet().getType()==Material.IRON_HELMET || + inven.getHelmet().getType()==Material.CHAINMAIL_HELMET) { + inven.setHelmet(new ItemStack(Material.LEATHER_HELMET)); + } + } + else if (distancefromcity<8000) { + if (entity.getType()==EntityType.ZOMBIE) { + Zombie zomb = (Zombie)l; + if (zomb.isBaby()) { + zomb.setBaby(false); + } + } + if (inven.getItemInHand()!=null && inven.getItemInHand().getType()==Material.DIAMOND_SWORD || + inven.getItemInHand().getType()==Material.GOLD_SWORD) { + inven.setItemInHand(new ItemStack(Material.IRON_SWORD)); + } + if (inven.getChestplate()!=null && inven.getChestplate().getType()==Material.DIAMOND_CHESTPLATE) { + inven.setChestplate(new ItemStack(Material.IRON_CHESTPLATE)); + } + if (inven.getLeggings()!=null && inven.getLeggings().getType()==Material.DIAMOND_LEGGINGS) { + inven.setLeggings(new ItemStack(Material.IRON_LEGGINGS)); + } + if (inven.getBoots()!=null && inven.getBoots().getType()==Material.DIAMOND_BOOTS) { + inven.setBoots(new ItemStack(Material.IRON_BOOTS)); + } + if (inven.getHelmet()!=null && inven.getHelmet().getType()==Material.DIAMOND_HELMET) { + inven.setHelmet(new ItemStack(Material.IRON_HELMET)); + } + } + } + } + //Get the torches/glowstone/mob spawners around this entity. + int torches=0,glowstone=0,spawners=0; + for (int x=-5;x<5;x++) { + for (int y=-5;y<5;y++) { + for (int z=-5;z<5;z++) { + Block test = entity.getWorld().getBlockAt(entity.getLocation().add(x,y,z)); + if (test.getType()==Material.TORCH) { + torches++; + } else + if (test.getType()==Material.GLOWSTONE) { + glowstone++; + } else + if (test.getType()==Material.MOB_SPAWNER) { + spawners++; + } + } + } + } + if (Bukkit.getWorld("world").getHighestBlockYAt(entity.getLocation())>=96) { + //This is a tall world. + if (entity.getLocation().getBlockY()>104) { + despawnchancer*=(Math.random()*3.0d)+1; + } else { + for (int i=104-entity.getLocation().getBlockY();i>0;i--) { + despawnchancer/=1.0175d; + } + } + } else { + //This is a short world. + if (entity.getLocation().getBlockY()>52) { + despawnchancer*=(Math.random()*3.0d)+1; + } else { + for (int i=52-entity.getLocation().getBlockY();i>0;i--) { + despawnchancer/=1.025d; + } + } + } + //if (e.getSpawnReason()!=SpawnReason.NATURAL) { //If it's a natural spawn, we gotta do it. Ignore our checking stuff. + if (contains && spawners==0) { //We only do this despawn/extra spawn chance stuff when we have an actual mob AND when there's not a spawner nearby. + if ((Math.random()<=despawnchancer || (torches+glowstone>=3))/* && entity.getNearbyEntities(5, 5, 5).size()>50*/) { + //if (e.getSpawnReason()!=SpawnReason.CUSTOM && e.getLocation().getBlockY()!=Bukkit.getPlayer("AaMay").getLocation().getBlockY()) { + entity.remove(); + e.setCancelled(true); + //} + //Bukkit.getPlayer("AaMay").sendMessage(ChatColor.BLUE+entity.getType().getName()+": Removed mob due to despawn chancer / special case."); + } + else { + int totallvs=0; + List nearbylist = entity.getNearbyEntities(30, 30, 30); + //Filter out all unrelated entity types. + for (int k=0;k1 && !keep) { + entity.remove(); + e.setCancelled(true); + //Bukkit.getPlayer("AaMay").sendMessage(ChatColor.GREEN+entity.getType().getName()+": Removed mob due to too many mobs near it."); + } else { + //We then attempt to see if despawn chancer occurs. + if (Math.random()<=despawnchancer) { + entity.remove(); + e.setCancelled(true); + //Bukkit.getPlayer("AaMay").sendMessage(ChatColor.YELLOW+entity.getType().getName()+": Removed mob due to despawner chance."); + } else { + //Now we attempt to spawn more things. + int k = currentnearby; + while (k10 && Math.random()<=chancer) { + Location testloc = entity.getLocation().add(Math.random()*4.0d-Math.random()*4.0d,Math.random()*4.0d,Math.random()*4.0d-Math.random()*4.0d); + if (Bukkit.getWorld("world").getBlockAt(testloc).getType()==Material.AIR) { + Bukkit.getWorld("world").spawnEntity(testloc, entity.getType()); + this.plugin.last_mob_random_time=Bukkit.getWorld("world").getFullTime(); + //Bukkit.getPlayer("AaMay").sendMessage(ChatColor.RED+entity.getType().getName()+": Spawned extra mob."); + /*int j=0; + while (j<10) { + Bukkit.getWorld("world").spawnEntity(testloc, entity.getType()); + j++; + }*/ + } + } + k++; + } + } + } + double levelsmult=1.5; + if (totallvs>20*levelsmult) { + if (totallvs<40*levelsmult) { + //Sometimes wear leather armor. Only for Skeletons and Zombies. + if (entity.getType()==EntityType.SKELETON || entity.getType()==EntityType.ZOMBIE) { + LivingEntity l = (LivingEntity) entity; + if (Math.random()>=0.15) { + l.getEquipment().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE)); + if (Math.random()>=0.25) { + l.getEquipment().setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); + if (Math.random()>=0.5) { + l.getEquipment().setHelmet(new ItemStack(Material.LEATHER_HELMET)); + if (Math.random()>=0.8) { + l.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS)); + } + } + } + } + } + } else + if (totallvs<60*levelsmult) { + //Wear leather armor a bit more often. Sometimes a chain piece here or there. Include a Wooden sword usually. + if (entity.getType()==EntityType.SKELETON || entity.getType()==EntityType.ZOMBIE) { + LivingEntity l = (LivingEntity) entity; + if (entity.getType()==EntityType.ZOMBIE) { + if (Math.random()<=0.65) { + l.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD)); + } + } + if (Math.random()>=0.25) { + if (Math.random()<=0.75) { + l.getEquipment().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE)); + } else { + l.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE)); + } + if (Math.random()>=0.45) { + if (Math.random()<=0.75) { + l.getEquipment().setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); + } else { + l.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS)); + } + if (Math.random()>=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setHelmet(new ItemStack(Material.LEATHER_HELMET)); + } else { + l.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET)); + } + if (Math.random()>=0.95) { + if (Math.random()<=0.75) { + l.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS)); + } else { + l.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS)); + } + } + } + } + } + } + } else + if (totallvs<80*levelsmult) { + //Wear chainmail armor a bit more often. Sometimes an iron piece here or there. Include an Iron sword sometimes, a wooden one usually. + if (entity.getType()==EntityType.SKELETON || entity.getType()==EntityType.ZOMBIE) { + LivingEntity l = (LivingEntity) entity; + if (entity.getType()==EntityType.ZOMBIE) { + if (Math.random()<=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD)); + } else { + l.getEquipment().setItemInHand(new ItemStack(Material.IRON_SWORD)); + } + } + } + if (Math.random()>=0.25) { + if (Math.random()<=0.75) { + l.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE)); + } else { + l.getEquipment().setChestplate(new ItemStack(Material.IRON_CHESTPLATE)); + } + if (Math.random()>=0.45) { + if (Math.random()<=0.75) { + l.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS)); + } else { + l.getEquipment().setLeggings(new ItemStack(Material.IRON_LEGGINGS)); + } + if (Math.random()>=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET)); + } else { + l.getEquipment().setHelmet(new ItemStack(Material.IRON_HELMET)); + } + if (Math.random()>=0.95) { + if (Math.random()<=0.75) { + l.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS)); + } else { + l.getEquipment().setBoots(new ItemStack(Material.IRON_BOOTS)); + } + } + } + } + } + } + } else + if (totallvs<100*levelsmult) { + //Wear iron armor a bit more often. Sometimes a diamond piece here or there. Include a Diamond sword sometimes, an iron one usually. + if (entity.getType()==EntityType.SKELETON || entity.getType()==EntityType.ZOMBIE) { + LivingEntity l = (LivingEntity) entity; + if (entity.getType()==EntityType.ZOMBIE) { + if (Math.random()<=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setItemInHand(new ItemStack(Material.IRON_SWORD)); + } else { + l.getEquipment().setItemInHand(new ItemStack(Material.DIAMOND_SWORD)); + } + } + } + if (Math.random()>=0.25) { + if (Math.random()<=0.75) { + l.getEquipment().setChestplate(new ItemStack(Material.IRON_CHESTPLATE)); + } else { + l.getEquipment().setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE)); + } + if (Math.random()>=0.45) { + if (Math.random()<=0.75) { + l.getEquipment().setLeggings(new ItemStack(Material.IRON_LEGGINGS)); + } else { + l.getEquipment().setLeggings(new ItemStack(Material.DIAMOND_LEGGINGS)); + } + if (Math.random()>=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setHelmet(new ItemStack(Material.IRON_HELMET)); + } else { + l.getEquipment().setHelmet(new ItemStack(Material.DIAMOND_HELMET)); + } + if (Math.random()>=0.95) { + if (Math.random()<=0.75) { + l.getEquipment().setBoots(new ItemStack(Material.IRON_BOOTS)); + } else { + l.getEquipment().setBoots(new ItemStack(Material.DIAMOND_BOOTS)); + } + } + } + } + } + } + } else + if (totallvs<120*levelsmult) { + //Wear diamond armor a bit more often. Sometimes an enchanted diamond piece here or there. Include a Golden sword sometimes, a diamond one usually. + if (entity.getType()==EntityType.SKELETON || entity.getType()==EntityType.ZOMBIE) { + LivingEntity l = (LivingEntity) entity; + if (entity.getType()==EntityType.ZOMBIE) { + if (Math.random()<=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setItemInHand(new ItemStack(Material.DIAMOND_SWORD)); + } else { + l.getEquipment().setItemInHand(new ItemStack(Material.GOLD_SWORD)); + } + } + } + if (Math.random()>=0.25) { + if (Math.random()<=0.75) { + l.getEquipment().setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE)); + } else { + ItemStack enchanted = new ItemStack(Material.DIAMOND_CHESTPLATE); + enchanted.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, (int)(Math.random()*4.0d)+1); + l.getEquipment().setChestplate(enchanted); + } + if (Math.random()>=0.45) { + if (Math.random()<=0.75) { + l.getEquipment().setLeggings(new ItemStack(Material.DIAMOND_LEGGINGS)); + } else { + ItemStack enchanted = new ItemStack(Material.DIAMOND_LEGGINGS); + enchanted.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, (int)(Math.random()*4.0d)+1); + l.getEquipment().setLeggings(enchanted); + } + if (Math.random()>=0.65) { + if (Math.random()<=0.75) { + l.getEquipment().setHelmet(new ItemStack(Material.DIAMOND_HELMET)); + } else { + ItemStack enchanted = new ItemStack(Material.DIAMOND_HELMET); + enchanted.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, (int)(Math.random()*4.0d)+1); + l.getEquipment().setHelmet(new ItemStack(Material.DIAMOND_HELMET)); + } + if (Math.random()>=0.95) { + if (Math.random()<=0.75) { + l.getEquipment().setBoots(new ItemStack(Material.DIAMOND_BOOTS)); + } else { + ItemStack enchanted = new ItemStack(Material.DIAMOND_BOOTS); + enchanted.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, (int)(Math.random()*4.0d)+1); + l.getEquipment().setBoots(new ItemStack(Material.DIAMOND_BOOTS)); + } + } + } + } + } + } + } + } + } + } + //} + /* + double distancefromcity = Math.abs(1627-entity.getLocation().getX())+Math.abs((67-entity.getLocation().getY()))+Math.abs(-267-entity.getLocation().getZ()); + double chancer=1.0d, increasechancer = 0.5d, despawnchancer = 32.0d; + if (distancefromcity>50000) { + chancer = 0.5d; + increasechancer=0.25d; + despawnchancer = 16.0d; + } else + if (distancefromcity>20000) { + chancer = 0.5d; + increasechancer=0.5d; + despawnchancer = 16.0d; + } else + if (distancefromcity>10000) { + chancer = 0.5d; + increasechancer=1.0d; + despawnchancer = 4.0d; + } else + if (distancefromcity>4000) { + chancer = 1.0d; + increasechancer=4.0d; + despawnchancer = 2.0d; + } else + if (distancefromcity>2000) { + chancer = 2.0d; + increasechancer=8.0d; + despawnchancer = 1.25d; + } else + if (distancefromcity>1000) { + chancer = 2.0d; + increasechancer=16.0d; + despawnchancer = 1.25d; + } else + if (distancefromcity>400) { + chancer = 16.0d; + increasechancer = 32.0d; + despawnchancer = 1.125d; + } else { + chancer = 32.0d; + increasechancer = 64.0d; + despawnchancer = 1.025d; + } + if (entity.getLocation().getY()>62) { + despawnchancer/=Math.random()*16.0d+1.0d; + } + if (entity.getLocation().getY()<50) { + chancer/=1.5d; + if (chancer<0.5d) { + chancer=0.5d; + } + for (int i=50;i>entity.getLocation().getY();i--) { + increasechancer/=1.03d; + despawnchancer*=1.03d; + } + if (increasechancer<0.01d) { + increasechancer=0.01d; + } + } + EntityType allowedtypes[] = {EntityType.BAT,EntityType.BLAZE,EntityType.CAVE_SPIDER,EntityType.ENDERMAN,EntityType.GHAST,EntityType.MAGMA_CUBE,EntityType.PIG_ZOMBIE,EntityType.SILVERFISH,EntityType.SLIME,EntityType.SPIDER,EntityType.ZOMBIE,EntityType.SKELETON,EntityType.CREEPER}; + boolean contains=false; + for (int i=0;i=3)) && spawners==0 && entity.getNearbyEntities(5, 5, 5).size()<50) { + //if (e.getSpawnReason()!=SpawnReason.CUSTOM && e.getLocation().getBlockY()!=Bukkit.getPlayer("AaMay").getLocation().getBlockY()) { + entity.remove(); + e.setCancelled(true); + //} + //Bukkit.getPlayer("sigonasr2").sendMessage(entity.getType()+" prevented from spawning."); + } + if (contains && (Bukkit.getWorld("world").getFullTime()-this.plugin.last_mob_random_time>10 || this.plugin.last_mob_random_time==0) && Math.random()*chancer<1.0d) { + this.plugin.last_mob_random_time=Bukkit.getWorld("world").getFullTime(); + Location testloc = entity.getLocation().add(Math.random()*4.0d-Math.random()*4.0d,Math.random()*4.0d,Math.random()*4.0d-Math.random()*4.0d); + if (Bukkit.getWorld("world").getBlockAt(testloc).getType()==Material.AIR) { + Bukkit.getWorld("world").spawnEntity(testloc, entity.getType()); + /*int j=0; + while (j<10) { + Bukkit.getWorld("world").spawnEntity(testloc, entity.getType()); + j++; + }*/ + /* + } + while (Math.random()*chancer<1.0d) { + chancer+=increasechancer; + testloc = entity.getLocation().add(Math.random()*4.0d-Math.random()*4.0d,Math.random()*4.0d,Math.random()*4.0d-Math.random()*4.0d); + if (Bukkit.getWorld("world").getBlockAt(testloc).getType()==Material.AIR && Bukkit.getWorld("world").getBlockAt(testloc.add(0,1,0)).getType()==Material.AIR) { + Bukkit.getWorld("world").spawnEntity(testloc, entity.getType()); + /*int j=0; + while (j<10) { + Bukkit.getWorld("world").spawnEntity(entity.getLocation().add(Math.random()*4.0d-Math.random()*4.0d,Math.random()*4.0d-Math.random()*4.0d,Math.random()*4.0d-Math.random()*4.0d), entity.getType()); + j++; + }*/ + /* } + } + } + */ + + } + } + if (entity.getWorld().getName().compareTo("world_nether")==0) { + if (entity.getType()==EntityType.PIG_ZOMBIE) { + if (Math.random()<=0.005) { + //0.5% chance of a magma cube spawning. + Bukkit.getWorld("world_nether").spawnEntity(entity.getLocation(), EntityType.MAGMA_CUBE); + } + if (Math.random()<=0.0003125) { + //0.03125% chance of a ghast spawning. + Bukkit.getWorld("world_nether").spawnEntity(entity.getLocation(), EntityType.GHAST); + } + } + } + if (entity.getWorld().getName().compareTo("world_the_end")==0) { + if (entity.getType()==EntityType.ENDER_DRAGON) { + LivingEntity l = (LivingEntity)entity; + l.setMaxHealth(l.getMaxHealth()*4); + l.setHealth(l.getMaxHealth()); + } + } + if (entity.getType()==EntityType.EXPERIENCE_ORB) { + Bukkit.getWorld("world").spawnEntity(entity.getLocation(),entity.getType()); + } + if (e.getSpawnReason()==SpawnReason.BREEDING) { + //Spawn reason for later spawning. + //Check for this entity in list of animals that have been interacted with. + int slot=-1; + Player p=null; + String owner1="",owner2=""; + List checklist = e.getEntity().getNearbyEntities(3, 3, 3); + for (int i=0;inearby=e.getEntity().getNearbyEntities(25, 25, 25); + int countamount=0; + for (int i=0;i=10) { + if (Math.random()<=0.25 && countamount<50) { + Chicken newent = (Chicken)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.CHICKEN); + newent.setBaby(); + } else + if (Math.random()<=0.25 && countamount<50) { + Chicken newent = (Chicken)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.CHICKEN); + newent.setBaby(); + newent = (Chicken)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.CHICKEN); + newent.setBaby(); + } + } + } + if (e.getEntity().getType()==EntityType.PIG) { + this.plugin.gainMoneyExp(p,"Breeder",0.01*mult,2*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + Pig newent = (Pig)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.PIG); + newent.setBaby(); + } else + if (Math.random()<=0.25 && countamount<50) { + Pig newent = (Pig)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.PIG); + newent.setBaby(); + newent = (Pig)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.PIG); + newent.setBaby(); + } + } + } + if (e.getEntity().getType()==EntityType.SHEEP) { + this.plugin.gainMoneyExp(p,"Breeder",0.01*mult,2*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + Sheep newent = (Sheep)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.SHEEP); + newent.setBaby(); + newent.setColor(((Sheep)e.getEntity()).getColor()); + } else + if (Math.random()<=0.25 && countamount<50) { + Sheep newent = (Sheep)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.SHEEP); + newent.setBaby(); + newent.setColor(((Sheep)e.getEntity()).getColor()); + newent = (Sheep)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.SHEEP); + newent.setBaby(); + newent.setColor(((Sheep)e.getEntity()).getColor()); + } + } + } + if (e.getEntity().getType()==EntityType.COW) { + this.plugin.gainMoneyExp(p,"Breeder",0.015*mult,2*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + Cow newent = (Cow)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.COW); + newent.setBaby(); + } else + if (Math.random()<=0.25 && countamount<50) { + Cow newent = (Cow)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.COW); + newent.setBaby(); + newent = (Cow)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.COW); + newent.setBaby(); + } + } + } + if (e.getEntity().getType()==EntityType.OCELOT) { + this.plugin.gainMoneyExp(p,"Breeder",0.02*mult,4*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + Ocelot newent = (Ocelot)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.OCELOT); + newent.setBaby(); + newent.setOwner(((Ocelot)e.getEntity()).getOwner()); + newent.setCatType(((Ocelot)e.getEntity()).getCatType()); + } else + if (Math.random()<=0.25 && countamount<50) { + Ocelot newent = (Ocelot)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.OCELOT); + newent.setBaby(); + newent.setOwner(((Ocelot)e.getEntity()).getOwner()); + newent.setCatType(((Ocelot)e.getEntity()).getCatType()); + newent = (Ocelot)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.OCELOT); + newent.setBaby(); + newent.setOwner(((Ocelot)e.getEntity()).getOwner()); + newent.setCatType(((Ocelot)e.getEntity()).getCatType()); + } + } + } + if (e.getEntity().getType()==EntityType.WOLF) { + this.plugin.gainMoneyExp(p,"Breeder",0.03*mult,5*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + Wolf newent = (Wolf)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.WOLF); + newent.setBaby(); + newent.setOwner(((Wolf)e).getOwner()); + newent.setCollarColor(((Wolf)e.getEntity()).getCollarColor()); + } else + if (Math.random()<=0.25 && countamount<50) { + Wolf newent = (Wolf)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.WOLF); + newent.setBaby(); + newent.setOwner(((Wolf)e).getOwner()); + newent.setCollarColor(((Wolf)e.getEntity()).getCollarColor()); + newent = (Wolf)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.WOLF); + newent.setBaby(); + newent.setOwner(((Wolf)e).getOwner()); + newent.setCollarColor(((Wolf)e.getEntity()).getCollarColor()); + } + } + } + if (e.getEntity().getType()==EntityType.MUSHROOM_COW) { + this.plugin.gainMoneyExp(p,"Breeder",0.15*mult,20*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + MushroomCow newent = (MushroomCow)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.MUSHROOM_COW); + newent.setBaby(); + } else + if (Math.random()<=0.25 && countamount<50) { + MushroomCow newent = (MushroomCow)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.MUSHROOM_COW); + newent.setBaby(); + newent = (MushroomCow)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.MUSHROOM_COW); + newent.setBaby(); + } + } + } + if (e.getEntity().getType()==EntityType.HORSE) { + this.plugin.gainMoneyExp(p,"Breeder",1.20*mult,50*mult); + if (this.plugin.getJobLv("Breeder", p)>=10) { + if (Math.random()<=0.25 && countamount<50) { + Horse newent = (Horse)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.HORSE); + newent.setBaby(); + } else + if (Math.random()<=0.25 && countamount<50) { + Horse newent = (Horse)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.HORSE); + newent.setBaby(); + newent = (Horse)Bukkit.getWorld("world").spawnEntity(e.getLocation(), EntityType.HORSE); + newent.setBaby(); + } + } + } + } + } + } + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent e) { + Player p = e.getPlayer(); + //p.sendMessage("Block broke."); + //p.sendMessage("Has name: "+p.getItemInHand().getItemMeta().hasDisplayName()); + //p.sendMessage("Name is: "+p.getItemInHand().getItemMeta().getDisplayName()); + int myData=this.plugin.getPlayerDataSlot(p); + if (p!=null) { + if (e.getBlock().getType()==Material.STONE && p.getLocation().getY()<=50) { + //We are mining underground. + //Check if we need to spawn Charge Zombie II's. + //Find our player data. + int pdata_slot=0; + for (int i=0;i-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(20+j,k,spread+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch1=true; + } + } + } + } + if (!torch1) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(10+j,k,spread+l)); + if (b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e1 = Bukkit.getWorld("world").spawnEntity(p.getLocation().add(10,0,spread), EntityType.ZOMBIE); + } + torch2=false; + spread = (int)(Math.random()*10); + for (int j=5;j>-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(-10+j,k,spread+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch2=true; + } + } + } + } + if (!torch2) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(-10+j,k,spread+l)); + if (b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e2 = Bukkit.getWorld("world").spawnEntity(p.getLocation().add(-10,0,spread), EntityType.ZOMBIE); + } + spread = (int)(Math.random()*10); + for (int j=5;j>-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(spread+j,k,10+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch3=true; + } + } + } + } + if (!torch3) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(spread+j,k,10+l)); + if (b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e3 = Bukkit.getWorld("world").spawnEntity(p.getLocation().add(spread,0,10), EntityType.ZOMBIE); + } + spread = (int)(Math.random()*10); + for (int j=5;j>-6;j--) { + for (int k=2;k>-1;k--) { + for (int l=5;l>-6;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(spread+j,k,-10+l)); + if (b.getType()==Material.TORCH || b.getType()==Material.GLOWSTONE || b.getType()==Material.COMMAND || b.getType()==Material.MOSSY_COBBLESTONE) { + torch4=true; + } + } + } + } + if (!torch4) { + int lb1=(int)(Math.random()*5)+1,lb2=(int)(Math.random()*5)+1,ub1=-(int)(Math.random()*6)+1,ub2=-(int)(Math.random()*6)+1; + for (int j=lb1;j>ub1;j--) { + for (int k=2;k>-1;k--) { + for (int l=lb2;l>-ub2;l--) { + Block b =Bukkit.getWorld("world").getBlockAt(p.getLocation().add(spread+j,k,-10+l)); + if (b.getType()!=Material.BEDROCK && b.getType()!=Material.MOB_SPAWNER && b.getType()!=Material.ENDER_PORTAL && b.getType()!=Material.ENDER_PORTAL_FRAME) { + b.setType(Material.AIR); + } + } + } + } + e4 = Bukkit.getWorld("world").spawnEntity(p.getLocation().add(spread,0,-20), EntityType.ZOMBIE); + } + if (!torch1) { + Zombie z1 = (Zombie)e1; + z1.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z1.setCustomNameVisible(false); + z1.setTarget(p); + } + if (!torch2) { + Zombie z2 = (Zombie)e2; + z2.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z2.setCustomNameVisible(false); + z2.setTarget(p); + } + if (!torch3) { + Zombie z3 = (Zombie)e3; + z3.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z3.setCustomNameVisible(false); + z3.setTarget(p); + } + if (!torch4) { + Zombie z4 = (Zombie)e4; + z4.setCustomName(ChatColor.GOLD+"Charge Zombie II"); + z4.setCustomNameVisible(false); + z4.setTarget(p); + } + } + } + if (e.getBlock().getType()==Material.EMERALD_ORE || + e.getBlock().getType()==Material.DIAMOND_ORE || + e.getBlock().getType()==Material.GOLD_ORE || + e.getBlock().getType()==Material.IRON_ORE) { + /* + if (Math.random()<=0.01) { + //1% chance of getting a book. + ItemStack book = new ItemStack(Material.WRITTEN_BOOK); + BookMeta bookdata = (BookMeta)book.getItemMeta(); + int choosebook = (int)(Math.random()*9.0d); + switch (choosebook) { + case 0:{ + bookdata.setAuthor("Steve"); + bookdata.setTitle("Dangers of the Nether"); + bookdata.addPage("Dangers of the Nether\n"+ChatColor.ITALIC+" by Steve\n======\n"+ChatColor.RESET+"It didn't take me long to realize where we were. It was dangerous, very hot, and lots of torturous screams could be heard everywhere. I barely had time","to take it all in before a huge fireball was shot in my direction. I quickly looked to my side to find a convenient safe passage and hid there for a few minutes. I guess I was in there longer than I thought, I ended","up falling asleep and waking up to notice there was something scary on the wall.\n\n"+ChatColor.ITALIC+"\"TURN AND LEAVE NOW. DANGEROUS TO STAY. REAL WORLD HAS WHAT YOU ARE LOOKING FOR. I ONLY REMEMBER THE 1ST X POSITION...",ChatColor.ITALIC+"...IT WAS 7! I AM *POSITIVE*\""+ChatColor.RESET+"\n\nI did not know what to think. The 1st X position? I quickly remembered the 7 and sprinted out of the nether portal. And to think that was *THE END* of my adventures..."); + }break; + case 1:{ + bookdata.setAuthor("Lacey"); + bookdata.setTitle("A Hole in the Flower Garden"); + bookdata.addPage("A Hole in the Flower Garden\n"+ChatColor.ITALIC+" by Lacey\n======\n"+ChatColor.RESET+"It was a lovely day to pick flowers in the garden, they just finished blooming fully. I was so excited to pick them, but I didn't do so until","after I've taken in all the wonderful scents! Smelling all the flowers and wonderful smells of plants and trees and nature and grass. It was perfect. I was mindlessly walking along this prairie when I stumbled.","I fell, and fell, and fell. I hit the bottom of a ravine. It didn't even occur to me I would just walk into one. I took some minor damage, but when I got up, I noticed something strange.","There were two or three zombies gathered around a wall, etching something into it. I went over to read it once the zombies walked away. I saw on the wall:\n\n"+ChatColor.ITALIC+"X-2:6 <--END","It looked cryptic to me, but why would they write that on the wall? I quickly scribbled it down on a notepad I had in my pocket and started climbing out of the ravine to tend to my lovely flowers. What a day!"); + }break; + case 2:{ + bookdata.setAuthor("Jimmy"); + bookdata.setTitle("Messages in Music"); + bookdata.addPage("Messages in Music\n"+ChatColor.ITALIC+" by Jim"+"\n======"+ChatColor.RESET+"\nI popped out the disk from my Jukebox to put in another, I could jam to these all day! As I was looking through my collection for something to listen to","I found a really bent up disk. 'No way this could still play', I thought to myself. I put it in, and it crackled and snarled, but it was indeed playing! At first I heard some faint resemblence of music, but then suddenly,","a hiss, an explosion, and then 'CREEEEEEEEE----- 7X XSSSSSSSSSS 3RD EEEEEEE' mental images appeared in my head, but the 7X and 3RD stood out the most. It's like I was seeing them in my head while hearing something else!","I couldn't stand up anymore, or think. I forcibly reached up with my weak hand to find the eject button on the player and when I found the familiar nub in the button, pressed down on it and out popped the disk, hitting my face,","but putting me back into reality. Something was telling me that the 3RD and 7X was important. But I couldn't quite put my tongue on it."); + }break; + case 3:{ + bookdata.setAuthor("Creeper"); + bookdata.setTitle("HISS"); + bookdata.addPage("Y do i exisssst. nobody knowssss. i just want a hugssssss, HUGSSSSSSS. but i don't know Y i exist. there's no Y in the first position. it'sssss jusssst two digitssssss.... SSSSSSSSS. *THE END*"); + }break; + case 4:{ + bookdata.setAuthor("Marco"); + bookdata.setTitle("The Hunt for a Dragon"); + bookdata.addPage("The Hunt for a Dragon\n"+ChatColor.ITALIC+" by Marco"+"\n======"+ChatColor.RESET+"\nThere exists a rumor that a mythical dragon could be found in the depths of our world. It is even said he doesn't exist in OUR world, but ANOTHER world altogether!","That my friends already boggles me, but where the heck would I go to find it then? I have been told he exists, and I know he is. I believe deep in my heart. I searched day and night under and over ground.","One day I found something strange in the ground. It was pink wool, in the middle of a cave on the ground. It even said something, but I couldn't tell from so close up. So I literally dug all the way to the surface, keeping the boundaries","of that word uncovered the whole way up. When I got to the top and looked down, I was relieved to find it was made out of markings I could discern. It said: 'Y: X3?' It was definitely a weird group of symbols, but I have a strong feeling"," that it is directly linked with that dragon I am trying to hunt down. Maybe I can gather more clues and try to decipher the location of this thing."); + }break; + case 5:{ + bookdata.setAuthor("Steve"); + bookdata.setTitle("Cooking Food"); + bookdata.addPage("Cooking Food\n"+ChatColor.ITALIC+" by Steve"+"\n======"+ChatColor.RESET+"\nIt was a bright and rather typical sunny day in the Minecraft world. I don't actually think it was very hot either. I just managed to catch a few fish and was cooking them up.","It wasn't long before I got distracted and heard a funny noise. It was an ocelote. Lucky me, an ocelote has smelled the scent of my fish! I grab a few and hold it out for the ocelote. It slowly creeps over, and then takes it and runs from me.","I thought it was full and finished cooking the rest of the fish. However, the ocelote returned a few minutes later with a neatly-folded piece of paper in its mouth. It came up to me and set it down, like it was some message just for me.","I opened it up and it read:\n\n"+ChatColor.ITALIC+"Don't let the fish get to your tongue! If you know what's wise, you will investigate further. The 3rd position of Y being the number 5."+ChatColor.RESET+"\n\n","I didn't notice the ocelote run away, but I knew something FISHY was going on. That message seemed important for some reason, I've seen similar cryptic messages before... Perhaps I'll hold onto this in case I need it in the future."); + }break; + case 6:{ + bookdata.setAuthor("Fredric"); + bookdata.setTitle("Math Behind the Void"); + bookdata.addPage("Math Behind the Void\n"+ChatColor.ITALIC+" by Fredric"+"\n======"+ChatColor.RESET+"\nThis book describes a few principles that the void in this world follows. While no one has actually seen the void, we have found a few theories and rules regarding them.","1. The Void has a Light Level of -14. The Void actually absorbs light coming from light sources and thus, if The Void is ever opened to the real world, would suck up the light from it.","2. The Void always has a volume of 50,000m, being 50m x 20m x 50m. This means that The Void, regardless of location is always the same exact size. This would conclude to us that The Void is co-existing and multiple instaces of it may exist in the same realm.","3. Any Entity entering The Void will not be able to escape The Void as time passes much more quickly inside The Void. This means Entities that enter The Void feel accelerated processes and cannot combat it, since the time outside is behind them.","4. A point of connection between The Void and other dimensions has to exist, for The Void to exist. Speculation has it that one of these points has been leaked into the world, and is accessible by us directly. After further research,","we have learned that one of these points is located on the 1st respective numeral along our Z axis with the number 4. It has also been proven that this number has to be negative as the other two sources interacting with The Void are positive."); + }break; + case 7:{ + bookdata.setAuthor("Robert"); + bookdata.setTitle("TNT"); + bookdata.addPage("TNT\n"+ChatColor.ITALIC+" by Robert"+"\n======"+ChatColor.RESET+"\nYou know, the easiest way to clear a tunnel is using an item called TNT. It is a rather small block, but it is loaded with gunpowder. When lit by an external force, it ignites","with the force of 5 Creeper explosions to clear whole caves out. Well lo and behold one day I discovered a rather strange abandoned mineshaft. It wasn't normal for sure, because there were green vines everywhere and lots of strange doors.","It was like somebody lived here ages ago, and I am discovering the ruins of such a place. Inoperable levers, a few mobs I have to kill here and there that have made this area their designated home. It was a mess. But I did discover that","someone was trying to find what we would call 'The End'. It's a magical place, and I believe with the right amount of effort, we can find it someday too. He had scribbled the coordinates of the location he was trying to reach.","However, most of it is faded out and I can only tell faintly the remains of it: \n\n"+ChatColor.ITALIC+"X:---\nY:---\nZ:--7-"+ChatColor.RESET+"\n\nYep, that's about it.","Hopefully by me recording this data, someone else can fill in the remaining numbers and we can all find The End together. Someday..."); + }break; + case 8:{ + bookdata.setAuthor("Joshua"); + bookdata.setTitle("Fourside"); + bookdata.addPage("Fourside\n"+ChatColor.ITALIC+" by Joshua"+"\n======"+ChatColor.RESET+"\n"+ChatColor.DARK_BLUE+"ABANDONED PROJECT"+ChatColor.RESET+". A city that would be developed with the best technology and the highest standards. It would","succeed every single Minecraft city that has ever been built. Casinos, diamond-lined walkways, towering skyscrapers as far as the eye can see. Museums, Libraries, Educational Institutions. This mega-city would be able to hold","and sustain every single Minecrafter in existence. But no, something went terribly wrong. Our engineering team finally developed the perfect transportation system and we were wiring it up to our fusion power plant.","Something went horribly wrong. The Fusion power plant started self-combusting itself, leaving behind hyper-cold atoms. This caused nucleic waste to interact with the environment around itself and freezing the whole world as we knew it.","The city idea as we knew it was scrapped, and we would wait 2000 years before we could attempt this again. We wrote plans for a much more portable solution and have named it 'Twoside' and archived it appropriately.","Maybe someone will pick up that book and be able to make the future bright with a mini version of Fourside. That being said, we left the 3rd slot of the Z position of our city at 7. This should give you enough clue as to where NOT to build."); + }break; + } + book.setItemMeta(bookdata); + //p.setItemInHand(book); + p.getInventory().addItem(book); + p.updateInventory(); + p.sendMessage(ChatColor.LIGHT_PURPLE+"You feel a magical presence get inserted into your inventory."); + }*/ + } + if (this.plugin.PlayerinJob(p, "Builder")) { + this.plugin.playerdata_list.get(myData).BadInteract(e.getBlock().getType()); + } + if (this.plugin.PlayerinJob(p, "Woodcutter")) { + if (e.getBlock().getType()==Material.LOG) { + if (p.getItemInHand().getType()==Material.WOOD_AXE || p.getItemInHand().getType()==Material.STONE_AXE || p.getItemInHand().getType()==Material.IRON_AXE || p.getItemInHand().getType()==Material.GOLD_AXE || p.getItemInHand().getType()==Material.DIAMOND_AXE) { + //p.sendMessage("Cut down wood w/axe."); + this.plugin.gainMoneyExp(p,"Woodcutter",0.025,2); + } else { + //p.sendMessage("Cut down wood."); + this.plugin.gainMoneyExp(p,"Woodcutter",0.01,1); + } + } + } + if (this.plugin.PlayerinJob(p, "Miner")) { + if (this.plugin.getJobLv("Miner", p)>=10) { + //Half chance to set the durability back by one. + if (p.getItemInHand().getType()==Material.WOOD_PICKAXE || + p.getItemInHand().getType()==Material.STONE_PICKAXE || + p.getItemInHand().getType()==Material.GOLD_PICKAXE || + p.getItemInHand().getType()==Material.IRON_PICKAXE || + p.getItemInHand().getType()==Material.DIAMOND_PICKAXE) { + if (p.getItemInHand().getDurability()>0) { + if (Math.random()>=0.5) { + p.getItemInHand().setDurability((short)(p.getItemInHand().getDurability()-1)); + p.updateInventory(); + } + } + } + } + boolean has_silktouch=false; + if (!p.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { + has_silktouch=false; + } else { + has_silktouch=true; + } + if (this.plugin.playerdata_list.get(myData).GoodInteract()) { + if (e.getBlock().getType()==Material.STONE) { + this.plugin.gainMoneyExp(p,"Miner",0.0025,1); + } else + if (e.getBlock().getType()==Material.NETHERRACK) { + this.plugin.gainMoneyExp(p,"Miner",0.005,1); + } else + if (e.getBlock().getType()==Material.COAL_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.0125,3); + } else + if (e.getBlock().getType()==Material.GLOWSTONE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.015,3); + } else + if (e.getBlock().getType()==Material.SANDSTONE) { + this.plugin.gainMoneyExp(p,"Miner",0.015,4); + } else + if (e.getBlock().getType()==Material.NETHER_BRICK) { + this.plugin.gainMoneyExp(p,"Miner",0.02,3); + } else + if (e.getBlock().getType()==Material.QUARTZ_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.025,4); + } else + if (e.getBlock().getType()==Material.LAPIS_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.03,5); + } else + if (e.getBlock().getType()==Material.MOSSY_COBBLESTONE) { + this.plugin.gainMoneyExp(p,"Miner",0.0375,8); + } else + if (e.getBlock().getType()==Material.IRON_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.0375,6); + } else + if ((e.getBlock().getType()==Material.REDSTONE_ORE || e.getBlock().getType()==Material.GLOWING_REDSTONE_ORE) && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.05,9); + } else + if (e.getBlock().getType()==Material.OBSIDIAN) { + this.plugin.gainMoneyExp(p,"Miner",0.0625,10); + } else + if (e.getBlock().getType()==Material.GOLD_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.0975,12); + } else + if (e.getBlock().getType()==Material.DIAMOND_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.3125,60); + } else + if (e.getBlock().getType()==Material.EMERALD_ORE && !has_silktouch) { + this.plugin.gainMoneyExp(p,"Miner",0.7625,160); + } + } + } + if (this.plugin.PlayerinJob(p, "Digger")) { + if (this.plugin.getJobLv("Digger", p)>=20) { + //Half chance to set the durability back by one. + if (p.getItemInHand().getType()==Material.WOOD_SPADE || + p.getItemInHand().getType()==Material.STONE_SPADE || + p.getItemInHand().getType()==Material.GOLD_SPADE || + p.getItemInHand().getType()==Material.IRON_SPADE || + p.getItemInHand().getType()==Material.DIAMOND_SPADE) { + if (p.getItemInHand().getDurability()>0) { + if (Math.random()>=0.66) { + p.getItemInHand().setDurability((short)(p.getItemInHand().getDurability()-1)); + p.updateInventory(); + } + } + } + } else + if (this.plugin.getJobLv("Digger", p)>=10) { + //Half chance to set the durability back by one. + if (p.getItemInHand().getType()==Material.WOOD_SPADE || + p.getItemInHand().getType()==Material.STONE_SPADE || + p.getItemInHand().getType()==Material.GOLD_SPADE || + p.getItemInHand().getType()==Material.IRON_SPADE || + p.getItemInHand().getType()==Material.DIAMOND_SPADE) { + if (p.getItemInHand().getDurability()>0) { + if (Math.random()>=0.5) { + p.getItemInHand().setDurability((short)(p.getItemInHand().getDurability()-1)); + p.updateInventory(); + } + } + } + } + if (this.plugin.playerdata_list.get(myData).GoodInteract()) { + if (e.getBlock().getType()==Material.DIRT) { + this.plugin.gainMoneyExp(p,"Digger",0.005,1); + } + if (e.getBlock().getType()==Material.GRASS) { + this.plugin.gainMoneyExp(p,"Digger",0.005,2); + } + if (e.getBlock().getType()==Material.SAND) { + this.plugin.gainMoneyExp(p,"Digger",0.01,2); + } + if (e.getBlock().getType()==Material.GRAVEL) { + this.plugin.gainMoneyExp(p,"Digger",0.02,5); + } + if (e.getBlock().getType()==Material.SOUL_SAND) { + this.plugin.gainMoneyExp(p,"Digger",0.04,8); + } + if (e.getBlock().getType()==Material.CLAY) { + this.plugin.gainMoneyExp(p,"Digger",0.05,10); + } + } + } + //p.sendMessage("You broke the "+e.getBlock().getType()+", Data: "+e.getBlock().getData()); + if (this.plugin.PlayerinJob(p, "Farmer")) { + if (e.getBlock().getType()==Material.SUGAR_CANE_BLOCK) { + this.plugin.gainMoneyExp(p,"Farmer",0.00,1); + } + if (e.getBlock().getType()==Material.CROPS && e.getBlock().getData()==7) { + this.plugin.gainMoneyExp(p,"Farmer",0.01,2); + } + if (e.getBlock().getType()==Material.CARROT && e.getBlock().getData()==7) { + this.plugin.gainMoneyExp(p,"Farmer",0.01,2); + } + if (e.getBlock().getType()==Material.CACTUS) { + this.plugin.gainMoneyExp(p,"Farmer",0.00,3); + } + if (e.getBlock().getType()==Material.POTATO && e.getBlock().getData()==7) { + this.plugin.gainMoneyExp(p,"Farmer",0.03,3); + } + if (e.getBlock().getType()==Material.BROWN_MUSHROOM) { + this.plugin.gainMoneyExp(p,"Farmer",0.00,1); + } + if (e.getBlock().getType()==Material.RED_MUSHROOM) { + this.plugin.gainMoneyExp(p,"Farmer",0.00,1); + } + if (e.getBlock().getType()==Material.NETHER_WARTS && e.getBlock().getData()==3) { + this.plugin.gainMoneyExp(p,"Farmer",0.00,1); + } + /*if (e.getBlock().getType()==Material.PUMPKIN) { + this.plugin.gainMoneyExp(p,"Farmer",0.00,1); + }*/ + if (e.getBlock().getType()==Material.MELON_BLOCK) { + this.plugin.gainMoneyExp(p,"Farmer",0.10,10); + } + } + boolean hasfortune; + hasfortune = (p.getItemInHand().getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS)>0)?true:false; + //Check blocks around it. If it's a spawner, it's protected until the spawner is destroyed. + for (int x=-4;x<4;x++) { + for (int y=0;y<2;y++) { + for (int z=-4;z<4;z++) { + if ((x!=0 || y!=0 || z!=0) && p.getWorld().getBlockAt(e.getBlock().getLocation().add(x,y,z)).getType()==Material.MOB_SPAWNER && e.getBlock().getType()!=Material.MOB_SPAWNER) { + e.setCancelled(true); + p.sendMessage("A Mob Spawner force field protects this block from being destroyed."); + } + } + } + } + if (e.getBlock().getType()==Material.IRON_ORE) { + e.setExpToDrop(1); + } + if (e.getBlock().getType()==Material.GOLD_ORE) { + e.setExpToDrop(1); + } + if (e.getBlock().getType()==Material.REDSTONE_ORE) { + e.setExpToDrop(3); + } + if (e.getBlock().getType()==Material.LAPIS_ORE) { + e.setExpToDrop(3); + } + if (e.getBlock().getType()==Material.DIAMOND_ORE) { + e.setExpToDrop(12); + } + if (e.getBlock().getType()==Material.EMERALD_ORE) { + e.setExpToDrop(28); + } + if (e.getBlock().getType()==Material.MOB_SPAWNER) { + p.setLevel(p.getLevel()+30); + try { + Iterator effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.SPEED.getName())==0) { + p.removePotionEffect(PotionEffectType.SPEED); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 360000, nexteffect.getAmplifier()+2, true)); + } + if (nexteffect.getType().getName().compareTo(PotionEffectType.HEALTH_BOOST.getName())==0) { + p.removePotionEffect(PotionEffectType.HEALTH_BOOST); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST, 360000, nexteffect.getAmplifier()+1, true)); + } + /*if (nexteffect.getType().getName().compareTo(PotionEffectType.JUMP.getName())==0) { + p.removePotionEffect(PotionEffectType.JUMP); + p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 360000, nexteffect.getAmplifier()+2, true)); + }*/ + effects.remove(); + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while initializing player speed."); + } + p.removePotionEffect(PotionEffectType.WATER_BREATHING); + p.removePotionEffect(PotionEffectType.FAST_DIGGING); + p.removePotionEffect(PotionEffectType.INCREASE_DAMAGE); + //p.removePotionEffect(PotionEffectType.NIGHT_VISION); + p.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 360000, 1, true)); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST, 360000, 0, true)); + p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 360000, 0, true)); + p.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 360000, 0, true)); + //p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, 360000, 0, true)); + //p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 360000, 1, true)); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 360000, 1, true)); + } + if ((e.getBlock().getX()==1616 && e.getBlock().getZ()>=53 && e.getBlock().getZ()<=64) || (e.getBlock().getX()==1627 && e.getBlock().getZ()>=53 && e.getBlock().getZ()<=64) || (e.getBlock().getZ()==53 && e.getBlock().getX()>=1616 && e.getBlock().getX()<=1627) || (e.getBlock().getZ()==64 && e.getBlock().getX()>=1616 && e.getBlock().getX()<=1627)) { + e.setCancelled(true); + } + if ((e.getBlock().getX()==1585 && e.getBlock().getZ()>=24 && e.getBlock().getZ()<=39) || (e.getBlock().getX()==1600 && e.getBlock().getZ()>=24 && e.getBlock().getZ()<=39) || (e.getBlock().getZ()==24 && e.getBlock().getX()>=1585 && e.getBlock().getX()<=1600) || (e.getBlock().getZ()==39 && e.getBlock().getX()>=1585 && e.getBlock().getX()<=1600)) { + e.setCancelled(true); + } + if (this.plugin.getConfig().getBoolean("spleefinsession")==true && (this.plugin.getConfig().getString("spleefrequestaplayer").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestbplayer").compareTo(p.getName())==0)) { + this.plugin.spleef_last_broken_block=p.getPlayerTime(); + } + if (this.plugin.getConfig().getBoolean("spleef4insession")==true && (this.plugin.getConfig().getString("spleefrequesta4player").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestb4player").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestc4player").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestd4player").compareTo(p.getName())==0)) { + this.plugin.spleef4_last_broken_block=p.getPlayerTime(); + } + if (p.getItemInHand()!=null && p.getItemInHand().getItemMeta()!=null && p.getItemInHand().getItemMeta().hasDisplayName()==true && p.getItemInHand().getItemMeta().getDisplayName().compareTo("Spleef Wooden Shovel")==0) { + p.getItemInHand().setDurability((short)0); + //p.sendMessage("Got in."); + p.updateInventory(); + } + if (p.getItemInHand()!=null && p.getItemInHand().getItemMeta()!=null && p.getItemInHand().getItemMeta().hasDisplayName()==true && p.getItemInHand().getItemMeta().getDisplayName().compareTo("Spleef Stone Shovel")==0) { + p.getItemInHand().setDurability((short)0); + //p.sendMessage("Got in."); + p.updateInventory(); + } + } + return; + } + + @EventHandler + public void onItemDrop(PlayerDropItemEvent e) { + //If the player is a support, drop it with only 1 second of wait time. + Player p = e.getPlayer(); + if (this.plugin.PlayerinJob(p, "Support")) { + //This item drops with half the pickup speed of normal items. + e.getItemDrop().setPickupDelay(20); + this.plugin.supportstackslist.add(e.getItemDrop()); + } + } + + @EventHandler + public void onItemPickup(PlayerPickupItemEvent e) { + Player p = e.getPlayer(); + if (this.plugin.supportstackslist.contains(e.getItem())) { + boolean alreadyhas=false; + for (int i=0;ip.getMaxHealth()) { + p.setHealth(p.getMaxHealth()); + } else { + p.setHealth(p.getHealth()+24); + } + } + } + } + + @EventHandler + public void onPotionSplash(PotionSplashEvent e) { + try { + Iterator entities = e.getAffectedEntities().iterator(); + Player shooter; + if (e.getPotion().getShooter().getType() == EntityType.PLAYER) { + shooter=(Player)e.getPotion().getShooter(); + if (this.plugin.PlayerinJob(shooter,"Support")) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Shooter is "+shooter.getName()); + while (entities.hasNext()) { + LivingEntity next = entities.next(); + if (next.getType() == EntityType.PLAYER) { + final Player p = (Player)next; + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + } + },5); + if (p!=shooter) { + //Award the support. + //Bukkit.getPlayer("sigonasr2").sendMessage(p.getName()+" got hit by your potion!"); + //Iterator effects = e.getPotion().getEffects().iterator(); + try { + Collection effects = e.getPotion().getEffects(); + for (PotionEffect nextpotioneffect : effects) { + //shooter.sendMessage(nextpotioneffect.getType().getName()+" is the potion effect."); + if (nextpotioneffect.getType().getName().compareTo("NIGHT_VISION")==0) { + this.plugin.gainMoneyExp(shooter,"Support",0.10,5); + } + if (nextpotioneffect.getType().getName().compareTo("SPEED")==0) { + this.plugin.gainMoneyExp(shooter,"Support",0.15,6); + for (int i=0;i0) { + this.plugin.gainMoneyExp(shooter,"Support",0.60,30); + } + this.plugin.gainMoneyExp(shooter,"Support",0.25,12); + } + if (nextpotioneffect.getType().getName().compareTo("HEAL")==0) { + if (p.getHealth()/p.getMaxHealth()<=0.30) { + this.plugin.gainMoneyExp(shooter,"Support",0.60,30); + //shooter.sendMessage("This is a big heal."); + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + } + this.plugin.gainMoneyExp(shooter,"Support",0.30,14); + if (p.getHealth()+12>p.getMaxHealth()) { + p.setHealth(p.getMaxHealth()); + } else { + p.setHealth(p.getHealth()+12); + } + //shooter.sendMessage("This is a heal."); + } + if (nextpotioneffect.getType().getName().compareTo("REGENERATION")==0) { + if (p.getHealth()/p.getMaxHealth()<=0.30) { + this.plugin.gainMoneyExp(shooter,"Support",0.60,30); + } + this.plugin.gainMoneyExp(shooter,"Support",0.30,14); + //shooter.sendMessage("This is a heal."); + } + } + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible for a support while attempting a splash potion."); + } + /*while (effects.hasNext()) { + PotionEffect nextpotioneffect = effects.next(); + shooter.sendMessage(nextpotioneffect.getType().getName()+" is the potion effect."); + if (nextpotioneffect.getType().getName().compareTo("NIGHT_VISION")==0) { + this.plugin.gainMoneyExp(shooter,"Support",0.10,5); + } + if (nextpotioneffect.getType().getName().compareTo("SPEED")==0) { + this.plugin.gainMoneyExp(shooter,"Support",0.15,6); + for (int i=0;i0) { + this.plugin.gainMoneyExp(shooter,"Support",0.60,30); + } + this.plugin.gainMoneyExp(shooter,"Support",0.25,12); + } + if (nextpotioneffect.getType().getName().compareTo("HEAL")==0) { + if (p.getHealth()<=8) { + this.plugin.gainMoneyExp(shooter,"Support",0.60,30); + shooter.sendMessage("This is a big heal."); + } + this.plugin.gainMoneyExp(shooter,"Support",0.30,14); + shooter.sendMessage("This is a heal."); + } + if (nextpotioneffect.getType().getName().compareTo("REGENERATION")==0) { + if (p.getHealth()<=8) { + this.plugin.gainMoneyExp(shooter,"Support",0.60,30); + } + this.plugin.gainMoneyExp(shooter,"Support",0.30,14); + //shooter.sendMessage("This is a heal."); + } + effects.remove(); + } + */ + } else { + try { + Collection effects = e.getPotion().getEffects(); + for (PotionEffect nextpotioneffect : effects) { + //shooter.sendMessage(nextpotioneffect.getType().getName()+" is the potion effect."); + if (nextpotioneffect.getType().getName().compareTo("SPEED")==0) { + //this.plugin.gainMoneyExp(shooter,"Support",0.15,6); + //Apply this potion effect to our player buff data. + for (int i=0;ip.getMaxHealth()) { + p.setHealth(p.getMaxHealth()); + } else { + p.setHealth(p.getHealth()+12); + } + //shooter.sendMessage("This is a heal."); + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + } + } + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible for a player while modifying speed amount."); + } + } + } + entities.remove(); + } + } else { + while (entities.hasNext()) { + LivingEntity next = entities.next(); + if (next.getType() == EntityType.PLAYER) { + final Player p = (Player)next; + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + } + },5); + try { + Iterator effects = e.getPotion().getEffects().iterator(); + while (effects.hasNext()) { + PotionEffect nextpotioneffect = effects.next(); + //shooter.sendMessage(nextpotioneffect.getType().getName()+" is the potion effect."); + if (this.plugin.PlayerinJob(shooter, "Brewer") && this.plugin.getJobLv("Brewer", shooter)>=20) { + next.removePotionEffect(nextpotioneffect.getType()); + next.addPotionEffect(new PotionEffect(nextpotioneffect.getType(),nextpotioneffect.getDuration()*2,nextpotioneffect.getAmplifier(),false)); + nextpotioneffect.getDuration(); + } + if (nextpotioneffect.getType().getName().compareTo("SPEED")==0) { + //this.plugin.gainMoneyExp(shooter,"Support",0.15,6); + //Apply this potion effect to our player buff data. + for (int i=0;ip.getMaxHealth()) { + p.setHealth(p.getMaxHealth()); + } else { + p.setHealth(p.getHealth()+12); + } + //shooter.sendMessage("This is a heal."); + } + effects.remove(); + } + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible for a player during a splash potion speed update."); + } + } + entities.remove(); + } + } + } + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Entity Collection not accessible during splash potion effect."); + } + } + + @EventHandler + public void onItemPrepareCraft(PrepareItemCraftEvent e) { + CraftingInventory result = e.getInventory(); + if (result.getResult().getType()==Material.IRON_HELMET || + result.getResult().getType()==Material.IRON_CHESTPLATE || + result.getResult().getType()==Material.IRON_LEGGINGS || + result.getResult().getType()==Material.IRON_BOOTS) { + ItemStack[] craftwith = result.getMatrix(); + boolean ingots=true; + for (int i=0;i='a'&&mod[i]<='z') { + mod[i]-=32; + first=true; + } else + if (i==0) { + if (mod[i]>='A'&&mod[i]<='Z') { + first=true; + } + } else { + if (mod[i]>='A'&&mod[i]<='Z'&&(mod[i-1]<'A'||mod[i-1]>'Z')) { + first=true; + } + } + } else { + if (mod[i-1]!=' ') { + if (mod[i]>='A'&&mod[i]<='Z') { + mod[i]+=32; + } + } + } + } + newarmor_meta.setDisplayName(String.copyValueOf(mod)); + List NewLore = new ArrayList(); + NewLore.add(ChatColor.RED+"-400% Durability"); + newarmor_meta.setLore(NewLore); + newarmor.setItemMeta(newarmor_meta); + result.setResult(newarmor); + } + } else + if (result.getResult().getType()==Material.GOLD_HELMET || + result.getResult().getType()==Material.GOLD_CHESTPLATE || + result.getResult().getType()==Material.GOLD_LEGGINGS || + result.getResult().getType()==Material.GOLD_BOOTS) { + ItemStack[] craftwith = result.getMatrix(); + boolean ingots=true; + for (int i=0;i='a'&&mod[i]<='z') { + mod[i]-=32; + first=true; + } else + if (i==0) { + if (mod[i]>='A'&&mod[i]<='Z') { + first=true; + } + } else { + if (mod[i]>='A'&&mod[i]<='Z'&&(mod[i-1]<'A'||mod[i-1]>'Z')) { + first=true; + } + } + } else { + if (mod[i-1]!=' ') { + if (mod[i]>='A'&&mod[i]<='Z') { + mod[i]+=32; + } + } + } + } + newarmor_meta.setDisplayName(String.copyValueOf(mod)); + List NewLore = new ArrayList(); + NewLore.add(ChatColor.RED+"-400% Durability"); + newarmor_meta.setLore(NewLore); + newarmor.setItemMeta(newarmor_meta); + result.setResult(newarmor); + } + } else + if (result.getResult().getType()==Material.DIAMOND_HELMET || + result.getResult().getType()==Material.DIAMOND_CHESTPLATE || + result.getResult().getType()==Material.DIAMOND_LEGGINGS || + result.getResult().getType()==Material.DIAMOND_BOOTS) { + ItemStack[] craftwith = result.getMatrix(); + boolean ingots=true; + for (int i=0;i='a'&&mod[i]<='z') { + mod[i]-=32; + first=true; + } else + if (i==0) { + if (mod[i]>='A'&&mod[i]<='Z') { + first=true; + } + } else { + if (mod[i]>='A'&&mod[i]<='Z'&&(mod[i-1]<'A'||mod[i-1]>'Z')) { + first=true; + } + } + } else { + if (mod[i-1]!=' ') { + if (mod[i]>='A'&&mod[i]<='Z') { + mod[i]+=32; + } + } + } + } + newarmor_meta.setDisplayName(String.copyValueOf(mod)); + List NewLore = new ArrayList(); + NewLore.add(ChatColor.RED+"-400% Durability"); + newarmor_meta.setLore(NewLore); + newarmor.setItemMeta(newarmor_meta); + result.setResult(newarmor); + } + } + //It could be with iron, gold, or diamond blocks. Try them out. + /* + boolean iron=false,gold=false,diamond=false; + boolean helmet=false,chestplate=false,leggings=false,boots=false; + ItemStack[] craftwith = result.getMatrix(); + if (craftwith[0].getType()==Material.IRON_BLOCK && + craftwith[1].getType()==Material.IRON_BLOCK && + craftwith[2].getType()==Material.IRON_BLOCK && + craftwith[3].getType()==Material.IRON_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.IRON_BLOCK && + craftwith[6].getType()==Material.IRON_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.IRON_BLOCK) { + ItemStack newarmor = new ItemStack(Material.IRON_LEGGINGS); + result.setResult(newarmor); + } else + if (craftwith[0].getType()==Material.IRON_BLOCK && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.IRON_BLOCK && + craftwith[3].getType()==Material.IRON_BLOCK && + craftwith[4].getType()==Material.IRON_BLOCK && + craftwith[5].getType()==Material.IRON_BLOCK && + craftwith[6].getType()==Material.IRON_BLOCK && + craftwith[7].getType()==Material.IRON_BLOCK && + craftwith[8].getType()==Material.IRON_BLOCK) { + ItemStack newarmor = new ItemStack(Material.IRON_CHESTPLATE); + result.setResult(newarmor); + } else + if ((craftwith[0].getType()==Material.IRON_BLOCK && + craftwith[1].getType()==Material.IRON_BLOCK && + craftwith[2].getType()==Material.IRON_BLOCK && + craftwith[3].getType()==Material.IRON_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.IRON_BLOCK && + craftwith[6].getType()==Material.AIR && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.AIR) || (craftwith[3].getType()==Material.IRON_BLOCK && + craftwith[4].getType()==Material.IRON_BLOCK && + craftwith[5].getType()==Material.IRON_BLOCK && + craftwith[6].getType()==Material.IRON_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.IRON_BLOCK && + craftwith[0].getType()==Material.AIR && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.AIR)) { + ItemStack newarmor = new ItemStack(Material.IRON_HELMET); + result.setResult(newarmor); + } else + if ((craftwith[0].getType()==Material.IRON_BLOCK && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.IRON_BLOCK && + craftwith[3].getType()==Material.IRON_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.IRON_BLOCK && + craftwith[6].getType()==Material.AIR && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.AIR) || (craftwith[3].getType()==Material.IRON_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.IRON_BLOCK && + craftwith[6].getType()==Material.IRON_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.IRON_BLOCK && + craftwith[0].getType()==Material.AIR && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.AIR)) { + ItemStack newarmor = new ItemStack(Material.IRON_BOOTS); + result.setResult(newarmor); + } + if (craftwith[0].getType()==Material.GOLD_BLOCK && + craftwith[1].getType()==Material.GOLD_BLOCK && + craftwith[2].getType()==Material.GOLD_BLOCK && + craftwith[3].getType()==Material.GOLD_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.GOLD_BLOCK && + craftwith[6].getType()==Material.GOLD_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.GOLD_BLOCK) { + ItemStack newarmor = new ItemStack(Material.GOLD_LEGGINGS); + result.setResult(newarmor); + } else + if (craftwith[0].getType()==Material.GOLD_BLOCK && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.GOLD_BLOCK && + craftwith[3].getType()==Material.GOLD_BLOCK && + craftwith[4].getType()==Material.GOLD_BLOCK && + craftwith[5].getType()==Material.GOLD_BLOCK && + craftwith[6].getType()==Material.GOLD_BLOCK && + craftwith[7].getType()==Material.GOLD_BLOCK && + craftwith[8].getType()==Material.GOLD_BLOCK) { + ItemStack newarmor = new ItemStack(Material.GOLD_CHESTPLATE); + result.setResult(newarmor); + } else + if ((craftwith[0].getType()==Material.GOLD_BLOCK && + craftwith[1].getType()==Material.GOLD_BLOCK && + craftwith[2].getType()==Material.GOLD_BLOCK && + craftwith[3].getType()==Material.GOLD_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.GOLD_BLOCK && + craftwith[6].getType()==Material.AIR && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.AIR) || (craftwith[3].getType()==Material.GOLD_BLOCK && + craftwith[4].getType()==Material.GOLD_BLOCK && + craftwith[5].getType()==Material.GOLD_BLOCK && + craftwith[6].getType()==Material.GOLD_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.GOLD_BLOCK && + craftwith[0].getType()==Material.AIR && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.AIR)) { + ItemStack newarmor = new ItemStack(Material.GOLD_HELMET); + result.setResult(newarmor); + } else + if ((craftwith[0].getType()==Material.GOLD_BLOCK && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.GOLD_BLOCK && + craftwith[3].getType()==Material.GOLD_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.GOLD_BLOCK && + craftwith[6].getType()==Material.AIR && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.AIR) || (craftwith[3].getType()==Material.GOLD_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.GOLD_BLOCK && + craftwith[6].getType()==Material.GOLD_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.GOLD_BLOCK && + craftwith[0].getType()==Material.AIR && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.AIR)) { + ItemStack newarmor = new ItemStack(Material.GOLD_BOOTS); + result.setResult(newarmor); + } + if (craftwith[0].getType()==Material.DIAMOND_BLOCK && + craftwith[1].getType()==Material.DIAMOND_BLOCK && + craftwith[2].getType()==Material.DIAMOND_BLOCK && + craftwith[3].getType()==Material.DIAMOND_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.DIAMOND_BLOCK && + craftwith[6].getType()==Material.DIAMOND_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.DIAMOND_BLOCK) { + ItemStack newarmor = new ItemStack(Material.DIAMOND_LEGGINGS); + result.setResult(newarmor); + } else + if (craftwith[0].getType()==Material.DIAMOND_BLOCK && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.DIAMOND_BLOCK && + craftwith[3].getType()==Material.DIAMOND_BLOCK && + craftwith[4].getType()==Material.DIAMOND_BLOCK && + craftwith[5].getType()==Material.DIAMOND_BLOCK && + craftwith[6].getType()==Material.DIAMOND_BLOCK && + craftwith[7].getType()==Material.DIAMOND_BLOCK && + craftwith[8].getType()==Material.DIAMOND_BLOCK) { + ItemStack newarmor = new ItemStack(Material.DIAMOND_CHESTPLATE); + result.setResult(newarmor); + } else + if ((craftwith[0].getType()==Material.DIAMOND_BLOCK && + craftwith[1].getType()==Material.DIAMOND_BLOCK && + craftwith[2].getType()==Material.DIAMOND_BLOCK && + craftwith[3].getType()==Material.DIAMOND_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.DIAMOND_BLOCK && + craftwith[6].getType()==Material.AIR && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.AIR) || (craftwith[3].getType()==Material.DIAMOND_BLOCK && + craftwith[4].getType()==Material.DIAMOND_BLOCK && + craftwith[5].getType()==Material.DIAMOND_BLOCK && + craftwith[6].getType()==Material.DIAMOND_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.DIAMOND_BLOCK && + craftwith[0].getType()==Material.AIR && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.AIR)) { + ItemStack newarmor = new ItemStack(Material.DIAMOND_HELMET); + result.setResult(newarmor); + } else + if ((craftwith[0].getType()==Material.DIAMOND_BLOCK && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.DIAMOND_BLOCK && + craftwith[3].getType()==Material.DIAMOND_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.DIAMOND_BLOCK && + craftwith[6].getType()==Material.AIR && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.AIR) || (craftwith[3].getType()==Material.DIAMOND_BLOCK && + craftwith[4].getType()==Material.AIR && + craftwith[5].getType()==Material.DIAMOND_BLOCK && + craftwith[6].getType()==Material.DIAMOND_BLOCK && + craftwith[7].getType()==Material.AIR && + craftwith[8].getType()==Material.DIAMOND_BLOCK && + craftwith[0].getType()==Material.AIR && + craftwith[1].getType()==Material.AIR && + craftwith[2].getType()==Material.AIR)) { + ItemStack newarmor = new ItemStack(Material.DIAMOND_BOOTS); + result.setResult(newarmor); + } + */ + } + + @EventHandler + public void onItemCraft(CraftItemEvent e) { + //This is something we just crafted. + //Bukkit.getPlayer("sigonasr2").sendMessage("Resulting item is "+result.getResult().getAmount()+" "+result.getResult().getType()); + CraftingInventory result = e.getInventory(); + //Bukkit.getPlayer("sigonasr2").sendMessage("Resulting item is "+result.getResult().getAmount()+" "+result.getResult().getType()); + Player p = Bukkit.getPlayer(e.getWhoClicked().getName()); + if (this.plugin.PlayerinJob(p,"Weaponsmith")) { + boolean crafteditem=false; + if (result.getResult().getType()==Material.ARROW) { + crafteditem=true; + } + if (result.getResult().getType()==Material.WOOD_SWORD) { + crafteditem=true; + } + if (result.getResult().getType()==Material.FLINT_AND_STEEL) { + crafteditem=true; + } + if (result.getResult().getType()==Material.BOW) { + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_SWORD) { + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_SWORD) { + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_SWORD) { + crafteditem=true; + } + if (this.plugin.getJobLv("Weaponsmith", p)>=20) { + ItemStack[] crafteditems = result.getMatrix(); + for (int i=0;i=5) { + ItemStack[] crafteditems = result.getMatrix(); + for (int i=0;i=10 && crafteditem) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Valid item. Going to attempt to enchant."); + ItemStack resulting = this.plugin.EnchantItem(result.getResult(),10); + result.setResult(resulting); + } + } + if (this.plugin.PlayerinJob(p,"Blacksmith")) { + boolean crafteditem=false; + if (result.getResult().getType()==Material.STONE_HOE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.04,7); + crafteditem=true; + } + if (result.getResult().getType()==Material.STONE_SPADE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.05,8); + crafteditem=true; + } + if (result.getResult().getType()==Material.STONE_PICKAXE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.075,15); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_BOOTS) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.125,8); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_HELMET) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.15,14); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_LEGGINGS) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.175,15); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_CHESTPLATE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.20,18); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_SPADE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.25,18); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_HOE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.325,24); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_BOOTS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",0.375*mult,27*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_PICKAXE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.40,30); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_HELMET) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",0.50*mult,45*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_SPADE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.625,55); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_HOE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.65,60); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_LEGGINGS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",0.725*mult,60*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_SPADE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.75,65); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_HOE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.80,70); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_BOOTS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",0.825*mult,50*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_CHESTPLATE) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",0.875*mult,70*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_HELMET) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",0.925*mult,80*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_PICKAXE) { + //this.plugin.gainMoneyExp(p,"Blacksmith",0.925,80); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_BOOTS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",1.00*mult,85*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_LEGGINGS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",1.025*mult,100*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_CHESTPLATE) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",1.15*mult,130*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_HELMET) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",1.15*mult,125*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_LEGGINGS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",1.325*mult,145*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_CHESTPLATE) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + //this.plugin.gainMoneyExp(p,"Blacksmith",1.50*mult,175*mult); + crafteditem=true; + } + if (this.plugin.getJobLv("Blacksmith", p)>=5 && crafteditem) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Valid item. Going to attempt to enchant."); + ItemStack resulting = this.plugin.EnchantItem(result.getResult(),5); + result.setResult(resulting); + } + if (this.plugin.getJobLv("Blacksmith", p)>=10 && crafteditem) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Valid item. Going to attempt to enchant."); + ItemStack resulting = this.plugin.EnchantItem(result.getResult(),10); + result.setResult(resulting); + } + if (this.plugin.getJobLv("Blacksmith", p)>=20) { + ItemStack[] crafteditems = result.getMatrix(); + for (int i=0;i=20) { + ItemStack[] crafteditems = result.getMatrix(); + for (int i=0;i=5) { + ItemStack[] crafteditems = result.getMatrix(); + for (int i=0;i=10 && crafteditem) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Valid item. Going to attempt to enchant."); + ItemStack resulting = this.plugin.EnchantItem(result.getResult(),10); + result.setResult(resulting); + } + } + if (this.plugin.PlayerinJob(p,"Blacksmith")) { + boolean crafteditem=false; + if (result.getResult().getType()==Material.STONE_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.04,7); + crafteditem=true; + } + if (result.getResult().getType()==Material.STONE_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.05,8); + crafteditem=true; + } + if (result.getResult().getType()==Material.STONE_PICKAXE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.075,15); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_BOOTS) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.125,8); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_HELMET) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.15,14); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.175,15); + crafteditem=true; + } + if (result.getResult().getType()==Material.LEATHER_CHESTPLATE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.20,18); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.25,18); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.325,24); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_BOOTS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.375*mult,27*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_PICKAXE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.40,30); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_HELMET) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.50*mult,45*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.625,55); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.65,60); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_LEGGINGS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.725*mult,60*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.75,65); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.80,70); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_BOOTS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.825*mult,50*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.IRON_CHESTPLATE) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.875*mult,70*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_HELMET) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.925*mult,80*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_PICKAXE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.925,80); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_BOOTS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.00*mult,85*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_LEGGINGS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.025*mult,100*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.GOLD_CHESTPLATE) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.15*mult,130*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_HELMET) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.15*mult,125*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_LEGGINGS) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.325*mult,145*mult); + crafteditem=true; + } + if (result.getResult().getType()==Material.DIAMOND_CHESTPLATE) { + int mult=1; + if ((result.getResult().getItemMeta().getDisplayName()!=null && !result.getResult().getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || result.getResult().getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.50*mult,175*mult); + crafteditem=true; + } + if (this.plugin.getJobLv("Blacksmith", p)>=5 && crafteditem) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Valid item. Going to attempt to enchant."); + ItemStack resulting = this.plugin.EnchantItem(result.getResult(),5); + result.setResult(resulting); + } + if (this.plugin.getJobLv("Blacksmith", p)>=10 && crafteditem) { + //Bukkit.getPlayer("sigonasr2").sendMessage("Valid item. Going to attempt to enchant."); + ItemStack resulting = this.plugin.EnchantItem(result.getResult(),10); + result.setResult(resulting); + } + if (this.plugin.getJobLv("Blacksmith", p)>=20) { + ItemStack[] crafteditems = result.getMatrix(); + for (int i=0;i=10 && crafteditem==true) { + ItemStack resultingitem = result.getResult(); + resultingitem.setAmount(resultingitem.getAmount()*2); + } + } + if (this.plugin.PlayerinJob(p,"Support")) { + if (result.getResult().getType()==Material.BREAD) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.MUSHROOM_SOUP) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.COOKIE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.GOLDEN_CARROT) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.GOLDEN_APPLE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.PUMPKIN_PIE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getResult().getType()==Material.IRON_SWORD) { + this.plugin.gainMoneyExp(p,"Support",0.015,3); + } + if (result.getResult().getType()==Material.IRON_CHESTPLATE || result.getResult().getType()==Material.IRON_HELMET || result.getResult().getType()==Material.IRON_BOOTS || result.getResult().getType()==Material.IRON_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Support",0.025,5); + } + if (result.getResult().getType()==Material.DIAMOND_SWORD) { + this.plugin.gainMoneyExp(p,"Support",0.075,8); + } + if (result.getResult().getType()==Material.DIAMOND_CHESTPLATE || result.getResult().getType()==Material.DIAMOND_HELMET || result.getResult().getType()==Material.DIAMOND_BOOTS || result.getResult().getType()==Material.DIAMOND_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Support",0.20,20); + } + if (result.getResult().getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Support",0.03,2); + } + } + */ + } + + /*@EventHandler + public void onFurnaceGet(FurnaceExtractEvent e) { + Player p = e.getPlayer(); + Bukkit.getPlayer("sigonasr2").sendMessage("Extacting "+e.getItemAmount()+" "+e.getItemType()); + }*/ + @EventHandler + public void onLeafDecay(LeavesDecayEvent e) { + Player[] list = Bukkit.getOnlinePlayers(); + for (int i=0;i=20) { + //Increase sapling drops by 64%. + if (e.getBlock().getData()!=3) { + //This is not a jungle leaf block. + if (Math.random()*100<=25) { + //Produce a sapling. + Bukkit.getWorld("world").dropItem(e.getBlock().getLocation(), new ItemStack(Material.SAPLING,1,e.getBlock().getData())); + //list[i].sendMessage("You got an extra spawned sapling."); + } + } else { + if (Math.random()*100<=12.5) { + //Produce a sapling. + Bukkit.getWorld("world").dropItem(e.getBlock().getLocation(), new ItemStack(Material.SAPLING,1,e.getBlock().getData())); + } + } + } else + if (this.plugin.PlayerinJob(list[i], "Woodcutter") && this.plugin.getJobLv("Woodcutter", list[i])>=5) { + //Increase sapling drops by 40%. + if (e.getBlock().getData()!=3) { + //This is not a jungle leaf block. + if (Math.random()*100<=12) { + //Produce a sapling. + Bukkit.getWorld("world").dropItem(e.getBlock().getLocation(), new ItemStack(Material.SAPLING,1,e.getBlock().getData())); + //list[i].sendMessage("You got an extra spawned sapling."); + } + } else { + if (Math.random()*100<=6) { + //Produce a sapling. + Bukkit.getWorld("world").dropItem(e.getBlock().getLocation(), new ItemStack(Material.SAPLING,1,e.getBlock().getData())); + } + } + } + } + } + } + + @EventHandler + public void onItemChange(PlayerItemHeldEvent e) { + Player p = e.getPlayer(); + if (this.plugin.PlayerinJob(p, "Miner") && this.plugin.getJobLv("Miner", p)>=20) { + if (p.getInventory().getContents()[e.getNewSlot()]!=null && + (p.getInventory().getContents()[e.getNewSlot()].getType()==Material.WOOD_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.IRON_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.GOLD_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.DIAMOND_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.STONE_PICKAXE)) { + ItemStack currentitem = p.getInventory().getContents()[e.getNewSlot()]; + if (!currentitem.containsEnchantment(Enchantment.getByName("DIG_SPEED"))) { + currentitem.addEnchantment(Enchantment.getByName("DIG_SPEED"), 2); + } else { + //if (currentitem.getEnchantmentLevel()) + } + } + } else + if (this.plugin.PlayerinJob(p, "Miner") && this.plugin.getJobLv("Miner", p)>=5) { + if (p.getInventory().getContents()[e.getNewSlot()]!=null && + (p.getInventory().getContents()[e.getNewSlot()].getType()==Material.WOOD_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.IRON_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.GOLD_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.DIAMOND_PICKAXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.STONE_PICKAXE)) { + ItemStack currentitem = p.getInventory().getContents()[e.getNewSlot()]; + if (!currentitem.containsEnchantment(Enchantment.getByName("DIG_SPEED"))) { + currentitem.addEnchantment(Enchantment.getByName("DIG_SPEED"), 1); + } + } + } + if (this.plugin.PlayerinJob(p, "Digger") && this.plugin.getJobLv("Digger", p)>=5) { + if (p.getInventory().getContents()[e.getNewSlot()]!=null && + (p.getInventory().getContents()[e.getNewSlot()].getType()==Material.WOOD_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.IRON_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.GOLD_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.DIAMOND_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.STONE_SPADE)) { + ItemStack currentitem = p.getInventory().getContents()[e.getNewSlot()]; + if (!currentitem.containsEnchantment(Enchantment.getByName("DIG_SPEED"))) { + currentitem.addEnchantment(Enchantment.getByName("DIG_SPEED"), 1); + } + } + } else + if (this.plugin.PlayerinJob(p, "Digger") && this.plugin.getJobLv("Digger", p)>=20) { + if (p.getInventory().getContents()[e.getNewSlot()]!=null && + (p.getInventory().getContents()[e.getNewSlot()].getType()==Material.WOOD_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.IRON_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.GOLD_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.DIAMOND_SPADE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.STONE_SPADE)) { + ItemStack currentitem = p.getInventory().getContents()[e.getNewSlot()]; + if (!currentitem.containsEnchantment(Enchantment.getByName("DIG_SPEED"))) { + currentitem.addEnchantment(Enchantment.getByName("DIG_SPEED"), 2); + } + } + } + if (this.plugin.PlayerinJob(p, "Hunter") && this.plugin.getJobLv("Hunter", p)>=20) { + if (p.getInventory().getContents()[e.getNewSlot()]!=null && + (p.getInventory().getContents()[e.getNewSlot()].getType()==Material.WOOD_SWORD || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.IRON_SWORD || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.GOLD_SWORD || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.DIAMOND_SWORD || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.STONE_SWORD)) { + ItemStack currentitem = p.getInventory().getContents()[e.getNewSlot()]; + if (!currentitem.containsEnchantment(Enchantment.getByName("FIRE_ASPECT"))) { + currentitem.addEnchantment(Enchantment.getByName("FIRE_ASPECT"), 2); + } + } + } + if (this.plugin.PlayerinJob(p, "Woodcutter") && this.plugin.getJobLv("Woodcutter", p)>=10) { + if (p.getInventory().getContents()[e.getNewSlot()]!=null && + (p.getInventory().getContents()[e.getNewSlot()].getType()==Material.WOOD_AXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.IRON_AXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.GOLD_AXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.DIAMOND_AXE || + p.getInventory().getContents()[e.getNewSlot()].getType()==Material.STONE_AXE)) { + ItemStack currentitem = p.getInventory().getContents()[e.getNewSlot()]; + if (!currentitem.containsEnchantment(Enchantment.getByName("DIG_SPEED"))) { + currentitem.addEnchantment(Enchantment.getByName("DIG_SPEED"), 1); + } + } + } + } + +public ItemStack getGoodie() { + ItemStack item = null; + if (Math.random()<0.33) { + //Add a weapon/armor piece. + int rand = (int)(Math.random()*5); + String type = ""; + String type2 = ""; + switch (rand) { + case 0: { + type = "LEATHER"; + }break; + case 1: { + type = "IRON"; + }break; + case 2: { + type = "GOLD"; + }break; + case 3: { + type = "CHAINMAIL"; + }break; + case 4: { + type = "DIAMOND"; + }break; + } + if (rand!=0 && rand!=3) { + rand = (int)(Math.random()*9); + type2 = ""; + switch (rand) { + case 0: { + type2 = "HELMET"; + }break; + case 1: { + type2 = "CHESTPLATE"; + }break; + case 2: { + type2 = "LEGGINGS"; + }break; + case 3: { + type2 = "BOOTS"; + }break; + case 4: { + type2 = "SWORD"; + }break; + case 5: { + type2 = "PICKAXE"; + }break; + case 6: { + type2 = "SPADE"; + }break; + case 7: { + type2 = "HOE"; + }break; + case 8: { + type2 = "AXE"; + }break; + } + } else { + rand = (int)(Math.random()*5); + type2 = ""; + switch (rand) { + case 0: { + type2 = "HELMET"; + }break; + case 1: { + type2 = "CHESTPLATE"; + }break; + case 2: { + type2 = "LEGGINGS"; + }break; + case 3: { + type2 = "BOOTS"; + }break; + case 4: { + type2 = "BOW"; + }break; + } + } + if (type2.equalsIgnoreCase("BOW")) { + item = new ItemStack(Material.BOW); + int enchants[] = {48,49,50,51}; + for (int j=0;j ourLore = new ArrayList(); + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Critical Chance"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*3)+1)+" "+ChatColor.BLUE+"Armor Penetration"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Life Steal"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*30)+1)+"% "+ChatColor.BLUE+"Attack Speed"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*5)+1)+" "+ChatColor.BLUE+"Damage"); + } + ItemMeta meta = item.getItemMeta(); + meta.setLore(ourLore); + item.setItemMeta(meta); + } else { + item = new ItemStack(Material.getMaterial(type+"_"+type2)); + if (type2.equalsIgnoreCase("SWORD")) { + int enchants[] = {16,17,18,19,20,21,34}; + for (int j=0;j ourLore = new ArrayList(); + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Critical Chance"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*3)+1)+" "+ChatColor.BLUE+"Armor Penetration"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Life Steal"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*30)+1)+"% "+ChatColor.BLUE+"Attack Speed"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*5)+1)+" "+ChatColor.BLUE+"Damage"); + } + ItemMeta meta = item.getItemMeta(); + meta.setLore(ourLore); + item.setItemMeta(meta); + } else if (type2.equalsIgnoreCase("SPADE") || type2.equalsIgnoreCase("PICKAXE") || type2.equalsIgnoreCase("HOE") || type2.equalsIgnoreCase("AXE")) { + int enchants[] = {32,33,34,35}; + for (int j=0;j ourLore = new ArrayList(); + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Critical Chance"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*3)+1)+" "+ChatColor.BLUE+"Armor Penetration"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Life Steal"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*30)+1)+"% "+ChatColor.BLUE+"Attack Speed"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*5)+1)+" "+ChatColor.BLUE+"Damage"); + } + ItemMeta meta = item.getItemMeta(); + meta.setLore(ourLore); + item.setItemMeta(meta); + } else { + int enchants[] = {0,1,2,3,4,5,6,7,34}; + for (int j=0;j ourLore = new ArrayList(); + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*4)+1)+" "+ChatColor.BLUE+"Health"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Damage Reduction"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*50)+1)*10)+"% "+ChatColor.BLUE+"Durability"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Block Chance"); + } + if (Math.random()<=0.2) { + ourLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*10)+1)+"% "+ChatColor.BLUE+"Speed Boost Chance"); + } + ItemMeta meta = item.getItemMeta(); + meta.setLore(ourLore); + item.setItemMeta(meta); + } + } + } else { + //Add minerals. + int rand = (int)(Math.random()*9); + switch (rand) { + case 0 :{ + item = new ItemStack(Material.IRON_INGOT,(int)(Math.random()*40)+20); + }break; + case 1 :{ + item = new ItemStack(Material.IRON_BLOCK,(int)(Math.random()*4)+2); + }break; + case 2 :{ + item = new ItemStack(Material.GOLD_INGOT,(int)(Math.random()*20)+10); + }break; + case 3 :{ + item = new ItemStack(Material.GOLD_BLOCK,(int)(Math.random()*2)+1); + }break; + case 4 :{ + item = new ItemStack(Material.LAPIS_BLOCK,(int)(Math.random()*40)+20); + }break; + case 5 :{ + item = new ItemStack(Material.REDSTONE_BLOCK,(int)(Math.random()*25)+5); + }break; + case 6 :{ + item = new ItemStack(Material.DIAMOND,(int)(Math.random()*4)+1); + }break; + case 7 :{ + item = new ItemStack(Material.DIAMOND_BLOCK,(int)(Math.random()*2)+1); + }break; + case 8 :{ + item = new ItemStack(Material.EMERALD,(int)(Math.random()*2)+1); + }break; + } + } + return item; +} + + @EventHandler + public void onEnemyKill(EntityDeathEvent e) { + if (e.getEntity().getType()==EntityType.SQUID || e.getEntity().getType()==EntityType.SLIME || e.getEntity().getType()==EntityType.ZOMBIE || e.getEntity().getType()==EntityType.SPIDER || e.getEntity().getType()==EntityType.SKELETON || e.getEntity().getType()==EntityType.CREEPER + || e.getEntity().getType()==EntityType.PIG_ZOMBIE || e.getEntity().getType()==EntityType.GHAST || e.getEntity().getType()==EntityType.ENDERMAN || e.getEntity().getType()==EntityType.BLAZE + || e.getEntity().getType()==EntityType.ENDER_DRAGON || e.getEntity().getType()==EntityType.WITHER || e.getEntity().getType()==EntityType.CHICKEN || e.getEntity().getType()==EntityType.SHEEP + || e.getEntity().getType()==EntityType.PIG || e.getEntity().getType()==EntityType.COW || e.getEntity().getType()==EntityType.OCELOT || e.getEntity().getType()==EntityType.WOLF + || e.getEntity().getType()==EntityType.MUSHROOM_COW) { + LivingEntity f = e.getEntity(); + if (f.getType()==EntityType.ZOMBIE || + f.getType()==EntityType.SKELETON || + f.getType()==EntityType.PIG_ZOMBIE || + f.getType()==EntityType.SPIDER || + f.getType()==EntityType.CREEPER || + f.getType()==EntityType.ENDERMAN) { + //if (Math.random()<=0.005) { + /* + if (Math.random()<=0.005) { + //0.5% chance of a mystical book dropping. + if (f.getKiller()!=null) { + ItemStack book = new ItemStack(Material.WRITTEN_BOOK); + BookMeta bookdata = (BookMeta)book.getItemMeta(); + int choosebook = (int)(Math.random()*9.0d); + switch (choosebook) { + case 0:{ + bookdata.setAuthor("Steve"); + bookdata.setTitle("Dangers of the Nether"); + bookdata.addPage("Dangers of the Nether\n"+ChatColor.ITALIC+" by Steve\n======\n"+ChatColor.RESET+"It didn't take me long to realize where we were. It was dangerous, very hot, and lots of torturous screams could be heard everywhere. I barely had time","to take it all in before a huge fireball was shot in my direction. I quickly looked to my side to find a convenient safe passage and hid there for a few minutes. I guess I was in there longer than I thought, I ended","up falling asleep and waking up to notice there was something scary on the wall.\n\n"+ChatColor.ITALIC+"\"TURN AND LEAVE NOW. DANGEROUS TO STAY. REAL WORLD HAS WHAT YOU ARE LOOKING FOR. I ONLY REMEMBER THE 1ST X POSITION...",ChatColor.ITALIC+"...IT WAS 7! I AM *POSITIVE*\""+ChatColor.RESET+"\n\nI did not know what to think. The 1st X position? I quickly remembered the 7 and sprinted out of the nether portal. And to think that was *THE END* of my adventures..."); + }break; + case 1:{ + bookdata.setAuthor("Lacey"); + bookdata.setTitle("A Hole in the Flower Garden"); + bookdata.addPage("A Hole in the Flower Garden\n"+ChatColor.ITALIC+" by Lacey\n======\n"+ChatColor.RESET+"It was a lovely day to pick flowers in the garden, they just finished blooming fully. I was so excited to pick them, but I didn't do so until","after I've taken in all the wonderful scents! Smelling all the flowers and wonderful smells of plants and trees and nature and grass. It was perfect. I was mindlessly walking along this prairie when I stumbled.","I fell, and fell, and fell. I hit the bottom of a ravine. It didn't even occur to me I would just walk into one. I took some minor damage, but when I got up, I noticed something strange.","There were two or three zombies gathered around a wall, etching something into it. I went over to read it once the zombies walked away. I saw on the wall:\n\n"+ChatColor.ITALIC+"X-2:6 <--END","It looked cryptic to me, but why would they write that on the wall? I quickly scribbled it down on a notepad I had in my pocket and started climbing out of the ravine to tend to my lovely flowers. What a day!"); + }break; + case 2:{ + bookdata.setAuthor("Jimmy"); + bookdata.setTitle("Messages in Music"); + bookdata.addPage("Messages in Music\n"+ChatColor.ITALIC+" by Jim"+"\n======"+ChatColor.RESET+"\nI popped out the disk from my Jukebox to put in another, I could jam to these all day! As I was looking through my collection for something to listen to","I found a really bent up disk. 'No way this could still play', I thought to myself. I put it in, and it crackled and snarled, but it was indeed playing! At first I heard some faint resemblence of music, but then suddenly,","a hiss, an explosion, and then 'CREEEEEEEEE----- 7X XSSSSSSSSSS 3RD EEEEEEE' mental images appeared in my head, but the 7X and 3RD stood out the most. It's like I was seeing them in my head while hearing something else!","I couldn't stand up anymore, or think. I forcibly reached up with my weak hand to find the eject button on the player and when I found the familiar nub in the button, pressed down on it and out popped the disk, hitting my face,","but putting me back into reality. Something was telling me that the 3RD and 7X was important. But I couldn't quite put my tongue on it."); + }break; + case 3:{ + bookdata.setAuthor("Creeper"); + bookdata.setTitle("HISS"); + bookdata.addPage("Y do i exisssst. nobody knowssss. i just want a hugssssss, HUGSSSSSSS. but i don't know Y i exist. there's no Y in the first position. it'sssss jusssst two digitssssss.... SSSSSSSSS. *THE END*"); + }break; + case 4:{ + bookdata.setAuthor("Marco"); + bookdata.setTitle("The Hunt for a Dragon"); + bookdata.addPage("The Hunt for a Dragon\n"+ChatColor.ITALIC+" by Marco"+"\n======"+ChatColor.RESET+"\nThere exists a rumor that a mythical dragon could be found in the depths of our world. It is even said he doesn't exist in OUR world, but ANOTHER world altogether!","That my friends already boggles me, but where the heck would I go to find it then? I have been told he exists, and I know he is. I believe deep in my heart. I searched day and night under and over ground.","One day I found something strange in the ground. It was pink wool, in the middle of a cave on the ground. It even said something, but I couldn't tell from so close up. So I literally dug all the way to the surface, keeping the boundaries","of that word uncovered the whole way up. When I got to the top and looked down, I was relieved to find it was made out of markings I could discern. It said: 'Y: X3?' It was definitely a weird group of symbols, but I have a strong feeling"," that it is directly linked with that dragon I am trying to hunt down. Maybe I can gather more clues and try to decipher the location of this thing."); + }break; + case 5:{ + bookdata.setAuthor("Steve"); + bookdata.setTitle("Cooking Food"); + bookdata.addPage("Cooking Food\n"+ChatColor.ITALIC+" by Steve"+"\n======"+ChatColor.RESET+"\nIt was a bright and rather typical sunny day in the Minecraft world. I don't actually think it was very hot either. I just managed to catch a few fish and was cooking them up.","It wasn't long before I got distracted and heard a funny noise. It was an ocelote. Lucky me, an ocelote has smelled the scent of my fish! I grab a few and hold it out for the ocelote. It slowly creeps over, and then takes it and runs from me.","I thought it was full and finished cooking the rest of the fish. However, the ocelote returned a few minutes later with a neatly-folded piece of paper in its mouth. It came up to me and set it down, like it was some message just for me.","I opened it up and it read:\n\n"+ChatColor.ITALIC+"Don't let the fish get to your tongue! If you know what's wise, you will investigate further. The 3rd position of Y being the number 5."+ChatColor.RESET+"\n\n","I didn't notice the ocelote run away, but I knew something FISHY was going on. That message seemed important for some reason, I've seen similar cryptic messages before... Perhaps I'll hold onto this in case I need it in the future."); + }break; + case 6:{ + bookdata.setAuthor("Fredric"); + bookdata.setTitle("Math Behind the Void"); + bookdata.addPage("Math Behind the Void\n"+ChatColor.ITALIC+" by Fredric"+"\n======"+ChatColor.RESET+"\nThis book describes a few principles that the void in this world follows. While no one has actually seen the void, we have found a few theories and rules regarding them.","1. The Void has a Light Level of -14. The Void actually absorbs light coming from light sources and thus, if The Void is ever opened to the real world, would suck up the light from it.","2. The Void always has a volume of 50,000m, being 50m x 20m x 50m. This means that The Void, regardless of location is always the same exact size. This would conclude to us that The Void is co-existing and multiple instaces of it may exist in the same realm.","3. Any Entity entering The Void will not be able to escape The Void as time passes much more quickly inside The Void. This means Entities that enter The Void feel accelerated processes and cannot combat it, since the time outside is behind them.","4. A point of connection between The Void and other dimensions has to exist, for The Void to exist. Speculation has it that one of these points has been leaked into the world, and is accessible by us directly. After further research,","we have learned that one of these points is located on the 1st respective numeral along our Z axis with the number 4. It has also been proven that this number has to be negative as the other two sources interacting with The Void are positive."); + }break; + case 7:{ + bookdata.setAuthor("Robert"); + bookdata.setTitle("TNT"); + bookdata.addPage("TNT\n"+ChatColor.ITALIC+" by Robert"+"\n======"+ChatColor.RESET+"\nYou know, the easiest way to clear a tunnel is using an item called TNT. It is a rather small block, but it is loaded with gunpowder. When lit by an external force, it ignites","with the force of 5 Creeper explosions to clear whole caves out. Well lo and behold one day I discovered a rather strange abandoned mineshaft. It wasn't normal for sure, because there were green vines everywhere and lots of strange doors.","It was like somebody lived here ages ago, and I am discovering the ruins of such a place. Inoperable levers, a few mobs I have to kill here and there that have made this area their designated home. It was a mess. But I did discover that","someone was trying to find what we would call 'The End'. It's a magical place, and I believe with the right amount of effort, we can find it someday too. He had scribbled the coordinates of the location he was trying to reach.","However, most of it is faded out and I can only tell faintly the remains of it: \n\n"+ChatColor.ITALIC+"X:---\nY:---\nZ:--7-"+ChatColor.RESET+"\n\nYep, that's about it.","Hopefully by me recording this data, someone else can fill in the remaining numbers and we can all find The End together. Someday..."); + }break; + case 8:{ + bookdata.setAuthor("Joshua"); + bookdata.setTitle("Fourside"); + bookdata.addPage("Fourside\n"+ChatColor.ITALIC+" by Joshua"+"\n======"+ChatColor.RESET+"\n"+ChatColor.DARK_BLUE+"ABANDONED PROJECT"+ChatColor.RESET+". A city that would be developed with the best technology and the highest standards. It would","succeed every single Minecraft city that has ever been built. Casinos, diamond-lined walkways, towering skyscrapers as far as the eye can see. Museums, Libraries, Educational Institutions. This mega-city would be able to hold","and sustain every single Minecrafter in existence. But no, something went terribly wrong. Our engineering team finally developed the perfect transportation system and we were wiring it up to our fusion power plant.","Something went horribly wrong. The Fusion power plant started self-combusting itself, leaving behind hyper-cold atoms. This caused nucleic waste to interact with the environment around itself and freezing the whole world as we knew it.","The city idea as we knew it was scrapped, and we would wait 2000 years before we could attempt this again. We wrote plans for a much more portable solution and have named it 'Twoside' and archived it appropriately.","Maybe someone will pick up that book and be able to make the future bright with a mini version of Fourside. That being said, we left the 3rd slot of the Z position of our city at 7. This should give you enough clue as to where NOT to build."); + }break; + } + book.setItemMeta(bookdata); + //p.setItemInHand(book); + f.getKiller().getInventory().addItem(book); + f.getKiller().updateInventory(); + f.getKiller().sendMessage(ChatColor.LIGHT_PURPLE+"You feel a magical presence get inserted into your inventory."); + } + }*/ + } + if (f.getCustomName()!=null) { + if (f.getCustomName().contains("Strong")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("II")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("Venomous")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("Snaring")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("Charge")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("Explosive")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("Destructive")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains("Sniper")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getCustomName().contains(ChatColor.DARK_PURPLE+"")) { + e.setDroppedExp(e.getDroppedExp()*20); + f.setHealth(0); + this.plugin.BOSS_DEFEAT=100; + this.plugin.BOSS_DEFEAT_LOC=f.getLocation(); + //Create a chest at the death spot. + Bukkit.getWorld("world").getBlockAt(f.getLocation()).setType(Material.CHEST); + Chest c=(Chest)Bukkit.getWorld("world").getBlockAt(f.getLocation()).getState(); + for (int i=0;i<27;i++) { + ItemStack item = null; + if (Math.random()<=0.3) { + item = getGoodie(); + c.getBlockInventory().setItem(i, item); + } + } + } + } + if (this.plugin.getAccountsConfig().getBoolean("halloween-enabled")) { + e.setDroppedExp(e.getDroppedExp()*2); + } + if (f.getKiller()!=null && f.getKiller().getType()==EntityType.PLAYER) { + Player p = f.getKiller(); + for (int x=-10;x<10;x++) { + for (int y=-3;y<3;y++) { + for (int z=-10;z<10;z++) { + if (f.getWorld().getBlockAt(f.getLocation().add(x,y,z)).getType()==Material.MOB_SPAWNER) { + //This is near a spawner. Do not drop exp orbs or items. + List drops = e.getDrops(); + for (int i=0;i=5) { + e.setDroppedExp(e.getDroppedExp()*2); + } + p.giveExp(e.getDroppedExp()); + if (e.getDroppedExp()!=0) { + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 0.9f, 1); + } + //p.sendMessage(f.getType()+" is mad at you."); + if (!this.plugin.PlayerinJob(p, "Support")) { + //Make sure a support did not kill it. + for (int i=0;i=10) { + List drops = e.getDrops(); + for (int i=0;i0) { + ItemStack reward = getGoodie(); + Bukkit.getWorld("world").dropItemNaturally(s.getLocation(), reward); + times--; + } + } + } + } + e.setDroppedExp(0); + /* + if (f.getType()==EntityType.PLAYER) { + Player p = (Player)f; + Bukkit.getPlayer("sigonasr2").sendMessage("EXP Lost: "+p.get); + if (this.plugin.PlayerinJob(p, "Explorer")) { + if (this.plugin.getJobLv("Explorer", p)>=10) { + //Don't lose levels. + + } + } + }*/ + } + } + + @EventHandler + public void onFoodLevelChange(FoodLevelChangeEvent e) { + //Check for nearby support. + if (e.getEntity().getType()==EntityType.PLAYER) { + HumanEntity p = (HumanEntity)e.getEntity(); + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")>0) { + if (Math.random()<=this.plugin.getStatBonus(8, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9"))/100.0d) { + e.setFoodLevel(e.getFoodLevel()+1); + } + } + List nearby = p.getNearbyEntities(10, 10, 10); + for (int i=0;i=20) { + if (Math.random()<=0.50) { + e.setFoodLevel(e.getFoodLevel()+1); + } + } + } + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + Player p = e.getPlayer(); + if (e.getBucket()==Material.WATER_BUCKET) { + if (this.plugin.PlayerinJob(p, "Support")) { + //Check if someone's with us. If not, we don't get awarded for supporting. + List nearby = p.getNearbyEntities(10, 20, 10); + boolean playernearby=false; + boolean onfire=false; + for (int i=0;i0 && ((Player)nearby.get(i)).getHealth()<=8) { + //They are on fire, you intend to douse them. + this.plugin.gainMoneyExp(p,"Support",0.60,30); + } + } + } + if (playernearby) { + //Check for lava below. If we find some, award some money and experience. + boolean foundlava=false; + for (int x=-10;x<10;x++) { + for (int y=-20;y<0;y++) { + for (int z=-10;z<10;z++) { + if (Bukkit.getWorld("world").getBlockAt(p.getLocation().getBlockX()+x,p.getLocation().getBlockY()+y,p.getLocation().getBlockZ()+z).getType()==Material.LAVA) { + foundlava=true; + break; + } + } + if (foundlava) { + break; + } + } + if (foundlava) { + break; + } + } + if (foundlava) { + this.plugin.gainMoneyExp(p,"Support",0.05,10); + } + } + } + } + } + + + @EventHandler + public void onLightningStrike(LightningStrikeEvent e) { + if (this.plugin.last_lightning_random_time=5) { + //Half chance to set the durability back by one. + if (p.getItemInHand().getType()==Material.FISHING_ROD) { + if (p.getItemInHand().getDurability()>0) { + if (Math.random()>=0.5) { + p.getItemInHand().setDurability((short)(p.getItemInHand().getDurability()-1)); + } + } + } + } + if (this.plugin.getJobLv("Fisherman", p)>=20) { + e.setExpToDrop(e.getExpToDrop()*2); + int i=4; + while (i>0) { + if (Math.random()<=0.25) { + this.plugin.gainMoneyExp(p,"Fisherman",0.175,3); + if (Math.random()<=0.50) { + p.getInventory().addItem(new ItemStack(Material.COOKED_FISH)); + this.plugin.gainMoneyExp(p,"Fisherman",0.125,2); + } else { + p.getInventory().addItem(new ItemStack(Material.RAW_FISH)); + } + } + i--; + } + } else + if (this.plugin.getJobLv("Fisherman", p)>=10) { + e.setExpToDrop(e.getExpToDrop()*2); + if (Math.random()<=0.25) { + p.getInventory().addItem(new ItemStack(Material.RAW_FISH)); + this.plugin.gainMoneyExp(p,"Fisherman",0.175,3); + } + } + + } + } + } + + @EventHandler + public void onWorldLoad(WorldLoadEvent e) { + /*for (int i=0;i <"+f.getLocation().getY()+"> <"+f.getLocation().getZ()+">"); + f.remove(); + arrows++; + } + } + this.plugin.cleaned=true; + } + if (!e.isNewChunk()) { //Make sure this chunk is an existing one. + //Attempt to load up the custom chunk. + List debugmessages = new ArrayList(); + FileConfiguration customchunk = this.plugin.reloadChunksConfig(e.getChunk().getX(), e.getChunk().getZ()); + if (!customchunk.contains("animal-reset2")) { + customchunk.set("animal-reset2", Long.valueOf(Bukkit.getWorld("world").getFullTime()+17280000)); + Chunk c = e.getChunk(); + Random r = new Random(); + for (int x=0;x<16;x++) { + for (int z=0;z<16;z++) { + if (r.nextDouble()<=0.000244140625) { + Block b = Bukkit.getWorld("world").getBlockAt(x+c.getX()*16,Bukkit.getWorld("world").getHighestBlockYAt(x+c.getX()*16, z+c.getZ()*16),z+c.getZ()*16); + if (b.getType()!=Material.WATER && b.getType()!=Material.ICE && b.getType()!=Material.LAVA && !b.getBiome().name().equalsIgnoreCase("ocean") && !b.getBiome().name().equalsIgnoreCase("river")) { + if (b.getType()==Material.SNOW || b.getType()==Material.DIRT || b.getType()==Material.SAND || b.getType()==Material.LEAVES || b.getType()==Material.GRASS || b.getType()==Material.GRAVEL || b.getType()==Material.STONE || b.getType()==Material.COBBLESTONE || b.getType()==Material.MYCEL || b.getType()==Material.BROWN_MUSHROOM || b.getType()==Material.RED_MUSHROOM) { + if (b.getBiome().name().equalsIgnoreCase("plains")) { + //Best place for things to spawn. Any mob type can spawn here. + //Choose a mob type randomly. + EntityType[] mobs = {EntityType.COW,EntityType.HORSE,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN,EntityType.WOLF}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + } else { + if (b.getBiome().name().equalsIgnoreCase("forest")) { + //Wolves can still spawn here. Horses cannot. + //Choose a mob type randomly. + EntityType[] mobs = {EntityType.COW,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN,EntityType.WOLF}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + }else { + if (b.getBiome().name().equalsIgnoreCase("jungle")) { + //Chance to spawn ocelots here. + EntityType[] mobs = {EntityType.COW,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN,EntityType.OCELOT}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + }else { + //Choose a mob type randomly. + EntityType[] mobs = {EntityType.COW,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + } + } + } + } + } + } + ////Bukkit.getLogger().info("Biome here is "+b.getBiome().name()); + } + } + } else { + //Check the value and regenerate if necessary. + if (Bukkit.getWorld("world").getFullTime()>customchunk.getLong("animal-reset2")) { + customchunk.set("animal-reset2", Long.valueOf(Bukkit.getWorld("world").getFullTime()+17280000)); + Chunk c = e.getChunk(); + Random r = new Random(); + for (int x=0;x<16;x++) { + for (int z=0;z<16;z++) { + if (r.nextDouble()<=0.000244140625) { + Block b = Bukkit.getWorld("world").getBlockAt(x+c.getX()*16,Bukkit.getWorld("world").getHighestBlockYAt(x+c.getX()*16, z+c.getZ()*16),z+c.getZ()*16); + if (b.getType()!=Material.WATER && b.getType()!=Material.ICE && b.getType()!=Material.LAVA && !b.getBiome().name().equalsIgnoreCase("ocean") && !b.getBiome().name().equalsIgnoreCase("river")) { + if (b.getType()==Material.SNOW || b.getType()==Material.DIRT || b.getType()==Material.SAND || b.getType()==Material.LEAVES || b.getType()==Material.GRASS || b.getType()==Material.GRAVEL || b.getType()==Material.STONE || b.getType()==Material.COBBLESTONE || b.getType()==Material.MYCEL || b.getType()==Material.BROWN_MUSHROOM || b.getType()==Material.RED_MUSHROOM) { + if (b.getBiome().name().equalsIgnoreCase("plains")) { + //Best place for things to spawn. Any mob type can spawn here. + //Choose a mob type randomly. + EntityType[] mobs = {EntityType.COW,EntityType.HORSE,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN,EntityType.WOLF}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + } else { + if (b.getBiome().name().equalsIgnoreCase("forest")) { + //Wolves can still spawn here. Horses cannot. + //Choose a mob type randomly. + EntityType[] mobs = {EntityType.COW,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN,EntityType.WOLF}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + }else { + if (b.getBiome().name().equalsIgnoreCase("jungle")) { + //Chance to spawn ocelots here. + EntityType[] mobs = {EntityType.COW,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN,EntityType.OCELOT}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + }else { + //Choose a mob type randomly. + EntityType[] mobs = {EntityType.COW,EntityType.PIG,EntityType.SHEEP,EntityType.CHICKEN}; + int i=(int)(Math.random()*4)+2; + EntityType selected = mobs[(int)(mobs.length*Math.random())]; + ////Bukkit.getLogger().info("Spawned "+i+" "+selected.getName()+" in Biome "+b.getBiome().name()+" for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+"."); + debugmessages.add(" Spawned: "+i+" "+selected.getName()); + while (i>0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(b.getLocation().add(Math.random()*10-Math.random()*10,1,Math.random()*10-Math.random()*10), selected); + f.setRemoveWhenFarAway(false); //This should be a permanent mob. + i--; + } + } + } + } + } + } + } + ////Bukkit.getLogger().info("Biome here is "+b.getBiome().name()); + } + } + } + } + if (!customchunk.contains("diamond-generate")) { + customchunk.set("diamond-generate", Boolean.valueOf(true)); + Chunk c = e.getChunk(); + int adddiamond=0; + for (int x=0;x<16;x++) { + for (int y=5;y<25;y++) { + for (int z=0;z<16;z++) { + Block b = Bukkit.getWorld("world").getBlockAt(x+c.getX()*16,y,z+c.getZ()*16); + if (b!=null && b.getType()==Material.STONE) { + if (Math.random()<=0.000625) { + int i=(int)(Math.random()*8.0d)+1; + while (i>0) { + Block d = c.getBlock(x+(int)(Math.random()*i)-(int)(Math.random()*i), y+(int)(Math.random()*i)-(int)(Math.random()*i), z+(int)(Math.random()*i)-(int)(Math.random()*i)); + adddiamond++; + b.setType(Material.DIAMOND_ORE); + i--; + } + //Make a patch between 1 and 8. + } + } + } + } + } + ////Bukkit.getLogger().info("Generated "+adddiamond+" new diamonds for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()); + if (adddiamond>0) { + debugmessages.add(" Added "+adddiamond+" diamond"+((adddiamond!=1)?"s":"")+"."); + } + } + if (!customchunk.contains("limit-ore-generation")) { + customchunk.set("limit-ore-generation", Boolean.valueOf(true)); + Chunk c = e.getChunk(); + int removeore=0,totalore=0,newore=0; + for (int x=0;x<16;x++) { + for (int y=5;y<96;y++) { + for (int z=0;z<16;z++) { + Block b = Bukkit.getWorld("world").getBlockAt(x+c.getX()*16,y,z+c.getZ()*16); + if (b!=null && (b.getType()==Material.COAL_ORE || + b.getType()==Material.IRON_ORE || + b.getType()==Material.GOLD_ORE || + b.getType()==Material.REDSTONE_ORE || + b.getType()==Material.LAPIS_ORE || + b.getType()==Material.DIAMOND_ORE)) { + if (Math.random()<=0.60) { + removeore++; + b.setType(Material.STONE); + //Make a patch between 1 and 8. + } + totalore++; + } + } + } + } + for (int x=0;x<16;x++) { + for (int y=5;y<96;y++) { + for (int z=0;z<16;z++) { + Block b = Bukkit.getWorld("world").getBlockAt(x+c.getX()*16,y,z+c.getZ()*16); + if (b!=null && (b.getType()==Material.COAL_ORE || + b.getType()==Material.IRON_ORE || + b.getType()==Material.GOLD_ORE || + b.getType()==Material.REDSTONE_ORE || + b.getType()==Material.LAPIS_ORE || + b.getType()==Material.DIAMOND_ORE)) { + newore++; + } + } + } + } + ////Bukkit.getLogger().info("Removed "+removeore+"/"+totalore+" ore for chunk "+e.getChunk().getX()+","+e.getChunk().getZ()+". There are now "+newore+" ores left."); + debugmessages.add(" Removed: "+removeore+"/"+totalore+" ores."); + } + this.plugin.saveChunksConfig(customchunk, e.getChunk().getX(), e.getChunk().getZ()); + if (debugmessages.size()>0) { + for (int i=0;i newlore = new ArrayList(); + newlore.add("Requires "+((int)(Math.random()*1000)+100)+" Pumpkin Pie in inventory"); + newlore.add("to convert to a legendary equipment item."); + meta.setLore(newlore); + meta.setDisplayName(ChatColor.GREEN+"Magical Pumpkin Pie"); + pump.setItemMeta(meta); + a.addItem(pump); + p.openInventory(a); + } + } + } + } + for (int m=0;m data = p.getInventory().getContents()[m].getItemMeta().getLore(); + //newlore.add("Requires "+((int)(Math.random()*1000)+100)+" Pumpkin Pie in inventory"); + ItemStack magic_pie = null; + for (int i=0;i=pies) { + p.getInventory().remove(magic_pie); + int deductpies=pies; + int itemslot=0; + while (deductpies>0 || itemslot0) { + if (p.getInventory().getItem(itemslot).getType()==Material.PUMPKIN_PIE && p.getInventory().getItem(itemslot).getItemMeta().getDisplayName()==null) { + if (p.getInventory().getItem(itemslot).getAmount()>1) { + p.getInventory().remove(p.getInventory().getItem(itemslot)); + deductpies-=p.getInventory().getItem(itemslot).getAmount(); + } else { + p.getInventory().remove(p.getInventory().getItem(itemslot)); + deductpies-=1; + } + itemslot++; + } else { + itemslot++; + } + } else { + itemslot++; + } + } + /* + for (int i=0;i0) { + if (amountleft>=64) { + p.getInventory().addItem(new ItemStack(Material.PUMPKIN_PIE,64)); + amountleft-=64; + } else { + p.getInventory().addItem(new ItemStack(Material.PUMPKIN_PIE,1)); + amountleft--; + } + }*/ + //Give a legendary armor/weapon here. + //Bukkit.getLogger().info("LEGENDARY!"); + giveLegendaryItem(p); + p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION,1728000,0)); + p.updateInventory(); + } + } + } + } + } + } + + @EventHandler + public void onHurt(EntityDamageEvent e) { + if (e.getEntity().getType()==EntityType.PLAYER) { + final Player p = (Player)e.getEntity(); + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + } + },5); + //p.sendMessage("Your Health: "+p.getHealth()+", Damage: "+e.getDamage()+", Actual: "+this.plugin.DMGCALC.getDamage(p, e.getDamage(), DamageCause.ENTITY_ATTACK)); + double actualdmg = this.plugin.DMGCALC.getDamage(p, e.getDamage(), e.getCause()); + List nearby = p.getNearbyEntities(10, 10, 10); + for (int i=0;i=20) { + //A support with the Lv20 buff is detected. If health is less than 8, take half damage. + if (p.getHealth()<=8) { + e.setDamage(e.getDamage()/2.0d); + } + } + } + if (this.plugin.PlayerinJob(p, "Explorer")) { + if (this.plugin.getJobLv("Explorer", p)>=10) { + //Check to see if our "fatal survivor" effect is available. + boolean survivor=false; + for (int i=0;i='a'&&mod[i]<='z') { + mod[i]-=32; + first=true; + } else + if (i==0) { + if (mod[i]>='A'&&mod[i]<='Z') { + first=true; + } + } else { + if (mod[i]>='A'&&mod[i]<='Z'&&(mod[i-1]<'A'||mod[i-1]>'Z')) { + first=true; + } + } + } else { + if (mod[i-1]!=' ') { + if (mod[i]>='A'&&mod[i]<='Z') { + mod[i]+=32; + } + } + } + } + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Picked up "+e.getItem().getItemStack().getAmount()+" "+String.valueOf(mod)+"."); + } + } + + @EventHandler + public void onPlayerOnFire(EntityCombustEvent e) { + if (e.getEntity().getType()==EntityType.PLAYER) { + Player p = (Player)e.getEntity(); + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")>0) { + p.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, (this.plugin.getStatBonus(5, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6"))/3)*20, 0)); + } + } + } + + @EventHandler + public void onRegainHealth(EntityRegainHealthEvent e) { + if (e.getEntity().getType()==EntityType.PLAYER) { + Player p = (Player)e.getEntity(); + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + try { + Iterator effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.REGENERATION.getName())==0) { + e.setAmount(e.getAmount()+1); + } + /*if (nexteffect.getType().getName().compareTo(PotionEffectType.JUMP.getName())==0) { + p.removePotionEffect(PotionEffectType.JUMP); + p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 360000, nexteffect.getAmplifier()+2, true)); + }*/ + effects.remove(); + } + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while trying to regenerate player."); + } + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")>0) { + e.setAmount(e.getAmount()+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6)); + } + } + } + + @EventHandler + public void onEnemyHit(EntityDamageByEntityEvent e) { + if (e.getEntity() instanceof LivingEntity) { + LivingEntity l = (LivingEntity)e.getEntity(); + if (l.getCustomName()!=null && l.getCustomName().contains(ChatColor.DARK_PURPLE+"")) { + if (l.getHealth()>=1) { + LivingEntity enderdragon = (LivingEntity)Bukkit.getWorld("world").spawnEntity(new Location(l.getWorld(),l.getLocation().getBlockX(),-250,l.getLocation().getBlockZ()),EntityType.ENDER_DRAGON); + enderdragon.setCustomName(ChatColor.DARK_PURPLE+"Charge Zombie III"); + enderdragon.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE,127,999999)); + enderdragon.setMaxHealth(200); + enderdragon.setHealth(l.getHealth()/l.getMaxHealth()*200); + enderdragon.setNoDamageTicks(999999); + enderdragon.setRemoveWhenFarAway(false); + } + Iterator e_list = Bukkit.getWorld("world").getEntitiesByClass(EnderDragon.class).iterator(); + boolean first=false; + while (e_list.hasNext()) { + //p.sendMessage("Moving Enderdragon to "+new Location(p.getWorld(),p.getLocation().getBlockX()+i,-50,p.getLocation().getBlockZ()+j)); + EnderDragon next = e_list.next(); + if (!first) { + first=true; + } else { + next.remove(); + } + } + boolean clear_torches=false; + try { + Iterator effects = l.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.SLOW.getName())==0 && nexteffect.getDuration()>99999) { + l.removePotionEffect(PotionEffectType.SLOW); + //Make lightning strikes in random places. + for (int i=0;i<8;i++) { + Bukkit.getWorld("world").strikeLightningEffect(l.getLocation().add(Math.random()*10-Math.random()*10,0,Math.random()*10-Math.random()*10)); + this.plugin.last_lightning_random_time=Bukkit.getWorld("world").getFullTime()+60; + } + int extramobs=0; + List nearbylist = e.getEntity().getNearbyEntities(30, 30, 30); + //Filter out all unrelated entity types. + for (int k=0;k nearbylist = e.getEntity().getNearbyEntities(30, 30, 30); + //Filter out all unrelated entity types. + for (int k=0;k100) { + extradurability=(0.24*((this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } else { + extradurability=-(0.76*(1-(this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } + } + } + //Bukkit.getLogger().info("Made it through 2.1.6."); + } + if (Math.random()<=0.76+extradurability) { + item.setDurability((short)(item.getDurability()-1)); + ////Bukkit.getLogger().info("Armor durability now "+item.getDurability()); + } + //Bukkit.getLogger().info("Made it through 2.1.7."); + this.plugin.SPEED_CONTROL.get(slot).boots_durability=item.getDurability(); + //Bukkit.getLogger().info("Made it through 2.1.8."); + } + } + } else { + this.plugin.SPEED_CONTROL.get(slot).boots_durability=-1; + //Bukkit.getLogger().info("Made it through 2.1.9."); + } + //Bukkit.getLogger().info("Made it through 2.1."); + if (p.getEquipment().getChestplate()!=null) { + ItemStack item = p.getEquipment().getChestplate(); + if (item.getItemMeta()!=null && item.getItemMeta().getLore()!=null && item.getItemMeta().getLore().size()!=0) { + for (int i=0;i100) { + extradurability=(0.24*((this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } else { + extradurability=-(0.76*(1-(this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } + } + } + } + if (Math.random()<=0.76+extradurability) { + item.setDurability((short)(item.getDurability()-1)); + ////Bukkit.getLogger().info("Armor durability now "+item.getDurability()); + } + this.plugin.SPEED_CONTROL.get(slot).chestplate_durability=item.getDurability(); + } + } + } else { + this.plugin.SPEED_CONTROL.get(slot).chestplate_durability=-1; + } + //Bukkit.getLogger().info("Made it through 2.2."); + if (p.getEquipment().getLeggings()!=null) { + ItemStack item = p.getEquipment().getLeggings(); + if (item.getItemMeta()!=null && item.getItemMeta().getLore()!=null && item.getItemMeta().getLore().size()!=0) { + for (int i=0;i100) { + extradurability=(0.24*((this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } else { + extradurability=-(0.76*(1-(this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } + } + } + } + if (Math.random()<=0.76+extradurability) { + item.setDurability((short)(item.getDurability()-1)); + ////Bukkit.getLogger().info("Armor durability now "+item.getDurability()); + } + this.plugin.SPEED_CONTROL.get(slot).leggings_durability=item.getDurability(); + } + } + } else { + this.plugin.SPEED_CONTROL.get(slot).leggings_durability=-1; + } + //Bukkit.getLogger().info("Made it through 2.3"); + if (p.getEquipment().getHelmet()!=null) { + ItemStack item = p.getEquipment().getHelmet(); + if (item.getItemMeta()!=null && item.getItemMeta().getLore()!=null && item.getItemMeta().getLore().size()!=0) { + for (int i=0;i100) { + extradurability=(0.24*((this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } else { + extradurability=-(0.76*(1-(this.plugin.getEnchantmentNumb(item.getItemMeta().getLore().get(i))/500.0d))); + } + } + } + } + if (Math.random()<=0.76+extradurability) { + item.setDurability((short)(item.getDurability()-1)); + ////Bukkit.getLogger().info("Armor durability now "+item.getDurability()); + } + this.plugin.SPEED_CONTROL.get(slot).helmet_durability=item.getDurability(); + } + } + } else { + this.plugin.SPEED_CONTROL.get(slot).helmet_durability=-1; + } + //Bukkit.getLogger().info("Made it through 3."); + //This is the player getting hit. + for (int i=0;i effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.SPEED.getName())==0) { + p.removePotionEffect(PotionEffectType.SPEED); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1200,nexteffect.getAmplifier())); + } + effects.remove(); + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while finalizing player speed."); + } + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1200,1)); + } + if (Math.random()<=block_chance/100.0d) { + e.setDamage(0); + e.setCancelled(true); + } + //Bukkit.getLogger().info("Made it through 4."); + p.updateInventory(); + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")>0) { + double olddmg=e.getDamage(); + e.setDamage(e.getDamage()*(((100-this.plugin.getStatBonus(2, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4))/100.0d))); + //p.sendMessage("Damage set from "+olddmg+" to "+e.getDamage()); + } + } + //Bukkit.getLogger().info("Made it through 5."); + if (e.getEntity().getType()==EntityType.PLAYER && e.getDamager().getType()==EntityType.SPIDER) { + LivingEntity enemy = (LivingEntity)e.getDamager(); + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.YELLOW+"Venomous Spider")==0)) { + LivingEntity p = (LivingEntity)e.getEntity(); + p.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 1, false)); + } else + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.GOLD+"Venomous Spider II")==0)) { + LivingEntity p = (LivingEntity)e.getEntity(); + p.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 2, false)); + } else + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.YELLOW+"Snaring Spider")==0)) { + LivingEntity p = (LivingEntity)e.getEntity(); + p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100, 2, false)); + //Create web at the position of the player. + /* + for (int x=-1;x<2;x++) { + for (int y=-1;y<2;y++) { + for (int z=-1;z<2;z++) { + Block b = Bukkit.getWorld("world").getBlockAt(p.getLocation().add(x,y,z)); + if (b.getType()==Material.AIR) { + b.setType(Material.WEB); + this.plugin.TEMP_WEBS.add(new TempWeb(p.getLocation().add(x,y,z), 90)); + } + } + } + }*/ + } else + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.GOLD+"Snaring Spider II")==0)) { + LivingEntity p = (LivingEntity)e.getEntity(); + try { + Iterator effects = p.getActivePotionEffects().iterator(); + //Figure out potion effects when player joins. + while (effects.hasNext()) { + PotionEffect nexteffect = effects.next(); + if (nexteffect.getType().getName().compareTo(PotionEffectType.SLOW.getName())==0) { + p.removePotionEffect(PotionEffectType.SLOW); + p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 150, nexteffect.getAmplifier()+1, true)); + } + /*if (nexteffect.getType().getName().compareTo(PotionEffectType.JUMP.getName())==0) { + p.removePotionEffect(PotionEffectType.JUMP); + p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 360000, nexteffect.getAmplifier()+2, true)); + }*/ + effects.remove(); + } + + } catch (ConcurrentModificationException ex_e) { + Bukkit.getLogger().warning("Potion Effect Collection not accessible while trying to slow down player."); + } + p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 150, 1, true)); + //Create web at the position of the player. + /*for (int x=-2;x<3;x++) { + for (int y=-2;y<3;y++) { + for (int z=-2;z<3;z++) { + Block b = Bukkit.getWorld("world").getBlockAt(p.getLocation().add(x,y,z)); + if (b.getType()==Material.AIR) { + b.setType(Material.WEB); + this.plugin.TEMP_WEBS.add(new TempWeb(p.getLocation().add(x,y,z), 150)); + } + } + } + }*/ + } + } + //Bukkit.getLogger().info("Made it through 6."); + if (e.getEntity().getType()==EntityType.PLAYER && e.getDamager().getType()==EntityType.ZOMBIE) { + LivingEntity enemy = (LivingEntity)e.getDamager(); + Player p = (Player)e.getEntity(); + p.getScoreboard().getTeam(p.getName()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth())); + double throughdmg=0; + double maxdmg=0; + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.YELLOW+"Charge Zombie")==0 || enemy.getCustomName().compareTo(ChatColor.DARK_PURPLE+"Charge Zombie III")==0)) { + throughdmg=(this.plugin.DMGCALC.getDamage(new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), e.getDamage(), DamageCause.ENTITY_ATTACK, false))/2; + if (throughdmg>e.getDamage()/2) { + if (p.getHealth()-throughdmg>0) { + p.setHealth(p.getHealth()-throughdmg); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify5") && e.getDamage()!=0) { + p.sendMessage(ChatColor.DARK_PURPLE+""+ChatColor.ITALIC+"You were hurt for "+Math.round(throughdmg*10)/10+" damage from "+convertToItemName(e.getCause().name())+"."); + } + } else { + p.setHealth(0); + } + } else { + if (p.getHealth()-e.getDamage()/2>0) { + p.setHealth(p.getHealth()-e.getDamage()/2); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify5") && e.getDamage()!=0) { + p.sendMessage(ChatColor.DARK_PURPLE+""+ChatColor.ITALIC+"You were hurt for "+Math.round(e.getDamage()/2*10)/10+" damage from "+convertToItemName(e.getCause().name())+"."); + } + } else { + p.setHealth(0); + } + } + e.setDamage(0); + for (int k=-1;k<2;k++) { + for (int j=-1;j<2;j++) { + Location checkloc = enemy.getLocation().add(k,1,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = enemy.getLocation().add(k,2,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = enemy.getLocation().add(k,0,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + } + } + } else + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.GOLD+"Charge Zombie II")==0)) { + throughdmg=(this.plugin.DMGCALC.getDamage(new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), e.getDamage(), DamageCause.ENTITY_ATTACK, false))/1.25d; + if (throughdmg>e.getDamage()) { + if (p.getHealth()-throughdmg>0) { + p.setHealth(p.getHealth()-throughdmg); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify5") && e.getDamage()!=0) { + p.sendMessage(ChatColor.DARK_PURPLE+""+ChatColor.ITALIC+"You were hurt for "+Math.round(throughdmg*10)/10+" damage from "+convertToItemName(e.getCause().name())+"."); + } + } else { + p.setHealth(0); + } + } else { + if (p.getHealth()-e.getDamage()>0) { + p.setHealth(p.getHealth()-e.getDamage()); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify5") && e.getDamage()!=0) { + p.sendMessage(ChatColor.DARK_PURPLE+""+ChatColor.ITALIC+"You were hurt for "+Math.round(e.getDamage()*10)/10+" damage from "+convertToItemName(e.getCause().name())+"."); + } + } else { + p.setHealth(0); + } + } + for (int k=-2;k<3;k++) { + for (int j=-2;j<3;j++) { + Location checkloc = enemy.getLocation().add(k,1,j); + Block bl = Bukkit.getWorld("world").getBlockAt(checkloc); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = enemy.getLocation().add(k,2,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + bl = Bukkit.getWorld("world").getBlockAt(checkloc); + checkloc = enemy.getLocation().add(k,0,j); + if (bl.getType()!=Material.BEDROCK && bl.getType()!=Material.ENDER_PORTAL_FRAME && bl.getType()!=Material.ENDER_PORTAL && bl.getType()!=Material.MOB_SPAWNER) { + bl.breakNaturally(); + } + } + } + e.setDamage(0); + } else + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.GRAY+"Zombie Ninja")==0)) { + enemy.removePotionEffect(PotionEffectType.INVISIBILITY); + this.plugin.ninjavisible_list.add(new InvisibilityData(enemy.getUniqueId(), Bukkit.getWorld("world").getFullTime()+10)); + } + } + //Bukkit.getLogger().info("Made it through 7."); + if (e.getEntity() instanceof LivingEntity) { + LivingEntity f = (LivingEntity) e.getEntity(); + if (e.getDamager().getType()==EntityType.PLAYER || e.getDamager().getType()==EntityType.ARROW) { + if (e.getDamager().getType()==EntityType.PLAYER) { + if (e.getEntity() instanceof LivingEntity) { + LivingEntity enemy = (LivingEntity)e.getEntity(); + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.GRAY+"Zombie Ninja")==0)) { + boolean found=false; + for (int i=0;i0) { + if (Math.random()<=critical_chance/100.0d) { + e.setDamage(e.getDamage()*2); + } + } + if (f.getNoDamageTicks()0) { + double normaldmg=(this.plugin.DMGCALC.getDamage(f.getEquipment().getHelmet(), f.getEquipment().getChestplate(), f.getEquipment().getLeggings(), f.getEquipment().getBoots(), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + double throughdmg=(this.plugin.DMGCALC.getDamage(new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + if (throughdmg>normaldmg+armor_pen) { + //This means some piercing can be done. + //e.setDamage(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)); + if (f.getHealth()-(normaldmg+armor_pen)>0) { + f.setHealth(f.getHealth()-(normaldmg+armor_pen)); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(normaldmg+armor_pen)*10)/10+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(normaldmg+armor_pen)*10)/10+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } else { + //This means piercing would do extra damage. Just subtract throughdmg. + if (f.getHealth()-throughdmg>0) { + f.setHealth(f.getHealth()-throughdmg); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } + e.setDamage(0); + } + if (f.getNoDamageTicks()0) { + if (p.getHealth()+e.getDamage()*(life_steal/100.0d)0) { + f.setNoDamageTicks(f.getNoDamageTicks()-(int)(f.getNoDamageTicks()*(attack_speed/100.0d))); + } + if (dmg>0) { + e.setDamage(e.getDamage()+dmg); + } + if (this.plugin.PlayerinJob((Player)e.getDamager(), "Support")) { + for (int i=0;i=5) { + //Deal 2 extra damage. + e.setDamage(e.getDamage()+2); + } + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")>0) { + e.setDamage(e.getDamage()+(this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7"))/2)); + } + if (f.getNoDamageTicks()0) { + //e.setDamage(e.getDamage()+(this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5"))/4)); + double normaldmg=(this.plugin.DMGCALC.getDamage(f.getEquipment().getHelmet(), f.getEquipment().getChestplate(), f.getEquipment().getLeggings(), f.getEquipment().getBoots(), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + double throughdmg=(this.plugin.DMGCALC.getDamage(new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + if (throughdmg>normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)) { + //This means some piercing can be done. + //e.setDamage(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)); + if (f.getHealth()-(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))>0) { + f.setHealth(f.getHealth()-(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } else { + //This means piercing would do extra damage. Just subtract throughdmg. + if (f.getHealth()-throughdmg>0) { + f.setHealth(f.getHealth()-throughdmg); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } + e.setDamage(0); + } + if (f.getNoDamageTicks()0) { + if (Math.random()<=critical_chance/100.0d) { + e.setDamage(e.getDamage()*2); + } + } + if (f.getNoDamageTicks()0) { + double normaldmg=(this.plugin.DMGCALC.getDamage(f.getEquipment().getHelmet(), f.getEquipment().getChestplate(), f.getEquipment().getLeggings(), f.getEquipment().getBoots(), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + double throughdmg=(this.plugin.DMGCALC.getDamage(new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + if (throughdmg>normaldmg+armor_pen) { + //This means some piercing can be done. + //e.setDamage(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)); + if (f.getHealth()-(normaldmg+armor_pen)>0) { + f.setHealth(f.getHealth()-(normaldmg+armor_pen)); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(normaldmg+armor_pen)*10)/10+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(normaldmg+armor_pen)*10)/10+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } else { + //This means piercing would do extra damage. Just subtract throughdmg. + if (f.getHealth()-throughdmg>0) { + f.setHealth(f.getHealth()-throughdmg); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } + e.setDamage(0); + } + if (f.getNoDamageTicks()0) { + if (p.getHealth()+e.getDamage()*(life_steal/100.0d)0) { + f.setNoDamageTicks(f.getNoDamageTicks()-(int)(f.getNoDamageTicks()*(attack_speed/100.0d))); + } + if (dmg>0) { + e.setDamage(e.getDamage()+dmg); + } + if (e.getEntity() instanceof LivingEntity) { + LivingEntity enemy = (LivingEntity)e.getEntity(); + if (enemy.getCustomName()!=null && (enemy.getCustomName().compareTo(ChatColor.GRAY+"Zombie Ninja")==0)) { + boolean found=false; + for (int i=0;i=5) { + //Deal 2 extra damage. + e.setDamage(e.getDamage()+2); + } + if (this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")>0) { + e.setDamage(e.getDamage()+(this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7"))/2)); + } + if (f.getNoDamageTicks()0) { + //e.setDamage(e.getDamage()+(this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5"))/4)); + double normaldmg=(this.plugin.DMGCALC.getDamage(f.getEquipment().getHelmet(), f.getEquipment().getChestplate(), f.getEquipment().getLeggings(), f.getEquipment().getBoots(), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + double throughdmg=(this.plugin.DMGCALC.getDamage(new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), new ItemStack(Material.AIR), e.getDamage(), DamageCause.ENTITY_ATTACK, false)); + if (throughdmg>normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)) { + //This means some piercing can be done. + //e.setDamage(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)); + if (f.getHealth()-(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))>0) { + f.setHealth(f.getHealth()-(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(normaldmg+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } else { + //This means piercing would do extra damage. Just subtract throughdmg. + if (f.getHealth()-throughdmg>0) { + f.setHealth(f.getHealth()-throughdmg); + if (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")) { + if (f.getCustomName()!=null) { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getCustomName())+"."); + } else { + p.sendMessage(ChatColor.RED+""+ChatColor.ITALIC+" Dealt "+(Math.round(throughdmg)*10)/10+" damage to "+convertToItemName(f.getType().getName())+"."); + } + } + } else { + f.setHealth(0); + } + } + e.setDamage(0); + } + if (f.getNoDamageTicks()=20) { + if (Math.random()<=0.05) { + ItemStack replenishitem = e.getItemInHand().clone(); + replenishitem.setAmount(1); + p.getInventory().addItem(replenishitem); + p.updateInventory(); + } + } else + if (this.plugin.getJobLv("Builder", p)>=10) { + if (Math.random()<=0.01) { + ItemStack replenishitem = e.getItemInHand().clone(); + replenishitem.setAmount(1); + p.getInventory().addItem(replenishitem); + p.updateInventory(); + } + } + if (e.getBlockPlaced().getType()==Material.COBBLESTONE) { + this.plugin.gainMoneyExp(p,"Builder",0.005,1); + if (this.plugin.getJobLv("Builder", p)>=5 && (int)this.plugin.getcurrentJobExp("Builder", p)%5==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + if (e.getBlockPlaced().getType()==Material.WOOD) { + this.plugin.gainMoneyExp(p,"Builder",0.005,2); + for (int i=0;i<2;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.LOG) { + this.plugin.gainMoneyExp(p,"Builder",0.01,3); + for (int i=0;i<3;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.WOOD_STEP) { + this.plugin.gainMoneyExp(p,"Builder",0.015,3); + for (int i=0;i<2;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.COBBLESTONE_STAIRS) { + this.plugin.gainMoneyExp(p,"Builder",0.015,3); + for (int i=0;i<2;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.STONE) { + this.plugin.gainMoneyExp(p,"Builder",0.015,4); + for (int i=0;i<4;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.FENCE) { + this.plugin.gainMoneyExp(p,"Builder",0.015,3); + for (int i=0;i<3;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.STEP) { + switch (e.getBlockPlaced().getData()) { + case 0:{ + this.plugin.gainMoneyExp(p,"Builder",0.02,4); + for (int i=0;i<4;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 1:{ + this.plugin.gainMoneyExp(p,"Builder",0.025,4); + for (int i=0;i<4;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 3:{ + this.plugin.gainMoneyExp(p,"Builder",0.015,3); + for (int i=0;i<3;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 4:{ + this.plugin.gainMoneyExp(p,"Builder",0.05,9); + for (int i=0;i<9;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 5:{ + this.plugin.gainMoneyExp(p,"Builder",0.03,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 6:{ + this.plugin.gainMoneyExp(p,"Builder",0.03,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 7:{ + this.plugin.gainMoneyExp(p,"Builder",0.06,12); + for (int i=0;i<12;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 8:{ + this.plugin.gainMoneyExp(p,"Builder",0.02,4); + for (int i=0;i<4;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 9:{ + this.plugin.gainMoneyExp(p,"Builder",0.025,4); + for (int i=0;i<4;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 10:{ + this.plugin.gainMoneyExp(p,"Builder",0.015,3); + for (int i=0;i<3;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 11:{ + this.plugin.gainMoneyExp(p,"Builder",0.015,3); + for (int i=0;i<3;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 12:{ + this.plugin.gainMoneyExp(p,"Builder",0.05,9); + for (int i=0;i<9;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 13:{ + this.plugin.gainMoneyExp(p,"Builder",0.03,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 14:{ + this.plugin.gainMoneyExp(p,"Builder",0.03,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + case 15:{ + this.plugin.gainMoneyExp(p,"Builder",0.06,12); + for (int i=0;i<12;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + }break; + } + } + if (e.getBlockPlaced().getType()==Material.WOOD_STAIRS) { + this.plugin.gainMoneyExp(p,"Builder",0.02,4); + for (int i=0;i<4;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.LAPIS_BLOCK) { + this.plugin.gainMoneyExp(p,"Builder",0.02,3); + for (int i=0;i<3;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.COBBLE_WALL) { + this.plugin.gainMoneyExp(p,"Builder",0.025,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.NETHER_BRICK_STAIRS) { + this.plugin.gainMoneyExp(p,"Builder",0.025,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.NETHER_BRICK) { + this.plugin.gainMoneyExp(p,"Builder",0.03,5); + for (int i=0;i<5;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.NETHER_FENCE) { + this.plugin.gainMoneyExp(p,"Builder",0.03,6); + for (int i=0;i<6;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.WOOL) { + this.plugin.gainMoneyExp(p,"Builder",0.035,7); + for (int i=0;i<7;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.getMaterial(109)) { + this.plugin.gainMoneyExp(p,"Builder",0.04,8); + for (int i=0;i<8;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.getMaterial(98)) { + this.plugin.gainMoneyExp(p,"Builder",0.04,8); + for (int i=0;i<8;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.GLASS) { + this.plugin.gainMoneyExp(p,"Builder",0.04,8); + for (int i=0;i<8;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.GLOWSTONE) { + this.plugin.gainMoneyExp(p,"Builder",0.05,10); + for (int i=0;i<10;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.HARD_CLAY) { + this.plugin.gainMoneyExp(p,"Builder",0.05,10); + for (int i=0;i<10;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.STAINED_CLAY) { + this.plugin.gainMoneyExp(p,"Builder",0.05,10); + for (int i=0;i<10;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.SANDSTONE_STAIRS) { + this.plugin.gainMoneyExp(p,"Builder",0.05,10); + for (int i=0;i<10;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.SANDSTONE) { + this.plugin.gainMoneyExp(p,"Builder",0.06,10); + for (int i=0;i<10;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.QUARTZ_STAIRS) { + this.plugin.gainMoneyExp(p,"Builder",0.06,12); + for (int i=0;i<12;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.IRON_FENCE) { + this.plugin.gainMoneyExp(p,"Builder",0.06,12); + for (int i=0;i<12;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.BRICK_STAIRS) { + this.plugin.gainMoneyExp(p,"Builder",0.065,9); + for (int i=0;i<9;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.QUARTZ_BLOCK) { + this.plugin.gainMoneyExp(p,"Builder",0.07,14); + for (int i=0;i<14;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + if (e.getBlockPlaced().getType()==Material.BRICK) { + this.plugin.gainMoneyExp(p,"Builder",0.075,11); + for (int i=0;i<11;i++) { + if (this.plugin.getJobLv("Builder", p)>=5 && ((((int)this.plugin.getcurrentJobExp("Builder", p))%5)-i)==0) { + //Give a torch to the player. + p.getInventory().addItem(new ItemStack(Material.TORCH,1)); p.updateInventory(); + } + } + } + } + } + if (this.plugin.PlayerinJob(p, "Miner")) { + this.plugin.playerdata_list.get(myData).BadInteract(e.getBlockPlaced().getType()); + } + if (this.plugin.PlayerinJob(p, "Digger")) { + this.plugin.playerdata_list.get(myData).BadInteract(e.getBlockPlaced().getType()); + } + if (this.plugin.PlayerinJob(p, "Farmer")) { + if (e.getBlockPlaced().getType()==Material.CROPS) { + this.plugin.gainMoneyExp(p,"Farmer",0.005,1); + } + if (e.getBlockPlaced().getType()==Material.PUMPKIN_SEEDS) { + this.plugin.gainMoneyExp(p,"Farmer",0.01,2); + } + if (e.getBlockPlaced().getType()==Material.MELON_SEEDS) { + this.plugin.gainMoneyExp(p,"Farmer",0.01,2); + } + } + if (this.plugin.PlayerinJob(p, "Support")) { + if (e.getBlockPlaced().getType()==Material.TORCH) { + //Make sure there are no other torches or Glowstone nearby. + boolean found=false; + for (int x=-5;x<5;x++) { + for (int y=-3;y<3;y++) { + for (int z=-5;z<5;z++) { + if (Bukkit.getWorld(p.getWorld().getName()).getBlockAt(p.getLocation().add(x,0,z)).getType()==Material.TORCH || Bukkit.getWorld(p.getWorld().getName()).getBlockAt(p.getLocation().add(x,0,z)).getType()==Material.GLOWSTONE) { + found=true; + break; + } + if (found) { + break; + } + } + if (found) { + break; + } + } + } + if (!found) { + this.plugin.gainMoneyExp(p,"Support",0.00,1); + } + } else + if (e.getBlockPlaced().getType()==Material.GLOWSTONE) { + //Make sure there are no other torches or Glowstone nearby. + boolean found=false; + for (int x=-5;x<5;x++) { + for (int y=-3;y<3;y++) { + for (int z=-5;z<5;z++) { + if (Bukkit.getWorld(p.getWorld().getName()).getBlockAt(p.getLocation().add(x,0,z)).getType()==Material.TORCH || Bukkit.getWorld(p.getWorld().getName()).getBlockAt(p.getLocation().add(x,0,z)).getType()==Material.GLOWSTONE) { + found=true; + break; + } + if (found) { + break; + } + } + if (found) { + break; + } + } + } + if (!found) { + this.plugin.gainMoneyExp(p,"Support",0.00,1); + } + } + } + if (this.plugin.getConfig().getBoolean("spleefinsession")==true && (this.plugin.getConfig().getString("spleefrequestaplayer").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestbplayer").compareTo(p.getName())==0)) { + e.setCancelled(true); + } + if (this.plugin.getConfig().getBoolean("spleef4insession")==true && (this.plugin.getConfig().getString("spleefrequesta4player").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestb4player").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestc4player").compareTo(p.getName())==0 || this.plugin.getConfig().getString("spleefrequestd4player").compareTo(p.getName())==0)) { + e.setCancelled(true); + } + return; + } + + @EventHandler + public void onItemBreak(PlayerItemBreakEvent e) { + Player p = e.getPlayer(); + ItemStack i = e.getBrokenItem(); + if (i.getItemMeta()!=null && i.getItemMeta().hasDisplayName() && i.getItemMeta().getDisplayName().compareTo("Spleef Wooden Shovel")==0) { + i.setDurability((short)0); + p.getInventory().addItem(i); + } + if (i.hasItemMeta() && i.getItemMeta().getLore()!=null) { + boolean is_halloween=false; + List finallore = new ArrayList(); + for (int j=0;j=10 && crafteditem==true) { + ItemStack resultingitem = result; + resultingitem.setAmount(resultingitem.getAmount()*2); + } + } + if (this.plugin.PlayerinJob(p,"Support")) { + if (result.getType()==Material.BREAD) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.MUSHROOM_SOUP) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.COOKIE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.GOLDEN_CARROT) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.GOLDEN_APPLE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.PUMPKIN_PIE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Support",0.015,2); + } + if (result.getType()==Material.IRON_SWORD) { + this.plugin.gainMoneyExp(p,"Support",0.015,3); + } + if (result.getType()==Material.IRON_CHESTPLATE || result.getType()==Material.IRON_HELMET || result.getType()==Material.IRON_BOOTS || result.getType()==Material.IRON_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Support",0.025,5); + } + if (result.getType()==Material.DIAMOND_SWORD) { + this.plugin.gainMoneyExp(p,"Support",0.075,8); + } + if (result.getType()==Material.DIAMOND_CHESTPLATE || result.getType()==Material.DIAMOND_HELMET || result.getType()==Material.DIAMOND_BOOTS || result.getType()==Material.DIAMOND_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Support",0.20,20); + } + if (result.getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Support",0.03,2); + } + } + } + } + }*/ + + @EventHandler + public void onInventoryCloseEvent(InventoryCloseEvent e) { + Player p = (Player)e.getPlayer(); + p.getScoreboard().getTeam(p.getName()).setPrefix(ChatColor.WHITE+""); + if (p.hasPermission("group.moderator")) { + p.getScoreboard().getTeam(p.getName()).setPrefix(ChatColor.GREEN+""); + } + if (p.hasPermission("group.administrators")) { + p.getScoreboard().getTeam(p.getName()).setPrefix(ChatColor.LIGHT_PURPLE+""); + } + if (e.getInventory().getName().contains("Item Cube")) { + int identifier=-1; + //Get idenfitier. + String ident_string=e.getInventory().getTitle().substring(e.getInventory().getTitle().indexOf("#")).replace("#", ""); + identifier=Integer.valueOf(ident_string); + if (identifier==-1) { + Bukkit.getLogger().severe("SEVERE error when saving Item Cube contents! Could not get ID!"); + return; + } + //We are going to save the contents of this inventory appropriately. + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + for (int i=0;i ench1 = ((EnchantmentStorageMeta) stack1.getItemMeta()).getStoredEnchants(); + Map ench2 = ((EnchantmentStorageMeta) stack2.getItemMeta()).getStoredEnchants(); + if(!ench1.equals(ench2)) return false; //Enchants aren't the same. + } + } + catch(ClassNotFoundException e){ + //Nothing. They dont have a build high enough to support this. + } + + return true; + } + + /** + * Returns the number of items that can be given to the inventory safely. + * @param inv The inventory to count + * @param item The item prototype. Material, durabiltiy and enchants must match for 'stackability' to occur. + * @return The number of items that can be given to the inventory safely. + */ + public static int countSpace(Inventory inv, ItemStack item){ + int space = 0; + for(ItemStack iStack : inv.getContents()){ + if(iStack == null || iStack.getType() == Material.AIR){ + space += item.getMaxStackSize(); + } + else if(matches(item, iStack)){ + space += item.getMaxStackSize() - iStack.getAmount(); + } + } + return space; + } + + public void giveLegendaryItem(Player p) { + String prefix = ""; + String suffix = ""; + int type=(int)(Math.random()*6); + //int type=5; //TESTING. + List enchants1 = new ArrayList(); + List enchants2 = new ArrayList(); + ItemStack finalitem = null; + if (type==0) { + finalitem=new ItemStack(Material.DIAMOND_HELMET); + enchants1.add("Protective"); + enchants1.add("Fire-Proof"); + enchants1.add("Blast Resistant"); + enchants1.add("Untouchable"); + enchants1.add("Breathing"); + enchants1.add("Working"); + enchants1.add("Unbreaking"); + enchants1.add("Thorny"); + enchants2.add("Life"); + enchants2.add("Resistance"); + enchants2.add("Durability"); + enchants2.add("Protection"); + } + if (type==1) { + finalitem=new ItemStack(Material.DIAMOND_CHESTPLATE); + enchants1.add("Protective"); + enchants1.add("Fire-Proof"); + enchants1.add("Blast Resistant"); + enchants1.add("Untouchable"); + enchants1.add("Unbreaking"); + enchants1.add("Thorny"); + enchants2.add("Life"); + enchants2.add("Resistance"); + enchants2.add("Durability"); + enchants2.add("Protection"); + } + if (type==2) { + finalitem=new ItemStack(Material.DIAMOND_LEGGINGS); + enchants1.add("Protective"); + enchants1.add("Fire-Proof"); + enchants1.add("Blast Resistant"); + enchants1.add("Untouchable"); + enchants1.add("Unbreaking"); + enchants1.add("Thorny"); + enchants2.add("Life"); + enchants2.add("Resistance"); + enchants2.add("Durability"); + enchants2.add("Protection"); + } + if (type==3) { + finalitem=new ItemStack(Material.DIAMOND_BOOTS); + enchants1.add("Protective"); + enchants1.add("Fire-Proof"); + enchants1.add("Blast Resistant"); + enchants1.add("Untouchable"); + enchants1.add("Lightweight"); + enchants1.add("Unbreaking"); + enchants1.add("Thorny"); + enchants2.add("Life"); + enchants2.add("Resistance"); + enchants2.add("Durability"); + enchants2.add("Protection"); + } + if (type==4) { + finalitem=new ItemStack(Material.BOW); + enchants1.add("Power"); + enchants1.add("Punch"); + enchants1.add("Flaming"); + enchants1.add("Infinite"); + enchants1.add("Unbreaking"); + enchants2.add("Smiting"); + enchants2.add("Penetration"); + enchants2.add("Draining"); + enchants2.add("Fury"); + enchants2.add("Power"); + } + if (type==5) { + finalitem=new ItemStack(Material.DIAMOND_SWORD); + enchants1.add("Damaging"); + enchants1.add("Knockback"); + enchants1.add("Undead"); + enchants1.add("Baning"); + enchants1.add("Fiery"); + enchants1.add("Greedy"); + enchants1.add("Unbreaking"); + enchants2.add("Smiting"); + enchants2.add("Penetration"); + enchants2.add("Draining"); + enchants2.add("Fury"); + enchants2.add("Power"); + } + prefix = enchants1.get((int)(Math.random()*enchants1.size())); + suffix = enchants2.get((int)(Math.random()*enchants2.size())); + if (prefix.equalsIgnoreCase("Protective")) { + finalitem.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 10); + } + if (prefix.equalsIgnoreCase("Fire-Proof")) { + finalitem.addUnsafeEnchantment(Enchantment.PROTECTION_FIRE, 10); + } + if (prefix.equalsIgnoreCase("Blast Resistant")) { + finalitem.addUnsafeEnchantment(Enchantment.PROTECTION_EXPLOSIONS, 10); + } + if (prefix.equalsIgnoreCase("Untouchable")) { + finalitem.addUnsafeEnchantment(Enchantment.PROTECTION_PROJECTILE, 10); + } + if (prefix.equalsIgnoreCase("Breathing")) { + finalitem.addUnsafeEnchantment(Enchantment.OXYGEN, 10); + } + if (prefix.equalsIgnoreCase("Working")) { + finalitem.addUnsafeEnchantment(Enchantment.WATER_WORKER, 10); + } + if (prefix.equalsIgnoreCase("Unbreaking")) { + finalitem.addUnsafeEnchantment(Enchantment.DURABILITY, 10); + } + if (prefix.equalsIgnoreCase("Thorny")) { + finalitem.addUnsafeEnchantment(Enchantment.THORNS, 10); + } + if (prefix.equalsIgnoreCase("Untouchable")) { + finalitem.addUnsafeEnchantment(Enchantment.PROTECTION_PROJECTILE, 10); + } + if (prefix.equalsIgnoreCase("Lightweight")) { + finalitem.addUnsafeEnchantment(Enchantment.PROTECTION_FALL, 10); + } + if (prefix.equalsIgnoreCase("Power")) { + finalitem.addUnsafeEnchantment(Enchantment.ARROW_DAMAGE, 10); + } + if (prefix.equalsIgnoreCase("Damaging")) { + finalitem.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 10); + } + if (prefix.equalsIgnoreCase("Knockback")) { + finalitem.addUnsafeEnchantment(Enchantment.KNOCKBACK, 10); + } + if (prefix.equalsIgnoreCase("Punch")) { + finalitem.addUnsafeEnchantment(Enchantment.ARROW_KNOCKBACK, 10); + } + if (prefix.equalsIgnoreCase("Flaming")) { + finalitem.addUnsafeEnchantment(Enchantment.ARROW_FIRE, 10); + } + if (prefix.equalsIgnoreCase("Infinite")) { + finalitem.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 10); + } + if (prefix.equalsIgnoreCase("Undead")) { + finalitem.addUnsafeEnchantment(Enchantment.DAMAGE_UNDEAD, 10); + } + if (prefix.equalsIgnoreCase("Baning")) { + finalitem.addUnsafeEnchantment(Enchantment.DAMAGE_ARTHROPODS, 10); + } + if (prefix.equalsIgnoreCase("Fiery")) { + finalitem.addUnsafeEnchantment(Enchantment.FIRE_ASPECT, 10); + } + if (prefix.equalsIgnoreCase("Greedy")) { + finalitem.addUnsafeEnchantment(Enchantment.LOOT_BONUS_MOBS, 10); + } + ItemMeta meta = finalitem.getItemMeta(); + meta.setDisplayName(ChatColor.GOLD+""+ChatColor.BOLD+prefix+" "+convertToItemName(finalitem.getType().name())+" of "+suffix); + List setLore = new ArrayList(); + if (suffix.equalsIgnoreCase("Life")) { + setLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*30)+10)+" "+ChatColor.BLUE+"Health"); + } + if (suffix.equalsIgnoreCase("Resistance")) { + setLore.add(ChatColor.YELLOW+"+"+((int)(Math.random()*70)+20)+"% "+ChatColor.BLUE+"Damage Reduction"); + } + if (suffix.equalsIgnoreCase("Durability")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*200)+50)*10)+"% "+ChatColor.BLUE+"Durability"); + } + if (suffix.equalsIgnoreCase("Protection")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*50)+10))+"% "+ChatColor.BLUE+"Block Chance"); + } + if (suffix.equalsIgnoreCase("Smiting")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*50)+10))+"% "+ChatColor.BLUE+"Critical Chance"); + } + if (suffix.equalsIgnoreCase("Penetration")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*20)+5))+" "+ChatColor.BLUE+"Armor Penetration"); + } + if (suffix.equalsIgnoreCase("Draining")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*30)+20))+"% "+ChatColor.BLUE+"Life Steal"); + } + if (suffix.equalsIgnoreCase("Fury")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*50)+10))+"% "+ChatColor.BLUE+"Attack Speed"); + } + if (suffix.equalsIgnoreCase("Power")) { + setLore.add(ChatColor.YELLOW+"+"+(((int)(Math.random()*10)+5))+" "+ChatColor.BLUE+"Damage"); + } + setLore.add(""); + setLore.add(ChatColor.YELLOW+"[Halloween]"); + setLore.add("This item was created during the Halloween"); + setLore.add("event. When this item breaks, it simply turns"); + setLore.add("into a \"broken\" state and has a recharge time"); + setLore.add("of 1 week. The item will be fully restored after"); + setLore.add("a week of cooldown."); + meta.setLore(setLore); + finalitem.setItemMeta(meta); + //finalitem.setDurability((short)1560); //TESTING. + p.getInventory().addItem(finalitem); + } + + @EventHandler + public void onInventoryClickEvent(InventoryClickEvent event) { + Player p = (Player)event.getWhoClicked(); + p.getScoreboard().getTeam(p.getName()).setPrefix(ChatColor.DARK_GRAY+""); + if (p.hasPermission("group.moderator")) { + p.getScoreboard().getTeam(p.getName()).setPrefix(ChatColor.DARK_GREEN+""); + } + if (p.hasPermission("group.administrators")) { + p.getScoreboard().getTeam(p.getName()).setPrefix(ChatColor.DARK_PURPLE+""); + } + if (event.getCursor()!=null) { + //Regardless of the inventory, if we try to put it inside a chest, got to try to insert it in there. + if (event.getCurrentItem()!=null) { + if (event.getCursor()!=null && event.getCursor().getType()!=Material.AIR && (event.getCurrentItem().getType()==Material.CHEST || event.getCurrentItem().getType()==Material.TRAPPED_CHEST) && event.getClick()==ClickType.LEFT) { + //We have to attempt to insert the item in the Item Cube. + boolean largechest=false; + boolean smallchest=false; + int identifier=-1; + if (event.getCurrentItem().getItemMeta().getLore()!=null) { + //Check to see if the Lore contains anything. + for (int i=0;i1) { + ItemStack newitem = event.getCurrentItem().clone(); + newitem.setAmount(event.getCurrentItem().getAmount()-1); + event.getCurrentItem().setAmount(1); + //Drop the rest on the ground. + p.getWorld().dropItemNaturally(p.getLocation(), newitem); + } + ItemMeta meta = event.getCurrentItem().getItemMeta(); + List newlore = meta.getLore(); + newlore.add("ID#"+identifier); + meta.setLore(newlore); + event.getCurrentItem().setItemMeta(meta); + } + if (smallchest) { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<9;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("item-0", event.getCursor()); + event.getCursor().setType(Material.AIR); + f.set("created", Boolean.valueOf(true)); + } else { + + //We need to see if we have the inventory opened already...If so we have to add it to THAT one. + Inventory thisinven=Bukkit.createInventory(event.getWhoClicked(), 9, "Item Cube #"+identifier); + boolean changeinven=false; + if (event.getInventory().getTitle().contains("Item Cube") && event.getInventory().getTitle().length()>0) { + if (Integer.valueOf(event.getInventory().getTitle().substring(event.getInventory().getTitle().indexOf("#")).replace("#", ""))==identifier) { + thisinven=event.getInventory(); + changeinven=true; + } + } + if (!changeinven) { + for (int i=0;i<9;i++) { + //items.add(f.getItemStack("item-"+i)); + if (f.contains("item-"+i)) { + thisinven.addItem(f.getItemStack("item-"+i)); + } + } + } + int countinven = countSpace(thisinven,event.getCursor()); + if (countinven>=event.getCursor().getAmount()) { + //We can simply add it in no problem. + thisinven.addItem(event.getCursor()); + for (int i=0;i0) { + //We can at least fit a few. + int fit = event.getCursor().getAmount()-countinven; + //Leave behind this many. + ItemStack thisitem = event.getCursor(), thisitem2 = event.getCursor(); + thisitem.setAmount(fit); + event.setCursor(thisitem); + //Bukkit.getPlayer("sigonasr2").sendMessage("Cursor gets "+thisitem.getAmount()); + thisitem2.setAmount(countinven); + thisinven.addItem(thisitem2); + //Bukkit.getPlayer("sigonasr2").sendMessage("Item Cube gets "+thisitem2.getAmount()); + for (int i=0;i items = new ArrayList(); + //We need to see if we have the inventory opened already...If so we have to add it to THAT one. + Inventory thisinven=Bukkit.createInventory(event.getWhoClicked(), 54, "Item Cube #"+identifier); + boolean changeinven=false; + if (event.getInventory().getTitle().contains("Item Cube") && event.getInventory().getTitle().length()>0) { + if (Integer.valueOf(event.getInventory().getTitle().substring(event.getInventory().getTitle().indexOf("#")).replace("#", ""))==identifier) { + thisinven=event.getInventory(); + changeinven=true; + } + } + if (!changeinven) { + for (int i=0;i<54;i++) { + //items.add(f.getItemStack("item-"+i)); + if (f.contains("item-"+i)) { + thisinven.addItem(f.getItemStack("item-"+i)); + } + } + } + int countinven = countSpace(thisinven,event.getCursor()); + if (countinven>=event.getCursor().getAmount()) { + //We can simply add it in no problem. + thisinven.addItem(event.getCursor()); + for (int i=0;i0) { + //We can at least fit a few. + int fit = event.getCursor().getAmount()-countinven; + //Leave behind this many. + ItemStack thisitem = event.getCursor(), thisitem2 = event.getCursor(); + thisitem.setAmount(fit); + event.setCursor(thisitem); + //Bukkit.getPlayer("sigonasr2").sendMessage("Cursor gets "+thisitem.getAmount()); + thisitem2.setAmount(countinven); + thisinven.addItem(thisitem2); + //Bukkit.getPlayer("sigonasr2").sendMessage("Item Cube gets "+thisitem2.getAmount()); + for (int i=0;i1) { + ItemStack newitem = event.getCurrentItem().clone(); + newitem.setAmount(event.getCurrentItem().getAmount()-1); + event.getCurrentItem().setAmount(1); + //Drop the rest on the ground. + p.getWorld().dropItemNaturally(p.getLocation(), newitem); + } + ItemMeta meta = event.getCurrentItem().getItemMeta(); + List newlore = meta.getLore(); + newlore.add("ID#"+identifier); + meta.setLore(newlore); + event.getCurrentItem().setItemMeta(meta); + } + Inventory screen = null; + if (smallchest) { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<9;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(event.getWhoClicked(), 9, "Item Cube #"+identifier); + for (int i=0;i<9;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + } + if (largechest) { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<54;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(event.getWhoClicked(), 54, "Large Item Cube #"+identifier); + for (int i=0;i<54;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + } + if (screen!=null) { + event.getWhoClicked().closeInventory(); + event.getWhoClicked().openInventory(screen); + event.setCancelled(true); + //return; + } + } + } + } + }else + if (event.getInventory().getType()==InventoryType.CHEST && !event.getInventory().getName().equalsIgnoreCase("Notification Options")) { + //If we click a chest, make sure it's not the same ID chest. + if (event.getCurrentItem()!=null) { + if ((event.getCurrentItem().getType()==Material.CHEST || event.getCurrentItem().getType()==Material.TRAPPED_CHEST)) { + int identifier=-1; + if (event.getCurrentItem().getItemMeta().getLore()!=null) { + //Check to see if the Lore contains anything. + for (int i=0;i=10) { + if (event.getCurrentItem()!=null && event.getCurrentItem().getType()==Material.POTION) { + if (event.getCurrentItem().getItemMeta()!=null && event.getCurrentItem().getItemMeta().getLore()!=null) { + List loredata = event.getCurrentItem().getItemMeta().getLore(); + boolean found=false; + for (int i=0;i loredata = new ArrayList(); + loredata.add(ChatColor.RED+"Duplicated"); + ItemMeta meta = event.getCurrentItem().getItemMeta(); + meta.setLore(loredata); + event.getCurrentItem().setItemMeta(meta); + } + } + } + } + } else + if (event.getInventory().getName().equalsIgnoreCase("Notification Options")) { + if (event.getSlotType()==SlotType.CONTAINER && (event.getSlot()==2 || event.getSlot()==6 || + event.getSlot()==11 || event.getSlot()==15 || + event.getSlot()==20 || event.getSlot()==24)) { + if (event.getInventory().getContents()[event.getSlot()].getType()==Material.REDSTONE_TORCH_OFF) { + event.getInventory().getContents()[event.getSlot()].setType(Material.REDSTONE_TORCH_ON); + } else { + event.getInventory().getContents()[event.getSlot()].setType(Material.REDSTONE_TORCH_OFF); + } + } + if (event.getSlotType()==SlotType.CONTAINER && (event.getSlot()==1 || event.getSlot()==5 || + event.getSlot()==10 || event.getSlot()==14 || + event.getSlot()==19 || event.getSlot()==23)) { + if (event.getInventory().getContents()[event.getSlot()+1].getType()==Material.REDSTONE_TORCH_OFF) { + event.getInventory().getContents()[event.getSlot()+1].setType(Material.REDSTONE_TORCH_ON); + } else { + event.getInventory().getContents()[event.getSlot()+1].setType(Material.REDSTONE_TORCH_OFF); + } + } + event.setCancelled(true); + } + if (event.getInventory() != null && + event.getSlotType() == SlotType.RESULT) { + + switch (event.getInventory().getType()) { + case CRAFTING: + handleCrafting(event); + break; + case WORKBENCH: + handleCrafting(event); + break; + } + + } + } + + private void rewardCraft(ItemStack item, int amount, HumanEntity pl) { + Player p = (Player)pl; + if (this.plugin.PlayerinJob(p,"Digger")) { + if (item.getType()==Material.SANDSTONE) { + this.plugin.gainMoneyExp(p,"Digger",0.02*amount,6*amount); + } + if (item.getType()==Material.BRICK) { + this.plugin.gainMoneyExp(p,"Digger",0.04*amount,8*amount); + } + } + if (this.plugin.PlayerinJob(p,"Weaponsmith")) { + boolean crafteditem=false; + if (item.getType()==Material.ARROW) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.025*amount,4*amount); + crafteditem=true; + } + if (item.getType()==Material.WOOD_SWORD) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.05*amount,10*amount); + crafteditem=true; + } + if (item.getType()==Material.FLINT_AND_STEEL) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.06*amount,12*amount); + crafteditem=true; + } + if (item.getType()==Material.BOW) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.075*amount,12*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_SWORD) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.375*amount,75*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_SWORD) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.50*amount,100*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_SWORD) { + this.plugin.gainMoneyExp(p,"Weaponsmith",0.975*amount,175*amount); + crafteditem=true; + } + } + if (this.plugin.PlayerinJob(p,"Blacksmith")) { + boolean crafteditem=false; + if (item.getType()==Material.STONE_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.04*amount,7*amount); + crafteditem=true; + } + if (item.getType()==Material.STONE_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.05*amount,8*amount); + crafteditem=true; + } + if (item.getType()==Material.STONE_PICKAXE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.075*amount,15*amount); + crafteditem=true; + } + if (item.getType()==Material.LEATHER_BOOTS) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.125*amount,8*amount); + crafteditem=true; + } + if (item.getType()==Material.LEATHER_HELMET) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.15*amount,14*amount); + crafteditem=true; + } + if (item.getType()==Material.LEATHER_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.175*amount,15*amount); + crafteditem=true; + } + if (item.getType()==Material.LEATHER_CHESTPLATE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.20*amount,18*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.25*amount,18*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.325*amount,24*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_BOOTS) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.375*mult*amount,27*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_PICKAXE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.40*amount,30*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_HELMET) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.50*mult*amount,45*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.625*amount,55*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.65*amount,60*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_LEGGINGS) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.725*mult*amount,60*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_SPADE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.75*amount,65*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_HOE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.80*amount,70*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_BOOTS) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.825*mult*amount,50*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.IRON_CHESTPLATE) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.875*mult*amount,70*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_HELMET) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",0.925*mult*amount,80*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_PICKAXE) { + this.plugin.gainMoneyExp(p,"Blacksmith",0.925*amount,80*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_BOOTS) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.00*mult*amount,85*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_LEGGINGS) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.025*mult*amount,100*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLD_CHESTPLATE) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.15*mult*amount,130*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_HELMET) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.15*mult*amount,125*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_LEGGINGS) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.325*mult*amount,145*mult*amount); + crafteditem=true; + } + if (item.getType()==Material.DIAMOND_CHESTPLATE) { + int mult=1; + if ((item.getItemMeta().getDisplayName()!=null && !item.getItemMeta().getDisplayName().contains(ChatColor.DARK_AQUA+"Weak ")) || item.getItemMeta().getDisplayName()==null) { + mult=8; + } + this.plugin.gainMoneyExp(p,"Blacksmith",1.50*mult*amount,175*mult*amount); + crafteditem=true; + } + } + if (this.plugin.PlayerinJob(p,"Cook")) { + boolean crafteditem=false; + if (item.getType()==Material.BREAD) { + this.plugin.gainMoneyExp(p,"Cook",0.0125*amount,5*amount); + crafteditem=true; + } + if (item.getType()==Material.MUSHROOM_SOUP) { + this.plugin.gainMoneyExp(p,"Cook",0.0375*amount,15*amount); + crafteditem=true; + } + if (item.getType()==Material.COOKIE) { + this.plugin.gainMoneyExp(p,"Cook",0.0675*amount,25*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLDEN_CARROT) { + this.plugin.gainMoneyExp(p,"Cook",0.0875*amount,35*amount); + crafteditem=true; + } + if (item.getType()==Material.GOLDEN_APPLE) { + this.plugin.gainMoneyExp(p,"Cook",0.1125*amount,45*amount); + crafteditem=true; + } + if (item.getType()==Material.PUMPKIN_PIE) { + this.plugin.gainMoneyExp(p,"Cook",0.15*amount,60*amount); + crafteditem=true; + } + if (item.getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Cook",0.2125*amount,85*amount); + crafteditem=true; + } + if (this.plugin.getJobLv("Cook", p)>=10 && crafteditem==true) { + //This is an ugly fix for the problem...But it works somehow. + //Player newp = Bukkit.getPlayer(p.getName()); + p.getInventory().addItem(new ItemStack(item.getType(),amount,item.getDurability(),item.getData().getData())); + } + } + if (this.plugin.PlayerinJob(p,"Support")) { + if (item.getType()==Material.BREAD) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.MUSHROOM_SOUP) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.COOKIE) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.GOLDEN_CARROT) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.GOLDEN_APPLE) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.PUMPKIN_PIE) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,2*amount); + } + if (item.getType()==Material.IRON_SWORD) { + this.plugin.gainMoneyExp(p,"Support",0.015*amount,3*amount); + } + if (item.getType()==Material.IRON_CHESTPLATE || item.getType()==Material.IRON_HELMET || item.getType()==Material.IRON_BOOTS || item.getType()==Material.IRON_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Support",0.025*amount,5*amount); + } + if (item.getType()==Material.DIAMOND_SWORD) { + this.plugin.gainMoneyExp(p,"Support",0.075*amount,8*amount); + } + if (item.getType()==Material.DIAMOND_CHESTPLATE || item.getType()==Material.DIAMOND_HELMET || item.getType()==Material.DIAMOND_BOOTS || item.getType()==Material.DIAMOND_LEGGINGS) { + this.plugin.gainMoneyExp(p,"Support",0.20*amount,20*amount); + } + if (item.getType()==Material.CAKE) { + this.plugin.gainMoneyExp(p,"Support",0.03*amount,2*amount); + } + } + } + + private void handleCrafting(InventoryClickEvent event) { + + HumanEntity player = event.getWhoClicked(); + ItemStack toCraft = event.getCurrentItem(); + ItemStack toStore = event.getCursor(); + + // Make sure we are actually crafting anything + if (player != null && hasItems(toCraft)) { + + if (event.isShiftClick()) { + // Hack ahoy + schedulePostDetection(player, toCraft); + } else { + // The items are stored in the cursor. Make sure there's enough space. + if (isStackSumLegal(toCraft, toStore)) { + int newItemsCount = toCraft.getAmount(); + + rewardCraft(toCraft,newItemsCount,player); + } + } + } + } + + // HACK! The API doesn't allow us to easily determine the resulting number of + // crafted items, so we're forced to compare the inventory before and after. + private void schedulePostDetection(final HumanEntity player, final ItemStack compareItem) { + final ItemStack[] preInv = player.getInventory().getContents(); + final int ticks = 1; + + // Clone the array. The content may (was for me) be mutable. + for (int i = 0; i < preInv.length; i++) { + preInv[i] = preInv[i] != null ? preInv[i].clone() : null; + } + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + final ItemStack[] postInv = player.getInventory().getContents(); + int newItemsCount = 0; + + for (int i = 0; i < preInv.length; i++) { + ItemStack pre = preInv[i]; + ItemStack post = postInv[i]; + if (pre!=null && post!=null) { + //See if they are the same item. + if (pre.getTypeId()==post.getTypeId() && pre.getDurability()==post.getDurability() && + pre.getItemMeta().equals(post.getItemMeta()) && pre.getEnchantments().equals(post.getEnchantments()) && + compareItem.getTypeId()==post.getTypeId() && compareItem.getDurability()==post.getDurability() && + compareItem.getItemMeta().equals(post.getItemMeta()) && compareItem.getEnchantments().equals(post.getEnchantments())) { + //See if the quantities differ. + newItemsCount += post.getAmount()-pre.getAmount(); + //Bukkit.getPlayer("sigonasr2").sendMessage("Item amounts differ. New count: "+newItemsCount); + } + } else { + if (post!=null) { + //pre is null, so we just add the amount. + if (compareItem.getTypeId()==post.getTypeId() && compareItem.getDurability()==post.getDurability() && + compareItem.getItemMeta().equals(post.getItemMeta()) && compareItem.getEnchantments().equals(post.getEnchantments())) { + newItemsCount += post.getAmount(); + } + //Bukkit.getPlayer("sigonasr2").sendMessage("Item amounts differ. New count: "+newItemsCount); + } + } + } + + if (newItemsCount > 0) { + //Bukkit.getPlayer("AaMay").sendMessage(newItemsCount+" New Items have been detected."); + if (plugin.getAccountsConfig().getBoolean(player.getName()+".settings.notify2")) { + Bukkit.getPlayer(player.getName()).sendMessage(ChatColor.DARK_AQUA+""+ChatColor.ITALIC+"Crafted "+newItemsCount+" "+convertToItemName(compareItem.getType().name())+"."); + } + rewardCraft(compareItem,newItemsCount,player); + } + } + }, ticks); + } + + private boolean hasSameItem(ItemStack a, ItemStack b) { + if (a == null) + return b == null; + else if (b == null) + return a == null; + return a.getTypeId() == b.getTypeId() && + a.getDurability() == b.getDurability() && + ((a.getItemMeta()!=null && b.getItemMeta()!=null)?Objects.equal(a.getItemMeta(), b.getItemMeta()):true) && + ((a.getEnchantments()!=null && b.getEnchantments()!=null)?Objects.equal(a.getEnchantments(), b.getEnchantments()):true); + } + + private boolean hasItems(ItemStack stack) { + return stack != null && stack.getAmount() > 0; + } + + private boolean isStackSumLegal(ItemStack a, ItemStack b) { + // See if we can create a new item stack with the combined elements of a and b + if (a == null || b == null) + return true; // Treat null as an empty stack + else + return a.getAmount() + b.getAmount() <= a.getType().getMaxStackSize(); + } + + @EventHandler + public void onItemSpawn(ItemSpawnEvent e) { + if (e.getEntity().getType()==EntityType.DROPPED_ITEM) { + if (e.getEntity().getItemStack().getType()==Material.IRON_ORE) { + e.getEntity().getItemStack().setType(Material.IRON_INGOT); + } else if (e.getEntity().getItemStack().getType()==Material.GOLD_ORE) { + e.getEntity().getItemStack().setType(Material.GOLD_INGOT); + } + return; + } + } + + @EventHandler + public void onItemDespawn(ItemDespawnEvent e) { + Item i = e.getEntity(); + Player p = Bukkit.getPlayer("sigonasr2"); + boolean allow=true; + if (this.plugin.getConfig().getBoolean("halloween-enabled") && ( + i.getItemStack().getType()==Material.PUMPKIN_PIE || + i.getItemStack().getType()==Material.SUGAR || + i.getItemStack().getType()==Material.PUMPKIN || + i.getItemStack().getType()==Material.EGG + )) { + allow=false; + } + //p.sendMessage("Item "+i.getItemStack().getItemMeta().getDisplayName()+" despawned.");// <-- CHECK THIS FOR NULL TO DETERMINE IF IT'S A REAL ITEM. + //String metastring = "Has name: "+i.getItemStack().getItemMeta().hasDisplayName(); + //p.sendMessage(metastring); + if (allow) { + Location l1 = new Location(Bukkit.getWorld("world"), 1617, 67, -351); + Location l2 = new Location(Bukkit.getWorld("world"), 1618, 67, -351); + Location k1 = new Location(Bukkit.getWorld("world"), 1617, 67, -355); + Location k2 = new Location(Bukkit.getWorld("world"), 1618, 67, -355); + Location j1 = new Location(Bukkit.getWorld("world"), 1622, 67, -355); + Location j2 = new Location(Bukkit.getWorld("world"), 1623, 67, -355); + Location i1 = new Location(Bukkit.getWorld("world"), 1622, 67, -351); + Location i2 = new Location(Bukkit.getWorld("world"), 1623, 67, -351); + Chest c=(Chest)Bukkit.getWorld("world").getBlockAt(l1).getState(); + int selection=0; + //Choose a chest randomly. + switch ((int)(Math.random()*8)) { + case 0:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(l1).getState(); + selection=1; + }break; + case 1:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(l2).getState(); + selection=2; + }break; + case 2:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(k1).getState(); + selection=3; + }break; + case 3:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(k2).getState(); + selection=4; + }break; + case 4:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(j1).getState(); + selection=5; + }break; + case 5:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(j2).getState(); + selection=6; + }break; + case 6:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(i1).getState(); + selection=7; + }break; + case 7:{ + c=(Chest)Bukkit.getWorld("world").getBlockAt(i2).getState(); + selection=8; + }break; + } + //Get data about this slot. + int itemslot=this.plugin.getConfig().getInt("chest"+selection+"item"); + double chance=this.plugin.getConfig().getDouble("chest"+selection+"i"); + //First determine if we can even allow this item in. + if (i.getItemStack().getItemMeta().hasDisplayName()==false) { + //p.sendMessage("Item is being checked."); + //Now see if the chance should be reduced, based on its material name. + for (int y=0;y<27;y++) { + if (c.getBlockInventory().getItem(y)!=null && c.getBlockInventory().getItem(y).getType()==i.getItemStack().getType()) { + chance*=2.0d; + //p.sendMessage("Block inventory chance went up. "+c.getBlockInventory().getItem(y).getType()+"="+i.getItemStack().getType()); + } + } + //p.sendMessage("Past for loop."); + //Now check for chance to deposit it. + if (Math.random()*chance<1.0d) { + //Deposit item. Set chance higher. + //p.sendMessage("Going inside..."); + if (c.getBlockInventory().getItem(itemslot)!=null) { + c.getBlockInventory().remove(itemslot); + } + //p.sendMessage("Removed..."); + c.getBlockInventory().setItem(itemslot,i.getItemStack()); + //Clone the item. + //ItemStack tempitem = i.getItemStack(); + //tempitem.setType(Material.STONE_SPADE); + //ItemMeta tempmeta = tempitem.getItemMeta(); + //tempmeta.setDisplayName("Spleef Stone Shovel"); + //tempitem.setItemMeta(tempmeta); + //tempitem.setDurability((short)0); + //p.sendMessage("This item has "+tempitem.getDurability()+" uses."); + //p.getInventory().setItemInHand(tempitem); + //p.sendMessage("Added..."); + this.plugin.getConfig().set("chest"+selection+"item", Integer.valueOf((itemslot+1)%27)); + this.plugin.getConfig().set("chest"+selection+"i", Double.valueOf(this.plugin.getConfig().getDouble("chest"+selection+"i")+this.plugin.getConfig().getDouble("chestchanceincrease"))); + if (this.plugin.getConfig().getDouble("randomitemchance")>8.0d) { + this.plugin.getConfig().set("randomitemchance", Double.valueOf(this.plugin.getConfig().getDouble("randomitemchance")-1.0d)); + } + //////////////p.sendMessage(ChatColor.GRAY+"A new item has been deposited."); + } else { + //p.sendMessage("Failed. Trying this method."); + if (Math.random()*this.plugin.getConfig().getDouble("randomitemchance")<1.0d) { + //p.sendMessage("Made it in."); + int[] items = {1,3,4,5,6,1,13,14,15,17,18,20,22,23,24,25,27,28,39,31,32,33,35,37,38,39,40,41,42,44,45,46,47,48,49,50,53,54,57,58,61,65,66,67,69,70,72,76,77,78,80,81,82,84,85,86,87,88,89,91,96,98,101,102,103,106,107,108,109,111,112,113,114,116,121,122,123,126,128,130,131,133,134,135,136,138,139,143,145,146,147,148,151,152,154,155,156,157,158,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267}; + int[] rareitems = {41,46,57,116,122,133,130,146,151,264,266,276,277,278,279,293,310,311,312,313,368,381,406}; + int item = items[(int)(Math.random()*items.length)]; + ItemStack newitem = i.getItemStack(); + newitem.setTypeId(item); + boolean contains=false; + for (int k=0;k8.0d) { + this.plugin.getConfig().set("randomitemchance", Double.valueOf(this.plugin.getConfig().getDouble("randomitemchance")-1.0d)); + } + } + if (this.plugin.getConfig().getDouble("chest"+selection+"i")>=this.plugin.getConfig().getDouble("chestdecrease")) { + this.plugin.getConfig().set("chest"+selection+"i", Double.valueOf(this.plugin.getConfig().getDouble("chest"+selection+"i")-this.plugin.getConfig().getDouble("chestdecrease"))); + } + this.plugin.getConfig().set("chest"+selection+"item", Integer.valueOf((itemslot+1)%27)); + } + this.plugin.saveConfig(); + } + } + return; + } + //c.getBlockInventory().getSize(); + /* + if (Bukkit.getWorld("world").getBlockAt(l).getType()==Material.CHEST) { + p.sendMessage("Added item "+i.getItemStack().getTypeId()+" to chest."); + Chest c = (Chest)Bukkit.getWorld("world").getBlockAt(l1).getState(); + c.getBlockInventory(). + c.getBlockInventory().addItem(i.getItemStack()); + }*/ + /*// WORKING ITEM CODE. + Location l = new Location(Bukkit.getWorld("world"), 1617, 67, -351); + if (Bukkit.getWorld("world").getBlockAt(l).getType()==Material.CHEST) { + p.sendMessage("Added item to chest."); + Chest c = (Chest)Bukkit.getWorld("world").getBlockAt(l).getState(); + c.getBlockInventory().addItem(i.getItemStack()); + } + */ + + /* + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity().getType() == EntityType.PLAYER) { + Player p = (Player) e.getEntity(); + TagAPI.refreshPlayer(p); + } else { + return; + } + //Player p = e.getPlayer(); + //Player p = Bukkit.getPlayer("sigonasr2"); + //p.setDisplayName(ChatColor.RED+"TEST"); + //p.setPlayerListName(ChatColor.RED+"TEST"); + } + + @EventHandler + public void onHeal(EntityRegainHealthEvent e) { + if (e.getEntity().getType() == EntityType.PLAYER) { + Player p = (Player) e.getEntity(); + TagAPI.refreshPlayer(p); + } else { + return; + } + //Player p = e.getPlayer(); + //Player p = Bukkit.getPlayer("sigonasr2"); + //p.setDisplayName(ChatColor.RED+"TEST"); + //p.setPlayerListName(ChatColor.RED+"TEST"); + } + */ + @EventHandler + public void onRedstoneChange(BlockRedstoneEvent e) { + if (e.getBlock().getType()==Material.REDSTONE_LAMP_ON || e.getBlock().getType()==Material.REDSTONE_LAMP_OFF) { + if (e.getBlock().getX()>=1562 && e.getBlock().getX()<=1644 && e.getBlock().getY()>=64 && e.getBlock().getY()<=79 && e.getBlock().getZ()>=-357 && e.getBlock().getZ()<=-211) { + e.setNewCurrent(15); + } + } + } + + @EventHandler +public void onMinecartExit(VehicleExitEvent e) { + if (e.getVehicle().getType()==EntityType.MINECART) { + Bukkit.getWorld("world").dropItemNaturally(e.getVehicle().getLocation(),new ItemStack(Material.MINECART)); + e.getVehicle().remove(); + } + } + + @EventHandler +public void onMinecartEnter(VehicleEnterEvent e) { + /*if (e.getEntered().getType()==EntityType.PLAYER) { + if (e.getVehicle().getType()==EntityType.MINECART) { + Minecart m = (Minecart)e.getVehicle(); + if (e.getEntered().getLocation().getBlockZ()==-328 || e.getEntered().getLocation().getBlockZ()==-316) { + m.setMaxSpeed(8.0); + } else { + m.setMaxSpeed(4.0); + } + } + }*/ + } + /* + @EventHandler + public void onEntityEvent(EntityEvent e) { + return; + if (e.getEntity().getType()==EntityType.ZOMBIE) { + LivingEntity f = (LivingEntity)e.getEntity(); + if (f.getCustomName()!=null && (f.getCustomName().compareTo("&eCharge Zombie")==0 || f.getCustomName().compareTo("&6Charge Zombie II")==0)) { + //Destroy blocks around it. + + boolean doit=true; + if (f.getKiller()!=null && f.getKiller().getLocation().getY()>f.getLocation().getY()) { + doit=false; + } + if (doit) { + Bukkit.getPlayer("sigonasr2").sendMessage("Charge Zombie!"); + for (int i=-1;i<2;i++) { + for (int j=-1;j<2;j++) { + Location checkloc = f.getLocation().add(i,f.getLocation().getY()+1,j); + Bukkit.getWorld("world").getBlockAt(checkloc).breakNaturally(); + checkloc = f.getLocation().add(i,f.getLocation().getY()+2,j); + Bukkit.getWorld("world").getBlockAt(checkloc).breakNaturally(); + } + } + } + } else { + if (f.getCustomName()!=null) { + Bukkit.getPlayer("sigonasr2").sendMessage(f.getCustomName()); + } + } + } + }*/ + +@EventHandler +public void onShootArrow(ProjectileHitEvent e) { + LivingEntity l = e.getEntity().getShooter(); + if (l!=null && l.getType()==EntityType.SKELETON && l.getCustomName()!=null) { + if ((l.getCustomName().compareTo(ChatColor.YELLOW+"Sniper")==0)) { + boolean found=false; + if (!found) { + //Create a new shooter from this skeleton only if they are not shooting already. + this.plugin.ARROW_SHOOTERS.add(new ArrowShooter(e.getEntity().getVelocity(), e.getEntity().getLocation(),50,10,l)); + } + } else + if (l.getCustomName().compareTo(ChatColor.GOLD+"Sniper II")==0) { + boolean found=false; + if (!found) { + //Create a new shooter from this skeleton only if they are not shooting already. + for (int i=-2;i<3;i+=2) { + this.plugin.ARROW_SHOOTERS.add(new ArrowShooter(e.getEntity().getVelocity(), e.getEntity().getLocation().add(0,i,0),50,5,l)); + this.plugin.ARROW_SHOOTERS.add(new ArrowShooter(e.getEntity().getVelocity(), e.getEntity().getLocation().add(0,i,0),50,5,l)); + } + } + } + } +} + +@EventHandler +public void onEntityExpode(ExplosionPrimeEvent e) { + //Bukkit.getPlayer("AaMay").sendMessage("Entity Type: "+e.getEntity().getType().getName()); + if (e.getEntity().getType()==EntityType.CREEPER) { + LivingEntity c = (LivingEntity)e.getEntity(); + //Bukkit.getPlayer("AaMay").sendMessage("A Creeper exploded."); + if (c.getCustomName()!=null) { + //Bukkit.getPlayer("AaMay").sendMessage("Detected a name."); + if (c.getCustomName().compareTo(ChatColor.YELLOW+"Explosive Creeper")==0) { + Bukkit.getWorld("world").createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),3f,false,true); + //Bukkit.getPlayer("AaMay").sendMessage("Sent explosion"); + e.setCancelled(true); + } else + if (c.getCustomName().compareTo(ChatColor.GOLD+"Explosive Creeper II")==0) { + Bukkit.getWorld("world").createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),4f,false,true); + //Bukkit.getPlayer("AaMay").sendMessage("Sent explosion"); + e.setCancelled(true); + } else + if (c.getCustomName().compareTo(ChatColor.YELLOW+"Destructive Creeper")==0) { + Bukkit.getWorld("world").createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),2f,true,true); + //Bukkit.getPlayer("AaMay").sendMessage("Sent explosion"); + e.setCancelled(true); + } else + if (c.getCustomName().compareTo(ChatColor.GOLD+"Destructive Creeper II")==0) { + Bukkit.getWorld("world").createExplosion(c.getLocation().getX(),c.getLocation().getY(),c.getLocation().getZ(),3f,true,true); + //Bukkit.getPlayer("AaMay").sendMessage("Sent explosion"); + e.setCancelled(true); + } + } + } + //Bukkit.broadcastMessage("Explosion occurs."); +} + +/* + @SuppressWarnings("deprecation") +@EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + if (this.plugin.getConfig().getBoolean("spleef4insession")) { + //Check to see if we fall off. + if ((p.getLocation().getX()<1585 || p.getLocation().getX()>1600 || p.getLocation().getZ()<24 || p.getLocation().getZ()>39 || p.getLocation().getY()<86.5d) && ( + (p.getName().compareTo(this.plugin.getConfig().getString("spleefrequesta4player"))==0 || p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestb4player"))==0 + || p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestc4player"))==0 || p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestd4player"))==0))) { + //You lose. + //See if we're the winner. + int countdead=0; //We're looking for 3. + + + Player winningplayer = p,losingplayer = p; + if (this.plugin.getConfig().getString("spleefrequesta4player").compareTo("none")==0) { + countdead++; + } else { + if (this.plugin.getConfig().getString("spleefrequesta4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequesta4player")); + } else { + winningplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequesta4player")); + } + } + if (this.plugin.getConfig().getString("spleefrequestb4player").compareTo("none")==0) { + countdead++; + } else { + if (this.plugin.getConfig().getString("spleefrequestb4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestb4player")); + } else { + winningplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestb4player")); + } + } + if (this.plugin.getConfig().getString("spleefrequestc4player").compareTo("none")==0) { + countdead++; + } else { + if (this.plugin.getConfig().getString("spleefrequestc4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestc4player")); + } else { + winningplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestc4player")); + } + } + if (this.plugin.getConfig().getString("spleefrequestd4player").compareTo("none")==0) { + countdead++; + } else { + if (this.plugin.getConfig().getString("spleefrequestd4player").compareTo(p.getName())==0) { + losingplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestd4player")); + } else { + winningplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestd4player")); + } + } + if (countdead==2) { + this.plugin.getConfig().set("spleef4insession", Boolean.valueOf(false)); + + + + + + //Stand someplace else when you win. + + + //Losing player has losing player stuff happen. + //This was a player that lost. + //Move them out, give them back their stuff. + Location newloc = p.getLocation(); + //Look for the special shovel for the sake of storing it. + p.getInventory().clear(); + p.getInventory().clear(p.getInventory().getHeldItemSlot()); + //Give inventories back. + if (this.plugin.getConfig().getString("spleefrequesta4player").compareTo(p.getName())==0) { + for (int i=0;i=400) { + //WE have come to a standstill. Pick winner based on who has more blocks. + int player_a_blocks=0,player_b_blocks=0; + for (int i=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getLocation().getBlockX()-4;iplayer_b_blocks) { + blockwinner=1; + } else { + blockwinner=2; + } + } else + if ((p.getLocation().getY()<86.5d || p.getLocation().getZ()<52.0d || p.getLocation().getZ()>65.0d || p.getLocation().getX()>1628.0d || p.getLocation().getX()<1615.0d) || blockwinner!=0) { + //We lose. Other player wins. + this.plugin.getConfig().set("spleefinsession", Boolean.valueOf(false)); + //Find out if we're player A, or player B. + Player winningplayer,losingplayer; + if (p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestaplayer"))==0 || blockwinner==2) { + //We're player A. + //Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+this.plugin.getConfig().getString("spleefrequestbplayer")+" is the winner of this spleef game! "+this.plugin.getConfig().getString("spleefrequestaplayer")+" loses."); + losingplayer=p; + winningplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")); + + double val1,val2,value,newval1,newval2; + if (this.plugin.getAccountsConfig().contains(winningplayer.getName()+".spleefrating")) { + val1 = this.plugin.getAccountsConfig().getDouble(winningplayer.getName()+".spleefrating"); + } else { + val1 = 1000.0d; + } + if (this.plugin.getAccountsConfig().contains(losingplayer.getName()+".spleefrating")) { + val2 = this.plugin.getAccountsConfig().getDouble(losingplayer.getName()+".spleefrating"); + } else { + val2 = 1000.0d; + } + value = 1.0d/(1.0d+Math.pow(10.0d, ((val2-val1)/400.0d))); + if (this.plugin.getAccountsConfig().contains(winningplayer.getName()+".spleefwins")) { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(this.plugin.getAccountsConfig().getInt(winningplayer.getName()+".spleefwins")+1)); + } else { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(1)); + } + if (this.plugin.getAccountsConfig().contains(winningplayer.getName()+".spleeflosses")) { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(this.plugin.getAccountsConfig().getInt(winningplayer.getName()+".spleeflosses"))); + } else { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(0)); + } + if (this.plugin.getAccountsConfig().contains(losingplayer.getName()+".spleefwins")) { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(this.plugin.getAccountsConfig().getInt(losingplayer.getName()+".spleefwins"))); + } else { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(0)); + } + if (this.plugin.getAccountsConfig().contains(losingplayer.getName()+".spleeflosses")) { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(this.plugin.getAccountsConfig().getInt(losingplayer.getName()+".spleeflosses")+1)); + } else { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(1)); + } + newval1 = (val1+Math.round(((50.0d/((this.plugin.getAccountsConfig().getDouble(winningplayer.getName()+".spleefwins")+this.plugin.getAccountsConfig().getDouble(winningplayer.getName()+".spleeflosses"))/20.0d))*(1.0d-value)))); + newval2 = (val2+Math.round(((50.0d/((this.plugin.getAccountsConfig().getDouble(losingplayer.getName()+".spleefwins")+this.plugin.getAccountsConfig().getDouble(losingplayer.getName()+".spleeflosses"))/20.0d))*(0.0d-value)))); + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleefrating",Double.valueOf(newval1)); + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleefrating",Double.valueOf(newval2)); + Location newloc = winningplayer.getLocation(); + + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+this.plugin.getConfig().getString("spleefrequestbplayer")+"["+(int)newval1/10+"] is the winner of this spleef game! "+this.plugin.getConfig().getString("spleefrequestaplayer")+"["+(int)newval2/10+"] loses."); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + winningplayer.teleport(newloc); + updateTopSPLEEFSigns(); + this.plugin.saveAccountsConfig(); + } else { + //We're player B. + //Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+this.plugin.getConfig().getString("spleefrequestaplayer")+" is the winner of this spleef game! "+this.plugin.getConfig().getString("spleefrequestbplayer")+" loses."); + losingplayer=p; + winningplayer=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")); + double val1,val2,value,newval1,newval2; + if (this.plugin.getAccountsConfig().contains(winningplayer.getName()+".spleefrating")) { + val1 = this.plugin.getAccountsConfig().getDouble(winningplayer.getName()+".spleefrating"); + } else { + val1 = 1000.0d; + } + if (this.plugin.getAccountsConfig().contains(losingplayer.getName()+".spleefrating")) { + val2 = this.plugin.getAccountsConfig().getDouble(losingplayer.getName()+".spleefrating"); + } else { + val2 = 1000.0d; + } + value = 1.0d/(1.0d+Math.pow(10.0d, ((val2-val1)/400.0d))); + if (this.plugin.getAccountsConfig().contains(winningplayer.getName()+".spleefwins")) { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(this.plugin.getAccountsConfig().getInt(winningplayer.getName()+".spleefwins")+1)); + } else { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleefwins", Integer.valueOf(1)); + } + if (this.plugin.getAccountsConfig().contains(winningplayer.getName()+".spleeflosses")) { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(this.plugin.getAccountsConfig().getInt(winningplayer.getName()+".spleeflosses"))); + } else { + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleeflosses", Integer.valueOf(0)); + } + if (this.plugin.getAccountsConfig().contains(losingplayer.getName()+".spleefwins")) { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(this.plugin.getAccountsConfig().getInt(losingplayer.getName()+".spleefwins"))); + } else { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleefwins", Integer.valueOf(0)); + } + if (this.plugin.getAccountsConfig().contains(losingplayer.getName()+".spleeflosses")) { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(this.plugin.getAccountsConfig().getInt(losingplayer.getName()+".spleeflosses")+1)); + } else { + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleeflosses", Integer.valueOf(1)); + } + newval1 = ((val1+Math.round((50.0d/((this.plugin.getAccountsConfig().getDouble(winningplayer.getName()+".spleefwins")+this.plugin.getAccountsConfig().getDouble(winningplayer.getName()+".spleeflosses"))/20.0d))*(1.0d-value)))); + newval2 = ((val2+Math.round((50.0d/((this.plugin.getAccountsConfig().getDouble(losingplayer.getName()+".spleefwins")+this.plugin.getAccountsConfig().getDouble(losingplayer.getName()+".spleeflosses"))/20.0d))*(0.0d-value)))); + this.plugin.getAccountsConfig().set(winningplayer.getName()+".spleefrating",Double.valueOf(newval1)); + this.plugin.getAccountsConfig().set(losingplayer.getName()+".spleefrating",Double.valueOf(newval2)); + Location newloc = winningplayer.getLocation(); + + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+this.plugin.getConfig().getString("spleefrequestaplayer")+"["+(int)newval1/10+"] is the winner of this spleef game! "+this.plugin.getConfig().getString("spleefrequestbplayer")+"["+(int)newval2/10+"] loses."); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + winningplayer.teleport(newloc); + updateTopSPLEEFSigns(); + this.plugin.saveAccountsConfig(); + } + //Look for the special shovel. + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().clear(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().clear(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().clear(Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().getHeldItemSlot()); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().clear(Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().getHeldItemSlot()); + //Give inventories back. + for (int i=0;i78.0d && p.getLocation().getZ()>53.0d && p.getLocation().getZ()<64.0d && p.getLocation().getX()<1627.0d && p.getLocation().getX()>1616.0d) { + Location newloc = p.getLocation(); + newloc.setX(1622.5d); + newloc.setY(87.0d); + newloc.setZ(51.65d); + p.teleport(newloc); + p.sendMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+"You are a spectator! What are you thinking?!"); + } + } + } + } + */ + + /* + @EventHandler + public void onNameTag(PlayerReceiveNameTagEvent event) { + //String event.getNamedPlayer().getName() + String name = event.getNamedPlayer().getName(); + //Divide name into two sections based on health. + double healthratio = (double)event.getNamedPlayer().getHealth() / (double)event.getNamedPlayer().getMaxHealth(); + String firstpart=name.substring(0,(int)(name.length() * healthratio)); + String secondpart=name.substring(firstpart.length(),name.length()-firstpart.length()); + event.setTag(ChatColor.GREEN + firstpart + ChatColor.DARK_RED + secondpart); +} +*/ + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent e) { + Player p = e.getPlayer(); + for (int i=0;i nearby = p.getNearbyEntities(30, 30, 30); + for (int i=0;i=20) { + finalcost*=0.25; + } + if (mymoney>=mincost) { + p.sendMessage("You died. It will cost you $"+df.format(finalcost)+" to revive. To revive, type /revive me."); + } else { + p.sendMessage("You died. You do not have enough money in your bank to revive."); + p.sendMessage("Cost: $"+df.format(finalcost)+". If you want to revive, type "+ChatColor.AQUA+"/revive me"+ChatColor.WHITE+" when you have enough."); + } + } + + @EventHandler + public void onSignPlace(SignChangeEvent e) + { + Player p = e.getPlayer(); + String[] lines = e.getLines(); + updateTopSPLEEFSigns(); + if (p.hasPermission("bankeconomy.sign.create")) { + if ((lines[0].equalsIgnoreCase("[Bank]")) && (lines[1].equalsIgnoreCase("Deposit"))) { + e.setLine(0, ChatColor.DARK_GREEN + "[Bank]"); + e.setLine(1, ChatColor.DARK_RED + "Deposit"); + e.setLine(2, "Right-Click"); + e.setLine(3, "to use"); + } else + if ((lines[0].equalsIgnoreCase("[Bank]")) && (lines[1].equalsIgnoreCase("Withdraw"))) { + e.setLine(0, ChatColor.DARK_GREEN + "[Bank]"); + e.setLine(1, ChatColor.DARK_BLUE + "Withdraw"); + e.setLine(2, "Right-Click"); + e.setLine(3, "to use"); + } else + if ((lines[0].equalsIgnoreCase("[Bank]")) && (lines[1].equalsIgnoreCase("Check Balance"))) { + e.setLine(0, ChatColor.DARK_GREEN + "[Bank]"); + e.setLine(1, ChatColor.DARK_GRAY + "Check Balance"); + e.setLine(2, "Right-Click"); + e.setLine(3, "to use"); + } else { + if ((lines[0].equalsIgnoreCase("[Bank]"))) { + e.setCancelled(true); + p.sendMessage("ァcYou do not have permission to create [Bank] signs."); + } + } + } + /* + if (p.hasPermission("bankeconomy.sign.create")) { + if ((lines[0].equalsIgnoreCase("[BankEconomy]")) && (lines[1].equalsIgnoreCase("deposit"))) { + e.setLine(0, ChatColor.DARK_GREEN + "[BankEconomy]"); + if (!lines[2].matches("^[0-9]+$")) { + e.setLine(1, ChatColor.DARK_RED + "Error"); + e.setLine(2, " "); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " The amount of money is invalid. (line 3)"); + } else if (!lines[3].isEmpty()) { + e.setLine(1, ChatColor.DARK_RED + "Error"); + e.setLine(2, " "); + e.setLine(3, " "); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " The line 4 must be empty."); + } else { + e.setLine(1, ChatColor.YELLOW + "deposit"); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " Sign created successfully!"); + } + } else if ((lines[0].equalsIgnoreCase("[BankEconomy]")) && (lines[1].equalsIgnoreCase("withdraw"))) { + e.setLine(0, ChatColor.DARK_GREEN + "[BankEconomy]"); + if (!lines[3].isEmpty()) { + e.setLine(1, ChatColor.DARK_RED + "Error"); + e.setLine(2, " "); + e.setLine(3, " "); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " The line 4 must be empty."); + } else if (!lines[2].matches("^[0-9]+$")) { + e.setLine(1, ChatColor.DARK_RED + "Error"); + e.setLine(2, " "); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " The amount of money is invalid. (line 3)"); + } else { + e.setLine(1, ChatColor.YELLOW + "withdraw"); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " Sign created successfully!"); + } + } else if ((lines[0].equalsIgnoreCase("[BankEconomy]")) && (lines[1].equalsIgnoreCase("information"))) { + e.setLine(0, ChatColor.DARK_GREEN + "[BankEconomy]"); + if ((!lines[2].isEmpty()) || (!lines[3].isEmpty())) { + e.setLine(1, ChatColor.DARK_RED + "Error"); + e.setLine(2, " "); + e.setLine(3, " "); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " Lines 3 and 4 must be empty."); + } else { + e.setLine(0, ChatColor.DARK_GREEN + "[BankEconomy]"); + e.setLine(1, ChatColor.YELLOW + "information"); + } + } else if (lines[0].equalsIgnoreCase("[BankEconomy]")) { + e.setLine(0, ChatColor.DARK_GREEN + "[BankEconomy]"); + e.setLine(1, ChatColor.DARK_RED + "Error"); + e.setLine(2, " "); + e.setLine(3, " "); + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " Invalid action."); + } + } else { + if ((lines[0].equalsIgnoreCase("[BankEconomy]"))) { + e.setCancelled(true); + p.sendMessage("ァcYou do not have permission."); + } + }*/ + } + + public int getSongDuration(Material record) { + int padding=20; + if (record==Material.RECORD_3) { + return 345/2+5+padding; + } else + if (record==Material.RECORD_4) { + return 185/2+5+padding; + } else + if (record==Material.RECORD_5) { + return 174/2+5+padding; + } else + if (record==Material.RECORD_6) { + return 197/2+5+padding; + } else + if (record==Material.RECORD_7) { + return 96/2+5+padding; + } else + if (record==Material.RECORD_8) { + return 150/2+5+padding; + } else + if (record==Material.RECORD_9) { + return 188/2+5+padding; + } else + if (record==Material.RECORD_10) { + return 251/2+5+padding; + } else + if (record==Material.RECORD_11) { + return 71/2+5+padding; + } else + if (record==Material.RECORD_12) { + return 238/2+5+padding; + } else + if (record==Material.GOLD_RECORD) { + return 178/2+5+padding; + } else + if (record==Material.GREEN_RECORD) { + return 185/2+5+padding; + } else + return 0; + } + + @EventHandler + public void onPlayerChat(PlayerChatEvent e) { + //Check if they are withdrawing or depositing money. + DecimalFormat df = new DecimalFormat("#0.00"); + if (e.getPlayer().getName().equalsIgnoreCase(this.plugin.last_bank_deposit_user) && this.plugin.last_bank_deposit_use_time+200>Bukkit.getWorld("world").getFullTime()) { + //Parse the amount. + double val=0; + if (e.getMessage().equalsIgnoreCase("all")) { + //Deposit all the money into their account. + val = this.plugin.economy.getBalance(e.getPlayer().getName()); + this.plugin.economy.withdrawPlayer(e.getPlayer().getName(), val); + double mymoney = this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"); + this.plugin.getAccountsConfig().set(e.getPlayer().getName() + ".money", Double.valueOf(mymoney+val)); + this.plugin.saveAccountsConfig(); + e.getPlayer().sendMessage(ChatColor.GREEN+"Deposited $" + df.format(val) + " into your account. " + ChatColor.YELLOW + "New Bank Balance: $" + ChatColor.AQUA + df.format(this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"))); + this.plugin.last_bank_deposit_use_time=0; + } else { + try { + val = Double.parseDouble(e.getMessage()); + //Make sure the user is holding at least that much money. + if (this.plugin.economy.getBalance(e.getPlayer().getName())>=val && val>0) { + //Deposit the money into their account. + //this.plugin.economy.bankDeposit(e.getPlayer().getName(), val); + this.plugin.economy.withdrawPlayer(e.getPlayer().getName(), val); + double mymoney = this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"); + this.plugin.getAccountsConfig().set(e.getPlayer().getName() + ".money", Double.valueOf(mymoney+val)); + this.plugin.saveAccountsConfig(); + e.getPlayer().sendMessage(ChatColor.GREEN+"Deposited $" + df.format(val) + " into your account. " + ChatColor.YELLOW + "New Bank Balance: $" + ChatColor.AQUA + df.format(this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"))); + this.plugin.last_bank_deposit_use_time=0; + } else { + e.getPlayer().sendMessage(ChatColor.RED+"You are not holding that much! " + ChatColor.YELLOW +"Enter a value equal to or lower than $" + ChatColor.GREEN+ df.format(this.plugin.economy.getBalance(e.getPlayer().getName())) + "" + ChatColor.GRAY + ChatColor.ITALIC + " (Remember you can also use the word all)"); + this.plugin.last_bank_deposit_use_time=Bukkit.getWorld("world").getFullTime(); + } + } catch (NumberFormatException ex_e) { + e.getPlayer().sendMessage(ChatColor.RED+"That is not a valid amount! Please try again."); + this.plugin.last_bank_deposit_use_time=Bukkit.getWorld("world").getFullTime(); + } + } + e.setCancelled(true); + } else + if (e.getPlayer().getName().equalsIgnoreCase(this.plugin.last_bank_withdraw_user) && this.plugin.last_bank_withdraw_use_time+200>Bukkit.getWorld("world").getFullTime()) { + //Parse the amount. + double val=0; + if (e.getMessage().equalsIgnoreCase("all")) { + //Withdraw all the money in their account. + val = this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"); + this.plugin.getAccountsConfig().set(e.getPlayer().getName() + ".money", Double.valueOf(0)); + this.plugin.saveAccountsConfig(); + this.plugin.economy.depositPlayer(e.getPlayer().getName(), val); + e.getPlayer().sendMessage(ChatColor.GREEN+"Withdrawed $" + df.format(val) + " from your account. " + ChatColor.YELLOW + "New Bank Balance: $" + ChatColor.AQUA + df.format(this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"))); + this.plugin.last_bank_withdraw_use_time=0; + } else { + try { + val = Double.parseDouble(e.getMessage()); + //Make sure the user is holding at least that much money. + if (this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money")>=val && val>0) { + //Deposit the money into their account. + //this.plugin.economy.bankDeposit(e.getPlayer().getName(), val); + this.plugin.economy.depositPlayer(e.getPlayer().getName(), val); + double mymoney = this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"); + this.plugin.getAccountsConfig().set(e.getPlayer().getName() + ".money", Double.valueOf(mymoney-val)); + this.plugin.saveAccountsConfig(); + e.getPlayer().sendMessage(ChatColor.GREEN+"Withdrawed $" + df.format(val) + " from your account. " + ChatColor.YELLOW + "New Bank Balance: $" + ChatColor.AQUA + df.format(this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money"))); + this.plugin.last_bank_withdraw_use_time=0; + } else { + e.getPlayer().sendMessage(ChatColor.RED+"You do not have that much! " + ChatColor.YELLOW +"Enter a value equal to or lower than $" + ChatColor.GREEN+ df.format(this.plugin.getAccountsConfig().getDouble(e.getPlayer().getName() + ".money")) + "" + ChatColor.GRAY + ChatColor.ITALIC + " (Remember you can also use the word all)"); + this.plugin.last_bank_withdraw_use_time=Bukkit.getWorld("world").getFullTime(); + } + } catch (NumberFormatException ex_e) { + e.getPlayer().sendMessage(ChatColor.RED+"That is not a valid amount! Please try again."); + this.plugin.last_bank_withdraw_use_time=Bukkit.getWorld("world").getFullTime(); + } + } + e.setCancelled(true); + } else + { + Player[] playerlist = Bukkit.getOnlinePlayers(); + for (int i=0;i1) { + ItemStack newitem = p.getItemInHand().clone(); + newitem.setAmount(p.getItemInHand().getAmount()-1); + p.getItemInHand().setAmount(1); + //Drop the rest on the ground. + p.getWorld().dropItemNaturally(p.getLocation(), newitem); + } + ItemMeta meta = p.getItemInHand().getItemMeta(); + List newlore = meta.getLore(); + newlore.add("ID#"+identifier); + meta.setLore(newlore); + p.getItemInHand().setItemMeta(meta); + } + Inventory screen = null; + if (smallchest) { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<9;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(p, 9, "Item Cube #"+identifier); + for (int i=0;i<9;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + } + if (largechest) { + FileConfiguration f = this.plugin.reloadItemCubeConfig(identifier); + if (!f.contains("created")) { + for (int i=0;i<54;i++) { + f.set("item-"+i, new ItemStack(Material.AIR)); + } + f.set("created", Boolean.valueOf(true)); + } + //List items = new ArrayList(); + screen=Bukkit.createInventory(p, 54, "Large Item Cube #"+identifier); + for (int i=0;i<54;i++) { + //items.add(f.getItemStack("item-"+i)); + screen.setItem(i, f.getItemStack("item-"+i)); + } + this.plugin.saveItemCubeConfig(f, identifier); + } + if (screen!=null) { + p.closeInventory(); + p.openInventory(screen); + e.setCancelled(true); + return; + } + } + } + } + if (blockAction == Action.RIGHT_CLICK_BLOCK) { + /*//CREATE THE GIANT PUMPKIN + File file = new File("plugins/WorldEdit/schematics/Pumpkin.schematic"); + if (file.exists()) { + try { + //Pumpkin is 18x18. + com.sk89q.worldedit.Vector v = new com.sk89q.worldedit.Vector(e.getClickedBlock().getLocation().getX(), e.getClickedBlock().getLocation().getY()+1, e.getClickedBlock().getLocation().getZ()); + World worldf = Bukkit.getWorld("world"); + BukkitWorld BWf = new BukkitWorld(worldf); + EditSession es = new EditSession(BWf, 2000000); + CuboidClipboard c1 = SchematicFormat.MCEDIT.load(file); + c1.place(es, v, true); + } catch (DataException ex) { + Bukkit.getLogger().warning("DataException while trying to create structure."); + } catch (IOException ex) { + Bukkit.getLogger().warning("IOException while trying to create structure."); + } catch (MaxChangedBlocksException ex) { + Bukkit.getLogger().warning("MaxChangedBlocksException while trying to create structure."); + } + } else { + Bukkit.getLogger().warning(("File does not exist.")); + }*/ + //Bukkit.getWorld("world").createExplosion(p.getLocation().getX(),p.getLocation().getY(),p.getLocation().getZ(),3f,false,true); + /* + if (p.getName().compareToIgnoreCase("AaMay")==0) { + LivingEntity f = (LivingEntity)Bukkit.getWorld("world").spawnEntity(p.getLocation(), EntityType.CREEPER); + f.setCustomName(ChatColor.GOLD+"Destructive Creeper II"); + f.setCustomNameVisible(true); + }*/ + if ((e.getClickedBlock().getType()==Material.GRASS || e.getClickedBlock().getType()==Material.DIRT) && ( + p.getItemInHand().getType()==Material.WOOD_HOE || + p.getItemInHand().getType()==Material.STONE_HOE || + p.getItemInHand().getType()==Material.IRON_HOE || + p.getItemInHand().getType()==Material.GOLD_HOE || + p.getItemInHand().getType()==Material.DIAMOND_HOE) && this.plugin.PlayerinJob(p, "Farmer") && this.plugin.getJobLv("Farmer", p)>=5) { + p.getItemInHand().setDurability((short)0); + p.updateInventory(); + } + if (e.getClickedBlock().getType() == Material.JUKEBOX && e.getItem()!=null && (e.getItem().getType()==Material.RECORD_3 || + e.getItem().getType()==Material.RECORD_4 || e.getItem().getType()==Material.RECORD_5 || + e.getItem().getType()==Material.RECORD_6 || e.getItem().getType()==Material.RECORD_7 || + e.getItem().getType()==Material.RECORD_8 || e.getItem().getType()==Material.RECORD_9 || + e.getItem().getType()==Material.RECORD_10 || e.getItem().getType()==Material.RECORD_11 || + e.getItem().getType()==Material.RECORD_12 || e.getItem().getType()==Material.GOLD_RECORD || + e.getItem().getType()==Material.GREEN_RECORD)) { + //if (p.getName().compareTo("sigonasr2")==0) {p.sendMessage("This is a jukebox.");} + //if (p.getName().compareTo("sigonasr2")==0) {p.sendMessage("Item in hand: "+e.getItem().getType().toString());} + boolean contains=false; + for (int i=0;i newlore = new ArrayList(); + newlore.add("Requires "+((int)(Math.random()*1000)+100)+" Pumpkin Pie in inventory"); + newlore.add("to convert to a legendary equipment item."); + meta.setLore(newlore); + meta.setDisplayName(ChatColor.GREEN+"Magical Pumpkin Pie"); + pump.setItemMeta(meta); + c.getInventory().setItem(i, pump); + break; + } + } + } + } + } + /* + if (p.getName().compareTo("sigonasr2")==0) { + int v=2; + final Vector direction = p.getEyeLocation().getDirection().multiply(v); + Bukkit.getWorld("world").spawnEntity(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), EntityType.SILVERFISH); + }*/ + //if (p.getName().compareTo("sigonasr2")==0) {Bukkit.getPlayer("sigonasr2").sendMessage("This block is at "+e.getClickedBlock().getX()+" "+e.getClickedBlock().getY()+" "+e.getClickedBlock().getZ()+" Data value:"+e.getClickedBlock().getData());} + if ((e.getClickedBlock().getState() instanceof BrewingStand)) { + BrewingStand brewingstand = (BrewingStand)e.getClickedBlock().getState(); + //Bukkit.getPlayer("sigonasr2").sendMessage("This is a furnace "+furnace.getBurnTime()+","+furnace.getCookTime()); + boolean contains=false; + //This furnace becomes owned. Add it to list if it doesn't exist. + for (int i=0;i400) { + if (p.getPlayerTime()-this.plugin.getConfig().getDouble("spleefrequestatime")>400 && (p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestbplayer"))!=0 || p.getPlayerTime()-this.plugin.getConfig().getDouble("spleefrequestbtime")>400)) { + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+"Spleef Player "+p.getName()+" requested a game in slot A. Join within 20 seconds."); + this.plugin.getConfig().set("spleefrequestatime", Double.valueOf(p.getPlayerTime())); + this.plugin.getConfig().set("spleefrequestaplayer", String.valueOf(p.getName())); + } + } else { + if (p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestbplayer"))!=0) { + //This is a confirmed Spleef game. + int playerarating,playerbrating; + Player playera,playerb; + playera=p; + this.plugin.getConfig().set("spleefrequestatime", Double.valueOf(p.getPlayerTime())); + this.plugin.getConfig().set("spleefrequestaplayer", String.valueOf(p.getName())); + playerb=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")); + if (this.plugin.getAccountsConfig().contains(this.plugin.getConfig().getString("spleefrequestaplayer")+".spleefrating")) { + playerarating=(int)this.plugin.getAccountsConfig().getDouble(this.plugin.getConfig().getString("spleefrequestaplayer")+".spleefrating")/10; + } else { + playerarating=1000; + } + if (this.plugin.getAccountsConfig().contains(this.plugin.getConfig().getString("spleefrequestbplayer")+".spleefrating")) { + playerbrating=(int)this.plugin.getAccountsConfig().getDouble(this.plugin.getConfig().getString("spleefrequestbplayer")+".spleefrating")/10; + } else { + playerbrating=1000; + } + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.GREEN+"Spleef Game Started: "+ChatColor.YELLOW+this.plugin.getConfig().getString("spleefrequestaplayer")+"["+playerarating+"] vs. "+this.plugin.getConfig().getString("spleefrequestbplayer")+"["+playerbrating+"]"); + this.plugin.getConfig().set("spleefinsession", Boolean.valueOf(true)); + this.plugin.spleef_inventory_a = Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().getContents(); + this.plugin.spleef_inventory_b = Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().getContents(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().clear(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().clear(Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().getHeldItemSlot()); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().clear(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().clear(Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().getHeldItemSlot()); + //Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).updateInventory(); + //Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).updateInventory(); + for (int i=1617;i<1627;i++) { + for (int j=54;j<64;j++) { + Bukkit.getWorld("world").getBlockAt(i,86,j).setType(Material.DIRT); + } + } + Location theshovel = new Location(Bukkit.getWorld("world"), 1627, 50, 27); + Chest shovelchest = (Chest)Bukkit.getWorld("world").getBlockAt(theshovel).getState(); + for (int i=0;i<27;i++) { + if (shovelchest.getBlockInventory().getContents()[i]!=null && shovelchest.getBlockInventory().getContents()[i].getType()==Material.WOOD_SPADE) { + this.plugin.store_shovel=shovelchest.getBlockInventory().getContents()[i]; + break; + } + } + Location l1 = new Location(Bukkit.getWorld("world"), 1622, 85, 58); + Chest c=(Chest)Bukkit.getWorld("world").getBlockAt(l1).getState(); + if (!c.getBlockInventory().contains(this.plugin.store_shovel)) { + c.getBlockInventory().setItem((int)(Math.random()*27.0d), this.plugin.store_shovel); + } + for (int i=1617;i<1627;i++) { + for (int j=54;j<64;j++) { + Bukkit.getWorld("world").getBlockAt(i,86,j).setType(Material.DIRT); + } + } + Bukkit.getWorld("world").getBlockAt(1622,86,58).setType(Material.WOOD); + Location newloc=playera.getLocation(); + newloc.setX(1622.49d); + newloc.setY(87.0d); + newloc.setZ(54.53d); + playera.teleport(newloc); + newloc.setZ(63.5d); + playerb.teleport(newloc); + this.plugin.spleef_last_broken_block=p.getPlayerTime(); + } + } + this.plugin.saveConfig(); + this.plugin.saveAccountsConfig(); + } + } else + if (sign.getBlock().getX()==1620 && sign.getBlock().getY()==83 && sign.getBlock().getZ()==45) { //Side B Request. + //If not requested already. + if (!this.plugin.getConfig().getBoolean("spleefinsession")) { + if (p.getPlayerTime()-this.plugin.getConfig().getDouble("spleefrequestatime")>400) { + if (p.getPlayerTime()-this.plugin.getConfig().getDouble("spleefrequestbtime")>400 && (p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestaplayer"))!=0 || p.getPlayerTime()-this.plugin.getConfig().getDouble("spleefrequestatime")>400)) { + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.YELLOW+"Spleef Player "+p.getName()+" requested a game in slot B. Join within 20 seconds."); + this.plugin.getConfig().set("spleefrequestbtime", Double.valueOf(p.getPlayerTime())); + this.plugin.getConfig().set("spleefrequestbplayer", String.valueOf(p.getName())); + } + } else { + if (p.getName().compareTo(this.plugin.getConfig().getString("spleefrequestaplayer"))!=0) { + //This is a confirmed Spleef game. + int playerarating,playerbrating; + Player playera,playerb; + this.plugin.getConfig().set("spleefrequestbtime", Double.valueOf(p.getPlayerTime())); + this.plugin.getConfig().set("spleefrequestbplayer", String.valueOf(p.getName())); + playera=Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")); + playerb=p; + if (this.plugin.getAccountsConfig().contains(this.plugin.getConfig().getString("spleefrequestaplayer")+".spleefrating")) { + playerarating=(int)this.plugin.getAccountsConfig().getDouble(this.plugin.getConfig().getString("spleefrequestaplayer")+".spleefrating")/10; + } else { + playerarating=100; + } + if (this.plugin.getAccountsConfig().contains(this.plugin.getConfig().getString("spleefrequestbplayer")+".spleefrating")) { + playerbrating=(int)this.plugin.getAccountsConfig().getDouble(this.plugin.getConfig().getString("spleefrequestbplayer")+".spleefrating")/10; + } else { + playerbrating=100; + } + Bukkit.broadcastMessage(ChatColor.RED+"[SPLEEF] "+ChatColor.GREEN+"Spleef Game Started: "+ChatColor.YELLOW+this.plugin.getConfig().getString("spleefrequestaplayer")+"["+playerarating+"] vs. "+this.plugin.getConfig().getString("spleefrequestbplayer")+"["+playerbrating+"]"); + this.plugin.getConfig().set("spleefinsession", Boolean.valueOf(true)); + this.plugin.spleef_inventory_a = Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().getContents(); + this.plugin.spleef_inventory_b = Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().getContents(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().clear(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().clear(Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).getInventory().getHeldItemSlot()); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().clear(); + Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().clear(Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).getInventory().getHeldItemSlot()); + //Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestaplayer")).updateInventory(); + //Bukkit.getPlayer(this.plugin.getConfig().getString("spleefrequestbplayer")).updateInventory(); + Location theshovel = new Location(Bukkit.getWorld("world"), 1627, 50, 27); + Chest shovelchest = (Chest)Bukkit.getWorld("world").getBlockAt(theshovel).getState(); + for (int i=0;i<27;i++) { + if (shovelchest.getBlockInventory().getContents()[i]!=null && shovelchest.getBlockInventory().getContents()[i].getType()==Material.WOOD_SPADE) { + this.plugin.store_shovel=shovelchest.getBlockInventory().getContents()[i]; + break; + } + } + Location l1 = new Location(Bukkit.getWorld("world"), 1622, 85, 58); + Chest c=(Chest)Bukkit.getWorld("world").getBlockAt(l1).getState(); + if (!c.getBlockInventory().contains(this.plugin.store_shovel)) { + c.getBlockInventory().setItem((int)(Math.random()*27.0d), this.plugin.store_shovel); + } + for (int i=1617;i<1627;i++) { + for (int j=54;j<64;j++) { + Bukkit.getWorld("world").getBlockAt(i,86,j).setType(Material.DIRT); + } + } + Bukkit.getWorld("world").getBlockAt(1622,86,58).setType(Material.WOOD); + Location newloc=playera.getLocation(); + newloc.setX(1622.49d); + newloc.setY(87.0d); + newloc.setZ(54.53d); + playera.teleport(newloc); + newloc.setZ(63.5d); + playerb.teleport(newloc); + this.plugin.spleef_last_broken_block=p.getPlayerTime(); + } + } + this.plugin.saveConfig(); + this.plugin.saveAccountsConfig(); + } + } + if (stats) { + if (p.hasPermission("bankeconomy.sign.use")) { + if ((sign.getLine(0).equalsIgnoreCase(ChatColor.DARK_GREEN + "[Bank]")) && (sign.getLine(1).equalsIgnoreCase(ChatColor.DARK_RED + "Deposit"))) { + /*double value = Double.parseDouble(arg0); + double total = actMon + value; + if (value <= actHand) { + this.plugin.getAccountsConfig().set(p.getName() + ".money", Double.valueOf(total)); + this.plugin.saveAccountsConfig(); + if (value <= 1) + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " You added " + value + " " + currencySG + " to your bank account."); + else { + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " You added " + value + " " + currencyPL + " to your bank account."); + } + Main.economy.withdrawPlayer(p.getName(), value); + } else { + p.sendMessage("ァ2[BankEconomy]" + ChatColor.AQUA + " Sorry, you can't deposit that amount of money."); + }*/ + //If they were using the withdraw bank before, clear them from it. + if (this.plugin.last_bank_withdraw_user.equalsIgnoreCase(p.getName())) { + this.plugin.last_bank_withdraw_user=""; + } + if (this.plugin.last_bank_deposit_use_time+200='a'&&mod[i]<='z') { + mod[i]-=32; + first=true; + } else + if (i==0) { + if (mod[i]>='A'&&mod[i]<='Z') { + first=true; + } + } else { + if (mod[i]>='A'&&mod[i]<='Z'&&(mod[i-1]<'A'||mod[i-1]>'Z')) { + first=true; + } + } + } else { + if (mod[i-1]!=' ') { + if (mod[i]>='A'&&mod[i]<='Z') { + mod[i]+=32; + } + } + } + } + return String.valueOf(mod); +} +/* + @EventHandler + public void onLightningStrike(LightningStrikeEvent e) { + Bukkit.getWorld("world").strikeLightning(new Location("world", Bukkit.getOnlinePlayers()[(int)(Math.random()*Bukkit.getOnlinePlayers().length)].getLocation().getX(), 0d, 0d)); + }*/ + +} + diff --git a/BankEconomyMod/src/me/kaZep/Base/ReviveInventory.java b/BankEconomyMod/src/me/kaZep/Base/ReviveInventory.java new file mode 100644 index 0000000..7d730fc --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/ReviveInventory.java @@ -0,0 +1,24 @@ +package me.kaZep.Base; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class ReviveInventory { + public ItemStack[] mainInventory; + public ItemStack[] armorInventory; + public float expamt; + public float explv; + public long dropTime; + public Player p; + public Location deathLocation; + public ReviveInventory(Player p) { + mainInventory = p.getInventory().getContents(); + armorInventory = p.getInventory().getArmorContents(); + expamt = p.getExp(); + explv = p.getLevel(); + dropTime = Bukkit.getWorld("world").getFullTime()+12000; + deathLocation = p.getLocation(); + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/StoreValues.java b/BankEconomyMod/src/me/kaZep/Base/StoreValues.java new file mode 100644 index 0000000..cd7436e --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/StoreValues.java @@ -0,0 +1,16 @@ +package me.kaZep.Base; + +import org.bukkit.enchantments.Enchantment; + +public class StoreValues { + double chance; + Enchantment enchant; + int level; + int enchantlevel; + StoreValues(double chance, Enchantment enchant,int level,int enchantlevel) { + this.chance=chance; + this.enchant=enchant; + this.level=level; + this.enchantlevel=enchantlevel; + } +} \ No newline at end of file diff --git a/BankEconomyMod/src/me/kaZep/Base/SupportEntity.java b/BankEconomyMod/src/me/kaZep/Base/SupportEntity.java new file mode 100644 index 0000000..a989adc --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/SupportEntity.java @@ -0,0 +1,26 @@ +package me.kaZep.Base; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public class SupportEntity { + public List id; + Player p; + public long registeredtime; + public SupportEntity(Player p) { + this.p=p; + id = new ArrayList(); + registeredtime = Bukkit.getWorld("world").getFullTime()+1200; + } + public List getEntities() { + return id; + } + public Player getPlayer() { + return p; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/SupportPlayer.java b/BankEconomyMod/src/me/kaZep/Base/SupportPlayer.java new file mode 100644 index 0000000..85c503b --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/SupportPlayer.java @@ -0,0 +1,13 @@ +package me.kaZep.Base; + +import org.bukkit.entity.Player; + +public class SupportPlayer { + Player p; + int myarmorbuff=0; + int myhpbuff=0; + int myspdbuff=0; + public SupportPlayer(Player p) { + this.p=p; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Base/TempWeb.java b/BankEconomyMod/src/me/kaZep/Base/TempWeb.java new file mode 100644 index 0000000..117c473 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Base/TempWeb.java @@ -0,0 +1,12 @@ +package me.kaZep.Base; + +import org.bukkit.Location; + +public class TempWeb { + public Location loc; + public int timer; + public TempWeb(Location loc, int timer) { + this.loc=loc; + this.timer=timer; + } +} diff --git a/BankEconomyMod/src/me/kaZep/Commands/JobsDataInfo.java b/BankEconomyMod/src/me/kaZep/Commands/JobsDataInfo.java new file mode 100644 index 0000000..af32055 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Commands/JobsDataInfo.java @@ -0,0 +1,252 @@ +package me.kaZep.Commands; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class JobsDataInfo { + String jobname; + String introstring; + String actionname1; + String actionname2; + String actionname3; + String actionname4; + List extrainfo; + List datanames1; + List datanames2; + List datanames3; + List datanames4; + String lv5buff; + String lv10buff; + String lv20buff; + String lv40buff; + List dataprice1; + List dataprice2; + List dataprice3; + List dataprice4; + List dataexp1; + List dataexp2; + List dataexp3; + List dataexp4; + public double basexp; + public double explvup; + public double explvmult; + public double moneymult; + public JobsDataInfo() { + jobname = ""; + introstring = ""; + actionname1 = ""; + actionname2 = ""; + actionname3 = ""; + actionname4 = ""; + extrainfo = new ArrayList(); + datanames1 = new ArrayList(); + datanames2 = new ArrayList(); + datanames3 = new ArrayList(); + datanames4 = new ArrayList(); + lv5buff = ""; + lv10buff = ""; + lv20buff = ""; + lv40buff = ""; + dataprice1 = new ArrayList(); + dataprice2 = new ArrayList(); + dataprice3 = new ArrayList(); + dataprice4 = new ArrayList(); + dataexp1 = new ArrayList(); + dataexp2 = new ArrayList(); + dataexp3 = new ArrayList(); + dataexp4 = new ArrayList(); + basexp = 0; + explvup = 0; + explvmult = 0; + moneymult = 0; + } + public void setJobName(String title) { + this.jobname = title; + } + public void setJobDescription(String desc) { + this.introstring = desc; + } + public void addExtraData(String info) { + extrainfo.add(info); + } + public String getBuffData(int lv) { + switch (lv) { + case 5:{ + return this.lv5buff; + } + case 10:{ + return this.lv10buff; + } + case 20:{ + return this.lv20buff; + } + case 40:{ + return this.lv40buff; + } + } + return ""; + } + public void setBuffData(String lv5,String lv10,String lv20,String lv40) { + this.lv5buff=lv5; + this.lv10buff=lv10; + this.lv20buff=lv20; + this.lv40buff=lv40; + } + public void setAction(int numb, String name) { + switch (numb) { + case 0:{ + this.actionname1=name; + }break; + case 1:{ + this.actionname2=name; + }break; + case 2:{ + this.actionname3=name; + }break; + case 3:{ + this.actionname4=name; + }break; + default:{ + this.actionname1=name; + } + } + } + public void setExp(double base, double lvup, double lvmult, double moneymult) { + this.basexp=base; + this.explvup=lvup; + this.explvmult=lvmult; + this.moneymult=moneymult-1; + } + public void addData(String name, double price, double exp, int actionnumb) { + switch (actionnumb) { + case 0:{ + this.datanames1.add(name); + this.dataprice1.add(price); + this.dataexp1.add(exp); + }break; + case 1:{ + this.datanames2.add(name); + this.dataprice2.add(price); + this.dataexp2.add(exp); + }break; + case 2:{ + this.datanames3.add(name); + this.dataprice3.add(price); + this.dataexp3.add(exp); + }break; + case 3:{ + this.datanames4.add(name); + this.dataprice4.add(price); + this.dataexp4.add(exp); + }break; + default:{ + this.datanames1.add(name); + this.dataprice1.add(price); + this.dataexp1.add(exp); + } + } + } + public void sendOutput(Player p) { + DecimalFormat df = new DecimalFormat("#0.00"); + p.sendMessage(this.jobname); + p.sendMessage(""); + p.sendMessage(this.introstring); + if (this.extrainfo!=null) { + for (int i=0;i0 && lv<=40) { + DecimalFormat df = new DecimalFormat("#0.00"); + p.sendMessage(this.jobname); + p.sendMessage(""); + p.sendMessage(this.introstring); + if (this.extrainfo!=null) { + for (int i=0;i40) { + p.sendMessage(ChatColor.RED+"Level must be between 1 and 40."); + } + return false; + } + } +} diff --git a/BankEconomyMod/src/me/kaZep/Commands/commandBankEconomy.java b/BankEconomyMod/src/me/kaZep/Commands/commandBankEconomy.java new file mode 100644 index 0000000..c7f10a1 --- /dev/null +++ b/BankEconomyMod/src/me/kaZep/Commands/commandBankEconomy.java @@ -0,0 +1,913 @@ +package me.kaZep.Commands; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import me.kaZep.Base.Main; +import net.milkbowl.vault.economy.Economy; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.Server; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantInventory; +import org.bukkit.inventory.meta.ItemMeta; + + +public class commandBankEconomy + implements CommandExecutor +{ + public Main plugin; + String prefix = "2[BankEconomy]"; + String usage = "bUsage:"; + String invARG = "cInvalid argument. Please use 2/bankeconomyc to see a full list of commands."; + String invARGT2 = "cInvalid argument or insufficient permissions."; + String offlinePlayer = "cPlayer not found."; + String accountDisabled = "cYour account is disabled."; + + String cmdInfo = "aYour bank balance isb"; + String cmdCheckARG1 = "a/bankeconomy check "; + String cmdResetARG1 = "a/bankeconomy reset "; + String cmdDepositARG1 = "a"; + String cmdWithdrawARG1 = "a"; + String cmdTransferARG1 = "a/transfer "; + String cmdTransferARG2 = "aPlease precise the name of the player."; + String cmdEditARG1 = "a/bankeconomy edit "; + String cmdEditARG2 = "aPlease precise the value."; + + String cmdCheckReponsePlayer = "a's bank balance isb"; + String cmdResetToPlayer1 = "aYou have reset"; + String cmdResetToPlayer2 = "'s bank account."; + String cmdResetToTarget = "has reset your bank account."; + String cmdReload = "aAll the configs have been reloaded succesfully."; + String notEnoughMoney = "aYou do not own that amount of money."; + String succesfullDeposited = "aYou have depositedb"; + String succesfullWithdraw = "aYou have withdrawnb"; + String cmdTransferToPlayer1 = "aYou have transferedb"; + String cmdTransferToPlayer2 = "atob"; + String cmdTransferToTarget1 = "ahas transfered to youb"; + String cmdTransferSameNick = "aYou can't transfer money to yourself."; + String cmdEditAvaibleActions = "aAvaible actions: status, balance"; + String cmdEditDisabledToPlayer1 = "aYou have disabled"; + String cmdEditDisabledToPlayer2 = "'s bank account."; + String cmdEditEnableToPlayer1 = "aYou have enabled"; + String cmdEditEnableToPlayer2 = "'s bank account."; + String cmdEditAmountSetPlayer1 = "aYou have set"; + String cmdEditAmountSetPlayer2 = "atob"; + String cmdEditAmountSetPlayer3 = "a's account."; + + public commandBankEconomy(Main plugin) + { + this.plugin = plugin; + } + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if ((sender instanceof Player)) { + Player p = (Player)sender; + + boolean status = this.plugin.getAccountsConfig().getBoolean(p.getName() + ".status"); + int playerBankBalance = this.plugin.getAccountsConfig().getInt(p.getName() + ".money"); + + String currencySingular = Main.economy.currencyNameSingular(); + String currencyPlural = Main.economy.currencyNamePlural(); + + if (!status) + p.sendMessage(this.prefix + " " + this.accountDisabled); + else if (status) { + if ((args.length == 0)) { + if (cmd.getName().equalsIgnoreCase("sp")) { + //Show a list of all stat points and what you have currently allocated. + p.sendMessage(""); + p.sendMessage("Stat Listing shown as: "+ChatColor.AQUA+"Cost, "+ChatColor.YELLOW+"Current Buff, "+ChatColor.RED+"Next Level, "+ChatColor.GREEN+" Description"); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#10 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6+" - "+ChatColor.AQUA+" 6 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6+1):ChatColor.RED+"+"+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6))))+ChatColor.GREEN+" Health Regeneration."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#9 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/5+" - "+ChatColor.AQUA+" 5 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(1, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/5)+"%"+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(1, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/5+1)+"%":ChatColor.RED+"+"+this.plugin.getStatBonus(1, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/5+1)+"%"):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(1, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/5)+"%")))+ChatColor.GREEN+" block destroying speed."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#8 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4+" - "+ChatColor.AQUA+" 4 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(2, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4)+"%"+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(2, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4+1)+"%":ChatColor.RED+"+"+this.plugin.getStatBonus(2, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4+1)+"%"):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(2, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4)+"%")))+ChatColor.GREEN+" damage reduction."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#7 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4+" - "+ChatColor.AQUA+" 4 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4+1):ChatColor.RED+"+"+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4))))+ChatColor.GREEN+" armor penetration."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#6 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/3+" - "+ChatColor.AQUA+" 3 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/3)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/3+1):ChatColor.RED+"+"+this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/3+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/3))))+ChatColor.GREEN+" temporary health. (Regenerates every 3 minutes)"); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#5 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")/3+" - "+ChatColor.AQUA+" 3 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(5, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")/3)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(5, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")/3+1):ChatColor.RED+"+"+this.plugin.getStatBonus(5, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")/3+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(5, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")/3))))+ChatColor.GREEN+" seconds of fire resistance when caught on fire."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#4 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")/2+" - "+ChatColor.AQUA+" 2 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")/2)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")/2+1):ChatColor.RED+"+"+this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")/2+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")/2))))+ChatColor.GREEN+" base damage."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#3 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2+" - "+ChatColor.AQUA+" 2 pts: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")<24 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(7, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(7, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2+1):ChatColor.RED+"+"+this.plugin.getStatBonus(7, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(7, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2))))+ChatColor.GREEN+" health."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#2 "+ChatColor.RESET+ChatColor.WHITE+"-"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")/1+" - "+ChatColor.AQUA+" 1 pt: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")<25 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")>0/*Has a point in it.*/?ChatColor.YELLOW+"-"+this.plugin.getStatBonus(8, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")/1)+"%"+"/"+ChatColor.RED+"-"+this.plugin.getStatBonus(8, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")/1+1)+"%":ChatColor.RED+"-"+this.plugin.getStatBonus(8, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")/1+1)+"%"):(ChatColor.YELLOW+"-"+this.plugin.getStatBonus(8, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")/1)+"%")))+ChatColor.GREEN+" hunger decay."); + p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"#1 "+ChatColor.RESET+ChatColor.WHITE+"+"+this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")/1+" - "+ChatColor.AQUA+" 1 pt: "+ChatColor.YELLOW+((this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")<25 /*Not maxed.*/?(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")>0/*Has a point in it.*/?ChatColor.YELLOW+"+"+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")/1)+"/"+ChatColor.RED+"+"+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")/1+1):ChatColor.RED+"+"+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")/1+1)):(ChatColor.YELLOW+"+"+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")/1))))+ChatColor.GREEN+" seconds of water breathing."); + p.sendMessage(ChatColor.ITALIC+""+ChatColor.DARK_AQUA+"Remember that 1 Health / Damage point is half a heart."); + if (this.plugin.getStatPointTotal(p)"+ChatColor.WHITE+" - Teleport to a player for a cost."); + } else + if (cmd.getName().equalsIgnoreCase("settings")) { + Inventory i = Bukkit.createInventory(p, 27, "Notification Options"); + int count=-1; + ItemStack temp,on,off; + temp=new ItemStack(Material.DIRT); + ItemMeta temp_meta=temp.getItemMeta();temp_meta.setDisplayName(ChatColor.YELLOW+"Pick Up Items");List temp_meta_lore = new ArrayList();temp_meta_lore.add(ChatColor.ITALIC+"Get notified whenever you pick up items.");temp_meta_lore.add(ChatColor.ITALIC+"");temp_meta_lore.add(ChatColor.ITALIC+""+ChatColor.GRAY+"Click to toggle this option on or off.");temp_meta.setLore(temp_meta_lore);temp.setItemMeta(temp_meta); + on=new ItemStack(Material.REDSTONE_TORCH_ON); + off=new ItemStack(Material.REDSTONE_TORCH_OFF); + i.setItem(count+=2, temp);on.setItemMeta(temp_meta);off.setItemMeta(temp_meta); i.setItem(count+=1, (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify1")?on:off)); + temp_meta.setDisplayName(ChatColor.YELLOW+"Craft Items");temp_meta_lore = new ArrayList();temp_meta_lore.add(ChatColor.ITALIC+"Get notified whenever you craft an item.");temp_meta_lore.add(ChatColor.ITALIC+"");temp_meta_lore.add(ChatColor.ITALIC+""+ChatColor.GRAY+"Click to toggle this option on or off.");temp_meta.setLore(temp_meta_lore); + temp=new ItemStack(Material.WORKBENCH); + temp.setItemMeta(temp_meta);i.setItem(count+=3, temp);on.setItemMeta(temp_meta);off.setItemMeta(temp_meta); i.setItem(count+=1, (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify2")?on:off)); + temp_meta.setDisplayName(ChatColor.YELLOW+"Experience Points");temp_meta_lore = new ArrayList();temp_meta_lore.add(ChatColor.ITALIC+"Get notified whenever you gain");temp_meta_lore.add(ChatColor.ITALIC+"experience points.");temp_meta_lore.add(ChatColor.ITALIC+"");temp_meta_lore.add(ChatColor.ITALIC+""+ChatColor.GRAY+"Click to toggle this option on or off.");temp_meta.setLore(temp_meta_lore); + temp=new ItemStack(Material.SLIME_BALL); + temp.setItemMeta(temp_meta);i.setItem(count+=4, temp);on.setItemMeta(temp_meta);off.setItemMeta(temp_meta); i.setItem(count+=1, (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify3")?on:off)); + temp_meta.setDisplayName(ChatColor.YELLOW+"Damage Dealt");temp_meta_lore = new ArrayList();temp_meta_lore.add(ChatColor.ITALIC+"Get notified whenever you deal");temp_meta_lore.add(ChatColor.ITALIC+"damage to enemies.");temp_meta_lore.add(ChatColor.ITALIC+"");temp_meta_lore.add(ChatColor.ITALIC+""+ChatColor.GRAY+"Click to toggle this option on or off.");temp_meta.setLore(temp_meta_lore); + temp=new ItemStack(Material.IRON_SWORD); + temp.setItemMeta(temp_meta);i.setItem(count+=3, temp);on.setItemMeta(temp_meta);off.setItemMeta(temp_meta); i.setItem(count+=1, (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify4")?on:off)); + temp_meta.setDisplayName(ChatColor.YELLOW+"Damage Received");temp_meta_lore = new ArrayList();temp_meta_lore.add(ChatColor.ITALIC+"Get notified whenever you take damage");temp_meta_lore.add(ChatColor.ITALIC+" from enemies and other sources of damage.");temp_meta_lore.add(ChatColor.ITALIC+"");temp_meta_lore.add(ChatColor.ITALIC+""+ChatColor.GRAY+"Click to toggle this option on or off.");temp_meta.setLore(temp_meta_lore); + temp=new ItemStack(Material.IRON_CHESTPLATE); + temp.setItemMeta(temp_meta); i.setItem(count+=4, temp);on.setItemMeta(temp_meta);off.setItemMeta(temp_meta); i.setItem(count+=1, (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify5")?on:off)); + temp_meta.setDisplayName(ChatColor.YELLOW+"Money Gained");temp_meta_lore = new ArrayList();temp_meta_lore.add(ChatColor.ITALIC+"Get notified of how much money you made");temp_meta_lore.add(ChatColor.ITALIC+" from your jobs in the past hour.");temp_meta_lore.add(ChatColor.ITALIC+"");temp_meta_lore.add(ChatColor.ITALIC+""+ChatColor.GRAY+"Click to toggle this option on or off.");temp_meta.setLore(temp_meta_lore); + temp=new ItemStack(Material.GOLD_INGOT); + temp.setItemMeta(temp_meta);i.setItem(count+=3, temp);on.setItemMeta(temp_meta);off.setItemMeta(temp_meta); i.setItem(count+=1, (this.plugin.getAccountsConfig().getBoolean(p.getName()+".settings.notify6")?on:off)); + p.openInventory(i); + } else + if (cmd.getName().equalsIgnoreCase("event")) { + if (p.hasPermission("maintenance-mode-admin")) { + p.sendMessage("Events available: halloween. Use: /event "); + } + } else + if (cmd.getName().equalsIgnoreCase("maintenance")) { + if (p.hasPermission("maintenance-mode-admin")) { + if (this.plugin.getConfig().getBoolean("maintenance-mode")) { + this.plugin.getConfig().set("maintenance-mode", Boolean.valueOf(false)); + Bukkit.broadcastMessage("Maintenance mode is now "+ChatColor.BLUE+" OFF"+ChatColor.RESET+"."); + } else { + this.plugin.getConfig().set("maintenance-mode", Boolean.valueOf(true)); + Bukkit.broadcastMessage("Maintenance mode is now "+ChatColor.RED+" ON"+ChatColor.RESET+"."); + } + this.plugin.saveConfig(); + } + } else + if (cmd.getName().equalsIgnoreCase("transfer")) { + p.sendMessage("Usage: "+ChatColor.RED+"/transfer name money"+ChatColor.WHITE+" - Transfer money to a player."); + } else + if (cmd.getName().equalsIgnoreCase("revive")) { + p.sendMessage("Usage: "+ChatColor.RED+"/revive me "+ChatColor.WHITE+" - Revive to the last location you died at."); + } else + if (cmd.getName().equalsIgnoreCase("unenchant")) { + Map map = p.getItemInHand().getEnchantments(); + for (Map.Entry entry : map.entrySet()) { + p.getItemInHand().removeEnchantment(entry.getKey()); + } + p.sendMessage("Enchantments removed on this item."); + } + else + if (cmd.getName().equalsIgnoreCase("jobs")) { + FileConfiguration config = this.plugin.getConfig(); + int MAXJOBS = config.getInt("jobs.MAX_JOBS"); + p.sendMessage(ChatColor.GOLD+" Blacksmith ("+config.getInt("jobs.Blacksmith")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.DARK_GREEN+" Breeder ("+config.getInt("jobs.Breeder")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.LIGHT_PURPLE+" Brewer ("+config.getInt("jobs.Brewer")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.WHITE+" Builder ("+config.getInt("jobs.Builder")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.YELLOW+" Cook ("+config.getInt("jobs.Cook")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.GOLD+" Digger ("+config.getInt("jobs.Digger")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.DARK_BLUE+" Enchanter ("+config.getInt("jobs.Enchanter")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.WHITE+" Explorer ("+config.getInt("jobs.Explorer")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.BLUE+" Farmer ("+config.getInt("jobs.Farmer")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.AQUA+" Fisherman ("+config.getInt("jobs.Fisherman")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.RED+" Hunter ("+config.getInt("jobs.Hunter")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.GRAY+" Miner ("+config.getInt("jobs.Miner")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.DARK_RED+" Support ("+config.getInt("jobs.Support")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.DARK_PURPLE+" Weaponsmith ("+config.getInt("jobs.Weaponsmith")+"/"+MAXJOBS+")"); + p.sendMessage(ChatColor.GREEN+" Woodcutter ("+config.getInt("jobs.Woodcutter")+"/"+MAXJOBS+")"); + p.sendMessage("For more information, type "+ChatColor.GREEN+"/jobs info [JobName]"); + } else + if (!p.hasPermission("bankeconomy.main.admin")) { + p.sendMessage(ChatColor.GOLD + "---===" + this.prefix + + ChatColor.GOLD + "===---"); + p.sendMessage(ChatColor.RED + "/bankeconomy transfer " + + ChatColor.AQUA + + "- Transfer some money to other player."); + p.sendMessage(ChatColor.RED + "/bankeconomy info " + + ChatColor.AQUA + "- See your bank informations."); + p.sendMessage(ChatColor.RED + "/revive me" + + ChatColor.AQUA + "- Revive after a death."); + p.sendMessage(ChatColor.RED + "/revive amount " + + ChatColor.AQUA + "- Check cost to revive at current location."); + } else { + p.sendMessage(ChatColor.GOLD + "---===" + this.prefix + + ChatColor.GOLD + "===---"); + p.sendMessage(ChatColor.RED + "/bankeconomy transfer " + + ChatColor.AQUA + + "- Transfer some money to other player."); + p.sendMessage(ChatColor.RED + "/bankeconomy info " + + ChatColor.AQUA + "- See your bank informations."); + p.sendMessage(ChatColor.DARK_RED + "/bankeconomy edit " + + ChatColor.DARK_AQUA + "- Edit a player bank account."); + p.sendMessage(ChatColor.RED + "/revive me" + + ChatColor.AQUA + "- Revive after a death."); + p.sendMessage(ChatColor.RED + "/revive amount " + + ChatColor.AQUA + "- Check cost to revive at current location."); + p.sendMessage(ChatColor.DARK_RED + "/bankeconomy check " + + ChatColor.DARK_AQUA + + "- Check a player bank account."); + p.sendMessage(ChatColor.DARK_RED + "/bankeconomy reset " + + ChatColor.DARK_AQUA + + "- Delete a player bank account."); + p.sendMessage(ChatColor.DARK_RED + "/bankeconomy reload " + + ChatColor.DARK_AQUA + + "- Reloads config and accounts."); + } + } else + if (cmd.getName().equalsIgnoreCase("event") && args.length==1 && p.hasPermission("maintenance-mode-admin")) { + if (args[0].equalsIgnoreCase("halloween")) { + if (this.plugin.getConfig().getBoolean("halloween-enabled")) { + this.plugin.getConfig().set("halloween-enabled", Boolean.valueOf(false)); + p.sendMessage("Halloween event disabled."); + } else { + this.plugin.getConfig().set("halloween-enabled", Boolean.valueOf(true)); + p.sendMessage("Halloween event enabled."); + } + this.plugin.saveConfig(); + } + } else + if (cmd.getName().equalsIgnoreCase("event") && args.length==2 && p.hasPermission("maintenance-mode-admin")) { + if (args[0].equalsIgnoreCase("halloween") && args[1].equalsIgnoreCase("giant_pumpkin")) { + if (this.plugin.getConfig().getBoolean("halloween-enabled")) { + ItemStack item = new ItemStack(Material.PUMPKIN); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.GREEN+"Giant Pumpkin"); + List lore = new ArrayList(); + lore.add("Place the Giant Pumpkin on an Orange"); + lore.add("Block to start carving your pumpkin!"); + meta.setLore(lore); + item.setItemMeta(meta); + p.getInventory().addItem(item); + } + this.plugin.saveConfig(); + } + if (args[0].equalsIgnoreCase("halloween") && args[1].equalsIgnoreCase("pie_label")) { + if (this.plugin.getConfig().getBoolean("halloween-enabled")) { + for (int i=1;i<11;i++) { + ItemStack item = new ItemStack(Material.PUMPKIN_PIE); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("Pie "+i); + item.setItemMeta(meta); + p.getInventory().addItem(item); + } + } + this.plugin.saveConfig(); + } + } else + if (cmd.getName().equalsIgnoreCase("transfer") && args.length==1) { + p.sendMessage("Usage: "+ChatColor.RED+"/transfer name money"+ChatColor.WHITE+" - Transfer money to a player."); + } + else + if (cmd.getName().equalsIgnoreCase("transfer") && args.length==2) { + double amount = Double.parseDouble(args[1].replaceAll("[^0-9\\.]", "")); + Player target = p.getServer().getPlayer(args[0]); + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } + else if (target.getName() == p.getName()) { + p.sendMessage(this.prefix + " " + this.cmdTransferSameNick); + } + else if (amount > playerBankBalance) { + p.sendMessage(this.prefix + " " + this.notEnoughMoney); + } else if (amount <= playerBankBalance) { + double totalWithdraw = playerBankBalance - amount; + double totalDeposit = amount + this.plugin.getAccountsConfig().getInt(target.getName() + ".money"); + + this.plugin.getAccountsConfig().set(p.getName() + ".money", Double.valueOf(totalWithdraw)); + this.plugin.getAccountsConfig().set(target.getName() + ".money", Double.valueOf(totalDeposit)); + this.plugin.saveAccountsConfig(); + + if (amount > 1.0D) { + p.sendMessage(this.prefix + " " + this.cmdTransferToPlayer1 + " " + amount + currencyPlural + " " + this.cmdTransferToPlayer2 + " " + target.getName() + "a."); + target.sendMessage(this.prefix + " b" + p.getName() + " " + this.cmdTransferToTarget1 + " " + amount + currencyPlural + "a."); + } else if (amount <= 1.0D) { + p.sendMessage(this.prefix + " " + this.cmdTransferToPlayer1 + " " + amount + currencySingular + " " + this.cmdTransferToPlayer2 + " " + target.getName() + "a."); + target.sendMessage(this.prefix + " b" + p.getName() + " " + this.cmdTransferToTarget1 + " " + amount + currencySingular + "a."); + } + } + + } + else + if (cmd.getName().equalsIgnoreCase("sp") && args.length==1) { + try { + int readvalue = Integer.valueOf(args[0]); + if (readvalue<=10 && readvalue>=1) { + int statpoints = (this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p); + if (readvalue==10) { + if (statpoints>=6) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat1", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")+6)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to Health Regeneration! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1")/6)+" of extra health regeneration! (Every time you regenerate health, you get "+this.plugin.getStatBonus(0, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat1"))+" extra hearts!) "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 6.)"); + } + } else + if (readvalue==9) { + if (statpoints>=5) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat2", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")+5)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to block destroying speed! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(1, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat2")/5)+"% block destruction speed! "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 5.)"); + } + } else + if (readvalue==8) { + if (statpoints>=4) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat3", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")+4)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to block damage reduction! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(2, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat3")/4)+"% of damage taken reduced! "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 4.)"); + } + } else + if (readvalue==6) { + if (statpoints>=3) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat4", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")+3)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to temporary health! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat4")/4)+" extra temporary health. (Regenerates every 3 minutes.) "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 3.)"); + } + } else + if (readvalue==7) { + if (statpoints>=4) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat5", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")+4)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to armor penetration! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(4, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat5")/4)+" damage of armor penetration. Armor-Wearers will be more afraid of you! "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 4.)"); + } + } else + if (readvalue==5) { + if (statpoints>=3) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat6", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")+3)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to fire resistance! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(5, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat6")/3)+" seconds of fire resistance when you catch on fire. (Resets when you stop burning) "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 3.)"); + } + } else + if (readvalue==4) { + if (statpoints>=2) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat7", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")+2)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to base damage! "+ChatColor.BLUE+"You now have +"+this.plugin.getStatBonus(6, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat7")/2)+" base damage. "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 2.)"); + } + } else + if (readvalue==3) { + if (statpoints>=2) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat8", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")+2)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to base health! "+ChatColor.BLUE+"You now have +"+this.plugin.getStatBonus(7, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat8")/2)+" base health. "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 2.)"); + } + } else + if (readvalue==2) { + if (statpoints>=1) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat9", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9")+1)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to hunger decay! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(8, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat9"))+"% less hunger decay "+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 1.)"); + } + } else + if (readvalue==1) { + if (statpoints>=1) { + this.plugin.getAccountsConfig().set(p.getName()+".stats.stat10", Integer.valueOf(this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10")+1)); + this.plugin.saveAccountsConfig(); + p.sendMessage("You added 1 stat point to water breathing! "+ChatColor.BLUE+"You now have "+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName()+".stats.stat10"))+" seconds of water breathing. "+ChatColor.WHITE+((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))+" stat point"+(((this.plugin.getJobTotalLvs(p)/5+1)-this.plugin.getStatPointTotal(p))==1?"":"s")+" left."); + //Increase maximum air by 200 ticks. + p.setMaximumAir(300+this.plugin.getStatBonus(9, this.plugin.getAccountsConfig().getInt(p.getName() + ".stats.stat10"))*20); + } else { + p.sendMessage(ChatColor.RED+"You do not have enough stat points to get that stat! (You need 1.)"); + } + } + } else { + p.sendMessage(ChatColor.RED+"Please choose an appropriate stat point slot (1-10)."); + } + } catch (NumberFormatException ex_e) { + p.sendMessage(ChatColor.RED+"The inputted slot is not a valid number."); + } + } + else if (cmd.getName().equalsIgnoreCase("bankeconomy") && (args[0].equalsIgnoreCase("info")) && (p.hasPermission("bankeconomy.info"))) { + if (args.length == 1) { + if (playerBankBalance <= 1) + p.sendMessage(this.prefix + " " + this.cmdInfo + " " + playerBankBalance + currencySingular + "a."); + else if (playerBankBalance > 1) + p.sendMessage(this.prefix + " " + this.cmdInfo + " " + playerBankBalance + currencyPlural + "a."); + } + else + p.sendMessage(this.invARG); + } + else if (cmd.getName().equalsIgnoreCase("bankeconomy") && (args[0].equalsIgnoreCase("check")) && (p.hasPermission("bankeconomy.check"))) { + if (args.length == 1) { + p.sendMessage(this.prefix + " " + this.usage + " " + this.cmdCheckARG1); + } else if (args.length == 2) { + Player target = p.getServer().getPlayer(args[1]); + + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } else { + int targetBalance = this.plugin.getAccountsConfig().getInt(target.getName() + ".money"); + + if (targetBalance <= 1) + p.sendMessage(this.prefix + "a " + target.getName() + this.cmdCheckReponsePlayer + " " + targetBalance + currencySingular); + else if (targetBalance > 1) + p.sendMessage(this.prefix + "a " + target.getName() + this.cmdCheckReponsePlayer + " " + targetBalance + currencyPlural); + } + } + else { + p.sendMessage(this.invARG); + } + } else if (cmd.getName().equalsIgnoreCase("bankeconomy") && (args[0].equalsIgnoreCase("reset")) && (p.hasPermission("bankeconomy.reset"))) { + if (args.length == 1) { + p.sendMessage(this.prefix + " " + this.usage + " " + this.cmdResetARG1); + } else if (args.length == 2) { + Player target = p.getServer().getPlayer(args[1]); + + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } else { + this.plugin.getAccountsConfig().set(target.getName() + ".money", Integer.valueOf(0)); + this.plugin.saveAccountsConfig(); + + p.sendMessage(this.prefix + " " + this.cmdResetToPlayer1 + " " + target.getName() + this.cmdResetToPlayer2); + target.sendMessage(this.prefix + " a" + p.getName() + " " + this.cmdResetToTarget); + } + } else { + p.sendMessage(this.invARG); + } + } else if ((args[0].equalsIgnoreCase("reload")) && (p.hasPermission("bankeconomy.reload"))) { + if (args.length == 1) { + p.sendMessage(this.prefix + " " + this.cmdReload); + + FileConfiguration conf = this.plugin.getConfig(); + this.plugin.reloadConfig(); + return conf == this.plugin.getConfig(); + } + p.sendMessage(this.invARG); + } + else if (cmd.getName().equalsIgnoreCase("bankeconomy") && (args[0].equalsIgnoreCase("transfer")) && (p.hasPermission("bankeconomy.transfer"))) { + if (args.length == 1) { + p.sendMessage(this.prefix + " " + this.usage + " " + this.cmdTransferARG1); + } else if (args.length == 2) { + p.sendMessage(this.prefix + " " + this.cmdTransferARG2); + } else if (args.length == 3) { + double amount = Double.parseDouble(args[1].replaceAll("[^0-9\\.]", "")); + Player target = p.getServer().getPlayer(args[2]); + + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } + else if (target.getName() == p.getName()) { + p.sendMessage(this.prefix + " " + this.cmdTransferSameNick); + } + else if (amount > playerBankBalance) { + p.sendMessage(this.prefix + " " + this.notEnoughMoney); + } else if (amount <= playerBankBalance) { + double totalWithdraw = playerBankBalance - amount; + double totalDeposit = amount + this.plugin.getAccountsConfig().getInt(target.getName() + ".money"); + + this.plugin.getAccountsConfig().set(p.getName() + ".money", Double.valueOf(totalWithdraw)); + this.plugin.getAccountsConfig().set(target.getName() + ".money", Double.valueOf(totalDeposit)); + this.plugin.saveAccountsConfig(); + + if (amount > 1.0D) { + p.sendMessage(this.prefix + " " + this.cmdTransferToPlayer1 + " " + amount + currencyPlural + " " + this.cmdTransferToPlayer2 + " " + target.getName() + "a."); + target.sendMessage(this.prefix + " b" + p.getName() + " " + this.cmdTransferToTarget1 + " " + amount + currencyPlural + "a."); + } else if (amount <= 1.0D) { + p.sendMessage(this.prefix + " " + this.cmdTransferToPlayer1 + " " + amount + currencySingular + " " + this.cmdTransferToPlayer2 + " " + target.getName() + "a."); + target.sendMessage(this.prefix + " b" + p.getName() + " " + this.cmdTransferToTarget1 + " " + amount + currencySingular + "a."); + } + } + } + else + { + p.sendMessage(this.invARG); + } + } else if (cmd.getName().equalsIgnoreCase("bankeconomy") && (args[0].equalsIgnoreCase("edit")) && (p.hasPermission("bankeconomy.edit"))) { + if (args.length == 1) { + p.sendMessage(this.prefix + " " + this.usage + " " + this.cmdEditARG1); + p.sendMessage(this.prefix + " " + this.cmdEditAvaibleActions); + } else if (args.length == 2) { + p.sendMessage(this.prefix + " " + this.cmdTransferARG2); + } else if (args.length == 3) { + p.sendMessage(this.prefix + " " + this.cmdEditARG2); + } else if (args.length == 4) { + double amount = Double.parseDouble(args[3].replaceAll("[^0-9\\.]", "")); + Player target = p.getServer().getPlayer(args[2]); + + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } + else if (args[1].equalsIgnoreCase("status")) { + if (amount == 1.0D) { + this.plugin.getAccountsConfig().set(target.getName() + ".status", Boolean.valueOf(true)); + this.plugin.saveAccountsConfig(); + + p.sendMessage(this.prefix + " " + this.cmdEditEnableToPlayer1 + " " + p.getName() + this.cmdEditEnableToPlayer2); + } else if (amount == 0.0D) { + this.plugin.getAccountsConfig().set(target.getName() + ".status", Boolean.valueOf(false)); + this.plugin.saveAccountsConfig(); + + p.sendMessage(this.prefix + " " + this.cmdEditDisabledToPlayer1 + " " + p.getName() + this.cmdEditDisabledToPlayer2); + } + } else if (args[1].equalsIgnoreCase("balance")) { + this.plugin.getAccountsConfig().set(target.getName() + ".money", Double.valueOf(amount)); + this.plugin.saveAccountsConfig(); + + if (amount > 1.0D) + p.sendMessage(this.prefix + " " + this.cmdEditAmountSetPlayer1 + " b" + amount + currencyPlural + " " + this.cmdEditAmountSetPlayer2 + " " + target.getName() + this.cmdEditAmountSetPlayer3); + else if (amount <= 1.0D) + p.sendMessage(this.prefix + " " + this.cmdEditAmountSetPlayer1 + " b" + amount + currencySingular + " " + this.cmdEditAmountSetPlayer2 + " " + target.getName() + this.cmdEditAmountSetPlayer3); + } + else { + p.sendMessage(this.prefix + " " + this.cmdEditAvaibleActions); + } + } + else { + p.sendMessage(this.invARG); + } + } + else if (cmd.getName().equalsIgnoreCase("revive") && args[0].equalsIgnoreCase("me")) { + DecimalFormat df = new DecimalFormat("#0.00"); + double deathX = this.plugin.getAccountsConfig().getDouble(p.getName() + ".deathpointX"); + double deathY = this.plugin.getAccountsConfig().getDouble(p.getName() + ".deathpointY"); + double deathZ = this.plugin.getAccountsConfig().getDouble(p.getName() + ".deathpointZ"); + String deathWorld = this.plugin.getAccountsConfig().getString(p.getName() + ".deathworld"); + //p.sendMessage("Got 1."); + if (this.plugin.getAccountsConfig().getBoolean(p.getName() + ".revived")==false && p.getPlayerTime()-this.plugin.getAccountsConfig().getDouble(p.getName() + ".revivetime")<12000) { + double mincost = this.plugin.getConfig().getDouble("revive-cost-rate"); + //p.sendMessage("Got 2."); + if (p.getBedSpawnLocation()!=null) { + mincost *= Math.abs(p.getBedSpawnLocation().getX()-deathX)+Math.abs(p.getBedSpawnLocation().getY()-deathY)+Math.abs(p.getBedSpawnLocation().getZ()-deathZ); + } else { + mincost *= Math.abs(p.getWorld().getSpawnLocation().getX()-deathX)+Math.abs(p.getWorld().getSpawnLocation().getY()-deathY)+Math.abs(p.getWorld().getSpawnLocation().getZ()-deathZ); + } + double mymoney = this.plugin.getAccountsConfig().getDouble(p.getName() + ".money"); + double finalcost = (mincost*this.plugin.getConfig().getDouble("revive-cost-rate")) + (mymoney*this.plugin.getConfig().getDouble("revive-cost-tax")); + if (this.plugin.PlayerinJob(p, "Explorer") && this.plugin.getJobLv("Explorer", p)>=20) { + finalcost*=0.25; + } + //p.sendMessage("Got 3."); + if (mymoney>=finalcost) { + this.plugin.getAccountsConfig().set(p.getName() + ".revived", Boolean.valueOf(true)); + this.plugin.getAccountsConfig().set(p.getName() + ".money", mymoney-finalcost); + this.plugin.getAccountsConfig().set(p.getName() + ".revivetime", Double.valueOf(0.0d)); + this.plugin.saveAccountsConfig(); + //p.sendMessage("Got 4."); + p.sendMessage("You spent $"+df.format(finalcost)+" to revive. New Bank Balance: $"+ChatColor.YELLOW+df.format(mymoney-finalcost)); + //p.sendMessage("Got 5."); + org.bukkit.Location teleportloc = p.getLocation(); + if (p.getBedSpawnLocation()!=null) { + teleportloc = p.getBedSpawnLocation(); + } else { + //Use world spawn point. + teleportloc = p.getWorld().getSpawnLocation(); + } + teleportloc.setX(deathX); + teleportloc.setY(deathY); + teleportloc.setZ(deathZ); + teleportloc.setWorld(Bukkit.getWorld(deathWorld)); + //p.sendMessage("Got 6."); + p.teleport(teleportloc); + //p.sendMessage("Got 7."); + Bukkit.broadcastMessage(ChatColor.GREEN+p.getName()+ChatColor.WHITE+" decided to revive to their death location."); + } else { + p.sendMessage("You cannot revive. You need to have $"+df.format(finalcost)+" to do so."); + } + } else { + p.sendMessage("You haven't died. So you cannot revive."); + } + this.plugin.saveAccountsConfig(); + return true; + } + else if (cmd.getName().equalsIgnoreCase("revive") && (args[0].equalsIgnoreCase("amount"))) { + DecimalFormat df = new DecimalFormat("#0.00"); + double deathX = p.getLocation().getX(); + double deathY = p.getLocation().getY(); + double deathZ = p.getLocation().getZ(); + double mincost = this.plugin.getConfig().getDouble("revive-cost-rate"); + if (p.getBedSpawnLocation()!=null) { + mincost *= Math.abs(p.getBedSpawnLocation().getX()-deathX)+Math.abs(p.getBedSpawnLocation().getY()-deathY)+Math.abs(p.getBedSpawnLocation().getZ()-deathZ); + } else { + mincost *= Math.abs(p.getWorld().getSpawnLocation().getX()-deathX)+Math.abs(p.getWorld().getSpawnLocation().getY()-deathY)+Math.abs(p.getWorld().getSpawnLocation().getZ()-deathZ); + } + double mymoney = this.plugin.getAccountsConfig().getDouble(p.getName() + ".money"); + double finalcost = (mincost*this.plugin.getConfig().getDouble("revive-cost-rate")) + (mymoney*this.plugin.getConfig().getDouble("revive-cost-tax")); + if (this.plugin.PlayerinJob(p, "Explorer") && this.plugin.getJobLv("Explorer", p)>=20) { + finalcost*=0.25; + } + p.sendMessage("You need to have $"+df.format(finalcost)+" to revive."); + return true; + } + else if (cmd.getName().equalsIgnoreCase("tele") && (args[0].equalsIgnoreCase("to"))) { + DecimalFormat df = new DecimalFormat("#0.00"); + if (p.getPlayerTime()-this.plugin.getAccountsConfig().getDouble(p.getName() + ".teletime")<400) { + if (args.length==1) { + p.sendMessage("Usage: "+ChatColor.RED+"/tele to "+ChatColor.GREEN+" "+ChatColor.WHITE+" - Teleport to a player for a cost."); + } else if (args.length==2) { + //Teleport. + Player target = p.getServer().getPlayer(args[1]); + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } else { + if (target.getName() == this.plugin.getAccountsConfig().getString(p.getName() + ".teleplayer")) { + //Determine distance of player to other player. + double otherx = target.getLocation().getX(); + double othery = target.getLocation().getY(); + double otherz = target.getLocation().getZ(); + double mymoney = this.plugin.getAccountsConfig().getDouble(p.getName() + ".money"); + double finalcost = Math.abs(p.getLocation().getX()-otherx)+Math.abs(p.getLocation().getY()-othery)+Math.abs(p.getLocation().getZ()-otherz); + finalcost *= this.plugin.getConfig().getDouble("teleport-cost-rate"); + finalcost += mymoney*this.plugin.getConfig().getDouble("teleport-cost-tax"); + if (mymoney>=finalcost) { + //Allow teleport to occur. + this.plugin.getAccountsConfig().set(p.getName() + ".money", mymoney-finalcost); + this.plugin.getAccountsConfig().set(p.getName() + ".teletime", Double.valueOf(0.0d)); + this.plugin.saveAccountsConfig(); + if (this.plugin.PlayerinJob(p, "Support")) { + //Give exp for doing so. + this.plugin.gainMoneyExp(p,"Support",0,100); + } + p.sendMessage("Teleported to "+ChatColor.GREEN+target.getName()+ChatColor.WHITE+" for $"+ChatColor.YELLOW+df.format(finalcost)+ChatColor.WHITE+". New Account balance: $"+df.format(mymoney-finalcost)); + target.sendMessage(ChatColor.GREEN+p.getName()+ChatColor.WHITE+" teleported to your location."); + p.teleport(target); + } else { + p.sendMessage("You need $"+ChatColor.YELLOW+df.format(finalcost)+" in the bank to teleport to "+ChatColor.GREEN+target.getName()+ChatColor.WHITE+"!"); + } + } else { + //Setup another player. + //Determine distance of player to other player. + double otherx = target.getLocation().getX(); + double othery = target.getLocation().getY(); + double otherz = target.getLocation().getZ(); + double mymoney = this.plugin.getAccountsConfig().getDouble(p.getName() + ".money"); + double finalcost = Math.abs(p.getLocation().getX()-otherx)+Math.abs(p.getLocation().getY()-othery)+Math.abs(p.getLocation().getZ()-otherz); + finalcost *= this.plugin.getConfig().getDouble("teleport-cost-rate"); + finalcost += mymoney*this.plugin.getConfig().getDouble("teleport-cost-tax"); + if (mymoney>=finalcost) { + //Allow teleport to occur. + p.sendMessage("Teleporting to "+ChatColor.GREEN+target.getName()+ChatColor.WHITE+" costs $"+ChatColor.YELLOW+df.format(finalcost)+". Type the command again to teleport."); + this.plugin.getAccountsConfig().set(p.getName() + ".teletime", Double.valueOf(p.getPlayerTime())); + this.plugin.getAccountsConfig().set(p.getName() + ".teleplayer", String.valueOf(target.getName())); + } else { + p.sendMessage("Teleporting to "+ChatColor.GREEN+target.getName()+ChatColor.WHITE+" costs $"+ChatColor.YELLOW+df.format(finalcost)+". You do not have enough in the bank for that."); + } + } + } + } + } else { + //Say how much it costs. If the player is found. = + if (args.length==1) { + p.sendMessage("Usage: "+ChatColor.RED+"/tele to "+ChatColor.GREEN+" "+ChatColor.WHITE+" - Teleport to a player for a cost."); + } else if (args.length==2) { + //Teleport. + Player target = p.getServer().getPlayer(args[1]); + if (target == null) { + p.sendMessage(this.prefix + " " + this.offlinePlayer); + } else { + //Determine distance of player to other player. + double otherx = target.getLocation().getX(); + double othery = target.getLocation().getY(); + double otherz = target.getLocation().getZ(); + double mymoney = this.plugin.getAccountsConfig().getDouble(p.getName() + ".money"); + double finalcost = Math.abs(p.getLocation().getX()-otherx)+Math.abs(p.getLocation().getY()-othery)+Math.abs(p.getLocation().getZ()-otherz); + finalcost *= this.plugin.getConfig().getDouble("teleport-cost-rate"); + finalcost += mymoney*this.plugin.getConfig().getDouble("teleport-cost-tax"); + if (mymoney>=finalcost) { + //Allow teleport to occur. + p.sendMessage("Teleporting to "+ChatColor.GREEN+target.getName()+ChatColor.WHITE+" costs $"+ChatColor.YELLOW+df.format(finalcost)+". Type the command again to teleport."); + this.plugin.getAccountsConfig().set(p.getName() + ".teletime", Double.valueOf(p.getPlayerTime())); + this.plugin.getAccountsConfig().set(p.getName() + ".teleplayer", String.valueOf(target.getName())); + } else { + p.sendMessage("Teleporting to "+ChatColor.GREEN+target.getName()+ChatColor.WHITE+" costs $"+ChatColor.YELLOW+df.format(finalcost)+". You do not have enough in the bank for that."); + } + } + } + } + return true; + } else + if (cmd.getName().equalsIgnoreCase("jobs") && args.length == 1 && args[0].equalsIgnoreCase("info")) { + p.sendMessage("Usage: "+ChatColor.GREEN+"/jobs info [JobName]"+ChatColor.WHITE+" - Get information about a job."); + p.sendMessage("Usage: "+ChatColor.GREEN+"/jobs info [JobName] "+ChatColor.LIGHT_PURPLE+"[lv]"+ChatColor.WHITE+" - Get information about a job at a certain job level."); + p.sendMessage(" Type /jobs to see the jobs."); + } else + if (cmd.getName().equalsIgnoreCase("jobs") && args.length == 1 && args[0].equalsIgnoreCase("join")) { + p.sendMessage("Usage: "+ChatColor.GREEN+"/jobs join [JobName]"+ChatColor.WHITE+" - Join a job. Type /jobs to see the jobs."); + } else + if (cmd.getName().equalsIgnoreCase("jobs") && args.length == 1 && args[0].equalsIgnoreCase("leave")) { + p.sendMessage("Usage: "+ChatColor.GREEN+"/jobs leave [JobName]"+ChatColor.WHITE+" - Leave a job. Type /jobs stats to see your jobs."); + } else + if (cmd.getName().equalsIgnoreCase("jobs") && args.length == 1 && args[0].equalsIgnoreCase("buffs")) { + p.sendMessage("Usage: "+ChatColor.GREEN+"/jobs buffs [JobName]"+ChatColor.WHITE+" - Get buffs information about a job. Type /jobs to see the jobs."); + } else + if (cmd.getName().equalsIgnoreCase("jobs") && args.length == 2 && args[0].equalsIgnoreCase("join")) { + //Attempt to join the job. + this.plugin.joinJob(p,args[1]); + } else + if (cmd.getName().equalsIgnoreCase("jobs") && args.length == 2 && args[0].equalsIgnoreCase("leave")) { + //Attempt to join the job. + this.plugin.leaveJob(p,args[1]); + } else + if (cmd.getName().equalsIgnoreCase("jobs") && (args.length == 2 || args.length==3) && args[0].equalsIgnoreCase("info")) { + JobsDataInfo[] Jobsinfo = {this.plugin.Woodcutter_job,this.plugin.Miner_job,this.plugin.Builder_job,this.plugin.Digger_job,this.plugin.Farmer_job,this.plugin.Hunter_job,this.plugin.Fisherman_job,this.plugin.Weaponsmith_job,this.plugin.Blacksmith_job,this.plugin.Cook_job,this.plugin.Brewer_job,this.plugin.Enchanter_job,this.plugin.Breeder_job,this.plugin.Explorer_job,this.plugin.Support_job}; + boolean found=false; + int matchedjob=0; + boolean error=false; + for (int i=0;i=5?"+Lv5 Buff":"")+ChatColor.GREEN+(mylv>=10?" +Lv10 Buff":"")+ChatColor.GOLD+(mylv>=20?" +Lv20 Buff":""));if (joblist[i].equalsIgnoreCase("Explorer") && this.plugin.getJobLv(joblist[i], p)>=10) { + //Check to see if the buff is on cooldown for this player or not. + boolean discovered=false; + long timeleft=0; + for (int j=0;j=5?"+Lv5 Buff":"")+ChatColor.GREEN+(mylv>=10?" +Lv10 Buff":"")+ChatColor.GOLD+(mylv>=20?" +Lv20 Buff":"")); + if (joblist[i].equalsIgnoreCase("Explorer") && this.plugin.getJobLv(joblist[i], p.getServer().getPlayer(args[1]))>=10) { + //Check to see if the buff is on cooldown for this player or not. + boolean discovered=false; + long timeleft=0; + for (int j=0;j=5?"+Lv5 Buff":"")+ChatColor.GREEN+(mylv>=10?" +Lv10 Buff":"")+ChatColor.GOLD+(mylv>=20?" +Lv20 Buff":"")); + } + if (joblist[i].equalsIgnoreCase("Explorer") && this.plugin.getJobLv(joblist[i], q.getName())>=10) { + //Check to see if the buff is on cooldown for this player or not. + boolean discovered=false; + long timeleft=0; + for (int j=0;j