Jump to content

Recommended Posts

Posted

good days

im trying to fix some omisions in my first mod and there is this proxy thing, in the basic guides they dont speak much about proxy's,

now i been reading MinecraftByExample codes to realize how to use proxies, for whath i habe understood, there is this this to proxy's

for the way , commonProxy run in local world and server and here goes every item/block registry and the unlocalizated name variable

and clienProxy run just in local world and has the register textures to use whith the items,

 

so there is mi piece of mod whit just one item a bow "arcoMercenario"

 

package mercenarymod;

import mercenarymod.blocks.MercenaryModBlocks;
import mercenarymod.items.MercenaryModItems;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraft.creativetab.CreativeTabs;

@Mod(modid = Mercenary.MODID, version = Mercenary.VERSION)
public class Mercenary
{
    public static final String MODID = "modmercenario";
    public static final String VERSION = "1.7";
    
    public static SimpleNetworkWrapper network;
    
    // Says where the client and server 'proxy' code is loaded.
    @SidedProxy(clientSide="mercenario.ClientProxy", serverSide="mercenarymod.CommonProxy")
    public static CommonProxy proxy;
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    proxy.preInit(event);
    }
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    proxy.init(event);
    }
    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
    proxy.postInit(event);
    }
    
    public static CreativeTabs herramientas = new CreativeTabs("Herraminetas armas y\n armaduras mercenarias") {
        @Override
        @SideOnly(Side.CLIENT)
        public Item getTabIconItem() {
            //return MercenaryModItems.aceroMercenario;
              return Items.potato;
         }
    };

    public static CreativeTabs materiales = new CreativeTabs("materiales mercenarios") {
        @Override
        @SideOnly(Side.CLIENT)
        public Item getTabIconItem() {
            //return MercenaryModItems.nokiaMercenaria;
              return Items.potato;
        }
    };

      
    
}

 

eclipse make my add the "event" inside  proxy.preInit(event);  coz "The method preInit(FMLPreInitializationEvent) in the type CommonProxy is not applicable for the arguments ()"

 

 

mercenario.ClientProxy

package mercenarymod;

import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import mercenarymod.CommonProxy;
import mercenarymod.blocks.MercenaryModBlocks;
import mercenarymod.items.MercenaryModItems;

public class ClientProxy extends CommonProxy {
       
        @Override
        public void registerRenderers() {
                // This is for rendering entities and so forth later on
        }
        
        @Mod.EventHandler
        public void preInit(FMLPreInitializationEvent event) {
        Configuration config = new Configuration(event.getSuggestedConfigurationFile());	

        }
     
