Jump to content

[1.7.10] Gravitational cube?


Recommended Posts

Get the position of the block relative to the entity's position, multiply the resulting vector by some factor then move the entity with that vector. If you want it to act like gravity, have the factor be affected by the entity's distance to the block.


All simple vector math.

Link to comment
Share on other sites

It's a very hard thing to do - in my mod I've got an item that when right-clicked sucks everything within 32 blocks towards it, here's the whole class incase it helps :)



package com.toastrackengima.techcraft;


import java.util.List;


import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.entity.item.EntityItem;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.item.Item;

import net.minecraft.item.ItemStack;

import net.minecraft.world.World;


public class TechDiamondMag extends Item{


public static CreativeTabs tabTech; //Creative tab


public TechDiamondMag() {

setMaxStackSize(1); //Basic stuff, no stacking, textures, damage, etc







public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {

par3List.add("A golden magnet embued"); //Add some of the item lore

par3List.add("with the power of diamond");

par3List.add("Max pull distance: 32");



public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer ep)

    { //While the item is being right-clicked

double radius = 5;

        List<EntityItem> items = world.getEntitiesWithinAABB(EntityItem.class, ep.boundingBox.expand(32, 32, 32)); //The area to pull items from (change 32 to any number)

        for(EntityItem it : items){

            double distX = ep.posX - it.posX; //Move those items!

            double distZ = ep.posZ - it.posZ;

            double distY = it.posY+1.5D - ep.posY;

            double dir = Math.atan2(distZ, distX);

            double speed = 1F / it.getDistanceToEntity(ep) * 15; //Adjust the speed here (change 15)


            if (distY<0)


                it.motionY += speed;



            it.motionX = Math.cos(dir) * speed;

            it.motionZ = Math.sin(dir) * speed;



    is.damageItem(1, ep); //Damage the item (those magnets don't last forever, you know)

    return is;





You'd have to change some of that to make it into a block,  but that should give you a starting point :)


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.

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.


  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Recently started to attempt 1.20.1 modding, in registering idle, walk and attack animations in the mob entity class i've run into two issues:   a) idle and walk animations seem to play simultaneously  + the mob itself does not seem to walk private static final EntityDataAccessor<Boolean> ATTACKING = SynchedEntityData.defineId(MugaEntity.class, EntityDataSerializers.BOOLEAN); public MugaEntity(EntityType<? extends Monster > pEntityType, Level pLevel) { super(pEntityType, pLevel); } public final AnimationState idleAnimationState = new AnimationState(); private int idleAnimationTimeout = 1; public final AnimationState attackAnimationState = new AnimationState(); public int attackAnimationTimeout = 0; @Override public void tick() { super.tick(); if(this.level().isClientSide()) { setupAnimationStates(); } } private void setupAnimationStates () { if(this.idleAnimationTimeout <= 0) { this.idleAnimationTimeout = this.random.nextInt(30) + 60; this.idleAnimationState.start(this.tickCount); } else { --this.idleAnimationTimeout; } if (this.isAttacking() && attackAnimationTimeout <= 0 ) { attackAnimationTimeout = 20; attackAnimationState.start(this.tickCount); } else { --this.attackAnimationTimeout; } if(this.isAttacking()) { attackAnimationState.stop(); } } @Override protected void updateWalkAnimation(float pPartialTick) { float f; if(this.getPose() == Pose.STANDING) { f=Math.min(pPartialTick * 3.0F, 1.0F); } else { f= 0.0F; } this.walkAnimation.update(f, 0.2F); } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(ATTACKING, false); } public void setAttacking(boolean attacking) { this.entityData.set(ATTACKING, attacking); } public boolean isAttacking() { return this.entityData.get(ATTACKING); } b) the attack animation is never played on attack, despite being registered  @Override public void setupAnim(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { this.root().getAllParts().forEach(ModelPart::resetPose); this.animateWalk(ModAnimationDefinitions.MUGA_WALKING, limbSwing, limbSwingAmount, 1f, 1f ); this.animate(((MugaEntity)entity).idleAnimationState, ModAnimationDefinitions.MUGA_IDLE, ageInTicks, 1f); this.animate(((MugaEntity)entity).attackAnimationState, ModAnimationDefinitions.MUGA_ATTACK, ageInTicks, 1f); }
    • Maybe there are some more broken files - check the new crash-report - the file name is mentioned in the first lines   If it is another crash, add it here
    • Thanks. Found and deleted it, but it doesn't change anything. When joining a new file is created, the screen freezes/ does not respond in typical manner and I have to close it then. I deleted it in curseforge>minecraft>instances>Modpack>saves>World>serverconfig Should I have deleted it anywhere else?
    • Do you still need help?
  • Topics

  • Create New...

Important Information

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