Posted December 22, 201311 yr Hello! I posted on here a few days ago and you guys helped me out a lot, and now I'm having another issue so hopefully you guys can help me out again! So I'm still in the learning phases of my Minecraft mod, I'm really just testing how to add custom items and things right now. In single player I was able to make a "spellbook" sort of thing that would shoot fireballs when right clicked. Now that I'm trying to test it out for multiplayer, I can't get the right click functionality to work. I put breakpoints in the function and it never even seemed to hit them, unless I'm just using the breakpoints wrong. Over the last few days I've been searching the internet for some explanation as to what I need to change to get it working for multiplayer, but I haven't been able to find much. For awhile I suspected my issue was that the fireball entities weren't being recognized by the server, but looking through the minecraft source code I can't see any difference between how I call the function and how ghasts or blazes use it, and both of those work in multiplayer. Anyway, If any of you guys could help me figure out what I need to do differently, or can point me in the direction of a good article or tutorial, it would be much appreciated! And just like my last post, I can't get attachments to work so I will post the relevant bits of my code below! Thank you for taking the time to help me out!
December 22, 201311 yr Author Ok here is my code, sorry if I'm not supposed to post it like this but I couldn't get the attachment thing working D: //BaseClass *************************************************************** package InnerPower; //--------------------------------- import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.*; import net.minecraftforge.common.MinecraftForge; //----------------------------------- import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid= "AthInrPwr", name= "Inner Power", version= "Alpha 1.0") @NetworkMod(clientSideRequired= true, serverSideRequired= false) public class BaseClass { // The instance of your mod that Forge uses. @Instance(value = "AthInrPwr") public static BaseClass instance1; //*********** Defining blocks/items public static final Block InrPwrCrystal = new crystalBlock(550, Material.ground).setHardness(45.0f).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("crystalBlock").setCreativeTab(CreativeTabs.tabBlock).setTextureName("InnerPower_Block_Crystal"); public static final Item InrPwrWispEssence = new Item(5001).setCreativeTab(CreativeTabs.tabMisc).setUnlocalizedName("essenceWisp").setTextureName("InnerPower_Essence_WispyEssence"); public static final Item STFireball= new SpellTomeFireball(5000).setTextureName("InnerPower_SpellTome_Fireball"); //From new tutorial //instance of mod forge uses @Instance("AthInrPwr") public static BaseClass instance; //says where the client and server proxy code is loaded @SidedProxy(clientSide= "InnerPower.client.ClientProxy",serverSide="InnerPower.CommonProxy") public static CommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { //Adding to registry GameRegistry.registerBlock(InrPwrCrystal, "crystal" ); LanguageRegistry.addName(InrPwrCrystal, "crystal"); MinecraftForge.setBlockHarvestLevel(InrPwrCrystal, "pickaxe", 3); LanguageRegistry.addName(InrPwrWispEssence, "Wispy Essence"); LanguageRegistry.addName(STFireball, "Spell Tome: Fireball"); GameRegistry.addRecipe(new ItemStack(STFireball, 1), new Object[]{ "xx","xx", 'x', Block.dirt }); //test recipie GameRegistry.addRecipe(new ItemStack(Item.diamond, 1), new Object[]{ "x x", " x ", "x x", 'x', Block.dirt }); } @EventHandler public void postInit(FMLPostInitializationEvent event) { //Stub Method } @EventHandler public void load(FMLInitializationEvent event) { //block and item initializations moved to preInit() } } //Spell book class *********************************************************************** package InnerPower; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.projectile.EntitySmallFireball; import java.util.Random; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class SpellTomeFireball extends Item { //Default Constructor public SpellTomeFireball(int id) { super(id); setMaxStackSize(1); setCreativeTab(CreativeTabs.tabCombat); setUnlocalizedName("STfireball"); } public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayerMP par3EntityPlayer) { if (!par2World.isRemote) { par3EntityPlayer.addChatMessage("This line is being hit"); Vec3 look = par3EntityPlayer.getLookVec(); EntitySmallFireball fireball2 = new EntitySmallFireball(par2World, par3EntityPlayer, 500, 500, 500); fireball2.setPosition(par3EntityPlayer.posX + look.xCoord * par3EntityPlayer.getEyeHeight(), par3EntityPlayer.posY + look.yCoord * par3EntityPlayer.getEyeHeight()+1, par3EntityPlayer.posZ + look.zCoord * par3EntityPlayer.getEyeHeight()); fireball2.accelerationX = look.xCoord * 0.5; fireball2.accelerationY = look.yCoord * 0.5; fireball2.accelerationZ = look.zCoord * 0.5; par2World.spawnEntityInWorld(fireball2); } return par1ItemStack; } public String getVersion() { return "1.0"; } } // Common Proxy ************************************************************* package InnerPower; public class CommonProxy { // Client stuff public void registerRenderers() { // Nothing here as the server doesn't render graphics or entities! } } //Client Proxy Class**************************** package InnerPower.client; //extra imports were from expiraments i did trying to get my item to work in MP import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.client.MinecraftForgeClient; import InnerPower.CommonProxy; import InnerPower.SpellTomeFireball; public class ClientProxy extends CommonProxy { @Override public void registerRenderers() { // This is for rendering entities and so forth later on } }
December 22, 201311 yr The line if (!par2World.isRemote) Basically checks if the world is server side, meaning you are basically you are checking if it is not multiplayer then calling the function if it is not. Remove that if statement and it should work. -tattyseal
December 22, 201311 yr Your onItemRightClick does not override anything and because of that never gets called (what should call it?) Always, always, always use @Override if you intend to override, it will tell you if you are not actually overriding. In b4 "but that throws an error that tells me to remove the override!" BECAUSE YOUR FUNCTION ISN'T THE SAME AS THE ONE IN ITEM. Go get the correct function, including parameters, and try again. 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.
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.