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.

Lennix3

User / Kunde

  • "Lennix3" started this thread

Posts: 210

  • Send private message

1

Tuesday, July 15th 2014, 4:35pm

MySQL Ranking [HashMap Frage]

Hey ich bin grade dabei ein MySQL Ranking zu machen muss dazu sagen das ich davor noch nie HashMaps verwendet habe ._. brauchte sie eig nicht nie und kenn mich damit dem entsprechend auch nicht aus. Ich habe diesen Thread gefunden und mein Ranking genau so gemacht.

[Bukkit-Plugin] Statistiken MySQL

Bislang sieht meine Klasse so aus.

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 de.Lenni.Rush.Sonstiges;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;

public class Heads {
	
	static HashMap<Integer, String> rang = new HashMap<>();
	
	public static void setHeads(){
		
		
		ResultSet rs =	MySQL.Query("SELECT name FROM RushPoints ORDER BY Points DESC LIMIT 3");

		int i = 0;
		try {
			while(rs.next()) {
			    i++;
			    try {
					rang.put(i, rs.getString("user"));
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
}


Jetzt ist die frage wie kriege ich aus der HashMap den Integer+User wieder raus also z.B einfach mal eine Message broadcasten mit den Spielernamen + Integer

Battlecraftman

User / Kunde

  • "Battlecraftman" is male

Posts: 508

Location: NRW

Occupation: Schüler

  • Send private message

2

Tuesday, July 15th 2014, 8:53pm

Erstmal: Eine HashMap benutzt man um für einzelne Daten einzelne andere Daten zu speichern (ja dumm ausgedrückt)
Ein Beispiel:
Player -> Punkte
Du willst ja nicht extra 24 Integers (oder so) erstellen
Das auslesen folgt dann durch aufrufen des Keys in diesem Fall ein Player:

Source code

1
2
3
4
5
6
HashMap<Player /*Das ist der Key*/, Integer> punkte = new HashMap<Player, Integer>();
Player p = (sender);
//Die Punkte für einen Player setzten
punkte.put(p /*Das ist der Key*/, 5);
//Die Punkte für einen Player auslesen
punkte.get(p /*Also hier wieder der Key*/);//In diesem fall würde uns das die 5 zurück geben

Damit wollte ich sagen das du über einen Key seinen Wert bekommst.
Bei dir müsstest du also einen Integer angeben um einen String zu bekommen.
Beispiel: (wenn ich alles richtig verstanden habe)

Source code

1
rang.get(2 /*Hier den Rang angeben und du bekommst den Spieler-Namen mit dem Rang zurück*/);

Also um z.B. Top 10 zu bekommen bastelst du ne for Schleife die bis 10 geht.
Hoffe du hast es verstanden und ich habe es dir richtig erklärt.

PS
Am Handy geschrieben

Lennix3

User / Kunde

  • "Lennix3" started this thread

Posts: 210

  • Send private message

3

Thursday, July 17th 2014, 7:32pm

Erstmal: Eine HashMap benutzt man um für einzelne Daten einzelne andere Daten zu speichern (ja dumm ausgedrückt)
Ein Beispiel:
Player -> Punkte
Du willst ja nicht extra 24 Integers (oder so) erstellen
Das auslesen folgt dann durch aufrufen des Keys in diesem Fall ein Player:

Source code

1
2
3
4
5
6
HashMap<Player /*Das ist der Key*/, Integer> punkte = new HashMap<Player, Integer>();
Player p = (sender);
//Die Punkte für einen Player setzten
punkte.put(p /*Das ist der Key*/, 5);
//Die Punkte für einen Player auslesen
punkte.get(p /*Also hier wieder der Key*/);//In diesem fall würde uns das die 5 zurück geben

Damit wollte ich sagen das du über einen Key seinen Wert bekommst.
Bei dir müsstest du also einen Integer angeben um einen String zu bekommen.
Beispiel: (wenn ich alles richtig verstanden habe)

Source code

1
rang.get(2 /*Hier den Rang angeben und du bekommst den Spieler-Namen mit dem Rang zurück*/);

Also um z.B. Top 10 zu bekommen bastelst du ne for Schleife die bis 10 geht.
Hoffe du hast es verstanden und ich habe es dir richtig erklärt.

PS
Am Handy geschrieben



Danke es funktioniert auf jedenfall als ich es getestet habe. Aber ich habe jetzt ein Problem unzwar habe ich es als Command getestet und es hat einwand frei Funktioniert den gleichen Code hab ich jetzt in eine Methode gepackt aber die Funktioniert komischer weiße nicht hab sie im Enable teil Aktiviert hier mal der Code

Methode im onEnable() gestartet

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
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
	public static void setRanks(){
		
		
		HashMap<Integer, String> rang = new HashMap<>();
		
	//	String world = cfg.getString("Kopf1.world");
		//	double x = cfg.getDouble("Kopf1.x");
		//	double y = cfg.getDouble("Kopf1.y");
		//	double z = cfg.getDouble("Kopf1.z");
		//	Location Kopf1 = new Location(Bukkit.getWorld(world), x, y, z);
		
		//	String world1 = cfg.getString("Kopf1.world");
		//	double x1 = cfg.getDouble("Kopf2.x");
		//	double y1 = cfg.getDouble("Kopf2.y");
		//	double z1 = cfg.getDouble("Kopf2.z");
		//	Location Kopf2 = new Location(Bukkit.getWorld(world), x1, y1, z1);
		
		
		//	String world2 = cfg.getString("Kopf1.world");
		//	double x2 = cfg.getDouble("Kopf3.x");
		//	double y2 = cfg.getDouble("Kopf3.y");
		//	double z2 = cfg.getDouble("Kopf3.z");
		//	Location Kopf3 = new Location(Bukkit.getWorld(world), x2, y2, z2);
		
		ResultSet rs =	MySQL.Query("SELECT User FROM RushPoints ORDER BY Points DESC LIMIT 1");

		int i = 0;
		try {
			while(rs.next()) {
			    i++;
			    try {
					rang.put(i, rs.getString("User"));
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		for(Player all : Bukkit.getOnlinePlayers()){
			all.sendMessage(rang.get(1));
		}
		
	// Location skull1 = Kopf1;
	//	BlockState state1 = skull1.getBlock().getState();
	//	Skull head1 = (Skull)state1;
		
	//	head1.setOwner(rang.get(1));
		
		
//		Location skull2 = Kopf2;
		//		BlockState state2 = skull2.getBlock().getState();
		//		Skull head2 = (Skull)state2;
		
		// head2.setOwner(rang.get(2));
		
		
		//	Location skull3 = Kopf3;
		//	BlockState state3 = skull3.getBlock().getState();
		//	Skull head3 = (Skull)state3;
		
		// head3.setOwner(rang.get(3));
		
		
		
		// String world3 = cfg.getString("Schild1.world");
		//double x3 = cfg.getDouble("Schild1.x");
		//double y3 = cfg.getDouble("Schild1.y");
		//double z3 = cfg.getDouble("Schild1.z");
		//Location Schild1 = new Location(Bukkit.getWorld(world), x3, y3, z3);
		
		//String world4 = cfg.getString("Schild2.world");
		//double x4 = cfg.getDouble("Schild2.x");
		//double y4 = cfg.getDouble("Schild2.y");
		//double z4 = cfg.getDouble("Schild2.z");
		//Location Schild2 = new Location(Bukkit.getWorld(world), x4, y4, z4);
		
		
		//	String world5 = cfg.getString("Schild3.world");
		//	double x5 = cfg.getDouble("Schild3.x");
		//	double y5 = cfg.getDouble("Schild3.y");
		//	double z5 = cfg.getDouble("Schild3.z");
		//	Location Schild3 = new Location(Bukkit.getWorld(world), x5, y5, z5);
		
		
		
		//	Sign s1 = (Sign)Schild1.getBlock().getState();
		
		//	s1.setLine(0, "§6#1");
		//	s1.setLine(1, "§6" + head1.getOwner());
		//	s1.setLine(2, "§7Punkte");
		//	try {
		//		s1.setLine(3, "" + Points.getPoints(head1.getOwner().toString()));
		//	} catch (IndexOutOfBoundsException | SQLException e) {
		//		e.printStackTrace();
		//	}
		
		//	Sign s2 = (Sign)Schild2.getBlock().getState();
		
		//	s2.setLine(0, "§6#2");
		//	s2.setLine(1, "§6" + head2.getOwner());
		//	s2.setLine(2, "§7Punkte");
		//	try {
		//	s2.setLine(3, "" + Points.getPoints(head2.getOwner().toString()));
			//	} catch (IndexOutOfBoundsException | SQLException e) {
		//	e.printStackTrace();
		//	}
		
		//	Sign s3 = (Sign)Schild3.getBlock().getState();
		
		//	s3.setLine(0, "§6#3");
		//	s3.setLine(1, "§6" + head3.getOwner());
		//	s3.setLine(2, "§7Punkte");
		//	try {
		//		s3.setLine(3, "" + Points.getPoints(head3.getOwner().toString()));
			//	} catch (IndexOutOfBoundsException | SQLException e) {
		//	e.printStackTrace();
		//	}
		

		
	}
}


Wenn ich genau das gleiche nur mit einen Command mache funktioniert es

Battlecraftman

User / Kunde

  • "Battlecraftman" is male

Posts: 508

Location: NRW

Occupation: Schüler

  • Send private message

4

Thursday, July 17th 2014, 7:38pm

Was hat es mit dem auskommentierten Code auf sich? Was genau funktioniert nicht? Gibt es einen Fehler?

Lennix3

User / Kunde

  • "Lennix3" started this thread

Posts: 210

  • Send private message

5

Sunday, July 20th 2014, 5:11pm

Was hat es mit dem auskommentierten Code auf sich? Was genau funktioniert nicht? Gibt es einen Fehler?


Also den String wiederbekommen hab ich jetzt geschafft aber ich will jetzt noch ein Hologram machen was anzeigt welcher Platz der Spieler ist jetzt weiß ich nicht wie ich den Rang des Spielers wieder bekommen kann hab so gemacht aber es klappt nicht

Source code

1
2
3
4
		if(args[0].equalsIgnoreCase("test")){
			setLocation("GoldItem", p.getLocation(), file, cfg);
			p.sendMessage(Heads.rang.get(p));
	     }


es kommt null raus und es gibt keinen error

Battlecraftman

User / Kunde

  • "Battlecraftman" is male

Posts: 508

Location: NRW

Occupation: Schüler

  • Send private message

6

Sunday, July 20th 2014, 5:36pm

Ja weil p wohl ein Player Objekt ist und kein Integer. Du könntest dir für dein Problem ne weitere HashMap machen etwa so:

Source code

1
2
3
4
5
6
7
8
9
10
11
HashMap<Integer, UUID> rang = //Ich schreibs jetzt hier nicht hin, aber das wäre deine aktuelle HashMap
HashMap<UUID, Integer> rang2 = new HashMap<UUID, Integer>();
for(int i = 0; i < rang.size; i++)
{
rang2.put(rang.get(i));
}
//Das aufrufen geht dann so
rang2.get(p.getUniqueID());
//Achja wenn du jetzt den Spielernamen aus der alten HashMap haben willst:
Player p = Bukkit.getPlayer(rang.get(0));
p.getName();

PS
Alles am Handy geschrieben
PPS
Ich würde nicht den Spielernamen in die HashMap packen, sondern wie ich die UUID da der Spielername nicht am sichersten ist.

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

Similar threads