Jump to content

get coordinates of the block the player looking at


DoctorG_Mystery

Recommended Posts

I wrote a code that, when you right-click, places a diamond block where you look, but I can't get the coordiats.

here my code:

        if(!world.isClientSide) {
            double x = player.getLookVec().xCoord;
            double y = player.getLookVec().yCoord;
            double z = player.getLookVec().zCoord;
            BlockPos blockPos = new BlockPos(x, y, z);
            world.setBlockAndUpdate(blockPos, Blocks.DIAMOND_BLOCK/*for example*/.defaultBlockState());
        }

(the getLookVec does not work)

Edited by DoctorG_Mystery
Link to comment
Share on other sites

here is all of the code in the script:

package drgmystery.darklight.item;

import drgmystery.darklight.init.DarklightItemGroups;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Rarity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class TestItem1 extends Item{
    
    public TestItem1() {
        super(new Properties().defaultDurability(20).tab(DarklightItemGroups.GROUP).rarity(Rarity.EPIC));
    }
    
    @Override
    public ActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
        
        if(!world.isClientSide) {
            double x = player.getLookVec().xCoord;
            double y = player.getLookVec().yCoord;
            double z = player.getLookVec().zCoord;
            BlockPos blockPos = new BlockPos(x, y, z);
            world.setBlockAndUpdate(blockPos, Blocks.DIAMOND_BLOCK.defaultBlockState());
        }
        return super.use(world, player, hand);
    }
    
}

 

Edited by DoctorG_Mystery
Link to comment
Share on other sites

If I do that, it tells me that at useOn (World world, PlayerEntity player, Hand hand) something is wrong and as a solution it suggests deleting the @Override 

the error with getLookVec() is also still there
here the code:

package drgmystery.darklight.item;

import drgmystery.darklight.init.DarklightItemGroups;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Rarity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class TestItem1 extends Item{
    
    public TestItem1() {
        super(new Properties().defaultDurability(20).tab(DarklightItemGroups.GROUP).rarity(Rarity.EPIC));
    }
    
    @Override
    public ActionResult<ItemStack> useOn(World world, PlayerEntity player, Hand hand) {
        
        if(!world.isClientSide) {
            double x = player.getLookVec().xCoord;
            double y = player.getLookVec().yCoord;
            double z = player.getLookVec().zCoord;
            BlockPos blockPos = new BlockPos(x, y, z);
            world.setBlockAndUpdate(blockPos, Blocks.DIAMOND_BLOCK.defaultBlockState());
        }
        return super.useOn(world, player, hand);
    }
    
}

 

Edited by DoctorG_Mystery
Link to comment
Share on other sites

Overriting means somthing like transmission so you declares a methode in a class an give out if needed but how can I Overrite/declares useOn? First you mean I shoud use useOn not use so I have remove use and write useOn so there's an error and as solution I shoud remove the @Override than you said I shoud overrite the methode.

 

Link to comment
Share on other sites

I see now a Video specific for overriting I think I understand now: 

I have a basic method:

public void breathe () {
           System.out.println ("puuuuuh");
            }


then I have three (or more / less) objects on which it should be executed:

animal x = new bird ();
x. breathe ();
x = new cat ();
x. breathe ();
x = new animal ();
x. breathe ();
//so the result is:
puuuuuh
puuuuuh
puuuuuh

But if you change the ...prnitln("puuuuuh"); zu ...println("pip pip"); directly in the class of bird then the master method that is in animal was overwritten.

//so here is the result:
pip pip
puuuuuh
puuuuuh

what you say to that?

Edited by DoctorG_Mystery
Link to comment
Share on other sites

I have no made a base methode and an overrited methode in 2 Scripts:

Base methode:

package drgmystery.darklight.init;

import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class DarklightOverrite {
    
    public ActionResult<ItemStack> use(PlayerEntity player, World world, Hand hand, BlockPos Pos) {
        // TODO Auto-generated method stub
        return null;
    }
}

Overrited methode:

package drgmystery.darklight.events;

import drgmystery.darklight.init.DarklightOverrite;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;

