|
|
|
@ -1,15 +1,32 @@
|
|
|
|
|
package wtf.beatrice.limbomanager.listeners;
|
|
|
|
|
|
|
|
|
|
import com.sk89q.worldedit.EditSession;
|
|
|
|
|
import com.sk89q.worldedit.WorldEdit;
|
|
|
|
|
import com.sk89q.worldedit.WorldEditException;
|
|
|
|
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|
|
|
|
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
|
|
|
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
|
|
|
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
|
|
|
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
|
|
|
|
|
import com.sk89q.worldedit.function.operation.Operation;
|
|
|
|
|
import com.sk89q.worldedit.function.operation.Operations;
|
|
|
|
|
import com.sk89q.worldedit.math.BlockVector3;
|
|
|
|
|
import com.sk89q.worldedit.session.ClipboardHolder;
|
|
|
|
|
import com.sk89q.worldedit.world.World;
|
|
|
|
|
import org.bukkit.Location;
|
|
|
|
|
import org.bukkit.Material;
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
|
import org.bukkit.event.Listener;
|
|
|
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
|
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
|
|
|
import wtf.beatrice.limbomanager.Cache;
|
|
|
|
|
import wtf.beatrice.limbomanager.LimboManager;
|
|
|
|
|
import wtf.beatrice.limbomanager.objects.Coordinates;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
|
|
public class PlayerTeleporter implements Listener
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
@ -23,9 +40,44 @@ public class PlayerTeleporter implements Listener
|
|
|
|
|
Cache.playerIslands.put(playerName, islandCoords);
|
|
|
|
|
|
|
|
|
|
Location islandLocation = new Location(player.getWorld(), islandCoords.getX(), 64, islandCoords.getZ());
|
|
|
|
|
islandLocation.getBlock().setType(Material.BEDROCK);
|
|
|
|
|
|
|
|
|
|
islandLocation.setY(islandLocation.getY() + 2);
|
|
|
|
|
// load chunk otherwise it will be buggy (no schem load, no tp)
|
|
|
|
|
islandLocation.getWorld().loadChunk(islandLocation.getChunk().getX(), islandLocation.getChunk().getZ(), true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String testSchematicPath = LimboManager.getSchematicsFolder().getAbsolutePath() + File.separator + "endcityship.schem";
|
|
|
|
|
File schematicFile = new File(testSchematicPath);
|
|
|
|
|
|
|
|
|
|
if(!schematicFile.exists())
|
|
|
|
|
System.out.println("no exist");
|
|
|
|
|
|
|
|
|
|
// todo: check if exists, but this is just a test
|
|
|
|
|
|
|
|
|
|
World islandWEWorld = BukkitAdapter.adapt(islandLocation.getWorld());
|
|
|
|
|
Clipboard shematicClipboard;
|
|
|
|
|
|
|
|
|
|
ClipboardFormat clipboardFormat = ClipboardFormats.findByFile(schematicFile);
|
|
|
|
|
try (ClipboardReader reader = clipboardFormat.getReader(new FileInputStream(schematicFile))) {
|
|
|
|
|
shematicClipboard = reader.read();
|
|
|
|
|
|
|
|
|
|
try (EditSession editSession = WorldEdit.getInstance().newEditSession(islandWEWorld)) {
|
|
|
|
|
Operation operation = new ClipboardHolder(shematicClipboard)
|
|
|
|
|
.createPaste(editSession)
|
|
|
|
|
.to(BlockVector3.at(islandLocation.getX(), 64, islandLocation.getZ()))
|
|
|
|
|
// configure here
|
|
|
|
|
.build();
|
|
|
|
|
Operations.complete(operation);
|
|
|
|
|
editSession.flushSession();
|
|
|
|
|
} catch (WorldEditException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
islandLocation.setY(islandLocation.getY() + 20);
|
|
|
|
|
player.teleport(islandLocation);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|