Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Таумкрафт на плагинах пишешь?)А есть способ нормально задетектить падение предмета в котёл? Или надо мониторить каждый кинутый предмет самому? 1.12.2 версия
Так там по сути ничего и нетТаумкрафт на плагинах пишешь?)
См: Здесь
Нету, насколько я знаю. Но такая механика используется в ванили для тушения игроков, которые прыгнули в котёл с водой. Возможно NMS чем-то поможет в этом плане.А есть способ нормально задетектить падение предмета в котёл? Или надо мониторить каждый кинутый предмет самому? 1.12.2 версия
В целом да.Или надо мониторить каждый кинутый предмет самому?
import org.bukkit.entity.Entity;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
public class EntityFallEvent extends EntityEvent {
private static final HandlerList handlers = new HandlerList();
public EntityFallEvent(Entity entity) {
super(entity);
}
@Override
public HandlerList getHandlers() {
return handlers;
}
@SuppressWarnings("unused")
public static HandlerList getHandlerList() {
return handlers;
}
}
new BukkitRunnable() {
String key = "pOnGround";
@Override
public void run() {
for (World world : Bukkit.getWorlds()) {
for (Entity entity : world.getEntities()) {
boolean actualOnGround = entity.isOnGround();
Boolean previousOnGround = getNbtValue(entity, key, Boolean.class, null);
if (previousOnGround == null) {
setNbtValue(plugin, entity, key, actualOnGround);
continue;
}
if (previousOnGround == actualOnGround) continue;
if (actualOnGround)
Bukkit.getPluginManager().callEvent(new EntityFallEvent(entity));
setNbtValue(plugin, entity, key, actualOnGround);
}
}
}
}.runTaskTimer(plugin, 1L, 1L);
private static <T> T getNbtValue(@Nonnull Entity entity, @Nonnull String key, @Nonnull Class<T> type, @Nullable T defaults) {
Iterator<MetadataValue> iterator = entity.getMetadata(key).iterator();
return iterator.hasNext() ? type.cast(iterator.next().value()) : defaults;
}
private static void setNbtValue(@Nonnull Plugin plugin, @Nonnull Entity entity, @Nonnull String key, @Nullable Object value) {
entity.setMetadata(key, new FixedMetadataValue(plugin, value));
}
@EventHandler
private void on(EntityFallEvent event) {
Entity entity = event.getEntity();
if (!(entity instanceof Item)) return;
Block block = entity.getLocation().getBlock();
if (block.getType() != Material.CAULDRON) return;
Item item = (Item) entity;
ItemStack stack = item.getItemStack();
Bukkit.broadcastMessage("Предмет " + stack.getType() + " упал в котёл");
}
Спасибо, работает. Только оно неплохо так грузит для моей локалки с 1 онлайномНету, насколько я знаю. Но такая механика используется в ванили для тушения игроков, которые прыгнули в котёл с водой. Возможно NMS чем-то поможет в этом плане.
В целом да.
Сделал это за тебя, ибо самому будет интересно поюзать.
PHP:import org.bukkit.entity.Entity; import org.bukkit.event.HandlerList; import org.bukkit.event.entity.EntityEvent; public class EntityFallEvent extends EntityEvent { private static final HandlerList handlers = new HandlerList(); public EntityFallEvent(Entity entity) { super(entity); } @Override public HandlerList getHandlers() { return handlers; } @SuppressWarnings("unused") public static HandlerList getHandlerList() { return handlers; } }
PHP:new BukkitRunnable() { String key = "pOnGround"; @Override public void run() { for (World world : Bukkit.getWorlds()) { for (Entity entity : world.getEntities()) { boolean actualOnGround = entity.isOnGround(); Boolean previousOnGround = getNbtValue(entity, key, Boolean.class, null); if (previousOnGround == null) { setNbtValue(plugin, entity, key, actualOnGround); continue; } if (previousOnGround == actualOnGround) continue; if (actualOnGround) Bukkit.getPluginManager().callEvent(new EntityFallEvent(entity)); setNbtValue(plugin, entity, key, actualOnGround); } } } }.runTaskTimer(plugin, 1L, 1L);
PHP:private static <T> T getNbtValue(@Nonnull Entity entity, @Nonnull String key, @Nonnull Class<T> type, @Nullable T defaults) { Iterator<MetadataValue> iterator = entity.getMetadata(key).iterator(); return iterator.hasNext() ? type.cast(iterator.next().value()) : defaults; } private static void setNbtValue(@Nonnull Plugin plugin, @Nonnull Entity entity, @Nonnull String key, @Nullable Object value) { entity.setMetadata(key, new FixedMetadataValue(plugin, value)); }
PHP:@EventHandler private void on(EntityFallEvent event) { Entity entity = event.getEntity(); if (!(entity instanceof Item)) return; Block block = entity.getLocation().getBlock(); if (block.getType() != Material.CAULDRON) return; Item item = (Item) entity; ItemStack stack = item.getItemStack(); Bukkit.broadcastMessage("Предмет " + stack.getType() + " упал в котёл"); }
Ну, оптимизируй так, чтобы не грузил )Спасибо, работает. Только оно неплохо так грузит для моей локалки с 1 онлайном
Посмотреть вложение 54297
а, сейчас посмотрели на сервере, вообще не лагаетНу, оптимизируй так, чтобы не грузил )
Можешь попробовать увеличить время между выполнениями раннабла шедулером