Fix rotation of road schematics

This commit is contained in:
dordsor21 2018-12-28 00:47:48 +00:00
parent 2846363a2c
commit 660754511b

View File

@ -14,18 +14,16 @@ import com.github.intellectualsites.plotsquared.plot.util.SchematicHandler;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.CompoundTagBuilder; import com.sk89q.jnbt.CompoundTagBuilder;
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
import com.sk89q.worldedit.extent.transform.BlockTransformExtent;
import com.sk89q.worldedit.internal.helper.MCDirections; import com.sk89q.worldedit.internal.helper.MCDirections;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.math.transform.AffineTransform;
import com.sk89q.worldedit.registry.state.DirectionalProperty;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.util.Direction; import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
public class HybridPlotWorld extends ClassicPlotWorld { public class HybridPlotWorld extends ClassicPlotWorld {
@ -59,37 +57,11 @@ public class HybridPlotWorld extends ClassicPlotWorld {
// FIXME depends on block ids // FIXME depends on block ids
// Possibly make abstract? // Possibly make abstract?
public static BaseBlock rotate(BaseBlock id) { public static BaseBlock rotate(BaseBlock id) {
Map<Property<?>, Object> stateMap = id.getStates();
if (stateMap != null) {
for (Map.Entry<Property<?>, Object> entry : stateMap.entrySet()) {
if (entry.getKey() instanceof DirectionalProperty) {
Direction dir = (Direction) entry.getValue();
Property property = entry.getKey();
switch (dir) {
case NORTH:
id = id.with(property, Direction.EAST);
break;
case EAST:
id = id.with(property, Direction.SOUTH);
break;
case SOUTH:
id = id.with(property, Direction.WEST);
break;
case WEST:
id = id.with(property, Direction.NORTH);
break;
}
}
}
return id;
}
CompoundTag tag = id.getNbtData(); CompoundTag tag = id.getNbtData();
if (tag != null) { if (tag != null) {
// Handle blocks which store their rotation in NBT // Handle blocks which store their rotation in NBT
PlotSquared.log(tag.getValue().toString());
if (tag.containsKey("Rot")) { if (tag.containsKey("Rot")) {
int rot = tag.asInt("Rot"); int rot = tag.asInt("Rot");
@ -107,12 +79,12 @@ public class HybridPlotWorld extends ClassicPlotWorld {
builder.putByte("Rot", (byte) MCDirections.toRotation(newDirection)); builder.putByte("Rot", (byte) MCDirections.toRotation(newDirection));
return id.toBaseBlock(builder.build()); id.setNbtData(builder.build());
} }
} }
} }
} }
return id; return BlockTransformExtent.transform(id, transform);
} }
public Location getSignLocation(Plot plot) { public Location getSignLocation(Plot plot) {
@ -202,8 +174,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
for (short x = 0; x < w3; x++) { for (short x = 0; x < w3; x++) {
for (short z = 0; z < l3; z++) { for (short z = 0; z < l3; z++) {
for (short y = 0; y < h3; y++) { for (short y = 0; y < h3; y++) {
BaseBlock id = blockArrayClipboard3.getFullBlock(BlockVector3.at(x, y, z)) BaseBlock id = blockArrayClipboard3.getFullBlock(BlockVector3.at(x, y, z));
.toBaseBlock();
if (!id.getBlockType().getMaterial().isAir()) { if (!id.getBlockType().getMaterial().isAir()) {
addOverlayBlock((short) (x + shift + oddshift + centerShiftX), addOverlayBlock((short) (x + shift + oddshift + centerShiftX),
(short) (y + startY), (short) (z + shift + oddshift + centerShiftZ), (short) (y + startY), (short) (z + shift + oddshift + centerShiftZ),
@ -267,13 +238,12 @@ public class HybridPlotWorld extends ClassicPlotWorld {
for (short x = 0; x < w1; x++) { for (short x = 0; x < w1; x++) {
for (short z = 0; z < l1; z++) { for (short z = 0; z < l1; z++) {
for (short y = 0; y < h1; y++) { for (short y = 0; y < h1; y++) {
BaseBlock id = BaseBlock id = blockArrayClipboard1.getFullBlock(BlockVector3.at(x, y, z));
blockArrayClipboard1.getFullBlock(BlockVector3.at(x, y, z)).toBaseBlock();
if (!id.getBlockType().getMaterial().isAir()) { if (!id.getBlockType().getMaterial().isAir()) {
addOverlayBlock((short) (x - shift), (short) (y + startY), addOverlayBlock((short) (x - shift), (short) (y + startY),
(short) (z + shift + oddshift), id, false, h1); (short) (z + shift + oddshift), id, false, h1);
addOverlayBlock((short) (z + shift + oddshift), (short) (y + startY), addOverlayBlock((short) (z + shift + oddshift), (short) (y + startY),
(short) (x - shift), id, true, h1); (short) (shift - x), id, true, h1);
} }
} }
} }