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 z regeneracją stone


SkredoX

Rekomendowane odpowiedzi

Opublikowano

Witam, ostatnio bawie się w eclipse, i mam taki problem. Piszę sobie plugin na stoniarki, wszystko chula, crafting działa, wiadomość po postawieniu stoniarki też wyskakuje ale nie działa regeneracja stone.. W konsoli nie mam żadnych logów, to jest mój kod na właśnie tą regenerację: 

 

		   if (b.getType() == Material.STONE) {
			      new BukkitRunnable()
			      {
			        public void run()
			        {
			          if (down.getType() != Material.ENDER_STONE) {
			            return;
			          }
			          b.setType(Material.STONE);
			        }
			      }.runTaskLater(Main.getInstance(), 25L);
Opublikowano

Czm down.gettype ? w taki sposób nie zadziała

Dlaczego nie zadziała? Normalnie typ porównuje.

 

@topic

Spróbuj 

if (b.getType().equals(Material.STONE)) { 

i podaj kod zmiennej "down" a najlepiej cały kod eventu.

sygn.png

Opublikowano


@EventHandler

public void onBreak(BlockBreakEvent event)

{

Block block = event.getBlock();

Location loc = block.getLocation();

Location loc1 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1.0D, loc.getZ());

if ((block.getType() == Material.STONE) &&

(loc1.getBlock().getType() == Material.ENDER_STONE)) {

Bukkit.getScheduler().runTaskLater(this.tools, new Runnable()

{

public void run()

{

loc.getBlock().setType(Material.STONE);

}

}, 20);

}

}

 

Opublikowano

	@EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
	  public void onBreakStone(BlockBreakEvent e)
	  {
		Player p = e.getPlayer();
		final Block b = e.getBlock();
		final Block up = b.getLocation().add(0.0D, 1.0D, 0.0D).getBlock(); 
		final Block down = b.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock();
		if(b.getType() == Material.ENDER_STONE){
			if(up.getType() == Material.STONE){
				up.setType(Material.AIR);
				Util.giveItems(p, new ItemStack[] { new ItemStack(Material.STONE) });
			}
			p.sendMessage("§8» §cZniszczyles generator!");
			b.setType(Material.AIR);
			  Util.giveItems(p, new ItemStack[] { new ItemBuilder(Material.ENDER_STONE).setTitle(Util.fixColor("&8» &cGENERATOR &8«")).addLore(Util.fixColor("&8» &3Postaw generator na ziemi a nad nim &7stone&3!")).addLore(Util.fixColor("&8» &cAby zniszczyc generator uzyj dowolnego kilofa!")).build() });
			
		}
		if(b.getType() != Material.ENDER_STONE){
			return;
		}
		   if (b.getType() == Material.STONE) {
			      new BukkitRunnable()
			      {
			        public void run()
			        {
			          if (down.getType() != Material.ENDER_STONE) {
			            return;
			          }
			          b.setType(Material.STONE);
			        }
			      }.runTaskLater(Main.getInstance(), 25L);
	  }


@Venom!

Oto cały kod eventu

 

 

Opublikowano

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

sygn.png

Opublikowano

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

Chce, żeby się regenerowało co ileś tam sekund

Opublikowano

No nie dziwne skoro zamiast pobierać blok z dołu to pobierasz z góry..

 

Wyżej Ci dałem rozwiązanie..


Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

XDDDD większej głupoty nie widziałem niż to co znajduje się w tym hastebinie

Opublikowano

 

 

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

Chce, żeby się regenerowało co ileś tam sekund

 

Popraw kod z tymi wskazówkami co Ci powiedziałem.

 

 

No nie dziwne skoro zamiast pobierać blok z dołu to pobierasz z góry..

 

Wyżej Ci dałem rozwiązanie..

 

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

XDDDD większej głupoty nie widziałem niż to co znajduje się w tym hastebinie

 

Ty wiesz w ogóle co ty gadasz? Kodu widzę nie przejrzałeś, dobrze pobiera, ale blokuje tym returnem i nie działa. ;-; I jakie niby głupoty na tym hastebinie? Ja pokazałem to na kodzie który podał.

sygn.png

Opublikowano

No nie dziwne skoro zamiast pobierać blok z dołu to pobierasz z góry..

 

Wyżej Ci dałem rozwiązanie..

 

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

XDDDD większej głupoty nie widziałem niż to co znajduje się w tym hastebinie

 

final Block down = b.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock();

Jest napisane "subtract", czyli odejmować - odejmuje 1 w koordynacie Y

 

Z twoim też próbowałem, lecz napisałem to tak:

 

 

		  if ((b.getType() == Material.STONE) && 
				    (down.getType() == Material.ENDER_STONE)) {
				    Bukkit.getScheduler().runTaskLater(this.plugin, new Runnable()
				    {
				      public void run()
				      {
				          b.setType(Material.STONE);
				      }
				    }, 20);
				  }

I nie działa, próbowałem twoją wersję i zrobiłem tak:

 

 

		  if ((b.getType() == Material.STONE) && 
				    (loc1.getBlock().getType() == Material.ENDER_STONE)) {
				    Bukkit.getScheduler().runTaskLater(this.plugin, new Runnable()
				    {
				      public void run()
				      {
				          b.setType(Material.STONE);
				      }
				    }, 20);
				  }

I również klapa.. Oczywiście zrobiłem loc i loc1

 

No nie dziwne skoro zamiast pobierać blok z dołu to pobierasz z góry..

 

Wyżej Ci dałem rozwiązanie..

 

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

XDDDD większej głupoty nie widziałem niż to co znajduje się w tym hastebinie

 

 

 

@Venom!

Zastosowałem się do twoich wskazówek , również nie działa..

Opublikowano

 

No nie dziwne skoro zamiast pobierać blok z dołu to pobierasz z góry..

 

Wyżej Ci dałem rozwiązanie..

 

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

XDDDD większej głupoty nie widziałem niż to co znajduje się w tym hastebinie

 

final Block down = b.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock();

Jest napisane "subtract", czyli odejmować - odejmuje 1 w koordynacie Y

 

Z twoim też próbowałem, lecz napisałem to tak:

 

 

		  if ((b.getType() == Material.STONE) && 
				    (down.getType() == Material.ENDER_STONE)) {
				    Bukkit.getScheduler().runTaskLater(this.plugin, new Runnable()
				    {
				      public void run()
				      {
				          b.setType(Material.STONE);
				      }
				    }, 20);
				  }

I nie działa, próbowałem twoją wersję i zrobiłem tak:

 

 

		  if ((b.getType() == Material.STONE) && 
				    (loc1.getBlock().getType() == Material.ENDER_STONE)) {
				    Bukkit.getScheduler().runTaskLater(this.plugin, new Runnable()
				    {
				      public void run()
				      {
				          b.setType(Material.STONE);
				      }
				    }, 20);
				  }

I również klapa.. Oczywiście zrobiłem loc i loc1

 

No nie dziwne skoro zamiast pobierać blok z dołu to pobierasz z góry..

 

Wyżej Ci dałem rozwiązanie..

 

Ty chcesz stroniarki zrobić, że jak zniszczysz stone on się pojawi zaraz? Jeśli tak to to nie zadziała z takim kodem, sprawdzasz czy blok który niszczysz jest enderstone a jeśli nie, przerywasz. Więc jeśli przerwiesz przy tym to nie wykona się dalszy kod z sprawdzaniem strone i regeneracją. http://hastebin.com/ozalujuleh.cs I NIE PRZERABIAJ TYCH MYHARDOW! ;<

XDDDD większej głupoty nie widziałem niż to co znajduje się w tym hastebinie

 


Jesteś rakiem... To co Ci podałem działa na 200% bo sam tego używałem jeśli nie potrafisz sprawdzić bloku pod stone to już nie moja sprawa. Może ty w ogóle nie rejestrujesz eventu XDDD? albo zrób sobie debuga....

Opublikowano

Teraz to nawet nie wywala wiadomości "zniszczyłeś generator"...
Cały kod eventu na ten moment:

 

	@EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
	  public void onBreakStone(BlockBreakEvent e)
	  {
		Player p = e.getPlayer();
		final Block b = e.getBlock();
		final Block up = b.getLocation().add(0.0D, 1.0D, 0.0D).getBlock(); 
		Location loc = b.getLocation();
		Location loc1 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1.0D, loc.getZ());
		if(b.getType() == Material.ENDER_STONE){
			if(up.getType() == Material.STONE){
				up.setType(Material.AIR);
				Util.giveItems(p, new ItemStack[] { new ItemStack(Material.STONE) });
			}
			p.sendMessage("§8» §cZniszczyles generator!");
			b.setType(Material.AIR);
			  Util.giveItems(p, new ItemStack[] { new ItemBuilder(Material.ENDER_STONE).setTitle(Util.fixColor("&8» &cGENERATOR &8«")).addLore(Util.fixColor("&8» &3Postaw generator na ziemi a nad nim &7stone&3!")).addLore(Util.fixColor("&8» &cAby zniszczyc generator uzyj dowolnego kilofa!")).build() });
			
		}
		if(b.getType() == Material.SPONGE){
			if(up.getType() == Material.OBSIDIAN){
				up.setType(Material.AIR);
			}
			p.sendMessage("§8» §cZniszczyles generator!");
			b.setType(Material.AIR);
			Util.giveItems(p, new ItemStack[] { new ItemBuilder(Material.SPONGE).setTitle(Util.fixColor("&8» &3GENERATOR &8«")).addLore(Util.fixColor("&8» &cPostaw generator na ziemi a nad nim &7obsidian&c!")).addLore(Util.fixColor("&8» &7Aby zniszczyc generator uzyj dowolnego kilofa!")).build() });
		}
		  if ((b.getType() == Material.STONE) && 
				    (loc1.getBlock().getType() == Material.ENDER_STONE)) {
				    Bukkit.getScheduler().runTaskLater(this.plugin, new Runnable()
				    {
				      public void run()
				      {
				          loc.getBlock().setType(Material.STONE);
				      }
				    }, 20);
				  }
			   if ((b.getType() == Material.OBSIDIAN) && (loc1.getBlock().getType() == Material.SPONGE)) {
				      new BukkitRunnable()
				      {
				        public void run()
				        {
				          if (loc1.getBlock().getType() != Material.SPONGE) {
				            return;
				          }
				          b.setType(Material.OBSIDIAN);
				        }
				      }.runTaskLater(Main.getInstance(), 300L);
		  }
			   
	  }

Oprócz stoniarki robię też obsydianarki, które są gąbką.

 

Opublikowano

Skoro już sprawdziłeś czy poniżej jest gąbka to po co to robisz drugi raz??

			   if ((b.getType() == Material.OBSIDIAN) && (loc1.getBlock().getType() == Material.SPONGE)) {
				      new BukkitRunnable()
				      {
				        public void run()
				        {
				          if (loc1.getBlock().getType() != Material.SPONGE) {
				            return;
				          }
				          b.setType(Material.OBSIDIAN);
				        }
				      }.runTaskLater(Main.getInstance(), 300L);
		  }

Zresztą nie wiem z czym ty masz problem xD.. użyłem tego "kodu" i mi działa. Stone generuje się obsydian też i mam wiadomości o zniszceniu generatora

 

Masz kolego dodaj tutaj tylko swoje itemstacki ;)

  @EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
  public void onBreakStone(BlockBreakEvent event)
  {
    Player p = event.getPlayer();
    Block block = event.getBlock();
    Location loc = block.getLocation();
    Location under = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1.0D, loc.getZ());
    Location above = new Location(loc.getWorld(), loc.getX(), loc.getY() + 1.0D, loc.getZ());
    if(block.getType() == Material.ENDER_STONE){
      if(above.getBlock().getType() == Material.STONE){
        above.getBlock().setType(Material.AIR);
      }
      p.sendMessage("§8» §cZniszczyles generator!");
      block.setType(Material.AIR);	
    }
    if(block.getType() == Material.SPONGE){
      if(above.getBlock().getType() == Material.OBSIDIAN){
        above.getBlock().setType(Material.AIR);
      }
      p.sendMessage("§8» §cZniszczyles generator!");
      block.setType(Material.AIR);
    }
    if ((block.getType() == Material.STONE) && (under.getBlock().getType() == Material.ENDER_STONE)) {
    Bukkit.getScheduler().runTaskLater(this, new Runnable()
    {
      public void run()
      { 
        loc.getBlock().setType(Material.STONE);
      }
    }, 20);
  }
  if ((block.getType() == Material.OBSIDIAN) && (under.getBlock().getType() == Material.SPONGE)) {
    Bukkit.getScheduler().runTaskLater(this, new Runnable()
    {
      public void run()
      {
        block.setType(Material.OBSIDIAN);
      }
    }, 300L);
  }	   
}
Opublikowano

 

Skoro już sprawdziłeś czy poniżej jest gąbka to po co to robisz drugi raz??

			   if ((b.getType() == Material.OBSIDIAN) && (loc1.getBlock().getType() == Material.SPONGE)) {
				      new BukkitRunnable()
				      {
				        public void run()
				        {
				          if (loc1.getBlock().getType() != Material.SPONGE) {
				            return;
				          }
				          b.setType(Material.OBSIDIAN);
				        }
				      }.runTaskLater(Main.getInstance(), 300L);
		  }

Zresztą nie wiem z czym ty masz problem xD.. użyłem tego "kodu" i mi działa. Stone generuje się obsydian też i mam wiadomości o zniszceniu generatora

 

Masz kolego dodaj tutaj tylko swoje itemstacki ;)

  @EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
  public void onBreakStone(BlockBreakEvent event)
  {
    Player p = event.getPlayer();
    Block block = event.getBlock();
    Location loc = block.getLocation();
    Location under = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1.0D, loc.getZ());
    Location above = new Location(loc.getWorld(), loc.getX(), loc.getY() + 1.0D, loc.getZ());
    if(block.getType() == Material.ENDER_STONE){
      if(above.getBlock().getType() == Material.STONE){
        above.getBlock().setType(Material.AIR);
      }
      p.sendMessage("§8» §cZniszczyles generator!");
      block.setType(Material.AIR);	
    }
    if(block.getType() == Material.SPONGE){
      if(above.getBlock().getType() == Material.OBSIDIAN){
        above.getBlock().setType(Material.AIR);
      }
      p.sendMessage("§8» §cZniszczyles generator!");
      block.setType(Material.AIR);
    }
    if ((block.getType() == Material.STONE) && (under.getBlock().getType() == Material.ENDER_STONE)) {
    Bukkit.getScheduler().runTaskLater(this, new Runnable()
    {
      public void run()
      { 
        loc.getBlock().setType(Material.STONE);
      }
    }, 20);
  }
  if ((block.getType() == Material.OBSIDIAN) && (under.getBlock().getType() == Material.SPONGE)) {
    Bukkit.getScheduler().runTaskLater(this, new Runnable()
    {
      public void run()
      {
        block.setType(Material.OBSIDIAN);
      }
    }, 300L);
  }	   
}

 

