[1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflect)

Hier könnt ihr anderen Leuten helfen, indem ihr Anleitungen oder praktische Codesegmente zur Verfügung stellt.

[1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflect)

Beitragvon GERVobis » Do 26. Mär 2015, 21:57

Hey Leute ich habe eine kleine aber feine Klasse geschrieben mit der ihr Entitys ganz leicht modifizieren könnt

[INFO]Ihr braucht die Spigot 1.8.3[INFO]

Ich habe JavaDocs hinzugefügt der Rest müsste sich von alleine klären ansonsten fragen in die Kommentare :D

Code: Alles auswählen
  1. package packagename;
  2. import java.lang.reflect.Field;
  3. import net.minecraft.server.v1_8_R2.EntityLiving;
  4. import net.minecraft.server.v1_8_R2.NBTTagCompound;
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.EntityEffect;
  7. import org.bukkit.Location;
  8. import org.bukkit.craftbukkit.v1_8_R2.entity.CraftCreature;
  9. import org.bukkit.craftbukkit.v1_8_R2.entity.CraftEntity;
  10. import org.bukkit.entity.Entity;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.plugin.Plugin;
  13. /**
  14. * Modifiziere ein {@link Entity}
  15. * <p>
  16. * Made by GERVobis
  17. */
  18. public class EntityModifier {
  19.         static Entity entity;
  20.         static CraftEntity craftentity;
  21.         static net.minecraft.server.v1_8_R2.Entity entityS;
  22.         static int scheduler;
  23.         static Plugin plugin;
  24.         static Player player = null;
  25.         static float Speed;
  26.         @SuppressWarnings("static-access")
  27.         public EntityModifier(Entity entity,Plugin plugin) {
  28.                 this.entity = entity;
  29.                 this.craftentity = ((CraftEntity) entity);
  30.                 this.entityS = craftentity.getHandle();
  31.                 this.plugin = plugin;
  32.         }
  33.         /**
  34.          * Modifiziere ein {@link Entity} mit dem Inhalt des Builders
  35.          */
  36.         public static Builder modify() {
  37.                 return new Builder();
  38.         }
  39.         public static final class Builder {
  40.                 /**
  41.                  * Setzt den Anzeigenamen vom ausgewählten {@link Entity}
  42.                  *
  43.                  * @param display
  44.                  * @return
  45.                  */
  46.                 public Builder setDisplayName(String display) {
  47.                         entity.setCustomName(display);
  48.                         entity.setCustomNameVisible(true);
  49.                         return this;
  50.                 }
  51.                 /**
  52.                  * Setzt die Anzeigenamensichtbarkeit vom ausgewählten {@link Entity}
  53.                  *
  54.                  * @param visible
  55.                  * @return
  56.                  */
  57.                 public Builder setDisplayNameVisible(Boolean visible) {
  58.                         entity.setCustomNameVisible(visible);
  59.                         return this;
  60.                 }
  61.                 /**
  62.                  * Spielt ein Effekt beim ausgewählten {@link Entity}
  63.                  *
  64.                  * @param entityeffect
  65.                  * @return
  66.                  */
  67.                 public Builder playEffekt(EntityEffect entityeffect) {
  68.                         entity.playEffect(entityeffect);
  69.                         return this;
  70.                 }
  71.                 /**
  72.                  * Entfernt das ausgewählten {@link Entity}
  73.                  *
  74.                  * @param null
  75.                  * @return
  76.                  */
  77.                 public Builder remove() {
  78.                         entity.remove();
  79.                         return this;
  80.                 }
  81.                 /**
  82.                  * Setzt den Passenger des ausgewählten {@link Entity}
  83.                  *
  84.                  * @param passenger
  85.                  * @return
  86.                  */
  87.                 public Builder setPassenger(Entity passenger) {
  88.                         entity.setPassenger(passenger);
  89.                         return this;
  90.                 }
  91.                 /**
  92.                  * Setzt die FireTicks vom ausgewählten {@link Entity}
  93.                  *
  94.                  * @param ticks
  95.                  * @return
  96.                  */
  97.                 public Builder setFireTicks(int ticks) {
  98.                         entity.setFireTicks(ticks);
  99.                         return this;
  100.                 }
  101.                 /**
  102.                  * Setzt die Location vom ausgewählten {@link Entity}
  103.                  *
  104.                  * @param location
  105.                  * @return
  106.                  */
  107.                 public Builder setLocation(Location location) {
  108.                         teleport(location);
  109.                         return this;
  110.                 }
  111.                
  112.                 /**
  113.                  * Setzt die Yaw und Pitch vom ausgewählten {@link Entity}
  114.                  *
  115.                  * @param location
  116.                  * @return
  117.                  */
  118.                 public Builder setYawPitch(float yaw,float pitch) {
  119.                         Location loc = entity.getLocation().clone();
  120.                         teleport(new  Location(loc.getWorld(),loc.getX(),loc.getY(),loc.getZ(),yaw,pitch));
  121.                         return this;
  122.                 }
  123.                
  124.                 /**
  125.                  * Teleportiert das ausgewählte {@link Entity}
  126.                  *
  127.                  * @param location
  128.                  * @return
  129.                  */
  130.                 public Builder teleport(Location location) {
  131.                         entity.teleport(location);
  132.                         return this;
  133.                 }
  134.                 /**
  135.                  * Tötet das ausgewählte {@link Entity}
  136.                  *
  137.                  * @param null
  138.                  * @return
  139.                  */
  140.                 public Builder die() {
  141.                         entityS.die();
  142.                         return this;
  143.                 }
  144.                 /**
  145.                  * Setzt die Sichtbarkeit des ausgewählten {@link Entity}
  146.                  *
  147.                  * @param invisible
  148.                  * @return
  149.                  */
  150.                 public Builder setInvisible(boolean invisible) {
  151.                         entityS.setInvisible(invisible);
  152.                         return this;
  153.                 }
  154.                 /**
  155.                  * Setzt die eigenschaft noClip für das ausgewählte {@link Entity}
  156.                  *
  157.                  * @param noClip
  158.                  * @return
  159.                  */
  160.                 public Builder noClip(boolean noClip) {
  161.                         entityS.noclip = noClip;
  162.                         return this;
  163.                 }
  164.                 /**
  165.                  * Macht das ausgewählte {@link Entity} unsterblich
  166.                  *
  167.                  * @param invulnerable
  168.                  * @return
  169.                  */
  170.                 public Builder setInvulnerable(boolean invulnerable) {
  171.                         try {
  172.                                 Field invulnerableField = net.minecraft.server.v1_8_R2.Entity.class
  173.                                                 .getDeclaredField("invulnerable");
  174.                                 invulnerableField.setAccessible(true);
  175.                                 invulnerableField.setBoolean(entityS, invulnerable);
  176.                         } catch (Exception ex) {
  177.                                 ex.printStackTrace();
  178.                         }
  179.                         return this;
  180.                 }
  181.                 /**
  182.                  * Setzt die eigenschaft noAi für das ausgewählte {@link Entity}
  183.                  *
  184.                  * @param noAI
  185.                  * @return
  186.                  */       
  187.                 public Builder setNoAI(boolean noAI) {
  188.                         NBTTagCompound tag = new NBTTagCompound();
  189.                         entityS.c(tag);
  190.                         tag.setBoolean("NoAI", noAI);
  191.                         EntityLiving el = (EntityLiving) entityS;
  192.                         el.a(tag);
  193.                         return this;
  194.                 }
  195.                
  196.                  /**
  197.                  * Setzt die eigenschaft Silent für das ausgewählte {@link Entity}
  198.                  *
  199.                  * @param silent
  200.                  * @return
  201.                  */
  202.                 public Builder setSilent(boolean silent) {
  203.                         NBTTagCompound tag = new NBTTagCompound();
  204.                         entityS.c(tag);
  205.                         tag.setBoolean("Silent", silent);
  206.                         EntityLiving el = (EntityLiving) entityS;
  207.                         el.a(tag);
  208.                         return this;
  209.                 }
  210.                 /**
  211.                  * Setzt die eigenschaft canpickuploot für das ausgewählte {@link Entity}
  212.                  *
  213.                  * @param canpickuploot
  214.                  * @return
  215.                  */
  216.                 public Builder setCanPickUpLoot(boolean canpickuploot) {
  217.                         NBTTagCompound tag = new NBTTagCompound();
  218.                         entityS.c(tag);
  219.                         tag.setBoolean("CanPickUpLoot", canpickuploot);
  220.                         EntityLiving el = (EntityLiving) entityS;
  221.                         el.a(tag);
  222.                         return this;
  223.                 }
  224.                
  225.                 /**
  226.                  * Setzt das Leben für das ausgewählte {@link Entity}
  227.                  *
  228.                  * @param health
  229.                  * @return
  230.                  */
  231.                 public Builder setHealth(float health) {
  232.                         NBTTagCompound tag = new NBTTagCompound();
  233.                         entityS.c(tag);
  234.                         tag.setFloat("HealF", health);
  235.                         EntityLiving el = (EntityLiving) entityS;
  236.                         el.a(tag);
  237.                         return this;
  238.                 }
  239.                
  240.                 /**
  241.                  * Setzt die eigenschaft canDespawn für das ausgewählte {@link Entity}
  242.                  *
  243.                  * @param candespawn
  244.                  * @return
  245.                  */
  246.                 public Builder setCanDespawn(boolean candespawn) {
  247.                         candespawn = !candespawn;
  248.                         NBTTagCompound tag = new NBTTagCompound();
  249.                         entityS.c(tag);
  250.                         tag.setBoolean("PersistenceRequired", candespawn);
  251.                         EntityLiving el = (EntityLiving) entityS;
  252.                         el.a(tag);
  253.                         return this;
  254.                 }
  255.                
  256.                 /**
  257.                  * Läst das ausgewählte {@link Entity} zu dieser Location laufen
  258.                  *
  259.                  * @param location
  260.                  * @param speed
  261.                  * @return
  262.                  */
  263.                 public Builder walkToLocation(Location location, float speed) {
  264.                         ((CraftCreature) entity)
  265.                                         .getHandle()
  266.                                         .getNavigation()
  267.                                         .a(location.getX(), location.getY(), location.getZ(), speed);
  268.                         return this;
  269.                 }
  270.                 /**
  271.                  * Läst das ausgewählte {@link Entity} den Spieler folgen
  272.                  *
  273.                  * @param target
  274.                  * @param speed
  275.                  * @return
  276.                  */
  277.                 public Builder followPlayer(Player target, float speed) {
  278.                         player = target;
  279.                         Speed = speed;
  280.                         scheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin,
  281.                                         new Runnable() {
  282.                                                 @SuppressWarnings("deprecation")
  283.                                                 public void run() {
  284.                                                         double distance = entity.getLocation().distance(
  285.                                                                         player.getLocation());
  286.                                                         if (distance < 11) {
  287.                                                                 float speed = Speed;
  288.                                                                 if (distance < 3) {
  289.                                                                         speed = 0;
  290.                                                                 }
  291.                                                                 ((CraftCreature) entity)
  292.                                                                                 .getHandle()
  293.                                                                                 .getNavigation()
  294.                                                                                 .a(player.getLocation().getX(),
  295.                                                                                                 player.getLocation().getY(),
  296.                                                                                                 player.getLocation().getZ(),
  297.                                                                                                 speed);
  298.                                                         } else {
  299.                                                                 if (player.isOnGround())
  300.                                                                         entity.teleport(player);
  301.                                                         }
  302.                                                 }
  303.                                         }, 0, 1);
  304.                         return this;
  305.                 }
  306.                 /**
  307.                  * Stop das ausgewählte {@link Entity} den Spieler zu folgen
  308.                  *
  309.                  * @param location
  310.                  * @param speed
  311.                  * @return
  312.                  */
  313.                 public Builder stopFollowingPlayer() {
  314.                         Bukkit.getScheduler().cancelTask(scheduler);
  315.                         return this;
  316.                 }
  317.                 /**
  318.                  * Gibt das modifizierte {@link Entity} zurück
  319.                  *
  320.                  * @return {@link Entity}
  321.                  */
  322.                 public Entity build() {
  323.                         return entity;
  324.                 }
  325.         }
  326. }



