You are not logged in.

  • Login

[Bukkit-Plugin] ArmorStand packets

Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

1

Thursday, April 30th 2015, 8:42am

ArmorStand packets

Hallo leute ich schreibe zurzeit das furniture plugin auf spigot. Dieses spawnt verschiedene armorstands die dann richtig angeordnet z.B ein zelt o.ä ergeben. Bisher läuft das spawnen so ab:

- ArmorStand spawnt
- Mit ItemStack als helm
- Mit ohne Arme
- Unsichtber/Sichtbar
- Der ArmorStand bekommt einen Namen.

Die ganzen Furnitures bekommen eine einzigartige ID jetzt meine frage wie kann ich so einen Armorstand über Paketen spawnen lassen und wie kann ich später wieder darauf zugreifen.

Ich habe noch nie mit Paketen/Protocollib gearbeitet. Wäre also sehr sinnvoll wenn mir jemand das erklären könnte.

Bisher spawne ich einen ArmorStand so wie unter setArmorstand es gecodet ist und unter getArmorstand steht wie ich wieder auf den Armorstand zurückgreif

daniel0916

User / Kunde

Posts: 998

  • Send private message

2

Thursday, April 30th 2015, 5:09pm

Ich habe hier mal einen kleinen Code geschrieben.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PacketContainer spawnPacket = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY);
	
		spawnPacket.getIntegers().
        	write(0, 10000). // Entity ID
        	write(1, 78). // Armor Stand
        	write(2, x).
        	write(3, y).
        	write(4, z).
        	write(5, yaw).
        	write(6, pitch).
        	write(7, 0); // Object Data
		
		try {
            ProtocolLibrary.getProtocolManager().sendServerPacket(player, spawnPacket);
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }


Ob es geht, weiß ich nicht. Du musst halt immer schauen, was du setzen musst. Entweder du verwendet wiki.vg dazu oder den https://github.com/dmulloy2/PacketWrappe…pawnEntity.java
Wenn du den Wrapper nutzt, kannst du einfach diese Java Datei zu deinem Plugin hinzufügen und dazu das spawnen vereinfachen, da es da dann einfach setEntityID, setType... gibt.

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

3

Friday, May 1st 2015, 2:15pm

Ok danke schonmal jetzt habe ich noch ein paar fragen:

Nach einen server Neustart muss ich diese neu spawmen oder ?

Wie greife ich anschließend mit verschiedenen events auf die armorstands zu ?

Diese armorstands sind dann gegen allen Kommandos resistent also können nicht mehr mit /kill @e getötet werden oder ?

Entschuldigung das ich so blöd frage aber ich hab mich die letzten Jahre nie mit pack

Gebauer_01

User / Kunde

Posts: 2,304

  • Send private message

4

Friday, May 1st 2015, 6:54pm

Nach einen server Neustart muss ich diese neu spawmen oder ?


Du musst sie jedem Spieler einzeln senden, wenn er den Server betreten hat, damit er sie sehen kann.

Wie greife ich anschließend mit verschiedenen events auf die armorstands zu ?


Garnicht, da sie für den Server nicht existieren, sondern nur dem Spieler vorgegaukelt werden.

Diese armorstands sind dann gegen allen Kommandos resistent also können nicht mehr mit /kill @e getötet werden oder ?


Ja

Entschuldigung das ich so blöd frage


Es gibt keine blöden Fragen.

(Das alles ist natürlich auf @daniel0916 Code bezogen)

daniel0916

User / Kunde

Posts: 998

  • Send private message

5

Friday, May 1st 2015, 7:12pm

@Gebauer_01
Deine Anworten passen nicht nur bei meinen Code, sondern eigentlich bei allen, wo man Packets verwendet.
Wenn er es normal mit Bukkit spawnt, dann stimmt es natürlich nicht.

@ste3et_c0st
Hat denn mein Code so ungefähr geklappt?

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

6

Friday, May 1st 2015, 10:15pm

Nach einen server Neustart muss ich diese neu spawmen oder ?


Du musst sie jedem Spieler einzeln senden, wenn er den Server betreten hat, damit er sie sehen kann.

Wie greife ich anschließend mit verschiedenen events auf die armorstands zu ?


Garnicht, da sie für den Server nicht existieren, sondern nur dem Spieler vorgegaukelt werden.

Diese armorstands sind dann gegen allen Kommandos resistent also können nicht mehr mit /kill @e getötet werden oder ?


Ja

Entschuldigung das ich so blöd frage


Es gibt keine blöden Fragen.

(Das alles ist natürlich auf @daniel0916 Code bezogen)


Ok danke für die antworten ich muss wie bekomme ich dann heraus ob ein Spieler z.B rechtsklick auf einen meiner armorstands die ich über Packete schicke.
Ich frag lieber davor bevor ich das Plugin umcode hast du eine ahnung ?

Mfg.: Ste3et_C0st

Gebauer_01

User / Kunde

Posts: 2,304

  • Send private message

7

Friday, May 1st 2015, 10:48pm

