Sie sind nicht angemeldet.

  • Anmelden

Lieber Besucher, herzlich willkommen bei: Nitrado.net Prepaid Gameserver Community-Support. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

1

Samstag, 16. Juli 2016, 02:04

[Tutorial] Sonderzeichen sowie Umlaute in der YAML benutzen

Hallo liebe Nitrado-Community!

Fast jeder kennt das Problem... Man möchte Sonderzeichen und oder Umlaute in seine config eintragen, jedoch funktioniert dies nicht so recht. Es werden immer nur diese komischen Ä's angezeigt. Ich zeige euch heute, wie ihr euer Plugin so verändern könnt, das ihr euch mit diesen Problemen nicht mehr abgeben müsst!


Der Code wurde erneuert, da der vorherige nicht zuverlässig war!
Neuer Code:

UTFConfig.java

Spoiler Spoiler

Quellcode

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package me.blvckbytes.easylobby;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import org.apache.commons.lang.Validate;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;

import com.google.common.base.Charsets;
import com.google.common.io.Files;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.representer.Representer;

public class UTFConfig extends YamlConfiguration {

    public UTFConfig( File file ) {
        try {
            load( file );
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }

    @Override
    public void save( File file ) throws IOException {
        Validate.notNull( file, "File cannot be null" );
        Files.createParentDirs( file );
        String data = this.saveToString();
        Writer writer = new OutputStreamWriter( new FileOutputStream( file ), Charsets.UTF_8 );

        try {
            writer.write( data );
        } finally {
            writer.close();
        }
    }

    @Override
    public String saveToString() {
        try {

            Field fy = ReflectUtil.getField( getClass(), "yamlOptions" );
            Field fr = ReflectUtil.getField( getClass(), "yamlRepresenter" );
            Field fYaml = ReflectUtil.getField( getClass(), "yaml" );

            ReflectUtil.setAccessible( true, fy, fr, fYaml );

            DumperOptions yamlOptions = ( DumperOptions ) fy.get( this );
            Representer yamlRepresenter = ( Representer ) fr.get( this );
            Yaml yaml = ( Yaml ) fYaml.get( this );
            DumperOptions.FlowStyle fs = DumperOptions.FlowStyle.BLOCK;

            yamlOptions.setIndent( this.options().indent() );
            yamlOptions.setDefaultFlowStyle( fs );
            yamlOptions.setAllowUnicode( true );
            yamlRepresenter.setDefaultFlowStyle( fs );

            String header = this.buildHeader();
            String dump = yaml.dump( this.getValues( false ) );

            if ( dump.equals( "{}\n" ) )
                dump = "";

            return header + dump;
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
        return "Error while running this#saveToString()";
    }

    @Override
    public void load( File file ) throws FileNotFoundException, IOException, InvalidConfigurationException {
        Validate.notNull( file, "File cannot be null" );
        this.load( new InputStreamReader( new FileInputStream( file ), Charsets.UTF_8 ) );
    }
}

ReflectUtil.java

Spoiler Spoiler

Quellcode

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package me.blvckbytes.easylobby;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;

public class ReflectUtil {

    public static Field modifiers = getField( Field.class, "modifiers" );

    static {
        setAccessible( true, modifiers );
    }

    public static Class< ? > getNMSClass( String name ) {
        String version = Bukkit.getServer().getClass().getPackage().getName().split( "\\." )[ 3 ];
        try {
            return Class.forName( "net.minecraft.server." + version + "." + name );
        } catch ( Exception e ) {
            return null;
        }
    }

    public static Class< ? > getBukkitClass( String name ) {
        try {
            String version = Bukkit.getServer().getClass().getPackage().getName().split( "\\." )[ 3 ];
            return Class.forName( "org.bukkit.craftbukkit." + version + "." + name );
        } catch( Exception ex ) {
            return null;
        }
    }

    public static void sendPacket( Player to, Object packet ) {
        try {
            Object playerHandle = to.getClass().getMethod( "getHandle" ).invoke( to );
            Object playerConnection = playerHandle.getClass().getField( "playerConnection" ).get( playerHandle );
            playerConnection.getClass().getMethod( "sendPacket", getNMSClass( "Packet" ) ).invoke( playerConnection, packet );
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }

    public static void setField( Object change, String name, Object to ) {
        try {
            Field field = getField( change.getClass(), name );
            setAccessible( true, field );
            field.set( change, to );
            setAccessible( false, field);
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
    }

    public static void setAccessible( boolean state, Field... fields ) {
        try {
            for( Field field : fields ) {
                field.setAccessible( state );
                if( Modifier.isFinal( field.getModifiers() ) ) {
                    modifiers.set( field, field.getModifiers() & ~Modifier.FINAL );
                }
            }
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
    }

    public static Field getField( Class< ? > clazz, String name ) {
        Field field = null;

        for( Field f : getFields( clazz ) ) {
            if( !f.getName().equals( name ) )
                continue;

            field = f;
            break;
        }

        return field;
    }

    public static List< Field > getFields( Class< ? > clazz ) {
        List< Field > buf = new ArrayList<>();

        do {
            try {
                for( Field f : clazz.getDeclaredFields() )
                    buf.add( f );
            } catch( Exception ex ) {}
        } while( ( clazz = clazz.getSuperclass() ) != null );

        return buf;
    }

    public String getVersion() {
        String ver = Bukkit.getServer().getClass().getPackage().getName().split( "\\." )[ 3 ];
        return ver;
    }
}

LG BlvckBytes

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlvckBytes« (1. Januar 2018, 23:26) aus folgendem Grund: Erneuerung des Codes, der vorherige funktionierte nur auf Linux, und auch dort nicht immer.


GGad

User / Kunde

  • »GGad« ist männlich

Beiträge: 348

Wohnort: localhost in dritter Generation

Danksagungen: 16

  • Nachricht senden

2

Samstag, 16. Juli 2016, 15:21

Hey,

echt nice, dass du das Tutorial gemacht hast! :thumbup:

Hatte schon öfters Probleme damit und habe sehr lange gebraucht, das herauszufinden.

LG GGad
Hype!! :thumbsup: 333 Beiträge!! 8o

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

3

Samstag, 16. Juli 2016, 18:38

Jo, viele Leute haben das Problem und ich hoffe, das ich mit dem Tutorial ein paar davon helfen kann.

LG BlvckBytes

BtoBastian

Moderator

  • »BtoBastian« ist männlich

Beiträge: 3 614

Beruf: Softwareentwickler

  • Nachricht senden

4

Sonntag, 17. Juli 2016, 13:11

Reicht es nicht eigentlich schon, die entsprechenden Textpassagen in "" zu setzen?
Also

Quellcode

1
key: "Hällo wörld"

statt

Quellcode

1
key: Hällo wörld
Standard Standart eines Flamingos ist einbeinig.

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

5

Sonntag, 17. Juli 2016, 16:32

@BtoBastian
Hat bei meinen Plugins nie funktioniert und ich benutze immer ".

LG BlvckBytes

Stuppsman

User / Kunde

Beiträge: 2 769

Danksagungen: 25

  • Nachricht senden

6

Sonntag, 17. Juli 2016, 22:31

Muss es dann nicht trotzdem zu UTF-8 konvertiert sein? Die Anführungszeichen ändern doch nix an der Tatsache, dass der Interpreter die Zeichen nicht kennt, oder? Mein Wissen in dem Bereich ist reichlich begrenzt, wär aber so mein logischer Ansatz gewesen...
Nein, ich hab kein Skype.. bei Interesse an einer privaten Unterrichtsstunde, wende dich bitte direkt an mein Team! 8)

BtoBastian

Moderator

  • »BtoBastian« ist männlich

Beiträge: 3 614

Beruf: Softwareentwickler

  • Nachricht senden

7

Montag, 18. Juli 2016, 05:17

Wenn die Kodierung der Datei noch zusätzlich angepasst wird, geht es glaube ich.
Aber nervig war es schon immer.
UTF-8 ohne BOM war glaube ich die Kodierung, die man braucht.
Standard Standart eines Flamingos ist einbeinig.

phips4

User / Kunde

Beiträge: 69

  • Nachricht senden

8

Samstag, 30. Juli 2016, 00:39

Es gibt einen Start-Parameter, der UTF encondig aktiviert, wäre vllt auch eine Option. :)


"-Dfile.encoding=UTF-8
Position: before "-jar"
This parameter will ensure that all UTF-8 characters are being saved properly in server's log files, all characters should be correctly displayed in the console as well. Put this parameter before "-jar"
This parameter is only useful for older Linux based distributions, this may cause weird characters on Windows operating system."

Von Spigotmc.org
...

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

9

Sonntag, 31. Juli 2016, 11:22

@phips4

Ja, nur den kann man mit einem Plugin schlecht hinzufügen. In den meißten Fällen möchte man das Plugin ja zum download bereitstellen.

LG BlvckBytes

xtrumb

User / Kunde

  • »xtrumb« ist männlich

Beiträge: 2 271

Wohnort: hier

Beruf: Fachinformatiker für Systemintegration

Danksagungen: 16

  • Nachricht senden

10

Montag, 22. August 2016, 11:55

Mal wieder vielen Dank! Werde das mal nach der Arbeit ausprobieren.
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

11

Montag, 22. August 2016, 13:03

@xtrumb

Oki :D
LG BlvckBytes

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

12

Dienstag, 23. August 2016, 14:51

#push

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

13

Samstag, 27. August 2016, 13:29

#push

xtrumb

User / Kunde

  • »xtrumb« ist männlich

Beiträge: 2 271

Wohnort: hier

Beruf: Fachinformatiker für Systemintegration

Danksagungen: 16

  • Nachricht senden

14

Montag, 29. August 2016, 09:50

Sehr nice auch wenn ich erst bisl verwirrt war xD
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

15

Donnerstag, 1. September 2016, 12:37

#push

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

16

Dienstag, 1. November 2016, 17:48

#Push

LinXX

User / Kunde

Beiträge: 1 017

Beruf: Azubi Fachinformatiker für Systemintegration

  • Nachricht senden

17

Dienstag, 1. November 2016, 18:49

#Push

WAs erhofst du dir vom pushen dieses threads?

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

18

Dienstag, 1. November 2016, 18:50

@LinXX

Was genau stört es dich? None of your Business.

LinXX

User / Kunde

Beiträge: 1 017

Beruf: Azubi Fachinformatiker für Systemintegration

  • Nachricht senden

19

Dienstag, 1. November 2016, 18:55

@LinXX

Was genau stört es dich? None of your Business.

Meiner meinung nach bringt es nichts, threads zu pushen, die keine frage beinhalten oder eine antwort brauchen, wenn du willst, dass deine threads ganz oben sind, frag doch nen mod ob er die anpinnt.

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 797

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

20

Dienstag, 1. November 2016, 19:03

@LinXX

Tutorials beinhalten generell keine Fragen oder brauchen Antworten. Und genau in dem Bereich habe ich gepushed.