Jump to content

Recommended Posts

Posted

I'm trying to make an item that creates and explosion on the block you right click on.  This works perfectly in single player and in multiplayer it creates an "explosion" at the correct location but for some reason the explosion is tiny, doesn't hurt anything, and doesn't make noise.  My guess is it has something to do with the world.createExplosion line but I'm not sure.  Any ideas or suggestions?

 

package me.thetrooble.film.items;

import java.util.List;

import me.thetrooble.film.LudicFilms;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;

public class BoomStick extends Item{
private final String name = "BoomStick";
public BoomStick() 
{
	maxStackSize = 1;
	setCreativeTab(LudicFilms.filmTab);
	setUnlocalizedName("ludicfilms" + "_" + name);
}
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
{
	if(getMouseOver(player,250).entityHit!=null){
		Entity mob = getMouseOver(player,250).entityHit;
		world.createExplosion((Entity)null,mob.posX,mob.posY,mob.posZ,5, false);
		return stack;
	}
	BlockPos blk = getMouseOver(player,250).getBlockPos();
	world.createExplosion((Entity)null,blk.getX(),blk.getY(),blk.getZ(),5, false);
    return stack;
}
public String getName()
{
	return name;
}

public static MovingObjectPosition getMouseOver(Entity theRenderViewEntity, float dist) {

	AxisAlignedBB theViewBoundingBox = new AxisAlignedBB(
			theRenderViewEntity.posX - 0.5D,
			theRenderViewEntity.posY - 0.0D,
			theRenderViewEntity.posZ - 0.5D,
			theRenderViewEntity.posX + 0.5D,
			theRenderViewEntity.posY + 1.5D,
			theRenderViewEntity.posZ + 0.5D
			);

	MovingObjectPosition returnMOP = null;
	if (theRenderViewEntity.worldObj != null)
	{
		double var2 = dist;
		returnMOP = theRenderViewEntity.rayTrace( var2, 0 );
		double calcdist = var2;
		Vec3 pos = theRenderViewEntity.getPositionEyes(0);
		var2 = calcdist;
		if (returnMOP != null)
		{
			calcdist = returnMOP.hitVec.distanceTo( pos );
		}

		Vec3 lookvec = theRenderViewEntity.getLook( 0 );
		Vec3 var8 = pos.addVector( lookvec.xCoord * var2,

				lookvec.yCoord * var2,

				lookvec.zCoord * var2 );
		Entity pointedEntity = null;
		float var9 = 1.0F;
		@SuppressWarnings("unchecked")
		List<Entity> list = theRenderViewEntity.worldObj
		.getEntitiesWithinAABBExcludingEntity(

				theRenderViewEntity,

				theViewBoundingBox.addCoord(

						lookvec.xCoord * var2,

						lookvec.yCoord * var2,

						lookvec.zCoord * var2 ).expand( var9, var9,
								var9 ) );
		double d = calcdist;

		for (Entity entity : list)
		{
			if (entity.canBeCollidedWith())
			{
				float bordersize = entity.getCollisionBorderSize();
				AxisAlignedBB aabb = new AxisAlignedBB(

						entity.posX - entity.width / 2,

						entity.posY,

						entity.posZ - entity.width / 2,

						entity.posX + entity.width / 2,

						entity.posY + entity.height,

						entity.posZ + entity.width / 2 );
				aabb.expand( bordersize, bordersize, bordersize );
				MovingObjectPosition mop0 = aabb.calculateIntercept( pos,
						var8 );

				if (aabb.isVecInside( pos ))
				{
					if (0.0D < d || d == 0.0D)
					{
						pointedEntity = entity;
						d = 0.0D;
					}
				} else if (mop0 != null)
				{
					double d1 = pos.distanceTo( mop0.hitVec );

					if (d1 < d || d == 0.0D)
					{
						pointedEntity = entity;
						d = d1;
					}
				}
			}
		}

		if (pointedEntity != null && (d < calcdist || returnMOP == null))
		{
			returnMOP = new MovingObjectPosition( pointedEntity );
		}

	}
	return returnMOP;
}
}

Posted

I tried this, now no explosions are made ever in multiplayer but it still works in single player.

That's usually a sign that you are using something that only works on the client; since your code isn't crashing on the server, clearly it's not an @SideOnly(Side.CLIENT) method, but it could be something as innocuous as a discrepancy in eye position (very common pre-1.8).

 

As Failender mentioned, explosions should only be created server-side, as they automatically notify the client of affected block positions and such; otherwise, you can end up with 'ghost' blocks, and that's never good. :P

 

To find out what's going on, I suggest you use a Logger (automatically adds Side information to each message) and start spamming the console with information about the state of every single variable you have while in multiplayer vs. single player, then try to find the difference.

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

    • I tried do download the essential mod to my mod pack but i didnt work. I paly on 1.21 and it should work. I use neoforge for my modding. The weird things is my friend somehow added the mod to his modpack and many others that I somehow can´t. Is there anything i can do? 
    • Thanks, I've now installed a slightly newer version and the server is at least starting up now.
    • i have the same issue. Found 1 Create mod class dependency(ies) in createdeco-1.3.3-1.19.2.jar, which are missing from the current create-1.19.2-0.5.1.i.jar Found 11 Create mod class dependency(ies) in createaddition-fabric+1.19.2-20230723a.jar, which are missing from the current create-1.19.2-0.5.1.i.jar Detailed walkthrough of mods which rely on missing Create mod classes: Mod: createaddition-fabric+1.19.2-20230723a.jar Missing classes of create: com/simibubi/create/compat/jei/category/sequencedAssembly/JeiSequencedAssemblySubCategory com/simibubi/create/compat/recipeViewerCommon/SequencedAssemblySubCategoryType com/simibubi/create/compat/rei/CreateREI com/simibubi/create/compat/rei/EmptyBackground com/simibubi/create/compat/rei/ItemIcon com/simibubi/create/compat/rei/category/CreateRecipeCategory com/simibubi/create/compat/rei/category/WidgetUtil com/simibubi/create/compat/rei/category/animations/AnimatedBlazeBurner com/simibubi/create/compat/rei/category/animations/AnimatedKinetics com/simibubi/create/compat/rei/category/sequencedAssembly/ReiSequencedAssemblySubCategory com/simibubi/create/compat/rei/display/CreateDisplay Mod: createdeco-1.3.3-1.19.2.jar Missing classes of create: com/simibubi/create/content/kinetics/fan/SplashingRecipe
    • The crash points to moonlight lib - try other builds or make a test without this mod and the mods requiring it
    • Do you have shaders enabled? There is an issue with the mod simpleclouds - remove this mod or disable shaders, if enabled  
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

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