Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Java HashMap


knugi

Rekomendowane odpowiedzi

Opublikowano

Cześć, ostatnio dorwałem się z testowaniem hashmap, bo wiem, że mi to jest potrzebne, lecz mam niezłe problemy z tym :P
 
Zrobiłem takie coś:
(Klasa main)

 

 

package pl.ct8.knugi;

import java.util.HashMap;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class HashMain extends JavaPlugin{
	//public static HashMap<Player, Integer> chat = new HashMap<Player, Integer>();
	HashMap<String, Integer> hajs = new HashMap<String, Integer>();
	@Override
	public void onEnable(){
		
	}
	@EventHandler
	public void onJoin(PlayerJoinEvent evt){
	}
	public boolean onCommand(Command cmd, CommandSender s, String label, String[] args){
		Player p = (Player)s;
		if(label.equalsIgnoreCase("wklej")){
			if(!hajs.containsKey(p.getName())){
				hajs.put(p.getName(), 100); //Ustawianie
				p.sendMessage("Ustawiono twoj hajs na 100");
			}
			if(hajs.containsKey(p.getName())){
				hajs.remove(p.getName());
				p.sendMessage("Usunieto twoj hajs");
			}
			else if(label.equalsIgnoreCase("sprawdz")){
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmapie");
				}
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Jestes w hashmapie");
				}
			}
			else if(label.equalsIgnoreCase("hajs")){
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Masz hajsu: " + hajs.get(p.getName()+"$"));
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes zapisany do hashmapy");
				}
			}
			else if(label.equalsIgnoreCase("daj")){
				if(hajs.containsKey(p.getName())){
					hajs.put(p.getName(), hajs.get(p.getName())+100);
					p.sendMessage("Dodano 100 do twojego hajsu");
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmap");
				}
			}
			
		}
		return false;
	}
}
 

 

 

Plugin.yml

 

 

name: HashMaps
version: 0.1
main: pl.ct8.knugi.HashMain
commands:
  wklej:
    description: 0
  sprawdz:
    description: 1
  hajs:
    description: 2
  daj:
    description: 3 

 

 

 

I jak wpisuję bylejaką komendę to nawet wiadomości mi nie wyświetla :/

 

Może być to spowodowane tym że mam Jave 7 a JDK 8 ?

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@PolakCebulak , jak dałem cmd getname też nie działa :)

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

Nie zaimplementowałeś CommandExecutor

 

 

public class HashMain extends JavaPlugin implements CommandExecutor{

...

}

 

Poza tym możesz dać hash mape HashMap<Player, Integer> Lub <UUID, Integer>. Teraz nie powinno się używać nicków jeżeli chodzi o takie coś jak pieniądze no i pamiętaj, że hashmapa usuwa się po każdym reloadzie serwera.

Opublikowano

ok

public boolean onCommand(Command cmd, CommandSender s, String label, String[] args){

 
 

na

public boolean onCommand(CommandSender s, Command cmd, String label, String[] args){

 
Opublikowano

@Ivanowski , z tego co wiem implementuje się jak jest komenda w innej klasie :D

@PolakCabulak , kolejność tutaj nie ma znaczenia :)

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@Ivanowski , z tego co wiem implementuje się jak jest komenda w innej klasie :D

@PolakCabulak , kolejność tutaj nie ma znaczenia :)

KOLEJNOSC NIE MA ZNACZENIA 

WOW OD DZISIAJ TO BOG WSKAZUJE POPRAWNA METODE I ODPOWIADA ZA KOLEJNOSC ARGUMENTOW 

czekam na warna blezur 

Opublikowano

@PolakCebulak , zmieniłem kolejność i dalej jakoś nie ma różnicy :D

Kodzik:

 

 

package pl.ct8.knugi;

