Своё улов в рыбалке

Версия Minecraft
1.7.10
63
5
20
Возник вопрос при добавления своего лута при ловли рыбы. Добавлять рыбу и предметы я научился, а вот как удалить конкретный лут из ванили я не знаю как. Нашёл такой метод: FishingHooks.removeTreasure(null), только не знаю,что нужно писать вместо null.
 
Решение
pasha2004 написал(а):
А зачем делать костыли, если есть FishingHooks.removeFish(...)?
Только что нужно писать в скобках - неизвестно.

Всё известно, недокодер (я) разобрался:

Вот, я экспериментировал с полным удалением улова и добавлением своего (ибо при пустых списках улова - краш):
Код:
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146036_f)
 FishingHooks.removeFish(Predicates.not(Predicates.equalTo(loot)));
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146041_e)
 FishingHooks.removeTreasure(Predicates.not(Predicates.equalTo(loot)));
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146039_d)...
1,200
37
237
pasha2004 написал(а):
MJaroslav написал(а):
pasha2004 написал(а):
А зачем делать костыли, если есть FishingHooks.removeFish(...)?
Только что нужно писать в скобках - неизвестно.

Всё известно, недокодер (я) разобрался:

Вот, я экспериментировал с полным удалением улова и добавлением своего (ибо при пустых списках улова - краш):
Код:
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146036_f)
 FishingHooks.removeFish(Predicates.not(Predicates.equalTo(loot)));
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146041_e)
 FishingHooks.removeTreasure(Predicates.not(Predicates.equalTo(loot)));
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146039_d)
 FishingHooks.removeJunk(Predicates.not(Predicates.equalTo(loot)));
FishingHooks.addFish(new WeightedRandomFishable(new ItemStack(Items.apple), 1));
FishingHooks.addTreasure(new WeightedRandomFishable(new ItemStack(Items.diamond), 1));
FishingHooks.addJunk(new WeightedRandomFishable(new ItemStack(Items.bone), 1));

А если короче, то юзай вот это:
Код:
FishingHooks.removeJunk(Predicates.not(Predicates.equalTo(копия нужного для удаления WeightedRandomFishable)));

/Но так как там проверка просто equals, то есть шанс, что это нифига не заработает, ибо нужна точная копия (да.. ну и берд я сморозил)/


Ну... ты может свой Predicate написать, главное, чтобы он возвращал false в методе apply, если input равен тому, что надо удалить (ну я это так понял ¯\_(ツ)_/¯)


Хм... может написать костыльный мод, чтобы весь улов настраивался конфигом? (Да, злюкой-Json'ом)




Супер! Только одна незадача,как и откуда копировать этот полный список (на примере удаления рыбы)? Пытался копировать из EntityFishHook, то ли руки у меня кривые, но ничего не получилось, и пишет,что формат данных не тот. ДоHELPуй мне =)




Ну.. вот те поля: field_146036_f, field_146041_e и field_146039_d. Они устроены так: преобразователь_в_лист(Массив WeightedRandomFishable).
Просто бери нужный WeightedRandomFishable из его массива (new WeightedRandomFishable[] {вот отсюда бери}).

/только не путай мусор, сокровища и рыбу/
 
63
5
20
MJaroslav написал(а):
pasha2004 написал(а):
MJaroslav написал(а):
pasha2004 написал(а):
А зачем делать костыли, если есть FishingHooks.removeFish(...)?
Только что нужно писать в скобках - неизвестно.

Всё известно, недокодер (я) разобрался:

Вот, я экспериментировал с полным удалением улова и добавлением своего (ибо при пустых списках улова - краш):
Код:
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146036_f)
 FishingHooks.removeFish(Predicates.not(Predicates.equalTo(loot)));
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146041_e)
 FishingHooks.removeTreasure(Predicates.not(Predicates.equalTo(loot)));
for (WeightedRandomFishable loot : (List<WeightedRandomFishable>) EntityFishHook.field_146039_d)
 FishingHooks.removeJunk(Predicates.not(Predicates.equalTo(loot)));
FishingHooks.addFish(new WeightedRandomFishable(new ItemStack(Items.apple), 1));
FishingHooks.addTreasure(new WeightedRandomFishable(new ItemStack(Items.diamond), 1));
FishingHooks.addJunk(new WeightedRandomFishable(new ItemStack(Items.bone), 1));

А если короче, то юзай вот это:
Код:
FishingHooks.removeJunk(Predicates.not(Predicates.equalTo(копия нужного для удаления WeightedRandomFishable)));

/Но так как там проверка просто equals, то есть шанс, что это нифига не заработает, ибо нужна точная копия (да.. ну и берд я сморозил)/


Ну... ты может свой Predicate написать, главное, чтобы он возвращал false в методе apply, если input равен тому, что надо удалить (ну я это так понял ¯\_(ツ)_/¯)


Хм... может написать костыльный мод, чтобы весь улов настраивался конфигом? (Да, злюкой-Json'ом)




Супер! Только одна незадача,как и откуда копировать этот полный список (на примере удаления рыбы)? Пытался копировать из EntityFishHook, то ли руки у меня кривые, но ничего не получилось, и пишет,что формат данных не тот. ДоHELPуй мне =)




Ну.. вот те поля: field_146036_f, field_146041_e и field_146039_d. Они устроены так: преобразователь_в_лист(Массив WeightedRandomFishable).
Просто бери нужный WeightedRandomFishable из его массива (new WeightedRandomFishable[] {вот отсюда бери}).

/только не путай мусор, сокровища и рыбу/




Может рили руки кривые. Если полностью копирую красным, то подчёркивает красным. Решил просто убрать одну рыбу:
Код:
FishingHooks.removeFish(Predicates.not(Predicates.equalTo(new WeightedRandomFishable(new ItemStack(Items.fish, 1, ItemFishFood.FishType.COD.func_150976_a()), 60))));
Вообще ни как не реагирует и рыба при улове попадается. Лучше всё наглядно с примерами (на словах не догоняю :/ )
 
Сверху