From 4f6a99df4d2474fe468b8cbf572a6a0595bbf156 Mon Sep 17 00:00:00 2001 From: Vexatos Date: Sun, 9 Mar 2014 11:56:52 +0100 Subject: [PATCH 01/11] All; the. punctionations,-.,-'''<^ --- src/main/resources/assets/opencomputers/lang/de_DE.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/opencomputers/lang/de_DE.lang b/src/main/resources/assets/opencomputers/lang/de_DE.lang index 98aecb463..025f1bfa4 100644 --- a/src/main/resources/assets/opencomputers/lang/de_DE.lang +++ b/src/main/resources/assets/opencomputers/lang/de_DE.lang @@ -173,4 +173,4 @@ oc:tooltip.UpgradeNavigation=Erlaubt es Robotern, ihre Position und Ausrichtung oc:tooltip.UpgradeSign=Erlaubt das Lesen und Schreiben von Text auf Schildern. oc:tooltip.UpgradeSolarGenerator=Kann verwendet werden, um unterwegs Energie aus Sonnenlicht zu generieren. Benötigt eine ungehinderte Sicht zum Himmel über dem Roboter. Generiert Energie mit %s%% der Geschwindigkeit eines Stirlingmotors. oc:tooltip.WirelessNetworkCard=Erlaubt das drahtlose Senden von Netzwerknachrichten, zusätzlich zu normalen. Drahtlose Nachrichten werden nur gesendet, wenn eine §fSignalstärke§7 festgelegt wurde! -oc:tooltip.WirelessRouter=Verhält sich wie ein Switch, aber empfängt zusätzlich Drahtlosnachrichten, und leitet Pakete aus dem Festnetz drahtlos weiter. +oc:tooltip.WirelessRouter=Verhält sich wie ein Switch, aber empfängt zusätzlich Drahtlosnachrichten und leitet Pakete aus dem Festnetz drahtlos weiter. From 34c3b681648502922985eed96a6b26b7f8fd4cd1 Mon Sep 17 00:00:00 2001 From: SpiritedDusty Date: Sun, 9 Mar 2014 08:59:36 -0700 Subject: [PATCH 02/11] Fixed forum link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55aa30dcf..27abe14a8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ If you'd like to contribute code, please have a look at the [code conventions](h If you encounter any bugs, please report them [in the issue tracker](https://github.com/MightyPirates/OpenComputers/issues?state=open), if they have not already been reported. If you report a crash, always provide your log file. -If you wish to discuss or suggest a new feature, the [forums](http://oc.cil.li//index.php?/forum/22-feedback-and-suggestions/) are a good place for that. +If you wish to discuss or suggest a new feature, the [forums](http://oc.cil.li/forums/viewforum.php?f=11) are a good place for that. Extending --------- From dd41cb45a4e456aed7b5926336b5c35c744f3d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 17:13:19 +0100 Subject: [PATCH 03/11] basic sound framework for disk activity and floppy sounds (thanks to asie for providing the samples!) --- src/main/java/li/cil/oc/api/FileSystem.java | 47 +++++++++++--- .../li/cil/oc/api/detail/FileSystemAPI.java | 19 ++++++ .../opencomputers/sound/floppy_access1.ogg | Bin 0 -> 14619 bytes .../opencomputers/sound/floppy_access2.ogg | Bin 0 -> 14773 bytes .../opencomputers/sound/floppy_access3.ogg | Bin 0 -> 16667 bytes .../opencomputers/sound/floppy_access4.ogg | Bin 0 -> 14027 bytes .../opencomputers/sound/floppy_access5.ogg | Bin 0 -> 13716 bytes .../opencomputers/sound/floppy_access6.ogg | Bin 0 -> 18491 bytes .../opencomputers/sound/floppy_eject.ogg | Bin 0 -> 11170 bytes .../opencomputers/sound/floppy_insert.ogg | Bin 0 -> 9363 bytes src/main/scala/li/cil/oc/client/Proxy.scala | 11 +++- .../li/cil/oc/common/PacketBuilder.scala | 12 ++-- src/main/scala/li/cil/oc/common/Sound.scala | 41 +++++++++++++ .../cil/oc/common/tileentity/DiskDrive.scala | 9 ++- .../scala/li/cil/oc/server/PacketSender.scala | 58 +++++++++--------- .../cil/oc/server/component/FileSystem.scala | 14 +++-- .../oc/server/driver/item/FileSystem.scala | 21 +++---- .../li/cil/oc/server/fs/FileSystem.scala | 3 + 18 files changed, 173 insertions(+), 62 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_access1.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_access2.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_access3.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_access4.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_access5.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_access6.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_eject.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/floppy_insert.ogg create mode 100644 src/main/scala/li/cil/oc/common/Sound.scala diff --git a/src/main/java/li/cil/oc/api/FileSystem.java b/src/main/java/li/cil/oc/api/FileSystem.java index d2b8736a8..efe24bece 100644 --- a/src/main/java/li/cil/oc/api/FileSystem.java +++ b/src/main/java/li/cil/oc/api/FileSystem.java @@ -6,6 +6,7 @@ import dan200.computer.api.IWritableMount; import li.cil.oc.api.detail.FileSystemAPI; import li.cil.oc.api.fs.Label; import li.cil.oc.api.network.ManagedEnvironment; +import net.minecraft.tileentity.TileEntity; /** * This class provides factory methods for creating file systems that are @@ -46,7 +47,8 @@ public final class FileSystem { * @return a file system wrapping the specified folder. */ public static li.cil.oc.api.fs.FileSystem fromClass(final Class clazz, final String domain, final String root) { - if (instance != null) return instance.fromClass(clazz, domain, root); + if (instance != null) + return instance.fromClass(clazz, domain, root); return null; } @@ -74,7 +76,8 @@ public final class FileSystem { * @return a file system wrapping the specified folder. */ public static li.cil.oc.api.fs.FileSystem fromSaveDirectory(final String root, final long capacity, final boolean buffered) { - if (instance != null) return instance.fromSaveDirectory(root, capacity, buffered); + if (instance != null) + return instance.fromSaveDirectory(root, capacity, buffered); return null; } @@ -103,7 +106,8 @@ public final class FileSystem { * @return a file system residing in memory. */ public static li.cil.oc.api.fs.FileSystem fromMemory(final long capacity) { - if (instance != null) return instance.fromMemory(capacity); + if (instance != null) + return instance.fromMemory(capacity); return null; } @@ -115,7 +119,8 @@ public final class FileSystem { */ @Optional.Method(modid = "ComputerCraft") public static li.cil.oc.api.fs.FileSystem fromComputerCraft(final IMount mount) { - if (instance != null) return instance.fromComputerCraft(mount); + if (instance != null) + return instance.fromComputerCraft(mount); return null; } @@ -127,7 +132,8 @@ public final class FileSystem { */ @Optional.Method(modid = "ComputerCraft") public static li.cil.oc.api.fs.FileSystem fromComputerCraft(final IWritableMount mount) { - if (instance != null) return instance.fromComputerCraft(mount); + if (instance != null) + return instance.fromComputerCraft(mount); return null; } @@ -140,13 +146,36 @@ public final class FileSystem { * more control over the node, implement your own, and connect this one to * it. In that case you will have to forward any disk driver messages to the * node, though. + *

+ * The container parameter is used to give the file system some physical + * relation to the world, for example this is used by hard drives to send + * the disk event notifications to the client that are used to play disk + * access sounds. + *

+ * The container may be null, if no such context can be provided. + * + * @param fileSystem the file system to wrap. + * @param label the label of the file system. + * @param container the tile entity containing the file system. + * @return the network node wrapping the file system. + */ + public static ManagedEnvironment asManagedEnvironment(final li.cil.oc.api.fs.FileSystem fileSystem, final Label label, final TileEntity container) { + if (instance != null) + return instance.asManagedEnvironment(fileSystem, label, container); + return null; + } + + /** + * Like {@link #asManagedEnvironment(li.cil.oc.api.fs.FileSystem, Label, TileEntity)}, + * but does not provide a container. * * @param fileSystem the file system to wrap. * @param label the label of the file system. * @return the network node wrapping the file system. */ public static ManagedEnvironment asManagedEnvironment(final li.cil.oc.api.fs.FileSystem fileSystem, final Label label) { - if (instance != null) return instance.asManagedEnvironment(fileSystem, label); + if (instance != null) + return instance.asManagedEnvironment(fileSystem, label); return null; } @@ -159,7 +188,8 @@ public final class FileSystem { * @return the network node wrapping the file system. */ public static ManagedEnvironment asManagedEnvironment(final li.cil.oc.api.fs.FileSystem fileSystem, final String label) { - if (instance != null) return instance.asManagedEnvironment(fileSystem, label); + if (instance != null) + return instance.asManagedEnvironment(fileSystem, label); return null; } @@ -172,7 +202,8 @@ public final class FileSystem { * @return the network node wrapping the file system. */ public static ManagedEnvironment asManagedEnvironment(final li.cil.oc.api.fs.FileSystem fileSystem) { - if (instance != null) return instance.asManagedEnvironment(fileSystem); + if (instance != null) + return instance.asManagedEnvironment(fileSystem); return null; } diff --git a/src/main/java/li/cil/oc/api/detail/FileSystemAPI.java b/src/main/java/li/cil/oc/api/detail/FileSystemAPI.java index 894e2246e..43264ea33 100644 --- a/src/main/java/li/cil/oc/api/detail/FileSystemAPI.java +++ b/src/main/java/li/cil/oc/api/detail/FileSystemAPI.java @@ -6,6 +6,7 @@ import dan200.computer.api.IWritableMount; import li.cil.oc.api.fs.FileSystem; import li.cil.oc.api.fs.Label; import li.cil.oc.api.network.ManagedEnvironment; +import net.minecraft.tileentity.TileEntity; public interface FileSystemAPI { /** @@ -96,6 +97,24 @@ public interface FileSystemAPI { * more control over the node, implement your own, and connect this one to * it. In that case you will have to forward any disk driver messages to the * node, though. + *

+ * The container parameter is used to give the file system some physical + * relation to the world, for example this is used by hard drives to send + * the disk event notifications to the client that are used to play disk + * access sounds. + *

+ * The container may be null, if no such context can be provided. + * + * @param fileSystem the file system to wrap. + * @param label the label of the file system. + * @param container the tile entity containing the file system. + * @return the network node wrapping the file system. + */ + ManagedEnvironment asManagedEnvironment(FileSystem fileSystem, Label label, TileEntity container); + + /** + * Like {@link #asManagedEnvironment(li.cil.oc.api.fs.FileSystem, Label, TileEntity)}, + * but does not provide a container. * * @param fileSystem the file system to wrap. * @param label the label of the file system. diff --git a/src/main/resources/assets/opencomputers/sound/floppy_access1.ogg b/src/main/resources/assets/opencomputers/sound/floppy_access1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ea85f5c15fc41952dec93d3ac99bba906da5724d GIT binary patch literal 14619 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 SD0e{$dSDwLbt}&-=>Gr#D6aJY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/floppy_access2.ogg b/src/main/resources/assets/opencomputers/sound/floppy_access2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..868c79540202853b810ee812825d1d9b05c3e6e0 GIT binary patch literal 14773 zcmaia1z1&2xA!@8OLt2hx>KYZ1P&Zhl&(WJ5~6fUOZNe3qy&`i?nV%i22nz!zm5Li z`@Y}(zUSU~X3sNw*34QnYyH;jHG6MO8yg)E66l}Aqy4w?*it_lObhmMb~Cqgzi$G| zSNzk(8~mrz1lGJC`CsXN0@ILHfJzGdX;9HsSCBNbu&{D>=f?(m$Ut>fbaW-n z-0iHusDHUbWaae0APj)Wr%vA+G!YL2f$%{fQzi&rlC=s1k(|%wo0hD6U+d+KOiPaJ zCAWy->-$$hFK9^u0-=C{*f8S?w^Z!M#B9h}k@F>no0L4fL{l^H^bq4$M(1Vb1(P=r&v4KS2sxnZ%t%X^K*KR_R>&c9of^hA93 zU16N~9$Wo{EH+pDl&U)4te!$DNb_( zSp8iVJtzoRCP*oPSmizO@O$dfNhZx>PHiHgNdW~NT@4tJJWceytmeHu=e+_9(?X4# z0t}l%jTb^q&O^<}!~V&?1J=&(^Pi>DgF$%@#ZosQ1&ovhU&RWLL&7SMK$iC^p~p;Q zgd`TK6kFR@*=07`mNz;M*K!Wm;{53Xm>uPQHlRGajN<<%TN|cY{qI@Yc7Pou4d}Ap zmAc=RNdd~#@5YJ#N5cakz^2kr&R#b`C3nGo_eVfh@{k`)Rv$f8fAB9O+?yQ)lIElC zb)_Bzv;pOsb`#Qfmz;Okma z3Fr`!|BXIlBI9IK3@>9duar1*x-(KYleM`tE%T2B9mXg&09!(a(tGpLCopv@}2Z2KH|DgC^#UCjDMR8GL6#Ecc-3b3M=Y3JpJtn?i z(~U2O!v~<4QwTtDY{OQLdzF|n9MLdm#DPeLszMNdJqj=?y=A-%8pR(c2}^Suf|LMW z@t=nK!8A@lGx;BR{3o?GAv2IC`MGoiBw@NReJ@ADx1P%%LQNJt*X9G(=3}3eh5dJ6 z{g>x}0H+E0aTY+gPp9TPdI^uEE{_G># zP_9|1&@7Y-rYreBdkjFG71Wp(1QeSB0#SfK4*?^G;77T|%Q{IKVDN1*q2`OB<@b<> zl;8{Ch~YAN#LKWsHYJL6xVWmO*hm|mFzEMcq1EvkLGSr0`dRZBs!}R9@)BviE#v%y})(BfXbA+V^ ztb4#r^sN@pVTPoE#`B@;zXI0D?>W!UdID6lIV-ado@;D&8Fuys@5(aR%F0U18Xe23 zDvb+v$_mPcYHiA@Du!yS%c~sr0czE|vRclvGS2eaimNit{l<4?EtNyHHJMfA`;AA~ z-JJU^E@f3!<+TU*)RxNqKG*#gUjJgqaB=xwOKD4s(|(KVNTVZlVcA|A`*2syQ0>uv z3s1c#gEq|bbF#^XKClkQ=iWKS=b^QZ677{&LjZ%R-(us=)Xl)KIwvZit?z_G%1ks4 zVUq#Ow5&3-tbD)LiKDw>Usf9yV3K0BCSqbp=CmdfXFMNUP`1~?KHLTf;#=u+rvAuF zZL%y35VC74u>&jy&N0W~%YCj_;v2s_3#)N3``-ZA0N-PSXh=GrfdeT>6bwRR*e2G& zXYZx=z=!V97wPh$F}Ocb?WIoEQnhDDo?-8!*Nsyd$VwtqwS^>4LDBOOTB`8;A$<|4svTGIl#zXD-;7ZVfdxMQc9G?n3MQido&d1g&MU%`RYepLtEqD7jQ~I{ zoRU#4Eh5xWDQy5)A&N-VRQVc-jh*=BsDTkhgvKh6K4Kk5uD*cFg2Ro{m~jU4#qvY-w^z^njPiK-4&} zw-GUROxY1J)>1chSqKC+B7?!)FeV0p^v;Q4Fe6CS*tvT3;1CF~3N9e-_~W){8j-zV zEL=lOkUZeUee}S-gGPZM51t?|BDTP1M34h^K@eL2x+QnVlVzu{7?WXxglMUuR(b+ZK=h6n*;m#t zNMlrn&he`;15mK8>`61?0D%sG2_5{|N0>qJ=pbqGLO`yV4Zit^*bcQIurpGJ;Ia2* z1>?zLkO0#Fo>e1aK!Gm{5P*0uKNu(w$y4_PsOl~~&;~(x+!K;Q+ep)w?Go8y(OC&~Om)!Utg0XC$Xu z*=qo=VnEE9R|w4mAa2;ofU5!o_-Hc-w1SEbszIhw5N0LEWEZsjvxp#iK#ehcVZ`Q9 zeA`)a7?9pHAjT;szYjfthwOd)5d#o_+dhCGwoQFsWVy%vJ23fo4fFrAh*BWVBG3b# z)_vqu7=NR3MZ!O~77qUe>1ls&|08Dqcl7>0)r{el0ObC&07yzdL!s=5cMToVd!<>0c1E7CkhnO>u7Me4{27PgI0R<`7xQ3+^)pbpN`D1GaAlR1uqwV{H z0Ti%B-aT3vz!*XZgmTFM=f7>qgn*1c;axKH9+7}*?g@XO`lp7;aIdaEof-a)y^jR} zh$7$b!Vhb@EQRQo%9$WUVH|DSJGf&@&Q0l z2nqz0SJN@U_Y?)?8zDay4px7N`;;9r2tQ;1Cn3TBhmff3Re`xU$l$5z0D2HkY;1ir z_6~mss>zBceF!}YLqso_I6f$t$jRp`u4YpwrnmwE@9!BI459^r5^?Dn88gJ<@ZLO# z$4?+gBupYo2H*<{{DnG(|){&k?g{Fx0%SaC-2 zC9HlgKjFP;@=Jxn@d42h~1uRob_%c=lO!`68N9R&zn0P`#0_l+f`?=e^&}j3w$EE%92tg`Y{%Txs3FQ$Dzh z(*#A#%H(6FHgOR*+9(VW<3(g|p^TsoYxiXn#hOOv(n(Vwf@vPVj6y73Z$6DcKBho{ zo{$b-1$D(TF66!V=2XxXI%p?^C@7O2RAfRG*>)7d9KHVS zPBpjz>egZb`zf?2l7j1tV1a2)>#|W)6vXVxz>lY+J{G%1DCLfr8}!J|`DYO#tu#v(HxV^DMF`4W2}?zxv;k8|y-c5;<@KEKx*v({8p06lrU8b+ zMwK6*e&v-nj~JE~?=STqujhC^?{qBHbUl&ZF>e1D%=$43X>&0SM|oHYzYOGjL-VKDFu!hn?D^67 zl>9d*zISn&p|}?MGqe?X+KB`Ek+F`9vj-rM7mn#7WCC?65xI6el_d16veD3#MgN=E zA?0`#97<_)RpcxZnkz=uM~juG;=8iydDKva=wn&@ZatIL;`=&Jl5j!+r~VPk$C92b zzjrCmPACntPwKz^K6;E`yCKrl%2_e~ef90vH_Xj$_fM(1wqM3eU`!^X($k$|uIM+F zY*%5}JU%xc;fYfen4IbQz0A_kvC8*)RM^+lVH00JpE#0{(ipkLkx(t!% zo-r3yht_5wWo28v3YQudzY1D+eer!gT{s1GOEtGEUL;4nCUaZvbn58(c^*~X zFRpiI%$AOac|{3AQWgzUOr}!bx*bQEm^t*VH6SYJFCT<|d>VHCB(7*Br}r}n?IkOfKz#G>3=rVYUWh$WaVpysdiaB-nnJ?P7OprFiRDboWBVtz@~3aIO5M z5M!%(bXy4t_6FSB|oVV z9xISzI`zn2u7QP7-0+M%LtKNrgv0@ylR{EbiL4vk_tKE`v6t7$mR_A=byj_V{`r`{ z`l`Z6UcI*Y;@f;Gg7!kgmCkUXq$+bp!~!M*c`_Y&nxx2KmeJ#tr;;u0e9Jdo$D1{4 z{MOB{sM`?m zVY8#|l#6_m(ykGLt!$c;0dHQF{38z-%F{F=B|~J#$TJGR=M6($Wvg-DX}{QGu)LoW z5_d#;rZ7@S=pNEcJ_27wPD1wvBV!tXkzkW2NZNp%kQ}6haLCf_#xGzS;k2uV!^PM( z&x~`Jiu$aK^}u2Bu_iY}_?U%^k0!W(ecn*VjyY~m-3w9E#vrWH-y0g;yq$Eo@`CKL z9~(6Dj-e+NfyW*FsXSVFVAEn}W=-f|n-||#{kwjC{E&k?=`N+Tu%Hf`XcsYsw3Imb=tp>)Hq*@ z3P8PRXVM zrQQ0{H!GckI3>l;tlztgMo) z>=uh|srZ=8D-%C)YmB3Erh#X!y`34oJCou1D3&3WyLy8-*o>O>{q!83Q=7WtlqU7| zF@AVt(x+d#Tmx^C*TU5I zl%jN1U)r0=UnO^?)y27lI~eEPfzwTL*Ms~f+BVoX7bD{LzFr)vM=~BZ5K6+DgCMN_ zGH7oUMZDtd+5RM*RPmXKAeGbc=whbSm9OQ}SFVs*OJ^TLRT5XG7bF*r4qsuVcCXNk zO*5*ujar9VqMy|p*-+mxvR6*!t%4{c<&8uGYg2jFrE^o-8LTX^-2<4~t~5H3zIDFd z+}=8WIb$S{m^${pSdu|fm24K(V=ngQGhEEVnrneZ$*8T3Wz_cM&3KCNYY7bQ3X_s2 zL2JAlXqc~mT(Yk+6J#}EUozV{z;s>~f%j2#4So$x=V+!(|vA9QM7t=w1BX=Z9KsdE)j zNpy-fCtE0^YF|qSu=`I>A6#pOCcRjg3JBF(?Pu*CsMszp#P6O)>RTwX*6vStEND_- zUB8q)jG79m^Y!Tz{_geoFh8?t=Ddto;l!dD*9K#2kUZ37vdIeDE4ZbtG%;n{g=c&t z$2K+Q#|*Y%yfl|6a>yFpm6Hjz=UEEJIYrHBF&}#^F%7}5-4u1QHL~hoF9qsOd0ly* zygb5vrofc2j8r?)TOR@QdBDHOFGHNSlxWc~gq2UMwaRR?>UdksQleCh4A$|{yz{6k&3(WF(^VP~IT7ud#gXp7pdw}L~d|E+F*R&z;WwUOclHicz=bymo)!P$5T`h|)GUMHVX2?kNI|}9E1!%-ww;~&3j1n z>b*f9&bq#gC|(_g`$gPs}mpAaMs zOezFRqnrbw+qrP-Qm(PW@=cZhcLf%Z?%5{-3>L+m!K;0CY31OZ??oE&vc?bBW=Gve z<6O{M_nf4TLnEjcEYDDos6neZsCjQ)JWF3xmc6Tkp|539F}EehUc{O{3YM<`>+afC zNnwVfSm#i3@LWOb+&2~O?eP<+?O zGAVVfRZbdy2T!9fxw&v5dTe<9{qD%Kn~iea2(7l+g7PD;B45 z`}KP$8m|1@h|6}}`E53Buwx~p!OWd1;6AOapKad=wwTZ6auJEAzu2ob-*)e#Re{Xwl2 zRi^&Xdt-<%C}aNrUhpj=W^?fd7;Mh^b-Oc^cUQWWx_aqUogy&-=LbU z%~W!~6n$ipQ`I^>eo*xG*UoHb4OJ%dO_2zR@f%xb+ag@B;BR=1`#57jFm$T$Dq!pd zUPG-Nj!S3ShGUk+_e>l2j<}~>Mm2*|i3Yd^<0PA|mA`Z(#^8;2MQ$k}epUJ#5#@@D zj{e=(kTRlI-?{vp#}`YbA#-pkNVN`zada4?I*f6mm+E1ye!n~{t2Mf&Nn*nK$i0)G zrImp0U1w|kg0Ced=6m}Nrnvu7fBKa~o9^?(%+k`t{OIu5#N5ga`Vvk476+9)8X zDwfVcYfgNb*%LdcHrOvX{y>hHoF3FdSBI;C{h_DQdBmljK1GaNsGi( zC4Mhuh$2t6irzRaWHWt~BaAvR@<|Y@4MweHY)M3EjDFOqCvXaOkmiR>Z+SxAR2G2b zogZf!?)UFx?~XY*re(6)WWN3R)gpr@lPPvMth4PKiz7`MxNYL&g+2p|ZN%G91?={7 zZuY(YLX+GI9Nsgj1d{LNyE#W|OHZ}x`x%D5uCwCE2TaYVeCL9!Onc%q4E(m{oOWrGQhtr* zMutfjk0F-f6t4NdFJf>E2s3deU?U z^xs&%7#2wm^rp1k#&V))7PH*{(Ll9o(@CTG-t{axHPfZ~m)vjWbQ5nf-!{bT*$kTj z3RY+S&lD>*+U3#E;_Av`h=?~O=XXHm z)l1>w;4;t-ay$QJ>TW=eFh5?hzWS1XDn>L~Av&^>$ZnM-wG4rS<&@bKZmH3Wlq%@Y z9c)#WPhUXLV3E-+8Dkh1b!Jhtn9XADaZUUi0#I=eU3R}RV=GPcqw6AU*D(i ztih02NS&MMvsL`-!s>MO=|_slXs0B27p+})tgB>>zr{$~N`6w*lF6gEqed@>Y^nm{ ztXuQuY(>(3pYxxnV~o+rYt52R73RI9jQNZ)mSbX(mvnT*8tt7yw2I%fK8Mx?@)SRw z8QG#K6s}1^Ib9OgC@)#W)aXns2%mmn_{{8fXZl-Mv!l#QeVzJbsQkD8SsvbH82jOI@O$;c?GR6Q^4v%-M!oe z7b`a%rdQzgW9x~QCoB(i=FQmjbxO6S){^596c#PsK@A`wbx4Swz!%i&-`=g@zVAqb zXQ)I;;Rz>SEEBuCOP?B9S@biuGN;XPejO89FY6nxKw^19?(%~^`I8D8w(Up#N_}XBIX9&0C^OHuGg>{IQaNbLMzH19Bxz8LK zgKav`YWvE3yoi4LS9^_m#42v?q>!d87F<>)UkiyCm4?CaOehS0NHcD&BniB53|TeX zN7)g_HdvldAs~BG{^jwzks6LvG#KcFG6y@dA+?h-#!rLyy{BH2po0)CwZL(W^_$!` z$h3+mqK`$5as}0PxYico(Nid#ta($7mX$FRufdJa9Zl3T4THy~9Ik%K-BPQ;Y4n{> z@{bBev80+1MA76XlXH{Xv-KMEQ-eJj-+HyYC!^LnIUeti`@Mj=k2I}v=eAE{ViZ;% z5yNnlxFIry^~QEkw1Ok?cT&zL9sEV``k@3|?=N`Sv#->G*07}kwhNSwqptMK{NVGN{h!QWU03pHCdD;@A&X*=eC*`eY|piC zn9noyM}yZn6GY2zoGeVtK&pay`Wg*%2%qM_FB#`6#1GJ!Xj5_ru?C+Vm+izE;GcGB zNj)vMq@1YiN`E*uNf<|P-T84p>S3b3=s71LP9a84o8wDt>xnn3=<|Eo+vWuX>(J}Q z<&MRgqou{bswWmVI)c>?Jc3%LpDuJ`KfIk+dtQ#gOl8yR4dyV&BK4ci<}nC26298H zdnd2&TS!Q&NW5TzwVyK)-Wz~F=L;g5DE57*Pifw$4i>YrgrlIVE$Y&&B!%l#q;I^H z^mTdbZCU4iVNs`;5Y4U4O@)a$ZyOEA|5zhuf1f(Y`!%SJOAYtlIM?r z?cVl@FVnQqd|Ie##akS|RIzHUWDKVrJ4&!^6jPd$D1c|i_+aRlYb+MM3!v^@kvX1Z5r^6k^K;~PY~-SkRg1G6asO$un4lDn0mt(R5aI8Eu|Hf#Z!;VB?^BjY#w zb}sN^#bm8D>?xX^O#4shc2^`GE_vS?ucZm0vV5qfS*NzWy9Yag#8Q`^uFWHuj|RV} zO!q9u5SmwOTY!}g4Zr$wk0CL2$Nf6@ZX0ytZy(Jnf|sb<7KZ%jR|1u)$1IrG+%;bg zPk%wZ9(JwLH98gqr+fbB~gAe1V-$_dUXCay|ukqApNk@|87f9%enx5OKOGTA9=^hA`9eF1qcmfyF6lvE{x7hO6&f_S7TRsaP zurxoj?K`lX_nqeMcuyU*oWbm*YR3i6+-m{p`y@S=02o(8F)rckFo9G2AvO$O=;jGy9$)_>(( zL0k@BM5k6pkM4b=7=GdZ#1A?>YR7T zX}9g6@kJehR*Mf*Fl4aAl7qENJ(K>iid3_i zJxR6#9D&I=k(!d$IqQ;#Qp`#urPanq7`$3Rm0|G`hPf8b+(}E>w;RD)r1A7TT(dhD z8&8HFE&IuO<|~u`Mk7t%Lb`jq;u;76H7ZzkU89(TIab2`hqh0hEo8AfiiWC-W{b3< z*4Ktd#+2$_74k)8R?(pJm*CAXmpiw<6R4A2AQy%TySIM-q|M)K9C%8aIG!bH>r=y6 zj!8}1VMVuSW}M3Z?%TAiSq7<(k*}pmRqjx`UG0^knvFotrKRSZTpP)(f#F9{Gx(+= zE!Lk1OHdm^u5R*)I+yalW8tVFIO?PXjE|vb+^!R@ntsr{^5CChjFP18gX=!UjY#vi zb~W{!`&7DPBelig8@gESKDFHpiD5RMGV~>%MZdfFEp~j6?hXEAptM=Bn5O-W0_vBs z3hR}F{X*@E%9n!s)mTsNif;>ZIh|eNT-qet$rcQ?!2V~dkv5K$>BVMic$-mg>vEiE z^`|+q#@;kGf1j@Pd_NwIX*kYJ)c*6@V*Hx#?Xk-Uco^g7(+LgP7QZ_R;KP#ef>%yO z5~L+`HUnMf$H8Vy=%EPem(#_dNzIhIF)Moe617I8Eb#E|BT2HU_=jXtG>KXer}?PY z)M^CTbQPH^AH1>6Uo4fn4!#q7x;59*?ohvRv3I?_VGsU9QjL7jSY$bZ@MY-GJ~&px z937iJ?`soIXvR_^GtF2|5lLKRZA`(LxvA=1dW?<2J9+^sVp)y5yb5@vk`)?v2`Y2Q zeK^`zzteC8$#B6C@quj4Q3d;+Wh=US<>9CQOcKa@1`uMWdoWMi#~@s zNq0)1mZ!~KNT4X;ET}vmRw!jNU@z3N-m3e1yGjRbR#IYq;)|4xq8;Oj)TA&WoWE^J z98^!@{m^Ti!$s>hJ*2+kLqK$&K`Q)6n~UA!6W^L2&MBh(468JVe4(oIQW_esCgc^qVf^K3OU1z! z9SU6jg8fsv58ZoxRjb-BuZ+zp7Svpu`Mb&Q7nDnjZXcsjK-n=e9`ArsQlz%is{xuTuvlSCf6PcJ2+jh$k z6}+X7L_&b7gMQ@-g>O8`j&@vr`FlMH$wY##K)_#Mjvm*xV1W9}}nqmN)rl!xzF?TogMKOTU9bMl35n z9Wswuci(~!fX`7bLLHW<7(F4U!|n;ue7S1@5?jn)8Xs&Z->!W~{7I{5fiU0Jl@iK` zam*Lo-o0`g)5&!=kLyFCRC`HZ^1T0@Q8}7Rh;#{UejBqPLEO)$16*19uI9ME%eB+g z7&w^NCWSeL$L`vH!=_n?d0n%^!v%S#D;08G!t^R(@4S}sryiIk*C({D0q5jnsji9WL z8bhh^k=mb|Cl0|UPvPSuftEwo#%jv-Vq}e7ctGX4NA2`j}FN{Im)NnEk!O(v-oM~F0GY$LRSN! zvuPr@>w+A*6n<&->j*_lbNe4F^wNQtQ)T@*%NX^aml_?U?d>DHwDxaY;&~HNcwd}f z^e?Azh;ywC<+ zD9*M2eqnL{zlG71!y(qs zo4vWkrPt3@~tKnK9rlIbOZPI zQTD3W@3tKL-w|liBFo^tl%z+awxst+@E0qE#M4dzRbud1L8{#gIKo8BwW7}hq8icHr&q2cFb2A z7bk_-%vF(Fiuh`wiSM;n*$=pqEuZvk%8@3YJUY$fkof6jQZ!*y7{3}Mnr+UcuJowT zZ_QwA=!W^=lD9EOH8ED$|J@w;``TDD+=PPLKHZICC(UK+> zy7K!u*%sg6@adf2R&h!cVk|iC)-pLfg2?v*84P2a$cyy6xk1lZSMafoRv!-yQ*GYd z0Y43yWfeOP_9PnGs;wVp*MfLrKH+A*67(L{u@Yw`*rBbPaHO~yQeN}ss+#*n;?*Ik z9uxm+eEwP1x<^g!F6mVBNGVK_Y&kS@Qjv(=ktL0*&R>N)!8Qd z069l0g>znP@v)n1Of?}qZ0p3`$?VBEBGN2rbXVjxf6Fq4r|aiM-CpTgI`(P z%f|1!&XW%J$&xIlOGjC@9S^8D9D32Sbn4?rh1O91hK_*7MNIzq zY1Z>dL`1SRs8l!;#(#J4t8Z}y%+Csx+#npOL`Vw# z@?x62!>)=C->Zu3ua--sX1nwH$|Z!5N`+#a=Z1+gC9p5OwfaKy=xO}ESmUUFQY3PQ zzkp@jauTdd1x<%Y#NsV&7(3}zT}BHrU-O9 zgC|OBi^}%JK`F_0PA{Xg^<%MH4#US{21n#RrdvJAHDuk<+~V{PEmLbCnLa1AASkOJ zaVT?7or+0}=|$zPw2l@T-6bt9^z|N&D2a4>Co^-W-DcYCE&A3-7v&*@(9-sdGMeXC z*gIiE>{kg+%D;yA_nv&)uxUJ1m=as*>fm+L63wPhczA$8af!vvJ?i~|!G*Ie7KaEU zGJICHz-9Z6C?LO%Y3)$P;xu&pMZ0wZN7SJPao_u=&O`R``=&)rnG297>F^8`S&NTy`}qL0{!$!d47@d$Jd&P*Rpoa{1O(LGj_3 z-JXTWV&h zEv=>V-S$JKod9lZA%ZG-nZ}fp*m}f`sNK z^7{to+*dh_ajRxj8Y)LmxkHgxv7#|d_$Ch;Gso4n(D`z4kMn)(aThi%xV88ddWR|x zPb3oXE>WKUP_Cwd?}UpF~iqVk5-|4+$FVDEf>Q_l!%`La; zG8$Hgacue|7Uw&k1qp~56-V^x;mY zM0p|>R!#%PO8OiV_QQC?-YVfcJp4Xr4CTE0=`vT-QuPJ$WTQsIZ}@eK$w%v$i=O|G z6#eM>zOX06kqGr1%~LIjL|?SbZ}7;49Q4eJxb}Rde&0GAy(-Jt)IadG=N>Cc|V z-j9`FW@hGby=@ax(+h8G9_~hk=VbQHY>qEK{PtdC#%AWyfzoM<_fW1*jz{P*5VN&)HP@XSndOevvHUUDLkHgr38MVlUXXav)d$GK;r VXdRnEn909fh}oESja3;V{~uw+C^P^7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/floppy_access3.ogg b/src/main/resources/assets/opencomputers/sound/floppy_access3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8e3ef45ffbef691a3c9ad55751749175078731ce GIT binary patch literal 16667 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/floppy_access4.ogg b/src/main/resources/assets/opencomputers/sound/floppy_access4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b3f6fcd16c9acb9292e014ada46bea59074cf1c6 GIT binary patch literal 14027 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/floppy_access5.ogg b/src/main/resources/assets/opencomputers/sound/floppy_access5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..44ec4d16e09a9dcbc0e48894c6a331c9b525cab8 GIT binary patch literal 13716 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/floppy_access6.ogg b/src/main/resources/assets/opencomputers/sound/floppy_access6.ogg new file mode 100644 index 0000000000000000000000000000000000000000..38821e3a76802ba221ced7d9dbee4e5a32ffac43 GIT binary patch literal 18491 zcmagG1ymhDvo5-ECj<-b9^BpC-QAtw1b4UK9^Bm}xVyWD;O-7@lllStbya=UQ`18tXJ)1Z00sQ#qEqFO5W%xUEu%m}P43|0TKCy*duq^D=2XJupr z0}em{{*)C3grsCuWCTSNd078;NGMB-@E8~wnK(MK!U0DJC@M=RDf1XOT9|-9{Nqk3 zD5MGkfCds7qzU?cr(#tA03-lFpM(-I-c*9JAR&k1drE@%N2{McEF~eVAHyh;Vc@?i z0%l`00011|O92y|wb4zAqTUcLcWjjGh3XPxv z0RWngUz{)qRq>-T3?&T409GM54nu@R84j>i#o7L_j6(zg(u{}s@v@wU#d*=3M-=r_ zf^anTGm_E_^QuOb?T|X2juRaF8ULwZ{^~&hT#FzirZJKr^auM;%EA-}Agh0B5deIF zY68T5pi0!Bj@ICePm{=9Q7fRZOf!inDa)t;FJ~P!7n4O7=S3GUjg%m*W-pEAAg!e! zo%N(mi?qW3PchXXB|4zTrToN+b|^U?Re!-pT}H-jaNflPk_uV_d^RKh~Scs!>V#Q1E6A7#081 zaTg?$pK+)EN143DQ9vdImT5*BB_9~w;&mSho@R@#zlJyLnx z`hP9|D{{mfNPq|fAd*{(BoH|qkU4!A zfkjA6@Eiz4PO$>yJk4<&z3|stiWF$V(g9JVY|#V=J%!p5yX?@wZ4Vp(e2Vxo3^DX! zI7~|FU9LS!`rca8glFG0{*~(Qq-*xK~kI@R9;jm1LIDR8$&O zmTzrTlDxK^RCLr#mhV+G(7m-5gSPLywlO|9FU~sysRj!s22IYJ6c%X~mbt~HX%wZU zC8dovrIi(0xd)}Wr6aXwrIqC)wN+)6*2h3jrYpd;XtNmD`4NhL^Q3us% zPxVOc`Ee^1ceh-DHc_T8zpqJ!+*I?Eng5 zSR1gzX`{!{S!D$hGHWZ~yo`qKVJ59s2kf6YckZ0?s^DP;V}RHI`M?Is2!9UYS5RMe z5CA0MKB^KDRX>3flHw6TzA^(Op`)y1KTd+Yq$Od(9Mu4UaKG8nc{2jyCHcro5+w~lRt5R!Qj!dfs9LrR3pl_T`N&!llmnL2{|H{}+NdU4+4TzJJtVoPg9LtFRU=*)-(f}TG9>9NSbheS5?uVYGqk502EGIfFUJW(|~Se%dm$fX;JYZyrdspD;g+V z$%>_L!SaKkWy75u|Ci>5mNWwkh7}*escI7AfWr4yG$T0@ zW(;uIr+GqkK*3X?2>gfzv7hP@R>YnHn?&GHW!QotvKV@%7fDsb2F1q1N=!kA=# zY#|?ED-fzUAz^{!FvdXzBRIxEUg97vNJ*(OCIC&^Fu_4d*}uR6Ocl-@oNSUyH5Lg5a7=SP^iU$aQ`wk>#0Y<WvL&@Tn3MnKzQI3fyC zVH!;cP*4WSOHxq=AxTP*765Z#SR7zJXFZjmjsslKzkNg>-VmN4n7~Pyk?M1xv?O_n zAJC!|&Oj&>^p9y;R@5)?LstYXFiMdEpP?S6*0QON9 zIDHTj6k!1Xs&BxIs9M3;(f>y_aL)tK4Tdek zN{#_T#ccdn310%B86z2jQ4PZx_A`W_Df?4^IZh$QN9qB5$bRG>kw60Qb^u7=*vI*( zG907-J2Cn17R>*T5+%Sq>$58GX+3~}4gD`G7e)SiYh?YOBt7Nd?f=Nx|2upCKee>1 zDu9stpA~?=6BY{a4u!2M#!iU^NByBA5+X3s>rDZ!7!o%ynDQV$5a^y9AxRDjQXonw zDS_|-Ms$LvWU8a0A{A*t(#O^@rzuGTfxO6KT%7z8Q$OfSOfjh*4VFb&9CLCbP z_8Y)gyxKlEF~6>7dh4&R34zJB;9qNhycj3~eUbfv7D8c3AgVqvLKp~i!@s`3*#Fgs z#JT?uT0lVU{~MPeFZdT)&^f?9N?ahwDE_ucfi0MS3EW>W1|kDfxdb5Re|-taKpB72 zy9C7#L;_9oLHG;RzbzQT4|Dw;O!#l^M=l72DA>m?Ong9+H$r61yxjvPZ$2am@P!8e z?3XN$DHnza`ZEHPqyl3dkPK-*D~5B3)tHE5_G8Q^FchFFDOw$57)C0{Wg1B`^p+>6 zN>cprpK&N}a2W%>bP_-V=#dDS{P;moF@}JG0>LQ(+0|WB4BFt}e~=kr;b8{@9cL`S z07!vD@IOM;;gL~F{c;UC0qWZNLr}i(QBm~~a0iTC5ISql1c3zLgrWT)sIk5QD7J3D z5#*Y?VK_w!5dXa+g8=XVfH(vKBBC^oXvCOLu}D8Y$05g~Bmm(H0BnKyeggQCK!k>d znnvgK?tqa98wck1{Q)QaOa7>!q5r+Afd6g(dx!24{YUWy|bFAc9YcDo5S9GPjW zh24v9FyGbitr=#odzweH30R`XXW0}K+f|8OjV5Sls3B9TZ)1m5A;gb&t!@d7D^;uM zJuN(2pY~k%aB#Z3I+yn_E{GA3<9LNv-m-SEdtKXu$~#QC9Sz8>T@DV5$Ylj!7qPc1 z_Ng1L#-T;6w>|dB@Bi`Msrv-zR}=lkVIT^ zLSBwMoYP&xLY5)Che?|rGIsTw&B`;-xFhpS{?AGZ=LC;CU7Amcn3mL&ozhn59Z$Ux zT3#xCos7;8yz6Bh_yt%juMkT+ISfl#=4YQ4gNLCVr-rmsO$rQ%9q6wsE3?tU+mmHQHhULlxNf&MTQNyvT*i*ahG*0iZ_O5h(+Ixfbt-RZi4WKy zI1%*wX~TqJTZrG)O0$Kzg*AQ!5Drph-M;bs{;VFOtFgTpRbdypHh?2ywwMuRfamwU zI*&O9|C4I%d|=eUEbq@o+t@4v13v_OXVnyBK4mP7bdybt>RhO^>w16s^0fNEX+dHJ znyChE|LwM-XHh}25JXQd=&Zw0D+Nb7~2vOq*06&nz-f}H}WDJ&ZN)JfF20LR1Aw+X&H$XC0 zT!Od4;Sj;R0L$qO{+eR;r{FObd;~M{^afFxhSc^*CfQdv?5(4zDDU&BmSIy2`B7BV z6;G>{xpfQFpaEF@r8y`vQcCS+(_(Q?`OnQ6x`p6Pnwz&b4!|18M?`9=MjLhJgDv+}Aqd9kSKEJD(ZY zf0bEBtR=wi1Sxv1Yek-5&$G**5!`s}o+P)(cT}~+HaacTsnPpX39UrKdiMC_mR5W< zy0~}?ZSJ})?X3?VpL{)dI3AK;WfS+l$1{Azthaz&Clf)PTxWI`)M*L*06BI+H6+PCLr zlE$h6Po|}%t{gTe>Ug%fC0}7K2F&Ta?p=wXv${17Mp${S<2)WO?`rybH@)zSq?PD8 z6?0PfvT7YO$cAWnn41ho9q8Xx1MO;-UU$p}d}^@ugiX}@b1rI4QD9j<3atG2<7EuE z<|+bvmeOixQ=Q~Z%nPiF)|v#g>TPveAb>Z>HH@yY9KNLW)uEBr4Sawv^ui!@Kzog;A|Z|vuVlp=epW{S>RKrRoI*ogbikAnlGkfzG%i;_f8LI-1imiOOLw~ z=at^eCK*;#Ml(0%hL{Sqh#x)duFV&@yLv#Zpu*n`nhQuJCX=0xUdpB!y=bsLJY}Vo1A4U?dHKda;5*S*?(-f2UnJV82VriZo$Qu-q%u?bkbFezGrP_%>To zJw_kG8S4TH*nnJP_dQI%YY{ceE`5Fj0GN@J_+i!bzW&J|5+WkR$(jJ&dc8QXZp0fV z8(;NtpVe&lAe!KXgxAxexJa(xD_1e9_5A8AH(^y*iQz?}Cl7;8#gd-J=JSOgi*l~D z4RZbbo8^@G)L87oEFVLAXu$UrTOP}xUP!7lQRt4VZ`E=*f>H?~n0HxdyQ5N*N~d^( z_pZqPOKUG8Z0dRqv1$k`ROe!Wxa-v1C##V4~sZWSi%! z6PVeKB3j0YQoUeSY@!m$fNgtRI*oK3B&`4eqsQhSs_h%geq2OjwHq$?sIkK#NZjp- zee0b!(im75n-j{GQxBz~=9{PrkT^TgT&ZI*{Lce)dlNESY3V#@GLVy_kNw;yJtK&KN z*9~7+_o4=-QHZg-R}Hm3PLA z&^Mfi3*YQ-6hB^zmtkUhMj9XZ%rY{Q9?v!Rb1bHs@SJS22`jl_isG_%~9~JJe<#o{RJPj4hL&9Y? zaiiU_4DQwCjUNiWuPEKglH#%Ld(%uM7Q%2T%A!-%xO4XS%-`uKjxu3mzzmb z;0Wf&{SbjLB_~nq32qd{LhKEG`|2H8nq$jEIMqbKrnVZ~kvYd9qc`ULBGUZ&T~O90 zieVL%)^DGR#EHHXlvfmIpebcIA*c&E^bHuvSo#ox!C(#@axlw3s4>1VMuNwg;gRud z*5OXFHh$NxB_x}k`M%9uj8%B_=j=8WgE$fpx(7E8yW2Q3&F&S&S%4F}a1%74vD*V9 zmCg#tj8*gAqk33;*rY*pag@%%;j2P~lJvjvw09;Yf*ne^?Tx)N_xp}GimMJzqsoF* zQbN9$uzy)a5nxfnZNFe&qZx8vfdmnl6XJih_Nf%EZ)4ZJebwDC6u!RlB!efvj$d|j;r241XIEv8;VB%GUp<}n z1z+dR_^LUbGLwa8jvSx5VAeu!Ro}<|L~PCDOX{yeNh(yLLixoiwGm+?OYFXNt&6-b zsf&FBvcqSyTE>(&y2s=Jr0F0u=--bMzBk#{2Fq8cUEQQ!9FLF-uiq(OD-Sz}qZZTF zVt`zImcWjTKuFxc|7GR$Wo4X}>JYP3YNs1~LEBW9cJ%Ow4f(2)U8B%I$q=5XD!A_fNUz&O?2G zE?E8)V-AZyu}Nr5`X~&o^hXED=dg{&^edL@D|m90%e{L+a??^fto3LsSf=hyR0vLQ zgD<;pbmOGNXDG4~`A8K_kmcd*G;$5Cb{s{myRwN2Iwqv*9z%PuHw_kb11QH3aF!@n zS%tfC>w(4~=AP$fy|U(?_&kjXIK>i!J212BD&s7eJl1#($W$8qv;doh&~1jS z-DMPGlYWw^UTP75dB*{ZzW%iuj_-VQfik({zC5c-rDb2kVE}I;$_AQ^*;eJnrC0c? zi4_-xV3@w&RQgA1%2Pn$Pl|kY=f8|wzE`?s{LCuHXJfTY)zv`$>|?hYW|&~vW}~Fy z$RIU_dFm*b3vrgAU`b>A@=MEtE`qI#HD%rKCt|9z`S?NWEjxk@+bXR)wQU$$0i`{2 znnROp;y6kAlnAqW>yRQg(w36KA7|K<^@=@5svYFiB2Z$@6q|K%JNU|r;Z0}H@vSp} zK3Q)PtR^h%gb9RWpn^!Sr zJIntT1iTMgQiTcjBmwwv%0@WNQbG0T>aO^nP3pX2Uon^zKRuk#Y@=U>$q>neLxV9j zo99#Z))yZzTXUu@k6u266h~?Db*h`}sx_baKbapJlj6#nze3>atjEQ4n^H?u)-(VB z&N7oK;VyWEp;2TN@m(3g`n;;M{=~x&t5oT{Kk3j>rF)12rA!JML`7Tk^qF~EdV(2F zE~na=KyXmKd=aBU-1QzBOm&tCF#MCdqrNP+9M$Z4uMutM1*(rd}ZWUbkz*#fr= zk{Tbi8WUb z{}iY1o&Q0P5i*gIgf@Ql7Di(fk!UjsCVp(|qc^BB{FHL#tu<5eonM^kF<_h53F+bH zBGCKxl!wTw_z*p9X>vLykh?iuw9qY-cu07XCAnDm%jH$0?cA{&3&#moVkcLT`AIS( zD+ETAA8MbeCe^b`$lJTj06MJKCwvGVD?3^~rj!bHxaj)o436kZxLmU zNb|7+(ulmI^MLWM-sIIJ)2V?4Go`SYgQ}eJn5-SP(qh={X*i{d*4jRu=7~|4)h(;G zs}6WEhGdSTtUR>7+-2(>a7*^LW_el&+(9lP2;#UG-Ze`oFBqU%-~Rk)(@Rxq`nkh# zq?&m+%1r5-mOLK^}u(bp9-`KM*HM8RBg8i+)P z@MC@>9x9X&IKbnKd}%#shxK;Fr|P-`F47UCOFv?qV#!=4WL_qS(aFnEX1>|{O}PyT z)5770bJ>-1^6P-)dHNOxY1-~YIB3eiwEznVglfUF6h7828NGFsUuxAOS-blgccMR) zWnIR*BeGg!zqHtB;E;_$5gI}_1~Ed5eN$=K9hd{o zGo(00XDi)xoGoiSK1WBu0$4@+243aOQ|p&P?B4LEcX0N8iY<})HMWxI)fSnU!dZ2~ zMbV`xF1xd6pL-d6`(8j4e}$4NgcL>WiFV>8BtvV}2V}b58P`!iUBs4F-gU%yRe(gJNHd)JXbrAIinPW*(^l?uL>Q?P)ypKBwU^ziL5?cD zvY!_f1-(~i(jCqbB70bjjDDmaI<-Ox{p?=2> zk$eZ3=Vgj`O{p>r@t?PKe(~z+5nL1I+%?dFg)(apPl3?rM&V$^mx+}Vcu;HL2}4G4 zXlsh?8{}3T*t@gNSUAb+Q`BC&hW-1>T^*xF*3xP?IF|6Ei&G;T^F$meh)(}K>q1Sb>pWJ>Lhnry=K9dr+u@{ zUV{;1Z^TA3_7*SJFXxYDAh9xwW>C5N>)HTBG8Ex{kg?lJfri@r19%nbOP zUo{Mg5ymGd6`hnKt3_4kJCN8^%uUzPDOGH`yzU1o6qjZ2YnPQsy(uNmsung71Qic< zXIr-OqrsS+tfUV)M-Fz5a+O%$oqoP_82Z!h=`xL*yU*+)KB=r3qwQ$D`+|4A1CNvC zmPCECnUhDt3_la0gu7k;2+iu=VjtT*TbH;s_ynbeJ5-44Vi(5lB$t9hGPZoT-*Acl zUHx@#x~k*RX$AZKYuwv6Fx|ORwTm)SErTC2RKJKN>$BrF7uyvDZoHt)C+dU(-rG0G^J_JN84%fTh+S@jbh6S21|R6e*spSC zm4+5!IQZ$XZJg#ImZ>|yE(v}0d$Mfg--H{klMNB)iKZL6bgb3^ejG>rep}LWIy;WF z_EW%HdLbo;l{+S4>gHycs*q#E&1@=5^%Gd_Qnu0$Y$htJyTfI>cZ2E|!~I$wYw_ zXO@7@jNl{cp34Gnxcig#)#&?&df3DU4Fx>QMeHldm+yb%_&9=u*$r z+4-|r07pi8P*vMB&Qfj9Ar$qEwe<6ZxVB>;jt1XvvTg1-E$*H2X{zy5`RaL4tW*l2 zT;-w5WAog@pg0nmFTR|VAp05$R-W&rmEnOr+qpU(g{bBerP_8g?rS5K2}j<4-S|nP8*0dvRh^(Pv3#!tkY&`?DPWv?3h)E9yJwi(y z!o58d=pQ2%0lG$s|5hZ{r>$jZic@Gj!U8c{OH~3d5ei#XQ3kI{l_d=rVTg%&q;m}H zV5^(7Q1LdQZ}%HpNhH*;64bpY?#)iO+SER6ke*L7CKw#U1S~v(hD^n*4O@T^d@}l? z@>db{q^RAO)(N;X>Y$*lK=zoey+=PLC2 z6^mfbGZI_KOxpJB8nT1~v;5T2hQt%1N+sW<{TzWOzW4#^i^OEBqD1722Wxg=!xEZ> zxyss1-dQF6Ub0@zP^ zl@iK3U7A(_^+-D^e`L8gn;dyQ4x;PbmDoG&&3&3MtOYrqO;j^%( z+STradc=oh&Hjyyjxtr2Ca$bEr|O1U{gvVRkw+mfW}rA`0kM6>%(w%IMd8{wpEs1C zKq`UeuTgQa0CF-zYUHuoE64y|+6h%AW~=i)0v!R-)%yzJ5VzFAse3y0WPVyD8VXoc z>Jx~L0C=xIFne3lKf%`&5&N8bGKmLkX zDLODZ^$(Kn&?7P7v$L(mY@$nWsm8yXd+#GvRLN|GTVGOG7e{a>5AcDq%r#`B6^nDf z7mDpeILM;nZ`5Q9HMUp%Ma7Ykf`M`C7S&a}WC^2ry``xg)_+S_lME{c{;uguKLb}j z>nFO!+2(n|%84vkUWkxBYEkv=#XHCzIw-!ak8QNEn@RBWqG~9nk@2&11i-7d7CYlOn*&9L{s#4a_6Fa|_&IBz44@BjP~n6WC;sfIs#)mU zjQWSPA!1i;<5f}%FDY%)&Bs-OrvPs*Xg1^8NtpWBvb167K)Mcj|LabTZ^xd<@SCV~UmYxZU+!G6 zpDf4*`WnV?vGvBmcv;9f6gwPO~+A6N|w1Jy+x*Y=8Gq1$O+_(7h*MX@U|2N#auX{o-PX! zP{U>=UNyG#??~^zgRXQgBHO_$mQ0KS5+7W& zbTO;^?M20n!W|r!@EGEBcu?5c=o8wjPTInq`z-rtK)hMk+@k$&Keb22@4bTn#0S%? ze8K9y^~94RoHWH1QqEzqJdq}%fBD!xYBP*)*p_qMrJh~o1y39n!#ZDz6CfwXQ92rd zU}j+(-Lj5(D|$0|q%ItR&Al#CUVrV&s_dEcInXU=BmFJl3FaF;7RIvB`V({vt&l)! zs9dkDVcSi5e|@R5da7@?l`c`%003`tCHF;sj|%W}H6*Z{zNv@K9Gi?Sxiqq<;6?9# zmQCLdMJrQHKqZ*?%R|GVf$ffx!KWKh+mb0dgbj=!gfyl-$C3G~Vii*w=$Zi#PKpBxI?tvz&tv zL}=%wZ%?#F3cAq%Z^*S2|I3_q{qnJnwof=dB)C}7ryx2i3F0d=)Z74ZQnc)(GK|jq^TD&S^ofGDY~i< zMdM+S(&Pr!bE%m9lV*Q7zhV2nro=Qhsw5|1o%r@WHIUM9X_ z?b$w3J5suSiKz$EyMHc#Gppe?M=adLWberb7TWomA1Zj+pXlAMu&m4S+#NjKIZ%2q}+mLg=s;j%d+zK=O+Mf z&8yLBT&8@KLYm{4!E9i_$k0N%p=&}l%!9tXS5a_ImYrol!PuaWn|Oy>`zn9^1AP29 z^;gAv=%dN!X{b1561E`2y}NpT>OmuCJfF$-O#cOKR4Zqjz_z;xPRFU_@tUI$P|-%u z>l#mSkd~Sb3W1+p`?{rLR3>idN>Mc-S4Llvy4ss17S;Q4Dv&lZ<9~j&L98excHQt+ zqlW|Nir~n*OQS$)eLC-6Tcz{m)IauRuE5A6YcPcDqoTRFjBh)T>-p6GDijcpj#(I0 zwZ~CFiT&k7<6w)EPD26xb9$*dZNm484gSnMu1b`iw%x_ml6iFV081h!jLa7+Q^npX zM&)|vg)oCfSN?2RjP`B`%LOUY(aK;KITQsJkcm^ zN>18@)meeq&2L`HBWlIw7QAvB&@QjvgV~py-QsnTfw4;se(gUa;j2QuBrN^n8to2M zBxRBH8>tVwO8Sm2WlFZ-Ct@TELtT}szKde{b$HDs!WFDe>y-3SFHT_uxor#xp%BX9 z&Ts*LcsAC;9g2YKc$6DKicB$KO2X+x_MvCPq}H!~#G>D)+Qt)~FmQ2((5co#Ehw!6 z%wnp+frmjP`W!Z~w)At=ZiBy*KSPk6=2wsma}lRd7HfE7vYJNUzJ}Gxy4*Dhi^;5S1a{pDKHC1_bAXF|Qmb{p zAG#J7*L>l`x?w*ofLFAS`OTq^5#veT9zVlqjvurU@jykzU8iKKQF)h{o7(7#&VOFzxZUo#wUSHq5ddj5q4f8ttOZc~O!= zK8>;H#tI*rBFsJF;md12NhlmOPy8a>g@`TVrtQFWcVU1OnpRiIe3h@^fOxVWF6kRF zRDwEL$HkZ}@4jEp#Qf!B1PW9tf51zAArb03Os7kynBayTIE8OvsbOM+EX*NbGNP&} z#x%OoN2KCW$B{7oiT$m4IJ4pQ)M?cCmk1R?^xlnB-pOe{#B;TV?Hb%SJvNpcQs=V} zGLeTO@USDn2#6p9g51lLP-Z)ssbm7Z>Kw!uZG+ExW%4>+%C4U@@H3IvvBh)9oG#Mdo3Y8_3yk zU>~qI;+%1Fa|@a4;3evsmUHsL)h0c$!GPa9`o>OEg%{)F)E*{i%zY8Fk5!1&483p- zA0;T0S*qBG0_)5ZqxYcuc%DpNy_HcOk*^@k=k-GThd7XEY5fC>S zl}?-C&N9-+?&wuh+}^Mrv7}fo=&r8$C62x!&$KRS;-0b!jG6jzM$-cTC(C2T5Dwyu zu4)WZp!)c!VP<(iB5g9-;Hm$Dfz5>+-N^3i&Z^qiNdysu$ffC58uGaAXFv`Usxj} zr$a~Eoju!e>z{={R`qVf+I`j_h!=;8;@p?C+gor^>bD-rSpx8?qV{mpio6%9_sE{z z6WAy46B1Ui-l8mXRM0?}pOhuJ>aT4^N3Z4-mz|f)qS>ccx{h}T5S{b2;0BtMW=sqJ z`P7UyeY&qhWaD;&Q@)oFSGxWp@DezVy7v%qdoeX2-UY@YMG5&iEfxDry0 zr*A(;X(MDht_Ti;2t+SxdF7xrm(cgaM&-*#et~21E~~?)VtyN#pR)H0p-b%p0D}v4 z&J(N_Cym$hSBQ=kGXSKRYI|N7W?UNNroDds)zZsS`c%bf^p2*j`}6`VQA=NbRHB_p zyzPE$&4x^)T|e=kcu4>XtaCIzS2*!6Y{;cKW$VL^w?3d{*l> z6E=$8W@m;Ra`<-g8)Dm^joJm?cwWS0HW*%H9SPW19)=kJEXNen=pw5Nwok@n?{z}5Zj9_S|)`sY#YMHxd>Vmu;&JBw$pxz>V z;#ILH?nE>f6Uny(wxAZ+mBQrt#8id8CmCh0FO#E>34IRN_jxbk+UYM|-mGYlJk?T+ zk!@8t_bA>xny^jHApGgDt1k!+cCw>&96?0gib*7WtL3$BQv8Tx{(ts<*Rqc#q|1x5 zQb51@V>rOQp%pQqiyN~mIgy&vVvAH3b0#yHc49B!rXq#hKlPL&NImUHt{iR5u!9wh z^wOVxDrP6|Ia%9l*vi$BU`hp-7Hm{CgbnL*k2LPN@k$UJGHvSZ=xN!I;Drice+YeE z26&6)=VL&$ZcO!Z9R&;H%I`Q)qX-2n`-6_ZpXJoNKR>U+E2Xyl30cqRm1Enu|9QD7 zEwui%Rq=LF7OqOpkx2$}^4MaOoukDuqSMnA(%Be%K8Szx#3k?%WXlWhbkc2^V>ZSQvwzSX#YX4Yk6Un~r38_#g z4TS;t^6d!x16=zg0T8D@LzB2)2vL`#J4q#{W@*^pdoc3)ysA2W?L{L}+=Fr#vOZ%7 z-R|-=GJLyWqNqAjjf2(|K@~?#9l8oc+z3d`MAQdakrZ3p%UnpJ%s=hkA2LbTLQ=lG zIYig#%K)bEX5^Y*NZ4sD8Z~eHH=vE%Q-t_ z;D>Fcb@oWB^4EH$J%g~#H9Ldf{&B8M$WPKCmx#>oGX{W!OLA+|IB01h@=Av3pl@08W4o({=F>B3n`g5$4Zu8K%^?aEIByKgiy*ro zdkyK*mtwgpQ#U(qv^NIG(J_6F|5QPM+=BcbhTE2&wmWBwdaN;UN+GaAoF=~ zWMOa~nZ185BqF6-MG8@7_=BQrQCX91?P6kWUNm!X3GjTZ%O*Ls-s0Vk*jiHojwn`{ISyS&UA+4;8%yd_#o@) zrfv`zYuf@G7!Pd>gbMq*2{!lpE?G^mLKeC!sTATV*RNaMA2Zc`N+5Q&Io%LX&t9Ct zMG}r1%k9=%(6t?PZR}jaFRvOSnKU4CwZz5 z9Pf%Z`bl1`Sfqu%Gp}Zq?0@urT%yJp|0hETc`b z-SJ|^kFJIz)SU@!mT_cK#Dp4@tbo*%Qs#(~XhN=0fE54YnfqczhZXz`2A~JfBe>dp zMsL_hrG$v|x%Q}b?)~-lFjGj2pD8VuRe1lsM$2pOvQu>#?)7b}`NH+8mu~P#!Iudf zr*y9obDmUdR`FmUVD}(6NZ*Ki>S6*+gCxsJS#4aDoNM}h3<#wyCLu}j7@&v5 zMlWVhoM7-6iNZHSax6Xti~Q~f;DZ?R%ma3V=D++RD1P-9p|=P&QYuJ{40+>j>G2JH zdaU2GhMoa*h^(on2*P00^xgtbq@cUlOX|hZ8m7ttvhn`Dzg8ZcEy!AY9xv>VuxV#frXHAA@Ih)`EpyT&-g^dZ{Kqtc)WjN$#bk%2J>pXIo&bLY%7?7`=*cT)Z z@(*W{qY%=eHU&AxJBwcd;_7>+5wVak9YKPDgcAwLsfGP0f=V||mO=&bmLhBy5}jgu zCP&`8^HSu{&;(xkHh6j#@yX~^Yqo%Rn7Km)cnAEV9nIJ+&_8rneI%4ybdIO0UC_}M zN%-gZY|Fi5(q|E%TkstsV~&*HQ6RxSJ_(WO$FLUa}bl@)yao0&VZNENm z#&|XK3KtO4vG}Z*1}=U_nJezgPSYw&6Qnn>#{3h8H6>qCGfE4dE z`m1C%t--~cNy)}tSh-GJOwVabu4{H=J?O;r+Q&ze;CJ)I2%k~jvDlL*27LoO9 zcQp=+(_1$ZO3bJYk}Fqf^3a>X{+&XAKVALzDFpEU5CBj=3|K=?Y|YQjEzHhuh|~|) zlB*r(Yi#j8xDn>qpm}l3@~^r}{6^MG>fBK=;e>P8BK#*w(B6-(}QwInb|PQyk!}M?6%0Us!8rah&ce* zRf&zD4!mvMZgwz8{eGqs#mFYgSK)l$n|zHV5RQ54+fCI14N)T|C3D$`2mop$zbRuh zs$1}uL(=i7b;eV87PSk5mQO-zR1gL-d;GO}FF9pHsj5?qEyKp{`3n?o<#u+eyG+?? zcu+|^{I(`E;4&7e7^`-ShbIv~x<2l)S^QI-sXv(C8_sEFAGXh^q3!SaU!^QUh2va- zhmW{5_ZE?2uVX@`(eZTg+5{7;hry2R0&i{u+qNFP)@laodlZ|0de(c>dbZfH&8OBG zWW~EQBC1Qzwbf;;x*s z1eX6Xx9wQb_qi6f0*UoM^Q7iZra*UpvFJ8$L1 zf3~Y27fEb7^a|B^!G|@{mOggyz(t5UVnWcl(AaD0aj3+r1(*6*4)=m{eJ;Qx#+G>JNhdC*obFtd_XM{!fN>1Hn0utk|ABfM)+xaIb z(v^>;gca3ofAq2&MWx%C*ENbzSe|BhDw;Y;>I$wmD)SdLLz6bWG-BMNS`U*NgiWQ#rHR7e8?e34k<25q!f@A=Ks^Zx`z1G@ZyTLTj?rZpx~Nr*|s z6tKg`kHXKR);AK?$RZQp*?O;vRf+GsJ_H&M+A-~- zU&<4fDe%>-CsWJoiNnM9?fVNe-_7fDjrSJw!F!npQ}TpbB1AeNYg~nN#b6XlF1Zt) zmHf%9oTxaSKdwgGL1^PvEdhnC5!~baHa&gy_NHZ>0P>0cjM5K4n#>jBYv?3yTNxpxLliX-*YUY3=;OFTdc#1ZRZ03UPUB<8LDiZ3=7-`z3VND zZh$VWa+T=3uuK6Ip4OLFCL7j#t=Rqe!x8^BZmhvCTd&XTC34sOhxE-7H72igAKo=w zX_*jX&CH+w!za=2+24LqgLGz}`#wko2;k3mNis0;UjG^fyB~w<)bd`4;c^>B6vj14 zEvjPEH$y^3?_A8aNeb@o_q(h}XXu$j?AzZVsaWt=hMEk0R>!`QMwHZujLBYp-Buv8a)Z?b!(D7w)5j0A{p?CluMoiw^@pO%9h9%VV zvE+38HV$!}z=!ZSRuP?+wWa`Pmo8oU;>)j(zIyY@S4Wd|;h+Cr$@J-{t5?4Ie~T3R z)!$cCG6iPqkH@hsm+tNkfPs0rTt0lb!nv;tXi?=;;PIk4=f@ejbCoT*6g}|l&tCGE z6K#K0^bCpxDB{1OCIw?+jjvV@FfA^278g;mop30=1^_JC<>23)UjjP;+7zH+O7?)~ vVG027{5;4208H)f3HTB$h2_Ek@OsXt{8-Pq3_KH1rlzIdlwKfAT1QBK|oQY6N(Uem)=3TC?HDcMM^}f^xk_>dJjk^bSVl* zRYX*pz61Wh`+e`ex9&Y_XRm$s>^-w*<~NhsS$SY*rw!l&|2%VQe+P$xkt8^*I6iJ3 zmJXg5Q#kTv|19yvxg0d%Jh<5TU(dzP3raBaFBK}QKmXS=2>HwC8b~*Acw~R`frlN` z*}+opl08%fDk3CwOGsQq1OhG~2R}N<`*Nxpy6UnDNNEw8iwPASH3ex~XSYX>{LF0} zZLGXV!P)yr9TjaIX$wyW8yx(h;106gS?Q6$=`!1B@A zJbuY&<%?0TP((61qL24{!d4IsRtB1i!1?? zHI*#U1^aMVL9z$P>aSW*AP7_wP>QEhsiqsMW_dr(@!%W37A<^SR6$!uT^D@3P4#_j zW_-M7d;$!ULyVgO44XoXXG2VXhFCC${?mR1EdRV{m#RZ?fUFymNgrW3?94f9k~t7m zXc;bGePI$PaRNImAy=iq*0I7Nt--#u!DXn1f2fA+atY{ryo=KSSq`ZM|4*|uOtSgk zn~ePcFCYWjvfrJh-(!zr#lc^qa*jV_(J#Xh1B1B^_G< zTOzC1ONzuS;Q?44YfP*nqBvL+$;6%S_2N=Zli?h?v>QJj|$$&2Bs9Tpkl zzv#-kN2GSDx~b&Igh3SZ!$B0s)Nj1;tdLZ8%CE;7@#UkD2w48#hytAowT`<_z;qcT zp~)T?SRoh{|LM4|9HZ3N#{Z*@9wsBOrkBLh5OTkHDrnZI{06a<4)Hf&oUU#p<2VCKEeO~o7jUx zv2j`jEirX%ded=w?@0z5ZE@2{xXq-l&9slrT!W2qV}N19KLPVMY?f!d|08lPLWEs1 z_M>tF-oGO!izjwXBKC$#0*7G&mtT@yL~3!$o2}v;lK&Pt_K}6jk%i%ro8hrM5lIda zsU^)h&X|gwmjAW=SL7&paDWYr90d=K|A?FpVHPc7l^N1EwU>XUZMhfWaNdM0f15&5O)F;J2!@dFlCIGkrIvGV3=@BREDs4a{yupE= zElH5w!-y)R5+#!)XZMP`&n?}QAlXfJxPs)Nmsbmp;k*?KCGRRQQCXKD0@EHIpalRy z!UMuRj2SKEDgvwwZno%_}Bag-^q8!`= z5P~1l?6Ej{92q(Qup~p0z(UZ-5!gl?5+l6Mf<#CbrfZK#5?w=Kgb6Z&sbKjm+9R-j z7S!iibB?jH;2Ac(jK>Z}|Wl?oQ z@D&SEy=RgF%&{(}$^WoYr@Le&t~=8J*YeWU(zP+v(KYn3G5o2kj}1@-soLsu^t!qY zx^qV^x=8`6Ub?3GHgi994H*KBXF^tg1gtV%aGsg=2B{WU8;eHoWgdrA2gjVEl2o3O zlH!sEmy(Kd3T1rO+V^`dbpVTzA^q8QsZ*Fz5EmdGMM-!IqJsJ3~sA+y$a6t z9rE3?kciEMuI*Il+FtEC%Y`pRbcmZ{+t*X3KW#xpTFCEG2$Lv5fS z;l(~TmbXGIrVHXAA)}_8G{9=$C-JD$LZADo)W;v*xs_zZ{Vzdm;9OvX79*3*#)lgu zfdde*ZPIB|@%BQ!sF2&xJRM;IHct&iFAG`|;mC%b;_ZX##HtLWC(k$>={JIMQ$Z9hyk3trapGT*P z5YQV2ft)*WU%5DsMq8!09%PlD$DoQ3ZlE)E6~?lFJMw6ZRbYK|+AacpsWSjlhGinl;8veqWo0?ayUKlf>m%VLIu{4fKUTZg+Nq?AdQ@bvFS)>ICv_MRRY3U zpwGxyt=^l;i1hMQ<@I__j^%xzaL#;2RYY|?gOjW91~bB;{6ctfFN1L`C|uhKUVwGH zAQ-zyV^cj5<=81?3`nqYX`N1e`sH7mTRIB#VJ*uqg!5LvN&tm#%o{~Zq9-gtRtd;x zaEGyTb3u|LNJvFS)o;vuI>UcV8I@hgPzApsJYO~+>48}%2m;6i5!+;4q>ziSy&sMo zQE{O17?$KEmK~PlF7{B9g~4=(?-Oy>k4VB`y;w;i&U^+{UV&acCm0OWLIA8gF2j~U zJ)#$fgxruAkO!l<4+`cT0;YV%;4#KLIx8ynd`8eO`E*vGZ5cf&WO#P?`u{ zSO^tDg)<*4gh^Pydd_(aZNLH^=x-i*NM=bU918W)5#gmqsUf(FpMw@H_XeSm-#cvN zSY9_PLsTAu6;b5`p(#p;ppAB+AT*reK2#vA`i$fd z<-G<@6>Rxf%QE;32;%yUR3`*TaC+Yi0E_s9Ko#Vwf;cxLF|U~Qr4m6<(2UW-p>&p! z!kg)GM6ljuu*NB1yeK`uFWHOwBN`-tuYDjva+BqvOZSZZcVY7H5%K>=iDIzMqSgby zt@{|S68){p6=^PCt(^ZU(v$zb{zuLJ@9O=38W}s4gOK~r4v=XlAq4&qUe!~QfH9Nu zU+73h0Tz1Q$>50zuAxFGg^RY-rP>K{$e%;iCsM-6!gAi?-#v?>Dw z$jAvix|0B`9%~t0585Bh5LnA7IM#?1SaE#>1Swa!hrY_I?HXUX^fen;Y|CC+`{H7N z1bvZpffhD-1c<5&jIg0VH~gJL#r@YDmDJ{6Xn}y*{JRdVDSHVmqHJ&ub`1m>&*g{{ z91;I5;4Z<4q5(@eG|2hy9GV7{aarD>kr#*rO>;rGgzDvpnC-$`my6l{?!Bl5L5M;w zvha=19Jv^FXR*~Th^GAj0tg}l0QXtP9T;{1+MA9_QbomiP+8ujMn+01Rof^t^)gPQ zh4bmOkxrk}Eu*y_WLP1DyUWme2%h*C6CP#tKEvS66G{XKQL%|Wm%*W98~_EO@L)hz zRmYgH2_D`j8W9pQl75uugaZViLJg3`hZ~U5(3U*Uv6KP~Odbvp29d?Y)J2hg7U{q@ zUG#>cpm=QIy*PAnLBX`HkJrc_G<6b7Ddbc9y(r@VtN@Te4rOOgm5il$Nf}2KPn|%M zNQ(yH3jixPL6krc2Yz^XxNU51_eThayfrGX=Mx_1CHbNwBKmt(!Mhy)y-0V6|0Q2s zq%Xugvvl;h&&|Wd#l_8iQ$$ouOjPU>4=)cFHYy__?zwd|j4yiUQ zdyPA#P^l_0|M49Jrccb&_S@zioEx)OC$$IWF@`UBzq_|~9W0-)$yE#o!b&*-x?``2 zU@fYZUSG!!PWcGo=A8Q8pDII>7(EK8lR=R6t0ms3Q5=qQ5_YPS6_zMlW71fnq}{`J z2!-6{Aj&sG#g0c7QX828wPJO+9LHi5Bu{$FYd3J4NTj;?aFwnt(%K|!7+Ro?a}QW$ z3PvoE{-P}B{y2=#hpcYd)bT>xhob>-@9c3a`F)XGa_ot3(rdF7QWyEJbFXXl@OUsU^=07@1cL~BbyDo3E`};ZB1K5sY zR8x+@kjvO({DMXWkdD3T5}& zjaqAp?-gzqMwKor-mXvAD{m|R(|ziU!iy#zx_avM&@-AlC!n*ypx>kTo~!6rQtFcZ zs7ZDYgK_iUifp-<*}`_7m!AjbtIkt+_1_(xP1mARG>K~O;#oVIKWHC*ZD1JltE`S4 zdBCtd(fsoK*l1Zsp~!`ci7F&>>pp{46m9weiQ>wZt(uUJDWDQEb=C7_46@bW&{(UpZqfGnHN>8n`e4`-u zZziGhvS-=w3=Or^stm%!e75*+O&NdYoAG+c;q$e~hY%bp%8hhS`Q=A3Rc`_V_dE&f@*dt0FjDQC7la zl_Qjx8>5!2c%Vh=w+BBn-&7<2l>h0lbn>fWS*@7p^0ey`OS#Re-PKfd2cV8kHRXRR z-oa+Wenw7fTflfT$9m}1SmdI~jCT;+v$QG-b%U;SBV zS9bi37@12yL?s>i1I8~7JXRHwf4M;ioV1L@F#Xy=zH+?{?izsl7U)wrkfXT*3 zz2qxS`nz{(`ZT|i8c%5I4(fO?xD+3EiHQ>GhLW{HP`{fzDc+}SKV|ox!$uSgBjyKO z0rZi5@hUpHH|>O=iN@*P-60Q}Ik&s&bF>Ge>drUWiO-*AT#HM^b3Q`UDB&qsq`PA~ z-07VDm?)T7&mi{HCt5$5+4asSb+=}dIs$4(Ba z*E);2vwwe$ruxXRwaIN|w;^raBI=V==A1}Xeiv&h{qO<@_uw^UowsfMtbgPs4Zn}y z#*-o{9Gq3!twYZLtx3}65d#_$wF!QY7UCbAkTb`86Y1eNF?$mw=32PB9jDC0^ zSc!RAE-Bfm7Np5=4n^4HuLY#+!d$Z(D6-Vl!Dld081f@tyWFliu7=G^aDLk- zNsI7SomulTC6oR;{Er5}2SuGAVkqFhxvAFwEnZ$Ct5qv32aYh7Sz=<@XC2s&l@9p) z=RELXz|P$Lov32N;ArlotkPNm>7uP^Hf)nVcB+L^>#93Vp=&}{E$q8`51e(|q!}u+ zy?OXl2WQOvw$Y2n`wx|WKVim^U09Cti5AzSO4>tY=W=F=s>Q~eQGMN@7N_c)?ktUE z^8Om?+*97yR`t9Dfm#y)PKuPKwtsrKAdN}Xds25+vk`A;zrK93L8f?>OmtqiZ7aBH zRwU{w4}axnM*L#qu$4Y<;tvYL?i3<-NrHZq_2{ck@IGEO>&0@uNO^@Da^9C=_d_tD zofcLZ|9I@=gL%6J=9$5_HRDLSRKj~(FZeQSKRHAFlOBn6;6I|ZEb0%j%Wh~kt-duN z*{N!fM^p3e0}0<_OG3uN6b=sNhOgm)92^nv1Ljg&X|w|r#s+pV9zUyaoB;$jFD#b#9S~B+`h1JtW zi+;zvXW`@O5cQ++5A!Cl01r+hw7)SS(4e3bw@gUHwDR;un5z8|P+Iyt2Pf;{+b^?zW>!74 zvlwq|c{oKOKijw#-MB@%|6~Gx;(oQ@;KPBB^Ay(w4v`OUt5qJ(be(Y3iLVm`oorFC z+SiN(Ug_kMOVHs9mT{@);}B)HK7f3C7$F*JURHQKOwuhBWEM9b`gTRdk3yRpGoWER zuCcm-CVlSLJSf7vOe%a%;DRXUpLi6!+-?6eUiE+&P&*(Ajt7{kjo#rr_jtGV>b9q6 z*oKO2lUs9%Ig%c4aay-AWGMev3k5qBV7>Pp8xG*+HRC>_SMM%<7k#CC>KN}Qug|pP zm#ly6=;&6ZDQ4inj9=;fvV`Dh8=-!gqGfpqlK7sCl; z)rsG?eMtaJmC-o2^!W5G=i3DCGaXHTSZv6vcx|S3tjyPjrIL=4!%(-%u)?}AqEFp2 zf6Owt^;jR1z$sC7Y*6+cd?01JThgyEf{d~+!_93clG1CVoqD!CfIji9=@u&HD5GpL zQX?GB=|%2q0ht>?EXJMtL0)YWic2*P{178N9T=dW%e7-{Se*%(^cra>=MiF%q1AsJ z_Q{a6M~A%fezZaG8eiD~7ce7K@O6%=5|ihU`S}(b`GIAP7ndMM*zV~VVcpUpr!#e> z9Q~pmy{ZU!*{UFojqq|`MlL}Y%ZWhe8Q>il)xL}eNaK=&=luduuDkYMm1uEHy z2`t=DXvKN{JD6ZA?9sDB@}sX^3QCeI_xE{fUcWMb9bcYCvwltgb^7O5F&?>eN_2Sw zzMaq-Q+>4pK_y5<;MuDiKe`t-tbI^|9eh7D1l4^uZf;!hJ>_@B0xYhTxLWC|R}PW|g5-N7Y7yETI4b7# z1eG_eT&|R)KRRAH=0`V9uGljVt5nk8xenksh}dvFO1Jc~)yXnI>WsT*nrR@P8R@Jy z-j4UMiK+6v`c6>n?oc-12${7V@?hf)(Hn{{%R7K*2Vx!2(%ESr{8@;59AHmKZuF8~ z+lBdB-6+w8Nais)LStz~TvgL{UY(sm)(m$2i%R!quU79C8x29YDu0zR0Q}6PdE6!m zih6nXg1nC2pAD5stX8Bq95B+Mz8^Ghk)2lTR$PsWR0?4E^rtjrFG=$d{#~-tszJE6 zgr-nvifxR8>1_cf?o#r&!S>46vm;b)6{kZAfnp>C z_lSqLe1Hc@aW4#EA%(YwpeIr^QgjKGW!@d_ zOZpzSv)B4t@V&OQ6oG%(sg?d{bI5_PQ~d6p)b0|3xM+eXZs^Y`K$a6Hr{th7XMi0~ z5I-D+bXP79wOa*5Z07(>Nh$!{_8FrDoo1TAeRt|M^bYIH1tANY_PLX&r%Or=G0skschEo6S{n)qBAu|FW&U|EQpzT`u5 z6_+ucrDfkhMvHCFKEKddgZBrz_}snbUeD&{R=@{^!7+_Z(=H{=$4z$vvE_$$E}t_2 zI#*Jdx8{$OA))fHy-gf6q0*{1tEWVU*Y_toigD&ou;!T=oaU#cqA`(oZnAe(j=yZ* zxiZHLAq(`)_OZ5oo$~270S_(9GrLjsBaSufjhCkqb>v1R4e^p<>W?#VJind z#inX^6_*^^cfMZKkg0b8*Oe>b$@5~!qP>q@w^z#?uU+Zm$GNjR#(s3rfRgcY+S`-> z_Im)!(r`gF&WtKNbTH8aPZQ>2@GuD?V%)ZI35g6Yx2dcLwPg8@sF>5v)BN@g)EQ z1B;>~1-}qc>sRURg}5*N?o}`lC8OO_3?jawCFSKZ8tmt$f!A+>G= zp0!*mpNb-B7LlQ;g1e3B=_2zpeCc5?#`hk*^{=BT&KpX)d9A)=a)wHP|K3|kz^PpL zS2!ii&pR(UY+UeY=&a!4vE$I_&qq2t7o`IH}oEK~}W_Zy$&JZ+yiEIY(lB}wM# z45esfGp+9|lMMl$=W`=(w`-B8wf^jd@-`d3w(jbDisyE>P%lcjI4jogXcMlB1r4&0 z=re>W1e)vo@GdpTlz?3RG=isS_wS!ZF8(6W>*?gkz|G6c%OflnG z9~t1^YNIcLb_~zrm@v)d3Ltf2=T5S6;uD;opvh~gC#-+w@4B5>;EHWkBr=oWTFfia zG-)m*jyg@y6|1`sl0+#*of4{4^6nHa7cCG9{~!mf*L_rCDt7tr)wFNm-=x34inuXl zur`2x3JjlgyomW>Q{y` z>l|RJlxY1QeKkJ-3=MWn&xj-k_?4!vJiqJa8907$*G=C&A=8L_k}m3<8cmVUIbX_Q@rgfj8;XOrd;ty|3S#C>;lm;dTvR zNrz!0w)fYhvDrTjrMFy}?-w*nZ7l3>U01Sg=CY!SeYlN0FtOWRh^5V{N=-nK`s(Gg zF7x7uD3WFUp@b5l+Q;rr+34I8XqGCyR#eyW8Mn)Gn5=0*E+Q;D_h6r`^LtnAPi^CS z!#d$loy;6covC~_e|2}&Y8Wix?`|EC9t>@1p1&(N6|R5!V(}$T(j)j5a^zZMj} z@&^*9SN$q>G_N^+Cb zdN5(dsJMQ__c9Lcp_}_rHy%^n`I59TOM0EjY=WT9LuO06;s+#EVVG+D8TAW!CH4<; z2gPqzTojlDsL5+e=fxd&h}n4JVm>TIREP_9_n)|TVt*qoZ+&j@>nKQ?E~%ukeYLUl zgS&Hbv5!^!OJ{P8M}^wi{coxg{&nVW!nYgoi0sBQI9MNR{C+-A8WEY5XREmyS!p;K zp8w5)j*qCzw^Xl2(a6auEGMLIC;bXH1}AFI?zR2`Mw$48+H zs{eTYCj?39q0QQ*gd0=!du}+`;?XBo_!lr&C-l_0$)v?h!cQJ9`Xc(}`dI9b zGD-EvZDb2gF}|6ys3r{lDi>$(Oj9Gj(WgpN_-@my5PLr-{X|!o1W`2Pu0mY|8ixp2 zu3pYLiX~XJW>FO{v#}+}YZkG0+<$H^^7P}%j8ZJOfYr_Az8U>)Nbtw$efO~2m86f# z|G0j!Wta6#@Fj)#N<=JtGF?))3KaMPAwTHE-hy+?Yps8j9M3NuP>!W#e9tZAp*vGR zDw6H(xWqfn;H=No857>|#@psi(dS<8C-Gx%f%jocwx(3xy+4Chw%ZGd7O0GF{Is)+ z=za*DtV{aV>3zNhow~VmPj3FqOpMvli)}u{gEmvH=%aE)hg!>~VPSTN9KZ^%>q_Wk zkBk)dzDG0)H~>@?yCfWMEagP-@07b}RGOo->tDPZUY2*X32b|$(v}|E@|v}^=X-0E z21=Fv)`Ry&CGOYTa_n&mM)#T)UOe;YQ8P=td2`wMG!s|cisbz@2b>*8r>nT!Cg0hV zzOIin$}Sbpij}qXImd`{&*={wGAA=_j*`n^cbP1CVnfzuH@Mph2p7^wo8nszfYjkFXlW8c$LE8ALW&TsQZ=FXD`J1F*&lV>>S zt9EsyC+YJeQZa>PJkRyp`IRy2eU1rVulW?wzNi1x;QtGmEoLlwb_N~lP}9!sGkb~u zuoE{Us}HO3>1~I-pvPSgx}$AL=b?$lJ-3r>lg$SsP&bKRx8!KYL=W=?3NVgeM2r~K zOO@d7dBd?zkqlEq+q>FJkRT5as~p$r)uP1 z0FOomzKAi4UBz9S^@;H5i&Mk-$Vd6^$!^D+Lfa4N8k@A9zF#v_I?Xluiw@~SJh;=C zvs1bGu4pOioMWW=q*LX)xoyg zDDzgjNOf=5M@04CvT7G6^{#&l9-rBd?LJR*81?tHYsQQl8ZBuqI4i&1(oY87z&Q*k zW3wJ^ys4)ikIqW2b3v|?mW$*XhDQ}Pkl_O+it6MV*NfxWi;at^u7c0s{Z*eNdyaPYJ=_% z2FaE zMqga7diAz?J6!M~-tuof6KPZVK6HSKoiO=X__u0Q=Gb}1N>&6*BMvJZPXeDvny2T( zffEHu5X2=-hyC`oato60zdJYmG6TQt2^_p?4;a4wpjY0R)tPgzb`EJ)b0YOzT-6a@ z?1tNdaONg5xc2jr+|tYR!5fyf@n7ZE@yAfyI?8nF<-dj)rU#fXYpm;4o`zfNm4YKv zQB#!Sxe#h2{O-E~H@+Tdi%#crENhFle`{V#v792Ue6^@_W#CJF^X_g?)ecfu*5by& z16zaeKK>Wt&gq9Ta;N(fDzT1ccdLJ?qd192uJ-f!d^WxT6X@zF&tHOT0%q_Y5iY_P zp=|rd4L@da606Vbtp%>Wr)yDjjlOZ}&``Lsyzq8*67#-HaH8&@;3Q6rSw_{BQa6X5 z+)}_X1KKXCw>Ww2M=`gkBA?deBCGrUGD=@~Tc<$ESvrK8F@m)%Q7s!P>~>IY1O8#5 zvN!6%1G|(`k}n}gELF&DSv?s11OTd_cPE{hAVLZTIc8G+0;5D5RyxkMN( zuli7e%-#F8$qR(4K9d}c0KUX&|Hkj;qs?CK(d#V9W;gvjzJ0lZ^^2JPab3*?`MTX& z{VSPMS!jU*UT?xZlQ4K*?^Y#m$xzX&g4QRwd9Y3$vE#1^53Gs~vmA`hZYw0hum!9F z9w~2ESN-yEhn)3|dNgJ42PfF+0D}2cMMG*N*B^*|sp%b*#t~{(n(_*mC{z{NMOn-M rzt!*z3{1=+vx3Saw1+3!Yn{J)E9v6NyoYK@Z1u=CPqJ4eqJjSdBPtvf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/floppy_insert.ogg b/src/main/resources/assets/opencomputers/sound/floppy_insert.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a772b3b51db4b3275691a118b22c715c1d6b68af GIT binary patch literal 9363 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 CommonProxy} +import li.cil.oc.common.{Proxy => CommonProxy, Sound, tileentity} import li.cil.oc.{Items, Settings, OpenComputers} import net.minecraft.client.Minecraft import net.minecraft.client.resources.ReloadableResourceManager @@ -18,6 +17,12 @@ import net.minecraftforge.client.MinecraftForgeClient import net.minecraftforge.common.MinecraftForge private[oc] class Proxy extends CommonProxy { + override def preInit(e: FMLPreInitializationEvent) { + super.preInit(e) + + MinecraftForge.EVENT_BUS.register(Sound) + } + override def init(e: FMLInitializationEvent) = { super.init(e) diff --git a/src/main/scala/li/cil/oc/common/PacketBuilder.scala b/src/main/scala/li/cil/oc/common/PacketBuilder.scala index 09ac6943b..114cb287c 100644 --- a/src/main/scala/li/cil/oc/common/PacketBuilder.scala +++ b/src/main/scala/li/cil/oc/common/PacketBuilder.scala @@ -5,11 +5,11 @@ import cpw.mods.fml.common.network.PacketDispatcher import cpw.mods.fml.common.network.Player import java.io.{OutputStream, ByteArrayOutputStream, DataOutputStream} import java.util.zip.GZIPOutputStream -import li.cil.oc.common.tileentity.TileEntity import net.minecraft.entity.player.EntityPlayerMP import net.minecraft.item.ItemStack import net.minecraft.nbt.{CompressedStreamTools, NBTTagCompound} import net.minecraft.network.packet.Packet250CustomPayload +import net.minecraft.tileentity.TileEntity import net.minecraft.world.World import net.minecraftforge.common.ForgeDirection import scala.collection.convert.WrapAsScala._ @@ -17,10 +17,10 @@ import scala.collection.convert.WrapAsScala._ // Necessary to keep track of the GZIP stream. abstract class PacketBuilderBase[T <: OutputStream](protected val stream: T) extends DataOutputStream(stream) { def writeTileEntity(t: TileEntity) = { - writeInt(t.world.provider.dimensionId) - writeInt(t.x) - writeInt(t.y) - writeInt(t.z) + writeInt(t.getWorldObj.provider.dimensionId) + writeInt(t.xCoord) + writeInt(t.yCoord) + writeInt(t.zCoord) } def writeDirection(d: ForgeDirection) = writeInt(d.ordinal) @@ -37,7 +37,7 @@ abstract class PacketBuilderBase[T <: OutputStream](protected val stream: T) ext def sendToAllPlayers() = PacketDispatcher.sendPacketToAllPlayers(packet) - def sendToNearbyPlayers(t: TileEntity, range: Double = 1024): Unit = sendToNearbyPlayers(t.world, t.x + 0.5, t.y + 0.5, t.z + 0.5, range) + def sendToNearbyPlayers(t: TileEntity, range: Double = 1024): Unit = sendToNearbyPlayers(t.getWorldObj, t.xCoord + 0.5, t.yCoord + 0.5, t.zCoord + 0.5, range) def sendToNearbyPlayers(world: World, x: Double, y: Double, z: Double, range: Double) { val dimension = world.provider.dimensionId diff --git a/src/main/scala/li/cil/oc/common/Sound.scala b/src/main/scala/li/cil/oc/common/Sound.scala new file mode 100644 index 000000000..b0c432897 --- /dev/null +++ b/src/main/scala/li/cil/oc/common/Sound.scala @@ -0,0 +1,41 @@ +package li.cil.oc.common + +import li.cil.oc.Settings +import net.minecraft.tileentity.TileEntity +import net.minecraftforge.client.event.sound.SoundLoadEvent +import net.minecraftforge.event.ForgeSubscribe +import cpw.mods.fml.relauncher.{Side, SideOnly} + +object Sound { + @SideOnly(Side.CLIENT) + @ForgeSubscribe + def onSoundLoad(event: SoundLoadEvent) { + for (i <- 1 to 6) { + event.manager.soundPoolSounds.addSound(Settings.resourceDomain + s":floppy_access$i.ogg") + } + event.manager.soundPoolSounds.addSound(Settings.resourceDomain + ":floppy_insert.ogg") + event.manager.soundPoolSounds.addSound(Settings.resourceDomain + ":floppy_eject.ogg") + } + + def play(t: tileentity.TileEntity, name: String) { + t.world.playSoundEffect(t.x + 0.5, t.y + 0.5, t.z + 0.5, Settings.resourceDomain + ":" + name, 1, 1) + } + + def playDiskInsert(t: tileentity.DiskDrive) { + play(t, "floppy_insert") + } + + def playDiskEject(t: tileentity.DiskDrive) { + play(t, "floppy_eject") + } + + def playDiskActivity(t: TileEntity) = this.synchronized { + t match { + case computer: tileentity.Computer => play(computer, "hdd_access") + case rack: tileentity.Rack => play(rack, "hdd_access") + case drive: tileentity.DiskDrive => play(drive, "floppy_access") + case _ => // Huh? + } + } + +} diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index 735f1d8b8..6b0c72d5b 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -2,8 +2,9 @@ package li.cil.oc.common.tileentity import li.cil.oc.api.driver.Slot import li.cil.oc.api.network.{Analyzable, Component, Visibility} -import li.cil.oc.server.TickHandler +import li.cil.oc.common.Sound import li.cil.oc.server.driver.Registry +import li.cil.oc.server.TickHandler import li.cil.oc.{api, Settings} import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack @@ -45,5 +46,11 @@ class DiskDrive extends Environment with ComponentInventory with Rotatable with } case _ => } + Sound.playDiskInsert(this) + } + + override protected def onItemRemoved(slot: Int, stack: ItemStack) { + super.onItemRemoved(slot, stack) + Sound.playDiskEject(this) } } diff --git a/src/main/scala/li/cil/oc/server/PacketSender.scala b/src/main/scala/li/cil/oc/server/PacketSender.scala index e1987db82..91131d1bf 100644 --- a/src/main/scala/li/cil/oc/server/PacketSender.scala +++ b/src/main/scala/li/cil/oc/server/PacketSender.scala @@ -1,7 +1,7 @@ package li.cil.oc.server import li.cil.oc.common -import li.cil.oc.common.tileentity._ +import li.cil.oc.common.tileentity import li.cil.oc.common.{CompressedPacketBuilder, PacketBuilder, PacketType} import li.cil.oc.util.PackedColor import net.minecraft.entity.player.EntityPlayerMP @@ -9,7 +9,7 @@ import net.minecraft.item.ItemStack import net.minecraftforge.common.ForgeDirection object PacketSender { - def sendAbstractBusState(t: AbstractBusAware) { + def sendAbstractBusState(t: tileentity.AbstractBusAware) { val pb = new PacketBuilder(PacketType.AbstractBusState) pb.writeTileEntity(t) @@ -26,7 +26,7 @@ object PacketSender { pb.sendToPlayer(player) } - def sendChargerState(t: Charger) { + def sendChargerState(t: tileentity.Charger) { val pb = new PacketBuilder(PacketType.ChargerState) pb.writeTileEntity(t) @@ -35,7 +35,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendComputerState(t: Computer) { + def sendComputerState(t: tileentity.Computer) { val pb = new PacketBuilder(PacketType.ComputerState) pb.writeTileEntity(t) @@ -44,7 +44,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendComputerUserList(t: Computer, list: Array[String]) { + def sendComputerUserList(t: tileentity.Computer, list: Array[String]) { val pb = new PacketBuilder(PacketType.ComputerUserList) pb.writeTileEntity(t) @@ -54,7 +54,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendHologramClear(t: Hologram) { + def sendHologramClear(t: tileentity.Hologram) { val pb = new PacketBuilder(PacketType.HologramClear) pb.writeTileEntity(t) @@ -62,7 +62,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendHologramPowerChange(t: Hologram) { + def sendHologramPowerChange(t: tileentity.Hologram) { val pb = new PacketBuilder(PacketType.HologramPowerChange) pb.writeTileEntity(t) @@ -71,7 +71,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendHologramScale(t: Hologram) { + def sendHologramScale(t: tileentity.Hologram) { val pb = new PacketBuilder(PacketType.HologramScale) pb.writeTileEntity(t) @@ -80,7 +80,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendHologramSet(t: Hologram) { + def sendHologramSet(t: tileentity.Hologram) { val pb = new CompressedPacketBuilder(PacketType.HologramSet) pb.writeTileEntity(t) @@ -97,7 +97,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendPowerState(t: PowerInformation) { + def sendPowerState(t: tileentity.PowerInformation) { val pb = new PacketBuilder(PacketType.PowerState) pb.writeTileEntity(t) @@ -107,7 +107,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendRedstoneState(t: RedstoneAware) { + def sendRedstoneState(t: tileentity.RedstoneAware) { val pb = new PacketBuilder(PacketType.RedstoneState) pb.writeTileEntity(t) @@ -119,7 +119,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendRobotMove(t: Robot, ox: Int, oy: Int, oz: Int, direction: ForgeDirection) { + def sendRobotMove(t: tileentity.Robot, ox: Int, oy: Int, oz: Int, direction: ForgeDirection) { val pb = new PacketBuilder(PacketType.RobotMove) // Custom pb.writeTileEntity() with fake coordinates (valid for the client). @@ -132,7 +132,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendRobotAnimateSwing(t: Robot) { + def sendRobotAnimateSwing(t: tileentity.Robot) { val pb = new PacketBuilder(PacketType.RobotAnimateSwing) pb.writeTileEntity(t.proxy) @@ -141,7 +141,7 @@ object PacketSender { pb.sendToNearbyPlayers(t, 64) } - def sendRobotAnimateTurn(t: Robot) { + def sendRobotAnimateTurn(t: tileentity.Robot) { val pb = new PacketBuilder(PacketType.RobotAnimateTurn) pb.writeTileEntity(t.proxy) @@ -151,7 +151,7 @@ object PacketSender { pb.sendToNearbyPlayers(t, 64) } - def sendRobotEquippedItemChange(t: Robot, stack: ItemStack) { + def sendRobotEquippedItemChange(t: tileentity.Robot, stack: ItemStack) { val pb = new PacketBuilder(PacketType.RobotEquippedItemChange) pb.writeTileEntity(t.proxy) @@ -160,7 +160,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendRobotEquippedUpgradeChange(t: Robot, stack: ItemStack) { + def sendRobotEquippedUpgradeChange(t: tileentity.Robot, stack: ItemStack) { val pb = new PacketBuilder(PacketType.RobotEquippedUpgradeChange) pb.writeTileEntity(t.proxy) @@ -169,7 +169,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendRobotSelectedSlotChange(t: Robot) { + def sendRobotSelectedSlotChange(t: tileentity.Robot) { val pb = new PacketBuilder(PacketType.RobotSelectedSlotChange) pb.writeTileEntity(t.proxy) @@ -178,7 +178,7 @@ object PacketSender { pb.sendToNearbyPlayers(t, 16) } - def sendRobotXp(t: Robot) { + def sendRobotXp(t: tileentity.Robot) { val pb = new PacketBuilder(PacketType.RobotXp) pb.writeTileEntity(t) @@ -187,7 +187,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendRotatableState(t: Rotatable) { + def sendRotatableState(t: tileentity.Rotatable) { val pb = new PacketBuilder(PacketType.RotatableState) pb.writeTileEntity(t) @@ -201,7 +201,7 @@ object PacketSender { val pb = new PacketBuilder(PacketType.ScreenColorChange) val t = b.owner match { - case t: Buffer => + case t: tileentity.Buffer => pb.writeTileEntity(t) t case t: common.component.Terminal => @@ -220,7 +220,7 @@ object PacketSender { val pb = new PacketBuilder(PacketType.ScreenCopy) val t = b.owner match { - case t: Buffer => + case t: tileentity.Buffer => pb.writeTileEntity(t) t case t: common.component.Terminal => @@ -243,7 +243,7 @@ object PacketSender { val pb = new PacketBuilder(PacketType.ScreenDepthChange) val t = b.owner match { - case t: Buffer => + case t: tileentity.Buffer => pb.writeTileEntity(t) t case t: common.component.Terminal => @@ -261,7 +261,7 @@ object PacketSender { val pb = new PacketBuilder(PacketType.ScreenFill) val t = b.owner match { - case t: Buffer => + case t: tileentity.Buffer => pb.writeTileEntity(t) t case t: common.component.Terminal => @@ -279,7 +279,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendScreenPowerChange(t: Buffer, hasPower: Boolean) { + def sendScreenPowerChange(t: tileentity.Buffer, hasPower: Boolean) { val pb = new PacketBuilder(PacketType.ScreenPowerChange) pb.writeTileEntity(t) @@ -292,7 +292,7 @@ object PacketSender { val pb = new PacketBuilder(PacketType.ScreenResolutionChange) val t = b.owner match { - case t: Buffer => + case t: tileentity.Buffer => pb.writeTileEntity(t) t case t: common.component.Terminal => @@ -311,7 +311,7 @@ object PacketSender { val pb = new PacketBuilder(PacketType.ScreenSet) val t = b.owner match { - case t: Buffer => + case t: tileentity.Buffer => pb.writeTileEntity(t) t case t: common.component.Terminal => @@ -327,7 +327,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendServerPresence(t: Rack) { + def sendServerPresence(t: tileentity.Rack) { val pb = new PacketBuilder(PacketType.ServerPresence) pb.writeTileEntity(t) @@ -342,7 +342,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendServerState(t: Rack) { + def sendServerState(t: tileentity.Rack) { val pb = new PacketBuilder(PacketType.ComputerState) pb.writeTileEntity(t) @@ -352,7 +352,7 @@ object PacketSender { pb.sendToNearbyPlayers(t) } - def sendServerState(t: Rack, number: Int, player: Option[EntityPlayerMP] = None) { + def sendServerState(t: tileentity.Rack, number: Int, player: Option[EntityPlayerMP] = None) { val pb = new PacketBuilder(PacketType.ComputerState) pb.writeTileEntity(t) diff --git a/src/main/scala/li/cil/oc/server/component/FileSystem.scala b/src/main/scala/li/cil/oc/server/component/FileSystem.scala index 32d510617..0a2443649 100644 --- a/src/main/scala/li/cil/oc/server/component/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/component/FileSystem.scala @@ -1,15 +1,17 @@ package li.cil.oc.server.component import java.io.{FileNotFoundException, IOException} -import li.cil.oc.Settings -import li.cil.oc.api.Network import li.cil.oc.api.fs.{Label, Mode, FileSystem => IFileSystem} +import li.cil.oc.api.Network import li.cil.oc.api.network._ +import li.cil.oc.common.Sound +import li.cil.oc.Settings import li.cil.oc.util.ExtendedNBT._ import net.minecraft.nbt.{NBTTagInt, NBTTagList, NBTTagCompound} +import net.minecraft.tileentity.TileEntity import scala.collection.mutable -class FileSystem(val fileSystem: IFileSystem, var label: Label) extends ManagedComponent { +class FileSystem(val fileSystem: IFileSystem, var label: Label, val container: Option[TileEntity] = None) extends ManagedComponent { val node = Network.newNode(this, Visibility.Network). withComponent("filesystem", Visibility.Neighbors). withConnector(). @@ -148,6 +150,7 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label) extends ManagedC if (!node.tryChangeBuffer(-Settings.get.hddReadCost * bytes.length)) { throw new IOException("not enough energy") } + container.foreach(Sound.playDiskActivity) result(bytes) } else { @@ -185,7 +188,10 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label) extends ManagedC } checkOwner(context.node.address, handle) Option(fileSystem.getHandle(handle)) match { - case Some(file) => file.write(value); result(true) + case Some(file) => + file.write(value) + container.foreach(Sound.playDiskActivity) + result(true) case _ => throw new IOException("bad file descriptor") } } diff --git a/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala b/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala index 474ab300e..91617bb12 100644 --- a/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala @@ -9,12 +9,12 @@ import li.cil.oc.util.mods.ComputerCraft import li.cil.oc.{Settings, Items} import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound -import net.minecraft.tileentity.{TileEntity => MCTileEntity} +import net.minecraft.tileentity.TileEntity object FileSystem extends Item { override def worksWith(stack: ItemStack) = isOneOf(stack, Items.hdd1, Items.hdd2, Items.hdd3, Items.floppyDisk) || ComputerCraft.isDisk(stack) - override def createEnvironment(stack: ItemStack, container: MCTileEntity) = + override def createEnvironment(stack: ItemStack, container: TileEntity) = if (ComputerCraft.isDisk(stack) && container != null) { val address = addressFromTag(dataTag(stack)) val mount = ComputerCraft.createDiskMount(stack, container.getWorldObj) @@ -25,8 +25,8 @@ object FileSystem extends Item { case _ => null } } else Items.multi.subItem(stack) match { - case Some(hdd: HardDiskDrive) => createEnvironment(stack, hdd.kiloBytes * 1024) - case Some(disk: FloppyDisk) => createEnvironment(stack, Settings.get.floppySize * 1024) + case Some(hdd: HardDiskDrive) => createEnvironment(stack, hdd.kiloBytes * 1024, container) + case Some(disk: FloppyDisk) => createEnvironment(stack, Settings.get.floppySize * 1024, container) case _ => null } @@ -44,18 +44,17 @@ object FileSystem extends Item { case _ => 0 } - private def createEnvironment(stack: ItemStack, capacity: Int) = { + private def createEnvironment(stack: ItemStack, capacity: Int, container: TileEntity) = { // We have a bit of a chicken-egg problem here, because we want to use the // node's address as the folder name... so we generate the address here, // if necessary. No one will know, right? Right!? val address = addressFromTag(dataTag(stack)) - Option(oc.api.FileSystem.asManagedEnvironment(oc.api.FileSystem. - fromSaveDirectory(address, capacity, Settings.get.bufferChanges), new ItemLabel(stack))) match { - case Some(environment) => - environment.node.asInstanceOf[oc.server.network.Node].address = address - environment - case _ => null + val fs = oc.api.FileSystem.fromSaveDirectory(address, capacity, Settings.get.bufferChanges) + val environment = oc.api.FileSystem.asManagedEnvironment(fs, new ItemLabel(stack), container) + if (environment != null) { + environment.node.asInstanceOf[oc.server.network.Node].address = address } + environment } private def addressFromTag(tag: NBTTagCompound) = diff --git a/src/main/scala/li/cil/oc/server/fs/FileSystem.scala b/src/main/scala/li/cil/oc/server/fs/FileSystem.scala index 8442a8d3a..141afa8aa 100644 --- a/src/main/scala/li/cil/oc/server/fs/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/fs/FileSystem.scala @@ -72,6 +72,9 @@ object FileSystem extends api.detail.FileSystemAPI { @Optional.Method(modid = "ComputerCraft") def fromComputerCraft(mount: IWritableMount) = new ComputerCraftWritableFileSystem(mount) + def asManagedEnvironment(fileSystem: api.fs.FileSystem, label: Label, container: net.minecraft.tileentity.TileEntity) = + Option(fileSystem).flatMap(fs => Some(new component.FileSystem(fs, label, Option(container)))).orNull + def asManagedEnvironment(fileSystem: api.fs.FileSystem, label: Label) = Option(fileSystem).flatMap(fs => Some(new component.FileSystem(fs, label))).orNull From 6fdde8a2acb24044cb2dfecc252aa36492000f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 17:23:09 +0100 Subject: [PATCH 04/11] fixed disk access sounds not playing for cc floppies; attribution to asset contributors in license file --- LICENSE | 8 +++++++- .../scala/li/cil/oc/server/driver/item/FileSystem.scala | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 68dd6e055..03f152190 100644 --- a/LICENSE +++ b/LICENSE @@ -23,4 +23,10 @@ THE SOFTWARE. All images / textures and localization strings (resources) are put in the public domain. More specicially, see CC0 1.0 Universal: - http://creativecommons.org/publicdomain/zero/1.0/ \ No newline at end of file + http://creativecommons.org/publicdomain/zero/1.0/ + +Contributions: + PixelToast - Capacitor textures. + asie - Disk drive inject/eject and floppy disk access sound samples. + +Thanks a lot! diff --git a/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala b/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala index 91617bb12..eaabe2aec 100644 --- a/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/driver/item/FileSystem.scala @@ -18,7 +18,7 @@ object FileSystem extends Item { if (ComputerCraft.isDisk(stack) && container != null) { val address = addressFromTag(dataTag(stack)) val mount = ComputerCraft.createDiskMount(stack, container.getWorldObj) - Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack))) match { + Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack), container)) match { case Some(environment) => environment.node.asInstanceOf[oc.server.network.Node].address = address environment From f0d69fa04bcd4f7b159ebb3b1fc4ba479924bb70 Mon Sep 17 00:00:00 2001 From: Caitlyn Date: Sun, 9 Mar 2014 11:48:37 -0500 Subject: [PATCH 05/11] Added 23 Numerics, and CTCP support. Also changed error handling to give the output from unhanded numerics. --- .../lua/component/internet/bin/irc.lua | 68 +++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua b/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua index 5eddd65bb..807332658 100644 --- a/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua +++ b/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua @@ -76,6 +76,7 @@ local ignore = { -- command numbers to names. local commands = { +--Replys RPL_WELCOME = "001", RPL_YOURHOST = "002", RPL_CREATED = "003", @@ -102,7 +103,32 @@ local commands = { RPL_ENDOFNAMES = "366", RPL_MOTDSTART = "375", RPL_MOTD = "372", - RPL_ENDOFMOTD = "376" + RPL_ENDOFMOTD = "376", + RPL_WHOISSECURE = "671", + RPL_HELPSTART = "704", + RPL_HELPTXT = "705", + RPL_ENDOFHELP = "706", + RPL_UMODEGMSG = "718", + +--Errors + ERR_BANLISTFULL = "478", + ERR_CHANNELISFULL = "471", + ERR_UNKNOWNMODE = "472", + ERR_INVITEONLYCHAN = "473", + ERR_BANNEDFROMCHAN = "474", + ERR_CHANOPRIVSNEEDED = "482", + ERR_UNIQOPRIVSNEEDED = "485", + ERR_USERNOTINCHANNEL = "441", + ERR_NOTONCHANNEL = "442", + ERR_NICKCOLLISION = "436", + ERR_NICKNAMEINUSE = "433", + ERR_ERRONEUSNICKNAME = "432", + ERR_WASNOSUCHNICK = "406", + ERR_TOOMANYCHANNELS = "405", + ERR_CANNOTSENDTOCHAN = "404", + ERR_NOSUCHCHANNEL = "403", + ERR_NOSUCHNICK = "401", + ERR_MODELOCK = "742" } -- main command handling callback. @@ -116,7 +142,6 @@ local function handleCommand(prefix, command, args, message) --------------------------------------------------- -- General commands - elseif command == "NICK" then print(name(prefix) .. " is now known as " .. tostring(args[1] or message) .. ".") elseif command == "MODE" then @@ -132,6 +157,17 @@ local function handleCommand(prefix, command, args, message) elseif command == "KICK" then print("[" .. args[1] .. "] " .. name(prefix) .. " kicked " .. args[2]) elseif command == "PRIVMSG" then + if string.find(message, "\001TIME\001") then + sock:write("NOTICE " .. name(prefix) .. " :\001TIME " .. os.date() .. "\001\r\n") + sock:flush() + elseif string.find(message, "\001VERSION\001") then + sock:write("NOTICE " .. name(prefix) .. " :\001VERSION Minecraft/OpenComputers Lua 5.2\001\r\n") + sock:flush() + elseif string.find(message, "\001PING") then + print("NOTICE " .. name(prefix) .. " :" .. message .. "\001\r\n") + sock:write("NOTICE " .. name(prefix) .. " :" .. message .. "\001\r\n") + sock:flush() + end print("[" .. args[1] .. "] " .. name(prefix) .. ": " .. message) elseif command == "NOTICE" then print("[NOTICE] " .. message) @@ -182,6 +218,9 @@ local function handleCommand(prefix, command, args, message) elseif command == commands.RPL_WHOISIDLE then local nick = args[2]:lower() whois[nick].idle = tonumber(args[3]) + elseif command == commands.RPL_WHOISSECURE then + local nick = args[2]:lower() + whois[nick].secureconn = "Is using a secure connection" elseif command == commands.RPL_ENDOFWHOIS then local nick = args[2]:lower() local info = whois[nick] @@ -190,6 +229,7 @@ local function handleCommand(prefix, command, args, message) if info.realName then print("Real name: " .. info.realName) end if info.host then print("Host: " .. info.host) end if info.server then print("Server: " .. info.server .. (info.serverInfo and (" (" .. info.serverInfo .. ")") or "")) end + if info.secureconn then print(info.secureconn) end if info.channels then print("Channels: " .. info.channels) end if info.idle then print("Idle for: " .. info.idle) end whois[nick] = nil @@ -218,6 +258,26 @@ local function handleCommand(prefix, command, args, message) print(message) end elseif command == commands.RPL_ENDOFMOTD then -- ignore + elseif command == commands.RPL_HELPSTART or + command == commands.RPL_HELPTXT or + command == commands.RPL_ENDOFHELP then + print(message) + elseif command == commands.ERR_BANLISTFULL or + command == commands.ERR_BANNEDFROMCHAN or + command == commands.ERR_CANNOTSENDTOCHAN or + command == commands.ERR_CHANNELISFULL or + command == commands.ERR_CHANOPRIVSNEEDED or + command == commands.ERR_ERRONEUSNICKNAME or + command == commands.ERR_INVITEONLYCHAN or + command == commands.ERR_NICKCOLLISION or + command == commands.ERR_NOSUCHNICK or + command == commands.ERR_NOTONCHANNEL or + command == commands.ERR_UNIQOPRIVSNEEDED or + command == commands.ERR_UNKNOWNMODE or + command == commands.ERR_USERNOTINCHANNEL or + command == commands.ERR_WASNOSUCHNICK or + command == commands.ERR_MODELOCK then + print("[ERROR]: " .. message) elseif tonumber(command) and (tonumber(command) >= 200 and tonumber(command) < 400) then print("[Response " .. command .. "] " .. table.concat(args, ", ") .. ": " .. message) @@ -232,7 +292,7 @@ local function handleCommand(prefix, command, args, message) -- Unhandled message. else - print("Unhandled command: " .. command) + print("Unhandled command: " .. command .. ": " .. message) end end @@ -373,4 +433,4 @@ end if not result then error(reason, 0) end -return reason \ No newline at end of file +return reason From 18e02adba6883509118f3a62c9381e9c0e5e4f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 18:42:13 +0100 Subject: [PATCH 06/11] fixed rendering of hologram block when below a solid block, closes #155 --- src/main/scala/li/cil/oc/common/block/Hologram.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/scala/li/cil/oc/common/block/Hologram.scala b/src/main/scala/li/cil/oc/common/block/Hologram.scala index 993f325ec..ac42c346c 100644 --- a/src/main/scala/li/cil/oc/common/block/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/block/Hologram.scala @@ -10,6 +10,7 @@ import net.minecraftforge.common.ForgeDirection import net.minecraft.util.{Icon, AxisAlignedBB} import net.minecraft.client.renderer.texture.IconRegister import li.cil.oc.Settings +import cpw.mods.fml.relauncher.{SideOnly, Side} class Hologram(val parent: SpecialDelegator) extends SpecialDelegate { val unlocalizedName = "Hologram" @@ -28,6 +29,11 @@ class Hologram(val parent: SpecialDelegator) extends SpecialDelegate { override def isSolid(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = side == ForgeDirection.DOWN + @SideOnly(Side.CLIENT) + override def shouldSideBeRendered(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = { + super.shouldSideBeRendered(world, x, y, z, side) || side == ForgeDirection.UP + } + override def bounds(world: IBlockAccess, x: Int, y: Int, z: Int) = AxisAlignedBB.getAABBPool.getAABB(0, 0, 0, 1, 3 / 16f, 1) From 717aaa3e786635f051b9c871de7b9c00af2e7247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 18:57:16 +0100 Subject: [PATCH 07/11] hdd access sounds and playing access sounds in a few more cases (e.g. list, remove, rename); avoid spamming network packets if sounds are triggered in a tight loop --- LICENSE | 9 ++++++- .../opencomputers/sound/hdd_access1.ogg | Bin 0 -> 12976 bytes .../opencomputers/sound/hdd_access2.ogg | Bin 0 -> 7924 bytes .../opencomputers/sound/hdd_access3.ogg | Bin 0 -> 12483 bytes .../opencomputers/sound/hdd_access4.ogg | Bin 0 -> 10144 bytes .../opencomputers/sound/hdd_access5.ogg | Bin 0 -> 11765 bytes .../opencomputers/sound/hdd_access6.ogg | Bin 0 -> 9775 bytes .../opencomputers/sound/hdd_access7.ogg | Bin 0 -> 8757 bytes src/main/scala/li/cil/oc/common/Sound.scala | 23 +++++++++++++----- .../cil/oc/server/component/FileSystem.scala | 16 +++++++++--- 10 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access1.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access2.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access3.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access4.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access5.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access6.ogg create mode 100644 src/main/resources/assets/opencomputers/sound/hdd_access7.ogg diff --git a/LICENSE b/LICENSE index 03f152190..e4a728039 100644 --- a/LICENSE +++ b/LICENSE @@ -21,7 +21,8 @@ THE SOFTWARE. ------------------------------------------------------------------------------- All images / textures and localization strings (resources) are put in the -public domain. More specicially, see CC0 1.0 Universal: +public domain, unless explicitly excluded below. More specicially, see CC0 1.0 +Universal: http://creativecommons.org/publicdomain/zero/1.0/ @@ -30,3 +31,9 @@ Contributions: asie - Disk drive inject/eject and floppy disk access sound samples. Thanks a lot! + +------------------------------------------------------------------------------- + +Assets from other sources: + HDD access samples based on this sample from freesound.org: + https://www.freesound.org/people/artykris/sounds/117401/ diff --git a/src/main/resources/assets/opencomputers/sound/hdd_access1.ogg b/src/main/resources/assets/opencomputers/sound/hdd_access1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..74be8959e35b3ebd69904db9fb0c033175acb861 GIT binary patch literal 12976 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/hdd_access3.ogg b/src/main/resources/assets/opencomputers/sound/hdd_access3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..679fe9fec37df8537725b85182cfbb934f007e16 GIT binary patch literal 12483 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/hdd_access4.ogg b/src/main/resources/assets/opencomputers/sound/hdd_access4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..15beb3caa2ff2f02555875d750ccdabbc281ec96 GIT binary patch literal 10144 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/sound/hdd_access7.ogg b/src/main/resources/assets/opencomputers/sound/hdd_access7.ogg new file mode 100644 index 0000000000000000000000000000000000000000..55c1a396e84e7eb6b27c21c5d2bc7f6fd8938bae GIT binary patch literal 8757 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 play(computer, "hdd_access") - case rack: tileentity.Rack => play(rack, "hdd_access") - case drive: tileentity.DiskDrive => play(drive, "floppy_access") - case _ => // Huh? + lastPlayed.get(t) match { + case Some(time) if time > System.currentTimeMillis() => // Cooldown. + case _ => + t match { + case computer: tileentity.Computer => play(computer, "hdd_access") + case rack: tileentity.Rack => play(rack, "hdd_access") + case drive: tileentity.DiskDrive => play(drive, "floppy_access") + case _ => // Huh? + } + lastPlayed += t -> (System.currentTimeMillis() + 500) } } diff --git a/src/main/scala/li/cil/oc/server/component/FileSystem.scala b/src/main/scala/li/cil/oc/server/component/FileSystem.scala index 0a2443649..c201d141a 100644 --- a/src/main/scala/li/cil/oc/server/component/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/component/FileSystem.scala @@ -76,7 +76,9 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val container: O @Callback def list(context: Context, args: Arguments): Array[AnyRef] = fileSystem.synchronized { Option(fileSystem.list(clean(args.checkString(0)))) match { - case Some(list) => Array(list) + case Some(list) => + container.foreach(Sound.playDiskActivity) + Array(list) case _ => null } } @@ -85,19 +87,25 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val container: O def makeDirectory(context: Context, args: Arguments): Array[AnyRef] = fileSystem.synchronized { def recurse(path: String): Boolean = !fileSystem.exists(path) && (fileSystem.makeDirectory(path) || (recurse(path.split("/").dropRight(1).mkString("/")) && fileSystem.makeDirectory(path))) - result(recurse(clean(args.checkString(0)))) + val success = recurse(clean(args.checkString(0))) + if (success) container.foreach(Sound.playDiskActivity) + result(success) } @Callback def remove(context: Context, args: Arguments): Array[AnyRef] = fileSystem.synchronized { def recurse(parent: String): Boolean = (!fileSystem.isDirectory(parent) || fileSystem.list(parent).forall(child => recurse(parent + "/" + child))) && fileSystem.delete(parent) - result(recurse(clean(args.checkString(0)))) + val success = recurse(clean(args.checkString(0))) + if (success) container.foreach(Sound.playDiskActivity) + result(success) } @Callback def rename(context: Context, args: Arguments): Array[AnyRef] = fileSystem.synchronized { - result(fileSystem.rename(clean(args.checkString(0)), clean(args.checkString(1)))) + val success = fileSystem.rename(clean(args.checkString(0)), clean(args.checkString(1))) + if (success) container.foreach(Sound.playDiskActivity) + result(success) } @Callback(direct = true) From d7fcbd9c38f629d4568c10e3db0402a38c275074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 19:45:59 +0100 Subject: [PATCH 08/11] removed debug print from irc.lua --- .../assets/opencomputers/lua/component/internet/bin/irc.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua b/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua index 807332658..8c7646908 100644 --- a/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua +++ b/src/main/resources/assets/opencomputers/lua/component/internet/bin/irc.lua @@ -164,7 +164,6 @@ local function handleCommand(prefix, command, args, message) sock:write("NOTICE " .. name(prefix) .. " :\001VERSION Minecraft/OpenComputers Lua 5.2\001\r\n") sock:flush() elseif string.find(message, "\001PING") then - print("NOTICE " .. name(prefix) .. " :" .. message .. "\001\r\n") sock:write("NOTICE " .. name(prefix) .. " :" .. message .. "\001\r\n") sock:flush() end From cbdb4f19ad2288d9e80e2bb2a01fe49a3419a013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 20:45:24 +0100 Subject: [PATCH 09/11] robots could be - unintentionally - be renamed in the anvil. now they keep their name, and get a random name when first placed! also, their name is rendered as a label above them, similar to player names. --- .../assets/opencomputers/robot.names | 29 +++++++++ .../renderer/tileentity/RobotRenderer.scala | 47 +++++++++++++- .../li/cil/oc/common/tileentity/Robot.scala | 63 ++++++++++++++++--- 3 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/robot.names diff --git a/src/main/resources/assets/opencomputers/robot.names b/src/main/resources/assets/opencomputers/robot.names new file mode 100644 index 000000000..e58b7df0a --- /dev/null +++ b/src/main/resources/assets/opencomputers/robot.names @@ -0,0 +1,29 @@ +# This a list of names that robots are randomly named after, unless +# explicitly named using an anvil. +# If your name is on this list and you'd rather it not be, or you'd like a +# different alias, sorry! Please make a pull request with the changed list. +crafteverywhere +LordFokas +Michiyo +mymagadsl +PixelToast +Pyrolusite +SpiritedDusty +Vexatos +Wobbo +YuRaNnNzZZ + +# Names of more or less famous robots, as a bit of filler material. Feel free +# to add more via pull requests. Let's hope this won't get us sued... +Atlas +Bender +C-3PO +Clank +Claptrap +Dog +GLaDOS +KITT +Marvin +P-Body +R2-D2 +Wheatley \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala index a1cd72877..e605bceaf 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala @@ -5,7 +5,7 @@ import li.cil.oc.OpenComputers import li.cil.oc.client.TexturePreloader import li.cil.oc.common.tileentity import li.cil.oc.util.RenderState -import net.minecraft.client.renderer.entity.RenderManager +import net.minecraft.client.renderer.entity.{RendererLivingEntity, RenderManager} import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer import net.minecraft.client.renderer.{Tessellator, GLAllocation} import net.minecraft.tileentity.TileEntity @@ -175,6 +175,51 @@ object RobotRenderer extends TileEntitySpecialRenderer { GL11.glPushMatrix() GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5) + val name = robot.name + if (name != null && x * x + y * y + z * z < RendererLivingEntity.NAME_TAG_RANGE) { + GL11.glPushMatrix() + + // This is pretty much copy-pasta from the entity's label renderer. + val t = Tessellator.instance + val f = getFontRenderer + val scale = 1.6f / 60f + val width = f.getStringWidth(name) + + GL11.glTranslated(0, 0.7, 0) + GL11.glNormal3f(0, 1, 0) + + GL11.glRotatef(-tileEntityRenderer.playerYaw, 0, 1, 0) + GL11.glRotatef(tileEntityRenderer.playerPitch, 1, 0, 0) + GL11.glScalef(-scale, -scale, scale) + + GL11.glDisable(GL11.GL_LIGHTING) + GL11.glDepthMask(false) + GL11.glDisable(GL11.GL_DEPTH_TEST) + GL11.glEnable(GL11.GL_BLEND) + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) + + GL11.glDisable(GL11.GL_TEXTURE_2D) + t.startDrawingQuads() + val halfWidth = width / 2 + t.setColorRGBA_F(0, 0, 0, 0.25f) + t.addVertex(-halfWidth - 1, -1, 0) + t.addVertex(-halfWidth - 1, 8, 0) + t.addVertex(halfWidth + 1, 8, 0) + t.addVertex(halfWidth + 1, -1, 0) + t.draw + + GL11.glEnable(GL11.GL_TEXTURE_2D) + f.drawString(name, -halfWidth, 0, 0x20FFFFFF) + GL11.glEnable(GL11.GL_DEPTH_TEST) + GL11.glDepthMask(true) + f.drawString(name, -halfWidth, 0, -1) + GL11.glEnable(GL11.GL_LIGHTING) + GL11.glDisable(GL11.GL_BLEND) + GL11.glColor4f(1, 1, 1, 1) + + GL11.glPopMatrix() + } + // If the move started while we were rendering and we have a reference to // the *old* proxy the robot would be rendered at the wrong position, so we // correct for the offset. diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala index 2c2bd7c83..9b54d4ac2 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala @@ -9,7 +9,7 @@ import li.cil.oc.server.component.robot import li.cil.oc.server.driver.Registry import li.cil.oc.server.{PacketSender => ServerPacketSender, driver, component} import li.cil.oc.util.ExtendedNBT._ -import li.cil.oc.{Blocks, Settings, api, common} +import li.cil.oc._ import net.minecraft.client.Minecraft import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.ISidedInventory @@ -17,6 +17,9 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.ChatMessageComponent import net.minecraftforge.common.ForgeDirection +import scala.io.Source +import scala.Some +import java.util.logging.Level // Implementation note: this tile entity is never directly added to the world. // It is always wrapped by a `RobotProxy` tile entity, which forwards any @@ -26,6 +29,7 @@ import net.minecraftforge.common.ForgeDirection // old proxy, which will be cleaned up by Minecraft like any other tile entity. class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory with Buffer with PowerInformation with api.machine.Robot { def this() = this(false) + if (isServer) { computer.setCostPerTick(Settings.get.robotCost) } @@ -41,6 +45,16 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w override def player() = player(facing, facing) + def name: String = { + if (tag != null && tag.hasKey("display")) { + val display = tag.getCompoundTag("display") + if (display != null && display.hasKey("Name")) { + return display.getString("Name") + } + } + null + } + override def saveUpgrade() = this.synchronized { components(3) match { case Some(environment) => @@ -75,6 +89,8 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w var owner = "OpenComputers" + var tag: NBTTagCompound = _ + var xp = 0.0 def xpForNextLevel = xpForLevel(level + 1) @@ -196,24 +212,30 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w def createItemStack() = { val stack = Blocks.robotProxy.createItemStack() - if (globalBuffer > 1 || xp > 0) { - stack.setTagCompound(new NBTTagCompound("tag")) - } + val tag = if (this.tag != null) this.tag.copy.asInstanceOf[NBTTagCompound] else new NBTTagCompound("tag") + stack.setTagCompound(tag) if (xp > 0) { - stack.getTagCompound.setDouble(Settings.namespace + "xp", xp) + tag.setDouble(Settings.namespace + "xp", xp) } if (globalBuffer > 1) { - stack.getTagCompound.setInteger(Settings.namespace + "storedEnergy", globalBuffer.toInt) + tag.setInteger(Settings.namespace + "storedEnergy", globalBuffer.toInt) } stack } def parseItemStack(stack: ItemStack) { if (stack.hasTagCompound) { - xp = stack.getTagCompound.getDouble(Settings.namespace + "xp") + tag = stack.getTagCompound.copy.asInstanceOf[NBTTagCompound] + xp = tag.getDouble(Settings.namespace + "xp") updateXpInfo() bot.node.changeBuffer(stack.getTagCompound.getInteger(Settings.namespace + "storedEnergy")) } + else { + tag = new NBTTagCompound("tag") + } + if (name == null) { + tag.setNewCompoundTag("display", tag => tag.setString("Name", Robot.randomName)) + } } // ----------------------------------------------------------------------- // @@ -330,6 +352,9 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w if (nbt.hasKey(Settings.namespace + "owner")) { owner = nbt.getString(Settings.namespace + "owner") } + if (nbt.hasKey(Settings.namespace + "tag")) { + tag = nbt.getCompoundTag(Settings.namespace + "tag") + } xp = nbt.getDouble(Settings.namespace + "xp") max 0 updateXpInfo() selectedSlot = nbt.getInteger(Settings.namespace + "selectedSlot") max actualSlot(0) min (getSizeInventory - 1) @@ -353,6 +378,9 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w nbt.setNewCompoundTag(Settings.namespace + "keyboard", keyboard.save) nbt.setNewCompoundTag(Settings.namespace + "robot", bot.save) nbt.setString(Settings.namespace + "owner", owner) + if (tag != null) { + nbt.setCompoundTag(Settings.namespace + "tag", tag) + } nbt.setDouble(Settings.namespace + "xp", xp) nbt.setInteger(Settings.namespace + "selectedSlot", selectedSlot) if (isAnimatingMove || isAnimatingSwing || isAnimatingTurn) { @@ -369,6 +397,9 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w @SideOnly(Side.CLIENT) override def readFromNBTForClient(nbt: NBTTagCompound) { super.readFromNBTForClient(nbt) + if (nbt.hasKey(Settings.namespace + "tag")) { + tag = nbt.getCompoundTag(Settings.namespace + "tag") + } selectedSlot = nbt.getInteger("selectedSlot") if (nbt.hasKey("equipped")) { equippedItem = Option(ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("equipped"))) @@ -391,6 +422,9 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w override def writeToNBTForClient(nbt: NBTTagCompound) = this.synchronized { super.writeToNBTForClient(nbt) + if (tag != null) { + nbt.setCompoundTag(Settings.namespace + "tag", tag) + } nbt.setInteger("selectedSlot", selectedSlot) if (getStackInSlot(0) != null) { nbt.setNewCompoundTag("equipped", getStackInSlot(0).writeToNBT) @@ -564,3 +598,18 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w case _ => (actualSlot(0) until getSizeInventory).toArray } } + +object Robot { + val names = try { + Source.fromInputStream(getClass.getResourceAsStream( + "/assets/" + Settings.resourceDomain + "/robot.names"))("UTF-8"). + getLines().map(_.trim).filter(!_.startsWith("#")).filter(_ != "").toArray + } + catch { + case t: Throwable => + OpenComputers.log.log(Level.WARNING, "Failed loading robot name list.", t) + Array.empty + } + + def randomName = names((math.random * names.length).toInt) +} \ No newline at end of file From 09342e9f08b726f09e840e9feb8c2c2e49a20151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 20:48:29 +0100 Subject: [PATCH 10/11] added setting to disable robot label rendering, in case it annoys people --- src/main/resources/assets/opencomputers/robot.names | 1 + src/main/resources/reference.conf | 3 +++ src/main/scala/li/cil/oc/Settings.scala | 1 + .../li/cil/oc/client/renderer/tileentity/RobotRenderer.scala | 4 ++-- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/opencomputers/robot.names b/src/main/resources/assets/opencomputers/robot.names index e58b7df0a..df50afa62 100644 --- a/src/main/resources/assets/opencomputers/robot.names +++ b/src/main/resources/assets/opencomputers/robot.names @@ -2,6 +2,7 @@ # explicitly named using an anvil. # If your name is on this list and you'd rather it not be, or you'd like a # different alias, sorry! Please make a pull request with the changed list. +asie crafteverywhere LordFokas Michiyo diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf index 06994c155..817aec199 100644 --- a/src/main/resources/reference.conf +++ b/src/main/resources/reference.conf @@ -54,6 +54,9 @@ opencomputers { # attached to it). For valid key names, please see the following list: # https://github.com/LWJGL/lwjgl/blob/master/src/java/org/lwjgl/input/Keyboard.java#L73 pasteShortcut: [LSHIFT, INSERT] + + # Render robots' names as a label above them when near them + robotLabels: true } # Computer related settings, concerns server performance and security. diff --git a/src/main/scala/li/cil/oc/Settings.scala b/src/main/scala/li/cil/oc/Settings.scala index 65f946d73..c3a9da1dd 100644 --- a/src/main/scala/li/cil/oc/Settings.scala +++ b/src/main/scala/li/cil/oc/Settings.scala @@ -25,6 +25,7 @@ class Settings(config: Config) { val textLinearFiltering = config.getBoolean("client.textLinearFiltering") val textAntiAlias = config.getBoolean("client.textAntiAlias") val pasteShortcut = config.getStringList("client.pasteShortcut").toSet + val robotLabels = config.getBoolean("client.robotLabels") val rTreeDebugRenderer = false // *Not* to be configurable via config file. // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala index e605bceaf..f1ebb2a6b 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala @@ -1,7 +1,7 @@ package li.cil.oc.client.renderer.tileentity import java.util.logging.Level -import li.cil.oc.OpenComputers +import li.cil.oc.{Settings, OpenComputers} import li.cil.oc.client.TexturePreloader import li.cil.oc.common.tileentity import li.cil.oc.util.RenderState @@ -176,7 +176,7 @@ object RobotRenderer extends TileEntitySpecialRenderer { GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5) val name = robot.name - if (name != null && x * x + y * y + z * z < RendererLivingEntity.NAME_TAG_RANGE) { + if (Settings.get.robotLabels && name != null && x * x + y * y + z * z < RendererLivingEntity.NAME_TAG_RANGE) { GL11.glPushMatrix() // This is pretty much copy-pasta from the entity's label renderer. From 667287434fc7bf12ee7e5848a4343a48626b96c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 9 Mar 2014 21:09:52 +0100 Subject: [PATCH 11/11] forgot to bump the api version number for the added file system factory method --- src/main/java/li/cil/oc/api/package-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/li/cil/oc/api/package-info.java b/src/main/java/li/cil/oc/api/package-info.java index 37c89ceb4..922cb0286 100644 --- a/src/main/java/li/cil/oc/api/package-info.java +++ b/src/main/java/li/cil/oc/api/package-info.java @@ -37,5 +37,5 @@ @cpw.mods.fml.common.API( owner = "OpenComputers|Core", provides = "OpenComputersAPI", - apiVersion = "1.4.4") + apiVersion = "1.4.5") package li.cil.oc.api; \ No newline at end of file