Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • LivingAttackEvent called twice, on Client Side
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 1
skeeter144

LivingAttackEvent called twice, on Client Side

By skeeter144, August 15, 2015 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

skeeter144    1

skeeter144

skeeter144    1

  • Tree Puncher
  • skeeter144
  • Members
  • 1
  • 15 posts
Posted August 15, 2015

I have an event handler that I use to tell whenever an entity gets attacked, and do some other stuff with that.  The problem is, the event is getting called twice per attack, on the client side.

 

I have checks that if the server is dedicated, it will only get called on the server, which works. But when the server is integrated, it only gets called on the client, and is called twice.

 

Here's my code for the attack handler. The LivingDeathEvent works properly, it's only the LivingAttackEvent

 

 

public class AttackHandler {

@SubscribeEvent
public void entityAttacked(LivingAttackEvent e) {

	if (MinecraftServer.getServer().isDedicatedServer()) {
		if (!IslandSurvival.proxy.isRemote()) {
			return;
		}
	}

	EntityPlayer player;
	if (e.source.getSourceOfDamage() instanceof EntityPlayer) {
		player = (EntityPlayer) e.source.getSourceOfDamage();
	} else {
		return;
	}

	Integer level = SkillAttack.getLevelForWeapon(player.getHeldItem().getItem());
	if (level == null)
		return;
	int attackLevel = IslandSurvival.instance.getPlayerLevelsDatabase().getPlayerLevels(player.getPersistentID())
			.getAttackLevel();
	if (attackLevel < level) {
		player.addChatMessage(new ChatComponentTranslation(EnumChatFormatting.RED + "You need level " + level
				+ " Attack to use the " + player.getHeldItem().getDisplayName() + "!"));
		e.setCanceled(true);
	}
}

@SubscribeEvent
public void onLivingDeath(LivingDeathEvent e) {

	EntityPlayer player;
	if (e.source.getSourceOfDamage() instanceof EntityPlayer) {
		player = (EntityPlayer) e.source.getSourceOfDamage();
		if (player.getHeldItem() == null)
			return;

		Integer exp = 0;
		if (e.entity instanceof EntityPlayer) {
			exp = 10;
		} else {

			exp = SkillAttack.getExpForMob((EntityLiving) e.entity);

		}
		System.out.println(exp);

		IslandSurvival.instance.getPlayerLevelsDatabase().getPlayerLevels(player.getPersistentID())
				.addAttackExp(exp, player);
		return;

	}
	return;

}

}

 

 

 

And where I register the AttackHandler class.

 

 

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent e) {
	// Item/block init and registering

	ISItems.init();
	ISTools.init();
	ISBlocks.init();

	SkillsMain.init();
	SkillMining.init();
	SkillCrafting.init();

	network = NetworkRegistry.INSTANCE.newSimpleChannel("MyChannel");
	network.registerMessage(Handler.class, CraftingMessage.class, 0, Side.SERVER);

	// Config handling
	loadDatabase();

	//handlers
	bbHandler = new BlockBreakingHandler();

	MinecraftForge.EVENT_BUS.register(new ConnectionHandler());
	MinecraftForge.EVENT_BUS.register(new AttackHandler());

	if (!proxy.isRemote()) {
		KeyBindings.init();
		FMLCommonHandler.instance().bus().register(new KeyInputHandler());

	} else {

	}

}

 

 

 

And here is the console output:

 

 

 

[17:41:24] [Client thread/INFO]: [CHAT] §cYou need level 20 Attack to use the Diamond Sword!

[17:41:24] [Client thread/INFO]: [CHAT] §cYou need level 20 Attack to use the Diamond Sword!

[17:41:25] [Client thread/INFO]: [CHAT] §cYou need level 20 Attack to use the Diamond Sword!

[17:41:25] [Client thread/INFO]: [CHAT] §cYou need level 20 Attack to use the Diamond Sword!

[17:41:28] [Client thread/INFO]: [CHAT] §cYou need level 20 Attack to use the Diamond Sword!

