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

VoxelShapes 1.16.5


PermskyKit
 Share

Recommended Posts

Hi. I have a big question. I created a small block in the game, but I can't adjust the size of its hitbox in any way, and no errors are generated. I am attaching a screenshot and block code, I really hope for help.

package com.PermskyKit.TrueRopesMod.block;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;

public class RopeBlock extends Block{

	  public RopeBlock(Properties p_i48440_1_) {
		super(p_i48440_1_);
	}


    public VoxelShape func_220053_a(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
		    VoxelShape shape = Block.box(6, 0, 6, 10, 16, 10);
			return shape;
	 }
}

Screenshot

Link to comment
Share on other sites

1 hour ago, PermskyKit said:

Where exactly should I write this?

https://lmgtfy.app/?q=java+%40override+annotation

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

package com.PermskyKit.TrueRopesMod.block;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;

public class RopeBlock extends Block{
	  public RopeBlock(Properties p_i48440_1_) {
		super(p_i48440_1_);
	}
	@Override
	public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
		    VoxelShape shape = Block.box(6, 0, 6, 10, 16, 10);
			return shape;
	 }
}
1 hour ago, Draco18s said:

Unfortunately it didn't help. Now my code looks like this, but the problem persists.

Link to comment
Share on other sites

52 minutes ago, Luis_ST said:

in your IDE, in Eclipse you can search for the class when using CTRL + SHIFT + H,
im not familiar with the Intellij Shortcuts

Thanks a lot, I was not aware of this Eclipse feature. But even this method did not help, I am tormented by the question, maybe there should be some additional files besides "BlockInit", or the path to this "RopeBlock" file should be different.

I've already tried many variations of the code and .. Maybe I just don't know something else about Eclipse or the file structure.

Link to comment
Share on other sites

4 hours ago, Luis_ST said:

in your IDE, in Eclipse you can search for the class when using CTRL + SHIFT + H,
im not familiar with the Intellij Shortcuts

With IntelliJ you double-press Shift to open the search-everywhere box.

I haven't used Eclipse in years, but you should find Minecraft's code (and assets) in your project's external libraries. You're looking for something along the lines of: https://imgur.com/jC0eGDK (this is from IntelliJ, mind you).

However, here's an example from 1.17 code, I believe it was still applicable in 1.16:

private static final VoxelShape PART_1  = Block.box(0.0, 0.0, 0.0, 16.0, 16.0, 16.0); // 16.0 is the full size of one block (in pixels)

@Override
public VoxelShape getShape(BlockState state, BlockGetter block, BlockPos pos, CollisionContext context)
{
    return PART_1;
}

// If you want multiple hitboxes, combine them like:
private static final VoxelShape AABB = Shapes.or(PART_1, PART_2); // You can add more parts here if necessary
// Then simply return this from getShape() instead of the individual part.

 

Looking at your code, I believe the reason it's not working is that you're creating the VoxelShape locally in the function. Once the function returns, that object goes out of scope and is destroyed. You want to move the declaration into the class itself. You can also make it static.

Edited by Logix
Updated to include direct response to the OP's code
Link to comment
Share on other sites

10 hours ago, Logix said:

 

private static final VoxelShape PART_1  = Block.box(0.0, 0.0, 0.0, 16.0, 16.0, 16.0); // 16.0 is the full size of one block (in pixels)

@Override
public VoxelShape getShape(BlockState state, BlockGetter block, BlockPos pos, CollisionContext context)
{
    return PART_1;
}

// If you want multiple hitboxes, combine them like:
private static final VoxelShape AABB = Shapes.or(PART_1, PART_2); // You can add more parts here if necessary
// Then simply return this from getShape() instead of the individual part.

BlockGetter and CollisionContext do not work in version 1.16.5. Do you know how they were designated in this version?

Link to comment
Share on other sites

3 minutes ago, Logix said:

All you need to do is to move the 

VoxelShape shape = Block.box(6, 0, 6, 10, 16, 10);

declaration out of the function, into the class, and preferably mark it as static. That should fix your issue.

