Помогите Найти сундук с названием инвентаря

Статус
Закрыто для дальнейших ответов.
хм. Тогда сделай проверку есть ли в чанке с сундуком игрок.
Код:
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

public class TOP implements Runnable {
    private Entity entity;
    @Override
    public void run() {
        // Получаем мир
        World w = Bukkit.getWorld("world");
        // получаем все загруженные чанки
        for (Chunk chunk : w.getLoadedChunks()) {
            int cx = chunk.getX() << 4;
            int cz = chunk.getZ() << 4;
            for (int x = cx; x < cx + 16; x++) {
                for (int z = cz; z < cz + 16; z++) {
                    for (int y = 0; y < 128; y++) {
                        // получаем блок :o
                        Block b = (Block) chunk.getBlock(x, y, z);
                        // проверяем что это сундучок
                        if (w.getBlockAt(x, y, z).getType() == Material.CHEST) {
                            Chest chest = (Chest) b.getState();
                            // проверяем название
                            if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                                // Получаем всех онлайн игроков
                                for (Player ps : Bukkit.getOnlinePlayers()) {
                                    // Смотрим что в чанке с сундуком есть игрок
                                    if (chunk.getEntities().equals(ps)) {
                                        w.playEffect(chest.getLocation().add(0, 0.7, 0), Effect.ENDER_SIGNAL, 50);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Не помогло, все так же лагает
Мне кажется, что это из-за чанков, которые указаны в коде.
 
Не помогло, все так же лагает
Мне кажется, что это из-за чанков, которые указаны в коде.
Хм, ну или можно при старте плагине проверять сундуки, и спавнить частицы онли один раз, да вот как навсегда их спавнить - хз как.
 
Хм, ну или можно при старте плагине проверять сундуки, и спавнить частицы онли один раз, да вот как навсегда их спавнить - хз как.
Не, мне надо так. Спавнится сундук - на них спавнятся частицы. Если сломать сундук - частицы пропадают. Что-то похожее на сигнальный огонь
 
Не, мне надо так. Спавнится сундук - на них спавнятся частицы. Если сломать сундук - частицы пропадают. Что-то похожее на сигнальный огонь
хе хе хе, ну сейчас сделаю, подожди чуток
Код:
public class TOP implements Runnable {
    static ArrayList<Block> locations = new ArrayList<Block>();
    @Override
    public void run() {
        // Получаем мир
        World w = Bukkit.getWorld("world");
        // получаем все загруженные чанки
        for (Chunk chunk : w.getLoadedChunks()) {
            int cx = chunk.getX() << 4;
            int cz = chunk.getZ() << 4;
            for (int x = cx; x < cx + 16; x++) {
                for (int z = cz; z < cz + 16; z++) {
                    for (int y = 0; y < 128; y++) {
                        // получаем блок :o
                        Block b = (Block) chunk.getBlock(x, y, z);
                        // проверяем что это сундучок
                        if (w.getBlockAt(x, y, z).getType() == Material.CHEST) {
                            Chest chest = (Chest) b.getState();
                            // проверяем название
                            if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                                locations.add(b);
                                // спавн частиц
                                //
                            }
                        }
                        // проверяем что блок был сломан/изменен
                        if (w.getBlockAt(x, y, z).getType() != Material.CHEST) {
                            // удаляем из ArrayList
                            locations.remove(b);
                        }
                    }
                }
            }
        }
    }
    //
    //@Override
    //public void onDisable() {
    //     locations.clear();
    //}
    // в главном классе в отключение плагины удалять все локации
}
Не знаю, это ли нужно тебе
 
хе хе хе, ну сейчас сделаю, подожди чуток
Код:
public class TOP implements Runnable {
    static ArrayList<Block> locations = new ArrayList<Block>();
    @Override
    public void run() {
        // Получаем мир
        World w = Bukkit.getWorld("world");
        // получаем все загруженные чанки
        for (Chunk chunk : w.getLoadedChunks()) {
            int cx = chunk.getX() << 4;
            int cz = chunk.getZ() << 4;
            for (int x = cx; x < cx + 16; x++) {
                for (int z = cz; z < cz + 16; z++) {
                    for (int y = 0; y < 128; y++) {
                        // получаем блок :o
                        Block b = (Block) chunk.getBlock(x, y, z);
                        // проверяем что это сундучок
                        if (w.getBlockAt(x, y, z).getType() == Material.CHEST) {
                            Chest chest = (Chest) b.getState();
                            // проверяем название
                            if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                                locations.add(b);
                                // спавн частиц
                                //
                            }
                        }
                        // проверяем что блок был сломан/изменен
                        if (w.getBlockAt(x, y, z).getType() != Material.CHEST) {
                            // удаляем из ArrayList
                            locations.remove(b);
                        }
                    }
                }
            }
        }
    }
    //
    //@Override
    //public void onDisable() {
    //     locations.clear();
    //}
    // в главном классе в отключение плагины удалять все локации
}
Не знаю, это ли нужно тебе
Да, наверно оно, но все равно опять лагает
 
Вот еще что - то сделал, не знаю мб это нужно:
Код:
public class TOP implements Runnable {
    // Игрок
    private Player p;
    @Override
    public void run() {
        World w = Bukkit.getWorld("world");
        // Его локация
        Location loc = p.getLocation();
        int radius = 10; // твой радиус в котром есть сундук и игрок
        for (Chunk ch : w.getLoadedChunks()) {
            int cx = ch.getX() << 4;
            int cz = ch.getZ() << 4;
            for (int x = cx; x < cx + 16; x++) {
                for (int z = cz; z < cz + 16; z++) {
                    for (int y = 0; y < 128; y++) {
                        if (ch.getBlock(x, y, z).getType() == Material.CHEST) {
                            for (int xr = -radius; x < radius; x++) {
                                for (int yr = -radius; y < radius; y++) {
                                    for (int zr = -radius; z < radius; z++) {
                                        Block b = w.getBlockAt(loc.getBlockX()+x, loc.getBlockY()+y, loc.getBlockZ()+z);
                                        Chest chest = (Chest) b.getState();
                                       
                                        if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                                            // спавн частиц
                                            //
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
 
Вот еще что - то сделал, не знаю мб это нужно:
Код:
public class TOP implements Runnable {
    // Игрок
    private Player p;
    @Override
    public void run() {
        World w = Bukkit.getWorld("world");
        // Его локация
        Location loc = p.getLocation();
        int radius = 10; // твой радиус в котром есть сундук и игрок
        for (Chunk ch : w.getLoadedChunks()) {
            int cx = ch.getX() << 4;
            int cz = ch.getZ() << 4;
            for (int x = cx; x < cx + 16; x++) {
                for (int z = cz; z < cz + 16; z++) {
                    for (int y = 0; y < 128; y++) {
                        if (ch.getBlock(x, y, z).getType() == Material.CHEST) {
                            for (int xr = -radius; x < radius; x++) {
                                for (int yr = -radius; y < radius; y++) {
                                    for (int zr = -radius; z < radius; z++) {
                                        Block b = w.getBlockAt(loc.getBlockX()+x, loc.getBlockY()+y, loc.getBlockZ()+z);
                                        Chest chest = (Chest) b.getState();
                                      
                                        if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                                            // спавн частиц
                                            //
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Он не работает + все равно лагает.
 
  1. for (Chunk ch : w.getLoadedChunks()) {
  2. int cx = ch.getX() << 4;
  3. int cz = ch.getZ() << 4;
  4. for (int x = cx; x < cx + 16; x++) {
  5. for (int z = cz; z < cz + 16; z++) {
  6. for (int y = 0; y < 128; y++) {
 
Вроде бы сделал, но все по-старому. Пока не наступишь - не заработает:
JavaScript:
package com.realistic.timers;

import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;

import com.realistic.api.API;
import com.realistic.list.MinecraftList;
import com.realistic.particle_api.ParticleEffect;

import net.md_5.bungee.api.ChatColor;

public class Spawn_Crate_Particles implements Runnable {

    private API plugin;
    private MinecraftList ml;

    public Spawn_Crate_Particles(API plugin) {
        this.plugin = plugin;
    }

    public Spawn_Crate_Particles(MinecraftList ml) {
        this.ml = ml;
    }

    @Override
    public void run() {

        World w = Bukkit.getWorld("Realistic_World");

        for (Player p : Bukkit.getOnlinePlayers()) {

            Location loc = p.getLocation();
            Block b = (Block) loc.getBlock();

            if (w.getBlockAt(loc).getType() == Material.CHEST) {
                Chest chest = (Chest) b.getState();

                if (chest.getBlockInventory().getName()
                        .equalsIgnoreCase(ChatColor.DARK_GREEN + ChatColor.BOLD.toString() + "Realistic_crate")) {
                    ml.crate_location.add(b);

                    ParticleEffect.REDSTONE.display(1, 15, 0, 0, 0, chest.getLocation().add(0, 0.7, 0.3), 50);
                }
            }   
        }
    }
}
 
Да нет, не так..
Код:
public class TOP implements Runnable {
    // Игрок
    private Player p;
    @Override
    public void run() {
        World w = Bukkit.getWorld("world");
        // Его локация
        Location loc = p.getLocation();
        int radius = 10; // твой радиус в котром есть сундук и игрок
        for (int x = -radius; x < radius; x++) {
            for (int y = -radius; y < radius; y++) {
                for (int z = -radius; z < radius; z++) {
                    Block b = w.getBlockAt(loc.getBlockX()+x, loc.getBlockY()+y, loc.getBlockZ()+z);
                    if (b.getType() == Material.CHEST) {
                        Chest chest = (Chest) b.getState();
                       
                        if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                            // спавн частиц
                        }
                    }
                }
            }
        }
    }
}
 
Да нет, не так..
Код:
public class TOP implements Runnable {
    // Игрок
    private Player p;
    @Override
    public void run() {
        World w = Bukkit.getWorld("world");
        // Его локация
        Location loc = p.getLocation();
        int radius = 10; // твой радиус в котром есть сундук и игрок
        for (int x = -radius; x < radius; x++) {
            for (int y = -radius; y < radius; y++) {
                for (int z = -radius; z < radius; z++) {
                    Block b = w.getBlockAt(loc.getBlockX()+x, loc.getBlockY()+y, loc.getBlockZ()+z);
                    if (b.getType() == Material.CHEST) {
                        Chest chest = (Chest) b.getState();
                      
                        if (chest.getBlockInventory().getName().equalsIgnoreCase("Realistic Crate")) {
                            // спавн частиц
                        }
                    }
                }
            }
        }
    }
}
ВО! Заработало. Спасибо тебе огромное!!!
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх