Jump to content

[Solved][1.10.2] Need help with HarvestDropsEvent...


SanaRinomi

Recommended Posts

I admit, I've never worked with events so it's probably something I'm overlooking but anyhow...

 

I'm trying to get a vanilla block to drop not only it's own item drop but also to have a chance of dropping a custom one.

 

Here's my Event code:

 

package com.holydevils.event;

import java.util.List;

import com.holydevils.items.ModItems;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class ModHarvestDropsEvent {
@SubscribeEvent
public void onHarvestBlock(BlockEvent.HarvestDropsEvent event)
{
	List<ItemStack> currentDrops = event.getDrops();
	final EntityPlayer PLAYER = event.getHarvester();
	if(null == PLAYER || null == PLAYER.getHeldItemMainhand()) return;

	if(event.getState().getBlock() == Blocks.DIAMOND_ORE && event.getWorld().rand.nextInt(100) < 75)
	{
		currentDrops.add(new ItemStack(ModItems.diamondDust, 1));
	}

	if(event.getState().getBlock() == Blocks.OBSIDIAN && event.getWorld().rand.nextInt(100) < 75)
	{
		currentDrops.add(new ItemStack(ModItems.obsidianDust, 1));
	}
	event.getDrops().clear();
	event.getDrops().addAll(currentDrops);
}
}

 

 

And here's my main registry:

 

package com.holydevils.main;

import com.holydevils.blocks.ModBlocks;
import com.holydevils.client.render.items.ItemRenderRegistry;
import com.holydevils.event.ModHarvestDropsEvent;
import com.holydevils.items.ModItems;
import com.holydevils.lib.StringReferences;
import com.holydevils.world.ModWorld;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;

@Mod(modid = StringReferences.MODID, name =StringReferences.NAME, version =StringReferences.VERSION)
public class MainRegistry {
@SidedProxy(clientSide = StringReferences.CLIENTPROXY, serverSide = StringReferences.SERVERPROXY)
public static ServerProxy proxyServer;
public static ModWorld mWorld = new ModWorld();

@EventHandler
public static void preLoad(FMLPreInitializationEvent PreEvent){
	ModItems.createItems();
	ModBlocks.manageBlocks();

	CraftingManager.craftRegister();

	GameRegistry.registerWorldGenerator(mWorld, 1);

	proxyServer.registerRenderInfo();
}
public static void load(FMLInitializationEvent Event){
}

public static void postLoad(FMLPostInitializationEvent PostEvent){
	MinecraftForge.EVENT_BUS.register(new ModHarvestDropsEvent());
}
}

 

Note: I've tried registering it in both load and postLoad. If I put it into preLoad the default item it's self only droppes randomly.

Link to comment
Share on other sites

That code should work and it should be in your load method. Can you be a little more detailed when explaining the problem?

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Try doing event.getDrops().add instead of resetting the list.

 

I tried doing that and it didn't work so what I did was add " || true" to the if statements and it still didn't drop the item... And before you ask, I did move it to the load method.

Link to comment
Share on other sites

When I said use event.getDrops.add(...) did you remove the clear and the new List you made from the method? Is it dropping any Items at all?

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

When I said use event.getDrops.add(...) did you remove the clear and the new List you made from the method? Is it dropping any Items at all?

 

It only drops the default item and yes I did remove the things that you mentioned

 

Updated code:

 

package com.holydevils.event;

import java.util.List;

import com.holydevils.items.ModItems;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class ModHarvestDropsEvent {
@SubscribeEvent
public void onHarvestBlock(BlockEvent.HarvestDropsEvent event)
{
	final EntityPlayer PLAYER = event.getHarvester();
	if(null == PLAYER || null == PLAYER.getHeldItemMainhand()) return;

	if(event.getState().getBlock() == Blocks.DIAMOND_ORE && event.getWorld().rand.nextInt(100) < 75 || true)
	{
		event.getDrops().add(new ItemStack(ModItems.diamondDust, 1));
	}

	if(event.getState().getBlock() == Blocks.OBSIDIAN && event.getWorld().rand.nextInt(100) < 75 || true)
	{
		event.getDrops().add(new ItemStack(ModItems.obsidianDust, 1));
	}
}
}

 

