feat: stay C1 (/point set fully op)
This commit is contained in:
parent
efc83b6dfa
commit
929cdc5967
|
@ -102,18 +102,56 @@ public class NewPoint implements CommandExecutor {
|
||||||
if (n <= 4) {
|
if (n <= 4) {
|
||||||
setPoint(index, location, world);
|
setPoint(index, location, world);
|
||||||
} else {
|
} else {
|
||||||
if (index % 3 == 0) {
|
switch (index % 3) {
|
||||||
// Anchor control point
|
case 0:
|
||||||
location = player.getLocation();
|
// Anchor point
|
||||||
Location shift = location.clone().subtract(Camera.controlPoints.get(index));
|
Location shift = location.clone().subtract(Camera.controlPoints.get(index));
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
try {
|
try {
|
||||||
setPoint(index + i - 1, Camera.controlPoints.get(index + i - 1).clone().add(shift), world);
|
setPoint(index + i - 1, Camera.controlPoints.get(index + i - 1).clone().add(shift), world);
|
||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
// First or last anchor
|
// First or last anchor
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
} else {
|
case 1:
|
||||||
|
// Control point after an anchor
|
||||||
|
if (index - 2 >= 0) {
|
||||||
|
// Get anchor-location direction
|
||||||
|
Location anchor = Camera.controlPoints.get(index - 1);
|
||||||
|
double currentDistance = anchor.distance(location);
|
||||||
|
Location currentVect = anchor.clone().subtract(location).multiply(1 / currentDistance);
|
||||||
|
|
||||||
|
// Get anchor-corresponding distance
|
||||||
|
Location correspondingControl = Camera.controlPoints.get(index - 2);
|
||||||
|
double correspondingDistance = anchor.distance(correspondingControl);
|
||||||
|
|
||||||
|
// Keep correcponding at the same distance
|
||||||
|
// but along the anchor-location direction
|
||||||
|
setPoint(index - 2, anchor.clone().add(currentVect.multiply(correspondingDistance)), world);
|
||||||
|
}
|
||||||
|
// Move control point
|
||||||
|
setPoint(index, location, world);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
// Control point before an anchor
|
||||||
|
if (index + 2 < n) {
|
||||||
|
// Get anchor-location direction
|
||||||
|
Location anchor = Camera.controlPoints.get(index + 1);
|
||||||
|
double currentDistance = anchor.distance(location);
|
||||||
|
Location currentVect = anchor.clone().subtract(location).multiply(1 / currentDistance);
|
||||||
|
|
||||||
|
// Get anchor-corresponding distance
|
||||||
|
Location correspondingControl = Camera.controlPoints.get(index + 2);
|
||||||
|
double correspondingDistance = anchor.distance(correspondingControl);
|
||||||
|
|
||||||
|
// Keep correcponding at the same distance
|
||||||
|
// but along the anchor-location direction
|
||||||
|
setPoint(index + 2, anchor.clone().add(currentVect.multiply(correspondingDistance)), world);
|
||||||
|
}
|
||||||
|
// Move control point
|
||||||
|
setPoint(index, location, world);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,23 +23,10 @@ import org.bukkit.Material;
|
||||||
public class ShowCurve implements CommandExecutor {
|
public class ShowCurve implements CommandExecutor {
|
||||||
|
|
||||||
public static List<ArmorStand> controlPointsArmorStands = new ArrayList<>();
|
public static List<ArmorStand> controlPointsArmorStands = new ArrayList<>();
|
||||||
private static ItemStack cameraHead = initCameraHead();
|
private static ItemStack cameraHeadAnchor = new ItemStack(Material.OBSERVER);
|
||||||
|
private static ItemStack cameraHeadControl = new ItemStack(Material.DISPENSER);
|
||||||
public static int showTaskID = -1;
|
public static int showTaskID = -1;
|
||||||
|
|
||||||
private static ItemStack initCameraHead() {
|
|
||||||
// ItemStack cameraHead = new ItemStack(Material.PLAYER_HEAD);
|
|
||||||
// SkullMeta skullMeta = (SkullMeta) cameraHead.getItemMeta();
|
|
||||||
// skullMeta.setOwningPlayer(
|
|
||||||
// Bukkit.getOfflinePlayer(
|
|
||||||
// UUID.fromString("c9560dfb-a792-4226-ad06-db1b6dc40b95")));
|
|
||||||
// cameraHead.setItemMeta(skullMeta);
|
|
||||||
ItemStack cameraHead = new ItemStack(Material.OBSERVER);
|
|
||||||
return cameraHead;
|
|
||||||
}
|
|
||||||
|
|
||||||
// c9560dfb-a792-4226-ad06-db1b6dc40b95
|
|
||||||
// c9560dfba7924226ad06db1b6dc40b95
|
|
||||||
|
|
||||||
// This method is called, when somebody uses our command
|
// This method is called, when somebody uses our command
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
@ -52,8 +39,13 @@ public class ShowCurve implements CommandExecutor {
|
||||||
|
|
||||||
if (ShowCurve.showTaskID < 0) {
|
if (ShowCurve.showTaskID < 0) {
|
||||||
// Show control points
|
// Show control points
|
||||||
|
int i = 0;
|
||||||
for (ArmorStand as : controlPointsArmorStands) {
|
for (ArmorStand as : controlPointsArmorStands) {
|
||||||
as.getEquipment().setHelmet(cameraHead);
|
if (i % 3 == 0)
|
||||||
|
as.getEquipment().setHelmet(cameraHeadAnchor);
|
||||||
|
else
|
||||||
|
as.getEquipment().setHelmet(cameraHeadControl);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start showing curve
|
// Start showing curve
|
||||||
|
@ -98,7 +90,10 @@ public class ShowCurve implements CommandExecutor {
|
||||||
as.setMarker(true);
|
as.setMarker(true);
|
||||||
as.addScoreboardTag("controlPoint");
|
as.addScoreboardTag("controlPoint");
|
||||||
if (showTaskID > 0)
|
if (showTaskID > 0)
|
||||||
as.getEquipment().setHelmet(cameraHead);
|
if ((Camera.controlPoints.size() - 1) % 3 == 0)
|
||||||
|
as.getEquipment().setHelmet(cameraHeadAnchor);
|
||||||
|
else
|
||||||
|
as.getEquipment().setHelmet(cameraHeadControl);
|
||||||
controlPointsArmorStands.add(as);
|
controlPointsArmorStands.add(as);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +104,10 @@ public class ShowCurve implements CommandExecutor {
|
||||||
as.setMarker(true);
|
as.setMarker(true);
|
||||||
as.addScoreboardTag("controlPoint");
|
as.addScoreboardTag("controlPoint");
|
||||||
if (showTaskID > 0)
|
if (showTaskID > 0)
|
||||||
as.getEquipment().setHelmet(cameraHead);
|
if ((Camera.controlPoints.size() - 1) % 3 == 0)
|
||||||
|
as.getEquipment().setHelmet(cameraHeadAnchor);
|
||||||
|
else
|
||||||
|
as.getEquipment().setHelmet(cameraHeadControl);
|
||||||
controlPointsArmorStands.add(index, as);
|
controlPointsArmorStands.add(index, as);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue