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

How to override normal block-drop procedure?


nullbear
 Share

Recommended Posts

In the past, i'm used to working with 1.6 and 1.7, using mcp standalone, without forge. I have some basic understanding of how forge works, and most of my issues so far have been with the lack of documentation regarding forge classes and events and stuff not being up-to-date in the slightest. (most documentation seems to have been last updated several years ago.)

 

What i want to do:

 

Make blocks drop multiple different (non-block) items based on the tools they were harvested with.

 

(ex. toolA drops 4 of object A, toolB drops 4 of object B.)

 

There are like seventeen 'onharvest' 'onharvestbyplayer' 'onblockbreak' 'onblockharvest' and similar methods that all appear synonymous with eachother. In the past, i've been able to just go to minecraft.block or whatever and read the code, in order to understand what the methods are each used for. But this seems to have been made impossible with forge.

Link to comment
Share on other sites

There's nothing stopping you from reading the Minecraft and Forge code in your IDE if you've set up your workspace correctly. This page explains how to do that.

 

In most cases, you can override

Block#getDrops

(or the vanilla methods called by it) to control the drops of a block; but this doesn't give you access to the player who broke the block or the tool they used to break it.

 

The best way to have drops vary based on the tool used to break the block is probably to subscribe to

BlockEvent.HarvestDropsEvent

, check the block is yours, check which tool the player is holding and add the appropriate drops to the event's drop list.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

There's also

public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest)

or

public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, @Nullable ItemStack stack)

?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I tried to debug some of the points in the code where I need the client to get the NBT data from the server, and I figured out that none of them are working. For example, I tried to print out a line in the console with the StartTracking method: @SubscribeEvent public void onPlayerTracking(PlayerEvent.StartTracking event) { if(event.getTarget() instanceof PlayerEntity) { PlayerEntity player = (PlayerEntity)event.getTarget(); ServerPlayerEntity target = (ServerPlayerEntity)event.getPlayer(); if(!player.getCommandSenderWorld().isClientSide()) { player.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { CompoundNBT nbt = new CompoundNBT(); Capability<ITitanShifters> cap = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY; Capability.IStorage<ITitanShifters> storage = cap.getStorage(); nbt.put(cap.getName(), storage.writeNBT(cap, capability, TitanShiftersMod.direction)); ClientMessage message = new ClientMessage(nbt); TitanShiftersNetwork.CLIENTCHANNEL.send(PacketDistributor.PLAYER.with(() -> target), message); System.out.println("Tracking working!"); }); } } } Which didn't work. I even got rid of the line where it checks if the player is in the server side, and that didn't work either. Maybe the player doesn't have the capability? The capability system has been working fine for me so far, however.
    • It requires 6G for minimum and recommends 7-8G
    • Sorry for the delay. -Xmx16G -Xms12G -Dminecraft.applet.TargetDirectory="C:\Users\jorge_vk76vma\curseforge\minecraft\Instances\Mineshafts & Monsters" -Dfml.ignorePatchDiscrepancies=true -Dfml.ignoreInvalidMinecraftCertificates=true -Duser.language=en -Duser.country=US
    • Okay thank you a lot for your help ! So either I create a BlockEntity and set it in a sphere shape using the BER or I use the RenderLevelLastEvent to draw something ? I don't really understand how the RenderLevelLastEvent For you wich option is the best ?
    • Hey i was just installing forge 1.8.9 latest and it wont install, it is saying that certain libraries have failed to download, i am 100% sure that I have no firewalls enabled, i have gone into my routers settings, everything is fine, i have even tethered to my mobile data and i get the same message. ( not gonna embed images as the formatting just dies and takes up half the screen and moves text lol ) https://i.imgur.com/8ZfSfzT.png error message, and progress bar, after dismissing the message the installer just hangs there... taking a quick look into the log its saying that files arent found in the installer archive, there are a bunch of ssl cert errors???    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target File not found in installer archive: /maven/org/scala-lang/scala-swing_2.11/1.0.1/scala-swing_2.11-1.0.1.jar pastebin to full log  https://pastebin.com/PTX1ah8c ( edit: i just read the rules and you cant ask about older versions or you risk getting warned, this issue is persistent on 1.19 too, after i tried installing it. The error message is the same as what appears in the log file )
  • Topics

×
×
  • Create New...

Important Information

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