Diese Klasse wird z.b. so aufgerufen:

Code: Alles auswählen
  1. Player player = Bukkit.getPlayer("GERVobis");
  2. Entity entity = player.getWorld().spawnEntity(player.getLocation(), EntityType.VILLAGER);
  3. EntityModifier e = new EntityModifier(entity,plugin); //plugin = this (Plugin)
  4. e.modify().setDisplayName("SHOP").setInvulnerable(true).setNoAI(true);
Zuletzt geändert von GERVobis am Sa 28. Mär 2015, 21:23, insgesamt 2-mal geändert.
Du möchtest programmieren lernen oder dein Bukkit-/Spigot-Wissen erweitern?
Hier habe ich für dich kostenlose Tutorials: https://www.youtube.com/channel/UCQx4al ... 0KG8IRMHaw
Benutzeravatar
GERVobis
 
Beiträge: 19
Registriert: Mi 25. Mär 2015, 19:11
Wohnort: Brandenburg

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon Onemeter » Fr 27. Mär 2015, 09:58

Hey,

vom kurzem rüber schauen, finde ich das sie schon ein paar sehr nützliche Funktionen enthält, ich glaube ich werde die Klasse mal benutzen und schauen was genau noch so mit entities machbar ist über solche Methoden.

Aber trotzdem eine schöne übersichtliche Klasse ;).
Bei Fragen stehe ich gerne weiter zur verfügung und verbleibe mit freundlichen Grüßen,
Onemeter
Benutzeravatar
Onemeter
 