import java.util.HashMap;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class HashMain extends JavaPlugin implements CommandExecutor{
	//public static HashMap<Player, Integer> chat = new HashMap<Player, Integer>();
	HashMap<String, Integer> hajs = new HashMap<String, Integer>();
	@Override
	public void onEnable(){
		
	}
	@EventHandler
	public void onJoin(PlayerJoinEvent evt){
	}
	public boolean onCommand(CommandSender s, Command cmd, String label, String[] args){
		Player p = (Player)s;
		if(cmd.getName().equalsIgnoreCase("wklej")){
			if(!hajs.containsKey(p.getName())){
				hajs.put(p.getName(), 100); //Ustawianie
				p.sendMessage("Ustawiono twoj hajs na 100");
			}
			if(hajs.containsKey(p.getName())){
				hajs.remove(p.getName());
				p.sendMessage("Usunieto twoj hajs");
			}
			else if(cmd.getName().equalsIgnoreCase("sprawdz")){
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmapie");
				}
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Jestes w hashmapie");
				}
			}
			else if(cmd.getName().equalsIgnoreCase("hajs")){
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Masz hajsu: " + hajs.get(p.getName()+"$"));
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes zapisany do hashmapy");
				}
			}
			else if(cmd.getName().equalsIgnoreCase("daj")){
				if(hajs.containsKey(p.getName())){
					hajs.put(p.getName(), hajs.get(p.getName())+100);
					p.sendMessage("Dodano 100 do twojego hajsu");
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmap");
				}
			}
			
		}
		return false;
	}
}
 

 

 

plugin.yml bez zmian

 

@iIvanowski 

, a jak zapisać hashmapę, aby ona się nie usuwała :D ?

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

masz poprawiana komende 

@Override
public boolean onCommand(CommandSender s, Command cmd, String label, String[] args){
Player p = (Player)s;
if(cmd.getName().equalsIgnoreCase("wklej")) {
if (!hajs.containsKey(p.getName())) {
hajs.put(p.getName(), 100); //Ustawianie
p.sendMessage("Ustawiono twoj hajs na 100");
}
if (hajs.containsKey(p.getName())) {
hajs.remove(p.getName());
p.sendMessage("Usunieto twoj hajs");
}
}
else if(cmd.getName().equalsIgnoreCase("sprawdz")){
if(!hajs.containsKey(p.getName())){
p.sendMessage("Nie jestes w hashmapie");
}
if(hajs.containsKey(p.getName())){
p.sendMessage("Jestes w hashmapie");
}
}
else if(cmd.getName().equalsIgnoreCase("hajs")){
if(hajs.containsKey(p.getName())){
p.sendMessage("Masz hajsu: " + hajs.get(p.getName()+"$"));
}
if(!hajs.containsKey(p.getName())){
p.sendMessage("Nie jestes zapisany do hashmapy");
}
}
else if(cmd.getName().equalsIgnoreCase("daj")){
if(hajs.containsKey(p.getName())){
hajs.put(p.getName(), hajs.get(p.getName())+100);
p.sendMessage("Dodano 100 do twojego hajsu");
}
if(!hajs.containsKey(p.getName())){
p.sendMessage("Nie jestes w hashmap");
}
}
return true;
}
}

Opublikowano

@PolakCebulak dalej nic :'(

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@PolakCebulak dalej nic :'(

Override nad metodą masz? (nie musi być, ale jak jest, to ma się pewność że metoda jest dobrze zrobiona)

 

 

dodaj w pierwszej linijce komendy

s.sendMessage("Test") i powiedz czy to się wyświetla.

 

Jak nie -> masz źle plugin.yml lub jakiś inny błąd servera który na pewno jest w konosli.

 

upewnij się też że plugin się uruchamia i to w aktualnej wersji, najwygodniej dodać w onenable jakieś System.out.println("Test: 23432"); i upewnić się że się wyświeli.

 

jak nie -> masz źle plugin.yml lub jakiś inny błąd servera który na pewno jest w konosli.

1438614356923701010629.png

 

Opublikowano

Może być to spowodowane tym że mam Jave 7 a JDK 8 ?

Tak, a nawet musi.

Da sie to JDK zmienic jak na projekt klikasz

Ps. Możesz dać też log z konsoli jak to co napisałem nie działa

Opublikowano

@GotoFinal Overrida dałem przedchwilą i dalej nie działa, plugin wczytuje się prawidłowo, plugin.yml działa poprawnie. Dałem drugi plugin Hello World, wyświetla napis poprawnie. 

@zychu151 w konsoli żadnych błędów nie ma. (A jak zmienić jdk na 7? czy muszę pobrać?) (Zmieniłem javę z 8 na 7 bo forge nie chciał działać :D)

 

// Edit, proszę o warny dla @PolakCebulak. Tobie może działać, bo u mnie najprawdopodobniej oprogramowanie nie działa poprawnie -.-' i nie wyzywaj tylko pomagaj 

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@iIvanowski , odsyłacz :D http://bukkit.pl/threads/pytanie-zmienna-dla-gracza.11855/

