[ÇÖZÜLDÜ] 5 Yerine 1 Blok Kazıyor...

Centeglassered

Kızıltaş Madencisi
En iyi cevaplar
0
Merhaba, uğraştığım bir eklentide amacım oyuncuların elmas çapa ile bir bloğa vurarak o bloğu ve onun altındaki 4 bloğu katman kayası veya boşluk yoksa kazması ve kazdığı bloğu düşürmesi. Fakat yalnızca vurduğum bloğun 4 blok altındaki bloğu kırıyor geri kalan 4 blok yerinde kalıyor ve kırılan blok düşmüyor. Biraz karmaşık ama koda bakınca anlarsınız sanırım.
Kod:
package taskuredelici.centeglassered.main;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
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.Inventory;
import org.bukkit.inventory.ItemStack;

public class PlayerListeners implements Listener {

    @EventHandler
    public void onLeftClick(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Inventory playerInv = player.getInventory();
        Action action = event.getAction();
        Material material = player.getItemInHand().getType();
      
        if (material == Material.DIAMOND_HOE && action == Action.LEFT_CLICK_BLOCK) {
          
            Block block = event.getClickedBlock();
            Block drilledBlock[] = new Block[5];
            Location blockLocation = block.getLocation();
            Location drilledBlockLocation[] = new Location[5];
            int count = 0;
          
            for (int i = 0; i < 5; i++) {
              
                if (i == 0) {
                  
                    drilledBlockLocation[0] = blockLocation;
                } else {
                  
                    Location lastBlockLocation = drilledBlockLocation[i - 1];
                    double blockY = lastBlockLocation.getBlockY();
                  
                    if (blockY == 1) {
                      
                        drilledBlockLocation = drilledBlockLocation[i - 1];
                        player.sendMessage(ChatColor.RED + "Dünyanın altını kazamazsın!..");
                    } else {
                      
                        lastBlockLocation.setY(blockY - 1);
                        drilledBlockLocation = lastBlockLocation;
                    }
                }
            }
          
            for (int i = 0; i < 5; i++) {
              
                drilledBlock = drilledBlockLocation.getBlock();
            }
          
            for (int i = 0; i < 5; i++) {
              
                if (drilledBlock.getType() == Material.BEDROCK) {
                  
                    player.sendMessage(ChatColor.RED + "Katman kayasını kazamazsın!..");
                } else {
                  
                    Material dropedItem = drilledBlock.getType();
                    drilledBlock.setType(Material.AIR);
                    count++;
                    playerInv.addItem(new ItemStack(dropedItem));
                }
            }
          
            player.sendMessage(ChatColor.GREEN + "" + count +" blokluk yer kazıldı...");
        }
    }
}

Bana göre kod gereğinden fazla doğru ama çalışmıyor işte... Şimdiden teşekkürler! :D[DOUBLEPOST=1421257634,1421257332][/DOUBLEPOST]Boş yere kullandığım 2 for döngüsünü kaldırıp içlerindeki kodları ilkinin içine koydum. Çalıştı. :D Boş yere vaktinizi aldıysam özür dilerim! [DOUBLEPOST=1421258044][/DOUBLEPOST]Ayrıca şunu unutmuşum :
Kod:
player.updateInventory();
 
Son düzenleme:

umut_

┌────────────┐ [ 1881 - 193∞ ] └────────────┘
En iyi cevaplar
0
İlginç Bir Fikir Olmuş Sorununu Çözmende Ayrı Güzel :p
 

Centeglassered

Kızıltaş Madencisi
En iyi cevaplar
0
Kendi kendiyle konuşmuş

İlginç Bir Fikir Olmuş Sorununu Çözmende Ayrı Güzel :p
Belki biraz... Ama evet sorunu çözdüm. Fakat olmaması gerekiyordu.[DOUBLEPOST=1421260327,1421260128][/DOUBLEPOST]Zaten
Kod:
if (material == Material.DIAMOND_HOE || action == Action.LEFT_CLICK_BLOCK)
yazmışım
Kod:
if (material == Material.DIAMOND_HOE && action == Action.LEFT_CLICK_BLOCK)
olarak değiştirdim. Dalgınlığım üstümde sanırım. :D[DOUBLEPOST=1421260467][/DOUBLEPOST]Bu arada kodu isteyenler yazsın direkt plugini atayım ya da açık kaynak kodunu atayım.
 

GodofMilker

Nether Yerlisi
En iyi cevaplar
0
Belki biraz... Ama evet sorunu çözdüm. Fakat olmaması gerekiyordu.[DOUBLEPOST=1421260327,1421260128][/DOUBLEPOST]Zaten
Kod:
if (material == Material.DIAMOND_HOE || action == Action.LEFT_CLICK_BLOCK)
yazmışım
Kod:
if (material == Material.DIAMOND_HOE && action == Action.LEFT_CLICK_BLOCK)
olarak değiştirdim. Dalgınlığım üstümde sanırım. :D[DOUBLEPOST=1421260467][/DOUBLEPOST]Bu arada kodu isteyenler yazsın direkt plugini atayım ya da açık kaynak kodunu atayım.
Zaten kodu paylaşmamış mısın ? ._. Paylaşmamışsan kaynak kodlarını bana atabilir misin ._. (1-2 soru da sorarım .-.)
 

Centeglassered

Kızıltaş Madencisi
En iyi cevaplar
0
Zaten kodu paylaşmamış mısın ? ._. Paylaşmamışsan kaynak kodlarını bana atabilir misin ._. (1-2 soru da sorarım .-.)
Paylaştığım plugindeki 3 class ve 1 yml'den yalnızca biri.
Bunun çalışması için bir Main bir Referances bir de plugin dosyası gerekli. Bekle hem plugini hem de projeyi media fire a atayım.
 
Üst