Jump to content

[Forge 1.10.2] Create a pickaxe that break unbreakable blocks?


Recommended Posts

Posted
  On 2/21/2017 at 3:20 PM, TheMasterGabriel said:

You can read about Events here on the Forge docs.

Expand  

I already know that. And I am doing an pickaxe that mine 10x10 blocks. Base on the TerraPick in Botania. But I am asking how to do that (in the event). My unfinished code:

 

  Reveal hidden contents

 

Posted (edited)
  On 2/22/2017 at 3:11 PM, diesieben07 said:
  • Don't subscribe to the raw PlayerInteractEvent. Choose one of the sub-events.
  • Why are you calling applyPlayerInteraction like that? It makes no sense, you are telling the player to interact with itself. O.o
  • getForward is annotated with @SideOnly(CLIENT), which means you cannot use it in common code like this. You can learn more about sides in the documentation.
  • Why are you creating a new Random instance every time?
  • Block::getBlockHardness is deprecated, you should use IBlockState::getBlockHardness instead.
  • hardness <= -1 is not the condition for unbreakable. A block is unbreakable if it's hardness is below 0.
  • In 1.10.2 ItemStacks can still be null hence you cannot simply call getItem on the result of EntityPlayer::getHeldItem, since it might be null.
  • Block::getMaterial is deprecated, use IBlockState::getMaterial instead.
  • Why are you doing a ray-trace? You know which block was hit and you can also obtain the hit vector needed to create the RayTraceResult from the event.
  • You should not be calling quantityDropped, it is not accurate for all blocks. The only way to truly obtain a block's drops is to call Block::getDrops.
  • You should almost never call Block::getMetaFromState, especially not to construct an ItemStack.
  • Use Block.getStateId instead of manually constructing the ID from metadata.
Expand  

Still doesn't work. Here is my newest code:

 

  Reveal hidden contents

 

Edited by lethinh
Posted

Can you use the code tag please? (<>)that thing. Currently I cant even tell what you are doing

Apparently I'm addicted to these forums and can't help but read all the posts. So if I somehow help you, please click the "Like This" button, it helps.

Posted
  On 2/23/2017 at 8:46 AM, CrazyGriefer1337 said:

Just try the following:

-Test if the block is unbreakable (Bedrock, or something modded)

-If yes, execute the command "fill" (Minecraft command, not Java)

-If it doesn't work, throw your PC out of the window.

Expand  

This is coding not normal MC!

  • 4 weeks later...
Posted
  On 2/27/2017 at 8:27 AM, diesieben07 said:
  • I am still not clear as to why you are calling onBlockStartBreak. If anything you need to completely emulate the block-breaking process as it normally occurs in PlayerInteractionManager.
  • You are still ray-tracing without the need to do that.
  • Block::getDrops will never return null.
  • You are still calling Block::getMetaFromState.
Expand  

Still doesn't work!

  • 2 weeks later...
Posted

On your newest code....

  • You are comparing ItemStack instances using == which will never work.
  • Except that what you are comparing is the return of block.getItem(world, pos, state)  with the return of block.getItem(world, pos, state) (i.e.. itself) which will always be true.
  On 2/27/2017 at 8:27 AM, diesieben07 said:
  • You are still calling Block::getMetaFromState.
Expand  

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.

Posted
  On 4/4/2017 at 3:50 PM, Draco18s said:

On your newest code....

  • You are comparing ItemStack instances using == which will never work.
  • Except that what you are comparing is the return of block.getItem(world, pos, state)  with the return of block.getItem(world, pos, state) (i.e.. itself) which will always be true.
Expand  

 

Do you know how to fix those errors? I have tried all!

Posted (edited)
  On 4/6/2017 at 1:01 PM, diesieben07 said:

You should not construct the dropped item stacks manually. Use Block::getDrops to obtain the drops, like I already said in my first post.

Expand  

I can't. Block::getDrops is List<ItemStack> but the drop is a item stack.

