Skip to content

Commit

Permalink
Vanilla loot table modification
Browse files Browse the repository at this point in the history
  • Loading branch information
Ikethepro18 committed Oct 13, 2024
1 parent 2eb8f3e commit 141d38b
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/main/java/ike/ambientdiscs/AmbientDiscs.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import ike.ambientdiscs.item.ModItemGroups;
import ike.ambientdiscs.item.ModItems;
import ike.ambientdiscs.sound.ModSounds;
import ike.ambientdiscs.util.LootTableModifiers;
import net.fabricmc.api.ModInitializer;

import org.slf4j.Logger;
Expand All @@ -18,6 +19,7 @@ public void onInitialize() {
ModItemGroups.registerItemGroups();
ModItems.registerModItem();
ModSounds.registerSounds();
LootTableModifiers.modifyLootTables();
LOGGER.info("Ambient Discs initialised, probably...");
}
}
6 changes: 2 additions & 4 deletions src/main/java/ike/ambientdiscs/item/ModItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,10 @@

public class ModItems {
//All items
//Don't forget to add to custom creative tab in ModItemGroups
//And in ModSounds
//Make sure to add to ModSounds
//And in ModdedJukeboxSongs
//And to add textures/models (datagen)
//And to add to langs
//And to music_discs.json
//And set it up in a loot table in LootTableModifiers (or as a creeper drop in ModItemTags)

//public static final Item MUSIC_DISC_ = registerSimpleMusicDiscItem("music_disc_", ModdedJukeboxSongs.{song});

Expand Down
41 changes: 41 additions & 0 deletions src/main/java/ike/ambientdiscs/util/LootTableModifiers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package ike.ambientdiscs.util;

import ike.ambientdiscs.item.ModItems;
import net.fabricmc.fabric.api.loot.v3.LootTableEvents;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.condition.RandomChanceLootCondition;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.function.SetCountLootFunction;
import net.minecraft.loot.provider.number.ConstantLootNumberProvider;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.util.Identifier;

public class LootTableModifiers {
//Define loot tables with an internal identifier
private static final Identifier SHIPWRECK_TREASURE_CHEST_ID
= Identifier.of("minecraft", "chests/shipwreck_treasure");
private static final Identifier JUNGLE_TEMPLE_BASEMENT_CHEST_ID
= Identifier.of("minecraft", "chests/jungle_temple");

public static void modifyLootTables() {
LootTableEvents.MODIFY.register((key, tableBuilder, source, registries) -> {
if(source.isBuiltin() && SHIPWRECK_TREASURE_CHEST_ID.equals(key.getValue())) {
LootPool.Builder poolBuilder = LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1))
.conditionally(RandomChanceLootCondition.builder(0.3333f))
.with(ItemEntry.builder(ModItems.MUSIC_DISC_AXOLOTL))
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0f,1.0f)).build());
tableBuilder.pool(poolBuilder.build());
}

if(source.isBuiltin() && JUNGLE_TEMPLE_BASEMENT_CHEST_ID.equals(key.getValue())) {
LootPool.Builder poolBuilder = LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1))
.conditionally(RandomChanceLootCondition.builder(0.6f))
.with(ItemEntry.builder(ModItems.MUSIC_DISC_A_FAMILIAR_ROOM))
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(2.0f,5.0f)).build());
tableBuilder.pool(poolBuilder.build());
}
});
}
}

0 comments on commit 141d38b

Please # to comment.