(MultiMC) Мой предмет и генерация лута

Версия Minecraft
1.19.2
API
Fabric
Как сделать так что-бы мой предмет из мода, спавнился естественным образом в сундуках (например в заброшеных шахтах) или же при убийсте моба (например вардена или дракона) с определённым шансом?
 
Последнее редактирование:
1,038
57
229
1,038
57
229
Зависит от того проверяешь ли ты тот код, который кидаешь
чисто логически написан верно, даже если будут ошибки, вот тут уж я и помогу)
Единственное в чём я ошибся, это по привычке написал forge, но в принципе разница не так велика.
ChatGPT (23:55:41): Для того чтобы твой предмет спавнился в сундуках или при убийстве мобов, тебе понадобится создать собственный лут-таблицы для каждого случая. Вот что ты можешь сделать:

1. Чтобы добавить свой предмет в сундуки, создай новый файл JSON в папке "loot_tables" внутри твоего мода. Назви его, например, "custom_chest_loot.json".

2. Внутри файла JSON определи таблицу лута. Например, чтобы задать шанс выпадения предмета в 50%, можно использовать следующий код:

JSON:
{
"type": "minecraft:chest",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "modid:item_id",
"weight": 1,
"functions": [
{
"function": "minecraft:set_count",
"count": 1
}
]
}
],
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.5
}
]
}
]
}

Замени "modid:item_id" на идентификатор твоего предмета из мода.

3. Чтобы добавить свой предмет к дропу при убийстве моба, создай новый файл JSON в папке "loot_tables" с именем, например, "custom_mob_drop.json".

4. Внутри файла JSON определи таблицу лута. Например, чтобы задать шанс выпадения предмета с вероятностью 25%, можно использовать следующий код:

JSON:
{
"type": "minecraft:entity",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "modid:item_id",
"weight": 1,
"functions": [
{
"function": "minecraft:set_count",
"count": 1
}
]
}
],
"conditions": [
{
"condition": "minecraft:random_chance_with_looting",
"chance": 0.25,
"looting_multiplier": 0.02
}
]
}
]
}

Снова замени "modid:item_id" на идентификатор твоего предмета из мода.

5. После того как создал два файла, зарегистрируй их в Minecraft Fabric в твоём моде. Ты можешь совершить это с помощью методов Fabric API, например, в методе onInitialize() твоего мода:
yourmod.java:
package com.example.yourmod;



import net.fabricmc.api.ModInitializer;

import net.minecraft.util.Identifier;

import net.minecraft.util.registry.BuiltinRegistries;

import net.minecraft.util.registry.Registry;

import net.minecraft.world.loot.LootTables;



public class YourMod implements ModInitializer {



private static final Identifier CUSTOM_CHEST_LOOT_ID = new Identifier("yourmod", "custom_chest_loot");

private static final Identifier CUSTOM_MOB_DROP_ID = new Identifier("yourmod", "custom_mob_drop");



@Override

public void onInitialize() {

Registry.register(BuiltinRegistries.LOOT_TABLE, CUSTOM_CHEST_LOOT_ID, LootTables.register(CUSTOM_CHEST_LOOT_ID));

Registry.register(BuiltinRegistries.LOOT_TABLE, CUSTOM_MOB_DROP_ID, LootTables.register(CUSTOM_MOB_DROP_ID));

}

}
6. Готово! Теперь твой предмет будет выпадать при генерации сундуков или при убийстве мобов с заданными шансами. Не забудь изменить "yourmod" на идентификатор твоего мода.


Я сейчас о том, что такие вопросы в принципе не должны существовать без ответов на форуме.
Или не существовать как вопросы.
Должно быть что то такое: ребят, вот у меня код работает не верно, не могли вы бы мне помочь.
Хотел сделать вот это.
И сразу видно усилия чувака, его желание становится лучше... ой старый уже, начинаю много говорить.
 
Последнее редактирование:
1,111
47
420
не ну я готов согласится что лучше дать хоть что-то, но иногда чатгпт может довольно шизоидную штуку произвести, и если такое попадет в правильный ответ, может потратиться много человекочасов на дебаг людьми, которые зайдут в тему через эн времени.
так как отбор в лучшие ответы частенько осуществляется людьми, которые не в зуб ногой что происходит, шиза может пройти и вопроса о том что что-то не работает может не последовать.
крч мне умерено страшно.
 
1,038
57
229
Тыж боженька, что тебе боятся о мыслях простых смертных ;)
Главное результат, тут я с тобой согласен. Пофиг как, главное чтобы люди создавали то что они хотят увидеть в Minecraft.
 
1,111
47
420
я просто чсв - это другое.
Главное результат, тут я с тобой согласен. Пофиг как, главное чтобы люди создавали то что они хотят увидеть в Minecraft.
Я этого не говорил. Я утверждаю, что иногда фрустрация от дебага шизы, сгенеренной чатгпт, может быть хуже, чем отсутствие ответа. Фрустрация убивает мотивацию. Отсутствие мотивации ведет к уменьшению шансов на окончание разработки мода. Такого буквально пока ни разу не было потому я не более чем высказываю свои опасения по этому поводу. Память о том как я по пять часов дебажил чатгптшную версию градиентного спуска только для того чтобы потом выбросить код полностью еще свежа. Отвратительно то что оно тоже выглядело "логично".
Я сейчас о том, что такие вопросы в принципе не должны существовать без ответов на форуме.
Или не существовать как вопросы.
Должно быть что то такое: ребят, вот у меня код работает не верно, не могли вы бы мне помочь.
Хотел сделать вот это.
Это справедливо. Такие темы в свое время выпиливали кажется.
И сразу видно усилия чувака, его желание становится лучше... ой старый уже, начинаю много говорить.
Дорогу молодым!
 
