diff --git a/annotations/src/main/java/mindustry/annotations/impl/EntityProcess.java b/annotations/src/main/java/mindustry/annotations/impl/EntityProcess.java index 6ab0dcf1a8..0978f2b554 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/EntityProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/EntityProcess.java @@ -48,7 +48,14 @@ public class EntityProcess extends BaseProcessor{ //getter inter.addMethod(MethodSpec.methodBuilder("get" + cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC).returns(field.tname()).build()); //setter - inter.addMethod(MethodSpec.methodBuilder("set" + cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC).addParameter(field.tname(), field.name()).build()); + if(!field.is(Modifier.FINAL)) inter.addMethod(MethodSpec.methodBuilder("set" + cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC).addParameter(field.tname(), field.name()).build()); + } + + //add utility methods to interface + for(Smethod method : component.methods()){ + inter.addMethod(MethodSpec.methodBuilder(method.name()).returns(method.ret().toString().equals("void") ? TypeName.VOID : method.retn()) + .addParameters(method.params().map(v -> ParameterSpec.builder(v.tname(), v.name()) + .build())).addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT).build()); } write(inter); diff --git a/annotations/src/main/java/mindustry/annotations/util/Smethod.java b/annotations/src/main/java/mindustry/annotations/util/Smethod.java index b21a25a040..1db941c63a 100644 --- a/annotations/src/main/java/mindustry/annotations/util/Smethod.java +++ b/annotations/src/main/java/mindustry/annotations/util/Smethod.java @@ -1,6 +1,7 @@ package mindustry.annotations.util; import arc.struct.*; +import com.squareup.javapoet.*; import com.sun.source.tree.*; import mindustry.annotations.*; @@ -21,6 +22,10 @@ public class Smethod extends Selement{ return e.getReturnType(); } + public TypeName retn(){ + return TypeName.get(ret()); + } + public MethodTree tree(){ return BaseProcessor.trees.getTree(e); } diff --git a/annotations/src/main/java/mindustry/annotations/util/Stype.java b/annotations/src/main/java/mindustry/annotations/util/Stype.java index 5fe641afd3..9f49d0b3b7 100644 --- a/annotations/src/main/java/mindustry/annotations/util/Stype.java +++ b/annotations/src/main/java/mindustry/annotations/util/Stype.java @@ -1,6 +1,7 @@ package mindustry.annotations.util; import arc.struct.*; +import mindustry.annotations.*; import javax.lang.model.element.*; import javax.lang.model.type.*; @@ -12,6 +13,20 @@ public class Stype extends Selement{ super(typeElement); } + public Array superclasses(){ + Array out = new Array<>(); + Stype sup = superclass(); + while(!sup.superclass().name().equals("java.lang.Object")){ + out.add(sup); + sup = superclass(); + } + return out; + } + + public Stype superclass(){ + return new Stype((TypeElement)BaseProcessor.typeu.asElement(BaseProcessor.typeu.directSupertypes(mirror()).get(0))); + } + public A annotation(Class annotation){ return e.getAnnotation(annotation); } diff --git a/core/src/mindustry/entities/def/EntityDefs.java b/core/src/mindustry/entities/def/EntityDefs.java index 55c4d3cd3b..b44a906e80 100644 --- a/core/src/mindustry/entities/def/EntityDefs.java +++ b/core/src/mindustry/entities/def/EntityDefs.java @@ -3,6 +3,7 @@ package mindustry.entities.def; import arc.math.geom.*; import mindustry.annotations.Annotations.*; import mindustry.entities.units.*; +import mindustry.gen.*; import mindustry.net.*; public class EntityDefs{ @@ -24,7 +25,7 @@ public class EntityDefs{ } class Vel extends Pos{ - Vec2 vel = new Vec2(); + final Vec2 vel = new Vec2(); void update(){ x += vel.x; @@ -34,7 +35,7 @@ public class EntityDefs{ } class Status{ - Statuses statuses = new Statuses(); + final Statuses statuses = new Statuses(); void update(){ statuses.update(null); @@ -45,4 +46,15 @@ public class EntityDefs{ NetConnection connection; } + static void doSomethingWithAConnection(T value){ + value.setX(0); + value.setY(0); + value.getVel().set(100, 100f); + value.setDead(true); + value.getConnection().kick("you are dead"); + } + + static void test(){ + doSomethingWithAConnection(new PlayerGen()); + } }