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

Unikalna zmienna dla unikalnego gracza


Looken

Rekomendowane odpowiedzi

Opublikowano

Witam, tak jak w temacie, jak można zdefiniować zmienną dla danego gracza?
Napisałem plugin, gdy klika się prawym przyciskiem myszy przedmiotem to ustawia się dom czyli jakaś lokacja, a gdy naciska się lewy przycisk myszy przedmiotem, to teleportuje nas do tej lokacji, problemem jest to, że ta lokacja ustawia się dla każdego gracza, czyli jeżeli jeden gracz to ustawi, to cała reszta teleportuje się do zaznaczonego miejsca przez tego jednego gracza, a nie do swoich, jest na to jakiś sposób?

Coś w stylu:
 

	Location dom(Player) = p.getLocation();

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

Zawsze jest rozwiązanie ;)

Tworzysz mapę Map<UUID, Location>. Podczas zapisywania lokalizacji dodajesz do niej gracza uuid oraz lokalizacje, a podczas teleportacji pobierasz z mapy po uuid lokalizacje oraz teleportujesz tam gracza

Opublikowano

Map<UUID, Location> map;

 

Potem przy kliknieciu prawym przyciskiem, map.put(TU POBIERASZ UUID, TU LOKALIZACJE);

 

Przy kliknieciu lewym, jeżeli gracz jest w mapie przy teleportacji map.get(UUID PLAYERA); <- To zwróci Ci lokalizacje.

 

Oldis przy obiekcie to odrazu Mysql by sie przydał :)

Opublikowano

 

@TheMajster

Coś takiego?

Player p = (Player) event.getPlayer();
UUID uuid1 = p.getUniqueId();
map.put(uuid1, p.getLocation());

 

Tak coś takiego.

 

 

Map<UUID, Location> map;

 

Potem przy kliknieciu prawym przyciskiem, map.put(TU POBIERASZ UUID, TU LOKALIZACJE);

 

Przy kliknieciu lewym, jeżeli gracz jest w mapie przy teleportacji map.get(UUID PLAYERA); <- To zwróci Ci lokalizacje.

 

Oldis przy obiekcie to odrazu Mysql by sie przydał :)

 

Mówię mu jak to może zrobić. Nie powiedział do czego chce tego używać i co pisze.

Dodatkowo i tak musi to gdzieś zapisać po stopie bo wiadomo, że to wyparuje. xD

784091427630431250239.png

Regulamin sygnatur

Opublikowano

@OldisPL

Żeby stworzyć więcej takich miejsc, muszę stworzyć kolejne mapy?

 

Dodatkowo gdy ma dodać lokację oraz UUID gracza do mapy wyskakuje błąd

Przy map.put(uuid1, p.getLocation()); 

2lxfgix.png

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

@OldisPL

Żeby stworzyć więcej takich miejsc, muszę stworzyć kolejne mapy?

 

Dodatkowo gdy ma dodać lokację oraz UUID gracza do mapy wyskakuje błąd

Przy map.put(uuid1, p.getLocation()); 

2lxfgix.png

 

 

Radziłbym na początku poczytać podstawy i jak w ogóle działają hashmapy.

Nie mówię tego ,,chamsko", tylko po prostu będzie Ci o wiele łatwiej.

Tak na logikę i na chłopski rozum biorąc to w takiej mapce możesz trzymać pewne informacje dla gracza.

Coś ala.

Masz Anie, Jasia i Piotrka

Ania ma 5 lat, Jaś 10 lat a Piotrek 15.

 

Chcesz się dowiedzieć ile lat ma np. Ania, więc odwołujesz się do mapki i zabierasz informację o Ani.

 

A co do errora to pokaż mi cały kod.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

@OldisPL