Beiträge: 131
Registriert: So 23. Jun 2013, 16:55
Wohnort: Bayern

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon PostCrafter » Fr 27. Mär 2015, 12:27

Was ich noch nicht verstehe (so wie auch bei deinem ItemModifier), ist warum du eine extra Klasse (und somit ein extra Objekt) für den Builder hast.
Wieso verwendest du nicht einfach direkt den EntityModifier (bzw den ItemModifier) als Builder?

Ich habe mir die Funktionen noch nicht genau angeschaut, aber auch diese Klasse scheint relativ nützlich sein zu können.
TeamSpeak-Server zur freien Nutzung: postcrafter.de
Benutzeravatar
PostCrafter
Administrator
 
Beiträge: 1443
Registriert: Do 6. Jun 2013, 19:16
Wohnort: Ebersberg

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon GERVobis » Fr 27. Mär 2015, 13:31

PostCrafter hat geschrieben:Was ich noch nicht verstehe (so wie auch bei deinem ItemModifier), ist warum du eine extra Klasse (und somit ein extra Objekt) für den Builder hast.
Wieso verwendest du nicht einfach direkt den EntityModifier (bzw den ItemModifier) als Builder?

Ich habe mir die Funktionen noch nicht genau angeschaut, aber auch diese Klasse scheint relativ nützlich sein zu können.


