Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
неа, не ставится энивейДля TNT используй то же самое, только UseBlockEvent.
Не ставится прям? Странно, это должно было помочь пробуй еще PlaceBlockEvent. И убедись в правильности приоритетов.неа, не ставится энивей
Должна работать с UseBlockEvent, ты нужны приоритет указал?Посмотреть вложение 54866 и не ставится
@EventHandler(priority = EventPriority.LOWEST)
public void on(UseBlockEvent event) {
List<Block> blocks = event.getBlocks();
if(blocks == null || blocks.isEmpty()) return;
for(Block block : event.getBlocks()) {
if(условие)
event.setResult(Result.ALLOW);
}
}
Ошибка была на моей стороне. Исправил.Код:@EventHandler(priority = EventPriority.LOWEST) public void on(UseBlockEvent event) { List<Block> blocks = event.getBlocks(); if(blocks == null || blocks.isEmpty()) return; for(Block block : event.getBlocks()) { if(условие) event.setResult(Result.ALLOW); } }
EventPriority priority
Define the priority of the event.
First priority to the last priority executed:
Returns:
- LOWEST
- LOW
- NORMAL
- HIGH
- HIGHEST
- MONITOR
the priority
Default:
org.bukkit.event.EventPriority.NORMAL
Прибавляй на PlaceBlockEvent, а не на UseBlockEventОшибка была на моей стороне. Исправил.
Ну и теперь, скорее всего, последний вопрос..
Я записываю количество установленных блоков в регионе в файлик.. Когда я ставлю tnt, число прибавляется, все верно, но когда я его ломаю, как я понял, срабатывает use block event и число снова прибавляется, хотя мне нужно прибавлять его только тогда, когда tnt устанавливается
Спасибо!Прибавляй на PlaceBlockEvent, а не на UseBlockEvent
Посмотри утром, на свежую голову, где ты обосрался или делай сейчас дебаг out print при добавлении.Спасибо!
Но почему ивент срабатывает 2 раза? Хотя скорее всего, мне кажется, что я опять накосячил.
Когда я ставлю блок, количество прибавляется 2 раза. То есть за один поставленный блок +2.
Везде понавтыкал уже return и break, не помогает...
Все же, не буду более тебя задерживать. Спасибо)Посмотри утром, на свежую голову, где ты обосрался или делай сейчас дебаг out print при добавлении.
Еще можешь залить на гит и я посмотрю что ты там понаписывал.
@EventHandler(priority = EventPriority.LOWEST)
public void place(PlaceBlockEvent event) {
Cause cause = event.getCause();
Player player = cause.getFirstPlayer();
if(player == null || player.isOp()) return;
Group group = new Group(this.plugin, player);
if(this.groups.contains(group.getName())) {
Data data = new Data(player.getUniqueId().toString(), this.plugin);
if (!Data.exist(player.getUniqueId().toString(), this.plugin)) {
data.createData(player);
}
List<Block> blockList = event.getBlocks();
if(blockList == null || blockList.isEmpty()) return;
RegionContainer container = WorldGuardPlugin.inst().getRegionContainer();
RegionManager regions = container.get(event.getWorld());
if(regions == null) return;
String regionId = getRegionIdByLocation(regions, getBlockFromBlocks(blockList).getLocation());
if (regionId.equals("netu")) return;
if(group.isBlockPlaceInRegion() && event.getEffectiveMaterial() != Material.TNT) {
event.setResult(Event.Result.ALLOW);
return;
} else if (event.getEffectiveMaterial() == Material.TNT) {
if (data.getCount(regionId) >= group.getTntPlaceLimit()) {
player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!");
return;
}
event.setResult(Event.Result.ALLOW);
data.addCount(regionId);
return;
}
}
}
public void addCount(String region) {
if(this.cfg.get(region) != null) {
this.cfg.set(region, this.cfg.getInt(region)+1);
save();
} else {
this.cfg.set(region, 1);
save();
}
}
else if (event.getEffectiveMaterial() == Material.TNT) {
if (data.getCount(regionId) >= group.getTntPlaceLimit()) {
player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!");
return;
}
event.setResult(Event.Result.ALLOW);
data.addCount(regionId);
debug("is tnt");
return;
}
}
Код на гитВывожу строчку перед проверкой материала, она выводится один раз.
Вывожу строку внутри условия, она вывадится дважды. Не понимаю, в чем проблема?
PHP:else if (event.getEffectiveMaterial() == Material.TNT) { if (data.getCount(regionId) >= group.getTntPlaceLimit()) { player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!"); return; } event.setResult(Event.Result.ALLOW); data.addCount(regionId); debug("is tnt"); return; } }
Потому что при интеракте отрабатывают обе руки.Вывожу строчку перед проверкой материала, она выводится один раз.
Вывожу строку внутри условия, она вывадится дважды. Не понимаю, в чем проблема?
PHP:else if (event.getEffectiveMaterial() == Material.TNT) { if (data.getCount(regionId) >= group.getTntPlaceLimit()) { player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!"); return; } event.setResult(Event.Result.ALLOW); data.addCount(regionId); debug("is tnt"); return; } }
Это не тот интеракт, это ивент WorldGuardПотому что при интеракте отрабатывают обе руки.
в лс скинулКод на гит