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

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

21

Tuesday, July 31st 2012, 11:52am

Hallo,

ich hätte noch eine Frage bezüglich der alten Version ( mag ich lieber :P ) :

kann man irgendwie eine datenstruktur in die datei rienkriegen, die so aussieht:

(is nur n beispiel)

WarpName:
....Playername:
........irgendneinfo

(punkte dienen der formatierung)

?

ich hab nämlich sozusagen ein warp erstellt(is kein warp, aber ich nehme das als beispiel da es das s selber prinzip ist)
wo sagen wir mal location suw gespeichert wird, und mit einer anderen methode will ich für den warp den spieler speichern mit einer zusätzlichen info..
*Mad*

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

22

Tuesday, July 31st 2012, 1:03pm

Was bedeutet für den Warp einen Spieler speichern?
Du kannst jedenfalls leider nicht so eine Datenstruktur im File haben,
aber ich bin mir sicher das MexDb, dass kann, was du willst.
HasteBin without limit: Xems' Hastebin

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

23

Tuesday, July 31st 2012, 1:11pm

Wahrscheinlich schon ;)

Also sagen wir mal ich hätte davor einen Warp mit Location abgespeichert. Jetzt will ich dass wenn ich zb nen Command ausführe, also /command WarpName Permission, auf den Warp WarpName eine Permission gelegt wird, die jedes mal wenn ein spieler den warp benutzt ihm gegeben wird. (also bei mir kann man den warp nur 1mal benutzten daher isses sinnvoll^^^)
*Mad*

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

24

Tuesday, July 31st 2012, 1:33pm

Quoted

auf den Warp WarpName eine Permission gelegt wird, die jedes mal wenn ein spieler den warp benutzt ihm gegeben wird.
Du meinst eher:
- Du machst /givewarpperm HausVonClaus XemsDoom
- Somit habe ich die Permission zum HausVonClaus zu gehen

Also, du kannst hier einfach setList();/getArrayList(); benutzen
um die Spielernamen zu speichern. Wie ne ArrayList() funktioniert sollte dir ja klar sein.
HasteBin without limit: Xems' Hastebin

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

25

Tuesday, July 31st 2012, 1:44pm

Ne, der soll nicht die Permission kriegen irgendwo hin teleportiert zu werden... einfach eine permission die man selber hinschreibt :/ zb essentials.give oder so..
*Mad*

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

26

Tuesday, July 31st 2012, 1:50pm

Ich verstehe echt nicht was du versuchst zu machen.^^
Könntest du es nochmals detailliert aufschreiben?
HasteBin without limit: Xems' Hastebin

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

27

Tuesday, July 31st 2012, 2:46pm

Ok: also:

mit dem warp beispiel:

ic hsetzte mit einer warpsetzten command einen warp namens test.

danach macht man zb /warppermission test essentials.give

wenn jemand jetzt zu diesem warp geht, also ihn benutzt, (zb /warp test) wird ihm die permission essentials.give zugeschrieben.
*Mad*

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

28

Tuesday, July 31st 2012, 2:58pm

Aha, das ist einfach.
Du fügst deinem Warp einfach einen zusätzlichen Schlüssel/Schlüsselwert hinzu.
setValue(WarpName, "permission", "essentials.give"); wie du dann deinem Player im wesentlichen
die Permission gibt, musst du via dem Permission-Manager anschauen.
HasteBin without limit: Xems' Hastebin

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

29

Tuesday, July 31st 2012, 3:05pm

Asoo thx!
aber ihc hab schon viele values drin, wird mit setvalue einfach der rest überschrieben?
*Mad*

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

30

Tuesday, July 31st 2012, 3:14pm

setValue() updated einen Schlüsselwert von einem Schlüssel wenn er vorhanden ist
oder fügt den Schlüssel/Schlüsselwert hinzu wenn nicht vorhanden.
HasteBin without limit: Xems' Hastebin

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

31

Tuesday, July 31st 2012, 3:16pm

Okey, dann noch was: Ich habe jetzt eine Methode die den warpnamen, die location, und die permission abspeichert. ich will aber, dass wenn keine permission angegeben ist, er keine speichern soll. leider geht es ja nich da ich ja eine permission übergeben muss. kann ich jett so machen dass zzb in der teleport command die permission nicht gegeben wird wenn sie "nichts" heißt?

