Jump to content

TileEntitySpecialRenderer not working on Server ?


DealerJoe

Recommended Posts

Hi Guys,

 

I´m DealerJoe and I´m new on this forum so please correct me if I do anything wrong.

Yesterday, I tried to change over from ModLoader to Forge.

 

Now my Problem:

 

I´ve got a mod which creates a new Block with a custom rendered BlockModel. Everything works in Singleplayer, but when I try to start the server with my mod, I get the following exception :

 

Description: Exception in server tick loop

java.lang.NoClassDefFoundError: net/minecraft/src/TileEntitySpecialRenderer
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Unknown Source)
   at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:407)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
   at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
   at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
   at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
   at com.google.common.eventbus.EventBus.post(EventBus.java:268)
   at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:124)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
   at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
   at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
   at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
   at com.google.common.eventbus.EventBus.post(EventBus.java:268)
   at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:81)
   at cpw.mods.fml.common.Loader.loadMods(Loader.java:466)
   at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:80)
   at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:340)
   at net.minecraft.src.DedicatedServer.startServer(DedicatedServer.java:49)
   at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:433)
   at net.minecraft.src.ThreadServerApplication.run(ThreadServerApplication.java:18)
Caused by: java.lang.ClassNotFoundException: net.minecraft.src.TileEntitySpecialRenderer
   at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:125)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   ... 29 more
Caused by: java.lang.NullPointerException
   at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:119)
   ... 31 more

 

So, I already looked at the sourcecode of a few other mods which also add custom block models but I couldn´t figure out where I did the mistake.

 

So, these are the Files I have (If I forgot something, please tell me, I´ll show you)

 

 

Mod-Files

 

My mod-file


package farmersfriends.common;


import java.net.Proxy;


import net.minecraft.src.Block;
import net.minecraft.src.Item;
import net.minecraft.src.ItemStack;
import net.minecraft.src.ModLoader;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Side;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.common.SidedProxy;


@Mod(modid="DealerJoeFM", name="Farmers Friends", version="1.0")
@NetworkMod(clientSideRequired=true, serverSideRequired=false)


public class mod_farmersfriends {


   public static final Block blockChopper = (new BlockChopper(250, TileEntityChopper.class)).setHardness(0.5F).setBlockName("chopperBlock");
   
   public static final Item chopper = (new ItemChopper(5500, blockChopper).setItemName("chopper").setIconIndex(0));
   public static final Item sawmeal = (new ItemSawmeal(5501).setItemName("sawmeal").setIconIndex(1));
   public static final Item farmersScythe = (new ItemScythe(5502).setItemName("farmersScythe").setIconIndex(2));
   public static final Item farmersScytheBloody = (new ItemScythe(5503).setItemName("farmersScytheBloody").setIconIndex(3));


   
   @Init
   public void load(FMLInitializationEvent e){
      GameRegistry.registerFuelHandler(new FuelHandler());
      
      RenderChopper renderChopper = new RenderChopper();


      ClientRegistry.registerTileEntity(TileEntityChopper.class, "TileEntityChopper", renderChopper);
      
      LanguageRegistry.addName(chopper, "Chopper");
      LanguageRegistry.addName(sawmeal, "Sawmeal");
      LanguageRegistry.addName(farmersScythe, "Farmers Scythe");
      LanguageRegistry.addName(farmersScytheBloody, "Farmers Bloody Scythe");
      
      GameRegistry.addRecipe(new ItemStack(chopper, 1), new Object[]{
         "  S","IIW","ILR", 'S', Item.stick, 'I', Item.ingotIron, 'W', Block.wood, 'R', Item.redstone, 'L', Item.leather
      });
      
      CommonProxyFm.proxy.registerRenderThings();
   }
   
}


 

 

My BlockFile

 


package farmersfriends.common;


import java.util.Random;


import net.minecraft.src.Block;
import net.minecraft.src.BlockContainer;
import net.minecraft.src.IBlockAccess;
import net.minecraft.src.Item;
import net.minecraft.src.ItemStack;
import net.minecraft.src.Material;
import net.minecraft.src.TileEntity;
import net.minecraft.src.World;


