1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Постройка схемы плагином

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

?

Сделаешь именно ты! Бесплатно, этот плагин?

  1. Да! Я крутой!

    0 голосов
    0,0%
  2. Нет, еще учусь!

    2 голосов
    66,7%
  3. йа овца!

    1 голосов
    33,3%
  1. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Можно спросить, можно ли написать такой плагин, когда ты прописываешь например, команду /build house, будет строиться домик, а схема, будет, из папки с плагином, например, в папке с плагином будет папка "shematics", и оттуда плагин возьмёт эту схему.
    Пояснение на счет команды:
    Ты пишешь /build ИмяСхемы, и она берется из папки. И главное так, что-бы, не надо было писать .shematic в конце названия. Надеюсь мне помогут хотябы тут. :lol::lol:
    UPD: Мне не надо друзей, мне не надо подруг, мне не нужен сраный WE, и FAWE мне тоже не друг!
     
    Последнее редактирование: 12 июл 2019
  2. MurlikMurlik

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

    Баллы:
    96
    Берешь FAWE, пишешь //schematic load name
    Потом пишешь //paste и все, твоя схема вставлена. Или тебе нужно что бы этот "домик" строился медленно?
     
  3. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Можно пример? Я ничего не умею, умею только жать Ctrl + C
     
  4. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    И кстати, FAWE, вроде-как, не тянет на 1.12.2, я бы хотел пример, всё-таки, без WE и FAWE.
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    //schematic load name
    //paste
     
  6. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Хочу без WE
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тогда через https://minecraft.gamepedia.com/Structure_Block
     
  8. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Без WE, и с примером..
     
  9. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    А по другому не? Не хочу целую статью читать 50 раз, и потом создавать еще 1 тему, где спрошу, как пользоватся сранным структурным блоком
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как хочешь.
     
  11. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    p.s. Я ищу что-то на подобии отрывка из WE, но чтобы работало без WE.
     
  12. _Nanit_

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

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Это так не работает. Хочешь без готового решения - придется писать свое. А если тебе лень даже статью почитать об этом, то желаю удачи. Тебе тогда лучше в раздел заказа плагинов.
     
  13. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Во первых, просил пример кода для плагина, во вторых, как это чёрт возьми реализовать плагином?
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Окай, есть у меня набросок для схематиков we.
    Код:
    package Example.schem;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockState;
    import org.bukkit.block.Container;
    import org.bukkit.block.data.BlockData;
    import org.*********ventory.ItemStack;
    import org.bukkit.util.Vector;
    import ru.minecraft.nbt.CompoundNBT;
    import ru.minecraft.nbt.CompressedStreamTools;
    import ru.minecraft.nbt.INBT;
    import ru.minecraft.nbt.ListNBT;
    public class Schem {
        public static void paste(Location start, File file)
                throws IOException {
            CompoundNBT schem = CompressedStreamTools.readCompressed(new FileInputStream(file));
            CompoundNBT meta = schem.getCompound("Metadata");
            Location pos = start
                    .add(new Vector(meta.getInt("WEOffsetX"), meta.getInt("WEOffsetY"), meta.getInt("WEOffsetZ")));
            byte[] blockData = schem.getByteArray("BlockData");
            CompoundNBT palette = schem.getCompound("Palette");
            Map<Integer, String> paletteMap = new HashMap<Integer, String>();
            for (String set : palette.keySet()) {
                paletteMap.put(palette.getInt(set), set);
            }
            ListNBT blockEntities = schem.getList("BlockEntities", 10);
            int i = 0;
            // set block
            for (int y = 0; y < schem.getShort("Height"); ++y) {
                for (int z = 0; z < schem.getShort("Length"); ++z) {
                    for (int x = 0; x < schem.getShort("Width"); ++x) {
                        BlockData data = Bukkit.createBlockData(paletteMap.get((int) blockData[i]));
                        pos.getWorld().getBlockAt(pos.getBlockX() + x, pos.getBlockY() + y, pos.getBlockZ() + z)
                                .setBlockData(data);
                        i++;
                    }
                }
            }
            // set inventory
            for (INBT inbt : blockEntities) {
                CompoundNBT blockEntity = (CompoundNBT) inbt;
                int[] Pos = blockEntity.getIntArray("Pos");
                for (INBT inbt2 : blockEntity.getList("Items", 10)) {
                    CompoundNBT stack = (CompoundNBT) inbt2;
                    Block block = pos.getWorld().getBlockAt(pos.getBlockX() + Pos[0], pos.getBlockY() + Pos[1],
                            pos.getBlockZ() + Pos[2]);
                    BlockState state = block.getState();
                    ItemStack item = SchemNMS.getItemStack(stack);
                    if (state instanceof Container) {
                        Container container = (Container) state;
                        container.getSnapshotInventory().setItem(stack.getInt("Slot"), item);
                        state.update();
                    }
                }
            }
            // TODO spawn entity
        }
    }
    
    Код:
    package Example.schem;
    
    import org.bukkit.Material;
    import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack;
    import org.*********ventory.ItemStack;
    import com.mojang.brigadier.exceptions.CommandSyntaxException;
    import net.minecraft.server.v1_14_R1.MojangsonParser;
    import ru.minecraft.nbt.CompoundNBT;
    
    public class SchemNMS {
        public static ItemStack getItemStack(CompoundNBT stack) {
            try {
                return CraftItemStack
                        .asBukkitCopy(net.minecraft.server.v1_14_R1.ItemStack.a(MojangsonParser.parse(stack.toString())));
            } catch (CommandSyntaxException e) {
                e.printStackTrace();
                return new ItemStack(Material.AIR);
            }
        }
    }
     
  15. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Хахах, спасибо, но как только я вставил код, Eclipse перданул на весь мир из-за 37 ошибок, пишет типо что-то, что у меня не стоит библиотека и не льзя импортнуть некоторые обьекты
     
  16. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Кстати, чисто поинтересоваться, как-бы это сделано было бы через FAWE или WE?
     
  17. Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    сильно воняло когда эклипс дристанул?
     
  18. Автор темы
    donka

    donka Новичок Пользователь

    Баллы:
    21
    Ага
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот вариант через структурный блок.
    Код:
    package Example.schem;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.data.BlockData;
    import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
    
    import net.minecraft.server.v1_14_R1.BlockPosition;
    import net.minecraft.server.v1_14_R1.BlockPropertyStructureMode;
    import net.minecraft.server.v1_14_R1.TileEntityStructure;
    
    public class Structure {
        public static void paste(Location loc, String name) {
            Block block = Bukkit.getWorld(loc.getWorld().getName()).getBlockAt(loc);
            if (block != null) {
                BlockData data = block.getBlockData().clone();
                block.setBlockData(Bukkit.createBlockData(Material.STRUCTURE_BLOCK));
                CraftWorld world = (CraftWorld) block.getWorld();
                BlockPosition bloc = new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
                TileEntityStructure tile = (TileEntityStructure) world.getHandle().getTileEntity(bloc);
                tile.setStructureName(name);
                tile.setUsageMode(BlockPropertyStructureMode.LOAD);
                tile.D();
                tile.D();
                block.setBlockData(data);
            }
        }
    }
     

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