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

WiJava Bukkit Hashmapa - problem z używaniem.


NexTowsky

Rekomendowane odpowiedzi

Opublikowano

Witam, stworzylem komende... dodaje do hashmapy

public long duration = 5*60*1000; 
    public Map<UUID, Long> turbo = new HashMap<UUID, Long>();

komenda /hashmapa info pisze mi ze w tej hashmapie jestem... wiec dziala przez 5 minut...

 

Chce cos zrobic przy wykopaniu stone, jesli jest w hashmapie dostanie beacon'a

Zrobiłem debug, po wykopaniu działa, ale przy sprawdzeniu czy jest w hashmapie juz nie dziala.

 

Tak jakby w ogole nie dzialalo to  z hashmapami,

Czyli pobiera STONE -> debug 1

 

Sprawdza czy jest HASHMAPA -> dalej plugin nie działa

 

Jak to zrobić

 @EventHandler
	  public void onBreak(BlockBreakEvent event)
	  {
                debug stone <-- DOTAD DZIALA
		  Player p = event.getPlayer();
		  p.sendMessage("debugkopanie");
		  if((turbo.get(p.getUniqueId()) + duration) < System.currentTimeMillis()){
			  p.sendMessage("mniejsze");
		  }
		  if(!turbo.containsKey(p.getUniqueId())){
			  p.sendMessage("niemaaa");
		  }
	    if ((event.getBlock().getType() == Material.STONE) && 
	      (event.getPlayer().getGameMode().equals(GameMode.SURVIVAL)))
	    {
	    	p.sendMessage("debug1");
Opublikowano


public HashMap<UUID, Long> turbo = new HashMap<>();

public long duration = 5 * 60 * 1000;

 

@EventHandler

public void onBlockBreak(BlockBreakEvent event){

Player player = event.getPlayer();

player.sendMessage("debugkopanie");

if(!turbo.containsKey(player.getUniqueId())){

player.sendMessage("niemaaa");

return;

}

if(turbo.get(player.getUniqueId()) + duration < System.currentTimeMillis()){

player.sendMessage("mniejsze");

return;

}

if(!player.getGameMode().equals(GameMode.SURVIVAL)) return;

Block block = event.getBlock();

if(!block.getType().equals(Material.STONE)) return;

player.sendMessage("debug1");

}

Opublikowano

@NexTowsky

Jesteś pewny, że odwołujesz się do tej samej mapy? Może tworzysz 2 zmienne: jedną tam, gdzie event, drugą tam gdzie komenda i odwołujesz się raz do tej, raz do innej.

 

@HugoZar

Nie chcę się czepiać, ale te returny to zły nawyk. Powinien być tylko jeden return na funkcję/metodę. Może Ci się kiedyś przydać przy prezentacji kodu w rozmowie o pracę. :)

Oczywiście używanie tego w niczym nie przeszkadza. Jeśli chcesz używać - używaj. To tylko dla "ładniejszego" kodu.

Opublikowano

@HugoZar

@kluseka

 

 

public long duration = 5*60*1000;  
    public Map<UUID, Long> turbo = new HashMap<UUID, Long>();
	
	
	
	  
	
	  @EventHandler
	  public void onBlockBreak(BlockBreakEvent event){
	      Player player = event.getPlayer();
	      player.sendMessage("debugkopanie");
	      if(!turbo.containsKey(player.getUniqueId())){
	          player.sendMessage("niemaaa");
	          return;
	      }
	      if(turbo.get(player.getUniqueId()) + duration < System.currentTimeMillis()){
	          player.sendMessage("mniejsze");
	          return;
	      }
	      if(!player.getGameMode().equals(GameMode.SURVIVAL)) return;
	      Block block = event.getBlock();
	      if(!block.getType().equals(Material.STONE)) return;
	      
	      player.sendMessage("debug1");
	           ItemStack gold = new ItemStack(Material.GOLD_INGOT, 1);
	           World wrld = event.getBlock().getWorld();
	           wrld.dropItem(event.getBlock().getLocation(), gold);
	           player.sendMessage("debug2");
	         
	  }

	  
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	@Override	
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("hashmapa")){
		if(!(sender instanceof Player)){
			return false;
		}
		if(!p.hasPermission("asdasdasd")){
			return false;
		}
		if(args.length == 1){
			if(args[0].equalsIgnoreCase("daj")){
				for(Player s : Bukkit.getOnlinePlayers()){
					turbo.put(s.getUniqueId(), System.currentTimeMillis());
					p.sendMessage("dany");
					Bukkit.broadcastMessage("danyy");
					return true;
				}
			}
			if(args[0].equalsIgnoreCase("info")){
				if(turbo.containsKey(p.getUniqueId())){
					p.sendMessage("masz");
				}
				else
				{
					p.sendMessage("nie");
				}
			}
		}
		}
		return false;
		}

 

 

Opublikowano

sprawdz czy odwołujesz się do tej samej mapy, wyświetl do konosli System.identityHashCode(map) powinno zawsze zwracać to samo dla tego samego obiektu.

1438614356923701010629.png

 

Opublikowano

 

@HugoZar