public class BlockChopper extends BlockContainer{
   private boolean isRunning = false;
   private int time;
   private int timeout = 80;
   
   private Class ChopperEntityClass;
   
   protected BlockChopper(int i, Class gClass){
      super(i, Material.wood);
      ChopperEntityClass = gClass;
   }
   
    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
       if(isRunning){
          time++;
          System.out.println(time);
       }
       if(time>timeout){
          time = 0;
          isRunning = false;
       }
       
       if(isRunning){
          par1World.spawnParticle("smoke", par2+0.5, par3+1.5, par4+0.5, 0.0D, 0.0D, 0.0D);
       }
    }
    
    public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
    {
       int blockId = par1World.getBlockId(par2, par3+1, par4);
       
       if(blockId == Block.wood.blockID ||blockId == Block.planks.blockID||blockId == Block.sapling.blockID )
       {
          this.isRunning = true;
          
          if(new Random().nextInt(10) < 4){
             ItemStack is = new ItemStack(mod_farmersfriends.sawmeal, 1);
             this.dropBlockAsItem_do(par1World, par2, par3+1, par4, is);
          }
          
          par1World.setBlock(par2, par3+1, par4, 0);
          
            /*mc.installResource("newsound/fm/chopper.ogg", 
                    new File(mc.mcDataDir, "resources/newsound/fm/chopper.ogg"));
          
          mc.sndManager.playSoundFX("fm.chopper", 5.0F, 1.0F);*/
          
          par1World.spawnParticle("smoke", par2, par3, par4, 0.0D, 0.0D, 0.0D);
       }
    }
   
   public int idDropped(int i, Random rand, int j){
      return mod_farmersfriends.chopper.shiftedIndex;
   }
   
   public int quantityDropped(Random rand){
      return 1;
   }
   
   public int getRenderType(){
      return -1;
   }
   
   public boolean isOpaqueCube(){
      return false;
   }
   
   public boolean renderAsNormalBlock(){
      return false;
   }


   @Override
   public TileEntity createNewTileEntity(World var1) {
      return new TileEntityChopper();
   }
}


 

My Render File

 




package farmersfriends.common;


import net.minecraft.src.TileEntity;
import net.minecraft.src.TileEntitySignRenderer;
import net.minecraft.src.TileEntitySpecialRenderer;
import net.minecraftforge.client.ForgeHooksClient;


import org.lwjgl.opengl.GL11;




public class RenderChopper extends TileEntitySpecialRenderer{


   private ModelChopper chopperModel;
   
   public RenderChopper(){
      chopperModel = new ModelChopper();
   }
   
   public void renderChopperModelAt(TileEntityChopper tileentity1, double d, double d1, double d2, float f){
      GL11.glPushMatrix();
      GL11.glTranslatef((float) d + 0.5F,(float) d1 + 1.5F,(float) d2 + 0.5F);
      GL11.glRotatef(180, 0, 0, 180);
      ForgeHooksClient.bindTexture("/farmer/chopper.png", 0);
      GL11.glPushMatrix();
      chopperModel.renderModel(0.0625F);
      GL11.glPopMatrix();
      GL11.glPopMatrix();
   }


   public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) {
      renderChopperModelAt((TileEntityChopper)var1, var2, var4, var6, var8);
   }


}


 

My TileEntityFile

 


package farmersfriends.common;


import net.minecraft.src.TileEntity;


public class TileEntityChopper extends TileEntity
{
   
}


 

The Common Proxy

 


package farmersfriends.common;


import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.registry.GameRegistry;


public class CommonProxyFm {
   @SidedProxy(clientSide = "farmersfriends.client.ClientProxyFm", serverSide = "farmersfriends.common.CommonProxyFm")
   public static CommonProxyFm proxy;   
   
   public void registerRenderThings(){   }
}


 

The Client Proxy

 


package farmersfriends.client;


import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraftforge.client.MinecraftForgeClient;
import farmersfriends.common.CommonProxyFm;
import farmersfriends.common.RenderChopper;
import farmersfriends.common.TileEntityChopper;