@Mod.EventBusSubscriber(modid = "darklight", bus = Bus.FORGE, value = Dist.CLIENT)
public class DarklightPlaceTest extends DarklightOverrite{
    
    @Override
    @SubscribeEvent
        public ActionResult<ItemStack> useOn(PlayerEntity player, World world, Hand hand, BlockPos Pos){
            if(!world.isClientSide){
                double x = player.position().x();
                double y = player.position().y();
                double z = player.position().z(); 
                BlockPos blockPos = new BlockPos(x, y, z);
                world.setBlockAndUpdate(new BlockPos(blockPos), Blocks.DIAMOND_BLOCK.defaultBlockState());
            }
            return ActionResult.pass(null);
        }

}

and here is the item script:

package drgmystery.darklight.item;

import drgmystery.darklight.init.DarklightItemGroups;
import net.minecraft.item.Item;
import net.minecraft.item.Rarity;

public class TestItem1 extends Item{
    
    public TestItem1() {
        super(new Properties().defaultDurability(20).tab(DarklightItemGroups.GROUP).rarity(Rarity.EPIC));
    }
    
}

so what next? The problem with the getLookVec is still there(I first changed getLookVec to position), I think that there is a new keyword in 1.16.5 ...

Edited by DoctorG_Mystery
Link to comment
Share on other sites

if you move the mouse pointer to useOn (the useOn in the class I created), then it shows you errors and the quick fixes and usually it shows you "autogenerate useOn method here" (or something like that) then The IDE generates the useOn method here, which also contains "// TODO Auto-generated constructor stub"

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
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

    • When I try to install the forge installer it comes with several files instead of just one in executable java format
    • 0 I have recently started with Java and the implementation of Minecraft mods. I am currently working on a mod for 1.20.4-49.0.31 I'm trying to get the content of each slot in the console to be displayed when the inventory is opened, which works. In addition, I wanted to do the same with chests (in this case containers). However, I get in the output that there is Air at every slot of the chest, even if the chest is filled. Does anyone have experience with similar problems and could help me? package net.kaan.sortingmod; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.client.gui.screens.inventory.FurnaceScreen; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(SortingMod.MODID) public class SortingMod { public static final String MODID = "sortingmod"; public SortingMod() { // Register the client setup method FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff); // Register this class for Forge events MinecraftForge.EVENT_BUS.register(this); } private void doClientStuff(final FMLClientSetupEvent event) { // Any client-side setup can be done here } @SubscribeEvent public void onScreenOpen(ScreenEvent.Opening event) { Screen screen = event.getScreen(); if (screen instanceof InventoryScreen) { System.out.println("Player opened their inventory."); assert Minecraft.getInstance().player != null; printInventoryItems(Minecraft.getInstance().player); } else if (screen instanceof ContainerScreen) { System.out.println("Player opened a chest."); printContainerItems((ContainerScreen) screen); } } private void printInventoryItems(Player player) { AbstractContainerMenu menu = player.inventoryMenu; for (int i = 0; i < menu.slots.size(); i++) { ItemStack stack = menu.getSlot(i).getItem(); if (!stack.isEmpty()) { System.out.println("Slot " + i + ": " + stack.getCount() + "x " + stack.getHoverName().getString()); } } } private void printContainerItems(ContainerScreen screen) { AbstractContainerMenu menu = screen.getMenu(); System.out.println(menu.slots.size()); for (int i = 0; i < menu.slots.size(); i++) { ItemStack stack = menu.getSlot(i).getItem(); System.out.println("Slot " + i + ": " + stack.getCount() + "x " + stack.getHoverName().getString()); } } }  
    • I am wanting to add an axe to my mod though I do not want it to have a recipe, the reason for this being that I want you to only be able to find it in a structure. I have looked on both here and elsewhere on the internet and have found nothing... How would this be done?    (Video for reference.)    
    • file log:file:///C:/Users/natal/AppData/Roaming/.minecraft/logs/latest.log   Aternos log: https://mclo.gs/kzPaflO
  • Topics

×
×
  • Create New...

Important Information

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