Das geht leider nicht. Dazu müsstest du die Entities über die BukkitMethode spawnen.

daniel0916

User / Kunde

Posts: 998

  • Send private message

8

Friday, May 1st 2015, 11:42pm

Wenn ArmorStands genauso wie Entites interagieren, funktioniert das sicher. Du musst halt dann nur das Packet abfangen, bevor es der Server wegwirft, weil es dieses Entity für Bukkit ja nicht gibt.

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

9

Saturday, May 2nd 2015, 1:38am

Hmm das ist echt blöd es ist halt einfach so das die leute die mein plugin installiert haben gerne mal /stoplag oder /kill @e o.ä eingeben und dann verschwinden eben die ArmorStands. Das kann man ja leider nicht verhindern.

Mfg.: Ste3et_C0st

Gebauer_01

User / Kunde

Posts: 2,304

  • Send private message

10

Saturday, May 2nd 2015, 9:46am

Das kann man ja leider nicht verhindern.


Gibt es nicht ein EntityDespawnEvend bzw. EntityDeathEvent? Die könntest du dann abfangen und canceln.

MfG Gebauer_01

Rso

User / Kunde

  • "Rso" is male

Posts: 434

  • Send private message

11

Saturday, May 2nd 2015, 10:37am

Das kann man ja leider nicht verhindern.


Gibt es nicht ein EntityDespawnEvend bzw. EntityDeathEvent? Die könntest du dann abfangen und canceln.

MfG Gebauer_01

Es gibt ein EntityDeathEvent, aber das kannst du nicht canceln. Ich würde es so machen: Man fragt im Event ab, ob dieser ArmorStand, der von dir ist "stirbt", dann den einfach wd spawnen.

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

12

Monday, May 11th 2015, 8:05pm

Ok um nochmal auf die events zurückzukommen ich hab das nun mit den Paketen gelassen.
Meine frage ist nun soll ich jeden object die events zum zerstören z.b einzeln zuweisen oder soll ich die objecte zurück casten was ist effizienter ?

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

13

Wednesday, May 13th 2015, 7:02pm

Nachdem sich nun viele Leute darüber beschwert hatten das es zu stark laggt muss ich nun wohl oder übel mit packeten arbeiten mein jetziger code sieht nun so aus:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PacketContainer packet = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY);
						
						packet.getIntegers().write(0, 10000);
						packet.getIntegers().write(1, (int) EntityType.ARMOR_STAND.getTypeId());
						packet.getIntegers().write(2, (int) p.getLocation().getX() * 32);
						packet.getIntegers().write(3, (int) p.getLocation().getY() * 32);
						packet.getIntegers().write(4, (int) p.getLocation().getZ() * 32);
						packet.getIntegers().write(5, (int) p.getLocation().getYaw());
						packet.getIntegers().write(6, (int) p.getLocation().getPitch());
						packet.getIntegers().write(7, 0); // Object Data

						
						try {
							main.getInstance().protocolManager.sendServerPacket(p, packet);
				            sender.sendMessage("test");
				        } catch (InvocationTargetException e) {
				            e.printStackTrace();
				        }
						return true;


ich bekomm die nachricht test zugeschickt dich ich zu debug zwecken eingebaut habe.
Allerdings sehe ich nicht den armorstand.

daniel0916

User / Kunde

Posts: 998

  • Send private message

14

Wednesday, May 13th 2015, 10:23pm