        @Mod.EventHandler
        public void init(FMLInitializationEvent event) {

        	ModelBakery.addVariantName(MercenaryModItems.arcoMercenario, new String[]{     
            		"modmercenario:arcos/arcomercenario/arcomercenario00",
            		"modmercenario:arcos/arcomercenario/arcomercenario01",
            		"modmercenario:arcos/arcomercenario/arcomercenario02",
            		"modmercenario:arcos/arcomercenario/arcomercenario03",
            		"modmercenario:arcos/arcomercenario/flechaMercenaria" });
          
            Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(MercenaryModItems.arcoMercenario,0 , 
            new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario00", "inventory"));
        }
     
        @Mod.EventHandler
        public void postInit(FMLPostInitializationEvent event) {
        }
}

 

mercenarymod.CommonProxy

package mercenarymod;

import mercenarymod.blocks.MercenaryModBlocks;
import mercenarymod.items.MercenaryModItems;
import net.minecraft.item.Item;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class CommonProxy {

        // Client stuff
        public void registerRenderers() {
                // Nothing here as the server doesn't render graphics or entities!
        }
        
        public static Item arcoMercenario;
        
        @Mod.EventHandler
        public void preInit(FMLPreInitializationEvent event) {
        	
        	arcoMercenario = (mercenarymod.items.arcos.arcoMercenario)(new mercenarymod.items.arcos.arcoMercenario().setUnlocalizedName("arcoMercenario"));
        	GameRegistry.registerItem(arcoMercenario, "arcoMercenario");
        }
     
        @Mod.EventHandler
        public void init(FMLInitializationEvent event) {
        }
     
        @Mod.EventHandler
        public void postInit(FMLPostInitializationEvent event) {
        }
}

 

the bow

 

mercenarymod.items.arcos.arcoMercenario.java

package mercenarymod.items.arcos;

import mercenarymod.Mercenary;
import mercenarymod.items.MercenaryModItems;
import mercenarymod.utilidades.chat;
import mercenarymod.utilidades.nbtMercenaria;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class arcoMercenario extends Item
{
    
   
    //public static String name = "arcoMercenario";
    
    int tick=0;
    int texturajson=0;
    boolean tighten=false;
    boolean animacion=false;
    boolean continuar=false;
        
    float f=0.0F;
    int municion=0;
    int municionMax=0;
    static int municionMax0=32;

    public arcoMercenario()
    {
    	
    	//setUnlocalizedName(Mercenary.MODID + "_" + name);
    	//GameRegistry.registerItem(this, name);
    	setCreativeTab(Mercenary.herramientas);
        this.maxStackSize = 1;
        this.setMaxDamage(500);
        
    }
    
  //######################################################################################3	
  	 @Override
  public ModelResourceLocation getModel(ItemStack arco, EntityPlayer playerIn, int useRemaining){
  	
  	ModelResourceLocation modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario00", "inventory");	 
  	animacion(arco, playerIn);
  	
  	if ((tick%10)==0){ //just to not check it every tick, it lags
  		
  	animacion=nbtMercenaria.getBooleantag(arco, "animacion");
  	//System.out.println("Animacion="+animacion);
  		
  	if(!animacion){
  	
  	tighten=false;
  	
  	}
  	}
  		
  	//System.out.println("textura="+textura);
  	switch(this.texturajson){
    default:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario00", "inventory") ;break;
  	case  1:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario01", "inventory") ;break;
  	case  2:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario02", "inventory") ;break;	
  	case  3:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario03", "inventory") ;break;
  	    	                }
  	  	
  	tick++;
  	if (tick>100){tick=0;nbtMercenaria.setBooleantag(arco, "animacion",false);animacion=false;}
    	return modelresourcelocation;
    	
  		}

  //####################################################################################3	
  void animacion(ItemStack arco, EntityPlayer playerIn){	 //int tick
  	
  	//System.out.println("()this.thick="+tick+" cambioDeBotella="+cambioDeBotella+" giro="+giro);
  	 
  	 if ((tighten)){
  	 System.out.println("tighten="+tick);	 
  	 switch (tick){
  	 case 0:  texturajson=0;f=0.50F;break;
  	 case 7:  texturajson=1;f=1.00F;break;
  	 case 14: texturajson=2;f=1.50F;break;
  	 case 21: texturajson=3;f=2.00F;break;
  	 case 28: if(continuar){tick=20;};break;
  	 case 30: texturajson=0;tick=0;nbtMercenaria.setBooleantag(arco, "animacion",false);tighten=false;break;
  	          }   }
  	 else{texturajson=0;}
  	 
  	 
  	 
  }

//####################################################################################3		

void inicializar(ItemStack arco){  //this do nothing for now

int municion=0;
int metadata=arco.getMetadata();

switch(metadata){
case 1: municion=municionMax0/2;break;
case 2: municion=municionMax0;break;
default:municion=0;break;
            	}

nbtMercenaria.setInttag(arco, "municion", municion);
nbtMercenaria.setBooleantag(arco, "animacion", false);
nbtMercenaria.setBooleantag(arco, "liberar", false);
nbtMercenaria.setInttag(arco, "cargador", 0);
nbtMercenaria.setInttag(arco, "textura", 0);			


}
  
//####################################################################################3
    public void onPlayerStoppedUsing(ItemStack arco, World worldIn, EntityPlayer playerIn, int timeLeft)
    {
    	
    	
    	if (!worldIn.isRemote){
    		
    	playerIn.inventory.consumeInventoryItem(MercenaryModItems.flechaMercenaria);	
    		
    	EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f );	
    		
    	worldIn.spawnEntityInWorld(entityarrow);	
    	
    	chat.chatdp(playerIn, "disparando f="+f);
    	
    	f=0.0F;
    	
    	nbtMercenaria.setBooleantag(arco, "animacion", false);
    	    	
    		
    	                       }
    	
    	
    	
    	texturajson=0;tick=0;tighten=false;continuar=false;
    	
    }