Edited by lethinh
Posted
  On 4/6/2017 at 1:57 PM, diesieben07 said:

What is "the drop"?

 

What? O.o

Expand  

It is:

 

@SubscribeEvent
    public void onPlayerDig(PlayerInteractEvent.LeftClickBlock event) {
        World world = event.getWorld();
        EntityPlayer player = event.getEntityPlayer();

        if (event.getFace() == null || world.isRemote || StackUtils.isEmpty(player.getHeldItem(EnumHand.MAIN_HAND)) || player.isCreative())
            return;


        BlockPos pos = event.getPos();
        IBlockState state = world.getBlockState(pos);
        Block block = state.getBlock();
        List<ItemStack> drop = new ArrayList<>();
        if (block.getDrops(world, pos, state, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, new ItemStack(this))) == drop) {
            if (drop == null)
                drop = new ArrayList<>(block.getDrops(world, pos, state, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, new ItemStack(this))));
            InventoryHelper.spawnItemStack(world, (double) pos.getX(), (double) pos.getY(), (double) pos.getZ(), drop);
        } else
            block.harvestBlock(world, player, pos, state, world.getTileEntity(pos), drop);

        world.setBlockToAir(pos);
        world.playEvent(2001, pos, Block.getStateId(state));
    }

 

Posted

 

  Quote

if (block.getDrops(world, pos, state, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, new ItemStack(this))) == drop 

Expand  
  • Now you are comparing a List<ItemStack> to an ItemStack, so the result will always be false. Why are you making this comparison anyway? What result are you actually trying to get?
  • You still keep using ==, which only checks for the exact same object, rather than for meaningfully equivalent objects. Two different ItemStacks made of the same Item and stacksize will not be equal with the == operator.
  Quote

List<ItemStack> drop = new ArrayList<>()

...

if (drop == null)

Expand  
  • How could drop possibly be null here after you have set it to a new ArrayList? (Hint: it couldn't).

You seem to be having trouble with some fairly fundamental Java/OOP concepts, you might be better off learning some general programming first.

 

Posted
  On 4/6/2017 at 2:10 PM, Jay Avery said:

 

  • Now you are comparing a List<ItemStack> to an ItemStack, so the result will always be false. Why are you making this comparison anyway? What result are you actually trying to get?
  • You still keep using ==, which only checks for the exact same object, rather than for meaningfully equivalent objects. Two different ItemStacks made of the same Item and stacksize will not be equal with the == operator.
  • How could drop possibly be null here after you have set it to a new ArrayList? (Hint: it couldn't).

You seem to be having trouble with some fairly fundamental Java/OOP concepts, you might be better off learning some general programming first.

 

Expand  

I have just learned java for few months. And the code didn't work:

 

@SubscribeEvent
public void onPlayerDig(PlayerInteractEvent.LeftClickBlock event) {
    World world = event.getWorld();
    EntityPlayer player = event.getEntityPlayer();

    if (event.getFace() == null || world.isRemote || StackUtils.isEmpty(player.getHeldItem(EnumHand.MAIN_HAND)) || player.isCreative())
        return;

    BlockPos pos = event.getPos();
    IBlockState state = world.getBlockState(pos);
    Block block = state.getBlock();
    List<ItemStack> drop = new ArrayList<>();

    if (drop == null)
        drop = new ArrayList<>(block.getDrops(world, pos, state, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, new ItemStack(this))));

    block.harvestBlock(world, player, pos, state, world.getTileEntity(pos), new ItemStack(block));
    InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(block));

    world.setBlockToAir(pos);
    world.playEvent(2001, pos, Block.getStateId(state));
}
Posted
  On 4/7/2017 at 10:06 AM, lethinh said:

 

    List<ItemStack> drop = new ArrayList<>();

    if (drop == null)
Expand  

You're still doing this pointless check. And now you do nothing with the drop variable after you create it anyway.

 

When you say the code doesn't work, please be more specific. Exactly what does and doesn't happen, and what are you expecting to happen? At this point I've lost track of the problem.

