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

Помогите Как реализовать получение мира?

Тема в разделе "Разработка плагинов для новичков", создана пользователем cradles, 14 янв 2024.

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

    cradles Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Mattgyve1990
    Код:
                    ClipboardHolder holder = new ClipboardHolder(new BukkitWorld(player.getWorld()));
                    EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(worldEditWorld, -1);
    мне нужно получить мир в ClipboardHolder, код, который у меня сейчас воспроизводит такую ошибку:
    Код:
    'ClipboardHolder(com.sk89q.worldedit.extent.clipboard.Clipboard)' in 'com.sk89q.worldedit.session.ClipboardHolder' cannot be applied to '(com.sk89q.worldedit.bukkit.BukkitWorld)'
    Вот полный код плагина, если потребуется:

    Код:
    package me.matt.marenas;
    
    import com.sk89q.worldedit.EditSession;
    import com.sk89q.worldedit.LocalSession;
    import com.sk89q.worldedit.WorldEdit;
    import com.sk89q.worldedit.bukkit.BukkitWorld;
    import com.sk89q.worldedit.extent.clipboard.Clipboard;
    import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
    import com.sk89q.worldedit.math.BlockVector3;
    import com.sk89q.worldedit.regions.CuboidRegion;
    import com.sk89q.worldedit.regions.Region;
    import com.sk89q.worldedit.session.ClipboardHolder;
    import com.sk89q.worldedit.world.World;
    import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
    import com.sk89q.worldedit.bukkit.BukkitAdapter;
    
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Marenas extends JavaPlugin implements CommandExecutor {
    
        private final Map<String, Location> pos1Map = new HashMap<>();
        private final Map<String, Location> pos2Map = new HashMap<>();
    
        @Override
        public void onEnable() {
            getLogger().info("Marenas has been enabled!");
            getCommand("ma").setExecutor(this);
        }
    
        @Override
        public void onDisable() {
            getLogger().info("Marenas has been disabled!");
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("Only players can use this command!");
                return true;
            }
    
            Player player = (Player) sender;
    
            if (command.getName().equalsIgnoreCase("ma")) {
                if (args.length == 0) {
                    player.sendMessage("§cUsage: /ma pos1 <arenaName> or /ma pos2 <arenaName> or /ma save <arenaName>");
                    return true;
                }
    
                if (args[0].equalsIgnoreCase("pos1")) {
                    if (args.length != 2) {
                        player.sendMessage("§cUsage: /ma pos1 <arenaName>");
                        return true;
                    }
    
                    Location pos1 = player.getLocation();
                    pos1Map.put(args[1], pos1);
                    player.sendMessage("§aPosition 1 set for arena " + args[1]);
                    return true;
                }
    
                if (args[0].equalsIgnoreCase("pos2")) {
                    if (args.length != 2) {
                        player.sendMessage("§cUsage: /ma pos2 <arenaName>");
                        return true;
                    }
    
                    Location pos2 = player.getLocation();
                    pos2Map.put(args[1], pos2);
                    player.sendMessage("§aPosition 2 set for arena " + args[1]);
                    return true;
                }
    
                if (args[0].equalsIgnoreCase("save")) {
                    if (args.length != 2) {
                        player.sendMessage("§cUsage: /ma save <arenaName>");
                        return true;
                    }
    
                    Location pos1 = pos1Map.get(args[1]);
                    Location pos2 = pos2Map.get(args[1]);
    
                    if (pos1 == null || pos2 == null) {
                        player.sendMessage("§cPlease set both positions for arena " + args[1]);
                        return true;
                    }
    
                    World world = BukkitAdapter.adapt(player.getWorld());
                    LocalSession localSession = WorldEdit.getInstance().getSessionManager().get(BukkitAdapter.adapt(player));
                    World worldEditWorld = localSession.getSelectionWorld();
                    Region region = new CuboidRegion(
                            BlockVector3.at(pos1.getBlockX(), pos1.getBlockY(), pos1.getBlockZ()),
                            BlockVector3.at(pos2.getBlockX(), pos2.getBlockY(), pos2.getBlockZ()));
    
                    ClipboardHolder holder = new ClipboardHolder(new BukkitWorld(player.getWorld()));
                    EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(worldEditWorld, -1);
    
                    File schematicFile = new File(getDataFolder(), args[1] + ".schematic");
    
                    try (ClipboardWriter writer = ClipboardFormats.findByFile(schematicFile).getWriter(new FileOutputStream(schematicFile))) {
                        writer.write(holder.getClipboard());
                    } catch (IOException e) {
                        e.printStackTrace();
                        player.sendMessage("§cError while saving arena " + args[1]);
                        return true;
                    }
    
                    player.sendMessage("§aArena " + args[1] + " saved!");
                    return true;
                }
            }
            return false;
        }
    }
    надеюсь здесь найду помощь, ибо сам не знаю как чинить:(
     
  2. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Могу предложить что-то подобное:
    Код:
    final CuboidRegion regionToCopy = new CuboidRegion(BukkitAdapter.asBlockVector(p1), BukkitAdapter.asBlockVector(p2));
    final ClipboardHolder clipboardHolder = new ClipboardHolder(new Clipboard(regionToCopy));
    
    Где p1 и p2 – баккитовские Location, точки выделения арены кубоидом.
     
  3. Автор темы
    cradles

    cradles Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Mattgyve1990
    новая проблема:
    'Clipboard' is abstract; cannot be instantiated
     
  4. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Замени new Clipboard(regionToCopy) на new BlockArrayClipboard(regionToCopy).
     
  5. Автор темы
    cradles

    cradles Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Mattgyve1990
    спасибо за помощь!
     
Статус темы:
Закрыта.

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