    public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn)
    {
    	//texturajson=0;tick=0;tighten=false;
        return stack;
        
    }

    public int getMaxItemUseDuration(ItemStack stack)
    {
        return 72000;
    }

    public EnumAction getItemUseAction(ItemStack stack)
    {
        return EnumAction.BOW;
    }

    
    //#####################################################################################3
    public ItemStack onItemRightClick(ItemStack arco, World worldIn, EntityPlayer playerIn)
    {
    	
    	if (!worldIn.isRemote){
    		/*
    		BlockPos ppos=playerIn.getPosition();
    		double x=ppos.getX();
    		double y=ppos.getY();
    		double z=ppos.getZ();
    		
    		EntityBreakingFX(worldIn, x, y, z, Items.emerald);
    		*/
    		
    		if (playerIn.capabilities.isCreativeMode 
    		|| playerIn.inventory.hasItem(MercenaryModItems.flechaMercenaria)){ //mercenaryArrow
    		//|| playerIn.inventory.hasItem(Items.arrow)){
    		
    		//municion=nbtMercenaria.getInttag(arco, "municion"); //not now
    		nbtMercenaria.setBooleantag(arco, "animacion", true);
    		animacion=true;
    		tighten=true;
    		//chat.chatdp(playerIn, "has item "+tick);
    		
    	                     }}
    	
    	if (tighten){
    		playerIn.setItemInUse(arco, this.getMaxItemUseDuration(arco));	
    		tick=0;
    		continuar=true;
    		//chat.chatdp(playerIn, "En Uso"+tick);  // in use
    		}
        
        return arco;
    }

    public int getItemEnchantability()
    {
        return 1;
    }
}

 

it shows no errors in eclipse but when try to run

 

08:00:08] [Client thread/ERROR] [FML]: Caught exception from modmercenario
java.lang.NullPointerException
at net.minecraft.client.resources.model.ModelBakery.addVariantName(ModelBakery.java:835) ~[forgeSrc-1.8-11.14.1.1336.jar:?]
at mercenarymod.ClientProxy.init(ClientProxy.java:38) ~[bin/:?]
at mercenarymod.Mercenary.init(Mercenary.java:61) ~[bin/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_76]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_76]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_76]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_76]
at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:518) ~[forgeSrc-1.8-11.14.1.1336.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_76]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_76]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_76]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_76]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) ~[forgeSrc-1.8-11.14.1.1336.jar:?]
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:187) ~[forgeSrc-1.8-11.14.1.1336.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_76]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_76]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_76]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_76]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:118) [LoadController.class:?]
at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:692) [Loader.class:?]
at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:291) [FMLClientHandler.class:?]
at net.minecraft.client.Minecraft.startGame(Minecraft.java:522) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:356) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:117) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_76]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_76]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_76]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_76]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:85) [start/:?]
at GradleStart.main(GradleStart.java:45) [start/:?]
[08:00:08] [Client thread/INFO] [sTDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:660]: ---- Minecraft Crash Report ----
// On the bright side, I bought you a teddy bear!

 

 

i need thath modelBakery  in CommonProxy to register the json's for the pulling animation but  lets remove it to later fix

 

now minecraft runs but there is no bow anywhere the register dont works i dunnot now why , an the modelBakery is an importan issue

coz eclipse says nothings wrong whith code i get mas i dont have any idea of whath coul be posibly wrong here

 

 

help please

 

 


 

 

Posted

Don't put @Mod.EventHandler in any class except the main class - it does not belong in your proxies at all.

 

Your client proxy extends the common, so you need to call 'super.whateverMethod' from each of your methods, otherwise the stuff in common proxy never gets called, meaning that your Item was never initialized and thus the crash.

Posted

good days 

 

alredy remove the notations "@Mod.EventHandler" in clienproxy and commondproxy and now i have some progress and some new questions

 

I set some systemouts to see whats working and now eclipse its ignoring the CommonProxy but is loading ClientProxy and CommonProxy is the one registering the items in to workaround i have to move the mercenaryModItems.init();  to the preInit() in the main class

 

whit this fix i get the items registered and now the bow works in eclipse

then compile it and put the jar in the server and this is odd very odd cos server is loading CommonProxy and do it whitout show any error

eclipse ignores commond proxy so i cant'n initialize mi items there,  but in minecraftServer it loads

 

anyway still having the same issue from long before, i have this item bow, it works in eclipse and if i put it in normal vainilla minecraft its works as well ,but when in a server it does nothing and sometimes desapear or become another item.

 

jumm so long the questions are,

 

-why is eclipse and vainilla minecraft ignoring this commond proxy  but server dont

-why this bow works in eclipse and vainilla minecraft but not in server

 

 

 

this is the source code https://drive.google.com/file/d/0B8sU_NyZQBd7Rk9VcXpLWWZTNXc/view?usp=sharing

 

this is the compiled mod https://drive.google.com/file/d/0B8sU_NyZQBd7ZmhNZThUZE9JSEU/view?usp=sharing

 

 

 

thi is log from server cmd

[08:43:27] [server thread/INFO] [sTDOUT]: [mercenarymod.CommonProxy:preInit:26]: ########