Posted
  On 4/7/2017 at 10:57 AM, Jay Avery said:

You're still doing this pointless check. And now you do nothing with the drop variable after you create it anyway.

 

When you say the code doesn't work, please be more specific. Exactly what does and doesn't happen, and what are you expecting to happen? At this point I've lost track of the problem.

Expand  

 

It doesn't break unbreakable block. That's the point of the code.

Posted
 List<ItemStack> drop = new ArrayList<>();

Cool, I have an array object

if (drop == null)

Nope, it's not null. It's an ArrayList of size zero.

block.harvestBlock(world, player, pos, state, world.getTileEntity(pos), new ItemStack(block));
InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(block));

And now, I ignore the fuck out of my array object.

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.

Posted
  On 4/7/2017 at 2:03 PM, Jay Avery said:

Does it break ordinary breakable blocks? Does the game crash? Does the event get called?

Expand  

It breaks ordinary breakable blocks. The game doesn't crash. And I have called the event by using MinecraftForge.EventBus::register

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • abro el juego pero al tocar un solo jugador me tira la de   [02:23:30] [Render thread/FATAL] [ne.mi.co.ForgeMod/]: Preparing crash report with UUID c3ff08d5-d285-458d-a3b5-fbba17743dff #@!@# Game crashed! Crash report saved to: #@!@# C:\juegos\Minecraft\instances\1.20.1 forge\.minecraft\crash-reports\crash-2025-05-02_02.23.30-client.txt Process exited with code -1 (0xffffffffffffffff). ¡Por favor, ten en cuenta que normalmente ni el código de salida ni su descripción son suficientes para diagnosticar problemas! Sube siempre el registro entero y no solo el código de salida.
    • So, First of I am new to modding so bare with me I am creating a 1.20.1 forge mod that needs Oculus/Embeddium as a dependancy because later on I need to add custom shaders in for lights and such. I am using ParchmentMC as I've heard its better because of namings of things but that doesn't seem to like it when I run it alongside Oculus (Its a very barebones script adding two blocks and an item, and tested it before I did this) The 4 errors I get when I run 'runClient' is Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered Caused by: org.spongepowered.asm.mixin.throwables.MixinApplyError: Mixin [mixins.oculus.json:texture.MixinAbstractTexture] from phase [DEFAULT] in config [mixins.oculus.json] FAILED during APPLY Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @Inject annotation on iris$afterGenerateId could not find any targets matching 'Lnet/minecraft/client/renderer/texture/AbstractTexture;m_117963_()I' in net.minecraft.client.renderer.texture.AbstractTexture. Using refmap oculus-mixins-refmap.json [PREINJECT Applicator Phase -> mixins.oculus.json:texture.MixinAbstractTexture -> Prepare Injections ->  -> handler$zgm000$iris$afterGenerateId(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V -> Parse] And then a "Execution failed for task ':runClient'." error My dependancies are just these with latest forge for 1.20.1 implementation fg.deobf('curse.maven:oculus-581495:6020952') // Oculus for 1.20.1 - 1.8.0  implementation fg.deobf('curse.maven:embeddium-908741:5681725') // Embeddium for 1.20.1 - 0.3.31 I have tested these mods & forge in a different modpack alone and it works fine Any help is much appreciated!
    • Im trying to make a server for me and my friends. I have no mods on it, (yet) but i keep getting this on the terminal right before it closes out. it insist even open long enogth m=for me to log on .this is my most resent crash report thanks in advance.   ---- Minecraft Crash Report ---- // I blame Dinnerbone. Time: 2025-05-01 18:17:25 Description: Exception in server tick loop java.lang.IllegalStateException: Failed to initialize server     at TRANSFORMER/minecraft@1.21.5/net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:676) ~[server-1.21.5-20250325.162830-srg.jar%23141!/:?] {re:classloading,pl:accesstransformer:B}     at TRANSFORMER/minecraft@1.21.5/net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:276) ~[server-1.21.5-20250325.162830-srg.jar%23141!/:?] {re:classloading,pl:accesstransformer:B}     at java.base/java.lang.Thread.run(Thread.java:1583) [?:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details:     Minecraft Version: 1.21.5     Minecraft Version ID: 1.21.5     Operating System: Linux (amd64) version 6.11.0-19-generic     Java Version: 21.0.6, Ubuntu     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Ubuntu     Memory: 99161192 bytes (94 MiB) / 233832448 bytes (223 MiB) up to 1004535808 bytes (958 MiB)     CPUs: 2     Processor Vendor: GenuineIntel     Processor Name: Intel(R) Pentium(R) CPU B950 @ 2.10GHz     Identifier: Intel64 Family 6 Model 42 Stepping 7     Microarchitecture: Sandy Bridge (Client)     Frequency (GHz): 2.10     Number of physical packages: 1     Number of physical CPUs: 2     Number of logical CPUs: 2     Graphics card #0 name: 2nd Generation Core Processor Family Integrated Graphics Controller     Graphics card #0 vendor: Intel Corporation (0x8086)     Graphics card #0 VRAM (MiB): 256.00     Graphics card #0 deviceId: 0x0106     Graphics card #0 versionInfo: unknown     Virtual memory max (MiB): 5743.06     Virtual memory used (MiB): 3361.15     Swap memory total (MiB): 3828.00     Swap memory used (MiB): 811.72     Space in storage for jna.tmpdir (MiB): <path not set>     Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): <path not set>     Space in storage for io.netty.native.workdir (MiB): <path not set>     Space in storage for java.io.tmpdir (MiB): available: 421206.25, total: 467297.75     Space in storage for workdir (MiB): available: 421206.25, total: 467297.75     JVM Flags: 0 total;     Server Running: true     Active Data Packs: vanilla, mod_data, mod/neoforge     Available Data Packs: minecart_improvements, redstone_experiments, trade_rebalance, vanilla, mod/neoforge, mod_data     Enabled Feature Flags: minecraft:vanilla     World Generation: Stable     World Seed: -7131934175611965967     Suppressed Exceptions: ~~NONE~~     Is Modded: Definitely; Server brand changed to 'neoforge'     Type: Dedicated Server (map_server.txt)     ModLauncher: 11.0.4+main.d2e20e43     ModLauncher launch target: neoforgeserver     ModLauncher services:         sponge-mixin-0.15.2+mixin.0.8.7.jar mixin PLUGINSERVICE         loader-7.0.10.jar slf4jfixer PLUGINSERVICE         loader-7.0.10.jar runtime_enum_extender PLUGINSERVICE         at-modlauncher-11.0.2.jar accesstransformer PLUGINSERVICE         loader-7.0.10.jar runtimedistcleaner PLUGINSERVICE         modlauncher-11.0.4.jar mixin TRANSFORMATIONSERVICE         modlauncher-11.0.4.jar fml TRANSFORMATIONSERVICE     FML Language Providers:         javafml@7.0         minecraft@7.0     Mod List:         server-1.21.5-20250325.162830-srg.jar             |Minecraft                     |minecraft                     |1.21.5              |Manifest: NOSIGNATURE         neoforge-21.5.63-beta-universal.jar               |NeoForge                      |neoforge                      |21.5.63-beta        |Manifest: NOSIGNATURE     Crash Report UUID: 99fdd6a6-3898-4cfe-ab2c-80b1ace92081     FML: 7.0.10     NeoForge: 21.5.63-beta
    • My minecraft version is 1.20.1, I haven't had too many issues other than a mod not working sometimes, in which case I usually just delete and sift through the preexisting mods to try to find the issue, but I hit a big wall of not knowing what my issue is now. I just want to make a modpack for me and my partner!!! Here's the latest log url, https://pastebin.com/9LjctgYN 
    • i was having same problem, thanks 
  • Topics

×
×
  • Create New...

Important Information

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