ошибка

  • Майская распродажа!

    Впереди теплые праздники, цены таят на глазах! Поздравляем вас и дарим вам специальный купон.
    Мы предлагаем вам специальное предложение на подписку, действительное только по временному купону.
    Обнови свой сервер с лучшими сборками, плагинами и картами!

    Купон
    MAY20
  • Мы теперь в Discord

    Мы рады объявить, что теперь у нас есть сервер Discord. В честь этого мы проводим розыгрыш!
    Теперь вы можете легко связаться с нами и другими участниками сообщества,
    обмениваться идеями и получать обновления о нашей деятельности.

  • EXCLUSIVE ⚡

    Гость, покупая подписку, ты увеличишь свои доходы в разы!
    Мы делаем самые актуальные сборки, переводим лучшие приватные плагины, а так-же обновляем их и фиксим любые ошибки.
    Дешевле, чем студии и другие разработчики!

  • Приветствуем тебя Гость!⁣

    Недавно на форуме? Не знаешь как можно скачивать ресурсы?
    Для этого нужно лишь зарегистрировать на форуме, и получать доступ к профессиональным плагинам, оптимизированным настройкам.
    Здесь только самое лучшее.

  • Обновленный «Mc-market.ru»

    Теперь у вас есть возможность продавать свои товары на Minecraft маркете.
    Это отличная возможность для вас начать зарабатывать на своих навыках и труде.
    Начни продавать сейчас!

  • Интеграция ChatGPT

    Администраторы Minecraft могут столкнуться с различными проблемами, связанными с работой серверов и кодом.
    Однако, благодаря инновационным технологиям, искусственный интеллект может помочь решить эти проблемы.
    Реши свою любую проблему сейчас!

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Исправь в этом коде ошибку. x и z работают неправильно. BukkitAPI.

@EventHandler
public void onPlace(BlockPlaceEvent e) {
Player p = e.getPlayer();
Block b = e.getBlockPlaced();
Location pl = p.getLocation();
Location l = b.getLocation();

if(b.getType().equals(Material.FURNACE)) {

String s = "x";
if(pl.getBlockZ() > l.getBlockZ()) {
s = "z";
} else if(pl.getBlockZ() < l.getBlockZ()) {
s = "-z";
} else if(pl.getBlockX() < l.getBlockX()) {
s = "-x";
} p.sendMessage(s);

for(int i = 0; i < 5; i++) {
FallingBlock fb = Objects.requireNonNull(l.getWorld()).spawnFallingBlock(l.clone().add(0.5, -1.47, 0.5), Material.IRON_BLOCK.createBlockData());
fb.setInvulnerable(true);
fb.setGravity(false);
fb.setDropItem(false);

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.518), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 4 && !s.equals("z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.518, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);
}
}
}
}
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
В коде не указано, какая именно проблема с переменными x и z, однако я предполагаю, что ошибка заключается в неправильном определении направления, в котором расположен блок.

Для исправления этой ошибки можно заменить строку:

if(pl.getBlockZ() > l.getBlockZ()) {
s = "z";
}

На следующий код:

if(Math.abs(pl.getBlockX() - l.getBlockX()) >= Math.abs(pl.getBlockZ() - l.getBlockZ())) {
if(pl.getBlockX() > l.getBlockX()) {
s = "-x";
} else {
s = "x";
}
} else {
if(pl.getBlockZ() > l.getBlockZ()) {
s = "-z";
} else {
s = "z";
}
}

Этот код определяет направление расположения блока с помощью модуля разности координат по оси X и Z и выбирает максимальное. Затем сравнивает, больше ли значение блока по оси X, чем у игрока, и выбирает соответствующее значение для переменной s. Если значения равны, то выбирается направление по оси Z.
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
В коде не указано, какая именно проблема с переменными x и z, однако я предполагаю, что ошибка заключается в неправильном определении направления, в котором расположен блок.

Для исправления этой ошибки можно заменить строку:

if(pl.getBlockZ() > l.getBlockZ()) {
s = "z";
}

На следующий код:

if(Math.abs(pl.getBlockX() - l.getBlockX()) >= Math.abs(pl.getBlockZ() - l.getBlockZ())) {
if(pl.getBlockX() > l.getBlockX()) {
s = "-x";
} else {
s = "x";
}
} else {
if(pl.getBlockZ() > l.getBlockZ()) {
s = "-z";
} else {
s = "z";
}
}

Этот код определяет направление расположения блока с помощью модуля разности координат по оси X и Z и выбирает максимальное. Затем сравнивает, больше ли значение блока по оси X, чем у игрока, и выбирает соответствующее значение для переменной s. Если значения равны, то выбирается направление по оси Z.
теперь не работют -x и -z
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
теперь не работют -x и -z
Извините, моя предыдущая рекомендация не решает проблему. Я рассмотрел ваш код еще раз и обратил внимание на то, что вы используете относительную позицию блока относительно игрока. Поэтому вам необходимо скорректировать код для учета этого.

Попробуйте заменить всю строку, где вы определяете значение переменной `s`, на следующий код:

Location blockLoc = e.getBlock().getLocation();
Location playerLoc = e.getPlayer().getLocation();
double xDiff = playerLoc.getX() - blockLoc.getX();
double zDiff = playerLoc.getZ() - blockLoc.getZ();
if (Math.abs(xDiff) > Math.abs(zDiff)) {
if (xDiff < 0) {
s = "-x";
} else {
s = "x";
}
} else {
if (zDiff < 0) {
s = "-z";
} else {
s = "z";
}
}

