Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

How to override the loot tables of the other mods?


Recommended Posts

Hi
I am creating a modpack and within this modpack there are various mods which create different iron ores. I would like to create a mod that modifies the loot tables of a mod in such a way that breaking a limestone_iron_ore drops me a raw_iron_ore. The raw_iron_ore, however, is added by another mod.
For the moment what I did was create a mod containing this loot table: https://pastebin.com/1HtqqpzE
Unfortunately it didn't work.
I guess it is a little more complicated than that and therefore I wonder if anyone could help me as I do not have the slightest experience in programming of any kind, giving me some tips and some advice on how to do so that this loot table overwrites that of the two mods .

Edited by TYPyz
Link to post
Share on other sites
  • TYPyz changed the title to How to override the loot tables of the other mods?

This does not need a mod. You would just need to replace the loot table with your own by simply providing the file in the same location as the one you are replacing, but in your own datapack. You would also need to make sure that the global loot modifiers do not have an effect by checking those in the mods to make sure they don't do anything you don't want to the particular block.

  • Like 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Are the methods called? Do they do the correct thing? Check with the debugger.
    • Ive made it like this, but nothing changed: public static class SoulProvider implements ICapabilitySerializable<INBT> { @CapabilityInject(SoulCap.class) public static Capability<SoulCap> SOUL_CAP; private final LazyOptional<SoulCap> instance = LazyOptional.of(() -> new SoulCap()); @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) { return cap == SOUL_CAP ? instance.cast() : LazyOptional.empty(); } @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap) { return cap == SOUL_CAP ? instance.cast() : LazyOptional.empty(); } @Override public INBT serializeNBT() { return SOUL_CAP.getStorage().writeNBT(SOUL_CAP, this.instance.resolve().get(), null); } @Override public void deserializeNBT(INBT nbt) { SOUL_CAP.getStorage().readNBT(SOUL_CAP, this.instance.resolve().get(), null, nbt); } }  
    • For attached capabilities to be saved your ICapabilityProvider needs to implement INBTSerializable (or you can use the combination interface ICapabilitySerializable) and it needs to save any capabilities it provides to NBT.
    • It works fine in-game, but when I re-enter the world, all the fields are set to their default values. Its strange because Ive implemented writeNBT and readNBT methods. Also client and server are synchronized, so its not the problem. Capability code:   public class SoulCap { public int parryTimer = 0; public int CATimer = 0; public boolean justParried = false; public boolean rightClicked = false; public boolean leftClicked = false; public double mana = 0; public double maxMana = 10; public HashMap<String, Integer> usedKeyItems = new HashMap<>(); public boolean trySpendMana(double a) { if (mana >= a){ mana -= a; return true; } return false; } public void addMana(double a){ mana += a; if (mana > maxMana) mana = maxMana; } public CompoundNBT getNbt(){ CompoundNBT tag = new CompoundNBT(); tag.putInt("parryTimer", parryTimer); tag.putInt("CATimer", CATimer); tag.putBoolean("justParried", justParried); tag.putBoolean("rightClicked", rightClicked); tag.putBoolean("leftClicked", leftClicked); tag.putDouble("mana", mana); tag.putDouble("maxMana", maxMana); CompoundNBT keyItems = new CompoundNBT(); for (String s : usedKeyItems.keySet()){ keyItems.putInt(s, usedKeyItems.get(s)); } tag.put("usedKeyItems", keyItems); return tag; } public SoulCap setNbt(CompoundNBT nbt){ parryTimer = nbt.getInt("parryTimer"); CATimer= nbt.getInt("CATimer"); justParried = nbt.getBoolean("justParried"); rightClicked = nbt.getBoolean("rightClicked"); leftClicked = nbt.getBoolean("leftClicked"); mana = nbt.getDouble("mana"); maxMana = nbt.getDouble("maxMana"); CompoundNBT keyItems = nbt.getCompound("usedKeyItems"); for (String s : keyItems.keySet()){ usedKeyItems.put(s, keyItems.getInt(s)); } return this; } public static class SoulProvider implements ICapabilityProvider { @CapabilityInject(SoulCap.class) public static Capability<SoulCap> SOUL_CAP; private final LazyOptional<SoulCap> instance = LazyOptional.of(() -> new SoulCap()); @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) { return cap == SOUL_CAP ? instance.cast() : LazyOptional.empty(); } @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap) { return cap == SOUL_CAP ? instance.cast() : LazyOptional.empty(); } } public static class SoulStorage implements Capability.IStorage<SoulCap> { @Override public INBT writeNBT(Capability<SoulCap> capability, SoulCap soulCap, Direction side) { return soulCap.getNbt(); } @Override public void readNBT(Capability<SoulCap> capability, SoulCap soulCap, Direction side, INBT nbt) { soulCap.setNbt((CompoundNBT)nbt); } } } Registering:   @Mod("soul") @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class Soul { // //various stuff // @SubscribeEvent public static void setup(final FMLCommonSetupEvent event) { CapabilityManager.INSTANCE.register(SoulCap.class, new SoulCap.SoulStorage(), () -> new SoulCap()); } } Attaching: @Mod.EventBusSubscriber public class CapabilityEvents { @SubscribeEvent static void playerCapability(AttachCapabilitiesEvent<Entity> event){ if (event.getObject() instanceof PlayerEntity) { event.addCapability(new ResourceLocation(Soul.id, "soul"), new SoulCap.SoulProvider()); } } }  
    • https://minecraft.fandom.com/wiki/Tutorials/Creating_a_resource_pack#Animation_Properties
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.