private List<Player> cd = new ArrayList<Player>();
	Countdown d = new Countdown();
	boolean pozwolenie = false;
	double zycie = 0;
	int jedzenie = 0;
	Location miejsce1 = null;
	Location miejsce2 = null;
	Location miejsce3 = null;
	Location miejsce4 = null;
	Location miejsce5 = null;
	Location miejsce6 = null;
	Location miejsce7 = null;
	Location miejsce8 = null;
	Location miejsce9 = null;
	Location miejsce10 = null;
	Location miejsce11 = null;
	Location miejsce12 = null;
	Location miejsce13 = null;
	Location miejsce14 = null;
	Location miejsce15 = null;
	Location miejsce16 = null;
	Location miejsce17 = null;
	Location miejsce18 = null;
	Location miejsce19 = null;
	Location miejsce20 = null;
	Location miejsce21 = null;
	Location miejsce22 = null;
	Location miejsce23 = null;
	Location miejsce24 = null;
	Location miejsce25 = null;
	Location miejsce26 = null;
	Location miejsce27 = null;
	Location miejsce28 = null;
	Location miejsce29 = null;
	Location miejsce30 = null;
	Location miejsce31 = null;
	Location miejsce32 = null;
	Location miejsce33 = null;
	Location miejsce34 = null;
	Location miejsce35 = null;
	Location miejsce36 = null;
	Location miejsce37 = null;
	Location miejsce38 = null;
	Location miejsce39 = null;
	Location miejsce40 = null;
	Map<UUID, Location> map;
	@SuppressWarnings("deprecation")
	@EventHandler
	public void interact(PlayerInteractEvent event) {
		Player p = event.getPlayer();
		UUID uuid1 = p.getUniqueId();
		Action action = event.getAction();
        ItemStack manipulator = new ItemStack(Material.NETHER_STAR);
        ItemMeta manipulator1 = manipulator.getItemMeta();
        manipulator1.setDisplayName(ChatColor.AQUA + "Manipulator Czasu");
        manipulator.setItemMeta(manipulator1);
        ItemStack zegar = new ItemStack(Material.WATCH);
        ItemMeta meta = zegar.getItemMeta();
        meta.setDisplayName(ChatColor.AQUA + "Sekundy");
        zegar.setItemMeta(meta);
        zegar.setAmount(20);
        ItemStack zegar1 = new ItemStack(Material.WATCH);
        ItemMeta meta1 = zegar1.getItemMeta();
        meta1.setDisplayName(ChatColor.AQUA + "Sekundy");
        zegar1.setItemMeta(meta1);
		if(action.equals(Action.LEFT_CLICK_AIR) || action.equals(Action.LEFT_CLICK_BLOCK)){
			if(p.getItemInHand().getType() == Material.NETHER_STAR){	
				if(!cd.contains(p)){
					cd.add(p);
					d.setList(cd);
					d.setPlayer(p);
					new Thread(d).start();
					zycie = p.getHealth();
					jedzenie = p.getFoodLevel();
					map.put(uuid1, p.getLocation());
					miejsce1 = p.getLocation();

Wiem jak działają HashMapy, tylko nie mogę tam zdefiniować liczby czy jak to tam się nazywa.

I nie wiem czemu ten błąd występuje, bez tej jednej linijki wszystko działa.

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

Jezu chwila..

Coś ty właśnie zrobił XDDD

 

Na początku tak..

Naucz się zmienne nazywać po angielsku i błagam nie pisz jak 95% na MPCForum ,,ALE TO JEST MÓJ KOD I JA GO ROZUMIEM I TAK MA BYĆ I GÓWNO SIĘ ZNASZ".

Od początku wbijaj sobie zasady, które Ci pomogą w przyszłości.

Tak samo przykładowo klasa odpowiadająca za niszczenie klocków ma być:

BlockBreakListener

a nie jakieś

RozwalanieKlockow

Dobra.

Teraz zasadnicze pytanie. Twój kod tak wygląda jak to dałeś czy po prostu Ci się formatowanie popsuło? o.O

 

I co to jest?

	Location miejsce1 = null;
	Location miejsce2 = null;
	Location miejsce3 = null;
	Location miejsce4 = null;
	Location miejsce5 = null;
	Location miejsce6 = null;
	Location miejsce7 = null;
	Location miejsce8 = null;
	Location miejsce9 = null;
	Location miejsce10 = null;
	Location miejsce11 = null;
	Location miejsce12 = null;
	Location miejsce13 = null;
	Location miejsce14 = null;
	Location miejsce15 = null;
	Location miejsce16 = null;
	Location miejsce17 = null;
	Location miejsce18 = null;
	Location miejsce19 = null;
	Location miejsce20 = null;
	Location miejsce21 = null;
	Location miejsce22 = null;
	Location miejsce23 = null;
	Location miejsce24 = null;
	Location miejsce25 = null;
	Location miejsce26 = null;
	Location miejsce27 = null;
	Location miejsce28 = null;
	Location miejsce29 = null;
	Location miejsce30 = null;
	Location miejsce31 = null;
	Location miejsce32 = null;
	Location miejsce33 = null;
	Location miejsce34 = null;
	Location miejsce35 = null;
	Location miejsce36 = null;
	Location miejsce37 = null;
	Location miejsce38 = null;
	Location miejsce39 = null;
	Location miejsce40 = null;

784091427630431250239.png

Regulamin sygnatur

Opublikowano

@Up

Formatowanie popsuło :c

Chodzilo mi o to, ze ogladalem sporo filmikow gdzie uzywali HashMapów i takie podstawy mi wychodzą, tylko z graczami i lokacjami mam problem :/.


 

Jezu chwila..

Coś ty właśnie zrobił XDDD

 

Na początku tak..

Naucz się zmienne nazywać po angielsku i błagam nie pisz jak 95% na MPCForum ,,ALE TO JEST MÓJ KOD I JA GO ROZUMIEM I TAK MA BYĆ I GÓWNO SIĘ ZNASZ".

Od początku wbijaj sobie zasady, które Ci pomogą w przyszłości.

Tak samo przykładowo klasa odpowiadająca za niszczenie klocków ma być:

BlockBreakListener

a nie jakieś

RozwalanieKlockow

Dobra.

Teraz zasadnicze pytanie. Twój kod tak wygląda jak to dałeś czy po prostu Ci się formatowanie popsuło? o.O

 

I co to jest?

	Location miejsce1 = null;
	Location miejsce2 = null;
	Location miejsce3 = null;
	Location miejsce4 = null;
	Location miejsce5 = null;
	Location miejsce6 = null;
	Location miejsce7 = null;
	Location miejsce8 = null;
	Location miejsce9 = null;
	Location miejsce10 = null;
	Location miejsce11 = null;
	Location miejsce12 = null;
	Location miejsce13 = null;
	Location miejsce14 = null;
	Location miejsce15 = null;
	Location miejsce16 = null;
	Location miejsce17 = null;
	Location miejsce18 = null;
	Location miejsce19 = null;
	Location miejsce20 = null;
	Location miejsce21 = null;
	Location miejsce22 = null;
	Location miejsce23 = null;
	Location miejsce24 = null;
	Location miejsce25 = null;
	Location miejsce26 = null;
	Location miejsce27 = null;
	Location miejsce28 = null;
	Location miejsce29 = null;
	Location miejsce30 = null;
	Location miejsce31 = null;
	Location miejsce32 = null;
	Location miejsce33 = null;
	Location miejsce34 = null;
	Location miejsce35 = null;
	Location miejsce36 = null;
	Location miejsce37 = null;
	Location miejsce38 = null;
	Location miejsce39 = null;
	Location miejsce40 = null;

To jest ten problem, to są zdefiniowane zmienne, na początku mają wartość null i ustawiłem że gdy gracz nacisnie ppm przedmiotem i jezeli zmienne te są różne od null to dzieje się dany event

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

No dobrze..

Tylko, że jeśli chcesz zrobić zapis lokacji czy tam statystyk czy inne duperele to i tak nic Ci nie dadzą hashmapki etc, ponieważ po wyłączeniu serwera wszystko przepadnie.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

Jeśli to tak chcesz zrobić to polecałbym Hashmapke<UUID, List<Location>, dodajesz sobie do tej listy lokację a później ją wyciągasz.

Dodasz 30, będziesz mógł wyciągnąć 30. Nie ogranicza Cię to.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

@OldisPL

Żeby stworzyć więcej takich miejsc, muszę stworzyć kolejne mapy?

 

Dodatkowo gdy ma dodać lokację oraz UUID gracza do mapy wyskakuje błąd

Przy map.put(uuid1, p.getLocation());

Dodany obrazek

map jest nullem

Musisz zainicjowac ja poprzez "= new HashMap<>();"

 

I mozesz w hashmapie trzymac hashmape ;_;

Map> map;

 

I masz np map.get(uuid).put("nazwa-lokacji", p.getLocation());

Opublikowano

 

@OldisPL

Żeby stworzyć więcej takich miejsc, muszę stworzyć kolejne mapy?

 

Dodatkowo gdy ma dodać lokację oraz UUID gracza do mapy wyskakuje błąd

Przy map.put(uuid1, p.getLocation());

2lxfgix.png

map jest nullem

Musisz zainicjowac ja poprzez "= new HashMap<>();"

 

I mozesz w hashmapie trzymac hashmape ;_;

Map> map;

 

I masz np map.get(uuid).put("nazwa-lokacji", p.getLocation());

 

,>

Gdy dodaję map.get(uuid1).put("place1", p.getLocation());

Wyskakuje błąd w eclipse

"The method put(String, Location) is undefined for the type Location"

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano


Map<UUID, HashMap<String, Location>> map = new HashMap<>();

Map<String, Location> locations = new HashMap<>();

locations.put("loc1", location);

map.put(uuid, locations);

 

Opublikowano

@OldisPL

Żeby stworzyć więcej takich miejsc, muszę stworzyć kolejne mapy?

 

Dodatkowo gdy ma dodać lokację oraz UUID gracza do mapy wyskakuje błąd

Przy map.put(uuid1, p.getLocation());

Dodany obrazek

map jest nullem

Musisz zainicjowac ja poprzez "= new HashMap<>();"

 

I mozesz w hashmapie trzymac hashmape ;_;

Map> map;

 

I masz np map.get(uuid).put("nazwa-lokacji", p.getLocation());

,>

Gdy dodaję map.get(uuid1).put("place1", p.getLocation());

Wyskakuje błąd w eclipse

"The method put(String, Location) is undefined for the type Location"

Zapomnialem ze pierwsza mapa moge nie miec tego dla uuid

 

If(!map.containsKey(uuid)){

map.put(uuid, new HashMap());

}

Takie cos przed tamtym i powinno pyknac ;)

Opublikowano
Map<UUID, HashMap<String, Location>> map = new HashMap<>();
Map<String, Location> locations = new HashMap<>();
locations.put("loc1", location);
map.put(uuid, locations);

Przy linijce map.put(uuid1, locations);

Jest błąd 

"The method put(UUID, HashMap<String,Location>) in the type Map<UUID,HashMap<String,Location>> is not applicable for the arguments (UUID, Map<String,Location>)"

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

@up, przecież wszystko jest w błędzie napisane <faceplam>

utworzyłeś mapę która przyjmuje stringi, a próbujesz do niego wrzucić uuid. uuid nie jest stringiem tylko obiektem klasy uuid

Opublikowano

@up, przecież wszystko jest w błędzie napisane

utworzyłeś mapę która przyjmuje stringi, a próbujesz do niego wrzucić uuid. uuid nie jest stringiem tylko obiektem klasy uuid

Peoblem jest w tym ze typem wartosci mapki jest hashmapa a on stara sie wsadzic mape (co z tego ze jest utworzona hashmapa skoro zostala "zdegradowana" do poziomu mapy) pomoze albo castowanie albo zmiana typu wartosci na mape albo typu zmiennej na hashmape
Opublikowano

­

Map<UUID, HashMap<String, Location>> map = new HashMap<>();
Map<String, Location> locations = new HashMap<>();
locations.put("loc1", location);
map.put(uuid, locations);

 

Map<UUID , HashMap<String , Location>> map = new HashMap<UUID , HashMap<String , Location>>();

 

 

https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

 

1. mapke warto zainicjować z wielkością większą o ~50% od liczby slotów lub pobawić się loadFactory , tak aby mapa nie była reorganizowana . wraz ze zmianami liczby graczy.

2. z takiej mapki musisz usuwać obiekty (przy wyjściu gracza) bo inaczej zrobi się jeden wielki syf

3. naucz się Javy jest to prosty OBIEKTOWY język (przynajmniej tak w miarę) aby go szybko ogarnąć , polecam Helion Java Podstawy , możesz kupić lub pozyskać w inny sposób ale na miłość boską nie ucz się z "jutuberowych poradników" bez znajomości Javy < jedynie stracisz czas .( w książce sa podstawy potem jeśli będziesz chciał coś zrbić np zapis odczyt do pliku to wystarczy poszukać dokumentacji / ewentualnie przykładów i/o , i najważniejsze nie ucz się na pamięć , nie warto jeśli chcesz utrzymać wiele danych na podstawie klucz - wartość poczytaj o mapach < chcesz zapisać listę danych i mieć możliwość szybkiego usuwania jej elementów sprawdź Listy  < i tu się kłaniają podstawy itd.

4. napisałeś że kod posiada 6000* linijek kodu , ale jeśli ten kod wygląda tak jak podałeś tzn typZmiennej nazwaZmiennej1; , typZmiennej nazwaZmiennej2 , typZmiennej nazwaZmiennejx , to wybacz ale straciłeś tylko czas na zrobienie takiej konstrukcji <- chyba że będzie to miało jakiś większy cel . a gdy już się nauczysz pisać i spojrzysz na ten sam kod po pewnym czasie sam zobaczysz jak idiotyczne rzeczy można napisać < nawet jeśli działa :P

Opublikowano
Map<UUID, HashMap<String, Location>> map = new HashMap<UUID, HashMap<String, Location>>(); 

Zdefiniowałem mapę w której znajduje się hashmapa.

 

Player p = event.getPlayer();
 
Zdefiniowałem zmienną gracza.
 
UUID uuid1 = p.getUniqueId();
 
Zdefiniowałem zmienną która przechowuje uuid gracza.
 
String place = "Miejsce";
 
Zdefiniowałem zmienną która przechowuje nazwę miejsca.
 
I wpisałem coś takiego
 
map.add(uuid1, (place, p.getLocation()));
Lecz niestety eclipse wywala błąd przy tej linijce
"p cannot be resolved or is not a field".

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

sprawdz importy oraz widoczność zmiennych  > po czym rebuild projektu ale teraz nie pamiętam gdzie się znajdował :P (rebuild albo celan project)

Opublikowano

@damianq20

Importy:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

Kod do linii w której występuje błąd:

Map<UUID, HashMap<String, Location>> map = new HashMap<UUID, HashMap<String, Location>>(); 
	@SuppressWarnings("deprecation")
	@EventHandler
	public void interact(PlayerInteractEvent event) {
		Player p = event.getPlayer();
		UUID uuid1 = p.getUniqueId();
		String place = "Miejsce";
		Location miejscetest = null;
		Action action = event.getAction();
                ItemStack manipulator = new ItemStack(Material.NETHER_STAR);
                ItemMeta manipulator1 = manipulator.getItemMeta();
                manipulator1.setDisplayName(ChatColor.AQUA + "Manipulator Czasu");
                manipulator.setItemMeta(manipulator1);
                ItemStack zegar = new ItemStack(Material.WATCH);
                ItemMeta meta = zegar.getItemMeta();
                meta.setDisplayName(ChatColor.AQUA + "Sekundy");
                zegar.setItemMeta(meta);
                zegar.setAmount(20);
                ItemStack zegar1 = new ItemStack(Material.WATCH);
                ItemMeta meta1 = zegar1.getItemMeta();
                meta1.setDisplayName(ChatColor.AQUA + "Sekundy");
                zegar1.setItemMeta(meta1);
		if(action.equals(Action.LEFT_CLICK_AIR) || action.equals(Action.LEFT_CLICK_BLOCK)){
			if(p.getItemInHand().getType() == Material.NETHER_STAR){	
				if(!cd.contains(p)){
					cd.add(p);
					d.setList(cd);
					d.setPlayer(p);
					new Thread(d).start();
					map.add(uuid1, (place, p.getLocation()));
avl8vn.png

 

Dodam jeszcze że mam auto build, ale przy ręcznym buildzie jest to samo, clean też nie pomógł.

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...