Jump to content

[1.7.10] How to make RenderEvent working on Server Side?


IlTosaerba

Recommended Posts

 

Hi modders,

I know that 1.7.10 is a bit out dated  but I must use this version form my mod.

My mod adds some crystal that give special powers. How this works?

Well, I created some Enchantments, then I add this Enchantments to an Item when this is put in an anvil with a crystal via the AnvilUpdateEvent in my EventHandler class. After doing this I check the special scenario always via the EventHandlers to do stuff. For example if you put in the anvil a sword and a blood crystal the sword obtain the "Life Steal" enchantment which heal u a bit after a kill. This works thanks to the LivingDeathEvent. The code (the imports are been deleted, don't know why):

 

Spoiler

package com.WLLC.mysticWeapons.handlers;

public class WLLC_myWE_BloodPowersEventHandler {

	@SubscribeEvent
	public void onLivingDeathEvent(LivingDeathEvent event) {
		
		//Check for lifeSteal Power
		if (event.source.getEntity() instanceof EntityPlayer) {
			
			EntityPlayer player = (EntityPlayer) event.source.getEntity();
			
			ItemStack heldItem = player.getHeldItem();
			
			int lifeStealEnchantmentLevel = EnchantmentHelper.getEnchantmentLevel(GlobalVariables.lifeSteal.effectId, heldItem);
			
			if (heldItem != null && lifeStealEnchantmentLevel > 0) {
			
				player.heal(1.0F * lifeStealEnchantmentLevel);
			
			}
			
		}
	}
	
	@SubscribeEvent
	public void addBloodPowerEvent(AnvilUpdateEvent event) {
		
		if (event.left.getItem() instanceof ItemSword && Item.getIdFromItem(event.right.getItem()) == Item.getIdFromItem(WLLC_myWE_Items.bloodCrystal)) {
					
			event.cost = 50;
			event.output = event.left.copy();
			event.output.addEnchantment(GlobalVariables.lifeSteal, 1);
			
		}
		
	}
	
}

 

 

Now, if u put in the anvil an armor piece and a dark Crystal the armor piece gain the "Assassin's Blessing" enchantment, which should make you invisible after a kill. Now, for make this works, over the events, I use a boolean variable. This is because I want to make all the pg invisible, even the armor and the held item. U know that if i add the potion effect (invisibility) to the player the armor and the held item will still visible. So i make the armor disappear thanks to the SetArmorModel event, which i discover be Client side only. If I play in my singleplayer world it all works, but when I test the mod in the server it doesen't work. Here's the code:

 


The handler for  the dark powers:
 

Spoiler

package com.WLLC.mysticWeapons.handlers;

import com.WLLC.mysticWeapons.GlobalVariables;
import com.WLLC.mysticWeapons.items.WLLC_myWE_Items;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraftforge.client.event.RenderPlayerEvent.SetArmorModel;
import net.minecraftforge.event.AnvilUpdateEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;

public class WLLC_myWE_DarkPowersEventHandler {

	@SubscribeEvent
	public void addDarkPowerEvent(AnvilUpdateEvent event) {
		
		if (event.left.getItem() instanceof ItemArmor && Item.getIdFromItem(event.right.getItem()) == Item.getIdFromItem(WLLC_myWE_Items.darkCrystal)) {
			
			event.cost = 50;
			event.output = event.left.copy();
			event.output.addEnchantment(GlobalVariables.assassinBlessing, 1);
			
		}
		
	}
	
	@SubscribeEvent
	public void onLivingDeathEvent(LivingDeathEvent event) {
		
		//Check for assassinBlessing Power
		if (event.source.getEntity() instanceof EntityPlayer) {
			
			EntityPlayer player = (EntityPlayer) event.source.getEntity();
			
			for (int i = 0; i<4; i++) {
				
				int assassinBlessingEnchantmentLevel = EnchantmentHelper.getEnchantmentLevel(GlobalVariables.assassinBlessing.effectId, player.inventory.armorItemInSlot(i));
				
				if (assassinBlessingEnchantmentLevel > 0) {
					
					player.addPotionEffect(new PotionEffect(Potion.invisibility.id, 159, 1, false));
					
					if (!GlobalVariables.assassinBlessingBonus) {
						
						GlobalVariables.assassinBlessingBonus = true;
                        	break;
					
					}
				
				}
				
			}
			
		}
		
	}
	
	//The check for the assassinBlessing Bonus is in ClientOnlyEventHandler 'cause its a Render event
	
}

 

 

 

The SetArmorModel event:
 

Spoiler

package com.WLLC.mysticWeapons.handlers;

import com.WLLC.mysticWeapons.GlobalVariables;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.client.event.RenderPlayerEvent.SetArmorModel;

public class WLLC_myWE_ClientOnlyEventHandler {

	@SubscribeEvent
	public void onArmorEvent(SetArmorModel event) {
		
		//Check for assassinBlessin Bonus
		if (event.entity instanceof EntityPlayer && GlobalVariables.assassinBlessingBonus) {
			
			if (((EntityPlayer) event.entity).isInvisible()){
				
				event.result = 0;
				
			} else {
				
				GlobalVariables.assassinBlessingBonus = false;
				
			}
			
		}
		
	}
	
}

 

 

 

My proxys (Client and Common):

 

Spoiler

package com.WLLC.mysticWeapons.proxy;

import com.WLLC.mysticWeapons.handlers.WLLC_myWE_ClientOnlyEventHandler;

import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.common.MinecraftForge;

public class ClientProxy extends CommonProxy{

	public void preInit(FMLPreInitializationEvent preEvent) {
		
		super.preInit(preEvent);
		
	}
	
	@Override
	public void init(FMLInitializationEvent event) {
		
		super.init(event);
		MinecraftForge.EVENT_BUS.register(new WLLC_myWE_ClientOnlyEventHandler());
		
	}

	public void postInit(FMLPostInitializationEvent postEvent) {
	
	super.postInit(postEvent);
	
}
	
}

 

Spoiler

package com.WLLC.mysticWeapons.proxy;

import com.WLLC.mysticWeapons.crafting.WLLC_myWE_Recipes;
import com.WLLC.mysticWeapons.handlers.WLLC_myWE_BloodPowersEventHandler;
import com.WLLC.mysticWeapons.handlers.WLLC_myWE_DarkPowersEventHandler;
import com.WLLC.mysticWeapons.handlers.WLLC_myWE_SoulPowersEventHandler;
import com.WLLC.mysticWeapons.items.WLLC_myWE_Items;

import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.common.MinecraftForge;

public class CommonProxy {

	public void preInit(FMLPreInitializationEvent preEvent) {
		
		WLLC_myWE_Items.initItems();
		
		WLLC_myWE_Recipes.initRecipes();
		
	}
	
	public void init(FMLInitializationEvent event) {
		
		MinecraftForge.EVENT_BUS.register(new WLLC_myWE_BloodPowersEventHandler());
		MinecraftForge.EVENT_BUS.register(new WLLC_myWE_SoulPowersEventHandler());
		MinecraftForge.EVENT_BUS.register(new WLLC_myWE_DarkPowersEventHandler());
		
	}

	public void postInit(FMLPostInitializationEvent postEvent) {
	
	
	
	}
	
}

 

 

 

And the GlobalVariables class:
 

Spoiler

 


package com.WLLC.mysticWeapons;

import com.WLLC.mysticWeapons.enchantments.WLLC_myWE_AssassinBlessing;
import com.WLLC.mysticWeapons.enchantments.WLLC_myWE_LifeSteal;
import com.WLLC.mysticWeapons.enchantments.WLLC_myWE_SolidAir;

import net.minecraft.enchantment.Enchantment;

public class GlobalVariables {

	public static final String MOD_ID = "wllc_mywe";
	public static final String MOD_NAME = "[WLLC]Mystic Weapons";
	public static final String VERSION = "V 1.0";
	
	public static final String WLLC_COMMON_PROXY = "com.WLLC.mysticWeapons.proxy.CommonProxy";
	public static final String WLLC_CLIENT_PROXY = "com.WLLC.mysticWeapons.proxy.ClientProxy";
	
	public static final Enchantment lifeSteal = new WLLC_myWE_LifeSteal(69, 5);
	public static final Enchantment solidAir = new WLLC_myWE_SolidAir(70, 5);
	public static final Enchantment assassinBlessing = new WLLC_myWE_AssassinBlessing(71, 5);
	
	public static boolean solidAirBonus = false;
	public static boolean assassinBlessingBonus = false;
}

 

There is a way to make it works also on server or should I give up?

Thx for the help

Link to comment
Share on other sites

1.7.10 is no longer supported on this forum.

Please use a modern version to receive support.

This is my Forum Signature, I am currently attempting to transform it into a small guide for fixing easier issues using spoiler blocks to keep things tidy.

 

As the most common issue I feel I should put this outside the main bulk:

The only official source for Forge is https://files.minecraftforge.net, and the only site I trust for getting mods is CurseForge.

If you use any site other than these, please take a look at the StopModReposts project and install their browser extension, I would also advise running a virus scan.

 

For players asking for assistance with Forge please expand the spoiler below and read the appropriate section(s) in its/their entirety.

Spoiler

Logs (Most issues require logs to diagnose):

Spoiler

Please post logs using one of the following sites (Thank you Lumber Wizard for the list):

https://gist.github.com/100MB Requires member (Free)

https://pastebin.com/: 512KB as guest, 10MB as Pro ($$$)

https://hastebin.com/: 400KB

Do NOT use sites like Mediafire, Dropbox, OneDrive, Google Drive, or a site that has a countdown before offering downloads.

 

What to provide:

...for Crashes and Runtime issues:

Minecraft 1.14.4 and newer:

Post debug.log

Older versions:

Please update...

 

...for Installer Issues:

Post your installer log, found in the same place you ran the installer

This log will be called either installer.log or named the same as the installer but with .log on the end

Note for Windows users:

Windows hides file extensions by default so the installer may appear without the .jar extension then when the .log is added the log will appear with the .jar extension

 

Where to get it:

Mojang Launcher: When using the Mojang launcher debug.log is found in .minecraft\logs.

 

Curse/Overwolf: If you are using the Curse Launcher, their configurations break Forge's log settings, fortunately there is an easier workaround than I originally thought, this works even with Curse's installation of the Minecraft launcher as long as it is not launched THROUGH Twitch:

Spoiler
  1. Make sure you have the correct version of Forge installed (some packs are heavily dependent on one specific build of Forge)
  2. Make a launcher profile targeting this version of Forge.
  3. Set the launcher profile's GameDir property to the pack's instance folder (not the instances folder, the folder that has the pack's name on it).
  4. Now launch the pack through that profile and follow the "Mojang Launcher" instructions above.

Video:

Spoiler

 

 

 

or alternately, 

 

Fallback ("No logs are generated"):

If you don't see logs generated in the usual place, provide the launcher_log.txt from .minecraft

 

Server Not Starting:

Spoiler

If your server does not start or a command window appears and immediately goes away, run the jar manually and provide the output.

 

Reporting Illegal/Inappropriate Adfocus Ads:

Spoiler

Get a screenshot of the URL bar or copy/paste the whole URL into a thread on the General Discussion board with a description of the Ad.

Lex will need the Ad ID contained in that URL to report it to Adfocus' support team.

 

Posting your mod as a GitHub Repo:

Spoiler

When you have an issue with your mod the most helpful thing you can do when asking for help is to provide your code to those helping you. The most convenient way to do this is via GitHub or another source control hub.

When setting up a GitHub Repo it might seem easy to just upload everything, however this method has the potential for mistakes that could lead to trouble later on, it is recommended to use a Git client or to get comfortable with the Git command line. The following instructions will use the Git Command Line and as such they assume you already have it installed and that you have created a repository.

 

  1. Open a command prompt (CMD, Powershell, Terminal, etc).
  2. Navigate to the folder you extracted Forge’s MDK to (the one that had all the licenses in).
  3. Run the following commands:
    1. git init
    2. git remote add origin [Your Repository's URL]
      • In the case of GitHub it should look like: https://GitHub.com/[Your Username]/[Repo Name].git
    3. git fetch
    4. git checkout --track origin/master
    5. git stage *
    6. git commit -m "[Your commit message]"
    7. git push
  4. Navigate to GitHub and you should now see most of the files.
    • note that it is intentional that some are not synced with GitHub and this is done with the (hidden) .gitignore file that Forge’s MDK has provided (hence the strictness on which folder git init is run from)
  5. Now you can share your GitHub link with those who you are asking for help.

[Workaround line, please ignore]

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

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