How to give Vanilla Mobs custom Drops

Started by DarkAssassin on Sun, 09/23/2018 - 15:06

Topic category: Help with modding (Java Edition)

Last seen on 16:37, 22. Feb 2020
Joined Sep 2018
User points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • Tracker tickets:
  • MCreator plugins:
  • Comments:
How to give Vanilla Mobs custom Drops
Wed, 08/21/2019 - 01:41 (edited)

So I tried a few things to get this to work but I have had no luck, I've tried Procedures and Overlays, only Procedures have seemed to succeed, but it Only does it for all mobs [Entity Dies] so It's quite useless unless I want all mobs to drop the custom loot.

I tried making an Overlay and editing the code like Nuparu00 said on this topic here -=- https://mcreator.net/comment/28477 -=- and also a small bit of info on this page aswell -=- https://mcreator.net/forum/42141/how-do-i-make-vanilla-mobs-drop-custom… -=-

I believe to have a good grip on what I need to do, for example. This is what I tried to do while following the instructions that I could see.

Below is the original code, Below that will be my edited version of the code.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

public class mcreator_test {

    public static Object instance;

    public void load(FMLInitializationEvent event) {
        MinecraftForge.EVENT_BUS.register(new GUIRenderEventClass());
    }

    public void generateNether(World world, Random random, int chunkX, int chunkZ) {
    }

    public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
    }

    public void serverLoad(FMLServerStartingEvent event) {
    }

    public void preInit(FMLPreInitializationEvent event) {
    }

    public void registerRenderers() {
    }

    public int addFuel(ItemStack fuel) {
        return 0;
    }

    public static class GUIRenderEventClass {

        @SubscribeEvent(priority = EventPriority.NORMAL)
        public void eventHandler(RenderGameOverlayEvent event) {
            if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) {
                int posX = (event.getResolution().getScaledWidth()) / 2;
                int posY = (event.getResolution().getScaledHeight()) / 2;
                EntityPlayer entitySP = Minecraft.getMinecraft().player;
                MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
                World world = server.getWorld(entitySP.dimension);
                EntityPlayer entity = entitySP;
                for (EntityPlayer entityMP : world.playerEntities)
                    if (entityMP.getName().equals(entitySP.getName()))
                        entity = entityMP;
                int x = (int) entity.posX;
                int y = (int) entity.posY;
                int z = (int) entity.posZ;
                if ((true)) {
                }
            }
        }
    }
}

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Now for what I was able to do with the instructions given.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

public class mcreator_test {

    public static Object instance;

    public void load(FMLInitializationEvent event) {
        MinecraftForge.EVENT_BUS.register(new GUIRenderEventClass());
    }

    public void generateNether(World world, Random random, int chunkX, int chunkZ) {
    }

    public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
    }

    public void serverLoad(FMLServerStartingEvent event) {
    }

    public void preInit(FMLPreInitializationEvent event) {
    }

    public void registerRenderers() {
    }

    public int addFuel(ItemStack fuel) {
        return 0;
    }

    public static class GUIRenderEventClass {  public void playerKilledZombie(LivingDropsEvent event)
   {
      if(event.entityLiving instanceof EntityZombie)
      {

        

        event.entityLiving.dropItem(Items.rotten_flesh, 1);

         event.entityLiving.dropItem(Items.bone, 1);
        
      }
    
}

        @SubscribeEvent(priority = EventPriority.NORMAL)
        public void eventHandler(RenderGameOverlayEvent event) {
            if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) {
                int posX = (event.getResolution().getScaledWidth()) / 2;
                int posY = (event.getResolution().getScaledHeight()) / 2;
                EntityPlayer entitySP = Minecraft.getMinecraft().player;
                MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
                World world = server.getWorld(entitySP.dimension);
                EntityPlayer entity = entitySP;
                for (EntityPlayer entityMP : world.playerEntities)
                    if (entityMP.getName().equals(entitySP.getName()))
                        entity = entityMP;
                int x = (int) entity.posX;
                int y = (int) entity.posY;
                int z = (int) entity.posZ;
                if ((true)) {
                }
            }
        }
    }
}

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Also yes, I have tried to use getEntityLiving() aswell.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

I also tried this but it didn't work.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

public class mcreator_test{

public static class GUIRenderEventClass
{}

public mcreator_overlayTest(){}

public Object instance;
public void load(FMLInitializationEvent event){
    MinecraftForge.EVENT_BUS.register(new GUIRenderEventClass(
    public void playerKilledZombie(LivingDropsEvent event)
   {
      if (event.entityLiving instanceof EntityZombie)
      {

        

        event.entityLiving.dropItem(Items.rotten_flesh, 1);

         event.entityLiving.dropItem(Items.bone, 1);
        
      }
    
}));
    
     
}
public void generateNether(World world, Random random, int chunkX, int chunkZ){}
public void generateSurface(World world, Random random, int chunkX, int chunkZ){}
public int addFuel(ItemStack fuel){return 0;}
public void serverLoad(FMLServerStartingEvent event){}
public void preInit(FMLPreInitializationEvent event){}
public void registerRenderers(){}
}[/spoiler]

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

When I run save and build on any of these, it always comes up as a error.

I'm not too sure what I am doing wrong, Any help would be Appreciated.

 

(Note: If you do happen to know how to do this, could you please provide a 'Before and After' image of the code so it is easier to follow along, thank you.)

(Note: I am also using version 1.8.0 of MCreator)

Edited by DarkAssassin on Wed, 08/21/2019 - 01:41
Last seen on 16:37, 22. Feb 2020
Joined Sep 2018
User points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • Tracker tickets:
  • MCreator plugins:
  • Comments:
Just another note, when I do…
Sun, 09/23/2018 - 20:23

Just another note, when I do run this, I get this in the Console:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

:clean
:deobfCompileDummyTask
:deobfProvidedDummyTask
:sourceApiJava
:compileApiJava UP-TO-DATE
:processApiResources UP-TO-DATE
:apiClasses UP-TO-DATE
:sourceMainJava
C:\Pylo\MCreator180\forge\build\sources\main\java\mod\mcreator\mcreator_test.java:48: error: cannot find symbol
  public void playerKilledZombie(LivingDropsEvent event)
                                                   ^
  symbol:  class LivingDropsEvent
  location: class GUIRenderEventClass
1 error
:compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 13.135 secs
C:\Pylo\MCreator180\forge>
Task completed with return code 0 in 13657 milliseconds

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

From what I can get is that 'LivingDropsEvent' no longer works, I have tried to change it to other things close to it like 'DropsEvent' and 'DropEvent' but it still seems not to work.

Hope this is helpful

Last seen on 16:48, 27. Oct 2020
Joined Apr 2010
User points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • Tracker tickets:
  • MCreator plugins:
  • Comments:
You can check for entity…
Wed, 08/21/2019 - 17:35

You can check for entity type with entity killed procedure trigger and only do this for the specific entity type.

The post I have liked on the forums dozen of times: https://twitter.com/PyloDEV/status/1050470892705390594/photo/1