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.


  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • So I tried to search the issue but came up with nothing, the most I could get was some people having a mod location between the colon and the word "failed" but I seem to have nothing there. I am also making a modpack of my own, and tips are appreciated!
    • Heres a updated version of my github https://github.com/THEKINGSKULL01/TSOTD0.0.30Forge1.20.1
    • When i go to the forge website to download any of the choices of versions I am unable to download anything. It just says that I am unable to reach this website for some reason.
    • hi everyone how can i make this script smoother or make them delay    @SubscribeEvent(       priority = EventPriority.HIGH    )    public void renderCrosshair(RenderGameOverlayEvent event) {       if(mc.gameSettings.guiScale == 2) {       Minecraft minecraft = Minecraft.getMinecraft();       if(event.type == ElementType.CROSSHAIRS && isGunInHand(minecraft.thePlayer)) {          event.setCanceled(true);          Icon crosshairIcon = ClientProxy.iconRegistry.crosshairIcon;          double scale = 6.0F + getScaleByMotion(minecraft.thePlayer);          if(FlansModClient.currentScope == null)          scale = 45.0F + getScaleByMotion(minecraft.thePlayer);                    GL11.glPushAttrib(16384);          GL11.glPushMatrix();          GL11.glEnable(3042);          OpenGlHelper.glBlendFunc(775, 769, 1, 0);          GL11.glEnable(3008);          GL11.glColor3d(1.0D, 1.0D, 1.0D);          GL11.glTranslated((double)(event.resolution.getScaledWidth() / 2), (double)(event.resolution.getScaledHeight() / 2), 0.0D);          GL11.glPushMatrix();          ClientProxy.iconRegistry.bindSheet();          GL11.glRotated(90.0D, 0.0D, 0.0D, 2.0D);          ClientProxy.iconRegistry.renderIcon(crosshairIcon, -1.9D, (double)(-scale) + 0.1D);          GL11.glRotated(90.0D, 0.0D, 0.0D, 1.0D);          ClientProxy.iconRegistry.renderIcon(crosshairIcon, -3.0D, (double)(-scale) - 0.1D);          GL11.glRotated(90.0D, 0.0D, 0.0D, 1.0D);          ClientProxy.iconRegistry.renderIcon(crosshairIcon, -3.0D, (double)(-scale) + 0.9D);                    if(FlansModClient.currentScope == null)                        {          GL11.glRotated(90.0D, 0.0D, 0.0D, 1.0D);          ClientProxy.iconRegistry.renderIcon(crosshairIcon, -2.1D, (double)(-scale) + 0.9D);          }                    else if (scale >= 6.5F)          {          GL11.glRotated(90.0D, 0.0D, 0.0D, 1.0D);          ClientProxy.iconRegistry.renderIcon(crosshairIcon, -2.1D, (double)(-scale) + 0.9D);          }                    GL11.glPopMatrix();          GL11.glPopMatrix();          GL11.glPopAttrib();          minecraft.getTextureManager().bindTexture(Gui.icons);       }       }    }
    • Hello, I'm working on my first Minecraft 1.20.2 mod. However, I've created a custom block model and everything works perfectly except the rotation of the block. The code is implemented but it still doesnt work. Need help. This is the code of the object class. import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.Mirror; public class DirtyRock extends HorizontalDirectionalBlock { public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 2, 11); public DirtyRock(Properties pProperties) { super(pProperties); } @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { return SHAPE; } @Override public BlockState getStateForPlacement(BlockPlaceContext pContext) { return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()); } @Override public BlockState rotate(BlockState pState, Rotation pRot) { return pState.setValue(FACING, pRot.rotate(pState.getValue(FACING))); } @Override public BlockState mirror(BlockState pState, Mirror pMirror) { return pState.rotate(pMirror.getRotation(pState.getValue(FACING))); } @Override protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) { pBuilder.add(FACING); } } In the ModBlocks class the block is registred like this public static final RegistryObject<Block> DIRTY_ROCK=registerBlock("dirty_rock", ()-> new DirtyRock(BlockBehaviour.Properties.copy(Blocks.STONE_BUTTON))); private static <T extends Block>RegistryObject<T> registerBlock(String name, Supplier<T> block){ RegistryObject<T> toReturn=BLOCKS.register(name,block); registerBlockItem(name,toReturn); return toReturn; } In the Data, ModBlockStateProvider the blockstate is implemened simpleBlock(ModBlocks.DIRTY_ROCK.get(), new ModelFile.UncheckedModelFile(modLoc("block/dirty_rock"))); And in resources/assets/modname/models/block dirty_rock.json is implemented { "credit": "Made with Blockbench", "textures": { "0": "wildandhunt:block/dirty_bricks_block", "particle": "wildandhunt:block/dirty_bricks_block" }, "elements": [ { "from": [5, 0, 4], "to": [9, 1, 8], "rotation": {"angle": 22.5, "axis": "y", "origin": [10, 0, 7]}, "faces": { "north": {"uv": [5, 4, 10, 5], "texture": "#0"}, "east": {"uv": [5, 5, 10, 6], "texture": "#0"}, "south": {"uv": [5, 6, 10, 7], "texture": "#0"}, "west": {"uv": [5, 7, 10, 8], "texture": "#0"}, "up": {"uv": [5, 5, 0, 0], "texture": "#0"}, "down": {"uv": [5, 5, 0, 10], "texture": "#0"} } }, { "from": [9, 0, 4.05], "to": [11, 2, 6.05], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 9]}, "faces": { "north": {"uv": [5, 4, 10, 5], "texture": "#0"}, "east": {"uv": [5, 5, 10, 6], "texture": "#0"}, "south": {"uv": [5, 6, 10, 7], "texture": "#0"}, "west": {"uv": [5, 7, 10, 8], "texture": "#0"}, "up": {"uv": [5, 5, 0, 0], "texture": "#0"}, "down": {"uv": [5, 5, 0, 10], "texture": "#0"} } }, { "from": [5, 0, 7], "to": [6, 1, 8], "rotation": {"angle": 22.5, "axis": "y", "origin": [10, 0, 10]}, "faces": { "north": {"uv": [5, 4, 10, 5], "texture": "#0"}, "east": {"uv": [5, 5, 10, 6], "texture": "#0"}, "south": {"uv": [5, 6, 10, 7], "texture": "#0"}, "west": {"uv": [5, 7, 10, 8], "texture": "#0"}, "up": {"uv": [5, 5, 0, 0], "texture": "#0"}, "down": {"uv": [5, 5, 0, 10], "texture": "#0"} } }, { "from": [10, 0, 8], "to": [12, 1, 9], "rotation": {"angle": 22.5, "axis": "y", "origin": [15, 0, 11]}, "faces": { "north": {"uv": [5, 4, 10, 5], "texture": "#0"}, "east": {"uv": [5, 5, 10, 6], "texture": "#0"}, "south": {"uv": [5, 6, 10, 7], "texture": "#0"}, "west": {"uv": [5, 7, 10, 8], "texture": "#0"}, "up": {"uv": [5, 5, 0, 0], "texture": "#0"}, "down": {"uv": [5, 5, 0, 10], "texture": "#0"} } }, { "from": [9.4, 0, 5], "to": [12.4, 1, 8.5], "rotation": {"angle": 22.5, "axis": "y", "origin": [12, 0, 7]}, "faces": { "north": {"uv": [8, 0, 11, 1], "texture": "#0"}, "east": {"uv": [8, 2, 10, 3], "texture": "#0"}, "south": {"uv": [8, 1, 11, 2], "texture": "#0"}, "west": {"uv": [8, 3, 10, 4], "texture": "#0"}, "up": {"uv": [8, 2, 5, 0], "texture": "#0"}, "down": {"uv": [8, 2, 5, 4], "texture": "#0"} } }, { "from": [6, 1, 6], "to": [10, 1.75, 10], "rotation": {"angle": 22.5, "axis": "y", "origin": [9, 0, 7]}, "faces": { "north": {"uv": [8, 0, 11, 1], "texture": "#0"}, "east": {"uv": [8, 2, 10, 3], "texture": "#0"}, "south": {"uv": [8, 1, 11, 2], "texture": "#0"}, "west": {"uv": [8, 3, 10, 4], "texture": "#0"}, "up": {"uv": [8, 2, 5, 0], "texture": "#0"}, "down": {"uv": [8, 2, 5, 4], "texture": "#0"} } } ], "display": { "thirdperson_righthand": { "translation": [0, 7.75, 0] }, "thirdperson_lefthand": { "translation": [0, 7.75, 0] }, "firstperson_righthand": { "translation": [0, 8.25, 0] }, "firstperson_lefthand": { "translation": [0, 8.25, 0] }, "ground": { "translation": [0, 4, 0] }, "gui": { "rotation": [32, 32, 9], "translation": [-1.25, 6.25, 0], "scale": [1.31, 1.31, 1.31] }, "fixed": { "translation": [0, 6.75, 0] } }, "groups": [ { "name": "dirty_stone", "origin": [8, 0, 7], "color": 0, "children": [0, 1, 2, 3, 4, 5] } ] }  
  • Topics

×
×
  • Create New...

Important Information

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