public class ClientProxyFm extends CommonProxyFm{
   @Override
    public void registerRenderThings()
    {
      MinecraftForgeClient.preloadTexture("/farmer/items.png");
      MinecraftForgeClient.preloadTexture("/farmer/blocks.png");
      MinecraftForgeClient.preloadTexture("/farmer/chopper.png");
   
      ClientRegistry.bindTileEntitySpecialRenderer(TileEntityChopper.class, new RenderChopper());
      //ClientRegistry.bindTileEntitySpecialRenderer(TileEntityChopper.class, new RenderChopper());
    }


}

 

 

 

 

I would be glad if anybody could help me with that problem.

 

 

Thanks

DealerJoe

Link to comment
Share on other sites

This:

   @SidedProxy(clientSide = "farmersfriends.client.ClientProxyFm", serverSide = "farmersfriends.common.CommonProxyFm")
   public static CommonProxyFm proxy;  

 

goes into your mod class, not in the CommonProxy class.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

This:

   @SidedProxy(clientSide = "farmersfriends.client.ClientProxyFm", serverSide = "farmersfriends.common.CommonProxyFm")
   public static CommonProxyFm proxy;  

 

goes into your mod class, not in the CommonProxy class.

 

You´re right, but I still get the same error.

Any other Ideas ?

Link to comment
Share on other sites

I see that your render file is in the common package. Move it into the src / client package

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

I actually saw these lines in your mod file:

      
      RenderChopper renderChopper = new RenderChopper();


      ClientRegistry.registerTileEntity(TileEntityChopper.class, "TileEntityChopper", renderChopper);

 

This has to go into your ClientProxy, maybe into your registerRenderStuff() method.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Turning the Tables: My Journey to Reclaim Stolen Bitcoins with Expert Help. When my Bitcoin wallet was hacked and my entire cryptocurrency portfolio was stolen, I felt utterly devastated and hopeless. Having worked hard to build up my digital assets, the sudden loss was gut-wrenching. It felt like my financial future had been ripped away in an instant, leaving me overwhelmed by a sense of betrayal and despair. In my search for help, I discovered TECH CYBER FORCE Recovery, a renowned cybersecurity firm specializing in cryptocurrency recovery. I was met with professionalism and empathy from my first contact with them. The team demonstrated a steadfast commitment to helping me retrieve my stolen Bitcoins. They understood the emotional toll of my situation and approached my case with genuine concern. TECH CYBER FORCE Recovery swung into action immediately, leveraging its extensive expertise in blockchain forensics and hacker tracking techniques. Their process was meticulous. They analyzed my transaction history, followed the digital trail left by the hackers, and worked diligently to pinpoint the location of the stolen funds. I was impressed by their technical prowess; they employed advanced cryptographic methods and strategic negotiations with the perpetrators, all while keeping me informed about their progress. The recovery process was complex and fraught with challenges. However, the tenacity displayed by the team was truly awe-inspiring. They navigated cryptocurrency crime's murky and ever-evolving landscape with skill and determination. After a series of strategic moves, they managed to recover the majority of my Bitcoins successfully.  
    • I removed giacomos_hud, oculus, (dont know what you mean with iris), enhanced_boss_bars, epicfight and essential.  Server still doesnt want to boot. new logs after removing: https://pastebin.com/LuM2PFtN I dont quite understand the "server side" and "client side" difference..
    • There are client side only mods in your server files   Remove giacomos_hud, oculus, iris, enhanced_boss_bars and epicfight You can keep these mods in your client Maybe also remove essentials
    • Here is my Log with java 17: https://pastebin.com/RPdWSjwq
    • Been working on creating a server for this mod, but i keep getting this error over and over again.  I have tried updating/changing the Forge launcher, Removing/replacing the ops.json and whitelist.json folders, and removing certain mods. Crash report log: https://pastebin.com/Bu046cVq Debug.log https://pastebin.com/7hKm40ke Latest.log https://pastebin.com/nCRLUH3b any help would be great thanks!
  • Topics

×
×
  • Create New...

Important Information

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