Wie im anderen Thread schon gesagt ich habe überhaupt kein plan von buildern :D arbeite erst seit vorgestern damit
Du möchtest programmieren lernen oder dein Bukkit-/Spigot-Wissen erweitern?
Hier habe ich für dich kostenlose Tutorials: https://www.youtube.com/channel/UCQx4al ... 0KG8IRMHaw
Benutzeravatar
GERVobis
 
Beiträge: 19
Registriert: Mi 25. Mär 2015, 19:11
Wohnort: Brandenburg

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon GERVobis » Fr 27. Mär 2015, 13:32

Onemeter hat geschrieben:Hey,

vom kurzem rüber schauen, finde ich das sie schon ein paar sehr nützliche Funktionen enthält, ich glaube ich werde die Klasse mal benutzen und schauen was genau noch so mit entities machbar ist über solche Methoden.

Aber trotzdem eine schöne übersichtliche Klasse ;).


Danke ich werde noch Funktionen hinzufügen :D
Du möchtest programmieren lernen oder dein Bukkit-/Spigot-Wissen erweitern?
Hier habe ich für dich kostenlose Tutorials: https://www.youtube.com/channel/UCQx4al ... 0KG8IRMHaw
Benutzeravatar
GERVobis
 
Beiträge: 19
Registriert: Mi 25. Mär 2015, 19:11
Wohnort: Brandenburg

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon Admiral_Zott » Sa 28. Mär 2015, 13:23