Yes, I did it and was able to change the code, now it looks like this:

package com.PermskyKit.TrueRopesMod.blocks;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;

public class RopeBlock extends Block{

	  public RopeBlock(Properties properties) {
		super(properties);
	}
	  private static final VoxelShape PART_1  = Block.box(6.0, 0.0, 6.0, 10.0, 16.0, 10.0);

	  @Override
	  public VoxelShape getShape(BlockState state, IBlockReader block, BlockPos pos, ISelectionContext context)
	  {
	      return PART_1;
	  }
}

But alas, the usual full block hitbox remains in the game...

Link to comment
Share on other sites

10 hours ago, diesieben07 said:

Show where you register your block.

I'm sorry, for some reason I overlooked this question..

Class path:

TrueRopesMod/src/main/java/core.init/BlockInit

Code:

package core.init;

import com.PermskyKit.TrueRopesMod.TrueRopesMod;

import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor;
import net.minecraft.block.AbstractBlock;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class BlockInit {
	public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS,
			TrueRopesMod.MOD_ID);

	public static final RegistryObject<Block> ROPE_BLOCK = BLOCKS.register("rope_block",
			() -> new Block(AbstractBlock.Properties.of(Material.GRASS, MaterialColor.TERRACOTTA_BROWN)
					.strength((float) 0.4)
					.sound(SoundType.CROP)));
}
Link to comment
Share on other sites

🤦

Edited by Draco18s

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

21 hours ago, diesieben07 said:

Basic Java is a necessary prerequisite for modding.

Ahem, I'm sorry, I did a bit reworking of the mod structure, here's how the block is registered:

package com.PermskyKit.TrueRopesMod.block;

