Skocz do zawartości
  • 0

Tworzenie bloku tylko dla Jednego gracza w danej lokacji


Pytanie

Witam, za dobry kod daję 10psc

 

Więc tak, Chcę zrobić takie coś jeżeli gracz się patrzy na blok np dirt i wyżej BlockFace.UP jest material == AIR to podmienia AIR na TNT jeżeli gracz szybko zmieni położenie myszki (spojrzy się na inny blok to te wcześniejsze tnt znika i tworzy tnt w nowej lokacji!)

FAST POMOCY!

Odnośnik do komentarza
https://skript.pl/temat/25945-tworzenie-bloku-tylko-dla-jednego-gracza-w-danej-lokacji/
Udostępnij na innych stronach

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

ale jaki dokładnie masz tu problem? czego nie umiesz zrobić? jaki masz już kod? no chyba że czekasz na gotowca i tyle, to mi się nie chce.

Ale tak to żaden problem, w tasku co np 5 ticków pobierasz block na jaki patrzy gracz - jest od tego metoda getTargetBlock w Playerze (a nawet niżej), wtedy pobierasz ten wyższy, ustawiasz na TNT i zapisujesz lokalizacje do jakiejś mapy Map<UUID, Block> wtedy na początku tego tasku sprawdzasz czy dla danego gracza blok jest już wybrany, i jak nowy jest inny - to usuwasz stary.

Odnośnik do komentarza
https://skript.pl/temat/25945-tworzenie-bloku-tylko-dla-jednego-gracza-w-danej-lokacji/#findComment-171297
Udostępnij na innych stronach

  • 0

To dział pytania i problemy :>

Więc tak, Chcę zrobić takie coś jeżeli gracz się patrzy na blok np dirt i wyżej BlockFace.UP jest material == AIR to podmienia AIR na TNT jeżeli gracz szybko zmieni położenie myszki (spojrzy się na inny blok to te wcześniejsze tnt znika i tworzy tnt w nowej lokacji!)

GotoFinal dal ci wskazowki, wiec co takiego trudnego? Zmarnujesz max 20 minut zycia.

Odnośnik do komentarza
https://skript.pl/temat/25945-tworzenie-bloku-tylko-dla-jednego-gracza-w-danej-lokacji/#findComment-171312
Udostępnij na innych stronach

  • 0

gib moni, ja giv kod i pomoc

HashMap<Player, Block> mapa = new HashMap<>();
    {
        final Player p = null;
        Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            public void run() {
                Block a = p.getTargetBlock(null, 300);
                Block b = p.getWorld().getBlockAt(a.getX(), a.getY() + 1, a.getZ());
                if(mapa.get(p) != null) {
                    if(mapa.get(p).getType() == Material.TNT && mapa.get(p) != b) {
                        b.setType(Material.AIR);
                    }
                }
                if(p.getTargetBlock(null, 300).getType() == Material.DIRT && b.getType() == Material.AIR) {
                    if(b.getType() != Material.TNT) {
                        b.setType(Material.TNT);
                        mapa.remove(p);
                        mapa.put(p, b);
                    }
                }
            }
        }, 3, 3);
    }

zainicjuj se gracza

@yooniks nawet jeśli to teraz nie i dzięki za uwagę

@XXXXXXXXXX zaimportuj se odpowiednie rzeczy (te z bukkita nie nms), tam gdzie jest final Player to daj tego gracza a całość możesz dać np. w komendzie

Edytowane przez LloydPL
Odnośnik do komentarza
https://skript.pl/temat/25945-tworzenie-bloku-tylko-dla-jednego-gracza-w-danej-lokacji/#findComment-171315
Udostępnij na innych stronach

  • 0

@LloydPL nie rzuci to czasem bledu? bloki moga byc edytowane w async? https://www.spigotmc.org/threads/can-a-block-be-changed-on-an-asynchronously-task.168467/
(moge sie mylic)

Odnośnik do komentarza
https://skript.pl/temat/25945-tworzenie-bloku-tylko-dla-jednego-gracza-w-danej-lokacji/#findComment-171401
Udostępnij na innych stronach

  • 0
	@EventHandler
	public void onMove(PlayerMoveEvent e){
		if(e.getPlayer().getItemInHand()==null) return;
		Player p = (Player ) e.getPlayer();
		User u = User.get(p);
			Location target1 = p.getTargetBlock((Set<Material>) null, 5).getLocation().add(0, 1, 0);
			boolean b;
			b = false;
			if(target1.getBlockX()==u.X()){
				b=false;
			}else{
				b=true;
			}
			if(target1.getBlockY()==u.Y()){
				b=false;
			}else{
				b=true;
			}
			if(target1.getBlockZ()==u.Z()){
				b=false;
			}else{
				b=true;
			}
			if(b==true){
				Location loc = new Location(Bukkit.getWorld(p.getWorld().getName()),u.X(),u.Z(),u.Y());
				p.sendBlockChange(target1, 95, (byte)5);
				u.X(target1.getBlockX());
				u.Y(target1.getBlockY());
				u.Z(target1.getBlockZ());
				return;
			}
			if(target1.getBlock().getRelative(BlockFace.DOWN).equals(Material.AIR)) return;
			if(target1.getBlock().getType()!=Material.AIR) return;
			p.sendBlockChange(target1, 95, (byte)14);
		
	}

Pomoże ktoś to zrobić że zapisuje lokacje do zmiennych X Y Z i zmienia blok AIR na STAINED_GLASS:5 a jeżeli gracz zmieni pozycje targetBlock to odczytuje lokacje z usera X Y Z i zmienia ten blok na STAINED_GLASS:14

 

 

Bo zrobiłem to ale działa to trochę inaczej ;(

Edytowane przez XXXXXXXXXX
Odnośnik do komentarza
https://skript.pl/temat/25945-tworzenie-bloku-tylko-dla-jednego-gracza-w-danej-lokacji/#findComment-171686
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...