und noch was: gibt es eine bestimte sache sowie hasKey(Index, Key) halt nur für hasValue(Key, Value) ? also um zu gucken was der string is der abgespeichert ist


edit://habs glaube ich geschafft
*Mad*

This post has been edited 2 times, last edit by "Universum" (Jul 31st 2012, 4:41pm)


bubbleguj

User / Kunde

  • "bubbleguj" is male

Posts: 704

Location: Vancouver, Canada

Occupation: Special Projects Assistant

Thanks: 9

  • Send private message

32

Tuesday, July 31st 2012, 4:51pm

Super Ding, habe aber ein Problem, wenn ich die MexDB in einem Listener verwenden will. Bei mir unterkringelt es immer das "new Entry(playernme);" ICh weis einfach nicht, wieso... Hier mein Code: (Man beachte nicht, dass alles eigentlich LEAVE Listener und nicht JOIN heißt, aber das join habe ich nur gemacht, damit es so ist wie in deinem Video ;))

PHP 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
package me.bubbleguj.leavekill;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import com.xemsdoom.mexdb.MexDB;
import com.xemsdoom.mexdb.system.Entry;

public class LeaveKillPlayerLeaveListener implements Listener{

    private MexDB database;
    
    public LeaveKillPlayerLeaveListener(MexDB db) {
        this.database db;
    }
    
    public LeaveKillPlayerLeaveListener(LeaveKill plugin) {
        plugin.getServer().getPluginManager().registerEvents(thisplugin);
    }
    
    @EventHandler
    public void onPlayerQuit(PlayerJoinEvent event) {
        Player p event.getPlayer();
        String playername p.getName();
        
        Entry entry = new Entry(playername);
        database.push();
    }
}

Danke schonmal! :)
Programmer (noun.)
A person who fixed a problem that you don't have, in a way you don't understand.

Algorithm (noun.)
Word used by programmers when they don't want to explain what they did.

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

33

Tuesday, July 31st 2012, 5:11pm

@Universum

Quoted

