From b3e188a5f45e27354ac2f79962edf842de3acda0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 18 May 2018 17:21:18 -0700 Subject: [PATCH] Improvements to annotation code generation system, client RMI --- .../build/libs/annotations-release.jar | Bin 8886 -> 9921 bytes .../annotations/AnnotationProcessor.java | 94 +++++++++++------- .../src/io/anuke/annotations/Annotations.java | 25 ++++- .../io/anuke/mindustry/core/NetServer.java | 5 + .../mindustry/editor/MapEditorDialog.java | 6 +- .../io/anuke/mindustry/entities/Player.java | 4 +- .../src/io/anuke/mindustry/net/NetEvents.java | 18 +++- core/src/io/anuke/mindustry/net/Packets.java | 8 +- .../src/io/anuke/mindustry/resource/Item.java | 3 + .../io/anuke/mindustry/resource/Recipe.java | 8 ++ .../mindustry/ui/dialogs/AdminsDialog.java | 4 +- .../ui/fragments/PlayerListFragment.java | 8 +- 12 files changed, 130 insertions(+), 53 deletions(-) diff --git a/annotations/build/libs/annotations-release.jar b/annotations/build/libs/annotations-release.jar index a369a0cff648b703da262b8fab028c9607f27dfc..683e153024f80a3df474b9386236433f9d1f862c 100644 GIT binary patch delta 8456 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 delta 7576 zcmX@;yUmp+z?+$ci-CcIgTdKhB9A(gv%^GFZ&hc9O+E|^3=B*lf`Ng7nSp^JGhd&X z0Y&*zu<~=poFL`4O}lyTOy**=tM?an6luG^kbC#q&;>sjwE`x-*k-tURz+fvO5mR? z9j{GnK|5z{bGF`bCMPZ3^VjA*7mu*iH`t%5D9h~G7-Mj9j^*={XROojomqe1zK*G) z>nzu)h;JJnJ=)f7E%&Y}V(o#$v${*gOWStpu3U0AP2*>8EnB)fKg;17cdd_#)-O5h zKX-mlQrg=0?sLU_>6zDsU)-4JBe^PfY0J&d%2`}m@}*1ocAnbD(d8ALw=^vC$D{mx z=_T{@+fC7k=n+`zx<|| zW~kEKnfoe~Ki`|CzeE2-|HapFtLxSTTW!;Rf@$cY2`K6|D?Vuv#wp|ROWXt z$}iyGcj=yF%+d;8)vnbA8`|0{985hnUN~eUmRTC0U8euAYU8~FXPfRV+7VE4aK-AH zih7jz-{kYpzwYicF$M-sa|Q-IND@iRn><5CYH}>IK)p3*Mab2w&+kOuJALM~nc_so z7Di?tp&0^>Q#choIfQ(iJeUL*A4vH$smCYnkxtI7uB+F=a^I$ju1dPQ=xSK2l|bRb zsI^8vhd#fz`^CbbBX~Qv zK;Q5AaUSb=ea4>`)C;8-opQU1RnNM|x1%J$rmgnbA9bQ_ot>^iTLdmMib!Pn2A9G2D8_g}A`9e$jTH@Xo z-kz;1r|y$^uRr{0WafQCDRDLL_2k*S<_XsJRuYTrgOBx^-D!z6 zs}R+nP-whe{Fz|FcAok(hr2h-cGuhXQ0$J@W3#%ChU{{j)ic({afaso&IxGzTNcsD zT*mX^i)vZMfwyKnj}*TDk}y?Cyup?o*_2(_!Kgpg@Q{9>WOC2l_$iRjAN-rapxw>Z#WqLp}yHD?%>-v$@Nn{Ivd5QKE7J^$6#^Yk+$m(+<$&F ztc%fpTzV%?|MBsie_MF-5BM7`^*{L|)4Gn${&aTE_Q$XijNb+P6sw586mw&Pxyb8ZTq~_DrhKo?+@LSV zla;Y{pCeO=N&KVR4_EX3a{7B!cB6;FmH6%n&;6Niw0EpoAAj}!lerTed~!eXDo%MZ z<70$E#NKP-vI`vD-g10tui049(vW@JNk@KnO!@a48>jkcZmagV>#<|Y-pi&FVy(_3 z>R~AYfz9i1EO0dP4Cm>!!r0-`^W5J3l4WVzV zFKT=Y+}qa35hb^TQHV+LjI{W|qYcV3#rYOTX6+C-xXVU>>qwZ=j60&UGnO?*IBDeY zwOqOOBcWgF<(IE4rl~D|_dQUHS2^(h*aAy4fd#gqX6%QyWYpB}p0%-L%PzgE`ImQc zWM_Y_;_$xv*y#4OS7vQxEJ_arxR+0}JR^TWh9=mC9-S$WVH5L$c#1yUHI%Cs)3#H-TSOmb{gGqQX@-afVmQnTv{Iv$L7PIF_3@ zclYl8^Ge{hTJLS+nm*g|EvA##DYczds_;9zjr012Sd*=L+;->*eSDk8=OVczrzAn4 zuJ=K~xeUK);ZL{m9P_%xa{PMg&1+G18|(88^XlAtHZdJ7?&a0$Qu(8J)h=YV$B#)Z z`jelXyycM`5*o15!L_Ajy@x}v{i2X|fr9&n_S5NF%-7vL6>N zG>EQWvG0ko5U?882&{|IIkDu_5Z|KWL23npc*e@yi& z4=gSSIT-#ioXdu-U;6`#jpsy@?ntj6*}bO=g%h^eoUC6O`hJ3<)(`1Fx;K|J?LT~f z@@Xe9jhiXm8`b2C2Xng=ejvGbR`DP84`ue*8+6F8jpt60>bv za@XG9k>;DcTSiVHMI)(8dd1^} zc*)VlI$s{VyV+IHd2`lQ|AfM`RdL&1gy}!)FxJ@UXJ@IsDCSJ)5gWsJ!Ms4lPOnK1 zQ@q7oLpoU}MXccHUy(Lb$H_w1z5d{$4ynRrN@CrrQ_{qD{P?P~D)Cgb?VVV!lec~M zi*{K=2PkOH_b~`NV)X3p>84ZMUv@I@T_>t-a%yW=gkD%c?qW921(Lzqm0Q;AS$5TQ z$;#_n4~Yhq@5(sf`z>T@mu_=N=R|&&vTCQSGmB?CUAZiBOYq*hSNTu&T5q@uw%)BUK!O^aA@to9KhZ&RJ zW*qsNd5PERs9RB2$3)$cSZ01xwQV+ zEGNVAqes{H1Wm}<@bZ!Gg(bV2wuT?J`L_89tM+N3i^6H4%cN#q4XDpa*dleQNqx;W z8Lhmf_g6^0Dy@HgMQq2h#@7lKUHPljpUJO!uw$dAVC*9%*Br4a$8&vGZ{KE8wk~#m zmGO%!{vrv&lJBIn!l}j z=p}B+kvqdgLr-jT#YWw(8(P~6&o4i4Sf;nSf^)x0Rpo@7<^EsP>zm)cFcM0Ps=A^f z6*PH@;ZcT8Q!59{SwDC`cpjJGY5(d#6xUT|@| zBc43%ll#?aB{5c0XBCFTU9PR?OT5OiT>jLHlXiVB@Nbw}`1;{2jnp8|iT7Nu%m}F7&9ss6 zo}b%+%Xuraw2#f(%B1N#eW&sA$zlf#iw=nAhL#`QqAjlX-uc$)DJnH?SA$k-E7eCD z2{s>nx3N3Q+Um8{Y^h7)ZjVD^&n&i=>H5jE=Wd`nU-HQ=Zq-80LnU)VdLHF&sVY5i zU49XV$cO3k{onc6yzX7Pac^yH^)Egh?UG!r%>MO?w_Xd(ED74qA-?Ol>g<(#U6!)1 zmKK^m3C~uyQ~P8($))J3`NMN*%heb5+&liGzF>)f?WyJZPt;U$K7AFscjjZWz@bk$ z>PJq-Cq>*gyJo(5p~jY&w!p2scB>~^F5fWW%C&o2R<7GTQ76SWI6Kz(y79t!X=>!1&-O-V*X)^LZN7ctVUhlmMsA7g`E$8G zyDkw4O#aB>{^6=+q}|e^#Ug?$SG9G$oWnN#ZQW(JrdW4|y@~akT6o`|=iOv9$N!=A z+?|5co}4*%%fs!NXR>69)t2bIzj4*yDt0zF-dLIRFy*bORr+#2M<3JFuq7(TS1ifB zGh3`jZsChJ-DO$Nr+v!t`7qHfILBK-=;Eu6!cDFFBqx`tM7^Ci<3`22{5QXxAIDD1 zHu%phzwuI_$5Wo&H|A>p?ynE^XzO;}%0D5b%=BWSQnt;h-aQ7Yl^0E0nf$Of#b+X0{1pGS@7UPpI-a#~nrr#5 zu&w5nh3V2Od$X9V=YCl2v`XN7)jOrt94@a{^t|JLc|Ydd?3T^`N-{Asbfy~Z?+>=L zZscCVr@O7gO61GWtGf~e9?sDzGnc%+`s&{L)I}c-$V=^*V`_KW^m$jXq{Q-o7c*u> zSs(vzm44*7_W$D_4WkQp{HqQ1xTzr)utoOi{hhDRh15LwHD6@We?>=cy^Tu_`fDGbeHj{hfT%^`=h|)25x*e1py=7#&Z&baKMuw`!cH4_$euZ+%$vzx4m6 z7XIzQ#^0~kTMBT#fAV30??pxR>OVTC>#nuk4B-6E)WEy!p!mZ&hl+-KEH$0?_Ve&B zyZ3(4_x2aED{60K@E=l~^}oyPKgVCS2OF;0Gbu;?){wb+>-dAhwY5z1mRxhPIR0Su zmzu77t5&+ot+nC#v4QQIiS6234?=!O*^0_C%xg?vIrr@SZ#+-xWm$Ard<_YcWebcn zWl~e|J9B4q!TD3Roz+I)KkZ2OUT@TUjWNPyOZEbRb1dpQZN>?lIxU;GOg&xl>e#6} zzu9co8~*XFXnfYu{^z%&l9j^UsGp)6-ZOWe=B5_jer#G+=6NQVD8# zU}}9jn&%K1xz8p0doPj$?At1#!;j8nmW#yrld-xC@Otnai0ZM+%6Q{C?%nyBk>;1Em2E}5(D2@_Ra`!0HA*6(Ut zF*kG3Llzx74sV(CrN6v|3$|UaVmbHGYuVCGmtRG=1&eZiC==Wpl|Rqee|po^qqfdm zX3NiRtYHb`5Zaa^$M)#PyDhTKQ{#?iN;eiye3Kno=GG(ndG0BWD~cy~%}a@Wpkt7- zx1;)&7VkZ$^nIHPSi+PeGnKzz%P1+mc3!#u<=z0Vs6F?$Yh(M)XNx~qaRjgH@T3+PLk)lWQTqq);sR_B4@v@*f( zdS|CNi+jHQ>XrU6vExm%W0LZ!jT5D<%Z$DqR&P8eS;F<*Y{>*GKet_f6y6j}Q%QKf zd4t_eTejUk=~doym)&2v%4+MEE!G-RQ>OaaUVg2TU1nAGS*u!Ry5U1x z&!%vHRqx*q4bGT4xdzq$oNmm1^w%RDJuW$6?{#*mHd3n|Gq238G4MQB$ohTD+jnR0 z+?pDDIK$KH^QS2$;>*u|bY9$2XW*>it#{)k{&_tuKzx@vu9%zR17 zFx3Z-SL*KUJD@IO{=zRR%h0LRXw~`C9j|1h?L7_W+`0Tl=YdCFRMZTfY}dsyJ7yf7 zE_kggnD0%2n5FE?4Ph2$YeXdz*9LHBYfi1x@{Z6pI&^EfI#0Gr1UKLQpO=Fw<)2tC zWvN+qI`iqb&73J#j|2gLG>lN-iIb+RauAU&T>Ew6dU!umBS^bA}XU~0h zxZw5VXY3lO@!GNacNylh8!xY`;e0gZ!gNQuiiHf*f>*_JZY|K;azN__Td4uZ*A3!f zhfO!It!pivGWmQvvq?4kn&nsSv*`!^PR?k*zL5FeBHf5YWvwl(Njn%$Cm35Tlzx8b zXaswG^akN=iRND(=zVz1zEFI9lbuXkT@4%C2g@BS`&k|T@bNtAKk@ip&*A^$eZuwns1=}q29Atw&vI!p82NbhkKt{)SRm^ zy_2%9@0Rq7ziv0u_ep-6E#De_*1q|+j`4$rRJ}WSE8FxVwjG)~?e>Gb)3pWsGw*G9 zT3xXIY3PpgpV)sadRqGGfAg_>E$lkSA9`P#`C&n+nN3P82Y>YRgNm=SDvsyxj^A9#E%{2}M-!iq~(Onsgq5uWLXFJFqvn*C5R)7D0P>*3Eq z;x)m$B;uy9J-8htvQPVM<9qMxhqaenoxa5X;OR@xJ(WYYJye_Fyep?I|6q3r8{c7{ zA7(Y|T%OxPqt?$@Qfpo_ebrs2Nk4Tz*#58+nIy98ApeR@rIUR2d~m*0U!eImZ=0Q4 z_1eqFeKsHAteAPM%ZK}@^arl5UB0G|On(S|m04!?QK|5w!ju``x^6#EzcM>X%kX9? zU&iv#55cc2H(dT?_NV7nqIFsHKTiAh_=cwN$he01L+cgitCVyY)G@QFEUq^7B!Q1_aDl~6a>GY|3P1?==7582lqe78yu{k zth$lytD57>;{1zuZifWl=i~l#ukodj%=8CyA3vD-;BI7o<5yjU&bxeOoPGhCdWuF2 zT=i2fs4Sd$?;fKCUomHu=sX2;oin^124B)1G9Ihqp0MtD9&&^?*wdMBL&00q@57vvN$|&WV@l9MC8kM<8{?+O&hl=fWRu|n_Rw@>1$(J$r zXK3H;t>?~Y9T(r?mpSz@-`d3?mhY};N&kIwXnES?vJ*NC|M(5;+kZZJtb1h{|FpF$ zn^U#LveI)uDNQ(7|HW*L=~|}=8#PM(^3v>=)^p30&y+1+n)TG#;Bw*glM)^W?zTTz zwzz=*>4S&P8=Cod%{X|tM59e|$@0rDXT+@WJk+Rq<=ldMA`UvC8+rT>ue|e?P0%%6 zWck5bmW_R%p4i^{WwgiZ0a5utIpMP5L>-op!|NnmT{>S-H zzdH@DE9B-MO1|??9(np?bE8ZUqabMNB&wG)zQms!GMjExgV*cio(l68vIylWVqU86SNc zqqp=xW`xx0psL{3Sy`(XnVvuH;@o1g*`fZQcvHkP<4xb0<}SUW+P^pJncJ)&BeOW& zj)(6~Yt+rM;fOK2tQgs5nSAYj!=AJ#)zw}H3v4=+*pD-rYb9^{vmnY{@XDW<_9)^TS5>?dQicoZBG0p#Q|-wsv3sXclwRof;eud#`PpBeG~!%G1Qz20Nw~ zC#z28UOIKJ%9sAW+2^4N^7q%+U2$G-w#X03WL&_r?an`^!>l;m;T7N<%6I=*>1MN>|}qgh4Uxx&QUA& z?%2JHZ(6m*8xy^2O}1Yurk+*Y_s8^@=($N|>~|*fU$CAm=XA_bn{VSO2|b>O!zazyGnpw|Yk8@Y?)aQHqht*7_sJ7vlqSbAb56EpWl$)})mnKlV5!LyW%MvKpyV_Z4a=n`Pn1yxWjrHD z#zVIYC9R=o{Vy|lqKpy_Z6;rxT(2=OFzA4iD2g_3xych{#3#>EljP%O;AXI9W?)E_ H2dMx6y;` writeMap = new HashMap(){{ put("Player", new String[][]{ { @@ -57,22 +61,24 @@ public class AnnotationProcessor extends AbstractProcessor { if(done) return false; done = true; - ArrayList elements = new ArrayList<>(); + writeElements(roundEnv, clientFullClassName, RemoteClient.class); + writeElements(roundEnv, serverFullClassName, RemoteServer.class); - for (Element element : roundEnv.getElementsAnnotatedWith(Remote.class)) { - if(!element.getModifiers().contains(Modifier.STATIC)) { - messager.printMessage(Kind.ERROR, "All local/remote methods must be static: ", element); - }else if(element.getKind() != ElementKind.METHOD){ - messager.printMessage(Kind.ERROR, "All local/remote annotations must be on methods: ", element); - }else{ - elements.add(element); - } - } + return true; + } + private void writeElements(RoundEnvironment env, String fullClassName, Class annotation){ try { + boolean client = annotation == RemoteServer.class; + String className = fullClassName.substring(1 + fullClassName.lastIndexOf('.')); + String packageName = fullClassName.substring(0, fullClassName.lastIndexOf('.')); - TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className) - .addModifiers(Modifier.PUBLIC); + Constructor cons = TypeName.class.getDeclaredConstructor(String.class); + cons.setAccessible(true); + + TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.Player"); + + TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC); int id = 0; @@ -85,12 +91,23 @@ public class AnnotationProcessor extends AbstractProcessor { .addParameter(int.class, "id") .returns(void.class); + if(client){ + readMethod.addParameter(playerType, "player"); + } + CodeBlock.Builder writeSwitch = CodeBlock.builder(); boolean started = false; readMethod.addJavadoc("This method reads and executes a method by ID. For internal use only!"); - for (Element e : elements) { + for (Element e : env.getElementsAnnotatedWith(annotation)) { + if(!e.getModifiers().contains(Modifier.STATIC)) { + messager.printMessage(Kind.ERROR, "All local/remote methods must be static: ", e); + }else if(e.getKind() != ElementKind.METHOD){ + messager.printMessage(Kind.ERROR, "All local/remote annotations must be on methods: ", e); + } + + if(e.getAnnotation(annotation) == null) continue; boolean local = e.getAnnotation(Local.class) != null; ExecutableElement exec = (ExecutableElement)e; @@ -99,12 +116,24 @@ public class AnnotationProcessor extends AbstractProcessor { .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .returns(void.class); + if(client){ + if(exec.getParameters().isEmpty()){ + messager.printMessage(Kind.ERROR, "Client invoke methods must have a first parameter of type Player.", e); + return; + } + + VariableElement var = exec.getParameters().get(0); + + if(!var.asType().toString().equals("io.anuke.mindustry.entities.Player")){ + messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", e); + } + } + for(VariableElement var : exec.getParameters()){ method.addParameter(TypeName.get(var.asType()), var.getSimpleName().toString()); } if(local){ - //todo int index = 0; StringBuilder results = new StringBuilder(); for(VariableElement var : exec.getParameters()){ @@ -124,11 +153,17 @@ public class AnnotationProcessor extends AbstractProcessor { } started = true; - method.addStatement("$1N packet = new $1N()", "io.anuke.mindustry.net.Packets.InvokePacket"); + method.addStatement("$1N packet = $2N.obtain($1N.class)", "io.anuke.mindustry.net.Packets.InvokePacket", + "com.badlogic.gdx.utils.Pools"); method.addStatement("packet.writeBuffer = TEMP_BUFFER"); method.addStatement("TEMP_BUFFER.position(0)"); - for(VariableElement var : exec.getParameters()){ + ArrayList parameters = new ArrayList<>(exec.getParameters()); + if(client){ + parameters.remove(0); + } + + for(VariableElement var : parameters){ String varName = var.getSimpleName().toString(); String typeName = var.asType().toString(); String bufferName = "TEMP_BUFFER"; @@ -148,7 +183,7 @@ public class AnnotationProcessor extends AbstractProcessor { String[] values = writeMap.get(simpleTypeName)[0]; for(String str : values){ method.addStatement(str.replaceAll("rbuffer", bufferName) - .replaceAll("rvalue", varName)); + .replaceAll("rvalue", varName)); } }else{ messager.printMessage(Kind.ERROR, "No method for writing type: " + typeName, var); @@ -178,13 +213,9 @@ public class AnnotationProcessor extends AbstractProcessor { classBuilder.addMethod(method.build()); - FieldSpec var = FieldSpec.builder(TypeName.INT, "ID_METHOD_" + exec.getSimpleName().toString().toUpperCase()) - .initializer("$1L", id).addModifiers(Modifier.FINAL, Modifier.PRIVATE, Modifier.STATIC).build(); - - classBuilder.addField(var); - int index = 0; StringBuilder results = new StringBuilder(); + for(VariableElement writevar : exec.getParameters()){ results.append(writevar.getSimpleName()); if(index != exec.getParameters().size() - 1) results.append(", "); @@ -195,8 +226,6 @@ public class AnnotationProcessor extends AbstractProcessor { ((TypeElement)e.getEnclosingElement()).getQualifiedName().toString()); id ++; - - //TODO add params from the method and invoke it } if(started){ @@ -209,13 +238,10 @@ public class AnnotationProcessor extends AbstractProcessor { TypeSpec spec = classBuilder.build(); JavaFile.builder(packageName, spec).build().writeTo(filer); - - }catch (Exception e){ + e.printStackTrace(); throw new RuntimeException(e); } - - return true; } private boolean isPrimitive(String type){ diff --git a/annotations/src/io/anuke/annotations/Annotations.java b/annotations/src/io/anuke/annotations/Annotations.java index 6c5ea3d4b4..192b75b829 100644 --- a/annotations/src/io/anuke/annotations/Annotations.java +++ b/annotations/src/io/anuke/annotations/Annotations.java @@ -5,14 +5,33 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * Goal: To create a system to send events to the server from the client and vice versa.
+ * These events may optionally also trigger on the caller client/server as well.
+ *
+ * Three annotations are used for this purpose.
+ * {@link RemoteClient}: Marks a method as able to be invoked remotely on a client from a server.
+ * {@link RemoteServer}: Marks a method as able to be invoked remotely on a server from a client.
+ * {@link Local}: Makes this method get invoked locally as well as remotely.
+ *
+ * All RemoteClient methods are put in the class CallClient, and all RemoteServer methods are put in the class CallServer.
+ */ public class Annotations { - /**Marks a method as invokable remotely.*/ + /**Marks a method as invokable remotely from a server on a client.*/ @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) - public @interface Remote{} + public @interface RemoteClient {} - /**Marks a method to be locally invoked as well as remotely invoked.*/ + /**Marks a method as invokable remotely from a client on a server. + * All RemoteServer methods must have their first formal parameter be of type Player. + * This player is the invoker of the method.*/ + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.CLASS) + public @interface RemoteServer {} + + /**Marks a method to be locally invoked as well as remotely invoked on the caller + * Must be used with {@link RemoteClient}/{@link RemoteServer} annotations.*/ @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface Local{} diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index dd0c843b6f..f0ef99fa84 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -10,6 +10,7 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; +import io.anuke.mindustry.gen.CallServer; import io.anuke.mindustry.io.Platform; import io.anuke.mindustry.io.Version; import io.anuke.mindustry.net.*; @@ -162,6 +163,10 @@ public class NetServer extends Module{ //...don't do anything here as it's already handled by the packet itself }); + Net.handleServer(InvokePacket.class, (id, packet) -> { + CallServer.readPacket(packet.writeBuffer, packet.type, connections.get(id)); + }); + Net.handleServer(EntityShootPacket.class, (id, packet) -> { Player player = connections.get(id); diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index fa2ed334f5..eabc7ae82b 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -27,6 +27,7 @@ import io.anuke.ucore.scene.builders.table; import io.anuke.ucore.scene.ui.*; import io.anuke.ucore.scene.ui.layout.Stack; import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.utils.UIUtils; import io.anuke.ucore.util.Bundles; import io.anuke.ucore.input.Input; import io.anuke.ucore.util.Log; @@ -387,15 +388,14 @@ public class MapEditorDialog extends Dialog{ private void doInput(){ //tool select for(int i = 0; i < EditorTool.values().length; i ++){ - int code = i == 0 ? 5 : i; - if(Inputs.keyTap("weapon_" + code)){ + if(Inputs.keyTap(Input.valueOf("NUM_" + (i+1)))){ view.setTool(EditorTool.values()[i]); break; } } //ctrl keys (undo, redo, save) - if(Inputs.keyDown(Input.CONTROL_LEFT)){ + if(UIUtils.ctrl()){ if(Inputs.keyTap(Input.Z)){ view.undo(); } diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 1c423c2234..2eabb63762 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -10,6 +10,7 @@ import io.anuke.mindustry.content.Weapons; import io.anuke.mindustry.content.fx.ExplosionFx; import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.game.Team; +import io.anuke.mindustry.gen.CallClient; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; @@ -338,7 +339,8 @@ public class Player extends Unit implements BlockPlacer{ currentPlace = null; }else if(distanceTo(check) <= placeDistance){ BuildEntity entity = check.entity(); - entity.progress += 1f / entity.result.health; + + entity.progress += 1f / entity.recipe.cost; rotation = Mathf.slerpDelta(rotation, angleTo(entity), 0.4f); } diff --git a/core/src/io/anuke/mindustry/net/NetEvents.java b/core/src/io/anuke/mindustry/net/NetEvents.java index 31c3b85f1f..db258b56f8 100644 --- a/core/src/io/anuke/mindustry/net/NetEvents.java +++ b/core/src/io/anuke/mindustry/net/NetEvents.java @@ -2,7 +2,8 @@ package io.anuke.mindustry.net; import com.badlogic.gdx.utils.Pools; import io.anuke.annotations.Annotations.Local; -import io.anuke.annotations.Annotations.Remote; +import io.anuke.annotations.Annotations.RemoteClient; +import io.anuke.annotations.Annotations.RemoteServer; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; import io.anuke.mindustry.entities.TileEntity; @@ -17,7 +18,7 @@ import static io.anuke.mindustry.Vars.*; public class NetEvents { - @Remote + @RemoteClient @Local public static void friendlyFireChange(boolean enabled){ state.friendlyFire = enabled; @@ -25,6 +26,17 @@ public class NetEvents { if(Net.server()) netCommon.sendMessage(enabled ? "[accent]Friendly fire enabled." : "[accent]Friendly fire disabled."); } + @RemoteServer + public static void notifySomethingFromClient(Player player, int x, float y){ + + } + + @RemoteClient + @Local + public static void notifySomethingFromServerLocal(int y, float x, boolean w){ + + } + public static void handleGameOver(){ Net.send(Pools.obtain(GameOverPacket.class), SendMode.tcp); } @@ -116,7 +128,7 @@ public class NetEvents { Net.send(packet, SendMode.tcp); } - @Remote + @RemoteClient @Local public static void adminSet(Player player, boolean admin){ player.isAdmin = admin; diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index 9ebcae2067..2e8fb58b0e 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -7,7 +7,7 @@ import com.badlogic.gdx.utils.reflect.ReflectionException; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; -import io.anuke.mindustry.gen.CallEvent; +import io.anuke.mindustry.gen.CallClient; import io.anuke.mindustry.io.Version; import io.anuke.mindustry.net.Packet.ImportantPacket; import io.anuke.mindustry.net.Packet.UnimportantPacket; @@ -43,9 +43,11 @@ public class Packets { type = buffer.get(); if(Net.client()){ - CallEvent.readPacket(buffer, type); + CallClient.readPacket(buffer, type); }else{ - buffer.position(buffer.position() + writeLength); + byte[] bytes = new byte[writeLength]; + buffer.get(bytes); + writeBuffer = ByteBuffer.wrap(bytes); } } diff --git a/core/src/io/anuke/mindustry/resource/Item.java b/core/src/io/anuke/mindustry/resource/Item.java index cd40697481..6c1d7a5583 100644 --- a/core/src/io/anuke/mindustry/resource/Item.java +++ b/core/src/io/anuke/mindustry/resource/Item.java @@ -28,6 +28,9 @@ public class Item implements Comparable{ public int hardness = 0; /**the burning color of this item*/ public Color flameColor = Palette.darkFlame.cpy(); + /**base material cost of this item, used for calculating place times + * 1 cost = 1 tick added to build time*/ + public float cost = 1f; public Item(String name, Color color) { this.id = items.size; diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index 4109b3dfc8..cb9e338f60 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -13,6 +13,7 @@ public class Recipe { public final Block result; public final ItemStack[] requirements; public final Section section; + public final float cost; public boolean desktopOnly = false, debugOnly = false; @@ -22,6 +23,13 @@ public class Recipe { this.requirements = requirements; this.section = section; + float timeToPlace = 0f; + for(ItemStack stack : requirements){ + timeToPlace += stack.amount * stack.item.cost; + } + + this.cost = timeToPlace; + allRecipes.add(this); recipeMap.put(result, this); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java index 0979c798eb..70faef7784 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.mindustry.entities.Player; -import io.anuke.mindustry.gen.CallEvent; +import io.anuke.mindustry.gen.CallClient; import io.anuke.mindustry.net.Administration.PlayerInfo; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetConnection; @@ -49,7 +49,7 @@ public class AdminsDialog extends FloatingDialog { for(Player player : playerGroup.all()){ NetConnection c = Net.getConnection(player.clientid); if(c != null){ - CallEvent.adminSet(player, false); + CallClient.adminSet(player, false); break; } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index f632e0d243..3ffa9e2c3d 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; -import io.anuke.mindustry.gen.CallEvent; +import io.anuke.mindustry.gen.CallClient; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetConnection; import io.anuke.mindustry.net.NetEvents; @@ -49,7 +49,7 @@ public class PlayerListFragment implements Fragment{ margin(12f); get().addCheck("$text.server.friendlyfire", b -> { - CallEvent.friendlyFireChange(b); +// CallClient.friendlyFireChange(b); }).growX().update(i -> i.setChecked(state.friendlyFire)).disabled(b -> Net.client()).padRight(5); new button("$text.server.bans", () -> { @@ -160,12 +160,12 @@ public class PlayerListFragment implements Fragment{ if(netServer.admins.isAdmin(id, connection.address)){ ui.showConfirm("$text.confirm", "$text.confirmunadmin", () -> { netServer.admins.unAdminPlayer(id); - CallEvent.adminSet(player, false); + CallClient.adminSet(player, false); }); }else{ ui.showConfirm("$text.confirm", "$text.confirmadmin", () -> { netServer.admins.adminPlayer(id, connection.address); - CallEvent.adminSet(player, true); + CallClient.adminSet(player, true); }); } }).update(b ->{