You are not logged in.

  • Login
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.

Fuzzlemann

User / Kunde

  • "Fuzzlemann" is male
  • "Fuzzlemann" started this thread

Posts: 234

Occupation: Schüler

  • Send private message

1

Saturday, November 15th 2014, 10:56pm

Rüstungs-Unsichtbarkeits-Bug

Hallo,

wenn ich Leute mit meinem Code disguise, werden deren Rüstung nicht mehr sichtbar. Erst nach einem Schlag mit einer Faust von einem anderen, werden sie wieder sichtbar. (Nein PLAYER.damage(..); geht nicht)

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
	@SuppressWarnings("deprecation")
	public void disguisePlayer(final Player p, String newName) {
		EntityHuman eh = ((CraftPlayer) p).getHandle();
		PacketPlayOutEntityDestroy p29 = new PacketPlayOutEntityDestroy(
				new int[] { p.getEntityId() });
		PacketPlayOutNamedEntitySpawn p20 = new PacketPlayOutNamedEntitySpawn(
				eh);
		try {
			java.lang.reflect.Field profileField = p20.getClass()
					.getDeclaredField("b");
			profileField.setAccessible(true);
			profileField.set(p20, new GameProfile(p.getUniqueId(), newName));
		} catch (Exception e) {
		}
		
		for (Player o : Bukkit.getOnlinePlayers()) {
			if (!o.getName().equals(p.getName())) {
				((CraftPlayer) o).getHandle().playerConnection.sendPacket(p29);
				((CraftPlayer) o).getHandle().playerConnection.sendPacket(p20);
			}
		}
		
	}
Mit freundlichen Grüßen,
Fuzzlemann

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

2

Saturday, November 15th 2014, 11:07pm

Du musst mit Packets auch noch die Rüstung neu senden.
Eine andere (aber minimal unschönere) Möglichkeit, wäre es dem Spieler die Rüstung weg zu nehmen und neu zu setzen. Evt. reicht sogar schon neu setzen.
Also:

Java source code

1
player.getInventory().setArmorContents(player.getInvebtory().getArmorContents());

oder

Java source code

1
2
3
ItemStack[] armor = player.getInventory().getArmorContents();
player.getInventory().setArmorContents(new ItemStack[4]);
player.getInventory().setArmorContents(armor);


Letztere Variante sollte auf jeden Fall gehen.
Standard Standart eines Flamingos ist einbeinig.

Fuzzlemann

User / Kunde

  • "Fuzzlemann" is male
  • "Fuzzlemann" started this thread

Posts: 234

Occupation: Schüler

  • Send private message

3

Sunday, November 16th 2014, 12:36am

Geht net :/

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
@SuppressWarnings("deprecation")
	public void disguisePlayer(final Player p, String newName) {
		EntityHuman eh = ((CraftPlayer) p).getHandle();
		PacketPlayOutEntityDestroy p29 = new PacketPlayOutEntityDestroy(
				new int[] { p.getEntityId() });
		PacketPlayOutNamedEntitySpawn p20 = new PacketPlayOutNamedEntitySpawn(
				eh);
		try {
			java.lang.reflect.Field profileField = p20.getClass()
					.getDeclaredField("b");
			profileField.setAccessible(true);
			profileField.set(p20, new GameProfile(p.getUniqueId(), newName));
		} catch (Exception e) {
		}
		
		for (Player o : Bukkit.getOnlinePlayers()) {
			if (!o.getName().equals(p.getName())) {
				((CraftPlayer) o).getHandle().playerConnection.sendPacket(p29);
				((CraftPlayer) o).getHandle().playerConnection.sendPacket(p20);
			}
		}
		ItemStack[] armor = p.getInventory().getArmorContents();
		p.getInventory().setArmorContents(new ItemStack[4]);
		p.getInventory().setArmorContents(armor);
		
	}


Source code

1
p.updateInventory();

geht auch nicht.
Mit freundlichen Grüßen,
Fuzzlemann

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

4

Sunday, November 16th 2014, 9:24am

Hmm, versuch mal den Code mit ner kurzen Verzögerung aus zu führen.
Standard Standart eines Flamingos ist einbeinig.

ketrwu14

Moderator

  • "ketrwu14" is male

Posts: 1,430

Thanks: 2

  • Send private message

5

Sunday, November 16th 2014, 10:59am

Oder call einfach das DamageEvent vielleicht geht das. XD

Fuzzlemann

User / Kunde

  • "Fuzzlemann" is male
  • "Fuzzlemann" started this thread

Posts: 234

Occupation: Schüler

  • Send private message

6

Sunday, November 16th 2014, 11:18am

@BtoBastian

Werde ich probieren.

@ketrwu14

Ich glaube, dass das nicht hilft, da mit .damage es auch nicht geht.

//edit

@BtoBastian

Geht nicht :(
Mit freundlichen Grüßen,
Fuzzlemann

DevMultiworldLP

User / Kunde

  • "DevMultiworldLP" is male

Posts: 333

  • Send private message

7

Sunday, November 16th 2014, 11:22am

Hatte früher ein ähnliches Problem...Habe ich mit Scheduler gelöst, wobei ich manchmal die Logik darin nicht verstanden habe...Den habe ich dann sofort gestoppt

Vllt hilft es dir ;)
Biete Bukkit-Plugin Programmierung | Link

Fuzzlemann

User / Kunde

  • "Fuzzlemann" is male
  • "Fuzzlemann" started this thread

Posts: 234

Occupation: Schüler

  • Send private message

8

Sunday, November 16th 2014, 2:19pm

@BtoBastian

Geht nicht


Hab ich doch gesagt, dass die Lösung nicht geht :(
Mit freundlichen Grüßen,
Fuzzlemann

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

Similar threads