@kluseka

 

 

 
public long duration = 5*60*1000;  
    public Map<UUID, Long> turbo = new HashMap<UUID, Long>();
	
	
	
	  
	
	  @EventHandler
	  public void onBlockBreak(BlockBreakEvent event){
	      Player player = event.getPlayer();
	      player.sendMessage("debugkopanie");
	      if(!turbo.containsKey(player.getUniqueId())){
	          player.sendMessage("niemaaa");
	          return;
	      }
	      if(turbo.get(player.getUniqueId()) + duration < System.currentTimeMillis()){
	          player.sendMessage("mniejsze");
	          return;
	      }
	      if(!player.getGameMode().equals(GameMode.SURVIVAL)) return;
	      Block block = event.getBlock();
	      if(!block.getType().equals(Material.STONE)) return;
	      
	      player.sendMessage("debug1");
	           ItemStack gold = new ItemStack(Material.GOLD_INGOT, 1);
	           World wrld = event.getBlock().getWorld();
	           wrld.dropItem(event.getBlock().getLocation(), gold);
	           player.sendMessage("debug2");
	         
	  }

	  
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	@Override	
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("hashmapa")){
		if(!(sender instanceof Player)){
			return false;
		}
		if(!p.hasPermission("asdasdasd")){
			return false;
		}
		if(args.length == 1){
			if(args[0].equalsIgnoreCase("daj")){
				for(Player s : Bukkit.getOnlinePlayers()){
					turbo.put(s.getUniqueId(), System.currentTimeMillis());
					p.sendMessage("dany");
					Bukkit.broadcastMessage("danyy");
					return true;
				}
			}
			if(args[0].equalsIgnoreCase("info")){
				if(turbo.containsKey(p.getUniqueId())){
					p.sendMessage("masz");
				}
				else
				{
					p.sendMessage("nie");
				}
			}
		}
		}
		return false;
		}
package com.gmail.hugozarpl.jktest.plugins;

import com.gmail.hugozarpl.utils5.command.QCommand;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;

import java.util.HashMap;
import java.util.UUID;

public class TesterClass implements Listener {

    private static HashMap<UUID, Long> turbo = new HashMap<>();

    @EventHandler
    public void onBlockBreak(BlockBreakEvent event){
        Player player = event.getPlayer();
        if(!turbo.containsKey(player.getUniqueId())) return;
        if(turbo.get(player.getUniqueId()) + 5 * 60 * 1000 > System.currentTimeMillis()) return;
        if(!player.getGameMode().equals(GameMode.SURVIVAL)) return;
        Block block = event.getBlock();
        if(!block.getType().equals(Material.STONE)) return;
        ItemStack gold = new ItemStack(Material.GOLD_INGOT, 1);
        block.getWorld().dropItemNaturally(block.getLocation(), gold);
    }

    @QCommand(name = "tester")
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(!(sender instanceof Player)){
            return true;
        }
        Player player = (Player)sender;
        if(!player.hasPermission("permission")){
            player.sendMessage("permission");
            return true;
        }
        if(args.length != 1){
            player.sendMessage("args");
            return true;
        }
        if(args[0].equalsIgnoreCase("give")){
            for(Player online : Bukkit.getOnlinePlayers()){
                turbo.put(online.getUniqueId(), System.currentTimeMillis());
            }
            return true;
        }
        if(args[0].equalsIgnoreCase("info")){
            if(!turbo.containsKey(player.getUniqueId())){
                player.sendMessage("false");
                return true;
            }
            player.sendMessage("true");
            return true;
        }
        player.sendMessage("arg");
        return true;
    }
}

 

 

Opublikowano

@HugoZar

info - > pisze , że TRUE, kopie nic nie wypada

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
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.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;

import java.util.HashMap;
import java.util.UUID;

public class Komendsy implements Listener, CommandExecutor{

    private static HashMap<UUID, Long> turbo = new HashMap<>();

    @EventHandler
    public void onBlockBreak(BlockBreakEvent event){
        Player player = event.getPlayer();
        if(!turbo.containsKey(player.getUniqueId())) return;
        if(turbo.get(player.getUniqueId()) + 5 * 60 * 1000 > System.currentTimeMillis()) return;
        if(!player.getGameMode().equals(GameMode.SURVIVAL)) return;
        Block block = event.getBlock();
        if(!block.getType().equals(Material.STONE)) return;
        ItemStack gold = new ItemStack(Material.GOLD_INGOT, 1);
        block.getWorld().dropItemNaturally(block.getLocation(), gold);
    }

    public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
    	if(cmd.getName().equalsIgnoreCase("turbodrop")){
        if(!(sender instanceof Player)){
            return true;
        }
        Player player = (Player)sender;
        if(!player.hasPermission("permission.asd")){
            player.sendMessage("permission");
            return true;
        }
        if(args.length != 1){
            player.sendMessage("args");
            return true;
        }
        if(args[0].equalsIgnoreCase("give")){
            for(Player online : Bukkit.getOnlinePlayers()){
                turbo.put(online.getUniqueId(), System.currentTimeMillis());
            }
            return true;
        }
        if(args[0].equalsIgnoreCase("info")){
            if(!turbo.containsKey(player.getUniqueId())){
                player.sendMessage("false");
                return true;
            }
            player.sendMessage("true");
            return true;
        }
        player.sendMessage("arg");
        return true;
    }
		return false;
}
}
Opublikowano

 

