Jump to content

nov4e

Members
  • Posts

    169
  • Joined

  • Last visited

Posts posted by nov4e

  1. Again not work....

     

    @SubscribeEvent public void editVanillaLoots(LootTableLoadEvent event) {
    		
    		RandomValueRange rolls = new RandomValueRange(1);
    		RandomValueRange rollsBonus = new RandomValueRange(2);
    		
    		LootPool customPool = new LootPool
    	    (
    	    		new LootEntry[] {
    	    				new LootEntryItem(Items.BONE, 3, 0, new LootFunction[0], new LootCondition[] {new RandomChance(1F)}, "minecraft:bone")
    	    		},
    	    		new LootCondition[] {
    	    				
    	    		},
    	    		rolls,
    	    		rollsBonus,
    	    		"customPool"
    	    );
    		
    		
    		LootTable.EMPTY_LOOT_TABLE.addPool(customPool);
    	    if (event.getName().equals(LootTableList.ENTITIES_VILLAGER)) { 	 
    	        final LootPool main = event.getTable().getPool("customPool");
    	        if (main != null) {
    	        	main.addEntry(new LootEntryItem(Items.BONE, 3, 0, new LootFunction[0], new LootCondition[] {new RandomChance(1F)}, "minecraft:bone"));
    	        }
    	    }
    }

     

  2. 1 hour ago, diesieben07 said:
    • Your array of loot entries is empty. Why are you not doing what you did in your original code?
    • Why are you suddenly passing that RandomChance condition? Moreover, this condition will not do anything, it's always true.
    • Why are you passing null for bonusRolls?
    LootPool customPool = new LootPool
        (
        		new LootEntry[] {
        				new LootEntryItem(Items.BONE, 3, 0, new LootFunction[0], new LootCondition[] {new RandomChance(1F)}, "minecraft:bone")
        		},
        		new LootCondition[] {
        				
        		},
        		rolls,
        		rollsBonus,
        		"customPool"
        );

    Thanks for all your help @diesieben07 :) :) :) 

  3. 1 minute ago, diesieben07 said:

    Read the article on the minecraft wiki, as suggested by the documentation to learn what rolls and bonus rolls are.

    The name is also explained in the documentation.

    LootPool customPool = new LootPool(new LootEntry[] {EntityVillager, EntityOcelot}, new LootCondition[] {}, 2, 1, "customPool");

    ??

  4. 2 minutes ago, diesieben07 said:

    Okay. So. If you know all that, then again: Why did you make a JSON file?

     

    Because I misunderstood the wiki.

    For now is all good but

    16 minutes ago, nov4e said:

    don't understand what is "rools" and "bonusrools". Also what are the entries? The entities? 

    
    new LootEntry[] {EntityOcelot, EntityVillager} ????

     

    What I have to put in the name???

     

  5. 1 minute ago, diesieben07 said:

    Okay. Read the forge documentation. It has a specific section on how to modify vanilla loot. Do not follow random threads on this forum.

    Ok but the thread was correct. I only need to create a pool, as you told me, for add drops to mobs that not have a loot pool.

  6. 2 minutes ago, diesieben07 said:

    So, you read that documentation. Why are you still subscribing to the event?

    Granted, I did not know there was a way to do this from JSON, but since you knew that, why are you using the event still?

    I subscribed the event because also i followed that topic.

     

    Tell me what is the best way.

  7. 1 hour ago, diesieben07 said:

    For what purpose did you make that JSON file?

    @diesieben07I maked a json file because i followed this documentation.

     

    1 hour ago, diesieben07 said:

    I am not sure what is unclear about the parameters. Please ask exact questions if you have any.

    I don't understand what is "rools" and "bonusrools". Also what are the entries? The entities? 

    new LootEntry[] {EntityOcelot, EntityVillager} ????

     

    What I have to put in the name???

  8. It requires:

    new LootEntry[] {entry}, <conditions>, <rolls>, <bonusRolls>, <name>

    What I have to put in entry, rools, conditions, bonusRools, name??

     

    I've maked a json file:

    {
        "pools": [
            {
                "name": "main",
                "rolls": 1,
                "entries": [
                    {
                        "type": "entity",
                        "name": "minecraft:silverfish",
                        "weight": 60
                    },
                    {
                        "type": "entity",
                        "name": "minecraft:bat",
                        "weight": 60
                    },
                    {
                        "type": "entity",
                        "name": "minecraft:villager",
                        "weight": 60
                    },
                    {
                        "type": "entity",
                        "name": "minecraft:ocelor",
                        "weight": 60
                    }
                    
                ]
            }
        ]
    }

  9. @Cadiboo 

    Now I've put :

    VillagerDrops villager = new VillagerDrops(new LootEntry[] {}, new LootCondition[] {}, rollsIn, bonusRollsIn, "villager");

     

    VillagerDrops Class:

    package com.nov4e.nex.misc.loots;
    
    import net.minecraft.world.storage.loot.LootEntry;
    import net.minecraft.world.storage.loot.LootPool;
    import net.minecraft.world.storage.loot.LootTable;
    import net.minecraft.world.storage.loot.RandomValueRange;
    import net.minecraft.world.storage.loot.conditions.LootCondition;
    
    public class VillagerDrops extends LootPool {
    
    	public VillagerDrops(LootEntry[] lootEntriesIn, LootCondition[] poolConditionsIn, RandomValueRange rollsIn,
    			RandomValueRange bonusRollsIn, String name) {
    		super(lootEntriesIn, poolConditionsIn, rollsIn, bonusRollsIn, name);
    		
    		LootTable.EMPTY_LOOT_TABLE.addPool(this);
    	}
    
    	
    
    }

     

  10. @dieseben07

     

    final LootPool main = event.getTable().addPool(main);

    This is the correct method? If I type LootTable.add, add is not a field.

     

    10 hours ago, diesieben07 said:

    No. Did you even read what I said?

     

    I did not understand what you mean.

     

    EDIT: after lauching the game it crashes with this code.

  11. @dieseben07

    56 minutes ago, diesieben07 said:

    Your code does not even compile. Item#getMetaData returns an int, you are trying to pass it where anItem is needed. Also this method does not do what you think it does. It only makes sense for items being placed as blocks.

    You need to pass in the item here and then pass in a loot function (class SetMetadata) to set the metadata.

    Also, set the entry name properly. It has nothing to do with the item.

    So I have to make a new int?

     

    58 minutes ago, diesieben07 said:

    Ocelots do not have any loot, so they do not have a default loot pool. You need to add it first.

    How I can create a loot pool? Do you know a tutorial for 1.12.2? I'm new to modding.

  12. Hi! I'm new on this forum. So that's the problem:

     

    I'm trying to add custom items to  vanilla mob drops.

    I've got 2 problems:

     

    1) I can't insert metadata in the dropped item:

     

            @SubscribeEvent
    		public void parrotDrop(LootTableLoadEvent event) {
    	    
    	    if (event.getName().equals(LootTableList.ENTITIES_PARROT)) {
    		   	 
    	        final LootPool main = event.getTable().getPool("main");
    	 
    	        if (main != null) {
    	 
    	        	main.addEntry(new LootEntryItem(Items.DYE.getMetaData(15), 3, 1, new LootFunction[0], new LootCondition[] {new RandomChance(1F)}, "minecraft:bone"));
    	            
    	        }
    	    }
    	    
    	  }

    I want when killed a parrot it drops bone meal.

     

    2)Certain animals drops can't be edited?

    This code ^ works with all the animals but with certains animals it not work for example silver fish.

     

    THIS WORK
    
    
    @SubscribeEvent
    		public void spiderDrop(LootTableLoadEvent event) {
    	    
    	    if (event.getName().equals(LootTableList.ENTITIES_SPIDER)) {
    		   	 
    	        final LootPool main = event.getTable().getPool("main");
    	 
    	        if (main != null) {
    	 
    	        	main.addEntry(new LootEntryItem(Items.BONE, 3, 0, new LootFunction[0], new LootCondition[] {new RandomChance(1F)}, "minecraft:bone"));
    	            
    	        }
    	    }
    	    }
    
    
    
    THIS NOT WORK
    @SubscribeEvent
    		public void ocelotDrop(LootTableLoadEvent event) {
    	    
    	    if (event.getName().equals(LootTableList.ENTITIES_OCELOT)) {
    		   	 
    	        final LootPool main = event.getTable().getPool("main");
    	 
    	        if (main != null) {
    	        	
    	 
    	        	main.addEntry(new LootEntryItem(Items.DYE, 3, 1, new LootFunction[0], new LootCondition[] {new RandomChance(1F)}, "minecraft:bone"));
    	            
    	        }
    	    }
    	    }

    Thanks for help!! Sorry for my bad english :D

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.