import com.PermskyKit.TrueRopesMod.TrueRopesMod;
import com.PermskyKit.TrueRopesMod.item.ModItemGroup;
import com.PermskyKit.TrueRopesMod.item.ModItems;
import com.google.common.base.Supplier;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class ModBlocks {
	
    public static final DeferredRegister<Block> BLOCKS
    = DeferredRegister.create(ForgeRegistries.BLOCKS, TrueRopesMod.MOD_ID);
    
    
    
    public static final RegistryObject<Block> ROPE_BLOCK = registerBlock("rope_block",
            () -> new Block(AbstractBlock.Properties.of(Material.GRASS).harvestLevel(2).harvestTool(ToolType.PICKAXE)));
    
    
    
    private static <T extends Block>RegistryObject<T> registerBlock(String name, Supplier<T> block) {
        RegistryObject<T> toReturn = BLOCKS.register(name, block);
        registerBlockItem(name, toReturn);
        return toReturn;
    }
    
    private static <T extends Block> void registerBlockItem(String name, RegistryObject<T> block) {
        ModItems.ITEMS.register(name, () -> new BlockItem(block.get(),
                new Item.Properties().tab(ModItemGroup.TRUEROPESMOD)));
    }

	public static void register(IEventBus eventBus) {
        BLOCKS.register(eventBus);
    }

}

 

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

    • Sorry... The server mods were created from "Server.jar" from curseforge. In an attempt to work, I put the client mods on the server
    • Capability class: public class ManaCapability { public static final ResourceLocation LOCATION=new ResourceLocation(ElderNorseGods.MOD_ID, "mana"); @CapabilityInject(IManaHandler.class) public static Capability<IManaHandler> CAP_INSTANCE=null; public static class ManaStorage implements IStorage<IManaHandler> { @Override public INBT writeNBT(Capability<IManaHandler> cap, IManaHandler manaHandler, Direction side) { CompoundNBT tag=new CompoundNBT(); tag.putFloat("Mana", manaHandler.getMana()); tag.putBoolean("Status", manaHandler.getStatus()); return tag; } @Override public void readNBT(Capability<IManaHandler> cap, IManaHandler manaHandler, Direction side, INBT nbt) { manaHandler.setMana(((CompoundNBT)nbt).getFloat("Mana")); manaHandler.setStatus(((CompoundNBT)nbt).getBoolean("Status")); } } public static class ManaProvider implements ICapabilitySerializable<CompoundNBT> { private final ManaHandler mana=new ManaHandler(); private final LazyOptional<IManaHandler> manaOptional=LazyOptional.of(()->this.mana); public void invalidate() { this.manaOptional.invalidate(); } @Override public CompoundNBT serializeNBT() { if(ManaCapability.CAP_INSTANCE==null) return new CompoundNBT(); else return (CompoundNBT)ManaCapability.CAP_INSTANCE.writeNBT(this.mana, null); } @Override public void deserializeNBT(CompoundNBT nbt) { if(ManaCapability.CAP_INSTANCE!=null) ManaCapability.CAP_INSTANCE.readNBT(this.mana, null, nbt); } @Override public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) { return cap==ManaCapability.CAP_INSTANCE?this.manaOptional.cast():LazyOptional.empty(); } } } Capability handler class: public class ManaHandler implements IManaHandler { private float mana; private boolean active; public ManaHandler() { this.mana=0F; this.active=false; } @Override public void setMana(float amount) { if(amount<0F) this.mana=0F; else if(amount>20F) this.mana=20F; else this.mana=amount; } @Override public float getMana() { return this.mana; } @Override public void setStatus(boolean value) { this.active=value; } @Override public boolean getStatus() { return this.active; } @Override public void update(ServerPlayerEntity player) { NetworkHandler.sendToPlayer(player, new ManaDataPacket(this.getMana(), this.getStatus())); } } Capability event handler class: @EventBusSubscriber(modid=ElderNorseGods.MOD_ID, bus=EventBusSubscriber.Bus.FORGE) public abstract class ManaEventHandler { private static void sendUpdates(ServerPlayerEntity player) { if(!player.getCommandSenderWorld().isClientSide()) { player.getCapability(ManaCapability.CAP_INSTANCE).ifPresent(mana->mana.update(player)); } } @SubscribeEvent public static void onPlayerChangedDimension(PlayerChangedDimensionEvent event) { ManaEventHandler.sendUpdates((ServerPlayerEntity)event.getPlayer()); } @SubscribeEvent public static void onPlayerRespawn(PlayerRespawnEvent event) { ManaEventHandler.sendUpdates((ServerPlayerEntity)event.getPlayer()); } @SubscribeEvent public static void onPlayerLoggedIn(PlayerLoggedInEvent event) { ManaEventHandler.sendUpdates((ServerPlayerEntity)event.getPlayer()); } @SubscribeEvent public static void onPlayerClone(PlayerEvent.Clone event) { if(!event.isWasDeath()) return; IManaHandler oldMana=event.getOriginal().getCapability(ManaCapability.CAP_INSTANCE).orElse(null); IManaHandler newMana=event.getPlayer().getCapability(ManaCapability.CAP_INSTANCE).orElse(null); if(oldMana!=null&&newMana!=null) { newMana.setMana(oldMana.getMana()); newMana.setStatus(oldMana.getStatus()); } } } Packet class: public class ManaDataPacket { private float value; private boolean status; public ManaDataPacket(float value, boolean status) { this.value=value; this.status=status; } public static void encode(ManaDataPacket packet, PacketBuffer buffer) { buffer.writeFloat(packet.value); buffer.writeBoolean(packet.status); } public static ManaDataPacket decode(PacketBuffer buffer) { return new ManaDataPacket(buffer.readFloat(), buffer.readBoolean()); } public static void handle(ManaDataPacket packet, Supplier<NetworkEvent.Context> ctx) { ctx.get().enqueueWork(()->DistExecutor.unsafeRunWhenOn(Dist.CLIENT, ()->()->PacketHandler.handlePacket(packet, ctx))); ctx.get().setPacketHandled(true); } private static class PacketHandler { private static void handlePacket(ManaDataPacket packet, Supplier<NetworkEvent.Context> ctx) { Minecraft mc=Minecraft.getInstance(); mc.player.getCapability(ManaCapability.CAP_INSTANCE).ifPresent ( mana-> { mana.setMana(packet.value); mana.setStatus(packet.status); } ); } } }
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.