Chyba raczej Karolinka zna się lepiej :P

 

A player w hashmapie mam w komentarzu, niżej jest druga hashmapa w stringu :)

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@GotoFinal Overrida dałem przedchwilą i dalej nie działa, plugin wczytuje się prawidłowo, plugin.yml działa poprawnie. Dałem drugi plugin Hello World, wyświetla napis poprawnie. 

@zychu151 w konsoli żadnych błędów nie ma. (A jak zmienić jdk na 7? czy muszę pobrać?) (Zmieniłem javę z 8 na 7 bo forge nie chciał działać :D)

 

// Edit, proszę o warny dla @PolakCebulak. Tobie może działać, bo u mnie najprawdopodobniej oprogramowanie nie działa poprawnie -.-' i nie wyzywaj tylko pomagaj 

miałeś sprawdzić w tym plugine te wiadomości, nie w nowym.

 

Wklej może jendka logi ze startu, i z wpisania komendy, razem z widoczną tą wiadomością co miałeś dodać.

I wklej aktualny kod, aktualny plugin.yml itd.

Możesz też wrzucić skompilowany .jar do pobrania, to też się sprawdzi co jest źle (razem ze skanem)

1438614356923701010629.png

 

Opublikowano

@GotoFinal dobra to mam tak: dodałem ten test do startu i do komendy /wklej przed warunkami dałem wiadomość test i mi wyświetliło wiadomość że ustawiono hajs i od razu usunięto, ale dałem komendę potem /sprawdź i mi nic nie wyświetliło

Kod (Main)

 

 

package pl.ct8.knugi;

import java.util.HashMap;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class HashMain extends JavaPlugin implements CommandExecutor{
	//public static HashMap<Player, Integer> chat = new HashMap<Player, Integer>();
	HashMap<String, Integer> hajs = new HashMap<String, Integer>();
	@Override
	public void onEnable(){
		System.out.println("Test: 23432");
	}
	@Override
	public boolean onCommand(CommandSender s, Command cmd, String label, String[] args){
		Player p = (Player)s;
		if(cmd.getName().equalsIgnoreCase("wklej")){
			p.sendMessage("Test");
			if(!hajs.containsKey(p.getName())){
				hajs.put(p.getName(), 100); //Ustawianie
				p.sendMessage("Ustawiono twoj hajs na 100");
			}
			if(hajs.containsKey(p.getName())){
				hajs.remove(p.getName());
				p.sendMessage("Usunieto twoj hajs");
			}
			else if(cmd.getName().equalsIgnoreCase("sprawdz")){
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmapie");
				}
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Jestes w hashmapie");
				}
			}
			else if(cmd.getName().equalsIgnoreCase("hajs")){
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Masz hajsu: " + hajs.get(p.getName()+"$"));
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes zapisany do hashmapy");
				}
			}
			else if(cmd.getName().equalsIgnoreCase("daj")){
				if(hajs.containsKey(p.getName())){
					hajs.put(p.getName(), hajs.get(p.getName())+100);
					p.sendMessage("Dodano 100 do twojego hajsu");
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmap");
				}
			}
			
		}
		return false;
	}
}
 

 

 

Kod (Plugin.yml)

 

 

name: HashMaps
version: 0.1
main: pl.ct8.knugi.HashMain
commands:
  wklej:
    description: 0
  sprawdz:
    description: 1
  hajs:
    description: 2
  daj:
    description: 3 

 

 

Jar:

http://download.knugi.ct8.pl/HashMap.jar

Skan:

https://www.virustotal.com/pl/file/c015a1c0f6847f8ddaef6a3b57d8cbe5dcc691e96683e2e7015120b7be9c0fa8/analysis/1429384381/

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@knugi Tak bo nie ma potrzeby trzymania w hashmapie wszystkich informacji o graczu czyli Player, a napisałem aby było to Player lub UUID to i to działa. Dlaczego nie przez nick ? BO można go teraz łatwo zmienić [permium] == utratą pieniędzy,=.

 

P.S. Post jest z 2014 wtedy nie było potrzeby używania UUID bo gracze premium nie mieli możliwości zmiany nicku.

 

Pytałeś się jak zrobić aby dane w hashmapie nie traciły się. Zapisz je do bazy danych [pliku, SQLite, MySQL itd.], a po starcie serwera odczytuj je.

Opublikowano

