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.

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

1

Saturday, July 16th 2016, 2:04am

[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

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
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

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
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

This post has been edited 1 times, last edit by "BlvckBytes" (Jan 1st 2018, 11:26pm) with the following reason: Erneuerung des Codes, der vorherige funktionierte nur auf Linux, und auch dort nicht immer.


GGad

User / Kunde

  • "GGad" is male

Posts: 348

Location: localhost in dritter Generation

Thanks: 16

  • Send private message

2

Saturday, July 16th 2016, 3:21pm

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" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

3

Saturday, July 16th 2016, 6:38pm

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

LG BlvckBytes

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

4

Sunday, July 17th 2016, 1:11pm

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

Source code

1
key: "Hällo wörld"

statt

Source code

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

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

5

Sunday, July 17th 2016, 4:32pm

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

LG BlvckBytes

Stuppsman

User / Kunde

Posts: 2,766

Thanks: 25

  • Send private message

6

Sunday, July 17th 2016, 10:31pm

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" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

7

Monday, July 18th 2016, 5:17am

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

Posts: 69

  • Send private message

8

Saturday, July 30th 2016, 12:39am

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" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

9

Sunday, July 31st 2016, 11:22am

@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" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

10

Monday, August 22nd 2016, 11:55am

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" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

11

Monday, August 22nd 2016, 1:03pm

@xtrumb

Oki :D
LG BlvckBytes

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

12

Tuesday, August 23rd 2016, 2:51pm

#push

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

13

Saturday, August 27th 2016, 1:29pm

#push

xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

14

Monday, August 29th 2016, 9:50am

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

Dienstleistungs Service
Unser Csgo Team

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

15

Thursday, September 1st 2016, 12:37pm

#push

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

16

Tuesday, November 1st 2016, 5:48pm

#Push

LinXX

User / Kunde

Posts: 1,018

Occupation: Azubi Fachinformatiker für Systemintegration

  • Send private message

17

Tuesday, November 1st 2016, 6:49pm

#Push

WAs erhofst du dir vom pushen dieses threads?

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

18

Tuesday, November 1st 2016, 6:50pm

@LinXX

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

LinXX

User / Kunde

Posts: 1,018

Occupation: Azubi Fachinformatiker für Systemintegration

  • Send private message

19

Tuesday, November 1st 2016, 6:55pm

@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" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

20

Tuesday, November 1st 2016, 7:03pm

@LinXX

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

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