[17:41:28] [Client thread/INFO]: [CHAT] §cYou need level 20 Attack to use the Diamond Sword!

 

 

Any help would be much appreciated! Not sure if this is a bug or what.

 

 

 

  • Quote

Share this post


Link to post
Share on other sites

delpi    71

delpi

delpi    71

  • Dragon Slayer
  • delpi
  • Forge Modder
  • 71
  • 840 posts
Posted August 16, 2015

I'd suggest using proxies.

 

Only put your client stuff you are interested for that handler on the client side and vice versa for the server.

 

Will make it easier to troubleshoot.  If I had to wager, by the time you do that, I'm betting the issue goes away.

  • Quote

Share this post


Link to post
Share on other sites

skeeter144    1

skeeter144

skeeter144    1

  • Tree Puncher
  • skeeter144
  • Members
  • 1
  • 15 posts
Posted August 16, 2015

Not sure I completely follow.  I'm checking "proxy.isRemote()," is that not what you mean?  Would you recommend putting the event handler in the proxy classes?

  • Quote

Share this post


Link to post
Share on other sites

delpi    71

delpi

delpi    71

  • Dragon Slayer
  • delpi
  • Forge Modder
  • 71
  • 840 posts
Posted August 16, 2015

I put all my events in a side specific proxy section.  I'm very deliberate in separating the client/server.  It tends to avoid confusion.  I looked briefly through your stuff and there were a few things in there that make me think you could benefit from the same.  However, that is my opinion, not gospel.

  • Quote

Share this post


Link to post
Share on other sites

skeeter144    1

skeeter144

skeeter144    1

  • Tree Puncher
  • skeeter144
  • Members
  • 1
  • 15 posts
Posted August 16, 2015

That's a good idea! I can't believe I had never thought about that! Thanks for the tip, I'll try it out. And even if it doesn't work, that seems like a really good practice.

  • Quote

Share this post


Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 1
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • plugsmustard
      on/off button for custom furnace

      By plugsmustard · Posted 2 minutes ago

    • anothertime
      1.14 - hot swap fails in IDEA

      By anothertime · Posted 2 minutes ago

      I usually rebuild the module with build\build module but I've also tried run\reload changes after looking for a solution on the web but the result is the same
    • DaemonUmbra
      1.14 - hot swap fails in IDEA

      By DaemonUmbra · Posted 5 minutes ago

      Are you running the build manually with a gradle task or are you clicking run -> reload changed classes?
    • Draco18s
      on/off button for custom furnace

      By Draco18s · Posted 5 minutes ago

      You linked to a specific commit, so when I looked at it, it was the old commit where it wasn't changed. As far as I can tell, it should work. Can you post a screenshot of the error?   As for what you put here, you put the code that does whatever you want the button to do.
    • anothertime
      1.14 - hot swap fails in IDEA

      By anothertime · Posted 7 minutes ago

      Changes to the body of an existing method
  • Topics

    • plugsmustard
      55
      on/off button for custom furnace

      By plugsmustard
      Started Wednesday at 03:11 PM

    • anothertime
      4
      1.14 - hot swap fails in IDEA

      By anothertime
      Started 9 hours ago

    • matt1999rd
      4
      [1.14-newer] how to keep value when closing minecraft

      By matt1999rd
      Started 2 hours ago

    • matt1999rd
      15
      [1.14-newer] deprecated method onBlockActivated

      By matt1999rd
      Started November 1

    • JetCobblestone
      9
      [1.14] moving item assignment to a separate function

      By JetCobblestone
      Started 2 hours ago

  • Who's Online (See full list)

    • anothertime
    • plugsmustard
    • Nuparu00
    • CactusCoffee
    • diesieben07
    • DaemonUmbra
    • Iterator
    • Simon_kungen
    • Cerandior
    • LTNightshade
    • matt1999rd
    • vaartis
    • DragonITA
    • Draco18s
    • LorenzoPapi
    • loordgek
    • J0WAY
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • LivingAttackEvent called twice, on Client Side
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community