Link to comment
Share on other sites

By chance do you have a github or skype/discord? And do the Items exist in the game?

 

*Edit you don't have @EventHandler above your load and postLoad methods.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

*Edit you don't have @EventHandler above your load and postLoad methods.

Yeah I didn't notice this before, but making a github is recommended for later posts.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Ligadewa138 telah menjadi tujuan utama bagi para pecinta perjudian daring di Indonesia yang mencari pengalaman bermain slot yang mengasyikkan dan menguntungkan. Dikenal dengan koleksi permainan slot yang mengagumkan dan kemudahan transaksi menggunakan bank BNI, Ligadewa138 menjadi pilihan utama bagi pemain yang mencari pengalaman bermain yang tak terlupakan. Dalam panduan ini, kami akan menjelaskan mengapa Ligadewa138 dianggap sebagai situs slot BNI gacor maxwin terus. 1. Koleksi Permainan Slot yang Luar Biasa Ligadewa138 menawarkan koleksi permainan slot yang luas dengan berbagai tema dan fitur menarik. Dari slot klasik hingga slot progresif dengan jackpot besar, pemain dapat menemukan berbagai pilihan permainan yang sesuai dengan selera dan preferensi mereka. Kualitas grafis yang memukau dan efek suara yang realistis menciptakan pengalaman bermain yang mendebarkan dan menghibur. 2. Transaksi Menggunakan Bank BNI yang Mudah dan Cepat Salah satu keunggulan utama Ligadewa138 adalah kemudahan dalam melakukan transaksi menggunakan bank BNI. Pemain dapat melakukan deposit dan penarikan dengan cepat dan aman melalui layanan perbankan online BNI. Prosesnya sederhana dan mudah dipahami, sehingga pemain dapat fokus pada permainan tanpa harus khawatir tentang masalah transaksi. 3. Bonus dan Promosi Menggiurkan Ligadewa138 sering menawarkan berbagai bonus dan promosi yang menggiurkan kepada para pemainnya. Mulai dari bonus selamat datang hingga bonus setoran dan putaran gratis, pemain dapat menikmati berbagai penawaran yang meningkatkan peluang mereka untuk meraih kemenangan besar. Program loyalitas yang murah hati juga memberi kesempatan kepada pemain untuk mendapatkan hadiah eksklusif dan manfaat tambahan. 4. Layanan Pelanggan yang Profesional dan Responsif Tim dukungan pelanggan Ligadewa138 terdiri dari para profesional yang ramah dan berpengetahuan luas. Mereka siap membantu pemain dengan segala pertanyaan atau masalah yang mereka hadapi, baik melalui obrolan langsung, email, atau telepon. Dengan layanan pelanggan yang tersedia 24/7, pemain dapat merasa tenang karena bantuan selalu tersedia jika diperlukan. 5. Pengalaman Bermain yang Aman dan Adil Ligadewa138 mengutamakan keamanan dan keadilan dalam setiap aspek permainan. Situs ini dilengkapi dengan teknologi enkripsi tingkat tinggi untuk melindungi informasi pribadi dan keuangan pemain. Selain itu, semua permainan dijamin adil dan tidak dimanipulasi, sehingga pemain dapat bermain dengan keyakinan penuh bahwa mereka memiliki peluang yang sama untuk meraih kemenangan. Dengan kombinasi koleksi permainan yang luar biasa, kemudahan transaksi menggunakan bank BNI, bonus yang menggiurkan, layanan pelanggan yang profesional, dan pengalaman bermain yang aman dan adil, tidak heran jika Ligadewa138 dianggap sebagai situs slot BNI gacor maxwin terus.
    • Dikenal dengan jenis permainan yang populer adalah slot 0nline. Dalam dunia slot online, terdapat beberapa server yang dikenal memiliki tingkat kemenangan yang tinggi, salah satunya adalah server Kamboja. Di server ini, terdapat seorang pemain yang dikenal dengan sebutan "Abang Gac0r", yang memiliki reputasi sebagai pemain yang sering menang besar. >> DAFTAR SEKARANG DISINI << Slot Server THAILAND - Abang Gacor dikenal sebagai pemain slot online yang sangat berpengalaman dan memiliki keberuntungan yang luar biasa. Dia sering kali berhasil memenangkan jackpot dan hadiah besar dalam permainan slot online. Banyak pemain lain yang mengagumi kemampuannya dalam bermain slot online di server THAILAND ini. Slot Gac0r Resmi - Selain itu, Abang Gacor juga sering memanfaatkan promo dan bonus yang ditawarkan oleh situs slot online. Dengan memanfaatkan promo dan bonus ini, dia dapat meningkatkan peluangnya untuk menang tanpa harus mengeluarkan banyak modal. Bocoran Pola Bettlng Olympuss Sebagai hidangan penutup yang manis untuk bahasan tentang teknik bermain ini, akan memberikan bocoran OLYMPUSS. Daftar bocoran pola ini berasal dari rekomendasi yang batten sering beredar di komunitas pecinta kami. Pola gacornya adalah sebagai berikut: Turbo ❌ – Auto Circuit 20 Turbo ❌ – Auto Circuit 30 Turbo ❌ – Auto Circuit 10 Turbo ✅ – Auto Circuit 50 Turbo ✅ – Auto Circuit 20 Turbo ✅ – Auto Circuit 20 BUY SPIN SESUAIKAN BET Bet: 400 – 2000 Bet: 4000 - 8000 Game Gac0r Olympuss Means diketahui punya jam panas tergacor antara pukul 06:10 pagi hingga pukul 10:15 pagi. Disclaimer, bahwa pola dan jam gacor yang kami bagikan tidak menjamin 100% kemenangan terbaik. Namun layak untuk dicoba karena pola tersebut berasal dari riwayat taruhan yang telah menghasilkan maxwin besar.
    • Jadikan Sakura38 Sebagai Tempat Anda Meraih Kemenangan Besar! Dengan Daftar Link Slot Minimal Deposit 1000 Dijamin Menang Bergabunglah Sekarang Dan Rasakan Pengalaman Berjudi Yang Mengasyikkan Serta Peluang Menang Yang Tinggi  
    • Hello, for educational purpose I am trying to port a mod from 1.20.1 to 1.20.2+ but I can't understand how the new networking system works. I manage to get through it for the most part, but I'm stuck on how to register packets. The previous method was: INSTANCE.registerMessage(id++, CPExecuteSkill.class, CPExecuteSkill::toBytes, CPExecuteSkill::fromBytes, CPExecuteSkill::handle); with instance being of type SimpleChannel.  (The forge document is not up to date for this part unfortunatly) Any help or clear documentation would be welcome.
    • A code: public class CommonProxy {     public void registerItemRenderer() {         Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(                 ModItems.YOUR_ITEM,                 0,                 new ModelResourceLocation(ModItems.YOUR_ITEM.getRegistryName(), "inventory")         );         Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(                 ModItems.YOUR_ITEM,                 0,                 new ModelResourceLocation(ModItems.YOUR_ITEM.getRegistryName(), "inventory"),                 new CustomItemRenderer(Minecraft.getMinecraft().getTextureManager(), Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager(), Minecraft.getMinecraft().getItemColors())         );     } }   In YOUR_ITEM you must specify item. If not working try this: public class ModInit {     @Mod.EventHandler     public void init(FMLInitializationEvent event) {         CommonProxy commonProxy = new CommonProxy();         commonProxy.registerItemRenderer();     } }
  • Topics

×
×
  • Create New...

Important Information

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