Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 26 июл 2016.

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Не помогло, все так же лагает
    Мне кажется, что это из-за чанков, которые указаны в коде.
     
  2. Хостинг MineCraft
    <
  3. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Хм, ну или можно при старте плагине проверять сундуки, и спавнить частицы онли один раз, да вот как навсегда их спавнить - хз как.
     
  4. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Не, мне надо так. Спавнится сундук - на них спавнятся частицы. Если сломать сундук - частицы пропадают. Что-то похожее на сигнальный огонь
     
  5. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    хе хе хе, ну сейчас сделаю, подожди чуток[DOUBLEPOST=1469692935,1469692415][/DOUBLEPOST]
    Код:
    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();
        //}
        // в главном классе в отключение плагины удалять все локации
    }
    Не знаю, это ли нужно тебе
     
  6. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Да, наверно оно, но все равно опять лагает
     
  7. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Вот еще что - то сделал, не знаю мб это нужно:
    Код:
    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")) {
                                                // спавн частиц
                                                //
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
     
  8. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Он не работает + все равно лагает.
     
  9. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    ну тогда я уже не знаю. Попробуй без проверки чанков.
     
  10. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я не могу понять, где у тебя проверка чанков.
     
  11. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    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++) {
     
  12. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Вроде бы сделал, но все по-старому. Пока не наступишь - не заработает:
    Код:
    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);
                    }
                }   
            }
        }
    }
     
  13. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Да нет, не так..
    Код:
    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")) {
                                // спавн частиц
                            }
                        }
                    }
                }
            }
        }
    }
     
  14. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    ВО! Заработало. Спасибо тебе огромное!!!
     
  15. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Закрывай тему :)
     
Статус темы:
Закрыта.

Поделиться этой страницей