Этот код определяет разницу между позицией игрока и блока по каждой из осей, чтобы определить, находится ли блок слева или справа от игрока по оси X, и выше или ниже по оси Z. Затем он использовал условные операторы для определения направления перемещения блока.
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Извините, моя предыдущая рекомендация не решает проблему. Я рассмотрел ваш код еще раз и обратил внимание на то, что вы используете относительную позицию блока относительно игрока. Поэтому вам необходимо скорректировать код для учета этого.

Попробуйте заменить всю строку, где вы определяете значение переменной `s`, на следующий код:

Location blockLoc = e.getBlock().getLocation();
Location playerLoc = e.getPlayer().getLocation();
double xDiff = playerLoc.getX() - blockLoc.getX();
double zDiff = playerLoc.getZ() - blockLoc.getZ();
if (Math.abs(xDiff) > Math.abs(zDiff)) {
if (xDiff < 0) {
s = "-x";
} else {
s = "x";
}
} else {
if (zDiff < 0) {
s = "-z";
} else {
s = "z";
}
}

Этот код определяет разницу между позицией игрока и блока по каждой из осей, чтобы определить, находится ли блок слева или справа от игрока по оси X, и выше или ниже по оси Z. Затем он использовал условные операторы для определения направления перемещения блока.
теперь x и z. Может проблема в координатах стойки для брони?
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
теперь x и z. Может проблема в координатах стойки для брони?
Да, возможно, проблема в координатах стоек брони. Попробуйте изменить координаты для создания `ArmorStand` для каждого направления, чтобы корректно поместить их на соответствующие стороны блока.

Замените следующий код:

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.518), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 4 && !s.equals("z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.518, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);
}

на этот:

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new EulerAngle(Math.PI / 2, 0, -Math.PI/2));
a.addPassenger(fb);

} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.482), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new EulerAngle(Math.PI / 2, 0, Math.PI/2));
a.addPassenger(fb);

} else if(i == 4 && !s.equals("z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.482, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new EulerAngle(Math.PI / 2, 0, Math.PI));
a.addPassenger(fb);
}

Координаты были скорректированы, чтобы корректно поместить броню и при блокировке сразу показывать угол.
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Да, возможно, проблема в координатах стоек брони. Попробуйте изменить координаты для создания `ArmorStand` для каждого направления, чтобы корректно поместить их на соответствующие стороны блока.

Замените следующий код:

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.518), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 4 && !s.equals("z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.518, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);
}

на этот:

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);

} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new EulerAngle(Math.PI / 2, 0, -Math.PI/2));
a.addPassenger(fb);

} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.482), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new EulerAngle(Math.PI / 2, 0, Math.PI/2));
a.addPassenger(fb);

} else if(i == 4 && !s.equals("z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.482, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new EulerAngle(Math.PI / 2, 0, Math.PI));
a.addPassenger(fb);
}

Координаты были скорректированы, чтобы корректно поместить броню и при блокировке сразу показывать угол.
setRotation принимает только float v1 и v2
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
setRotation принимает только float v1 и v2
Да, вы правы, метод `setRotation` принимает два значения типа `float`, а не `EulerAngle`. Для исправления кода можно использовать следующий подход:

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);
} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new Vector(0, Math.PI / 2, -Math.PI / 2));
a.addPassenger(fb);
} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.482), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new Vector(0, Math.PI / 2, Math.PI / 2));
a.addPassenger(fb);
} else if(i == 4 && !s.equals("
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Да, вы правы, метод `setRotation` принимает два значения типа `float`, а не `EulerAngle`. Для исправления кода можно использовать следующий подход:

if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.55, -1.5, 0.45), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.addPassenger(fb);
} else if(i == 2 && !s.equals("-z")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.55), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new Vector(0, Math.PI / 2, -Math.PI / 2));
a.addPassenger(fb);
} else if(i == 3 && !s.equals("x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.45, -1.5, 0.482), EntityType.ARMOR_STAND);
a.setGravity(false);
a.setInvulnerable(true);
a.setCollidable(false);
a.setVisible(false);
a.setRotation(new Vector(0, Math.PI / 2, Math.PI / 2));
a.addPassenger(fb);
} else if(i == 4 && !s.equals("
напиши полностью
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
напиши код полностью с исправлением setRotation
Конечный код с исправлением метода setRotation будет выглядеть примерно так:

```
@Override
public void onPlayerInteract(PlayerInteractEvent e) {
if(e.getAction() == Action.RIGHT_CLICK_BLOCK && !e.getPlayer().isSneaking()) {
Block b = e.getClickedBlock();
Location l = b.getLocation();
Player p = e.getPlayer();
String s = "";

Location pl = e.getPlayer().getLocation();
int direction = (Math.round(pl.getYaw() / 90f) + 2) & 0x3;

if(direction == 0) {
s = "-z";
} else if(direction == 1) {
s = "-x";
} else if(direction == 2) {
s = "z";
} else if(direction == 3) {
s = "x";
}

if(b.getType() != Material.CHEST && b.getType() != Material.TRAPPED_CHEST) return;
if(b.getRelative(BlockFace.UP).getType() != Material.AIR) return;

ArmorStand fb = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(0.5, 0, 0.5), EntityType.ARMOR_STAND);
fb.setGravity(false);
fb.setInvulnerable(true);
fb.setCollidable(false);

if(direction == 0 || direction == 2) {
fb.setVisible(false);
fb.setHeadPose(new EulerAngle(Math.PI / 2, 0, 0));
} else if(direction == 1 || direction == 3) {
fb.setVisible(true);
}

fb.setSmall(true);

for(int i = 1; i < 5; i++) {
if(i == 1 && !s.equals("-x")) {
ArmorStand a = (ArmorStand) l.getWorld().spawnEntity(l.clone().add(
 

Помочь проекту! 💕

Собрано
"40,140.00" ₽
Цель
"50,000.00" ₽

Последние ресурсы