gibt es eine bestimte sache sowie hasKey(Index, Key) halt nur für hasValue(Key, Value) ? also um zu gucken was der string is der abgespeichert ist
Nimm einfach den String und vergleiche ihn.
  • if(string.equals(db.getString("index","key")){}
  • if(db.getString("index","key") == null || db.getString("index", "key").isEmpty()){}

Dein anderes Problem bezieht sich nicht auf MexDB, du solltest einen eigenen Thread dafür aufmachen
oder nachdenken wie du es selber lösen könntest.


@ bubbleguj
Instantiierung von Entry Objekten muss in Try-Catch Blöcken sein.
Dazu:

Spoiler Spoiler


Post 27 Juli 2012 - Changes on MexDB

The last days I thought about the design and security MexDB should provide to the developers who use it. There were plenty of security risks, not coming from the system itself but errors, which could occur when the developer would be lazy while using MexDB. For example, if you would pass an empty index to an Entry object, you would immediately break-up MexDB or even get an exception. Im not a fan of "try and catch" blocks, since they can destroy a little bit the overview of your code but I thought it was time to introduce it, that developers using MexDB should catch the exceptions, therefore, some methods of MexDB must now be in a "try and catch" block. It might look shitty but it is for the program's best.

I also thought how lame it was to create Entry objects, because when you were going to add/set a value with addValue(), you had to convert your data to Strings. This is now changed, you can now pass everything you want, as the Entry object now takes Objects as parameters in the methods. You still have to make a thought about if your data can be a String but it is much easier now.

There are now three new methods: getBoolean(), replaceIndex(), destroyMexDB(). You might think now: "wtf is destroyMexDB()?", well, there wasn't an option to fully destroy the flatfile and loaded content since now and I thought it was needed for certain situations, in which you don't want the file to exist after your application terminated. The method getBoolean() returns you a boolean, pretty obvious. replaceIndex() takes two parameters, so it's replaceIndex(String index, String, replace); which means that this method will replace the index of an entry with the replace-String. Since replaceIndex() is something more special from my point of view, it must also be in a "try and catch" block.
HasteBin without limit: Xems' Hastebin

bubbleguj

User / Kunde

  • "bubbleguj" is male

Posts: 704

Location: Vancouver, Canada

Occupation: Special Projects Assistant

Thanks: 9

  • Send private message

34

Tuesday, July 31st 2012, 5:21pm

Aber was alles muss da rein?
Hab's jetzt so, geht immernoch nicht :(

PHP 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
package me.bubbleguj.leavekill;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import com.xemsdoom.mexdb.MexDB;
import com.xemsdoom.mexdb.exception.EmptyIndexException;
import com.xemsdoom.mexdb.system.Entry;

public class LeaveKillPlayerLeaveListener implements Listener{

    private MexDB database;
    
    public LeaveKillPlayerLeaveListener(MexDB db) {
        this.database db;
    }
    
    public LeaveKillPlayerLeaveListener(LeaveKill plugin) {
        plugin.getServer().getPluginManager().registerEvents(thisplugin);
    }
    
    @EventHandler
    public void onPlayerQuit(PlayerJoinEvent event) {
        Player p event.getPlayer();
        String playername p.getName();

        try {
            Entry entry = new Entry(playername);
            entry.addValue("ip-string"String.valueOf(p.getAddress()));
            entry.addValue("test"p.getAddress());
            database.addEntry(entry);
            database.push();
        } catch (EmptyIndexException e) {
            e.printStackTrace();
        }
    }
}


//Edit
Ich weis in dem Spoiler steht wie es geht, aber ich checks net :D (Sorry.. :( )
Programmer (noun.)
A person who fixed a problem that you don't have, in a way you don't understand.

Algorithm (noun.)
Word used by programmers when they don't want to explain what they did.

XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

35

Tuesday, July 31st 2012, 5:25pm

Was geht nicht?
HasteBin without limit: Xems' Hastebin

bubbleguj

User / Kunde

  • "bubbleguj" is male

Posts: 704

Location: Vancouver, Canada

Occupation: Special Projects Assistant

Thanks: 9

  • Send private message

36

Tuesday, July 31st 2012, 5:28pm

Was geht nicht?

OHHH MEIN GOOTOTOTOTO :DD
Tut mir leid, hab's verkackt das Event zu registrieren.. Klar dass es nicht geht -.-

//Edit
Bekomme jetzt diese Fehlermeldung :(

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
17:33:19 [SCHWERWIEGEND] Could not pass event PlayerJoinEvent to LeaveKill
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:304)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:460)
        at net.minecraft.server.ServerConfigurationManager.c(ServerConfiguration
Manager.java:132)
        at net.minecraft.server.NetLoginHandler.b(NetLoginHandler.java:129)
        at net.minecraft.server.NetLoginHandler.a(NetLoginHandler.java:41)
        at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:6
1)
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:567)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:459)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
Caused by: java.lang.NullPointerException
        at me.bubbleguj.leavekill.LeaveKillPlayerLeaveListener.onPlayerQuit(Leav
eKillPlayerLeaveListener.java:33)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:302)
        ... 9 more


Also Fehler hier:

PHP Source code

1
            database.addEntry(entry);

Weis aber nicht, was :D

//Edit 2
Dein "Genius" Post kam zu schnell :P
Programmer (noun.)
A person who fixed a problem that you don't have, in a way you don't understand.

Algorithm (noun.)
Word used by programmers when they don't want to explain what they did.

This post has been edited 4 times, last edit by "bubbleguj" (Jul 31st 2012, 5:36pm)


XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

37

Tuesday, July 31st 2012, 5:33pm

Schau, bei mir funtzt das

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public static void main(String[] args){
        
        MexDB db = new MexDB(".""Test");
        
        try{
            Entry entry = new Entry("index");
            entry.addValue("test""test");
            db.addEntry(entry);
            db.push();
        }catch (EmptyIndexException e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }


OUT:

PHP Source code

1
index test:test


Was soll ich noch sagen?

Deine DB ist null.
HasteBin without limit: Xems' Hastebin

This post has been edited 3 times, last edit by "XemsDoom" (Jul 31st 2012, 5:39pm)


bubbleguj

User / Kunde

  • "bubbleguj" is male

Posts: 704

Location: Vancouver, Canada

Occupation: Special Projects Assistant

Thanks: 9

  • Send private message

38

Tuesday, July 31st 2012, 5:43pm

Quoted

Deine DB ist null.

Was willst du damit sagen?
So geht es bei mir auch, nur im Listener nicht!

//Edit
Okay, hier nochmal meine Beiden Klassen:

LeaveKill.java

PHP 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
package me.bubbleguj.leavekill;

import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;

import com.xemsdoom.mexdb.MexDB;

public class LeaveKill extends JavaPlugin{

    private PluginDescriptionFile pdf;
    
    @Override
    public void onEnable() {
        MexDB database = new MexDB("plugins/LeaveKill","database");
        pdf getDescription();
        registerEvent();
        System.out.println("[LeaveKill] Plugin v" pdf.getVersion() + " activated!");
        System.out.println("[LeaveKill] Plugin by bubbleguj");
    }

    @Override
    public void onDisable() {
        System.out.println("[LeaveKill] Plugin disabled!");
    }
    
    private void registerEvent() {
        new LeaveKillPlayerLeaveListener(this);
        
    }
}


LeaveKillPlayerLeaveListener.java

PHP 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
package me.bubbleguj.leavekill;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import com.xemsdoom.mexdb.MexDB;
import com.xemsdoom.mexdb.exception.EmptyIndexException;
import com.xemsdoom.mexdb.system.Entry;

public class LeaveKillPlayerLeaveListener implements Listener{

    private MexDB database;
    
    public LeaveKillPlayerLeaveListener(MexDB database) {
        this.database database;
    }
    
    public LeaveKillPlayerLeaveListener(LeaveKill plugin) {
        plugin.getServer().getPluginManager().registerEvents(thisplugin);
    }
    
    @EventHandler
    public void onPlayerQuit(PlayerJoinEvent event) {
        Player p event.getPlayer();
        String playername p.getName();
        p.sendMessage("Hallo");
        try {
            Entry entry1 = new Entry(playername);
            entry1.addValue("ip-string"String.valueOf(p.getAddress()));
            entry1.addValue("test"p.getAddress());
            database.addEntry(entry1);
            database.push();
        } catch (EmptyIndexException e) {
            e.printStackTrace();
        }

    }
}


Was soll ich sagen?
Hab's genau so gemacht wie du im Video! :)
Programmer (noun.)
A person who fixed a problem that you don't have, in a way you don't understand.

Algorithm (noun.)
Word used by programmers when they don't want to explain what they did.

This post has been edited 2 times, last edit by "bubbleguj" (Jul 31st 2012, 5:49pm)


XemsDoom

User / Kunde

  • "XemsDoom" is male
  • "XemsDoom" started this thread

Posts: 758

Location: Zurich

Occupation: Sidekick

  • Send private message

39

Tuesday, July 31st 2012, 5:48pm

Edit.

PHP Source code

1
2
3
    public LeaveKillPlayerLeaveListener(MexDB database) {
        this.database database;
    }


PHP Source code

1
2
3
4
    private void registerEvent() {
        new LeaveKillPlayerLeaveListener(this);
        
    }


Schon hier solltest du Fehler haben. Du gibst dem Listener eine Instanz von
LeaveKill weiter, aber im Constructor muss man eine MexDB weiter geben.

Bitte sag nicht das was nicht funktioniert, wenn dir dein IDE sogar noch Fehler anzeigt,
die sind nicht ohne Grund da.
HasteBin without limit: Xems' Hastebin

bubbleguj

User / Kunde

  • "bubbleguj" is male

Posts: 704

Location: Vancouver, Canada

Occupation: Special Projects Assistant

Thanks: 9

  • Send private message

40

Tuesday, July 31st 2012, 5:59pm

Aber es zeigt mir keine Fehler an, das ist es ja! :D
Programmer (noun.)
A person who fixed a problem that you don't have, in a way you don't understand.

Algorithm (noun.)
Word used by programmers when they don't want to explain what they did.

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