Człowieku błagam, jak już komuś coś dajesz to weź to chociaż k***a zrób porządnie, bo to co wrzuciłeś prezentuje poziom ujemny a nawet nie początkujący. Jezus maria @OtekPlay reaguj xD

 Block b = e.getBlock();
        Location l = block.getLocation();
        Location l1 = loc.clone().subtract(0, 1, 0);
        if ((b.getType().equals(Material.STONE)) && (l1.getBlock().getType().equals(Material.ENDER_STONE))) {
            Bukkit.getScheduler().runTaskLater(Main.getInstance(), () -> {
                    block.setType(Material.STONE);
                    return;
            }, 25L);
        }

Masz tu jakiś mój prehistoryczny kod, który na 99% działa. Jeśli czegoś nie rozumiesz to pisz.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

@up

 

Tutaj nie ma juz na co reagowac.. 

 

wmmr4z.jpg

 

@topic

 

Tak, musisz poprwaic returna i bedzie gralo !

Opublikowano

Na pluginy które wrzucił na arha*** wielki pseudo programista też nie ma co reagować ;***

Opublikowano

Api jest po to by ułatwić życie , pobieranie bloku obok innego

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/Block.html#getRelative(org.bukkit.block.BlockFace)

do zapisu i odczytania czy blok jest ta tak zwana stoniarka możesz skorzystać z \ poniżej /,  bo robienie tego w twoj sposob  czyli po samym typie jest średnio opłacalne, przynajmniej według mnie, oczywiście wszystko także zależy od serwera i od tego jak chcesz by to działało

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/metadata/Metadatable.html

zamiast za każdym razem robić obiekt ItemStack możesz zapisać sobie jego kilka wariantów w polu statycznym .

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...