From 54c5f5f0f67e6151c2ec7a2791f82aa519ac84cc Mon Sep 17 00:00:00 2001 From: IntegratedQuantum Date: Fri, 22 Mar 2019 19:34:50 +0100 Subject: [PATCH] Merge Cubz terrain generation --- cubyz-client/res/textures/blocks/bedrock.png | Bin 0 -> 2211 bytes cubyz-client/res/textures/blocks/coal_ore.png | Bin 0 -> 1387 bytes .../res/textures/blocks/diamond_ore.png | Bin 0 -> 1475 bytes .../res/textures/blocks/emerald_ore.png | Bin 0 -> 1433 bytes cubyz-client/res/textures/blocks/gold_ore.png | Bin 0 -> 1489 bytes cubyz-client/res/textures/blocks/iron_ore.png | Bin 0 -> 1398 bytes .../res/textures/blocks/oak_leaves.png | Bin 0 -> 1261 bytes cubyz-client/res/textures/blocks/oak_log.png | Bin 0 -> 739 bytes cubyz-client/res/textures/blocks/ruby_ore.png | Bin 0 -> 1462 bytes cubyz-client/res/textures/blocks/sand.png | Bin 0 -> 967 bytes .../src/io/cubyz/api/base/BaseMod.java | 46 +++- cubyz-common/src/io/cubyz/blocks/Bedrock.java | 15 ++ .../src/io/cubyz/blocks/BlockInstance.java | 26 +- cubyz-common/src/io/cubyz/blocks/CoalOre.java | 12 + .../src/io/cubyz/blocks/DiamondOre.java | 12 + .../src/io/cubyz/blocks/EmeraldOre.java | 12 + cubyz-common/src/io/cubyz/blocks/GoldOre.java | 12 + cubyz-common/src/io/cubyz/blocks/IronOre.java | 12 + .../src/io/cubyz/blocks/OakLeaves.java | 14 ++ cubyz-common/src/io/cubyz/blocks/OakLog.java | 10 + cubyz-common/src/io/cubyz/blocks/Ore.java | 24 ++ cubyz-common/src/io/cubyz/blocks/RubyOre.java | 12 + cubyz-common/src/io/cubyz/blocks/Sand.java | 10 + cubyz-common/src/io/cubyz/world/Chunk.java | 230 +++++++++++++++--- .../src/io/cubyz/world/LocalWorld.java | 8 +- .../src/io/cubyz/world/Structures.java | 37 +++ res/textures/blocks/bedrock.png | Bin 0 -> 2211 bytes res/textures/blocks/coal_ore.png | Bin 0 -> 1387 bytes res/textures/blocks/diamond_ore.png | Bin 0 -> 1475 bytes res/textures/blocks/emerald_ore.png | Bin 0 -> 1433 bytes res/textures/blocks/gold_ore.png | Bin 0 -> 1489 bytes res/textures/blocks/iron_ore.png | Bin 0 -> 1398 bytes res/textures/blocks/oak_leaves.png | Bin 0 -> 1261 bytes res/textures/blocks/oak_log.png | Bin 0 -> 739 bytes res/textures/blocks/ruby_ore.png | Bin 0 -> 1462 bytes res/textures/blocks/sand.png | Bin 0 -> 967 bytes res/textures/blocks/water.png | Bin 0 -> 252 bytes 37 files changed, 453 insertions(+), 39 deletions(-) create mode 100644 cubyz-client/res/textures/blocks/bedrock.png create mode 100644 cubyz-client/res/textures/blocks/coal_ore.png create mode 100644 cubyz-client/res/textures/blocks/diamond_ore.png create mode 100644 cubyz-client/res/textures/blocks/emerald_ore.png create mode 100644 cubyz-client/res/textures/blocks/gold_ore.png create mode 100644 cubyz-client/res/textures/blocks/iron_ore.png create mode 100644 cubyz-client/res/textures/blocks/oak_leaves.png create mode 100644 cubyz-client/res/textures/blocks/oak_log.png create mode 100644 cubyz-client/res/textures/blocks/ruby_ore.png create mode 100644 cubyz-client/res/textures/blocks/sand.png create mode 100644 cubyz-common/src/io/cubyz/blocks/Bedrock.java create mode 100644 cubyz-common/src/io/cubyz/blocks/CoalOre.java create mode 100644 cubyz-common/src/io/cubyz/blocks/DiamondOre.java create mode 100644 cubyz-common/src/io/cubyz/blocks/EmeraldOre.java create mode 100644 cubyz-common/src/io/cubyz/blocks/GoldOre.java create mode 100644 cubyz-common/src/io/cubyz/blocks/IronOre.java create mode 100644 cubyz-common/src/io/cubyz/blocks/OakLeaves.java create mode 100644 cubyz-common/src/io/cubyz/blocks/OakLog.java create mode 100644 cubyz-common/src/io/cubyz/blocks/Ore.java create mode 100644 cubyz-common/src/io/cubyz/blocks/RubyOre.java create mode 100644 cubyz-common/src/io/cubyz/blocks/Sand.java create mode 100644 cubyz-common/src/io/cubyz/world/Structures.java create mode 100644 res/textures/blocks/bedrock.png create mode 100644 res/textures/blocks/coal_ore.png create mode 100644 res/textures/blocks/diamond_ore.png create mode 100644 res/textures/blocks/emerald_ore.png create mode 100644 res/textures/blocks/gold_ore.png create mode 100644 res/textures/blocks/iron_ore.png create mode 100644 res/textures/blocks/oak_leaves.png create mode 100644 res/textures/blocks/oak_log.png create mode 100644 res/textures/blocks/ruby_ore.png create mode 100644 res/textures/blocks/sand.png create mode 100644 res/textures/blocks/water.png diff --git a/cubyz-client/res/textures/blocks/bedrock.png b/cubyz-client/res/textures/blocks/bedrock.png new file mode 100644 index 0000000000000000000000000000000000000000..b26ce5b78747d3904733344e2448931f579b1723 GIT binary patch literal 2211 zcmeHH`8S&h6#Xo*)DlY&%On}1LbEiMpfdPkuZ~(`OAt|=Xo+M*NvDd?sTOT)gQ3*Y zR*eeESdX!cqNTNWN>wx3seP-~U`%K9Uznfgopawk@1FC1xc8j*u6ug8C>_x`0sw%L zo2#SuA=`h3oYY}2X%Va*k_6A&g#w74=`9@&(k$?65C9s43I|LG07wCzr>IVcx|Ea@ z1Okzfk&%^^m6w-SP*6}*R8&@0hC-pLs;cVh>M$5gLqkJLOA8K%Yin!k=;-L`>gws~ zArJ^85{W{g^!4@8Xta@$5e9=XF)=xI>=+h{#o=%S0)a>*nwgndSXfwETH4sykjZ2_ zJ39~rDHMu>gM+K9tB;Qll}h#X^$iRRq|@mP27}3DhJ}TNhljIRtjNenHk-}iaJXD< zOiT=q$Gd#_a#B)Ka&mG?N=j;K>iqotp@skJ{{;S90(@C<{NbiN*ENs_0Ls69hQt8p ze)ypXk97)&_2GOI8_$e63vij|qGR#VXJb+3cp}~++$G@fzBnVSR0jON#&#DCvT|8Y9lZQ;)L8+5H-<@8i(f=4xV;8w2Gy^3e; zqK{OEUB%z{#oqWv)ycNEL4!FNMR^|2jrgJ!Yh7BE0&X~doAbw3T34 zE#_R)1w%c-2}fWQtjsI^Fce?F?9qYs666Z{J4{I#2e1PBY`f|{ zCX>j8CQ!(Xx@qO`A02kH92f;Q!iBzhhVza?KbP`tss6 z^M`DMs)@bYW=4cC4xKNhmPZUMWh1Rh$}=>!K*@+dxUSEGvQl*`&D$@XI8XSo)$lkH z(+#^*XU7#8u*;U+cizQ(0U7jsF>*HN@$y9RL4l^sIICW1Pw7b7WBk27=DwtH`s!wl zc0R0d@29uk@h<&0^YA3=uELdVXYx^4L)7y261($TDdOL2rH+()^(nviOj|j3zTI6I zp)o4sn|*`H!6xF$TCp)*vD8waAR3Kc@q6L)7KvJ{4ttWgY;fMXi>(lPP;;tT4o0_IKaL_rMp|1%I~R3Imi7jrf!V>8Ndc5_}JUU*tu={Pct@?zl>cYogIObk`rCOS9d&FUiGRKDmVLO`QWVN zY;o8RR_cM{A8HBN{x{-9xYN5!+JeqC6@y1l!jmJTCi9UF1LyqH%5h)v2l`XdxTfFDb9jhkKmXY0hz?ZNZ`#9Q6+Mw1tw1;P2 zkS2||Qi_ByF7o!^5~cgov_1s<#?WXV^F}+isRwj!dV0;>H%MjDIMAv>6~xy?4AZWq z&D<;Fnm0*y1)cy;+Kt`M8$*ri7oB6hTI!_gnmOGGSnubss&-Ez}(KT%n+9sW-_0{w6ORQ+=)kXKwf9wb68b?%zYq^ULg9RBs zqv&-eA2vrP>LT%>j*GL83ZVzoo%rN}YE@L>))Weh?5100iB~VtDEi`sCk3k!okMR# z%GGc7UmRobRNWufy)#_QIJ4ztFZ~P<797B*T6*j~OZgeaGdKI}9?2UVmkIx6{>+Ew zxy&Q$Jv)sTve)DVc0Xqe_7-0C|5cSGTa?t9J?#L6w*aKt&a@`3Tj(`(G%~r1 zc;S($%< literal 0 HcmV?d00001 diff --git a/cubyz-client/res/textures/blocks/coal_ore.png b/cubyz-client/res/textures/blocks/coal_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..a46e1165cd7c0e022c71bc566bf394ab952b3484 GIT binary patch literal 1387 zcmV-x1(f=UP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B01l&nPK~!i%?b=T-Y*`e>VPi8h5)+9DiNrTB zmY9fvgb7B4p(ZJWo|*KYuiVS~{_NgW%h~swQ9!3tfoBUjv zvxSF;hv;y8d>kJSs&jW;_gk`ccQ5PYRSHu??cRu<8@N;uI(b|FeayLtelPB@aVEi5HY?~lnPUNNq0qD)vy zK4gFz_X|tHl}(fhOUc(7z)u|yzSjVbUW-M_#K*Fk0XQoxH8F>B(@V;$bUb8vj(zD`$?dMe4znCL}#^$7ScIDjk=$T*5dR$=z-7K zWD>s^e2D>uBL1%d7DDS$i0=XDmoQTkN1He*Tq`UklqHl2N1vZxf0$!G;Ybrln>Z@m zFDxaLC6ozA7aYKE9h~mQY2kihDWNQ(OgK7v07tJ;^B!u1`-P>1vV=0>s0ZM6k#IzQ zuQ+k}=3l;LQkKx7H_DorV=}qFzaKn6iC%al$`V@iMp+Z_M-1Ssf$ZWZfwF`ay;0Ug z{6z)`5#3*%Mp;6O-Y9D#z6YSLiHzd(JQ#>;g{9tzk_;YT5o8yZdLv5mYk(ohKADX8 zIwVTc>xVh66_$kFLW`y-arBy7jq~#I@~HzjarsWte*f*`vj-^A3y(y*;XZW$XANYR z1)qfZ0m!m2+6i;Ny>Km}vn`Z05m_h`8a+Kd#ZPwU=jYM=>gww5?vA=q+|!6JPR~Y# zvL><%Wx@bQM@MsiLZfaJ_cXE#O9^F7WEaYW0pe>h{|SxK;oQ^6E-WRKHIZE?lh*E7hZh$Y9Pj?6p6!HfA-k|79Bp#Mw$}k}Z*OCOgM)+kp!@-u9>Sdo z+X>r3c40|4+Tet<6Y9)%VOpTmT0an?X~@sq%bxfgL4vW!BDguDsc z;`A2L={Vc-qXzJ;@c}Io@+NFc-KWO3EcvUpjXJrh=>GVPxl{feG+J)9l9G%trD`gk53#lt5df}0{umi1|I6CVm58$kU?9%5+ tpmh^RXMNNFA)<3h543LL=&b2<`VYCM@(7u1Z!Q1;002ovPDHLkV1oQ?h=KqB literal 0 HcmV?d00001 diff --git a/cubyz-client/res/textures/blocks/diamond_ore.png b/cubyz-client/res/textures/blocks/diamond_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..dce4020af37e5e8f64ed3e893db1aebc95ea1a35 GIT binary patch literal 1475 zcmV;!1w8tRP)00004XF*Lt006O% z3;baP00009a7bBm000iY000iY0qR1rzyJUM7<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx2K}keGRA@u(*|BdNMHI*Jt*K}b5)y5iKtVx;_!DR-sX#PWQQ#0b z`y4xn$PIxCA?UCaDGd^$ASH@qDQO~#>rzB0N#`O(qLc}9zxTb}*?l*U-90;;MLwG1 zZf4$__tv+2wp{IHE(}DNd|xohFeQWu=|a1^JD0EQ&wji1$$b9#ufJT}`SQZyfgJZXkt! zbaeFg&6}^>xlkN@~7jZc67ad!9v4K$@MhaJpm1Jy;7Q!i2}EQjo8WvsT@ z{?3PohaX(Oe(~z=?3>x;uP<3+$#gnhG|)XS>w&BTtxVN38?}oy;8A|wKQpiR$(3GA%bJJkiA%*<+4RkMm)&n~nQpiR$Q2O2|A%zqh$Pss< zNG;X?Z+hUGO(t7gTN}~9P?Z0&fwho&6w0>-$mh^gh^-;E3dagl4q*;q!q&aL#V>QL zJ8TKDHN;lod|}EV%ppwJx@H6R{APCygEJPoZ$@cd4;0Bt~v+w*g2y;l$8(|^JAJIVf z@@G8|=8&Q{!a|fku7T3;ErdCw=#8)t(#hO!Y=7 z&dUadp!Uhc9tOpbIgmebI;Zd}W64X`YPg(z7Fld7)Uu2359>LlVu zA-7Pz*g-602n$iW5GGZs`2G4P`}Aq`;6ZwEN)0gO5Ei0#Axx@8-S_Y3AIkH`$M&Nj zbU1PgwF^@YVIgW4!lZi3uKnG+)w5@H4{tnvoEl(z`Hy;*9hQaKg(+cch#EtSd*GcL zH|*2d8Kl|#25c~~L=NFhhh>Llp>|Llp>|EX*lh%+6QLu_>@S6Vl* zUDuWBq8B55SLg+6AYP%cD@P^lG4c`LiC_QAWKE%cD@P z^liYt?5qK1`=MTkjNW^m?RE0i~RY2I``@{o)3`%aBi)63&!M1%!o2AxsISNJ`a|o;^9z zuwuFml#qKAQaD^ghh^zr{;UUfbZ+7jY8izT4)r=LODc5b(~o62tp@Dkr5B`dsMldx zQn)pslns`pvQKS{IN8d4v5J*mk96@ks_km#+YCnvM>?dC;y?LHxbK9EmZ^*8Q(JBz zN9qt;+oJzcmQcG;b*3pjyW!H{zyeZ-*xGi&4RkMm)&mC?kUGTHwv%rle`s(>52OyU dwQV|`{sTi@77m$3UMv6r002ovPDHLkV1oW1tr!3R literal 0 HcmV?d00001 diff --git a/cubyz-client/res/textures/blocks/emerald_ore.png b/cubyz-client/res/textures/blocks/emerald_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..884c91a11359d547551ca6ccf15a494f398898aa GIT binary patch literal 1433 zcmXw3do+}382`qY&os;ulWV6&$z_$>M#yGnn2bc$WsO{BbWDxZ&?44l%zVpMqO>k; zr^Ux+RSqGI%;c7e5F^)S3T55bC?T1d?CA2x^FHVIyzlv)=l49n^Iq`wa>HWuF#rHy z-6^g*k(5smJ&6ENeOXl&hEm{7(Uia#0Qjz9BM@%V>`GtK55S^Ygof^3L_+{*#`0^G{g8|xcV zA0)4fm){JwB+Zd;&Fhe32G1KXfRkN%GSx^*p7J>-V=T##=>ylnj(iRX17md}4RZJum7JIDoPe zqdb3J3Ng;P(snwLV=(B?_q6lw7ey)z*^%(7d8coIYtuXG+`r=lLDe7V#d0o$T@?wVoC?P2x%i!^c_lN1=pLvR z2jv1{$h#R#&a!xYJ}ex=fV{_wb(vv}cq83wq-%JbJq=7=fBWW`Ueyx6L+%UZZYm?& zsb!m^OUGO^G;1}|lvXwTYZsDeRdv{-=VQX)Lw7p!hrbh&WFJ7sw$ViVPJ-$g3$>+` zs3oFmZzP<~_e~#s2qstq-KP%Fc56>PY^G+fw>NtU6E)lG5NoKnxulbrTTnIR&8Yzx zQ2)T}C(D@sR4DF-w&{K?$wX5^AjgI{dkK`uj0M|kQ14O200YsXd@Bb_O$?d%==sd< z=H@P)G^JdWsn!h<@PW+1RkLoE$Q#Bl+9)XZfG&ZU1C#GtTU&d<+e`dY7rxdOO?0QX zrp|G{!7{yRX+!!qbehA*?Zp_3J*McIqp_eFw--E%n1_V)Y|Vslx*D^nM{b38RJ)-J z%5B=HM2av-xT7?8qoc5~pZn|`9UXm<{=+!;FETVHx{&yCEeA|gLk8zLN?ZsrAc{+36r=SxQ@_Rg|O2%^&kr1!*sauZes!k zM5Dgot_>v-I_gW>%nj+KaEQ0DqzRd_jk2)*ci}uBR+@*h@wTWev%4!#Y9xGSjG-E? zUU?fqy`>8fBX}qg%8+;xPHQgXTG{C{>;OWJ{)-r4+E>lfNTKbf8M_sbNrP$W5 zm))1ra+A$0Ak7-TNHvoZ1cW%3jb&R`sT?iK=07zv_$;3LqtG$E-_vW9AQjTvfzR(d bCl00004XF*Lt006O% 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 X0Ca}dZ(Wl>00000NkvXXu0mjf27785 literal 0 HcmV?d00001 diff --git a/cubyz-client/res/textures/blocks/oak_log.png b/cubyz-client/res/textures/blocks/oak_log.png new file mode 100644 index 0000000000000000000000000000000000000000..a64e61a31317659e10533c670d03c9e2fb6317b7 GIT binary patch literal 739 zcmV<90v!E`P)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B00#r#vK~!i%?UqeW>@X07xdbaNF&o5^1#Gzx zH{cSixdu0*q(U9L^4GRI&Uirjl$UDr?EWTklDqfI*k~RO&BKv}@3$-tK^7=*y2j(Z zRyN4O=>lk-NPUCp?Db*7ik&I#9!zH;0`uiRpS7~VnF3sUQNZueB!FB0a%sf0A~mmaIOv71+es=7qAUbx}mvny8s=ezKv#bqJR{4(M+(U33w(A5pb?0 zXeM0MFF-^9lnO}2gJx1EFy|Ho?068G4RaV+0IgG?#Q~ftV900@{{mZRPKgpY6wN6| z3)q)S9ehY?H6>PH{+gpei^h&X6pJ4kpjrSwD1ZL00#ZcZh79czAW-yR*%pwx2NS@5 z*D)s$@H>PHfK`F{N{d7Ze7$Jh2_G$)0GHVnVC#N?wQ1RXynw|uu1WwWQ^_xYo3BDZ zCT|olrnC7Pi(y3}^R1 zGbp;b!v*k;hk!ZA=p4-e0!{}k6DYthlvF_eU=hurQ~*b*SCcx_2(a}N1wiT`LyKgg zNB|2MGSq?zNPUeg)CnB1i3b({oK}i!WWg_B7ux?*9YhxV0^k}20K4}*!f=(ZRKWQP z&|^#N9>KK8615DxbLGhGK002ovPDHLkV1kB!D9Zo< literal 0 HcmV?d00001 diff --git a/cubyz-client/res/textures/blocks/ruby_ore.png b/cubyz-client/res/textures/blocks/ruby_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..ec149d49986d64fc2092e363ac47a73c1e731f21 GIT binary patch literal 1462 zcmV;n1xfmeP)00004XF*Lt006O% z3;baP00009a7bBm000ia000ia0czHX2><{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx2G)Y83RA@u(**$L*R}{wa{SXL=5(;`c5Dfx^XfOyt>4E}jB_vZg zvGEJGr4X4SFHIWq0V1WNNs&Y%Qk2qNnxu##K0um$f#mM<{IT!s**Tt>HIA+D(+%3a z_nvdl8GC2e%4oatQBQ=)mo3H>ri3sdU20=>^~L7qH&37LEiQihS}Tx%AccwH#ctVUA_9(nKS>4Mjn5kJ?rE&;5TJc8D)9$V!j4QSdGCAl-OVH z-TQfA;rnaX{y2B;?Zt~fK73fl>-+b=URrwBz`N4-hfn3So*Wx52g@n{tjx8&+}U}3 z^X7L~uDn`ZeYvsmVr$Ed6>Dp2lLk0%aj|Tg>Vd31&2u@ZUEDxK`E>)ObdPeFH<7PD z*Xo>8J+LE1?cz!z%HMCGaP@v|=tGziQV3H4 zeF#N|=SCY+$jNA+<+;IfKnnTq8{qQKdTy{IAcdTW27KFf1I(sKA*~J6h&xiG7FW-k z4!CCH@$&NWiD;lN%Ky;7Tu40#<+}m$1@x3+Yl^MHvBFe9SU{Mtb$fgAWsdcLEh)C9 z*eaYaOa+7mgb7>cY``~fcDG}VG=!~!wqg$LRgC0g)o^k z@ag8}r1S?5%J}Wpt;vg?_qZueZPYGI1%#!jT?ms&1A7Y#WxTy`p^WmwE&uw*O=y2k zZPYGI1%#!jT?muWtEDA3@ay^WrF#FAJ=os51qusjImO6LYzz6rD3j(P)@2ccZ))Bu-%);D2xw4>gDM9)xnG(Ez!Hy;9z~`tpL$jt~|QmLi2PC8P-aE1=R2WPg#7PnZ(U6v6_+Qlt>3 zgcKE*UJpt+6%9~y^X^9}v4Jltn+a literal 0 HcmV?d00001 diff --git a/cubyz-client/res/textures/blocks/sand.png b/cubyz-client/res/textures/blocks/sand.png new file mode 100644 index 0000000000000000000000000000000000000000..5c7e45e383d1c1cac9c883eae916686c43cf91f6 GIT binary patch literal 967 zcmV;&133JNP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B012{=UK~!i%?U~DM8$l366{^#53<|`d_~00% z6zqmtEEV5;S2IIFfPr^t&Q@(#iCprar@ybyOT7H50L@7@74Z3+6>uJ&J~&XI3Y1k~ zaiBDA1%Cf{2lEhY0us2zk+O;eZn>u@08C1>W(bT4G#y~P=dA!j2Rbxq9V}}Bmw>DV zT*lK!=!~mj9xST@ivwj9SPUyrTw4MON}vamvX5tA3)-6e`N@+&GB+mDIM5WFDG<>e zoeLNfztmS6TMHyeA1I9j7nsq!vAY1G3*{Ctf}!9>t$;t)K2PGg!Hq03sxB_gqg;{~)e&`THekvCl$k^|`jE1=!Jb)KR9K>DEe43u~>pXbTv z_|vrQ7YhK$s^qtjz||om`$PeR4s_@;ke~P}Pe+tK=V2;0_nrU7(7h$BguW3rcj8 z20IF1We3lVOF*~vMKwNKK%1&a0CCL2=uXWN=@tNxfqCUtiUOV^(V@#8O#55-zJNk!Tn%4H z{)Px#y(^&TUmjW@eE>oI88|_0_W;lB+{?}v=&m0CqXy$}0j(DhEOW8|q6^5@c;Gvr pmo8Z5Q4jGk{ulUazIlPy=YOY-Ni~>N+Hn8?002ovPDHLkV1jvzo8 reg) { - // Instances + // Normal + bedrock = new Bedrock(); grass = new Grass(); dirt = new Dirt(); + oakLeaves = new OakLeaves(); + oakLog = new OakLog(); + sand = new Sand(); stone = new Stone(); + + // Ores + coal = new CoalOre(); + diamond = new DiamondOre(); + emerald = new EmeraldOre(); + gold = new GoldOre(); + iron = new IronOre(); + ruby = new RubyOre(); + + + // Fluids water = new Water(); // Register - reg.registerAll(grass, dirt, stone, water); + reg.registerAll(bedrock, grass, dirt, oakLeaves, oakLog, sand, stone, coal, diamond, emerald, gold, iron, ruby, water); } } diff --git a/cubyz-common/src/io/cubyz/blocks/Bedrock.java b/cubyz-common/src/io/cubyz/blocks/Bedrock.java new file mode 100644 index 00000000..478f6788 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/Bedrock.java @@ -0,0 +1,15 @@ +package io.cubyz.blocks; + +public class Bedrock extends Block { + + public Bedrock() { + setTexture("bedrock"); + setID("cubz:bedrock"); + setUnbreakable(); + } + + public void update() { + + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/BlockInstance.java b/cubyz-common/src/io/cubyz/blocks/BlockInstance.java index 9b708a2e..77bd36ef 100644 --- a/cubyz-common/src/io/cubyz/blocks/BlockInstance.java +++ b/cubyz-common/src/io/cubyz/blocks/BlockInstance.java @@ -81,7 +81,7 @@ public class BlockInstance { this.pos = pos; } - + public BlockInstance[] getNeighbors() { BlockInstance[] inst = new BlockInstance[6]; @@ -100,6 +100,30 @@ public class BlockInstance { return inst; } + public BlockInstance getNeighbor(int i) { + // 0 = EAST (x - 1) + // 1 = WEST (x + 1) + // 2 = NORTH (z + 1) + // 3 = SOUTH (z - 1) + // 4 = DOWN + // 5 = UP + switch(i) { + case 5: + return world.getBlock(pos.x, pos.y + 1, pos.z); //NOTE: Normal > 1 + case 4: + return world.getBlock(pos.x, pos.y + -1, pos.z); //NOTE: Normal > 1 + case 3: + return world.getBlock(pos.x, pos.y, pos.z + -1); //NOTE: Normal > 1 + case 2: + return world.getBlock(pos.x, pos.y, pos.z + 1); //NOTE: Normal > 1 + case 1: + return world.getBlock(pos.x + 1, pos.y, pos.z); //NOTE: Normal > 1 + case 0: + return world.getBlock(pos.x + -1, pos.y, pos.z); //NOTE: Normal > 1 + } + return null; + } + public IBlockSpatial getSpatial() { if (spatial == null) { spatial = ClientOnly.createBlockSpatial.apply(this); diff --git a/cubyz-common/src/io/cubyz/blocks/CoalOre.java b/cubyz-common/src/io/cubyz/blocks/CoalOre.java new file mode 100644 index 00000000..e9b399d6 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/CoalOre.java @@ -0,0 +1,12 @@ +package io.cubyz.blocks; + +public class CoalOre extends Ore { + + public CoalOre() { + setTexture("coal_ore"); + setID("cubz:coal_ore"); + setHeight(127); + setChance(0.02F); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/DiamondOre.java b/cubyz-common/src/io/cubyz/blocks/DiamondOre.java new file mode 100644 index 00000000..50732827 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/DiamondOre.java @@ -0,0 +1,12 @@ +package io.cubyz.blocks; + +public class DiamondOre extends Ore { + + public DiamondOre() { + setTexture("diamond_ore"); + setID("cubz:diamond_ore"); + setHeight(15); + setChance(0.002F); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/EmeraldOre.java b/cubyz-common/src/io/cubyz/blocks/EmeraldOre.java new file mode 100644 index 00000000..dccfae7b --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/EmeraldOre.java @@ -0,0 +1,12 @@ +package io.cubyz.blocks; + +public class EmeraldOre extends Ore { + + public EmeraldOre() { + setTexture("emerald_ore"); + setID("cubz:emerald_ore"); + setHeight(25); + setChance(0.001F); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/GoldOre.java b/cubyz-common/src/io/cubyz/blocks/GoldOre.java new file mode 100644 index 00000000..f4d62224 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/GoldOre.java @@ -0,0 +1,12 @@ +package io.cubyz.blocks; + +public class GoldOre extends Ore { + + public GoldOre() { + setTexture("gold_ore"); + setID("cubz:gold_ore"); + setHeight(32); + setChance(0.005F); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/IronOre.java b/cubyz-common/src/io/cubyz/blocks/IronOre.java new file mode 100644 index 00000000..78b397e6 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/IronOre.java @@ -0,0 +1,12 @@ +package io.cubyz.blocks; + +public class IronOre extends Ore { + + public IronOre() { + setTexture("iron_ore"); + setID("cubz:iron_ore"); + setHeight(63); + setChance(0.03F); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/OakLeaves.java b/cubyz-common/src/io/cubyz/blocks/OakLeaves.java new file mode 100644 index 00000000..7dffdf12 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/OakLeaves.java @@ -0,0 +1,14 @@ +package io.cubyz.blocks; + +public class OakLeaves extends Block { + + public OakLeaves() { + setTexture("oak_leaves"); + setID("cubz:oak_leaves"); + } + + public void update() { + + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/OakLog.java b/cubyz-common/src/io/cubyz/blocks/OakLog.java new file mode 100644 index 00000000..601eba6e --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/OakLog.java @@ -0,0 +1,10 @@ +package io.cubyz.blocks; + +public class OakLog extends Block { + + public OakLog() { + setTexture("oak_log"); + setID("cubz:oak_log"); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/Ore.java b/cubyz-common/src/io/cubyz/blocks/Ore.java new file mode 100644 index 00000000..77e5ea33 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/Ore.java @@ -0,0 +1,24 @@ +package io.cubyz.blocks; + +public class Ore extends Block { + + private float chance; + private int height; + + public float getChance() { + return chance; + } + + public int getHeight() { + return height; + } + + public void setChance(float chance) { + this.chance = chance; + } + + public void setHeight(int height) { + this.height = height; + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/RubyOre.java b/cubyz-common/src/io/cubyz/blocks/RubyOre.java new file mode 100644 index 00000000..24924fe4 --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/RubyOre.java @@ -0,0 +1,12 @@ +package io.cubyz.blocks; + +public class RubyOre extends Ore { + + public RubyOre() { + setTexture("ruby_ore"); + setID("cubz:ruby_ore"); + setHeight(8); + setChance(0.006F); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/blocks/Sand.java b/cubyz-common/src/io/cubyz/blocks/Sand.java new file mode 100644 index 00000000..480b05bf --- /dev/null +++ b/cubyz-common/src/io/cubyz/blocks/Sand.java @@ -0,0 +1,10 @@ +package io.cubyz.blocks; + +public class Sand extends Block { + + public Sand() { + setTexture("sand"); + setID("cubz:sand"); + } + +} \ No newline at end of file diff --git a/cubyz-common/src/io/cubyz/world/Chunk.java b/cubyz-common/src/io/cubyz/world/Chunk.java index fce5c085..27278fa5 100644 --- a/cubyz-common/src/io/cubyz/world/Chunk.java +++ b/cubyz-common/src/io/cubyz/world/Chunk.java @@ -6,6 +6,7 @@ import org.joml.Vector3i; import io.cubyz.blocks.Block; import io.cubyz.blocks.BlockInstance; +import io.cubyz.blocks.Ore; import io.cubyz.modding.ModLoader; public class Chunk { @@ -15,11 +16,29 @@ public class Chunk { private int ox, oy; private boolean generated; private boolean loaded; - private static Block grassBlock = ModLoader.block_registry.getByID("cubz:grass"); - private static Block dirtBlock = ModLoader.block_registry.getByID("cubz:dirt"); + + // Normal: + private static Block grass = ModLoader.block_registry.getByID("cubz:grass"); + private static Block sand = ModLoader.block_registry.getByID("cubz:sand"); + private static Block dirt = ModLoader.block_registry.getByID("cubz:dirt"); + private static Block stone = ModLoader.block_registry.getByID("cubz:stone"); + private static Block bedrock = ModLoader.block_registry.getByID("cubz:bedrock"); + + // Ores: + private static ArrayList ores = new ArrayList<>(); + static { + ores.add((Ore) ModLoader.block_registry.getByID("cubz:coal_ore")); + ores.add((Ore) ModLoader.block_registry.getByID("cubz:iron_ore")); + ores.add((Ore) ModLoader.block_registry.getByID("cubz:ruby_ore")); + ores.add((Ore) ModLoader.block_registry.getByID("cubz:gold_ore")); + ores.add((Ore) ModLoader.block_registry.getByID("cubz:diamond_ore")); + ores.add((Ore) ModLoader.block_registry.getByID("cubz:emerald_ore")); + } + + // Liquids: private static Block water = ModLoader.block_registry.getByID("cubz:water"); - public static final int SEA_LEVEL = 67; + public static final int SEA_LEVEL = 100; private World world; @@ -49,52 +68,199 @@ public class Chunk { return list; } - public void generateFrom(float[][] map) { - //System.out.println(dirtBlock); - inst = new BlockInstance[16][255][16]; + /** + * Add the Block b at relative space defined by X, Y, and Z, and if out of bounds, call this method from the other chunk (only work for 1 chunk radius)
+ * Meaning that if x or z are out of bounds, this method will call the same method from other chunks to add it. + * @param b + * @param x + * @param y + * @param z + */ + public void addBlock(Block b, int x, int y, int z) { + int rx = x - (ox << 4); + if (rx < 0) { + // Determines if the block is part of another chunk. + world.getChunk(ox - 1, oy).addBlock(b, x, y, z); + return; + } + if (rx > 15) { + world.getChunk(ox + 1, oy).addBlock(b, x, y, z); + return; + } + int rz = z - (oy << 4); + if (rz < 0) { + world.getChunk(ox, oy - 1).addBlock(b, x, y, z); + return; + } + if (rz > 15) { + world.getChunk(ox, oy + 1).addBlock(b, x, y, z); + return; + } + if (world.getBlock(x, y, z) != null) { + return; + } + BlockInstance inst0 = new BlockInstance(b); + inst0.setPosition(new Vector3i(x, y, z)); + inst0.setWorld(world); + world.blocks().add(inst0); + list.add(inst0); + try { + inst[rx][y][rz] = inst0; + } catch (NullPointerException e) {} + world.markEdit(); + BlockInstance[] neighbors = inst0.getNeighbors(); + for (int i = 0; i < neighbors.length; i++) { + if (neighbors[i] == null) { + world.visibleBlocks().get(inst0.getBlock()).add(inst0); + break; + } + } + for (int i = 0; i < neighbors.length; i++) { + if (neighbors[i] != null && world.visibleBlocks().get(neighbors[i].getBlock()).contains(neighbors[i])) { + BlockInstance[] neighbors1 = neighbors[i].getNeighbors(); + boolean vis = true; + for (int j = 0; j < neighbors.length; j++) { + if (neighbors[j] == null) { + vis = false; + break; + } + } + if(vis) { + world.visibleBlocks().get(neighbors[i].getBlock()).remove(neighbors[i]); + } + } + } + } + + //TODO: Take in consideration caves. + //TODO: Ore Clusters + //TODO: Finish vegetation + //TODO: Clean this method + public void generateFrom(float[][] map, float[][] vegetation, float[][] oreMap) { + inst = new BlockInstance[16][World.WORLD_HEIGHT][16]; + loaded = true; + int wx = ox << 4; + int wy = oy << 4; + + // heightmap pass for (int px = 0; px < 16; px++) { for (int py = 0; py < 16; py++) { float value = map[px][py]; - if (value < 0) { - value -= value; - } int y = (int) (value * World.WORLD_HEIGHT); - if (y < SEA_LEVEL-1) { - y = SEA_LEVEL-1; - } - for (int j = y; j > -1; j--) { - if (j > SEA_LEVEL) { - if (j == y) { - inst[px][j][py] = new BlockInstance(grassBlock); - } else { - inst[px][j][py] = new BlockInstance(dirtBlock); - } + for (int j = y > SEA_LEVEL ? y : SEA_LEVEL; j >= 0; j--) { + BlockInstance bi = null; + if(j > y) { + bi = new BlockInstance(water); + }else if (y < SEA_LEVEL + 4 && j > y - 3) { + bi = new BlockInstance(sand); + } else if (j == y) { + bi = new BlockInstance(grass); + } else if (j > y - 3) { + bi = new BlockInstance(dirt); + } else if (j > 0) { + float rand = oreMap[px][py] * j * (256 - j) * (128 - j) * 6741; + rand = (((int) rand) & 8191) / 8191.0F; + bi = selectOre(rand, j); } else { - inst[px][j][py] = new BlockInstance(water); + bi = new BlockInstance(bedrock); } - BlockInstance bi = inst[px][j][py]; - bi.setPosition(new Vector3i(ox * 16 + px, j, oy * 16 + py)); + bi.setPosition(new Vector3i(wx + px, j, wy + py)); + //bi.getSpatial().setPosition(new Vector3i(wx + px, j, wy + py)); + //bi.getSpatial().setScale(0.5F); bi.setWorld(world); - world.blocks().add(inst[px][j][py]); - list.add(inst[px][j][py]); - if (j < 255) { - BlockInstance is = inst[px][j+1][py]; - if (is != null) { - if (is.getBlock().isTransparent()) { - world.visibleBlocks().get(bi.getBlock()).add(bi); + world.blocks().add(bi); + list.add(bi); + inst[px][j][py] = bi; + /*if (bi.getBlock() instanceof IBlockEntity) { + updatables.add(bi); + }*/ + } + world.markEdit(); + } + } + + // Vegetation pass + for (int px = 0; px < 16; px++) { + for (int py = 0; py < 16; py++) { + float value = vegetation[px][py]; + int incx = px == 0 ? 1 : -1; + int incy = py == 0 ? 1 : -1; + if (map[px][py] * World.WORLD_HEIGHT >= SEA_LEVEL + 3 && value > 0.5f && ((int)((vegetation[px][py]-vegetation[px+incx][py+incy]) * 10000000) & 127) == 1) { // "&127" is a faster way to do "%128" + Structures.generateTree(this, wx + px, (int) (map[px][py] * World.WORLD_HEIGHT) + 1, wy + py); + } + } + } + + // Visible blocks + boolean chx0 = world.getChunk(ox - 1, oy).isGenerated(); + boolean chx1 = world.getChunk(ox + 1, oy).isGenerated(); + boolean chy0 = world.getChunk(ox, oy - 1).isGenerated(); + boolean chy1 = world.getChunk(ox, oy + 1).isGenerated(); + for (int px = 0; px < 16; px++) { + for (int py = 0; py < 16; py++) { + float value = map[px][py]; + int y = (int) (value * World.WORLD_HEIGHT); + if(y < SEA_LEVEL) { + y = SEA_LEVEL; + } + for (int j = y; j >= 0; j--) { + BlockInstance[] neighbors = inst[px][j][py].getNeighbors(); + for (int i = 0; i < neighbors.length; i++) { + if (neighbors[i] == null && (j != 0 || i != 4) + && (px != 0 || i != 0 || chx0) + && (px != 15 || i != 1 || chx1) + && (py != 0 || i != 3 || chy0) + && (py != 15 || i != 2 || chy1)) { + world.visibleBlocks().get(inst[px][j][py].getBlock()).add(inst[px][j][py]); + break; + } + } + } + // Checks if blocks from neighboring chunks are changed + int [] neighbor = {1, 0, 2, 3}; + int [] dx = {-1, 16, px, px}; + int [] dy = {py, py, -1, 16}; + boolean [] toCheck = { + chx0 && px == 0, + chx1 && px == 15, + chy0 && py == 0, + chy1 && py == 15}; + for(int k = 0; k < 4; k++) { + if (toCheck[k]) { + for (int j = y + 1; j <= World.WORLD_HEIGHT; j++) { + BlockInstance inst0 = world.getBlock(wx + dx[k], j, wy + dy[k]); + if(inst0 == null) { + break; + } + if(world.visibleBlocks().get(inst0.getBlock()).contains(inst0)) { + continue; + } + if (inst0.getNeighbor(neighbor[k]) == null) { + world.visibleBlocks().get(inst0.getBlock()).add(inst0); + break; } - } else { - world.visibleBlocks().get(bi.getBlock()).add(bi); } } } world.markEdit(); } } - generated = true; } + // This function only allows a less than 50% of the underground to be ores. + public BlockInstance selectOre(float rand, int height) { + float chance1 = 0.0F; + float chance2 = 0.0F; + for (Ore ore : ores) { + chance2 += ore.getChance(); + if(height < ore.getHeight() && rand > chance1 && rand < chance2) + return new BlockInstance(ore); + chance1 += ore.getChance(); + } + return new BlockInstance(stone); + } + public boolean isGenerated() { return generated; } diff --git a/cubyz-common/src/io/cubyz/world/LocalWorld.java b/cubyz-common/src/io/cubyz/world/LocalWorld.java index 3b798ca5..71eda5f8 100644 --- a/cubyz-common/src/io/cubyz/world/LocalWorld.java +++ b/cubyz-common/src/io/cubyz/world/LocalWorld.java @@ -68,7 +68,7 @@ public class LocalWorld extends World { } } } - else if (popped.type == ChunkActionType.UNLOAD) { + /*else if (popped.type == ChunkActionType.UNLOAD) { CubzLogger.instance.fine("Unloading " + popped.chunk.getX() + "," + popped.chunk.getZ()); for (BlockInstance bi : popped.chunk.list()) { Block b = bi.getBlock(); @@ -76,7 +76,7 @@ public class LocalWorld extends World { spatials.remove(bi); } popped.chunk.setLoaded(false); - } + }*/ } System.out.print(""); } @@ -179,7 +179,9 @@ public class LocalWorld extends World { public void synchronousGenerate(Chunk ch) { int x = ch.getX() * 16; int y = ch.getZ() * 16; float[][] heightMap = Noise.generateMapFragment(x, y, 16, 16, 300, seed); - ch.generateFrom(heightMap); + float[][] vegetationMap = Noise.generateMapFragment(x, y, 16, 16, 300, seed + 3 * (seed & Integer.MAX_VALUE)); + float[][] oreMap = Noise.generateMapFragment(x, y, 16, 16, 300, seed - 3 * (seed & Integer.MAX_VALUE)); + ch.generateFrom(heightMap, vegetationMap, oreMap); } @Override diff --git a/cubyz-common/src/io/cubyz/world/Structures.java b/cubyz-common/src/io/cubyz/world/Structures.java new file mode 100644 index 00000000..10525f64 --- /dev/null +++ b/cubyz-common/src/io/cubyz/world/Structures.java @@ -0,0 +1,37 @@ +package io.cubyz.world; + +import io.cubyz.blocks.*; +import io.cubyz.modding.ModLoader; +import io.cubyz.world.*; + +import java.util.Random; + +import org.joml.*; + +public class Structures { + + private static Random random = new Random(); + + public static void generateTree(Chunk ch, int x, int y, int z) { + //Instances + Block wood = ModLoader.block_registry.getByID("cubz:oak_log"); + Block leaves = ModLoader.block_registry.getByID("cubz:oak_leaves"); + + //Position of the first block of wood + int height = 7 + random.nextInt(5); + for (int i = 0; i < height; i++) { + ch.addBlock(wood, x, y + i, z); + } + + //Position of the first block of leaves + height = 3 * height >> 1; + for (int i = height / 3; i < height; i++) { + int j = (height - i) >> 1; + for (int k = 1 - j; k < j; k++) { + for (int l = 1 - j; l < j; l++) { + ch.addBlock(leaves, x + k, y + i, z + l); + } + } + } + } +} \ No newline at end of file diff --git a/res/textures/blocks/bedrock.png b/res/textures/blocks/bedrock.png new file mode 100644 index 0000000000000000000000000000000000000000..b26ce5b78747d3904733344e2448931f579b1723 GIT binary patch literal 2211 zcmeHH`8S&h6#Xo*)DlY&%On}1LbEiMpfdPkuZ~(`OAt|=Xo+M*NvDd?sTOT)gQ3*Y zR*eeESdX!cqNTNWN>wx3seP-~U`%K9Uznfgopawk@1FC1xc8j*u6ug8C>_x`0sw%L zo2#SuA=`h3oYY}2X%Va*k_6A&g#w74=`9@&(k$?65C9s43I|LG07wCzr>IVcx|Ea@ z1Okzfk&%^^m6w-SP*6}*R8&@0hC-pLs;cVh>M$5gLqkJLOA8K%Yin!k=;-L`>gws~ zArJ^85{W{g^!4@8Xta@$5e9=XF)=xI>=+h{#o=%S0)a>*nwgndSXfwETH4sykjZ2_ zJ39~rDHMu>gM+K9tB;Qll}h#X^$iRRq|@mP27}3DhJ}TNhljIRtjNenHk-}iaJXD< zOiT=q$Gd#_a#B)Ka&mG?N=j;K>iqotp@skJ{{;S90(@C<{NbiN*ENs_0Ls69hQt8p ze)ypXk97)&_2GOI8_$e63vij|qGR#VXJb+3cp}~++$G@fzBnVSR0jON#&#DCvT|8Y9lZQ;)L8+5H-<@8i(f=4xV;8w2Gy^3e; zqK{OEUB%z{#oqWv)ycNEL4!FNMR^|2jrgJ!Yh7BE0&X~doAbw3T34 zE#_R)1w%c-2}fWQtjsI^Fce?F?9qYs666Z{J4{I#2e1PBY`f|{ zCX>j8CQ!(Xx@qO`A02kH92f;Q!iBzhhVza?KbP`tss6 z^M`DMs)@bYW=4cC4xKNhmPZUMWh1Rh$}=>!K*@+dxUSEGvQl*`&D$@XI8XSo)$lkH z(+#^*XU7#8u*;U+cizQ(0U7jsF>*HN@$y9RL4l^sIICW1Pw7b7WBk27=DwtH`s!wl zc0R0d@29uk@h<&0^YA3=uELdVXYx^4L)7y261($TDdOL2rH+()^(nviOj|j3zTI6I zp)o4sn|*`H!6xF$TCp)*vD8waAR3Kc@q6L)7KvJ{4ttWgY;fMXi>(lPP;;tT4o0_IKaL_rMp|1%I~R3Imi7jrf!V>8Ndc5_}JUU*tu={Pct@?zl>cYogIObk`rCOS9d&FUiGRKDmVLO`QWVN zY;o8RR_cM{A8HBN{x{-9xYN5!+JeqC6@y1l!jmJTCi9UF1LyqH%5h)v2l`XdxTfFDb9jhkKmXY0hz?ZNZ`#9Q6+Mw1tw1;P2 zkS2||Qi_ByF7o!^5~cgov_1s<#?WXV^F}+isRwj!dV0;>H%MjDIMAv>6~xy?4AZWq z&D<;Fnm0*y1)cy;+Kt`M8$*ri7oB6hTI!_gnmOGGSnubss&-Ez}(KT%n+9sW-_0{w6ORQ+=)kXKwf9wb68b?%zYq^ULg9RBs zqv&-eA2vrP>LT%>j*GL83ZVzoo%rN}YE@L>))Weh?5100iB~VtDEi`sCk3k!okMR# z%GGc7UmRobRNWufy)#_QIJ4ztFZ~P<797B*T6*j~OZgeaGdKI}9?2UVmkIx6{>+Ew zxy&Q$Jv)sTve)DVc0Xqe_7-0C|5cSGTa?t9J?#L6w*aKt&a@`3Tj(`(G%~r1 zc;S($%< literal 0 HcmV?d00001 diff --git a/res/textures/blocks/coal_ore.png b/res/textures/blocks/coal_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..a46e1165cd7c0e022c71bc566bf394ab952b3484 GIT binary patch literal 1387 zcmV-x1(f=UP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B01l&nPK~!i%?b=T-Y*`e>VPi8h5)+9DiNrTB zmY9fvgb7B4p(ZJWo|*KYuiVS~{_NgW%h~swQ9!3tfoBUjv zvxSF;hv;y8d>kJSs&jW;_gk`ccQ5PYRSHu??cRu<8@N;uI(b|FeayLtelPB@aVEi5HY?~lnPUNNq0qD)vy zK4gFz_X|tHl}(fhOUc(7z)u|yzSjVbUW-M_#K*Fk0XQoxH8F>B(@V;$bUb8vj(zD`$?dMe4znCL}#^$7ScIDjk=$T*5dR$=z-7K zWD>s^e2D>uBL1%d7DDS$i0=XDmoQTkN1He*Tq`UklqHl2N1vZxf0$!G;Ybrln>Z@m zFDxaLC6ozA7aYKE9h~mQY2kihDWNQ(OgK7v07tJ;^B!u1`-P>1vV=0>s0ZM6k#IzQ zuQ+k}=3l;LQkKx7H_DorV=}qFzaKn6iC%al$`V@iMp+Z_M-1Ssf$ZWZfwF`ay;0Ug z{6z)`5#3*%Mp;6O-Y9D#z6YSLiHzd(JQ#>;g{9tzk_;YT5o8yZdLv5mYk(ohKADX8 zIwVTc>xVh66_$kFLW`y-arBy7jq~#I@~HzjarsWte*f*`vj-^A3y(y*;XZW$XANYR z1)qfZ0m!m2+6i;Ny>Km}vn`Z05m_h`8a+Kd#ZPwU=jYM=>gww5?vA=q+|!6JPR~Y# zvL><%Wx@bQM@MsiLZfaJ_cXE#O9^F7WEaYW0pe>h{|SxK;oQ^6E-WRKHIZE?lh*E7hZh$Y9Pj?6p6!HfA-k|79Bp#Mw$}k}Z*OCOgM)+kp!@-u9>Sdo z+X>r3c40|4+Tet<6Y9)%VOpTmT0an?X~@sq%bxfgL4vW!BDguDsc z;`A2L={Vc-qXzJ;@c}Io@+NFc-KWO3EcvUpjXJrh=>GVPxl{feG+J)9l9G%trD`gk53#lt5df}0{umi1|I6CVm58$kU?9%5+ tpmh^RXMNNFA)<3h543LL=&b2<`VYCM@(7u1Z!Q1;002ovPDHLkV1oQ?h=KqB literal 0 HcmV?d00001 diff --git a/res/textures/blocks/diamond_ore.png b/res/textures/blocks/diamond_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..dce4020af37e5e8f64ed3e893db1aebc95ea1a35 GIT binary patch literal 1475 zcmV;!1w8tRP)00004XF*Lt006O% z3;baP00009a7bBm000iY000iY0qR1rzyJUM7<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx2K}keGRA@u(*|BdNMHI*Jt*K}b5)y5iKtVx;_!DR-sX#PWQQ#0b z`y4xn$PIxCA?UCaDGd^$ASH@qDQO~#>rzB0N#`O(qLc}9zxTb}*?l*U-90;;MLwG1 zZf4$__tv+2wp{IHE(}DNd|xohFeQWu=|a1^JD0EQ&wji1$$b9#ufJT}`SQZyfgJZXkt! zbaeFg&6}^>xlkN@~7jZc67ad!9v4K$@MhaJpm1Jy;7Q!i2}EQjo8WvsT@ z{?3PohaX(Oe(~z=?3>x;uP<3+$#gnhG|)XS>w&BTtxVN38?}oy;8A|wKQpiR$(3GA%bJJkiA%*<+4RkMm)&n~nQpiR$Q2O2|A%zqh$Pss< zNG;X?Z+hUGO(t7gTN}~9P?Z0&fwho&6w0>-$mh^gh^-;E3dagl4q*;q!q&aL#V>QL zJ8TKDHN;lod|}EV%ppwJx@H6R{APCygEJPoZ$@cd4;0Bt~v+w*g2y;l$8(|^JAJIVf z@@G8|=8&Q{!a|fku7T3;ErdCw=#8)t(#hO!Y=7 z&dUadp!Uhc9tOpbIgmebI;Zd}W64X`YPg(z7Fld7)Uu2359>LlVu zA-7Pz*g-602n$iW5GGZs`2G4P`}Aq`;6ZwEN)0gO5Ei0#Axx@8-S_Y3AIkH`$M&Nj zbU1PgwF^@YVIgW4!lZi3uKnG+)w5@H4{tnvoEl(z`Hy;*9hQaKg(+cch#EtSd*GcL zH|*2d8Kl|#25c~~L=NFhhh>Llp>|Llp>|EX*lh%+6QLu_>@S6Vl* zUDuWBq8B55SLg+6AYP%cD@P^lG4c`LiC_QAWKE%cD@P z^liYt?5qK1`=MTkjNW^m?RE0i~RY2I``@{o)3`%aBi)63&!M1%!o2AxsISNJ`a|o;^9z zuwuFml#qKAQaD^ghh^zr{;UUfbZ+7jY8izT4)r=LODc5b(~o62tp@Dkr5B`dsMldx zQn)pslns`pvQKS{IN8d4v5J*mk96@ks_km#+YCnvM>?dC;y?LHxbK9EmZ^*8Q(JBz zN9qt;+oJzcmQcG;b*3pjyW!H{zyeZ-*xGi&4RkMm)&mC?kUGTHwv%rle`s(>52OyU dwQV|`{sTi@77m$3UMv6r002ovPDHLkV1oW1tr!3R literal 0 HcmV?d00001 diff --git a/res/textures/blocks/emerald_ore.png b/res/textures/blocks/emerald_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..884c91a11359d547551ca6ccf15a494f398898aa GIT binary patch literal 1433 zcmXw3do+}382`qY&os;ulWV6&$z_$>M#yGnn2bc$WsO{BbWDxZ&?44l%zVpMqO>k; zr^Ux+RSqGI%;c7e5F^)S3T55bC?T1d?CA2x^FHVIyzlv)=l49n^Iq`wa>HWuF#rHy z-6^g*k(5smJ&6ENeOXl&hEm{7(Uia#0Qjz9BM@%V>`GtK55S^Ygof^3L_+{*#`0^G{g8|xcV zA0)4fm){JwB+Zd;&Fhe32G1KXfRkN%GSx^*p7J>-V=T##=>ylnj(iRX17md}4RZJum7JIDoPe zqdb3J3Ng;P(snwLV=(B?_q6lw7ey)z*^%(7d8coIYtuXG+`r=lLDe7V#d0o$T@?wVoC?P2x%i!^c_lN1=pLvR z2jv1{$h#R#&a!xYJ}ex=fV{_wb(vv}cq83wq-%JbJq=7=fBWW`Ueyx6L+%UZZYm?& zsb!m^OUGO^G;1}|lvXwTYZsDeRdv{-=VQX)Lw7p!hrbh&WFJ7sw$ViVPJ-$g3$>+` zs3oFmZzP<~_e~#s2qstq-KP%Fc56>PY^G+fw>NtU6E)lG5NoKnxulbrTTnIR&8Yzx zQ2)T}C(D@sR4DF-w&{K?$wX5^AjgI{dkK`uj0M|kQ14O200YsXd@Bb_O$?d%==sd< z=H@P)G^JdWsn!h<@PW+1RkLoE$Q#Bl+9)XZfG&ZU1C#GtTU&d<+e`dY7rxdOO?0QX zrp|G{!7{yRX+!!qbehA*?Zp_3J*McIqp_eFw--E%n1_V)Y|Vslx*D^nM{b38RJ)-J z%5B=HM2av-xT7?8qoc5~pZn|`9UXm<{=+!;FETVHx{&yCEeA|gLk8zLN?ZsrAc{+36r=SxQ@_Rg|O2%^&kr1!*sauZes!k zM5Dgot_>v-I_gW>%nj+KaEQ0DqzRd_jk2)*ci}uBR+@*h@wTWev%4!#Y9xGSjG-E? zUU?fqy`>8fBX}qg%8+;xPHQgXTG{C{>;OWJ{)-r4+E>lfNTKbf8M_sbNrP$W5 zm))1ra+A$0Ak7-TNHvoZ1cW%3jb&R`sT?iK=07zv_$;3LqtG$E-_vW9AQjTvfzR(d bCl00004XF*Lt006O% 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 X0Ca}dZ(Wl>00000NkvXXu0mjf27785 literal 0 HcmV?d00001 diff --git a/res/textures/blocks/oak_log.png b/res/textures/blocks/oak_log.png new file mode 100644 index 0000000000000000000000000000000000000000..a64e61a31317659e10533c670d03c9e2fb6317b7 GIT binary patch literal 739 zcmV<90v!E`P)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B00#r#vK~!i%?UqeW>@X07xdbaNF&o5^1#Gzx zH{cSixdu0*q(U9L^4GRI&Uirjl$UDr?EWTklDqfI*k~RO&BKv}@3$-tK^7=*y2j(Z zRyN4O=>lk-NPUCp?Db*7ik&I#9!zH;0`uiRpS7~VnF3sUQNZueB!FB0a%sf0A~mmaIOv71+es=7qAUbx}mvny8s=ezKv#bqJR{4(M+(U33w(A5pb?0 zXeM0MFF-^9lnO}2gJx1EFy|Ho?068G4RaV+0IgG?#Q~ftV900@{{mZRPKgpY6wN6| z3)q)S9ehY?H6>PH{+gpei^h&X6pJ4kpjrSwD1ZL00#ZcZh79czAW-yR*%pwx2NS@5 z*D)s$@H>PHfK`F{N{d7Ze7$Jh2_G$)0GHVnVC#N?wQ1RXynw|uu1WwWQ^_xYo3BDZ zCT|olrnC7Pi(y3}^R1 zGbp;b!v*k;hk!ZA=p4-e0!{}k6DYthlvF_eU=hurQ~*b*SCcx_2(a}N1wiT`LyKgg zNB|2MGSq?zNPUeg)CnB1i3b({oK}i!WWg_B7ux?*9YhxV0^k}20K4}*!f=(ZRKWQP z&|^#N9>KK8615DxbLGhGK002ovPDHLkV1kB!D9Zo< literal 0 HcmV?d00001 diff --git a/res/textures/blocks/ruby_ore.png b/res/textures/blocks/ruby_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..ec149d49986d64fc2092e363ac47a73c1e731f21 GIT binary patch literal 1462 zcmV;n1xfmeP)00004XF*Lt006O% z3;baP00009a7bBm000ia000ia0czHX2><{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx2G)Y83RA@u(**$L*R}{wa{SXL=5(;`c5Dfx^XfOyt>4E}jB_vZg zvGEJGr4X4SFHIWq0V1WNNs&Y%Qk2qNnxu##K0um$f#mM<{IT!s**Tt>HIA+D(+%3a z_nvdl8GC2e%4oatQBQ=)mo3H>ri3sdU20=>^~L7qH&37LEiQihS}Tx%AccwH#ctVUA_9(nKS>4Mjn5kJ?rE&;5TJc8D)9$V!j4QSdGCAl-OVH z-TQfA;rnaX{y2B;?Zt~fK73fl>-+b=URrwBz`N4-hfn3So*Wx52g@n{tjx8&+}U}3 z^X7L~uDn`ZeYvsmVr$Ed6>Dp2lLk0%aj|Tg>Vd31&2u@ZUEDxK`E>)ObdPeFH<7PD z*Xo>8J+LE1?cz!z%HMCGaP@v|=tGziQV3H4 zeF#N|=SCY+$jNA+<+;IfKnnTq8{qQKdTy{IAcdTW27KFf1I(sKA*~J6h&xiG7FW-k z4!CCH@$&NWiD;lN%Ky;7Tu40#<+}m$1@x3+Yl^MHvBFe9SU{Mtb$fgAWsdcLEh)C9 z*eaYaOa+7mgb7>cY``~fcDG}VG=!~!wqg$LRgC0g)o^k z@ag8}r1S?5%J}Wpt;vg?_qZueZPYGI1%#!jT?ms&1A7Y#WxTy`p^WmwE&uw*O=y2k zZPYGI1%#!jT?muWtEDA3@ay^WrF#FAJ=os51qusjImO6LYzz6rD3j(P)@2ccZ))Bu-%);D2xw4>gDM9)xnG(Ez!Hy;9z~`tpL$jt~|QmLi2PC8P-aE1=R2WPg#7PnZ(U6v6_+Qlt>3 zgcKE*UJpt+6%9~y^X^9}v4Jltn+a literal 0 HcmV?d00001 diff --git a/res/textures/blocks/sand.png b/res/textures/blocks/sand.png new file mode 100644 index 0000000000000000000000000000000000000000..5c7e45e383d1c1cac9c883eae916686c43cf91f6 GIT binary patch literal 967 zcmV;&133JNP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B012{=UK~!i%?U~DM8$l366{^#53<|`d_~00% z6zqmtEEV5;S2IIFfPr^t&Q@(#iCprar@ybyOT7H50L@7@74Z3+6>uJ&J~&XI3Y1k~ zaiBDA1%Cf{2lEhY0us2zk+O;eZn>u@08C1>W(bT4G#y~P=dA!j2Rbxq9V}}Bmw>DV zT*lK!=!~mj9xST@ivwj9SPUyrTw4MON}vamvX5tA3)-6e`N@+&GB+mDIM5WFDG<>e zoeLNfztmS6TMHyeA1I9j7nsq!vAY1G3*{Ctf}!9>t$;t)K2PGg!Hq03sxB_gqg;{~)e&`THekvCl$k^|`jE1=!Jb)KR9K>DEe43u~>pXbTv z_|vrQ7YhK$s^qtjz||om`$PeR4s_@;ke~P}Pe+tK=V2;0_nrU7(7h$BguW3rcj8 z20IF1We3lVOF*~vMKwNKK%1&a0CCL2=uXWN=@tNxfqCUtiUOV^(V@#8O#55-zJNk!Tn%4H z{)Px#y(^&TUmjW@eE>oI88|_0_W;lB+{?}v=&m0CqXy$}0j(DhEOW8|q6^5@c;Gvr pmo8Z5Q4jGk{ulUazIlPy=YOY-Ni~>N+Hn8?002ovPDHLkV1jvzo8NS%G}c0*}aI z1_r)EAj~ML;ne^XlqhkHC<)F_D=AMbN@XZW%*-p%%S$a$FwryAGZA*kI095t<>}%W z65)RI!baXh0RpTCUms+YTq|{lUH0PSg$)x`>o%|`&;6EazWMF*c*AKD-aV?vgpxZq z9*IcOA&Pq`r@h^qe~W8zb>)sPF3~36zkmPnm0LT0^4~uUr@CDpzAUk12D*a5)78&q Iol`;+01D$*WB>pF literal 0 HcmV?d00001