Für die Koordinaten würde ich es so machen:
(int) Math.floor(value * 32.0D)
Also: packet.getIntegers().write(2, (int) Math.floor(p.getLocation().getX( * 32.0D));
Und das dann für y und z auch.

Vielleicht darf die Object Data auch nicht leer sein. Wirst du denn gekickt oder irgendetwas sonst?

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

15

Thursday, May 14th 2015, 1:22am

Ne leider passiert garnichts ich fliege weder vom Server noch bekomme ich einen error in der Console.
Villeicht darf die Object data wirklich nicht null sein.

daniel0916

User / Kunde

Posts: 998

  • Send private message

16

Thursday, May 14th 2015, 1:43pm

Verwende mal statt: EntityType.ARMOR_STAND.getTypeId()
Einfach die Zahl: 78

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

17

Thursday, May 14th 2015, 5:26pm

Ich arbeite nun mit dem Wrapper gedöns ^^ also das spawnen eines simplen armorstands habe ich hinbekommen nun meine frage was ich falsch mache denn ich bekomme einen Error in der Console das hier wäre mein code:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
	static int i = 478;
	
	public static int getNewID(){i+=1; return i;}
	
	public static WrapperPlayServerSpawnEntityLiving returnArmorStandPacket(Location l, BodyPart part, EulerAngle angle, ItemStack is, Boolean mini, Boolean invisible){
		WrapperPlayServerSpawnEntityLiving as = new WrapperPlayServerSpawnEntityLiving();
		as.setType(EntityType.ARMOR_STAND);
		as.setEntityID(getNewID());
		as.setX(l.getX());
		as.setY(l.getY());
		as.setZ(l.getZ());
		as.setYaw(l.getYaw());
		
		WrappedDataWatcher watcher = as.getMetadata();
		switch(part){
			case HEAD : if(angle!=null) watcher.setObject(11, angle);
			case BODY : if(angle!=null) watcher.setObject(12, angle);
			case LEFT_ARM : if(angle!=null) watcher.setObject(13, angle);
			case RIGHT_ARM : if(angle!=null) watcher.setObject(14, angle);
			case LEFT_LEG : if(angle!=null) watcher.setObject(15, angle);
			case RIGHT_LEG : if(angle!=null) watcher.setObject(16, angle);
		}
		
		if(mini!=null) watcher.setObject(10, 0x01, mini);
		if(invisible!=null) watcher.setObject(10, 0x16, mini);
		
		watcher.setObject(10, 0x02, false);
		watcher.setObject(10, 0x04, false);
		watcher.setObject(10, 0x08, false);
		
		as.setMetadata(watcher);
		return as;
	}


und zwar soll diese Stelle falsch sein:

Source code

1
if(invisible!=null) watcher.setObject(10, 0x16, mini);

daniel0916

User / Kunde

Posts: 998

  • Send private message

18

Thursday, May 14th 2015, 5:57pm

Wie wäre es, wenn du den Error schreibst?

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

19

Thursday, May 14th 2015, 8:15pm

Das wäre der error

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[18:19:36] [Server thread/ERROR]: [HolographicDisplays] Unhandled exception number 128 occured in onPacketSending(PacketEvent) for HolographicDisplays
java.lang.IllegalArgumentException: Unable to find a method that matches {modifiers=[required: 0, banned: 1000], params=[{Type: class name of net\.minecraft\.(\p{javaJavaIdentifierStart}\p{javaJavaIdentifierPart}*\.)+\p{javaJavaIdentifierStart}\p{javaJavaIdentifierPart}*, Index: 0}, {Type: Exact class java.lang.String, Index: 1}, {Type: Exact int, Index: 2}, {Type: Exact int, Index: 3}, {Type: Exact int, Index: 4}]}
	at com.comphenix.protocol.reflect.FuzzyReflection.getMethod(FuzzyReflection.java:173) ~[ProtocolLib.jar:?]
	at com.comphenix.protocol.utility.MinecraftReflection.getChunkPositionClass(MinecraftReflection.java:1192) ~[ProtocolLib.jar:?]
	at com.comphenix.protocol.utility.MinecraftReflection.isChunkPosition(MinecraftReflection.java:426) ~[ProtocolLib.jar:?]
	at com.comphenix.protocol.wrappers.WrappedWatchableObject.getClonedValue(WrappedWatchableObject.java:427) ~[ProtocolLib.jar:?]
	at com.comphenix.protocol.wrappers.WrappedWatchableObject.deepClone(WrappedWatchableObject.java:415) ~[ProtocolLib.jar:?]
	at com.gmail.filoghost.holographicdisplays.bridge.protocollib.ProtocolLibHook$1.onPacketSending(ProtocolLibHook.java:153) ~[HolographicDisplays.jar:?]
	at com.comphenix.protocol.injector.SortedPacketListenerList.invokeSendingListener(SortedPacketListenerList.java:195) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:149) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:637) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.PacketFilterManager.invokePacketSending(PacketFilterManager.java:613) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.NettyProtocolInjector.packetQueued(NettyProtocolInjector.java:286) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.NettyProtocolInjector.onPacketSending(NettyProtocolInjector.java:254) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.ChannelInjector.processSending(ChannelInjector.java:368) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.ChannelInjector.access$500(ChannelInjector.java:61) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.ChannelInjector$5.handleScheduled(ChannelInjector.java:334) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.ChannelInjector$5.onMessageScheduled(ChannelInjector.java:302) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.ChannelProxy$2.schedulingRunnable(ChannelProxy.java:110) [ProtocolLib.jar:?]
	at com.comphenix.protocol.injector.netty.EventLoopProxy.execute(EventLoopProxy.java:79) [ProtocolLib.jar:?]
	at net.minecraft.server.v1_8_R2.NetworkManager.a(NetworkManager.java:192) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.NetworkManager.handle(NetworkManager.java:141) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.PlayerConnection.sendPacket(PlayerConnection.java:884) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.EntityTrackerEntry.updatePlayer(EntityTrackerEntry.java:332) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.EntityTracker.updatePlayers(EntityTracker.java:191) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:800) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:368) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:651) [Spigot:git-Spigot-2ec6f06-7722428]
	at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:554) [Spigot:git-Spigot-2ec6f06-7722428]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]

ste3et_c0st

User / Kunde

  • "ste3et_c0st" is male
  • "ste3et_c0st" started this thread

Posts: 245

Location: Regensburg

Occupation: Elektroniker für Maschinen und Antriebstechnik

  • Send private message

20

Friday, May 15th 2015, 8:26pm

Ich bräuchte immer noch hilfe.

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net

Similar threads