CommonProxy preInit()
08:43:27] [server thread/INFO] [FML]: Applying holder lookups
[08:43:27] [server thread/INFO] [FML]: Holder lookups applied
[08:43:27] [server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Loading properties
[08:43:27] [server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Default game type: SURVIVAL
[08:43:27] [server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Generating keypair
[08:43:27] [server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Starting Minecraft server on *:25565
[08:43:27] [server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer]: **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
[08:43:27] [server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer]: The server will make no attempt to authenticate usernames. Beware.
[08:43:27] [server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer]: While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.
[08:43:27] [server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer]: To change this, set "online-mode" to "true" in the server.properties file.
[08:43:27] [server thread/INFO] [sTDOUT]: [mercenarymod.CommonProxy:init:40]: ########


CommonProxy init()
[08:43:27] [server thread/INFO] [sTDOUT]: [com.example.examplemod.ExampleMod:init:18]: DIRT BLOCK >> tile.dirt
[08:43:28] [server thread/INFO] [sTDOUT]: [mercenarymod.CommonProxy:postInit:53]: ########


CommonProxy postInit()

 

clean

CommonProxy

package mercenarymod;

import mercenarymod.blocks.MercenaryModBlocks;
import mercenarymod.items.MercenaryModItems;
import net.minecraft.item.Item;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class CommonProxy {

        // Client stuff
        public void registerRenderers() {
                // Nothing here as the server doesn't render graphics or entities!
        }
        
        //@Mod.EventHandler
        public void preInit() {
        System.out.println("########\n\n\n CommonProxy preInit()");	       	
        
        //MercenaryModItems.init();
        }
   
        //@Mod.EventHandler
        public void init() {
       	System.out.println("########\n\n\n CommonProxy init()");	
        }
     
        //@Mod.EventHandler
        public void postInit() {
        System.out.println("########\n\n\n CommonProxy postInit()");	   		
        }
        
}

 

 

clean

ClientProxy

package mercenarymod;

import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import mercenarymod.CommonProxy;
import mercenarymod.blocks.MercenaryModBlocks;
import mercenarymod.items.MercenaryModItems;

public class ClientProxy extends CommonProxy {
     
        //@Override
        public void registerRenderers() {
        // This is for rendering entities and so forth later on
        }
        
        public void preInit(){
        System.out.println("########\n\n\n ClientProxy preInit()");	
        }
     
        public void init() {
  	System.out.println("########\n\n\n ClientProxy init()");
        mercenarymod.MercenaryModTexturas.init();
        }
     
        public void postInit() {	
        System.out.println("########\n\n\n ClientProxy postInit()");
        }
}

 

Posted

bueno

 

then this is the normal behavior

that whas the first thing i think,

but

in the greywolfs code he puts the items gameregistry and unlocalizated name in commonProxy, that dont work in mi code i dunot know why

 

then the mercenaryModitems.class  must be in the preinit from the main class to initializate all mi items this is the way i been seen it other codes

 

 

about the bow not working, this is just a scrap from all mi code i just get remove everything else, recipes, blocks, events, to make more easy the reason way this items fail, 

 

i have made a lot of items thath do something when rigth click, guns that shoot, chainsaw  , drills dinamite  but any of this items works when runing on a server

and now i I think the fault lies in the proxyes

 

in this case the bow must consume an arrow, thingten then release the arrow this is not happening when runing in the server but in eclipse or in minecraft normal game this works i have a video here to prove it

 

and this post is the begining of this threath 

http://www.minecraftforge.net/forum/index.php/topic,28397.0.html

 

and now then the question is the code i put on 7zip file this is the rigth way of using proxyes. ?

 

 

Posted

good nigths

this afthernoon

i get epiphany in a hangover and realize mi troubles

 

the magic word Override when i do long time ago the first handgun i forget to override the onitemrigthclick from then i do all the rest items reusing  this code  changing only just things i need to change, and realize to the trouble whith nbttags returning null was just becoze some tags get written on local world

 

this is the new clean code i gonna use to redo all the rest 

this one its workin on the server 

 

package mercenarymod.items.arcos;

import mercenarymod.Mercenary;
import mercenarymod.items.MercenaryModItems;
import mercenarymod.utilidades.chat;
import mercenarymod.utilidades.nbtMercenaria;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.stats.StatList;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class arcoMercenario extends Item
{
    
    public arcoMercenario()
    {
    	String name = "arcoMercenario";
    	setUnlocalizedName(Mercenary.MODID + "_" + name);
    	GameRegistry.registerItem(this, name);
    	setCreativeTab(Mercenary.herramientas);
        this.maxStackSize = 1;
        this.setMaxDamage(1000);
        
    }

   
//####################################################################################3	    
@Override
public ModelResourceLocation getModel(ItemStack arco, EntityPlayer playerIn, int useRemaining){

int tick;
    if (useRemaining>970){tick=30-(useRemaining-970);}
    else {tick=30;}
    
    
	ModelResourceLocation modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario00", "inventory");	 

	int municion= getInttag(arco, "municion");

	if(municion < 0 | municion > 9998){intialize(arco,playerIn);}

	int texturajson=getInttag(arco, "texturajson");
	boolean shoot = getBooleantag(arco, "shoot");


    switch(texturajson){
    case   0:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario00", "inventory") ;break;
	case   1:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario01", "inventory") ;break;
	case   2:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario02", "inventory") ;break;	
	case   3:modelresourcelocation = new ModelResourceLocation("modmercenario:arcos/arcomercenario/arcomercenario03", "inventory") ;break;
	    	            }

    if (shoot){
        	
    switch(tick){
    case 0:          setInttag(arco, "texturajson",0 );break;
    case 1:          setInttag(arco, "texturajson",1 );break;
    case 12:         setInttag(arco, "texturajson",2 );break;
    case 24:         setInttag(arco, "texturajson",3 );break;
       
                 }
    
        
    //System.out.println("useRemaining="+useRemaining+"\ntexturajson="+texturajson+"\n f="+getFloattag(arco, "strength")+" tick="+tick);
    //System.out.println("tick="+tick);
               }
     

	//setInttag(arco, "municion",10 );
   	return modelresourcelocation;
   	
		}



//#########################################################################3
@Override
public ItemStack onItemRightClick(ItemStack arco, World worldIn, EntityPlayer playerIn)
{

 //System.out.println(" On rigth click ");
 setBooleantag(arco, "shoot", true);
 playerIn.setItemInUse(arco, this.getMaxItemUseDuration(arco));

return arco; 
}

//####################################################################################3
@Override
public void onUsingTick(ItemStack arco, EntityPlayer player, int count)
{

}	 
@Override
public void onPlayerStoppedUsing(ItemStack arco, World worldIn, EntityPlayer playerIn, int timeLeft)
{
	int tick;
    if (timeLeft>970){tick=30-(timeLeft-970);}
    else {tick=30;}

 float f=((tick/30F)*3F);

  
 if (!worldIn.isRemote){

	    		 
    	playerIn.inventory.consumeInventoryItem(MercenaryModItems.flechaMercenaria);	
    		
    	EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f );	
    		
    	worldIn.spawnEntityInWorld(entityarrow);	
    	
    	//chat.chatdp(playerIn, "shooting force f="+f);
    		    	
    	setBooleantag(arco, "shoot", false);
    	
    	arco.damageItem(1, playerIn);//dañar con el uso
    	    	
    		
    	                       }
    	

}
@Override
public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn)
{
      return stack;
}


public int getMaxItemUseDuration(ItemStack stack)
{
     return 1000;
}

@Override
public EnumAction getItemUseAction(ItemStack stack)
{

     return EnumAction.BOW;
}

//#########################################################################3 

public static void intialize(ItemStack arco, EntityPlayer playerIn){

//System.out.println("#\n#\n#\n Incializacion");

setInttag(arco, "texturajson", 0);
setInttag(arco, "municion", 0);
setBooleantag(arco, "reload", false);
setBooleantag(arco, "shoot", false);
setBooleantag(arco, "unload", false);
setFloattag(arco, "strength", 0.0F);


}

//#########################################################################3

public static int getInttag(ItemStack its, String tag){	

NBTTagCompound nsInt = new NBTTagCompound();

try {

	NBTTagCompound exi= its.getTagCompound();
	int ex=exi.getInteger(tag); 
	return ex;
  
} catch (Throwable any) {
 	return 9999;

}

}

//#########################################################################3

public static void setInttag(ItemStack its, String tag, int value){

try{
NBTTagCompound nsInt= its.getTagCompound();
nsInt.setInteger(tag, value);
its.setTagCompound(nsInt);

}catch(Throwable any) {

NBTTagCompound nsInt = new NBTTagCompound();
nsInt.setInteger(tag, value);	
its.setTagCompound(nsInt);	

}}
//#########################################################################3
public static float getFloattag(ItemStack its, String tag){	

NBTTagCompound nsInt = new NBTTagCompound();

try {

	NBTTagCompound exi= its.getTagCompound();
	float ex=exi.getFloat(tag); 
	return ex;
  
} catch (Throwable any) {
 	return 9999.00F;

}

}

//#########################################################################3

public static void setFloattag(ItemStack its, String tag, float value){

try{
NBTTagCompound nsInt= its.getTagCompound();
nsInt.setFloat(tag, value);
its.setTagCompound(nsInt);

}catch(Throwable any) {

NBTTagCompound nsInt = new NBTTagCompound();
nsInt.setFloat(tag, value);	
its.setTagCompound(nsInt);	

}}
//#########################################################################3

public static Boolean getBooleantag(ItemStack its, String tag){	

	NBTTagCompound nsInt = new NBTTagCompound();

	try {

		NBTTagCompound exi= its.getTagCompound();
		boolean ex=exi.getBoolean(tag);  
		return ex;
	  
 } catch (Throwable any) {
	 	return false;

 }

}

//#########################################################################3

public static void setBooleantag(ItemStack its, String tag, boolean value){

	try{
	NBTTagCompound nsInt= its.getTagCompound();
	nsInt.setBoolean(tag, value);
	its.setTagCompound(nsInt);

	}catch(Throwable any) {

	NBTTagCompound nsInt = new NBTTagCompound();
	nsInt.setBoolean(tag, value);	
	its.setTagCompound(nsInt);	

}}	



//#########################################################################3

public int getItemEnchantability()
{
    return 1;
}
    
//#########################################################################3	
    
    
}

 

there is still this little one misbehavior

when using the bow it begins to swing the bow , but is not like the swing of the pickaxe  this is more like,

let say i have a rawMutton on slot 0 of the hotbar and a block of wool in the second slot

and i change from slot 0 to slot 2 the rawMutton goes down and the block of wool cames up,

i think this is the behaviour of changin json files but dont understand why is happen to my items but is not hapening in the vainilla bow change texture

 

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

    • Version 1.19 - Forge 41.0.63 I want to create a wolf entity that I can ride, so far it seems to be working, but the problem is that when I get on the wolf, I can’t control it. I then discovered that the issue is that the server doesn’t detect that I’m riding the wolf, so I’m struggling with synchronization. However, it seems to not be working properly. As I understand it, the server receives the packet but doesn’t register it correctly. I’m a bit new to Java, and I’ll try to provide all the relevant code and prints *The comments and prints are translated by chatgpt since they were originally in Spanish* Thank you very much in advance No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. MountableWolfEntity package com.vals.valscraft.entity; import com.vals.valscraft.network.MountSyncPacket; import com.vals.valscraft.network.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.network.PacketDistributor; public class MountableWolfEntity extends Wolf { private boolean hasSaddle; private static final EntityDataAccessor<Byte> DATA_ID_FLAGS = SynchedEntityData.defineId(MountableWolfEntity.class, EntityDataSerializers.BYTE); public MountableWolfEntity(EntityType<? extends Wolf> type, Level level) { super(type, level); this.hasSaddle = false; } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(DATA_ID_FLAGS, (byte)0); } public static AttributeSupplier.Builder createAttributes() { return Wolf.createAttributes() .add(Attributes.MAX_HEALTH, 20.0) .add(Attributes.MOVEMENT_SPEED, 0.3); } @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.getItem() == Items.SADDLE && !this.hasSaddle()) { if (!player.isCreative()) { itemstack.shrink(1); } this.setSaddle(true); return InteractionResult.SUCCESS; } else if (!level.isClientSide && this.hasSaddle()) { player.startRiding(this); MountSyncPacket packet = new MountSyncPacket(true); // 'true' means the player is mounted NetworkHandler.CHANNEL.sendToServer(packet); // Ensure the server handles the packet return InteractionResult.SUCCESS; } return InteractionResult.PASS; } @Override public void travel(Vec3 travelVector) { if (this.isVehicle() && this.getControllingPassenger() instanceof Player) { System.out.println("The wolf has a passenger."); System.out.println("The passenger is a player."); Player player = (Player) this.getControllingPassenger(); // Ensure the player is the controller this.setYRot(player.getYRot()); this.yRotO = this.getYRot(); this.setXRot(player.getXRot() * 0.5F); this.setRot(this.getYRot(), this.getXRot()); this.yBodyRot = this.getYRot(); this.yHeadRot = this.yBodyRot; float forward = player.zza; float strafe = player.xxa; if (forward <= 0.0F) { forward *= 0.25F; } this.flyingSpeed = this.getSpeed() * 0.1F; this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 1.5F); this.setDeltaMovement(new Vec3(strafe, travelVector.y, forward).scale(this.getSpeed())); this.calculateEntityAnimation(this, false); } else { // The wolf does not have a passenger or the passenger is not a player System.out.println("No player is mounted, or the passenger is not a player."); super.travel(travelVector); } } public boolean hasSaddle() { return this.hasSaddle; } public void setSaddle(boolean hasSaddle) { this.hasSaddle = hasSaddle; } @Override protected void dropEquipment() { super.dropEquipment(); if (this.hasSaddle()) { this.spawnAtLocation(Items.SADDLE); this.setSaddle(false); } } @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.START) { MinecraftServer server = net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(); if (server != null) { for (ServerPlayer player : server.getPlayerList().getPlayers()) { if (player.isPassenger() && player.getVehicle() instanceof MountableWolfEntity) { MountableWolfEntity wolf = (MountableWolfEntity) player.getVehicle(); System.out.println("Tick: " + player.getName().getString() + " is correctly mounted on " + wolf); } } } } } private boolean lastMountedState = false; @Override public void tick() { super.tick(); if (!this.level.isClientSide) { // Only on the server boolean isMounted = this.isVehicle() && this.getControllingPassenger() instanceof Player; // Only print if the state changed if (isMounted != lastMountedState) { if (isMounted) { Player player = (Player) this.getControllingPassenger(); // Verify the passenger is a player System.out.println("Server: Player " + player.getName().getString() + " is now mounted."); } else { System.out.println("Server: The wolf no longer has a passenger."); } lastMountedState = isMounted; } } } @Override public void addPassenger(Entity passenger) { super.addPassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(true)); } } } @Override public void removePassenger(Entity passenger) { super.removePassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is no longer mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(false)); } } } @Override public boolean isControlledByLocalInstance() { Entity entity = this.getControllingPassenger(); return entity instanceof Player; } @Override public void positionRider(Entity passenger) { if (this.hasPassenger(passenger)) { double xOffset = Math.cos(Math.toRadians(this.getYRot() + 90)) * 0.4; double zOffset = Math.sin(Math.toRadians(this.getYRot() + 90)) * 0.4; passenger.setPos(this.getX() + xOffset, this.getY() + this.getPassengersRidingOffset() + passenger.getMyRidingOffset(), this.getZ() + zOffset); } } } MountSyncPacket package com.vals.valscraft.network; import com.vals.valscraft.entity.MountableWolfEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class MountSyncPacket { private final boolean isMounted; public MountSyncPacket(boolean isMounted) { this.isMounted = isMounted; } public void encode(FriendlyByteBuf buffer) { buffer.writeBoolean(isMounted); } public static MountSyncPacket decode(FriendlyByteBuf buffer) { return new MountSyncPacket(buffer.readBoolean()); } public void handle(NetworkEvent.Context context) { context.enqueueWork(() -> { ServerPlayer player = context.getSender(); // Get the player from the context if (player != null) { // Verifies if the player has dismounted if (!isMounted) { Entity vehicle = player.getVehicle(); if (vehicle instanceof MountableWolfEntity wolf) { // Logic to remove the player as a passenger wolf.removePassenger(player); System.out.println("Server: Player " + player.getName().getString() + " is no longer mounted."); } } } }); context.setPacketHandled(true); // Marks the packet as handled } } networkHandler package com.vals.valscraft.network; import com.vals.valscraft.valscraft; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class NetworkHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation(valscraft.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals ); public static void init() { int packetId = 0; // Register the mount synchronization packet CHANNEL.registerMessage( packetId++, MountSyncPacket.class, MountSyncPacket::encode, MountSyncPacket::decode, (msg, context) -> msg.handle(context.get()) // Get the context with context.get() ); } }  
    • Do you use features of inventory profiles next (ipnext) or is there a change without it?
    • Remove rubidium - you are already using embeddium, which is a fork of rubidium
  • Topics

×
×
  • Create New...

Important Information

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