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

  • Автор темы Автор темы donka
  • Дата начала Дата начала

donka

Новичок
Пользователь
Баллы
21
Можно спросить, можно ли написать такой плагин, когда ты прописываешь например, команду /build house, будет строиться домик, а схема, будет, из папки с плагином, например, в папке с плагином будет папка "shematics", и оттуда плагин возьмёт эту схему.
Пояснение на счет команды:
Ты пишешь /build ИмяСхемы, и она берется из папки. И главное так, что-бы, не надо было писать .shematic в конце названия. Надеюсь мне помогут хотябы тут. 😆😆
UPD: Мне не надо друзей, мне не надо подруг, мне не нужен сраный WE, и FAWE мне тоже не друг!
 
Последнее редактирование:
Можно спросить, можно ли написать такой плагин, когда ты прописываешь например, команду /build house, будет строиться домик, а схема, будет, из папки с плагином, например, в папке с плагином будет папка "shematics", и оттуда плагин возьмёт эту схему.
Пояснение на счет команды:
Ты пишешь /build ИмяСхемы, и она берется из папки. И главное так, что-бы, не надо было писать .shematic в конце названия. Надеюсь мне помогут хотябы тут. 😆😆
Берешь FAWE, пишешь //schematic load name
Потом пишешь //paste и все, твоя схема вставлена. Или тебе нужно что бы этот "домик" строился медленно?
 
И кстати, FAWE, вроде-как, не тянет на 1.12.2, я бы хотел пример, всё-таки, без WE и FAWE.
 
Это так не работает. Хочешь без готового решения - придется писать свое. А если тебе лень даже статью почитать об этом, то желаю удачи. Тебе тогда лучше в раздел заказа плагинов.
 
Во первых, просил пример кода для плагина, во вторых, как это чёрт возьми реализовать плагином?
 
Во первых, просил пример кода для плагина, во вторых, как это чёрт возьми реализовать плагином?
Окай, есть у меня набросок для схематиков 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);
        }
    }
}
 
Окай, есть у меня набросок для схематиков 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);
        }
    }
}
Хахах, спасибо, но как только я вставил код, Eclipse перданул на весь мир из-за 37 ошибок, пишет типо что-то, что у меня не стоит библиотека и не льзя импортнуть некоторые обьекты
 
Окай, есть у меня набросок для схематиков 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);
        }
    }
}
Кстати, чисто поинтересоваться, как-бы это сделано было бы через FAWE или WE?
 
Хахах, спасибо, но как только я вставил код, Eclipse перданул на весь мир из-за 37 ошибок, пишет типо что-то, что у меня не стоит библиотека и не льзя импортнуть некоторые обьекты
сильно воняло когда эклипс дристанул?
 
Вот вариант через структурный блок.
Код:
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);
        }
    }
}
 
Назад
Верх