@GotoFinal dobra to mam tak: dodałem ten test do startu i do komendy /wklej przed warunkami dałem wiadomość test i mi wyświetliło wiadomość że ustawiono hajs i od razu usunięto, ale dałem komendę potem /sprawdź i mi nic nie wyświetliło

Kod (Main)

 

 

package pl.ct8.knugi;

import java.util.HashMap;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class HashMain extends JavaPlugin implements CommandExecutor{
	//public static HashMap<Player, Integer> chat = new HashMap<Player, Integer>();
	HashMap<String, Integer> hajs = new HashMap<String, Integer>();
	@Override
	public void onEnable(){
		System.out.println("Test: 23432");
	}
	@Override
	public boolean onCommand(CommandSender s, Command cmd, String label, String[] args){
		Player p = (Player)s;
		if(cmd.getName().equalsIgnoreCase("wklej")){
			p.sendMessage("Test");
			if(!hajs.containsKey(p.getName())){
				hajs.put(p.getName(), 100); //Ustawianie
				p.sendMessage("Ustawiono twoj hajs na 100");
			}
			if(hajs.containsKey(p.getName())){
				hajs.remove(p.getName());
				p.sendMessage("Usunieto twoj hajs");
			}
			else if(cmd.getName().equalsIgnoreCase("sprawdz")){
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmapie");
				}
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Jestes w hashmapie");
				}
			}
			else if(cmd.getName().equalsIgnoreCase("hajs")){
				if(hajs.containsKey(p.getName())){
					p.sendMessage("Masz hajsu: " + hajs.get(p.getName()+"$"));
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes zapisany do hashmapy");
				}
			}
			else if(cmd.getName().equalsIgnoreCase("daj")){
				if(hajs.containsKey(p.getName())){
					hajs.put(p.getName(), hajs.get(p.getName())+100);
					p.sendMessage("Dodano 100 do twojego hajsu");
				}
				if(!hajs.containsKey(p.getName())){
					p.sendMessage("Nie jestes w hashmap");
				}
			}
			
		}
		return false;
	}
}
 

 

 

Kod (Plugin.yml)

 

 

name: HashMaps
version: 0.1
main: pl.ct8.knugi.HashMain
commands:
  wklej:
    description: 0
  sprawdz:
    description: 1
  hajs:
    description: 2
  daj:
    description: 3 

 

 

Jar:

http://download.knugi.ct8.pl/HashMap.jar

Skan:

https://www.virustotal.com/pl/file/c015a1c0f6847f8ddaef6a3b57d8cbe5dcc691e96683e2e7015120b7be9c0fa8/analysis/1429384381/

toz to od razu widać

                       if(!hajs.containsKey(p.getName())){
				hajs.put(p.getName(), 100); //Ustawianie
				p.sendMessage("Ustawiono twoj hajs na 100");
			}
			if(hajs.containsKey(p.getName())){
				hajs.remove(p.getName());
				p.sendMessage("Usunieto twoj hajs");
			}

sprawdza czy nie ma w mapce, dodaje do mapki i wysyła wiadomość.

Potem sprawdza czy jest w mapce (a właśnie przed sekundą dodałeś) i usuwa z mapki.

Działa tak jak napisałeś :P

1438614356923701010629.png

 

Opublikowano

@GotoFinal ale przed wstawieniem wiadomości przed warunkami w ogóle nie chciało sprawdzać warunki (Tak samo reszta komend) (czyli jak dam return false bądż true to nie sprawdzi kolejnego warunku? czyli tak jakby zatrzyma kod?)

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

@GotoFinal ale przed wstawieniem wiadomości przed warunkami w ogóle nie chciało sprawdzać warunki (Tak samo reszta komend) (czyli jak dam return false bądż true to nie sprawdzi kolejnego warunku? czyli tak jakby zatrzyma kod?)

return to return, kończy metodę zwracając wartość, true informuje bukkita że komenda się wykonała poprawnie.

1438614356923701010629.png

 

Opublikowano

Dobra, te warunki to ogarnę sam, ale dlaczego ogólnie mi te hashmapy nie działają (komendy) Jak te JDK zmienić :D ?

 

// @iIvanowski w sumie masz rację :P

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

Dlaczego mówisz sam do siebie :)

 

W konsoli po wpisaniu komendy jest błąd z linijką 20 Player p = (Player)s;

Chyba nie jest to błąd ale daj tam spacje (Player) s; :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...