ViperG
Новичок
- Баллы
- 6
- Имя в Minecraft
- ViperG
(Полный 0 в разработке плагинов, учусь)
Создаю плагин для ивентов со вставкой схематик и своими нуждами. но столкнулся с проблемой что не находит импорт schematic. Весь интернет облазил всего его используют. код написан вручную + помощь gpt.
Версия майна 1.18.2
Версия WorldEdit 7.2.20
import com.sk89q.worldedit.schematic.Schematic;
вот класс ивента:
*
code(
package ru.viperg.deadmineevent;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.schematic.Schematic;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class EventListener implements Listener {
private final JavaPlugin plugin;
private boolean eventActive = false;
private long eventDuration = 600; // Время ивента в секундах
public EventListener(JavaPlugin plugin) {
this.plugin = plugin;
}
public void startEvent(Player player) {
if (eventActive) {
player.sendMessage("Ивент уже активен!");
return;
}
eventActive = true;
Location spawnLocation = new Location(player.getWorld(), 29, 92, 124); // Замените на координаты вашего спавна
spawnStructure(spawnLocation);
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard scoreboard = manager.getNewScoreboard();
Team eventTeam = scoreboard.registerNewTeam("event");
for (Player p : Bukkit.getOnlinePlayers()) {
eventTeam.addEntry(p.getName());
}
// Отсчет времени ивента
new BukkitRunnable() {
int remainingTime = (int) eventDuration;
@Override
public void run() {
if (remainingTime <= 0) {
for (Player p : Bukkit.getOnlinePlayers()) {
eventTeam.removeEntry(p.getName());
}
player.sendMessage("Ивент завершен!");
eventActive = false;
this.cancel();
return;
}
remainingTime--;
}
}.runTaskTimer(plugin, 0, 20);
}
private void spawnStructure(Location location) {
// Логика спавна постройки из схемы
// Например:
WorldEdit worldEdit = WorldEdit.getInstance();
World weWorld = BukkitAdapter.adapt(location.getWorld());
try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(weWorld, -1)) {
InputStream inputStream = plugin.getResource("schem/test.schem");
if (inputStream == null) {
System.out.println("Схема не найдена!");
return;
}
// Загрузка схемы
SchematicFormat format = SchematicFormat.getFormat(inputStream);
Schematic schematic = format.load(inputStream);
// Вставка схемы в мир
schematic.paste(editSession, BukkitAdapter.adapt(location), true);
editSession.flushQueue(); // Завершение редактирования
} catch (IOException e) {
e.printStackTrace();
}
// Создание сундуков
for (int i = 0; i < 5; i++) {
Block block = location.clone().add(i, 0, 0).getBlock();
block.setType(Material.CHEST);
Chest chest = (Chest) block.getState();
chest.getInventory().addItem(new ItemStack(Material.DIAMOND, 1));
}
}
@EventHandler
public void onChestOpen(InventoryOpenEvent event) {
if (eventActive) { // Если ивент активен, отменяем открытие сундуков
event.setCancelled(true);
}
}
}
)
*
Создаю плагин для ивентов со вставкой схематик и своими нуждами. но столкнулся с проблемой что не находит импорт schematic. Весь интернет облазил всего его используют. код написан вручную + помощь gpt.
Версия майна 1.18.2
Версия WorldEdit 7.2.20
import com.sk89q.worldedit.schematic.Schematic;
вот класс ивента:
*
code(
package ru.viperg.deadmineevent;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.schematic.Schematic;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class EventListener implements Listener {
private final JavaPlugin plugin;
private boolean eventActive = false;
private long eventDuration = 600; // Время ивента в секундах
public EventListener(JavaPlugin plugin) {
this.plugin = plugin;
}
public void startEvent(Player player) {
if (eventActive) {
player.sendMessage("Ивент уже активен!");
return;
}
eventActive = true;
Location spawnLocation = new Location(player.getWorld(), 29, 92, 124); // Замените на координаты вашего спавна
spawnStructure(spawnLocation);
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard scoreboard = manager.getNewScoreboard();
Team eventTeam = scoreboard.registerNewTeam("event");
for (Player p : Bukkit.getOnlinePlayers()) {
eventTeam.addEntry(p.getName());
}
// Отсчет времени ивента
new BukkitRunnable() {
int remainingTime = (int) eventDuration;
@Override
public void run() {
if (remainingTime <= 0) {
for (Player p : Bukkit.getOnlinePlayers()) {
eventTeam.removeEntry(p.getName());
}
player.sendMessage("Ивент завершен!");
eventActive = false;
this.cancel();
return;
}
remainingTime--;
}
}.runTaskTimer(plugin, 0, 20);
}
private void spawnStructure(Location location) {
// Логика спавна постройки из схемы
// Например:
WorldEdit worldEdit = WorldEdit.getInstance();
World weWorld = BukkitAdapter.adapt(location.getWorld());
try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(weWorld, -1)) {
InputStream inputStream = plugin.getResource("schem/test.schem");
if (inputStream == null) {
System.out.println("Схема не найдена!");
return;
}
// Загрузка схемы
SchematicFormat format = SchematicFormat.getFormat(inputStream);
Schematic schematic = format.load(inputStream);
// Вставка схемы в мир
schematic.paste(editSession, BukkitAdapter.adapt(location), true);
editSession.flushQueue(); // Завершение редактирования
} catch (IOException e) {
e.printStackTrace();
}
// Создание сундуков
for (int i = 0; i < 5; i++) {
Block block = location.clone().add(i, 0, 0).getBlock();
block.setType(Material.CHEST);
Chest chest = (Chest) block.getState();
chest.getInventory().addItem(new ItemStack(Material.DIAMOND, 1));
}
}
@EventHandler
public void onChestOpen(InventoryOpenEvent event) {
if (eventActive) { // Если ивент активен, отменяем открытие сундуков
event.setCancelled(true);
}
}
}
)
*
Вложения:
Последнее редактирование: