From 790fbb3e9c5e87ef9a06219bda61843ee3bc72ba Mon Sep 17 00:00:00 2001 From: Henry Mao Date: Fri, 28 Dec 2012 14:30:11 +0800 Subject: [PATCH] AS 0.1.9 Release --- buildnumber.txt | 2 +- info.txt | 3 + recommendedversion.txt | 2 +- .../assemblyline/language/en_US.properties | 3 +- resources/assemblyline/textures/blocks.png | Bin 11532 -> 11371 bytes .../assemblyline/textures/detector_green.png | Bin 9128 -> 0 bytes .../assemblyline/textures/detector_red.png | Bin 9061 -> 0 bytes .../assemblyline/api/IFilterable.java | 16 ++ .../assemblyline/api/IManipulator.java | 1 - .../assemblyline/client/ClientProxy.java | 3 - .../assemblyline/client/gui/GuiStamper.java | 2 +- .../client/render/BlockRenderingHandler.java | 44 ++- .../client/render/RenderCrate.java | 7 +- .../client/render/RenderSorter.java | 3 +- .../assemblyline/common/AssemblyLine.java | 46 +--- .../assemblyline/common/CommonProxy.java | 4 - .../common/block/ItemBlockCrate.java | 2 +- .../common/machine/BlockManipulator.java | 85 ++++++ .../common/machine/BlockMulti.java | 254 ------------------ .../common/machine/ItemBlockMulti.java | 26 -- .../common/machine/TileEntityManipulator.java | 16 +- .../common/machine/TileEntityRejector.java | 142 +++++----- .../machine/belt/BlockConveyorBelt.java | 50 ++-- .../machine/belt/TileEntityConveyorBelt.java | 4 +- .../machine/detector/BlockDetector.java | 15 -- .../machine/detector/BlockFilterable.java | 80 +++++- .../machine/detector/TileEntityDetector.java | 15 +- .../machine/filter/ContainerStamper.java | 51 ++-- .../common/machine/filter/ItemFilter.java | 2 +- .../machine/filter/SlotFilterResult.java | 13 +- .../common/machine/machine/BlockRejector.java | 45 ++++ 31 files changed, 398 insertions(+), 538 deletions(-) delete mode 100644 resources/assemblyline/textures/detector_green.png delete mode 100644 resources/assemblyline/textures/detector_red.png create mode 100644 src/minecraft/assemblyline/api/IFilterable.java create mode 100644 src/minecraft/assemblyline/common/machine/BlockManipulator.java delete mode 100644 src/minecraft/assemblyline/common/machine/BlockMulti.java delete mode 100644 src/minecraft/assemblyline/common/machine/ItemBlockMulti.java create mode 100644 src/minecraft/assemblyline/common/machine/machine/BlockRejector.java diff --git a/buildnumber.txt b/buildnumber.txt index 831f0431..65b7f4cd 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -32 +35 diff --git a/info.txt b/info.txt index 970149aa..aba8097c 100644 --- a/info.txt +++ b/info.txt @@ -28,3 +28,6 @@ Minecraft 1.4.5 * AssemblyLine_v0.1.8.30.jar AssemblyLine_v0.1.8.30_api.zip @ AssemblyLine_v0.1.8.31.jar AssemblyLine_v0.1.8.31_api.zip @ AssemblyLine_v0.1.9.32.jar AssemblyLine_v0.1.9.32_api.zip +@ AssemblyLine_v0.1.9.33.jar AssemblyLine_v0.1.9.33_api.zip +@ AssemblyLine_v0.1.9.34.jar AssemblyLine_v0.1.9.34_api.zip +* AssemblyLine_v0.1.9.35.jar AssemblyLine_v0.1.9.35_api.zip diff --git a/recommendedversion.txt b/recommendedversion.txt index 20692fbd..518c1d65 100644 --- a/recommendedversion.txt +++ b/recommendedversion.txt @@ -1 +1 @@ -0.1.8 +0.1.9 diff --git a/resources/assemblyline/language/en_US.properties b/resources/assemblyline/language/en_US.properties index c75be015..3e5a1f8c 100644 --- a/resources/assemblyline/language/en_US.properties +++ b/resources/assemblyline/language/en_US.properties @@ -4,7 +4,6 @@ # Gui assemblyline.gui.crafting=Crafting - # Blocks tile.crate.name=Crate tile.conveyorBelt.name=Conveyor Belt @@ -12,6 +11,8 @@ tile.stamper.name=Stamper tile.engineerTable.name=Engineer's Table tile.detector.name=Detector tile.armbot.name=Armbot +tile.manipulator.name=Manipulator +tile.rejector.name=Rejector # Items item.filter.name=Filter diff --git a/resources/assemblyline/textures/blocks.png b/resources/assemblyline/textures/blocks.png index 6492a481aa80e6bdb50d048b35931c13f4751574..8a57ac3748eec9d578d6805610a1b6472c8459f1 100644 GIT binary patch delta 7168 zcmcJU`CD3N{`awMlFnqY(`8ZGj*Y!fDKQKBBxW;}*Qkf~g^BnAVl%3DM{qFt4!AF;F zT-ZMCS$WlcAGkfFLS*~@u>M})-1?I}dp^AOT7GAct?xhZDPvDX7Be))!T-yrojOF^ zANZ>94@;*^CF93Wzu#TN&+PB<1p4Rw6Z8eRf1Yhzst~vY72KSYM<`nuMCbDfN0h zfFn;^9R28D=Ml?IYx^O@FM~DgY6vfv>S09 zq1S~(MJeK)Q^^IVI!L2aKVUG5jlvYOX2W7BPtR8(#v6@L00vESA2xOlhV@Gi_R0@n zaVWIX6bFoN`-|mBh~NTbre<@&nVacWPPqbs?I8wsb3swBG}JE)1tQNx__u!CaJi0a zwOZD@+xG)$--J>8UPt}HrX!U-;Mfd&RM9UzvB(qq5A#mSAG8{Y(tIA^( z%rWTM9tP@%vROn@|5G_rW|_cE1mc+f>l6|#ZEh${3{6tqDZSDJc z69Z8G3~dy3Irv?P!TjQ~vIZs;uU(v-I)@{J8*%>F#dKzY;R7W?WpW=Ldc?8RMk(oD z8oSG#*2sm{WdV%3HrfC$j3GqGjY(tXuijTyoonS|v{NgAwJQ~A5q+F3e0ka5B4P2+ zl8hKJR4HulAQmbf@d9Fmbd7ckIK}SjI`vT0eyb#@y1c$jQW#XBC{4pk=o>LKWgMK~ z+%_6QucpO8=nG3r7YBO`{56&aD~42FIdmbNXo zJ5;Bcf>JYpM1JldAvhIrxZ@dt!nD_4&C)4O6;}N zaw+~{IhtJN=F!b&X(^S(2iF4B0mf$G?;M&M!mfi;5^&BODD&77>Tu16rt?FN#u1xIZwO zOi!XI@u|wRBp(9i6NJv4+jmt!T_q=m)B$FK>#$(Z{;t8N5o1-3+6?7DRQgh4LB@_s zP$3roBWKV-z13z_Gu#e~p!rEY-cnSduM*2NjIac;*tw-nt=E9}RrLi>T`h$@s|YHW zA}TK<6A~&=ohDcGqUXCz`f2ci4AlzoOg_@PpjN_T#!5nxYVM{KDuI^lw|mxFGvuJx%qf`)M=tPBQ1Pf?oT`EJ96H)t8y_7G7fr!p$x9~ z7x6d+b*xt4+J%HYLBmI_h`hI51+V`_cX1G!XxRBHCC%+R>6WPq-!48dy#HZ$|6s<; zxd|)90|!Cdve|6JO`oQ@=wcQwABBdQq-7>o-)TX?2j9-fC9JT-wv@!y6pDRi8Y71H zbRUl0GRJO+D~8))Cbcn+jjfPQ7V3K|n;zaA299#2IVslfh|-tf@RhtvItrvrw|?Gi z)j=`EH#igM>&F-3)?ye?szi8vX{q!K8kL4AwA=$HB3i6v(2*r`jupwaK6>$$=9v!_q;U(_I5N$e0K}qXlUm;|1kXowz@|CHgSx$i zgDQiz#M463G8_?M4mbwqLqN$04^0}|sAOqFPL6D>eaAN! zA6uyp1I;^|NmO{R1N@RBg8>0VdQvr1qah#r$Yy~KC5d>8soBQO;|L|?f}@t^v!yrpi z(aly{I83_S3-?34M;2BIp8tc_au{?@U)e-8@XU188d1UNuG?C5xMvP&6;iV_Hzj07 zE?=D^r2Vc9L2VM|HnoL*S>K(uJ%4OboyuOkd_LigwgkzbbE!F&XL#o8LY($xAm6a~Y%N=|+UA{>_`Ut4Hf_dRyhTuX zs;ldVrVjUI1ip$31b%-YS{&U$8bPEs8W&?O;*=lfX@BTCTSC?c|p3G=lpTQZ>%M# zDuAs!Tih$R{!Q4BKjN4-dqaIk{AQaV6llx(nfLO&E?_?d?pv%WEyz0d$mn@uK&Tp* zoH3s{sBB5{gkCglso75D#rK(`cj;RM>nh_bLQSz{wn{}yXYM)0!eJh6Fr>{Am>=oy ze^{Wpw;{}e8D?h|@})*(vaXoMwB7V&vp6ta#Aoqb^%eKP>c3}2mxj&!UB8`Cx118^ z0ueb(5;}+}wB~<=!ZL-xIF6FRT2`a6?#ap37C%&ZH&>qFug2B=X-&4dq4kgRAdpwD zmN8SbWvn;63J_^+I%$_Z26gOg69Wivd0Se_b2#K;xsQ>w6RlOlU0{JdUN;rBr73DTF#Yt6> zMGS3E_x`zvzFe&%V(5>5$w?;1W72!NRaWY=?K+z8YtJVb+Q(?1T>gB7ir&=n7Vn5> z(II}`5ADEyUdh)41ZUE}XYmiC9{4z2o-!UJu~)tz0+42NPEU;lkwU zPY&Y%G-~O}$>hsT4~1%m#2Y*x!&M!3X7PXY2c^xy3iLl1L=6nd?Chu9h@g(q;RxlE z7!}v{_d!9W=Zf1KaQCIliM!_H&hd(vB8Mk+{yS1|EF9zFV~~5Czul=5Rj;U64wVst zs9Nn)QvF!X;IcK2*kr7+ucRkQW#b4y0AB%{L(uiZcmjNQFZ=dzCV^mFo}Ch%1qRWp z;?r-kG@?i!K1B!njM5~o*6SBJNK8h!%NiyQX;;UrT(?2)$oK$qkI8=OHs_*TX!Cfo z+3yLYYs$rip)dpbDISv|FV-Z>>VB!l3wihT~lfs zussF~97qBTW`o7S8lq{euZk4wUreo$nqpJQ?*^xyeMmwvDb*7{aQ5ZkB1lBaGyMO+ z7E!4FNb}Bn%8pv2|I+mH3)Qd5MeR&z1o>ue%G2UeeGIV;BatafTQqxb5aMW6M_nZNy!aAB>S-7P#&Y?V{LCy}@C|W2zpngjC`tI^y zyA=CrMEpEyRKKcUtS&PXi}Ra%yYp7~+~1PpJC&|re5*Lf=5H=LMNBS0kuWiUXr>`? z_)5CqSEG^5T8In{g#@hAbvoUEO_KrU0;KD4T}K^hpnKwZ@+iNwJqG&`<&<@1pf2vAXXG7cjP=g;=)z_Hv+_TETupkwE-C`7R;05&3h8~m!6G^*;Fn&S^VbGk zrUkQCW`%&^&-*n6mZTW8{r5HFUn2jfBgi&o3-ru1tCcZh(zaXS!ft z?HP4#XP@c^vpVnO8F?=C+mr}cUw3sVlV0O*wHQ|iT9G~}l4g4CdkwSfPBxj;$C;!X zXb!{DHP4Ww=%1}OVx!NN6VF%JSWVS#{8JLzl+RxyaQy4qIzKS(kh2H8<-WB#|2F5; z)u$6Z!ZN}8dVBtWy9hYpT$lS?8y3Q1WsTOq3o`JZfNv1Mp1V+1g1?ousCvUrbjr=q zwf^ojf7yv&iUuV~gcr>dW{}@K<9)CIBz<0)&TP4zBPsM|)fsAP8qcS4k5Z9f2YaW2 zn-g-f3Sg)=zVkl2D--_q%Z>FfPA}r<*-y&dMFRieiIB5oHc6JOotjC86+|>jZ39Ik{4FkVMPdEz$?=kLBy-B}pgBxr9jINjVmOlUfq$tPxY zOk#@@#v5JqQOv{n{dIo1+)>_xnUDZ+G(cg+-_WIQF0cs4e5PZ^Uww7%T;SE-=4SJN z-&ajo-Yxg87I7`L%A<0?p_aQRu4NtK7bktbT@!B*RlKrNaS8-A`)X~rKCxJA-d%DX zk4A%Sk@eOW%8>{5&s!MA)5Z{S#UC?6&YekD$%@RNZNHnIwwq}Se!j>14Fw3Q$7%<6 z@-jj{iqe_wIAu%wsI~l;ERl9oG&x!J&uC~FucN)tFC&{vyr>b;KR-4?3*1gH3Ix0c zc_B_9!h(bTLi22M$WN_5$&48gr2iMVXm7dsoINg?RRVGG!QO4&eF-Oxa#!>%xxo7S z969I-tJaq3jsk-PCk|Aw%w{u46Y|(eO08kL3XSfdpwrQkr}+1Nx}_HKb}|?Y+vsN` zJ>*z&$@uOaeHyU+pHaIc&xZc^W+PqJAUtZ~#7Y- z_19Pp?~&U4>N5ReqF;XmfqY((6~0xSmIj)oH4b0SWn0|Z)kaU)^xh#%!1{C^d+^Pd zjMfbdkECu9$Tw^tw<;84g4lvT-qc!mv0RAs-Xr7IMPUvCEQ9{-t>_Wjd>7a$?!}sovIB(^=4b zyPnS|)!&^x{v>6QTr!3ycTz#?>ux?M-`udIj0Zp}8(y9RduGpU0^r%+*q@~IyUYSX z?JF=)nMaS^rj!8g7I?|Ndu;zSd+|VoLFLH~t|B&5Orm zh|*rsmi8%o^Vqx-UUD+eJh;{~xw`n_klpocar0mIrlzt_e)*|b>H0^Gf|NDkIF-*V zwYKnACK{rNtWulLCA&(@5=@X$heX$Ij~suzF<3L!MTb|6ujXc(#}j z{&4m05A=oXOXA4rgTWYu{@BH~j1D52XMW=~s+MDmrv`-% z%w%*)dRo}+ii*y@)C_=WTa{ATO(OoqC{$NY@o~;r4%R4SfW?z5pn3kA2!ROhvP7TN z89B~^=h3>8e(Mi0%AW4i?!psZDc_LQdqPm}qtFGm&5QS}k=K=WDglu?7aU?7hSUw` zT-Setlb+!oO-Ru8pO^*9Pp?pPvRK?c26KdFF50vNz`*~WRb!vdGr10PCcz`Y%o~(C zUj-j1G`?}BWLab?d}1>zZ{jxR?w`Zrz)ZC2YUjiEH$6Q2aPjAmx)~@5YMq$iC=1U! z-rwT}TUFY-(eTq~VIi{%LJ&E zDZc%JNfk~rL}H58_yiG{r01`+Zo}bSlq3Z~Myn3`*n7J6cMaIh`@2FjL;j3F?mUmd z8}?P=0^g`|Z5@w*v8mxg#w-{e7-1lr)ckW zu9|ePYvJ;-1(!W~{>qt1Jg|)IS$JoDm3}2Z@s|0g2Wo_otR$m?G(%Nr1uda{4>h0u zUN|o*aaOG6R>&16l4o> zOow#qJnOac>cnZwK)?}&wc3~QCZgIN^pKNnrKOQ);;a>{$;az+c z!T*cD0oa~S1;eU0J`SgpTKq%EL=V@j86zXT({%*bcGdSPD{+OAHBn|OuA2M$;0%+4 zpMAa3M@iw@&d=GtZ?PR=SFk-X-eDA)eWgv!f=UZn{e1%^Rm`X8C0SSn#`TOc2}HpZ zGa#lUWhJakZAB)8z7jZ;P5b5R}aYj*7%vycU@BD~M;{hr#t$D^I-a zQ~B4q6xWuCI3NQoAVb+KlDP%3d#EYg2q|8k^%J{e5|`wdHy+gvPxlNOXcSXUUPT3$ zl~nG_Vr>ZaIg8}(R&Ya^%13B~SP}gSf>Tr?(Vy#>XB^*(AdVb^cPb?-GJ^%1UyOh? zvLYIdnfSfwPycw3)PEwmz+k~7gmHwxaj+T#fK_kteC_c;27U~qZfZr=*?vZBeoieHqQ}<`tx@!&yn+~=24-R@g z8}6quFlCEqMk>kY+=QWcip{P0I!S@YzP-`hFFUCTOsec@PwqQd&copH6T%DLg<&w{ zPLAPW5y|}Hkl>I%(gTiPe1od_E=uP2T39kmz9A4}aKtNOl1soMTYz*bQlDBp;}%A3 zU?|9$!9j#|pHWXn!^4+dwuM$Gsu?5Ud&dl(u}!JmEwu@J%K}98uB#9TL{>Gs^X2-( z;obGtNGLu0&HCQRsQUNA|4=_16(Z(QcF#eHMe^KDVu(lx0pJY=+M**5q|(z zTX*@{D(MD<6qRkM%$eF$G=D+mk`R#+gZzPLC`6>Fh{(_DbM-mjf8l%1bq?pi`*2sH`uh1RV8Mc@aRvk^3L;!Z+~~g z=Z8?Ac-?PA>93KxVWz)la|q#)68`g-{|fu*%SZbN=RZ9fe)**L_Uj*n4Q{Fb1eUS+ zdP}MK_fpwFkB@hWx#iuGRio*zYfYnTax||7el3{Ba!6NCCS!fFIy07xNh+ zchO9#sil8qXm5%2X(9>qxX1CNf`Wgm@U3laN<5ayj=xY+QbkB=KZs>!BypyDNd66M zWa-*R4eUf;eM~ghxHiIA5Jl6 z=eO-nc}Dltf)1S9Zx?3Rf>kJx2fD-&49cnrT;1j^2^f5AIDfN!Vl4?TE4~?@WB(qG ziY@BX9Q!*%S3^jub3T*G<#RoZT9FF0z&-0#E0XPlH{9u`P}_+zCQ%IFu2fH6IiChuq$X5>#bbiHV&W3Y&=*LdnPrFTJDF_GV7h0M4%E3_uzu=r zzFU@<27!p&))fyS2oop;$(vw2yfC^nGde zVQr>ZYuJ|WIRnhl4Lsta@tq}Pu%ub#*o;cei4DMs%S%$n$VZf6Z3HF7aF|PQ*VVb7 zDL@uqmPRw0$80I0WxZm4ks=yMol{r0=2RtPQ!p5{pdNv!!b?LK#^m^H`7|awz=#P6 zL@#3W0Yt*+3Kf-zDar@EHo)@>QZxsgq(5X_jJ((nJo)J@m zZNS1+JI?b|Je-_APzgBmLCLEk-a)MF;d-h=gv~*t3X}94kvU|042LiZgasyXjMUte zZ0TcLQ%Y_V~yGEe!{Lb8b3WWBkzdPb7PH$Ns3RFQ*VX_I;qP~ z$`sedQ@NfeL%`Nq#Ey#!`g(_5)h(*@o5=0%xqJ7dnrx~h2cVNLeG?h?(t;HD^-#>I zb;uGX@m-R6#(gFwH8VQJ4iBCHp1nz;kt;2C5mgn5=9I*asg&DgJKO6`z0=2*P%nCe zbP<_JoDmCDi(;+_99oHXWH1i=2O?!j4lKX}}p z`nA9Wo&S_3XiEM$CO3e_jeTzngN>C=b4GHdA%RWAs^pNuoQvCA>a9oIj}6bi<^B;! z)YbSi+S=pPfx7)wc^FJ$NS!3VO22TK0XXcNiqV_jhfb`x)-PFgohp#_b*@i`fB;f~ z&Z%PT1&0bwsh^%nOUn{#vm%E+4M1oLw#+G~d+*lb)$$+uu3mi=R8(aMu%-2g>6cQt z1vO*jnC!)N)GJ6`klp8wnj}}!BW6l(c4%@tCeDR)#o(I_)~hlZuaL%VHIL!3Er^Ek zGp~vQTI#XwnscN-`YKyZ${nmlFF0_noLy*SUL&B@l_M4=kBC9X_eIN)g62p@n&~PW zT(fLmetYXZe?GN6^&Q+<&(f6E^+)u|bv|f^DkA;aYl)cB+Et9>FS63Wrq|+<<{0BL z{VbigZOb|G18vg^cNqnGF3a*5TLWN-PYJ8t(ecr0P>tZJI@B?S-k~^m3RL! zxR|`VNhn(=t}3Zcc=_(3KFxkzSS>}SP%_!%M6mc~M}7U?-f7V@!n3u=YosCKNC=~f z%i(ZTn07xzAQsJxY(iLyPbM;C>#~}{aA|)AzR_ohEEP2e%G#HRA2no7c3ZOlLaxSM&w$DRaie{QjCf(a~ZhD8b zHmaLMCbQVpt>*YRh7{2Q4!fs;fiiP{q5B2v3j;i(+Auv(mQ_2=i5xtXp^2iLx&PY{ znl`Ii&yI(RH$FSaOWkBW(Urm%!Q=a?3sNt1h==LZS=B?Ge-N5-2RaH|)q#PF{obp^ z1tfEz>U$)Y#|{;Y~lwXua`WvT1!S+ zn|nkP{^+BF`<=WM>d-yns^?Ws8zB{+jm88T`^ZMejJvF4?ZsDP%&FboOh4z~zVg9+ z3^;0(1WZkFt*VEQ+Z2DMXT&!*>PgMH_&&1pLHfI)OA?>F^~jO49Njy`C7GzR zQFU9tOil(`A{pKD#zpoR=E|}8LwO-=1g*F8nEvIRw0z+>)5LRcgM*Gt{xi_)eHe3I zwK!FxyB@ykFtz!kQvtUXN!?g>8Cc~|{p%H;SBeWXT4fYvsov~#$Vs~NcI_UyMU zX%(JKeygc{DwpMF9)d?>LeEF`NdEqvkd5H^M+e&anUH5-$G2

`XUi(>(Q36 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 R(EVZP&*MI8{q&n3{ui`)fqDP{ diff --git a/resources/assemblyline/textures/detector_green.png b/resources/assemblyline/textures/detector_green.png deleted file mode 100644 index 9f5166fe34ccd59b71cc51a4d35c1e2d383806db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9128 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 Ru78C940Il8H)%S?{tt(54Uzx= diff --git a/resources/assemblyline/textures/detector_red.png b/resources/assemblyline/textures/detector_red.png deleted file mode 100644 index 4310c2d5026fe9a38c163d24282c46d984c1a83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9061 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 diff --git a/src/minecraft/assemblyline/api/IFilterable.java b/src/minecraft/assemblyline/api/IFilterable.java new file mode 100644 index 00000000..2783176c --- /dev/null +++ b/src/minecraft/assemblyline/api/IFilterable.java @@ -0,0 +1,16 @@ +package assemblyline.api; + +import net.minecraft.item.ItemStack; + +/** + * Applied to TileEntities that can accept a filter. + * + * @author Calclavia + * + */ +public interface IFilterable +{ + public void setFilter(ItemStack filter); + + public ItemStack getFilter(); +} diff --git a/src/minecraft/assemblyline/api/IManipulator.java b/src/minecraft/assemblyline/api/IManipulator.java index 1b4a0c9a..5f217fb0 100644 --- a/src/minecraft/assemblyline/api/IManipulator.java +++ b/src/minecraft/assemblyline/api/IManipulator.java @@ -1,6 +1,5 @@ package assemblyline.api; - /** * Interface applied to the manipulator. * diff --git a/src/minecraft/assemblyline/client/ClientProxy.java b/src/minecraft/assemblyline/client/ClientProxy.java index 3b1a0db3..78994962 100644 --- a/src/minecraft/assemblyline/client/ClientProxy.java +++ b/src/minecraft/assemblyline/client/ClientProxy.java @@ -6,7 +6,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import universalelectricity.core.vector.Vector3; -import assemblyline.client.gui.GuiRejector; import assemblyline.client.gui.GuiStamper; import assemblyline.client.render.BlockRenderingHandler; import assemblyline.client.render.RenderConveyorBelt; @@ -49,8 +48,6 @@ public class ClientProxy extends CommonProxy switch (ID) { - case GUI_REJECTOR: - return new GuiRejector(player.inventory, ((TileEntityRejector) tileEntity)); case GUI_STAMPER: return new GuiStamper(player.inventory, world, new Vector3(x, y, z)); } diff --git a/src/minecraft/assemblyline/client/gui/GuiStamper.java b/src/minecraft/assemblyline/client/gui/GuiStamper.java index 70062e23..61910078 100644 --- a/src/minecraft/assemblyline/client/gui/GuiStamper.java +++ b/src/minecraft/assemblyline/client/gui/GuiStamper.java @@ -28,7 +28,7 @@ public class GuiStamper extends GuiContainer protected void drawGuiContainerForegroundLayer(int par1, int par2) { this.fontRenderer.drawString(TranslationHelper.getLocal("tile.stamper.name"), 68, 6, 4210752); - this.fontRenderer.drawString(TranslationHelper.getLocal("assemblyline.gui.crafting")+":", 25, 55, 4210752); + this.fontRenderer.drawString(TranslationHelper.getLocal("assemblyline.gui.crafting") + ":", 25, 55, 4210752); } /** diff --git a/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java b/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java index 384bfedc..4285867c 100644 --- a/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java +++ b/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java @@ -11,7 +11,6 @@ import assemblyline.client.model.ModelConveyorBelt; import assemblyline.client.model.ModelManipulator; import assemblyline.client.model.ModelSorter; import assemblyline.common.AssemblyLine; -import assemblyline.common.machine.BlockMulti.MachineType; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -39,33 +38,30 @@ public class BlockRenderingHandler implements ISimpleBlockRenderingHandler modelConveyorBelt.render(0.0625F, 0, false, false, false); GL11.glPopMatrix(); } - if (block.blockID == AssemblyLine.blockDetector.blockID) + else if (block.blockID == AssemblyLine.blockDetector.blockID) { RenderDetector.render(false, new Vector3()); } - else if (block.blockID == AssemblyLine.blockMulti.blockID) + else if (block.blockID == AssemblyLine.blockRejector.blockID) { - if (metadata == MachineType.REJECTOR.metadata) - { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "sorter.png")); - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glRotatef(-90f, 0f, 1f, 0f); - modelEjector.renderMain(0.0625F); - modelEjector.renderPiston(0.0625F, 1); - GL11.glPopMatrix(); - } - else if (metadata == MachineType.MANIPULATOR.metadata) - { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "manipulator1.png")); - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glRotatef(-90f, 0f, 1f, 0f); - modelInjector.render(0.0625F, true, 0); - GL11.glPopMatrix(); - } + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "sorter.png")); + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glRotatef(-90f, 0f, 1f, 0f); + modelEjector.renderMain(0.0625F); + modelEjector.renderPiston(0.0625F, 1); + GL11.glPopMatrix(); + } + else if (block.blockID == AssemblyLine.blockManipulator.blockID) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "manipulator1.png")); + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glRotatef(-90f, 0f, 1f, 0f); + modelInjector.render(0.0625F, true, 0); + GL11.glPopMatrix(); } } diff --git a/src/minecraft/assemblyline/client/render/RenderCrate.java b/src/minecraft/assemblyline/client/render/RenderCrate.java index 9f3c6069..c13803e2 100644 --- a/src/minecraft/assemblyline/client/render/RenderCrate.java +++ b/src/minecraft/assemblyline/client/render/RenderCrate.java @@ -151,7 +151,6 @@ public class RenderCrate extends TileEntitySpecialRenderer // Find Center GL11.glTranslatef(displayWidth / 2, 1F, displayHeight / 2); GL11.glRotatef(-90, 1, 0, 0); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); FontRenderer fontRenderer = this.getFontRenderer(); int requiredWidth = Math.max(fontRenderer.getStringWidth(text), 1); @@ -166,7 +165,7 @@ public class RenderCrate extends TileEntitySpecialRenderer { scale = Math.min(scale, maxScale); } - + GL11.glScalef(scale, -scale, scale); GL11.glDepthMask(false); @@ -179,11 +178,9 @@ public class RenderCrate extends TileEntitySpecialRenderer offsetY = (realHeight - requiredHeight) / 2; GL11.glDisable(GL11.GL_LIGHTING); - fontRenderer.drawString(text, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1); + fontRenderer.drawString("\u00a7f" + text, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1); GL11.glEnable(GL11.GL_LIGHTING); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDepthMask(true); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); GL11.glPopMatrix(); diff --git a/src/minecraft/assemblyline/client/render/RenderSorter.java b/src/minecraft/assemblyline/client/render/RenderSorter.java index f68f2732..c61bf3bd 100644 --- a/src/minecraft/assemblyline/client/render/RenderSorter.java +++ b/src/minecraft/assemblyline/client/render/RenderSorter.java @@ -16,8 +16,9 @@ public class RenderSorter extends TileEntitySpecialRenderer private void renderAModelAt(TileEntityRejector tileEntity, double x, double y, double z, float f) { boolean fire = tileEntity.firePiston; - int face = tileEntity.getDirection(tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord)); + int face = tileEntity.getDirection().ordinal(); int pos = 0; + if (fire) { pos = 8; diff --git a/src/minecraft/assemblyline/common/AssemblyLine.java b/src/minecraft/assemblyline/common/AssemblyLine.java index 6a0bc9cc..52e8efeb 100644 --- a/src/minecraft/assemblyline/common/AssemblyLine.java +++ b/src/minecraft/assemblyline/common/AssemblyLine.java @@ -3,8 +3,6 @@ package assemblyline.common; import java.io.File; import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.Configuration; @@ -18,14 +16,12 @@ import universalelectricity.prefab.network.PacketManager; import assemblyline.common.block.BlockCrate; import assemblyline.common.block.BlockEngineerTable; import assemblyline.common.block.ItemBlockCrate; -import assemblyline.common.machine.BlockMulti; -import assemblyline.common.machine.BlockMulti.MachineType; -import assemblyline.common.machine.ItemBlockMulti; +import assemblyline.common.machine.BlockManipulator; import assemblyline.common.machine.belt.BlockConveyorBelt; import assemblyline.common.machine.detector.BlockDetector; import assemblyline.common.machine.filter.BlockStamper; import assemblyline.common.machine.filter.ItemFilter; -import cpw.mods.fml.common.ICraftingHandler; +import assemblyline.common.machine.machine.BlockRejector; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -37,7 +33,6 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid = AssemblyLine.CHANNEL, name = AssemblyLine.NAME, version = AssemblyLine.VERSION, dependencies = "required-after:BasicComponents") @NetworkMod(channels = { AssemblyLine.CHANNEL }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) @@ -67,11 +62,12 @@ public class AssemblyLine public static final int BLOCK_ID_PREFIX = 3030; public static Block blockConveyorBelt; - public static Block blockMulti; + public static Block blockManipulator; public static Block blockEngineerTable; public static Block blockCrate; public static Block blockStamper; public static Block blockDetector; + public static Block blockRejector; public static final int ITEM_ID_PREFIX = 3030; public static Item itemFilter; @@ -84,11 +80,12 @@ public class AssemblyLine CONFIGURATION.load(); blockConveyorBelt = new BlockConveyorBelt(CONFIGURATION.getBlock("Conveyor Belt", BLOCK_ID_PREFIX).getInt()); - blockMulti = new BlockMulti(CONFIGURATION.getBlock("Machine", BLOCK_ID_PREFIX + 1).getInt()); + blockManipulator = new BlockManipulator(CONFIGURATION.getBlock("Manipulator", BLOCK_ID_PREFIX + 1).getInt()); blockEngineerTable = new BlockEngineerTable(CONFIGURATION.getBlock("Architect's Table", BLOCK_ID_PREFIX + 2).getInt()); blockCrate = new BlockCrate(CONFIGURATION.getBlock("Crate", BLOCK_ID_PREFIX + 3).getInt(), 0); blockStamper = new BlockStamper(CONFIGURATION.getBlock("Stamper", BLOCK_ID_PREFIX + 4).getInt(), 0); blockDetector = new BlockDetector(CONFIGURATION.getBlock("Detector", BLOCK_ID_PREFIX + 5).getInt(), 1); + blockRejector = new BlockRejector(CONFIGURATION.getBlock("Rejector", BLOCK_ID_PREFIX + 6).getInt()); itemFilter = new ItemFilter(CONFIGURATION.getBlock("Filter", ITEM_ID_PREFIX).getInt()); CONFIGURATION.save(); @@ -96,29 +93,14 @@ public class AssemblyLine NetworkRegistry.instance().registerGuiHandler(this, this.proxy); GameRegistry.registerBlock(blockConveyorBelt, "Conveyor Belt"); GameRegistry.registerBlock(blockCrate, ItemBlockCrate.class, "Crate"); - GameRegistry.registerBlock(blockMulti, ItemBlockMulti.class, "Machine"); - GameRegistry.registerBlock(blockEngineerTable, "Engineer's Table"); + GameRegistry.registerBlock(blockManipulator, "Manipulator"); + // GameRegistry.registerBlock(blockEngineerTable, "Engineer's Table"); GameRegistry.registerBlock(blockStamper, "Stamper"); GameRegistry.registerBlock(blockDetector, "Detector"); + GameRegistry.registerBlock(blockRejector, "Rejector"); UpdateNotifier.INSTANCE.checkUpdate(NAME, VERSION, "http://calclavia.com/downloads/al/recommendedversion.txt"); - GameRegistry.registerCraftingHandler(new ICraftingHandler() - { - @Override - public void onCrafting(EntityPlayer player, ItemStack itemStack, IInventory craftMatrix) - { - // TODO Make this work for the filter - System.out.println("TEST: " + craftMatrix.getSizeInventory()); - } - - @Override - public void onSmelting(EntityPlayer player, ItemStack item) - { - - } - }); - proxy.preInit(); } @@ -129,12 +111,6 @@ public class AssemblyLine System.out.println(NAME + " Loaded: " + TranslationHelper.loadLanguages(LANGUAGE_PATH, LANGUAGES_SUPPORTED) + " languages."); - // Add Names - for (MachineType type : MachineType.values()) - { - LanguageRegistry.addName(new ItemStack(blockMulti, 1, type.metadata), type.name); - } - // Filter GameRegistry.addRecipe(new ShapedOreRecipe(itemFilter, new Object[] { "R", "P", "I", 'P', Item.paper, 'R', Item.redstone, 'I', new ItemStack(Item.dyePowder, 1, 0) })); @@ -151,10 +127,10 @@ public class AssemblyLine GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockConveyorBelt, 4), new Object[] { "III", "WMW", 'I', "ingotSteel", 'W', Block.wood, 'M', "motor" })); // Rejector - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockMulti, 1, MachineType.REJECTOR.metadata), new Object[] { "WPW", "@R@", '@', "plateSteel", 'R', Item.redstone, 'P', Block.pistonBase, 'C', "basicCircuit", 'W', "copperWire" })); + GameRegistry.addRecipe(new ShapedOreRecipe(blockRejector, new Object[] { "WPW", "@R@", '@', "plateSteel", 'R', Item.redstone, 'P', Block.pistonBase, 'C', "basicCircuit", 'W', "copperWire" })); // Manipulator - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(blockMulti, 1, MachineType.MANIPULATOR.metadata), new Object[] { Block.dispenser, "basicCircuit" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(blockManipulator, new Object[] { Block.dispenser, "basicCircuit" })); UETab.setItemStack(new ItemStack(blockConveyorBelt)); } diff --git a/src/minecraft/assemblyline/common/CommonProxy.java b/src/minecraft/assemblyline/common/CommonProxy.java index 0295dc8d..e0ed81f8 100644 --- a/src/minecraft/assemblyline/common/CommonProxy.java +++ b/src/minecraft/assemblyline/common/CommonProxy.java @@ -5,7 +5,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import universalelectricity.core.vector.Vector3; import assemblyline.common.block.TileEntityCrate; -import assemblyline.common.machine.ContainerRejector; import assemblyline.common.machine.TileEntityManipulator; import assemblyline.common.machine.TileEntityRejector; import assemblyline.common.machine.belt.TileEntityConveyorBelt; @@ -16,7 +15,6 @@ import cpw.mods.fml.common.registry.GameRegistry; public class CommonProxy implements IGuiHandler { - public static final int GUI_REJECTOR = 0; public static final int GUI_STAMPER = 1; public static final int GUI_ARCHITECHT_TABLE = 2; @@ -41,8 +39,6 @@ public class CommonProxy implements IGuiHandler switch (ID) { - case GUI_REJECTOR: - return new ContainerRejector(player.inventory, ((TileEntityRejector) tileEntity)); case GUI_STAMPER: return new ContainerStamper(player.inventory, world, new Vector3(x, y, z)); } diff --git a/src/minecraft/assemblyline/common/block/ItemBlockCrate.java b/src/minecraft/assemblyline/common/block/ItemBlockCrate.java index 86b3e259..a356e07b 100644 --- a/src/minecraft/assemblyline/common/block/ItemBlockCrate.java +++ b/src/minecraft/assemblyline/common/block/ItemBlockCrate.java @@ -46,7 +46,7 @@ public class ItemBlockCrate extends ItemBlock if (containingStack != null) { - player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 5, (int)((float) containingStack.stackSize / (float) TileEntityCrate.MAX_LIMIT) * 5)); + player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 5, (int) ((float) containingStack.stackSize / (float) TileEntityCrate.MAX_LIMIT) * 5)); } } } diff --git a/src/minecraft/assemblyline/common/machine/BlockManipulator.java b/src/minecraft/assemblyline/common/machine/BlockManipulator.java new file mode 100644 index 00000000..9fb844fb --- /dev/null +++ b/src/minecraft/assemblyline/common/machine/BlockManipulator.java @@ -0,0 +1,85 @@ +package assemblyline.common.machine; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import universalelectricity.core.UniversalElectricity; +import universalelectricity.prefab.UETab; +import assemblyline.client.render.BlockRenderingHandler; +import assemblyline.common.machine.detector.BlockFilterable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * A block that manipulates item movement between inventories. + * + * @author Calclavia + * + */ +public class BlockManipulator extends BlockFilterable +{ + public BlockManipulator(int id) + { + super("manipulator", id, UniversalElectricity.machine, UETab.INSTANCE); + this.setBlockBounds(0, 0, 0, 1, 0.3f, 1); + } + + @Override + public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int par2, int par3, int par4) + { + return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double) par2, (double) par3, (double) par4, (double) par2 + 1, (double) par3 + 1, (double) par4 + 1); + } + + @Override + public boolean onSneakMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileEntityManipulator) + { + ((TileEntityManipulator) tileEntity).selfPulse = !((TileEntityManipulator) tileEntity).selfPulse; + } + + return true; + } + + @Override + public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileEntityManipulator) + { + ((TileEntityManipulator) tileEntity).toggleOutput(); + return true; + } + + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int metadata) + { + return new TileEntityManipulator(); + } + + @SideOnly(Side.CLIENT) + @Override + public int getRenderType() + { + return BlockRenderingHandler.BLOCK_RENDER_ID; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } +} diff --git a/src/minecraft/assemblyline/common/machine/BlockMulti.java b/src/minecraft/assemblyline/common/machine/BlockMulti.java deleted file mode 100644 index c3625eb3..00000000 --- a/src/minecraft/assemblyline/common/machine/BlockMulti.java +++ /dev/null @@ -1,254 +0,0 @@ -package assemblyline.common.machine; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import universalelectricity.core.UniversalElectricity; -import universalelectricity.prefab.BlockMachine; -import universalelectricity.prefab.UETab; -import universalelectricity.prefab.implement.IRedstoneReceptor; -import universalelectricity.prefab.multiblock.IBlockActivate; -import assemblyline.client.render.BlockRenderingHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -/** - * A metadata block containing a bunch of machines with direction. - * - * @author Darkguardsman, Calclavia - * - */ -public class BlockMulti extends BlockMachine -{ - public static enum MachineType - { - REJECTOR("Rejector", 0, 0, TileEntityRejector.class), MANIPULATOR("Manipulator", 4, -1, TileEntityManipulator.class), INVALID_1("Invalid", 8, -1, null), INVALID_2("Invalid", 12, -1, null); - - public String name; - public int metadata; - public int guiID; - public Class tileEntity; - - MachineType(String name, int metadata, int guiID, Class tileEntity) - { - this.name = name; - this.metadata = metadata; - this.guiID = guiID; - this.tileEntity = tileEntity; - } - - public static MachineType get(int metadata) - { - for (MachineType value : MachineType.values()) - { - if (metadata >= value.metadata && metadata < value.metadata + 4) { return value; } - } - - return null; - } - - /** - * Gets the direction based on the metadata - * - * @return A direction value from 0 to 4. - */ - public static int getDirection(int metadata) - { - return metadata - MachineType.get(metadata).metadata; - } - - /** - * @param currentDirection - An integer from 0 to 4. - * @return The metadata this block should change into. - */ - public int getNextDirectionMeta(int currentDirection) - { - currentDirection++; - - if (currentDirection >= 4) - { - currentDirection = 0; - } - - return currentDirection + this.metadata; - } - - /** - * Creates a new TIleEntity. - */ - public TileEntity instantiateTileEntity() - { - try - { - return this.tileEntity.newInstance(); - } - catch (Exception e) - { - e.printStackTrace(); - return null; - } - } - } - - public BlockMulti(int id) - { - super("AssemblyLineMachine", id, UniversalElectricity.machine); - this.setCreativeTab(UETab.INSTANCE); - } - - @Override - public int damageDropped(int metadata) - { - return MachineType.get(metadata).metadata; - } - - @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) - { - if (!world.isRemote) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof IBlockActivate) - { - ((IBlockActivate) tileEntity).onActivated(entityPlayer); - } - } - return true; - } - - @Override - public void onBlockPlacedBy(World par1World, int x, int y, int z, EntityLiving par5EntityLiving) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - - switch (angle) - { - case 0: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 0); - break; - case 1: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 3); - break; - case 2: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 1); - break; - case 3: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 2); - break; - } - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - int metadata = par1World.getBlockMetadata(x, y, z); - MachineType machineType = MachineType.get(metadata); - par1World.setBlockAndMetadataWithNotify(x, y, z, this.blockID, machineType.getNextDirectionMeta(MachineType.getDirection(metadata))); - return true; - } - - @Override - public boolean onSneakUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - if (MachineType.get(metadata) == MachineType.MANIPULATOR) - { - TileEntityManipulator tileEntity = (TileEntityManipulator) par1World.getBlockTileEntity(x, y, z); - tileEntity.toggleOutput(); - - return true; - } - else - { - return this.onUseWrench(par1World, x, y, z, par5EntityPlayer, side, hitX, hitY, hitZ); - } - } - - @Override - public void onNeighborBlockChange(World par1World, int x, int y, int z, int side) - { - super.onNeighborBlockChange(par1World, x, y, z, side); - - TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof IRedstoneReceptor) - { - if (par1World.isBlockIndirectlyGettingPowered(x, y, z)) - { - ((IRedstoneReceptor) par1World.getBlockTileEntity(x, y, z)).onPowerOn(); - } - } - } - - /** - * Returns the bounding box of the wired rectangular prism to render. - */ - @Override - public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int x, int y, int z) - { - return this.getCollisionBoundingBoxFromPool(par1World, x, y, z); - } - - /** - * Returns a bounding box from the pool of bounding boxes (this means this box can change after - * the pool has been cleared to be reused) - */ - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int x, int y, int z) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - if (MachineType.get(metadata) == MachineType.MANIPULATOR) { return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double) x + this.minX, (double) y + this.minY, (double) z + this.minZ, (double) x + this.maxX, (double) y + 0.3f, (double) z + this.maxZ); } - - return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double) x + this.minX, (double) y + this.minY, (double) z + this.minZ, (double) x + this.maxX, (double) y + this.maxY, (double) z + this.maxZ); - } - - @Override - public TileEntity createNewTileEntity(World var1, int metadata) - { - return MachineType.get(metadata).instantiateTileEntity(); - } - - @SideOnly(Side.CLIENT) - @Override - public int getRenderType() - { - return BlockRenderingHandler.BLOCK_RENDER_ID; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for (MachineType type : MachineType.values()) - { - if (type.tileEntity != null) - { - par3List.add(new ItemStack(par1, 1, type.metadata)); - } - } - } - -} diff --git a/src/minecraft/assemblyline/common/machine/ItemBlockMulti.java b/src/minecraft/assemblyline/common/machine/ItemBlockMulti.java deleted file mode 100644 index d6fc2d7c..00000000 --- a/src/minecraft/assemblyline/common/machine/ItemBlockMulti.java +++ /dev/null @@ -1,26 +0,0 @@ -package assemblyline.common.machine; - -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import assemblyline.common.machine.BlockMulti.MachineType; - -public class ItemBlockMulti extends ItemBlock -{ - public ItemBlockMulti(int par1) - { - super(par1); - this.setHasSubtypes(true); - } - - @Override - public String getItemNameIS(ItemStack itemstack) - { - return MachineType.get(itemstack.getItemDamage()).name; - } - - @Override - public int getMetadata(int par1) - { - return MachineType.get(par1).metadata; - } -} diff --git a/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java b/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java index 854362ad..eb20748f 100644 --- a/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java +++ b/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java @@ -17,18 +17,16 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import universalelectricity.core.vector.Vector3; import universalelectricity.prefab.implement.IRedstoneReceptor; -import universalelectricity.prefab.multiblock.IBlockActivate; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; import assemblyline.api.IManipulator; import assemblyline.common.AssemblyLine; -import assemblyline.common.machine.BlockMulti.MachineType; import com.google.common.io.ByteArrayDataInput; import cpw.mods.fml.common.network.PacketDispatcher; -public class TileEntityManipulator extends TileEntityAssemblyNetwork implements IRedstoneReceptor, IPacketReceiver, IManipulator, IBlockActivate +public class TileEntityManipulator extends TileEntityAssemblyNetwork implements IRedstoneReceptor, IPacketReceiver, IManipulator { public boolean selfPulse = false; @@ -81,7 +79,7 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements { this.isRedstonePowered = true; } - + /** * Finds the connected inventory and outputs the items upon a redstone pulse. */ @@ -218,6 +216,7 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements entityItem.motionX = 0; entityItem.motionZ = 0; entityItem.motionY /= 5; + entityItem.delayBeforeCanPickup = 30; worldObj.spawnEntityInWorld(entityItem); } @@ -421,7 +420,7 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements public ForgeDirection getBeltDirection() { - return ForgeDirection.getOrientation(MachineType.getDirection(this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord)) + 2); + return ForgeDirection.getOrientation(this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord)); } @Override @@ -452,11 +451,4 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements { this.isRedstonePowered = false; } - - @Override - public boolean onActivated(EntityPlayer entityPlayer) - { - this.selfPulse = !this.selfPulse; - return true; - } } diff --git a/src/minecraft/assemblyline/common/machine/TileEntityRejector.java b/src/minecraft/assemblyline/common/machine/TileEntityRejector.java index 7e27b4bf..1fde1b9e 100644 --- a/src/minecraft/assemblyline/common/machine/TileEntityRejector.java +++ b/src/minecraft/assemblyline/common/machine/TileEntityRejector.java @@ -1,5 +1,6 @@ package assemblyline.common.machine; +import java.util.ArrayList; import java.util.List; import net.minecraft.entity.Entity; @@ -16,12 +17,13 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.ForgeDirection; import universalelectricity.core.vector.Vector3; -import universalelectricity.prefab.multiblock.IBlockActivate; +import universalelectricity.prefab.TranslationHelper; +import universalelectricity.prefab.implement.IRotatable; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; +import assemblyline.api.IFilterable; import assemblyline.common.AssemblyLine; -import assemblyline.common.CommonProxy; -import assemblyline.common.machine.belt.TileEntityConveyorBelt; +import assemblyline.common.machine.filter.ItemFilter; import com.google.common.io.ByteArrayDataInput; @@ -32,12 +34,12 @@ import cpw.mods.fml.common.network.PacketDispatcher; * @author Darkguardsman * */ -public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPacketReceiver, IInventory, IBlockActivate +public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRotatable, IFilterable, IPacketReceiver, IInventory { /** * The items this container contains. */ - protected ItemStack[] containingItems = new ItemStack[this.getSizeInventory()]; + protected ItemStack[] containingItems = new ItemStack[1]; /** * Used to id the packet types @@ -55,10 +57,6 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa * on/off value for the GUI buttons */ public boolean[] guiButtons = new boolean[] { true, true, true, true, true }; - /** - * the belt found in the search area - */ - public TileEntityConveyorBelt beltSide = null; private int playerUsing = 0; @@ -74,45 +72,36 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa this.firePiston = false; // area to search for items - ForgeDirection searchPosition = Vector3.getOrientationFromSide(ForgeDirection.getOrientation(getDirection(meta)), ForgeDirection.SOUTH); - TileEntity tileEntity = worldObj.getBlockTileEntity(xCoord + searchPosition.offsetX, yCoord + searchPosition.offsetY, zCoord + searchPosition.offsetZ); - - // find the belt in that search area - if (tileEntity instanceof TileEntityConveyorBelt) - { - this.beltSide = (TileEntityConveyorBelt) tileEntity; - } - else - { - this.beltSide = null; - } + Vector3 searchPosition = new Vector3(this); + searchPosition.modifyPositionFromSide(this.getDirection()); + TileEntity tileEntity = searchPosition.getTileEntity(this.worldObj); try { - // search area bound box - AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(xCoord + searchPosition.offsetX, yCoord + searchPosition.offsetY, zCoord + searchPosition.offsetZ, xCoord + searchPosition.offsetX + 1, yCoord + searchPosition.offsetY + 1, zCoord + searchPosition.offsetZ + 1); - // EntityItem list - List itemsBehind = worldObj.getEntitiesWithinAABB(EntityItem.class, bounds); - boolean flag = false; - if (itemsBehind.size() > 0 && this.isRunning()) + if (this.isRunning()) { - // for every item found check - // if can be thrown then throw - // item off belt if it can - for (EntityItem entity : itemsBehind) + /** + * Find all entities in the position in which this block is facing and attempt + * to push it out of the way. + */ + AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(searchPosition.x, searchPosition.y, searchPosition.z, searchPosition.x + 1, searchPosition.y + 1, searchPosition.z + 1); + List entitiesInFront = this.worldObj.getEntitiesWithinAABB(Entity.class, bounds); + + for (Entity entity : entitiesInFront) { - if (this.canItemBeThrow(entity)) + if (this.canEntityBeThrow(entity)) { - this.throwItem(searchPosition, entity); + this.throwItem(this.getDirection(), entity); flag = true; } } } - // send packet with animation data - // if an item was rejected from - // the area + + /** + * If a push happened, send a packet to the client to notify it for an animation. + */ if (!this.worldObj.isRemote && flag) { Packet packet = PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.getPacketData(PacketTypes.ANIMATION)); @@ -148,65 +137,37 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa { this.firePiston = true; - entity.motionX = (double) side.offsetX * 0.15; + entity.motionX = (double) side.offsetX * 0.1; entity.motionY += 0.10000000298023224D; - entity.motionZ = (double) side.offsetZ * 0.15; + entity.motionZ = (double) side.offsetZ * 0.1; } - public boolean canItemBeThrow(Entity entity) + public boolean canEntityBeThrow(Entity entity) { // TODO Add other things than items if (entity instanceof EntityItem) { - EntityItem itemE = (EntityItem) entity; - ItemStack item = itemE.func_92014_d(); + EntityItem entityItem = (EntityItem) entity; + ItemStack itemStack = entityItem.func_92014_d(); - if (this.guiButtons[4]) + if (this.containingItems[0] != null) { - // reject matching items - for (int i = 0; i < this.containingItems.length; i++) + ArrayList checkStacks = ItemFilter.getFilters(this.containingItems[0]); + + // Reject matching items + for (int i = 0; i < checkStacks.size(); i++) { - if (containingItems[i] != null && guiButtons[i]) + if (checkStacks.get(i) != null) { - if (containingItems[i].itemID == item.itemID && containingItems[i].getItemDamage() == item.getItemDamage()) { return true; } + if (checkStacks.get(i).isItemEqual(itemStack)) { return true; } } } - return false; - - } - else if (!this.guiButtons[4]) - { - // reject all but matching items - for (int i = 0; i < this.containingItems.length; i++) - { - if (containingItems[i] != null && guiButtons[i]) - { - if (containingItems[i].itemID == item.itemID && containingItems[i].getItemDamage() == item.getItemDamage()) { return false; } - } - } - return true; } } + return false; } - public byte getDirection(int meta) - { - - switch (meta) - { - case 0: - return 2; - case 1: - return 5; - case 2: - return 3; - case 3: - return 4; - } - return 0; - } - /** * Used to change any one of the boolean value of on/off array After changing the value if it * was changed client side it will send a packet server side with the changes @@ -290,13 +251,13 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa @Override public String getInvName() { - return "Sorter"; + return TranslationHelper.getLocal("tile.rejector.name"); } @Override public int getSizeInventory() { - return 4; + return this.containingItems.length; } /** @@ -454,9 +415,26 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa } @Override - public boolean onActivated(EntityPlayer entityPlayer) + public void setFilter(ItemStack filter) { - entityPlayer.openGui(AssemblyLine.instance, CommonProxy.GUI_REJECTOR, this.worldObj, this.xCoord, this.yCoord, this.zCoord); - return true; + this.setInventorySlotContents(0, filter); + } + + @Override + public ItemStack getFilter() + { + return this.getStackInSlot(0); + } + + @Override + public ForgeDirection getDirection() + { + return ForgeDirection.getOrientation(this.getBlockMetadata()); + } + + @Override + public void setDirection(ForgeDirection facingDirection) + { + this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, facingDirection.ordinal()); } } diff --git a/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java b/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java index 6b3759e6..59b2c716 100644 --- a/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java +++ b/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java @@ -64,17 +64,18 @@ public class BlockConveyorBelt extends BlockMachine switch (original) { case 2: - change = 5; - break; - case 5: change = 4; break; + case 3: + change = 5; + break; case 4: change = 3; break; - case 3: + case 5: change = 2; break; + } world.setBlockMetadataWithNotify(x, y, z, change); @@ -123,29 +124,36 @@ public class BlockConveyorBelt extends BlockMachine // Move the entity based on the conveyor belt's direction. entity.addVelocity(direction.offsetX * tileEntity.acceleration * modifier, 0, direction.offsetZ * tileEntity.acceleration * modifier); - if (direction.offsetX != 0 && Math.abs(entity.motionX) > Math.abs(direction.offsetX * tileEntity.maxSpeed)) + if (direction.offsetX != 0 && Math.abs(entity.motionX) > tileEntity.maxSpeed) { entity.motionX = direction.offsetX * tileEntity.maxSpeed; + entity.motionZ = 0; } - if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > Math.abs(direction.offsetZ * tileEntity.maxSpeed)) + if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > tileEntity.maxSpeed) { entity.motionZ = direction.offsetZ * tileEntity.maxSpeed; + entity.motionX = 0; } - // Attempt to move entity to the center of the belt to prevent them - // from flying off. - if (direction.offsetX != 0) + if (entity instanceof EntityItem) { - double difference = (z + 0.5) - entity.posZ; - entity.motionZ += difference * 0.015; - // entity.posZ = z + 0.5; - } - else if (direction.offsetZ != 0) - { - double difference = (x + 0.5) - entity.posX; - entity.motionX += difference * 0.015; - // entity.posX = z + 0.5; + if (direction.offsetX != 0) + { + double difference = (z + 0.5) - entity.posZ; + entity.motionZ += difference * 0.006; + // entity.posZ = z + 0.5; + } + else if (direction.offsetZ != 0) + { + double difference = (x + 0.5) - entity.posX; + entity.motionX += difference * 0.006; + // /entity.posX = x + 0.5; + } + + ((EntityItem) entity).age++; + ((EntityItem) entity).delayBeforeCanPickup = 2; + entity.onGround = false; } if (slantType == SlantType.UP) @@ -163,12 +171,6 @@ public class BlockConveyorBelt extends BlockMachine } } - if (entity instanceof EntityItem) - { - ((EntityItem) entity).age++; - ((EntityItem) entity).delayBeforeCanPickup = 2; - entity.onGround = false; - } } } diff --git a/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java b/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java index d2bc7117..e00b8a4b 100644 --- a/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java +++ b/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java @@ -33,8 +33,8 @@ public class TileEntityConveyorBelt extends TileEntityAssemblyNetwork implements /** * Joules required to run this thing. */ - public float acceleration = 0.01f; - public float maxSpeed = 0.3f; + public final float acceleration = 0.01f; + public final float maxSpeed = 0.1f; public float wheelRotation = 0; private SlantType slantType = SlantType.NONE; diff --git a/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java b/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java index 79bf0ed1..87d71e24 100644 --- a/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java +++ b/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java @@ -124,21 +124,6 @@ public class BlockDetector extends BlockFilterable return false; } - @Override - public boolean canBlockStay(World world, int x, int y, int z) - { - if (world.isBlockSolidOnSide(x, y + 1, z, ForgeDirection.DOWN)) - return true; - - return false; - } - - @Override - public boolean canPlaceBlockAt(World world, int x, int y, int z) - { - return canBlockStay(world, x, y, z); - } - @Override public TileEntity createNewTileEntity(World world) { diff --git a/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java b/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java index 8b619dbe..ac1d993e 100644 --- a/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java +++ b/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java @@ -2,12 +2,16 @@ package assemblyline.common.machine.detector; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; import universalelectricity.prefab.BlockMachine; +import universalelectricity.prefab.implement.IRedstoneReceptor; +import assemblyline.api.IFilterable; import assemblyline.common.machine.filter.ItemFilter; /** @@ -32,9 +36,9 @@ public abstract class BlockFilterable extends BlockMachine if (tileEntity != null) { - if (tileEntity instanceof TileEntityDetector) + if (tileEntity instanceof IFilterable) { - ItemStack containingStack = ((TileEntityDetector) tileEntity).getStackInSlot(0); + ItemStack containingStack = ((IFilterable) tileEntity).getFilter(); if (containingStack != null) { @@ -45,7 +49,7 @@ public abstract class BlockFilterable extends BlockMachine world.spawnEntityInWorld(dropStack); } - ((TileEntityDetector) tileEntity).setInventorySlotContents(0, null); + ((IFilterable) tileEntity).setFilter(null); return true; } else @@ -54,7 +58,7 @@ public abstract class BlockFilterable extends BlockMachine { if (player.getCurrentEquippedItem().getItem() instanceof ItemFilter) { - ((TileEntityDetector) tileEntity).setInventorySlotContents(0, player.getCurrentEquippedItem()); + ((IFilterable) tileEntity).setFilter(player.getCurrentEquippedItem()); player.inventory.setInventorySlotContents(player.inventory.currentItem, null); return true; } @@ -67,4 +71,72 @@ public abstract class BlockFilterable extends BlockMachine return false; } + @Override + public void onNeighborBlockChange(World par1World, int x, int y, int z, int side) + { + super.onNeighborBlockChange(par1World, x, y, z, side); + + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof IRedstoneReceptor) + { + if (par1World.isBlockIndirectlyGettingPowered(x, y, z)) + { + ((IRedstoneReceptor) par1World.getBlockTileEntity(x, y, z)).onPowerOn(); + } + } + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving par5EntityLiving) + { + int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int change = 2; + + switch (angle) + { + case 0: + change = 2; + break; + case 1: + change = 5; + break; + case 2: + change = 3; + break; + case 3: + change = 4; + break; + + } + world.setBlockMetadataWithNotify(x, y, z, change); + } + + @Override + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) + { + int original = world.getBlockMetadata(x, y, z); + int change = 2; + + switch (original) + { + case 2: + change = 4; + break; + case 3: + change = 5; + break; + case 4: + change = 3; + break; + case 5: + change = 2; + break; + + } + + world.setBlockMetadataWithNotify(x, y, z, change); + + return true; + } } diff --git a/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java b/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java index 7d8111ae..d11c59e7 100644 --- a/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java +++ b/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java @@ -19,12 +19,13 @@ import universalelectricity.prefab.implement.IRedstoneProvider; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; import universalelectricity.prefab.tile.TileEntityAdvanced; +import assemblyline.api.IFilterable; import assemblyline.common.AssemblyLine; import assemblyline.common.machine.filter.ItemFilter; import com.google.common.io.ByteArrayDataInput; -public class TileEntityDetector extends TileEntityAdvanced implements IInventory, IRedstoneProvider, IPacketReceiver +public class TileEntityDetector extends TileEntityAdvanced implements IFilterable, IInventory, IRedstoneProvider, IPacketReceiver { private boolean powering = false; private boolean isInverted = false; @@ -327,4 +328,16 @@ public class TileEntityDetector extends TileEntityAdvanced implements IInventory return this.isPoweringTo(side); } + @Override + public void setFilter(ItemStack filter) + { + this.setInventorySlotContents(0, filter); + } + + @Override + public ItemStack getFilter() + { + return this.getStackInSlot(0); + } + } diff --git a/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java b/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java index 14185307..ee1c4fa1 100644 --- a/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java +++ b/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java @@ -165,7 +165,10 @@ public class ContainerStamper extends Container implements IInventory @Override public void setInventorySlotContents(int par1, ItemStack par2ItemStack) { - this.containingItems[par1] = par2ItemStack; + if (par1 < this.containingItems.length) + { + this.containingItems[par1] = par2ItemStack; + } } @Override @@ -221,36 +224,22 @@ public class ContainerStamper extends Container implements IInventory } /** - * TODO WORK IN PROGRESS. Make filters able to autocraft into its item based on what is in the player's inventory - - boolean didCraft = false; - - if (this.getStackInSlot(3) != null) - { - if (this.getStackInSlot(3).getItem() instanceof ItemFilter) - { - ArrayList filters = ItemFilter.getFilters(this.getStackInSlot(3)); - - if (filters.size() > 0) - { - ItemStack outputStack = filters.get(0); - - if (outputStack != null) - { - if (this.getIdealRecipe(outputStack) != null) - { - this.setInventorySlotContents(4, outputStack); - didCraft = true; - } - } - } - } - } - - if (!didCraft) - { - this.setInventorySlotContents(4, null); - } */ + * TODO WORK IN PROGRESS. Make filters able to autocraft into its item based on what is in + * the player's inventory + * + * boolean didCraft = false; + * + * if (this.getStackInSlot(3) != null) { if (this.getStackInSlot(3).getItem() instanceof + * ItemFilter) { ArrayList filters = + * ItemFilter.getFilters(this.getStackInSlot(3)); + * + * if (filters.size() > 0) { ItemStack outputStack = filters.get(0); + * + * if (outputStack != null) { if (this.getIdealRecipe(outputStack) != null) { + * this.setInventorySlotContents(4, outputStack); didCraft = true; } } } } } + * + * if (!didCraft) { this.setInventorySlotContents(4, null); } + */ } /** diff --git a/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java b/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java index 7832c1cb..ffb9dd17 100644 --- a/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java +++ b/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java @@ -16,7 +16,7 @@ public class ItemFilter extends Item { super(id); this.setItemName("filter"); - this.setIconIndex(Item.paper.getIconFromDamage(0)); + this.setIconIndex(58); this.setCreativeTab(UETab.INSTANCE); this.setHasSubtypes(true); } diff --git a/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java b/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java index 345539e9..07fb26f6 100644 --- a/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java +++ b/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java @@ -33,13 +33,10 @@ public class SlotFilterResult extends Slot } } /* - if (this.inventory.getStackInSlot(1) != null) - { - this.inventory.getStackInSlot(1).stackSize--; - if (this.inventory.getStackInSlot(1).stackSize <= 1) - { - this.inventory.setInventorySlotContents(1, null); - } - }*/ + * if (this.inventory.getStackInSlot(1) != null) { + * this.inventory.getStackInSlot(1).stackSize--; if + * (this.inventory.getStackInSlot(1).stackSize <= 1) { + * this.inventory.setInventorySlotContents(1, null); } } + */ } } diff --git a/src/minecraft/assemblyline/common/machine/machine/BlockRejector.java b/src/minecraft/assemblyline/common/machine/machine/BlockRejector.java new file mode 100644 index 00000000..a4c52785 --- /dev/null +++ b/src/minecraft/assemblyline/common/machine/machine/BlockRejector.java @@ -0,0 +1,45 @@ +package assemblyline.common.machine.machine; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import universalelectricity.core.UniversalElectricity; +import universalelectricity.prefab.UETab; +import assemblyline.client.render.BlockRenderingHandler; +import assemblyline.common.machine.TileEntityRejector; +import assemblyline.common.machine.detector.BlockFilterable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockRejector extends BlockFilterable +{ + public BlockRejector(int id) + { + super("rejector", id, UniversalElectricity.machine, UETab.INSTANCE); + } + + @Override + public TileEntity createNewTileEntity(World var1, int metadata) + { + return new TileEntityRejector(); + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public int getRenderType() + { + return BlockRenderingHandler.BLOCK_RENDER_ID; + } + +}