Also das mit dem Yaw und Pitch klappt anscheinend noch nicht ganz so. Bei mir drehen die Villager sich nicht ich die Location, wo ich hingeschaut habe. Die gucken entweder nach oben oder nach unten. Aber nicht nach rechts oder nach links.
Bild
Außerdem machen die Entitys noch Geräusche, was man auch noch ausschalten können sollte.
Benutzeravatar
Admiral_Zott
 
Beiträge: 220
Registriert: Do 10. Apr 2014, 11:56
Wohnort: Zu Hause

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon GERVobis » Sa 28. Mär 2015, 21:25

Admiral_Zott hat geschrieben:Also das mit dem Yaw und Pitch klappt anscheinend noch nicht ganz so. Bei mir drehen die Villager sich nicht ich die Location, wo ich hingeschaut habe. Die gucken entweder nach oben oder nach unten. Aber nicht nach rechts oder nach links.
Bild
Außerdem machen die Entitys noch Geräusche, was man auch noch ausschalten können sollte.


Danke das mit Yaw und Pitch Versuch ich noch zu fixen und setSilent habe ich eingefügt kann sie leider nicht testen bin am Handy :)
Du möchtest programmieren lernen oder dein Bukkit-/Spigot-Wissen erweitern?
Hier habe ich für dich kostenlose Tutorials: https://www.youtube.com/channel/UCQx4al ... 0KG8IRMHaw
Benutzeravatar
GERVobis
 
Beiträge: 19
Registriert: Mi 25. Mär 2015, 19:11
Wohnort: Brandenburg

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon Rincewind34 » Do 28. Mai 2015, 20:19

Also einige dieser Methoden leuchten mir nicht gans ein. Ich könnte mir gut vorstellen, dass nach dem Aufruf von 'die()' oder 'remove()' eine NullPointer fliegt wenn du dann noch weiter Methoden aufrufst. Dann ist natürlich auch die Frage, wieso man ein Entity "buildet" wenn es während des Vorgangs direkt tötet.
Benutzeravatar
Rincewind34
 
Beiträge: 2
Registriert: Fr 15. Mai 2015, 09:17

Re: [1.8.3] EntityModfier - Entitys Modifizieren (NBT|Reflec

Beitragvon Namnodorel » Do 23. Jul 2015, 13:10

An sich ne ganz praktische Sache, aber es sind nur die wirklich grundlegenden Optionen da... Was mir definitiv noch fehlt, sind Optionen zum ändern der Rüstung (vllt. auch mit Metadaten), Drops, etc.

Auch nicht soo schlecht (aber natürlich eine ziemlich große Arbeit) wären dann halt Entityspezifische sachen, wie bei Pferden der Typ, aber sowas braucht man ja auch nicht immer.
Benutzeravatar
Namnodorel
 
Beiträge: 8
Registriert: So 29. Mär 2015, 14:38


Zurück zu Anleitungen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste