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

fkfabian

User / Kunde

  • "fkfabian" is male
  • "fkfabian" started this thread

Posts: 221

Location: Hamburg

  • Send private message

1

Thursday, July 10th 2014, 5:11pm

[Spigot/Bukkit] % Bugg fix

Hey,

Ich habe ein Event geschrieben damit man den % Bugg fixen kann .
Lösung:
Ich prüfe ob die Message ein % enthält , falls das der Fall ist wird % durch [prozent] ersetzt und mit der Methode e.run() wird die Message dann über Bukkit.broadcast(...) ausgegeben und das ChatEvent gecancelt.

Vorher:

Nacher:


Event:

Spoiler Spoiler


Java 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package de.fkfabian.Events;

import java.util.Set;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class UserChatEvent extends Event{

	
	public static HandlerList handlers = new HandlerList();
	private AsyncPlayerChatEvent event;
	
	public UserChatEvent(AsyncPlayerChatEvent event) {
		this.event = event;
		this.event.setMessage(this.event.getMessage().replace("%", "[prozent]"));
	}

	public Player getPlayer() {
		return event.getPlayer();
	}
	
	public Set<Player> getRecipients() {
		return this.event.getRecipients();
	}
	
	public String getFormat() {
		return this.event.getFormat();
	}
	
	public void setFormat(String format) {
		this.event.setFormat(format);
	}
	
	public void setMessage(String msg) {
		this.event.setMessage(msg);
	}
	public void setCancelled(boolean b) {
		this.event.setCancelled(b);
	}
	public boolean isCancelled() {
		return this.event.isCancelled();
	}
	
	public String getMessage() {
		return event.getMessage();
	}
	
	public void run() {
		if(this.event.getMessage().contains("[prozent]")) {
			Bukkit.broadcastMessage(this.event.getFormat().replace("[prozent]", "%"));
			this.event.setCancelled(true);
		}		
	}

	@Override
	public HandlerList getHandlers() {
		return handlers;
	}
	public static HandlerList getHandlerList() {
		return handlers;
	}
}


Anwendung:

Spoiler Spoiler


Java source code

1
2
3
4
5
6
7
8
9
10
@EventHandler
	public void on(AsyncPlayerChatEvent e) {
		Bukkit.getPluginManager().callEvent(new UserChatEvent(e));
	}
	
	@EventHandler
	public void onUserchatEvent(UserChatEvent e) {
		//WhatEver
		e.run();
	}


TekkitTeam

User / Kunde

  • "TekkitTeam" is male

Posts: 1,349

Location: /home

Thanks: 2

  • Send private message

2

Thursday, July 10th 2014, 5:34pm

Was ist denn der % Bug?

fkfabian

User / Kunde

  • "fkfabian" is male
  • "fkfabian" started this thread

Posts: 221

Location: Hamburg

  • Send private message

3

Thursday, July 10th 2014, 5:43pm

@TekkitTeam Wenn du % in den Chat schreibst und das Format z.b so setzt :

Java source code

1
e.setFormat("§4"+ p.getName() +  " §8» " + e.getMessage().replace("&", "§"));

und dann ein % in deiner Nachricht drin ist dan wird dieses Format nicht genommen sondern das Standard.(Ich weiß nicht ob das bei allen Versionen von Spigot/Bukkit so ist )

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

4

Thursday, July 10th 2014, 6:21pm

Liegt wohl eher daran, dass du es falsch benutzt.
Format wird so gesetzt:

Java source code

1
2
3
4
String format = "<player>: <message>";
format = format.replace("<player>", "%1$s");
format = format.replace("<message>", "%2$s");
event.setFormat(format);

Und farbig machst du die Message dann mit

Java source code

1
event.setMessage(ChatColor.translateAlternateColorCodes('&', event.getMessage());


Wenn man das komplett falsch macht, dann braucht es einen auch nicht wundern wenn es Bugs gibt.
Das liegt dann aber am Programmierer und nicht an Bukkit.
Standard Standart eines Flamingos ist einbeinig.

CreepyEye

User / Kunde

  • "CreepyEye" is male

Posts: 65

Occupation: Longboarden,programmieren und zocken :)

  • Send private message

5

Friday, July 11th 2014, 5:59pm

Das % ersetzt ein backslash im chat wenn du %n schreibst machst du nen zeilen umbruch

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

6

Friday, July 11th 2014, 6:04pm

Das % ersetzt ein backslash im chat wenn du %n schreibst machst du nen zeilen umbruch

Hat doch nix mim Problem zu tun.
Und stimmen tut's soweit ich weiß auch nicht.
Evt. macht's ein Plugin bei dir so.
Standard Standart eines Flamingos ist einbeinig.

VoxelBoxStudios

User / Kunde

  • "VoxelBoxStudios" is male

Posts: 101

Location: Nordrhein-Westfalen

Occupation: Geschäftsführer VoxelBoxStudios® GbR

  • Send private message

7

Friday, July 11th 2014, 6:22pm

Das Prozentzeichen löst einen Fehler aus, wegen eines dadurch fehlerhaft kreierten Regexes.
Man sollte nie beim setzen des Formats getMessage() nuten, sondern %2$s.

CreepyEye

User / Kunde

  • "CreepyEye" is male

Posts: 65

Occupation: Longboarden,programmieren und zocken :)

  • Send private message

8

Saturday, July 12th 2014, 3:33am

Ich weis das dies mit dem %n ein zeilrnumbruch macht und wenn man jetzt \n in einen string macht ist das ja auch nen zeilenumbruch daher denke ich dass das % ein \ in nachrichten format ersetzt

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

9

Saturday, July 12th 2014, 7:40am

Würde mich stark wundern, wenn das so wäre.
Hast du vielleicht auch einfach nur das Format falsch gesetzt?
So wie der Threadersteller?
Standard Standart eines Flamingos ist einbeinig.

CreepyEye

User / Kunde

  • "CreepyEye" is male

Posts: 65

Occupation: Longboarden,programmieren und zocken :)

  • Send private message

10

Sunday, July 13th 2014, 8:54am

kann ich habe ne zeit lang e.setFormat("§a"+e.getPlayer().getName() + " §8> §6" + e.getMessage()); gemacht

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

Similar threads