Jump to content

Make player break blocks programmically


satyamedh
 Share

Recommended Posts

Well, that's the last step of breaking a block. Before that comes showing the breaking damage, etc. I pointed you to the entrypoint of the whole process ("the player just pressed the left mouse button this tick - do something with that information"). You need to trace the code path from there (and across the network packets being sent) and figure out which methods are being called.

It's not as simple as just "call method X".

Link to comment
Share on other sites

Okay

Just now, diesieben07 said:

Well, that's the last step of breaking a block. Before that comes showing the breaking damage, etc. I pointed you to the entrypoint of the whole process ("the player just pressed the left mouse button this tick - do something with that information"). You need to trace the code path from there (and across the network packets being sent) and figure out which methods are being called.

It's not as simple as just "call method X".

I'm like a real newbie to the blocks n stuff. How can I trace the code? do I set a debug breakpoint on every line or wut?

Link to comment
Share on other sites

1 minute ago, diesieben07 said:

You open the code in your IDE. Look at which methods are called, click on them, see what they do, etc.

Breakpoints definitely do help if you have trouble understanding what exactly is going on.

Okay, How to I use this thing u told me?

 

17 minutes ago, diesieben07 said:

Look at Minecraft#sendClickBlockToController for the client-side part.

---------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------------------------------

Link to comment
Share on other sites

1 hour ago, diesieben07 said:

Use ctrl-shift-alt-n to search for symbols, then enter the method name.

Hello! I have this code now:

public static boolean attack(){
        ClientPlayerEntity player = Minecraft.getInstance().player;
        if ((player == null)) {return false;}

        RayTraceResult lookingAt = Minecraft.getInstance().objectMouseOver;
        assert lookingAt != null;
        System.out.println(lookingAt.getType().toString());
        if (lookingAt.getType() == RayTraceResult.Type.BLOCK) {
            if (lookingAt.getType().toString() == "a"){
                System.out.println("Yeaaa");
            }
            double x = lookingAt.getHitVec().getX();
            double y = lookingAt.getHitVec().getY();
            double z = lookingAt.getHitVec().getZ();
            Minecraft.getInstance().particles.addBlockHitEffects(new BlockPos(x, y, z), (BlockRayTraceResult) lookingAt);
            Minecraft.getInstance().player.swingArm(Hand.MAIN_HAND);
            player.world.getBlockState(new BlockPos(x, y, z))
                    .getBlock().
                            harvestBlock(
                    player.world,
                    player,
                    new BlockPos(x, y, z),
                    player.world.getBlockState(new BlockPos(x, y, z)),
                    player.world.getTileEntity(new BlockPos(x, y, z)),
                                    player.getHeldItemMainhand()
                                    );
        }


        return true;
    }

And It just animates the block breaking, but dosent drop the block. pls help :)

Link to comment
Share on other sites

3 hours ago, diesieben07 said:

It cannot be both a client-only mod and not a client-only mod.

That's like saying something is alive and dead at the same time.

It is basically a helper mod for my project. All I need this mod to do is to do what a normal player can whenever I ask it to do something from python. the python-java communication is flawless. just need a way to contol the player. so I guess it is up to you who says what I need :D 

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

    • This is my first time making a pack and i just wanted to add mods that i know or that look interesting. So When making the pack i get this error with Refined Storage https://pastebin.com/DxtTbVZW
    • Hello! When I'm trying to get items by tag during the recipe serialization, I'm getting an empty list. I have a guess that item tags're not loaded by the time minecraft loads my recipes. Here's my code: Class that saves information about ingredient's count Recipe serializer with some aux methods: Registry: Example of the json recipe file:  
    • I tried to install client forge on my linux desktop. But after "installation" it's missing forge[version].jar file in .minecraft/versions. I tried java 11 and 8 environment with same result. Here link to log file from installation: https://drive.google.com/file/d/1vtg9NT-WX5ilb1aNUvZlOv54gKWJuaT1/view?usp=share_link. I don't know what to do. I give for every directory permissions that I don't think that is issue. I will try check older versions if universal file work. Debian 11 (kernel 5.10)
    • I recently got error 1 in the launcher, so I restarted the .minecraft. After restarting it, I can't get the Forge 1.19.2 - 43.1.1 installer to run, I tried other versions and I get the same result, it opens a black box that closes instantly and nothing happens. I already tried to restart my pc, minecraft, update and reinstall java, run vanilla 1.19.2 and more recent versions of the game, disable Windows Firewall and antivirus and I still haven't solved it. Many times I installed forge and never ran into this problem. If I could receive assistance I would be very grateful.  
    • Here's the default loot table for gravel block: { "type": "minecraft:block", "pools": [ { "rolls": 1.0, "bonus_rolls": 0.0, "entries": [ { "type": "minecraft:alternatives", "children": [ { "type": "minecraft:item", "conditions": [ { "condition": "minecraft:match_tool", "predicate": { "enchantments": [ { "enchantment": "minecraft:silk_touch", "levels": { "min": 1 } } ] } } ], "name": "minecraft:gravel" }, { "type": "minecraft:alternatives", "conditions": [ { "condition": "minecraft:survives_explosion" } ], "children": [ { "type": "minecraft:item", "conditions": [ { "condition": "minecraft:table_bonus", "enchantment": "minecraft:fortune", "chances": [ 0.1, 0.14285715, 0.25, 1.0 ] } ], "name": "minecraft:flint" }, { "type": "minecraft:item", "name": "minecraft:gravel" } ] } ] } ] } ] } This is a finicky loot table. If I add anything to it, nothing drops. I've added pools, entries, children ... you name it. Does anyone know the particulars about this table? I mean, periodically gravel drops flint instead of a gravel block. I understand the condition that could drop flint if the block survives an explosion. Otherwise, it drops the gravel block itself. I would like to further understand why the use of `children` and the set of `chance` values given in the explosion child entry. What I do understand is that `"type" : "minecraft:alternatives"` means that if this child/entry is successful, then it stops generating loot for this entry/pool. How often does the flint drop and is that taken care of in another location? Is that in a `"condition" : "minecraft:table_bonus"` loot table? Hmmm... I'll have to go take a look and see if there is something called table_bonus.json.
  • Topics

×
×
  • Create New...

Important Information

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