geforkt von Mirrors/FastAsyncWorldEdit
Fix entity rotation (#642)
* fix entity rotation fixes #577 Co-authored-by: wea_ondara <wea_ondara@alpenblock.net>
Dieser Commit ist enthalten in:
Ursprung
f55aded50b
Commit
05ffff65d0
@ -39,6 +39,9 @@ import com.sk89q.worldedit.world.entity.EntityTypes;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import com.sk89q.jnbt.FloatTag;
|
||||||
|
import com.sk89q.jnbt.ListTag;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies entities provided to the function to the provided destination
|
* Copies entities provided to the function to the provided destination
|
||||||
@ -201,6 +204,7 @@ public class ExtentEntityCopy implements EntityFunction {
|
|||||||
// Handle hanging entities (paintings, item frames, etc.)
|
// Handle hanging entities (paintings, item frames, etc.)
|
||||||
boolean hasTilePosition = tag.containsKey("TileX") && tag.containsKey("TileY") && tag.containsKey("TileZ");
|
boolean hasTilePosition = tag.containsKey("TileX") && tag.containsKey("TileY") && tag.containsKey("TileZ");
|
||||||
boolean hasFacing = tag.containsKey("Facing");
|
boolean hasFacing = tag.containsKey("Facing");
|
||||||
|
boolean hasRotation = tag.containsKey("Rotation");
|
||||||
|
|
||||||
if (hasTilePosition) {
|
if (hasTilePosition) {
|
||||||
Vector3 tilePosition = Vector3.at(tag.asInt("TileX"), tag.asInt("TileY"), tag.asInt("TileZ"));
|
Vector3 tilePosition = Vector3.at(tag.asInt("TileX"), tag.asInt("TileY"), tag.asInt("TileZ"));
|
||||||
@ -225,6 +229,22 @@ public class ExtentEntityCopy implements EntityFunction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasRotation) {
|
||||||
|
ListTag orgrot = state.getNbtData().getListTag("Rotation");
|
||||||
|
Vector3 orgDirection = new Location(source, 0, 0, 0, orgrot.getFloat(0), orgrot.getFloat(1)).getDirection();
|
||||||
|
Vector3 newDirection = transform.apply(orgDirection).subtract(transform.apply(Vector3.ZERO)).normalize();
|
||||||
|
builder.put("Rotation", new ListTag(FloatTag.class, Arrays.asList(new FloatTag((float) newDirection.toYaw()), new FloatTag((float) newDirection.toPitch()))));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new BaseEntity(state.getType(), builder.build());
|
||||||
|
} else if (hasRotation) { //armor stands do not have a tile pos
|
||||||
|
CompoundTagBuilder builder = tag.createBuilder();
|
||||||
|
|
||||||
|
ListTag orgrot = state.getNbtData().getListTag("Rotation");
|
||||||
|
Vector3 orgDirection = new Location(source, 0, 0, 0, orgrot.getFloat(0), orgrot.getFloat(1)).getDirection();
|
||||||
|
Vector3 newDirection = transform.apply(orgDirection).subtract(transform.apply(Vector3.ZERO)).normalize();
|
||||||
|
builder.put("Rotation", new ListTag(FloatTag.class, Arrays.asList(new FloatTag((float) newDirection.toYaw()), new FloatTag((float) newDirection.toPitch()))));
|
||||||
|
|
||||||
return new BaseEntity(state.getType(), builder.build());
|
return new BaseEntity(state.getType(), builder.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren