Mr.sKrabs Posted July 28, 2015 Posted July 28, 2015 I've been going around attemping to make wood unbreakable by hand unless you have some sort of the basics axe including wood. Its around 10 hours on the subject and my brain is exploading,I've hoped some of you guys can help me figure out how to do it. and guide me Quote
Failender Posted July 28, 2015 Posted July 28, 2015 use break speed and harvestdrops event. in break speed divide the speed by a specific amount ( i think vanilla is using 5..?) in harvest drops clear the list if the block is wood and the equipped item isnt an axe Quote
Mr.sKrabs Posted July 28, 2015 Author Posted July 28, 2015 In the vanilla class? i do not want to overwrite plus it protected,and i do not know what the heck to write what class to create i am new to modding and simply telling me what to do makes me understand but wont let me in anyway make me know what to do writing-wise,creating-wise Quote
Failender Posted July 28, 2015 Posted July 28, 2015 no not in the vanilla class. use the events i told you http://www.minecraftforum.net/forums/mapping-and-modding/mapping-and-modding-tutorials/1571567-forge-1-6-4-1-8-eventhandler-and Quote
Mr.sKrabs Posted July 28, 2015 Author Posted July 28, 2015 Okay in my case I need the most used Event handler? MinecraftForge.EVENT_BUS? Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 Okay in my case I need the most used Event handler? MinecraftForge.EVENT_BUS? To determine which bus an event is fired on, look at its doc comment or use your IDE's Find Usages/Call Hierarchy feature. In this case, all the events you need are fired on MinecraftForge.EVENT_BUS. Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 Okay,I successfuly did the Event Handler thing, now i need to write the line of code that makes the wood not give items. Now I have a question i need the exact same handler Forge for another thing,I want to make so it drops twigs from leaves and so i need to use an event I've tried this but I only got error in the if event.block https://gist.github.com/anonymous/2fb367a5f8f97cfbbf50 My question is do i need to make multiple event handlers?. Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 You can either subscribe to the event multiple times or subscribe to it once and check for each condition. BlockEvent and the events that extend from it don't have a block field in 1.8, they have a state field (of type IBlockState) instead. Use IBlockState#getBlock to get the Block. Your IDE should bring up a list of fields and methods when you type a dot after a variable. You should also be able to view the source of any Minecraft/Forge class in your IDE to see which fields and methods it has. Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 package com.drunksmanknife.harshnature; import com.drunksmanknife.harshnature.init.HarshNatureItems; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class HNEventHandler { @SubscribeEvent public void onBlockDropItems(BlockEvent.HarvestDropsEvent event) { if (event.state == Blocks.leaves) { ItemStack stack = new ItemStack(HarshNatureItems.Twigs, 2); event.drops.add(stack); } } } crashes my minecraft when i try to load it https://gist.github.com/anonymous/983603b5a7a0ecb5d4a0 Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 event.state is an IBlockState object. It will never be equal to a Block object like Blocks.leaves. Use the method I described in my previous post to get the Block from the IBlockState. java.lang.NullPointerException: Initializing game at com.drunksmanknife.harshnature.init.HarshNatureItems.register(HarshNatureItems.java:46) at com.drunksmanknife.harshnature.HarshNature.preInit(HarshNature.java:43) Your crash has nothing to do with this class, the exception is being thrown on line 46 of HarshNatureItems. Post that class on Gist and link it here. Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 Update: Main file: https://gist.github.com/anonymous/f63dd1916f1a3c1f4274 HNEventHandler: https://gist.github.com/anonymous/dd55a611845a1298bbcd Crash Report: https://gist.github.com/anonymous/850216c9641636c6769d Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 You didn't post the class where the crash is happening (HarshNatureItems). For future reference, you can add multiple files to a single Gist and give each file the proper extension to enable syntax highlighting. Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 https://gist.github.com/anonymous/aece7960622d4d8ee76c Quote
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 Oh i didn't remember i mistakely removed it Still i do not receive the twigs from the leaves Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 Are you still comparing event.state directly to a Block , or have you fixed that? If you've fixed it, post the latest HNEvents code on Gist with syntax highlighting (give the file the .java extension). Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 https://gist.github.com/anonymous/d59c420d827ee09bfca0 Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 That should work for Oak, Spruce, Birch and Jungle leaves ( Blocks.leaves ); but it won't work for Acacia, Dark Oak ( Blocks.leaves2 ) or any modded leaves. You should use Block#isLeaves to determine if the Block is a leaves block. Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 Thank you so much!!! Now i'm kinda new but I want to make as i said wood unpunchable I sort of understood i need to do it with events,can you guide me step by step what to do? its my first time changing vanilla block. Quote
Choonster Posted July 29, 2015 Posted July 29, 2015 I have a working solution here. The BreakSpeed handler should prevent a log from being broken by a player without the correct tool (the block will never actually start to break, like bedrock), but if that somehow fails the BreakEvent handler will revert the block to its original state when broken. If you only cancel BreakEvent , the player will appear to be able to break the block and the block breaking particles will be spawned; but the block will revert to its original state immediately after it's broken. I haven't tested this in every possible situation, so I can't guarantee that it will always work. Quote 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.
Mr.sKrabs Posted July 29, 2015 Author Posted July 29, 2015 I love you so much!!! You've helped me alot Works!. I made another event for this class in my main class and it worked! Please lock this topic and i hope if anyone is wandering how to do it here is the solution Quote
Recommended Posts
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.