Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

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;
    }
}
надеюсь здесь найду помощь, ибо сам не знаю как чинить:(
 
мне нужно получить мир в ClipboardHolder, код, который у меня сейчас воспроизводит такую ошибку:
Могу предложить что-то подобное:
Код:
final CuboidRegion regionToCopy = new CuboidRegion(BukkitAdapter.asBlockVector(p1), BukkitAdapter.asBlockVector(p2));
final ClipboardHolder clipboardHolder = new ClipboardHolder(new Clipboard(regionToCopy));
Где p1 и p2 – баккитовские Location, точки выделения арены кубоидом.
 
Могу предложить что-то подобное:
Код:
final CuboidRegion regionToCopy = new CuboidRegion(BukkitAdapter.asBlockVector(p1), BukkitAdapter.asBlockVector(p2));
final ClipboardHolder clipboardHolder = new ClipboardHolder(new Clipboard(regionToCopy));
Где p1 и p2 – баккитовские Location, точки выделения арены кубоидом.
новая проблема:
'Clipboard' is abstract; cannot be instantiated
 
Замени new Clipboard(regionToCopy) на new BlockArrayClipboard(regionToCopy).
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх