fallingblock

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

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

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

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

  • EXCLUSIVE ⚡

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

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

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

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

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

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

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

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Как сделать так, чтобы падающий блок fb не исчезал, если он попал в паутину? BukkitAPI 1.16.5.
 

ChatGPT ?

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

Для этого можно использовать функцию setBreakable(false) у блока паутины на месте, где находится падающий блок fb. Эта функция запрещает блоку быть разрушенным при воздействии игрока или другого блока. Вот пример кода:

```
@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (event.getEntity() instanceof FallingBlock && event.getBlock().getType() == Material.COBWEB) {
event.setCancelled(true);
event.getBlock().setType(Material.COBWEB);
event.getBlock().getState().setBreakable(false);
event.getBlock().getState().update();
}
}
```

Этот код будет обрабатывать событие столкновения блока и блока сущности. Если падающий блок fb сталкивается с паутиной, то успешно отменяет обычную логику разрушения блока, делает его «невосприимчивым» к воздействию игроков и других блоков.

Надеюсь, это поможет Вам решить Вашу проблему.
 

K0lbasa

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

Для этого можно использовать функцию setBreakable(false) у блока паутины на месте, где находится падающий блок fb. Эта функция запрещает блоку быть разрушенным при воздействии игрока или другого блока. Вот пример кода:

```
@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (event.getEntity() instanceof FallingBlock && event.getBlock().getType() == Material.COBWEB) {
event.setCancelled(true);
event.getBlock().setType(Material.COBWEB);
event.getBlock().getState().setBreakable(false);
event.getBlock().getState().update();
}
}
```

Этот код будет обрабатывать событие столкновения блока и блока сущности. Если падающий блок fb сталкивается с паутиной, то успешно отменяет обычную логику разрушения блока, делает его «невосприимчивым» к воздействию игроков и других блоков.

Надеюсь, это поможет Вам решить Вашу проблему.
setBreakable нету
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
К сожалению, метод setBreakable() больше не поддерживается в новых версиях BukkitAPI. Однако Вы можете использовать следующий код для отмены дефолтной логики разрушения блоков при коллизии падающего блока fb и блока паутины:

```
@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
if (event.getEntity() instanceof FallingBlock && block.getType() == Material.COBWEB) {
event.setCancelled(true);
block.setType(Material.COBWEB);
BlockState state = block.getState();
state.setBlockData(block.getBlockData());
state.update(true, false);
}
}
```

В этой реализации метод setBlockData() используется для сохранения метаданных блока и метод update(boolean, boolean) для перезагрузки состояния блока без обновления окружающих блоков.

Надеюсь, этот код поможет решить проблему.
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
К сожалению, метод setBreakable() больше не поддерживается в новых версиях BukkitAPI. Однако Вы можете использовать следующий код для отмены дефолтной логики разрушения блоков при коллизии падающего блока fb и блока паутины:

```
@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
if (event.getEntity() instanceof FallingBlock && block.getType() == Material.COBWEB) {
event.setCancelled(true);
block.setType(Material.COBWEB);
BlockState state = block.getState();
state.setBlockData(block.getBlockData());
state.update(true, false);
}
}
```

В этой реализации метод setBlockData() используется для сохранения метаданных блока и метод update(boolean, boolean) для перезагрузки состояния блока без обновления окружающих блоков.

Надеюсь, этот код поможет решить проблему.
ивент вообще не запускается
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
ивент вообще не запускается
Чтобы Ваш `onEntityChangeBlock` EventHandler работал, Вам необходимо зарегистрировать его в Вашем `JavaPlugin`. Вот пример кода для регистрации обработчика событий:

```
public class YourPlugin extends JavaPlugin implements Listener{
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
if (event.getEntity() instanceof FallingBlock && block.getType() == Material.COBWEB) {
event.setCancelled(true);
block.setType(Material.COBWEB);
BlockState state = block.getState();
state.setBlockData(block.getBlockData());
state.update(true, false);
}
}
}
```

Здесь мы регистрируем наш класс-обработчик (в данном случае, `YourPlugin`) как слушателя событий, используя метод `registerEvents()`. Затем, мы можно добавить ваш >EventHandler непосредственно в класс, который вы регистрируете как слушателя событий.

Надеюсь, эта информация поможет Вам завести Ваш EventHandler.
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Чтобы Ваш `onEntityChangeBlock` EventHandler работал, Вам необходимо зарегистрировать его в Вашем `JavaPlugin`. Вот пример кода для регистрации обработчика событий:

```
public class YourPlugin extends JavaPlugin implements Listener{
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
if (event.getEntity() instanceof FallingBlock && block.getType() == Material.COBWEB) {
event.setCancelled(true);
block.setType(Material.COBWEB);
BlockState state = block.getState();
state.setBlockData(block.getBlockData());
state.update(true, false);
}
}
}
```

Здесь мы регистрируем наш класс-обработчик (в данном случае, `YourPlugin`) как слушателя событий, используя метод `registerEvents()`. Затем, мы можно добавить ваш >EventHandler непосредственно в класс, который вы регистрируете как слушателя событий.

Надеюсь, эта информация поможет Вам завести Ваш EventHandler.
я сделал всё правильно
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
я сделал всё правильно
В таком случае, возможно, при столкновении падающего блока с паутиной событие `EntityChangeBlockEvent` не генерируется, а может быть причина в том, что установленный блок паутины не находится в том же чанке, что и падающий блок. Для решения этой проблемы можно использовать механизм `ChunkLoadEvent`, который будет следить за загрузкой чанков и регистрацией блоков в них. Вот пример кода, который Вы можете использовать для этой цели:

```
public class YourPlugin extends JavaPlugin implements Listener {
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onChunkLoad(ChunkLoadEvent event) {
Chunk chunk = event.getChunk();
for (BlockState block : chunk.getTileEntities()) {
if (block instanceof org.bukkit.block.Cobweb) {
block.setBreakable(false); // запретить разрушение
}
}
}

@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
if (event.getEntity() instanceof FallingBlock && block.getType() == Material.COBWEB) {
event.setCancelled(true);
block.setType(Material.COBWEB);
BlockState state = block.getState();
state.setBlockData(block.getBlockData());
state.update(true, false);
}
}
}
```

Здесь мы используем событие `ChunkLoadEvent`, чтобы отслеживать загрузку чанков. Затем мы перебираем все блоки в этом чанке с помощью метода `getTileEntities()`, чтобы найти паутины и запретить их разрушение при столкновении с падающими блоками.

Надеюсь, это решит проблему.
 

K0lbasa

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

```
public class YourPlugin extends JavaPlugin implements Listener {
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onChunkLoad(ChunkLoadEvent event) {
Chunk chunk = event.getChunk();
for (BlockState block : chunk.getTileEntities()) {
if (block instanceof org.bukkit.block.Cobweb) {
block.setBreakable(false); // запретить разрушение
}
}
}

@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
if (event.getEntity() instanceof FallingBlock && block.getType() == Material.COBWEB) {
event.setCancelled(true);
block.setType(Material.COBWEB);
BlockState state = block.getState();
state.setBlockData(block.getBlockData());
state.update(true, false);
}
}
}
```

Здесь мы используем событие `ChunkLoadEvent`, чтобы отслеживать загрузку чанков. Затем мы перебираем все блоки в этом чанке с помощью метода `getTileEntities()`, чтобы найти паутины и запретить их разрушение при столкновении с падающими блоками.

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

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
Как проверить, в сторону какого блока раздатчик выпустил воду. BukkitAPI.
Вы можете проверить, в сторону какого блока была направлена вода, используя координаты блоков и метод `getBlockFace()` для определения направления. Например, если вы хотите определить, в каком направлении была направлена вода для блока, через который вода прошла, используйте следующий код:

```
Block waterBlock = event.getBlock();
Material waterMaterial = waterBlock.getType();
if (waterMaterial == Material.WATER || waterMaterial == Material.LAVA) {
// Определяем направление в направлении которого прошла вода, т.е. откуда
Block sourceBlock = waterBlock.getRelative(BlockFace.DOWN);
if (sourceBlock.getType() == Material.DISPENSER) {
Dispenser dispenser = (Dispenser) sourceBlock.getState();
BlockFace facing = ((Directional) dispenser.getBlockData()).getFacing(); // направление блока
// делаем что-то с направлением блока
}
}
```

Здесь мы проверяем, что текущий блок является блоком воды (или лавы). Затем мы находим блок-источник, через который прошла вода, и проверяем, является ли он диспенсером. Если это так, мы получаем направление блока с помощью метода `getFacing()` и используем его, чтобы выполнить нужное действие.

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

Надеюсь, это поможет вам решить вашу проблему.
 

K0lbasa

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

```
Block waterBlock = event.getBlock();
Material waterMaterial = waterBlock.getType();
if (waterMaterial == Material.WATER || waterMaterial == Material.LAVA) {
// Определяем направление в направлении которого прошла вода, т.е. откуда
Block sourceBlock = waterBlock.getRelative(BlockFace.DOWN);
if (sourceBlock.getType() == Material.DISPENSER) {
Dispenser dispenser = (Dispenser) sourceBlock.getState();
BlockFace facing = ((Directional) dispenser.getBlockData()).getFacing(); // направление блока
// делаем что-то с направлением блока
}
}
```

Здесь мы проверяем, что текущий блок является блоком воды (или лавы). Затем мы находим блок-источник, через который прошла вода, и проверяем, является ли он диспенсером. Если это так, мы получаем направление блока с помощью метода `getFacing()` и используем его, чтобы выполнить нужное действие.

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

Надеюсь, это поможет вам решить вашу проблему.
не работает
@EventHandler
public void onPlace(BlockDispenseEvent e) {

Block waterBlock = e.getBlock();
Material waterMaterial = waterBlock.getType();
if (waterMaterial == Material.WATER || waterMaterial == Material.LAVA) {
Block sourceBlock = waterBlock.getRelative(BlockFace.DOWN);
if (sourceBlock.getType() == Material.DISPENSER) {
Dispenser dispenser = (Dispenser) sourceBlock.getState();
BlockFace facing = ((Directional) dispenser.getBlockData()).getFacing();
e.setCancelled(true);
Bukkit.broadcastMessage("134567");
}
}
}
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
не работает
@EventHandler
public void onPlace(BlockDispenseEvent e) {

Block waterBlock = e.getBlock();
Material waterMaterial = waterBlock.getType();
if (waterMaterial == Material.WATER || waterMaterial == Material.LAVA) {
Block sourceBlock = waterBlock.getRelative(BlockFace.DOWN);
if (sourceBlock.getType() == Material.DISPENSER) {
Dispenser dispenser = (Dispenser) sourceBlock.getState();
BlockFace facing = ((Directional) dispenser.getBlockData()).getFacing();
e.setCancelled(true);
Bukkit.broadcastMessage("134567");
}
}
}
Sorry I couldn't contact the ChatGPT think tank :(
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
Как проверить, что вода попала на блок b
Для того, чтобы проверить, что вода попала на определенный блок, Вы можете добавить проверку на блок, в который падает жидкость, используя метод `getBlock()` для объекта класса `BlockDispenseEvent`. Вот пример кода, который может помочь в решении вашей задачи:

```
@EventHandler
public void onDispense(BlockDispenseEvent event) {
ItemStack dispensedItem = event.getItem();
if (dispensedItem.getType() == Material.WATER_BUCKET || dispensedItem.getType() == Material.LAVA_BUCKET) {
Block targetBlock = event.getBlock().getRelative(event.getFacing()); // блок, на который падает жидкость
if (targetBlock.getType().isSolid()) {
// жидкость попала на блок targetBlock
// выполнение следующих действий
}
}
}
```

Здесь мы проверяем, что элемент, который был выдан, является ведром с водой или лавой. Затем мы используем метод `getFacing()` для определения направления, в котором будет выпущен предмет, и находим блок, на который предмет падает, используя метод `getRelative()`. Если этот блок - твердый, то мы можем выполнять необходимые действия.

Надеюсь, эта информация поможет Вам :)
 

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Для того, чтобы проверить, что вода попала на определенный блок, Вы можете добавить проверку на блок, в который падает жидкость, используя метод `getBlock()` для объекта класса `BlockDispenseEvent`. Вот пример кода, который может помочь в решении вашей задачи:

```
@EventHandler
public void onDispense(BlockDispenseEvent event) {
ItemStack dispensedItem = event.getItem();
if (dispensedItem.getType() == Material.WATER_BUCKET || dispensedItem.getType() == Material.LAVA_BUCKET) {
Block targetBlock = event.getBlock().getRelative(event.getFacing()); // блок, на который падает жидкость
if (targetBlock.getType().isSolid()) {
// жидкость попала на блок targetBlock
// выполнение следующих действий
}
}
}
```

Здесь мы проверяем, что элемент, который был выдан, является ведром с водой или лавой. Затем мы используем метод `getFacing()` для определения направления, в котором будет выпущен предмет, и находим блок, на который предмет падает, используя метод `getRelative()`. Если этот блок - твердый, то мы можем выполнять необходимые действия.

Надеюсь, эта информация поможет Вам :)
getFacing() нету
 

ChatGPT ?

Официальный
30 Мар 2023
630
5
1
Для получения направления блока можно использовать подход, который основывается на позиции (координатах) блока-источника. Вы можете выполнить следующие действия:

1. Получите блок-источник (disposableBlock), через который была запущена вода, используя метод `event.getBlock()`.
2. Получите его координаты с помощью методов getX(), getY() и getZ().
3. Создайте новый объект типа `Location` с этими координатами, используя конструктор `new Location(world, x, y, z)` (где `world` - объект типа `World`, y - координата высоты, paddingBottom - координата блока по Y, z - координата блока по Z).
4. Получите блок, в который попала вода, используя метод `event.getTo()`.
5. Получите координаты этого блока, используя методы getX(), getY() и getZ().
6. Создайте новый объект типа `Location` с этими координатами, используя конструктор, аналогичный шагу 3.
7. Используйте метод `subtract()` для объекта `Location` (полученного на шаге 6), чтобы получить объект `Vector`, указывающий направление, в котором был запущен предмет.
8. Используйте метод `getBlockX()`, `getBlockY()` и `getBlockZ()` для объекта блока-источника (полученного на шаге 1) для получения координат блока-источника со значениями целых чисел x, y и z.
9. Получите блок напротив блока-источника, используя координаты (x, y, z) и вектор (полученный на шаге 7) с помощью метода `getBlockAt(x + vector.getBlockX(), y + vector.getBlockY(), z + vector.getBlockZ())`.
10. Теперь у вас есть объект блока, на который попала вода, и вы можете выполнить действия, которые нужно выполнить в соответствии с результатом.

Пример кода:

```
@EventHandler
public void onDispense(BlockDispenseEvent event) {
ItemStack dispensedItem = event.getItem();
if (dispensedItem.getType() == Material.WATER_BUCKET || dispensedItem.getType() == Material.LAVA_BUCKET) {
Block disposableBlock = event.getBlock();
World world = disposableBlock.getWorld();
double x = disposableBlock.getX() + 0.5; // координаты блока-источника
double y = disposableBlock.getY() + 0.5;
double z = disposableBlock.getZ() + 0.5;
Location sourceLocation = new Location(world, x, y, z);
Block targetBlock = event.getBlock().getRelative(event.getFacing()); // блок, на который падает жидкость
x = targetBlock.getX() + 0.5; // координаты блока, на который падает жидкость
y = targetBlock.getY() + 0.5;
z = targetBlock.getZ() + 0.5;
Location targetLocation = new Location(world, x, y, z);
Vector direction = targetLocation.toVector().subtract(sourceLocation.toVector());
Block facingBlock = world.getBlock
 

K0lbasa

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

1. Получите блок-источник (disposableBlock), через который была запущена вода, используя метод `event.getBlock()`.
2. Получите его координаты с помощью методов getX(), getY() и getZ().
3. Создайте новый объект типа `Location` с этими координатами, используя конструктор `new Location(world, x, y, z)` (где `world` - объект типа `World`, y - координата высоты, paddingBottom - координата блока по Y, z - координата блока по Z).
4. Получите блок, в который попала вода, используя метод `event.getTo()`.
5. Получите координаты этого блока, используя методы getX(), getY() и getZ().
6. Создайте новый объект типа `Location` с этими координатами, используя конструктор, аналогичный шагу 3.
7. Используйте метод `subtract()` для объекта `Location` (полученного на шаге 6), чтобы получить объект `Vector`, указывающий направление, в котором был запущен предмет.
8. Используйте метод `getBlockX()`, `getBlockY()` и `getBlockZ()` для объекта блока-источника (полученного на шаге 1) для получения координат блока-источника со значениями целых чисел x, y и z.
9. Получите блок напротив блока-источника, используя координаты (x, y, z) и вектор (полученный на шаге 7) с помощью метода `getBlockAt(x + vector.getBlockX(), y + vector.getBlockY(), z + vector.getBlockZ())`.
10. Теперь у вас есть объект блока, на который попала вода, и вы можете выполнить действия, которые нужно выполнить в соответствии с результатом.

Пример кода:

```
@EventHandler
public void onDispense(BlockDispenseEvent event) {
ItemStack dispensedItem = event.getItem();
if (dispensedItem.getType() == Material.WATER_BUCKET || dispensedItem.getType() == Material.LAVA_BUCKET) {
Block disposableBlock = event.getBlock();
World world = disposableBlock.getWorld();
double x = disposableBlock.getX() + 0.5; // координаты блока-источника
double y = disposableBlock.getY() + 0.5;
double z = disposableBlock.getZ() + 0.5;
Location sourceLocation = new Location(world, x, y, z);
Block targetBlock = event.getBlock().getRelative(event.getFacing()); // блок, на который падает жидкость
x = targetBlock.getX() + 0.5; // координаты блока, на который падает жидкость
y = targetBlock.getY() + 0.5;
z = targetBlock.getZ() + 0.5;
Location targetLocation = new Location(world, x, y, z);
Vector direction = targetLocation.toVector().subtract(sourceLocation.toVector());
Block facingBlock = world.getBlock
Как проверить, что любая обычная вода попала на блок
 

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

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

Новые сообщения

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