Skip to content

Commit

Permalink
make things generate as loot in certain vanilla structures
Browse files Browse the repository at this point in the history
  • Loading branch information
reoseah committed Oct 30, 2024
1 parent cfadc19 commit c9f0906
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 4 deletions.
50 changes: 48 additions & 2 deletions src/main/java/io/github/reoseah/magisterium/Magisterium.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.loot.v3.LootTableEvents;
import net.fabricmc.fabric.api.loot.v3.LootTableSource;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.block.BlockState;
Expand All @@ -26,8 +28,11 @@
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.*;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.entry.LootTableEntry;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.registry.*;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.sound.BlockSoundGroup;
Expand All @@ -43,11 +48,15 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashSet;
import java.util.Set;

public class Magisterium implements ModInitializer {
public static final String MOD_ID = "magisterium";

public static final Logger LOGGER = LoggerFactory.getLogger(Magisterium.class);


@Override
public void onInitialize() {
Registry.register(Registries.BLOCK, "magisterium:arcane_table", ArcaneTableBlock.INSTANCE);
Expand Down Expand Up @@ -111,6 +120,7 @@ public void onInitialize() {
MagisteriumCommands.initialize();

UseBlockCallback.EVENT.register(Magisterium::interact);
LootTableEvents.MODIFY.register(Magisterium::modifyLootTable);

PayloadTypeRegistry.playC2S().register(StartUtterancePayload.ID, StartUtterancePayload.CODEC);
PayloadTypeRegistry.playC2S().register(StopUtterancePayload.ID, StopUtterancePayload.CODEC);
Expand Down Expand Up @@ -217,4 +227,40 @@ private static boolean tryPlaceGlyph(PlayerEntity player, World world, Hand hand
return true;
}

public static final RegistryKey<LootTable> COMMON_STRUCTURES_LOOT = RegistryKey.of(RegistryKeys.LOOT_TABLE,
Identifier.of("magisterium:chests/parts/common_loot"));
public static final RegistryKey<LootTable> RARE_STRUCTURES_LOOT = RegistryKey.of(RegistryKeys.LOOT_TABLE,
Identifier.of("magisterium:chests/parts/rare_loot"));

public static final Set<Identifier> STRUCTURES_TO_SPAWN_COMMON_LOOT = new HashSet<>();

static {
STRUCTURES_TO_SPAWN_COMMON_LOOT.add(Identifier.ofVanilla("chests/simple_dungeon"));
STRUCTURES_TO_SPAWN_COMMON_LOOT.add(Identifier.ofVanilla("chests/desert_pyramid"));
STRUCTURES_TO_SPAWN_COMMON_LOOT.add(Identifier.ofVanilla("chests/jungle_temple"));
STRUCTURES_TO_SPAWN_COMMON_LOOT.add(Identifier.ofVanilla("chests/stronghold_corridor"));
STRUCTURES_TO_SPAWN_COMMON_LOOT.add(Identifier.ofVanilla("chests/stronghold_crossing"));
STRUCTURES_TO_SPAWN_COMMON_LOOT.add(Identifier.ofVanilla("chests/stronghold_library"));
}

public static final Set<Identifier> STRUCTURES_TO_SPAWN_RARE_LOOT = new HashSet<>();

static {
STRUCTURES_TO_SPAWN_RARE_LOOT.add(Identifier.ofVanilla("chests/desert_pyramid"));
STRUCTURES_TO_SPAWN_RARE_LOOT.add(Identifier.ofVanilla("chests/jungle_temple"));
STRUCTURES_TO_SPAWN_RARE_LOOT.add(Identifier.ofVanilla("chests/stronghold_library"));
}

private static void modifyLootTable(RegistryKey<LootTable> key, LootTable.Builder tableBuilder, LootTableSource source, RegistryWrapper.WrapperLookup registries) {
if (STRUCTURES_TO_SPAWN_COMMON_LOOT.contains(key.getValue())) {
tableBuilder.pool(LootPool.builder() //
.with(LootTableEntry.builder(COMMON_STRUCTURES_LOOT)) //
.rolls(UniformLootNumberProvider.create(0, 2)));
}
if (STRUCTURES_TO_SPAWN_RARE_LOOT.contains(key.getValue())) {
tableBuilder.pool(LootPool.builder() //
.with(LootTableEntry.builder(RARE_STRUCTURES_LOOT)) //
.rolls(UniformLootNumberProvider.create(0, 1)));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public static ItemStack createTestBook() {

@Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
ItemStack book = player.getStackInHand(hand);
var book = player.getStackInHand(hand);

if (!book.contains(PAGES)) {
return TypedActionResult.fail(book);
Expand All @@ -88,7 +88,10 @@ public Text getDisplayName() {
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
super.appendTooltip(stack, context, tooltip, type);
if (!stack.contains(PAGES) || stack.get(PAGES).isEmpty()) {
var pages = stack.get(PAGES);
if (pages != null && !pages.isEmpty()) {
tooltip.add(Text.translatable("item.magisterium.spell_book.pages", pages.size()).formatted(Formatting.GRAY));
} else {
tooltip.add(Text.translatable("item.magisterium.spell_book.empty").formatted(Formatting.GRAY));
}
if (stack.contains(UNSTABLE_CHARGE)) {
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/magisterium/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"item.magisterium.spell_book": "Spell Tome",
"item.magisterium.spell_book.unstable_charge": "Unstable Charge",
"item.magisterium.spell_book.empty": "Empty",
"item.magisterium.spell_book.pages": "%s Entries",
"item.magisterium.spell_page": "Spell Page",
"item.magisterium.bookmark": "Silk Bookmark",
"tags.item.magisterium.spell_book_components": "Spell Book Components",
Expand Down
6 changes: 6 additions & 0 deletions src/main/resources/assets/magisterium/lang/ru_ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@
"magisterium.spell.magisterium.conflagrate.components": "Компоненты: до трех предметов, пропитанных элементом огня",
"magisterium.spell.magisterium.conflagrate.description.0": "Вызывает взрыв палящего огня, поджигая всю область вокруг заклинателя.",
"magisterium.spell.magisterium.conflagrate.description.1": "Предметы сильно увеличивают дальность заклинания.",
"magisterium.spell.magisterium.cold_snap": "Холодный взрыв",
"magisterium.spell.magisterium.cold_snap.heading": "ꜰʀɪɢᴜs ꜰʀᴀɴɢᴇʀᴇᴛᴜʀ",
"magisterium.spell.magisterium.cold_snap.components": "Компоненты: до трех предметов, пропитанных элементом холода",
"magisterium.spell.magisterium.cold_snap.description.0": "Вызывает взрыв ледяного холода, замораживая всю область вокруг заклинателя.",
"magisterium.spell.magisterium.cold_snap.description.1": "Предметы сильно увеличивают дальность заклинания.",
"magisterium.spell.magisterium.cold_snap.utterance": "Gᴇʟᴜᴍ ʀᴀᴘɪᴅᴜᴍ, ᴇx ᴄᴏʀᴅᴇ ᴍᴇᴏ ᴅɪꜰꜰᴜɴᴅᴇ!\n\nGʟᴀᴄɪᴇs ʀᴇɢɴᴇᴛ, ᴄᴀʟᴏʀ ᴀʙsᴄᴇᴅᴀᴛ!\n\nOᴍɴɪᴀ ᴛᴀɴɢᴀs ꜰʀɪɢᴏʀᴇ ᴀᴄᴜᴛᴏ!",
"magisterium.spell.magisterium.illusory_wall": "Иллюзорная стена",
"magisterium.spell.magisterium.illusory_wall.heading": "ɪʟʟᴜsᴏʀɪᴀ ᴍᴜʀᴜs",
"magisterium.spell.magisterium.illusory_wall.components": "Компоненты: материал, из которого должна быть сделана стена, линия мистических глифов на земле",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"weight": 10,
"name": "magisterium:awaken_the_fire_page"
},
{
"type": "minecraft:item",
"weight": 10,
"name": "magisterium:quench_the_fire_page"
},
{
"type": "minecraft:item",
"weight": 10,
"name": "magisterium:glyphic_ignition_page"
},
{
"type": "minecraft:item",
"weight": 5,
"name": "magisterium:conflagrate_page"
},
{
"type": "minecraft:item",
"weight": 5,
"name": "magisterium:cold_snap_page"
},
{
"type": "minecraft:item",
"weight": 5,
"name": "magisterium:illusory_wall_page"
}
]
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"weight": 1,
"name": "magisterium:spell_book",
"functions": [
{
"function": "set_components",
"components": {
"magisterium:pages": [
{
"id": "magisterium:awaken_the_flame_page",
"count": 1
},
{
"id": "magisterium:quench_the_flame_page",
"count": 1
},
{
"id": "magisterium:conflagrate_page",
"count": 1
},
{
"id": "magisterium:glyphic_ignition_page",
"count": 1
}
]
}
}
]
}
]
}
]
}

0 comments on commit c9f0906

Please sign in to comment.