- Баллы
- 76
- Имя в Minecraft
- JolyNoska
Добрый вечер, или день, у меня день, добрый день. Столкнулся с проблемой, что мне надо развернуть постройку из schematic таким образом чтобы она строила перед лицевой стороной сундука, который я ставлю, и бл
агодаря которому дом строить. Вот мой говно-код:
Java:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.block.BlockFace;
import org.bukkit.material.Chest;
import com.sk89q.worldedit.CuboidClipboard;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.data.DataException;
import com.sk89q.worldedit.schematic.SchematicFormat;
@SuppressWarnings("deprecation")
public class Build{
public static List<Thread> th = new ArrayList<>();
public static void build(Location loc, Chest ch, String fileName) {
File file = new File("plugins/WorldEdit/schematics/" + fileName + ".schematic");
SchematicFormat format = SchematicFormat.getFormat(file);
try {
CuboidClipboard cc = format.load(file);
int rotate = (getD(ch.getFacing()) - getD(cc.getOffset())) *90;
if(rotate < 0) {
rotate += 360;
cc.rotate2D(rotate);
Bukkit.broadcastMessage(rotate+"");
}
Location lo = loc.clone().add(
cc.getOffset().getBlockX(),
cc.getOffset().getBlockX(),
cc.getOffset().getBlockZ());
Thread t = new Thread() {
public void run() {
for (int y = 0, ly = cc.getHeight(); y < ly; y++) {
for (int x = 0, lx = cc.getWidth(); x < lx; x++) {
for (int z = 0, lz = cc.getLength(); z < lz; z++) {
BaseBlock b = cc.getBlock(new Vector(x,y,z));
Location l = lo.clone().add(x,y,z);
l.getBlock().setTypeIdAndData(b.getType(), (byte)b.getData(), false);
if(b.getType() != 0) {
lo.getWorld().playEffect(l, Effect.STEP_SOUND, 1);
try { Thread.sleep(100); }
catch (InterruptedException e) { e.printStackTrace(); }
}
}
}
}
}
};
t.start();
th.add(t);
} catch (DataException | IOException e) {
e.printStackTrace();
}
}
public static int getD(BlockFace f) {
if(f == BlockFace.EAST) return 1;
if(f == BlockFace.SOUTH) return 2;
if(f == BlockFace.WEST) return 3;
if(f == BlockFace.NORTH) return 4;
return 0;
}
private static int getD(Vector v) {
if(v.getBlockX() == -2) return 1;
if(v.getBlockX() == -2) return 2;
if(v.getBlockX() == 2) return 3;
if(v.getBlockX() == 2) return 4;
return 0;
}
}