From 7e2fb56c5acd84401bfa5ce25b9c85621a2cca2e Mon Sep 17 00:00:00 2001 From: Mads Mogensen Date: Wed, 9 Jan 2019 19:55:30 +0100 Subject: [PATCH 1/9] Update to 1.13.2 --- pom.xml | 6 ++--- .../org/dynmap/mobs/DynmapMobsPlugin.java | 25 +++++++++--------- src/main/resources/8x8/cod.png | Bin 0 -> 210 bytes src/main/resources/8x8/drowned.png | Bin 0 -> 253 bytes src/main/resources/8x8/parrot.png | Bin 0 -> 292 bytes src/main/resources/8x8/phantom.png | Bin 0 -> 226 bytes src/main/resources/8x8/pufferfish.png | Bin 0 -> 248 bytes src/main/resources/8x8/salmon.png | Bin 0 -> 230 bytes src/main/resources/8x8/tropicalfish.png | Bin 0 -> 224 bytes src/main/resources/8x8/vanilladolphin.png | Bin 0 -> 1933 bytes src/main/resources/8x8/vanillaturtle.png | Bin 0 -> 215 bytes src/main/resources/cod.png | Bin 0 -> 389 bytes src/main/resources/config.yml | 9 +++++++ src/main/resources/drowned.png | Bin 0 -> 286 bytes src/main/resources/parrot.png | Bin 0 -> 672 bytes src/main/resources/phantom.png | Bin 0 -> 240 bytes src/main/resources/pufferfish.png | Bin 0 -> 510 bytes src/main/resources/salmon.png | Bin 0 -> 444 bytes src/main/resources/tropicalfish.png | Bin 0 -> 410 bytes src/main/resources/vanilladolphin.png | Bin 0 -> 2245 bytes src/main/resources/vanillaturtle.png | Bin 0 -> 296 bytes 21 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/8x8/cod.png create mode 100644 src/main/resources/8x8/drowned.png create mode 100644 src/main/resources/8x8/parrot.png create mode 100644 src/main/resources/8x8/phantom.png create mode 100644 src/main/resources/8x8/pufferfish.png create mode 100644 src/main/resources/8x8/salmon.png create mode 100644 src/main/resources/8x8/tropicalfish.png create mode 100644 src/main/resources/8x8/vanilladolphin.png create mode 100644 src/main/resources/8x8/vanillaturtle.png create mode 100644 src/main/resources/cod.png create mode 100644 src/main/resources/drowned.png create mode 100644 src/main/resources/parrot.png create mode 100644 src/main/resources/phantom.png create mode 100644 src/main/resources/pufferfish.png create mode 100644 src/main/resources/salmon.png create mode 100644 src/main/resources/tropicalfish.png create mode 100644 src/main/resources/vanilladolphin.png create mode 100644 src/main/resources/vanillaturtle.png diff --git a/pom.xml b/pom.xml index f277758..34d4b43 100644 --- a/pom.xml +++ b/pom.xml @@ -58,16 +58,16 @@ org.bukkit bukkit - 1.11-R0.1-SNAPSHOT + 1.13.2-R0.1-SNAPSHOT us.dynmap dynmap-api - 2.2-SNAPSHOT + 3.0-SNAPSHOT UTF-8 - 1.4 + 1.5 \ No newline at end of file diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index 2081a4c..2882425 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -18,19 +18,8 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.AnimalTamer; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Horse; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.entity.Skeleton; -import org.bukkit.entity.Horse.Variant; -import org.bukkit.entity.Skeleton.SkeletonType; -import org.bukkit.entity.Villager; +import org.bukkit.entity.*; import org.bukkit.entity.Villager.Profession; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -175,6 +164,8 @@ public void init() { new MobMapping("skeleton", "org.bukkit.entity.Skeleton", "Skeleton"), new MobMapping("giant", "org.bukkit.entity.Giant", "Giant"), new MobMapping("ghast", "org.bukkit.entity.Ghast", "Ghast"), + new MobMapping("drowned", "org.bukkit.entity.Drowned", "Drowned"), + new MobMapping("phantom", "org.bukkit.entity.Phantom", "Phantom"), new MobMapping("zombiepigman", "org.bukkit.entity.PigZombie", "Zombie Pigman"), new MobMapping("zombie", "org.bukkit.entity.Zombie", "Zombie"), /* Must be last zombie type */ new MobMapping("enderman", "org.bukkit.entity.Enderman", "Enderman"), @@ -214,7 +205,14 @@ public void init() { new MobMapping("rabbit", "org.bukkit.entity.Rabbit", "Rabbit"), new MobMapping("vanillapolarbear", "org.bukkit.entity.PolarBear", "Polar Bear"), new MobMapping("llama", "org.bukkit.entity.Llama", "Llama"), - new MobMapping("villager", "org.bukkit.entity.Villager", "Villager") + new MobMapping("villager", "org.bukkit.entity.Villager", "Villager"), + new MobMapping("vanilladolphin", "org.bukkit.entity.Dolphin", "Dolphin"), + new MobMapping("cod", "org.bukkit.entity.Cod", "Cod"), + new MobMapping("salmon", "org.bukkit.entity.Salmon", "Salmon"), + new MobMapping("pufferfish", "org.bukkit.entity.PufferFish", "Pufferfish"), + new MobMapping("tropicalfish", "org.bukkit.entity.TropicalFish", "Tropical Fish"), + new MobMapping("vanillaturtle", "org.bukkit.entity.Turtle", "Turtle"), + new MobMapping("parrot", "org.bukkit.entity.Parrot", "Parrot"), }; private MobMapping configvehicles[] = { // Command Minecart @@ -395,6 +393,7 @@ else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("donkey") | } } } + if(i >= mobs.length) { continue; } diff --git a/src/main/resources/8x8/cod.png b/src/main/resources/8x8/cod.png new file mode 100644 index 0000000000000000000000000000000000000000..354fafa42ad1c8d306ace8acdac1b4bd0ae42b62 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#__-o-U3d8o|j2*!py}{_v+Jv0v|7_jmtBV~J2fj{>)K@)1lf>AN!)YcY5p xFlbZpU_TKzLo*;zq~Ugkzya+}c>@CmhWQW8SGw$aITvUggQu&X%Q~loCII83Jy!q# literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/drowned.png b/src/main/resources/8x8/drowned.png new file mode 100644 index 0000000000000000000000000000000000000000..634bfdb2a0c4ae6bf882d0d7a1ef2343d378f71c GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1SGw4HSYi^#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S`0VrE{6US4X6f{C7? zo@t7E1jw2^PZ!4!iST5DS%((fWKpV}X8O}Fi(yg29-Rdo9vmlvv=TV7S2CYsJUL;m ztHUHlC6+17t5}U1mQ*b;pTHf&C)m_+NK)bHU-|XSf-W5A*gP4Y+IANO$=_jBQef^_ oAXLy=@Kj;3!Y2VB%~%=9z}XNHB=*bZDbQvHPgg&ebxsLQ08pw-SpWb4 literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/parrot.png b/src/main/resources/8x8/parrot.png new file mode 100644 index 0000000000000000000000000000000000000000..e660dc48bfa7e202167fadb6a17e02efb40b027f GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmUzPnffIy#(?(3p^r= z85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3(J<}BT2$0E(JY5_^ zG=h^I*!7?3|C@jM-0%O7|FZut-(LEsoy+-v>HG`-)$iW0#LT=By}Z;C1rt3( zJ<}BT2#__wo-U3d8o|jw{{Od+>j@Q*Z03ypz2X14#@PR7=bru_{!FzYQ$SvYFN{Ih z;kZKK1||V@g+fj?w$5hJg51Qv{D)3VGBDi0G$Sj8)xa)-G4IcOMurs|7wl~;nUoAP Op25@A&t;ucLK6V`8AdAr literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/pufferfish.png b/src/main/resources/8x8/pufferfish.png new file mode 100644 index 0000000000000000000000000000000000000000..e13f1d3b3345e11c16438b99f0c88718093752cf GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#__Io-U3d8o|j5Qa(LmfB*kiIsX6t>B@i2H%hg?{cHDfRLS?5%H;j;*H`W{ zZQ2Zm4onJv-u=lj*t^#0?f<2!`vh41HkUWDCNwFy*3WzAsKLmdKI;Vst0NI*RkN^Mx literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/salmon.png b/src/main/resources/8x8/salmon.png new file mode 100644 index 0000000000000000000000000000000000000000..750ab7ebfbfec47c18c32ef188419bce4dd16588 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#_`5o-U3d8o|j2*py^){yERQaqyn!-T&!g&lhPiaW0#A@?U&z)}Q?+t}t9? znZUy1oxO6Q)`ri;|Ky|ReX4I-##VOs(W6KIYlWEpH;W{_Xk(nPxWMZX8xIcy$1Kg@ UyjhD*01boFyt=akR{0AspM`~Uy| literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/tropicalfish.png b/src/main/resources/8x8/tropicalfish.png new file mode 100644 index 0000000000000000000000000000000000000000..d673d4af17e62d6fbb528de222ca626bb45bac7c GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#_^_o-U3d8o|j2*vi;n{AoAZ*t|Yg?*DuDqJ>&j`^z8JPdInqobPY_-i7j) zStc+|crv}F_5aMOIV-pvtQ>_D78l<9FQ3NRmM6eq$+29e?!W;ChO5iXGQ`_s-vA9~ N@O1TaS?83{1OPQdNa_Fp literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/vanilladolphin.png b/src/main/resources/8x8/vanilladolphin.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c7ea18cadc1f5ec3ee0c7a6ebf769bc707c49d GIT binary patch literal 1933 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U{T3*b`J1#c2)=|%1_J8No8QL z5Nr*-pMN_<#I7?xXo;A;LWFyJ*U|N%!O=UVrPdx}^PIf&t(Vx+mp8Ojo>-Z8u9RlK z{c_tX|LR6_wm*yxH<|f8Y!rFflB#chJFvwwxLs?Nr$_aRBm9bLZ&^bh?k-DG4?Ys} z_19_3`9az5 z2SvZ1d;L(hi{td$iSPdTeN*0F)qUq;r;`7HJW<(N$sas{XRc&#^A_39{`*JfcD6g8 zWjb8E0_MCkev|fv@<=De!v*$*d{`SOpW{DG%ABN^h?@~&e zxOwfQ#G>;L_4^CA8~*3ln_c?lO>A?-?>S3%Chy?yyr=ywWM8NK^{roIK6r14U%%5c zv7Yru|F26mOcnBhUsg`4ExGsHJwAS|$UU}utko9_mUH|5&MGymmXX+a@vG|V87Gu2 zu9v0@ZC)bY@ILIvmK(`0CayRUocSQ}!9lOuRWsvf6^1=)xqEtZ)XXzX%Ka((m!Eyo zz}{fLW$m67tY`{W&-owshKp!8HyL;-PDe|ZJc9kuZ zJT2yR?BYwc`n73Q>4LXzuvFBe*Ux+WOGCu0 z`~p7xaj4bk2t0T5z0|L>{r}o#ZSdCqqU?Xc&?Ne;umZbqMydHFyXD#0_HX!XPOmv%n9uL=n) zr~KLTXOoTe29cfda+8-o+56!Q=eM&we`WVdlyGg%^4(gk`;kS$gkP0yF5C5EAxB$Q zmxx8)oM;bXr%1)x0iskIwhq{zr~KGG^L7Z_kgoA8H$xF@OCx zS=hkJ>OroKkLn5IM{}(T!(6{`mCU|yHnxuKKHnnG)n(VrPKk!!T)%3)CTGp59Y(QN z-P=Xanuwl%s$o{XWACBv#VY%nmHJ*d-uu1Jwd^iW?z?E0_Wy^hUx#HxuMn<%EAVx{ z)UCD;el^dG7j?6L-L?18^Ti%d*d_*BZMgqi_NDiuyCvH%Ry2GMJ+JO!EpIOMf1SCM zb-dDlv5Tpn?IRfqD{`c@g@MHeXMsm#F#`iPkj*X3$S`Y;1Oo$;d1gpNNrbPDRdRl= zUSdjqQmS4>ZUIm=1A|S46_A;mT9T+xk(-lOY*k^a1Xf`MWP^nDl@!2AO0sR0B76fB zob!uP6-@OE^^BD4xD*r=Y>HCStb$zJpxS{vTcwPWk^(Dz{qpj1y>er{{GxPyLrY6b zeFGzXBO_g)3f4M@}~A}F;uKc^IAzMZ*|4Ol6PAi^SuhDdB0 zkOk2-IOpdU6r~mygKRK_T7WEuuHL^WGZh#XU>CvEBa5M{56H+b$p^+uQD(AdUP)>Z z&@!lQn0IiifSP5a4+>hOpoYXFSQHqMc3d|4@I+z9wd-`9A~2nt@pN$vk&u+_w+>=9 z6mYrUt||je5Eo)F~jQdidlP S@XD{C4B+YN=d#Wzp$PyoAUe7L literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/vanillaturtle.png b/src/main/resources/8x8/vanillaturtle.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd750d2636d7dc5adcf4b776cc968e11086c95d GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#_@%o-U3d8o|j593jCy|D{E4HgEhZq;4Ut!gq*AY;RZsX90#LT=By}Z;C1rt3( zJ<}BT2#_`3JY5_^Ed2LQ*vRb|D01xl|Hu3rIvS@sO%$0uX~lMf87(OX4kUa!mEfc@ z+sIIg=il7p-*??Fu6$zn4J9m3>*xxSZV(u1=Cwd1Aq#mTIt7o)u3e`zBu=!nf z3~5^0aemvOcel=0`7toay0Kn4)wX0NrmdKI;Vst0C0#LT=By}Z;C1rt3( zJ<}BT2#_`Xo-U3d7XHZwvzVM_`6{p^{?^H6Qo8TSTOcxFI;)F->65Gm4oy)5hQJ7K zSpml_jyDvoyBjzTsl_sHQtB}4Fji0!*jBZ`T);8K^LoQdj!4aA951C5=KSlw{*YrG z(`t*IQVQ29#hx+*zG~iGz#`bFaLU9%U=#BMK^L(kjh9jr);8bnYg5=XfkPqCIZlir Y>TP1kC%e#3K<yy85}Sb4q9e0N=M)zW@LL literal 0 HcmV?d00001 diff --git a/src/main/resources/parrot.png b/src/main/resources/parrot.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44eb24b9b04091a5c591c24436578aa750fe21 GIT binary patch literal 672 zcmV;R0$=@!P)pF7<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCw~9!W$&R5(wKkxNKaVHk!_=9x1y=Qa~fc+@UXQBwp#;i4j#jk(Bz zWQZK4$s!A#sU(mv93&_4tKHlwOW^#(|SezG^ zujDSwXS|_-z7?yeRDH5V>2FHWzB@vx>djrq@a<|VANEIiA3efIX((~Q@ire9x4 z+ve?ZgmS0s0BOzUl*go6D9QJ_=Q#xv=`ibm|uO zgigOspHs*s%a&-ioMCP;QCH6!31%1+hIE5r({gzx`zJz$s!DVLL3<*>anp1;A*C7- zRC_dPG>wO{el8qZOi-IlvfQ>^@&f@BnW)HhhWk?PHB5PdN1_V|k|MCB9FTG_7?iJp zZ7Dd`GP;c=3QT#v<2V$r-bB^mLVix=@nbZP-U5TC@<$dGghC;7U3Ud*)`mG+T?{jM zAd;8P5(IyVMx(4-zmZ5$fTpb~jbW99Pov)BrOY#5fbs|P6=*@+;c`&`00000#LT=By}Z;C1rt3( zJ<}BT2#__2o-U3d7XHZ+Y7W=!-q>?kvzIk)+*xcX5&lfI!LWyaa{J2mEcN>g3Jnqs z>ly^wRxY2%XwcbkMAap6M%63H16y0a+8Z5P#@TZ5YT$W>8B9)bj?;lk6c`>&Xl9o( aFkoQtu*((qo_zx369!LLKbLh*2~7a7{7Ml3 literal 0 HcmV?d00001 diff --git a/src/main/resources/pufferfish.png b/src/main/resources/pufferfish.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3a6d7ec7a38edb9f9ca01d00db0a4dcdd5a540 GIT binary patch literal 510 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B00dGk}K~y+TwUN&&L{SvS&(cB~84DvTH7k~~ zu(MN?nzFI6n2pKKX3}f&V|ZbKk%fjtY9=LCl<~4tN+}ywcDDY2M_u=O%=gY6EIIY< zoO|E-e9w9B$-l&VrB!Yh67sasj@lsOjQc`0a{4v4COhRm>`>6w=6NTj8RyG5m?W<=j(cQXeQosLETIAdL3Fhm|$tD1{^T5Em~g$XggJ(N{E1A-op$F%=w zx=VyBL3AaIZ6E*yKVGj@OXF=O%p^o64r*$`wJ?nt0K`oIBI6DQ`!l_|fn-+~C72x* zT(XhPe&z<~Lwz#W|MeH_M94j$fe-s8=mTu)hQVGoC1-`frY&gp9Y%K3{WxD4k(X%M zH35VOa&psjKP;>!r}IO)i7%MoquILN{U;&v2`7imFF)-Yr2qf`07*qoM6N<$f{-uK AssI20 literal 0 HcmV?d00001 diff --git a/src/main/resources/salmon.png b/src/main/resources/salmon.png new file mode 100644 index 0000000000000000000000000000000000000000..f5bda3510eb779bdd99826731eae2560880abe9b GIT binary patch literal 444 zcmV;t0YmPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B00WC>HK~y+Ty^_sJ!$1^;?^|Rcbtz3+wLhea zO(jyTg-T0`l!038!gis!&>$lC25ySD@frFI_SJ54E;BKdwh1mgaF`6a-?=xLp?{O| zJ(%IQ;XwA8h2p2{o&@}Sen`l)bE)612*t*?^&(AcISP-R7>2*YM{X2s*2u2_>G7n? z%bAM+hUadTXLde@HwKtaCcVYlZ7~^jZxKJGlFd>t#F#di6R}UQ8HbLAy z`3yLaSe@ literal 0 HcmV?d00001 diff --git a/src/main/resources/tropicalfish.png b/src/main/resources/tropicalfish.png new file mode 100644 index 0000000000000000000000000000000000000000..cae6d6bdda515e3bf16791c8ee207286147e0ac1 GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2%t5L+@3CuAr}703#4zzE?_?N-|m-*mDja?PU5`bZWuxP)y89L^V$70Emnu{|B-e;BAK+ogWXN->xvNlp2=2GM_R++Le_uDJ2VOVTqp0Tiw%1Ne^*FhJdj&e&b zQ7JaJBV>`0(-0!cHBO_P67O_7y?x&I`Fx(|`90s~`~Cj@zu)iw`6s*J56H=A$UqaC(l#Cix-*rxpXtCGxX477;;NK$aV^f~- zlM&7hR8=k3rlk$8kDi3xbx^67`mjW}(+@mn#{=eqQ# zRZG`%plFUD7*$Oqh^x1yk9blwYY@R{Ri(cX>5oTHsgczts|rS!84EN1r+hwS=id*! zr;t2k@YbU)8T0hc!sdC03PSmP9Pww#rPTM`@nTGE*M;KWSm4mB0|Y{;$`Eu&GL9cn zDC_j$D8nRfv-&OmqVDv?HstQ7j1Z-&>uL#eUQ4$HffH#(ZSLgf#OI9%SvM{bvLd}+ zCJyqd{&ne*7&0}ezOZ8~K`H@ryOdKT+0hMHnB~FVICzIq%Zm5*mu307%6>GxWOX>T zZ3m?`vnfNHCtnl&`z9XjU<-e8+s~!Ju^}7#1(LP7YW@GdGT1!>Le-B6FdP8&61sW7 z|A||`-D?d8Ca_o}9%dNOTYS*!x=XHUMl*N6Ia=4WE%BE>ctjI~bGK6X;4#b87p;kB zE7iD$d9L|Zt>qE*4{!Nk-22uoYX?-#7;A&1t;vNL@LdRpDT;fOPIM+37c{43|<4Wmt6E6o!RiX5`WB z(AuTW*}AYWa5+-=>tG6{)x3h*a<^$oP=3pBnc^m9btIO3{`dCz=q70=}) zZ7qTYWMTB7?D6w#CXmb4vrnE&ac*uMH504O&|&#JTuJnw=IyH9edRaGcSy&#-!t{^J&>f@u~YT&_;&M{d)%g! zYdUqO5a%ZL4t=PziyquSdF_WyT5YnL_6qeYQfAF6F4k-GpPt9ZzckBBky@?!5h6AOf@T7ukU|29a3&?3 z8U-+|5uX@2%o7-o&|adLs%(&!}kE+Z2oQ-qBS91cg*gMtA!?EWuu(U&zM z6a*sx6e=br#wfhGEn(DoA7+QlpTcO}_eINl}4xas)`G zQQ>R8!~hxtv_>G-5`DWquM;E(|C5Ot^`$IPfvB}VC=(-N)HiRD6upK5K5nEaS~z3P z-^Rie{fYWt;6I5z3w-~V;Ct{#fh~;^K_^8;tz|IzlHhynN4_(iOcM3t(~7?GzsG*$ zyM)p}nrJR`av+WhlIWsjU({dA`TvYBUTD->Yrkvt=Q(~tMT4}FL8HEH3LBXk-tn!X zEhK@%?)BKc(aD3yR@tj~_GUX(Fvuqn zNhzdMRvO!SZ%Xqu%d%y7dj<#Xw~3wMS3T95n26Wd{91ncw403n1@KoOxsTauqk!jz z7u_uCm3|Xx?&vPp99`?;T!{WNz}Rp_XGjfud*9Utx<@Gb*hpoNxiUHD-9v{GD99Vadm{}wPFq_K`mg9=U=?hKoQW*7o2JHi$Xv2v3Rxmvgn;b7E>w? z3?;w8*$23-p{sqnp7r01j1@{~V>qqVbC_Fz4FYcF+^{+(EEtNLU&!g1cKoB`y@aGy zc707l-%InH!848z%%{^AGN+FB356-0NPWL(2KT}EoYw1M-=3?*QAsrhhg-b$JWd5Y zH%rn>R4Xh&W|yAh55RKHPT4aaYHSg#N6*jiD`j`@=4r{sl@SrwjNNW$*9p$9$i_!> zrL<(Y7fe-NJ(`M$;AN`xA5p}gK0ds^0~M0(I+>7p02-bYtoHiTX3 zInmVZ(mSr(nDck$PXWP7kJJ%B-rU|M6PHdP!ox0yeW|Kkr6BDjfJn=X$da?{A~X=* XUL_~^zUVMmJ2-H5cx>6eBPag@`MlfF literal 0 HcmV?d00001 diff --git a/src/main/resources/vanillaturtle.png b/src/main/resources/vanillaturtle.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab1ff2bfe8d084d96882e51b4f0216695d53341 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#_^1JzX3_Ec}xt*c?oc{;=ne7P+}Np*wE%|8L%N4w&qc@!{ua=55GyIHqvc zphvGghlAP2coUnG#7zOVm|1tfS06MqtDK=2!Rv6X=d{2YwuH+aeH*15)+nBs^^mQB zLx7!yhnM$3m&2nICLGOA92u5L9%V@33F_%}JEl;p@p8dRWtN`hCF;!|yCRPk@CY}r jY|LbnHn_sb%*=30D?oM2+HdkeM>2T2`njxgN@xNAr&(YI literal 0 HcmV?d00001 From c124e58bbd54e40d61c27d26382ed69989dc747b Mon Sep 17 00:00:00 2001 From: Mads Mogensen Date: Wed, 9 Jan 2019 20:10:48 +0100 Subject: [PATCH 2/9] Show custom name --- .../org/dynmap/mobs/DynmapMobsPlugin.java | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index 2882425..16b597f 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -1,21 +1,5 @@ package org.dynmap.mobs; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.*; @@ -24,14 +8,21 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.server.PluginEnableEvent; -import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; import org.dynmap.DynmapAPI; +import org.dynmap.markers.Marker; import org.dynmap.markers.MarkerAPI; import org.dynmap.markers.MarkerIcon; import org.dynmap.markers.MarkerSet; -import org.dynmap.markers.Marker; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; public class DynmapMobsPlugin extends JavaPlugin { private static Logger log; @@ -400,6 +391,11 @@ else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("donkey") | if(label == null) { label = mobs[i].label; } + + if (le.getCustomName() != null) { + label = le.getCustomName() + " (" + label + ")"; + } + Location loc = le.getLocation(); Block blk = null; if(hideifshadow < 15) { From a28b061992eb713dc06de5c630b44bbfcf2c3aa0 Mon Sep 17 00:00:00 2001 From: Gabriel Hautclocq Date: Sun, 8 Sep 2019 14:54:03 +0200 Subject: [PATCH 3/9] Minecraft 1.14.x mobs compatibility --- README | 10 ++++++++++ .../java/org/dynmap/mobs/DynmapMobsPlugin.java | 13 ++++++++++--- src/main/resources/8x8/illusioner.png | Bin 0 -> 1674 bytes src/main/resources/8x8/panda.png | Bin 0 -> 1543 bytes src/main/resources/8x8/pillager.png | Bin 0 -> 1025 bytes src/main/resources/8x8/ravager.png | Bin 0 -> 1593 bytes src/main/resources/8x8/traderllama.png | Bin 0 -> 1060 bytes src/main/resources/8x8/vanillafox.png | Bin 0 -> 1353 bytes src/main/resources/8x8/wandering_trader.png | Bin 0 -> 1797 bytes src/main/resources/config.yml | 7 +++++++ src/main/resources/illusioner.png | Bin 0 -> 2255 bytes src/main/resources/panda.png | Bin 0 -> 2129 bytes src/main/resources/pillager.png | Bin 0 -> 1062 bytes src/main/resources/ravager.png | Bin 0 -> 2178 bytes src/main/resources/traderllama.png | Bin 0 -> 1187 bytes src/main/resources/vanillafox.png | Bin 0 -> 1385 bytes src/main/resources/wandering_trader.png | Bin 0 -> 2359 bytes 17 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/8x8/illusioner.png create mode 100644 src/main/resources/8x8/panda.png create mode 100644 src/main/resources/8x8/pillager.png create mode 100644 src/main/resources/8x8/ravager.png create mode 100644 src/main/resources/8x8/traderllama.png create mode 100644 src/main/resources/8x8/vanillafox.png create mode 100644 src/main/resources/8x8/wandering_trader.png create mode 100644 src/main/resources/illusioner.png create mode 100644 src/main/resources/panda.png create mode 100644 src/main/resources/pillager.png create mode 100644 src/main/resources/ravager.png create mode 100644 src/main/resources/traderllama.png create mode 100644 src/main/resources/vanillafox.png create mode 100644 src/main/resources/wandering_trader.png diff --git a/README b/README index e69de29..b1462e4 100644 --- a/README +++ b/README @@ -0,0 +1,10 @@ +Dynmap-mobs for 1.14x + +Build: +download and compile dynmap +extract dynmap-mobs into dynmap directory +cd dynmap-mobs +gradle build + +If it complains about missing tools.jar, create dynmap-mobs/gradle.properties with: +org.gradle.java.home=/path/to/your/oracle/jdk/1.8.0 \ No newline at end of file diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index 16b597f..e15e050 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -121,11 +121,11 @@ public void init() { new MobMapping("bigcat", "org.bukkit.entity.Animals", "Big Cat", "net.minecraft.server.MoCEntityBigCat"), new MobMapping("deer", "org.bukkit.entity.Animals", "Deer", "net.minecraft.server.MoCEntityDeer"), new MobMapping("wildwolf", "org.bukkit.entity.Monster", "Wild Wolf", "net.minecraft.server.MoCEntityWWolf"), - new MobMapping("flamewraith", "org.bukkit.entity.Monster", "Wraith", "net.minecraft.server.MoCEntityFlameWraith"), + new MobMapping("flamewraith", "org.bukkit.entity.Monster", "Flame Wraith", "net.minecraft.server.MoCEntityFlameWraith"), new MobMapping("wraith", "org.bukkit.entity.Monster", "Wraith", "net.minecraft.server.MoCEntityWraith"), new MobMapping("bunny", "org.bukkit.entity.Animals", "Bunny", "net.minecraft.server.MoCEntityBunny"), new MobMapping("bird", "org.bukkit.entity.Animals", "Bird", "net.minecraft.server.MoCEntityBird"), - new MobMapping("fox", "org.bukkit.entity.Animals", "Bird", "net.minecraft.server.MoCEntityFox"), + new MobMapping("fox", "org.bukkit.entity.Animals", "Fox", "net.minecraft.server.MoCEntityFox"), new MobMapping("werewolf", "org.bukkit.entity.Monster", "Werewolf", "net.minecraft.server.MoCEntityWerewolf"), new MobMapping("shark", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityShark"), new MobMapping("dolphin", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityDolphin"), @@ -173,6 +173,9 @@ public void init() { new MobMapping("endermite", "org.bukkit.entity.Endermite", "Endermite"), new MobMapping("guardian", "org.bukkit.entity.Guardian", "Guardian"), new MobMapping("shulker", "org.bukkit.entity.Shulker", "Shulker"), + new MobMapping("ravager", "org.bukkit.entity.Ravager", "Ravager"), + new MobMapping("illusioner", "org.bukkit.entity.Illusioner", "Illusioner"), + new MobMapping("pillager", "org.bukkit.entity.Pillager", "Pillager"), // Standard passive new MobMapping("skeletonhorse", "org.bukkit.entity.SkeletonHorse", "Skeleton Horse"), new MobMapping("zombiehorse", "org.bukkit.entity.ZombieHorse", "Zombie Horse"), @@ -190,12 +193,14 @@ public void init() { new MobMapping("mooshroom", "org.bukkit.entity.MushroomCow", "Mooshroom"), new MobMapping("snowgolem", "org.bukkit.entity.Snowman", "Snow Golem"), new MobMapping("ocelot", "org.bukkit.entity.Ocelot", "Ocelot"), - new MobMapping("cat", "org.bukkit.entity.Ocelot", "Cat"), /* Must be just after ocelot */ + new MobMapping("cat", "org.bukkit.entity.Cat", "Cat"), new MobMapping("golem", "org.bukkit.entity.IronGolem", "Iron Golem"), new MobMapping("vanillahorse", "org.bukkit.entity.Horse", "Horse"), new MobMapping("rabbit", "org.bukkit.entity.Rabbit", "Rabbit"), new MobMapping("vanillapolarbear", "org.bukkit.entity.PolarBear", "Polar Bear"), new MobMapping("llama", "org.bukkit.entity.Llama", "Llama"), + new MobMapping("traderllama", "org.bukkit.entity.TraderLlama", "Trader Llama"), + new MobMapping("wandering_trader", "org.bukkit.entity.WanderingTrader", "Wandering Trader"), new MobMapping("villager", "org.bukkit.entity.Villager", "Villager"), new MobMapping("vanilladolphin", "org.bukkit.entity.Dolphin", "Dolphin"), new MobMapping("cod", "org.bukkit.entity.Cod", "Cod"), @@ -204,6 +209,8 @@ public void init() { new MobMapping("tropicalfish", "org.bukkit.entity.TropicalFish", "Tropical Fish"), new MobMapping("vanillaturtle", "org.bukkit.entity.Turtle", "Turtle"), new MobMapping("parrot", "org.bukkit.entity.Parrot", "Parrot"), + new MobMapping("panda", "org.bukkit.entity.Panda", "Panda"), + new MobMapping("vanillafox", "org.bukkit.entity.Fox", "Fox" ), }; private MobMapping configvehicles[] = { // Command Minecart diff --git a/src/main/resources/8x8/illusioner.png b/src/main/resources/8x8/illusioner.png new file mode 100644 index 0000000000000000000000000000000000000000..f3202ccdd18452f8981708533a2759eebafceef5 GIT binary patch literal 1674 zcmV;526g#~P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YuvLq)A{O1%t0+Lvd!y4fm`1nqirn;HwnXqH3 z-YY1T5F%4ctM<>|UHyfNwKvLGA6#@!<1*1iPM8F}t~HW2^Z70t?;mn?J}^XrQP!(# zTR%Z=p9S7*dH$3uU$&jF4bd??FBv{m*5a-Nx^C;{iss zuqUjz35mutj9mmCNR)(eJp&Jk!JNe5$wEKJPMzrm-kDw4>9pnY35C*bE4T}zEhl@) z%E5F+d5q`4oEq*5A{0AoIx?elFVfex5vN5+|N7W4me@~ zV-;*>+(l6&2HKqrRZ7&U&9P8{i-sF}jLZcn4_Oe;k&7$}a8qXwVycn=CJI;+i23+J zbKf}kD-^JEC1^6i7-7W^xB8jz|J=t=?;~`HbU0YSFCH-sHwJU#2`vypePe1TzVlXZ zaiiae6|iO}%mD{XIxiF1(i2-Uc^2qdZIoWALB4JSfCzhAI70#kv?HAeQsyk#WSd>~IpmmALHHC?Y;nbxP-01yt5l?ab=9jHYOJYILnt-VY;(=G&|*s+ zvDT%VZoBKghaP)6tZi05S)+@&U$aJ=wZWK~dj4SzV((ujXp|E>I0IvB2#ou|00No^ zXF8BEJeV7t>BvY5%V3S{Ag9t`3=En^Y&#w99_D_@o3iFV@y6enQ-iuc!JHb@ZRURD z?I*0&G&_n+f<_h&Oto|rw#FP1{yI+Hyk0LLC>l#<9JA4!jpi`FIo4^;H0L_LL5bB% z=^jm<6BCoRQ>I7Gja3Xdx5Tt*d6Y@@a^N2SqeG)+z?0N}Q8v=5_3QMAMk+%}Y8f!?Kmo zWnQ+jnhSE$&A!&s`f3hdwk{=&cs;)Q3ktOCbs$?u2iyMZGMAzoy%xHSv>e9P1gWql z3L;*sP@q4k<8wZ$Q-EH39FirWeMs(!f|LhHxXly+E**i?Im zxR;o3)nL@hIXjpOD(W;ee)zl$m9S*lw1YFt9ZcOV6mrQ@pBgajDNf;dVSkI(PBeW| z8^JvzJg8?oYHPb{q?AK{ybn}23Y|+ghwrEs`sp}<$omaiHgCV5;)198h*>Fq#YeZg z%M;r-``x(>R*}&VCq_W4FU4XWiq?tvMynif(C<}IjL_~ZI}3}CRakc2a6GBY3`V&cm9`)Wh#*e(8cO_0=vhR4UUTOHX6m1vzYfU%1i#%QK9#i}R?wxh|9PK{I zD~L~rb!yN}s5v`1MwH$#-7i5@LNC}uOplL6?pj)2)0d3%1 U`(xVqEdT%j07*qoM6N<$g2A{CKL7v# literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/panda.png b/src/main/resources/8x8/panda.png new file mode 100644 index 0000000000000000000000000000000000000000..79874f51537c0171882c20176f71a2e5fe9c1d0d GIT binary patch literal 1543 zcmV+i2Kf1jP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YumgFc5{O1&N1SGK@2eZ64H<;s3u-MMTl~p~{ zom3^VEJUD?M5_AF-%b664{OoNSRY(;PUB;uiJTw=JwJ0MZN~Sju0Ox&)%Aj*63j9m zU0wDGdV4SMX6cW2z4Cea3Cq#B^KvMCXNIus!g3@$^|YQ5_4XlvC?a=TU|P!vmp|vCLt3{9DL=jEE6% z#03RFXSGp!mInE<93Vv4+X4&;7|@Qyk|XVzJrUv< zz)u2l7Q+V^AZxjhYT!o1fgDr=_Qo1d!iHChXZKyio%H7FgBWsF7scoUFA$%-|~ zTI;O0!A6^$IOD8y&b!{Dk{55h_0D@AeDo}wuH)~LPf4ZRFPHg84jIkjw?mGiW zXzrZpK*n%qu5+d%qbMwcHL{(YLY*-%XezO7ba8hx_bqSAn*YQbe_~E`>iz_Cs#CX^ zd-C=LYbA{vMFv5=3VTeoG&HtGN8$iH*^sgL8`r}SM2|N?qwi1QR7lNbuIe`#By|ce za|<;M@#rr8QO5Zra__`X_8IyX|Mi41|SK(HS|3>VxugZDh^m{m79>@cw*oJUGi!xT<8 zyhp0oc>yWzs z;N*ei1fqTy$q7V#KqB}h6xF}-CZvZXEvWVY000JJOGiWi{{a60|De66lK=n!32;bR za{vGi!vFvd!vV){sAK>D00(qQO+^Re2?z`fIc^HKasU7T^+`lQR2b7O!9PyIPyoQ; z-&0aqUPDX#(^Mj15O5*s2n=!o!^{~-JV6=o1STAWz!7wCB4H75!r-C~Ugc6cdAaNj_~&`mfs{^ODxK$|)9Jp9Mq$^o ztW~{!`vb7qd|V_+(j1SUUPTy=i!$&HWYZ{HZEquQwTdljO-+!P` zI0ZoKjOld7a`|qb7-J9uf*>GGGtx982m*uvV+>+GpGl?Ss9L=tNfH1o%VN9zq*y$& t3rfXDV@&UGIN-Vt0Q>zf#u$`}kAE7sWasZ`L*oDd002ovPDHLkV1ll()I9(I literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/pillager.png b/src/main/resources/8x8/pillager.png new file mode 100644 index 0000000000000000000000000000000000000000..c279c58047f5025bef3691e93ca730ddd0cd45c6 GIT binary patch literal 1025 zcmaJ=PiWIn7!M9cnN08^o2Wc86~}DSWNo&_)pc!J7c{f91$*$YGomb@%^vspb% zL=U?R=@54CCWt6_7sZ_wkM2?jJ8cJ1c91zy2EKG{=fV0&-k*=(@ArN0`@XlFnYz~7 zbGnD3s9t$e%91tU|AAvHKC&-1hT1?U>2(S;{1C!Mp0eo zjeG$YlpCUkOh)xFjAz<}O;Kaxo~>%L5Q8Et8CHzmeX~vjLyyt7B1%ZHldx<|RvnnD zPUW@gtQOVj@vC6W6N!Kcu?jqM&T>UBMmKatviHp_4H^(U8>0_{DkvF{L=FTIW;m#Y zI1UH`!-XS)z+DD>h~wE1`Gg=B79)blkAUW&i8n`|5wlXd>5H6VbQxn?WZ6ok!c>MC zc)eBngKubY_uI3mvHjo8;MYV_)aEvCA9$vw;+p?D1OcO~M z>!~)&F(Lm-EufMvRUY&1xF)=n;Gz3*<#XxDn?Eop}AHT zGi8L4TShiW<^*s_Q8mNz4TBAaqKLBPV%5^1EX8P|!5D@v^22;06d93HNsf$^Fv_J9 zQYbRYr=yWDA5ONo64Dk-XyF!DKjNl3a{Xp7ZQ@yij&TR-X$P60acR-$98033UX!bL zjwRWV%aUMNzqEgqx@98$<8RxIOAhVUhZgB~hcx!L&+n?_QMj@+k@xDwC*ob9tNZ7# zy`kd|5~sFzcDidHcemcYp5J@%Y~{r5;zsR4{N%+z>EOfT&1p)HOKZhiZRPBhAG!4Y zP#@JFXEKkt0rsXWFR!kC|FZEi{;*!JZ>=w_S9Z^RdVcVG|0%cDXH)m6E-GM$>90%Z PjQ=R*)RgopF@66Jh4D+W literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/ravager.png b/src/main/resources/8x8/ravager.png new file mode 100644 index 0000000000000000000000000000000000000000..60cf310c8030a4b3b609ebe0cb1a5a216aef668d GIT binary patch literal 1593 zcmV-92FCe`P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SOKBvMVPH{bv8I=(4;NO1I3ItbK7Q5}tBe-%VQQvU_oT{Z~JaYnV&V z?=Aq0s?aBF_!JV0ckEUK9!QdmalRvWiJNo0ozTzNnLT}gw`ULRY+iDChr(FDHuwid zOHTSTb_1bTkLb4iw$Nmo_`t5U8e2POblG_z<;@D}3T4c&@c@)Ej(I!*|B87SPr?%s zVgX|n@E>@Jp+pR{8#$_!snI#cLIo~5J~?1yE-XV9C2-;*lL9={IDnXHzy(VIYXUKE zUuf7(!(O2X%ayQ`3Caj3J|6Rv@ZUUJQENTdh-}f89WR2sddKA(x6b60zd@Y3TH^bfb}Fwo@`(aM8GkE zpA64g93NnSRJoFA;6}uQ98?2r<4mBjmzAd&tp!A=cnP2er312@Q{+!@5jm7q)EQOv z8Z>Is?8Q5;-uvKtkIF%U3mSX~A%+xkl<1;HA47~W#hf?^T9_uEf=Mx@lrxNGsLnW@ zu_Nb$4>{bShd;s*k96dM^eL`r@gp|VoNP=))uSptkHwHU$aJwwa%Cu`@+o{#35WNsJ9dCoPjZR1ja*W013^V zGaJb{?#y-0Y+@9JGFT(+Q&e=wbIbou;GlEWA1m-99tL@I3!}nELxGd>U}1s_`_{NV=bYQkl91D zmi8%bIz%OIJ#Jb9z?Ys7rS`dI+@fY4=-S^#I@{b2;Qe*d`=!3R%Xd^^mob~j?_upz zdQQKS-Fnh+z{Ro;H5(=d&WO95e~tqD$No~%4*8h6%5h1k4l`o*IeNH;i)MIqN9*T` zb9ellX8ci&{R&bI3nV1qlIe8O>m{)({&<6(+#7$E=R({L9<*S+lZ4y?2sLCL@$5~S z#-P+lvRQ z-ZqhoBzUybs6A*CKhNBW9iA>qDRUEklbG^<@`ye?vXdpZwWAM@8Cvb_!c*0`DkAc> zR_j#~yOP4JT7xFP8Gnu;+u6C$(f7%?vgz&;`M_X$4(v8a&x#8?p>uTS*SR{$4T69c zGm7r+%%4pu%>9XW52%-ScV0?1GcjHIu8I6AgWVU)Oy@{9QetK>`0e|>=*lv-qYLhN zSx7PGBs8)6o(DQLy(AFLQ}(`5Ogx8s>iBzbeD&`7w6Ya>;}-|+TMqc7kG}93R~__^ z4F5%fA0G*BpIE13-n2qruYjwWZSsGhespg0>nu9rYLj<&tMy?^2k_ZlHDnGgr})HGtC!lynp@_aL=$~SnYaLg&DGjA5gfP&ELoRztV)! zdxii200v@9M??Vs0RI60puMM)00009a7bBm000ib000ib0l1NC?EnA(2XskIMF-;v z2n+}-`QHOR0002kNklj6~S z+=#WQ-#S7>5NoNlnFDwLd93V@QZ&L-yd9V1W6fR=SO6DbtM#yX9D@Bt#Bvy(u+@54 z17(WwY&sz~6;Yfqn@&)s7}wyeb3wP)=l%1IO|quj>vMj2MSajo#4?T96%T;r>jFgn rL6m07_x+K$&NV>w^}Q;~QUUw{Qmkes=~;c400000NkvXXu0mjfq3#0O literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/traderllama.png b/src/main/resources/8x8/traderllama.png new file mode 100644 index 0000000000000000000000000000000000000000..341bdc9e85eb3010b96183cea971c34ee3642a36 GIT binary patch literal 1060 zcmaJ=OHUI~6dqGlf+cK}fM}cyM3m5Z^#Pr~;sV!dVvNR}B#L5uL=xi0g)Dsi0F5j(#yH+7ZE<0}nYoXX@B7ZV=bU?SJaw?O zWoHY9VXetAK8@C9_ix^U=4Wk>E~BLr#{*Kx_<)4BLh%6#>L^U{cYd#FvG~1g^+Y;#g3i1tSIu%Gitv zCT3C@X{IQJWny>;kJua%PyrNiTb$I)`Vhirl{F~ZKF#W`De%COOvQkTuHmktnA4|Wlt7WLUqLnMvYJ&* z6G|9miw4Dzw0or*P!RqPRn~jDOxXZb8d&L}76Cr$`AWDkn8unKhg1{v;3yPWql6;gv8lCSAymDzyX&ejP zP_N3B8^^*lzt!K+ZTV};l1}>e(&|Z&aZ$oo}M9o(@n3Z<-n&0iyhytKJ_~9V|T(2%bx3P z_uC39D_gsqu412ax~%neI1B#G%NG_t?&&d$wkTh2Fiu6=&<*4Z^b<@MhAb?eFwT54*hF}iRlvYOi6?!Mb(JjLG~J%08N DF{fDh literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/vanillafox.png b/src/main/resources/8x8/vanillafox.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b5d5d8eb51f68571d67d783042bc45fc4a2f8f GIT binary patch literal 1353 zcmV-P1-AN$P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywmg^`C{MRaG2?!8^wmurIhtv~Mdq-EQQ+t7#SZO{$R7M(pVZbQy4J@02qdtUZ8(D%QzX~OU}`uW)_ zf>8xZXUR4PJ??RMaX{db%aH3H?a+Ai8ExGC^VreZ{S>^j_bGNJZ@s$@1(~o1gikTr zdY0$0n-RK2#Fyv07kE;0d)>sY_ZoX|YjxQNL@Ll;)W=e04+9T`(#>fBP4O4>b+&{S zvBUz#D%d>G3UOkKXm|EpIdkVWW#Iyd-Zra{))wogE;_Zz7Plxs<8BqiRB{nq6|m-@ zwkH;ze$(_YMD0wLUYOl8J* zHoD0hb3?2HgEGS$vA}GOW#SONa?4Gg9ma|AWY*STt=j-X1m6NM$YswauoDi9N@0~5 zag5+61G#nH9$7;up8hTbCl;;D|V?-T0n%j;1twg>wqlp1^J^sB8Rd# z@gyQaRH7uw!37^AgrH&6sH{%CiUw7UnlwijeUuoY#u!t~$tH&qCMhJP6jMq$!)b=; zjM*6@az5m)9$N6<9$-H=R%6`-^ zyRazJvUw)y)r%pKc(S?$xil@CSCU@6aIJs4;#)~G1POH-4^lE{KH(tGrnUx6e00@vi>LK=q@@)ukBH96Zy=-ZApa?{6{F~v&yI3hFD!W_k2;ji@8V5=K*%#0 z!U{sQekBV%$)2A8IVHUbuzsLm#CPz9oKf0DgJ?0UKT5-or*0xIe*mAD7GZLxl`G%=kk3 zVJ)G{hFd_98^5kczsGUGpzm>L$LCd|{{e5ni~krwok0Kq00v@9M??Vs0RI60puMM) z00009a7bBm000id000id0mpBsWB>pF2XskIMF-;v2n-7k?(wuN0001(NklCQtMt)Be=;LSGlhhqRv(T-#_u_rJ4PypKA;A`TR8~}I&WE3+`Hqh zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvvg{@d{bvu*3Ts_759sTg>o9TAGWz~) z9D-2O0|oxwfI!dg>Bge#Z*9bWcFQ=*;yyv_J^86;m1U z9hZ9K&GjIb!Jv#Vdu%XXX_`nvC%1U;%+Qm|sB4x6xv~r(MDQ&DLktEkODtsRa#}kg z#LRPZ5$7~wR+ zbj0cijTn70QvZ3v9J&Hxfx zcg`-4UavcIowF-w6oqK8M$*YC)ENVVrjnLMo4do@FL_g9{uOWfC+1YA?*Cv;b?O## zUwQk6wGzjP!h@h*g*~PhH#D}yM#xA%S?1_M?h}$41DeK?3Ltx+&LFW*P~5f;u^(ko zt9$Ys&C2kS(_$y!Rf%N)ZVK#V2ZoBrP%Oa4XxzdbL#Z z<}SL4)oZ}rs#Q$`+3w|LIyZjrGq-8593MghYAPtb8CZotW?9m}XbZ1h-XqJ*|WaIa46NIv%CJx zEK`dENZn}AxdzCXv%kIPI%UG{#~quwsM8cy%d%nHX^T!ay>spwTTl|Oji8!Y zmNl{7E_uq(yz)E$cgSfbWYQy z@KrjJ6)I-$TqZ@)A0q483l5LGO%~ZTSZEFNqm)#= z1A%{RKT@(@DjJ~y_%Bjp(gj2-6l;}nbp6y*tDC)pA4OT~LV`bj{tM`mIPb2_c-_Na zboDnrV)I8R;NyD$000JJOGiWi{{a60|De66lK=n!32;bRa{vGi!vFvd!vV){sAK>D z00(qQO+^Re2?z`hC#Ey#lK=n!|4BqaR2b6*!B0!VU;x13-?lg1Z0b!a238PMP?wS* z>Qcg>Q(qv2?tP8G56~y**0BORbXF({)DRH@Er}#DG%+WpoZ#Vad^DGIO^wp*;lshfQ9z@uh n9;<75tUida`(58|%0l@cb{=OGxF*Gr00000NkvXXu0mjf3qNDj literal 0 HcmV?d00001 diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index baeff26..ff8ee3c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -76,6 +76,13 @@ mobs: pufferfish: true tropicalfish: true vanillaturtle: true + vanillafox: true + panda: true + wandering_trader: true + tradderllama: true + pillager: true + illusioner: true + ravager: true parrot: true horse: false fireogre: false diff --git a/src/main/resources/illusioner.png b/src/main/resources/illusioner.png new file mode 100644 index 0000000000000000000000000000000000000000..7dfa79970d5b21b722224fd3e02683f92650781e GIT binary patch literal 2255 zcmV;=2r&1FP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bN{A#=5;dm(=ikHp3m;}1jnfc)^4{X(l1rR1h<1I}oveGl_YZppA9iyeFie8G zte?Jb{|vjnCIq+b<vw7R)lL}+~cJN;u zZ9D0gUG6gct=d`n<3Y?e*!RyHcVo0TMqj(j&Vwm$_NLBOo)H`isFY`##})9W7>DOd zxFWV#p;&{O1y?nch{5(CM~yNK>d(DW1w_Z41MbX~<*`KxoVd!802d7o5T+T4(5gZ; zftfEBde%+PdX*wpZUj#z1S8D&ahczY|I2j)jWJV~$i~YRaPiD(z?jO-Z+Jlv8k82&>XSBY|9E!lwP?dkIn)=wa(a88Wh?N0E)1-0t^Whu%1N8lMT#) z2s}pUlYyMYae)G)%8kr`HXCAz55#}H#oF(*!f7N*IkU{Xve<%~r$ zLTAj*@W{Dvk>ZLLUqXo`m0XcN)m5#&h8kOlC`l%XyDfic^(N=9L<{rQBQVr%1P6(RqM5ks@j2%JoFcm;T z^VG~na*n5RQ!|?wMWGDUNT)cBreaXgbz&WKwRwU(a~MIM1>6;4jA3^X=4^q3hf(GHjAfJ;v>SNr@xOZ*#m^LHJ8yGw2UfiO}r z(qrWdD82z|*B|UX=45+gdd4{>v1=n8Y+E(UnQU=NPUp$F?yS$q+O!NaSJu1$NlJUH zZZ_rKrl&!ngxNKoS=9Y_JVI@0ICr9kyy7Zsp^kXn;|d7fO~_W|qK&#X(Fp0176F-^ z9^BtBd2Je5V5VOjgesh}ilzZE?cMY~sPZLwLCIKScQ_>z-vk)?J@ zIl7e%2z0q!gW%CXH7va{U`pBrSTmaHtGDcy)0|YiUzr83Yw9V{)|l)W1b>TZkJ9N* zDZV&|+tZKm77^Fe`Ak36fBr?;c_l9pMUvk@%LHmJ($hc$4OCj)4C9y^QdWaV1X}fw z)7`3-Qeww+v%7u5v2mM7Etd)6oqzFCm0kDJi`?!r<|DJ30bVins8+XZ!_^_N>&C|Q zJtxvDC-6$_X$2~^O1rzmNnK8$aU(=r*U+?(s%93-n}qzQ>80 z#YV_3peozyO5J0Nx3%IGVOcXhd3#Twc}SHL)3jUL?jSu~n)pY8=kl4GfL>N!nhEgu z>pi=LUg_Dta`^WYHjUqMn8(F%80~z}lv6vJ4r}AZn%P@SCqgS{WA5(fcKnn#T?vQM z$%%(8XO5Gvi|7^u(l9TD0#gH`3$y=(c`Dmz{O(?*eM9Oke}nVkrF>YYNYGTPKW!6l zp;!0eZxY^x|8(L6Q~TPfu>EfTSHmm|o74Dxz@J58!NB;pMNlEBnn!MNqq=ZNtlo)A`lGk_8yLS%N@~SNUk{d4fz0ZArzx(|X z0NE#RJ^~Nc2-eGvjs*!9CT|vr#DE`#$Hnc@!RD z7!rmd3Xk*LJihO2qeA(M03`3R|rV&=tXfyyA9!#>lFwLiOnOeP$ zloA`67(h5kDXHx2aBz6Y_(+9ttAcP>B%`%cnv$?fJyWJ)T0<7s=rhstzervl_ zVt;?1AP4}c*XwMTO8qU7^kPNqs57M$TI-%5l}eFLr~hdMtu;z1Y)75-QZVx9u`&1F z+SmZOuDj?s&LV&iq70O~b7e8cVC2y=fCNCbT4ic#s_&&2tE+3k%ir5quh-Yt;^(zm djhUGlegV+LAZ~20xmy4L002ovPDHLkV1gOYMXmq< literal 0 HcmV?d00001 diff --git a/src/main/resources/panda.png b/src/main/resources/panda.png new file mode 100644 index 0000000000000000000000000000000000000000..b5203d43d1daa37db47553207052f6b6034e2f03 GIT binary patch literal 2129 zcmV-X2(I^uP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@mLn$&{Ld+J1Oy1dacDl?%MEh;6g0wi&+KNi ziF<6YnwCUWNq9{E>(62Sz{}a3Okhbd$7t~iIb>HbN%nr-BiXP%_ZO>^54$-x984ag zzrV)5*B99N^?-zJzdr3o>h_biBlWx;`We|_ve%{U$h+H4`@6~exf0&Cv){EZ7nZiu z=l380qcM!$8P`4R_)Ig3M+QFog7N-LZdwB7gu4Z^@I7|sOdsH#*#kRUw%vb1VQkzB z;sc{?C;lG0h0udFjr?(gsulbGdc$svmd5D!?n;P2Dw@41-O8F_;RPuDdMx4+ycu&@ zSH_jF#R|q6*t~F6Lzx`V9u%lip+S9(l`2vUt~O{yORs8xOv5^ln}WQRyu;S$={dDd}sWf>o^)?N|(r{gB9{}Q-DZgGB-c53WU(u znDWARUFJPq-_U)2(cN-kOu=cl4pu! z#W^7YjtTq}WbS-$7Z@OB*T@WT<9!4vV|Sa;T0jK*=mpfEbU;=J4E;z* z&`@E|!7y`V;l!Cs^f5$^F-n|0s)&~$EKx*~WGTs~kT}I8DW#lBcG;taagJF`PC4gN z5VXK`!P5mRO1a$SuW<1dFS*i{uTmkO8Y8a;l2DCQ(2!lr)GSbMS9M(3gpRCb?xu3H}o3+VUSnK4)8q6ZsiG%$Z5u|G}J@ z)NSUz^7ajDt*jHpFM?(jPE4&IXlz(iT*4pv@$Zl3zc}!n>YA1s3dS4w$qOzODB z!RQ!zcZ7W7ZKITak}!u4)suMM+55VgLC4M4Q5l^wNTM#enOAY}vm}ootZvI|T1Tn< zUQF5au~maDXL-n9a#1;S>-R2I=47?~5CWM`^=!SrRbM-e;wFyulRA7=fip|Y&QjTMLCFV|I($q6+6Nv5;5A&hFQuOY1>dl?I)*t$>ljs%< z{)3GE3xvI>%uE+!BN{~*=e(wS zPR5HArJz-~^T(>U)SMpKE-N&|kGeRJ%4x`_n-^_svrm{E@o2q@=y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G` z2jd9{3=Av-*Hf7Q00MFThNS&NInV8sFCc41N044;)1P7DrwM8Q3+T%*E->*YS)PNK3_9kzh z_wzoKoX$Y^pH}bm}Xoy8ujZDiKgkB zXJ_`)+W@8+|J-a|&a~TYgb?U@0NwXnoS#<-2Jg|;bq`I`{~Oo$eH^DoyWJuX=;{DG z&n1(2%;Mq;q?8zjkxZph%eMjc_xF>IfI;yHNJv~V_yGCDsFQt-2wOXNCtxzgi^!4|W z&8{&$J&CHS=z2%?4dvl*n6=eqY`e_X))oK*0}<9%m+9&0xgl2lyE!~O!m=zfnGA_U zoLufbx!ijai8z@|2FtQIJUsdbpaFDu8%8ub@M>!631eepL?RJ{5Cnr7sni$~6B8JQ zf$O@cDwNA*YBgu0(Wp5(!20@1CyuHS2P$-1&w+IAuMn^|UCPx66 zn|t1IFg!er@B5U?60dRi)3*W!ObzOqNAd$%6ABn|c5!)_1z#Aci z^gNG7!{zewlA)mp0JdF5Q4~DSLkPj?=}!f4ip3(zUEldP^VuP~t6}_@00000NkvXX Hu0mjfbdeq1 literal 0 HcmV?d00001 diff --git a/src/main/resources/pillager.png b/src/main/resources/pillager.png new file mode 100644 index 0000000000000000000000000000000000000000..e176c6e3c7f0e3f4200cdac5c0215560ef5635fc GIT binary patch literal 1062 zcmaJ=O-$2J950{=5D3JX7&I}@q6r$;u7h>1Ve+wVQep`iOISSFwGY-nKWHCrgM-4s zzzruR9=sU!qDByd7h@n^3@RqzLE=RYWEV|H%$9#sEr579=_pBLRV+NrNy7B_%Vm0$T~9 z;R1$M>In)sdkN7 zuy3p+OnmZNHuieC`t)q6a`5f>0Sz&xi72R zg)-rS(P_z~8Or0NR0N9R|Dl?;kG4@19>n`kVLO&FAsvObF>1-UaRZHxE0YUZP(p?k zGmPP46?>BgGVG*bf>0j|nnX!fb;ocv&k#jU&}}5?G8FhAi8UxyRXB#d5axXzZ@4oO zVwf=7>4`95-tUiiBYt1N&lb77A&+WMM@6o3z-=zcb%sGRv1cAy>NTiDEJFkNq&c;8 zES{2j1+G#$7N#VZ#=+1|YyWC>(S+y6+3pW6KJ1S^)bYGqc(8x|SiOxe#a)5#h^4p7hVX zd9=8=II*?6{dHpN_4sbnlv=s5biHlnsLK^{J)fTkZL`U_GO$dzexIw^-grPcH&+Pv K@XtE0PW}NZ^kT^X literal 0 HcmV?d00001 diff --git a/src/main/resources/ravager.png b/src/main/resources/ravager.png new file mode 100644 index 0000000000000000000000000000000000000000..7f05ac26c0e388ae4e9c79777bff7142cae502ff GIT binary patch literal 2178 zcmV-|2z~d7P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>a`QM2{LfR&5eR?}@Hl){?G5($(-J}1aguLq zrq+rrnj-P&2AYnW|NYN$f8oW%-i4Som6SYQp@hN}1NHm0@8rY%X%y+_*HW8RNG zzlRJkMua_K$5Ti=KK1egP7sK1xp8O zf@ywYq1$h{{dH1!9)y)lFh!J_N@7AC^%m5&Q?}%VXz<^IAkrIl5 zITHa#1wR#$vjlEnfMVo9Zh;$-1ai;~@Qpp0?zJ3wPeWQjM3f{M)Sz`hRtORGlY^p$ zYLpmUj4{O=HI`VDq>y4tDW^-LYL*;w%qi!rx#X&%L8B(ks#>%bE&>UQC6(-omQrek z(+blSyDL`I+PFyzEw70)Vy5uBYoPjY81jh5l z01BEf&b(3xd@*-%<_n`KB7-%G7deA2#=u~h#BtHX-HW+D^5$arN4)WG%(;uY{|9sK zqRyE6&f5>Hje4IbaualQ;f1M}1!2R2sg<=}XVSi}9IpWa5}{<1Y6DD13i#`d_K#CTQXk}-p~p1#HYyPCZD0043%hPZl`fkW==@`ZztI^UIz=pq;p?SGm$Rg? zTDU$o!@&;=@*(Jn+8>PL_8nqz*{Y)>w7m|la6J9*;L?T)r64lZ-Ls90A=9{@{L^-U z1Nn^jMRzoNDOz+6l8`@3@k;f!1_9A+7=8UaqXqQ}LlHUTyb)R{FR*pKIE|LrMHRyv&VMFIGJGHAfajFVnz#mQ&mG zGZ`j5i6w-|y$?s?Y5ygA4&5o=y3;-FX(mtxJ{{stZG<=to)aPD-|F1JbZ>Qr01Z`o zpf5*B^21TuEJKUa8&2*Ea5<0DntB?*_w}fkyTfM)LkJgwTBMJuA&a8j;T zW-qbJRs_=YfZfhAJ*AiU5&v!tRO$D)+MR|2)zLH?XWcRl4t3c9q+O5TANKWiJQ$-X zHD^kDlo>V*Kdt9z47ofs|JJkk$FI`iR-gWta{%bB%7i8{;XjfV9ug?c`#7p87Ph!j zXa?fxb%c6KrA*`TOKW^>k(_pQL*gF5dF*`%lYZ5dSE|lR2fcp^ABU8w-btf!u%6YF z>1T;^?=4$5NVmj&$|Zj3?Pb>wGy^Wl=|i$}&8Kc^AL2N2Ty_QcC$+cQ$={^J`QP~b zhxdPPDC5@~{?~VZ16a7wZ1#Wc8~^|S24YJ`L;(K){{a7>y{D4^000SaNLh0L01m+b z01m+cxRGn^00007bV*G`2jd9{3q7dYJB^$Na=P!gTQ2qjUTkK=$z5=54Q5TtR;(e|#_1LPzt zPHIPs<-t2jNOTgBr50;4yuil~0*tjpjrv+3S?Ru$-D300*4OJ-hA&H3P6WjgelCaW z`ADfy%EghAs2vh_IxkRbLCXF8 zXa2<*;M4jVj~+i`bbO4-r<07I+ycj8Lwsa;X_*fj?^#-Sat4sUH&fHo6FQD2DhKs4;t9(%XGzOnkp4Q$dOw1(=*5k4Ma+6KVKV`pazFPA4X`ur32 zzwP0AE?OJ3v8Quw43(n_uB*_=Ux4FULzVIYu}zVVb2^W;rky1CQqXKi>RjOBPc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vf$Oz2z^NCM7;+1MHoK%2WtOF;xE1B+Du6w0m5IeImX;Qd z=BCaTIL(9VO~L6F3s;Bf2b&Ynjddm z@S&^e=6<`q2?>+GC%bSmPk3@sSNZ{4#Ba6*H%h)e2(-9;Q(sn^9C{Ybz(;ue7%#|3|)m+FgoaDxV>G%!?fSNX{GG!K7*Q{ zU-?~MDF*21-DjzHdh{Trxnt9($6LQ1Uw-{cH){g}GXra3j>Lv-VJkt!hNr8a%Q~lo FCIG~yoM!+4 literal 0 HcmV?d00001 diff --git a/src/main/resources/vanillafox.png b/src/main/resources/vanillafox.png new file mode 100644 index 0000000000000000000000000000000000000000..e50bc033e2e8350fd9ca3b15f44b0c141d50dca5 GIT binary patch literal 1385 zcmV-v1(y1WP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YwcH}Ay{MRaG2?!8^pXnq$ zO=4kLNQFukruP4To&Mlwjau@eF{BU-em?nRGbYjOzg@EN^SW-#WpbmZ6mve#orQdG#q-FVu%hAR2a_B~6i^;N!%aOCYp4UC4wJ!Us?X3UOrVGQ%>HWP| zB%=zH&XR2odR*g(;()*9_mQHT>;^i27iaX9LIlrFQ0N3MX&jsgUX!Q8mQ3WRW9IhC2; zIq0fx%oVW?49ZM%#0In3b{CuQSzB)M>|iIxli6Pl*18-ZMTji`!ww9Xz)mkBWfs% z6Hg)%L?ud+99-~0LI@g0kIL%Qt7uTws7Z5l(MO3PYK$?(oNRJvVUj{pN-?FBGlFKg z&RCsck@IFZxA{%Bu;~`JwB>^GDZWSvMN2HHQarN;TG0bK{0mYQ9MeOA#vw0@z)q^2Xc(P9mYH4~luOz*C;97sX<7-JX1qpo`H&QZaKH#9vrnUx6<()Hn zncs>gKBj89#lw5s(ykRQkBE-NA0VT5kiUy;&r$Sy%#L<+WzXer@rEoQmIx%RNNvvK?eB0XUIB}96_IE>3`PaJW0z6{j16{$+y{D4^ z000SaNLh0L01m?d01m?e$8V@)00007bV*G`2jd9{3<@K~GU<*0006m3L_t(I%VYfc z<;#BtB*4zY!^nUKpsQzMpb)UY7`tcp6Qu#B&Na1=Ixb*5ld15Zfq{WROqh`*jj!JR zr;ZB--T;;-FJNZ;V<09hV19?`qdXSaSor=kFfcHD{_u=}fq{YHWrr>U0|NsCtFQu! z!ryNnFfcGMFo;)NW?*1oVBi&yqH;Qb0qKIx3=9km4D#C6C<-55J<7nqz`*cyf-iMr rf${mx%P1}ol2*j4;oZ~w)O7&>&qp%Q;0^V>00000NkvXXu0mjfUYDBf literal 0 HcmV?d00001 diff --git a/src/main/resources/wandering_trader.png b/src/main/resources/wandering_trader.png new file mode 100644 index 0000000000000000000000000000000000000000..207ac2a47d4dcc2af8444e425ab6f63f9e420d58 GIT binary patch literal 2359 zcmV-73CQ+|P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxvLh!9{bvkJR{Z2l9_nkT9hw~2g;X7NE@84ZvY|;(s!$-<@ z@w@LX4}G9^-~9GPi#FTW*NgAw>^$e#*42>Usbtis+mwsK#s*jV>sZ2*@gG6w>nV5` zCJGSiK(pZyOeK1{##H5()W>$39ab@f!j>Zc+v?-FOBP0@OU% zbaZjoz2&-39OLHhu#+5wIh^?6G2fW~M>pMJoWI#zJnrV;2B%Q+*mQ z|6Y%Ii5vR@tOtVeax=rgYTFjkqI+V?UpRa0i#8a$Q^V!10^lOt9ifc#K)@#Fqf5?a zqU;>}$iSyUbMk>25O6V4cV+?`?-Rg5HsEfY$?n>VBD2{jEdV0=Hw?|BH||p zMhw;HV=yts6m#TQVog4U6jMq$tr}Ic&mqU0a?YGfuIxE*EBb&rgJa74mS`=BaArG z$b&~2bt2ZLpJB$CW}ZCDtOqqk^&K_$f!wcAbBfwREL{8YgBsX5-y+;9Cvjm0#3(o* zo)-cLXj+(Ab|KJ0ZeeB%At_M&p=Dg)bhi)#f?+s{(;e&{q>c<>5>ao%z!;juG>+Kb%lxkCiTnKgNJvw@@aMVB^Y+mB{mod zTkX{|f4u_kMG%5wpXG)A#X|ox`{pJKpIMK)zPN4lP0eVBw;wi;>DvcVKEL|eN>%l# zZ{L{Z2IfaC`ybUZzoW$Ote2pFR>{VfsN$^@3TsyMtxQubrM;uRRlrT42(7a;`O^-6F zMY}^L)=TYy3RSn1ghFRjMBMgOwku<=jp)>>&J*!P!)_plxgB<&WHeWhrH^ZA>h>g{ z-Z8=y6N6qFvQxuyfkuiLp}EOUOp7X~K5&~8(tW%oH29`8>N)kD!e%wxi%Q{~9@X6r zchlG7L90F!b~B`#ox&1jTpSE%$lT(pD@DepyCl?sOJQVv-q&zHE=W69L=YpFvm-$6 zJENme8fk7i#iA807Yy)6v8-{>GXjK_Z4fxRSweYH*zbEM`n1UQb8B{3FKyfaVeD2z zIwt>m+#P)tzV+rEEy5#czDGgGt-i3&j#l~zcOYehsbz1Q7+b3R5SqQYM}Mma^T>iZ z=)`viYFh|8P@#NBa&l6$GVoT5frwG;L%8E|%Fbf>+E3Vu+?u60p3 zi$|uAY8-0r=wxbHDcz>q7-(wRQXn4Nt2_ddDGLA>cbvt z9;2Z3-EAF;?}n4&wkv2s%^ahu91a`F~tP;J`CKUVBA}xHF*rX^9Xj0E< z4eo?=%y$bwZPdyh?9f4JqGFD0cY|E0C#@P>{6K@gJH^C6wn=1%FFJg+@W3|urc7EY zZ%qTAA|msSgS)=dOK6U!VZ0{ev}uE)1urq( zD00(qQO+^Re2?z`h8D~=UH~;_wQAtEWR5;6xlf6$DRb_m9oPmkB8*FGsR+{*i*=8BbDDgEh zC#kARpcZf}6Sv~xSO$JsIk#BYCc?21j#c-a0yvflfD#Iy3ouWLfA|9boA@^i01QmT zXM|%j713ysO8~^$Bw8-`05A-fU9D0tS~|SJz(jloSPlSKt~7{0NM}=#)?f-rg7#RD z)^-^Hy<9=g>$t9`MgA7TWv~u-*0lnFPqHbV*sQ4*YBQlQ}oa! zqL_wFMk$a|elmUMDdEx)tqm^$$kzb9{nfSg^xorQ{}}PWEcfl}j99%CkIHPcXe@^{ z9zJ+P^5X|02P>xmN~0fu_0?B=d%wZr-ZW0hV7s)9a0K0Eh(&#xHw$y5wzip>^n1s1 z<_>b{FC1sJYOG?Q3mpJ|PD0LCNTpZV+1Z83Gk1_pmjQ{r?^|RN2LLpT45D>i`Mnlbd?q zNkJgIBDql+1xCI1nt(L`$tRKA)af4z&DTd5dAtem Date: Sun, 8 Sep 2019 15:04:44 +0200 Subject: [PATCH 4/9] Minecraft 1.14.x mobs compatibility (#1) --- README | 10 ++++++++++ .../java/org/dynmap/mobs/DynmapMobsPlugin.java | 13 ++++++++++--- src/main/resources/8x8/illusioner.png | Bin 0 -> 1674 bytes src/main/resources/8x8/panda.png | Bin 0 -> 1543 bytes src/main/resources/8x8/pillager.png | Bin 0 -> 1025 bytes src/main/resources/8x8/ravager.png | Bin 0 -> 1593 bytes src/main/resources/8x8/traderllama.png | Bin 0 -> 1060 bytes src/main/resources/8x8/vanillafox.png | Bin 0 -> 1353 bytes src/main/resources/8x8/wandering_trader.png | Bin 0 -> 1797 bytes src/main/resources/config.yml | 7 +++++++ src/main/resources/illusioner.png | Bin 0 -> 2255 bytes src/main/resources/panda.png | Bin 0 -> 2129 bytes src/main/resources/pillager.png | Bin 0 -> 1062 bytes src/main/resources/ravager.png | Bin 0 -> 2178 bytes src/main/resources/traderllama.png | Bin 0 -> 1187 bytes src/main/resources/vanillafox.png | Bin 0 -> 1385 bytes src/main/resources/wandering_trader.png | Bin 0 -> 2359 bytes 17 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/8x8/illusioner.png create mode 100644 src/main/resources/8x8/panda.png create mode 100644 src/main/resources/8x8/pillager.png create mode 100644 src/main/resources/8x8/ravager.png create mode 100644 src/main/resources/8x8/traderllama.png create mode 100644 src/main/resources/8x8/vanillafox.png create mode 100644 src/main/resources/8x8/wandering_trader.png create mode 100644 src/main/resources/illusioner.png create mode 100644 src/main/resources/panda.png create mode 100644 src/main/resources/pillager.png create mode 100644 src/main/resources/ravager.png create mode 100644 src/main/resources/traderllama.png create mode 100644 src/main/resources/vanillafox.png create mode 100644 src/main/resources/wandering_trader.png diff --git a/README b/README index e69de29..b1462e4 100644 --- a/README +++ b/README @@ -0,0 +1,10 @@ +Dynmap-mobs for 1.14x + +Build: +download and compile dynmap +extract dynmap-mobs into dynmap directory +cd dynmap-mobs +gradle build + +If it complains about missing tools.jar, create dynmap-mobs/gradle.properties with: +org.gradle.java.home=/path/to/your/oracle/jdk/1.8.0 \ No newline at end of file diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index 16b597f..e15e050 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -121,11 +121,11 @@ public void init() { new MobMapping("bigcat", "org.bukkit.entity.Animals", "Big Cat", "net.minecraft.server.MoCEntityBigCat"), new MobMapping("deer", "org.bukkit.entity.Animals", "Deer", "net.minecraft.server.MoCEntityDeer"), new MobMapping("wildwolf", "org.bukkit.entity.Monster", "Wild Wolf", "net.minecraft.server.MoCEntityWWolf"), - new MobMapping("flamewraith", "org.bukkit.entity.Monster", "Wraith", "net.minecraft.server.MoCEntityFlameWraith"), + new MobMapping("flamewraith", "org.bukkit.entity.Monster", "Flame Wraith", "net.minecraft.server.MoCEntityFlameWraith"), new MobMapping("wraith", "org.bukkit.entity.Monster", "Wraith", "net.minecraft.server.MoCEntityWraith"), new MobMapping("bunny", "org.bukkit.entity.Animals", "Bunny", "net.minecraft.server.MoCEntityBunny"), new MobMapping("bird", "org.bukkit.entity.Animals", "Bird", "net.minecraft.server.MoCEntityBird"), - new MobMapping("fox", "org.bukkit.entity.Animals", "Bird", "net.minecraft.server.MoCEntityFox"), + new MobMapping("fox", "org.bukkit.entity.Animals", "Fox", "net.minecraft.server.MoCEntityFox"), new MobMapping("werewolf", "org.bukkit.entity.Monster", "Werewolf", "net.minecraft.server.MoCEntityWerewolf"), new MobMapping("shark", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityShark"), new MobMapping("dolphin", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityDolphin"), @@ -173,6 +173,9 @@ public void init() { new MobMapping("endermite", "org.bukkit.entity.Endermite", "Endermite"), new MobMapping("guardian", "org.bukkit.entity.Guardian", "Guardian"), new MobMapping("shulker", "org.bukkit.entity.Shulker", "Shulker"), + new MobMapping("ravager", "org.bukkit.entity.Ravager", "Ravager"), + new MobMapping("illusioner", "org.bukkit.entity.Illusioner", "Illusioner"), + new MobMapping("pillager", "org.bukkit.entity.Pillager", "Pillager"), // Standard passive new MobMapping("skeletonhorse", "org.bukkit.entity.SkeletonHorse", "Skeleton Horse"), new MobMapping("zombiehorse", "org.bukkit.entity.ZombieHorse", "Zombie Horse"), @@ -190,12 +193,14 @@ public void init() { new MobMapping("mooshroom", "org.bukkit.entity.MushroomCow", "Mooshroom"), new MobMapping("snowgolem", "org.bukkit.entity.Snowman", "Snow Golem"), new MobMapping("ocelot", "org.bukkit.entity.Ocelot", "Ocelot"), - new MobMapping("cat", "org.bukkit.entity.Ocelot", "Cat"), /* Must be just after ocelot */ + new MobMapping("cat", "org.bukkit.entity.Cat", "Cat"), new MobMapping("golem", "org.bukkit.entity.IronGolem", "Iron Golem"), new MobMapping("vanillahorse", "org.bukkit.entity.Horse", "Horse"), new MobMapping("rabbit", "org.bukkit.entity.Rabbit", "Rabbit"), new MobMapping("vanillapolarbear", "org.bukkit.entity.PolarBear", "Polar Bear"), new MobMapping("llama", "org.bukkit.entity.Llama", "Llama"), + new MobMapping("traderllama", "org.bukkit.entity.TraderLlama", "Trader Llama"), + new MobMapping("wandering_trader", "org.bukkit.entity.WanderingTrader", "Wandering Trader"), new MobMapping("villager", "org.bukkit.entity.Villager", "Villager"), new MobMapping("vanilladolphin", "org.bukkit.entity.Dolphin", "Dolphin"), new MobMapping("cod", "org.bukkit.entity.Cod", "Cod"), @@ -204,6 +209,8 @@ public void init() { new MobMapping("tropicalfish", "org.bukkit.entity.TropicalFish", "Tropical Fish"), new MobMapping("vanillaturtle", "org.bukkit.entity.Turtle", "Turtle"), new MobMapping("parrot", "org.bukkit.entity.Parrot", "Parrot"), + new MobMapping("panda", "org.bukkit.entity.Panda", "Panda"), + new MobMapping("vanillafox", "org.bukkit.entity.Fox", "Fox" ), }; private MobMapping configvehicles[] = { // Command Minecart diff --git a/src/main/resources/8x8/illusioner.png b/src/main/resources/8x8/illusioner.png new file mode 100644 index 0000000000000000000000000000000000000000..f3202ccdd18452f8981708533a2759eebafceef5 GIT binary patch literal 1674 zcmV;526g#~P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YuvLq)A{O1%t0+Lvd!y4fm`1nqirn;HwnXqH3 z-YY1T5F%4ctM<>|UHyfNwKvLGA6#@!<1*1iPM8F}t~HW2^Z70t?;mn?J}^XrQP!(# zTR%Z=p9S7*dH$3uU$&jF4bd??FBv{m*5a-Nx^C;{iss zuqUjz35mutj9mmCNR)(eJp&Jk!JNe5$wEKJPMzrm-kDw4>9pnY35C*bE4T}zEhl@) z%E5F+d5q`4oEq*5A{0AoIx?elFVfex5vN5+|N7W4me@~ zV-;*>+(l6&2HKqrRZ7&U&9P8{i-sF}jLZcn4_Oe;k&7$}a8qXwVycn=CJI;+i23+J zbKf}kD-^JEC1^6i7-7W^xB8jz|J=t=?;~`HbU0YSFCH-sHwJU#2`vypePe1TzVlXZ zaiiae6|iO}%mD{XIxiF1(i2-Uc^2qdZIoWALB4JSfCzhAI70#kv?HAeQsyk#WSd>~IpmmALHHC?Y;nbxP-01yt5l?ab=9jHYOJYILnt-VY;(=G&|*s+ zvDT%VZoBKghaP)6tZi05S)+@&U$aJ=wZWK~dj4SzV((ujXp|E>I0IvB2#ou|00No^ zXF8BEJeV7t>BvY5%V3S{Ag9t`3=En^Y&#w99_D_@o3iFV@y6enQ-iuc!JHb@ZRURD z?I*0&G&_n+f<_h&Oto|rw#FP1{yI+Hyk0LLC>l#<9JA4!jpi`FIo4^;H0L_LL5bB% z=^jm<6BCoRQ>I7Gja3Xdx5Tt*d6Y@@a^N2SqeG)+z?0N}Q8v=5_3QMAMk+%}Y8f!?Kmo zWnQ+jnhSE$&A!&s`f3hdwk{=&cs;)Q3ktOCbs$?u2iyMZGMAzoy%xHSv>e9P1gWql z3L;*sP@q4k<8wZ$Q-EH39FirWeMs(!f|LhHxXly+E**i?Im zxR;o3)nL@hIXjpOD(W;ee)zl$m9S*lw1YFt9ZcOV6mrQ@pBgajDNf;dVSkI(PBeW| z8^JvzJg8?oYHPb{q?AK{ybn}23Y|+ghwrEs`sp}<$omaiHgCV5;)198h*>Fq#YeZg z%M;r-``x(>R*}&VCq_W4FU4XWiq?tvMynif(C<}IjL_~ZI}3}CRakc2a6GBY3`V&cm9`)Wh#*e(8cO_0=vhR4UUTOHX6m1vzYfU%1i#%QK9#i}R?wxh|9PK{I zD~L~rb!yN}s5v`1MwH$#-7i5@LNC}uOplL6?pj)2)0d3%1 U`(xVqEdT%j07*qoM6N<$g2A{CKL7v# literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/panda.png b/src/main/resources/8x8/panda.png new file mode 100644 index 0000000000000000000000000000000000000000..79874f51537c0171882c20176f71a2e5fe9c1d0d GIT binary patch literal 1543 zcmV+i2Kf1jP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YumgFc5{O1&N1SGK@2eZ64H<;s3u-MMTl~p~{ zom3^VEJUD?M5_AF-%b664{OoNSRY(;PUB;uiJTw=JwJ0MZN~Sju0Ox&)%Aj*63j9m zU0wDGdV4SMX6cW2z4Cea3Cq#B^KvMCXNIus!g3@$^|YQ5_4XlvC?a=TU|P!vmp|vCLt3{9DL=jEE6% z#03RFXSGp!mInE<93Vv4+X4&;7|@Qyk|XVzJrUv< zz)u2l7Q+V^AZxjhYT!o1fgDr=_Qo1d!iHChXZKyio%H7FgBWsF7scoUFA$%-|~ zTI;O0!A6^$IOD8y&b!{Dk{55h_0D@AeDo}wuH)~LPf4ZRFPHg84jIkjw?mGiW zXzrZpK*n%qu5+d%qbMwcHL{(YLY*-%XezO7ba8hx_bqSAn*YQbe_~E`>iz_Cs#CX^ zd-C=LYbA{vMFv5=3VTeoG&HtGN8$iH*^sgL8`r}SM2|N?qwi1QR7lNbuIe`#By|ce za|<;M@#rr8QO5Zra__`X_8IyX|Mi41|SK(HS|3>VxugZDh^m{m79>@cw*oJUGi!xT<8 zyhp0oc>yWzs z;N*ei1fqTy$q7V#KqB}h6xF}-CZvZXEvWVY000JJOGiWi{{a60|De66lK=n!32;bR za{vGi!vFvd!vV){sAK>D00(qQO+^Re2?z`fIc^HKasU7T^+`lQR2b7O!9PyIPyoQ; z-&0aqUPDX#(^Mj15O5*s2n=!o!^{~-JV6=o1STAWz!7wCB4H75!r-C~Ugc6cdAaNj_~&`mfs{^ODxK$|)9Jp9Mq$^o ztW~{!`vb7qd|V_+(j1SUUPTy=i!$&HWYZ{HZEquQwTdljO-+!P` zI0ZoKjOld7a`|qb7-J9uf*>GGGtx982m*uvV+>+GpGl?Ss9L=tNfH1o%VN9zq*y$& t3rfXDV@&UGIN-Vt0Q>zf#u$`}kAE7sWasZ`L*oDd002ovPDHLkV1ll()I9(I literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/pillager.png b/src/main/resources/8x8/pillager.png new file mode 100644 index 0000000000000000000000000000000000000000..c279c58047f5025bef3691e93ca730ddd0cd45c6 GIT binary patch literal 1025 zcmaJ=PiWIn7!M9cnN08^o2Wc86~}DSWNo&_)pc!J7c{f91$*$YGomb@%^vspb% zL=U?R=@54CCWt6_7sZ_wkM2?jJ8cJ1c91zy2EKG{=fV0&-k*=(@ArN0`@XlFnYz~7 zbGnD3s9t$e%91tU|AAvHKC&-1hT1?U>2(S;{1C!Mp0eo zjeG$YlpCUkOh)xFjAz<}O;Kaxo~>%L5Q8Et8CHzmeX~vjLyyt7B1%ZHldx<|RvnnD zPUW@gtQOVj@vC6W6N!Kcu?jqM&T>UBMmKatviHp_4H^(U8>0_{DkvF{L=FTIW;m#Y zI1UH`!-XS)z+DD>h~wE1`Gg=B79)blkAUW&i8n`|5wlXd>5H6VbQxn?WZ6ok!c>MC zc)eBngKubY_uI3mvHjo8;MYV_)aEvCA9$vw;+p?D1OcO~M z>!~)&F(Lm-EufMvRUY&1xF)=n;Gz3*<#XxDn?Eop}AHT zGi8L4TShiW<^*s_Q8mNz4TBAaqKLBPV%5^1EX8P|!5D@v^22;06d93HNsf$^Fv_J9 zQYbRYr=yWDA5ONo64Dk-XyF!DKjNl3a{Xp7ZQ@yij&TR-X$P60acR-$98033UX!bL zjwRWV%aUMNzqEgqx@98$<8RxIOAhVUhZgB~hcx!L&+n?_QMj@+k@xDwC*ob9tNZ7# zy`kd|5~sFzcDidHcemcYp5J@%Y~{r5;zsR4{N%+z>EOfT&1p)HOKZhiZRPBhAG!4Y zP#@JFXEKkt0rsXWFR!kC|FZEi{;*!JZ>=w_S9Z^RdVcVG|0%cDXH)m6E-GM$>90%Z PjQ=R*)RgopF@66Jh4D+W literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/ravager.png b/src/main/resources/8x8/ravager.png new file mode 100644 index 0000000000000000000000000000000000000000..60cf310c8030a4b3b609ebe0cb1a5a216aef668d GIT binary patch literal 1593 zcmV-92FCe`P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SOKBvMVPH{bv8I=(4;NO1I3ItbK7Q5}tBe-%VQQvU_oT{Z~JaYnV&V z?=Aq0s?aBF_!JV0ckEUK9!QdmalRvWiJNo0ozTzNnLT}gw`ULRY+iDChr(FDHuwid zOHTSTb_1bTkLb4iw$Nmo_`t5U8e2POblG_z<;@D}3T4c&@c@)Ej(I!*|B87SPr?%s zVgX|n@E>@Jp+pR{8#$_!snI#cLIo~5J~?1yE-XV9C2-;*lL9={IDnXHzy(VIYXUKE zUuf7(!(O2X%ayQ`3Caj3J|6Rv@ZUUJQENTdh-}f89WR2sddKA(x6b60zd@Y3TH^bfb}Fwo@`(aM8GkE zpA64g93NnSRJoFA;6}uQ98?2r<4mBjmzAd&tp!A=cnP2er312@Q{+!@5jm7q)EQOv z8Z>Is?8Q5;-uvKtkIF%U3mSX~A%+xkl<1;HA47~W#hf?^T9_uEf=Mx@lrxNGsLnW@ zu_Nb$4>{bShd;s*k96dM^eL`r@gp|VoNP=))uSptkHwHU$aJwwa%Cu`@+o{#35WNsJ9dCoPjZR1ja*W013^V zGaJb{?#y-0Y+@9JGFT(+Q&e=wbIbou;GlEWA1m-99tL@I3!}nELxGd>U}1s_`_{NV=bYQkl91D zmi8%bIz%OIJ#Jb9z?Ys7rS`dI+@fY4=-S^#I@{b2;Qe*d`=!3R%Xd^^mob~j?_upz zdQQKS-Fnh+z{Ro;H5(=d&WO95e~tqD$No~%4*8h6%5h1k4l`o*IeNH;i)MIqN9*T` zb9ellX8ci&{R&bI3nV1qlIe8O>m{)({&<6(+#7$E=R({L9<*S+lZ4y?2sLCL@$5~S z#-P+lvRQ z-ZqhoBzUybs6A*CKhNBW9iA>qDRUEklbG^<@`ye?vXdpZwWAM@8Cvb_!c*0`DkAc> zR_j#~yOP4JT7xFP8Gnu;+u6C$(f7%?vgz&;`M_X$4(v8a&x#8?p>uTS*SR{$4T69c zGm7r+%%4pu%>9XW52%-ScV0?1GcjHIu8I6AgWVU)Oy@{9QetK>`0e|>=*lv-qYLhN zSx7PGBs8)6o(DQLy(AFLQ}(`5Ogx8s>iBzbeD&`7w6Ya>;}-|+TMqc7kG}93R~__^ z4F5%fA0G*BpIE13-n2qruYjwWZSsGhespg0>nu9rYLj<&tMy?^2k_ZlHDnGgr})HGtC!lynp@_aL=$~SnYaLg&DGjA5gfP&ELoRztV)! zdxii200v@9M??Vs0RI60puMM)00009a7bBm000ib000ib0l1NC?EnA(2XskIMF-;v z2n+}-`QHOR0002kNklj6~S z+=#WQ-#S7>5NoNlnFDwLd93V@QZ&L-yd9V1W6fR=SO6DbtM#yX9D@Bt#Bvy(u+@54 z17(WwY&sz~6;Yfqn@&)s7}wyeb3wP)=l%1IO|quj>vMj2MSajo#4?T96%T;r>jFgn rL6m07_x+K$&NV>w^}Q;~QUUw{Qmkes=~;c400000NkvXXu0mjfq3#0O literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/traderllama.png b/src/main/resources/8x8/traderllama.png new file mode 100644 index 0000000000000000000000000000000000000000..341bdc9e85eb3010b96183cea971c34ee3642a36 GIT binary patch literal 1060 zcmaJ=OHUI~6dqGlf+cK}fM}cyM3m5Z^#Pr~;sV!dVvNR}B#L5uL=xi0g)Dsi0F5j(#yH+7ZE<0}nYoXX@B7ZV=bU?SJaw?O zWoHY9VXetAK8@C9_ix^U=4Wk>E~BLr#{*Kx_<)4BLh%6#>L^U{cYd#FvG~1g^+Y;#g3i1tSIu%Gitv zCT3C@X{IQJWny>;kJua%PyrNiTb$I)`Vhirl{F~ZKF#W`De%COOvQkTuHmktnA4|Wlt7WLUqLnMvYJ&* z6G|9miw4Dzw0or*P!RqPRn~jDOxXZb8d&L}76Cr$`AWDkn8unKhg1{v;3yPWql6;gv8lCSAymDzyX&ejP zP_N3B8^^*lzt!K+ZTV};l1}>e(&|Z&aZ$oo}M9o(@n3Z<-n&0iyhytKJ_~9V|T(2%bx3P z_uC39D_gsqu412ax~%neI1B#G%NG_t?&&d$wkTh2Fiu6=&<*4Z^b<@MhAb?eFwT54*hF}iRlvYOi6?!Mb(JjLG~J%08N DF{fDh literal 0 HcmV?d00001 diff --git a/src/main/resources/8x8/vanillafox.png b/src/main/resources/8x8/vanillafox.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b5d5d8eb51f68571d67d783042bc45fc4a2f8f GIT binary patch literal 1353 zcmV-P1-AN$P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywmg^`C{MRaG2?!8^wmurIhtv~Mdq-EQQ+t7#SZO{$R7M(pVZbQy4J@02qdtUZ8(D%QzX~OU}`uW)_ zf>8xZXUR4PJ??RMaX{db%aH3H?a+Ai8ExGC^VreZ{S>^j_bGNJZ@s$@1(~o1gikTr zdY0$0n-RK2#Fyv07kE;0d)>sY_ZoX|YjxQNL@Ll;)W=e04+9T`(#>fBP4O4>b+&{S zvBUz#D%d>G3UOkKXm|EpIdkVWW#Iyd-Zra{))wogE;_Zz7Plxs<8BqiRB{nq6|m-@ zwkH;ze$(_YMD0wLUYOl8J* zHoD0hb3?2HgEGS$vA}GOW#SONa?4Gg9ma|AWY*STt=j-X1m6NM$YswauoDi9N@0~5 zag5+61G#nH9$7;up8hTbCl;;D|V?-T0n%j;1twg>wqlp1^J^sB8Rd# z@gyQaRH7uw!37^AgrH&6sH{%CiUw7UnlwijeUuoY#u!t~$tH&qCMhJP6jMq$!)b=; zjM*6@az5m)9$N6<9$-H=R%6`-^ zyRazJvUw)y)r%pKc(S?$xil@CSCU@6aIJs4;#)~G1POH-4^lE{KH(tGrnUx6e00@vi>LK=q@@)ukBH96Zy=-ZApa?{6{F~v&yI3hFD!W_k2;ji@8V5=K*%#0 z!U{sQekBV%$)2A8IVHUbuzsLm#CPz9oKf0DgJ?0UKT5-or*0xIe*mAD7GZLxl`G%=kk3 zVJ)G{hFd_98^5kczsGUGpzm>L$LCd|{{e5ni~krwok0Kq00v@9M??Vs0RI60puMM) z00009a7bBm000id000id0mpBsWB>pF2XskIMF-;v2n-7k?(wuN0001(NklCQtMt)Be=;LSGlhhqRv(T-#_u_rJ4PypKA;A`TR8~}I&WE3+`Hqh zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvvg{@d{bvu*3Ts_759sTg>o9TAGWz~) z9D-2O0|oxwfI!dg>Bge#Z*9bWcFQ=*;yyv_J^86;m1U z9hZ9K&GjIb!Jv#Vdu%XXX_`nvC%1U;%+Qm|sB4x6xv~r(MDQ&DLktEkODtsRa#}kg z#LRPZ5$7~wR+ zbj0cijTn70QvZ3v9J&Hxfx zcg`-4UavcIowF-w6oqK8M$*YC)ENVVrjnLMo4do@FL_g9{uOWfC+1YA?*Cv;b?O## zUwQk6wGzjP!h@h*g*~PhH#D}yM#xA%S?1_M?h}$41DeK?3Ltx+&LFW*P~5f;u^(ko zt9$Ys&C2kS(_$y!Rf%N)ZVK#V2ZoBrP%Oa4XxzdbL#Z z<}SL4)oZ}rs#Q$`+3w|LIyZjrGq-8593MghYAPtb8CZotW?9m}XbZ1h-XqJ*|WaIa46NIv%CJx zEK`dENZn}AxdzCXv%kIPI%UG{#~quwsM8cy%d%nHX^T!ay>spwTTl|Oji8!Y zmNl{7E_uq(yz)E$cgSfbWYQy z@KrjJ6)I-$TqZ@)A0q483l5LGO%~ZTSZEFNqm)#= z1A%{RKT@(@DjJ~y_%Bjp(gj2-6l;}nbp6y*tDC)pA4OT~LV`bj{tM`mIPb2_c-_Na zboDnrV)I8R;NyD$000JJOGiWi{{a60|De66lK=n!32;bRa{vGi!vFvd!vV){sAK>D z00(qQO+^Re2?z`hC#Ey#lK=n!|4BqaR2b6*!B0!VU;x13-?lg1Z0b!a238PMP?wS* z>Qcg>Q(qv2?tP8G56~y**0BORbXF({)DRH@Er}#DG%+WpoZ#Vad^DGIO^wp*;lshfQ9z@uh n9;<75tUida`(58|%0l@cb{=OGxF*Gr00000NkvXXu0mjf3qNDj literal 0 HcmV?d00001 diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index baeff26..ff8ee3c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -76,6 +76,13 @@ mobs: pufferfish: true tropicalfish: true vanillaturtle: true + vanillafox: true + panda: true + wandering_trader: true + tradderllama: true + pillager: true + illusioner: true + ravager: true parrot: true horse: false fireogre: false diff --git a/src/main/resources/illusioner.png b/src/main/resources/illusioner.png new file mode 100644 index 0000000000000000000000000000000000000000..7dfa79970d5b21b722224fd3e02683f92650781e GIT binary patch literal 2255 zcmV;=2r&1FP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bN{A#=5;dm(=ikHp3m;}1jnfc)^4{X(l1rR1h<1I}oveGl_YZppA9iyeFie8G zte?Jb{|vjnCIq+b<vw7R)lL}+~cJN;u zZ9D0gUG6gct=d`n<3Y?e*!RyHcVo0TMqj(j&Vwm$_NLBOo)H`isFY`##})9W7>DOd zxFWV#p;&{O1y?nch{5(CM~yNK>d(DW1w_Z41MbX~<*`KxoVd!802d7o5T+T4(5gZ; zftfEBde%+PdX*wpZUj#z1S8D&ahczY|I2j)jWJV~$i~YRaPiD(z?jO-Z+Jlv8k82&>XSBY|9E!lwP?dkIn)=wa(a88Wh?N0E)1-0t^Whu%1N8lMT#) z2s}pUlYyMYae)G)%8kr`HXCAz55#}H#oF(*!f7N*IkU{Xve<%~r$ zLTAj*@W{Dvk>ZLLUqXo`m0XcN)m5#&h8kOlC`l%XyDfic^(N=9L<{rQBQVr%1P6(RqM5ks@j2%JoFcm;T z^VG~na*n5RQ!|?wMWGDUNT)cBreaXgbz&WKwRwU(a~MIM1>6;4jA3^X=4^q3hf(GHjAfJ;v>SNr@xOZ*#m^LHJ8yGw2UfiO}r z(qrWdD82z|*B|UX=45+gdd4{>v1=n8Y+E(UnQU=NPUp$F?yS$q+O!NaSJu1$NlJUH zZZ_rKrl&!ngxNKoS=9Y_JVI@0ICr9kyy7Zsp^kXn;|d7fO~_W|qK&#X(Fp0176F-^ z9^BtBd2Je5V5VOjgesh}ilzZE?cMY~sPZLwLCIKScQ_>z-vk)?J@ zIl7e%2z0q!gW%CXH7va{U`pBrSTmaHtGDcy)0|YiUzr83Yw9V{)|l)W1b>TZkJ9N* zDZV&|+tZKm77^Fe`Ak36fBr?;c_l9pMUvk@%LHmJ($hc$4OCj)4C9y^QdWaV1X}fw z)7`3-Qeww+v%7u5v2mM7Etd)6oqzFCm0kDJi`?!r<|DJ30bVins8+XZ!_^_N>&C|Q zJtxvDC-6$_X$2~^O1rzmNnK8$aU(=r*U+?(s%93-n}qzQ>80 z#YV_3peozyO5J0Nx3%IGVOcXhd3#Twc}SHL)3jUL?jSu~n)pY8=kl4GfL>N!nhEgu z>pi=LUg_Dta`^WYHjUqMn8(F%80~z}lv6vJ4r}AZn%P@SCqgS{WA5(fcKnn#T?vQM z$%%(8XO5Gvi|7^u(l9TD0#gH`3$y=(c`Dmz{O(?*eM9Oke}nVkrF>YYNYGTPKW!6l zp;!0eZxY^x|8(L6Q~TPfu>EfTSHmm|o74Dxz@J58!NB;pMNlEBnn!MNqq=ZNtlo)A`lGk_8yLS%N@~SNUk{d4fz0ZArzx(|X z0NE#RJ^~Nc2-eGvjs*!9CT|vr#DE`#$Hnc@!RD z7!rmd3Xk*LJihO2qeA(M03`3R|rV&=tXfyyA9!#>lFwLiOnOeP$ zloA`67(h5kDXHx2aBz6Y_(+9ttAcP>B%`%cnv$?fJyWJ)T0<7s=rhstzervl_ zVt;?1AP4}c*XwMTO8qU7^kPNqs57M$TI-%5l}eFLr~hdMtu;z1Y)75-QZVx9u`&1F z+SmZOuDj?s&LV&iq70O~b7e8cVC2y=fCNCbT4ic#s_&&2tE+3k%ir5quh-Yt;^(zm djhUGlegV+LAZ~20xmy4L002ovPDHLkV1gOYMXmq< literal 0 HcmV?d00001 diff --git a/src/main/resources/panda.png b/src/main/resources/panda.png new file mode 100644 index 0000000000000000000000000000000000000000..b5203d43d1daa37db47553207052f6b6034e2f03 GIT binary patch literal 2129 zcmV-X2(I^uP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@mLn$&{Ld+J1Oy1dacDl?%MEh;6g0wi&+KNi ziF<6YnwCUWNq9{E>(62Sz{}a3Okhbd$7t~iIb>HbN%nr-BiXP%_ZO>^54$-x984ag zzrV)5*B99N^?-zJzdr3o>h_biBlWx;`We|_ve%{U$h+H4`@6~exf0&Cv){EZ7nZiu z=l380qcM!$8P`4R_)Ig3M+QFog7N-LZdwB7gu4Z^@I7|sOdsH#*#kRUw%vb1VQkzB z;sc{?C;lG0h0udFjr?(gsulbGdc$svmd5D!?n;P2Dw@41-O8F_;RPuDdMx4+ycu&@ zSH_jF#R|q6*t~F6Lzx`V9u%lip+S9(l`2vUt~O{yORs8xOv5^ln}WQRyu;S$={dDd}sWf>o^)?N|(r{gB9{}Q-DZgGB-c53WU(u znDWARUFJPq-_U)2(cN-kOu=cl4pu! z#W^7YjtTq}WbS-$7Z@OB*T@WT<9!4vV|Sa;T0jK*=mpfEbU;=J4E;z* z&`@E|!7y`V;l!Cs^f5$^F-n|0s)&~$EKx*~WGTs~kT}I8DW#lBcG;taagJF`PC4gN z5VXK`!P5mRO1a$SuW<1dFS*i{uTmkO8Y8a;l2DCQ(2!lr)GSbMS9M(3gpRCb?xu3H}o3+VUSnK4)8q6ZsiG%$Z5u|G}J@ z)NSUz^7ajDt*jHpFM?(jPE4&IXlz(iT*4pv@$Zl3zc}!n>YA1s3dS4w$qOzODB z!RQ!zcZ7W7ZKITak}!u4)suMM+55VgLC4M4Q5l^wNTM#enOAY}vm}ootZvI|T1Tn< zUQF5au~maDXL-n9a#1;S>-R2I=47?~5CWM`^=!SrRbM-e;wFyulRA7=fip|Y&QjTMLCFV|I($q6+6Nv5;5A&hFQuOY1>dl?I)*t$>ljs%< z{)3GE3xvI>%uE+!BN{~*=e(wS zPR5HArJz-~^T(>U)SMpKE-N&|kGeRJ%4x`_n-^_svrm{E@o2q@=y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G` z2jd9{3=Av-*Hf7Q00MFThNS&NInV8sFCc41N044;)1P7DrwM8Q3+T%*E->*YS)PNK3_9kzh z_wzoKoX$Y^pH}bm}Xoy8ujZDiKgkB zXJ_`)+W@8+|J-a|&a~TYgb?U@0NwXnoS#<-2Jg|;bq`I`{~Oo$eH^DoyWJuX=;{DG z&n1(2%;Mq;q?8zjkxZph%eMjc_xF>IfI;yHNJv~V_yGCDsFQt-2wOXNCtxzgi^!4|W z&8{&$J&CHS=z2%?4dvl*n6=eqY`e_X))oK*0}<9%m+9&0xgl2lyE!~O!m=zfnGA_U zoLufbx!ijai8z@|2FtQIJUsdbpaFDu8%8ub@M>!631eepL?RJ{5Cnr7sni$~6B8JQ zf$O@cDwNA*YBgu0(Wp5(!20@1CyuHS2P$-1&w+IAuMn^|UCPx66 zn|t1IFg!er@B5U?60dRi)3*W!ObzOqNAd$%6ABn|c5!)_1z#Aci z^gNG7!{zewlA)mp0JdF5Q4~DSLkPj?=}!f4ip3(zUEldP^VuP~t6}_@00000NkvXX Hu0mjfbdeq1 literal 0 HcmV?d00001 diff --git a/src/main/resources/pillager.png b/src/main/resources/pillager.png new file mode 100644 index 0000000000000000000000000000000000000000..e176c6e3c7f0e3f4200cdac5c0215560ef5635fc GIT binary patch literal 1062 zcmaJ=O-$2J950{=5D3JX7&I}@q6r$;u7h>1Ve+wVQep`iOISSFwGY-nKWHCrgM-4s zzzruR9=sU!qDByd7h@n^3@RqzLE=RYWEV|H%$9#sEr579=_pBLRV+NrNy7B_%Vm0$T~9 z;R1$M>In)sdkN7 zuy3p+OnmZNHuieC`t)q6a`5f>0Sz&xi72R zg)-rS(P_z~8Or0NR0N9R|Dl?;kG4@19>n`kVLO&FAsvObF>1-UaRZHxE0YUZP(p?k zGmPP46?>BgGVG*bf>0j|nnX!fb;ocv&k#jU&}}5?G8FhAi8UxyRXB#d5axXzZ@4oO zVwf=7>4`95-tUiiBYt1N&lb77A&+WMM@6o3z-=zcb%sGRv1cAy>NTiDEJFkNq&c;8 zES{2j1+G#$7N#VZ#=+1|YyWC>(S+y6+3pW6KJ1S^)bYGqc(8x|SiOxe#a)5#h^4p7hVX zd9=8=II*?6{dHpN_4sbnlv=s5biHlnsLK^{J)fTkZL`U_GO$dzexIw^-grPcH&+Pv K@XtE0PW}NZ^kT^X literal 0 HcmV?d00001 diff --git a/src/main/resources/ravager.png b/src/main/resources/ravager.png new file mode 100644 index 0000000000000000000000000000000000000000..7f05ac26c0e388ae4e9c79777bff7142cae502ff GIT binary patch literal 2178 zcmV-|2z~d7P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>a`QM2{LfR&5eR?}@Hl){?G5($(-J}1aguLq zrq+rrnj-P&2AYnW|NYN$f8oW%-i4Som6SYQp@hN}1NHm0@8rY%X%y+_*HW8RNG zzlRJkMua_K$5Ti=KK1egP7sK1xp8O zf@ywYq1$h{{dH1!9)y)lFh!J_N@7AC^%m5&Q?}%VXz<^IAkrIl5 zITHa#1wR#$vjlEnfMVo9Zh;$-1ai;~@Qpp0?zJ3wPeWQjM3f{M)Sz`hRtORGlY^p$ zYLpmUj4{O=HI`VDq>y4tDW^-LYL*;w%qi!rx#X&%L8B(ks#>%bE&>UQC6(-omQrek z(+blSyDL`I+PFyzEw70)Vy5uBYoPjY81jh5l z01BEf&b(3xd@*-%<_n`KB7-%G7deA2#=u~h#BtHX-HW+D^5$arN4)WG%(;uY{|9sK zqRyE6&f5>Hje4IbaualQ;f1M}1!2R2sg<=}XVSi}9IpWa5}{<1Y6DD13i#`d_K#CTQXk}-p~p1#HYyPCZD0043%hPZl`fkW==@`ZztI^UIz=pq;p?SGm$Rg? zTDU$o!@&;=@*(Jn+8>PL_8nqz*{Y)>w7m|la6J9*;L?T)r64lZ-Ls90A=9{@{L^-U z1Nn^jMRzoNDOz+6l8`@3@k;f!1_9A+7=8UaqXqQ}LlHUTyb)R{FR*pKIE|LrMHRyv&VMFIGJGHAfajFVnz#mQ&mG zGZ`j5i6w-|y$?s?Y5ygA4&5o=y3;-FX(mtxJ{{stZG<=to)aPD-|F1JbZ>Qr01Z`o zpf5*B^21TuEJKUa8&2*Ea5<0DntB?*_w}fkyTfM)LkJgwTBMJuA&a8j;T zW-qbJRs_=YfZfhAJ*AiU5&v!tRO$D)+MR|2)zLH?XWcRl4t3c9q+O5TANKWiJQ$-X zHD^kDlo>V*Kdt9z47ofs|JJkk$FI`iR-gWta{%bB%7i8{;XjfV9ug?c`#7p87Ph!j zXa?fxb%c6KrA*`TOKW^>k(_pQL*gF5dF*`%lYZ5dSE|lR2fcp^ABU8w-btf!u%6YF z>1T;^?=4$5NVmj&$|Zj3?Pb>wGy^Wl=|i$}&8Kc^AL2N2Ty_QcC$+cQ$={^J`QP~b zhxdPPDC5@~{?~VZ16a7wZ1#Wc8~^|S24YJ`L;(K){{a7>y{D4^000SaNLh0L01m+b z01m+cxRGn^00007bV*G`2jd9{3q7dYJB^$Na=P!gTQ2qjUTkK=$z5=54Q5TtR;(e|#_1LPzt zPHIPs<-t2jNOTgBr50;4yuil~0*tjpjrv+3S?Ru$-D300*4OJ-hA&H3P6WjgelCaW z`ADfy%EghAs2vh_IxkRbLCXF8 zXa2<*;M4jVj~+i`bbO4-r<07I+ycj8Lwsa;X_*fj?^#-Sat4sUH&fHo6FQD2DhKs4;t9(%XGzOnkp4Q$dOw1(=*5k4Ma+6KVKV`pazFPA4X`ur32 zzwP0AE?OJ3v8Quw43(n_uB*_=Ux4FULzVIYu}zVVb2^W;rky1CQqXKi>RjOBPc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vf$Oz2z^NCM7;+1MHoK%2WtOF;xE1B+Du6w0m5IeImX;Qd z=BCaTIL(9VO~L6F3s;Bf2b&Ynjddm z@S&^e=6<`q2?>+GC%bSmPk3@sSNZ{4#Ba6*H%h)e2(-9;Q(sn^9C{Ybz(;ue7%#|3|)m+FgoaDxV>G%!?fSNX{GG!K7*Q{ zU-?~MDF*21-DjzHdh{Trxnt9($6LQ1Uw-{cH){g}GXra3j>Lv-VJkt!hNr8a%Q~lo FCIG~yoM!+4 literal 0 HcmV?d00001 diff --git a/src/main/resources/vanillafox.png b/src/main/resources/vanillafox.png new file mode 100644 index 0000000000000000000000000000000000000000..e50bc033e2e8350fd9ca3b15f44b0c141d50dca5 GIT binary patch literal 1385 zcmV-v1(y1WP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YwcH}Ay{MRaG2?!8^pXnq$ zO=4kLNQFukruP4To&Mlwjau@eF{BU-em?nRGbYjOzg@EN^SW-#WpbmZ6mve#orQdG#q-FVu%hAR2a_B~6i^;N!%aOCYp4UC4wJ!Us?X3UOrVGQ%>HWP| zB%=zH&XR2odR*g(;()*9_mQHT>;^i27iaX9LIlrFQ0N3MX&jsgUX!Q8mQ3WRW9IhC2; zIq0fx%oVW?49ZM%#0In3b{CuQSzB)M>|iIxli6Pl*18-ZMTji`!ww9Xz)mkBWfs% z6Hg)%L?ud+99-~0LI@g0kIL%Qt7uTws7Z5l(MO3PYK$?(oNRJvVUj{pN-?FBGlFKg z&RCsck@IFZxA{%Bu;~`JwB>^GDZWSvMN2HHQarN;TG0bK{0mYQ9MeOA#vw0@z)q^2Xc(P9mYH4~luOz*C;97sX<7-JX1qpo`H&QZaKH#9vrnUx6<()Hn zncs>gKBj89#lw5s(ykRQkBE-NA0VT5kiUy;&r$Sy%#L<+WzXer@rEoQmIx%RNNvvK?eB0XUIB}96_IE>3`PaJW0z6{j16{$+y{D4^ z000SaNLh0L01m?d01m?e$8V@)00007bV*G`2jd9{3<@K~GU<*0006m3L_t(I%VYfc z<;#BtB*4zY!^nUKpsQzMpb)UY7`tcp6Qu#B&Na1=Ixb*5ld15Zfq{WROqh`*jj!JR zr;ZB--T;;-FJNZ;V<09hV19?`qdXSaSor=kFfcHD{_u=}fq{YHWrr>U0|NsCtFQu! z!ryNnFfcGMFo;)NW?*1oVBi&yqH;Qb0qKIx3=9km4D#C6C<-55J<7nqz`*cyf-iMr rf${mx%P1}ol2*j4;oZ~w)O7&>&qp%Q;0^V>00000NkvXXu0mjfUYDBf literal 0 HcmV?d00001 diff --git a/src/main/resources/wandering_trader.png b/src/main/resources/wandering_trader.png new file mode 100644 index 0000000000000000000000000000000000000000..207ac2a47d4dcc2af8444e425ab6f63f9e420d58 GIT binary patch literal 2359 zcmV-73CQ+|P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxvLh!9{bvkJR{Z2l9_nkT9hw~2g;X7NE@84ZvY|;(s!$-<@ z@w@LX4}G9^-~9GPi#FTW*NgAw>^$e#*42>Usbtis+mwsK#s*jV>sZ2*@gG6w>nV5` zCJGSiK(pZyOeK1{##H5()W>$39ab@f!j>Zc+v?-FOBP0@OU% zbaZjoz2&-39OLHhu#+5wIh^?6G2fW~M>pMJoWI#zJnrV;2B%Q+*mQ z|6Y%Ii5vR@tOtVeax=rgYTFjkqI+V?UpRa0i#8a$Q^V!10^lOt9ifc#K)@#Fqf5?a zqU;>}$iSyUbMk>25O6V4cV+?`?-Rg5HsEfY$?n>VBD2{jEdV0=Hw?|BH||p zMhw;HV=yts6m#TQVog4U6jMq$tr}Ic&mqU0a?YGfuIxE*EBb&rgJa74mS`=BaArG z$b&~2bt2ZLpJB$CW}ZCDtOqqk^&K_$f!wcAbBfwREL{8YgBsX5-y+;9Cvjm0#3(o* zo)-cLXj+(Ab|KJ0ZeeB%At_M&p=Dg)bhi)#f?+s{(;e&{q>c<>5>ao%z!;juG>+Kb%lxkCiTnKgNJvw@@aMVB^Y+mB{mod zTkX{|f4u_kMG%5wpXG)A#X|ox`{pJKpIMK)zPN4lP0eVBw;wi;>DvcVKEL|eN>%l# zZ{L{Z2IfaC`ybUZzoW$Ote2pFR>{VfsN$^@3TsyMtxQubrM;uRRlrT42(7a;`O^-6F zMY}^L)=TYy3RSn1ghFRjMBMgOwku<=jp)>>&J*!P!)_plxgB<&WHeWhrH^ZA>h>g{ z-Z8=y6N6qFvQxuyfkuiLp}EOUOp7X~K5&~8(tW%oH29`8>N)kD!e%wxi%Q{~9@X6r zchlG7L90F!b~B`#ox&1jTpSE%$lT(pD@DepyCl?sOJQVv-q&zHE=W69L=YpFvm-$6 zJENme8fk7i#iA807Yy)6v8-{>GXjK_Z4fxRSweYH*zbEM`n1UQb8B{3FKyfaVeD2z zIwt>m+#P)tzV+rEEy5#czDGgGt-i3&j#l~zcOYehsbz1Q7+b3R5SqQYM}Mma^T>iZ z=)`viYFh|8P@#NBa&l6$GVoT5frwG;L%8E|%Fbf>+E3Vu+?u60p3 zi$|uAY8-0r=wxbHDcz>q7-(wRQXn4Nt2_ddDGLA>cbvt z9;2Z3-EAF;?}n4&wkv2s%^ahu91a`F~tP;J`CKUVBA}xHF*rX^9Xj0E< z4eo?=%y$bwZPdyh?9f4JqGFD0cY|E0C#@P>{6K@gJH^C6wn=1%FFJg+@W3|urc7EY zZ%qTAA|msSgS)=dOK6U!VZ0{ev}uE)1urq( zD00(qQO+^Re2?z`h8D~=UH~;_wQAtEWR5;6xlf6$DRb_m9oPmkB8*FGsR+{*i*=8BbDDgEh zC#kARpcZf}6Sv~xSO$JsIk#BYCc?21j#c-a0yvflfD#Iy3ouWLfA|9boA@^i01QmT zXM|%j713ysO8~^$Bw8-`05A-fU9D0tS~|SJz(jloSPlSKt~7{0NM}=#)?f-rg7#RD z)^-^Hy<9=g>$t9`MgA7TWv~u-*0lnFPqHbV*sQ4*YBQlQ}oa! zqL_wFMk$a|elmUMDdEx)tqm^$$kzb9{nfSg^xorQ{}}PWEcfl}j99%CkIHPcXe@^{ z9zJ+P^5X|02P>xmN~0fu_0?B=d%wZr-ZW0hV7s)9a0K0Eh(&#xHw$y5wzip>^n1s1 z<_>b{FC1sJYOG?Q3mpJ|PD0LCNTpZV+1Z83Gk1_pmjQ{r?^|RN2LLpT45D>i`Mnlbd?q zNkJgIBDql+1xCI1nt(L`$tRKA)af4z&DTd5dAtem Date: Mon, 9 Sep 2019 13:49:12 +0200 Subject: [PATCH 5/9] improved support for 1.14.x (villager professions, rideable mobs...) --- build.gradle | 26 ++++++ settings.gradle | 1 + .../org/dynmap/mobs/DynmapMobsPlugin.java | 81 +++++++++++++++++-- 3 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 build.gradle create mode 100644 settings.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..586e658 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +apply plugin: 'java' +apply plugin: 'maven' + +group = 'dynmap-mobs' +version = '1.5-gabsoftware' + +description = "Unofficial build with 1.14 support" + +sourceCompatibility = 1.6 +targetCompatibility = 1.6 +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + + + +repositories { + + maven { url "http://hub.spigotmc.org/nexus/content/groups/public/" } + maven { url "http://repo.mikeprimm.com/" } + maven { url "https://repo.maven.apache.org/maven2" } +} +dependencies { + compile group: 'org.bukkit', name: 'bukkit', version:'1.14.4-R0.1-SNAPSHOT' + compile group: 'us.dynmap', name: 'dynmap-api', version:'3.0-SNAPSHOT' +} diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..9989278 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'dynmap-mobs' diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index e15e050..dfd799e 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -347,8 +347,8 @@ else if(mobs[i].mobid.equals("wolf")) { /* Check for tamed wolf */ } } } - else if(mobs[i].mobid.equals("ocelot")) { /* Check for tamed ocelot */ - Ocelot cat = (Ocelot)le; + else if(mobs[i].mobid.equals("cat")) { /* Check for tamed cat */ + Cat cat = (Cat)le; if(cat.isTamed()) { i = findNext(i, "cat"); AnimalTamer t = cat.getOwner(); @@ -357,33 +357,100 @@ else if(mobs[i].mobid.equals("ocelot")) { /* Check for tamed ocelot */ } } } + else if(mobs[i].mobid.equals("horse")) { /* Check for tamed cat */ + Horse horse = (Horse)le; + if(horse.isTamed()) { + i = findNext(i, "horse"); + AnimalTamer t = horse.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "Horse (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } + else if(mobs[i].mobid.equals("traderllama")) { /* Check for tamed cat */ + TraderLlama traderllama = (TraderLlama)le; + if(traderllama.isTamed()) { + i = findNext(i, "traderllama"); + AnimalTamer t = traderllama.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "TraderLlama (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } + else if(mobs[i].mobid.equals("llama")) { /* Check for tamed cat */ + Llama llama = (Llama)le; + if(llama.isTamed()) { + i = findNext(i, "llama"); + AnimalTamer t = llama.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "Llama (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } + else if(mobs[i].mobid.equals("parrot")) { /* Check for tamed cat */ + Parrot parrot = (Parrot)le; + if(parrot.isTamed()) { + i = findNext(i, "parrot"); + AnimalTamer t = parrot.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "Parrot (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } else if(mobs[i].mobid.equals("villager")) { Villager v = (Villager)le; Profession p = v.getProfession(); if(p != null) { switch(p) { - case BLACKSMITH: - label = "Blacksmith"; + case NONE: + label = "Villager"; + break; + case ARMORER: + label = "Armorer"; break; case BUTCHER: label = "Butcher"; break; + case CARTOGRAPHER: + label = "Cartographer"; + break; + case CLERIC: + label = "Cleric"; + break; case FARMER: label = "Farmer"; break; + case FISHERMAN: + label = "Fisherman"; + break; + case FLETCHER: + label = "Fletcher"; + break; + case LEATHERWORKER: + label = "Leatherworker"; + break; case LIBRARIAN: label = "Librarian"; break; + case MASON: + label = "Mason"; + break; case NITWIT: label = "Nitwit"; break; - case PRIEST: - label = "Priest"; + case SHEPHERD: + label = "Shepherd"; + break; + case TOOLSMITH: + label = "Toolsmith"; + break; + case WEAPONSMITH: + label = "Weaponsmith"; break; } } } - else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("donkey") || mobs[i].mobid.equals("mule") || mobs[i].mobid.equals("zombiehorse") || mobs[i].mobid.equals("skeletonhorse")) { /* Check for rider */ + else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("llama") || mobs[i].mobid.equals("traderllama") || mobs[i].mobid.equals("donkey") || mobs[i].mobid.equals("mule") || mobs[i].mobid.equals("zombiehorse") || mobs[i].mobid.equals("skeletonhorse")) { /* Check for rider */ if(le.getPassenger() != null) { /* Has passenger? */ Entity e = le.getPassenger(); if (e instanceof Player) { From 61e02ccfb5b2f9fd5bb75a780dae9e728a966294 Mon Sep 17 00:00:00 2001 From: Gabriel Hautclocq Date: Mon, 9 Sep 2019 13:56:05 +0200 Subject: [PATCH 6/9] comments --- src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index dfd799e..4d61462 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -357,7 +357,7 @@ else if(mobs[i].mobid.equals("cat")) { /* Check for tamed cat */ } } } - else if(mobs[i].mobid.equals("horse")) { /* Check for tamed cat */ + else if(mobs[i].mobid.equals("horse")) { /* Check for tamed horse */ Horse horse = (Horse)le; if(horse.isTamed()) { i = findNext(i, "horse"); @@ -367,7 +367,7 @@ else if(mobs[i].mobid.equals("horse")) { /* Check for tamed cat */ } } } - else if(mobs[i].mobid.equals("traderllama")) { /* Check for tamed cat */ + else if(mobs[i].mobid.equals("traderllama")) { /* Check for tamed traderllama */ TraderLlama traderllama = (TraderLlama)le; if(traderllama.isTamed()) { i = findNext(i, "traderllama"); @@ -377,7 +377,7 @@ else if(mobs[i].mobid.equals("traderllama")) { /* Check for tamed cat */ } } } - else if(mobs[i].mobid.equals("llama")) { /* Check for tamed cat */ + else if(mobs[i].mobid.equals("llama")) { /* Check for tamed llama */ Llama llama = (Llama)le; if(llama.isTamed()) { i = findNext(i, "llama"); @@ -387,7 +387,7 @@ else if(mobs[i].mobid.equals("llama")) { /* Check for tamed cat */ } } } - else if(mobs[i].mobid.equals("parrot")) { /* Check for tamed cat */ + else if(mobs[i].mobid.equals("parrot")) { /* Check for tamed parrot */ Parrot parrot = (Parrot)le; if(parrot.isTamed()) { i = findNext(i, "parrot"); From 41ed0535a9cf6088bd3775ba5dfafec8b8571474 Mon Sep 17 00:00:00 2001 From: Gabriel Hautclocq Date: Tue, 10 Sep 2019 12:38:53 +0200 Subject: [PATCH 7/9] improved compatibility (#2) * Minecraft 1.14.x mobs compatibility * improved support for 1.14.x (villager professions, rideable mobs...) * comments --- build.gradle | 26 ++++++ settings.gradle | 1 + .../org/dynmap/mobs/DynmapMobsPlugin.java | 81 +++++++++++++++++-- 3 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 build.gradle create mode 100644 settings.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..586e658 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +apply plugin: 'java' +apply plugin: 'maven' + +group = 'dynmap-mobs' +version = '1.5-gabsoftware' + +description = "Unofficial build with 1.14 support" + +sourceCompatibility = 1.6 +targetCompatibility = 1.6 +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + + + +repositories { + + maven { url "http://hub.spigotmc.org/nexus/content/groups/public/" } + maven { url "http://repo.mikeprimm.com/" } + maven { url "https://repo.maven.apache.org/maven2" } +} +dependencies { + compile group: 'org.bukkit', name: 'bukkit', version:'1.14.4-R0.1-SNAPSHOT' + compile group: 'us.dynmap', name: 'dynmap-api', version:'3.0-SNAPSHOT' +} diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..9989278 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'dynmap-mobs' diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index e15e050..4d61462 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -347,8 +347,8 @@ else if(mobs[i].mobid.equals("wolf")) { /* Check for tamed wolf */ } } } - else if(mobs[i].mobid.equals("ocelot")) { /* Check for tamed ocelot */ - Ocelot cat = (Ocelot)le; + else if(mobs[i].mobid.equals("cat")) { /* Check for tamed cat */ + Cat cat = (Cat)le; if(cat.isTamed()) { i = findNext(i, "cat"); AnimalTamer t = cat.getOwner(); @@ -357,33 +357,100 @@ else if(mobs[i].mobid.equals("ocelot")) { /* Check for tamed ocelot */ } } } + else if(mobs[i].mobid.equals("horse")) { /* Check for tamed horse */ + Horse horse = (Horse)le; + if(horse.isTamed()) { + i = findNext(i, "horse"); + AnimalTamer t = horse.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "Horse (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } + else if(mobs[i].mobid.equals("traderllama")) { /* Check for tamed traderllama */ + TraderLlama traderllama = (TraderLlama)le; + if(traderllama.isTamed()) { + i = findNext(i, "traderllama"); + AnimalTamer t = traderllama.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "TraderLlama (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } + else if(mobs[i].mobid.equals("llama")) { /* Check for tamed llama */ + Llama llama = (Llama)le; + if(llama.isTamed()) { + i = findNext(i, "llama"); + AnimalTamer t = llama.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "Llama (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } + else if(mobs[i].mobid.equals("parrot")) { /* Check for tamed parrot */ + Parrot parrot = (Parrot)le; + if(parrot.isTamed()) { + i = findNext(i, "parrot"); + AnimalTamer t = parrot.getOwner(); + if((t != null) && (t instanceof OfflinePlayer)) { + label = "Parrot (" + ((OfflinePlayer)t).getName() + ")"; + } + } + } else if(mobs[i].mobid.equals("villager")) { Villager v = (Villager)le; Profession p = v.getProfession(); if(p != null) { switch(p) { - case BLACKSMITH: - label = "Blacksmith"; + case NONE: + label = "Villager"; + break; + case ARMORER: + label = "Armorer"; break; case BUTCHER: label = "Butcher"; break; + case CARTOGRAPHER: + label = "Cartographer"; + break; + case CLERIC: + label = "Cleric"; + break; case FARMER: label = "Farmer"; break; + case FISHERMAN: + label = "Fisherman"; + break; + case FLETCHER: + label = "Fletcher"; + break; + case LEATHERWORKER: + label = "Leatherworker"; + break; case LIBRARIAN: label = "Librarian"; break; + case MASON: + label = "Mason"; + break; case NITWIT: label = "Nitwit"; break; - case PRIEST: - label = "Priest"; + case SHEPHERD: + label = "Shepherd"; + break; + case TOOLSMITH: + label = "Toolsmith"; + break; + case WEAPONSMITH: + label = "Weaponsmith"; break; } } } - else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("donkey") || mobs[i].mobid.equals("mule") || mobs[i].mobid.equals("zombiehorse") || mobs[i].mobid.equals("skeletonhorse")) { /* Check for rider */ + else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("llama") || mobs[i].mobid.equals("traderllama") || mobs[i].mobid.equals("donkey") || mobs[i].mobid.equals("mule") || mobs[i].mobid.equals("zombiehorse") || mobs[i].mobid.equals("skeletonhorse")) { /* Check for rider */ if(le.getPassenger() != null) { /* Has passenger? */ Entity e = le.getPassenger(); if (e instanceof Player) { From 8a0786c514eb5f8db24156385c3c490267f5e442 Mon Sep 17 00:00:00 2001 From: gabsoftware Date: Tue, 10 Sep 2019 17:05:18 +0200 Subject: [PATCH 8/9] splitted mobs layer into Mo'Creatures, hostile and passive mobs layers --- .../org/dynmap/mobs/DynmapMobsPlugin.java | 897 ++++++++++++++---- src/main/resources/config.yml | 204 ++-- 2 files changed, 808 insertions(+), 293 deletions(-) diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index 4d61462..45c915c 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -30,7 +30,9 @@ public class DynmapMobsPlugin extends JavaPlugin { DynmapAPI api; MarkerAPI markerapi; FileConfiguration cfg; - MarkerSet set; + MarkerSet mset; + MarkerSet hset; + MarkerSet pset; MarkerSet vset; double res; /* Position resolution */ long updperiod; @@ -52,7 +54,9 @@ public class DynmapMobsPlugin extends JavaPlugin { int updates_per_tick = 20; int vupdates_per_tick = 20; - HashMap lookup_cache = new HashMap(); + HashMap mlookup_cache = new HashMap(); + HashMap hlookup_cache = new HashMap(); + HashMap plookup_cache = new HashMap(); HashMap vlookup_cache = new HashMap(); @Override @@ -106,113 +110,130 @@ public void init() { } } }; - MobMapping mobs[]; - - private MobMapping configmobs[] = { - // Mo'Creatures - new MobMapping("horse", "org.bukkit.entity.Animals", "Horse", "net.minecraft.server.MoCEntityHorse"), - new MobMapping("fireogre", "org.bukkit.entity.Monster", "Fire Ogre", "net.minecraft.server.MoCEntityFireOgre"), - new MobMapping("caveogre", "org.bukkit.entity.Monster", "Cave Ogre", "net.minecraft.server.MoCEntityCaveOgre"), - new MobMapping("ogre", "org.bukkit.entity.Monster", "Ogre", "net.minecraft.server.MoCEntityOgre"), - new MobMapping("boar", "org.bukkit.entity.Pig", "Boar", "net.minecraft.server.MoCEntityBoar"), - new MobMapping("polarbear", "org.bukkit.entity.Animals", "Polar Bear", "net.minecraft.server.MoCEntityPolarBear"), - new MobMapping("bear", "org.bukkit.entity.Animals", "Bear", "net.minecraft.server.MoCEntityBear"), - new MobMapping("duck", "org.bukkit.entity.Chicken", "Duck", "net.minecraft.server.MoCEntityDuck"), - new MobMapping("bigcat", "org.bukkit.entity.Animals", "Big Cat", "net.minecraft.server.MoCEntityBigCat"), - new MobMapping("deer", "org.bukkit.entity.Animals", "Deer", "net.minecraft.server.MoCEntityDeer"), - new MobMapping("wildwolf", "org.bukkit.entity.Monster", "Wild Wolf", "net.minecraft.server.MoCEntityWWolf"), - new MobMapping("flamewraith", "org.bukkit.entity.Monster", "Flame Wraith", "net.minecraft.server.MoCEntityFlameWraith"), - new MobMapping("wraith", "org.bukkit.entity.Monster", "Wraith", "net.minecraft.server.MoCEntityWraith"), - new MobMapping("bunny", "org.bukkit.entity.Animals", "Bunny", "net.minecraft.server.MoCEntityBunny"), - new MobMapping("bird", "org.bukkit.entity.Animals", "Bird", "net.minecraft.server.MoCEntityBird"), - new MobMapping("fox", "org.bukkit.entity.Animals", "Fox", "net.minecraft.server.MoCEntityFox"), - new MobMapping("werewolf", "org.bukkit.entity.Monster", "Werewolf", "net.minecraft.server.MoCEntityWerewolf"), - new MobMapping("shark", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityShark"), - new MobMapping("dolphin", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityDolphin"), - new MobMapping("fishy", "org.bukkit.entity.WaterMob", "Fishy", "net.minecraft.server.MoCEntityFishy"), - new MobMapping("kitty", "org.bukkit.entity.Animals", "Kitty", "net.minecraft.server.MoCEntityKitty"), - new MobMapping("hellrat", "org.bukkit.entity.Monster", "Hell Rat", "net.minecraft.server.MoCEntityHellRat"), - new MobMapping("rat", "org.bukkit.entity.Monster", "Rat", "net.minecraft.server.MoCEntityRat"), - new MobMapping("mouse", "org.bukkit.entity.Animals", "Mouse", "net.minecraft.server.MoCEntityMouse"), - new MobMapping("scorpion", "org.bukkit.entity.Monster", "Scorpion", "net.minecraft.server.MoCEntityScorpion"), - new MobMapping("turtle", "org.bukkit.entity.Animals", "Turtle", "net.minecraft.server.MoCEntityTurtle"), - new MobMapping("crocodile", "org.bukkit.entity.Animals", "Crocodile", "net.minecraft.server.MoCEntityCrocodile"), - new MobMapping("ray", "org.bukkit.entity.WaterMob", "Ray", "net.minecraft.server.MoCEntityRay"), - new MobMapping("jellyfish", "org.bukkit.entity.WaterMob", "Jelly Fish", "net.minecraft.server.MoCEntityJellyFish"), - new MobMapping("goat", "org.bukkit.entity.Animals", "Goat", "net.minecraft.server.MoCEntityGoat"), - new MobMapping("snake", "org.bukkit.entity.Animals", "Snake", "net.minecraft.server.MoCEntitySnake"), - new MobMapping("ostrich", "org.bukkit.entity.Animals", "Ostrich", "net.minecraft.server.MoCEntityOstrich"), - // Standard hostile - new MobMapping("elderguardian", "org.bukkit.entity.ElderGuardian", "Elder Guardian"), - new MobMapping("witherskeleton", "org.bukkit.entity.WitherSkeleton", "Wither Skeleton"), - new MobMapping("stray", "org.bukkit.entity.Stray", "Stray"), - new MobMapping("husk", "org.bukkit.entity.Husk", "Husk"), - new MobMapping("zombievillager", "org.bukkit.entity.ZombieVillager", "Zombie Villager"), - new MobMapping("evoker", "org.bukkit.entity.Evoker", "Evoker"), - new MobMapping("vex", "org.bukkit.entity.Vex", "Vex"), - new MobMapping("vindicator", "org.bukkit.entity.Vindicator", "Vindicator"), - new MobMapping("creeper", "org.bukkit.entity.Creeper", "Creeper"), - new MobMapping("skeleton", "org.bukkit.entity.Skeleton", "Skeleton"), - new MobMapping("giant", "org.bukkit.entity.Giant", "Giant"), - new MobMapping("ghast", "org.bukkit.entity.Ghast", "Ghast"), - new MobMapping("drowned", "org.bukkit.entity.Drowned", "Drowned"), - new MobMapping("phantom", "org.bukkit.entity.Phantom", "Phantom"), - new MobMapping("zombiepigman", "org.bukkit.entity.PigZombie", "Zombie Pigman"), - new MobMapping("zombie", "org.bukkit.entity.Zombie", "Zombie"), /* Must be last zombie type */ - new MobMapping("enderman", "org.bukkit.entity.Enderman", "Enderman"), - new MobMapping("cavespider", "org.bukkit.entity.CaveSpider", "Cave Spider"), - new MobMapping("spider", "org.bukkit.entity.Spider", "Spider"), /* Must be last spider type */ - new MobMapping("spiderjockey", "org.bukkit.entity.Spider", "Spider Jockey"), /* Must be just after spider */ - new MobMapping("silverfish", "org.bukkit.entity.Silverfish", "Silverfish"), - new MobMapping("blaze", "org.bukkit.entity.Blaze", "Blaze"), - new MobMapping("magmacube", "org.bukkit.entity.MagmaCube", "Magma Cube"), - new MobMapping("slime", "org.bukkit.entity.Slime", "Slime"), /* Must be last slime type */ - new MobMapping("enderdragon", "org.bukkit.entity.EnderDragon", "Ender Dragon"), - new MobMapping("wither", "org.bukkit.entity.Wither", "Wither"), - new MobMapping("witch", "org.bukkit.entity.Witch", "Witch"), - new MobMapping("endermite", "org.bukkit.entity.Endermite", "Endermite"), - new MobMapping("guardian", "org.bukkit.entity.Guardian", "Guardian"), - new MobMapping("shulker", "org.bukkit.entity.Shulker", "Shulker"), - new MobMapping("ravager", "org.bukkit.entity.Ravager", "Ravager"), - new MobMapping("illusioner", "org.bukkit.entity.Illusioner", "Illusioner"), - new MobMapping("pillager", "org.bukkit.entity.Pillager", "Pillager"), - // Standard passive - new MobMapping("skeletonhorse", "org.bukkit.entity.SkeletonHorse", "Skeleton Horse"), - new MobMapping("zombiehorse", "org.bukkit.entity.ZombieHorse", "Zombie Horse"), - new MobMapping("donkey", "org.bukkit.entity.Donkey", "Donkey"), - new MobMapping("mule", "org.bukkit.entity.Mule", "Mule"), - new MobMapping("bat", "org.bukkit.entity.Bat", "Bat"), - new MobMapping("pig", "org.bukkit.entity.Pig", "Pig"), - new MobMapping("sheep", "org.bukkit.entity.Sheep", "Sheep"), - new MobMapping("cow", "org.bukkit.entity.Cow", "Cow"), - new MobMapping("chicken", "org.bukkit.entity.Chicken", "Chicken"), - new MobMapping("chickenjockey", "org.bukkit.entity.Chicken", "Chicken Jockey"), /* Must be just after chicken */ - new MobMapping("squid", "org.bukkit.entity.Squid", "Squid"), - new MobMapping("wolf", "org.bukkit.entity.Wolf", "Wolf"), - new MobMapping("tamedwolf", "org.bukkit.entity.Wolf", "Wolf"), /* Must be just after wolf */ - new MobMapping("mooshroom", "org.bukkit.entity.MushroomCow", "Mooshroom"), - new MobMapping("snowgolem", "org.bukkit.entity.Snowman", "Snow Golem"), - new MobMapping("ocelot", "org.bukkit.entity.Ocelot", "Ocelot"), - new MobMapping("cat", "org.bukkit.entity.Cat", "Cat"), - new MobMapping("golem", "org.bukkit.entity.IronGolem", "Iron Golem"), - new MobMapping("vanillahorse", "org.bukkit.entity.Horse", "Horse"), - new MobMapping("rabbit", "org.bukkit.entity.Rabbit", "Rabbit"), - new MobMapping("vanillapolarbear", "org.bukkit.entity.PolarBear", "Polar Bear"), - new MobMapping("llama", "org.bukkit.entity.Llama", "Llama"), - new MobMapping("traderllama", "org.bukkit.entity.TraderLlama", "Trader Llama"), - new MobMapping("wandering_trader", "org.bukkit.entity.WanderingTrader", "Wandering Trader"), - new MobMapping("villager", "org.bukkit.entity.Villager", "Villager"), - new MobMapping("vanilladolphin", "org.bukkit.entity.Dolphin", "Dolphin"), - new MobMapping("cod", "org.bukkit.entity.Cod", "Cod"), - new MobMapping("salmon", "org.bukkit.entity.Salmon", "Salmon"), - new MobMapping("pufferfish", "org.bukkit.entity.PufferFish", "Pufferfish"), - new MobMapping("tropicalfish", "org.bukkit.entity.TropicalFish", "Tropical Fish"), - new MobMapping("vanillaturtle", "org.bukkit.entity.Turtle", "Turtle"), - new MobMapping("parrot", "org.bukkit.entity.Parrot", "Parrot"), - new MobMapping("panda", "org.bukkit.entity.Panda", "Panda"), - new MobMapping("vanillafox", "org.bukkit.entity.Fox", "Fox" ), + + MobMapping mocreat_mobs[]; + MobMapping hostile_mobs[]; + MobMapping passive_mobs[]; + MobMapping vehicles[]; + + private Map mocreat_mobicons = new HashMap(); + private Map hostile_mobicons = new HashMap(); + private Map passive_mobicons = new HashMap(); + private Map vehicleicons = new HashMap(); + + private MobMapping config_mocreat_mobs[] = { + // Mo'Creatures + new MobMapping("horse", "org.bukkit.entity.Animals", "Horse", "net.minecraft.server.MoCEntityHorse"), + new MobMapping("fireogre", "org.bukkit.entity.Monster", "Fire Ogre", "net.minecraft.server.MoCEntityFireOgre"), + new MobMapping("caveogre", "org.bukkit.entity.Monster", "Cave Ogre", "net.minecraft.server.MoCEntityCaveOgre"), + new MobMapping("ogre", "org.bukkit.entity.Monster", "Ogre", "net.minecraft.server.MoCEntityOgre"), + new MobMapping("boar", "org.bukkit.entity.Pig", "Boar", "net.minecraft.server.MoCEntityBoar"), + new MobMapping("polarbear", "org.bukkit.entity.Animals", "Polar Bear", "net.minecraft.server.MoCEntityPolarBear"), + new MobMapping("bear", "org.bukkit.entity.Animals", "Bear", "net.minecraft.server.MoCEntityBear"), + new MobMapping("duck", "org.bukkit.entity.Chicken", "Duck", "net.minecraft.server.MoCEntityDuck"), + new MobMapping("bigcat", "org.bukkit.entity.Animals", "Big Cat", "net.minecraft.server.MoCEntityBigCat"), + new MobMapping("deer", "org.bukkit.entity.Animals", "Deer", "net.minecraft.server.MoCEntityDeer"), + new MobMapping("wildwolf", "org.bukkit.entity.Monster", "Wild Wolf", "net.minecraft.server.MoCEntityWWolf"), + new MobMapping("flamewraith", "org.bukkit.entity.Monster", "Flame Wraith", "net.minecraft.server.MoCEntityFlameWraith"), + new MobMapping("wraith", "org.bukkit.entity.Monster", "Wraith", "net.minecraft.server.MoCEntityWraith"), + new MobMapping("bunny", "org.bukkit.entity.Animals", "Bunny", "net.minecraft.server.MoCEntityBunny"), + new MobMapping("bird", "org.bukkit.entity.Animals", "Bird", "net.minecraft.server.MoCEntityBird"), + new MobMapping("fox", "org.bukkit.entity.Animals", "Fox", "net.minecraft.server.MoCEntityFox"), + new MobMapping("werewolf", "org.bukkit.entity.Monster", "Werewolf", "net.minecraft.server.MoCEntityWerewolf"), + new MobMapping("shark", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityShark"), + new MobMapping("dolphin", "org.bukkit.entity.WaterMob", "Shark", "net.minecraft.server.MoCEntityDolphin"), + new MobMapping("fishy", "org.bukkit.entity.WaterMob", "Fishy", "net.minecraft.server.MoCEntityFishy"), + new MobMapping("kitty", "org.bukkit.entity.Animals", "Kitty", "net.minecraft.server.MoCEntityKitty"), + new MobMapping("hellrat", "org.bukkit.entity.Monster", "Hell Rat", "net.minecraft.server.MoCEntityHellRat"), + new MobMapping("rat", "org.bukkit.entity.Monster", "Rat", "net.minecraft.server.MoCEntityRat"), + new MobMapping("mouse", "org.bukkit.entity.Animals", "Mouse", "net.minecraft.server.MoCEntityMouse"), + new MobMapping("scorpion", "org.bukkit.entity.Monster", "Scorpion", "net.minecraft.server.MoCEntityScorpion"), + new MobMapping("turtle", "org.bukkit.entity.Animals", "Turtle", "net.minecraft.server.MoCEntityTurtle"), + new MobMapping("crocodile", "org.bukkit.entity.Animals", "Crocodile", "net.minecraft.server.MoCEntityCrocodile"), + new MobMapping("ray", "org.bukkit.entity.WaterMob", "Ray", "net.minecraft.server.MoCEntityRay"), + new MobMapping("jellyfish", "org.bukkit.entity.WaterMob", "Jelly Fish", "net.minecraft.server.MoCEntityJellyFish"), + new MobMapping("goat", "org.bukkit.entity.Animals", "Goat", "net.minecraft.server.MoCEntityGoat"), + new MobMapping("snake", "org.bukkit.entity.Animals", "Snake", "net.minecraft.server.MoCEntitySnake"), + new MobMapping("ostrich", "org.bukkit.entity.Animals", "Ostrich", "net.minecraft.server.MoCEntityOstrich") }; - private MobMapping configvehicles[] = { + + private MobMapping config_hostile_mobs[] = { + // Standard hostile + new MobMapping("elderguardian", "org.bukkit.entity.ElderGuardian", "Elder Guardian"), + new MobMapping("witherskeleton", "org.bukkit.entity.WitherSkeleton", "Wither Skeleton"), + new MobMapping("stray", "org.bukkit.entity.Stray", "Stray"), + new MobMapping("husk", "org.bukkit.entity.Husk", "Husk"), + new MobMapping("zombievillager", "org.bukkit.entity.ZombieVillager", "Zombie Villager"), + new MobMapping("evoker", "org.bukkit.entity.Evoker", "Evoker"), + new MobMapping("vex", "org.bukkit.entity.Vex", "Vex"), + new MobMapping("vindicator", "org.bukkit.entity.Vindicator", "Vindicator"), + new MobMapping("creeper", "org.bukkit.entity.Creeper", "Creeper"), + new MobMapping("skeleton", "org.bukkit.entity.Skeleton", "Skeleton"), + new MobMapping("giant", "org.bukkit.entity.Giant", "Giant"), + new MobMapping("ghast", "org.bukkit.entity.Ghast", "Ghast"), + new MobMapping("drowned", "org.bukkit.entity.Drowned", "Drowned"), + new MobMapping("phantom", "org.bukkit.entity.Phantom", "Phantom"), + new MobMapping("zombiepigman", "org.bukkit.entity.PigZombie", "Zombie Pigman"), + new MobMapping("zombie", "org.bukkit.entity.Zombie", "Zombie"), /* Must be last zombie type */ + new MobMapping("enderman", "org.bukkit.entity.Enderman", "Enderman"), + new MobMapping("cavespider", "org.bukkit.entity.CaveSpider", "Cave Spider"), + new MobMapping("spider", "org.bukkit.entity.Spider", "Spider"), /* Must be last spider type */ + new MobMapping("spiderjockey", "org.bukkit.entity.Spider", "Spider Jockey"), /* Must be just after spider */ + new MobMapping("silverfish", "org.bukkit.entity.Silverfish", "Silverfish"), + new MobMapping("blaze", "org.bukkit.entity.Blaze", "Blaze"), + new MobMapping("magmacube", "org.bukkit.entity.MagmaCube", "Magma Cube"), + new MobMapping("slime", "org.bukkit.entity.Slime", "Slime"), /* Must be last slime type */ + new MobMapping("enderdragon", "org.bukkit.entity.EnderDragon", "Ender Dragon"), + new MobMapping("wither", "org.bukkit.entity.Wither", "Wither"), + new MobMapping("witch", "org.bukkit.entity.Witch", "Witch"), + new MobMapping("endermite", "org.bukkit.entity.Endermite", "Endermite"), + new MobMapping("guardian", "org.bukkit.entity.Guardian", "Guardian"), + new MobMapping("shulker", "org.bukkit.entity.Shulker", "Shulker"), + new MobMapping("ravager", "org.bukkit.entity.Ravager", "Ravager"), + new MobMapping("illusioner", "org.bukkit.entity.Illusioner", "Illusioner"), + new MobMapping("pillager", "org.bukkit.entity.Pillager", "Pillager") + }; + + private MobMapping config_passive_mobs[] = { + // Standard passive + new MobMapping("skeletonhorse", "org.bukkit.entity.SkeletonHorse", "Skeleton Horse"), + new MobMapping("zombiehorse", "org.bukkit.entity.ZombieHorse", "Zombie Horse"), + new MobMapping("donkey", "org.bukkit.entity.Donkey", "Donkey"), + new MobMapping("mule", "org.bukkit.entity.Mule", "Mule"), + new MobMapping("bat", "org.bukkit.entity.Bat", "Bat"), + new MobMapping("pig", "org.bukkit.entity.Pig", "Pig"), + new MobMapping("sheep", "org.bukkit.entity.Sheep", "Sheep"), + new MobMapping("cow", "org.bukkit.entity.Cow", "Cow"), + new MobMapping("chicken", "org.bukkit.entity.Chicken", "Chicken"), + new MobMapping("chickenjockey", "org.bukkit.entity.Chicken", "Chicken Jockey"), /* Must be just after chicken */ + new MobMapping("squid", "org.bukkit.entity.Squid", "Squid"), + new MobMapping("wolf", "org.bukkit.entity.Wolf", "Wolf"), + new MobMapping("tamedwolf", "org.bukkit.entity.Wolf", "Wolf"), /* Must be just after wolf */ + new MobMapping("mooshroom", "org.bukkit.entity.MushroomCow", "Mooshroom"), + new MobMapping("snowgolem", "org.bukkit.entity.Snowman", "Snow Golem"), + new MobMapping("ocelot", "org.bukkit.entity.Ocelot", "Ocelot"), + new MobMapping("cat", "org.bukkit.entity.Cat", "Cat"), + new MobMapping("golem", "org.bukkit.entity.IronGolem", "Iron Golem"), + new MobMapping("vanillahorse", "org.bukkit.entity.Horse", "Horse"), + new MobMapping("rabbit", "org.bukkit.entity.Rabbit", "Rabbit"), + new MobMapping("vanillapolarbear", "org.bukkit.entity.PolarBear", "Polar Bear"), + new MobMapping("llama", "org.bukkit.entity.Llama", "Llama"), + new MobMapping("traderllama", "org.bukkit.entity.TraderLlama", "Trader Llama"), + new MobMapping("wandering_trader", "org.bukkit.entity.WanderingTrader", "Wandering Trader"), + new MobMapping("villager", "org.bukkit.entity.Villager", "Villager"), + new MobMapping("vanilladolphin", "org.bukkit.entity.Dolphin", "Dolphin"), + new MobMapping("cod", "org.bukkit.entity.Cod", "Cod"), + new MobMapping("salmon", "org.bukkit.entity.Salmon", "Salmon"), + new MobMapping("pufferfish", "org.bukkit.entity.PufferFish", "Pufferfish"), + new MobMapping("tropicalfish", "org.bukkit.entity.TropicalFish", "Tropical Fish"), + new MobMapping("vanillaturtle", "org.bukkit.entity.Turtle", "Turtle"), + new MobMapping("parrot", "org.bukkit.entity.Parrot", "Parrot"), + new MobMapping("panda", "org.bukkit.entity.Panda", "Panda"), + new MobMapping("vanillafox", "org.bukkit.entity.Fox", "Fox" ) + }; + + + private MobMapping config_vehicles[] = { // Command Minecart new MobMapping("command-minecart", "org.bukkit.entity.minecart.CommandMinecart", "Command Minecart"), // Explosive Minecart @@ -230,7 +251,7 @@ public void init() { // Boat new MobMapping("boat", "org.bukkit.entity.Boat", "Boat") }; - MobMapping vehicles[]; + public static void info(String msg) { log.log(Level.INFO, msg); @@ -239,7 +260,148 @@ public static void severe(String msg) { log.log(Level.SEVERE, msg); } - private class MobUpdate implements Runnable { + private class MoCreatMobUpdate implements Runnable { + Map newmap = new HashMap(); /* Build new map */ + ArrayList worldsToDo = null; + List mobsToDo = null; + int mobIndex = 0; + World curWorld = null; + + public void run() { + if(stop || mocreat_mobs == null || mocreat_mobs.length == 0 || mset == null ) { + return; + } + // If needed, prime world list + if (worldsToDo == null) { + worldsToDo = new ArrayList(getServer().getWorlds()); + } + while (mobsToDo == null) { + if (worldsToDo.isEmpty()) { + // Now, review old map - anything left is gone + for(Marker oldm : mocreat_mobicons.values()) { + oldm.deleteMarker(); + } + // And replace with new map + mocreat_mobicons = newmap; + // Schedule next run + getServer().getScheduler().scheduleSyncDelayedTask(DynmapMobsPlugin.this, new MoCreatMobUpdate(), updperiod); + return; + } + else { + curWorld = worldsToDo.remove(0); // Get next world + mobsToDo = curWorld.getLivingEntities(); // Get living entities + mobIndex = 0; + if ((mobsToDo != null) && mobsToDo.isEmpty()) { + mobsToDo = null; + } + } + } + // Process up to limit per tick + for (int cnt = 0; cnt < updates_per_tick; cnt++) { + if (mobIndex >= mobsToDo.size()) { + mobsToDo = null; + break; + } + // Get next entity + LivingEntity le = mobsToDo.get(mobIndex); + mobIndex++; + + int i; + + /* See if entity is mob we care about */ + String clsid = null; + if(gethandle != null) { + try { + clsid = gethandle.invoke(le).getClass().getName(); + } catch (Exception x) { + } + } + + if(clsid == null) + clsid = le.getClass().getName(); + Integer idx = mlookup_cache.get(clsid); + if(idx == null) { + for(i = 0; i < mocreat_mobs.length; i++) { + if((mocreat_mobs[i].mobclass != null) && mocreat_mobs[i].mobclass.isInstance(le)){ + if (mocreat_mobs[i].entclsid == null) { + break; + } + else if(gethandle != null) { + Object obcentity = null; + try { + obcentity = gethandle.invoke(le); + } catch (Exception x) { + } + if ((mocreat_mobs[i].entclass != null) && (obcentity != null) && (mocreat_mobs[i].entclass.isInstance(obcentity))) { + break; + } + } + } + } + mlookup_cache.put(clsid, i); + } + else { + i = idx; + } + if(i >= mocreat_mobs.length) { + continue; + } + + String label = null; + + if(i >= mocreat_mobs.length) { + continue; + } + if(label == null) { + label = mocreat_mobs[i].label; + } + + if (le.getCustomName() != null) { + label = le.getCustomName() + " (" + label + ")"; + } + + Location loc = le.getLocation(); + Block blk = null; + if(hideifshadow < 15) { + blk = loc.getBlock(); + if(blk.getLightLevel() <= hideifshadow) { + continue; + } + } + if(hideifundercover < 15) { + if(blk == null) blk = loc.getBlock(); + if(blk.getLightFromSky() <= hideifundercover) { + continue; + } + } + /* See if we already have marker */ + double x = Math.round(loc.getX() / res) * res; + double y = Math.round(loc.getY() / res) * res; + double z = Math.round(loc.getZ() / res) * res; + Marker m = mocreat_mobicons.remove(le.getEntityId()); + if(nolabels) { + label = ""; + } + else if(inc_coord) { + label = label + " [" + (int)x + "," + (int)y + "," + (int)z + "]"; + } + if(m == null) { /* Not found? Need new one */ + m = mset.createMarker("mocreat_mob"+le.getEntityId(), label, curWorld.getName(), x, y, z, mocreat_mobs[i].icon, false); + } + else { /* Else, update position if needed */ + m.setLocation(curWorld.getName(), x, y, z); + m.setLabel(label); + m.setMarkerIcon(mocreat_mobs[i].icon); + } + if (m != null) { + newmap.put(le.getEntityId(), m); /* Add to new map */ + } + } + getServer().getScheduler().scheduleSyncDelayedTask(DynmapMobsPlugin.this, this, 1); + } + } + + private class HostileMobUpdate implements Runnable { Map newmap = new HashMap(); /* Build new map */ ArrayList worldsToDo = null; List mobsToDo = null; @@ -247,7 +409,7 @@ private class MobUpdate implements Runnable { World curWorld = null; public void run() { - if(stop || (mobs == null) || (mobs.length == 0) || (set == null)) { + if(stop || hostile_mobs == null || hostile_mobs.length == 0 || hset == null ) { return; } // If needed, prime world list @@ -257,13 +419,13 @@ public void run() { while (mobsToDo == null) { if (worldsToDo.isEmpty()) { // Now, review old map - anything left is gone - for(Marker oldm : mobicons.values()) { + for(Marker oldm : hostile_mobicons.values()) { oldm.deleteMarker(); } // And replace with new map - mobicons = newmap; + hostile_mobicons = newmap; // Schedule next run - getServer().getScheduler().scheduleSyncDelayedTask(DynmapMobsPlugin.this, new MobUpdate(), updperiod); + getServer().getScheduler().scheduleSyncDelayedTask(DynmapMobsPlugin.this, new HostileMobUpdate(), updperiod); return; } else { @@ -298,11 +460,11 @@ public void run() { if(clsid == null) clsid = le.getClass().getName(); - Integer idx = lookup_cache.get(clsid); + Integer idx = hlookup_cache.get(clsid); if(idx == null) { - for(i = 0; i < mobs.length; i++) { - if((mobs[i].mobclass != null) && mobs[i].mobclass.isInstance(le)){ - if (mobs[i].entclsid == null) { + for(i = 0; i < hostile_mobs.length; i++) { + if((hostile_mobs[i].mobclass != null) && hostile_mobs[i].mobclass.isInstance(le)){ + if (hostile_mobs[i].entclsid == null) { break; } else if(gethandle != null) { @@ -311,93 +473,234 @@ else if(gethandle != null) { obcentity = gethandle.invoke(le); } catch (Exception x) { } - if ((mobs[i].entclass != null) && (obcentity != null) && (mobs[i].entclass.isInstance(obcentity))) { + if ((hostile_mobs[i].entclass != null) && (obcentity != null) && (hostile_mobs[i].entclass.isInstance(obcentity))) { break; } } } } - lookup_cache.put(clsid, i); + hlookup_cache.put(clsid, i); } else { i = idx; } - if(i >= mobs.length) { + if(i >= hostile_mobs.length) { continue; } String label = null; - if(mobs[i].mobid.equals("spider")) { /* Check for jockey */ + if(hostile_mobs[i].mobid.equals("spider")) { /* Check for jockey */ if(le.getPassenger() != null) { /* Has passenger? */ - i = findNext(i, "spiderjockey"); /* Make jockey */ + i = findNext(i, "spiderjockey", hostile_mobs); /* Make jockey */ + } + } + + if(i >= hostile_mobs.length) { + continue; + } + if(label == null) { + label = hostile_mobs[i].label; + } + + if (le.getCustomName() != null) { + label = le.getCustomName() + " (" + label + ")"; + } + + Location loc = le.getLocation(); + Block blk = null; + if(hideifshadow < 15) { + blk = loc.getBlock(); + if(blk.getLightLevel() <= hideifshadow) { + continue; + } + } + if(hideifundercover < 15) { + if(blk == null) blk = loc.getBlock(); + if(blk.getLightFromSky() <= hideifundercover) { + continue; + } + } + /* See if we already have marker */ + double x = Math.round(loc.getX() / res) * res; + double y = Math.round(loc.getY() / res) * res; + double z = Math.round(loc.getZ() / res) * res; + Marker m = hostile_mobicons.remove(le.getEntityId()); + if(nolabels) { + label = ""; + } + else if(inc_coord) { + label = label + " [" + (int)x + "," + (int)y + "," + (int)z + "]"; + } + if(m == null) { /* Not found? Need new one */ + m = hset.createMarker("hostile_mob"+le.getEntityId(), label, curWorld.getName(), x, y, z, hostile_mobs[i].icon, false); + } + else { /* Else, update position if needed */ + m.setLocation(curWorld.getName(), x, y, z); + m.setLabel(label); + m.setMarkerIcon(hostile_mobs[i].icon); + } + if (m != null) { + newmap.put(le.getEntityId(), m); /* Add to new map */ + } + } + getServer().getScheduler().scheduleSyncDelayedTask(DynmapMobsPlugin.this, this, 1); + } + } + + private class PassiveMobUpdate implements Runnable { + Map newmap = new HashMap(); /* Build new map */ + ArrayList worldsToDo = null; + List mobsToDo = null; + int mobIndex = 0; + World curWorld = null; + + public void run() { + if(stop || passive_mobs == null || passive_mobs.length == 0 || pset == null ) { + return; + } + // If needed, prime world list + if (worldsToDo == null) { + worldsToDo = new ArrayList(getServer().getWorlds()); + } + while (mobsToDo == null) { + if (worldsToDo.isEmpty()) { + // Now, review old map - anything left is gone + for(Marker oldm : passive_mobicons.values()) { + oldm.deleteMarker(); + } + // And replace with new map + passive_mobicons = newmap; + // Schedule next run + getServer().getScheduler().scheduleSyncDelayedTask(DynmapMobsPlugin.this, new PassiveMobUpdate(), updperiod); + return; + } + else { + curWorld = worldsToDo.remove(0); // Get next world + mobsToDo = curWorld.getLivingEntities(); // Get living entities + mobIndex = 0; + if ((mobsToDo != null) && mobsToDo.isEmpty()) { + mobsToDo = null; } } - else if(mobs[i].mobid.equals("chicken")) { /* Check for jockey */ + } + // Process up to limit per tick + for (int cnt = 0; cnt < updates_per_tick; cnt++) { + if (mobIndex >= mobsToDo.size()) { + mobsToDo = null; + break; + } + // Get next entity + LivingEntity le = mobsToDo.get(mobIndex); + mobIndex++; + + int i; + + /* See if entity is mob we care about */ + String clsid = null; + if(gethandle != null) { + try { + clsid = gethandle.invoke(le).getClass().getName(); + } catch (Exception x) { + } + } + + if(clsid == null) + clsid = le.getClass().getName(); + Integer idx = plookup_cache.get(clsid); + if(idx == null) { + for(i = 0; i < passive_mobs.length; i++) { + if((passive_mobs[i].mobclass != null) && passive_mobs[i].mobclass.isInstance(le)){ + if (passive_mobs[i].entclsid == null) { + break; + } + else if(gethandle != null) { + Object obcentity = null; + try { + obcentity = gethandle.invoke(le); + } catch (Exception x) { + } + if ((passive_mobs[i].entclass != null) && (obcentity != null) && (passive_mobs[i].entclass.isInstance(obcentity))) { + break; + } + } + } + } + plookup_cache.put(clsid, i); + } + else { + i = idx; + } + if(i >= passive_mobs.length) { + continue; + } + + String label = null; + if(passive_mobs[i].mobid.equals("chicken")) { /* Check for jockey */ if(le.getPassenger() != null) { /* Has passenger? */ - i = findNext(i, "chickenjockey"); /* Make jockey */ + i = findNext(i, "chickenjockey", passive_mobs); /* Make jockey , passive_mobs*/ } } - else if(mobs[i].mobid.equals("wolf")) { /* Check for tamed wolf */ + else if(passive_mobs[i].mobid.equals("wolf")) { /* Check for tamed wolf */ Wolf wolf = (Wolf)le; if(wolf.isTamed()) { - i = findNext(i, "tamedwolf"); + i = findNext(i, "tamedwolf", passive_mobs); AnimalTamer t = wolf.getOwner(); if((t != null) && (t instanceof OfflinePlayer)) { label = "Wolf (" + ((OfflinePlayer)t).getName() + ")"; } } } - else if(mobs[i].mobid.equals("cat")) { /* Check for tamed cat */ + else if(passive_mobs[i].mobid.equals("cat")) { /* Check for tamed cat */ Cat cat = (Cat)le; if(cat.isTamed()) { - i = findNext(i, "cat"); + i = findNext(i, "cat", passive_mobs); AnimalTamer t = cat.getOwner(); if((t != null) && (t instanceof OfflinePlayer)) { label = "Cat (" + ((OfflinePlayer)t).getName() + ")"; } } } - else if(mobs[i].mobid.equals("horse")) { /* Check for tamed horse */ + else if(passive_mobs[i].mobid.equals("vanillahorse")) { /* Check for tamed horse */ Horse horse = (Horse)le; if(horse.isTamed()) { - i = findNext(i, "horse"); + i = findNext(i, "vanillahorse", passive_mobs); AnimalTamer t = horse.getOwner(); if((t != null) && (t instanceof OfflinePlayer)) { label = "Horse (" + ((OfflinePlayer)t).getName() + ")"; } } } - else if(mobs[i].mobid.equals("traderllama")) { /* Check for tamed traderllama */ + else if(passive_mobs[i].mobid.equals("traderllama")) { /* Check for tamed traderllama */ TraderLlama traderllama = (TraderLlama)le; if(traderllama.isTamed()) { - i = findNext(i, "traderllama"); + i = findNext(i, "traderllama", passive_mobs); AnimalTamer t = traderllama.getOwner(); if((t != null) && (t instanceof OfflinePlayer)) { label = "TraderLlama (" + ((OfflinePlayer)t).getName() + ")"; } } } - else if(mobs[i].mobid.equals("llama")) { /* Check for tamed llama */ + else if(passive_mobs[i].mobid.equals("llama")) { /* Check for tamed llama */ Llama llama = (Llama)le; if(llama.isTamed()) { - i = findNext(i, "llama"); + i = findNext(i, "llama", passive_mobs); AnimalTamer t = llama.getOwner(); if((t != null) && (t instanceof OfflinePlayer)) { label = "Llama (" + ((OfflinePlayer)t).getName() + ")"; } } } - else if(mobs[i].mobid.equals("parrot")) { /* Check for tamed parrot */ + else if(passive_mobs[i].mobid.equals("parrot")) { /* Check for tamed parrot */ Parrot parrot = (Parrot)le; if(parrot.isTamed()) { - i = findNext(i, "parrot"); + i = findNext(i, "parrot", passive_mobs); AnimalTamer t = parrot.getOwner(); if((t != null) && (t instanceof OfflinePlayer)) { label = "Parrot (" + ((OfflinePlayer)t).getName() + ")"; } } } - else if(mobs[i].mobid.equals("villager")) { + else if(passive_mobs[i].mobid.equals("villager")) { Villager v = (Villager)le; Profession p = v.getProfession(); if(p != null) { @@ -450,7 +753,13 @@ else if(mobs[i].mobid.equals("villager")) { } } } - else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("llama") || mobs[i].mobid.equals("traderllama") || mobs[i].mobid.equals("donkey") || mobs[i].mobid.equals("mule") || mobs[i].mobid.equals("zombiehorse") || mobs[i].mobid.equals("skeletonhorse")) { /* Check for rider */ + else if(passive_mobs[i].mobid.equals("vanillahorse") + || passive_mobs[i].mobid.equals("llama") + || passive_mobs[i].mobid.equals("traderllama") + || passive_mobs[i].mobid.equals("donkey") + || passive_mobs[i].mobid.equals("mule") + || passive_mobs[i].mobid.equals("zombiehorse") + || passive_mobs[i].mobid.equals("skeletonhorse")) { /* Check for rider */ if(le.getPassenger() != null) { /* Has passenger? */ Entity e = le.getPassenger(); if (e instanceof Player) { @@ -459,11 +768,11 @@ else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("llama") || } } - if(i >= mobs.length) { + if(i >= passive_mobs.length) { continue; } if(label == null) { - label = mobs[i].label; + label = passive_mobs[i].label; } if (le.getCustomName() != null) { @@ -488,7 +797,7 @@ else if(mobs[i].mobid.equals("vanillahorse") || mobs[i].mobid.equals("llama") || double x = Math.round(loc.getX() / res) * res; double y = Math.round(loc.getY() / res) * res; double z = Math.round(loc.getZ() / res) * res; - Marker m = mobicons.remove(le.getEntityId()); + Marker m = passive_mobicons.remove(le.getEntityId()); if(nolabels) { label = ""; } @@ -496,12 +805,12 @@ else if(inc_coord) { label = label + " [" + (int)x + "," + (int)y + "," + (int)z + "]"; } if(m == null) { /* Not found? Need new one */ - m = set.createMarker("mob"+le.getEntityId(), label, curWorld.getName(), x, y, z, mobs[i].icon, false); + m = pset.createMarker("passive_mob"+le.getEntityId(), label, curWorld.getName(), x, y, z, passive_mobs[i].icon, false); } else { /* Else, update position if needed */ m.setLocation(curWorld.getName(), x, y, z); m.setLabel(label); - m.setMarkerIcon(mobs[i].icon); + m.setMarkerIcon(passive_mobs[i].icon); } if (m != null) { newmap.put(le.getEntityId(), m); /* Add to new map */ @@ -643,10 +952,9 @@ else if(vinc_coord) { } } - private Map mobicons = new HashMap(); - private Map vehicleicons = new HashMap(); - - private int findNext(int idx, String mobid) { + + + private int findNext(int idx, String mobid, MobMapping[] mobs) { idx++; if ((idx < mobs.length) && mobs[idx].mobid.equals(mobid)) { return idx; @@ -734,17 +1042,30 @@ private void activate() { /* Load configuration */ if(reload) { reloadConfig(); - if(set != null) { - set.deleteMarkerSet(); - set = null; + if(mset != null) { + mset.deleteMarkerSet(); + mset = null; + } + if(hset != null) { + hset.deleteMarkerSet(); + hset = null; + } + if(pset != null) { + pset.deleteMarkerSet(); + pset = null; } if(vset != null) { vset.deleteMarkerSet(); vset = null; } - mobicons.clear(); + mocreat_mobicons.clear(); + hostile_mobicons.clear(); + passive_mobicons.clear(); vehicleicons.clear(); - lookup_cache.clear(); + mlookup_cache.clear(); + hlookup_cache.clear(); + plookup_cache.clear(); + vlookup_cache.clear(); } else { reload = true; @@ -754,62 +1075,62 @@ private void activate() { cfg.options().copyDefaults(true); /* Load defaults, if needed */ this.saveConfig(); /* Save updates, if needed */ - /* Now, check which mobs are enabled */ + /* Now, check which mo'creatures mobs are enabled */ Set> clsset = new HashSet>(); int cnt = 0; - for(int i = 0; i < configmobs.length; i++) { - configmobs[i].init(); - configmobs[i].enabled = cfg.getBoolean("mobs." + configmobs[i].mobid, false); - configmobs[i].icon = markerapi.getMarkerIcon("mobs." + configmobs[i].mobid); + for(int i = 0; i < config_mocreat_mobs.length; i++) { + config_mocreat_mobs[i].init(); + config_mocreat_mobs[i].enabled = cfg.getBoolean("mocreat_mobs." + config_mocreat_mobs[i].mobid, false); + config_mocreat_mobs[i].icon = markerapi.getMarkerIcon("mocreat_mobs." + config_mocreat_mobs[i].mobid); InputStream in = null; if(tinyicons) - in = getClass().getResourceAsStream("/8x8/" + configmobs[i].mobid + ".png"); + in = getClass().getResourceAsStream("/8x8/" + config_mocreat_mobs[i].mobid + ".png"); if(in == null) - in = getClass().getResourceAsStream("/" + configmobs[i].mobid + ".png"); + in = getClass().getResourceAsStream("/" + config_mocreat_mobs[i].mobid + ".png"); if(in != null) { - if(configmobs[i].icon == null) - configmobs[i].icon = markerapi.createMarkerIcon("mobs." + configmobs[i].mobid, configmobs[i].label, in); + if(config_mocreat_mobs[i].icon == null) + config_mocreat_mobs[i].icon = markerapi.createMarkerIcon("mocreat_mobs." + config_mocreat_mobs[i].mobid, config_mocreat_mobs[i].label, in); else /* Update image */ - configmobs[i].icon.setMarkerIconImage(in); + config_mocreat_mobs[i].icon.setMarkerIconImage(in); } - if(configmobs[i].icon == null) { - configmobs[i].icon = markerapi.getMarkerIcon(MarkerIcon.DEFAULT); + if(config_mocreat_mobs[i].icon == null) { + config_mocreat_mobs[i].icon = markerapi.getMarkerIcon(MarkerIcon.DEFAULT); } - if(configmobs[i].enabled) { + if(config_mocreat_mobs[i].enabled) { cnt++; } } /* Make list of just enabled mobs */ - mobs = new MobMapping[cnt]; - for(int i = 0, j = 0; i < configmobs.length; i++) { - if(configmobs[i].enabled) { - mobs[j] = configmobs[i]; + mocreat_mobs = new MobMapping[cnt]; + for(int i = 0, j = 0; i < config_mocreat_mobs.length; i++) { + if(config_mocreat_mobs[i].enabled) { + mocreat_mobs[j] = config_mocreat_mobs[i]; j++; - clsset.add(configmobs[i].mobclass); + clsset.add(config_mocreat_mobs[i].mobclass); } } hideifshadow = cfg.getInt("update.hideifshadow", 15); hideifundercover = cfg.getInt("update.hideifundercover", 15); /* Now, add marker set for mobs (make it transient) */ - if(mobs.length > 0) { - set = markerapi.getMarkerSet("mobs.markerset"); - if(set == null) - set = markerapi.createMarkerSet("mobs.markerset", cfg.getString("layer.name", "Mobs"), null, false); + if(mocreat_mobs.length > 0) { + mset = markerapi.getMarkerSet("mocreat_mobs.markerset"); + if(mset == null) + mset = markerapi.createMarkerSet("mocreat_mobs.markerset", cfg.getString("mocreatlayer.name", "Mo'Creatures Mobs"), null, false); else - set.setMarkerSetLabel(cfg.getString("layer.name", "Mobs")); - if(set == null) { + mset.setMarkerSetLabel(cfg.getString("mocreatlayer.name", "Mo'Creatures Mobs")); + if(mset == null) { severe("Error creating marker set"); return; } - set.setLayerPriority(cfg.getInt("layer.layerprio", 10)); - set.setHideByDefault(cfg.getBoolean("layer.hidebydefault", false)); - int minzoom = cfg.getInt("layer.minzoom", 0); + mset.setLayerPriority(cfg.getInt("mocreatlayer.layerprio", 10)); + mset.setHideByDefault(cfg.getBoolean("mocreatlayer.hidebydefault", false)); + int minzoom = cfg.getInt("mocreatlayer.minzoom", 0); if(minzoom > 0) /* Don't call if non-default - lets us work with pre-0.28 dynmap */ - set.setMinZoom(minzoom); - tinyicons = cfg.getBoolean("layer.tinyicons", false); - nolabels = cfg.getBoolean("layer.nolabels", false); - inc_coord = cfg.getBoolean("layer.inc-coord", false); + mset.setMinZoom(minzoom); + tinyicons = cfg.getBoolean("mocreatlayer.tinyicons", false); + nolabels = cfg.getBoolean("mocreatlayer.nolabels", false); + inc_coord = cfg.getBoolean("mocreatlayer.inc-coord", false); /* Get position resolution */ res = cfg.getDouble("update.resolution", 1.0); /* Set up update job - based on period */ @@ -818,45 +1139,192 @@ private void activate() { updperiod = (long)(per*20.0); updates_per_tick = cfg.getInt("update.mobs-per-tick", 20); stop = false; - getServer().getScheduler().scheduleSyncDelayedTask(this, new MobUpdate(), updperiod); - info("Enable layer for mobs"); + getServer().getScheduler().scheduleSyncDelayedTask(this, new MoCreatMobUpdate(), updperiod); + info("Enable layer for mo'creatures mobs"); } else { - info("Layer for mobs disabled"); + info("Layer for mo'creatures mobs disabled"); + } + + + + /* Now, check which hostile mobs are enabled */ + clsset = new HashSet>(); + cnt = 0; + for(int i = 0; i < config_hostile_mobs.length; i++) { + config_hostile_mobs[i].init(); + config_hostile_mobs[i].enabled = cfg.getBoolean("hostile_mobs." + config_hostile_mobs[i].mobid, false); + config_hostile_mobs[i].icon = markerapi.getMarkerIcon("hostile_mobs." + config_hostile_mobs[i].mobid); + InputStream in = null; + if(tinyicons) + in = getClass().getResourceAsStream("/8x8/" + config_hostile_mobs[i].mobid + ".png"); + if(in == null) + in = getClass().getResourceAsStream("/" + config_hostile_mobs[i].mobid + ".png"); + if(in != null) { + if(config_hostile_mobs[i].icon == null) + config_hostile_mobs[i].icon = markerapi.createMarkerIcon("hostile_mobs." + config_hostile_mobs[i].mobid, config_hostile_mobs[i].label, in); + else /* Update image */ + config_hostile_mobs[i].icon.setMarkerIconImage(in); + } + if(config_hostile_mobs[i].icon == null) { + config_hostile_mobs[i].icon = markerapi.getMarkerIcon(MarkerIcon.DEFAULT); + } + if(config_hostile_mobs[i].enabled) { + cnt++; + } + } + /* Make list of just enabled mobs */ + hostile_mobs = new MobMapping[cnt]; + for(int i = 0, j = 0; i < config_hostile_mobs.length; i++) { + if(config_hostile_mobs[i].enabled) { + hostile_mobs[j] = config_hostile_mobs[i]; + j++; + clsset.add(config_hostile_mobs[i].mobclass); + } } + hideifshadow = cfg.getInt("update.hideifshadow", 15); + hideifundercover = cfg.getInt("update.hideifundercover", 15); + /* Now, add marker set for mobs (make it transient) */ + if(hostile_mobs.length > 0) { + hset = markerapi.getMarkerSet("hostile_mobs.markerset"); + if(hset == null) + hset = markerapi.createMarkerSet("hostile_mobs.markerset", cfg.getString("hostilelayer.name", "Mo'Creatures Mobs"), null, false); + else + hset.setMarkerSetLabel(cfg.getString("hostilelayer.name", "Mo'Creatures Mobs")); + if(hset == null) { + severe("Error creating marker set"); + return; + } + hset.setLayerPriority(cfg.getInt("hostilelayer.layerprio", 10)); + hset.setHideByDefault(cfg.getBoolean("hostilelayer.hidebydefault", false)); + int minzoom = cfg.getInt("hostilelayer.minzoom", 0); + if(minzoom > 0) /* Don't call if non-default - lets us work with pre-0.28 dynmap */ + hset.setMinZoom(minzoom); + tinyicons = cfg.getBoolean("hostilelayer.tinyicons", false); + nolabels = cfg.getBoolean("hostilelayer.nolabels", false); + inc_coord = cfg.getBoolean("hostilelayer.inc-coord", false); + /* Get position resolution */ + res = cfg.getDouble("update.resolution", 1.0); + /* Set up update job - based on period */ + double per = cfg.getDouble("update.period", 5.0); + if(per < 2.0) per = 2.0; + updperiod = (long)(per*20.0); + updates_per_tick = cfg.getInt("update.mobs-per-tick", 20); + stop = false; + getServer().getScheduler().scheduleSyncDelayedTask(this, new HostileMobUpdate(), updperiod); + info("Enable layer for hostile mobs"); + } + else { + info("Layer for hostile mobs disabled"); + } + + + + /* Now, check which passive mobs are enabled */ + clsset = new HashSet>(); + cnt = 0; + for(int i = 0; i < config_passive_mobs.length; i++) { + config_passive_mobs[i].init(); + config_passive_mobs[i].enabled = cfg.getBoolean("passive_mobs." + config_passive_mobs[i].mobid, false); + config_passive_mobs[i].icon = markerapi.getMarkerIcon("passive_mobs." + config_passive_mobs[i].mobid); + InputStream in = null; + if(tinyicons) + in = getClass().getResourceAsStream("/8x8/" + config_passive_mobs[i].mobid + ".png"); + if(in == null) + in = getClass().getResourceAsStream("/" + config_passive_mobs[i].mobid + ".png"); + if(in != null) { + if(config_passive_mobs[i].icon == null) + config_passive_mobs[i].icon = markerapi.createMarkerIcon("passive_mobs." + config_passive_mobs[i].mobid, config_passive_mobs[i].label, in); + else /* Update image */ + config_passive_mobs[i].icon.setMarkerIconImage(in); + } + if(config_passive_mobs[i].icon == null) { + config_passive_mobs[i].icon = markerapi.getMarkerIcon(MarkerIcon.DEFAULT); + } + if(config_passive_mobs[i].enabled) { + cnt++; + } + } + /* Make list of just enabled mobs */ + passive_mobs = new MobMapping[cnt]; + for(int i = 0, j = 0; i < config_passive_mobs.length; i++) { + if(config_passive_mobs[i].enabled) { + passive_mobs[j] = config_passive_mobs[i]; + j++; + clsset.add(config_passive_mobs[i].mobclass); + } + } + + hideifshadow = cfg.getInt("update.hideifshadow", 15); + hideifundercover = cfg.getInt("update.hideifundercover", 15); + /* Now, add marker set for mobs (make it transient) */ + if(passive_mobs.length > 0) { + pset = markerapi.getMarkerSet("passive_mobs.markerset"); + if(pset == null) + pset = markerapi.createMarkerSet("passive_mobs.markerset", cfg.getString("passivelayer.name", "Mo'Creatures Mobs"), null, false); + else + pset.setMarkerSetLabel(cfg.getString("passivelayer.name", "Mo'Creatures Mobs")); + if(pset == null) { + severe("Error creating marker set"); + return; + } + pset.setLayerPriority(cfg.getInt("passivelayer.layerprio", 10)); + pset.setHideByDefault(cfg.getBoolean("passivelayer.hidebydefault", false)); + int minzoom = cfg.getInt("passivelayer.minzoom", 0); + if(minzoom > 0) /* Don't call if non-default - lets us work with pre-0.28 dynmap */ + pset.setMinZoom(minzoom); + tinyicons = cfg.getBoolean("passivelayer.tinyicons", false); + nolabels = cfg.getBoolean("passivelayer.nolabels", false); + inc_coord = cfg.getBoolean("passivelayer.inc-coord", false); + /* Get position resolution */ + res = cfg.getDouble("update.resolution", 1.0); + /* Set up update job - based on period */ + double per = cfg.getDouble("update.period", 5.0); + if(per < 2.0) per = 2.0; + updperiod = (long)(per*20.0); + updates_per_tick = cfg.getInt("update.mobs-per-tick", 20); + stop = false; + getServer().getScheduler().scheduleSyncDelayedTask(this, new PassiveMobUpdate(), updperiod); + info("Enable layer for passive mobs"); + } + else { + info("Layer for passive mobs disabled"); + } + + /* Now, check which vehicles are enabled */ clsset = new HashSet>(); cnt = 0; - for(int i = 0; i < configvehicles.length; i++) { - configvehicles[i].init(); - configvehicles[i].enabled = cfg.getBoolean("vehicles." + configvehicles[i].mobid, false); - configvehicles[i].icon = markerapi.getMarkerIcon("vehicles." + configvehicles[i].mobid); + for(int i = 0; i < config_vehicles.length; i++) { + config_vehicles[i].init(); + config_vehicles[i].enabled = cfg.getBoolean("vehicles." + config_vehicles[i].mobid, false); + config_vehicles[i].icon = markerapi.getMarkerIcon("vehicles." + config_vehicles[i].mobid); InputStream in = null; if(tinyicons) - in = getClass().getResourceAsStream("/8x8/" + configvehicles[i].mobid + ".png"); + in = getClass().getResourceAsStream("/8x8/" + config_vehicles[i].mobid + ".png"); if(in == null) - in = getClass().getResourceAsStream("/" + configvehicles[i].mobid + ".png"); + in = getClass().getResourceAsStream("/" + config_vehicles[i].mobid + ".png"); if(in != null) { - if(configvehicles[i].icon == null) - configvehicles[i].icon = markerapi.createMarkerIcon("vehicles." + configvehicles[i].mobid, configvehicles[i].label, in); + if(config_vehicles[i].icon == null) + config_vehicles[i].icon = markerapi.createMarkerIcon("vehicles." + config_vehicles[i].mobid, config_vehicles[i].label, in); else /* Update image */ - configvehicles[i].icon.setMarkerIconImage(in); + config_vehicles[i].icon.setMarkerIconImage(in); } - if(configvehicles[i].icon == null) { - configvehicles[i].icon = markerapi.getMarkerIcon(MarkerIcon.DEFAULT); + if(config_vehicles[i].icon == null) { + config_vehicles[i].icon = markerapi.getMarkerIcon(MarkerIcon.DEFAULT); } - if(configvehicles[i].enabled) { + if(config_vehicles[i].enabled) { cnt++; } } /* Make list of just enabled vehicles */ vehicles = new MobMapping[cnt]; - for(int i = 0, j = 0; i < configvehicles.length; i++) { - if(configvehicles[i].enabled) { - vehicles[j] = configvehicles[i]; + for(int i = 0, j = 0; i < config_vehicles.length; i++) { + if(config_vehicles[i].enabled) { + vehicles[j] = config_vehicles[i]; j++; - clsset.add(configvehicles[i].mobclass); + clsset.add(config_vehicles[i].mobclass); } } /* Now, add marker set for vehicles (make it transient) */ @@ -897,17 +1365,30 @@ private void activate() { } public void onDisable() { - if(set != null) { - set.deleteMarkerSet(); - set = null; + if(mset != null) { + mset.deleteMarkerSet(); + mset = null; + } + if(hset != null) { + hset.deleteMarkerSet(); + hset = null; + } + if(pset != null) { + pset.deleteMarkerSet(); + pset = null; } if(vset != null) { vset.deleteMarkerSet(); vset = null; } - mobicons.clear(); + mocreat_mobicons.clear(); + hostile_mobicons.clear(); + passive_mobicons.clear(); vehicleicons.clear(); - lookup_cache.clear(); + mlookup_cache.clear(); + hlookup_cache.clear(); + plookup_cache.clear(); + vlookup_cache.clear(); stop = true; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ff8ee3c..4f11ac7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -16,106 +16,110 @@ update: # Vehicle updates per tick (prevent lag spikes when large number of vehicles) vehicles-per-tick: 20 -mobs: +mocreat_mobs: + bear: false + bigcat: false + bird: false + boar: false + bunny: false + caveogre: false + crocodile: false + deer: false + dolphin: false + duck: false + fireogre: false + fishy: false + flamewraith: false + fox: false + goat: false + hellrat: false + horse: false + jellyfish: false + kitty: false + mouse: false + ogre: false + ostrich: false + polarbear: false + rat: false + ray: false + scorpion: false + shark: false + snake: false + turtle: false + werewolf: false + wildwolf: false + wraith: false + +hostile_mobs: + blaze: true + cavespider: true + creeper: true + drowned: true elderguardian: true - witherskeleton: true - stray: true - husk: true - zombievillager: true + enderdragon: true + enderman: true + endermite: true evoker: true - vex: true - vindicator: true - creeper: true - skeleton: true - giant: true ghast: true - drowned: true + giant: true + guardian: true + husk: true + illusioner: true + magmacube: true phantom: true - zombiepigman: true - zombie: true - enderman: true - cavespider: true - spider: true - spiderjockey: true + pillager: true + ravager: true + shulker: true silverfish: true - blaze: true - magmacube: true + skeleton: true slime: true - enderdragon: true - wither: true + spider: true + spiderjockey: true + stray: true + vex: true + vindicator: true witch: true - endermite: true - guardian: true - shulker: true - skeletonhorse: true - zombiehorse: true - donkey: true - mule: true + wither: true + witherskeleton: true + zombie: true + zombiepigman: true + zombievillager: true + +passive_mobs: bat: true - pig: true - sheep: true - cow: true + cat: true chicken: true chickenjockey: true - squid: true - wolf: true - tamedwolf: true + cod: true + cow: true + donkey: true + golem: true + llama: true mooshroom: true - snowgolem: true + mule: true ocelot: true - cat: true - golem: true - vanillahorse: true + panda: true + parrot: true + pig: true + pufferfish: true rabbit: true - vanillapolarbear: true - llama: true - villager: true - vanilladolphin: true - cod: true salmon: true - pufferfish: true + sheep: true + skeletonhorse: true + snowgolem: true + squid: true + tamedwolf: true + traderllama: true tropicalfish: true - vanillaturtle: true + vanilladolphin: true vanillafox: true - panda: true + vanillahorse: true + vanillapolarbear: true + vanillaturtle: true + villager: true wandering_trader: true - tradderllama: true - pillager: true - illusioner: true - ravager: true - parrot: true - horse: false - fireogre: false - caveogre: false - ogre: false - boar: false - polarbear: false - bear: false - duck: false - bigcat: false - deer: false - wildwolf: false - flamewraith: false - wraith: false - bunny: false - bird: false - fox: false - werewolf: false - shark: false - dolphin: false - fishy: false - kitty: false - hellrat: false - rat: false - mouse: false - scorpion: false - turtle: false - crocodile: false - ray: false - jellyfish: false - goat: false - snake: false - ostrich: false + wolf: true + zombiehorse: true vehicles: # Specific minecart types @@ -129,8 +133,38 @@ vehicles: # Boats boat: false -layer: - name: "Mobs" +mocreatlayer: + name: "Mo'Creatures Mobs" + # Make mobs layer hidden by default + hidebydefault: false + # ordering priority in layer menu (low goes before high - default is 0) + layerprio: 10 + # (optional) if true, use tiny marker icons (8x8) - default is 16x16 + tinyicons: false + # (optional) if true, don't show labels on mob icons + nolabels: false + # (optional) set minimum zoom level when mob icons should be visible (0=default, any zoom) + minzoom: 0 + # (optional) include coordinate in label for icon + inc-coord: false + +hostilelayer: + name: "Hostile Mobs" + # Make mobs layer hidden by default + hidebydefault: false + # ordering priority in layer menu (low goes before high - default is 0) + layerprio: 10 + # (optional) if true, use tiny marker icons (8x8) - default is 16x16 + tinyicons: false + # (optional) if true, don't show labels on mob icons + nolabels: false + # (optional) set minimum zoom level when mob icons should be visible (0=default, any zoom) + minzoom: 0 + # (optional) include coordinate in label for icon + inc-coord: false + +passivelayer: + name: "Passive Mobs" # Make mobs layer hidden by default hidebydefault: false # ordering priority in layer menu (low goes before high - default is 0) From 02f5e943c1402f1cd9ae206468bbc07e3ea92099 Mon Sep 17 00:00:00 2001 From: gabsoftware Date: Thu, 19 Dec 2019 14:50:11 +0100 Subject: [PATCH 9/9] 1.15.1 compatibility with Bee support --- build.gradle | 6 +++--- pom.xml | 4 ++-- .../java/org/dynmap/mobs/DynmapMobsPlugin.java | 3 ++- src/main/resources/8x8/bee.png | Bin 0 -> 1898 bytes src/main/resources/bee.png | Bin 0 -> 2727 bytes src/main/resources/config.yml | 1 + 6 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/8x8/bee.png create mode 100644 src/main/resources/bee.png diff --git a/build.gradle b/build.gradle index 586e658..442f5f5 100644 --- a/build.gradle +++ b/build.gradle @@ -2,9 +2,9 @@ apply plugin: 'java' apply plugin: 'maven' group = 'dynmap-mobs' -version = '1.5-gabsoftware' +version = '1.6-gabsoftware' -description = "Unofficial build with 1.14 support" +description = "Unofficial build with 1.15.1 support" sourceCompatibility = 1.6 targetCompatibility = 1.6 @@ -21,6 +21,6 @@ repositories { maven { url "https://repo.maven.apache.org/maven2" } } dependencies { - compile group: 'org.bukkit', name: 'bukkit', version:'1.14.4-R0.1-SNAPSHOT' + compile group: 'org.bukkit', name: 'bukkit', version:'1.15.1-R0.1-SNAPSHOT' compile group: 'us.dynmap', name: 'dynmap-api', version:'3.0-SNAPSHOT' } diff --git a/pom.xml b/pom.xml index 34d4b43..89aad48 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ org.bukkit bukkit - 1.13.2-R0.1-SNAPSHOT + 1.15.1-R0.1-SNAPSHOT us.dynmap @@ -69,5 +69,5 @@ UTF-8 - 1.5 + 1.6-gabsoftware \ No newline at end of file diff --git a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java index 45c915c..eb2f510 100644 --- a/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java +++ b/src/main/java/org/dynmap/mobs/DynmapMobsPlugin.java @@ -229,7 +229,8 @@ public void init() { new MobMapping("vanillaturtle", "org.bukkit.entity.Turtle", "Turtle"), new MobMapping("parrot", "org.bukkit.entity.Parrot", "Parrot"), new MobMapping("panda", "org.bukkit.entity.Panda", "Panda"), - new MobMapping("vanillafox", "org.bukkit.entity.Fox", "Fox" ) + new MobMapping("vanillafox", "org.bukkit.entity.Fox", "Fox" ), + new MobMapping("bee", "org.bukkit.entity.Bee", "Bee" ) }; diff --git a/src/main/resources/8x8/bee.png b/src/main/resources/8x8/bee.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0fe13af6fa925b162cce37b23e015bb581886a GIT binary patch literal 1898 zcmV-w2bK7VP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YslIlipQFr;5jV(Hg@JLKZ18wAF;D})7{rl7#lZ3{D{$} zQ~02}qlUj&M33e#A7Zg$-`6X4y;tqME$_0Ah*UJ&soRyg0^@~Hy16al7W@aSW!?$5 z!o>o_D$u-e7ek2{(eC7_Ql?IAz6%wY=((}r&0N?`nmXac#VrVMQ)dA@)i?zn1*kcY z`Pf2JZ<_iFDKu9CCliDXM1Q%>cf@~lA3?p3)FrZdVgQx$pwmJg;|IY zM+H6^mb3GG0RakuE13>#oQnWQdFaL-p~=gE7a6SuKm-?2BsvNRV0j;qKjIZRl!FW2 zgb-qopdp1EUGy=;7$uG#mBopdAW=kAl4N!2HE2{()ucIba%f>8#Uv(aN-1Y3%@Ccj zJA)(Vi!XQiD_rrCORse0g7hiAgc6GsEve+n)m4;#ja5w5nrd#;kV?(B&|;IOEw$W{ zYu$CM1GIvwmDmg>=%vWRIqmHG5TLO9f*+VF0v0<3pq}1l(LP?p$O|rh# zf%RNkzUufkDsqdYu$YRElYsFUbum>oh}>ecpYOIL(vg$W+>Wk$?;*G3M7HME-{!ZF z(RjDEAoE*BI^IlqF{vKs(3Ypa+4#qoZDz@jGYxe;)>4I9JchJuX~X$L;$k)+=W9`I zx}I>v6^>$0ta<514?p&Fw*hE4)-<|Jayf&x$9d`iN6WQPH6Ao2?U;AZsQVL=w(ydI#4U%J`Vv|sJb9!$PU)34 z=vXUB6s39-W1hC*G<0LM>^52btpX)IHK;pL(;XizO%HLW!&Rd@oNRv0-+yPEd0F?L zj5CjQu3Sq+55D*V^iJ@r;)rlE3+U>O7OjUQ9U@ARTvJx#cqN*o$OAi{@ak4Bn z)6g#uU-Wh7qnE@_nr=5+q}E^7Z+NSxX3Z;ox3?j6J_R6o3xNk{z(=_6w-c$h6Kr0> z^pwg@1F4jnJgVgGDJ`LaKfQ+F@F)>s>fuE8^NsnjlQCj&JiB$nf^$vJR?SD#>@Lf( z!7dP(j#2im>4^G%VpykZpi7n}Pg(1lAfYHa;}LS*9mF5AO5cn*nrD06bs@!3t7m`Z z-KgzpjGu2z!dYv%mQ!R>uI+m*sXYlij>j`lKJvHGG-I>dd->J0d)QmMEpk1r&)+lY z)aZH}Jsrwnw$JjEXOv-R@9+xa)bNPAbB=V!00*txm*gcM7v1u|C4TjR-AI}*-JgKr zn4q&Cjgj)z%D0hw+*JD#$b3%_%%eNv252n=ORzr;?=3Aq!_-xYdvZBfN4U)HbZ(EM z&iW(B`=HVNbJB1{cQZ5@C#Q1L_kfXcy4Y9tX0002_Nkl4Nfj91> z6-q1_Rg%A7W}(Y+*+zsxpX0MGKfZ}3!JmB4bv`*gk5LK&`Q6JotUaMC8bK(Ln!(zt z!ok)(gBKHVeK%yZ(;?Eg$&wLyG9lJC7}hSh?7Sk|S03wo88@3yS=7i=4|g2U?qxW) zGlXTEytkS}g9i|0P%Fe=k2tL+mTe*%RzOs(GoMOgKLKDqHQ3*+vmiZ`=aWXR7mH-6 kN@*noz;ktkni2*9|8$jNZrp2}ssI2007*qoM6N<$g7JosK>z>% literal 0 HcmV?d00001 diff --git a/src/main/resources/bee.png b/src/main/resources/bee.png new file mode 100644 index 0000000000000000000000000000000000000000..84e61e3a3fc1464142c9fd84868d76d59b2eeddd GIT binary patch literal 2727 zcmV;Y3Rv}tP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1e?jx;9>{Ld+J1TZ$3zJ_e_rP^c;4^!#oxxae)kR#x*|T~ z`I?5!ujrT0g3Q+ceD8O;***5S)N<2STJ6+hNBZ~Fv+LSRuOkdl zY4DJdMjkrKs1sb9aq^UzW}Z6BtS@SY>UY$_59IzCwP2_%#CXrkAJovD^W7pWIgy1K z5F-viJTC-5Xj+(g4a~HVTbTJmND3jK7G#0b!$J%Q@(3g|yx4t^`$ycI@V~;1{th{} zp!+|Na|=2{?ytE00<~UuMTr}rm4z#&K28YRlw3(GJ%e~AT}`b_VX_1kguLtqD}uSl zTI-1C?nGhbXSZBZFXL+LpiO^-aWQ;CE~M2S7NSa zK{-8MdDNyo))+XgE~w_|dN4Vm$H9I9FKk5!>A3#{KW$$xyPDf z5NrpqPf^b4d;M(Ql026~1LSiXloC_uZ(Po0ti&&eg0iY8}YxHhqY1o~2B8LZNh0S8CAGgIU0B z!~)GwvFkp&G%O7vZ)wD21SFL=P0z9=6ZJZo&#qw2UG1#&_IEZ{cB+_{;td)hDwH-(tI1 zIwS)Dj6*ODBb8^Gu(RA8@y#HtI2jdFFXXjla`WQ+btlF?FKt5XIX*@y<*v4QLQIZ} z<&F9Iq$MM7(T=L0QiOZ6h5u2I@G4fg!q<@<`B+BHRA-DCIlftm+JCdD6Ye;2b!Od) zswv2%0jeNPZOq|9c8fLi-n0kT!Z+MxXQ`ps`5Jx&*xt25=SB*a{hh;*(r!-UMpx3C zf3FVX%DG5tVFVSLWmH|iINYfoSE_xy+#Vhm&-C5{gr@0>*LxF6?CrJz>(1Em+^Y)W z+~ie2ZC2)<)_fHst6j7}+IyL6!`*9wkF{khWZr7L_ogHGO?i$A9OM>At82)4M$_H) zrG-_}XU+UH`E@3lF}5z;k+#!r{ZGW8^3>1qN=fE{|Kglw=hcBvLhWmwJN1sGU$Oo8 zMmH^zn4aWNZpFW*?u~GHbbMQ`726}@K8;J6`x9#yZd*1Fa8UpN00v@9M??Vs0RI60 zpuMM)00009a7bBm001r{001r{0eGc9b^rhX2XskIMF-;y6Ac+V`HKaU0008!Nkld>4kkz;F18u=iO&09pZ#ayn%4@&cvn%r!cw zxC#hx22)&8noE>!5GO69iqYPecn>DCl-A=dNL4{;jSm)K4MKpmmdUJSI`h=1upB=RytQ0m@gSEq423?ZNA6n_fJ`B zBv_Lmg2Oq35E>QDQ>#ht-pu&o<9%MQ2(o?+m0I-RSR-}d&QhDZD;1L0a*DiD4WItM{4S*rFOGG~E#~haeh&1A9*9u5cW^&rb9< zJEJ;}e(UnbPY=-#o&l$xl|kU6R$#FLw*n}s@IerQBZLvgW%R9MCl5Rv2KLW9^gzRH zxEyit%dgye(Is0Qz|9nqTm!2SfY6JOr(`FO=j+GsNwk2!qs14q2T ze6xbNI9cZI5oKl*xjE!8+TUF%n5R3)sXGDjEQrTgq8L(qVh^8as~-EEF_U zivIG$1cb&@VZIU3iUnp0X#_g>SHM(arZKG;K7A+f$(lkUAXxN!D|Mt)L{Ur>M?^|c zOaf9^su%#WaZEAMw5x*Voj_?6WhwFAp_?^@REi{4C@ry8U`?Pb1WEZSu`C46ND?im hCjl2L3Zw82{s-`#c}<`iKW_j4002ovPDHLkV1m#M3F!a; literal 0 HcmV?d00001 diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4f11ac7..ed0c237 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -120,6 +120,7 @@ passive_mobs: wandering_trader: true wolf: true zombiehorse: true + bee: true vehicles: # Specific minecart types