1,074
72
372
Что лучше? Пройти мимо или дать ответ?
Дать собственноручно написанный ответ, в том числе с использованием GPT, но ни в коему случае не заниматься тупым копипастом. На форум приходят с целью получения помощи от живых людей, а не искать ответ среди тонн воды, сгенерированной AI. Лить воду - это пока то, с чем нейронки справляются лучше всего для выполнения различных глупых заданий, где требуется определённое минимальное кол-во символов.

Люди проходят мимо по одной простой причине - видение нежелания у ТС пользоваться поиском и тем же GPT, чтобы хоть какие-то крупицы собрать для ответа. Никто не хочет тратить своё драгоценное время на нубов, не получив с этого для себя никакой выгоды, включая приобретение опыта.

Это я ещё не говорю про отдельные темы, где ТС нагло требует дать ему готовый код сразу «на блюдечке». Таким ничего не остаётся предложить, как посещение коммерческого раздела. Увы, но правило «время – деньги» применимо ко многим случаям.
 
1,038
57
229
ChatGPT (23:24:59): Для реализации спавна вашего предмета в сундуках и при убийстве мобов с шансом в Minecraft Forge 1.19.2, вам потребуется использовать события генерации мира и события смерти мобов. Вот пример мода, который добавляет спаун вашего предмета настраиваемым образом:

1. Создайте новый проект в вашей среде разработки (например, IntelliJ IDEA) с настройками для Minecraft Forge 1.19.2.

2. Создайте новый класс с именем "CustomItemSpawnMod" и добавьте следующий код:

CustomItemSpawnMod.java:
package com.example.customitemspawnmod;



import net.minecraft.block.Block;

import net.minecraft.item.Item;

import net.minecraft.item.ItemStack;

import net.minecraft.item.Items;

import net.minecraft.loot.LootPool;

import net.minecraft.loot.LootTables;

import net.minecraft.loot.entry.ItemEntry;

import net.minecraft.loot.function.SetItemCountLootFunction;

import net.minecraft.loot.function.SetNbtLootFunction;

import net.minecraft.util.Identifier;

import net.minecraftforge.event.LootTableLoadEvent;

import net.minecraftforge.event.entity.living.LivingDropsEvent;

import net.minecraftforge.event.world.BiomeLoadingEvent;

import net.minecraftforge.eventbus.api.SubscribeEvent;

import net.minecraftforge.fml.common.Mod;



import java.util.Random;



@Mod("customitemspawnmod")

public class CustomItemSpawnMod {



private static final Item CUSTOM_ITEM = Items.DIAMOND; // Замените на свой предмет



private static final int SPAWN_CHANCE = 10; // Шанс спавна предмета (1 к SPAWN_CHANCE)



private static final int MIN_ITEMS = 1; // Минимальное количество предметов

private static final int MAX_ITEMS = 3; // Максимальное количество предметов



public CustomItemSpawnMod() {

// Регистрируем методы-обработчики событий

MinecraftForge.EVENT_BUS.register(this);

}



@SubscribeEvent

public void onBiomeLoading(BiomeLoadingEvent event) {

// Добавляем предмет в сундуки

event.getTable().addPool(getLootPool(event.getName()));

}



@SubscribeEvent

public void onLivingDrops(LivingDropsEvent event) {

// Добавляем предмет в дроп моба с определенным шансом

if (event.getEntityLiving().isServerWorld() && event.getEntityLiving().getRandom().nextInt(SPAWN_CHANCE) == 0) {

event.getDrops().add(new ItemStack(CUSTOM_ITEM, getRandomItemCount()));

}

}



@SubscribeEvent

public void onLootTableLoad(LootTableLoadEvent event) {

Identifier tableId = event.getTable().getId();

// Если это сундук в заброшенной шахте, то добавляем предмет в лут таблицу

if (tableId.equals(LootTables.CHESTS_ABANDONED_MINESHAFT)) {

event.getTable().addPool(getLootPool(tableId));

}

}



private LootPool getLootPool(Identifier tableId) {

return LootPool.builder()

.rolls(1)

.addEntry(ItemEntry.builder(CUSTOM_ITEM)

.weight(1)

.function(SetItemCountLootFunction.builder(new Random().nextInt(MAX_ITEMS - MIN_ITEMS + 1) + MIN_ITEMS))

.function(SetNbtLootFunction.builder(CUSTOM_ITEM.getDefaultStack().getOrCreateNbt()))

.build())

.build();

}



private int getRandomItemCount() {

return new Random().nextInt(MAX_ITEMS - MIN_ITEMS + 1) + MIN_ITEMS;

}

}

3. Сохраните файл "CustomItemSpawnMod.java".

4. Запустите проект в среде разработки или соберите .jar файл и поместите его в папку "mods" вашего Minecraft Forge клиента.

После запуска Minecraft Forge 1.19.2 с установленным модом, ваш предмет будет спавниться с настройками, которые вы указали, в сундуках заброшенных шахт и дропаться с определенным шансом от убитых мобов.
 
Сверху