@HugoZar

info - > pisze , że TRUE, kopie nic nie wypada

 

 

 
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
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.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;

import java.util.HashMap;
import java.util.UUID;

public class Komendsy implements Listener, CommandExecutor{

    private static HashMap<UUID, Long> turbo = new HashMap<>();

    @EventHandler
    public void onBlockBreak(BlockBreakEvent event){
        Player player = event.getPlayer();
        if(!turbo.containsKey(player.getUniqueId())) return;
        if(turbo.get(player.getUniqueId()) + 5 * 60 * 1000 > System.currentTimeMillis()) return;
        if(!player.getGameMode().equals(GameMode.SURVIVAL)) return;
        Block block = event.getBlock();
        if(!block.getType().equals(Material.STONE)) return;
        ItemStack gold = new ItemStack(Material.GOLD_INGOT, 1);
        block.getWorld().dropItemNaturally(block.getLocation(), gold);
    }

    public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
    	if(cmd.getName().equalsIgnoreCase("turbodrop")){
        if(!(sender instanceof Player)){
            return true;
        }
        Player player = (Player)sender;
        if(!player.hasPermission("permission.asd")){
            player.sendMessage("permission");
            return true;
        }
        if(args.length != 1){
            player.sendMessage("args");
            return true;
        }
        if(args[0].equalsIgnoreCase("give")){
            for(Player online : Bukkit.getOnlinePlayers()){
                turbo.put(online.getUniqueId(), System.currentTimeMillis());
            }
            return true;
        }
        if(args[0].equalsIgnoreCase("info")){
            if(!turbo.containsKey(player.getUniqueId())){
                player.sendMessage("false");
                return true;
            }
            player.sendMessage("true");
            return true;
        }
        player.sendMessage("arg");
        return true;
    }
		return false;
}
}

 

 

 

Ten kod co Ci podesłałem testowałem u siebie na serwerze i działał dobrze.

Opublikowano

@HugoZar

Dodałem w sumie to

if(cmd.getName().equalsIgnoreCase("turbodrop")){

bo coś mi dziwnego podałeś jakieś Qcommand xD

A w Evencie nic, już nie mam pojęcia o co chodzi


@HugoZar

Komenda zwraca = TRUE, że mam.

 

A w evencie kappa nic się nie dzieje, żadnego błędu gold nie dropi.

Opublikowano

@HugoZar

Dodałem w sumie to

if(cmd.getName().equalsIgnoreCase("turbodrop")){

bo coś mi dziwnego podałeś jakieś Qcommand xD

A w Evencie nic, już nie mam pojęcia o co chodzi

@HugoZar

Komenda zwraca = TRUE, że mam.

 

A w evencie kappa nic się nie dzieje, żadnego błędu gold nie dropi.

napisałem ci...

 

sprawdz czy odwołujesz się do tej samej mapy, wyświetl do konosli System.identityHashCode(map) powinno zawsze zwracać to samo dla tego samego obiektu.

 

Jestem prawie pewien że to to, pewnie miałeś coś takiego w kodzie: (w uproszczeniu)

getCommand(...).set(new Komendsy())
Bukkit.getPl...().regEvent(new Komendsy())

A twoje mapka nie była statyczna, więc listener i komendy mały osobne mapy.

A można to zrobić tak:

MojaKlasa inst = new MojeKlasa();
getCommand(...).set(inst)
Bukkit.getPl...().regEvent(inst)

1438614356923701010629.png

 

Opublikowano

Proszę o pomoc

@HugoZar

@GotoFinal

@OldisPL

 

Bo zrobiłem tak jak mówi gotofinal i dalej nic.

boże.. to nie były dokładne linijki, tylko przykład by użyć tej samej instancji obiektu, a tak to rejestrujesz komendę/event tak jak zawsze, jak nie potrafisz przerobić przykładu pod własny kod - rzuć javę.

1438614356923701010629.png

 

Opublikowano

@GotoFinal

Ty też chyba kiedyś potrzebowałeś pomocy, a jeśli się komuś raz pomoże to już on to zapamięta

Komendsy inst = new Komendsy();
	    getCommand("turbodrop").setExecutor(inst);
	    Bukkit.getPluginManager().registerEvents(inst, instance);

Proszę tylko o poprawe tych 3 linijek ....

@HugoZar

@OldisPL

Opublikowano

@GotoFinal

Ty też chyba kiedyś potrzebowałeś pomocy, a jeśli się komuś raz pomoże to już on to zapamięta

Komendsy inst = new Komendsy();
	    getCommand("turbodrop").setExecutor(inst);
	    Bukkit.getPluginManager().registerEvents(inst, instance);

Proszę tylko o poprawe tych 3 linijek ....

@HugoZar

@OldisPL

on nigdy nie potrzebował pomocy.. to goto ;_;

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...